forked from macek/jquery-serialize-object
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathjquery.serialize-object.coffee
44 lines (32 loc) · 1.12 KB
/
jquery.serialize-object.coffee
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
do ($=jQuery) ->
$.fn.serializeObject = ->
json = {}
push_counters = {}
patterns =
validate : /^[a-zA-Z][a-zA-Z0-9_]*(?:\[(?:\d*|[a-zA-Z0-9_]+)\])*$/,
key : /[a-zA-Z0-9_]+|(?=\[\])/g,
push : /^$/,
fixed : /^\d+$/,
named : /^[a-zA-Z0-9_]+$/
@build = (base, key, value) ->
base[key] = value
base
@push_counter = (key) ->
push_counters[key] = 0 if push_counters[key] is undefined
push_counters[key]++
$.each $(@).serializeArray(), (i, elem) =>
return unless patterns.validate.test(elem.name)
keys = elem.name.match patterns.key
merge = elem.value
reverse_key = elem.name
while (k = keys.pop()) isnt undefined
if patterns.push.test k
re = new RegExp("\\[#{k}\\]$")
reverse_key = reverse_key.replace re, ''
merge = @build [], @push_counter(reverse_key), merge
else if patterns.fixed.test k
merge = @build [], k, merge
else if patterns.named.test k
merge = @build {}, k, merge
json = $.extend true, json, merge
return json