<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <title>Testing dojo.behavior</title> <style type="text/css"> @import "../resources/dojo.css"; </style> <script type="text/javascript" src="../dojo.js" data-dojo-config="isDebug: true, popup: true"></script> <script type="text/javascript"> require(["dojo", "doh", "dojo/behavior", "dojo/domReady!"], function(dojo, doh){ var applyCount = 0; var behaviorObj = { ".bar":function(elem){ dojo.style(elem, "opacity", 0.5); applyCount++; }, ".foo > span":function(elem){ elem.style.fontStyle = "italic"; applyCount++; } }; topicCount = 0; dojo.subscribe("/foo", function(){ topicCount++; }); // no behaviors should be executed when onload fires doh.register("t", [ function add(t){ t.f(dojo.behavior._behaviors[".bar"]); t.f(dojo.behavior._behaviors[".foo > span"]); dojo.behavior.add(behaviorObj); // make sure they got plopped in t.t(dojo.behavior._behaviors[".bar"]); t.is(1, dojo.behavior._behaviors[".bar"].length); t.t(dojo.behavior._behaviors[".foo > span"]); t.is(1, dojo.behavior._behaviors[".foo > span"].length); }, function apply(t){ t.is(0, applyCount); dojo.behavior.apply(); t.is(2, applyCount); // reapply and make sure we only match once dojo.behavior.apply(); t.is(2, applyCount); }, function reapply(t){ t.is(2, applyCount); // add the rules again dojo.behavior.add(behaviorObj); dojo.behavior.apply(); t.is(4, applyCount); // dojo.behavior.apply(); // t.is(4, applyCount); // dojo.query(".bar").styles("opacity", 1.0); }, function topics(t){ var d = new doh.Deferred(); t.is(0, topicCount); dojo.behavior.add({ ".foo": "/foo" }); dojo.behavior.apply(); t.is(2, topicCount); // We are going to catch focus events on "thinger", so first move focus // somewhere else. dojo.byId("another").focus(); // use timeout because blur/focus event generation isn't synchronous on IE setTimeout(d.getTestErrback(function(){ // setup listener for focus events dojo.behavior.add({ ".foo": { "onfocus": "/foo" } }); dojo.behavior.apply(); t.is(2, topicCount); // focus blah, publishing /foo dojo.byId("blah").focus(); setTimeout(d.getTestErrback(function(){ t.is(3, topicCount); // blur and then refocus blah, publishing /foo again dojo.byId("another").focus(); dojo.byId("blah").focus(); setTimeout(d.getTestCallback(function(){ t.is(4, topicCount); }), 10); }), 10); }), 10); return d; } ] ); doh.runOnLoad(); }); </script> </head> <body> <div class="foo" id="fooOne"> <span>.foo > span</span> <div class="bar"> <span>.foo > .bar > span</span> </div> </div> <!--for focus/topic tests --> <input id="another" value="another"> <input type="text" id="blah" class="foo blah" name="thinger" value="thinger" tabIndex="0"> </body> </html>