From b053a772d04e33cd72ef0933a9dcc73b88ecea84 Mon Sep 17 00:00:00 2001 From: Kris Handley Date: Wed, 2 Jul 2014 14:58:45 +0100 Subject: [PATCH 1/2] Re organised patterns object so it works in IE8 when minified --- jquery.serialize-object.js | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/jquery.serialize-object.js b/jquery.serialize-object.js index a7d1d34..c9796db 100644 --- a/jquery.serialize-object.js +++ b/jquery.serialize-object.js @@ -27,6 +27,14 @@ }(this, function(root, exports, $) { + var patterns = { + validate: /^[a-z][a-z0-9_]*(?:\[(?:\d*|[a-z0-9_]+)\])*$/i, + key: /[a-z0-9_]+|(?=\[\])/gi, + push: /^$/, + fixed: /^\d+$/, + named: /^[a-z0-9_]+$/i + }; + var FormSerializer = exports.FormSerializer = function FormSerializer(helper) { // private variables @@ -41,23 +49,23 @@ function makeObject(root, value) { - var keys = root.match(FormSerializer.patterns.key), k; + var keys = root.match(patterns.key), k; // nest, nest, ..., nest while ((k = keys.pop()) !== undefined) { // foo[] - if (FormSerializer.patterns.push.test(k)) { + if (patterns.push.test(k)) { var idx = incrementPush(root.replace(/\[\]$/, '')); value = build([], idx, value); } // foo[n] - else if (FormSerializer.patterns.fixed.test(k)) { + else if (patterns.fixed.test(k)) { value = build([], k, value); } // foo; foo[bar] - else if (FormSerializer.patterns.named.test(k)) { + else if (patterns.named.test(k)) { value = build({}, k, value); } } @@ -73,7 +81,7 @@ } function addPair(pair) { - if (!FormSerializer.patterns.validate.test(pair.name)) return this; + if (!patterns.validate.test(pair.name)) return this; var obj = makeObject(pair.name, pair.value); data = helper.extend(true, data, obj); return this; @@ -104,13 +112,7 @@ this.serializeJSON = serializeJSON; }; - FormSerializer.patterns = { - validate: /^[a-z][a-z0-9_]*(?:\[(?:\d*|[a-z0-9_]+)\])*$/i, - key: /[a-z0-9_]+|(?=\[\])/gi, - push: /^$/, - fixed: /^\d+$/, - named: /^[a-z0-9_]+$/i - }; + FormSerializer.patterns = patterns; FormSerializer.serializeObject = function serializeObject() { if (this.length > 1) { From 3f46750099873df33598e1ed0de2540c2298d036 Mon Sep 17 00:00:00 2001 From: Kris Handley Date: Thu, 10 Jul 2014 12:37:40 +0100 Subject: [PATCH 2/2] Tests for extending the patterns --- test/plugin-test.js | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/test/plugin-test.js b/test/plugin-test.js index 6621ab5..27cbbc2 100644 --- a/test/plugin-test.js +++ b/test/plugin-test.js @@ -21,4 +21,30 @@ describe("jQuery plugin", function() { assert.typeOf(p.named, "regexp"); }); + it("Override pattern using dot notation", function() { + var form = $('
'); + + assert.deepEqual(form.serializeObject(), {}); + + $.extend(FormSerializer.patterns, { + validate: /^[a-z][a-z0-9_]*(?:\.[a-z0-9_]+)*(?:\[\])?$/i + }); + + assert.deepEqual(form.serializeObject(), { a: { b: { c: 'd' } } }); + }); + + it("Override patterns allowing hyphens", function() { + var form = $(''); + + assert.deepEqual(form.serializeObject(), {}); + + $.extend(FormSerializer.patterns, { + validate: /^[a-z][a-z0-9_-]*(?:\[(?:\d*|[a-z0-9_]+)\])*$/i, + key: /[a-z0-9_-]+|(?=\[\])/gi, + named: /^[a-z0-9_-]+$/i + }); + + assert.deepEqual(form.serializeObject(), { 'a-b': { c: 'd' } }); + }); + });