You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
171 lines
6.3 KiB
171 lines
6.3 KiB
<!-- 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> |