jaydata
Version:
Cross-platform HTML5 data-management, JavaScript Language Query (JSLQ) support for OData, SQLite, WebSQL, IndexedDB, YQL and Facebook (packaged for Node.JS)
148 lines (124 loc) • 6.28 kB
JavaScript
// JayData 1.5.10
// Dual licensed under MIT and GPL v2
// Copyright JayStack Technologies (http://jaydata.org/licensing)
//
// JayData is a standards-based, cross-platform Javascript library and a set of
// practices to access and manipulate data from various online and offline sources.
//
// Credits:
// Hajnalka Battancs, Dániel József, János Roden, László Horváth, Péter Nochta
// Péter Zentai, Róbert Bónay, Szabolcs Czinege, Viktor Borza, Viktor Lázár,
// Zoltán Gyebrovszki, Gábor Dolla
//
// More info: http://jaydata.org
(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define("jaydata/modules/formbinder",["jaydata/core"],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.$data = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(_dereq_,module,exports){
(function (global){
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _core = _dereq_('jaydata/core');
var _core2 = _interopRequireDefault(_core);
var _jquery = (typeof window !== "undefined" ? window['jQuery'] : typeof global !== "undefined" ? global['jQuery'] : null);
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
* <form>
* <input name="foo[bar]" value='2'/>
* <input name="foo[ced]" value='4'/>
* <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'];
}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
},{"jaydata/core":"jaydata/core"}]},{},[1])(1)
});