*/
dojo.declare(
"openils.vandelay.TreeDndSource", dijit._tree.dndSource, {
- "_is_replaceable": function(spoint, dpoint) {
+ "_is_replaceable": function(spoint, dpoint, disroot) {
/* An OP can replace anything, but non-OPs can only replace other
- * non-OPs
+ * non-OPs, EXCEPT when the dest is the root node (this allows
+ * for simple "trees" with only a single non-OP node.
*/
- if (spoint.bool_op())
+ if (disroot)
+ return true;
+ else if (spoint.bool_op())
return true;
else if (!dpoint.bool_op())
return true;
if (!source._ready || source == this) return;
if (this.tree.model.replace_mode) {
+ var ditem = dijit.getEnclosingWidget(target).item;
return (
position == "over" && this._is_replaceable(
source.getAllNodes()[0].match_point,
- this.tree.model.store.getValue(
- dijit.getEnclosingWidget(target).item,
- "match_point"
- )
+ this.tree.model.store.getValue(ditem, "match_point"),
+ ditem === this.tree.model.root
)
);
} else {
if (k == "id") continue; /* can't use this / don't need it */
store.setValue(item, k, new_params[k]);
}
+ if (this.tree.model.root === item) { /* replacing root node */
+ if (!new_params.match_point.bool_op()) {
+ /* If we're here, we've replaced the root node with
+ * something that isn't a bool op, so we need to nuke
+ * any children that the item has.
+ */
+ store.setValue(item, "children", []);
+ }
+ }
if (typeof(window.render_vmsp_label) == "function") {
store.setValue(
item,
this._init.apply(this, arguments);
}
-/* XXX replace later with code that will suit this function's purpose
- * as well as that of update_draggable. */
function render_vmsp_label(point) {
/* quick and dirty */
if (point.bool_op()) {
*
*/
function dojoize_match_set_tree(point, refgen) {
- /* XXX TODO test with deeper trees! */
var root = false;
if (!refgen) {
if (!point) {
return results;
}
-function render_match_set_description(match_set) {
+function render_vms_metadata(match_set) {
dojo.byId("vms-name").innerHTML = match_set.name();
dojo.byId("vms-owner").innerHTML =
aou.findOrgUnit(match_set.owner()).name();
return;
}
- var match_set = pcrud.retrieve("vms", CGI.param("match_set"));
- render_match_set_description(match_set);
+ render_vms_metadata(pcrud.retrieve("vms", CGI.param("match_set")));
- /* XXX No-one should have hundreds of these or anything, but theoretically
+ /* No-one should have hundreds of these or anything, but theoretically
* this could be problematic with a big enough list of crad objects. */
- _crads = pcrud.retrieveAll(
- "crad", {"order_by": {"crad": "label"}}
- );
+ _crads = pcrud.retrieveAll("crad", {"order_by": {"crad": "label"}});
var match_set_tree = fieldmapper.standardRequest(
["open-ils.vandelay", "open-ils.vandelay.match_set.get_tree"],
dojo.connect(
src, "onDndDrop", null,
function(source, nodes, copy, target) {
- /* XXX because of the... interesting... characteristics of DnD
+ /* Because of the... interesting... characteristics of DnD
* design in dojo/dijit (at least as of 1.3), this callback will
* fire both for our working node dndSource and for the tree!
*/
if (source == this)
- node_editor.clear(); /* because otherwise this acts like a copy! */
+ node_editor.clear(); /* ... because otherwise this acts like a
+ copy operation no matter what the user
+ does, even though we really want a
+ "move." */
}
);
progress_dialog.hide();