UNPKG

dijit

Version:

Dijit provides a complete collection of user interface controls based on Dojo, giving you the power to create web applications that are highly optimized for usability, performance, internationalization, accessibility, but above all deliver an incredible u

164 lines (143 loc) 4.42 kB
define([ "dojo/aspect", // aspect.after "dojo/_base/declare", // declare "dojo/dom-class", // domClass.add domClass.remove domClass.replace "dojo/_base/lang", // lang.mixin lang.hitch "dojo/on", "dojo/touch" ], function(aspect, declare, domClass, lang, on, touch){ // module: // dijit/tree/_dndContainer /*===== var __Args = { // summary: // A dict of parameters for Tree source configuration. // isSource: Boolean? // Can be used as a DnD source. Defaults to true. // accept: String[] // List of accepted types (text strings) for a target; defaults to // ["text", "treeNode"] // copyOnly: Boolean? // Copy items, if true, use a state of Ctrl key otherwise, // dragThreshold: Number // The move delay in pixels before detecting a drag; 0 by default // betweenThreshold: Integer // Distance from upper/lower edge of node to allow drop to reorder nodes }; =====*/ return declare("dijit.tree._dndContainer", null, { // summary: // This is a base class for `dijit/tree/_dndSelector`, and isn't meant to be used directly. // It's modeled after `dojo/dnd/Container`. // tags: // protected /*===== // current: TreeNode // The currently hovered TreeNode. Not set to anything for keyboard operation. (TODO: change?) current: null, =====*/ constructor: function(tree, params){ // summary: // A constructor of the Container // tree: Node // Node or node's id to build the container on // params: __Args // A dict of parameters, which gets mixed into the object // tags: // private this.tree = tree; this.node = tree.domNode; // TODO: rename; it's not a TreeNode but the whole Tree lang.mixin(this, params); // states this.containerState = ""; domClass.add(this.node, "dojoDndContainer"); // set up events this.events = [ // Mouse (or touch) enter/leave on Tree itself on(this.node, touch.enter, lang.hitch(this, "onOverEvent")), on(this.node, touch.leave, lang.hitch(this, "onOutEvent")), // switching between TreeNodes aspect.after(this.tree, "_onNodeMouseEnter", lang.hitch(this, "onMouseOver"), true), aspect.after(this.tree, "_onNodeMouseLeave", lang.hitch(this, "onMouseOut"), true), // cancel text selection and text dragging on(this.node, "dragstart, selectstart", function(evt){ evt.preventDefault(); }) ]; }, destroy: function(){ // summary: // Prepares this object to be garbage-collected var h; while(h = this.events.pop()){ h.remove(); } // this.clearItems(); this.node = this.parent = null; }, // mouse events onMouseOver: function(widget /*===== , evt =====*/){ // summary: // Called when mouse is moved over a TreeNode // widget: TreeNode // evt: Event // tags: // protected this.current = widget; }, onMouseOut: function(/*===== widget, evt =====*/){ // summary: // Called when mouse is moved away from a TreeNode // widget: TreeNode // evt: Event // tags: // protected this.current = null; }, _changeState: function(type, newState){ // summary: // Changes a named state to new state value // type: String // A name of the state to change // newState: String // new state var prefix = "dojoDnd" + type; var state = type.toLowerCase() + "State"; //domClass.replace(this.node, prefix + newState, prefix + this[state]); domClass.replace(this.node, prefix + newState, prefix + this[state]); this[state] = newState; }, _addItemClass: function(node, type){ // summary: // Adds a class with prefix "dojoDndItem" // node: Node // A node // type: String // A variable suffix for a class name domClass.add(node, "dojoDndItem" + type); }, _removeItemClass: function(node, type){ // summary: // Removes a class with prefix "dojoDndItem" // node: Node // A node // type: String // A variable suffix for a class name domClass.remove(node, "dojoDndItem" + type); }, onOverEvent: function(){ // summary: // This function is called once, when mouse is over our container // tags: // protected this._changeState("Container", "Over"); }, onOutEvent: function(){ // summary: // This function is called once, when mouse is out of our container // tags: // protected this._changeState("Container", ""); } }); });