UNPKG

jaydata

Version:

Cross-platform HTML5 data-management, JavaScript Language Query (JSLQ) support for OData, SQLite, WebSQL, IndexedDB, YQL and Facebook (packaged for Node.JS)

126 lines (106 loc) 4.52 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _core = require('../../core.js'); var _core2 = _interopRequireDefault(_core); var _jquery = require('jquery'); var _jquery2 = _interopRequireDefault(_jquery); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } /* Base: http://bitovi.com/blog/2010/06/convert-form-elements-to-javascript-object-literals-with-jquery-formBinder-plugin.html */ (function ($) { var radioCheck = /radio|checkbox/i, keyBreaker = /[^\[\]]+/g, numberMatcher = /^[\-+]?[0-9]*\.?[0-9]+([eE][\-+]?[0-9]+)?$/; var isNumber = function isNumber(value) { if (typeof value == 'number') { return true; } if (typeof value != 'string') { return false; } return value.match(numberMatcher); }; $.fn.extend({ /** * @parent dom * @download http://jmvcsite.heroku.com/pluginify?plugins[]=jquery/dom/form_params/form_params.js * @plugin jquery/dom/form_params * @test jquery/dom/form_params/qunit.html * <p>Returns an object of name-value pairs that represents values in a form. * It is able to nest values whose element's name has square brackets. </p> * Example html: * @codestart html * &lt;form> * &lt;input name="foo[bar]" value='2'/> * &lt;input name="foo[ced]" value='4'/> * &lt;form/> * @codeend * Example code: * @codestart * $('form').formBinder() //-> { foo:{bar:2, ced: 4} } * @codeend * * @demo jquery/dom/form_params/form_params.html * * @param {Boolean} [convert] True if strings that look like numbers and booleans should be converted. Defaults to true. * @return {Object} An object of name-value pairs. */ formBinder: function formBinder(obj, convert) { if (this[0].nodeName.toLowerCase() == 'form' && this[0].elements) { return (0, _jquery2.default)(_jquery2.default.makeArray(this[0].elements)).getParams(obj, convert); } return (0, _jquery2.default)("input[name], textarea[name], select[name]", this[0]).getParams(obj, convert); }, getParams: function getParams(obj, convert) { var data = obj || {}, current; convert = convert === undefined ? true : convert; this.each(function () { var el = this, type = el.type && el.type.toLowerCase(); //if we are submit, ignore if (type == 'submit' || !el.name) { return; } var key = el.name, value = $.data(el, "value") || $.fn.val.call([el]), isRadioCheck = radioCheck.test(el.type), parts = key.match(keyBreaker), write = !isRadioCheck || !!el.checked, //make an array of values lastPart; if (convert) { if (isNumber(value)) { value = parseFloat(value); } else if (value === 'true' || value === 'false') { value = Boolean(value); } } // go through and create nested objects current = data; for (var i = 0; i < parts.length - 1; i++) { if (!current[parts[i]]) { current[parts[i]] = {}; } current = current[parts[i]]; } lastPart = parts[parts.length - 1]; //now we are on the last part, set the value if (lastPart in current && type === "checkbox") { if (!$.isArray(current[lastPart])) { current[lastPart] = current[lastPart] === undefined ? [] : [current[lastPart]]; } if (write) { current[lastPart].push(value); } } else if (write || !current[lastPart]) { current[lastPart] = write ? value : undefined; } }); return data; } }); })(_jquery2.default); exports.default = _core2.default; module.exports = exports['default'];