-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Description
Mission to create JavaScript to add the jQuery object serialization to the site
Your mission, should you choose to accept it, is to create JavaScript to add the jQuery object serialization to the site.
The day of the operation is October 26th, 2021
You will have 4 hours to complete your mission.
An open science project to uncover the planetary virome, freely and openly
You will be joining a team of the boldest
of all Red Hatters for this mission, who will be at your service developing the code and automating the deployment to OpenShift.
- Should you, or any of your force be taken or compromised that day, you must report back as many changes as you have made, and any knowledge of your actions, by pull request or comments on the issue on the board.
How to get started:
Follow the instructions here to setup the project: https://github.com/team19hackathon2021/serratus-api/
The details of your mission:
create the code
Create a new file: /usr/local/src/serratus-api-static/js/jquery.serialize-object.js
/**
* jQuery serializeObject
* @copyright 2014, macek <[email protected]>
* @link https://github.com/macek/jquery-serialize-object
* @license BSD
* @version 2.5.0
*/
(function(root, factory) {
// AMD
if (typeof define === "function" && define.amd) {
define(["exports", "jquery"], function(exports, $) {
return factory(exports, $);
});
}
// CommonJS
else if (typeof exports !== "undefined") {
var $ = require("jquery");
factory(exports, $);
}
// Browser
else {
factory(root, (root.jQuery || root.Zepto || root.ender || root.$));
}
}(this, function(exports, $) {
var patterns = {
validate: /^[a-z_][a-z0-9_]*(?:\[(?:\d*|[a-z0-9_]+)\])*$/i,
key: /[a-z0-9_]+|(?=\[\])/gi,
push: /^$/,
fixed: /^\d+$/,
named: /^[a-z0-9_]+$/i
};
function FormSerializer(helper, $form) {
// private variables
var data = {},
pushes = {};
// private API
function build(base, key, value) {
base[key] = value;
return base;
}
function makeObject(root, value) {
var keys = root.match(patterns.key), k;
// nest, nest, ..., nest
while ((k = keys.pop()) !== undefined) {
// foo[]
if (patterns.push.test(k)) {
var idx = incrementPush(root.replace(/\[\]$/, ''));
value = build([], idx, value);
}
// foo[n]
else if (patterns.fixed.test(k)) {
value = build([], k, value);
}
// foo; foo[bar]
else if (patterns.named.test(k)) {
value = build({}, k, value);
}
}
return value;
}
function incrementPush(key) {
if (pushes[key] === undefined) {
pushes[key] = 0;
}
return pushes[key]++;
}
function encode(pair) {
switch ($('[name="' + pair.name + '"]', $form).attr("type")) {
case "checkbox":
return pair.value === "on" ? true : pair.value;
default:
return pair.value;
}
}
function addPair(pair) {
if (!patterns.validate.test(pair.name)) return this;
var obj = makeObject(pair.name, encode(pair));
data = helper.extend(true, data, obj);
return this;
}
function addPairs(pairs) {
if (!helper.isArray(pairs)) {
throw new Error("formSerializer.addPairs expects an Array");
}
for (var i=0, len=pairs.length; i<len; i++) {
this.addPair(pairs[i]);
}
return this;
}
function serialize() {
return data;
}
function serializeJSON() {
return JSON.stringify(serialize());
}
// public API
this.addPair = addPair;
this.addPairs = addPairs;
this.serialize = serialize;
this.serializeJSON = serializeJSON;
}
FormSerializer.patterns = patterns;
FormSerializer.serializeObject = function serializeObject() {
return new FormSerializer($, this).
addPairs(this.serializeArray()).
serialize();
};
FormSerializer.serializeJSON = function serializeJSON() {
return new FormSerializer($, this).
addPairs(this.serializeArray()).
serializeJSON();
};
if (typeof $.fn !== "undefined") {
$.fn.serializeObject = FormSerializer.serializeObject;
$.fn.serializeJSON = FormSerializer.serializeJSON;
}
exports.FormSerializer = FormSerializer;
return FormSerializer;
}));

