Updated Branches:
  refs/heads/master e8fca2405 -> dfcafea9f

WICKET-5047 Wicket Ajax: Inline script header contribution issue


Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/dfcafea9
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/dfcafea9
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/dfcafea9

Branch: refs/heads/master
Commit: dfcafea9fa30c6c039f2d5802363830ed9576e2b
Parents: 1eb424f
Author: Martin Tzvetanov Grigorov <mgrigo...@apache.org>
Authored: Thu Feb 21 13:35:50 2013 +0200
Committer: Martin Tzvetanov Grigorov <mgrigo...@apache.org>
Committed: Thu Feb 21 13:35:50 2013 +0200

----------------------------------------------------------------------
 .../wicket/ajax/res/js/wicket-ajax-jquery.js       |   15 +++++-
 wicket-core/src/test/js/ajax.js                    |   36 +++++++++++++++
 .../src/test/js/data/ajax/javaScriptTemplate.xml   |   18 +++++++
 wicket-core/src/test/js/head.js                    |    9 ++--
 4 files changed, 71 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/dfcafea9/wicket-core/src/main/java/org/apache/wicket/ajax/res/js/wicket-ajax-jquery.js
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/ajax/res/js/wicket-ajax-jquery.js 
b/wicket-core/src/main/java/org/apache/wicket/ajax/res/js/wicket-ajax-jquery.js
index df32e12..84b9f96 100644
--- 
a/wicket-core/src/main/java/org/apache/wicket/ajax/res/js/wicket-ajax-jquery.js
+++ 
b/wicket-core/src/main/java/org/apache/wicket/ajax/res/js/wicket-ajax-jquery.js
@@ -1979,6 +1979,11 @@
 
                                                        var id = 
node.getAttribute("id");
 
+                                                       var type = 
node.getAttribute("type");
+                                                       if (!type || 
type.toLowerCase() === "text/javascript") {
+                                                               text = 
'try{'+text+'}catch(e){Wicket.Log.error(e);}';
+                                                       }
+
                                                        if (typeof(id) === 
"string" && id.length > 0) {
                                                                // add 
javascript to document head
                                                                
Wicket.Head.addJavascript(text, id);
@@ -2070,7 +2075,6 @@
                        // also a src value. Therefore we put the url to the 
src_ (notice the underscore)  attribute.
                        // Wicket.Head.containsElement is aware of that and 
takes also the underscored attributes into account.
                        addJavascript: function (content, id, fakeSrc) {
-                               content = 
'try{'+content+'}catch(e){Wicket.Log.error(e);}';
                                var script = 
Wicket.Head.createElement("script");
                                if (id) {
                                        script.id = id;
@@ -2092,11 +2096,14 @@
                        addJavascripts: function (element, contentFilter) {
                                function add(element) {
                                        var src = element.getAttribute("src");
+                                       var type = element.getAttribute("type");
 
                                        // if it is a reference, just add it to 
head
                                        if (src !== null && src.length > 0) {
                                                var e = 
document.createElement("script");
-                                               
e.setAttribute("type","text/javascript");
+                                               if (type) {
+                                                       
e.setAttribute("type",type);
+                                               }
                                                e.setAttribute("src", src);
                                                Wicket.Head.addElement(e);
                                        } else {
@@ -2109,6 +2116,10 @@
                                                        content = 
contentFilter(content);
                                                }
 
+                                               if (!type || type.toLowerCase() 
=== "text/javascript") {
+                                                       content = 
'try{'+content+'}catch(e){Wicket.Log.error(e);}';
+                                               }
+
                                                
Wicket.Head.addJavascript(content, element.id);
                                        }
                                }

http://git-wip-us.apache.org/repos/asf/wicket/blob/dfcafea9/wicket-core/src/test/js/ajax.js
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/js/ajax.js b/wicket-core/src/test/js/ajax.js
index f603abc..e49b5d6 100644
--- a/wicket-core/src/test/js/ajax.js
+++ b/wicket-core/src/test/js/ajax.js
@@ -1113,5 +1113,41 @@ jQuery(document).ready(function() {
 
                        
jQuery('#usedAsContextWicket5025').triggerHandler("asContextFailure");
                });
+
+               /**
+                * https://issues.apache.org/jira/browse/WICKET-5047
+                */
+               asyncTest('try/catch only the content of \'script 
type="text/javascript"\'.', function () {
+
+                       // manually call HTMLScriptElement.onload() to let
+                       // FunctionsExecutor finish its work
+                       var oldAddElement = Wicket.Head.addElement;
+                       Wicket.Head.addElement = function(element) {
+                               oldAddElement(element);
+                               if (element.onload) {
+                                       element.onload();
+                               }
+                       };
+
+                       expect(2);
+
+                       var attrs = {
+                               u: 'data/ajax/javaScriptTemplate.xml',
+                               coh: [
+                                       function() {
+                                               start();
+
+                                               var jsTemplateText = 
jQuery('#jsTemplate').text();
+                                               equal(jsTemplateText, 'var data 
= 123;', 'JavaScript template is *not* try/catched');
+
+                                               var jsNonTemplateText = 
jQuery('#jsNonTemplate').text();
+                                               equal(jsNonTemplateText, 
'try{var data = 456;}catch(e){Wicket.Log.error(e);}', 'JavaScript non template 
*is* try/catched');
+
+                                       }
+                               ]
+                       };
+
+                       Wicket.Ajax.ajax(attrs);
+               });
        }
 });

http://git-wip-us.apache.org/repos/asf/wicket/blob/dfcafea9/wicket-core/src/test/js/data/ajax/javaScriptTemplate.xml
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/js/data/ajax/javaScriptTemplate.xml 
b/wicket-core/src/test/js/data/ajax/javaScriptTemplate.xml
new file mode 100644
index 0000000..0865ead
--- /dev/null
+++ b/wicket-core/src/test/js/data/ajax/javaScriptTemplate.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed to the Apache Software Foundation (ASF) under one or more
+   contributor license agreements.  See the NOTICE file distributed with
+   this work for additional information regarding copyright ownership.
+   The ASF licenses this file to You under the Apache License, Version 2.0
+   (the "License"); you may not use this file except in compliance with
+   the License.  You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+-->
+<ajax-response><header-contribution encoding="wicket1"><![CDATA[<head><script 
type="text/x-jquery-tmpl" id="jsTemplate">var data = 123;</script><script 
type="text/javascript" id="jsNonTemplate">var data = 
456;</script></head>]]></header-contribution></ajax-response>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/wicket/blob/dfcafea9/wicket-core/src/test/js/head.js
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/js/head.js b/wicket-core/src/test/js/head.js
index 7a2a711..1cfe303 100644
--- a/wicket-core/src/test/js/head.js
+++ b/wicket-core/src/test/js/head.js
@@ -146,20 +146,19 @@ jQuery(document).ready(function() {
 
        test('Wicket.Head.addJavascripts - no script tags', function() {
                var $element = jQuery('<div>DIV TEXT<span>SPAN TEXT<a 
href="#anchor">ANCHOR</a></span></div>'),
-               initialHeadElementsNumber = jQuery('head').children().length;
-               
+                       initialHeadElementsNumber = 
jQuery('head').children().length;
+
                Wicket.Head.addJavascripts($element[0]);
 
                equal(initialHeadElementsNumber, 
jQuery('head').children().length, 'No script elements in the added element, so 
nothing is added');
        });
 
-
        test('Wicket.Head.addJavascripts - direct script tag', function() {
                expect(2);
                
                var $element = jQuery('<script>ok(true);</script>'),
-               initialHeadElementsNumber = jQuery('head').children().length;
-               
+                       initialHeadElementsNumber = 
jQuery('head').children().length;
+
                Wicket.Head.addJavascripts($element[0]);
 
                equal(jQuery('head').children().length, 
initialHeadElementsNumber + 1, 'A script element must be added');

Reply via email to