first commit
This commit is contained in:
149
app_vue/node_modules/node-forge/lib/form.js
generated
vendored
Normal file
149
app_vue/node_modules/node-forge/lib/form.js
generated
vendored
Normal file
@ -0,0 +1,149 @@
|
||||
/**
|
||||
* Functions for manipulating web forms.
|
||||
*
|
||||
* @author David I. Lehn <dlehn@digitalbazaar.com>
|
||||
* @author Dave Longley
|
||||
* @author Mike Johnson
|
||||
*
|
||||
* Copyright (c) 2011-2014 Digital Bazaar, Inc. All rights reserved.
|
||||
*/
|
||||
var forge = require('./forge');
|
||||
|
||||
/* Form API */
|
||||
var form = module.exports = forge.form = forge.form || {};
|
||||
|
||||
(function($) {
|
||||
|
||||
/**
|
||||
* Regex for parsing a single name property (handles array brackets).
|
||||
*/
|
||||
var _regex = /([^\[]*?)\[(.*?)\]/g;
|
||||
|
||||
/**
|
||||
* Parses a single name property into an array with the name and any
|
||||
* array indices.
|
||||
*
|
||||
* @param name the name to parse.
|
||||
*
|
||||
* @return the array of the name and its array indices in order.
|
||||
*/
|
||||
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;
|
||||
};
|
||||
|
||||
/**
|
||||
* Adds a field from the given form to the given object.
|
||||
*
|
||||
* @param obj the object.
|
||||
* @param names the field as an array of object property names.
|
||||
* @param value the value of the field.
|
||||
* @param dict a dictionary of names to replace.
|
||||
*/
|
||||
var _addField = function(obj, names, value, dict) {
|
||||
// combine array names that fall within square brackets
|
||||
var tmp = [];
|
||||
for(var i = 0; i < names.length; ++i) {
|
||||
// check name for starting square bracket but no ending one
|
||||
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;
|
||||
|
||||
// split out array indexes
|
||||
var tmp = [];
|
||||
$.each(names, function(n, name) {
|
||||
tmp = tmp.concat(_parseName(name));
|
||||
});
|
||||
names = tmp;
|
||||
|
||||
// iterate over object property names until value is set
|
||||
$.each(names, function(n, name) {
|
||||
// do dictionary name replacement
|
||||
if(dict && name.length !== 0 && name in dict) {
|
||||
name = dict[name];
|
||||
}
|
||||
|
||||
// blank name indicates appending to an array, set name to
|
||||
// new last index of array
|
||||
if(name.length === 0) {
|
||||
name = obj.length;
|
||||
}
|
||||
|
||||
// value already exists, append value
|
||||
if(obj[name]) {
|
||||
// last name in the field
|
||||
if(n == names.length - 1) {
|
||||
// more than one value, so convert into an array
|
||||
if(!$.isArray(obj[name])) {
|
||||
obj[name] = [obj[name]];
|
||||
}
|
||||
obj[name].push(value);
|
||||
} else {
|
||||
// not last name, go deeper into object
|
||||
obj = obj[name];
|
||||
}
|
||||
} else if(n == names.length - 1) {
|
||||
// new value, last name in the field, set value
|
||||
obj[name] = value;
|
||||
} else {
|
||||
// new value, not last name, go deeper
|
||||
// get next name
|
||||
var next = names[n + 1];
|
||||
|
||||
// blank next value indicates array-appending, so create array
|
||||
if(next.length === 0) {
|
||||
obj[name] = [];
|
||||
} else {
|
||||
// if next name is a number create an array, otherwise a map
|
||||
var isNum = ((next - 0) == next && next.length > 0);
|
||||
obj[name] = isNum ? [] : {};
|
||||
}
|
||||
obj = obj[name];
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* Serializes a form to a JSON object. Object properties will be separated
|
||||
* using the given separator (defaults to '.') and by square brackets.
|
||||
*
|
||||
* @param input the jquery form to serialize.
|
||||
* @param sep the object-property separator (defaults to '.').
|
||||
* @param dict a dictionary of names to replace (name=replace).
|
||||
*
|
||||
* @return the JSON-serialized form.
|
||||
*/
|
||||
form.serialize = function(input, sep, dict) {
|
||||
var rval = {};
|
||||
|
||||
// add all fields in the form to the object
|
||||
sep = sep || '.';
|
||||
$.each(input.serializeArray(), function() {
|
||||
_addField(rval, this.name.split(sep), this.value || '', dict);
|
||||
});
|
||||
|
||||
return rval;
|
||||
};
|
||||
|
||||
})(jQuery);
|
Reference in New Issue
Block a user