Index: openacs-4/packages/xowiki/tcl/form-field-procs.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/xowiki/tcl/form-field-procs.tcl,v
diff -u -r1.284.2.8 -r1.284.2.9
--- openacs-4/packages/xowiki/tcl/form-field-procs.tcl 8 May 2019 19:59:56 -0000 1.284.2.8
+++ openacs-4/packages/xowiki/tcl/form-field-procs.tcl 10 May 2019 22:53:10 -0000 1.284.2.9
@@ -2488,19 +2488,23 @@
:config_from_category_tree [:category_tree]
}
next
+ #
# For required enumerations, the implicit default value is the
# first entry of the options. This is as well the value, which is
# returned from the browser in such cases.
+ #
if {[:required] && ${:value} eq ""} {
set :value [lindex ${:options} 0 1]
}
}
enumeration abstract instproc render_input {}
enumeration instproc get_labels {values} {
- if {[:multiple]} {
+ if {${:multiple}} {
set labels [list]
- foreach v $values {lappend labels [list [:get_entry_label $v] $v]}
+ foreach v $values {
+ lappend labels [list [:get_entry_label $v] $v]
+ }
return $labels
} else {
return [list [list [:get_entry_label $values] $values]]
@@ -2720,60 +2724,86 @@
candidate_box_select set abstract 1
candidate_box_select instproc render_input {} {
- #:msg "mul=[:multiple]"
+ #:msg "mul ${:multiple} dnd ${:dnd}"
# makes only sense currently for multiple selects
+
if {[:multiple] && [:dnd]} {
+
if {[info exists :disabled] && [:disabled]} {
html::t -disableOutputEscaping [:pretty_value [:value]]
} else {
- # utilities.js aggregates "yahoo, dom, event, connection, animation, dragdrop"
- set ajaxhelper 0
- ::xowiki::Includelet require_YUI_JS -ajaxhelper $ajaxhelper "utilities/utilities.js"
- ::xowiki::Includelet require_YUI_JS -ajaxhelper $ajaxhelper "selector/selector-min.js"
- ::xo::Page requireJS "/resources/xowiki/yui-selection-area.js"
-
- set js ""
+ ::xo::Page requireJS "/resources/xowiki/selection-area.js"
+ set count 0
+ set selected {}
+ set candidates {}
+
foreach o ${:options} {
lassign $o label rep
- set js_label [::xowiki::Includelet js_encode $label]
- set js_rep [::xowiki::Includelet js_encode $rep]
- append js "YAHOO.xo_sel_area.DDApp.values\['$js_label'\] = '$js_rep';\n"
- append js "YAHOO.xo_sel_area.DDApp.dict\['$js_rep'\] = '$js_label';\n"
+ if {$rep in ${:value}} {
+ lappend selected $rep
+ } else {
+ lappend candidates $rep
+ }
+ dict set labels $rep label $label
+ #dict set labels $rep label $rep
+ dict set labels $rep serial [incr count]
}
- ::html::div -class workarea {
- ::html::h3 { ::html::t "#xowiki.Selection#"}
- set values ""
- foreach v [:value] {
- append values $v \n
- set __values($v) 1
+ html::div -class candidate-selection -id ${:id} {
+ #
+ # Internal representation
+ #
+ ::html::textarea -id ${:id}.text -name ${:name} {
+ ::html::t [join ${:value} \n]
}
- :CSSclass selection
- set :cols 30
- set atts [:get_attributes id name disabled {CSSclass class}]
-
- # TODO what todo with DISABLED?
- ::html::textarea [:get_attributes id name cols rows style {CSSclass class} disabled] {
- ::html::t $values
+
+ #
+ # Selections
+ #
+ ::html::div -class workarea {
+ ::html::h3 { ::html::t "#xowiki.Selection#"}
+ # TODO what todo with DISABLED?
+ ::html::ul -class "region selected" \
+ -id ${:id}.selected \
+ -ondrop "drop_handler(event);" \
+ -ondragover "dragover_handler(event);" {
+ foreach v $selected {
+ ::html::li \
+ -class selection \
+ -draggable true \
+ -id ${:id}.selected.[dict get $labels $v serial] \
+ -data-value $v \
+ -ondragstart "dragstart_handler(event);" {
+ ::html::t [dict get $labels $v label]
+ }
+ }
+ }
}
- }
- ::html::div -class workarea {
- ::html::h3 { ::html::t "#xowiki.Candidates#"}
- ::html::ul -id ${:id}_candidates -class region {
- #:msg ${:options}
- foreach o ${:options} {
- lassign $o label rep
- # Don't show current values under candidates
- if {[info exists __values($rep)]} continue
- ::html::li -class candidates {::html::t $rep}
- }
+ #
+ # Candidates
+ #
+ ::html::div -class workarea {
+ ::html::h3 { ::html::t "#xowiki.Candidates#"}
+ ::html::ul -id ${:id}_candidates -class region \
+ -ondrop "drop_handler(event);" \
+ -ondragover "dragover_handler(event);" {
+ foreach v $candidates {
+ ::html::li \
+ -class candidates \
+ -draggable true \
+ -id ${:id}.[dict get $labels $v serial] \
+ -data-value $v \
+ -ondragstart "dragstart_handler(event);" {
+ ::html::t [dict get $labels $v label]
+ }
+ }
+ }
}
}
::html::div -class visual-clear {
;# maybe some comment
}
- ::html::script -nonce [security::csp::nonce] { html::t $js }
}
} else {
next
@@ -2809,22 +2839,33 @@
}
abstract_page instproc get_entry_label {value} {
- set item_id [::${:package_id} lookup -parent_id [${:object} parent_id] -name $value]
- if {$item_id} {
- return [::xo::cc cache [list :fetch_entry_label [:entry_label] $item_id]]
+ foreach o ${:options} {
+ lassign $o label rep
+ if {$value eq $rep} {
+ return $label
+ }
}
return ""
}
+
abstract_page instproc pretty_value {v} {
set parent_id [${:object} parent_id]
set package ::${:package_id}
set :options [:get_labels $v]
if {[:multiple]} {
+ set default_lang [$package default_language]
+ set root_folder [$package folder_id]
+ set package_root [$package package_url]
foreach o ${:options} {
lassign $o label value
- set href [$package pretty_link -parent_id $parent_id $value]
- set labels($value) "$label"
+ #
+ # "value" is an item_ref. Resolve it (assuming this works) and
+ # prepend the package root URL)
+ #
+ set item_info [$package item_ref -default_lang $default_lang -parent_id $root_folder $value]
+ set href $package_root[dict get $item_info link]
+ set labels($value) "[ns_quotehtml $label]"
}
set hrefs [list]
foreach i $v {
@@ -2885,8 +2926,11 @@
if {$form_objs eq ""} {error "Cannot lookup Form '$form_name'"}
set :form_object_item_ids [list]
- foreach form_obj $form_objs {lappend :form_object_item_ids [$form_obj item_id]}
+ foreach form_obj $form_objs {
+ lappend :form_object_item_ids [$form_obj item_id]
+ }
}
+
form_page instproc compute_options {} {
#:msg "${:name} compute_options [info exists :form]"
if {![info exists :form]} {
@@ -2918,23 +2962,18 @@
set :options [list]
foreach i [$items children] {
#
- # If the form_page has a different package_id, prepend the
- # package_url to the name. TODO: We assume here, that the form_pages
- # have no special parent_id.
- #
- set object_package_id [$i package_id]
- if {${:package_id} != $object_package_id} {
- set package_prefix /[::$object_package_id package_url]
- } else {
- set package_prefix ""
- }
-
- lappend :options [list [$i property ${:entry_label}] $package_prefix[$i name]]
+ # Compute the item_ref of the page. The item_ref has the
+ # advantage over an href that it is easier relocatable via clipboard.
+ #
+ set package_id [$i package_id]
+ set folder_path [$package_id folder_path -parent_id [$i parent_id]]
+ set item_ref $folder_path[$i name]
+ #ns_log notice "instance_select name [$i name] pl [$i pretty_link] PATH <$folder_path>"
+ lappend :options [list [$i property ${:entry_label}] $item_ref]
}
}
- form_page instproc pretty_value {v} {
- set :options [:get_labels $v]
+ form_page instproc pretty_value {values} {
if {![info exists :form_object_item_ids]} {
error "No forms specified for form_field '${:name}'"
}
Index: openacs-4/packages/xowiki/tcl/includelet-procs.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/xowiki/tcl/includelet-procs.tcl,v
diff -u -r1.239.2.9 -r1.239.2.10
--- openacs-4/packages/xowiki/tcl/includelet-procs.tcl 8 May 2019 19:59:56 -0000 1.239.2.9
+++ openacs-4/packages/xowiki/tcl/includelet-procs.tcl 10 May 2019 22:53:10 -0000 1.239.2.10
@@ -737,7 +737,9 @@
return [:category_tree_missing -name $tree_name -edit_html $edit_html]
}
- if {![info exists :id]} {set :id [::xowiki::Includelet html_id [self]]}
+ if {![info exists :id]} {
+ set :id [::xowiki::Includelet html_id [self]]
+ }
foreach tree $trees {
lassign $tree tree_id my_tree_name ...
Fisheye: Tag 1.1 refers to a dead (removed) revision in file `openacs-4/packages/xowiki/www/resources/selection-area.js'.
Fisheye: No comparison available. Pass `N' to diff?
Index: openacs-4/packages/xowiki/www/resources/xowiki.css
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/xowiki/www/resources/xowiki.css,v
diff -u -r1.64 -r1.64.2.1
--- openacs-4/packages/xowiki/www/resources/xowiki.css 20 Mar 2018 21:47:49 -0000 1.64
+++ openacs-4/packages/xowiki/www/resources/xowiki.css 10 May 2019 22:53:10 -0000 1.64.2.1
@@ -340,11 +340,11 @@
margin: 0px; padding: 0px;
}
-/* for yui dnd stuff */
-div.xowiki-content div.workarea { padding-right: 10px; float:left; }
-div.xowiki-content div.workarea h3 { margin-top: 0px; margin-bottom: 0.5ex;}
+/* for dnd stuff */
+div.candidate-selection div.workarea { padding-right: 10px; float:left; }
+div.candidate-selection div.workarea h3 { margin-top: 0px; margin-bottom: 0.5ex;}
-div.xowiki-content ul.region {
+div.candidate-selection ul.region {
border: 1px solid gray;
position: relative;
width: 300px;
@@ -359,21 +359,25 @@
padding-bottom:3ex;
}
-div.xowiki-content ul.region li {
+div.candidate-selection ul.region li {
margin: 1px;
cursor: move;
}
-div.xowiki-content li.candidates {
+div.candidate-selection li.candidates {
background-color: #D1E6EC;
border:1px solid #7EA6B2;
}
-div.xowiki-content li.selection {
+div.candidate-selection li.selection {
background-color: #D8D4E2;
border:1px solid #6B4C86;
}
+div.candidate-selection textarea {
+ display: none;
+}
+
div.xowiki-content div.book ul.page_order_region {
border: 0px solid gray;
width: 100%;
Fisheye: Tag 1.4.6.1 refers to a dead (removed) revision in file `openacs-4/packages/xowiki/www/resources/yui-selection-area.js'.
Fisheye: No comparison available. Pass `N' to diff?