From 1354d17270961fff662d40f90521223f8fd0d73b Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Tue, 14 Aug 2012 18:59:10 +0400 Subject: update dojo to 1.7.3 --- lib/dojo/NodeList-data.js | 171 +--------------------------------------------- 1 file changed, 2 insertions(+), 169 deletions(-) (limited to 'lib/dojo/NodeList-data.js') diff --git a/lib/dojo/NodeList-data.js b/lib/dojo/NodeList-data.js index 0126448d2..5f6b4fb7e 100644 --- a/lib/dojo/NodeList-data.js +++ b/lib/dojo/NodeList-data.js @@ -4,172 +4,5 @@ see: http://dojotoolkit.org/license for details */ - -if(!dojo._hasResource["dojo.NodeList-data"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. -dojo._hasResource["dojo.NodeList-data"] = true; -dojo.provide("dojo.NodeList-data"); - -(function(d){ - -/*===== - dojo.NodeList.prototype.data = function(key, value){ - // summary: stash or get some arbitrary data on/from these nodes. - // - // description: - // Stash or get some arbirtrary data on/from these nodes. This private _data function is - // exposed publicly on `dojo.NodeList`, eg: as the result of a `dojo.query` call. - // DIFFERS from jQuery.data in that when used as a getter, the entire list is ALWAYS - // returned. EVEN WHEN THE LIST IS length == 1. - // - // A single-node version of this function is provided as `dojo._nodeData`, which follows - // the same signature, though expects a String ID or DomNode reference in the first - // position, before key/value arguments. - // - // node: String|DomNode - // The node to associate data with - // - // key: Object?|String? - // If an object, act as a setter and iterate over said object setting data items as defined. - // If a string, and `value` present, set the data for defined `key` to `value` - // If a string, and `value` absent, act as a getter, returning the data associated with said `key` - // - // value: Anything? - // The value to set for said `key`, provided `key` is a string (and not an object) - // - // example: - // Set a key `bar` to some data, then retrieve it. - // | dojo.query(".foo").data("bar", "touched"); - // | var touched = dojo.query(".foo").data("bar"); - // | if(touched[0] == "touched"){ alert('win'); } - // - // example: - // Get all the data items for a given node. - // | var list = dojo.query(".foo").data(); - // | var first = list[0]; - // - // example: - // Set the data to a complex hash. Overwrites existing keys with new value - // | dojo.query(".foo").data({ bar:"baz", foo:"bar" }); - // Then get some random key: - // | dojo.query(".foo").data("foo"); // returns [`bar`] - // - // returns: Object|Anything|Nothing - // When used as a setter via `dojo.NodeList`, a NodeList instance is returned - // for further chaning. When used as a getter via `dojo.NodeList` an ARRAY - // of items is returned. The items in the array correspond to the elements - // in the original list. This is true even when the list length is 1, eg: - // when looking up a node by ID (#foo) - }; - - dojo.NodeList.prototype.removeData = function(key){ - // summary: Remove the data associated with these nodes. - // key: String? - // If ommitted, clean all data for this node. - // If passed, remove the data item found at `key` - }; - - dojo._nodeDataCache = { - // summary: An alias to the private dataCache for NodeList-data. NEVER USE THIS! - // This private is only exposed for the benefit of unit testing, and is - // removed during the build process. - }; - -=====*/ - - var dataCache = {}, x = 0, dataattr = "data-dojo-dataid", nl = d.NodeList, - dopid = function(node){ - // summary: Return a uniqueish ID for the passed node reference - var pid = d.attr(node, dataattr); - if(!pid){ - pid = "pid" + (x++); - d.attr(node, dataattr, pid); - } - return pid; - } - ; - - - var dodata = d._nodeData = function(node, key, value){ - - var pid = dopid(node), r; - if(!dataCache[pid]){ dataCache[pid] = {}; } - - // API discrepency: calling with only a node returns the whole object. $.data throws - if(arguments.length == 1){ r = dataCache[pid]; } - if(typeof key == "string"){ - // either getter or setter, based on `value` presence - if(arguments.length > 2){ - dataCache[pid][key] = value; - }else{ - r = dataCache[pid][key]; - } - }else{ - // must be a setter, mix `value` into data hash - // API discrepency: using object as setter works here - r = d._mixin(dataCache[pid], key); - } - - return r; // Object|Anything|Nothing - }; - - var removeData = d._removeNodeData = function(node, key){ - // summary: Remove some data from this node - // node: String|DomNode - // The node reference to remove data from - // key: String? - // If omitted, remove all data in this dataset. - // If passed, remove only the passed `key` in the associated dataset - var pid = dopid(node); - if(dataCache[pid]){ - if(key){ - delete dataCache[pid][key]; - }else{ - delete dataCache[pid]; - } - } - }; - - d._gcNodeData = function(){ - // summary: super expensive: GC all data in the data for nodes that no longer exist in the dom. - // description: - // super expensive: GC all data in the data for nodes that no longer exist in the dom. - // MUCH safer to do this yourself, manually, on a per-node basis (via `NodeList.removeData()`) - // provided as a stop-gap for exceptionally large/complex applications with constantly changing - // content regions (eg: a dijit.layout.ContentPane with replacing data) - // There is NO automatic GC going on. If you dojo.destroy() a node, you should _removeNodeData - // prior to destruction. - var livePids = dojo.query("[" + dataattr + "]").map(dopid); - for(var i in dataCache){ - if(dojo.indexOf(livePids, i) < 0){ delete dataCache[i]; } - } - }; - - // make nodeData and removeNodeData public on dojo.NodeList: - d.extend(nl, { - data: nl._adaptWithCondition(dodata, function(a){ - return a.length === 0 || a.length == 1 && (typeof a[0] == "string"); - }), - removeData: nl._adaptAsForEach(removeData) - }); - -// TODO: this is the basic implemetation of adaptWithCondtionAndWhenMappedConsiderLength, for lack of a better API name -// it conflicts with the the `dojo.NodeList` way: always always return an arrayLike thinger. Consider for 2.0: -// -// nl.prototype.data = function(key, value){ -// var a = arguments, r; -// if(a.length === 0 || a.length == 1 && (typeof a[0] == "string")){ -// r = this.map(function(node){ -// return d._data(node, key); -// }); -// if(r.length == 1){ r = r[0]; } // the offending line, and the diff on adaptWithCondition -// }else{ -// r = this.forEach(function(node){ -// d._data(node, key, value); -// }); -// } -// return r; // dojo.NodeList|Array|SingleItem -// }; - -})(dojo); - -} +//>>built +define("dojo/NodeList-data",["./_base/kernel","./query","./_base/lang","./_base/array","./dom-attr"],function(_1,_2,_3,_4,_5){var _6=_2.NodeList;var _7={},x=0,_8="data-dojo-dataid",_9=function(_a){var _b=_5.get(_a,_8);if(!_b){_b="pid"+(x++);_5.set(_a,_8,_b);}return _b;};var _c=_1._nodeData=function(_d,_e,_f){var pid=_9(_d),r;if(!_7[pid]){_7[pid]={};}if(arguments.length==1){r=_7[pid];}if(typeof _e=="string"){if(arguments.length>2){_7[pid][_e]=_f;}else{r=_7[pid][_e];}}else{r=_3.mixin(_7[pid],_e);}return r;};var _10=_1._removeNodeData=function(_11,key){var pid=_9(_11);if(_7[pid]){if(key){delete _7[pid][key];}else{delete _7[pid];}}};_1._gcNodeData=function(){var _12=_2("["+_8+"]").map(_9);for(var i in _7){if(_4.indexOf(_12,i)<0){delete _7[i];}}};_3.extend(_6,{data:_6._adaptWithCondition(_c,function(a){return a.length===0||a.length==1&&(typeof a[0]=="string");}),removeData:_6._adaptAsForEach(_10)});return _6;}); \ No newline at end of file -- cgit v1.2.3