]> git.wh0rd.org - tt-rss.git/blobdiff - lib/dojo/behavior.js
upgrade dojo to 1.8.3 (refs #570)
[tt-rss.git] / lib / dojo / behavior.js
index 15f1f23a3ba7a3bcded0a009bd30a9214d9e7995..40d5d6a7ff75ecdf1cc7c81d5703beb47d131f45 100644 (file)
@@ -1,250 +1,8 @@
 /*
-       Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
+       Copyright (c) 2004-2012, The Dojo Foundation All Rights Reserved.
        Available via Academic Free License >= 2.1 OR the modified BSD license.
        see: http://dojotoolkit.org/license for details
 */
 
-
-if(!dojo._hasResource["dojo.behavior"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dojo.behavior"] = true;
-dojo.provide("dojo.behavior");
-
-dojo.behavior = new function(){
-       // summary: 
-       //              Utility for unobtrusive/progressive event binding, DOM traversal,
-       //              and manipulation.
-       //
-       // description:
-       //              
-       //              A very simple, lightweight mechanism for applying code to 
-       //              existing documents, based around `dojo.query` (CSS3 selectors) for node selection, 
-       //              and a simple two-command API: `dojo.behavior.add()` and `dojo.behavior.apply()`;
-       //      
-       //              Behaviors apply to a given page, and are registered following the syntax 
-       //              options described by `dojo.behavior.add` to match nodes to actions, or "behaviors".
-       //              
-       //              Added behaviors are applied to the current DOM when .apply() is called,
-       //              matching only new nodes found since .apply() was last called. 
-       //              
-       function arrIn(obj, name){
-               if(!obj[name]){ obj[name] = []; }
-               return obj[name];
-       }
-
-       var _inc = 0;
-
-       function forIn(obj, scope, func){
-               var tmpObj = {};
-               for(var x in obj){
-                       if(typeof tmpObj[x] == "undefined"){
-                               if(!func){
-                                       scope(obj[x], x);
-                               }else{
-                                       func.call(scope, obj[x], x);
-                               }
-                       }
-               }
-       }
-
-       // FIXME: need a better test so we don't exclude nightly Safari's!
-       this._behaviors = {};
-       this.add = function(/* Object */behaviorObj){
-               //      summary:
-               //              Add the specified behavior to the list of behaviors, ignoring existing
-               //              matches. 
-               //
-               //      description:
-               //              Add the specified behavior to the list of behaviors which will
-               //              be applied the next time apply() is called. Calls to add() for
-               //              an already existing behavior do not replace the previous rules,
-               //              but are instead additive. New nodes which match the rule will
-               //              have all add()-ed behaviors applied to them when matched.
-               //              
-               //              The "found" method is a generalized handler that's called as soon
-               //              as the node matches the selector. Rules for values that follow also
-               //              apply to the "found" key.
-               //              
-               //              The "on*" handlers are attached with `dojo.connect()`, using the 
-               //              matching node
-               //              
-               //              If the value corresponding to the ID key is a function and not a
-               //              list, it's treated as though it was the value of "found".
-               //
-               //              dojo.behavior.add() can be called any number of times before 
-               //              the DOM is ready. `dojo.behavior.apply()` is called automatically
-               //              by `dojo.addOnLoad`, though can be called to re-apply previously added
-               //              behaviors anytime the DOM changes.
-               //
-               //              There are a variety of formats permitted in the behaviorObject
-               //      
-               //      example:
-               //              Simple list of properties. "found" is special. "Found" is assumed if 
-               //              no property object for a given selector, and property is a function.
-               //
-               //      |       dojo.behavior.add({
-               //      |               "#id": {
-               //      |                       "found": function(element){
-               //      |                               // node match found
-               //      |                       },
-               //      |                       "onclick": function(evt){
-               //      |                               // register onclick handler for found node
-               //      |                       }
-               //      |               },
-               //      |               "#otherid": function(element){
-               //      |                       // assumes "found" with this syntax
-               //      |               }
-               //      |       });
-               //
-               //      example: 
-               //               If property is a string, a dojo.publish will be issued on the channel:
-               //
-               //      |       dojo.behavior.add({
-               //      |               // dojo.publish() whenever class="noclick" found on anchors
-               //      |               "a.noclick": "/got/newAnchor",
-               //      |               "div.wrapper": {
-               //      |                       "onclick": "/node/wasClicked"
-               //      |               }
-               //      |       });
-               //      |       dojo.subscribe("/got/newAnchor", function(node){
-               //      |               // handle node finding when dojo.behavior.apply() is called, 
-               //      |               // provided a newly matched node is found.
-               //      |       });
-               //
-               //      example:
-               //              Scoping can be accomplished by passing an object as a property to 
-               //              a connection handle (on*):
-               //      
-               //      |       dojo.behavior.add({ 
-               //      |                       "#id": {
-               //      |                               // like calling dojo.hitch(foo,"bar"). execute foo.bar() in scope of foo
-               //      |                               "onmouseenter": { targetObj: foo, targetFunc: "bar" },
-               //      |                               "onmouseleave": { targetObj: foo, targetFunc: "baz" }
-               //      |                       }
-               //      |       });
-               //
-               //      example: 
-               //              Bahaviors match on CSS3 Selectors, powered by dojo.query. Example selectors:
-               //
-               //      |       dojo.behavior.add({
-               //      |               // match all direct descendants
-               //      |               "#id4 > *": function(element){
-               //      |                       // ...
-               //      |               },
-               //      |               
-               //      |               // match the first child node that's an element
-               //      |               "#id4 > :first-child": { ... },
-               //      |               
-               //      |               // match the last child node that's an element
-               //      |               "#id4 > :last-child":  { ... },
-               //      |               
-               //      |               // all elements of type tagname
-               //      |               "tagname": {
-               //      |                       // ...
-               //      |               },
-               //      |               
-               //      |               "tagname1 tagname2 tagname3": {
-               //      |                       // ...
-               //      |               },
-               //      |               
-               //      |               ".classname": {
-               //      |                       // ...
-               //      |               },
-               //      |               
-               //      |               "tagname.classname": {
-               //      |                       // ...
-               //      |               }
-               //      |       });
-               //   
-
-               var tmpObj = {};
-               forIn(behaviorObj, this, function(behavior, name){
-                       var tBehavior = arrIn(this._behaviors, name);
-                       if(typeof tBehavior["id"] != "number"){
-                               tBehavior.id = _inc++;
-                       }
-                       var cversion = [];
-                       tBehavior.push(cversion);
-                       if((dojo.isString(behavior))||(dojo.isFunction(behavior))){
-                               behavior = { found: behavior };
-                       }
-                       forIn(behavior, function(rule, ruleName){
-                               arrIn(cversion, ruleName).push(rule);
-                       });
-               });
-       }
-
-       var _applyToNode = function(node, action, ruleSetName){
-               if(dojo.isString(action)){
-                       if(ruleSetName == "found"){
-                               dojo.publish(action, [ node ]);
-                       }else{
-                               dojo.connect(node, ruleSetName, function(){
-                                       dojo.publish(action, arguments);
-                               });
-                       }
-               }else if(dojo.isFunction(action)){
-                       if(ruleSetName == "found"){
-                               action(node);
-                       }else{
-                               dojo.connect(node, ruleSetName, action);
-                       }
-               }
-       }
-
-       this.apply = function(){
-               // summary:
-               //              Applies all currently registered behaviors to the document.
-               // 
-               // description:
-               //              Applies all currently registered behaviors to the document,
-               //              taking care to ensure that only incremental updates are made
-               //              since the last time add() or apply() were called. 
-               //      
-               //              If new matching nodes have been added, all rules in a behavior will be
-               //              applied to that node. For previously matched nodes, only
-               //              behaviors which have been added since the last call to apply()
-               //              will be added to the nodes.
-               //
-               //              apply() is called once automatically by `dojo.addOnLoad`, so 
-               //              registering behaviors with `dojo.behavior.add` before the DOM is
-               //              ready is acceptable, provided the dojo.behavior module is ready.
-               //              
-               //              Calling appy() manually after manipulating the DOM is required 
-               //              to rescan the DOM and apply newly .add()ed behaviors, or to match
-               //              nodes that match existing behaviors when those nodes are added to 
-               //              the DOM.
-               //              
-               forIn(this._behaviors, function(tBehavior, id){
-                       dojo.query(id).forEach( 
-                               function(elem){
-                                       var runFrom = 0;
-                                       var bid = "_dj_behavior_"+tBehavior.id;
-                                       if(typeof elem[bid] == "number"){
-                                               runFrom = elem[bid];
-                                               if(runFrom == (tBehavior.length)){
-                                                       return;
-                                               }
-                                       }
-                                       // run through the versions, applying newer rules at each step
-
-                                       for(var x=runFrom, tver; tver = tBehavior[x]; x++){
-                                               forIn(tver, function(ruleSet, ruleSetName){
-                                                       if(dojo.isArray(ruleSet)){
-                                                               dojo.forEach(ruleSet, function(action){
-                                                                       _applyToNode(elem, action, ruleSetName);
-                                                               });
-                                                       }
-                                               });
-                                       }
-
-                                       // ensure that re-application only adds new rules to the node
-                                       elem[bid] = tBehavior.length;
-                               }
-                       );
-               });
-       }
-}
-
-dojo.addOnLoad(dojo.behavior, "apply");
-
-}
+//>>built
+define("dojo/behavior",["./_base/kernel","./_base/lang","./_base/array","./_base/connect","./query","./ready"],function(_1,_2,_3,_4,_5,_6){_1.deprecated("dojo.behavior","Use dojo/on with event delegation (on.selector())");var _7=function(){function _8(_9,_a){if(!_9[_a]){_9[_a]=[];}return _9[_a];};var _b=0;function _c(_d,_e,_f){var _10={};for(var x in _d){if(typeof _10[x]=="undefined"){if(!_f){_e(_d[x],x);}else{_f.call(_e,_d[x],x);}}}};this._behaviors={};this.add=function(_11){_c(_11,this,function(_12,_13){var _14=_8(this._behaviors,_13);if(typeof _14["id"]!="number"){_14.id=_b++;}var _15=[];_14.push(_15);if((_2.isString(_12))||(_2.isFunction(_12))){_12={found:_12};}_c(_12,function(_16,_17){_8(_15,_17).push(_16);});});};var _18=function(_19,_1a,_1b){if(_2.isString(_1a)){if(_1b=="found"){_4.publish(_1a,[_19]);}else{_4.connect(_19,_1b,function(){_4.publish(_1a,arguments);});}}else{if(_2.isFunction(_1a)){if(_1b=="found"){_1a(_19);}else{_4.connect(_19,_1b,_1a);}}}};this.apply=function(){_c(this._behaviors,function(_1c,id){_5(id).forEach(function(_1d){var _1e=0;var bid="_dj_behavior_"+_1c.id;if(typeof _1d[bid]=="number"){_1e=_1d[bid];if(_1e==(_1c.length)){return;}}for(var x=_1e,_1f;_1f=_1c[x];x++){_c(_1f,function(_20,_21){if(_2.isArray(_20)){_3.forEach(_20,function(_22){_18(_1d,_22,_21);});}});}_1d[bid]=_1c.length;});});};};_1.behavior=new _7();_6(_1.behavior,"apply");return _1.behavior;});
\ No newline at end of file