<!-- used in test_ContentPane_executeScripts.html to set links and do the action --> <script> var self = this; // used to set and unset eventconnects in docpane 100 times function runConnectTest(){ var cont = "<scr"+"ipt>" +" var connected = false;" +" var obj = { " +" click: function(evt){" +" evt.preventDefault();" +" var node = evt.currentTarget;" +" alert('you clicked: '+node.id);" +" }" +" };" +" _container_.addOnLoad(function(){dojo.event.connect(['_paths','_mem'], 'onclick', obj, 'click');});" +" _container_.addOnUnload(function(){ dojo.event.disconnect(['_paths','_mem'], 'onclick', obj, 'click');});" +"</scr"+"ipt>" +"Memory leak (check manually if browser eats resources)<br>" +"<a href='acme/test_RemotePaths.html' id='_paths'>stub link, Paths</a><br/>" +"<a href='memorytest' id='_mem'>stub link, Mem</a>"; var pane = dojo.widget.byId('docpane'); var i = 0; for(; i<100; i++){ pane.setContent(cont); } dojo.debug("set and clear content with event connects in each "+i+" times"); } // create a new contentPane from code var createdPanes = []; function createPane(){ var div = document.createElement("div"); document.body.appendChild(div); var l = createdPanes.length + 1; var cssTxt = "background-color:lightgreen; position: absolute; left:"+(50 + l * 20)+"px; top:"+(30+ l * 20)+"px; z-index:" +l+"; width: 300px; height: 200px; border: 2px solid red;"; // treat IE css special if(dojo.render.html.ie){ div.style.cssText = cssTxt; }else{ div.setAttribute("style", cssTxt); } var pane = dojo.widget.createWidget("ContentPane",{ executeScripts: true }, div); createdPanes.push(pane); var cont = "<scr"+"ipt>" +"dojo.require('dojo.widget.Button');" +"_container_.addOnLoad(function(){" +" /* test that 'this' is isolated to scriptScope and is not a ptr to window*/" +" var d = _container_.domNode; var p = document.createElement('p');" +" p.appendChild(document.createTextNode('this.scriptScope defined before='+(!!this.definedBefore)+'" +" s should always be false, regardless of number of simultanious contentpanes'));" +" d.appendChild(p);p.setAttribute('style', 'font-weight: bold;color: '+(this.definedBefore ? 'red': 'black'));" +" this.definedBefore = true;" +"});" +"this.destroyMe = function(){" +" dojo.widget.byId('linkPane').scriptScope.destroyPane(_container_);" +"};" +"</scr"+"ipt>" +"<div style='text-align:center; font-size:20pt;'>Pane "+createdPanes.length+"</div>" +"<button dojoType='Button' onClick='scriptScope.destroyMe();'>Destroy me with widget event please!</button>" +"<a href='javascript:scriptScope[\"destroyMe\"]();'>Destroy me from <a href='javascript:handler...</a><br>"; pane.setContent(cont); } // destroy the newly created pane this.destroyPane = function(panePtr){ for(var i=0; i<createdPanes.length; i++){ if(createdPanes[i] == panePtr){ createdPanes.splice(i,1); } } panePtr.destroy(); } function inlineTest(){ var cont = "<scr"+"ipt>" +"this.i = 100;" +"</scr"+"ipt>" +"<a href='javascript:window[\"alert\"](scriptScope.i++) ;'>Alert me the value of scriptScope.i</a><br/>" +"<a href='javascript:window.alert(scriptScope.i++) ;'>Alert me the value of scriptScope.i</a><br/>" +"<a href='#' onclick='alert(scriptScope.i++) ;'>Alert me the value of scriptScope.i</a><br/>" +"<scr"+"ipt>" +" this.message = function(debug){" +" if(debug){" +" dojo.debug('hello');" +" }else{" +" alert('hello');" +" }" +"}" +"</scr"+"ipt>" +"<style>#docpane div{cursor: pointer; color:blue;}</style>" +"<div onclick='scriptScope.message()'>Shall alert hello</div>" +"<div onclick=' scriptScope.message()'>Shall alert hello</div>" +"<div id='cl' onclick='scriptScope.message()'>Shall alert hello</div>" +"<div onmousedown=\"dojo.widget.byType('contentpane')[0].scriptScope.j = 0;scriptScope.message(true);\" " +"onmouseup=\"scriptScope.j++;alert(scriptScope.j);\">Shall debug hello then alert 1</div>" +"<div onclick='dojo.widget.byType(\"contentpane\")[0].scriptScope.message()'>Shall alert hello</div>" +"<div onclick='dojo.scriptScope.message()'>Shall NOT alert</div>"; dojo.widget.byId('docpane').setContent(cont); } this.globalTest = function (){ var cont = "<scr"+"ipt>" +" if(typeof myGlobalVar=='undefined'){" +" alert('called first time!');" +" myGlobalVar=true;" +" }else{" +" alert('called before');" +" }" +"</scr"+"ipt>" +"<a href='javascript:dojo.widget.byId(\"linkPane\").scriptScope.globalTest();'>Test again</a>"; dojo.widget.byId('docpane').setContent(cont); } function collisionTest(){ var cont = "<scr"+"ipt>" +" this.executeScripts = false;" +" this.setContent = false;" +" this.scriptScope = null;" +" this.href=null;" +"</scr"+"ipt>" +"<a href='javascript:alert(\"href collision? = \"+(scriptScope.href==dojo.widget.byId(\"docpane\").href)+\"\\nshould be false\");'>test for widget collision</a>"; dojo.widget.byId('docpane').setContent(cont); } var connected = false; var obj = { click: function(evt){ var node = evt.currentTarget; dojo.event.browser.stopEvent(evt); if(node.id=='mem'){ runConnectTest(); }else if(node.id=='create'){ createPane(); }else if(node.id=='inline'){ inlineTest(); }else if(node.id=='global'){ self.globalTest(); }else if(node.id=='collision'){ collisionTest(); }else if(node.id=='paths'){ dojo.widget.byId('docpane').setUrl(node.href); } }, hook: function(){ var connectType = 'connect'; if(connected){ connectType = 'disconnect'; dojo.event.disconnect(_container_, 'onLoad', obj, 'hook'); dojo.event.disconnect(_container_, 'onUnLoad', obj, 'hook'); } connected = true; dojo.event[connectType](['paths','mem', 'create', 'inline', 'global', 'collision'], 'onclick', obj, 'click'); } }; dojo.event.connect(_container_, 'onLoad', obj, 'hook'); dojo.event.connect(_container_, 'onUnLoad', obj, 'hook'); </script> <a href='acme/test_RemotePaths.html' id='paths'>Paths</a><br/> <a href='memorytest' id='mem'>set and unset content</a><br/> <a href='create' id='create'>Create a ContentPane</a><br/> <a href='inline' id='inline'>test Inline calls</a><br/> <a href='global' id='global'>test global scope</a><br/> <a href='collision' id='collision'>test variable collision safe</a>