%PDF- %PDF-
Direktori : /home/opti/workflow/node_modules/cheerio/lib/api/ |
Current File : /home/opti/workflow/node_modules/cheerio/lib/api/forms.js |
// https://github.com/jquery/jquery/blob/2.1.3/src/manipulation/var/rcheckableType.js // https://github.com/jquery/jquery/blob/2.1.3/src/serialize.js var submittableSelector = 'input,select,textarea,keygen', r20 = /%20/g, rCRLF = /\r?\n/g, _ = { map: require('lodash.map') }; exports.serialize = function() { // Convert form elements into name/value objects var arr = this.serializeArray(); // Serialize each element into a key/value string var retArr = _.map(arr, function(data) { return encodeURIComponent(data.name) + '=' + encodeURIComponent(data.value); }); // Return the resulting serialization return retArr.join('&').replace(r20, '+'); }; exports.serializeArray = function() { // Resolve all form elements from either forms or collections of form elements var Cheerio = this.constructor; return this.map(function() { var elem = this; var $elem = Cheerio(elem); if (elem.name === 'form') { return $elem.find(submittableSelector).toArray(); } else { return $elem.filter(submittableSelector).toArray(); } }).filter( // Verify elements have a name (`attr.name`) and are not disabled (`:disabled`) '[name!=""]:not(:disabled)' // and cannot be clicked (`[type=submit]`) or are used in `x-www-form-urlencoded` (`[type=file]`) + ':not(:submit, :button, :image, :reset, :file)' // and are either checked/don't have a checkable state + ':matches([checked], :not(:checkbox, :radio))' // Convert each of the elements to its value(s) ).map(function(i, elem) { var $elem = Cheerio(elem); var name = $elem.attr('name'); var val = $elem.val(); // If there is no value set (e.g. `undefined`, `null`), then return nothing if (val == null) { return null; } else { // If we have an array of values (e.g. `<select multiple>`), return an array of key/value pairs if (Array.isArray(val)) { return _.map(val, function(val) { // We trim replace any line endings (e.g. `\r` or `\r\n` with `\r\n`) to guarantee consistency across platforms // These can occur inside of `<textarea>'s` return {name: name, value: val.replace( rCRLF, '\r\n' )}; }); // Otherwise (e.g. `<input type="text">`, return only one key/value pair } else { return {name: name, value: val.replace( rCRLF, '\r\n' )}; } } // Convert our result to an array }).get(); };