From dd5377d7326ddb383e4ac68ce2b3f58a36041515 Mon Sep 17 00:00:00 2001 From: Andros Fenollosa Date: Thu, 16 Jul 2020 00:58:17 +0200 Subject: [PATCH] Optional second param --- dist/ffnm.min.js | 2 +- src/core.js | 11 +++++------ test/i-click.html | 2 +- test/i-scroll.html | 2 +- 4 files changed, 8 insertions(+), 9 deletions(-) diff --git a/dist/ffnm.min.js b/dist/ffnm.min.js index 55c093b..ecf90e4 100644 --- a/dist/ffnm.min.js +++ b/dist/ffnm.min.js @@ -1,2 +1,2 @@ -document.addEventListener("DOMContentLoaded",()=>{const e={class:["add","remove","toggle"]};let c=[],t=void 0;function l(e,c){let t=e.getAttribute(c),l=RegExp("^(\\w+):").exec(t)[1],s=RegExp(":(\\w+)\\(").exec(t)[1],a=RegExp("\\('(\\w+)',").exec(t),o=null!==a?a.exec(t)[1]:void 0,r=RegExp(", *'([#,.,a-zA-Z]\\w*)'\\)").exec(t);return{functionParent:l,functionChild:s,value:o,target:null!==r?r.exec(t)[1]:void 0}}c=[],["i-click","i-scroll-up","i-scroll-down"].map(t=>[...document.querySelectorAll(`[${t}]`)].map(l=>{let s=Object.keys(e).map(c=>e[c].map(e=>RegExp(`^${c}:${e}\\('\\w+', *'[#,.,a-zA-Z]\\w*'\\)$`).test(l.getAttribute(t))).some(e=>e)).every(e=>e);return s?c.push(l):(console.error("FFNM: Bad syntax"),console.error(l)),s}).every(e=>e)).every(e=>e),[...document.querySelectorAll("[i-click]")].forEach(e=>{let c=l(e,"i-click");switch(c.functionParent){case"class":[...document.querySelectorAll(c.target)].forEach(t=>{e.addEventListener("click",()=>{switch(c.functionChild){case"add":t.classList.add(c.value);break;case"remove":t.classList.remove(c.value);break;case"toggle":t.classList.toggle(c.value)}})})}}),window.addEventListener("scroll",()=>{let e=window.pageYOffset||document.documentElement.scrollTop;[...document.querySelectorAll("[i-scroll-down]")].forEach(c=>{if(e>t){let e=l(c,"i-scroll-down");switch(e.functionParent){case"class":switch(e.functionChild){case"add":c.classList.add(e.value);break;case"remove":c.classList.remove(e.value)}}}}),[...document.querySelectorAll("[i-scroll-up]")].forEach(c=>{if(e<=t){let e=l(c,"i-scroll-up");switch(e.functionParent){case"class":switch(e.functionChild){case"add":c.classList.add(e.value);break;case"remove":c.classList.remove(e.value)}}}}),t=e<=0?0:e},!1)}); +document.addEventListener("DOMContentLoaded",()=>{const e={class:["add","remove","toggle"]};let c=[],t=void 0;function l(e,c){let t=e.getAttribute(c),l=RegExp("^(\\w+):").exec(t)[1],s=RegExp(":(\\w+)\\(").exec(t)[1],a=RegExp("\\('(\\w+)',?").exec(t)[1],o=RegExp(", *'([#,.,a-zA-Z]\\w*)'\\)");return{functionParent:l,functionChild:s,value:a,target:null!==o.exec(t)?o.exec(t)[1]:void 0}}c=[],["i-click","i-scroll-up","i-scroll-down"].map(t=>[...document.querySelectorAll(`[${t}]`)].map(l=>{let s=Object.keys(e).map(c=>e[c].map(e=>RegExp(`^${c}:${e}\\('\\w+'(, *'[#,.,a-zA-Z]\\w*')?\\)$`).test(l.getAttribute(t))).some(e=>e)).every(e=>e);return s?c.push(l):(console.error("FFNM: Bad syntax"),console.error(l)),s}).every(e=>e)).every(e=>e),[...document.querySelectorAll("[i-click]")].forEach(e=>{let c=l(e,"i-click");switch(c.functionParent){case"class":[...document.querySelectorAll(c.target)].concat(e).forEach(t=>{e.addEventListener("click",()=>{switch(c.functionChild){case"add":t.classList.add(c.value);break;case"remove":t.classList.remove(c.value);break;case"toggle":t.classList.toggle(c.value)}})})}}),window.addEventListener("scroll",()=>{let e=window.pageYOffset||document.documentElement.scrollTop;[...document.querySelectorAll("[i-scroll-down]")].forEach(c=>{if(e>t){let e=l(c,"i-scroll-down");switch(e.functionParent){case"class":switch(e.functionChild){case"add":c.classList.add(e.value);break;case"remove":c.classList.remove(e.value)}}}}),[...document.querySelectorAll("[i-scroll-up]")].forEach(c=>{if(e<=t){let e=l(c,"i-scroll-up");switch(e.functionParent){case"class":switch(e.functionChild){case"add":c.classList.add(e.value);break;case"remove":c.classList.remove(e.value)}}}}),t=e<=0?0:e},!1)}); //# sourceMappingURL=ffnm.min.js.map diff --git a/src/core.js b/src/core.js index b2b3557..4ed557b 100644 --- a/src/core.js +++ b/src/core.js @@ -28,7 +28,7 @@ document.addEventListener('DOMContentLoaded', () => { let checked = Object.keys(FUNCTION_TREE).map((key) => { // Check METHODS FUNCTION_TREE return FUNCTION_TREE[key].map((method) => { - return RegExp(`^${key}:${method}\\('\\w+', *'[#,.,a-zA-Z]\\w*'\\)$`).test(element.getAttribute(event)); + return RegExp(`^${key}:${method}\\('\\w+'(, *'[#,.,a-zA-Z]\\w*')?\\)$`).test(element.getAttribute(event)); }).some(method => method); }).every(key => key); if(checked) { @@ -54,10 +54,9 @@ document.addEventListener('DOMContentLoaded', () => { let params = element.getAttribute(attribute); let functionParent = RegExp(`^(\\w+):`).exec(params)[1]; let functionChild = RegExp(`:(\\w+)\\(`).exec(params)[1]; - let resultValue = RegExp(`\\(\'(\\w+)\',`).exec(params); - let value = resultValue !== null ? resultValue.exec(params)[1] : undefined; - let resultTarget = RegExp(`, *\'([#,.,a-zA-Z]\\w*)\'\\)`).exec(params); - let target = resultTarget !== null ? resultTarget.exec(params)[1] : undefined; + let value = RegExp(`\\(\'(\\w+)\',?`).exec(params)[1]; + let resultTarget = RegExp(`, *\'([#,.,a-zA-Z]\\w*)\'\\)`); + let target = resultTarget.exec(params) !== null ? resultTarget.exec(params)[1] : undefined; return {'functionParent': functionParent, 'functionChild': functionChild, 'value': value, 'target': target}; } @@ -71,7 +70,7 @@ document.addEventListener('DOMContentLoaded', () => { let params = splitParams(element, eventClick); switch(params.functionParent) { case 'class': - [...document.querySelectorAll(params.target)].forEach((item) => { + [...document.querySelectorAll(params.target)].concat(element).forEach((item) => { element.addEventListener('click', () => { switch(params.functionChild) { case 'add': diff --git a/test/i-click.html b/test/i-click.html index 74d2ec1..3e3d304 100644 --- a/test/i-click.html +++ b/test/i-click.html @@ -21,7 +21,7 @@ - + diff --git a/test/i-scroll.html b/test/i-scroll.html index 24cee53..f26a896 100644 --- a/test/i-scroll.html +++ b/test/i-scroll.html @@ -22,7 +22,7 @@ -

+

Ullamcorper morbi tincidunt ornare massa, eget egestas purus viverra accumsan in nisl nisi, scelerisque eu ultrices. Sapien et ligula ullamcorper malesuada proin libero nunc, consequat interdum varius sit amet, mattis.