Repository: wicket
Updated Branches:
  refs/heads/wicket-6.x 345c9138b -> 031dee240


WICKET-5948 wicket-ajax.js probably doesn't traverse the children of <div> or 
<span>

Serialize all HTMLFormElement children of the serialized div/span 
(FormComponentPanel)


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

Branch: refs/heads/wicket-6.x
Commit: 031dee24049393f7ad30b0c7231b48a6ed46742f
Parents: 345c913
Author: Martin Tzvetanov Grigorov <[email protected]>
Authored: Tue Aug 11 14:25:32 2015 +0300
Committer: Martin Tzvetanov Grigorov <[email protected]>
Committed: Tue Aug 11 14:26:51 2015 +0300

----------------------------------------------------------------------
 .../wicket/ajax/res/js/wicket-ajax-jquery.js    | 47 +++++++++++++-------
 wicket-core/src/test/js/all.html                |  4 ++
 wicket-core/src/test/js/form.js                 | 25 +++++++++++
 3 files changed, 61 insertions(+), 15 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/031dee24/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 91e7cff..916cd25 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
@@ -49,7 +49,8 @@
                getAjaxBaseUrl,
                isUndef,
                replaceAll,
-               htmlToDomDocument;
+               htmlToDomDocument,
+               nodeListToArray;
 
        isUndef = function (target) {
                return (typeof(target) === 'undefined' || target === null);
@@ -98,6 +99,23 @@
        };
 
        /**
+        * Converts a NodeList to an Array
+        *
+        * @param nodeList The NodeList to convert
+        * @returns {Array} The array with document nodes
+        */
+       nodeListToArray = function (nodeList) {
+               var arr = [],
+                       nodeId;
+               if (nodeList && nodeList.length) {
+                       for (nodeId = 0; nodeId < nodeList.length; nodeId++) {
+                               arr.push(nodeList.item(nodeId));
+                       }
+               }
+               return arr;
+       };
+
+       /**
         * Functions executer takes array of functions and executes them.
         * The functions are executed one by one as far as the return value is 
FunctionsExecuter.DONE.
         * If the return value is FunctionsExecuter.ASYNC or undefined then the 
execution of
@@ -1531,25 +1549,24 @@
                                } else if (tag === "input" || tag === 
"textarea") {
                                        return 
Wicket.Form.serializeInput(element);
                                } else {
-                                       return [];
+                                       var elements = 
nodeListToArray(element.getElementsByTagName("input"));
+                                       elements = 
elements.concat(nodeListToArray(element.getElementsByTagName("select")));
+                                       elements = 
elements.concat(nodeListToArray(element.getElementsByTagName("textarea")));
+
+                                       var result = [];
+                                       for (var i = 0; i < elements.length; 
++i) {
+                                               var el = elements[i];
+                                               if (el.name && el.name !== "") {
+                                                       result = 
result.concat(Wicket.Form.serializeElement(el));
+                                               }
+                                       }
+                                       return result;
                                }
                        },
 
                        serializeForm: function (form) {
                                var result = [],
-                                       elements,
-                                       nodeListToArray,
-                                       nodeId;
-
-                               nodeListToArray = function (nodeList) {
-                                       var arr = [];
-                                       if (nodeList && nodeList.length) {
-                                               for (nodeId = 0; nodeId < 
nodeList.length; nodeId++) {
-                                                       
arr.push(nodeList.item(nodeId));
-                                               }
-                                       }
-                                       return arr;
-                               };
+                                       elements;
 
                                if (form) {
                                        if (form.tagName.toLowerCase() === 
'form') {

http://git-wip-us.apache.org/repos/asf/wicket/blob/031dee24/wicket-core/src/test/js/all.html
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/js/all.html b/wicket-core/src/test/js/all.html
index 6a03f52..d1185f9 100644
--- a/wicket-core/src/test/js/all.html
+++ b/wicket-core/src/test/js/all.html
@@ -112,6 +112,8 @@
                -->
                <form id="testForm" action="actionUrl">
 
+                       <div id="nonHtmlFormElement">
+
                        <input type="text" id="textInputId" name="textInput" 
value="textValue"/>
 
                        <input type="text" id="textInputUTFId" 
name="textUTFInput" value="нещо на български"/>
@@ -149,6 +151,8 @@
 
                        <textarea name="textArea">some text</textarea>
 
+                       </div>
+
                </form>
 
                <!-- WICKET-4673 Ajax submit of nested form -->

http://git-wip-us.apache.org/repos/asf/wicket/blob/031dee24/wicket-core/src/test/js/form.js
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/js/form.js b/wicket-core/src/test/js/form.js
index 99f55ab..7e309a3 100644
--- a/wicket-core/src/test/js/form.js
+++ b/wicket-core/src/test/js/form.js
@@ -134,6 +134,31 @@ jQuery(document).ready(function() {
                Wicket.Form.excludeFromAjaxSerialization = null;
        });
 
+       test("Wicket.Form.serializeElement should serialize the 
HTMLFormElement's which a children of a non-HTMLFormElement", function() {
+               expect(1);
+
+               var actual = Wicket.Form.serializeElement('nonHtmlFormElement');
+
+               var expected = [
+                       { name: "textInput",      value: "textValue"          },
+                       { name: "textUTFInput",      value: "нещо на 
български"          },
+                       { name: "checkBoxInput1", value: "cbValue1"           },
+                       { name: "checkBoxInput3", value: "cbValue3"           },
+                       { name: "radioInput",     value: "radioValue1"        },
+                       { name: "emailInput",     value: "[email protected]"           
 },
+                       { name: "urlInput",       value: "http://example.com"; },
+                       { name: "searchInput",    value: "wicket"             },
+                       { name: "rangeInput",     value: "67"                 },
+                       { name: "numberInput",    value: "16"                 },
+                       { name: "colorInput",     value: "#123456"            },
+                       { name: "multipleSelect", value: "0"                  },
+                       { name: "multipleSelect", value: "2"                  },
+                       { name: "select",         value: "0"                  },
+                       { name: "textArea",       value: "some text"          }
+               ];
+               deepEqual(actual, expected);
+       });
+
        module('Wicket.Form.serializeForm');
 
        test('Wicket.Form.serialize - form element WITHOUT searching for the 
parent form', function() {

Reply via email to