123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149 |
- var forge = require('./forge');
- var form = module.exports = forge.form = forge.form || {};
- (function($) {
- var _regex = /([^\[]*?)\[(.*?)\]/g;
- var _parseName = function(name) {
- var rval = [];
- var matches;
- while(!!(matches = _regex.exec(name))) {
- if(matches[1].length > 0) {
- rval.push(matches[1]);
- }
- if(matches.length >= 2) {
- rval.push(matches[2]);
- }
- }
- if(rval.length === 0) {
- rval.push(name);
- }
- return rval;
- };
- var _addField = function(obj, names, value, dict) {
-
- var tmp = [];
- for(var i = 0; i < names.length; ++i) {
-
- var name = names[i];
- if(name.indexOf('[') !== -1 && name.indexOf(']') === -1 &&
- i < names.length - 1) {
- do {
- name += '.' + names[++i];
- } while(i < names.length - 1 && names[i].indexOf(']') === -1);
- }
- tmp.push(name);
- }
- names = tmp;
-
- var tmp = [];
- $.each(names, function(n, name) {
- tmp = tmp.concat(_parseName(name));
- });
- names = tmp;
-
- $.each(names, function(n, name) {
-
- if(dict && name.length !== 0 && name in dict) {
- name = dict[name];
- }
-
-
- if(name.length === 0) {
- name = obj.length;
- }
-
- if(obj[name]) {
-
- if(n == names.length - 1) {
-
- if(!$.isArray(obj[name])) {
- obj[name] = [obj[name]];
- }
- obj[name].push(value);
- } else {
-
- obj = obj[name];
- }
- } else if(n == names.length - 1) {
-
- obj[name] = value;
- } else {
-
-
- var next = names[n + 1];
-
- if(next.length === 0) {
- obj[name] = [];
- } else {
-
- var isNum = ((next - 0) == next && next.length > 0);
- obj[name] = isNum ? [] : {};
- }
- obj = obj[name];
- }
- });
- };
- form.serialize = function(input, sep, dict) {
- var rval = {};
-
- sep = sep || '.';
- $.each(input.serializeArray(), function() {
- _addField(rval, this.name.split(sep), this.value || '', dict);
- });
- return rval;
- };
- })(jQuery);
|