jquery-serialize-json-sprockets 0.0.1 → 2.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/vendor/assets/javascripts/jquery.serializejson.js +94 -26
- metadata +9 -9
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 5099ac6a276dc24189a126ff8ea43e1c82483ee4
|
|
4
|
+
data.tar.gz: 86ad7be49bc1d7f4427b7ee33fa6e65f53a8f728
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 891527223faa07f95e1d61cbd74cf0d058ece1187d4efbf53c99f7dcaf74bb0eb535099db37cdb62059fb206c6a3ebbbad236510671d306be6d7ab591401f744
|
|
7
|
+
data.tar.gz: 8b1875af5a3062cd08049ccb83974da93542b0e9f2e82db0d1a85d7bde9572a4a41ea99028481bb8175657da4f762481c10de637e9dc59c173a8dc1a2d70aa88
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
SerializeJSON jQuery plugin.
|
|
3
3
|
https://github.com/marioizquierdo/jquery.serializeJSON
|
|
4
|
-
version 2.1
|
|
4
|
+
version 2.4.1 (Oct, 2014)
|
|
5
5
|
|
|
6
6
|
Copyright (c) 2014 Mario Izquierdo
|
|
7
7
|
Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php)
|
|
@@ -12,17 +12,22 @@
|
|
|
12
12
|
|
|
13
13
|
// jQuery('form').serializeJSON()
|
|
14
14
|
$.fn.serializeJSON = function (options) {
|
|
15
|
-
var serializedObject, formAsArray, keys, value, f, opts;
|
|
15
|
+
var serializedObject, formAsArray, keys, type, value, _ref, f, opts;
|
|
16
16
|
f = $.serializeJSON;
|
|
17
|
-
formAsArray = this.serializeArray(); // array of objects {name, value}
|
|
18
17
|
opts = f.optsWithDefaults(options); // calculate values for options {parseNumbers, parseBoolens, parseNulls}
|
|
18
|
+
f.validateOptions(opts);
|
|
19
|
+
formAsArray = this.serializeArray(); // array of objects {name, value}
|
|
20
|
+
f.readCheckboxUncheckedValues(formAsArray, this, opts); // add {name, value} of unchecked checkboxes if needed
|
|
19
21
|
|
|
20
22
|
serializedObject = {};
|
|
21
23
|
$.each(formAsArray, function (i, input) {
|
|
22
|
-
keys = f.splitInputNameIntoKeysArray(input.name);
|
|
23
|
-
|
|
24
|
-
if (
|
|
25
|
-
|
|
24
|
+
keys = f.splitInputNameIntoKeysArray(input.name);
|
|
25
|
+
type = keys.pop(); // the last element is always the type ("string" by default)
|
|
26
|
+
if (type !== 'skip') { // easy way to skip a value
|
|
27
|
+
value = f.parseValue(input.value, type, opts); // string, number, boolean or null
|
|
28
|
+
if (opts.parseWithFunction && type === '_') value = opts.parseWithFunction(value, input.name); // allow for custom parsing
|
|
29
|
+
f.deepSet(serializedObject, keys, value, opts);
|
|
30
|
+
}
|
|
26
31
|
});
|
|
27
32
|
return serializedObject;
|
|
28
33
|
};
|
|
@@ -36,7 +41,8 @@
|
|
|
36
41
|
parseBooleans: false, // convert "true", "false" to true, false
|
|
37
42
|
parseNulls: false, // convert "null" to null
|
|
38
43
|
parseAll: false, // all of the above
|
|
39
|
-
parseWithFunction: null, // to use custom parser,
|
|
44
|
+
parseWithFunction: null, // to use custom parser, a function like: function(val){ return parsed_val; }
|
|
45
|
+
checkboxUncheckedValue: undefined, // to include that value for unchecked checkboxes (instead of ignoring them)
|
|
40
46
|
useIntKeysAsArrayIndex: false // name="foo[2]" value="v" => {foo: [null, null, "v"]}, instead of {foo: ["2": "v"]}
|
|
41
47
|
},
|
|
42
48
|
|
|
@@ -51,21 +57,35 @@
|
|
|
51
57
|
parseBooleans: parseAll || f.optWithDefaults('parseBooleans', options),
|
|
52
58
|
parseNulls: parseAll || f.optWithDefaults('parseNulls', options),
|
|
53
59
|
parseWithFunction: f.optWithDefaults('parseWithFunction', options),
|
|
60
|
+
checkboxUncheckedValue: f.optWithDefaults('checkboxUncheckedValue', options),
|
|
54
61
|
useIntKeysAsArrayIndex: f.optWithDefaults('useIntKeysAsArrayIndex', options)
|
|
55
62
|
}
|
|
56
63
|
},
|
|
57
64
|
|
|
58
65
|
optWithDefaults: function(key, options) {
|
|
59
|
-
return (options[key] !== false) && (options[key] || $.serializeJSON.defaultOptions[key]);
|
|
66
|
+
return (options[key] !== false) && (options[key] !== '') && (options[key] || $.serializeJSON.defaultOptions[key]);
|
|
67
|
+
},
|
|
68
|
+
|
|
69
|
+
validateOptions: function(opts) {
|
|
70
|
+
var opt, validOpts;
|
|
71
|
+
validOpts = ['parseNumbers', 'parseBooleans', 'parseNulls', 'parseAll', 'parseWithFunction', 'checkboxUncheckedValue', 'useIntKeysAsArrayIndex']
|
|
72
|
+
for (opt in opts) {
|
|
73
|
+
if (validOpts.indexOf(opt) === -1) {
|
|
74
|
+
throw new Error("serializeJSON ERROR: invalid option '" + opt + "'. Please use one of " + validOpts.join(','));
|
|
75
|
+
}
|
|
76
|
+
}
|
|
60
77
|
},
|
|
61
78
|
|
|
62
79
|
// Convert the string to a number, boolean or null, depending on the enable option and the string format.
|
|
63
|
-
parseValue: function(str, opts) {
|
|
80
|
+
parseValue: function(str, type, opts) {
|
|
64
81
|
var value, f;
|
|
65
82
|
f = $.serializeJSON;
|
|
66
|
-
if (
|
|
67
|
-
if (opts.
|
|
68
|
-
if (opts.
|
|
83
|
+
if (type == 'string') return str; // force string
|
|
84
|
+
if (type == 'number' || (opts.parseNumbers && f.isNumeric(str))) return Number(str); // number
|
|
85
|
+
if (type == 'boolean' || (opts.parseBooleans && (str === "true" || str === "false"))) return (["false", "null", "undefined", "", "0"].indexOf(str) === -1); // boolean
|
|
86
|
+
if (type == 'null' || (opts.parseNulls && str == "null")) return ["false", "null", "undefined", "", "0"].indexOf(str) !== -1 ? null : str; // null
|
|
87
|
+
if (type == 'array' || type == 'object') return JSON.parse(str); // array or objects require JSON
|
|
88
|
+
if (type == 'auto') return f.parseValue(str, null, {parseNumbers: true, parseBooleans: true, parseNulls: true}); // try again with something like "parseAll"
|
|
69
89
|
return str; // otherwise, keep same string
|
|
70
90
|
},
|
|
71
91
|
|
|
@@ -74,24 +94,48 @@
|
|
|
74
94
|
isValidArrayIndex: function(val) { return /^[0-9]+$/.test(String(val)); }, // 1,2,3,4 ... are valid array indexes
|
|
75
95
|
isNumeric: function(obj) { return obj - parseFloat(obj) >= 0; }, // taken from jQuery.isNumeric implementation. Not using jQuery.isNumeric to support old jQuery and Zepto versions
|
|
76
96
|
|
|
77
|
-
// Split the input name in programatically readable keys
|
|
78
|
-
// "
|
|
79
|
-
//
|
|
80
|
-
// "foo
|
|
81
|
-
// "foo
|
|
82
|
-
// "
|
|
97
|
+
// Split the input name in programatically readable keys.
|
|
98
|
+
// The last element is always the type (default "_").
|
|
99
|
+
// Examples:
|
|
100
|
+
// "foo" => ['foo', '_']
|
|
101
|
+
// "foo:string" => ['foo', 'string']
|
|
102
|
+
// "foo:boolean" => ['foo', 'boolean']
|
|
103
|
+
// "[foo]" => ['foo', '_']
|
|
104
|
+
// "foo[inn][bar]" => ['foo', 'inn', 'bar', '_']
|
|
105
|
+
// "foo[inn[bar]]" => ['foo', 'inn', 'bar', '_']
|
|
106
|
+
// "foo[inn][arr][0]" => ['foo', 'inn', 'arr', '0', '_']
|
|
107
|
+
// "arr[][val]" => ['arr', '', 'val', '_']
|
|
108
|
+
// "arr[][val]:null" => ['arr', '', 'val', 'null']
|
|
83
109
|
splitInputNameIntoKeysArray: function (name) {
|
|
84
|
-
var keys,
|
|
110
|
+
var keys, nameWithoutType, type, _ref, f;
|
|
85
111
|
f = $.serializeJSON;
|
|
86
|
-
|
|
87
|
-
keys =
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
if (keys[0] === '') { keys.shift(); } // "[foo][inn]" should be same as "foo[inn]"
|
|
112
|
+
_ref = f.extractTypeFromInputName(name), nameWithoutType = _ref[0], type = _ref[1];
|
|
113
|
+
keys = nameWithoutType.split('['); // split string into array
|
|
114
|
+
keys = $.map(keys, function (key) { return key.replace(/]/g, ''); }); // remove closing brackets
|
|
115
|
+
if (keys[0] === '') { keys.shift(); } // ensure no opening bracket ("[foo][inn]" should be same as "foo[inn]")
|
|
116
|
+
keys.push(type); // add type at the end
|
|
92
117
|
return keys;
|
|
93
118
|
},
|
|
94
119
|
|
|
120
|
+
// Returns [name-without-type, type] from name.
|
|
121
|
+
// "foo" => ["foo", "_"]
|
|
122
|
+
// "foo:boolean" => ["foo", "boolean"]
|
|
123
|
+
// "foo[bar]:null" => ["foo[bar]", "null"]
|
|
124
|
+
extractTypeFromInputName: function(name) {
|
|
125
|
+
var match, f;
|
|
126
|
+
f = $.serializeJSON;
|
|
127
|
+
if (match = name.match(/(.*):([^:]+)$/)){
|
|
128
|
+
var validTypes = ['string', 'number', 'boolean', 'null', 'array', 'object', 'skip', 'auto']; // validate type
|
|
129
|
+
if (validTypes.indexOf(match[2]) !== -1) {
|
|
130
|
+
return [match[1], match[2]];
|
|
131
|
+
} else {
|
|
132
|
+
throw new Error("serializeJSON ERROR: Invalid type " + match[2] + " found in input name '" + name + "', please use one of " + validTypes.join(', '))
|
|
133
|
+
}
|
|
134
|
+
} else {
|
|
135
|
+
return [name, '_']; // no defined type, then use parse options
|
|
136
|
+
}
|
|
137
|
+
},
|
|
138
|
+
|
|
95
139
|
// Set a value in an object or array, using multiple keys to set in a nested object or array:
|
|
96
140
|
//
|
|
97
141
|
// deepSet(obj, ['foo'], v) // obj['foo'] = v
|
|
@@ -159,6 +203,30 @@
|
|
|
159
203
|
tail = keys.slice(1);
|
|
160
204
|
f.deepSet(o[key], tail, value, opts);
|
|
161
205
|
}
|
|
206
|
+
},
|
|
207
|
+
|
|
208
|
+
// Fill the formAsArray object with values for the unchecked checkbox inputs,
|
|
209
|
+
// using the same format as the jquery.serializeArray function.
|
|
210
|
+
// The value of the unchecked values is determined from the opts.checkboxUncheckedValue
|
|
211
|
+
// and/or the data-unchecked-value attribute of the inputs.
|
|
212
|
+
readCheckboxUncheckedValues: function (formAsArray, $form, opts) {
|
|
213
|
+
var selector, $uncheckedCheckboxes, $el, dataUncheckedValue, f;
|
|
214
|
+
if (opts == null) opts = {};
|
|
215
|
+
f = $.serializeJSON;
|
|
216
|
+
|
|
217
|
+
selector = 'input[type=checkbox][name]:not(:checked)';
|
|
218
|
+
$uncheckedCheckboxes = $form.find(selector).add($form.filter(selector));
|
|
219
|
+
$uncheckedCheckboxes.each(function (i, el) {
|
|
220
|
+
$el = $(el);
|
|
221
|
+
dataUncheckedValue = $el.attr('data-unchecked-value');
|
|
222
|
+
if(dataUncheckedValue) { // data-unchecked-value has precedence over option opts.checkboxUncheckedValue
|
|
223
|
+
formAsArray.push({name: el.name, value: dataUncheckedValue});
|
|
224
|
+
} else {
|
|
225
|
+
if (!f.isUndefined(opts.checkboxUncheckedValue)) {
|
|
226
|
+
formAsArray.push({name: el.name, value: opts.checkboxUncheckedValue});
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
});
|
|
162
230
|
}
|
|
163
231
|
|
|
164
232
|
};
|
metadata
CHANGED
|
@@ -1,29 +1,29 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: jquery-serialize-json-sprockets
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version:
|
|
4
|
+
version: 2.4.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- shelling
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2015-01-22 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: sprockets
|
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
|
16
16
|
requirements:
|
|
17
|
-
- - ~>
|
|
17
|
+
- - "~>"
|
|
18
18
|
- !ruby/object:Gem::Version
|
|
19
|
-
version: 2
|
|
19
|
+
version: '2'
|
|
20
20
|
type: :runtime
|
|
21
21
|
prerelease: false
|
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
|
23
23
|
requirements:
|
|
24
|
-
- - ~>
|
|
24
|
+
- - "~>"
|
|
25
25
|
- !ruby/object:Gem::Version
|
|
26
|
-
version: 2
|
|
26
|
+
version: '2'
|
|
27
27
|
description:
|
|
28
28
|
email:
|
|
29
29
|
- navyblueshellingford@gmail.com
|
|
@@ -44,12 +44,12 @@ require_paths:
|
|
|
44
44
|
- lib
|
|
45
45
|
required_ruby_version: !ruby/object:Gem::Requirement
|
|
46
46
|
requirements:
|
|
47
|
-
- -
|
|
47
|
+
- - ">="
|
|
48
48
|
- !ruby/object:Gem::Version
|
|
49
49
|
version: '0'
|
|
50
50
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
51
51
|
requirements:
|
|
52
|
-
- -
|
|
52
|
+
- - ">="
|
|
53
53
|
- !ruby/object:Gem::Version
|
|
54
54
|
version: '0'
|
|
55
55
|
requirements: []
|
|
@@ -57,5 +57,5 @@ rubyforge_project:
|
|
|
57
57
|
rubygems_version: 2.2.2
|
|
58
58
|
signing_key:
|
|
59
59
|
specification_version: 4
|
|
60
|
-
summary:
|
|
60
|
+
summary: marioizquierdo/jquery.serializeJSON for assets pipeline
|
|
61
61
|
test_files: []
|