woocommerce/assets/js/jquery-serializejson/jquery.serializejson.min.js

10 lines
5.3 KiB
JavaScript

/*!
SerializeJSON jQuery plugin.
https://github.com/marioizquierdo/jquery.serializeJSON
version 2.8.1 (Dec, 2016)
Copyright (c) 2012, 2017 Mario Izquierdo
Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php)
and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses.
*/
!function(e){var n;"function"==typeof define&&define.amd?define(["jquery"],e):"object"==typeof exports?(n=require("jquery"),module.exports=e(n)):e(window.jQuery||window.Zepto||window.$)}(function(c){"use strict";c.fn.serializeJSON=function(e){var r,s,t,a,i,u,l=c.serializeJSON,o=this,p=l.setupOpts(e),e=o.serializeArray();return l.readCheckboxUncheckedValues(e,p,o),r={},c.each(e,function(e,n){s=n.name,t=n.value,u=l.extractTypeAndNameWithNoType(s),a=u.nameWithNoType,i=(i=u.type)||l.attrFromInputWithName(o,s,"data-value-type"),l.validateType(s,i,p),"skip"!==i&&(u=l.splitInputNameIntoKeysArray(a),t=l.parseValue(t,s,i,p),!t&&l.shouldSkipFalsy(o,s,a,i,p)||l.deepSet(r,u,t,p))}),r},c.serializeJSON={defaultOptions:{checkboxUncheckedValue:undefined,parseNumbers:!1,parseBooleans:!1,parseNulls:!1,parseAll:!1,parseWithFunction:null,skipFalsyValuesForTypes:[],skipFalsyValuesForFields:[],customTypes:{},defaultTypes:{string:function(e){return String(e)},number:function(e){return Number(e)},"boolean":function(e){return-1===["false","null","undefined","","0"].indexOf(e)},"null":function(e){return-1===["false","null","undefined","","0"].indexOf(e)?e:null},array:function(e){return JSON.parse(e)},object:function(e){return JSON.parse(e)},auto:function(e){return c.serializeJSON.parseValue(e,null,null,{parseNumbers:!0,parseBooleans:!0,parseNulls:!0})},skip:null},useIntKeysAsArrayIndex:!1},setupOpts:function(n){var e,r,s,t,a=c.serializeJSON;for(e in null==n&&(n={}),s=a.defaultOptions||{},r=["checkboxUncheckedValue","parseNumbers","parseBooleans","parseNulls","parseAll","parseWithFunction","skipFalsyValuesForTypes","skipFalsyValuesForFields","customTypes","defaultTypes","useIntKeysAsArrayIndex"],n)if(-1===r.indexOf(e))throw new Error("serializeJSON ERROR: invalid option '"+e+"'. Please use one of "+r.join(", "));return a=(t=function(e){return!1!==n[e]&&""!==n[e]&&(n[e]||s[e])})("parseAll"),{checkboxUncheckedValue:t("checkboxUncheckedValue"),parseNumbers:a||t("parseNumbers"),parseBooleans:a||t("parseBooleans"),parseNulls:a||t("parseNulls"),parseWithFunction:t("parseWithFunction"),skipFalsyValuesForTypes:t("skipFalsyValuesForTypes"),skipFalsyValuesForFields:t("skipFalsyValuesForFields"),typeFunctions:c.extend({},t("defaultTypes"),t("customTypes")),useIntKeysAsArrayIndex:t("useIntKeysAsArrayIndex")}},parseValue:function(e,n,r,s){c.serializeJSON;var t=e;return s.typeFunctions&&r&&s.typeFunctions[r]?t=s.typeFunctions[r](e):s.parseNumbers&&!isNaN(e)&&isFinite(e)?t=Number(e):!s.parseBooleans||"true"!==e&&"false"!==e?s.parseNulls&&"null"==e&&(t=null):t="true"===e,s.parseWithFunction&&!r&&(t=s.parseWithFunction(t,n)),t},isObject:function(e){return e===Object(e)},isUndefined:function(e){return void 0===e},isValidArrayIndex:function(e){return/^[0-9]+$/.test(String(e))},isNumeric:function(e){return 0<=e-parseFloat(e)},optionKeys:function(e){if(Object.keys)return Object.keys(e);var n,r=[];for(n in e)r.push(n);return r},readCheckboxUncheckedValues:function(r,s,e){var n,t;null==s&&(s={}),c.serializeJSON,n="input[type=checkbox][name]:not(:checked):not([disabled])",e.find(n).add(e.filter(n)).each(function(e,n){if(t=c(n),null==(t=t.attr("data-unchecked-value"))&&(t=s.checkboxUncheckedValue),null!=t){if(n.name&&-1!==n.name.indexOf("[]["))throw new Error("serializeJSON ERROR: checkbox unchecked values are not supported on nested arrays of objects like '"+n.name+"'. See https://github.com/marioizquierdo/jquery.serializeJSON/issues/67");r.push({name:n.name,value:t})}})},extractTypeAndNameWithNoType:function(e){var n;return(n=e.match(/(.*):([^:]+)$/))?{nameWithNoType:n[1],type:n[2]}:{nameWithNoType:e,type:null}},shouldSkipFalsy:function(e,n,r,s,t){e=c.serializeJSON.attrFromInputWithName(e,n,"data-skip-falsy");if(null!=e)return"false"!==e;e=t.skipFalsyValuesForFields;if(e&&(-1!==e.indexOf(r)||-1!==e.indexOf(n)))return!0;t=t.skipFalsyValuesForTypes;return null==s&&(s="string"),!(!t||-1===t.indexOf(s))},attrFromInputWithName:function(e,n,r){n='[name="'+n.replace(/(:|\.|\[|\]|\s)/g,"\\$1")+'"]';return e.find(n).add(e.filter(n)).attr(r)},validateType:function(e,n,r){var s=c.serializeJSON,s=s.optionKeys(r?r.typeFunctions:s.defaultOptions.defaultTypes);if(n&&-1===s.indexOf(n))throw new Error("serializeJSON ERROR: Invalid type "+n+" found in input name '"+e+"', please use one of "+s.join(", "));return!0},splitInputNameIntoKeysArray:function(e){c.serializeJSON;e=e.split("[");return""===(e=c.map(e,function(e){return e.replace(/\]/g,"")}))[0]&&e.shift(),e},deepSet:function(e,n,r,s){var t,a,i,u,l;if(null==s&&(s={}),(l=c.serializeJSON).isUndefined(e))throw new Error("ArgumentError: param 'o' expected to be an object or array, found undefined");if(!n||0===n.length)throw new Error("ArgumentError: param 'keys' expected to be an array with least one element");t=n[0],1===n.length?""===t?e.push(r):e[t]=r:(a=n[1],""===t&&(u=e[i=e.length-1],t=l.isObject(u)&&(l.isUndefined(u[a])||2<n.length)?i:1+i),""===a||s.useIntKeysAsArrayIndex&&l.isValidArrayIndex(a)?!l.isUndefined(e[t])&&Array.isArray(e[t])||(e[t]=[]):!l.isUndefined(e[t])&&l.isObject(e[t])||(e[t]={}),n=n.slice(1),l.deepSet(e[t],n,r,s))}}});