Skip to content

Commit

Permalink
Remove jQuery
Browse files Browse the repository at this point in the history
The implementation uses simple queries and class manipulation.

In view to remove it entirely from Client Side Validation, this commit
removes jQuery from Simple Form extension
  • Loading branch information
tagliala committed Aug 27, 2023
1 parent 3848757 commit f99aa9f
Show file tree
Hide file tree
Showing 15 changed files with 459 additions and 200 deletions.
2 changes: 1 addition & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@

## main / unreleased

* [FEATURE] Do not require jQuery
* [ENHANCEMENT] Test against Ruby 3.2
* [ENHANCEMENT] Test against jQuery 3.7.0 by default
* [ENHANCEMENT] Update QUnit to 2.19.4

## 15.0.0 / 2022-09-18
Expand Down
89 changes: 64 additions & 25 deletions dist/simple-form.bootstrap4.esm.js
Original file line number Diff line number Diff line change
@@ -1,49 +1,88 @@
/*!
* Client Side Validations Simple Form JS (Default) - v0.3.1 (https://github.com/DavyJonesLocker/client_side_validations-simple_form)
* Client Side Validations Simple Form JS (Default) - v0.4.0 (https://github.com/DavyJonesLocker/client_side_validations-simple_form)
* Copyright (c) 2023 Geremia Taglialatela, Brian Cardarella
* Licensed under MIT (https://opensource.org/licenses/mit-license.php)
*/

import jQuery from 'jquery';
import ClientSideValidations from '@client-side-validations/client-side-validations';

function _toConsumableArray(arr) {
return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();
}
function _arrayWithoutHoles(arr) {
if (Array.isArray(arr)) return _arrayLikeToArray(arr);
}
function _iterableToArray(iter) {
if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter);
}
function _unsupportedIterableToArray(o, minLen) {
if (!o) return;
if (typeof o === "string") return _arrayLikeToArray(o, minLen);
var n = Object.prototype.toString.call(o).slice(8, -1);
if (n === "Object" && o.constructor) n = o.constructor.name;
if (n === "Map" || n === "Set") return Array.from(o);
if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
}
function _arrayLikeToArray(arr, len) {
if (len == null || len > arr.length) len = arr.length;
for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];
return arr2;
}
function _nonIterableSpread() {
throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
}

var addClass = function addClass(element, customClass) {
if (customClass) {
var _element$classList;
(_element$classList = element.classList).add.apply(_element$classList, _toConsumableArray(customClass.split(' ')));
}
};
var removeClass = function removeClass(element, customClass) {
if (customClass) {
var _element$classList2;
(_element$classList2 = element.classList).remove.apply(_element$classList2, _toConsumableArray(customClass.split(' ')));
}
};

ClientSideValidations.formBuilders['SimpleForm::FormBuilder'] = {
add: function add($element, settings, message) {
this.wrapper(settings.wrapper).add.call(this, $element, settings, message);
this.wrapper(settings.wrapper).add.call(this, $element[0], settings, message);
},
remove: function remove($element, settings) {
this.wrapper(settings.wrapper).remove.call(this, $element, settings);
this.wrapper(settings.wrapper).remove.call(this, $element[0], settings);
},
wrapper: function wrapper(name) {
return this.wrappers[name] || this.wrappers.default;
},
wrappers: {
default: {
add: function add($element, settings, message) {
var $wrapperElement = $element.parent();
var $errorElement = $wrapperElement.find("".concat(settings.error_tag, ".invalid-feedback"));
if (!$errorElement.length) {
var $formTextElement = $wrapperElement.find('.form-text');
$errorElement = jQuery("<".concat(settings.error_tag, ">"), {
class: 'invalid-feedback',
text: message
});
if ($formTextElement.length) {
$formTextElement.before($errorElement);
add: function add(element, settings, message) {
var wrapperElement = element.parentElement;
var errorElement = wrapperElement.querySelector("".concat(settings.error_tag, ".invalid-feedback"));
if (!errorElement) {
var formTextElement = wrapperElement.querySelector('.form-text');
errorElement = document.createElement(settings.error_tag);
addClass(errorElement, 'invalid-feedback');
errorElement.textContent = message;
if (formTextElement) {
formTextElement.before(errorElement);
} else {
$wrapperElement.append($errorElement);
wrapperElement.appendChild(errorElement);
}
}
$wrapperElement.addClass(settings.wrapper_error_class);
$element.addClass('is-invalid');
$errorElement.text(message);
addClass(wrapperElement, settings.wrapper_error_class);
addClass(element, 'is-invalid');
errorElement.textContent = message;
},
remove: function remove($element, settings) {
var $wrapperElement = $element.parent();
var $errorElement = $wrapperElement.find("".concat(settings.error_tag, ".invalid-feedback"));
$wrapperElement.removeClass(settings.wrapper_error_class);
$element.removeClass('is-invalid');
$errorElement.remove();
remove: function remove(element, settings) {
var wrapperElement = element.parentElement;
var errorElement = wrapperElement.querySelector("".concat(settings.error_tag, ".invalid-feedback"));
removeClass(wrapperElement, settings.wrapper_error_class);
removeClass(element, 'is-invalid');
if (errorElement) {
errorElement.remove();
}
}
}
}
Expand Down
96 changes: 68 additions & 28 deletions dist/simple-form.bootstrap4.js
Original file line number Diff line number Diff line change
@@ -1,52 +1,92 @@
/*!
* Client Side Validations Simple Form JS (Bootstrap 4+) - v0.3.1 (https://github.com/DavyJonesLocker/client_side_validations-simple_form)
* Client Side Validations Simple Form JS (Bootstrap 4+) - v0.4.0 (https://github.com/DavyJonesLocker/client_side_validations-simple_form)
* Copyright (c) 2023 Geremia Taglialatela, Brian Cardarella
* Licensed under MIT (https://opensource.org/licenses/mit-license.php)
*/

(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('jquery'), require('@client-side-validations/client-side-validations')) :
typeof define === 'function' && define.amd ? define(['jquery', '@client-side-validations/client-side-validations'], factory) :
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.jQuery, global.ClientSideValidations));
})(this, (function (jQuery, ClientSideValidations) { 'use strict';
typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('@client-side-validations/client-side-validations')) :
typeof define === 'function' && define.amd ? define(['@client-side-validations/client-side-validations'], factory) :
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.ClientSideValidations));
})(this, (function (ClientSideValidations) { 'use strict';

function _toConsumableArray(arr) {
return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();
}
function _arrayWithoutHoles(arr) {
if (Array.isArray(arr)) return _arrayLikeToArray(arr);
}
function _iterableToArray(iter) {
if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter);
}
function _unsupportedIterableToArray(o, minLen) {
if (!o) return;
if (typeof o === "string") return _arrayLikeToArray(o, minLen);
var n = Object.prototype.toString.call(o).slice(8, -1);
if (n === "Object" && o.constructor) n = o.constructor.name;
if (n === "Map" || n === "Set") return Array.from(o);
if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
}
function _arrayLikeToArray(arr, len) {
if (len == null || len > arr.length) len = arr.length;
for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];
return arr2;
}
function _nonIterableSpread() {
throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
}

var addClass = function addClass(element, customClass) {
if (customClass) {
var _element$classList;
(_element$classList = element.classList).add.apply(_element$classList, _toConsumableArray(customClass.split(' ')));
}
};
var removeClass = function removeClass(element, customClass) {
if (customClass) {
var _element$classList2;
(_element$classList2 = element.classList).remove.apply(_element$classList2, _toConsumableArray(customClass.split(' ')));
}
};

ClientSideValidations.formBuilders['SimpleForm::FormBuilder'] = {
add: function add($element, settings, message) {
this.wrapper(settings.wrapper).add.call(this, $element, settings, message);
this.wrapper(settings.wrapper).add.call(this, $element[0], settings, message);
},
remove: function remove($element, settings) {
this.wrapper(settings.wrapper).remove.call(this, $element, settings);
this.wrapper(settings.wrapper).remove.call(this, $element[0], settings);
},
wrapper: function wrapper(name) {
return this.wrappers[name] || this.wrappers.default;
},
wrappers: {
default: {
add: function add($element, settings, message) {
var $wrapperElement = $element.parent();
var $errorElement = $wrapperElement.find("".concat(settings.error_tag, ".invalid-feedback"));
if (!$errorElement.length) {
var $formTextElement = $wrapperElement.find('.form-text');
$errorElement = jQuery("<".concat(settings.error_tag, ">"), {
class: 'invalid-feedback',
text: message
});
if ($formTextElement.length) {
$formTextElement.before($errorElement);
add: function add(element, settings, message) {
var wrapperElement = element.parentElement;
var errorElement = wrapperElement.querySelector("".concat(settings.error_tag, ".invalid-feedback"));
if (!errorElement) {
var formTextElement = wrapperElement.querySelector('.form-text');
errorElement = document.createElement(settings.error_tag);
addClass(errorElement, 'invalid-feedback');
errorElement.textContent = message;
if (formTextElement) {
formTextElement.before(errorElement);
} else {
$wrapperElement.append($errorElement);
wrapperElement.appendChild(errorElement);
}
}
$wrapperElement.addClass(settings.wrapper_error_class);
$element.addClass('is-invalid');
$errorElement.text(message);
addClass(wrapperElement, settings.wrapper_error_class);
addClass(element, 'is-invalid');
errorElement.textContent = message;
},
remove: function remove($element, settings) {
var $wrapperElement = $element.parent();
var $errorElement = $wrapperElement.find("".concat(settings.error_tag, ".invalid-feedback"));
$wrapperElement.removeClass(settings.wrapper_error_class);
$element.removeClass('is-invalid');
$errorElement.remove();
remove: function remove(element, settings) {
var wrapperElement = element.parentElement;
var errorElement = wrapperElement.querySelector("".concat(settings.error_tag, ".invalid-feedback"));
removeClass(wrapperElement, settings.wrapper_error_class);
removeClass(element, 'is-invalid');
if (errorElement) {
errorElement.remove();
}
}
}
}
Expand Down
79 changes: 59 additions & 20 deletions dist/simple-form.esm.js
Original file line number Diff line number Diff line change
@@ -1,42 +1,81 @@
/*!
* Client Side Validations Simple Form JS (Default) - v0.3.1 (https://github.com/DavyJonesLocker/client_side_validations-simple_form)
* Client Side Validations Simple Form JS (Default) - v0.4.0 (https://github.com/DavyJonesLocker/client_side_validations-simple_form)
* Copyright (c) 2023 Geremia Taglialatela, Brian Cardarella
* Licensed under MIT (https://opensource.org/licenses/mit-license.php)
*/

import jQuery from 'jquery';
import ClientSideValidations from '@client-side-validations/client-side-validations';

function _toConsumableArray(arr) {
return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();
}
function _arrayWithoutHoles(arr) {
if (Array.isArray(arr)) return _arrayLikeToArray(arr);
}
function _iterableToArray(iter) {
if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter);
}
function _unsupportedIterableToArray(o, minLen) {
if (!o) return;
if (typeof o === "string") return _arrayLikeToArray(o, minLen);
var n = Object.prototype.toString.call(o).slice(8, -1);
if (n === "Object" && o.constructor) n = o.constructor.name;
if (n === "Map" || n === "Set") return Array.from(o);
if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
}
function _arrayLikeToArray(arr, len) {
if (len == null || len > arr.length) len = arr.length;
for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];
return arr2;
}
function _nonIterableSpread() {
throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
}

var addClass = function addClass(element, customClass) {
if (customClass) {
var _element$classList;
(_element$classList = element.classList).add.apply(_element$classList, _toConsumableArray(customClass.split(' ')));
}
};
var removeClass = function removeClass(element, customClass) {
if (customClass) {
var _element$classList2;
(_element$classList2 = element.classList).remove.apply(_element$classList2, _toConsumableArray(customClass.split(' ')));
}
};

ClientSideValidations.formBuilders['SimpleForm::FormBuilder'] = {
add: function add($element, settings, message) {
this.wrapper(settings.wrapper).add.call(this, $element, settings, message);
this.wrapper(settings.wrapper).add.call(this, $element[0], settings, message);
},
remove: function remove($element, settings) {
this.wrapper(settings.wrapper).remove.call(this, $element, settings);
this.wrapper(settings.wrapper).remove.call(this, $element[0], settings);
},
wrapper: function wrapper(name) {
return this.wrappers[name] || this.wrappers.default;
},
wrappers: {
default: {
add: function add($element, settings, message) {
var $wrapperElement = $element.closest("".concat(settings.wrapper_tag, ".").concat(settings.wrapper_class.replace(/ /g, '.')));
var $errorElement = $wrapperElement.find("".concat(settings.error_tag, ".").concat(settings.error_class.replace(/ /g, '.')));
if (!$errorElement.length) {
$errorElement = jQuery("<".concat(settings.error_tag, ">"), {
class: settings.error_class,
text: message
});
$wrapperElement.append($errorElement);
add: function add(element, settings, message) {
var wrapperElement = element.closest("".concat(settings.wrapper_tag, ".").concat(settings.wrapper_class.replace(/ /g, '.')));
var errorElement = wrapperElement.querySelector("".concat(settings.error_tag, ".").concat(settings.error_class.replace(/ /g, '.')));
if (!errorElement) {
errorElement = document.createElement(settings.error_tag);
addClass(errorElement, settings.error_class);
errorElement.textContent = message;
wrapperElement.appendChild(errorElement);
}
$wrapperElement.addClass(settings.wrapper_error_class);
$errorElement.text(message);
addClass(wrapperElement, settings.wrapper_error_class);
errorElement.textContent = message;
},
remove: function remove($element, settings) {
var $wrapperElement = $element.closest("".concat(settings.wrapper_tag, ".").concat(settings.wrapper_class.replace(/ /g, '.'), ".").concat(settings.wrapper_error_class));
var $errorElement = $wrapperElement.find("".concat(settings.error_tag, ".").concat(settings.error_class.replace(/ /g, '.')));
$wrapperElement.removeClass(settings.wrapper_error_class);
$errorElement.remove();
remove: function remove(element, settings) {
var wrapperElement = element.closest("".concat(settings.wrapper_tag, ".").concat(settings.wrapper_class.replace(/ /g, '.')));
var errorElement = wrapperElement.querySelector("".concat(settings.error_tag, ".").concat(settings.error_class.replace(/ /g, '.')));
removeClass(wrapperElement, settings.wrapper_error_class);
if (errorElement) {
errorElement.remove();
}
}
}
}
Expand Down
Loading

0 comments on commit f99aa9f

Please sign in to comment.