Author: musachy Date: Sun May 20 14:29:37 2007 New Revision: 539946 URL: http://svn.apache.org/viewvc?view=rev&rev=539946 Log: WW-1935 Tags Bind, Anchor and Submit, in the Dojo plugin should have a "separateScripts" attribute to run scripts on their own scope
Modified: struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/AbstractRemoteBean.java struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/RemoteBean.java struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/Submit.java struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/views/jsp/ui/AbstractRemoteTag.java struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/views/jsp/ui/SubmitTag.java struts/struts2/trunk/plugins/dojo/src/main/resources/org/apache/struts2/static/dojo/struts/widget/Bind.js struts/struts2/trunk/plugins/dojo/src/main/resources/org/apache/struts2/static/dojo/struts/widget/BindDiv.js struts/struts2/trunk/plugins/dojo/src/main/resources/org/apache/struts2/static/dojo/struts_dojo.js struts/struts2/trunk/plugins/dojo/src/main/resources/org/apache/struts2/static/dojo/struts_dojo.js.uncompressed.js struts/struts2/trunk/plugins/dojo/src/main/resources/template/ajax/ajax-common.ftl struts/struts2/trunk/plugins/dojo/src/main/resources/template/ajax/bind.ftl struts/struts2/trunk/plugins/dojo/src/main/resources/template/ajax/div.ftl struts/struts2/trunk/plugins/dojo/src/test/java/org/apache/struts2/dojo/views/jsp/ui/AnchorTest.java struts/struts2/trunk/plugins/dojo/src/test/java/org/apache/struts2/dojo/views/jsp/ui/BindTest.java struts/struts2/trunk/plugins/dojo/src/test/java/org/apache/struts2/dojo/views/jsp/ui/SubmitAjaxTest.java struts/struts2/trunk/plugins/dojo/src/test/resources/org/apache/struts2/dojo/views/jsp/ui/Bind-1.txt struts/struts2/trunk/plugins/dojo/src/test/resources/org/apache/struts2/dojo/views/jsp/ui/div-1.txt struts/struts2/trunk/plugins/dojo/src/test/resources/org/apache/struts2/dojo/views/jsp/ui/href-1.txt struts/struts2/trunk/plugins/dojo/src/test/resources/org/apache/struts2/dojo/views/jsp/ui/submit-ajax-1.txt struts/struts2/trunk/plugins/dojo/src/test/resources/org/apache/struts2/dojo/views/jsp/ui/submit-ajax-2.txt struts/struts2/trunk/plugins/dojo/src/test/resources/org/apache/struts2/dojo/views/jsp/ui/submit-ajax-3.txt Modified: struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/AbstractRemoteBean.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/AbstractRemoteBean.java?view=diff&rev=539946&r1=539945&r2=539946 ============================================================================== --- struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/AbstractRemoteBean.java (original) +++ struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/AbstractRemoteBean.java Sun May 20 14:29:37 2007 @@ -49,6 +49,7 @@ protected String errorNotifyTopics; protected String highlightColor; protected String highlightDuration; + protected String separateScripts; public AbstractRemoteBean(ValueStack stack, HttpServletRequest request, HttpServletResponse response) { @@ -94,6 +95,8 @@ addParameter("highlightColor", findString(highlightColor)); if (highlightDuration != null) addParameter("highlightDuration", findString(highlightDuration)); + if (separateScripts != null) + addParameter("separateScripts", findValue(separateScripts, Boolean.class)); } @Override @@ -216,5 +219,10 @@ defaultValue = "2000", type="Integer") public void setHighlightDuration(String highlightDuration) { this.highlightDuration = highlightDuration; + } + + @StrutsTagAttribute(description="Run scripts in a separate scope, unique for each tag", defaultValue="true") + public void setSeparateScripts(String separateScripts) { + this.separateScripts = separateScripts; } } Modified: struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/RemoteBean.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/RemoteBean.java?view=diff&rev=539946&r1=539945&r2=539946 ============================================================================== --- struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/RemoteBean.java (original) +++ struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/RemoteBean.java Sun May 20 14:29:37 2007 @@ -62,4 +62,6 @@ void setHighlightColor(String color); void setHighlightDuration(String color); + + void setSeparateScripts(String separateScripts); } Modified: struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/Submit.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/Submit.java?view=diff&rev=539946&r1=539945&r2=539946 ============================================================================== --- struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/Submit.java (original) +++ struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/Submit.java Sun May 20 14:29:37 2007 @@ -122,6 +122,7 @@ protected String highlightDuration; protected String validate; protected String ajaxAfterValidation; + protected String separateScripts; public Submit(ValueStack stack, HttpServletRequest request, HttpServletResponse response) { super(stack, request, response); @@ -184,6 +185,8 @@ addParameter("highlightColor", findString(highlightColor)); if (highlightDuration != null) addParameter("highlightDuration", findString(highlightDuration)); + if (separateScripts != null) + addParameter("separateScripts", findValue(separateScripts, Boolean.class)); Boolean validateValue = false; if (validate != null) { @@ -386,5 +389,10 @@ @StrutsTagSkipInheritance public void setAction(String action) { super.setAction(action); + } + + @StrutsTagAttribute(description="Run scripts in a separate scope, unique for each tag", defaultValue="true") + public void setSeparateScripts(String separateScripts) { + this.separateScripts = separateScripts; } } Modified: struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/views/jsp/ui/AbstractRemoteTag.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/views/jsp/ui/AbstractRemoteTag.java?view=diff&rev=539946&r1=539945&r2=539946 ============================================================================== --- struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/views/jsp/ui/AbstractRemoteTag.java (original) +++ struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/views/jsp/ui/AbstractRemoteTag.java Sun May 20 14:29:37 2007 @@ -39,6 +39,7 @@ protected String errorNotifyTopics; protected String highlightColor; protected String highlightDuration; + protected String separateScripts; protected void populateParams() { super.populateParams(); @@ -61,6 +62,7 @@ remote.setErrorNotifyTopics(errorNotifyTopics); remote.setHighlightColor(highlightColor); remote.setHighlightDuration(highlightDuration); + remote.setSeparateScripts(separateScripts); } public void setHref(String href) { @@ -129,5 +131,9 @@ public void setHighlightDuration(String highlightDuration) { this.highlightDuration = highlightDuration; + } + + public void setSeparateScripts(String separateScripts) { + this.separateScripts = separateScripts; } } Modified: struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/views/jsp/ui/SubmitTag.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/views/jsp/ui/SubmitTag.java?view=diff&rev=539946&r1=539945&r2=539946 ============================================================================== --- struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/views/jsp/ui/SubmitTag.java (original) +++ struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/views/jsp/ui/SubmitTag.java Sun May 20 14:29:37 2007 @@ -60,6 +60,7 @@ protected String highlightDuration; protected String validate; protected String ajaxAfterValidation; + protected String separateScripts; public Component getBean(ValueStack stack, HttpServletRequest req, HttpServletResponse res) { return new Submit(stack, req, res); @@ -93,6 +94,7 @@ submit.setHighlightDuration(highlightDuration); submit.setValidate(validate); submit.setAjaxAfterValidation(ajaxAfterValidation); + submit.setSeparateScripts(separateScripts); } public void setMethod(String method) { @@ -193,5 +195,9 @@ public void setAjaxAfterValidation(String ajaxAfterValidation) { this.ajaxAfterValidation = ajaxAfterValidation; + } + + public void setSeparateScripts(String separateScripts) { + this.separateScripts = separateScripts; } } Modified: struts/struts2/trunk/plugins/dojo/src/main/resources/org/apache/struts2/static/dojo/struts/widget/Bind.js URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/dojo/src/main/resources/org/apache/struts2/static/dojo/struts/widget/Bind.js?view=diff&rev=539946&r1=539945&r2=539946 ============================================================================== --- struts/struts2/trunk/plugins/dojo/src/main/resources/org/apache/struts2/static/dojo/struts/widget/Bind.js (original) +++ struts/struts2/trunk/plugins/dojo/src/main/resources/org/apache/struts2/static/dojo/struts/widget/Bind.js Sun May 20 14:29:37 2007 @@ -9,6 +9,7 @@ dojo.widget.HtmlWidget, { widgetType : "Bind", executeScripts : false, + scriptSeparation : false, targets : "", targetsArray : null, href : "", @@ -46,6 +47,13 @@ validate : false, ajaxAfterValidation : false, + //used for scripts downloading & caching + cacheContent : true, + //run script on its own scope + scriptSeparation : true, + //scope for the cript separation + scriptScope : null, + postCreate : function() { var self = this; @@ -183,14 +191,7 @@ if(this.executeScripts) { //update targets content var parsed = this.parse(data); - //eval scripts - if(parsed.scripts && parsed.scripts.length > 0) { - var scripts = ""; - for(var i = 0; i < parsed.scripts.length; i++){ - scripts += parsed.scripts[i]; - } - (new Function('_container_', scripts+'; return this;'))(this); - } + this._executeScripts(parsed.scripts); this.setContent(parsed.text); } else { @@ -365,7 +366,65 @@ text: s, scripts: scripts }; - } + }, + + //from Dojo content pane + _executeScripts : function (scripts) { + var self = this; + var tmp = "", code = ""; + for (var i = 0; i < scripts.length; i++) { + if (scripts[i].path) { + dojo.io.bind(this._cacheSetting({"url":scripts[i].path, "load":function (type, scriptStr) { + dojo.lang.hitch(self, tmp = ";" + scriptStr); + }, "error":function (type, error) { + error.text = type + " downloading remote script"; + self._handleDefaults.call(self, error, "onExecError", "debug"); + }, "mimetype":"text/plain", "sync":true}, this.cacheContent)); + code += tmp; + } else { + code += scripts[i]; + } + } + try { + if (this.scriptSeparation) { + delete this.scriptScope; + this.scriptScope = new (new Function("_container_", code + "; return this;"))(self); + } else { + var djg = dojo.global(); + if (djg.execScript) { + djg.execScript(code); + } else { + var djd = dojo.doc(); + var sc = djd.createElement("script"); + sc.appendChild(djd.createTextNode(code)); + (this.containerNode || this.domNode).appendChild(sc); + } + } + } + catch (e) { + e.text = "Error running scripts from content:\n" + e.description; + this.log(e); + } + }, + + _cacheSetting : function (bindObj, useCache) { + for (var x in this.bindArgs) { + if (dojo.lang.isUndefined(bindObj[x])) { + bindObj[x] = this.bindArgs[x]; + } + } + if (dojo.lang.isUndefined(bindObj.useCache)) { + bindObj.useCache = useCache; + } + if (dojo.lang.isUndefined(bindObj.preventCache)) { + bindObj.preventCache = !useCache; + } + if (dojo.lang.isUndefined(bindObj.mimetype)) { + bindObj.mimetype = "text/html"; + } + return bindObj; + } + }); Modified: struts/struts2/trunk/plugins/dojo/src/main/resources/org/apache/struts2/static/dojo/struts/widget/BindDiv.js URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/dojo/src/main/resources/org/apache/struts2/static/dojo/struts/widget/BindDiv.js?view=diff&rev=539946&r1=539945&r2=539946 ============================================================================== --- struts/struts2/trunk/plugins/dojo/src/main/resources/org/apache/struts2/static/dojo/struts/widget/BindDiv.js (original) +++ struts/struts2/trunk/plugins/dojo/src/main/resources/org/apache/struts2/static/dojo/struts/widget/BindDiv.js Sun May 20 14:29:37 2007 @@ -294,7 +294,7 @@ }, //from Dojo's ContentPane - //TODO: remove when fixed on Dojo + //TODO: remove when fixed on Dojo (WW-1869) splitAndFixPaths:function (s, url) { var titles = [], scripts = [], tmp = []; var match = [], requires = [], attr = [], styles = [];