summaryrefslogtreecommitdiff
path: root/bin/wiki/ImportarDesdeURL/node_modules/cheerio/lib/api/forms.js
diff options
context:
space:
mode:
Diffstat (limited to 'bin/wiki/ImportarDesdeURL/node_modules/cheerio/lib/api/forms.js')
-rw-r--r--bin/wiki/ImportarDesdeURL/node_modules/cheerio/lib/api/forms.js65
1 files changed, 65 insertions, 0 deletions
diff --git a/bin/wiki/ImportarDesdeURL/node_modules/cheerio/lib/api/forms.js b/bin/wiki/ImportarDesdeURL/node_modules/cheerio/lib/api/forms.js
new file mode 100644
index 00000000..b66f162c
--- /dev/null
+++ b/bin/wiki/ImportarDesdeURL/node_modules/cheerio/lib/api/forms.js
@@ -0,0 +1,65 @@
+// 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 value = $elem.val();
+
+ // If there is no value set (e.g. `undefined`, `null`), then default value to empty
+ if (value == null) {
+ value = '';
+ }
+
+ // If we have an array of values (e.g. `<select multiple>`), return an array of key/value pairs
+ if (Array.isArray(value)) {
+ return _.map(value, 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: value.replace( rCRLF, '\r\n' )};
+ }
+ // Convert our result to an array
+ }).get();
+};