function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function (obj) { return typeof obj; }; } else { _typeof = function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); } function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); } function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) arr2[i] = arr[i]; return arr2; } } function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } function _iterableToArray(iter) { if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter); } function _iterableToArrayLimit(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance"); } function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } function convertToString(content, type) { switch (_typeof(content)) { case 'object': { if (!content) { throw new TypeError('Cannot supply `null`'); } switch (content.nodeType) { case 1: { // ELEMENT return content.outerHTML; } case 3: { // TEXT return content.nodeValue; } case 11: { // DOCUMENT_FRAGMENT_NODE return _toConsumableArray(content.childNodes).reduce(function (s, node) { return s + convertToString(node, type); }, ''); } case undefined: { // Array of nodes, QueryResult objects // if (Array.isArray(content)) { if (typeof content.reduce === 'function') { return content.reduce(function (s, node) { return s + convertToString(node, type); }, ''); } } } return; } case 'string': { return content; } default: throw new TypeError('Bad content for ' + type + '; type: ' + _typeof(content)); } } function convertToDOM(content, type, avoidClone) { switch (_typeof(content)) { case 'object': { if (!content) { throw new TypeError('Cannot supply `null`'); } if ([1, // ELEMENT 3, // TEXT 11 // Document fragment ].includes(content.nodeType)) { return avoidClone ? content : content.cloneNode(true); } if (typeof content.reduce !== 'function') { throw new TypeError('Unrecognized type of object for conversion to DOM'); } // Array of nodes, QueryResult objects return avoidClone ? content : content.map(function (node) { if (!node || !node.cloneNode) { // Allows for arrays of HTML strings return convertToDOM(node, type, false); } return node.cloneNode(true); }); } case 'string': { var div = document.createElement('div'); div.innerHTML = content; return div.firstElementChild || div.firstChild; } default: throw new TypeError('Bad content for ' + type + '; type: ' + _typeof(content)); } } function insert(type) { return function () { var _this = this; for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } var cbOrContent = args[0]; switch (_typeof(cbOrContent)) { case 'function': { this.forEach(function (node, i) { var ret = cbOrContent.call(_this, i, node.textContent); node[type](ret); }); break; } default: { this.forEach(function (node, i, arr) { node[type].apply(node, _toConsumableArray(args.flatMap(function (content) { return convertToDOM(content, type, i === arr.length - 1); }))); }); break; } } return this; }; } function insertText(type) { return function (cbOrContent) { var _this2 = this; switch (_typeof(cbOrContent)) { case 'function': { this.forEach(function (node, i) { var ret = cbOrContent.call(_this2, i, node[type]); node[type] = convertToString(ret, type); }); break; } default: { this.forEach(function (node) { node[type] = convertToString(cbOrContent, type); }); break; } } return this; }; } var after = insert('after'); var before = insert('before'); var append = insert('append'); var prepend = insert('prepend'); var html = insertText('innerHTML'); var text = insertText('textContent'); /* // Todo: export const val = function (valueOrFunc) { }; */ // Given that these types require a selector engine and // in order to avoid the absence of optimization of `document.querySelectorAll` // for `:first-child` and different behavior in different contexts, // and to avoid making a mutual dependency with query-result, // exports of this type accept a QueryResult instance; // if selected without a second argument, we do default to // `document.querySelectorAll`, however. var insertTo = function insertTo(method) { var $ = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function (sel) { return _toConsumableArray(document.querySelectorAll(sel)); }; var type = { appendTo: 'append', prependTo: 'prepend', insertAfter: 'after', insertBefore: 'before' }[method] || 'append'; return function (target) { var toType = type + 'To'; this.forEach(function (node, i, arr) { if (typeof target === 'string' && target.charAt(0) !== '<') { target = $(target); } target = Array.isArray(target) ? target : [target]; node[type].apply(node, _toConsumableArray(target.flatMap(function (content) { return convertToDOM(content, toType, i === arr.length - 1); }))); }); return this; }; }; // Todo: optional `withDataAndEvents` and `deepWithDataAndEvents` arguments? var clone = function clone() { return this.map(function (node) { // Still a QueryResult with such a map return node.cloneNode(true); }); }; var empty = function empty() { this.forEach(function (node) { node.textContent = ''; }); }; var remove = function remove(selector) { if (selector) { this.forEach(function (node) { if (node.matches(selector)) { // Todo: Use query-result instead? node.remove(); } }); } else { this.forEach(function (node) { node.remove(); }); } return this; }; /* // Todo: export const detach = function (selector) { // Should preserve attached data return remove(selector); }; */ var attr = function attr(attributeNameOrAtts, valueOrCb) { var _this3 = this; if (valueOrCb === undefined) { switch (_typeof(attributeNameOrAtts)) { case 'string': { return this[0].hasAttribute(attributeNameOrAtts) ? this[0].getAttribute(attributeNameOrAtts) : undefined; } case 'object': { if (attributeNameOrAtts) { this.forEach(function (node, i) { Object.entries(attributeNameOrAtts).forEach(function (_ref) { var _ref2 = _slicedToArray(_ref, 2), att = _ref2[0], val = _ref2[1]; node.setAttribute(att, val); }); }); return this; } } // Fallthrough default: { throw new TypeError('Unexpected type for attribute name: ' + _typeof(attributeNameOrAtts)); } } } switch (_typeof(valueOrCb)) { case 'function': { this.forEach(function (node, i) { var ret = valueOrCb.call(_this3, i, node.getAttribute(valueOrCb)); if (ret === null) { node.removeAttribute(attributeNameOrAtts); } else { node.setAttribute(attributeNameOrAtts, ret); } }); break; } case 'string': { this.forEach(function (node, i) { node.setAttribute(attributeNameOrAtts, valueOrCb); }); break; } case 'object': { if (!valueOrCb) { // `null` return removeAttr.call(this, attributeNameOrAtts); } } // Fallthrough default: { throw new TypeError('Unexpected type for attribute name: ' + _typeof(attributeNameOrAtts)); } } return this; }; var removeAttr = function removeAttr(attributeName) { if (typeof attributeName !== 'string') { throw new TypeError('Unexpected type for attribute name: ' + _typeof(attributeName)); } this.forEach(function (node) { node.removeAttribute(attributeName); }); }; function classAttManipulation(type) { return function (cbOrContent) { var _this4 = this; switch (_typeof(cbOrContent)) { case 'function': { this.forEach(function (node, i) { var _node$classList; var ret = cbOrContent.call(_this4, i, node.className); (_node$classList = node.classList)[type].apply(_node$classList, _toConsumableArray(ret.split(' '))); }); break; } default: { if (type === 'remove' && !cbOrContent) { this.forEach(function (node) { node.className = ''; }); break; } this.forEach(function (node) { var _node$classList2; (_node$classList2 = node.classList)[type].apply(_node$classList2, _toConsumableArray(cbOrContent.split(' '))); }); break; } } return this; }; } var addClass = classAttManipulation('add'); var removeClass = classAttManipulation('remove'); var hasClass = function hasClass(className) { return this.some(function (node) { return node.classList.contains(className); }); }; var toggleClass = function toggleClass(classNameOrCb, state) { var _this5 = this; switch (typeof cbOrContent === "undefined" ? "undefined" : _typeof(cbOrContent)) { case 'function': { if (typeof state === 'boolean') { this.forEach(function (node, i) { var _node$classList3; var ret = classNameOrCb.call(_this5, i, node.className, state); (_node$classList3 = node.classList).toggle.apply(_node$classList3, _toConsumableArray(ret.split(' ')).concat([state])); }); } else { this.forEach(function (node, i) { var _node$classList4; var ret = classNameOrCb.call(_this5, i, node.className, state); (_node$classList4 = node.classList).toggle.apply(_node$classList4, _toConsumableArray(ret.split(' '))); }); } break; } case 'string': { if (typeof state === 'boolean') { this.forEach(function (node) { var _node$classList5; (_node$classList5 = node.classList).toggle.apply(_node$classList5, _toConsumableArray(classNameOrCb.split(' ')).concat([state])); }); } else { this.forEach(function (node) { var _node$classList6; (_node$classList6 = node.classList).toggle.apply(_node$classList6, _toConsumableArray(classNameOrCb.split(' '))); }); } break; } } }; var methods = { after: after, before: before, append: append, prepend: prepend, html: html, text: text, clone: clone, empty: empty, remove: remove, // detach attr: attr, removeAttr: removeAttr, addClass: addClass, hasClass: hasClass, removeClass: removeClass, toggleClass: toggleClass }; var manipulation = function manipulation($, jml) { ['after', 'before', 'append', 'prepend', 'html', 'text', 'clone', 'empty', 'remove', // 'detach' 'attr', 'removeAttr', 'addClass', 'hasClass', 'removeClass', 'toggleClass'].forEach(function (method) { $.extend(method, methods[method]); }); ['appendTo', 'prependTo', 'insertAfter', 'insertBefore'].forEach(function (method) { $.extend(method, insertTo(method, $)); }); if (jml) { $.extend('jml', function () { var _this6 = this; for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { args[_key2] = arguments[_key2]; } this.forEach(function (node) { while (node.hasChildNodes()) { node.firstChild.remove(); } var n = jml.apply(void 0, args); return append.call(_this6, n); }); }); } return $; }; export { after, before, append, prepend, html, text, insertTo, clone, empty, remove, attr, removeAttr, addClass, removeClass, hasClass, toggleClass, manipulation };