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 = [];


Reply via email to