easy-toggler
Advanced tools
Comparing version 2.2.2 to 2.2.3
@@ -6,3 +6,3 @@ /** | ||
import testDom from './test-dom'; | ||
import easySetup from '../dist/easy-toggler.es'; | ||
import easySetup from '../dist/easy-toggler'; | ||
@@ -9,0 +9,0 @@ easySetup({ |
/*! | ||
* EasyToggler v2.2.2 (https://github.com/rah-emil/easy-toggler#readme) | ||
* EasyToggler v2.2.3 (https://github.com/rah-emil/easy-toggler#readme) | ||
* Copyright 2022 Rah Emil <013131@mail.ru> | ||
* Licensed under MIT (https://github.com/rah-emil/easy-toggler/blob/master/LICENSE) | ||
*/ | ||
(function (factory) { | ||
typeof define === 'function' && define.amd ? define(factory) : | ||
factory(); | ||
})((function () { 'use strict'; | ||
const toggle = ($toggler, attrs) => { | ||
attrs.onToggle($toggler); | ||
const toggle = ($toggler, attrs) => { | ||
attrs.onToggle($toggler); | ||
const _target = $toggler.getAttribute(attrs.toggle); | ||
const _target = $toggler.getAttribute(attrs.toggle); | ||
document.querySelectorAll(`[${attrs.toggle}]`).forEach(easyBlock => { | ||
if (!easyBlock.hasAttribute(attrs.parallel) && easyBlock !== $toggler) { | ||
document.querySelector(easyBlock.getAttribute(attrs.toggle)).classList.remove(easyBlock.getAttribute(attrs.class)); | ||
document.querySelectorAll(`[${attrs.toggle}]`).forEach(easyBlock => { | ||
if (!easyBlock.hasAttribute(attrs.parallel) && easyBlock !== $toggler) { | ||
document.querySelector(easyBlock.getAttribute(attrs.toggle)).classList.remove(easyBlock.getAttribute(attrs.class)); | ||
const _selfClass = $toggler.getAttribute(attrs.self); | ||
if (_selfClass) { | ||
$toggler.classList.remove(_selfClass); | ||
} | ||
} | ||
}); | ||
document.querySelector(_target)?.classList.toggle($toggler.getAttribute(attrs.class)); | ||
const _selfClass = $toggler.getAttribute(attrs.self); | ||
if (_selfClass) { | ||
$toggler.classList.toggle(_selfClass); | ||
$toggler.classList.remove(_selfClass); | ||
} | ||
}; | ||
} | ||
}); | ||
document.querySelector(_target)?.classList.toggle($toggler.getAttribute(attrs.class)); | ||
const add = ($add, attrs) => { | ||
attrs.onAdd($add); | ||
const _selfClass = $toggler.getAttribute(attrs.self); | ||
const _target = $add.getAttribute(attrs.add); | ||
if (_selfClass) { | ||
$toggler.classList.toggle(_selfClass); | ||
} | ||
}; | ||
const _class = $add.getAttribute(attrs.class); | ||
const add = ($add, attrs) => { | ||
attrs.onAdd($add); | ||
document.querySelectorAll(_target).forEach(easyBlock => { | ||
easyBlock.classList.add(_class); | ||
}); | ||
const _target = $add.getAttribute(attrs.add); | ||
const _selfClass = $add.getAttribute(attrs.self); | ||
const _class = $add.getAttribute(attrs.class); | ||
if (_selfClass) { | ||
$add.classList.add(_selfClass); | ||
} | ||
}; | ||
document.querySelectorAll(_target).forEach(easyBlock => { | ||
easyBlock.classList.add(_class); | ||
}); | ||
const remove = ($remove, attrs) => { | ||
attrs.onRemove($remove); | ||
const _selfClass = $add.getAttribute(attrs.self); | ||
const _target = $remove.getAttribute(attrs.remove); | ||
if (_selfClass) { | ||
$add.classList.add(_selfClass); | ||
} | ||
}; | ||
const _class = $remove.getAttribute(attrs.class); | ||
const remove = ($remove, attrs) => { | ||
attrs.onRemove($remove); | ||
document.querySelectorAll(_target).forEach(easyBlock => { | ||
easyBlock.classList.remove(_class); | ||
}); | ||
const _target = $remove.getAttribute(attrs.remove); | ||
const _selfClass = $remove.getAttribute(attrs.self); | ||
const _class = $remove.getAttribute(attrs.class); | ||
if (_selfClass) { | ||
$remove.classList.remove(_selfClass); | ||
} | ||
}; | ||
document.querySelectorAll(_target).forEach(easyBlock => { | ||
easyBlock.classList.remove(_class); | ||
}); | ||
const rcoes = (e, attrs) => { | ||
const $rcoes = document.querySelectorAll(`[${attrs.rcoe}]`); | ||
Array.from($rcoes).forEach($rcoe => { | ||
let block = $rcoe.getAttribute(attrs.toggle); | ||
let block_class = $rcoe.getAttribute(attrs.class); | ||
const _selfClass = $remove.getAttribute(attrs.self); | ||
if (!e.target.closest(block)) { | ||
attrs.onRcoe($rcoe); | ||
document.querySelector(block)?.classList.remove(block_class); | ||
if (_selfClass) { | ||
$remove.classList.remove(_selfClass); | ||
} | ||
}; | ||
const _selfClass = $rcoe.getAttribute(attrs.self); | ||
const rcoes = (e, attrs) => { | ||
const $rcoes = document.querySelectorAll(`[${attrs.rcoe}]`); | ||
Array.from($rcoes).forEach($rcoe => { | ||
let block = $rcoe.getAttribute(attrs.toggle); | ||
let block_class = $rcoe.getAttribute(attrs.class); | ||
if (_selfClass) { | ||
$rcoe.classList.remove(_selfClass); | ||
} | ||
} | ||
}); | ||
}; | ||
if (!e.target.closest(block)) { | ||
attrs.onRcoe($rcoe); | ||
document.querySelector(block)?.classList.remove(block_class); | ||
function easyTogglerHandler(e, attrs) { | ||
const $toggler = e.target.closest(`[${attrs.toggle}]`); | ||
const $remove = e.target.closest(`[${attrs.remove}]`); | ||
const $add = e.target.closest(`[${attrs.add}]`); | ||
const _selfClass = $rcoe.getAttribute(attrs.self); | ||
if ($toggler) { | ||
e.preventDefault(); | ||
toggle($toggler, attrs); | ||
if (_selfClass) { | ||
$rcoe.classList.remove(_selfClass); | ||
} | ||
} | ||
}); | ||
}; | ||
if ($remove) { | ||
e.preventDefault(); | ||
remove($remove, attrs); | ||
} | ||
function easyTogglerHandler(e, attrs) { | ||
const $toggler = e.target.closest(`[${attrs.toggle}]`); | ||
const $remove = e.target.closest(`[${attrs.remove}]`); | ||
const $add = e.target.closest(`[${attrs.add}]`); | ||
if ($add) { | ||
e.preventDefault(); | ||
add($add, attrs); | ||
} | ||
if ($toggler) { | ||
e.preventDefault(); | ||
toggle($toggler, attrs); | ||
} | ||
if (!$toggler && !$remove && !$add) { | ||
rcoes(e, attrs); | ||
} | ||
} | ||
if ($remove) { | ||
e.preventDefault(); | ||
remove($remove, attrs); | ||
} | ||
const attrsDefault = { | ||
toggle: 'easy-toggle', | ||
add: 'easy-add', | ||
remove: 'easy-remove', | ||
class: 'easy-class', | ||
rcoe: 'easy-rcoe', | ||
parallel: 'easy-parallel', | ||
self: 'easy-self', | ||
selfRcoe: 'easy-self-rcoe', | ||
if ($add) { | ||
e.preventDefault(); | ||
add($add, attrs); | ||
} | ||
// Hooks | ||
onToggle($el) {}, | ||
if (!$toggler && !$remove && !$add) { | ||
rcoes(e, attrs); | ||
} | ||
} | ||
onAdd($el) {}, | ||
const attrsDefault = { | ||
toggle: 'easy-toggle', | ||
add: 'easy-add', | ||
remove: 'easy-remove', | ||
class: 'easy-class', | ||
rcoe: 'easy-rcoe', | ||
parallel: 'easy-parallel', | ||
self: 'easy-self', | ||
selfRcoe: 'easy-self-rcoe', | ||
onRemove($el) {}, | ||
// Hooks | ||
onToggle($el) {}, | ||
onRcoe($el) {} | ||
onAdd($el) {}, | ||
}; | ||
onRemove($el) {}, | ||
document.addEventListener('DOMContentLoaded', () => { | ||
document.addEventListener('click', e => { | ||
easyTogglerHandler(e, attrsDefault); | ||
}); | ||
}); | ||
onRcoe($el) {} | ||
})); | ||
}; | ||
/** | ||
* Setup easyToggler plugin | ||
* with custom attributes | ||
* @param params<Object> | ||
*/ | ||
const easySetup = params => { | ||
const customAttrs = { ...attrsDefault, | ||
...params | ||
}; | ||
document.addEventListener('click', e => { | ||
easyTogglerHandler(e, customAttrs); | ||
}); | ||
}; | ||
export { easySetup as default }; | ||
//# sourceMappingURL=easy-toggler.js.map |
/*! | ||
* EasyToggler v2.2.2 (https://github.com/rah-emil/easy-toggler#readme) | ||
* EasyToggler v2.2.3 (https://github.com/rah-emil/easy-toggler#readme) | ||
* Copyright 2022 Rah Emil <013131@mail.ru> | ||
* Licensed under MIT (https://github.com/rah-emil/easy-toggler/blob/master/LICENSE) | ||
*/ | ||
!function(e){"function"==typeof define&&define.amd?define(e):e()}((function(){"use strict";function e(e,t){const s=e.target.closest(`[${t.toggle}]`),o=e.target.closest(`[${t.remove}]`),l=e.target.closest(`[${t.add}]`);s&&(e.preventDefault(),((e,t)=>{t.onToggle(e);const s=e.getAttribute(t.toggle);document.querySelectorAll(`[${t.toggle}]`).forEach((s=>{if(!s.hasAttribute(t.parallel)&&s!==e){document.querySelector(s.getAttribute(t.toggle)).classList.remove(s.getAttribute(t.class));const o=e.getAttribute(t.self);o&&e.classList.remove(o)}})),document.querySelector(s)?.classList.toggle(e.getAttribute(t.class));const o=e.getAttribute(t.self);o&&e.classList.toggle(o)})(s,t)),o&&(e.preventDefault(),((e,t)=>{t.onRemove(e);const s=e.getAttribute(t.remove),o=e.getAttribute(t.class);document.querySelectorAll(s).forEach((e=>{e.classList.remove(o)}));const l=e.getAttribute(t.self);l&&e.classList.remove(l)})(o,t)),l&&(e.preventDefault(),((e,t)=>{t.onAdd(e);const s=e.getAttribute(t.add),o=e.getAttribute(t.class);document.querySelectorAll(s).forEach((e=>{e.classList.add(o)}));const l=e.getAttribute(t.self);l&&e.classList.add(l)})(l,t)),s||o||l||((e,t)=>{const s=document.querySelectorAll(`[${t.rcoe}]`);Array.from(s).forEach((s=>{let o=s.getAttribute(t.toggle),l=s.getAttribute(t.class);if(!e.target.closest(o)){t.onRcoe(s),document.querySelector(o)?.classList.remove(l);const e=s.getAttribute(t.self);e&&s.classList.remove(e)}}))})(e,t)}const t={toggle:"easy-toggle",add:"easy-add",remove:"easy-remove",class:"easy-class",rcoe:"easy-rcoe",parallel:"easy-parallel",self:"easy-self",selfRcoe:"easy-self-rcoe",onToggle(e){},onAdd(e){},onRemove(e){},onRcoe(e){}};document.addEventListener("DOMContentLoaded",(()=>{document.addEventListener("click",(s=>{e(s,t)}))}))})); | ||
function e(e,t){const s=e.target.closest(`[${t.toggle}]`),o=e.target.closest(`[${t.remove}]`),l=e.target.closest(`[${t.add}]`);s&&(e.preventDefault(),((e,t)=>{t.onToggle(e);const s=e.getAttribute(t.toggle);document.querySelectorAll(`[${t.toggle}]`).forEach((s=>{if(!s.hasAttribute(t.parallel)&&s!==e){document.querySelector(s.getAttribute(t.toggle)).classList.remove(s.getAttribute(t.class));const o=e.getAttribute(t.self);o&&e.classList.remove(o)}})),document.querySelector(s)?.classList.toggle(e.getAttribute(t.class));const o=e.getAttribute(t.self);o&&e.classList.toggle(o)})(s,t)),o&&(e.preventDefault(),((e,t)=>{t.onRemove(e);const s=e.getAttribute(t.remove),o=e.getAttribute(t.class);document.querySelectorAll(s).forEach((e=>{e.classList.remove(o)}));const l=e.getAttribute(t.self);l&&e.classList.remove(l)})(o,t)),l&&(e.preventDefault(),((e,t)=>{t.onAdd(e);const s=e.getAttribute(t.add),o=e.getAttribute(t.class);document.querySelectorAll(s).forEach((e=>{e.classList.add(o)}));const l=e.getAttribute(t.self);l&&e.classList.add(l)})(l,t)),s||o||l||((e,t)=>{const s=document.querySelectorAll(`[${t.rcoe}]`);Array.from(s).forEach((s=>{let o=s.getAttribute(t.toggle),l=s.getAttribute(t.class);if(!e.target.closest(o)){t.onRcoe(s),document.querySelector(o)?.classList.remove(l);const e=s.getAttribute(t.self);e&&s.classList.remove(e)}}))})(e,t)}const t={toggle:"easy-toggle",add:"easy-add",remove:"easy-remove",class:"easy-class",rcoe:"easy-rcoe",parallel:"easy-parallel",self:"easy-self",selfRcoe:"easy-self-rcoe",onToggle(e){},onAdd(e){},onRemove(e){},onRcoe(e){}},s=s=>{const o={...t,...s};document.addEventListener("click",(t=>{e(t,o)}))};export{s as default}; | ||
//# sourceMappingURL=easy-toggler.min.js.map |
{ | ||
"name": "easy-toggler", | ||
"version": "2.2.2", | ||
"version": "2.2.3", | ||
"description": "Simple class switcher on web elements. JavaScript only.", | ||
"main": "dist/easy-toggler.cjs", | ||
"module": "dist/easy-toggler.es.js", | ||
"jsdelivr": "dist/easy-toggler.umd.min.js", | ||
"umd:main": "dist/easy-toggler.umd.js", | ||
"cdn": "dist/easy-toggler.umd.min.js", | ||
"module": "dist/easy-toggler.js", | ||
"jsdelivr": "dist/easy-toggler.iife.min.js", | ||
"umd:main": "dist/easy-toggler.iife.js", | ||
"cdn": "dist/easy-toggler.iife.min.js", | ||
"scripts": { | ||
"test": "jest", | ||
"cover": "jest --coverage", | ||
"lint": "eslint src/easy-toggler.es.js src/easy-toggler.umd.js", | ||
"lint": "eslint src/easy-toggler.js src/easy-toggler.iife.js", | ||
"build": "rollup --config --sourcemap" | ||
@@ -15,0 +15,0 @@ }, |
@@ -7,6 +7,23 @@ # EasyToggler.js 🔗🚀 | ||
 | ||
 | ||
[](https://www.jsdelivr.com/package/npm/easy-toggler) | ||
Simple class switcher on web elements. JavaScript only. | ||
 | ||
## Use a plugin instead of JavaScript | ||
```html | ||
<!-- js: menu.classList.toggle('active') --> | ||
<button easy-toggle="#target" easy-class="active">Toggle class</button> | ||
<!-- js: menu.classList.add('active') --> | ||
<button easy-add="#target" easy-class="active">Add class</button> | ||
<!-- js: menu.classList.remove('active') --> | ||
<button easy-remove="#target" easy-class="active">Remove class</button> | ||
<!-- js: menu.classList.toggle('active') + work with e.closest() --> | ||
<button easy-toggle="#target" easy-class="active" easy-rcoe>Removing a class if we click on an empty space</button> | ||
``` | ||
## Import EasyToggler | ||
@@ -41,3 +58,2 @@ ### ES | ||
import easySetup from "easy-toggler"; | ||
easySetup(); | ||
@@ -47,5 +63,5 @@ </script> | ||
### UMD (+ jsDelivr) | ||
### CDN jsDelivr | ||
```html | ||
<script src="https://cdn.jsdelivr.net/npm/easy-toggler@2.2.0/dist/easy-toggler.min.js"></script> | ||
<script src="https://cdn.jsdelivr.net/npm/easy-toggler@2.2.3/dist/easy-toggler.iife.min.js"></script> | ||
``` | ||
@@ -55,3 +71,3 @@ ### CJS | ||
<script type="module"> | ||
const easySetup = require("easy-toggler.cjs"); | ||
const easySetup = require("easy-toggler"); | ||
@@ -80,4 +96,3 @@ easySetup({ | ||
<script type="module"> | ||
import easySetup from "easy-toggler"; | ||
const easySetup = require("easy-toggler"); | ||
easySetup(); | ||
@@ -87,3 +102,6 @@ </script> | ||
## Example №1 | ||
## Demo | ||
Visit demo page: [rah-emil.ru/easy-toggler](https://rah-emil.ru/easy-toggler) | ||
### Example №1 | ||
When you click the button, the class ```show``` will be added to ```<nav id="main_menu">``` | ||
@@ -104,3 +122,3 @@ ```html | ||
## Example №2 | ||
### Example №2 | ||
When you click the button, the class ```open``` will be added to ```<div id="categories" class="dropdown-menu">```. When clicking outside the element area, class ```open``` will be deleted from ```<div id="categories" class="dropdown-menu">```, since we specified the ```easy-rcoe``` attribute for the link. | ||
@@ -139,4 +157,1 @@ ```html | ||
- **onRcoe($el)** - hook before rcoe action | ||
## Contributing | ||
The author will be grateful to all developers for any suggestions to improve the plugin. Fork and submit pull requests. Thank you! |
@@ -20,4 +20,4 @@ import path from 'path'; | ||
const pathCore = path.join(__dirname, 'src/easy-toggler.es.js'); | ||
const pathCoreUmd = path.join(__dirname, 'src/easy-toggler.umd.js'); | ||
const pathCore = path.join(__dirname, 'src/easy-toggler.js'); | ||
const pathCoreIife = path.join(__dirname, 'src/easy-toggler.iife.js'); | ||
@@ -29,4 +29,4 @@ const bundles = [ | ||
banner: getHeader(), | ||
file: path.join(__dirname, 'dist/easy-toggler.es.js'), | ||
format: 'esm', | ||
file: path.join(__dirname, 'dist/easy-toggler.js'), | ||
format: 'es', | ||
}, | ||
@@ -38,22 +38,20 @@ }, | ||
banner: getHeader(), | ||
file: path.join(__dirname, 'dist/easy-toggler.es.min.js'), | ||
format: 'esm', | ||
file: path.join(__dirname, 'dist/easy-toggler.min.js'), | ||
format: 'es', | ||
}, | ||
}, | ||
{ | ||
input: pathCoreUmd, | ||
input: pathCoreIife, | ||
output: { | ||
banner: getHeader(), | ||
name: 'easy-toggler', | ||
file: path.join(__dirname, 'dist/easy-toggler.js'), | ||
format: 'umd', | ||
file: path.join(__dirname, 'dist/easy-toggler.iife.js'), | ||
format: 'iife', | ||
}, | ||
}, | ||
{ | ||
input: pathCoreUmd, | ||
input: pathCoreIife, | ||
output: { | ||
banner: getHeader(), | ||
name: 'easy-toggler', | ||
file: path.join(__dirname, 'dist/easy-toggler.min.js'), | ||
format: 'umd', | ||
file: path.join(__dirname, 'dist/easy-toggler.iife.min.js'), | ||
format: 'iife', | ||
}, | ||
@@ -60,0 +58,0 @@ }, |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
860575
32
150
710