diff --git a/.gitignore b/.gitignore index 4795979..4592d1c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,6 @@ - -test.html node_modules/ dist/ffnm.min.js.map package-lock.json -dist/.DS_Store -src/.#core.js +**/.DS_Store +*/.#* +.idea/ diff --git a/dist/ffnm.min.js b/dist/ffnm.min.js index c8193e5..a6f4b89 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 t=[];t=[],["i-click","i-view","i-scroll-up","i-scroll-down","i-hover"].map(c=>[...document.querySelectorAll(`[${c}]`)].map(s=>{let o=Object.keys(e).map(t=>e[t].map(e=>RegExp(`^${t}:${e}\\('\\w+', *'[#,.,a-zA-Z]\\w*'\\)$`).test(s.getAttribute(c))).some(e=>e)).every(e=>e);return o?t.push(s):(console.error("FFNM: Bad syntax"),console.error(s)),o}).every(e=>e)).every(e=>e),[...document.querySelectorAll("[i-click]")].forEach(t=>{Object.keys(e).map(c=>e[c].map(e=>{switch(c){case"class":switch(e){case"add":t.classList.add("key")}}}))})}); +document.addEventListener("DOMContentLoaded",()=>{const e={class:["add","remove","toggle"]};let t=[];t=[],["i-click","i-scroll-up","i-scroll-down"].map(c=>[...document.querySelectorAll(`[${c}]`)].map(l=>{let r=Object.keys(e).map(t=>e[t].map(e=>RegExp(`^${t}:${e}\\('\\w+', *'[#,.,a-zA-Z]\\w*'\\)$`).test(l.getAttribute(c))).some(e=>e)).every(e=>e);return r?t.push(l):(console.error("FFNM: Bad syntax"),console.error(l)),r}).every(e=>e)).every(e=>e),[...document.querySelectorAll("[i-click]")].forEach(e=>{let t=function(e,t){let c=e.getAttribute(t),l=RegExp("^(\\w+):").exec(c)[1],r=RegExp(":(\\w+)\\(").exec(c)[1],a=RegExp("\\('(\\w+)',").exec(c)[1],o=RegExp(", *'([#,.,a-zA-Z]\\w*)'\\)").exec(c)[1];return{functionParent:l,functionChild:r,value:a,target:o}}(e,"i-click");switch(t.functionParent){case"class":[...document.querySelectorAll(t.target)].forEach(c=>{e.addEventListener("click",()=>{switch(t.functionChild){case"add":c.classList.add(t.value);break;case"remove":c.classList.remove(t.value);break;case"toggle":c.classList.toggle(t.value)}})})}})}); //# sourceMappingURL=ffnm.min.js.map diff --git a/src/core.js b/src/core.js index e405b39..0a4f849 100644 --- a/src/core.js +++ b/src/core.js @@ -3,7 +3,7 @@ document.addEventListener('DOMContentLoaded', () => { //=== // VARIABLES //=== - const EVENTS = ['i-click', 'i-view', 'i-scroll-up', 'i-scroll-down', 'i-hover']; + const EVENTS = ['i-click', 'i-scroll-up', 'i-scroll-down']; const FUNCTION_TREE = { 'class': ['add', 'remove', 'toggle'] }; @@ -53,20 +53,24 @@ document.addEventListener('DOMContentLoaded', () => { let params = splitParams(element, eventClick); switch(params.functionParent) { case 'class': - switch(params.functionChild) { - case 'add': - [...document.querySelectorAll(params.target)].forEach((item) => item.classList.add(params.value)); - break; - case 'remove': - [...document.querySelectorAll(params.target)].forEach((item) => item.classList.remove(params.value)); - break; - case 'toggle': - [...document.querySelectorAll(params.target)].forEach((item) => item.classList.toggle(params.value)); - break; - } + [...document.querySelectorAll(params.target)].forEach((item) => { + element.addEventListener('click', () => { + switch(params.functionChild) { + case 'add': + item.classList.add(params.value); + break; + case 'remove': + item.classList.remove(params.value); + break; + case 'toggle': + item.classList.toggle(params.value); + break; + } + }); + }); break; } - }; + }); } /** @@ -76,7 +80,12 @@ document.addEventListener('DOMContentLoaded', () => { * return {'functionParent': 'class', 'functionChild': 'add', 'value': 'show', 'target': '#menu'} */ function splitParams(element, attribute) { - return {'functionParent': '', 'functionChild': '', 'value': '', 'target': ''}; + let params = element.getAttribute(attribute); + let functionParent = RegExp(`^(\\w+):`).exec(params)[1]; + let functionChild = RegExp(`:(\\w+)\\(`).exec(params)[1]; + let value = RegExp(`\\(\'(\\w+)\',`).exec(params)[1]; + let target = RegExp(`, *\'([#,.,a-zA-Z]\\w*)\'\\)`).exec(params)[1]; + return {'functionParent': functionParent, 'functionChild': functionChild, 'value': value, 'target': target}; } diff --git a/test/i-click.html b/test/i-click.html new file mode 100644 index 0000000..c57c29f --- /dev/null +++ b/test/i-click.html @@ -0,0 +1,29 @@ + + + + + Test syntax + + + + + + + + + + diff --git a/test/validate.html b/test/validate.html new file mode 100644 index 0000000..114b79c --- /dev/null +++ b/test/validate.html @@ -0,0 +1,103 @@ + + + + + Test syntax + + + + +
add
+
remove
+
toggle
+ + + +
add
+
remove
+
toggle
+ + + +
add
+
remove
+
toggle
+ + + +
add
+
remove
+
toggle
+ + + +
add
+
remove
+
toggle
+ + + +
add
+
remove
+
toggle
+ + + +
add
+
remove
+
toggle
+ + + +
add
+
remove
+
toggle
+ + + +
add
+
remove
+
toggle
+ + + +
add
+
remove
+
toggle
+ + + +
add
+
remove
+
toggle
+ + + +
add
+
remove
+
toggle
+ + + +
add
+
remove
+
toggle
+ + + +
add
+
remove
+
toggle
+ + + +
add
+
remove
+
toggle
+ + + +
add
+ + +