You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tapestry.apache.org by jk...@apache.org on 2007/01/21 19:26:26 UTC

svn commit: r498423 [24/30] - in /tapestry/tapestry4/trunk: .settings/ eclipse/ tapestry-examples/TimeTracker/src/context/WEB-INF/ tapestry-examples/TimeTracker/src/java/org/apache/tapestry/timetracker/dao/ tapestry-examples/TimeTracker/src/java/org/ap...

Added: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/widget/Tree.js
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/widget/Tree.js?view=auto&rev=498423
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/widget/Tree.js (added)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/widget/Tree.js Sun Jan 21 10:25:59 2007
@@ -0,0 +1,39 @@
+
+dojo.provide("dojo.widget.Tree");dojo.require("dojo.widget.*");dojo.require("dojo.event.*");dojo.require("dojo.io.*");dojo.require("dojo.widget.HtmlWidget");dojo.require("dojo.widget.TreeNode");dojo.require("dojo.html.common");dojo.require("dojo.html.selection");dojo.widget.defineWidget("dojo.widget.Tree", dojo.widget.HtmlWidget, function() {this.eventNames = {};this.tree = this;this.DNDAcceptTypes = [];this.actionsDisabled = [];},{widgetType: "Tree",eventNamesDefault: {createDOMNode: "createDOMNode",treeCreate: "treeCreate",treeDestroy: "treeDestroy",treeClick: "treeClick",iconClick: "iconClick",titleClick: "titleClick",moveFrom: "moveFrom",moveTo: "moveTo",addChild: "addChild",removeNode: "removeNode",expand: "expand",collapse: "collapse"
+},isContainer: true,DNDMode: "off",lockLevel: 0,strictFolders: true,DNDModes: {BETWEEN: 1,ONTO: 2
+},DNDAcceptTypes: "",templateCssPath: dojo.uri.moduleUri("dojo", "widget/templates/images/Tree/Tree.css"),templateString: '<div class="dojoTree"></div>',isExpanded: true,isTree: true,objectId: "",controller: "",selector: "",menu: "",expandLevel: "",blankIconSrc: dojo.uri.moduleUri("dojo", "widget/templates/images/Tree/treenode_blank.gif"),gridIconSrcT: dojo.uri.moduleUri("dojo", "widget/templates/images/Tree/treenode_grid_t.gif"),gridIconSrcL: dojo.uri.moduleUri("dojo", "widget/templates/images/Tree/treenode_grid_l.gif"),gridIconSrcV: dojo.uri.moduleUri("dojo", "widget/templates/images/Tree/treenode_grid_v.gif"),gridIconSrcP: dojo.uri.moduleUri("dojo", "widget/templates/images/Tree/treenode_grid_p.gif"),gridIconSrcC: dojo.uri.moduleUri("dojo", "widget/templates/images/Tree/treenode_grid_c.gif"),gridIconSrcX: dojo.uri.moduleUri("dojo", "widget/templates/images/Tree/treenode_grid_x.gif"),gridIconSrcY: dojo.uri.moduleUri("dojo", "widget/templates/images/Tree/treenode_grid_y.gif
 "),gridIconSrcZ: dojo.uri.moduleUri("dojo", "widget/templates/images/Tree/treenode_grid_z.gif"),expandIconSrcPlus: dojo.uri.moduleUri("dojo", "widget/templates/images/Tree/treenode_expand_plus.gif"),expandIconSrcMinus: dojo.uri.moduleUri("dojo", "widget/templates/images/Tree/treenode_expand_minus.gif"),expandIconSrcLoading: dojo.uri.moduleUri("dojo", "widget/templates/images/Tree/treenode_loading.gif"),iconWidth: 18,iconHeight: 18,showGrid: true,showRootGrid: true,actionIsDisabled: function(action) {var _this = this;return dojo.lang.inArray(_this.actionsDisabled, action)
+},actions: {ADDCHILD: "ADDCHILD"
+},getInfo: function() {var info = {widgetId: this.widgetId,objectId: this.objectId
+}
+return info;},initializeController: function() {if (this.controller != "off") {if (this.controller) {this.controller = dojo.widget.byId(this.controller);}
+else {dojo.require("dojo.widget.TreeBasicController");this.controller = dojo.widget.createWidget("TreeBasicController",{ DNDController: (this.DNDMode ? "create" : ""), dieWithTree: true }
+);}
+this.controller.listenTree(this);} else {this.controller = null;}},initializeSelector: function() {if (this.selector != "off") {if (this.selector) {this.selector = dojo.widget.byId(this.selector);}
+else {dojo.require("dojo.widget.TreeSelector");this.selector = dojo.widget.createWidget("TreeSelector", {dieWithTree: true});}
+this.selector.listenTree(this);} else {this.selector = null;}},initialize: function(args, frag){var _this = this;for(name in this.eventNamesDefault) {if (dojo.lang.isUndefined(this.eventNames[name])) {this.eventNames[name] = this.widgetId+"/"+this.eventNamesDefault[name];}}
+for(var i=0; i<this.actionsDisabled.length; i++) {this.actionsDisabled[i] = this.actionsDisabled[i].toUpperCase();}
+if (this.DNDMode == "off") {this.DNDMode = 0;} else if (this.DNDMode == "between") {this.DNDMode = this.DNDModes.ONTO | this.DNDModes.BETWEEN;} else if (this.DNDMode == "onto") {this.DNDMode = this.DNDModes.ONTO;}
+this.expandLevel = parseInt(this.expandLevel);this.initializeSelector();this.initializeController();if (this.menu) {this.menu = dojo.widget.byId(this.menu);this.menu.listenTree(this);}
+this.containerNode = this.domNode;},postCreate: function() {this.createDOMNode();},createDOMNode: function() {dojo.html.disableSelection(this.domNode);for(var i=0; i<this.children.length; i++){this.children[i].parent = this;var node = this.children[i].createDOMNode(this, 0);this.domNode.appendChild(node);}
+if (!this.showRootGrid){for(var i=0; i<this.children.length; i++){this.children[i].expand();}}
+dojo.event.topic.publish(this.eventNames.treeCreate, { source: this } );},destroy: function() {dojo.event.topic.publish(this.tree.eventNames.treeDestroy, { source: this } );return dojo.widget.HtmlWidget.prototype.destroy.apply(this, arguments);},addChild: function(child, index) {var message = {child: child,index: index,parent: this,domNodeInitialized: child.domNodeInitialized
+}
+this.doAddChild.apply(this, arguments);dojo.event.topic.publish(this.tree.eventNames.addChild, message);},doAddChild: function(child, index){if (dojo.lang.isUndefined(index)) {index = this.children.length;}
+if (!child.isTreeNode){dojo.raise("You can only add TreeNode widgets to a "+this.widgetType+" widget!");return;}
+if (this.isTreeNode){if (!this.isFolder) {this.setFolder();}}
+var _this = this;dojo.lang.forEach(child.getDescendants(), function(elem) { elem.tree = _this.tree; });child.parent = this;if (this.isTreeNode) {this.state = this.loadStates.LOADED;}
+if (index < this.children.length) {dojo.html.insertBefore(child.domNode, this.children[index].domNode);} else {this.containerNode.appendChild(child.domNode);if (this.isExpanded && this.isTreeNode) {this.showChildren();}}
+this.children.splice(index, 0, child);if (child.domNodeInitialized) {var d = this.isTreeNode ? this.depth : -1;child.adjustDepth( d - child.depth + 1 );child.updateIconTree();} else {child.depth = this.isTreeNode ? this.depth+1 : 0;child.createDOMNode(child.tree, child.depth);}
+var prevSibling = child.getPreviousSibling();if (child.isLastChild() && prevSibling) {prevSibling.updateExpandGridColumn();}},makeBlankImg: function() {var img = document.createElement('img');img.style.width = this.iconWidth + 'px';img.style.height = this.iconHeight + 'px';img.src = this.blankIconSrc;img.style.verticalAlign = 'middle';return img;},updateIconTree: function(){if (!this.isTree) {this.updateIcons();}
+for(var i=0; i<this.children.length; i++){this.children[i].updateIconTree();}},toString: function() {return "["+this.widgetType+" ID:"+this.widgetId+"]"
+},move: function(child, newParent, index) {var oldParent = child.parent;var oldTree = child.tree;this.doMove.apply(this, arguments);var newParent = child.parent;var newTree = child.tree;var message = {oldParent: oldParent, oldTree: oldTree,newParent: newParent, newTree: newTree,child: child
+};dojo.event.topic.publish(oldTree.eventNames.moveFrom, message);dojo.event.topic.publish(newTree.eventNames.moveTo, message);},doMove: function(child, newParent, index) {child.parent.doRemoveNode(child);newParent.doAddChild(child, index);},removeNode: function(child) {if (!child.parent) return;var oldTree = child.tree;var oldParent = child.parent;var removedChild = this.doRemoveNode.apply(this, arguments);dojo.event.topic.publish(this.tree.eventNames.removeNode,{ child: removedChild, tree: oldTree, parent: oldParent }
+);return removedChild;},doRemoveNode: function(child) {if (!child.parent) return;var parent = child.parent;var children = parent.children;var index = child.getParentIndex();if (index < 0) {dojo.raise("Couldn't find node "+child+" for removal");}
+children.splice(index,1);dojo.html.removeNode(child.domNode);if (parent.children.length == 0 && !parent.isTree) {parent.containerNode.style.display = "none";}
+if (index == children.length && index>0) {children[index-1].updateExpandGridColumn();}
+if (parent instanceof dojo.widget.Tree && index == 0 && children.length>0) {children[0].updateExpandGrid();}
+child.parent = child.tree = null;return child;},markLoading: function() {},unMarkLoading: function() {},lock: function() {!this.lockLevel && this.markLoading();this.lockLevel++;},unlock: function() {if (!this.lockLevel) {dojo.raise("unlock: not locked");}
+this.lockLevel--;!this.lockLevel && this.unMarkLoading();},isLocked: function() {var node = this;while (true) {if (node.lockLevel) {return true;}
+if (node instanceof dojo.widget.Tree) {break;}
+node = node.parent;}
+return false;},flushLock: function() {this.lockLevel = 0;this.unMarkLoading();}});
\ No newline at end of file

Propchange: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/widget/Tree.js
------------------------------------------------------------------------------
    svn:eol-style = native

Added: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/widget/TreeBasicController.js
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/widget/TreeBasicController.js?view=auto&rev=498423
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/widget/TreeBasicController.js (added)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/widget/TreeBasicController.js Sun Jan 21 10:25:59 2007
@@ -0,0 +1,17 @@
+
+dojo.provide("dojo.widget.TreeBasicController");dojo.require("dojo.event.*");dojo.require("dojo.json")
+dojo.require("dojo.io.*");dojo.widget.defineWidget("dojo.widget.TreeBasicController", dojo.widget.HtmlWidget, {widgetType: "TreeBasicController",DNDController: "",dieWithTree: false,initialize: function(args, frag){if (this.DNDController == "create") {dojo.require("dojo.dnd.TreeDragAndDrop");this.DNDController = new dojo.dnd.TreeDNDController(this);}},listenTree: function(tree) {dojo.event.topic.subscribe(tree.eventNames.createDOMNode, this, "onCreateDOMNode");dojo.event.topic.subscribe(tree.eventNames.treeClick, this, "onTreeClick");dojo.event.topic.subscribe(tree.eventNames.treeCreate, this, "onTreeCreate");dojo.event.topic.subscribe(tree.eventNames.treeDestroy, this, "onTreeDestroy");if (this.DNDController) {this.DNDController.listenTree(tree);}},unlistenTree: function(tree) {dojo.event.topic.unsubscribe(tree.eventNames.createDOMNode, this, "onCreateDOMNode");dojo.event.topic.unsubscribe(tree.eventNames.treeClick, this, "onTreeClick");dojo.event.topic.unsubscribe(tree.eve
 ntNames.treeCreate, this, "onTreeCreate");dojo.event.topic.unsubscribe(tree.eventNames.treeDestroy, this, "onTreeDestroy");},onTreeDestroy: function(message) {var tree = message.source;this.unlistenTree(tree);if (this.dieWithTree) {this.destroy();}},onCreateDOMNode: function(message) {var node = message.source;if (node.expandLevel > 0) {this.expandToLevel(node, node.expandLevel);}},onTreeCreate: function(message) {var tree = message.source;var _this = this;if (tree.expandLevel) {dojo.lang.forEach(tree.children,function(child) {_this.expandToLevel(child, tree.expandLevel-1)
+}
+);}},expandToLevel: function(node, level) {if (level == 0) return;var children = node.children;var _this = this;var handler = function(node, expandLevel) {this.node = node;this.expandLevel = expandLevel;this.process = function() {for(var i=0; i<this.node.children.length; i++) {var child = node.children[i];_this.expandToLevel(child, this.expandLevel);}};}
+var h = new handler(node, level-1);this.expand(node, false, h, h.process);},onTreeClick: function(message){var node = message.source;if(node.isLocked()) {return false;}
+if (node.isExpanded){this.collapse(node);} else {this.expand(node);}},expand: function(node, sync, callObj, callFunc) {node.expand();if (callFunc) callFunc.apply(callObj, [node]);},collapse: function(node) {node.collapse();},canMove: function(child, newParent){if (child.actionIsDisabled(child.actions.MOVE)) {return false;}
+if (child.parent !== newParent && newParent.actionIsDisabled(newParent.actions.ADDCHILD)) {return false;}
+var node = newParent;while(node.isTreeNode) {if (node === child) {return false;}
+node = node.parent;}
+return true;},move: function(child, newParent, index) {if (!this.canMove(child, newParent)) {return false;}
+var result = this.doMove(child, newParent, index);if (!result) return result;if (newParent.isTreeNode) {this.expand(newParent);}
+return result;},doMove: function(child, newParent, index) {child.tree.move(child, newParent, index);return true;},canRemoveNode: function(child) {if (child.actionIsDisabled(child.actions.REMOVE)) {return false;}
+return true;},removeNode: function(node, callObj, callFunc) {if (!this.canRemoveNode(node)) {return false;}
+return this.doRemoveNode(node, callObj, callFunc);},doRemoveNode: function(node, callObj, callFunc) {node.tree.removeNode(node);if (callFunc) {callFunc.apply(dojo.lang.isUndefined(callObj) ? this : callObj, [node]);}},canCreateChild: function(parent, index, data) {if (parent.actionIsDisabled(parent.actions.ADDCHILD)) return false;return true;},createChild: function(parent, index, data, callObj, callFunc) {if (!this.canCreateChild(parent, index, data)) {return false;}
+return this.doCreateChild.apply(this, arguments);},doCreateChild: function(parent, index, data, callObj, callFunc) {var widgetType = data.widgetType ? data.widgetType : "TreeNode";var newChild = dojo.widget.createWidget(widgetType, data);parent.addChild(newChild, index);this.expand(parent);if (callFunc) {callFunc.apply(callObj, [newChild]);}
+return newChild;}});
\ No newline at end of file

Propchange: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/widget/TreeBasicController.js
------------------------------------------------------------------------------
    svn:eol-style = native

Added: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/widget/TreeBasicControllerV3.js
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/widget/TreeBasicControllerV3.js?view=auto&rev=498423
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/widget/TreeBasicControllerV3.js (added)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/widget/TreeBasicControllerV3.js Sun Jan 21 10:25:59 2007
@@ -0,0 +1,69 @@
+
+dojo.provide("dojo.widget.TreeBasicControllerV3");dojo.require("dojo.event.*");dojo.require("dojo.json");dojo.require("dojo.io.*");dojo.require("dojo.widget.TreeCommon");dojo.require("dojo.widget.TreeNodeV3");dojo.require("dojo.widget.TreeV3");dojo.widget.defineWidget(
+"dojo.widget.TreeBasicControllerV3",[dojo.widget.HtmlWidget, dojo.widget.TreeCommon],function(){this.listenedTrees = {};},{listenTreeEvents: ["afterSetFolder", "afterTreeCreate", "beforeTreeDestroy"],listenNodeFilter: function(elem) {return elem instanceof dojo.widget.Widget;},editor: null,initialize: function(args) {if (args.editor) {this.editor = dojo.widget.byId(args.editor);this.editor.controller = this;}},getInfo: function(elem) {return elem.getInfo();},onBeforeTreeDestroy: function(message) {this.unlistenTree(message.source);},onAfterSetFolder: function(message) {if (message.source.expandLevel > 0) {this.expandToLevel(message.source, message.source.expandLevel);}
+if (message.source.loadLevel > 0) {this.loadToLevel(message.source, message.source.loadLevel);}},_focusNextVisible: function(nodeWidget) {var returnWidget;if (nodeWidget.isFolder && nodeWidget.isExpanded && nodeWidget.children.length > 0) {returnWidget = nodeWidget.children[0];} else {while (nodeWidget.isTreeNode && nodeWidget.isLastChild()) {nodeWidget = nodeWidget.parent;}
+if (nodeWidget.isTreeNode) {returnWidget = nodeWidget.parent.children[nodeWidget.getParentIndex()+1];}}
+if (returnWidget && returnWidget.isTreeNode) {this._focusLabel(returnWidget);return returnWidget;}},_focusPreviousVisible: function(nodeWidget) {var returnWidget = nodeWidget;if (!nodeWidget.isFirstChild()) {var previousSibling = nodeWidget.parent.children[nodeWidget.getParentIndex()-1];nodeWidget = previousSibling;while (nodeWidget.isFolder && nodeWidget.isExpanded && nodeWidget.children.length > 0) {returnWidget = nodeWidget;nodeWidget = nodeWidget.children[nodeWidget.children.length-1];}} else {nodeWidget = nodeWidget.parent;}
+if (nodeWidget && nodeWidget.isTreeNode) {returnWidget = nodeWidget;}
+if (returnWidget && returnWidget.isTreeNode) {this._focusLabel(returnWidget);return returnWidget;}},_focusZoomIn: function(nodeWidget) {var returnWidget = nodeWidget;if (nodeWidget.isFolder && !nodeWidget.isExpanded) {this.expand(nodeWidget);}else if (nodeWidget.children.length > 0) {nodeWidget = nodeWidget.children[0];}
+if (nodeWidget && nodeWidget.isTreeNode) {returnWidget = nodeWidget;}
+if (returnWidget && returnWidget.isTreeNode) {this._focusLabel(returnWidget);return returnWidget;}},_focusZoomOut: function(node) {var returnWidget = node;if (node.isFolder && node.isExpanded) {this.collapse(node);} else {node = node.parent;}
+if (node && node.isTreeNode) {returnWidget = node;}
+if (returnWidget && returnWidget.isTreeNode) {this._focusLabel(returnWidget);return returnWidget;}},onFocusNode: function(e) {var node = this.domElement2TreeNode(e.target);if (node) {node.viewFocus();dojo.event.browser.stopEvent(e);}},onBlurNode: function(e) {var node = this.domElement2TreeNode(e.target);if (!node) {return;}
+var labelNode = node.labelNode;labelNode.setAttribute("tabIndex", "-1");node.viewUnfocus();dojo.event.browser.stopEvent(e);node.tree.domNode.setAttribute("tabIndex", "0");},_focusLabel: function(node) {var lastFocused = node.tree.lastFocused;var labelNode;if (lastFocused && lastFocused.labelNode) {labelNode = lastFocused.labelNode;dojo.event.disconnect(labelNode, "onblur", this, "onBlurNode");labelNode.setAttribute("tabIndex", "-1");dojo.html.removeClass(labelNode, "TreeLabelFocused");}
+labelNode = node.labelNode;labelNode.setAttribute("tabIndex", "0");node.tree.lastFocused = node;dojo.html.addClass(labelNode, "TreeLabelFocused");dojo.event.connectOnce(labelNode, "onblur", this, "onBlurNode");dojo.event.connectOnce(labelNode, "onfocus", this, "onFocusNode");labelNode.focus();},onKey: function(e) {if (!e.key || e.altKey) { return; }
+var nodeWidget = this.domElement2TreeNode(e.target);if (!nodeWidget) {return;}
+var treeWidget = nodeWidget.tree;if (treeWidget.lastFocused && treeWidget.lastFocused.labelNode) {nodeWidget = treeWidget.lastFocused;}
+var actionWidget = null;switch(e.key) {case e.KEY_TAB:
+if (e.shiftKey) {treeWidget.domNode.setAttribute("tabIndex", "-1");}
+break;case e.KEY_ENTER:
+if(nodeWidget.isFolder){this.processExpandClick(nodeWidget);}
+break;case e.KEY_RIGHT_ARROW:
+actionWidget = this._focusZoomIn(nodeWidget);dojo.event.browser.stopEvent(e);break;case e.KEY_LEFT_ARROW:
+actionWidget = this._focusZoomOut(nodeWidget);dojo.event.browser.stopEvent(e);break;case e.KEY_UP_ARROW:
+actionWidget = this._focusPreviousVisible(nodeWidget);dojo.event.browser.stopEvent(e);break;case e.KEY_DOWN_ARROW:
+actionWidget = this._focusNextVisible(nodeWidget);dojo.event.browser.stopEvent(e);break;}
+if (actionWidget && !e.ctrlKey){dojo.event.topic.publish(actionWidget.tree.eventNames.afterNavigate, { node: actionWidget, event: e} );}},onFocusTree: function(e) {if (!e.currentTarget) { return; }
+try {var treeWidget = this.getWidgetByNode(e.currentTarget);if (!treeWidget || !treeWidget.isTree) { return; }
+var nodeWidget = this.getWidgetByNode(treeWidget.domNode.firstChild);if (nodeWidget && nodeWidget.isTreeNode) {if (treeWidget.lastFocused && treeWidget.lastFocused.isTreeNode) {nodeWidget = treeWidget.lastFocused;}
+this._focusLabel(nodeWidget);dojo.event.topic.publish(nodeWidget.tree.eventNames.afterNavigate, { node: nodeWidget, event: e} );}}
+catch(e) {}},onAfterTreeCreate: function(message) {var tree = message.source;dojo.event.browser.addListener(tree.domNode, "onKey", dojo.lang.hitch(this, this.onKey));dojo.event.browser.addListener(tree.domNode, "onmousedown", dojo.lang.hitch(this, this.onTreeMouseDown));dojo.event.browser.addListener(tree.domNode, "onclick", dojo.lang.hitch(this, this.onTreeClick));dojo.event.browser.addListener(tree.domNode, "onfocus", dojo.lang.hitch(this, this.onFocusTree));tree.domNode.setAttribute("tabIndex", "0");if (tree.expandLevel) {this.expandToLevel(tree, tree.expandLevel);}
+if (tree.loadLevel) {this.loadToLevel(tree, tree.loadLevel);}},onTreeMouseDown: function(e) {},onTreeClick: function(e){var domElement = e.target;var node = this.domElement2TreeNode(domElement);if (!node || !node.isTreeNode) {return;}
+var checkExpandClick = function(el) {return el === node.expandNode;};if (this.checkPathCondition(domElement, checkExpandClick)) {this.processExpandClick(node);}
+this._focusLabel(node);},processExpandClick: function(node){if (node.isExpanded){this.collapse(node);} else {this.expand(node);}},batchExpandTimeout: 20,expandAll: function(nodeOrTree) {return this.expandToLevel(nodeOrTree, Number.POSITIVE_INFINITY);},collapseAll: function(nodeOrTree) {var _this = this;var filter = function(elem) {return (elem instanceof dojo.widget.Widget) && elem.isFolder && elem.isExpanded;};if (nodeOrTree.isTreeNode) {this.processDescendants(nodeOrTree, filter, this.collapse);} else if (nodeOrTree.isTree) {dojo.lang.forEach(nodeOrTree.children,function(c) { _this.processDescendants(c, filter, _this.collapse); });}},expandToNode: function(node, withSelected) {n = withSelected ? node : node.parent;s = [];while (!n.isExpanded) {s.push(n);n = n.parent;}
+dojo.lang.forEach(s, function(n) { n.expand(); });},expandToLevel: function(nodeOrTree, level) {dojo.require("dojo.widget.TreeTimeoutIterator");var _this = this;var filterFunc = function(elem) {var res = elem.isFolder || elem.children && elem.children.length;return res;};var callFunc = function(node, iterator) {_this.expand(node, true);iterator.forward();};var iterator = new dojo.widget.TreeTimeoutIterator(nodeOrTree, callFunc, this);iterator.setFilter(filterFunc);iterator.timeout = this.batchExpandTimeout;iterator.setMaxLevel(nodeOrTree.isTreeNode ? level-1 : level);return iterator.start(nodeOrTree.isTreeNode);},getWidgetByNode: function(node) {var widgetId;var newNode = node;while (! (widgetId = newNode.widgetId) ) {newNode = newNode.parentNode;if (newNode == null) { break; }}
+if (widgetId) { return dojo.widget.byId(widgetId); }
+else if (node == null) { return null; }
+else{ return dojo.widget.manager.byNode(node); }},expand: function(node) {if (node.isFolder) {node.expand();}},collapse: function(node) {if (node.isFolder) {node.collapse();}},canEditLabel: function(node) {if (node.actionIsDisabledNow(node.actions.EDIT)) { return false; }
+return true;},editLabelStart: function(node) {if (!this.canEditLabel(node)) {return false;}
+if (!this.editor.isClosed()) {this.editLabelFinish(this.editor.saveOnBlur);}
+this.doEditLabelStart(node);},editLabelFinish: function(save) {this.doEditLabelFinish(save);},doEditLabelStart: function(node) {if (!this.editor) {dojo.raise(this.widgetType+": no editor specified");}
+this.editor.open(node);},doEditLabelFinish: function(save, server_data) {if (!this.editor) {dojo.raise(this.widgetType+": no editor specified");}
+var node = this.editor.node;var editorTitle = this.editor.getContents();this.editor.close(save);if (save) {var data = {title:editorTitle};if (server_data) {dojo.lang.mixin(data, server_data);}
+if (node.isPhantom) {var parent = node.parent;var index = node.getParentIndex();node.destroy();dojo.widget.TreeBasicControllerV3.prototype.doCreateChild.call(this, parent, index, data);} else {var title = server_data && server_data.title ? server_data.title : editorTitle;node.setTitle(title);}} else {if (node.isPhantom) {node.destroy();}}
+},makeDefaultNode: function(parent, index) {var data = {title:parent.tree.defaultChildTitle};return dojo.widget.TreeBasicControllerV3.prototype.doCreateChild.call(this,parent,index,data);},runStages: function(check, prepare, make, finalize, expose, args) {if (check && !check.apply(this, args)) {return false;}
+if (prepare && !prepare.apply(this, args)) {return false;}
+var result = make.apply(this, args);if (finalize) {finalize.apply(this,args);}
+if (!result) {return result;}
+if (expose) {expose.apply(this, args);}
+return result;}});dojo.lang.extend(dojo.widget.TreeBasicControllerV3, {createAndEdit: function(parent, index) {var data = {title:parent.tree.defaultChildTitle};if (!this.canCreateChild(parent, index, data)) {return false;}
+var child = this.doCreateChild(parent, index, data);if (!child) { return false; }
+this.exposeCreateChild(parent, index, data);child.isPhantom = true;if (!this.editor.isClosed()) {this.editLabelFinish(this.editor.saveOnBlur);}
+this.doEditLabelStart(child);}});dojo.lang.extend(dojo.widget.TreeBasicControllerV3, {canClone: function(child, newParent, index, deep){return true;},clone: function(child, newParent, index, deep) {return this.runStages(
+this.canClone, this.prepareClone, this.doClone, this.finalizeClone, this.exposeClone, arguments
+);},exposeClone: function(child, newParent) {if (newParent.isTreeNode) {this.expand(newParent);}},doClone: function(child, newParent, index, deep) {var cloned = child.clone(deep);newParent.addChild(cloned, index);return cloned;}});dojo.lang.extend(dojo.widget.TreeBasicControllerV3, {canDetach: function(child) {if (child.actionIsDisabledNow(child.actions.DETACH)) {return false;}
+return true;},detach: function(node) {return this.runStages(
+this.canDetach, this.prepareDetach, this.doDetach, this.finalizeDetach, this.exposeDetach, arguments
+);},doDetach: function(node, callObj, callFunc) {node.detach();}});dojo.lang.extend(dojo.widget.TreeBasicControllerV3, {canDestroyChild: function(child) {if (child.parent && !this.canDetach(child)) {return false;}
+return true;},destroyChild: function(node) {return this.runStages(
+this.canDestroyChild, this.prepareDestroyChild, this.doDestroyChild, this.finalizeDestroyChild, this.exposeDestroyChild, arguments
+);},doDestroyChild: function(node) {node.destroy();}});dojo.lang.extend(dojo.widget.TreeBasicControllerV3, {canMoveNotANode: function(child, parent) {if (child.treeCanMove) {return child.treeCanMove(parent);}
+return true;},canMove: function(child, newParent){if (!child.isTreeNode) {return this.canMoveNotANode(child, newParent);}
+if (child.actionIsDisabledNow(child.actions.MOVE)) {return false;}
+if (child.parent !== newParent && newParent.actionIsDisabledNow(newParent.actions.ADDCHILD)) {return false;}
+var node = newParent;while(node.isTreeNode) {if (node === child) {return false;}
+node = node.parent;}
+return true;},move: function(child, newParent, index) {return this.runStages(this.canMove, this.prepareMove, this.doMove, this.finalizeMove, this.exposeMove, arguments);},doMove: function(child, newParent, index) {child.tree.move(child, newParent, index);return true;},exposeMove: function(child, newParent) {if (newParent.isTreeNode) {this.expand(newParent);}}
+});dojo.lang.extend(dojo.widget.TreeBasicControllerV3, {canCreateChild: function(parent, index, data) {if (parent.actionIsDisabledNow(parent.actions.ADDCHILD)) {return false;}
+return true;},createChild: function(parent, index, data) {if(!data) {data = {title:parent.tree.defaultChildTitle};}
+return this.runStages(this.canCreateChild, this.prepareCreateChild, this.doCreateChild, this.finalizeCreateChild, this.exposeCreateChild,[parent, index, data]);},prepareCreateChild: function() { return true; },finalizeCreateChild: function() {},doCreateChild: function(parent, index, data) {var newChild = parent.tree.createNode(data);parent.addChild(newChild, index);return newChild;},exposeCreateChild: function(parent) {return this.expand(parent);}});
\ No newline at end of file

Propchange: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/widget/TreeBasicControllerV3.js
------------------------------------------------------------------------------
    svn:eol-style = native

Added: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/widget/TreeCommon.js
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/widget/TreeCommon.js?view=auto&rev=498423
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/widget/TreeCommon.js (added)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/widget/TreeCommon.js Sun Jan 21 10:25:59 2007
@@ -0,0 +1,15 @@
+
+dojo.provide("dojo.widget.TreeCommon");dojo.require("dojo.widget.*");dojo.declare(
+"dojo.widget.TreeCommon",null,{listenTreeEvents: [],listenedTrees: {},listenNodeFilter: null,listenTree: function(tree) {var _this = this;if (this.listenedTrees[tree.widgetId]) {return;}
+dojo.lang.forEach(this.listenTreeEvents, function(event) {var eventHandler =  "on" + event.charAt(0).toUpperCase() + event.substr(1);dojo.event.topic.subscribe(tree.eventNames[event], _this, eventHandler);});var filter;if (this.listenNodeFilter) {this.processDescendants(tree, this.listenNodeFilter, this.listenNode, true);}
+this.listenedTrees[tree.widgetId] = true;},listenNode: function() {},unlistenNode: function() {},unlistenTree: function(tree, nodeFilter) {var _this = this;if (!this.listenedTrees[tree.widgetId]) {return;}
+dojo.lang.forEach(this.listenTreeEvents, function(event) {var eventHandler =  "on" + event.charAt(0).toUpperCase() + event.substr(1);dojo.event.topic.unsubscribe(tree.eventNames[event], _this, eventHandler);});if (this.listenNodeFilter) {this.processDescendants(tree, this.listenNodeFilter, this.unlistenNode, true);}
+delete this.listenedTrees[tree.widgetId];},checkPathCondition: function(domElement, condition) {while (domElement && !domElement.widgetId) {if (condition.call(null, domElement)) {return true;}
+domElement = domElement.parentNode;}
+return false;},domElement2TreeNode: function(domElement) {while (domElement && !domElement.widgetId) {domElement = domElement.parentNode;}
+if (!domElement) {return null;}
+var widget = dojo.widget.byId(domElement.widgetId);if (!widget.isTreeNode) {return null;}
+return widget;},processDescendants: function(elem, filter, func, skipFirst) {var _this = this;if (!skipFirst) {if (!filter.call(_this,elem)) {return;}
+func.call(_this,elem);}
+var stack = [elem];while (elem = stack.pop()) {dojo.lang.forEach(elem.children, function(elem) {if (filter.call(_this, elem)) {func.call(_this, elem);stack.push(elem);}});}}
+});
\ No newline at end of file

Propchange: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/widget/TreeCommon.js
------------------------------------------------------------------------------
    svn:eol-style = native

Added: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/widget/TreeContextMenu.js
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/widget/TreeContextMenu.js?view=auto&rev=498423
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/widget/TreeContextMenu.js (added)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/widget/TreeContextMenu.js Sun Jan 21 10:25:59 2007
@@ -0,0 +1,11 @@
+
+dojo.provide("dojo.widget.TreeContextMenu");dojo.require("dojo.event.*");dojo.require("dojo.io.*");dojo.require("dojo.widget.Menu2");dojo.widget.defineWidget("dojo.widget.TreeContextMenu", dojo.widget.PopupMenu2, function() {this.listenedTrees = [];},{open: function(x, y, parentMenu, explodeSrc){var result = dojo.widget.PopupMenu2.prototype.open.apply(this, arguments);dojo.event.topic.publish(this.eventNames.open, { menu:this });return result;},listenTree: function(tree) {var nodes = tree.getDescendants();for(var i=0; i<nodes.length; i++) {if (!nodes[i].isTreeNode) continue;this.bindDomNode(nodes[i].labelNode);}
+var _this = this;dojo.event.topic.subscribe(tree.eventNames.createDOMNode, this, "onCreateDOMNode");dojo.event.topic.subscribe(tree.eventNames.moveFrom, this, "onMoveFrom");dojo.event.topic.subscribe(tree.eventNames.moveTo, this, "onMoveTo");dojo.event.topic.subscribe(tree.eventNames.removeNode, this, "onRemoveNode");dojo.event.topic.subscribe(tree.eventNames.addChild, this, "onAddChild");dojo.event.topic.subscribe(tree.eventNames.treeDestroy, this, "onTreeDestroy");this.listenedTrees.push(tree);},unlistenTree: function(tree) {dojo.event.topic.unsubscribe(tree.eventNames.createDOMNode, this, "onCreateDOMNode");dojo.event.topic.unsubscribe(tree.eventNames.moveFrom, this, "onMoveFrom");dojo.event.topic.unsubscribe(tree.eventNames.moveTo, this, "onMoveTo");dojo.event.topic.unsubscribe(tree.eventNames.removeNode, this, "onRemoveNode");dojo.event.topic.unsubscribe(tree.eventNames.addChild, this, "onAddChild");dojo.event.topic.unsubscribe(tree.eventNames.treeDestroy, this, "onTree
 Destroy");for(var i=0; i<this.listenedTrees.length; i++){if(this.listenedTrees[i] === tree){this.listenedTrees.splice(i, 1);break;}}
+},onTreeDestroy: function(message) {this.unlistenTree(message.source);},bindTreeNode: function(node) {var _this = this;dojo.lang.forEach(node.getDescendants(),function(e) {_this.bindDomNode(e.labelNode); }
+);},unBindTreeNode: function(node) {var _this = this;dojo.lang.forEach(node.getDescendants(),function(e) {_this.unBindDomNode(e.labelNode); }
+);},onCreateDOMNode: function(message) {this.bindTreeNode(message.source);},onMoveFrom: function(message) {if (!dojo.lang.inArray(this.listenedTrees, message.newTree)) {this.unBindTreeNode(message.child);}},onMoveTo: function(message) {if (dojo.lang.inArray(this.listenedTrees, message.newTree)) {this.bindTreeNode(message.child);}},onRemoveNode: function(message) {this.unBindTreeNode(message.child);},onAddChild: function(message) {if (message.domNodeInitialized) {this.bindTreeNode(message.child);}}
+});dojo.widget.defineWidget("dojo.widget.TreeMenuItem", dojo.widget.MenuItem2, {treeActions: "",initialize: function(args, frag) {this.treeActions = this.treeActions.split(",");for(var i=0; i<this.treeActions.length; i++) {this.treeActions[i] = this.treeActions[i].toUpperCase();}},getTreeNode: function() {var menu = this;while (! (menu instanceof dojo.widget.TreeContextMenu) ) {menu = menu.parent;}
+var source = menu.getTopOpenEvent().target;while (!source.getAttribute('treeNode') && source.tagName != 'body') {source = source.parentNode;}
+if (source.tagName == 'body') {dojo.raise("treeNode not detected");}
+var treeNode = dojo.widget.manager.getWidgetById(source.getAttribute('treeNode'));return treeNode;},menuOpen: function(message) {var treeNode = this.getTreeNode();this.setDisabled(false);var _this = this;dojo.lang.forEach(_this.treeActions,function(action) {_this.setDisabled( treeNode.actionIsDisabled(action) );}
+);},toString: function() {return "["+this.widgetType+" node "+this.getTreeNode()+"]";}});
\ No newline at end of file

Propchange: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/widget/TreeContextMenu.js
------------------------------------------------------------------------------
    svn:eol-style = native

Added: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/widget/TreeContextMenuV3.js
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/widget/TreeContextMenuV3.js?view=auto&rev=498423
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/widget/TreeContextMenuV3.js (added)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/widget/TreeContextMenuV3.js Sun Jan 21 10:25:59 2007
@@ -0,0 +1,12 @@
+
+dojo.provide("dojo.widget.TreeContextMenuV3");dojo.require("dojo.event.*");dojo.require("dojo.io.*");dojo.require("dojo.widget.*");dojo.require("dojo.widget.Menu2");dojo.require("dojo.widget.TreeCommon");dojo.widget.defineWidget(
+"dojo.widget.TreeContextMenuV3",[dojo.widget.PopupMenu2, dojo.widget.TreeCommon],function() {this.listenedTrees = {};},{listenTreeEvents: ["afterTreeCreate","beforeTreeDestroy"],listenNodeFilter: function(elem) { return elem instanceof dojo.widget.Widget},onAfterTreeCreate: function(message) {var tree = message.source;this.bindDomNode(tree.domNode);},onBeforeTreeDestroy: function(message) {this.unBindDomNode(message.source.domNode);},getTreeNode: function() {var source = this.getTopOpenEvent().target;var treeNode = this.domElement2TreeNode(source);return treeNode;},open: function() {var result = dojo.widget.PopupMenu2.prototype.open.apply(this, arguments);for(var i=0; i< this.children.length; i++) {if (this.children[i].menuOpen) {this.children[i].menuOpen(this.getTreeNode());}}
+return result;},close: function(){for(var i=0; i< this.children.length; i++) {if (this.children[i].menuClose) {this.children[i].menuClose(this.getTreeNode());}}
+var result = dojo.widget.PopupMenu2.prototype.close.apply(this, arguments);return result
+}});dojo.widget.defineWidget(
+"dojo.widget.TreeMenuItemV3",[dojo.widget.MenuItem2, dojo.widget.TreeCommon],function() {this.treeActions = [];},{treeActions: "",initialize: function(args, frag) {for(var i=0; i<this.treeActions.length; i++) {this.treeActions[i] = this.treeActions[i].toUpperCase();}},getTreeNode: function() {var menu = this;while (! (menu instanceof dojo.widget.TreeContextMenuV3) ) {menu = menu.parent;}
+var treeNode = menu.getTreeNode()
+return treeNode;},menuOpen: function(treeNode) {treeNode.viewEmphasize()
+this.setDisabled(false);var _this = this;dojo.lang.forEach(_this.treeActions,function(action) {_this.setDisabled( treeNode.actionIsDisabledNow(action) );}
+);},menuClose: function(treeNode) {treeNode.viewUnemphasize()
+},toString: function() {return "["+this.widgetType+" node "+this.getTreeNode()+"]";}});
\ No newline at end of file

Propchange: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/widget/TreeContextMenuV3.js
------------------------------------------------------------------------------
    svn:eol-style = native

Added: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/widget/TreeControllerExtension.js
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/widget/TreeControllerExtension.js?view=auto&rev=498423
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/widget/TreeControllerExtension.js (added)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/widget/TreeControllerExtension.js Sun Jan 21 10:25:59 2007
@@ -0,0 +1,9 @@
+
+dojo.provide("dojo.widget.TreeControllerExtension");dojo.declare(
+"dojo.widget.TreeControllerExtension",null,{saveExpandedIndices: function(node, field) {var obj = {};for(var i=0; i<node.children.length; i++) {if (node.children[i].isExpanded) {var key = dojo.lang.isUndefined(field) ? i : node.children[i][field];obj[key] = this.saveExpandedIndices(node.children[i], field);}}
+return obj;},restoreExpandedIndices: function(node, savedIndices, field) {var _this = this;var handler = function(node, savedIndices) {this.node = node;this.savedIndices = savedIndices;this.process = function() {_this.restoreExpandedIndices(this.node, this.savedIndices, field);};}
+for(var i=0; i<node.children.length; i++) {var child = node.children[i];var found = false;var key = -1;if (dojo.lang.isUndefined(field) && savedIndices[i]) {found = true;key = i;}
+if (field) {for(var key in savedIndices) {if (key == child[field]) {found = true;break;}}
+}
+if (found) {var h = new handler(child, savedIndices[key]);_this.expand(child, false, h, h.process);} else if (child.isExpanded) {dojo.lang.forEach(child.getDescendants(), function(elem) { _this.collapse(elem); });}}
+}});
\ No newline at end of file

Propchange: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/widget/TreeControllerExtension.js
------------------------------------------------------------------------------
    svn:eol-style = native

Added: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/widget/TreeDemo.js
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/widget/TreeDemo.js?view=auto&rev=498423
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/widget/TreeDemo.js (added)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/widget/TreeDemo.js Sun Jan 21 10:25:59 2007
@@ -0,0 +1,14 @@
+
+dojo.provide("dojo.widget.TreeDemo");dojo.require("dojo.Deferred");dojo.widget.TreeDemo = {reportIfDefered: function(res) {if (res instanceof dojo.Deferred) {res.addCallbacks(
+function(res) {  return res },function(err) { dojo.debug("Error"); dojo.debugShallow(err); }
+);}},resetRandomChildren: function(maxCount) {this.randomChildrenMaxCount = maxCount;this.randomChildrenCount = 0;this.randomChildrenDepth = 0;},makeRandomChildren: function(title) {this.randomChildrenDepth++;var children = [];for (var i=1; i<=5; i++) {var t = title+(this.randomChildrenDepth==1 ? '' : '.')+i;var node = {title: t};children.push(node);this.randomChildrenCount++
+if (this.randomChildrenCount >= this.randomChildrenMaxCount) {break;}}
+var i=1;var _this = this;dojo.lang.forEach(children, function(child) {var t = title+(_this.randomChildrenDepth==1 ? '' : '.')+i;i++;if (_this.randomChildrenCount<_this.randomChildrenMaxCount && (
+_this.randomChildrenDepth==1 && child === children[0] || _this.randomChildrenDepth<5 && Math.random()>0.3 )
+) {child.children = _this.makeRandomChildren(t);}});this.randomChildrenDepth--;return children;},bindDemoMenu: function(controller) {var _t = this;dojo.event.topic.subscribe('treeContextMenuDestroy/engage',function (menuItem) {var node = menuItem.getTreeNode();_t.reportIfDefered(controller.destroyChild(node));}
+);dojo.event.topic.subscribe('treeContextMenuRefresh/engage',function (menuItem) {var node = menuItem.getTreeNode();_t.reportIfDefered(controller.refreshChildren(node));}
+);dojo.event.topic.subscribe('treeContextMenuCreate/engage',function (menuItem) {var node = menuItem.getTreeNode();var d = controller.createAndEdit(node, 0);_t.reportIfDefered(d);}
+);dojo.event.topic.subscribe('treeContextMenuUp/engage',function (menuItem) {var node = menuItem.getTreeNode();if (node.isFirstChild()) return;_t.reportIfDefered(controller.move(node, node.parent, node.getParentIndex()-1));}
+);dojo.event.topic.subscribe('treeContextMenuDown/engage',function (menuItem) {var node = menuItem.getTreeNode();if (node.isLastChild()) return;_t.reportIfDefered(controller.move(node, node.parent, node.getParentIndex()+1));}
+);dojo.event.topic.subscribe('treeContextMenuEdit/engage',function (menuItem) {var node = menuItem.getTreeNode();_t.reportIfDefered(controller.editLabelStart(node));}
+);}}

Propchange: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/widget/TreeDemo.js
------------------------------------------------------------------------------
    svn:eol-style = native

Added: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/widget/TreeDeselectOnDblselect.js
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/widget/TreeDeselectOnDblselect.js?view=auto&rev=498423
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/widget/TreeDeselectOnDblselect.js (added)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/widget/TreeDeselectOnDblselect.js Sun Jan 21 10:25:59 2007
@@ -0,0 +1,3 @@
+
+dojo.provide("dojo.widget.TreeDeselectOnDblselect");dojo.require("dojo.widget.HtmlWidget");dojo.require("dojo.widget.TreeSelectorV3");dojo.deprecated("Does anyone still need this extension? (TreeDeselectOnDblselect)");dojo.widget.defineWidget(
+"dojo.widget.TreeDeselectOnDblselect",[dojo.widget.HtmlWidget],{selector: "",initialize: function() {this.selector = dojo.widget.byId(this.selector);dojo.event.topic.subscribe(this.selector.eventNames.dblselect, this, "onDblselect");},onDblselect: function(message) {this.selector.deselect(message.node);}});
\ No newline at end of file

Propchange: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/widget/TreeDeselectOnDblselect.js
------------------------------------------------------------------------------
    svn:eol-style = native

Added: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/widget/TreeDisableWrapExtension.js
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/widget/TreeDisableWrapExtension.js?view=auto&rev=498423
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/widget/TreeDisableWrapExtension.js (added)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/widget/TreeDisableWrapExtension.js Sun Jan 21 10:25:59 2007
@@ -0,0 +1,5 @@
+
+dojo.provide( "dojo.widget.TreeDisableWrapExtension" );dojo.require( "dojo.widget.HtmlWidget" );dojo.require( "dojo.widget.TreeExtension" );dojo.widget.defineWidget(
+"dojo.widget.TreeDisableWrapExtension",dojo.widget.TreeExtension,{templateCssPath: dojo.uri.moduleUri("dojo", "widget/templates/TreeDisableWrap.css" ),listenTree: function(tree) {var wrappingDiv = document.createElement( "div" );var clazz = tree.classPrefix+"DisableWrap";if (dojo.render.html.ie) {clazz = clazz+' '+ tree.classPrefix+"IEDisableWrap";}
+dojo.html.setClass(wrappingDiv, clazz);var table = document.createElement( "table" );wrappingDiv.appendChild( table );var tbody = document.createElement( "tbody" );table.appendChild( tbody );var tr = document.createElement( "tr" );tbody.appendChild( tr );var td = document.createElement( "td" );tr.appendChild( td );if( tree.domNode.parentNode ) {tree.domNode.parentNode.replaceChild( wrappingDiv, tree.domNode );}
+td.appendChild( tree.domNode );tree.domNode = wrappingDiv;}});
\ No newline at end of file

Propchange: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/widget/TreeDisableWrapExtension.js
------------------------------------------------------------------------------
    svn:eol-style = native

Added: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/widget/TreeDndControllerV3.js
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/widget/TreeDndControllerV3.js?view=auto&rev=498423
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/widget/TreeDndControllerV3.js (added)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/widget/TreeDndControllerV3.js Sun Jan 21 10:25:59 2007
@@ -0,0 +1,7 @@
+
+dojo.provide("dojo.widget.TreeDndControllerV3");dojo.require("dojo.dnd.TreeDragAndDropV3");dojo.require("dojo.experimental");dojo.experimental("Tree drag'n'drop' has lots of problems/bugs, it requires dojo drag'n'drop overhaul to work, probably in 0.5");dojo.widget.defineWidget(
+"dojo.widget.TreeDndControllerV3",[dojo.widget.HtmlWidget, dojo.widget.TreeCommon],function() {this.dragSources = {};this.dropTargets = {};this.listenedTrees = {};},{listenTreeEvents: ["afterChangeTree","beforeTreeDestroy", "afterAddChild"],listenNodeFilter: function(elem) { return elem instanceof dojo.widget.Widget},initialize: function(args) {this.treeController = dojo.lang.isString(args.controller) ? dojo.widget.byId(args.controller) : args.controller;if (!this.treeController) {dojo.raise("treeController must be declared");}},onBeforeTreeDestroy: function(message) {this.unlistenTree(message.source);},onAfterAddChild: function(message) {this.listenNode(message.child);},onAfterChangeTree: function(message) {if (!message.oldTree) return;if (!message.newTree || !this.listenedTrees[message.newTree.widgetId]) {this.processDescendants(message.node, this.listenNodeFilter, this.unlistenNode);}
+if (!this.listenedTrees[message.oldTree.widgetId]) {this.processDescendants(message.node, this.listenNodeFilter, this.listenNode);}},listenNode: function(node) {if (!node.tree.DndMode) return;if (this.dragSources[node.widgetId] || this.dropTargets[node.widgetId]) return;var source = null;var target = null;if (!node.actionIsDisabled(node.actions.MOVE)) {var source = this.makeDragSource(node);this.dragSources[node.widgetId] = source;}
+var target = this.makeDropTarget(node);this.dropTargets[node.widgetId] = target;},makeDragSource: function(node) {return new dojo.dnd.TreeDragSourceV3(node.contentNode, this, node.tree.widgetId, node);},makeDropTarget: function(node) {return new dojo.dnd.TreeDropTargetV3(node.contentNode, this.treeController, node.tree.DndAcceptTypes, node);},unlistenNode: function(node) {if (this.dragSources[node.widgetId]) {dojo.dnd.dragManager.unregisterDragSource(this.dragSources[node.widgetId]);delete this.dragSources[node.widgetId];}
+if (this.dropTargets[node.widgetId]) {dojo.dnd.dragManager.unregisterDropTarget(this.dropTargets[node.widgetId]);delete this.dropTargets[node.widgetId];}}
+});
\ No newline at end of file

Propchange: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/widget/TreeDndControllerV3.js
------------------------------------------------------------------------------
    svn:eol-style = native

Added: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/widget/TreeDocIconExtension.js
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/widget/TreeDocIconExtension.js?view=auto&rev=498423
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/widget/TreeDocIconExtension.js (added)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/widget/TreeDocIconExtension.js Sun Jan 21 10:25:59 2007
@@ -0,0 +1,7 @@
+
+dojo.provide("dojo.widget.TreeDocIconExtension");dojo.require("dojo.widget.HtmlWidget");dojo.require("dojo.widget.TreeExtension");dojo.widget.defineWidget(
+"dojo.widget.TreeDocIconExtension",[dojo.widget.TreeExtension],{templateCssPath: dojo.uri.moduleUri("dojo", "widget/templates/TreeDocIcon.css"),listenTreeEvents: ["afterChangeTree","afterSetFolder","afterUnsetFolder"],listenNodeFilter: function(elem) { return elem instanceof dojo.widget.Widget },getnodeDocType: function(node) {var nodeDocType = node.getnodeDocType();if (!nodeDocType) {nodeDocType = node.isFolder ? "Folder" : "Document";}
+return nodeDocType;},setnodeDocTypeClass: function(node) {var reg = new RegExp("(^|\\s)"+node.tree.classPrefix+"Icon\\w+",'g');var clazz = dojo.html.getClass(node.iconNode).replace(reg,'') + ' ' + node.tree.classPrefix+'Icon'+this.getnodeDocType(node);dojo.html.setClass(node.iconNode, clazz);},onAfterSetFolder: function(message) {if (message.source.iconNode) {this.setnodeDocTypeClass(message.source);}},onAfterUnsetFolder: function(message) {this.setnodeDocTypeClass(message.source);},listenNode: function(node) {node.contentIconNode = document.createElement("div");var clazz = node.tree.classPrefix+"IconContent";if (dojo.render.html.ie) {clazz = clazz+' '+ node.tree.classPrefix+"IEIconContent";}
+dojo.html.setClass(node.contentIconNode, clazz);node.contentNode.parentNode.replaceChild(node.contentIconNode, node.expandNode);node.iconNode = document.createElement("div");dojo.html.setClass(node.iconNode, node.tree.classPrefix+"Icon"+' '+node.tree.classPrefix+'Icon'+this.getnodeDocType(node));node.contentIconNode.appendChild(node.expandNode);node.contentIconNode.appendChild(node.iconNode);dojo.dom.removeNode(node.contentNode);node.contentIconNode.appendChild(node.contentNode);},onAfterChangeTree: function(message) {var _this = this;if (!message.oldTree || !this.listenedTrees[message.oldTree.widgetId]) {this.processDescendants(message.node,this.listenNodeFilter,this.listenNode
+);}}
+});
\ No newline at end of file

Propchange: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/widget/TreeDocIconExtension.js
------------------------------------------------------------------------------
    svn:eol-style = native

Added: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/widget/TreeEditor.js
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/widget/TreeEditor.js?view=auto&rev=498423
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/widget/TreeEditor.js (added)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/widget/TreeEditor.js Sun Jan 21 10:25:59 2007
@@ -0,0 +1,10 @@
+
+dojo.require("dojo.widget.*");dojo.require("dojo.widget.HtmlWidget");dojo.require("dojo.widget.RichText");dojo.provide("dojo.widget.TreeEditor");dojo.widget.defineWidget(
+"dojo.widget.TreeEditor",dojo.widget.HtmlWidget,{singleLineMode: false,saveOnBlur: true,sync: false,selectOnOpen: true,controller: null,node: null,richTextParams: {styleSheets: 'src/widget/templates/TreeEditor.css'},getContents: function() {return this.richText.getEditorContent();},open: function(node) {var self = this;var selectFunc = function(){if (self.selectOnOpen && self.richText.isLoaded) {self.richText.execCommand("selectall");}};if (!this.richText) {this.richText = dojo.widget.createWidget("RichText", this.richTextParams, node.labelNode);dojo.event.connect("around", this.richText, "onKeyDown", this, "richText_onKeyDown" );dojo.event.connect(this.richText, "onBlur", this, "richText_onBlur" );dojo.event.connect(this.richText, "onLoad", selectFunc );} else {this.richText.open(node.labelNode);}
+selectFunc();this.node = node;},close: function(save) {this.richText.close(save);this.node = null;},isClosed: function() {return !this.richText || this.richText.isClosed;},execCommand: function() {this.richText.execCommand.apply(this.richText, arguments);},richText_onKeyDown: function(invocation) {var e = invocation.args[0];if((!e)&&(this.object)) {e = dojo.event.browser.fixEvent(this.editor.window.event);}
+switch (e.keyCode) {case e.KEY_ESCAPE:
+this.finish(false);dojo.event.browser.stopEvent(e);break;case e.KEY_ENTER:
+if( e.ctrlKey && !this.singleLineMode ) {this.execCommand( "inserthtml", "<br/>" );}
+else {this.finish(true);}
+dojo.event.browser.stopEvent(e);break;default:
+return invocation.proceed();}},richText_onBlur: function() {this.finish(this.saveOnBlur);},finish: function(save) {return this.controller.editLabelFinish(save, this.sync);}});
\ No newline at end of file

Propchange: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/widget/TreeEditor.js
------------------------------------------------------------------------------
    svn:eol-style = native

Added: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/widget/TreeEmphasizeOnSelect.js
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/widget/TreeEmphasizeOnSelect.js?view=auto&rev=498423
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/widget/TreeEmphasizeOnSelect.js (added)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/widget/TreeEmphasizeOnSelect.js Sun Jan 21 10:25:59 2007
@@ -0,0 +1,5 @@
+
+dojo.provide("dojo.widget.TreeEmphasizeOnSelect");dojo.require("dojo.widget.HtmlWidget");dojo.require("dojo.widget.TreeSelectorV3");dojo.require("dojo.html.selection");dojo.widget.defineWidget(
+"dojo.widget.TreeEmphasizeOnSelect",dojo.widget.HtmlWidget,{selector: "",initialize: function() {this.selector = dojo.widget.byId(this.selector);dojo.event.topic.subscribe(this.selector.eventNames.select, this, "onSelect");dojo.event.topic.subscribe(this.selector.eventNames.deselect, this, "onDeselect");},onSelect: function(message) {message.node.viewEmphasize()
+},onDeselect: function(message) {message.node.viewUnemphasize()
+}});
\ No newline at end of file

Propchange: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/widget/TreeEmphasizeOnSelect.js
------------------------------------------------------------------------------
    svn:eol-style = native

Added: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/widget/TreeExpandToNodeOnSelect.js
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/widget/TreeExpandToNodeOnSelect.js?view=auto&rev=498423
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/widget/TreeExpandToNodeOnSelect.js (added)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/widget/TreeExpandToNodeOnSelect.js Sun Jan 21 10:25:59 2007
@@ -0,0 +1,4 @@
+
+dojo.provide("dojo.widget.TreeExpandToNodeOnSelect");dojo.require("dojo.widget.HtmlWidget");dojo.widget.defineWidget(
+"dojo.widget.TreeExpandToNodeOnSelect",dojo.widget.HtmlWidget,{selector: "",controller: "",withSelected: false,initialize: function() {this.selector = dojo.widget.byId(this.selector);this.controller = dojo.widget.byId(this.controller);dojo.event.topic.subscribe(this.selector.eventNames.select, this, "onSelectEvent");},onSelectEvent: function(message) {this.controller.expandToNode(message.node, this.withSelected)
+}});
\ No newline at end of file

Propchange: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/widget/TreeExpandToNodeOnSelect.js
------------------------------------------------------------------------------
    svn:eol-style = native

Added: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/widget/TreeExtension.js
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/widget/TreeExtension.js?view=auto&rev=498423
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/widget/TreeExtension.js (added)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/widget/TreeExtension.js Sun Jan 21 10:25:59 2007
@@ -0,0 +1,4 @@
+
+dojo.provide("dojo.widget.TreeExtension");dojo.require("dojo.widget.HtmlWidget");dojo.require("dojo.widget.TreeCommon");dojo.widget.defineWidget(
+"dojo.widget.TreeExtension",[dojo.widget.HtmlWidget, dojo.widget.TreeCommon],function() {this.listenedTrees = {};},{}
+);
\ No newline at end of file

Propchange: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/widget/TreeExtension.js
------------------------------------------------------------------------------
    svn:eol-style = native

Added: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/widget/TreeLinkExtension.js
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/widget/TreeLinkExtension.js?view=auto&rev=498423
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/widget/TreeLinkExtension.js (added)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/widget/TreeLinkExtension.js Sun Jan 21 10:25:59 2007
@@ -0,0 +1,5 @@
+
+dojo.provide("dojo.widget.TreeLinkExtension");dojo.require("dojo.widget.HtmlWidget");dojo.require("dojo.widget.TreeExtension");dojo.widget.defineWidget(
+"dojo.widget.TreeLinkExtension",dojo.widget.TreeExtension,function() {this.params = {};},{listenTreeEvents: ["afterChangeTree"],listenTree: function(tree) {dojo.widget.TreeCommon.prototype.listenTree.call(this,tree);var labelNode = tree.labelNodeTemplate;var newLabel = this.makeALabel();dojo.html.setClass(newLabel, dojo.html.getClass(labelNode));labelNode.parentNode.replaceChild(newLabel, labelNode);},makeALabel: function() {var newLabel = document.createElement("a");for(var key in this.params) {if (key in {}) continue;newLabel.setAttribute(key, this.params[key]);}
+return newLabel;},onAfterChangeTree: function(message) {var _this = this;if (!message.oldTree) {this.listenNode(message.node);}},listenNode: function(node) {for(var key in node.object) {if (key in {}) continue;node.labelNode.setAttribute(key, node.object[key]);}}
+});
\ No newline at end of file

Propchange: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/widget/TreeLinkExtension.js
------------------------------------------------------------------------------
    svn:eol-style = native

Added: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/widget/TreeLoadingController.js
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/widget/TreeLoadingController.js?view=auto&rev=498423
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/widget/TreeLoadingController.js (added)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/widget/TreeLoadingController.js Sun Jan 21 10:25:59 2007
@@ -0,0 +1,19 @@
+
+dojo.provide("dojo.widget.TreeLoadingController");dojo.require("dojo.widget.TreeBasicController");dojo.require("dojo.event.*");dojo.require("dojo.json")
+dojo.require("dojo.io.*");dojo.widget.defineWidget("dojo.widget.TreeLoadingController", dojo.widget.TreeBasicController, {RPCUrl: "",RPCActionParam: "action",RPCErrorHandler: function(type, obj, evt) {alert( "RPC Error: " + (obj.message||"no message"));},preventCache: true,getRPCUrl: function(action) {if (this.RPCUrl == "local") {var dir = document.location.href.substr(0, document.location.href.lastIndexOf('/'));var localUrl = dir+"/"+action;return localUrl;}
+if (!this.RPCUrl) {dojo.raise("Empty RPCUrl: can't load");}
+return this.RPCUrl + ( this.RPCUrl.indexOf("?") > -1 ? "&" : "?") + this.RPCActionParam+"="+action;},loadProcessResponse: function(node, result, callObj, callFunc) {if (!dojo.lang.isUndefined(result.error)) {this.RPCErrorHandler("server", result.error);return false;}
+var newChildren = result;if (!dojo.lang.isArray(newChildren)) {dojo.raise('loadProcessResponse: Not array loaded: '+newChildren);}
+for(var i=0; i<newChildren.length; i++) {newChildren[i] = dojo.widget.createWidget(node.widgetType, newChildren[i]);node.addChild(newChildren[i]);}
+node.state = node.loadStates.LOADED;if (dojo.lang.isFunction(callFunc)) {callFunc.apply(dojo.lang.isUndefined(callObj) ? this : callObj, [node, newChildren]);}},getInfo: function(obj) {return obj.getInfo();},runRPC: function(kw) {var _this = this;var handle = function(type, data, evt) {if (kw.lock) {dojo.lang.forEach(kw.lock,function(t) { t.unlock() }
+);}
+if(type == "load"){kw.load.call(this, data);}else{this.RPCErrorHandler(type, data, evt);}}
+if (kw.lock) {dojo.lang.forEach(kw.lock,function(t) { t.lock() }
+);}
+dojo.io.bind({url: kw.url,handle: dojo.lang.hitch(this, handle),mimetype: "text/json",preventCache: _this.preventCache,sync: kw.sync,content: { data: dojo.json.serialize(kw.params) }});},loadRemote: function(node, sync, callObj, callFunc){var _this = this;var params = {node: this.getInfo(node),tree: this.getInfo(node.tree)
+};this.runRPC({url: this.getRPCUrl('getChildren'),load: function(result) {_this.loadProcessResponse(node, result, callObj, callFunc) ;},sync: sync,lock: [node],params: params
+});},expand: function(node, sync, callObj, callFunc) {if (node.state == node.loadStates.UNCHECKED && node.isFolder) {this.loadRemote(node, sync,this,function(node, newChildren) {this.expand(node, sync, callObj, callFunc);}
+);return;}
+dojo.widget.TreeBasicController.prototype.expand.apply(this, arguments);},doMove: function(child, newParent, index) {if (newParent.isTreeNode && newParent.state == newParent.loadStates.UNCHECKED) {this.loadRemote(newParent, true);}
+return dojo.widget.TreeBasicController.prototype.doMove.apply(this, arguments);},doCreateChild: function(parent, index, data, callObj, callFunc) {if (parent.state == parent.loadStates.UNCHECKED) {this.loadRemote(parent, true);}
+return dojo.widget.TreeBasicController.prototype.doCreateChild.apply(this, arguments);}});
\ No newline at end of file

Propchange: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/widget/TreeLoadingController.js
------------------------------------------------------------------------------
    svn:eol-style = native

Added: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/widget/TreeLoadingControllerV3.js
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/widget/TreeLoadingControllerV3.js?view=auto&rev=498423
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/widget/TreeLoadingControllerV3.js (added)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/widget/TreeLoadingControllerV3.js Sun Jan 21 10:25:59 2007
@@ -0,0 +1,44 @@
+
+dojo.provide("dojo.widget.TreeLoadingControllerV3");dojo.require("dojo.widget.TreeBasicControllerV3");dojo.require("dojo.event.*");dojo.require("dojo.json")
+dojo.require("dojo.io.*");dojo.require("dojo.Deferred");dojo.require("dojo.DeferredList");dojo.declare(
+"dojo.Error",Error,function(message, extra) {this.message = message;this.extra = extra;this.stack = (new Error()).stack;}
+);dojo.declare(
+"dojo.CommunicationError",dojo.Error,function() {this.name="CommunicationError";}
+);dojo.declare(
+"dojo.LockedError",dojo.Error,function() {this.name="LockedError";}
+);dojo.declare(
+"dojo.FormatError",dojo.Error,function() {this.name="FormatError";}
+);dojo.declare(
+"dojo.RpcError",dojo.Error,function() {this.name="RpcError";}
+);dojo.widget.defineWidget(
+"dojo.widget.TreeLoadingControllerV3",dojo.widget.TreeBasicControllerV3,{RpcUrl: "",RpcActionParam: "action",preventCache: true,checkValidRpcResponse: function(type, obj) {if (type != "load") {var extra = {}
+for(var i=1; i<arguments.length;i++) {dojo.lang.mixin(extra, arguments[i]);}
+return new dojo.CommunicationError(obj, extra);}
+if (typeof obj != 'object') {return new dojo.FormatError("Wrong server answer format "+(obj && obj.toSource ? obj.toSource() : obj)+" type "+(typeof obj), obj);}
+if (!dojo.lang.isUndefined(obj.error)) {return new dojo.RpcError(obj.error, obj);}
+return false;},getDeferredBindHandler: function( deferred){return dojo.lang.hitch(this,function(type, obj){var error = this.checkValidRpcResponse.apply(this, arguments);if (error) {deferred.errback(error);return;}
+deferred.callback(obj);}
+);},getRpcUrl: function(action) {if (this.RpcUrl == "local") {var dir = document.location.href.substr(0, document.location.href.lastIndexOf('/'));var localUrl = dir+"/local/"+action;return localUrl;}
+if (!this.RpcUrl) {dojo.raise("Empty RpcUrl: can't load");}
+var url = this.RpcUrl;if (url.indexOf("/") != 0) {var protocol = document.location.href.replace(/:\/\/.*/,'');var prefix = document.location.href.substring(protocol.length+3);if (prefix.lastIndexOf("/") != prefix.length-1) {prefix = prefix.replace(/\/[^\/]+$/,'/');}
+if (prefix.lastIndexOf("/") != prefix.length-1) {prefix = prefix+'/';}
+url = protocol + '://' + prefix + url;}
+return url + (url.indexOf("?")>-1 ? "&" : "?") + this.RpcActionParam+"="+action;},loadProcessResponse: function(node, result) {if (!dojo.lang.isArray(result)) {throw new dojo.FormatError('loadProcessResponse: Not array loaded: '+result);}
+node.setChildren(result);},runRpc: function(kw) {var _this = this;var deferred = new dojo.Deferred();dojo.io.bind({url: kw.url,handle: this.getDeferredBindHandler(deferred),mimetype: "text/javascript",preventCache: this.preventCache,sync: kw.sync,content: { data: dojo.json.serialize(kw.params) }});return deferred;},loadRemote: function(node, sync){var _this = this;var params = {node: this.getInfo(node),tree: this.getInfo(node.tree)
+};var deferred = this.runRpc({url: this.getRpcUrl('getChildren'),sync: sync,params: params
+});deferred.addCallback(function(res) { return _this.loadProcessResponse(node,res) });return deferred;},batchExpandTimeout: 0,recurseToLevel: function(widget, level, callFunc, callObj, skipFirst, sync) {if (level == 0) return;if (!skipFirst) {var deferred = callFunc.call(callObj, widget, sync);} else {var deferred = dojo.Deferred.prototype.makeCalled();}
+var _this = this;var recurseOnExpand = function() {var children = widget.children;var deferreds = [];for(var i=0; i<children.length; i++) {deferreds.push(_this.recurseToLevel(children[i], level-1, callFunc, callObj, sync));}
+return new dojo.DeferredList(deferreds);}
+deferred.addCallback(recurseOnExpand);return deferred;},expandToLevel: function(nodeOrTree, level, sync) {return this.recurseToLevel(nodeOrTree, nodeOrTree.isTree ? level+1 : level, this.expand, this, nodeOrTree.isTree, sync);},loadToLevel: function(nodeOrTree, level, sync) {return this.recurseToLevel(nodeOrTree, nodeOrTree.isTree ? level+1 : level, this.loadIfNeeded, this, nodeOrTree.isTree, sync);},loadAll: function(nodeOrTree, sync) {return this.loadToLevel(nodeOrTree, Number.POSITIVE_INFINITY, sync);},expand: function(node, sync) {var _this = this;var deferred = this.startProcessing(node);deferred.addCallback(function() {return _this.loadIfNeeded(node, sync);});deferred.addCallback(function(res) {dojo.widget.TreeBasicControllerV3.prototype.expand(node);return res;});deferred.addBoth(function(res) {_this.finishProcessing(node);return res;});return deferred;},loadIfNeeded: function(node, sync) {var deferred
+if (node.state == node.loadStates.UNCHECKED && node.isFolder && !node.children.length) {deferred = this.loadRemote(node, sync);} else {deferred = new dojo.Deferred();deferred.callback();}
+return deferred;},runStages: function(check, prepare, make, finalize, expose, args) {var _this = this;if (check && !check.apply(this, args)) {return false;}
+var deferred = dojo.Deferred.prototype.makeCalled();if (prepare) {deferred.addCallback(function() {return prepare.apply(_this, args);});}
+if (make) {deferred.addCallback(function() {var res = make.apply(_this, args);return res;});}
+if (finalize) {deferred.addBoth(function(res) {finalize.apply(_this, args);return res;});}
+if (expose) {deferred.addCallback(function(res) {expose.apply(_this, args);return res;});}
+return deferred;},startProcessing: function(nodesArray) {var deferred = new dojo.Deferred();var nodes = dojo.lang.isArray(nodesArray) ? nodesArray : arguments;for(var i=0;i<nodes.length;i++) {if (nodes[i].isLocked()) {deferred.errback(new dojo.LockedError("item locked "+nodes[i], nodes[i]));return deferred;}
+if (nodes[i].isTreeNode) {nodes[i].markProcessing();}
+nodes[i].lock();}
+deferred.callback();return deferred;},finishProcessing: function(nodesArray) {var nodes = dojo.lang.isArray(nodesArray) ? nodesArray : arguments;for(var i=0;i<nodes.length;i++) {if (!nodes[i].hasLock()) {continue;}
+nodes[i].unlock();if (nodes[i].isTreeNode) {nodes[i].unmarkProcessing();}}
+},refreshChildren: function(nodeOrTree, sync) {return this.runStages(null, this.prepareRefreshChildren, this.doRefreshChildren, this.finalizeRefreshChildren, this.exposeRefreshChildren, arguments);},prepareRefreshChildren: function(nodeOrTree, sync) {var deferred = this.startProcessing(nodeOrTree);nodeOrTree.destroyChildren();nodeOrTree.state = nodeOrTree.loadStates.UNCHECKED;return deferred;},doRefreshChildren: function(nodeOrTree, sync) {return this.loadRemote(nodeOrTree, sync);},finalizeRefreshChildren: function(nodeOrTree, sync) {this.finishProcessing(nodeOrTree);},exposeRefreshChildren: function(nodeOrTree, sync) {nodeOrTree.expand();},move: function(child, newParent, index) {return this.runStages(this.canMove, this.prepareMove, this.doMove, this.finalizeMove, this.exposeMove, arguments);},doMove: function(child, newParent, index) {child.tree.move(child, newParent, index);return true;},prepareMove: function(child, newParent, index, sync) {var deferred = this.startProces
 sing(newParent);deferred.addCallback(dojo.lang.hitch(this, function() {return this.loadIfNeeded(newParent, sync);}));return deferred;},finalizeMove: function(child, newParent) {this.finishProcessing(newParent);},prepareCreateChild: function(parent, index, data, sync) {var deferred = this.startProcessing(parent);deferred.addCallback(dojo.lang.hitch(this, function() {return this.loadIfNeeded(parent, sync);}));return deferred;},finalizeCreateChild: function(parent) {this.finishProcessing(parent);},prepareClone: function(child, newParent, index, deep, sync) {var deferred = this.startProcessing(child, newParent);deferred.addCallback(dojo.lang.hitch(this, function() {return this.loadIfNeeded(newParent, sync);}));return deferred;},finalizeClone: function(child, newParent) {this.finishProcessing(child, newParent);}});
\ No newline at end of file

Propchange: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/widget/TreeLoadingControllerV3.js
------------------------------------------------------------------------------
    svn:eol-style = native

Added: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/widget/TreeNode.js
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/widget/TreeNode.js?view=auto&rev=498423
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/widget/TreeNode.js (added)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/widget/TreeNode.js Sun Jan 21 10:25:59 2007
@@ -0,0 +1,38 @@
+
+dojo.provide("dojo.widget.TreeNode");dojo.require("dojo.html.*");dojo.require("dojo.event.*");dojo.require("dojo.io.*");dojo.widget.defineWidget("dojo.widget.TreeNode", dojo.widget.HtmlWidget, function() {this.actionsDisabled = [];},{widgetType: "TreeNode",loadStates: {UNCHECKED: "UNCHECKED",LOADING: "LOADING",LOADED: "LOADED"
+},actions: {MOVE: "MOVE",REMOVE: "REMOVE",EDIT: "EDIT",ADDCHILD: "ADDCHILD"
+},isContainer: true,lockLevel: 0,templateString: ('<div class="dojoTreeNode"> '
++ '<span treeNode="${this.widgetId}" class="dojoTreeNodeLabel" dojoAttachPoint="labelNode"> '
++ '<span dojoAttachPoint="titleNode" dojoAttachEvent="onClick: onTitleClick" class="dojoTreeNodeLabelTitle">${this.title}</span> '
++ '</span> '
++ '<span class="dojoTreeNodeAfterLabel" dojoAttachPoint="afterLabelNode">${this.afterLabel}</span> '
++ '<div dojoAttachPoint="containerNode" style="display:none"></div> '
++ '</div>').replace(/(>|<)\s+/g, '$1'),childIconSrc: "",childIconFolderSrc: dojo.uri.moduleUri("dojo", "widget/templates/images/Tree/closed.gif"),childIconDocumentSrc: dojo.uri.moduleUri("dojo", "widget/templates/images/Tree/document.gif"),childIcon: null,isTreeNode: true,objectId: "",afterLabel: "",afterLabelNode: null,expandIcon: null,title: "",object: "",isFolder: false,labelNode: null,titleNode: null,imgs: null,expandLevel: "",tree: null,depth: 0,isExpanded: false,state: null,domNodeInitialized: false,isFirstChild: function() {return this.getParentIndex() == 0 ? true: false;},isLastChild: function() {return this.getParentIndex() == this.parent.children.length-1 ? true : false;},lock: function(){ return this.tree.lock.apply(this, arguments) },unlock: function(){ return this.tree.unlock.apply(this, arguments) },isLocked: function(){ return this.tree.isLocked.apply(this, arguments) },cleanLock: function(){ return this.tree.cleanLock.apply(this, arguments) },actionIsDisabled
 : function(action) {var _this = this;var disabled = false;if (this.tree.strictFolders && action == this.actions.ADDCHILD && !this.isFolder) {disabled = true;}
+if (dojo.lang.inArray(_this.actionsDisabled, action)) {disabled = true;}
+if (this.isLocked()) {disabled = true;}
+return disabled;},getInfo: function() {var info = {widgetId: this.widgetId,objectId: this.objectId,index: this.getParentIndex(),isFolder: this.isFolder
+}
+return info;},initialize: function(args, frag){this.state = this.loadStates.UNCHECKED;for(var i=0; i<this.actionsDisabled.length; i++) {this.actionsDisabled[i] = this.actionsDisabled[i].toUpperCase();}
+this.expandLevel = parseInt(this.expandLevel);},adjustDepth: function(depthDiff) {for(var i=0; i<this.children.length; i++) {this.children[i].adjustDepth(depthDiff);}
+this.depth += depthDiff;if (depthDiff>0) {for(var i=0; i<depthDiff; i++) {var img = this.tree.makeBlankImg();this.imgs.unshift(img);dojo.html.insertBefore(this.imgs[0], this.domNode.firstChild);}}
+if (depthDiff<0) {for(var i=0; i<-depthDiff;i++) {this.imgs.shift();dojo.html.removeNode(this.domNode.firstChild);}}
+},markLoading: function() {this._markLoadingSavedIcon = this.expandIcon.src;this.expandIcon.src = this.tree.expandIconSrcLoading;},unMarkLoading: function() {if (!this._markLoadingSavedIcon) return;var im = new Image();im.src = this.tree.expandIconSrcLoading;if (this.expandIcon.src == im.src) {this.expandIcon.src = this._markLoadingSavedIcon;}
+this._markLoadingSavedIcon = null;},setFolder: function() {dojo.event.connect(this.expandIcon, 'onclick', this, 'onTreeClick');this.expandIcon.src = this.isExpanded ? this.tree.expandIconSrcMinus : this.tree.expandIconSrcPlus;this.isFolder = true;},createDOMNode: function(tree, depth){this.tree = tree;this.depth = depth;this.imgs = [];for(var i=0; i<this.depth+1; i++){var img = this.tree.makeBlankImg();this.domNode.insertBefore(img, this.labelNode);this.imgs.push(img);}
+this.expandIcon = this.imgs[this.imgs.length-1];this.childIcon = this.tree.makeBlankImg();this.imgs.push(this.childIcon);dojo.html.insertBefore(this.childIcon, this.titleNode);if (this.children.length || this.isFolder) {this.setFolder();}
+else {this.state = this.loadStates.LOADED;}
+dojo.event.connect(this.childIcon, 'onclick', this, 'onIconClick');for(var i=0; i<this.children.length; i++){this.children[i].parent = this;var node = this.children[i].createDOMNode(this.tree, this.depth+1);this.containerNode.appendChild(node);}
+if (this.children.length) {this.state = this.loadStates.LOADED;}
+this.updateIcons();this.domNodeInitialized = true;dojo.event.topic.publish(this.tree.eventNames.createDOMNode, { source: this } );return this.domNode;},onTreeClick: function(e){dojo.event.topic.publish(this.tree.eventNames.treeClick, { source: this, event: e });},onIconClick: function(e){dojo.event.topic.publish(this.tree.eventNames.iconClick, { source: this, event: e });},onTitleClick: function(e){dojo.event.topic.publish(this.tree.eventNames.titleClick, { source: this, event: e });},markSelected: function() {dojo.html.addClass(this.titleNode, 'dojoTreeNodeLabelSelected');},unMarkSelected: function() {dojo.html.removeClass(this.titleNode, 'dojoTreeNodeLabelSelected');},updateExpandIcon: function() {if (this.isFolder){this.expandIcon.src = this.isExpanded ? this.tree.expandIconSrcMinus : this.tree.expandIconSrcPlus;} else {this.expandIcon.src = this.tree.blankIconSrc;}},updateExpandGrid: function() {if (this.tree.showGrid){if (this.depth){this.setGridImage(-2, this.isLastChi
 ld() ? this.tree.gridIconSrcL : this.tree.gridIconSrcT);}else{if (this.isFirstChild()){this.setGridImage(-2, this.isLastChild() ? this.tree.gridIconSrcX : this.tree.gridIconSrcY);}else{this.setGridImage(-2, this.isLastChild() ? this.tree.gridIconSrcL : this.tree.gridIconSrcT);}}
+}else{this.setGridImage(-2, this.tree.blankIconSrc);}},updateChildGrid: function() {if ((this.depth || this.tree.showRootGrid) && this.tree.showGrid){this.setGridImage(-1, (this.children.length && this.isExpanded) ? this.tree.gridIconSrcP : this.tree.gridIconSrcC);}else{if (this.tree.showGrid && !this.tree.showRootGrid){this.setGridImage(-1, (this.children.length && this.isExpanded) ? this.tree.gridIconSrcZ : this.tree.blankIconSrc);}else{this.setGridImage(-1, this.tree.blankIconSrc);}}
+},updateParentGrid: function() {var parent = this.parent;for(var i=0; i<this.depth; i++){var idx = this.imgs.length-(3+i);var img = (this.tree.showGrid && !parent.isLastChild()) ? this.tree.gridIconSrcV : this.tree.blankIconSrc;this.setGridImage(idx, img);parent = parent.parent;}},updateExpandGridColumn: function() {if (!this.tree.showGrid) return;var _this = this;var icon = this.isLastChild() ? this.tree.blankIconSrc : this.tree.gridIconSrcV;dojo.lang.forEach(_this.getDescendants(),function(node) { node.setGridImage(_this.depth, icon); }
+);this.updateExpandGrid();},updateIcons: function(){this.imgs[0].style.display = this.tree.showRootGrid ? 'inline' : 'none';this.buildChildIcon();this.updateExpandGrid();this.updateChildGrid();this.updateParentGrid();dojo.profile.stop("updateIcons")
+},buildChildIcon: function() {if(this.childIconSrc){this.childIcon.src = this.childIconSrc;}
+this.childIcon.style.display = this.childIconSrc ? 'inline' : 'none';},setGridImage: function(idx, src){if (idx < 0){idx = this.imgs.length + idx;}
+this.imgs[idx].style.backgroundImage = 'url(' + src + ')';},updateIconTree: function(){this.tree.updateIconTree.call(this);},expand: function(){if (this.isExpanded) return;if (this.children.length) {this.showChildren();}
+this.isExpanded = true;this.updateExpandIcon();dojo.event.topic.publish(this.tree.eventNames.expand, {source: this} );},collapse: function(){if (!this.isExpanded) return;this.hideChildren();this.isExpanded = false;this.updateExpandIcon();dojo.event.topic.publish(this.tree.eventNames.collapse, {source: this} );},hideChildren: function(){this.tree.toggleObj.hide(
+this.containerNode, this.toggleDuration, this.explodeSrc, dojo.lang.hitch(this, "onHide")
+);if(dojo.exists(dojo, 'dnd.dragManager.dragObjects') && dojo.dnd.dragManager.dragObjects.length) {dojo.dnd.dragManager.cacheTargetLocations();}},showChildren: function(){this.tree.toggleObj.show(
+this.containerNode, this.toggleDuration, this.explodeSrc, dojo.lang.hitch(this, "onShow")
+);if(dojo.exists(dojo, 'dnd.dragManager.dragObjects') && dojo.dnd.dragManager.dragObjects.length) {dojo.dnd.dragManager.cacheTargetLocations();}},addChild: function(){return this.tree.addChild.apply(this, arguments);},doAddChild: function(){return this.tree.doAddChild.apply(this, arguments);},edit: function(props) {dojo.lang.mixin(this, props);if (props.title) {this.titleNode.innerHTML = this.title;}
+if (props.afterLabel) {this.afterLabelNode.innerHTML = this.afterLabel;}
+if (props.childIconSrc) {this.buildChildIcon();}},removeNode: function(){ return this.tree.removeNode.apply(this, arguments) },doRemoveNode: function(){ return this.tree.doRemoveNode.apply(this, arguments) },toString: function() {return "["+this.widgetType+" Tree:"+this.tree+" ID:"+this.widgetId+" Title:"+this.title+"]";}});
\ No newline at end of file

Propchange: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/widget/TreeNode.js
------------------------------------------------------------------------------
    svn:eol-style = native