From d566b4b44e8e9e32741da165783e8e59d5e381c7 Mon Sep 17 00:00:00 2001
From: Kevin Morris
Date: Sun, 5 Mar 2017 21:47:50 -0500
Subject: [PATCH 001/108] Adds build badge
---
README.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/README.md b/README.md
index 9d4218ed..f8b49593 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
-#jQuery Form
+#jQuery Form [](https://travis-ci.org/jquery-form/form)
##Overview
The jQuery Form Plugin allows you to easily and unobtrusively upgrade HTML forms to use AJAX. The main methods, ajaxForm and ajaxSubmit, gather information from the form element to determine how to manage the submit process. Both of these methods support numerous options which allows you to have full control over how the data is submitted.
From 911efdffc75c4f8636ef74db3af610ef3c178eb2 Mon Sep 17 00:00:00 2001
From: Kevin Morris
Date: Mon, 6 Mar 2017 20:44:11 -0500
Subject: [PATCH 002/108] test: Adds test 'formToArray: text promotion for
missing value attributes'
---
test/test.html | 14 ++++++++++++++
test/test.js | 26 +++++++++++++++++++++-----
2 files changed, 35 insertions(+), 5 deletions(-)
diff --git a/test/test.html b/test/test.html
index c0018b31..b66dbf6a 100644
--- a/test/test.html
+++ b/test/test.html
@@ -75,6 +75,20 @@
+
+
+
diff --git a/test/test.js b/test/test.js
index 2f94ae55..c76ec4c3 100644
--- a/test/test.js
+++ b/test/test.js
@@ -46,10 +46,26 @@ describe('form', function() {
});
it('formToArray: semantic test', function() {
- var formData = $('#form2').formToArray(true);
- var testData = ['a','b','c','d','e','f'];
- for (var i=0; i < 6; i++) {
- assert.strictEqual(formData[i].name, testData[i], 'match value at index=' + i);
- }
+ var formData = $('#form2').formToArray(true);
+ var testData = ['a','b','c','d','e','f'];
+ for (var i=0; i < 6; i++) {
+ assert.strictEqual(formData[i].name, testData[i], 'match value at index=' + i);
+ }
+ });
+
+ it('formToArray: text promotion for missing value attributes', function() {
+ var expected = [
+ { name: 'A', value: ''},
+ { name: 'B', value: 'MISSING_ATTR'},
+ { name: 'C', value: ''},
+ { name: 'C', value: 'MISSING_ATTR'}
+ ];
+ var a = $('#form6').formToArray(true);
+
+ // verify all the option values
+ for (var i=0; i < a.length; i++) {
+ assert.strictEqual(a[i].name, expected[i].name, 'Name: ' + a[i].name + ' = ' + expected[i].name);
+ assert.strictEqual(a[i].value, expected[i].value, 'Value: ' + a[i].value + ' = ' + expected[i].value);
+ }
});
});
From 76c7c90fa102ae1e4ed764ea6a6c574913210f64 Mon Sep 17 00:00:00 2001
From: Kevin Morris
Date: Mon, 6 Mar 2017 20:46:18 -0500
Subject: [PATCH 003/108] Outside fields bug fix
Resolves #461
In non-IE browsers outside fields are already included in elements
attribute of form, so there is no need to add outside fields again.
Courtesy of @FinesseRus
---
src/jquery.form.js | 3 ++-
test/test.html | 6 ++++++
test/test.js | 5 +++++
3 files changed, 13 insertions(+), 1 deletion(-)
diff --git a/src/jquery.form.js b/src/jquery.form.js
index 48e5cfa0..edd1d27a 100644
--- a/src/jquery.form.js
+++ b/src/jquery.form.js
@@ -1002,7 +1002,8 @@
}
// #386; account for inputs outside the form which use the 'form' attribute
- if ( formId ) {
+ // FinesseRus: in non-IE browsers outside fields are already included in form.elements.
+ if (formId && (semantic || /(Edge|Trident)\//.test(navigator.userAgent))) {
els2 = $(':input[form="' + formId + '"]').get(); // hat tip @thet
if ( els2.length ) {
els = (els || []).concat(els2);
diff --git a/test/test.html b/test/test.html
index b66dbf6a..ea3478c1 100644
--- a/test/test.html
+++ b/test/test.html
@@ -89,6 +89,12 @@
+
+
+
+
diff --git a/test/test.js b/test/test.js
index c76ec4c3..3be00f77 100644
--- a/test/test.js
+++ b/test/test.js
@@ -68,4 +68,9 @@ describe('form', function() {
assert.strictEqual(a[i].value, expected[i].value, 'Value: ' + a[i].value + ' = ' + expected[i].value);
}
});
+
+ it('formToArray: outside fields', function() {
+ var formData = $('#form8').formToArray();
+ assert.strictEqual(formData.length, 2, 'There are two "successful" elements of the form');
+ });
});
From 60d99a910e2c3c769037266e9991e46954319524 Mon Sep 17 00:00:00 2001
From: emasab
Date: Tue, 7 Mar 2017 19:16:57 +0100
Subject: [PATCH 004/108] IE fix if form is in a different document (#518)
* IE fix if form is in a different document
if form is in a different document than jquery
Resolves #258
---
src/jquery.form.js | 12 +++++++-----
1 file changed, 7 insertions(+), 5 deletions(-)
diff --git a/src/jquery.form.js b/src/jquery.form.js
index edd1d27a..0ed9e72f 100644
--- a/src/jquery.form.js
+++ b/src/jquery.form.js
@@ -407,8 +407,10 @@
s = $.extend(true, {}, $.ajaxSettings, options);
s.context = s.context || s;
id = 'jqFormIO' + (new Date().getTime());
+ var ownerDocument = form.ownerDocument;
+ var $body = $form.closest('body');
if (s.iframeTarget) {
- $io = $(s.iframeTarget);
+ $io = $(s.iframeTarget, ownerDocument);
n = $io.attr2('name');
if (!n) {
$io.attr2('name', id);
@@ -418,7 +420,7 @@
}
}
else {
- $io = $('');
+ $io = $('', ownerDocument);
$io.css({ position: 'absolute', top: '-1000px', left: '-1000px' });
}
io = $io[0];
@@ -597,11 +599,11 @@
// if using the $.param format that allows for multiple values with the same name
if($.isPlainObject(s.extraData[n]) && s.extraData[n].hasOwnProperty('name') && s.extraData[n].hasOwnProperty('value')) {
extraInputs.push(
- $('').val(s.extraData[n].value)
+ $('', ownerDocument).val(s.extraData[n].value)
.appendTo(form)[0]);
} else {
extraInputs.push(
- $('').val(s.extraData[n])
+ $('', ownerDocument).val(s.extraData[n])
.appendTo(form)[0]);
}
}
@@ -610,7 +612,7 @@
if (!s.iframeTarget) {
// add iframe to doc and submit the form
- $io.appendTo('body');
+ $io.appendTo($body);
}
if (io.attachEvent) {
io.attachEvent('onload', cb);
From 152abdbd06e4a815cb5e4792f6369436c0961ef3 Mon Sep 17 00:00:00 2001
From: Kevin Morris
Date: Tue, 7 Mar 2017 10:36:21 -0500
Subject: [PATCH 005/108] Configures ESLint linting
---
.eslintrc.js | 355 +++++++++++++++++++++++++++++++++++++++++++++++++++
Gruntfile.js | 10 +-
package.json | 1 +
3 files changed, 365 insertions(+), 1 deletion(-)
create mode 100644 .eslintrc.js
diff --git a/.eslintrc.js b/.eslintrc.js
new file mode 100644
index 00000000..6ee059ab
--- /dev/null
+++ b/.eslintrc.js
@@ -0,0 +1,355 @@
+module.exports = {
+ "env": {
+ "browser": true,
+ "jquery": true,
+ "node": true,
+ "amd": true,
+ "mocha": true
+ },
+ "parserOptions": {
+ "ecmaVersion": 5,
+ "sourceType": "script"
+ },
+ "extends": "eslint:recommended",
+ "rules": {
+ "array-bracket-spacing": [
+ "warn",
+ "never"
+ ],
+ "array-callback-return": "warn",
+ "arrow-body-style": "error",
+ "arrow-parens": "error",
+ "arrow-spacing": "error",
+ "block-scoped-var": "warn",
+ "block-spacing": [
+ "warn",
+ "always"
+ ],
+ "brace-style": [
+ "error",
+ "1tbs"
+ ],
+ "callback-return": "error",
+ "camelcase": [
+ "warn",
+ { "properties": "always" }
+ ],
+ "capitalized-comments": "off",
+ "class-methods-use-this": "error",
+ "comma-dangle": [
+ "error",
+ "never"
+ ],
+ "comma-spacing": "error",
+ "comma-style": "error",
+ "complexity": [
+ "warn",
+ 20
+ ],
+ "computed-property-spacing": "error",
+ "consistent-return": "error",
+ "consistent-this": "error",
+ "curly": "error",
+ "default-case": "error",
+ "dot-location": [
+ "error",
+ "property"
+ ],
+ "dot-notation": "error",
+ "eol-last": "error",
+ "eqeqeq": "error",
+ "func-call-spacing": "error",
+ "func-name-matching": "error",
+ "func-names": "off",
+ "func-style": "off",
+ "generator-star-spacing": "error",
+ "global-require": "error",
+ "guard-for-in": "warn",
+ "handle-callback-err": "error",
+ "id-blacklist": "error",
+ "id-length": [
+ "warn",
+ { "exceptions": ["i","j","k","l"] }
+ ],
+ "id-match": "error",
+ "indent": [
+ "error",
+ "tab"
+ ],
+ "init-declarations": "off",
+ "jsx-quotes": "error",
+ "key-spacing": [
+ "warn", {
+ "singleLine": {
+ "beforeColon": false,
+ "afterColon": true
+ },
+ "multiLine": {
+ "beforeColon": true,
+ "afterColon": true,
+ "align": "colon"
+ }
+ }
+ ],
+ "keyword-spacing": "error",
+ "line-comment-position": "off",
+ "linebreak-style": [
+ "warn",
+ "unix"
+ ],
+ "lines-around-comment": "off",
+ "lines-around-directive": "off",
+ "max-depth": "warn",
+ "max-len": "off",
+ "max-lines": "off",
+ "max-nested-callbacks": "error",
+ "max-params": [
+ "warn",
+ { "max": 4 }
+ ],
+ "max-statements": [
+ "warn",
+ { "max": 20 }
+ ],
+ "max-statements-per-line": [
+ "error",
+ { "max": 2 }
+ ],
+ "multiline-ternary": [
+ "error",
+ "never"
+ ],
+ "new-parens": "error",
+ "newline-after-var": "warn",
+ "newline-before-return": "error",
+ "newline-per-chained-call": [
+ "warn",
+ { "ignoreChainWithDepth": 3 }
+ ],
+ "no-alert": "error",
+ "no-array-constructor": "error",
+ "no-await-in-loop": "error",
+ "no-bitwise": "error",
+ "no-caller": "error",
+ "no-catch-shadow": "warn",
+ "no-compare-neg-zero": "error",
+ "no-confusing-arrow": "error",
+ "no-continue": "warn",
+ "no-div-regex": "error",
+ "no-duplicate-imports": "error",
+ "no-else-return": "error",
+ "no-empty": [
+ "error",
+ { "allowEmptyCatch": true }
+ ],
+ "no-empty-function": [
+ "error",
+ { "allow": ["functions"] }
+ ],
+ "no-eq-null": "error",
+ "no-eval": [
+ "error",
+ { "allowIndirect": true }
+ ],
+ "no-extend-native": "error",
+ "no-extra-bind": "error",
+ "no-extra-label": "error",
+ "no-extra-parens": [
+ "warn",
+ "all",
+ {
+ "returnAssign": false,
+ "nestedBinaryExpressions": false
+ }
+ ],
+ "no-floating-decimal": "error",
+ "no-global-assign": "error",
+ "no-implicit-globals": "error",
+ "no-implied-eval": "error",
+ "no-inline-comments": "off",
+ "no-inner-declarations": [
+ "warn",
+ "both"
+ ],
+ "no-invalid-this": "off",
+ "no-iterator": "error",
+ "no-label-var": "error",
+ "no-labels": "error",
+ "no-lone-blocks": "error",
+ "no-lonely-if": "error",
+ "no-loop-func": "error",
+ "no-magic-numbers": [
+ "warn",
+ {
+ "ignore": [0,1],
+ "ignoreArrayIndexes": true
+ }
+ ],
+ "no-mixed-operators": "error",
+ "no-mixed-requires": "error",
+ "no-multi-assign": "warn",
+ "no-multi-spaces": "error",
+ "no-multi-str": "error",
+ "no-multiple-empty-lines": [
+ "error",
+ {
+ max: 2,
+ maxEOF: 1,
+ maxBOF: 0
+ }
+ ],
+ "no-negated-condition": "warn",
+ "no-nested-ternary": "error",
+ "no-new": "error",
+ "no-new-func": "error",
+ "no-new-object": "error",
+ "no-new-require": "error",
+ "no-new-wrappers": "error",
+ "no-octal-escape": "error",
+ "no-param-reassign": "off",
+ "no-path-concat": "error",
+ "no-plusplus": "off",
+ "no-process-env": "error",
+ "no-process-exit": "error",
+ "no-proto": "error",
+ "no-prototype-builtins": "warn",
+ "no-restricted-globals": "error",
+ "no-restricted-imports": "error",
+ "no-restricted-modules": "error",
+ "no-restricted-properties": "error",
+ "no-restricted-syntax": "error",
+ "no-return-assign": "error",
+ "no-return-await": "error",
+ "no-script-url": "error",
+ "no-self-compare": "error",
+ "no-sequences": "error",
+ "no-shadow": "warn",
+ "no-shadow-restricted-names": "error",
+ "no-spaced-func": "error",
+ "no-sync": "warn",
+ "no-tabs": "off",
+ "no-template-curly-in-string": "error",
+ "no-ternary": "warn",
+ "no-throw-literal": "warn",
+ "no-trailing-spaces": "error",
+ "no-undef-init": "error",
+ "no-undefined": "warn",
+ "no-underscore-dangle": "error",
+ "no-unmodified-loop-condition": "error",
+ "no-unneeded-ternary": "error",
+ "no-unsafe-negation": "error",
+ "no-unused-expressions": "error",
+ "no-unused-vars": [
+ "warn",
+ {
+ "vars": "local",
+ "args": "none"
+ }
+ ],
+ "no-use-before-define": [
+ "error",
+ {
+ "functions": false
+ }
+ ],
+ "no-useless-call": "error",
+ "no-useless-computed-key": "error",
+ "no-useless-concat": "error",
+ "no-useless-constructor": "error",
+ "no-useless-escape": "error",
+ "no-useless-rename": "error",
+ "no-useless-return": "error",
+ "no-var": "off",
+ "no-void": "error",
+ "no-warning-comments": "warn",
+ "no-whitespace-before-property": "error",
+ "no-with": "error",
+ "nonblock-statement-body-position": "error",
+ "object-curly-newline": "error",
+ "object-curly-spacing": [
+ "error",
+ "never",
+ {
+ "arraysInObjects": true,
+ "objectsInObjects": true
+ }
+ ],
+ "object-property-newline": [
+ "error",
+ {
+ "allowMultiplePropertiesPerLine": true
+ }
+ ],
+ "object-shorthand": [
+ "warn",
+ "consistent"
+ ],
+ "one-var": "off",
+ "one-var-declaration-per-line": "off",
+ "operator-assignment": [
+ "error",
+ "always"
+ ],
+ "operator-linebreak": "error",
+ "padded-blocks": "off",
+ "prefer-arrow-callback": "off",
+ "prefer-const": "error",
+ "prefer-destructuring": "off",
+ "prefer-numeric-literals": "off",
+ "prefer-promise-reject-errors": "error",
+ "prefer-rest-params": "off",
+ "prefer-spread": "off",
+ "prefer-template": "off",
+ "quote-props": [
+ "warn",
+ "consistent-as-needed"
+ ],
+ "quotes": [
+ "error",
+ "single",
+ {
+ "avoidEscape": true,
+ "allowTemplateLiterals": true
+ }
+ ],
+ "radix": "error",
+ "require-await": "error",
+ "require-jsdoc": "off",
+ "rest-spread-spacing": "error",
+ "semi": "error",
+ "semi-spacing": "error",
+ "sort-imports": "error",
+ "sort-keys": "warn",
+ "sort-vars": "warn",
+ "space-before-blocks": "warn",
+ "space-before-function-paren": "off",
+ "space-in-parens": "warn",
+ "space-infix-ops": "error",
+ "space-unary-ops": "error",
+ "spaced-comment": ["error", "always", {
+ "line": {
+ "markers": ["/"],
+ "exceptions": ["-", "+"]
+ },
+ "block": {
+ "markers": ["!"],
+ "exceptions": ["*"],
+ "balanced": true
+ }
+ }],
+ "strict": [
+ "warn",
+ "function"
+ ],
+ "symbol-description": "off",
+ "template-curly-spacing": "error",
+ "template-tag-spacing": "error",
+ "unicode-bom": "error",
+ "valid-jsdoc": "warn",
+ "vars-on-top": "warn",
+ "wrap-iife": "error",
+ "wrap-regex": "off",
+ "yield-star-spacing": "error",
+ "yoda": "error"
+ }
+};
diff --git a/Gruntfile.js b/Gruntfile.js
index 2141df4d..b8dbe9e9 100644
--- a/Gruntfile.js
+++ b/Gruntfile.js
@@ -5,6 +5,13 @@ module.exports = function(grunt) {
banner: '/*! <%= pkg.name %> <%= grunt.template.today("yyyy-mm-dd HH:MM:ss") %> */'
},
+ eslint: {
+ options: {
+ quiet: true
+ },
+ target: ['src/**/*.js']
+ },
+
mocha: {
all: {
src: ['test/**/*.html'],
@@ -35,8 +42,9 @@ module.exports = function(grunt) {
// Load tasks
grunt.loadNpmTasks('grunt-contrib-uglify');
grunt.loadNpmTasks('grunt-mocha');
+ grunt.loadNpmTasks('grunt-eslint');
// Default task.
- grunt.registerTask('test', [ 'mocha' ]);
+ grunt.registerTask('test', [ 'eslint', 'mocha' ]);
grunt.registerTask('default', [ 'test', 'uglify' ]);
};
diff --git a/package.json b/package.json
index 008ff8f4..ea11c970 100644
--- a/package.json
+++ b/package.json
@@ -22,6 +22,7 @@
"grunt": "~1",
"grunt-contrib-uglify": "~2",
"grunt-mocha": "*",
+ "grunt-eslint": "*",
"chai": "*",
"mocha": "*",
From bc43e5726f4dc6acf496d84f0b30732c53b391a1 Mon Sep 17 00:00:00 2001
From: Kevin Morris
Date: Tue, 7 Mar 2017 14:50:33 -0500
Subject: [PATCH 006/108] Minor code style changes to pass ESHint
---
src/jquery.form.js | 368 +++++++++++++++++++++++++--------------------
1 file changed, 209 insertions(+), 159 deletions(-)
diff --git a/src/jquery.form.js b/src/jquery.form.js
index 0ed9e72f..95694153 100644
--- a/src/jquery.form.js
+++ b/src/jquery.form.js
@@ -8,8 +8,9 @@
* Dual licensed under the MIT and LGPLv3 licenses.
* https://github.com/jquery-form/form#license
*/
-/*global ActiveXObject */
+/* global ActiveXObject */
+/* eslint-disable */
(function (factory) {
if (typeof define === 'function' && define.amd) {
// AMD. Register as an anonymous module.
@@ -36,7 +37,8 @@
}
}(function ($) {
- "use strict";
+/* eslint-enable */
+ 'use strict';
/*
Usage Note:
@@ -81,6 +83,7 @@
* Feature detection
*/
var feature = {};
+
feature.fileapi = $('').get(0).files !== undefined;
feature.formdata = window.FormData !== undefined;
@@ -91,13 +94,14 @@
// contains inputs with names like "action" or "method"; in those
// cases "prop" returns the element
$.fn.attr2 = function() {
- if ( ! hasProp ) {
+ if (!hasProp) {
return this.attr.apply(this, arguments);
}
var val = this.prop.apply(this, arguments);
- if ( ( val && val.jquery ) || typeof val === 'string' ) {
+ if (( val && val.jquery ) || typeof val === 'string') {
return val;
}
+
return this.attr.apply(this, arguments);
};
@@ -105,24 +109,24 @@
* ajaxSubmit() provides a mechanism for immediately submitting
* an HTML form using AJAX.
*
- * @param object|string options jquery.form.js parameters or custom url for submission
- * @param object data extraData
- * @param string dataType ajax dataType
- * @param function onSuccess ajax success callback function
+ * @param {object|string} options jquery.form.js parameters or custom url for submission
+ * @param {object} data extraData
+ * @param {string} dataType ajax dataType
+ * @param {function} onSuccess ajax success callback function
*/
$.fn.ajaxSubmit = function(options, data, dataType, onSuccess) {
- /*jshint scripturl:true */
-
// fast fail if nothing selected (http://dev.jquery.com/ticket/2752)
if (!this.length) {
log('ajaxSubmit: skipping submit process - no element selected');
+
return this;
}
+ /* eslint consistent-this: ["error", "$form"] */
var method, action, url, $form = this;
if (typeof options === 'function') {
- options = { success: options };
+ options = {success: options};
} else if ( typeof options === 'string' || ( options === false && arguments.length > 0 ) ) {
options = {
@@ -131,12 +135,11 @@
'dataType' : dataType
};
- if(typeof onSuccess === 'function')
- {
+ if (typeof onSuccess === 'function') {
options.success = onSuccess;
}
- } else if ( options === undefined ) {
+ } else if (options === undefined) {
options = {};
}
@@ -147,14 +150,14 @@
url = url || window.location.href || '';
if (url) {
// clean url (don't include hash vaue)
- url = (url.match(/^([^#]+)/)||[])[1];
+ url = (url.match(/^([^#]+)/) || [])[1];
}
options = $.extend(true, {
url: url,
success: $.ajaxSettings.success,
type: method || $.ajaxSettings.type,
- iframeSrc: /^https/i.test(window.location.href || '') ? 'javascript:false' : 'about:blank'
+ iframeSrc: /^https/i.test(window.location.href || '') ? 'javascript:false' : 'about:blank' // eslint-disable-line no-script-url
}, options);
// hook for manipulating the form data before it is extracted;
@@ -163,12 +166,14 @@
this.trigger('form-pre-serialize', [this, options, veto]);
if (veto.veto) {
log('ajaxSubmit: submit vetoed via form-pre-serialize trigger');
+
return this;
}
// provide opportunity to alter form data before it is serialized
if (options.beforeSerialize && options.beforeSerialize(this, options) === false) {
log('ajaxSubmit: submit aborted via beforeSerialize callback');
+
return this;
}
@@ -188,6 +193,7 @@
// give pre-submit callback an opportunity to abort the submit
if (options.beforeSubmit && options.beforeSubmit(a, this, options) === false) {
log('ajaxSubmit: submit aborted via beforeSubmit callback');
+
return this;
}
@@ -195,6 +201,7 @@
this.trigger('form-submit-validate', [a, this, options, veto]);
if (veto.veto) {
log('ajaxSubmit: submit vetoed via form-submit-validate trigger');
+
return this;
}
@@ -205,28 +212,32 @@
if (options.type.toUpperCase() === 'GET') {
options.url += (options.url.indexOf('?') >= 0 ? '&' : '?') + q;
options.data = null; // data is null for 'get'
- }
- else {
+ } else {
options.data = q; // data is the query string for 'post'
}
var callbacks = [];
if (options.resetForm) {
- callbacks.push(function() { $form.resetForm(); });
+ callbacks.push(function() {
+ $form.resetForm();
+ });
}
if (options.clearForm) {
- callbacks.push(function() { $form.clearForm(options.includeHidden); });
+ callbacks.push(function() {
+ $form.clearForm(options.includeHidden);
+ });
}
// perform a load on the target only if dataType is not provided
if (!options.dataType && options.target) {
var oldSuccess = options.success || function(){};
+
callbacks.push(function(data) {
var fn = options.replaceTarget ? 'replaceWith' : 'html';
$(options.target)[fn](data).each(oldSuccess, arguments);
});
- }
- else if (options.success) {
+
+ } else if (options.success) {
if ($.isArray(options.success)) {
$.merge(callbacks, options.success);
} else {
@@ -235,22 +246,25 @@
}
options.success = function(data, status, xhr) { // jQuery 1.4+ passes xhr as 3rd arg
- var context = options.context || this ; // jQuery 1.4+ supports scope context
- for (var i=0, max=callbacks.length; i < max; i++) {
+ var context = options.context || this; // jQuery 1.4+ supports scope context
+
+ for (var i = 0, max = callbacks.length; i < max; i++) {
callbacks[i].apply(context, [data, status, xhr || $form, $form]);
}
};
if (options.error) {
var oldError = options.error;
+
options.error = function(xhr, status, error) {
var context = options.context || this;
oldError.apply(context, [xhr, status, error, $form]);
};
}
- if (options.complete) {
+ if (options.complete) {
var oldComplete = options.complete;
+
options.complete = function(xhr, status) {
var context = options.context || this;
oldComplete.apply(context, [xhr, status, $form]);
@@ -261,7 +275,9 @@
// [value] (issue #113), also see comment:
// https://github.com/malsup/form/commit/588306aedba1de01388032d5f42a60159eea9228#commitcomment-2180219
- var fileInputs = $('input[type=file]:enabled', this).filter(function() { return $(this).val() !== ''; });
+ var fileInputs = $('input[type=file]:enabled', this).filter(function() {
+ return $(this).val() !== '';
+ });
var hasFileInputs = fileInputs.length > 0;
var mp = 'multipart/form-data';
@@ -282,40 +298,43 @@
$.get(options.closeKeepAlive, function() {
jqxhr = fileUploadIframe(a);
});
- }
- else {
+
+ } else {
jqxhr = fileUploadIframe(a);
}
- }
- else if ((hasFileInputs || multipart) && fileAPI) {
+
+ } else if ((hasFileInputs || multipart) && fileAPI) {
jqxhr = fileUploadXhr(a);
- }
- else {
+
+ } else {
jqxhr = $.ajax(options);
}
$form.removeData('jqxhr').data('jqxhr', jqxhr);
// clear element array
- for (var k=0; k < elements.length; k++) {
+ for (var k = 0; k < elements.length; k++) {
elements[k] = null;
}
// fire 'notify' event
this.trigger('form-submit-notify', [this, options]);
+
return this;
// utility fn for deep serialization
- function deepSerialize(extraData){
+ function deepSerialize(extraData) {
var serialized = $.param(extraData, options.traditional).split('&');
var len = serialized.length;
var result = [];
var i, part;
- for (i=0; i < len; i++) {
+
+ for (i = 0; i < len; i++) {
part = serialized[i].split('=');
// #278; use array instead of object storage, favoring array serializations
result.push([decodeURIComponent(part[0]), decodeURIComponent(part[1])]);
}
+
return result;
}
@@ -323,13 +342,14 @@
function fileUploadXhr(a) {
var formdata = new FormData();
- for (var i=0; i < a.length; i++) {
+ for (var i = 0; i < a.length; i++) {
formdata.append(a[i].name, a[i].value);
}
if (options.extraData) {
var serializedData = deepSerialize(options.extraData);
- for (i=0; i < serializedData.length; i++) {
+
+ for (i = 0; i < serializedData.length; i++) {
if (serializedData[i]) {
formdata.append(serializedData[i][0], serializedData[i][1]);
}
@@ -352,7 +372,7 @@
if (xhr.upload) {
xhr.upload.addEventListener('progress', function(event) {
var percent = 0;
- var position = event.loaded || event.position; /*event.position is deprecated*/
+ var position = event.loaded || event.position; /* event.position is deprecated */
var total = event.total;
if (event.lengthComputable) {
percent = Math.ceil(position / total * 100);
@@ -360,6 +380,7 @@
options.uploadProgress(event, position, total, percent);
}, false);
}
+
return xhr;
};
}
@@ -367,17 +388,18 @@
s.data = null;
var beforeSend = s.beforeSend;
s.beforeSend = function(xhr, o) {
- //Send FormData() provided by user
+ // Send FormData() provided by user
if (options.formData) {
o.data = options.formData;
- }
- else {
+ } else {
o.data = formdata;
}
- if(beforeSend) {
+
+ if (beforeSend) {
beforeSend.call(this, xhr, o);
}
};
+
return $.ajax(s);
}
@@ -393,12 +415,11 @@
if (a) {
// ensure that every serialized input is still enabled
- for (i=0; i < elements.length; i++) {
+ for (i = 0; i < elements.length; i++) {
el = $(elements[i]);
if ( hasProp ) {
el.prop('disabled', false);
- }
- else {
+ } else {
el.removeAttr('disabled');
}
}
@@ -409,19 +430,19 @@
id = 'jqFormIO' + (new Date().getTime());
var ownerDocument = form.ownerDocument;
var $body = $form.closest('body');
+
if (s.iframeTarget) {
$io = $(s.iframeTarget, ownerDocument);
n = $io.attr2('name');
if (!n) {
$io.attr2('name', id);
- }
- else {
+ } else {
id = n;
}
- }
- else {
- $io = $('', ownerDocument);
- $io.css({ position: 'absolute', top: '-1000px', left: '-1000px' });
+
+ } else {
+ $io = $('', ownerDocument);
+ $io.css({position: 'absolute', top: '-1000px', left: '-1000px'});
}
io = $io[0];
@@ -444,17 +465,18 @@
if (io.contentWindow.document.execCommand) {
io.contentWindow.document.execCommand('Stop');
}
- }
- catch(ignore) {}
+ } catch (ignore) {}
$io.attr('src', s.iframeSrc); // abort op in progress
xhr.error = e;
if (s.error) {
s.error.call(s.context, xhr, e, status);
}
+
if (g) {
$.event.trigger('ajaxError', [xhr, s, e]);
}
+
if (s.complete) {
s.complete.call(s.context, xhr, e);
}
@@ -463,7 +485,7 @@
g = s.global;
// trigger ajax global events so that activity/block indicators work like normal
- if (g && 0 === $.active++) {
+ if (g && $.active++ === 0) {
$.event.trigger('ajaxStart');
}
if (g) {
@@ -475,10 +497,13 @@
$.active--;
}
deferred.reject();
+
return deferred;
}
+
if (xhr.aborted) {
deferred.reject();
+
return deferred;
}
@@ -490,8 +515,8 @@
s.extraData = s.extraData || {};
s.extraData[n] = sub.value;
if (sub.type === 'image') {
- s.extraData[n+'.x'] = form.clk_x;
- s.extraData[n+'.y'] = form.clk_y;
+ s.extraData[n + '.x'] = form.clk_x;
+ s.extraData[n + '.y'] = form.clk_y;
}
}
}
@@ -514,7 +539,7 @@
if (frame.contentWindow) {
doc = frame.contentWindow.document;
}
- } catch(err) {
+ } catch (err) {
// IE8 access denied under ssl & missing protocol
log('cannot get iframe.contentWindow document: ' + err);
}
@@ -525,11 +550,12 @@
try { // simply checking may throw in ie8 under ssl or mismatched protocol
doc = frame.contentDocument ? frame.contentDocument : frame.document;
- } catch(err) {
+ } catch (err) {
// last attempt
log('cannot get iframe.contentDocument: ' + err);
doc = frame.document;
}
+
return doc;
}
@@ -559,7 +585,7 @@
}
// ie borks in some cases when setting encoding
- if (! s.skipEncodingOverride && (!method || /post/i.test(method))) {
+ if (!s.skipEncodingOverride && (!method || /post/i.test(method))) {
$form.attr({
encoding: 'multipart/form-data',
enctype: 'multipart/form-data'
@@ -568,7 +594,9 @@
// support timout
if (s.timeout) {
- timeoutHandle = setTimeout(function() { timedOut = true; cb(CLIENT_TIMEOUT_ABORT); }, s.timeout);
+ timeoutHandle = setTimeout(function() {
+ timedOut = true; cb(CLIENT_TIMEOUT_ABORT);
+ }, s.timeout);
}
// look for server aborts
@@ -579,8 +607,8 @@
if (state && state.toLowerCase() === 'uninitialized') {
setTimeout(checkState,50);
}
- }
- catch(e) {
+
+ } catch (e) {
log('Server abort: ' , e, ' (', e.name, ')');
cb(SERVER_ABORT);
if (timeoutHandle) {
@@ -614,23 +642,23 @@
// add iframe to doc and submit the form
$io.appendTo($body);
}
+
if (io.attachEvent) {
io.attachEvent('onload', cb);
- }
- else {
+ } else {
io.addEventListener('load', cb, false);
}
setTimeout(checkState,15);
try {
form.submit();
- } catch(err) {
+ } catch (err) {
// just in case form has element with name/id of 'submit'
var submitFn = document.createElement('form').submit;
submitFn.apply(form);
}
- }
- finally {
+
+ } finally {
// reset attrs and remove "extra" input elements
form.setAttribute('action',a);
form.setAttribute('enctype', et); // #380
@@ -645,8 +673,7 @@
if (s.forceSync) {
doSubmit();
- }
- else {
+ } else {
setTimeout(doSubmit, 10); // this lets dom updates render
}
@@ -665,11 +692,13 @@
if (e === CLIENT_TIMEOUT_ABORT && xhr) {
xhr.abort('timeout');
deferred.reject(xhr, 'timeout');
+
return;
- }
- else if (e === SERVER_ABORT && xhr) {
+
+ } else if (e === SERVER_ABORT && xhr) {
xhr.abort('server abort');
deferred.reject(xhr, 'error', 'server abort');
+
return;
}
@@ -681,8 +710,7 @@
}
if (io.detachEvent) {
io.detachEvent('onload', cb);
- }
- else {
+ } else {
io.removeEventListener('load', cb, false);
}
@@ -700,6 +728,7 @@
// the onload callback fires, so we loop a bit to accommodate
log('requeing onLoad callback, DOM not available');
setTimeout(cb, 250);
+
return;
}
// let this fall through because server response could be an empty document
@@ -716,6 +745,7 @@
}
xhr.getResponseHeader = function(header){
var headers = {'content-type': s.dataType};
+
return headers[header.toLowerCase()];
};
// support for XHR 'status' & 'statusText' emulation :
@@ -734,32 +764,32 @@
// support for XHR 'status' & 'statusText' emulation :
xhr.status = Number( ta.getAttribute('status') ) || xhr.status;
xhr.statusText = ta.getAttribute('statusText') || xhr.statusText;
- }
- else if (scr) {
+
+ } else if (scr) {
// account for browsers injecting pre around json response
var pre = doc.getElementsByTagName('pre')[0];
var b = doc.getElementsByTagName('body')[0];
+
if (pre) {
xhr.responseText = pre.textContent ? pre.textContent : pre.innerText;
- }
- else if (b) {
+ } else if (b) {
xhr.responseText = b.textContent ? b.textContent : b.innerText;
}
}
- }
- else if (dt === 'xml' && !xhr.responseXML && xhr.responseText) {
+
+ } else if (dt === 'xml' && !xhr.responseXML && xhr.responseText) {
xhr.responseXML = toXml(xhr.responseText);
}
try {
data = httpData(xhr, dt, s);
- }
- catch (err) {
+
+ } catch (err) {
status = 'parsererror';
xhr.error = errMsg = (err || status);
}
- }
- catch (err) {
+
+ } catch (err) {
log('error caught: ',err);
status = 'error';
xhr.error = errMsg = (err || status);
@@ -779,12 +809,14 @@
if (s.success) {
s.success.call(s.context, data, 'success', xhr);
}
+
deferred.resolve(xhr.responseText, 'success', xhr);
+
if (g) {
$.event.trigger('ajaxSuccess', [xhr, s]);
}
- }
- else if (status) {
+
+ } else if (status) {
if (errMsg === undefined) {
errMsg = xhr.statusText;
}
@@ -818,8 +850,7 @@
setTimeout(function() {
if (!s.iframeTarget) {
$io.remove();
- }
- else { //adding else to clean up existing iframe response.
+ } else { //adding else to clean up existing iframe response.
$io.attr('src', s.iframeSrc);
}
xhr.responseXML = null;
@@ -831,10 +862,11 @@
doc = new ActiveXObject('Microsoft.XMLDOM');
doc.async = 'false';
doc.loadXML(s);
- }
- else {
+
+ } else {
doc = (new DOMParser()).parseFromString(s, 'text/xml');
}
+
return (doc && doc.documentElement && doc.documentElement.nodeName !== 'parsererror') ? doc : null;
};
var parseJSON = $.parseJSON || function(s) {
@@ -863,6 +895,7 @@
$.globalEval(data);
}
}
+
return data;
};
@@ -903,16 +936,18 @@
// in jQuery 1.3+ we can fix mistakes with the ready state
if (!options.delegation && this.length === 0) {
- var o = { s: this.selector, c: this.context };
+ var o = {s: this.selector, c: this.context};
if (!$.isReady && o.s) {
log('DOM not ready, queuing ajaxForm');
$(function() {
$(o.s,o.c).ajaxForm(options);
});
+
return this;
}
// is your DOM ready? http://docs.jquery.com/Tutorials:Introducing_$(document).ready()
log('terminating; zero elements found by selector' + ($.isReady ? '' : ' (DOM not ready)'));
+
return this;
}
@@ -922,6 +957,7 @@
.off('click.form-plugin', this.selector, captureSubmittingElement)
.on('submit.form-plugin', this.selector, options, doAjaxSubmit)
.on('click.form-plugin', this.selector, options, captureSubmittingElement);
+
return this;
}
@@ -968,7 +1004,9 @@
}
}
// clear form vars
- setTimeout(function() { form.clk = form.clk_x = form.clk_y = null; }, 100);
+ setTimeout(function() {
+ form.clk = form.clk_x = form.clk_y = null;
+ }, 100);
}
@@ -1031,7 +1069,7 @@
if (semantic && form.clk && el.type === 'image') {
// handle image inputs on the fly when semantic == true
if(form.clk === el) {
- a.push({name: n, value: $(el).val(), type: el.type });
+ a.push({name: n, value: $(el).val(), type: el.type});
a.push({name: n+'.x', value: form.clk_x}, {name: n+'.y', value: form.clk_y});
}
continue;
@@ -1045,8 +1083,8 @@
for(j=0, jmax=v.length; j < jmax; j++) {
a.push({name: n, value: v[j]});
}
- }
- else if (feature.fileapi && el.type === 'file') {
+
+ } else if (feature.fileapi && el.type === 'file') {
if (elements) {
elements.push(el);
}
@@ -1055,13 +1093,12 @@
for (j=0; j < files.length; j++) {
a.push({name: n, value: files[j], type: el.type});
}
- }
- else {
+ } else {
// #180
- a.push({ name: n, value: '', type: el.type });
+ a.push({name: n, value: '', type: el.type});
}
- }
- else if (v !== null && typeof v !== 'undefined') {
+
+ } else if (v !== null && typeof v !== 'undefined') {
if (elements) {
elements.push(el);
}
@@ -1078,6 +1115,7 @@
a.push({name: n+'.x', value: form.clk_x}, {name: n+'.y', value: form.clk_y});
}
}
+
return a;
};
@@ -1106,8 +1144,8 @@
for (var i=0,max=v.length; i < max; i++) {
a.push({name: n, value: v[i]});
}
- }
- else if (v !== null && typeof v !== 'undefined') {
+
+ } else if (v !== null && typeof v !== 'undefined') {
a.push({name: this.name, value: v});
}
});
@@ -1154,7 +1192,7 @@
* array will be empty, otherwise it will contain one or more values.
*/
$.fn.fieldValue = function(successful) {
- for (var val=[], i=0, max=this.length; i < max; i++) {
+ for (var val = [], i = 0, max = this.length; i < max; i++) {
var el = this[i];
var v = $.fieldValue(el, successful);
if (v === null || typeof v === 'undefined' || (v.constructor === Array && !v.length)) {
@@ -1162,11 +1200,11 @@
}
if (v.constructor === Array) {
$.merge(val, v);
- }
- else {
+ } else {
val.push(v);
}
}
+
return val;
};
@@ -1183,7 +1221,7 @@
(t === 'checkbox' || t === 'radio') && !el.checked ||
(t === 'submit' || t === 'image') && el.form && el.form.clk !== el ||
tag === 'select' && el.selectedIndex === -1)) {
- return null;
+ return null;
}
if (tag === 'select') {
@@ -1193,8 +1231,8 @@
}
var a = [], ops = el.options;
var one = (t === 'select-one');
- var max = (one ? index+1 : ops.length);
- for(var i=(one ? index : 0); i < max; i++) {
+ var max = (one ? index + 1 : ops.length);
+ for(var i = (one ? index : 0); i < max; i++) {
var op = ops[i];
if (op.selected && !op.disabled) {
var v = op.value;
@@ -1207,8 +1245,10 @@
a.push(v);
}
}
+
return a;
}
+
return $(el).val().replace(rCRLF, '\r\n');
};
@@ -1231,25 +1271,26 @@
*/
$.fn.clearFields = $.fn.clearInputs = function(includeHidden) {
var re = /^(?:color|date|datetime|email|month|number|password|range|search|tel|text|time|url|week)$/i; // 'hidden' is not in this list
+
return this.each(function() {
var t = this.type, tag = this.tagName.toLowerCase();
if (re.test(t) || tag === 'textarea') {
this.value = '';
- }
- else if (t === 'checkbox' || t === 'radio') {
+
+ } else if (t === 'checkbox' || t === 'radio') {
this.checked = false;
- }
- else if (tag === 'select') {
+
+ } else if (tag === 'select') {
this.selectedIndex = -1;
- }
- else if (t === 'file') {
+
+ } else if (t === 'file') {
if (/MSIE/.test(navigator.userAgent)) {
$(this).replaceWith($(this).clone(true));
} else {
$(this).val('');
}
- }
- else if (includeHidden) {
+
+ } else if (includeHidden) {
// includeHidden can be the value true, or it can be a selector string
// indicating a special test; for example:
// $('#myForm').clearForm('.special:hidden')
@@ -1278,52 +1319,59 @@
var el = $(this);
var tag = this.tagName.toLowerCase();
switch (tag) {
- case 'input':
- this.checked = this.defaultChecked;
+ case 'input':
+ this.checked = this.defaultChecked;
// fall-through
- case 'textarea':
- this.value = this.defaultValue;
- return true;
- case 'option':
- case 'optgroup':
- var select = el.parents('select');
- if (select.length && select[0].multiple) {
- if (tag === 'option') {
- this.selected = this.defaultSelected;
- } else {
- el.find('option').resetForm();
- }
+ case 'textarea':
+ this.value = this.defaultValue;
+
+ return true;
+ case 'option':
+ case 'optgroup':
+ var select = el.parents('select');
+ if (select.length && select[0].multiple) {
+ if (tag === 'option') {
+ this.selected = this.defaultSelected;
} else {
- select.resetForm();
+ el.find('option').resetForm();
}
- return true;
- case 'select':
- el.find('option').each(function(i) {
- this.selected = this.defaultSelected;
- if (this.defaultSelected && !el[0].multiple) {
- el[0].selectedIndex = i;
- return false;
- }
- });
- return true;
- case 'label':
- var forEl = $(el.attr('for'));
- var list = el.find('input,select,textarea');
- if (forEl[0]) {
- list.unshift( forEl[0] );
+ } else {
+ select.resetForm();
+ }
+
+ return true;
+ case 'select':
+ el.find('option').each(function(i) {
+ this.selected = this.defaultSelected;
+ if (this.defaultSelected && !el[0].multiple) {
+ el[0].selectedIndex = i;
+
+ return false;
}
- list.resetForm();
- return true;
- case 'form':
+ });
+
+ return true;
+ case 'label':
+ var forEl = $(el.attr('for'));
+ var list = el.find('input,select,textarea');
+ if (forEl[0]) {
+ list.unshift( forEl[0] );
+ }
+ list.resetForm();
+
+ return true;
+ case 'form':
// guard against an input with the name of 'reset'
// note that IE reports the reset function as an 'object'
- if (typeof this.reset === 'function' || (typeof this.reset === 'object' && !this.reset.nodeType)) {
- this.reset();
- }
- return true;
- default:
- el.find('form,input,label,select,textarea').resetForm();
- return true;
+ if (typeof this.reset === 'function' || (typeof this.reset === 'object' && !this.reset.nodeType)) {
+ this.reset();
+ }
+
+ return true;
+ default:
+ el.find('form,input,label,select,textarea').resetForm();
+
+ return true;
}
});
};
@@ -1335,6 +1383,7 @@
if (b === undefined) {
b = true;
}
+
return this.each(function() {
this.disabled = !b;
});
@@ -1348,12 +1397,13 @@
if (select === undefined) {
select = true;
}
+
return this.each(function() {
var t = this.type;
if (t === 'checkbox' || t === 'radio') {
this.checked = select;
- }
- else if (this.tagName.toLowerCase() === 'option') {
+
+ } else if (this.tagName.toLowerCase() === 'option') {
var $sel = $(this).parent('select');
if (select && $sel[0] && $sel[0].type === 'select-one') {
// deselect all other options
@@ -1375,8 +1425,8 @@
var msg = '[jquery.form] ' + Array.prototype.join.call(arguments,'');
if (window.console && window.console.log) {
window.console.log(msg);
- }
- else if (window.opera && window.opera.postError) {
+
+ } else if (window.opera && window.opera.postError) {
window.opera.postError(msg);
}
}
From 0abf53050cc784a0dd4b0bb2f652d9ddac4551c5 Mon Sep 17 00:00:00 2001
From: Kevin Morris
Date: Tue, 7 Mar 2017 15:55:59 -0500
Subject: [PATCH 007/108] ESHint: space-infix-ops
---
src/jquery.form.js | 18 +++++++++---------
1 file changed, 9 insertions(+), 9 deletions(-)
diff --git a/src/jquery.form.js b/src/jquery.form.js
index 95694153..c5a56d58 100644
--- a/src/jquery.form.js
+++ b/src/jquery.form.js
@@ -627,11 +627,11 @@
// if using the $.param format that allows for multiple values with the same name
if($.isPlainObject(s.extraData[n]) && s.extraData[n].hasOwnProperty('name') && s.extraData[n].hasOwnProperty('value')) {
extraInputs.push(
- $('', ownerDocument).val(s.extraData[n].value)
+ $('', ownerDocument).val(s.extraData[n].value)
.appendTo(form)[0]);
} else {
extraInputs.push(
- $('', ownerDocument).val(s.extraData[n])
+ $('', ownerDocument).val(s.extraData[n])
.appendTo(form)[0]);
}
}
@@ -721,7 +721,7 @@
}
var isXml = s.dataType === 'xml' || doc.XMLDocument || $.isXMLDoc(doc);
- log('isXml='+isXml);
+ log('isXml=' + isXml);
if (!isXml && window.opera && (doc.body === null || !doc.body.innerHTML)) {
if (--domCheckCount) {
// in some browsers (Opera) the iframe DOM is not always traversable when
@@ -1059,7 +1059,7 @@
}
var i,j,n,v,el,max,jmax;
- for(i=0, max=els.length; i < max; i++) {
+ for(i = 0, max = els.length; i < max; i++) {
el = els[i];
n = el.name;
if (!n || el.disabled) {
@@ -1070,7 +1070,7 @@
// handle image inputs on the fly when semantic == true
if(form.clk === el) {
a.push({name: n, value: $(el).val(), type: el.type});
- a.push({name: n+'.x', value: form.clk_x}, {name: n+'.y', value: form.clk_y});
+ a.push({name: n + '.x', value: form.clk_x}, {name: n + '.y', value: form.clk_y});
}
continue;
}
@@ -1080,7 +1080,7 @@
if (elements) {
elements.push(el);
}
- for(j=0, jmax=v.length; j < jmax; j++) {
+ for(j = 0, jmax = v.length; j < jmax; j++) {
a.push({name: n, value: v[j]});
}
@@ -1090,7 +1090,7 @@
}
var files = el.files;
if (files.length) {
- for (j=0; j < files.length; j++) {
+ for (j = 0; j < files.length; j++) {
a.push({name: n, value: files[j], type: el.type});
}
} else {
@@ -1112,7 +1112,7 @@
n = input.name;
if (n && !input.disabled && input.type === 'image') {
a.push({name: n, value: $input.val()});
- a.push({name: n+'.x', value: form.clk_x}, {name: n+'.y', value: form.clk_y});
+ a.push({name: n + '.x', value: form.clk_x}, {name: n + '.y', value: form.clk_y});
}
}
@@ -1141,7 +1141,7 @@
}
var v = $.fieldValue(this, successful);
if (v && v.constructor === Array) {
- for (var i=0,max=v.length; i < max; i++) {
+ for (var i = 0,max = v.length; i < max; i++) {
a.push({name: n, value: v[i]});
}
From bb1b337f093279cd0f2d18f93b01186032ce79d9 Mon Sep 17 00:00:00 2001
From: Kevin Morris
Date: Tue, 7 Mar 2017 15:57:28 -0500
Subject: [PATCH 008/108] ESHint: comma-spacing
---
src/jquery.form.js | 20 ++++++++++----------
1 file changed, 10 insertions(+), 10 deletions(-)
diff --git a/src/jquery.form.js b/src/jquery.form.js
index c5a56d58..a5abb8b4 100644
--- a/src/jquery.form.js
+++ b/src/jquery.form.js
@@ -576,7 +576,7 @@
et = $form.attr('enctype') || $form.attr('encoding') || mp;
// update form attrs in IE friendly way
- form.setAttribute('target',id);
+ form.setAttribute('target', id);
if (!method || /post/i.test(method) ) {
form.setAttribute('method', 'POST');
}
@@ -605,11 +605,11 @@
var state = getDoc(io).readyState;
log('state = ' + state);
if (state && state.toLowerCase() === 'uninitialized') {
- setTimeout(checkState,50);
+ setTimeout(checkState, 50);
}
} catch (e) {
- log('Server abort: ' , e, ' (', e.name, ')');
+ log('Server abort: ', e, ' (', e.name, ')');
cb(SERVER_ABORT);
if (timeoutHandle) {
clearTimeout(timeoutHandle);
@@ -648,7 +648,7 @@
} else {
io.addEventListener('load', cb, false);
}
- setTimeout(checkState,15);
+ setTimeout(checkState, 15);
try {
form.submit();
@@ -660,7 +660,7 @@
} finally {
// reset attrs and remove "extra" input elements
- form.setAttribute('action',a);
+ form.setAttribute('action', a);
form.setAttribute('enctype', et); // #380
if(t) {
form.setAttribute('target', t);
@@ -790,7 +790,7 @@
}
} catch (err) {
- log('error caught: ',err);
+ log('error caught: ', err);
status = 'error';
xhr.error = errMsg = (err || status);
}
@@ -940,7 +940,7 @@
if (!$.isReady && o.s) {
log('DOM not ready, queuing ajaxForm');
$(function() {
- $(o.s,o.c).ajaxForm(options);
+ $(o.s, o.c).ajaxForm(options);
});
return this;
@@ -1058,7 +1058,7 @@
els = $.map(els, filtering);
}
- var i,j,n,v,el,max,jmax;
+ var i, j, n, v, el, max, jmax;
for(i = 0, max = els.length; i < max; i++) {
el = els[i];
n = el.name;
@@ -1141,7 +1141,7 @@
}
var v = $.fieldValue(this, successful);
if (v && v.constructor === Array) {
- for (var i = 0,max = v.length; i < max; i++) {
+ for (var i = 0, max = v.length; i < max; i++) {
a.push({name: n, value: v[i]});
}
@@ -1422,7 +1422,7 @@
if (!$.fn.ajaxSubmit.debug) {
return;
}
- var msg = '[jquery.form] ' + Array.prototype.join.call(arguments,'');
+ var msg = '[jquery.form] ' + Array.prototype.join.call(arguments, '');
if (window.console && window.console.log) {
window.console.log(msg);
From 05f8bd22d0325c85ac50a06fecdd6dbaef8e448c Mon Sep 17 00:00:00 2001
From: Kevin Morris
Date: Tue, 7 Mar 2017 15:57:51 -0500
Subject: [PATCH 009/108] ESHint: keyword-spacing
---
src/jquery.form.js | 14 +++++++-------
1 file changed, 7 insertions(+), 7 deletions(-)
diff --git a/src/jquery.form.js b/src/jquery.form.js
index a5abb8b4..5ce00ad6 100644
--- a/src/jquery.form.js
+++ b/src/jquery.form.js
@@ -625,7 +625,7 @@
for (var n in s.extraData) {
if (s.extraData.hasOwnProperty(n)) {
// if using the $.param format that allows for multiple values with the same name
- if($.isPlainObject(s.extraData[n]) && s.extraData[n].hasOwnProperty('name') && s.extraData[n].hasOwnProperty('value')) {
+ if ($.isPlainObject(s.extraData[n]) && s.extraData[n].hasOwnProperty('name') && s.extraData[n].hasOwnProperty('value')) {
extraInputs.push(
$('', ownerDocument).val(s.extraData[n].value)
.appendTo(form)[0]);
@@ -662,7 +662,7 @@
// reset attrs and remove "extra" input elements
form.setAttribute('action', a);
form.setAttribute('enctype', et); // #380
- if(t) {
+ if (t) {
form.setAttribute('target', t);
} else {
$form.removeAttr('target');
@@ -685,7 +685,7 @@
}
doc = getDoc(io);
- if(!doc) {
+ if (!doc) {
log('cannot access response document');
e = SERVER_ABORT;
}
@@ -1059,7 +1059,7 @@
}
var i, j, n, v, el, max, jmax;
- for(i = 0, max = els.length; i < max; i++) {
+ for (i = 0, max = els.length; i < max; i++) {
el = els[i];
n = el.name;
if (!n || el.disabled) {
@@ -1068,7 +1068,7 @@
if (semantic && form.clk && el.type === 'image') {
// handle image inputs on the fly when semantic == true
- if(form.clk === el) {
+ if (form.clk === el) {
a.push({name: n, value: $(el).val(), type: el.type});
a.push({name: n + '.x', value: form.clk_x}, {name: n + '.y', value: form.clk_y});
}
@@ -1080,7 +1080,7 @@
if (elements) {
elements.push(el);
}
- for(j = 0, jmax = v.length; j < jmax; j++) {
+ for (j = 0, jmax = v.length; j < jmax; j++) {
a.push({name: n, value: v[j]});
}
@@ -1232,7 +1232,7 @@
var a = [], ops = el.options;
var one = (t === 'select-one');
var max = (one ? index + 1 : ops.length);
- for(var i = (one ? index : 0); i < max; i++) {
+ for (var i = (one ? index : 0); i < max; i++) {
var op = ops[i];
if (op.selected && !op.disabled) {
var v = op.value;
From eb4928fff218d85834b1b81ebf68ea3ef5fbb177 Mon Sep 17 00:00:00 2001
From: Kevin Morris
Date: Tue, 7 Mar 2017 15:58:59 -0500
Subject: [PATCH 010/108] ESHint: spaced-comment
---
src/jquery.form.js | 18 +++++++++---------
1 file changed, 9 insertions(+), 9 deletions(-)
diff --git a/src/jquery.form.js b/src/jquery.form.js
index 5ce00ad6..d537dd85 100644
--- a/src/jquery.form.js
+++ b/src/jquery.form.js
@@ -732,11 +732,11 @@
return;
}
// let this fall through because server response could be an empty document
- //log('Could not access iframe DOM after mutiple tries.');
- //throw 'DOMException: not available';
+ // log('Could not access iframe DOM after mutiple tries.');
+ // throw 'DOMException: not available';
}
- //log('response detected');
+ // log('response detected');
var docRoot = doc.body ? doc.body : doc.documentElement;
xhr.responseText = docRoot ? docRoot.innerHTML : null;
xhr.responseXML = doc.XMLDocument ? doc.XMLDocument : doc;
@@ -850,7 +850,7 @@
setTimeout(function() {
if (!s.iframeTarget) {
$io.remove();
- } else { //adding else to clean up existing iframe response.
+ } else { // adding else to clean up existing iframe response.
$io.attr('src', s.iframeSrc);
}
xhr.responseXML = null;
@@ -870,7 +870,7 @@
return (doc && doc.documentElement && doc.documentElement.nodeName !== 'parsererror') ? doc : null;
};
var parseJSON = $.parseJSON || function(s) {
- /*jslint evil:true */
+ /* jslint evil:true */
return window['eval']('(' + s + ')');
};
@@ -968,7 +968,7 @@
// private event handlers
function doAjaxSubmit(e) {
- /*jshint validthis:true */
+ /* jshint validthis:true */
var options = e.data;
if (!e.isDefaultPrevented()) { // if event has been canceled, don't proceed
e.preventDefault();
@@ -977,7 +977,7 @@
}
function captureSubmittingElement(e) {
- /*jshint validthis:true */
+ /* jshint validthis:true */
var target = e.target;
var $el = $(target);
if (!($el.is('[type=submit],[type=image]'))) {
@@ -1124,7 +1124,7 @@
* in the format: name1=value1&name2=value2
*/
$.fn.formSerialize = function(semantic) {
- //hand off to jQuery.param for proper encoding
+ // hand off to jQuery.param for proper encoding
return $.param(this.formToArray(semantic));
};
@@ -1149,7 +1149,7 @@
a.push({name: this.name, value: v});
}
});
- //hand off to jQuery.param for proper encoding
+ // hand off to jQuery.param for proper encoding
return $.param(a);
};
From 6aad7780a7a594108dbbaea26a4216c7ec417c01 Mon Sep 17 00:00:00 2001
From: Kevin Morris
Date: Tue, 7 Mar 2017 16:21:01 -0500
Subject: [PATCH 011/108] Minor code style changes to pass ESHint
---
src/jquery.form.js | 15 ++++++++-------
1 file changed, 8 insertions(+), 7 deletions(-)
diff --git a/src/jquery.form.js b/src/jquery.form.js
index d537dd85..01346738 100644
--- a/src/jquery.form.js
+++ b/src/jquery.form.js
@@ -801,7 +801,7 @@
}
if (xhr.status) { // we've set xhr.status
- status = (xhr.status >= 200 && xhr.status < 300 || xhr.status === 304) ? 'success' : 'error';
+ status = ((xhr.status >= 200 && xhr.status < 300) || xhr.status === 304) ? 'success' : 'error';
}
// ordering of these callbacks/triggers is odd, but that's how $.ajax does it
@@ -833,7 +833,7 @@
$.event.trigger('ajaxComplete', [xhr, s]);
}
- if (g && ! --$.active) {
+ if (g && !--$.active) {
$.event.trigger('ajaxStop');
}
@@ -877,7 +877,7 @@
var httpData = function( xhr, type, s ) { // mostly lifted from jq1.4.4
var ct = xhr.getResponseHeader('content-type') || '',
- xml = type === 'xml' || !type && ct.indexOf('xml') >= 0,
+ xml = ((type === 'xml' || !type) && ct.indexOf('xml') >= 0),
data = xml ? xhr.responseXML : xhr.responseText;
if (xml && data.documentElement.nodeName === 'parsererror') {
@@ -889,9 +889,9 @@
data = s.dataFilter(data, type);
}
if (typeof data === 'string') {
- if (type === 'json' || !type && ct.indexOf('json') >= 0) {
+ if ((type === 'json' || !type) && ct.indexOf('json') >= 0) {
data = parseJSON(data);
- } else if (type === 'script' || !type && ct.indexOf('javascript') >= 0) {
+ } else if ((type === 'script' || !type) && ct.indexOf('javascript') >= 0) {
$.globalEval(data);
}
}
@@ -1149,6 +1149,7 @@
a.push({name: this.name, value: v});
}
});
+
// hand off to jQuery.param for proper encoding
return $.param(a);
};
@@ -1296,7 +1297,7 @@
// $('#myForm').clearForm('.special:hidden')
// the above would clean hidden inputs that have the class of 'special'
if ( (includeHidden === true && /hidden/.test(t)) ||
- (typeof includeHidden === 'string' && $(this).is(includeHidden)) ) {
+ (typeof includeHidden === 'string' && $(this).is(includeHidden)) ) {
this.value = '';
}
}
@@ -1321,7 +1322,7 @@
switch (tag) {
case 'input':
this.checked = this.defaultChecked;
- // fall-through
+ // fall through
case 'textarea':
this.value = this.defaultValue;
From 7347bfc03c066170979a61cc4131d1a538e269be Mon Sep 17 00:00:00 2001
From: Kevin Morris
Date: Tue, 7 Mar 2017 16:21:32 -0500
Subject: [PATCH 012/108] Disables ESLint on lines I'm not sure are safe to
change
---
src/jquery.form.js | 12 +++++++-----
1 file changed, 7 insertions(+), 5 deletions(-)
diff --git a/src/jquery.form.js b/src/jquery.form.js
index 01346738..7d6328b4 100644
--- a/src/jquery.form.js
+++ b/src/jquery.form.js
@@ -610,7 +610,7 @@
} catch (e) {
log('Server abort: ', e, ' (', e.name, ')');
- cb(SERVER_ABORT);
+ cb(SERVER_ABORT); // eslint-disable-line callback-return
if (timeoutHandle) {
clearTimeout(timeoutHandle);
}
@@ -778,11 +778,11 @@
}
} else if (dt === 'xml' && !xhr.responseXML && xhr.responseText) {
- xhr.responseXML = toXml(xhr.responseText);
+ xhr.responseXML = toXml(xhr.responseText); // eslint-disable-line no-use-before-define
}
try {
- data = httpData(xhr, dt, s);
+ data = httpData(xhr, dt, s); // eslint-disable-line no-use-before-define
} catch (err) {
status = 'parsererror';
@@ -871,7 +871,7 @@
};
var parseJSON = $.parseJSON || function(s) {
/* jslint evil:true */
- return window['eval']('(' + s + ')');
+ return window['eval']('(' + s + ')'); // eslint-disable-line dot-notation
};
var httpData = function( xhr, type, s ) { // mostly lifted from jq1.4.4
@@ -1218,10 +1218,12 @@
successful = true;
}
+ /* eslint-disable no-mixed-operators */
if (successful && (!n || el.disabled || t === 'reset' || t === 'button' ||
(t === 'checkbox' || t === 'radio') && !el.checked ||
(t === 'submit' || t === 'image') && el.form && el.form.clk !== el ||
tag === 'select' && el.selectedIndex === -1)) {
+ /* eslint-enable no-mixed-operators */
return null;
}
@@ -1342,7 +1344,7 @@
return true;
case 'select':
- el.find('option').each(function(i) {
+ el.find('option').each(function(i) { // eslint-disable-line consistent-return
this.selected = this.defaultSelected;
if (this.defaultSelected && !el[0].multiple) {
el[0].selectedIndex = i;
From 0fdb3e6e6f1f6c28642c09d195c46fda891156e4 Mon Sep 17 00:00:00 2001
From: Kevin Morris
Date: Tue, 7 Mar 2017 16:24:06 -0500
Subject: [PATCH 013/108] ESHint: space-in-parens
---
src/jquery.form.js | 28 ++++++++++++++--------------
1 file changed, 14 insertions(+), 14 deletions(-)
diff --git a/src/jquery.form.js b/src/jquery.form.js
index 7d6328b4..9e553ee8 100644
--- a/src/jquery.form.js
+++ b/src/jquery.form.js
@@ -98,7 +98,7 @@
return this.attr.apply(this, arguments);
}
var val = this.prop.apply(this, arguments);
- if (( val && val.jquery ) || typeof val === 'string') {
+ if ((val && val.jquery) || typeof val === 'string') {
return val;
}
@@ -128,7 +128,7 @@
if (typeof options === 'function') {
options = {success: options};
- } else if ( typeof options === 'string' || ( options === false && arguments.length > 0 ) ) {
+ } else if (typeof options === 'string' || (options === false && arguments.length > 0)) {
options = {
'url' : options,
'data' : data,
@@ -178,7 +178,7 @@
}
var traditional = options.traditional;
- if ( traditional === undefined ) {
+ if (traditional === undefined) {
traditional = $.ajaxSettings.traditional;
}
@@ -207,7 +207,7 @@
var q = $.param(a, traditional);
if (qx) {
- q = ( q ? (q + '&' + qx) : qx );
+ q = (q ? (q + '&' + qx) : qx);
}
if (options.type.toUpperCase() === 'GET') {
options.url += (options.url.indexOf('?') >= 0 ? '&' : '?') + q;
@@ -417,7 +417,7 @@
// ensure that every serialized input is still enabled
for (i = 0; i < elements.length; i++) {
el = $(elements[i]);
- if ( hasProp ) {
+ if (hasProp) {
el.prop('disabled', false);
} else {
el.removeAttr('disabled');
@@ -577,7 +577,7 @@
// update form attrs in IE friendly way
form.setAttribute('target', id);
- if (!method || /post/i.test(method) ) {
+ if (!method || /post/i.test(method)) {
form.setAttribute('method', 'POST');
}
if (a !== s.url) {
@@ -750,7 +750,7 @@
};
// support for XHR 'status' & 'statusText' emulation :
if (docRoot) {
- xhr.status = Number( docRoot.getAttribute('status') ) || xhr.status;
+ xhr.status = Number(docRoot.getAttribute('status')) || xhr.status;
xhr.statusText = docRoot.getAttribute('statusText') || xhr.statusText;
}
@@ -762,7 +762,7 @@
if (ta) {
xhr.responseText = ta.value;
// support for XHR 'status' & 'statusText' emulation :
- xhr.status = Number( ta.getAttribute('status') ) || xhr.status;
+ xhr.status = Number(ta.getAttribute('status')) || xhr.status;
xhr.statusText = ta.getAttribute('statusText') || xhr.statusText;
} else if (scr) {
@@ -874,7 +874,7 @@
return window['eval']('(' + s + ')'); // eslint-disable-line dot-notation
};
- var httpData = function( xhr, type, s ) { // mostly lifted from jq1.4.4
+ var httpData = function(xhr, type, s) { // mostly lifted from jq1.4.4
var ct = xhr.getResponseHeader('content-type') || '',
xml = ((type === 'xml' || !type) && ct.indexOf('xml') >= 0),
@@ -951,7 +951,7 @@
return this;
}
- if ( options.delegation ) {
+ if (options.delegation) {
$(document)
.off('submit.form-plugin', this.selector, doAjaxSubmit)
.off('click.form-plugin', this.selector, captureSubmittingElement)
@@ -1045,7 +1045,7 @@
// FinesseRus: in non-IE browsers outside fields are already included in form.elements.
if (formId && (semantic || /(Edge|Trident)\//.test(navigator.userAgent))) {
els2 = $(':input[form="' + formId + '"]').get(); // hat tip @thet
- if ( els2.length ) {
+ if (els2.length) {
els = (els || []).concat(els2);
}
}
@@ -1298,8 +1298,8 @@
// indicating a special test; for example:
// $('#myForm').clearForm('.special:hidden')
// the above would clean hidden inputs that have the class of 'special'
- if ( (includeHidden === true && /hidden/.test(t)) ||
- (typeof includeHidden === 'string' && $(this).is(includeHidden)) ) {
+ if ((includeHidden === true && /hidden/.test(t)) ||
+ (typeof includeHidden === 'string' && $(this).is(includeHidden))) {
this.value = '';
}
}
@@ -1358,7 +1358,7 @@
var forEl = $(el.attr('for'));
var list = el.find('input,select,textarea');
if (forEl[0]) {
- list.unshift( forEl[0] );
+ list.unshift(forEl[0]);
}
list.resetForm();
From f83dc427b92dae1249248faa89ef075b9b504a1e Mon Sep 17 00:00:00 2001
From: Kevin Morris
Date: Tue, 7 Mar 2017 16:27:58 -0500
Subject: [PATCH 014/108] ESHint: no-extra-parens
---
src/jquery.form.js | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/jquery.form.js b/src/jquery.form.js
index 9e553ee8..9c9fad7b 100644
--- a/src/jquery.form.js
+++ b/src/jquery.form.js
@@ -427,7 +427,7 @@
s = $.extend(true, {}, $.ajaxSettings, options);
s.context = s.context || s;
- id = 'jqFormIO' + (new Date().getTime());
+ id = 'jqFormIO' + new Date().getTime();
var ownerDocument = form.ownerDocument;
var $body = $form.closest('body');
@@ -980,7 +980,7 @@
/* jshint validthis:true */
var target = e.target;
var $el = $(target);
- if (!($el.is('[type=submit],[type=image]'))) {
+ if (!$el.is('[type=submit],[type=image]')) {
// is this a child element of the submit el? (ex: a span within a button)
var t = $el.closest('[type=submit]');
if (t.length === 0) {
From d97b3c3af46bd21d95c546d554941f26507b6bed Mon Sep 17 00:00:00 2001
From: Kevin Morris
Date: Tue, 7 Mar 2017 16:47:25 -0500
Subject: [PATCH 015/108] ESHint: newline-after-var
---
src/jquery.form.js | 85 ++++++++++++++++++++++++++++++++++++++++++++--
1 file changed, 82 insertions(+), 3 deletions(-)
diff --git a/src/jquery.form.js b/src/jquery.form.js
index 9c9fad7b..f11eba7a 100644
--- a/src/jquery.form.js
+++ b/src/jquery.form.js
@@ -97,7 +97,9 @@
if (!hasProp) {
return this.attr.apply(this, arguments);
}
+
var val = this.prop.apply(this, arguments);
+
if ((val && val.jquery) || typeof val === 'string') {
return val;
}
@@ -163,7 +165,9 @@
// hook for manipulating the form data before it is extracted;
// convenient for use with rich editors like tinyMCE or FCKEditor
var veto = {};
+
this.trigger('form-pre-serialize', [this, options, veto]);
+
if (veto.veto) {
log('ajaxSubmit: submit vetoed via form-pre-serialize trigger');
@@ -178,14 +182,17 @@
}
var traditional = options.traditional;
+
if (traditional === undefined) {
traditional = $.ajaxSettings.traditional;
}
var elements = [];
var qx, a = this.formToArray(options.semantic, elements, options.filtering);
+
if (options.data) {
var optionsData = $.isFunction(options.data) ? options.data(a) : options.data;
+
options.extraData = optionsData;
qx = $.param(optionsData, traditional);
}
@@ -206,9 +213,11 @@
}
var q = $.param(a, traditional);
+
if (qx) {
q = (q ? (q + '&' + qx) : qx);
}
+
if (options.type.toUpperCase() === 'GET') {
options.url += (options.url.indexOf('?') >= 0 ? '&' : '?') + q;
options.data = null; // data is null for 'get'
@@ -217,11 +226,13 @@
}
var callbacks = [];
+
if (options.resetForm) {
callbacks.push(function() {
$form.resetForm();
});
}
+
if (options.clearForm) {
callbacks.push(function() {
$form.clearForm(options.includeHidden);
@@ -234,6 +245,7 @@
callbacks.push(function(data) {
var fn = options.replaceTarget ? 'replaceWith' : 'html';
+
$(options.target)[fn](data).each(oldSuccess, arguments);
});
@@ -258,6 +270,7 @@
options.error = function(xhr, status, error) {
var context = options.context || this;
+
oldError.apply(context, [xhr, status, error, $form]);
};
}
@@ -267,6 +280,7 @@
options.complete = function(xhr, status) {
var context = options.context || this;
+
oldComplete.apply(context, [xhr, status, $form]);
};
}
@@ -278,15 +292,14 @@
var fileInputs = $('input[type=file]:enabled', this).filter(function() {
return $(this).val() !== '';
});
-
var hasFileInputs = fileInputs.length > 0;
var mp = 'multipart/form-data';
var multipart = ($form.attr('enctype') === mp || $form.attr('encoding') === mp);
-
var fileAPI = feature.fileapi && feature.formdata;
+
log('fileAPI :' + fileAPI);
- var shouldUseFrame = (hasFileInputs || multipart) && !fileAPI;
+ var shouldUseFrame = (hasFileInputs || multipart) && !fileAPI;
var jqxhr;
// options.iframe allows user to force iframe mode
@@ -369,14 +382,17 @@
// workaround because jqXHR does not expose upload property
s.xhr = function() {
var xhr = $.ajaxSettings.xhr();
+
if (xhr.upload) {
xhr.upload.addEventListener('progress', function(event) {
var percent = 0;
var position = event.loaded || event.position; /* event.position is deprecated */
var total = event.total;
+
if (event.lengthComputable) {
percent = Math.ceil(position / total * 100);
}
+
options.uploadProgress(event, position, total, percent);
}, false);
}
@@ -386,7 +402,9 @@
}
s.data = null;
+
var beforeSend = s.beforeSend;
+
s.beforeSend = function(xhr, o) {
// Send FormData() provided by user
if (options.formData) {
@@ -458,6 +476,7 @@
setRequestHeader: function() {},
abort: function(status) {
var e = (status === 'timeout' ? 'timeout' : 'aborted');
+
log('aborting upload... ' + e);
this.aborted = 1;
@@ -562,6 +581,7 @@
// Rails CSRF hack (thanks to Yvan Barthelemy)
var csrf_token = $('meta[name=csrf-token]').attr('content');
var csrf_param = $('meta[name=csrf-param]').attr('content');
+
if (csrf_param && csrf_token) {
s.extraData = s.extraData || {};
s.extraData[csrf_param] = csrf_token;
@@ -603,6 +623,7 @@
function checkState() {
try {
var state = getDoc(io).readyState;
+
log('state = ' + state);
if (state && state.toLowerCase() === 'uninitialized') {
setTimeout(checkState, 50);
@@ -620,6 +641,7 @@
// add "extra" data to form if provided in options
var extraInputs = [];
+
try {
if (s.extraData) {
for (var n in s.extraData) {
@@ -648,13 +670,16 @@
} else {
io.addEventListener('load', cb, false);
}
+
setTimeout(checkState, 15);
try {
form.submit();
+
} catch (err) {
// just in case form has element with name/id of 'submit'
var submitFn = document.createElement('form').submit;
+
submitFn.apply(form);
}
@@ -708,6 +733,7 @@
return;
}
}
+
if (io.detachEvent) {
io.detachEvent('onload', cb);
} else {
@@ -715,13 +741,16 @@
}
var status = 'success', errMsg;
+
try {
if (timedOut) {
throw 'timeout';
}
var isXml = s.dataType === 'xml' || doc.XMLDocument || $.isXMLDoc(doc);
+
log('isXml=' + isXml);
+
if (!isXml && window.opera && (doc.body === null || !doc.body.innerHTML)) {
if (--domCheckCount) {
// in some browsers (Opera) the iframe DOM is not always traversable when
@@ -738,6 +767,7 @@
// log('response detected');
var docRoot = doc.body ? doc.body : doc.documentElement;
+
xhr.responseText = docRoot ? docRoot.innerHTML : null;
xhr.responseXML = doc.XMLDocument ? doc.XMLDocument : doc;
if (isXml) {
@@ -756,9 +786,11 @@
var dt = (s.dataType || '').toLowerCase();
var scr = /(json|script|text)/.test(dt);
+
if (scr || s.textarea) {
// see if user embedded response in textarea
var ta = doc.getElementsByTagName('textarea')[0];
+
if (ta) {
xhr.responseText = ta.value;
// support for XHR 'status' & 'statusText' emulation :
@@ -937,6 +969,7 @@
// in jQuery 1.3+ we can fix mistakes with the ready state
if (!options.delegation && this.length === 0) {
var o = {s: this.selector, c: this.context};
+
if (!$.isReady && o.s) {
log('DOM not ready, queuing ajaxForm');
$(function() {
@@ -945,6 +978,7 @@
return this;
}
+
// is your DOM ready? http://docs.jquery.com/Tutorials:Introducing_$(document).ready()
log('terminating; zero elements found by selector' + ($.isReady ? '' : ' (DOM not ready)'));
@@ -970,6 +1004,7 @@
function doAjaxSubmit(e) {
/* jshint validthis:true */
var options = e.data;
+
if (!e.isDefaultPrevented()) { // if event has been canceled, don't proceed
e.preventDefault();
$(e.target).closest('form').ajaxSubmit(options); // #365
@@ -980,24 +1015,32 @@
/* jshint validthis:true */
var target = e.target;
var $el = $(target);
+
if (!$el.is('[type=submit],[type=image]')) {
// is this a child element of the submit el? (ex: a span within a button)
var t = $el.closest('[type=submit]');
+
if (t.length === 0) {
return;
}
target = t[0];
}
+
var form = target.form;
+
form.clk = target;
+
if (target.type === 'image') {
if (e.offsetX !== undefined) {
form.clk_x = e.offsetX;
form.clk_y = e.offsetY;
+
} else if (typeof $.fn.offset === 'function') {
var offset = $el.offset();
+
form.clk_x = e.pageX - offset.left;
form.clk_y = e.pageY - offset.top;
+
} else {
form.clk_x = e.pageX - target.offsetLeft;
form.clk_y = e.pageY - target.offsetTop;
@@ -1028,6 +1071,7 @@
*/
$.fn.formToArray = function(semantic, elements, filtering) {
var a = [];
+
if (this.length === 0) {
return a;
}
@@ -1059,6 +1103,7 @@
}
var i, j, n, v, el, max, jmax;
+
for (i = 0, max = els.length; i < max; i++) {
el = els[i];
n = el.name;
@@ -1088,7 +1133,9 @@
if (elements) {
elements.push(el);
}
+
var files = el.files;
+
if (files.length) {
for (j = 0; j < files.length; j++) {
a.push({name: n, value: files[j], type: el.type});
@@ -1109,7 +1156,9 @@
if (!semantic && form.clk) {
// input type=='image' are not found in elements array! handle it here
var $input = $(form.clk), input = $input[0];
+
n = input.name;
+
if (n && !input.disabled && input.type === 'image') {
a.push({name: n, value: $input.val()});
a.push({name: n + '.x', value: form.clk_x}, {name: n + '.y', value: form.clk_y});
@@ -1134,12 +1183,16 @@
*/
$.fn.fieldSerialize = function(successful) {
var a = [];
+
this.each(function() {
var n = this.name;
+
if (!n) {
return;
}
+
var v = $.fieldValue(this, successful);
+
if (v && v.constructor === Array) {
for (var i = 0, max = v.length; i < max; i++) {
a.push({name: n, value: v[i]});
@@ -1196,9 +1249,11 @@
for (var val = [], i = 0, max = this.length; i < max; i++) {
var el = this[i];
var v = $.fieldValue(el, successful);
+
if (v === null || typeof v === 'undefined' || (v.constructor === Array && !v.length)) {
continue;
}
+
if (v.constructor === Array) {
$.merge(val, v);
} else {
@@ -1214,6 +1269,7 @@
*/
$.fieldValue = function(el, successful) {
var n = el.name, t = el.type, tag = el.tagName.toLowerCase();
+
if (successful === undefined) {
successful = true;
}
@@ -1229,22 +1285,29 @@
if (tag === 'select') {
var index = el.selectedIndex;
+
if (index < 0) {
return null;
}
+
var a = [], ops = el.options;
var one = (t === 'select-one');
var max = (one ? index + 1 : ops.length);
+
for (var i = (one ? index : 0); i < max; i++) {
var op = ops[i];
+
if (op.selected && !op.disabled) {
var v = op.value;
+
if (!v) { // extra pain for IE...
v = (op.attributes && op.attributes.value && !(op.attributes.value.specified)) ? op.text : op.value;
}
+
if (one) {
return v;
}
+
a.push(v);
}
}
@@ -1277,6 +1340,7 @@
return this.each(function() {
var t = this.type, tag = this.tagName.toLowerCase();
+
if (re.test(t) || tag === 'textarea') {
this.value = '';
@@ -1321,17 +1385,21 @@
return this.each(function() {
var el = $(this);
var tag = this.tagName.toLowerCase();
+
switch (tag) {
case 'input':
this.checked = this.defaultChecked;
// fall through
+
case 'textarea':
this.value = this.defaultValue;
return true;
+
case 'option':
case 'optgroup':
var select = el.parents('select');
+
if (select.length && select[0].multiple) {
if (tag === 'option') {
this.selected = this.defaultSelected;
@@ -1343,6 +1411,7 @@
}
return true;
+
case 'select':
el.find('option').each(function(i) { // eslint-disable-line consistent-return
this.selected = this.defaultSelected;
@@ -1354,15 +1423,19 @@
});
return true;
+
case 'label':
var forEl = $(el.attr('for'));
var list = el.find('input,select,textarea');
+
if (forEl[0]) {
list.unshift(forEl[0]);
}
+
list.resetForm();
return true;
+
case 'form':
// guard against an input with the name of 'reset'
// note that IE reports the reset function as an 'object'
@@ -1371,6 +1444,7 @@
}
return true;
+
default:
el.find('form,input,label,select,textarea').resetForm();
@@ -1403,15 +1477,18 @@
return this.each(function() {
var t = this.type;
+
if (t === 'checkbox' || t === 'radio') {
this.checked = select;
} else if (this.tagName.toLowerCase() === 'option') {
var $sel = $(this).parent('select');
+
if (select && $sel[0] && $sel[0].type === 'select-one') {
// deselect all other options
$sel.find('option').selected(false);
}
+
this.selected = select;
}
});
@@ -1425,7 +1502,9 @@
if (!$.fn.ajaxSubmit.debug) {
return;
}
+
var msg = '[jquery.form] ' + Array.prototype.join.call(arguments, '');
+
if (window.console && window.console.log) {
window.console.log(msg);
From 83c052ae30171601b9297988c7a61f3d47411c5d Mon Sep 17 00:00:00 2001
From: Kevin Morris
Date: Thu, 9 Mar 2017 09:27:29 -0500
Subject: [PATCH 016/108] eslintrc: Updates id-length exceptions
http://eslint.org/docs/rules/id-length
---
.eslintrc.js | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.eslintrc.js b/.eslintrc.js
index 6ee059ab..0dcd8462 100644
--- a/.eslintrc.js
+++ b/.eslintrc.js
@@ -69,7 +69,7 @@ module.exports = {
"id-blacklist": "error",
"id-length": [
"warn",
- { "exceptions": ["i","j","k","l"] }
+ { "exceptions": ["$","e","i","j"] }
],
"id-match": "error",
"indent": [
From a145dada83975777f62c06c74969bc66788d21b0 Mon Sep 17 00:00:00 2001
From: Kevin Morris
Date: Thu, 9 Mar 2017 09:53:23 -0500
Subject: [PATCH 017/108] Whitespace
---
src/jquery.form.js | 92 +++++++++++++++++++++++-----------------------
1 file changed, 46 insertions(+), 46 deletions(-)
diff --git a/src/jquery.form.js b/src/jquery.form.js
index f11eba7a..017f9f02 100644
--- a/src/jquery.form.js
+++ b/src/jquery.form.js
@@ -12,29 +12,29 @@
/* eslint-disable */
(function (factory) {
- if (typeof define === 'function' && define.amd) {
- // AMD. Register as an anonymous module.
- define(['jquery'], factory);
- } else if (typeof module === 'object' && module.exports) {
- // Node/CommonJS
- module.exports = function( root, jQuery ) {
- if ( jQuery === undefined ) {
- // require('jQuery') returns a factory that requires window to build a jQuery instance, we normalize how we use modules
- // that require this pattern but the window provided is a noop if it's defined (how jquery works)
- if ( typeof window !== 'undefined' ) {
- jQuery = require('jquery');
- }
- else {
- jQuery = require('jquery')(root);
- }
- }
- factory(jQuery);
- return jQuery;
- };
- } else {
- // Browser globals
- factory(jQuery);
- }
+ if (typeof define === 'function' && define.amd) {
+ // AMD. Register as an anonymous module.
+ define(['jquery'], factory);
+ } else if (typeof module === 'object' && module.exports) {
+ // Node/CommonJS
+ module.exports = function( root, jQuery ) {
+ if ( jQuery === undefined ) {
+ // require('jQuery') returns a factory that requires window to build a jQuery instance, we normalize how we use modules
+ // that require this pattern but the window provided is a noop if it's defined (how jquery works)
+ if (typeof window !== 'undefined') {
+ jQuery = require('jquery');
+ }
+ else {
+ jQuery = require('jquery')(root);
+ }
+ }
+ factory(jQuery);
+ return jQuery;
+ };
+ } else {
+ // Browser globals
+ factory(jQuery);
+ }
}(function ($) {
/* eslint-enable */
@@ -132,8 +132,8 @@
} else if (typeof options === 'string' || (options === false && arguments.length > 0)) {
options = {
- 'url' : options,
- 'data' : data,
+ 'url' : options,
+ 'data' : data,
'dataType' : dataType
};
@@ -156,10 +156,10 @@
}
options = $.extend(true, {
- url: url,
- success: $.ajaxSettings.success,
- type: method || $.ajaxSettings.type,
- iframeSrc: /^https/i.test(window.location.href || '') ? 'javascript:false' : 'about:blank' // eslint-disable-line no-script-url
+ url : url,
+ success : $.ajaxSettings.success,
+ type : method || $.ajaxSettings.type,
+ iframeSrc : /^https/i.test(window.location.href || '') ? 'javascript:false' : 'about:blank' // eslint-disable-line no-script-url
}, options);
// hook for manipulating the form data before it is extracted;
@@ -372,10 +372,10 @@
options.data = null;
var s = $.extend(true, {}, $.ajaxSettings, options, {
- contentType: false,
- processData: false,
- cache: false,
- type: method || 'POST'
+ contentType : false,
+ processData : false,
+ cache : false,
+ type : method || 'POST'
});
if (options.uploadProgress) {
@@ -466,15 +466,15 @@
xhr = { // mock object
- aborted: 0,
- responseText: null,
- responseXML: null,
- status: 0,
- statusText: 'n/a',
- getAllResponseHeaders: function() {},
- getResponseHeader: function() {},
- setRequestHeader: function() {},
- abort: function(status) {
+ aborted : 0,
+ responseText : null,
+ responseXML : null,
+ status : 0,
+ statusText : 'n/a',
+ getAllResponseHeaders : function() {},
+ getResponseHeader : function() {},
+ setRequestHeader : function() {},
+ abort : function(status) {
var e = (status === 'timeout' ? 'timeout' : 'aborted');
log('aborting upload... ' + e);
@@ -607,8 +607,8 @@
// ie borks in some cases when setting encoding
if (!s.skipEncodingOverride && (!method || /post/i.test(method))) {
$form.attr({
- encoding: 'multipart/form-data',
- enctype: 'multipart/form-data'
+ encoding : 'multipart/form-data',
+ enctype : 'multipart/form-data'
});
}
@@ -953,8 +953,8 @@
$.fn.ajaxForm = function(options, data, dataType, onSuccess) {
if (typeof options === 'string' || (options === false && arguments.length > 0)) {
options = {
- 'url' : options,
- 'data' : data,
+ 'url' : options,
+ 'data' : data,
'dataType' : dataType
};
From 3013eed4e31cadaae7333be9bfa3ad3f10c8082c Mon Sep 17 00:00:00 2001
From: Kevin Morris
Date: Thu, 9 Mar 2017 09:55:44 -0500
Subject: [PATCH 018/108] ESHint: no-undefined
http://eslint.org/docs/rules/no-undefined
---
src/jquery.form.js | 20 ++++++++++----------
1 file changed, 10 insertions(+), 10 deletions(-)
diff --git a/src/jquery.form.js b/src/jquery.form.js
index 017f9f02..68f2930d 100644
--- a/src/jquery.form.js
+++ b/src/jquery.form.js
@@ -18,7 +18,7 @@
} else if (typeof module === 'object' && module.exports) {
// Node/CommonJS
module.exports = function( root, jQuery ) {
- if ( jQuery === undefined ) {
+ if (typeof jQuery === 'undefined') {
// require('jQuery') returns a factory that requires window to build a jQuery instance, we normalize how we use modules
// that require this pattern but the window provided is a noop if it's defined (how jquery works)
if (typeof window !== 'undefined') {
@@ -85,7 +85,7 @@
var feature = {};
feature.fileapi = $('').get(0).files !== undefined;
- feature.formdata = window.FormData !== undefined;
+ feature.formdata = (typeof window.FormData !== 'undefined');
var hasProp = !!$.fn.prop;
@@ -141,7 +141,7 @@
options.success = onSuccess;
}
- } else if (options === undefined) {
+ } else if (typeof options === 'undefined') {
options = {};
}
@@ -183,7 +183,7 @@
var traditional = options.traditional;
- if (traditional === undefined) {
+ if (typeof traditional === 'undefined') {
traditional = $.ajaxSettings.traditional;
}
@@ -849,7 +849,7 @@
}
} else if (status) {
- if (errMsg === undefined) {
+ if (typeof errMsg === 'undefined') {
errMsg = xhr.statusText;
}
if (s.error) {
@@ -1031,7 +1031,7 @@
form.clk = target;
if (target.type === 'image') {
- if (e.offsetX !== undefined) {
+ if (typeof e.offsetX !== 'undefined') {
form.clk_x = e.offsetX;
form.clk_y = e.offsetY;
@@ -1078,7 +1078,7 @@
var form = this[0];
var formId = this.attr('id');
- var els = (semantic || form.elements === undefined) ? form.getElementsByTagName('*') : form.elements;
+ var els = (semantic || typeof form.elements === 'undefined') ? form.getElementsByTagName('*') : form.elements;
var els2;
if (els) {
@@ -1270,7 +1270,7 @@
$.fieldValue = function(el, successful) {
var n = el.name, t = el.type, tag = el.tagName.toLowerCase();
- if (successful === undefined) {
+ if (typeof successful === 'undefined') {
successful = true;
}
@@ -1457,7 +1457,7 @@
* Enables or disables any matching elements.
*/
$.fn.enable = function(b) {
- if (b === undefined) {
+ if (typeof b === 'undefined') {
b = true;
}
@@ -1471,7 +1471,7 @@
* selects/deselects and matching option elements.
*/
$.fn.selected = function(select) {
- if (select === undefined) {
+ if (typeof select === 'undefined') {
select = true;
}
From b59ff75d7600278b3d94f32eea383e746f1ae7a7 Mon Sep 17 00:00:00 2001
From: Kevin Morris
Date: Thu, 9 Mar 2017 10:44:13 -0500
Subject: [PATCH 019/108] test: Adds remaining tests
---
test/test.html | 161 ++++++++--
test/test.js | 808 ++++++++++++++++++++++++++++++++++++++++++++++++-
2 files changed, 944 insertions(+), 25 deletions(-)
diff --git a/test/test.html b/test/test.html
index ea3478c1..25d1d559 100644
--- a/test/test.html
+++ b/test/test.html
@@ -66,35 +66,148 @@
-
+
+
+
+
+
+
+
+
+
+
-
+
-
-
+
+
+
+
+
+
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/test/test.js b/test/test.js
index 3be00f77..ab18178b 100644
--- a/test/test.js
+++ b/test/test.js
@@ -70,7 +70,813 @@ describe('form', function() {
});
it('formToArray: outside fields', function() {
- var formData = $('#form8').formToArray();
+ var formData = $('#form10').formToArray();
assert.strictEqual(formData.length, 2, 'There are two "successful" elements of the form');
});
+
+ // test string serialization
+ it('serialize: param count', function() {
+ var s = $('#form1').formSerialize();
+ assert.ok(s.constructor == String, 'type check');
+ assert.ok(s.split('&').length == 13, 'string array length');
+ });
+
+ // test support for input elements not contained within a form
+ it('serialize: pseudo form', function() {
+ var s = $('#pseudo *').fieldSerialize();
+ assert.ok(s.constructor == String, 'type check');
+ assert.ok(s.split('&').length == 3, 'string array length');
+ });
+
+
+ // test resetForm
+ it('resetForm (text input)', function() {
+ var $el = $('#form1 input[name=Name]');
+ var val = $el.val();
+ assert.ok('MyName1' == val, 'beforeSubmit: ' + val);
+ $el.val('test');
+ val = $el.val();
+ assert.ok('test' == $el.val(), 'update: ' + val);
+ $('#form1').resetForm();
+ val = $el.val();
+ assert.ok('MyName1' == val, 'success: ' + val);
+ });
+
+ // test resetForm
+ it('resetForm (select)', function() {
+ var $el = $('#form1 select[name=Single]');
+ var val = $el.val();
+ assert.ok('one' == val, 'beforeSubmit: ' + val);
+ $el.val('two');
+ val = $el.val();
+ assert.ok('two' == $el.val(), 'update: ' + val);
+ $('#form1').resetForm();
+ val = $el.val();
+ assert.ok('one' == val, 'success: ' + val);
+ });
+
+ // test resetForm
+ it('resetForm (textarea)', function() {
+ var $el = $('#form1 textarea');
+ var val = $el.val();
+ assert.ok('This is Form1' == val, 'beforeSubmit: ' + val);
+ $el.val('test');
+ val = $el.val();
+ assert.ok('test' == val, 'udpate: ' + val);
+ $('#form1').resetForm();
+ val = $el.val();
+ assert.ok('This is Form1' == val, 'success: ' + val);
+ });
+
+ // test resetForm
+ it('resetForm (checkbox)', function() {
+ var el = $('#form1 input:checkbox:checked')[0];
+ var val = el.value;
+ assert.ok(el.checked, 'beforeSubmit: ' + el.checked);
+ el.checked = false;
+ assert.ok(!el.checked, 'update: ' + el.checked);
+ $('#form1').resetForm();
+ assert.ok(el.checked, 'success: ' + el.checked);
+ });
+
+ // test resetForm
+ it('resetForm (radio)', function() {
+ var el = $('#form1 input:radio:checked')[0];
+ var val = el.value;
+ assert.ok(el.checked, 'beforeSubmit: ' + el.checked);
+ el.checked = false;
+ assert.ok(!el.checked, 'update: ' + el.checked);
+ $('#form1').resetForm();
+ assert.ok(el.checked, 'success: ' + el.checked);
+ });
+
+
+ // test clearForm
+ it('clearForm (text input)', function() {
+ var $el = $('#form1 input[name=Name]');
+ var val = $el.val();
+ assert.ok('MyName1' == val, 'beforeSubmit: ' + val);
+ $('#form1').clearForm();
+ val = $el.val();
+ assert.ok('' == val, 'success: ' + val);
+ });
+
+ // test resetForm
+ it('clearForm (select)', function() {
+ var $el = $('#form1 select[name=Single]');
+ var val = $el.val();
+ assert.ok('one' == val, 'beforeSubmit: ' + val);
+ $('#form1').clearForm();
+ val = $el.val();
+ assert.ok(!val, 'success: ' + val);
+ });
+
+ // test clearForm; here we're testing that a hidden field is NOT cleared
+ it('clearForm: (hidden input)', function() {
+ var $el = $('#form1 input:hidden');
+ var val = $el.val();
+ assert.ok('hiddenValue' == val, 'beforeSubmit: ' + val);
+ $('#form1').clearForm();
+ val = $el.val();
+ assert.ok('hiddenValue' == val, 'success: ' + val);
+ });
+
+
+ // test clearForm; here we're testing that a submit element is NOT cleared
+ it('clearForm: (submit input)', function() {
+ var $el = $('#form1 input:submit');
+ var val = $el.val();
+ assert.ok('Submit1' == val, 'beforeSubmit: ' + val);
+ $('#form1').clearForm();
+ val = $el.val();
+ assert.ok('Submit1' == val, 'success: ' + val);
+ });
+
+ // test clearForm
+ it('clearForm (checkbox)', function() {
+ var el = $('#form1 input:checkbox:checked')[0];
+ assert.ok(el.checked, 'beforeSubmit: ' + el.checked);
+ $('#form1').clearForm();
+ assert.ok(!el.checked, 'success: ' + el.checked);
+ });
+
+
+ // test clearForm
+ it('clearForm (radio)', function() {
+ var el = $('#form1 input:radio:checked')[0];
+ assert.ok(el.checked, 'beforeSubmit: ' + el.checked);
+ $('#form1').clearForm();
+ assert.ok(!el.checked, 'success: ' + el.checked);
+ });
+
+ // test ajaxSubmit target update
+ it('ajaxSubmit: target == String', function() {
+ $('#targetDiv').empty();
+ stop();
+ var opts = {
+ target: '#targetDiv',
+ success: function() { // post-callback
+ assert.ok(true, 'post-callback');
+ assert.ok($('#targetDiv').text().match('Lorem ipsum'), 'targetDiv updated');
+ start();
+ }
+ };
+
+ expect(2);
+ $('#form3').ajaxSubmit(opts);
+ });
+
+ // test passing jQuery object as the target
+ it('ajaxSubmit: target == jQuery object', function() {
+ stop();
+ var target = $('#targetDiv');
+ target.empty();
+
+ var opts = {
+ target: target,
+ success: function(responseText) { // post-callback
+ assert.ok(true, 'post-callback');
+ assert.ok($('#targetDiv').text().match('Lorem ipsum'), 'targetDiv updated');
+ start();
+ }
+ };
+
+ expect(2);
+ $('#form2').ajaxSubmit(opts);
+ });
+
+ // test passing DOM element as the target
+ it('ajaxSubmit: target == DOM element', function() {
+ stop();
+ $('#targetDiv').empty();
+ var el = $('#targetDiv')[0];
+
+ var opts = {
+ target: '#targetDiv',
+ success: function(responseText) { // post-callback
+ assert.ok(true, 'post-callback');
+ assert.ok($('#targetDiv').text().match('Lorem ipsum'), 'targetDiv updated');
+ start();
+ }
+ };
+
+ expect(2);
+ $('#form2').ajaxSubmit(opts);
+ });
+
+ // test simulated $.load behavior
+ it('ajaxSubmit: load target with scripts', function() {
+ stop();
+ $('#targetDiv').empty();
+
+ var opts = {
+ target: '#targetDiv',
+ url: 'doc-with-scripts.html?' + new Date().getTime(),
+ success: function(responseText) { // post-callback
+ assert.ok(true, 'success-callback');
+ assert.ok($('#targetDiv').text().match('Lorem ipsum'), 'targetDiv updated');
+ assert.ok(typeof unitTestVariable1 != 'undefined', 'first script block executed');
+ assert.ok(typeof unitTestVariable2 != 'undefined', 'second script block executed');
+ assert.ok(typeof scriptCount != 'undefined', 'third script block executed');
+ assert.ok(scriptCount == 1, 'scripts executed once: ' + scriptCount);
+ start();
+ }
+ };
+
+ expect(6);
+ $('#form2').ajaxSubmit(opts);
+ });
+
+ // test ajaxSubmit pre-submit callback
+ it('ajaxSubmit: pre-submit callback', function() {
+ var opts = {
+ beforeSubmit: function(a, jq) { // pre-submit callback
+ assert.ok(true, 'pre-submit callback');
+ assert.ok(a.constructor == Array, 'type check array');
+ assert.ok(jq.jquery, 'type check jQuery');
+ assert.ok(jq[0].tagName.toLowerCase() == 'form', 'jQuery arg == "form": ' + jq[0].tagName.toLowerCase());
+ }
+ };
+
+ expect(4);
+ $('#form3').ajaxSubmit(opts);
+ });
+
+ // test ajaxSubmit post-submit callback for response and status text
+ it('ajaxSubmit: post-submit callback', function() {
+ stop();
+
+ var opts = {
+ success: function(responseText, statusText) { // post-submit callback
+ assert.ok(true, 'post-submit callback');
+ assert.ok(responseText.match('Lorem ipsum'), 'responseText');
+ assert.ok(statusText == 'success', 'statusText');
+ start();
+ }
+ };
+
+ expect(3);
+ $('#form3').ajaxSubmit(opts);
+ });
+
+ // test ajaxSubmit with function argument
+ it('ajaxSubmit: function arg', function() {
+ stop();
+
+ expect(1);
+ $('#form3').ajaxSubmit(function() {
+ assert.ok(true, 'callback hit');
+ start();
+ });
+ });
+
+ // test semantic support via ajaxSubmit's pre-submit callback
+ it('ajaxSubmit: semantic test', function() {
+ var testData = ['a','b','c','d','e','f'];
+
+ var opts = {
+ semantic: true,
+ beforeSubmit: function(a, jq) { // pre-submit callback
+ assert.ok(true, 'pre-submit callback');
+ assert.ok(a.constructor == Array, 'type check');
+ assert.ok(jq.jquery, 'type check jQuery');
+ for (var i=0; i < a.length; i++) {
+ assert.ok(a[i].name == testData[i], 'match value at index='+i);
+ }
+ }
+ };
+
+ expect(9);
+ $('#form2').ajaxSubmit(opts);
+ });
+
+ // test json datatype
+ it('ajaxSubmit: dataType == json', function() {
+ stop();
+
+ var opts = {
+ url: 'json.json',
+ dataType: 'json',
+ success: function(data, statusText) { // post-submit callback
+ // assert that the json data was evaluated
+ assert.ok(typeof data == 'object', 'json data type');
+ assert.ok(data.name == 'jquery-test', 'json data contents');
+ start();
+ }
+ };
+
+ expect(2);
+ $('#form2').ajaxSubmit(opts);
+ });
+
+
+ // test script datatype
+ it('ajaxSubmit: dataType == script', function() {
+ stop();
+
+ var opts = {
+ url: 'script.txt?' + new Date().getTime(), // don't let ie cache it
+ dataType: 'script',
+ success: function(responseText, statusText) { // post-submit callback
+ assert.ok(typeof formScriptTest == 'function', 'script evaluated');
+ assert.ok(responseText.match('formScriptTest'), 'script returned');
+ start();
+ }
+ };
+
+ //expect(2);
+ $('#form2').ajaxSubmit(opts);
+ });
+
+ // test xml datatype
+ it('ajaxSubmit: dataType == xml', function() {
+ stop();
+
+ var opts = {
+ url: 'test.xml',
+ dataType: 'xml',
+ success: function(responseXML, statusText) { // post-submit callback
+ assert.ok(typeof responseXML == 'object', 'data type xml');
+ assert.ok($('test', responseXML).size() == 3, 'xml data query');
+ start();
+ }
+ };
+
+ expect(2);
+ $('#form2').ajaxSubmit(opts);
+ });
+
+
+ // test that args embedded in the action are honored; no real way
+ // to assert this so successful callback is used to signal success
+ it('ajaxSubmit: existing args in action attr', function() {
+ stop();
+
+ var opts = {
+ success: function() { // post-submit callback
+ assert.ok(true, 'post callback');
+ start();
+ }
+ };
+
+ expect(1);
+ $('#form5').ajaxSubmit(opts);
+ });
+
+ // test ajaxSubmit using pre-submit callback to cancel submit
+ it('ajaxSubmit: cancel submit', function() {
+
+ var opts = {
+ beforeSubmit: function(a, jq) { // pre-submit callback
+ assert.ok(true, 'pre-submit callback');
+ assert.ok(a.constructor == Array, 'type check');
+ assert.ok(jq.jquery, 'type check jQuery');
+ return false; // return false to abort submit
+ },
+ success: function() { // post-submit callback
+ assert.ok(false, 'should not hit this post-submit callback');
+ }
+ };
+
+ expect(3);
+ $('#form3').ajaxSubmit(opts);
+ });
+
+ // test submitting a pseudo-form
+ it('ajaxSubmit: pseudo-form', function() {
+ stop();
+
+ var opts = {
+ beforeSubmit: function(a, jq) { // pre-submit callback
+ assert.ok(true, 'pre-submit callback');
+ assert.ok(a.constructor == Array, 'type check');
+ assert.ok(jq.jquery, 'type check jQuery');
+ assert.ok(jq[0].tagName.toLowerCase() == 'div', 'jQuery arg == "div"');
+ },
+ success: function() { // post-submit callback
+ assert.ok(true, 'post-submit callback');
+ start();
+ },
+ // url and method must be provided for a pseudo form since they can
+ // not be extracted from the markup
+ url: 'text.php',
+ type: 'post'
+ };
+
+ expect(5);
+ $('#pseudo').ajaxSubmit(opts);
+ });
+
+ // test eval of json response
+ it('ajaxSubmit: evaluate response', function() {
+ stop();
+
+ var opts = {
+ success: function(responseText) { // post-callback
+ assert.ok(true, 'post-callback');
+ var data = eval.call(window, '('+responseText+')');
+ assert.ok(data.name == 'jquery-test', 'evaled response');
+ start();
+ },
+ url: 'json.txt'
+ };
+
+ expect(2);
+ $('#form2').ajaxSubmit(opts);
+ });
+
+
+ // test pre and post callbacks for ajaxForm
+ it('ajaxForm: pre and post callbacks', function() {
+ stop();
+
+ var opts = {
+ beforeSubmit: function(a, jq) { // pre-submit callback
+ assert.ok(true, 'pre-submit callback');
+ assert.ok(a.constructor == Array, 'type check');
+ assert.ok(jq.jquery, 'type check jQuery');
+ },
+ success: function() { // post-submit callback
+ assert.ok(true, 'post-submit callback');
+ start();
+ }
+ };
+
+ expect(4);
+ $('#form4').ajaxForm(opts);
+ $('#submitForm4')[0].click(); // trigger the submit button
+ });
+
+ // test that the value of the submit button is captured
+ it('ajaxForm: capture submit element', function() {
+
+ var opts = {
+ beforeSubmit: function(a, jq) { // pre-callback
+ assert.ok(true, 'pre-callback');
+ assert.ok(a.constructor == Array, 'type check');
+ assert.ok(jq.jquery, 'type check jQuery');
+ assert.ok(arrayValue(a, 'form4inputName') != null, 'submit button');
+ }
+ };
+
+ expect(4);
+ $('#form4').ajaxForm(opts);
+ $('#submitForm4withName')[0].click();
+ });
+
+ // test image submit support
+ it('ajaxForm: capture submit image coordinates', function() {
+
+ var opts = {
+ beforeSubmit: function(a, jq) { // pre-callback
+ assert.ok(true, 'pre-callback');
+ assert.ok(a.constructor == Array, 'type check');
+ assert.ok(jq.jquery, 'type check jQuery');
+ assert.ok(arrayValue(a, 'myImage.x') != null, 'x coord');
+ assert.ok(arrayValue(a, 'myImage.y') != null, 'y coord');
+ }
+ };
+
+ expect(5);
+ $('#form4').ajaxForm(opts);
+ $('#form4imageSubmit')[0].click();
+ });
+
+ // test image submit support
+ it('ajaxForm: capture submit image coordinates (semantic=true)', function() {
+
+ var opts = {
+ semantic: true,
+ beforeSubmit: function(a, jq) { // pre-callback
+ assert.ok(true, 'pre-callback');
+ assert.ok(a.constructor == Array, 'type check');
+ assert.ok(jq.jquery, 'type check jQuery');
+ assert.ok(arrayValue(a, 'myImage.x') != null, 'x coord');
+ assert.ok(arrayValue(a, 'myImage.y') != null, 'y coord');
+ }
+ };
+
+ expect(5);
+ $('#form4').ajaxForm(opts);
+ $('#form4imageSubmit')[0].click();
+ });
+
+ // test that the targetDiv gets updated
+ it('ajaxForm: update target div', function() {
+ $('#targetDiv').empty();
+ stop();
+
+ var opts = {
+ target: '#targetDiv',
+ beforeSubmit: function(a, jq) { // pre-callback
+ assert.ok(true, 'pre-callback');
+ assert.ok(a.constructor == Array, 'type check');
+ assert.ok(jq.jquery, 'type check jQuery');
+ },
+ success: function() {
+ assert.ok(true, 'post-callback');
+ assert.ok($('#targetDiv').text().match('Lorem ipsum'), 'targetDiv updated');
+ start();
+ }
+ };
+
+ expect(5);
+ $('#form4').ajaxForm(opts);
+ $('#submitForm4')[0].click();
+ });
+
+ it('"success" callback', function() {
+ $('#targetDiv').empty();
+ stop();
+
+ var opts = {
+ success: function() {
+ assert.ok(true, 'post-callback');
+ start();
+ }
+ };
+
+ expect(1);
+ $('#form3').ajaxSubmit(opts);
+ });
+
+ it('"error" callback', function() {
+ $('#targetDiv').empty();
+ stop();
+
+ var opts = {
+ url: 'bogus.php',
+ error: function() {
+ assert.ok(true, 'error-callback');
+ start();
+ },
+ success: function() { // post-submit callback
+ assert.ok(false, 'should not hit post-submit callback');
+ }
+ };
+
+ expect(1);
+ $('#form3').ajaxSubmit(opts);
+ });
+
+
+ it('fieldValue(true)', function() {
+ assert.ok('5' == $('#fieldTest input').fieldValue(true)[0], 'input');
+ assert.ok('1' == $('#fieldTest :input').fieldValue(true)[0], ':input');
+ assert.ok('5' == $('#fieldTest input:hidden').fieldValue(true)[0], ':hidden');
+ assert.ok('14' == $('#fieldTest :password').fieldValue(true)[0], ':password');
+ assert.ok('12' == $('#fieldTest :radio').fieldValue(true)[0], ':radio');
+ assert.ok('1' == $('#fieldTest select').fieldValue(true)[0], 'select');
+
+ var expected = ['8','10'];
+ var result = $('#fieldTest :checkbox').fieldValue(true);
+ assert.ok(result.length == expected.length, 'result size check (checkbox): ' + result.length + '=' + expected.length);
+ for (var i=0; i < result.length; i++)
+ assert.ok(result[i] == expected[i], expected[i]);
+
+ expected = ['3','4'];
+ result = $('#fieldTest [name=B]').fieldValue(true);
+ assert.ok(result.length == expected.length, 'result size check (select-multiple): ' + result.length + '=' + expected.length);
+ for (var i=0; i < result.length; i++)
+ assert.ok(result[i] == expected[i], expected[i]);
+ });
+
+ it('fieldValue(false)', function() {
+ assert.ok('5' == $('#fieldTest input').fieldValue(false)[0], 'input');
+ assert.ok('1' == $('#fieldTest :input').fieldValue(false)[0], ':input');
+ assert.ok('5' == $('#fieldTest input:hidden').fieldValue(false)[0], ':hidden');
+ assert.ok('14' == $('#fieldTest :password').fieldValue(false)[0], ':password');
+ assert.ok('1' == $('#fieldTest select').fieldValue(false)[0], 'select');
+
+ var expected = ['8','9','10'];
+ var result = $('#fieldTest :checkbox').fieldValue(false);
+ assert.ok(result.length == expected.length, 'result size check (checkbox): ' + result.length + '=' + expected.length);
+ for (var i=0; i < result.length; i++)
+ assert.ok(result[i] == expected[i], expected[i]);
+
+ expected = ['11','12','13'];
+ result = $('#fieldTest :radio').fieldValue(false);
+ assert.ok(result.length == expected.length, 'result size check (radio): ' + result.length + '=' + expected.length);
+ for (var i=0; i < result.length; i++)
+ assert.ok(result[i] == expected[i], expected[i]);
+
+ expected = ['3','4'];
+ result = $('#fieldTest [name=B]').fieldValue(false);
+ assert.ok(result.length == expected.length, 'result size check (select-multiple): ' + result.length + '=' + expected.length);
+ for (var i=0; i < result.length; i++)
+ assert.ok(result[i] == expected[i], expected[i]);
+ });
+
+ it('fieldSerialize(true) input', function() {
+ var expected = ['C=5', 'D=6', 'F=8', 'F=10', 'G=12', 'H=14'];
+
+ var result = $('#fieldTest input').fieldSerialize(true);
+ result = result.split('&');
+
+ assert.ok(result.length == expected.length, 'result size check: ' + result.length + '=' + expected.length);
+ for (var i=0; i < result.length; i++)
+ assert.ok(result[i] == expected[i], expected[i] + ' = ' + result[i]);
+ });
+
+ it('fieldSerialize(true) :input', function() {
+ var expected = ['A=1','B=3','B=4','C=5','D=6','E=7','F=8','F=10','G=12','H=14'];
+
+ var result = $('#fieldTest :input').fieldSerialize(true);
+ result = result.split('&');
+
+ assert.ok(result.length == expected.length, 'result size check: ' + result.length + '=' + expected.length);
+ for (var i=0; i < result.length; i++)
+ assert.ok(result[i] == expected[i], expected[i] + ' = ' + result[i]);
+ });
+
+ it('fieldSerialize(false) :input', function() {
+ var expected = ['A=1','B=3','B=4','C=5','D=6','E=7','F=8','F=9','F=10','G=11','G=12','G=13','H=14','I=15','J=16'];
+
+ var result = $('#fieldTest :input').fieldSerialize(false);
+ result = result.split('&');
+
+ assert.ok(result.length == expected.length, 'result size check: ' + result.length + '=' + expected.length);
+ for (var i=0; i < result.length; i++)
+ assert.ok(result[i] == expected[i], expected[i] + ' = ' + result[i]);
+ });
+
+ it('fieldSerialize(true) select-mulitple', function() {
+ var expected = ['B=3','B=4'];
+
+ var result = $('#fieldTest [name=B]').fieldSerialize(true);
+ result = result.split('&');
+
+ assert.ok(result.length == expected.length, 'result size check: ' + result.length + '=' + expected.length);
+ for (var i=0; i < result.length; i++)
+ assert.ok(result[i] == expected[i], expected[i] + ' = ' + result[i]);
+ });
+
+ it('fieldSerialize(true) :checkbox', function() {
+ var expected = ['F=8','F=10'];
+
+ var result = $('#fieldTest :checkbox').fieldSerialize(true);
+ result = result.split('&');
+
+ assert.ok(result.length == expected.length, 'result size check: ' + result.length + '=' + expected.length);
+ for (var i=0; i < result.length; i++)
+ assert.ok(result[i] == expected[i], expected[i] + ' = ' + result[i]);
+ });
+
+ it('fieldSerialize(false) :checkbox', function() {
+ var expected = ['F=8','F=9','F=10'];
+
+ var result = $('#fieldTest :checkbox').fieldSerialize(false);
+ result = result.split('&');
+
+ assert.ok(result.length == expected.length, 'result size check: ' + result.length + '=' + expected.length);
+ for (var i=0; i < result.length; i++)
+ assert.ok(result[i] == expected[i], expected[i] + ' = ' + result[i]);
+ });
+
+ it('fieldSerialize(true) :radio', function() {
+ var expected = ['G=12'];
+
+ var result = $('#fieldTest :radio').fieldSerialize(true);
+ result = result.split('&');
+
+ assert.ok(result.length == expected.length, 'result size check: ' + result.length + '=' + expected.length);
+ for (var i=0; i < result.length; i++)
+ assert.ok(result[i] == expected[i], expected[i] + ' = ' + result[i]);
+ });
+
+ it('fieldSerialize(false) :radio', function() {
+ var expected = ['G=11','G=12','G=13'];
+
+ var result = $('#fieldTest :radio').fieldSerialize(false);
+ result = result.split('&');
+
+ assert.ok(result.length == expected.length, 'result size check: ' + result.length + '=' + expected.length);
+ for (var i=0; i < result.length; i++)
+ assert.ok(result[i] == expected[i], expected[i] + ' = ' + result[i]);
+ });
+
+ it('ajaxForm - auto unbind', function() {
+ $('#targetDiv').empty();
+ stop();
+
+ var opts = {
+ target: '#targetDiv',
+ beforeSubmit: function(a, jq) { // pre-callback
+ assert.ok(true, 'pre-callback');
+ },
+ success: function() {
+ assert.ok(true, 'post-callback');
+ start();
+ }
+ };
+
+ expect(2);
+ // multiple binds
+ $('#form8').ajaxForm(opts).ajaxForm(opts).ajaxForm(opts);
+ $('#submitForm8')[0].click();
+ });
+
+ it('ajaxFormUnbind', function() {
+ $('#targetDiv').empty();
+ stop();
+
+ var opts = {
+ target: '#targetDiv',
+ beforeSubmit: function(a, jq) { // pre-callback
+ assert.ok(true, 'pre-callback');
+ },
+ success: function() {
+ assert.ok(true, 'post-callback');
+ start();
+ }
+ };
+
+ expect(0);
+ // multiple binds
+ $('#form9').ajaxForm(opts).submit(function(){return false;});
+ $('#form9').ajaxFormUnbind(opts);
+ $('#submitForm9')[0].click();
+
+ setTimeout(start, 500);
+ });
+
+ it('naked hash', function() {
+ $('#actionTest1').ajaxSubmit({
+ beforeSerialize: function($f, opts) {
+ assert.ok(true, 'url='+opts.url);
+ }
+ });
+ assert.ok(true, 'ajaxSubmit passed');
+ });
+ it('hash only', function() {
+ $('#actionTest2').ajaxSubmit({
+ beforeSerialize: function($f, opts) {
+ assert.ok(true, 'url='+opts.url);
+ }
+ });
+ assert.ok(true, 'ajaxSubmit passed');
+ });
+ it('empty action', function() {
+ $('#actionTest3').ajaxSubmit({
+ beforeSerialize: function($f, opts) {
+ assert.ok(true, 'url='+opts.url);
+ }
+ });
+ assert.ok(true, 'ajaxSubmit passed');
+ });
+ it('missing action', function() {
+ $('#actionTest4').ajaxSubmit({
+ beforeSerialize: function($f, opts) {
+ assert.ok(true, 'url='+opts.url);
+ }
+ });
+ assert.ok(true, 'ajaxSubmit passed');
+ });
+
+ it('success callback params', function() {
+ $('#targetDiv').empty();
+ stop();
+
+ if (/^1\.3/.test($.fn.jquery)) {
+ expect(3);
+ var $testForm = $('#form3').ajaxSubmit({
+ success: function(data, status, $form) { // jQuery 1.4+ signature
+ assert.ok(true, 'success callback invoked');
+ assert.ok(status === 'success', 'status === success');
+ assert.ok($form === $testForm, '$form param is valid');
+ start();
+ }
+ });
+ }
+ else { //if (/^1\.4/.test($.fn.jquery)) {
+ expect(6);
+ var $testForm = $('#form3').ajaxSubmit({
+ success: function(data, status, xhr, $form) { // jQuery 1.4+ signature
+ assert.ok(true, 'success callback invoked');
+ assert.ok(status === 'success', 'status === success');
+ assert.ok(true, 'third arg: ' + typeof xhr != undefined);
+ assert.ok(!!xhr != false, 'xhr != false');
+ assert.ok(xhr.status, 'xhr.status == ' + xhr.status);
+ assert.ok($form === $testForm, '$form param is valid');
+ start();
+ }
+ });
+ }
+ });
+
+ it('forceSync', function() {
+ $('#targetDiv').empty();
+ stop();
+
+ expect(2);
+ var $testForm = $('#form3').ajaxSubmit({
+ forceSync: true,
+ success: function(data, status, $form) { // jQuery 1.4+ signature
+ assert.ok(true, 'success callback invoked');
+ assert.ok(status === 'success', 'status === success');
+ start();
+ }
+ });
+ });
+
});
From 76baec59ae65eaaa23a8f088871ab011bfcef905 Mon Sep 17 00:00:00 2001
From: Kevin Morris
Date: Thu, 9 Mar 2017 10:44:55 -0500
Subject: [PATCH 020/108] test: Adds ESLint
---
.eslintrc.js | 3 +--
test/.eslintrc.js | 32 ++++++++++++++++++++++++++++++++
test/test.js | 2 ++
3 files changed, 35 insertions(+), 2 deletions(-)
create mode 100644 test/.eslintrc.js
diff --git a/.eslintrc.js b/.eslintrc.js
index 0dcd8462..21fd5281 100644
--- a/.eslintrc.js
+++ b/.eslintrc.js
@@ -3,8 +3,7 @@ module.exports = {
"browser": true,
"jquery": true,
"node": true,
- "amd": true,
- "mocha": true
+ "amd": true
},
"parserOptions": {
"ecmaVersion": 5,
diff --git a/test/.eslintrc.js b/test/.eslintrc.js
new file mode 100644
index 00000000..edd586ad
--- /dev/null
+++ b/test/.eslintrc.js
@@ -0,0 +1,32 @@
+module.exports = {
+ "env": {
+ "browser": true,
+ "jquery": true,
+ "node": true,
+ "mocha": true
+ },
+ "parserOptions": {
+ "ecmaVersion": 5,
+ "sourceType": "script"
+ },
+ "rules": {
+ "comma-spacing": "warn",
+ "eqeqeq": "warn",
+ "newline-after-var": "off",
+ "newline-before-return": "off",
+ "no-multi-spaces": "warn",
+ "object-curly-spacing": [
+ "warn",
+ "never",
+ {
+ "arraysInObjects": true,
+ "objectsInObjects": true
+ }
+ ],
+ "strict": [
+ "warn",
+ "global"
+ ],
+ "yoda": "warn"
+ }
+};
diff --git a/test/test.js b/test/test.js
index ab18178b..64d0a5ba 100644
--- a/test/test.js
+++ b/test/test.js
@@ -1,3 +1,5 @@
+/* global chai */
+
'use strict';
// helper method
From 1c0246c5ead0787b6d14503b9740b663bcbbfe8e Mon Sep 17 00:00:00 2001
From: Kevin Morris
Date: Thu, 9 Mar 2017 10:46:42 -0500
Subject: [PATCH 021/108] test: ESLint: consistent-return
---
test/test.js | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/test/test.js b/test/test.js
index 64d0a5ba..8fbb20cb 100644
--- a/test/test.js
+++ b/test/test.js
@@ -20,7 +20,8 @@ var arrayValue = function(arr, key) {
return arr[i].value;
}
}
-}
+ return undefined;
+};
// var assert = require('chai').assert;
From 4f416e179d1c7d050135f7b3e71d9304f0704e88 Mon Sep 17 00:00:00 2001
From: Kevin Morris
Date: Thu, 9 Mar 2017 10:47:26 -0500
Subject: [PATCH 022/108] test: ESLint: spacing
---
test/test.js | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/test/test.js b/test/test.js
index 8fbb20cb..01ae588f 100644
--- a/test/test.js
+++ b/test/test.js
@@ -67,7 +67,7 @@ describe('form', function() {
// verify all the option values
for (var i=0; i < a.length; i++) {
- assert.strictEqual(a[i].name, expected[i].name, 'Name: ' + a[i].name + ' = ' + expected[i].name);
+ assert.strictEqual(a[i].name, expected[i].name, 'Name: ' + a[i].name + ' = ' + expected[i].name);
assert.strictEqual(a[i].value, expected[i].value, 'Value: ' + a[i].value + ' = ' + expected[i].value);
}
});
From ba7255e54956a059df2286e8fcf125748698d374 Mon Sep 17 00:00:00 2001
From: Kevin Morris
Date: Thu, 9 Mar 2017 10:45:40 -0500
Subject: [PATCH 023/108] test: ESLint: space-infix-ops
---
test/test.js | 48 ++++++++++++++++++++++++------------------------
1 file changed, 24 insertions(+), 24 deletions(-)
diff --git a/test/test.js b/test/test.js
index 01ae588f..b01e5a28 100644
--- a/test/test.js
+++ b/test/test.js
@@ -5,7 +5,7 @@
// helper method
var arrayCount = function(arr, key) {
var count = 0;
- for (var i=0; i < arr.length; i++) {
+ for (var i = 0; i < arr.length; i++) {
if (arr[i].name === key) {
count++;
}
@@ -15,7 +15,7 @@ var arrayCount = function(arr, key) {
// helper method
var arrayValue = function(arr, key) {
- for (var i=0; i < arr.length; i++) {
+ for (var i = 0; i < arr.length; i++) {
if (arr[i].name === key) {
return arr[i].value;
}
@@ -51,7 +51,7 @@ describe('form', function() {
it('formToArray: semantic test', function() {
var formData = $('#form2').formToArray(true);
var testData = ['a','b','c','d','e','f'];
- for (var i=0; i < 6; i++) {
+ for (var i = 0; i < 6; i++) {
assert.strictEqual(formData[i].name, testData[i], 'match value at index=' + i);
}
});
@@ -66,7 +66,7 @@ describe('form', function() {
var a = $('#form6').formToArray(true);
// verify all the option values
- for (var i=0; i < a.length; i++) {
+ for (var i = 0; i < a.length; i++) {
assert.strictEqual(a[i].name, expected[i].name, 'Name: ' + a[i].name + ' = ' + expected[i].name);
assert.strictEqual(a[i].value, expected[i].value, 'Value: ' + a[i].value + ' = ' + expected[i].value);
}
@@ -343,8 +343,8 @@ describe('form', function() {
assert.ok(true, 'pre-submit callback');
assert.ok(a.constructor == Array, 'type check');
assert.ok(jq.jquery, 'type check jQuery');
- for (var i=0; i < a.length; i++) {
- assert.ok(a[i].name == testData[i], 'match value at index='+i);
+ for (var i = 0; i < a.length; i++) {
+ assert.ok(a[i].name == testData[i], 'match value at index=' + i);
}
}
};
@@ -477,7 +477,7 @@ describe('form', function() {
var opts = {
success: function(responseText) { // post-callback
assert.ok(true, 'post-callback');
- var data = eval.call(window, '('+responseText+')');
+ var data = eval.call(window, '(' + responseText + ')');
assert.ok(data.name == 'jquery-test', 'evaled response');
start();
},
@@ -634,13 +634,13 @@ describe('form', function() {
var expected = ['8','10'];
var result = $('#fieldTest :checkbox').fieldValue(true);
assert.ok(result.length == expected.length, 'result size check (checkbox): ' + result.length + '=' + expected.length);
- for (var i=0; i < result.length; i++)
+ for (var i = 0; i < result.length; i++)
assert.ok(result[i] == expected[i], expected[i]);
expected = ['3','4'];
result = $('#fieldTest [name=B]').fieldValue(true);
assert.ok(result.length == expected.length, 'result size check (select-multiple): ' + result.length + '=' + expected.length);
- for (var i=0; i < result.length; i++)
+ for (var i = 0; i < result.length; i++)
assert.ok(result[i] == expected[i], expected[i]);
});
@@ -654,19 +654,19 @@ describe('form', function() {
var expected = ['8','9','10'];
var result = $('#fieldTest :checkbox').fieldValue(false);
assert.ok(result.length == expected.length, 'result size check (checkbox): ' + result.length + '=' + expected.length);
- for (var i=0; i < result.length; i++)
+ for (var i = 0; i < result.length; i++)
assert.ok(result[i] == expected[i], expected[i]);
expected = ['11','12','13'];
result = $('#fieldTest :radio').fieldValue(false);
assert.ok(result.length == expected.length, 'result size check (radio): ' + result.length + '=' + expected.length);
- for (var i=0; i < result.length; i++)
+ for (var i = 0; i < result.length; i++)
assert.ok(result[i] == expected[i], expected[i]);
expected = ['3','4'];
result = $('#fieldTest [name=B]').fieldValue(false);
assert.ok(result.length == expected.length, 'result size check (select-multiple): ' + result.length + '=' + expected.length);
- for (var i=0; i < result.length; i++)
+ for (var i = 0; i < result.length; i++)
assert.ok(result[i] == expected[i], expected[i]);
});
@@ -677,7 +677,7 @@ describe('form', function() {
result = result.split('&');
assert.ok(result.length == expected.length, 'result size check: ' + result.length + '=' + expected.length);
- for (var i=0; i < result.length; i++)
+ for (var i = 0; i < result.length; i++)
assert.ok(result[i] == expected[i], expected[i] + ' = ' + result[i]);
});
@@ -688,7 +688,7 @@ describe('form', function() {
result = result.split('&');
assert.ok(result.length == expected.length, 'result size check: ' + result.length + '=' + expected.length);
- for (var i=0; i < result.length; i++)
+ for (var i = 0; i < result.length; i++)
assert.ok(result[i] == expected[i], expected[i] + ' = ' + result[i]);
});
@@ -699,7 +699,7 @@ describe('form', function() {
result = result.split('&');
assert.ok(result.length == expected.length, 'result size check: ' + result.length + '=' + expected.length);
- for (var i=0; i < result.length; i++)
+ for (var i = 0; i < result.length; i++)
assert.ok(result[i] == expected[i], expected[i] + ' = ' + result[i]);
});
@@ -710,7 +710,7 @@ describe('form', function() {
result = result.split('&');
assert.ok(result.length == expected.length, 'result size check: ' + result.length + '=' + expected.length);
- for (var i=0; i < result.length; i++)
+ for (var i = 0; i < result.length; i++)
assert.ok(result[i] == expected[i], expected[i] + ' = ' + result[i]);
});
@@ -721,7 +721,7 @@ describe('form', function() {
result = result.split('&');
assert.ok(result.length == expected.length, 'result size check: ' + result.length + '=' + expected.length);
- for (var i=0; i < result.length; i++)
+ for (var i = 0; i < result.length; i++)
assert.ok(result[i] == expected[i], expected[i] + ' = ' + result[i]);
});
@@ -732,7 +732,7 @@ describe('form', function() {
result = result.split('&');
assert.ok(result.length == expected.length, 'result size check: ' + result.length + '=' + expected.length);
- for (var i=0; i < result.length; i++)
+ for (var i = 0; i < result.length; i++)
assert.ok(result[i] == expected[i], expected[i] + ' = ' + result[i]);
});
@@ -743,7 +743,7 @@ describe('form', function() {
result = result.split('&');
assert.ok(result.length == expected.length, 'result size check: ' + result.length + '=' + expected.length);
- for (var i=0; i < result.length; i++)
+ for (var i = 0; i < result.length; i++)
assert.ok(result[i] == expected[i], expected[i] + ' = ' + result[i]);
});
@@ -754,7 +754,7 @@ describe('form', function() {
result = result.split('&');
assert.ok(result.length == expected.length, 'result size check: ' + result.length + '=' + expected.length);
- for (var i=0; i < result.length; i++)
+ for (var i = 0; i < result.length; i++)
assert.ok(result[i] == expected[i], expected[i] + ' = ' + result[i]);
});
@@ -806,7 +806,7 @@ describe('form', function() {
it('naked hash', function() {
$('#actionTest1').ajaxSubmit({
beforeSerialize: function($f, opts) {
- assert.ok(true, 'url='+opts.url);
+ assert.ok(true, 'url=' + opts.url);
}
});
assert.ok(true, 'ajaxSubmit passed');
@@ -814,7 +814,7 @@ describe('form', function() {
it('hash only', function() {
$('#actionTest2').ajaxSubmit({
beforeSerialize: function($f, opts) {
- assert.ok(true, 'url='+opts.url);
+ assert.ok(true, 'url=' + opts.url);
}
});
assert.ok(true, 'ajaxSubmit passed');
@@ -822,7 +822,7 @@ describe('form', function() {
it('empty action', function() {
$('#actionTest3').ajaxSubmit({
beforeSerialize: function($f, opts) {
- assert.ok(true, 'url='+opts.url);
+ assert.ok(true, 'url=' + opts.url);
}
});
assert.ok(true, 'ajaxSubmit passed');
@@ -830,7 +830,7 @@ describe('form', function() {
it('missing action', function() {
$('#actionTest4').ajaxSubmit({
beforeSerialize: function($f, opts) {
- assert.ok(true, 'url='+opts.url);
+ assert.ok(true, 'url=' + opts.url);
}
});
assert.ok(true, 'ajaxSubmit passed');
From c4fc8099bb4cf42d90f80ea8db94acd8dbc99fa9 Mon Sep 17 00:00:00 2001
From: Kevin Morris
Date: Thu, 9 Mar 2017 10:56:11 -0500
Subject: [PATCH 024/108] test: Comments testing functions that aren't in
MochaJS
---
test/test.js | 136 +++++++++++++++++++++++++--------------------------
1 file changed, 68 insertions(+), 68 deletions(-)
diff --git a/test/test.js b/test/test.js
index b01e5a28..58eb0069 100644
--- a/test/test.js
+++ b/test/test.js
@@ -215,23 +215,23 @@ describe('form', function() {
// test ajaxSubmit target update
it('ajaxSubmit: target == String', function() {
$('#targetDiv').empty();
- stop();
+ // stop();
var opts = {
target: '#targetDiv',
success: function() { // post-callback
assert.ok(true, 'post-callback');
assert.ok($('#targetDiv').text().match('Lorem ipsum'), 'targetDiv updated');
- start();
+ // start();
}
};
- expect(2);
+ // expect(2);
$('#form3').ajaxSubmit(opts);
});
// test passing jQuery object as the target
it('ajaxSubmit: target == jQuery object', function() {
- stop();
+ // stop();
var target = $('#targetDiv');
target.empty();
@@ -240,17 +240,17 @@ describe('form', function() {
success: function(responseText) { // post-callback
assert.ok(true, 'post-callback');
assert.ok($('#targetDiv').text().match('Lorem ipsum'), 'targetDiv updated');
- start();
+ // start();
}
};
- expect(2);
+ // expect(2);
$('#form2').ajaxSubmit(opts);
});
// test passing DOM element as the target
it('ajaxSubmit: target == DOM element', function() {
- stop();
+ // stop();
$('#targetDiv').empty();
var el = $('#targetDiv')[0];
@@ -259,17 +259,17 @@ describe('form', function() {
success: function(responseText) { // post-callback
assert.ok(true, 'post-callback');
assert.ok($('#targetDiv').text().match('Lorem ipsum'), 'targetDiv updated');
- start();
+ // start();
}
};
- expect(2);
+ // expect(2);
$('#form2').ajaxSubmit(opts);
});
// test simulated $.load behavior
it('ajaxSubmit: load target with scripts', function() {
- stop();
+ // stop();
$('#targetDiv').empty();
var opts = {
@@ -282,11 +282,11 @@ describe('form', function() {
assert.ok(typeof unitTestVariable2 != 'undefined', 'second script block executed');
assert.ok(typeof scriptCount != 'undefined', 'third script block executed');
assert.ok(scriptCount == 1, 'scripts executed once: ' + scriptCount);
- start();
+ // start();
}
};
- expect(6);
+ // expect(6);
$('#form2').ajaxSubmit(opts);
});
@@ -301,35 +301,35 @@ describe('form', function() {
}
};
- expect(4);
+ // expect(4);
$('#form3').ajaxSubmit(opts);
});
// test ajaxSubmit post-submit callback for response and status text
it('ajaxSubmit: post-submit callback', function() {
- stop();
+ // stop();
var opts = {
success: function(responseText, statusText) { // post-submit callback
assert.ok(true, 'post-submit callback');
assert.ok(responseText.match('Lorem ipsum'), 'responseText');
assert.ok(statusText == 'success', 'statusText');
- start();
+ // start();
}
};
- expect(3);
+ // expect(3);
$('#form3').ajaxSubmit(opts);
});
// test ajaxSubmit with function argument
it('ajaxSubmit: function arg', function() {
- stop();
+ // stop();
- expect(1);
+ // expect(1);
$('#form3').ajaxSubmit(function() {
assert.ok(true, 'callback hit');
- start();
+ // start();
});
});
@@ -349,13 +349,13 @@ describe('form', function() {
}
};
- expect(9);
+ // expect(9);
$('#form2').ajaxSubmit(opts);
});
// test json datatype
it('ajaxSubmit: dataType == json', function() {
- stop();
+ // stop();
var opts = {
url: 'json.json',
@@ -364,18 +364,18 @@ describe('form', function() {
// assert that the json data was evaluated
assert.ok(typeof data == 'object', 'json data type');
assert.ok(data.name == 'jquery-test', 'json data contents');
- start();
+ // start();
}
};
- expect(2);
+ // expect(2);
$('#form2').ajaxSubmit(opts);
});
// test script datatype
it('ajaxSubmit: dataType == script', function() {
- stop();
+ // stop();
var opts = {
url: 'script.txt?' + new Date().getTime(), // don't let ie cache it
@@ -383,17 +383,17 @@ describe('form', function() {
success: function(responseText, statusText) { // post-submit callback
assert.ok(typeof formScriptTest == 'function', 'script evaluated');
assert.ok(responseText.match('formScriptTest'), 'script returned');
- start();
+ // start();
}
};
- //expect(2);
+ // expect(2);
$('#form2').ajaxSubmit(opts);
});
// test xml datatype
it('ajaxSubmit: dataType == xml', function() {
- stop();
+ // stop();
var opts = {
url: 'test.xml',
@@ -401,11 +401,11 @@ describe('form', function() {
success: function(responseXML, statusText) { // post-submit callback
assert.ok(typeof responseXML == 'object', 'data type xml');
assert.ok($('test', responseXML).size() == 3, 'xml data query');
- start();
+ // start();
}
};
- expect(2);
+ // expect(2);
$('#form2').ajaxSubmit(opts);
});
@@ -413,16 +413,16 @@ describe('form', function() {
// test that args embedded in the action are honored; no real way
// to assert this so successful callback is used to signal success
it('ajaxSubmit: existing args in action attr', function() {
- stop();
+ // stop();
var opts = {
success: function() { // post-submit callback
assert.ok(true, 'post callback');
- start();
+ // start();
}
};
- expect(1);
+ // expect(1);
$('#form5').ajaxSubmit(opts);
});
@@ -441,13 +441,13 @@ describe('form', function() {
}
};
- expect(3);
+ // expect(3);
$('#form3').ajaxSubmit(opts);
});
// test submitting a pseudo-form
it('ajaxSubmit: pseudo-form', function() {
- stop();
+ // stop();
var opts = {
beforeSubmit: function(a, jq) { // pre-submit callback
@@ -458,7 +458,7 @@ describe('form', function() {
},
success: function() { // post-submit callback
assert.ok(true, 'post-submit callback');
- start();
+ // start();
},
// url and method must be provided for a pseudo form since they can
// not be extracted from the markup
@@ -466,32 +466,32 @@ describe('form', function() {
type: 'post'
};
- expect(5);
+ // expect(5);
$('#pseudo').ajaxSubmit(opts);
});
// test eval of json response
it('ajaxSubmit: evaluate response', function() {
- stop();
+ // stop();
var opts = {
success: function(responseText) { // post-callback
assert.ok(true, 'post-callback');
var data = eval.call(window, '(' + responseText + ')');
assert.ok(data.name == 'jquery-test', 'evaled response');
- start();
+ // start();
},
url: 'json.txt'
};
- expect(2);
+ // expect(2);
$('#form2').ajaxSubmit(opts);
});
// test pre and post callbacks for ajaxForm
it('ajaxForm: pre and post callbacks', function() {
- stop();
+ // stop();
var opts = {
beforeSubmit: function(a, jq) { // pre-submit callback
@@ -501,11 +501,11 @@ describe('form', function() {
},
success: function() { // post-submit callback
assert.ok(true, 'post-submit callback');
- start();
+ // start();
}
};
- expect(4);
+ // expect(4);
$('#form4').ajaxForm(opts);
$('#submitForm4')[0].click(); // trigger the submit button
});
@@ -522,7 +522,7 @@ describe('form', function() {
}
};
- expect(4);
+ // expect(4);
$('#form4').ajaxForm(opts);
$('#submitForm4withName')[0].click();
});
@@ -540,7 +540,7 @@ describe('form', function() {
}
};
- expect(5);
+ // expect(5);
$('#form4').ajaxForm(opts);
$('#form4imageSubmit')[0].click();
});
@@ -559,7 +559,7 @@ describe('form', function() {
}
};
- expect(5);
+ // expect(5);
$('#form4').ajaxForm(opts);
$('#form4imageSubmit')[0].click();
});
@@ -567,7 +567,7 @@ describe('form', function() {
// test that the targetDiv gets updated
it('ajaxForm: update target div', function() {
$('#targetDiv').empty();
- stop();
+ // stop();
var opts = {
target: '#targetDiv',
@@ -579,46 +579,46 @@ describe('form', function() {
success: function() {
assert.ok(true, 'post-callback');
assert.ok($('#targetDiv').text().match('Lorem ipsum'), 'targetDiv updated');
- start();
+ // start();
}
};
- expect(5);
+ // expect(5);
$('#form4').ajaxForm(opts);
$('#submitForm4')[0].click();
});
it('"success" callback', function() {
$('#targetDiv').empty();
- stop();
+ // stop();
var opts = {
success: function() {
assert.ok(true, 'post-callback');
- start();
+ // start();
}
};
- expect(1);
+ // expect(1);
$('#form3').ajaxSubmit(opts);
});
it('"error" callback', function() {
$('#targetDiv').empty();
- stop();
+ // stop();
var opts = {
url: 'bogus.php',
error: function() {
assert.ok(true, 'error-callback');
- start();
+ // start();
},
success: function() { // post-submit callback
assert.ok(false, 'should not hit post-submit callback');
}
};
- expect(1);
+ // expect(1);
$('#form3').ajaxSubmit(opts);
});
@@ -760,7 +760,7 @@ describe('form', function() {
it('ajaxForm - auto unbind', function() {
$('#targetDiv').empty();
- stop();
+ // stop();
var opts = {
target: '#targetDiv',
@@ -769,11 +769,11 @@ describe('form', function() {
},
success: function() {
assert.ok(true, 'post-callback');
- start();
+ // start();
}
};
- expect(2);
+ // expect(2);
// multiple binds
$('#form8').ajaxForm(opts).ajaxForm(opts).ajaxForm(opts);
$('#submitForm8')[0].click();
@@ -781,7 +781,7 @@ describe('form', function() {
it('ajaxFormUnbind', function() {
$('#targetDiv').empty();
- stop();
+ // stop();
var opts = {
target: '#targetDiv',
@@ -790,11 +790,11 @@ describe('form', function() {
},
success: function() {
assert.ok(true, 'post-callback');
- start();
+ // start();
}
};
- expect(0);
+ // expect(0);
// multiple binds
$('#form9').ajaxForm(opts).submit(function(){return false;});
$('#form9').ajaxFormUnbind(opts);
@@ -838,21 +838,21 @@ describe('form', function() {
it('success callback params', function() {
$('#targetDiv').empty();
- stop();
+ // stop();
if (/^1\.3/.test($.fn.jquery)) {
- expect(3);
+ // expect(3);
var $testForm = $('#form3').ajaxSubmit({
success: function(data, status, $form) { // jQuery 1.4+ signature
assert.ok(true, 'success callback invoked');
assert.ok(status === 'success', 'status === success');
assert.ok($form === $testForm, '$form param is valid');
- start();
+ // start();
}
});
}
else { //if (/^1\.4/.test($.fn.jquery)) {
- expect(6);
+ // expect(6);
var $testForm = $('#form3').ajaxSubmit({
success: function(data, status, xhr, $form) { // jQuery 1.4+ signature
assert.ok(true, 'success callback invoked');
@@ -861,7 +861,7 @@ describe('form', function() {
assert.ok(!!xhr != false, 'xhr != false');
assert.ok(xhr.status, 'xhr.status == ' + xhr.status);
assert.ok($form === $testForm, '$form param is valid');
- start();
+ // start();
}
});
}
@@ -869,15 +869,15 @@ describe('form', function() {
it('forceSync', function() {
$('#targetDiv').empty();
- stop();
+ // stop();
- expect(2);
+ // expect(2);
var $testForm = $('#form3').ajaxSubmit({
forceSync: true,
success: function(data, status, $form) { // jQuery 1.4+ signature
assert.ok(true, 'success callback invoked');
assert.ok(status === 'success', 'status === success');
- start();
+ // start();
}
});
});
From 0d528a01d0af73c9af888eee40dcd1070ec3ae1a Mon Sep 17 00:00:00 2001
From: Kevin Morris
Date: Thu, 9 Mar 2017 11:01:01 -0500
Subject: [PATCH 025/108] test: ESLint: curly
---
test/test.js | 39 ++++++++++++++++++++++++++-------------
1 file changed, 26 insertions(+), 13 deletions(-)
diff --git a/test/test.js b/test/test.js
index 58eb0069..1f3e9265 100644
--- a/test/test.js
+++ b/test/test.js
@@ -634,14 +634,16 @@ describe('form', function() {
var expected = ['8','10'];
var result = $('#fieldTest :checkbox').fieldValue(true);
assert.ok(result.length == expected.length, 'result size check (checkbox): ' + result.length + '=' + expected.length);
- for (var i = 0; i < result.length; i++)
+ for (var i = 0; i < result.length; i++) {
assert.ok(result[i] == expected[i], expected[i]);
+ }
expected = ['3','4'];
result = $('#fieldTest [name=B]').fieldValue(true);
assert.ok(result.length == expected.length, 'result size check (select-multiple): ' + result.length + '=' + expected.length);
- for (var i = 0; i < result.length; i++)
+ for (var i = 0; i < result.length; i++) {
assert.ok(result[i] == expected[i], expected[i]);
+ }
});
it('fieldValue(false)', function() {
@@ -654,20 +656,23 @@ describe('form', function() {
var expected = ['8','9','10'];
var result = $('#fieldTest :checkbox').fieldValue(false);
assert.ok(result.length == expected.length, 'result size check (checkbox): ' + result.length + '=' + expected.length);
- for (var i = 0; i < result.length; i++)
+ for (var i = 0; i < result.length; i++) {
assert.ok(result[i] == expected[i], expected[i]);
+ }
expected = ['11','12','13'];
result = $('#fieldTest :radio').fieldValue(false);
assert.ok(result.length == expected.length, 'result size check (radio): ' + result.length + '=' + expected.length);
- for (var i = 0; i < result.length; i++)
+ for (var i = 0; i < result.length; i++) {
assert.ok(result[i] == expected[i], expected[i]);
+ }
expected = ['3','4'];
result = $('#fieldTest [name=B]').fieldValue(false);
assert.ok(result.length == expected.length, 'result size check (select-multiple): ' + result.length + '=' + expected.length);
- for (var i = 0; i < result.length; i++)
+ for (var i = 0; i < result.length; i++) {
assert.ok(result[i] == expected[i], expected[i]);
+ }
});
it('fieldSerialize(true) input', function() {
@@ -677,8 +682,9 @@ describe('form', function() {
result = result.split('&');
assert.ok(result.length == expected.length, 'result size check: ' + result.length + '=' + expected.length);
- for (var i = 0; i < result.length; i++)
+ for (var i = 0; i < result.length; i++) {
assert.ok(result[i] == expected[i], expected[i] + ' = ' + result[i]);
+ }
});
it('fieldSerialize(true) :input', function() {
@@ -688,8 +694,9 @@ describe('form', function() {
result = result.split('&');
assert.ok(result.length == expected.length, 'result size check: ' + result.length + '=' + expected.length);
- for (var i = 0; i < result.length; i++)
+ for (var i = 0; i < result.length; i++) {
assert.ok(result[i] == expected[i], expected[i] + ' = ' + result[i]);
+ }
});
it('fieldSerialize(false) :input', function() {
@@ -699,8 +706,9 @@ describe('form', function() {
result = result.split('&');
assert.ok(result.length == expected.length, 'result size check: ' + result.length + '=' + expected.length);
- for (var i = 0; i < result.length; i++)
+ for (var i = 0; i < result.length; i++) {
assert.ok(result[i] == expected[i], expected[i] + ' = ' + result[i]);
+ }
});
it('fieldSerialize(true) select-mulitple', function() {
@@ -710,8 +718,9 @@ describe('form', function() {
result = result.split('&');
assert.ok(result.length == expected.length, 'result size check: ' + result.length + '=' + expected.length);
- for (var i = 0; i < result.length; i++)
+ for (var i = 0; i < result.length; i++) {
assert.ok(result[i] == expected[i], expected[i] + ' = ' + result[i]);
+ }
});
it('fieldSerialize(true) :checkbox', function() {
@@ -721,8 +730,9 @@ describe('form', function() {
result = result.split('&');
assert.ok(result.length == expected.length, 'result size check: ' + result.length + '=' + expected.length);
- for (var i = 0; i < result.length; i++)
+ for (var i = 0; i < result.length; i++) {
assert.ok(result[i] == expected[i], expected[i] + ' = ' + result[i]);
+ }
});
it('fieldSerialize(false) :checkbox', function() {
@@ -732,8 +742,9 @@ describe('form', function() {
result = result.split('&');
assert.ok(result.length == expected.length, 'result size check: ' + result.length + '=' + expected.length);
- for (var i = 0; i < result.length; i++)
+ for (var i = 0; i < result.length; i++) {
assert.ok(result[i] == expected[i], expected[i] + ' = ' + result[i]);
+ }
});
it('fieldSerialize(true) :radio', function() {
@@ -743,8 +754,9 @@ describe('form', function() {
result = result.split('&');
assert.ok(result.length == expected.length, 'result size check: ' + result.length + '=' + expected.length);
- for (var i = 0; i < result.length; i++)
+ for (var i = 0; i < result.length; i++) {
assert.ok(result[i] == expected[i], expected[i] + ' = ' + result[i]);
+ }
});
it('fieldSerialize(false) :radio', function() {
@@ -754,8 +766,9 @@ describe('form', function() {
result = result.split('&');
assert.ok(result.length == expected.length, 'result size check: ' + result.length + '=' + expected.length);
- for (var i = 0; i < result.length; i++)
+ for (var i = 0; i < result.length; i++) {
assert.ok(result[i] == expected[i], expected[i] + ' = ' + result[i]);
+ }
});
it('ajaxForm - auto unbind', function() {
From 75b2627cca9f28d26341dc4a9a27d9ee56d15bd3 Mon Sep 17 00:00:00 2001
From: Kevin Morris
Date: Thu, 9 Mar 2017 11:01:48 -0500
Subject: [PATCH 026/108] test: ESLint: no-eq-null
---
test/test.js | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/test/test.js b/test/test.js
index 1f3e9265..7f88afed 100644
--- a/test/test.js
+++ b/test/test.js
@@ -518,7 +518,7 @@ describe('form', function() {
assert.ok(true, 'pre-callback');
assert.ok(a.constructor == Array, 'type check');
assert.ok(jq.jquery, 'type check jQuery');
- assert.ok(arrayValue(a, 'form4inputName') != null, 'submit button');
+ assert.ok(arrayValue(a, 'form4inputName') !== null, 'submit button');
}
};
@@ -535,8 +535,8 @@ describe('form', function() {
assert.ok(true, 'pre-callback');
assert.ok(a.constructor == Array, 'type check');
assert.ok(jq.jquery, 'type check jQuery');
- assert.ok(arrayValue(a, 'myImage.x') != null, 'x coord');
- assert.ok(arrayValue(a, 'myImage.y') != null, 'y coord');
+ assert.ok(arrayValue(a, 'myImage.x') !== null, 'x coord');
+ assert.ok(arrayValue(a, 'myImage.y') !== null, 'y coord');
}
};
@@ -554,8 +554,8 @@ describe('form', function() {
assert.ok(true, 'pre-callback');
assert.ok(a.constructor == Array, 'type check');
assert.ok(jq.jquery, 'type check jQuery');
- assert.ok(arrayValue(a, 'myImage.x') != null, 'x coord');
- assert.ok(arrayValue(a, 'myImage.y') != null, 'y coord');
+ assert.ok(arrayValue(a, 'myImage.x') !== null, 'x coord');
+ assert.ok(arrayValue(a, 'myImage.y') !== null, 'y coord');
}
};
From a5d8ccac927bc673909eb3acd77197fbe1fbcd8d Mon Sep 17 00:00:00 2001
From: Kevin Morris
Date: Thu, 9 Mar 2017 11:06:56 -0500
Subject: [PATCH 027/108] test: Changes for ESLint
---
test/test.js | 30 +++++++++++++++++++-----------
1 file changed, 19 insertions(+), 11 deletions(-)
diff --git a/test/test.js b/test/test.js
index 7f88afed..c6c0bd2a 100644
--- a/test/test.js
+++ b/test/test.js
@@ -624,6 +624,8 @@ describe('form', function() {
it('fieldValue(true)', function() {
+ var i;
+
assert.ok('5' == $('#fieldTest input').fieldValue(true)[0], 'input');
assert.ok('1' == $('#fieldTest :input').fieldValue(true)[0], ':input');
assert.ok('5' == $('#fieldTest input:hidden').fieldValue(true)[0], ':hidden');
@@ -634,19 +636,21 @@ describe('form', function() {
var expected = ['8','10'];
var result = $('#fieldTest :checkbox').fieldValue(true);
assert.ok(result.length == expected.length, 'result size check (checkbox): ' + result.length + '=' + expected.length);
- for (var i = 0; i < result.length; i++) {
+ for (i = 0; i < result.length; i++) {
assert.ok(result[i] == expected[i], expected[i]);
}
expected = ['3','4'];
result = $('#fieldTest [name=B]').fieldValue(true);
assert.ok(result.length == expected.length, 'result size check (select-multiple): ' + result.length + '=' + expected.length);
- for (var i = 0; i < result.length; i++) {
+ for (i = 0; i < result.length; i++) {
assert.ok(result[i] == expected[i], expected[i]);
}
});
it('fieldValue(false)', function() {
+ var i;
+
assert.ok('5' == $('#fieldTest input').fieldValue(false)[0], 'input');
assert.ok('1' == $('#fieldTest :input').fieldValue(false)[0], ':input');
assert.ok('5' == $('#fieldTest input:hidden').fieldValue(false)[0], ':hidden');
@@ -656,21 +660,21 @@ describe('form', function() {
var expected = ['8','9','10'];
var result = $('#fieldTest :checkbox').fieldValue(false);
assert.ok(result.length == expected.length, 'result size check (checkbox): ' + result.length + '=' + expected.length);
- for (var i = 0; i < result.length; i++) {
+ for (i = 0; i < result.length; i++) {
assert.ok(result[i] == expected[i], expected[i]);
}
expected = ['11','12','13'];
result = $('#fieldTest :radio').fieldValue(false);
assert.ok(result.length == expected.length, 'result size check (radio): ' + result.length + '=' + expected.length);
- for (var i = 0; i < result.length; i++) {
+ for (i = 0; i < result.length; i++) {
assert.ok(result[i] == expected[i], expected[i]);
}
expected = ['3','4'];
result = $('#fieldTest [name=B]').fieldValue(false);
assert.ok(result.length == expected.length, 'result size check (select-multiple): ' + result.length + '=' + expected.length);
- for (var i = 0; i < result.length; i++) {
+ for (i = 0; i < result.length; i++) {
assert.ok(result[i] == expected[i], expected[i]);
}
});
@@ -809,11 +813,13 @@ describe('form', function() {
// expect(0);
// multiple binds
- $('#form9').ajaxForm(opts).submit(function(){return false;});
+ $('#form9').ajaxForm(opts).submit(function() {
+ return false;
+ });
$('#form9').ajaxFormUnbind(opts);
$('#submitForm9')[0].click();
- setTimeout(start, 500);
+ // setTimeout(start, 500);
});
it('naked hash', function() {
@@ -850,12 +856,14 @@ describe('form', function() {
});
it('success callback params', function() {
+ var $testForm;
+
$('#targetDiv').empty();
// stop();
if (/^1\.3/.test($.fn.jquery)) {
// expect(3);
- var $testForm = $('#form3').ajaxSubmit({
+ $testForm = $('#form3').ajaxSubmit({
success: function(data, status, $form) { // jQuery 1.4+ signature
assert.ok(true, 'success callback invoked');
assert.ok(status === 'success', 'status === success');
@@ -863,10 +871,10 @@ describe('form', function() {
// start();
}
});
- }
- else { //if (/^1\.4/.test($.fn.jquery)) {
+
+ } else { // if (/^1\.4/.test($.fn.jquery)) {
// expect(6);
- var $testForm = $('#form3').ajaxSubmit({
+ $testForm = $('#form3').ajaxSubmit({
success: function(data, status, xhr, $form) { // jQuery 1.4+ signature
assert.ok(true, 'success callback invoked');
assert.ok(status === 'success', 'status === success');
From b6df1cfa24d45b2fe190a465c6486d313abe18c6 Mon Sep 17 00:00:00 2001
From: Kevin Morris
Date: Thu, 9 Mar 2017 11:19:49 -0500
Subject: [PATCH 028/108] test: Resets test fixture at the beginning of each
test
---
test/test.js | 13 +++++++++++--
1 file changed, 11 insertions(+), 2 deletions(-)
diff --git a/test/test.js b/test/test.js
index c6c0bd2a..070e8dfb 100644
--- a/test/test.js
+++ b/test/test.js
@@ -24,10 +24,19 @@ var arrayValue = function(arr, key) {
};
-// var assert = require('chai').assert;
var assert = chai.assert;
+var fixture;
describe('form', function() {
+ before(function() {
+ fixture = $('#main').html();
+ });
+
+ beforeEach(function() {
+ $('#main').html(fixture);
+ });
+
+
it('"action" and "method" form attributes', function() {
var f = $('#form1');
assert.strictEqual(f.attr('action'), 'text.php', 'form "action"');
@@ -164,7 +173,7 @@ describe('form', function() {
assert.ok('' == val, 'success: ' + val);
});
- // test resetForm
+ // test clearForm
it('clearForm (select)', function() {
var $el = $('#form1 select[name=Single]');
var val = $el.val();
From b5762660813c2b00b33586750bb9024ab26f679b Mon Sep 17 00:00:00 2001
From: Kevin Morris
Date: Thu, 9 Mar 2017 11:29:17 -0500
Subject: [PATCH 029/108] test: Adds remaining test files
---
Gruntfile.js | 2 +-
test/ajax/doc-with-scripts.html | 27 +++++++++++++++++++++++++++
test/ajax/json.json | 1 +
test/ajax/json.txt | 1 +
test/ajax/script.txt | 3 +++
test/ajax/test.xml | 5 +++++
test/ajax/text.html | 12 ++++++++++++
test/test.html | 24 ++++++++++++------------
test/test.js | 19 +++++++++----------
9 files changed, 71 insertions(+), 23 deletions(-)
create mode 100644 test/ajax/doc-with-scripts.html
create mode 100644 test/ajax/json.json
create mode 100644 test/ajax/json.txt
create mode 100644 test/ajax/script.txt
create mode 100644 test/ajax/test.xml
create mode 100644 test/ajax/text.html
diff --git a/Gruntfile.js b/Gruntfile.js
index b8dbe9e9..1eece44e 100644
--- a/Gruntfile.js
+++ b/Gruntfile.js
@@ -14,7 +14,7 @@ module.exports = function(grunt) {
mocha: {
all: {
- src: ['test/**/*.html'],
+ src: ['test/*.html'],
},
options: {
run: true
diff --git a/test/ajax/doc-with-scripts.html b/test/ajax/doc-with-scripts.html
new file mode 100644
index 00000000..8e5fa6d6
--- /dev/null
+++ b/test/ajax/doc-with-scripts.html
@@ -0,0 +1,27 @@
+
+
+Lorem ipsum dolor sit amet
+
+
+
+Lorem ipsum dolor sit amet
+
+
+
+
+
+Lorem ipsum dolor sit amet
+
+
diff --git a/test/ajax/json.json b/test/ajax/json.json
new file mode 100644
index 00000000..d5dad436
--- /dev/null
+++ b/test/ajax/json.json
@@ -0,0 +1 @@
+{ "name": "jquery-test" }
\ No newline at end of file
diff --git a/test/ajax/json.txt b/test/ajax/json.txt
new file mode 100644
index 00000000..d5dad436
--- /dev/null
+++ b/test/ajax/json.txt
@@ -0,0 +1 @@
+{ "name": "jquery-test" }
\ No newline at end of file
diff --git a/test/ajax/script.txt b/test/ajax/script.txt
new file mode 100644
index 00000000..99c5849e
--- /dev/null
+++ b/test/ajax/script.txt
@@ -0,0 +1,3 @@
+formScriptTest = function() {
+ // no-op
+}
diff --git a/test/ajax/test.xml b/test/ajax/test.xml
new file mode 100644
index 00000000..b16b62da
--- /dev/null
+++ b/test/ajax/test.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/test/ajax/text.html b/test/ajax/text.html
new file mode 100644
index 00000000..c06ef4b8
--- /dev/null
+++ b/test/ajax/text.html
@@ -0,0 +1,12 @@
+Lorem ipsum dolor sit amet
+consectetuer adipiscing elit
+Sed lorem leo
+lorem leo consectetuer adipiscing elit
+Sed lorem leo
+rhoncus sit amet
+elementum at
+bibendum at, eros
+Cras at mi et tortor egestas vestibulum
+sed Cras at mi vestibulum
+Phasellus sed felis sit amet
+orci dapibus semper.
diff --git a/test/test.html b/test/test.html
index 25d1d559..07d12e3e 100644
--- a/test/test.html
+++ b/test/test.html
@@ -14,7 +14,7 @@
-