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
2 years ago
|
<!-- 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>
|