summaryrefslogtreecommitdiff
path: root/school/node_modules/node-forge/js/form.js
diff options
context:
space:
mode:
authorMinteck <contact@minteck.org>2023-01-10 14:54:04 +0100
committerMinteck <contact@minteck.org>2023-01-10 14:54:04 +0100
commit99c1d9af689e5325f3cf535c4007b3aeb8325229 (patch)
treee663b3c2ebdbd67c818ac0c5147f0ce1d2463cda /school/node_modules/node-forge/js/form.js
parent9871b03912fc28ad38b4037ebf26a78aa937baba (diff)
downloadpluralconnect-99c1d9af689e5325f3cf535c4007b3aeb8325229.tar.gz
pluralconnect-99c1d9af689e5325f3cf535c4007b3aeb8325229.tar.bz2
pluralconnect-99c1d9af689e5325f3cf535c4007b3aeb8325229.zip
Update - This is an automated commit
Diffstat (limited to 'school/node_modules/node-forge/js/form.js')
-rw-r--r--school/node_modules/node-forge/js/form.js157
1 files changed, 157 insertions, 0 deletions
diff --git a/school/node_modules/node-forge/js/form.js b/school/node_modules/node-forge/js/form.js
new file mode 100644
index 0000000..62d4424
--- /dev/null
+++ b/school/node_modules/node-forge/js/form.js
@@ -0,0 +1,157 @@
+/**
+ * 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.
+ */
+(function($) {
+
+/**
+ * The form namespace.
+ */
+var form = {};
+
+/**
+ * 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;
+};
+
+/**
+ * The forge namespace and form API.
+ */
+if(typeof forge === 'undefined') {
+ forge = {};
+}
+forge.form = form;
+
+})(jQuery);