|
14 | 14 | styleLightWind.textContent = '.hidden{display:none;}.invisible{visibility:hidden;}'
|
15 | 15 | document.head.appendChild(styleLightWind);
|
16 | 16 |
|
17 |
| - let res; |
18 |
| - |
19 |
| - (async (res) => { |
20 |
| - res = await fetch(document.querySelector('[lightwindsrc]').getAttribute('lightwindsrc')) |
21 |
| - res = await res.json() |
22 |
| - })(res) |
23 |
| - |
24 | 17 | let allClasses = [];
|
25 | 18 |
|
26 | 19 | async function resolveClass(className, res) {
|
27 | 20 | let classSubParams = className.split(':'), screenBreakPointOpen = false;
|
28 |
| - |
| 21 | + |
29 | 22 | for (i in classSubParams) {
|
30 | 23 | if (i == classSubParams.length - 1) {
|
| 24 | + if (i == 0) |
| 25 | + styleLightWind.textContent += `.${className.replace(/\:/g, '\\:').replace(/\[/g, '\\[').replace(/\]/g, '\\]').replace(/\>/g, '\\>').replace(/\//g, '\\/').replace(/\(/g, '\\(').replace(/\)/g, '\\)').replace(/\%/g, '\\%').replace(/\-/g, '\\-').replace(/\+/g, '\\+').replace(/\*/g, '\\*').replace(/\,/g, '\\,').replace(/\|/g, '\\|')}` |
31 | 26 | // value
|
32 | 27 | let name = classSubParams[i].split('>')[0], value = classSubParams[i].split('>')[1]
|
33 | 28 | try {
|
34 | 29 | if (typeof(value) == 'undefined') {
|
35 | 30 | // value only
|
36 |
| - styleLightWind.textContent += `.${className.replace(/\:/g, '\\:').replace(/\[/g, '\\[').replace(/\]/g, '\\]').replace(/\>/g, '\\>').replace(/\//g, '\\/').replace(/\(/g, '\\(').replace(/\)/g, '\\)').replace(/\%/g, '\\%').replace(/\-/g, '\\-').replace(/\+/g, '\\+').replace(/\*/g, '\\*').replace(/\,/g, '\\,').replace(/\|/g, '\\|')}{${res.proprieties.valueOnly[name].css}}` |
| 31 | + styleLightWind.textContent += `{${res.proprieties.valueOnly[name].css}}` |
37 | 32 | }
|
38 | 33 | else {
|
39 |
| - styleLightWind.textContent += `.${className.replace(/\:/g, '\\:').replace(/\[/g, '\\[').replace(/\]/g, '\\]').replace(/\>/g, '\\>').replace(/\//g, '\\/').replace(/\(/g, '\\(').replace(/\)/g, '\\)').replace(/\%/g, '\\%').replace(/\-/g, '\\-').replace(/\+/g, '\\+').replace(/\*/g, '\\*').replace(/\,/g, '\\,').replace(/\|/g, '\\|')}{${res.proprieties.valueKey[name].propriety}:${value};}` |
| 34 | + styleLightWind.textContent += `{${res.proprieties.valueKey[name].propriety}:${value};}` |
40 | 35 | }
|
41 | 36 | } catch {
|
42 |
| - styleLightWind.textContent += `.${className.replace(/\:/g, '\\:').replace(/\[/g, '\\[').replace(/\]/g, '\\]').replace(/\>/g, '\\>').replace(/\//g, '\\/').replace(/\(/g, '\\(').replace(/\)/g, '\\)').replace(/\%/g, '\\%').replace(/\-/g, '\\-').replace(/\+/g, '\\+').replace(/\*/g, '\\*').replace(/\,/g, '\\,').replace(/\|/g, '\\|')}{${name}:${value};}` |
| 37 | + styleLightWind.textContent += `{${name}:${value};}` |
43 | 38 | }
|
44 | 39 |
|
45 | 40 | if (screenBreakPointOpen)
|
46 | 41 | styleLightWind.textContent += '}'
|
47 | 42 | }
|
48 | 43 | else if (i == 0) {
|
49 | 44 | // screen + selector
|
| 45 | + try { |
| 46 | + // screen |
| 47 | + if (res.screens[classSubParams[i]].min != null && res.screens[classSubParams[i]].max != null) |
| 48 | + styleLightWind.textContent += `@media screen and (min-width: ${res.screens[classSubParams[i]].min}) and (max-width: ${res.screens[classSubParams[i]].max}) {` |
| 49 | + else if (res.screens[classSubParams[i]].min != null) |
| 50 | + styleLightWind.textContent += `@media screen and (min-width: ${res.screens[classSubParams[i]].min}) {` |
| 51 | + else if (res.screens[classSubParams[i]].max != null) |
| 52 | + styleLightWind.textContent += `@media screen and (min-width: ${res.screens[classSubParams[i]].max}) {` |
| 53 | + |
| 54 | + styleLightWind.textContent += `.${className.replace(/\:/g, '\\:').replace(/\[/g, '\\[').replace(/\]/g, '\\]').replace(/\>/g, '\\>').replace(/\//g, '\\/').replace(/\(/g, '\\(').replace(/\)/g, '\\)').replace(/\%/g, '\\%').replace(/\-/g, '\\-').replace(/\+/g, '\\+').replace(/\*/g, '\\*').replace(/\,/g, '\\,').replace(/\|/g, '\\|')}` |
| 55 | + screenBreakPointOpen = true |
| 56 | + } |
| 57 | + catch { |
| 58 | + // selector |
| 59 | + styleLightWind.textContent += `.${className.replace(/\:/g, '\\:').replace(/\[/g, '\\[').replace(/\]/g, '\\]').replace(/\>/g, '\\>').replace(/\//g, '\\/').replace(/\(/g, '\\(').replace(/\)/g, '\\)').replace(/\%/g, '\\%').replace(/\-/g, '\\-').replace(/\+/g, '\\+').replace(/\*/g, '\\*').replace(/\,/g, '\\,').replace(/\|/g, '\\|')}` |
| 60 | + try { |
| 61 | + styleLightWind.textContent += `${res.selectors[classSubParams[i]].selector}` |
| 62 | + } catch {} |
| 63 | + } |
50 | 64 | }
|
51 | 65 | else {
|
52 | 66 | // selector
|
| 67 | + try { |
| 68 | + styleLightWind.textContent += `${res.selectors[classSubParams[i]].selector}` |
| 69 | + } catch {} |
53 | 70 | }
|
54 | 71 | }
|
55 | 72 | }
|
56 | 73 |
|
57 | 74 | // mutations
|
58 | 75 | (async () => {
|
| 76 | + let res = JSON.parse(`{ |
| 77 | + "values": { |
| 78 | + "spacing": { "0": "0px", "px": "1px", "0.5": "0.125rem" } |
| 79 | + }, |
| 80 | + "screens": { |
| 81 | + "sm": { "min" : null, "max" : "640px" }, |
| 82 | + "md": { "min" : null, "max" : "768px" }, |
| 83 | + "lg": { "min" : null, "max" : "1024px" }, |
| 84 | + "xl": { "min" : null, "max" : "1280px" }, |
| 85 | + "2xl": { "min" : null, "max" : "1536px" } |
| 86 | + }, |
| 87 | + "selectors": { |
| 88 | + "active": { "selector": ":active" }, |
| 89 | + "act": { "selector": ":active" }, |
| 90 | + "checked": { "selector": ":checked" }, |
| 91 | + "ckd": { "selector": ":checked" }, |
| 92 | + "hover": { "selector": ":hover" }, |
| 93 | + "hvr": { "selector": ":hover" } |
| 94 | + }, |
| 95 | + "proprieties": { |
| 96 | + "valueOnly": { |
| 97 | + "absolute": { "css": "position:absolute;" }, |
| 98 | + "relative": { "css": "position:relative;" }, |
| 99 | + "static": { "css": "position:static;" }, |
| 100 | + "fixed": { "css": "position:fixed;" }, |
| 101 | + "sticky": { "css": "position:sticky;" } |
| 102 | + }, |
| 103 | + "valueKey": { |
| 104 | + "padding": { "propriety": "padding", "values": "spacing" }, |
| 105 | + "p": { "propriety": "padding", "values": "spacing" } |
| 106 | + } |
| 107 | + } |
| 108 | + }`) |
| 109 | + |
59 | 110 | new MutationObserver(function(mutations) {
|
60 | 111 | mutations.forEach(mutation => {
|
61 | 112 | try {
|
62 | 113 | mutation.addedNodes.forEach(node => {
|
63 | 114 | if (typeof(node.classList) != 'undefined') {
|
64 | 115 | node.classList.forEach(elClass => {
|
65 | 116 | if (allClasses.indexOf(elClass) == -1) {
|
66 |
| - resolveClass(elClass,res) |
| 117 | + resolveClass(elClass, res) |
67 | 118 | allClasses.push(elClass)
|
68 | 119 | }
|
69 | 120 | })
|
|
78 | 129 | mutations.forEach(mutation => {
|
79 | 130 | mutation.target.classList.forEach(elClass => {
|
80 | 131 | if (allClasses.indexOf(elClass) == -1) {
|
81 |
| - resolveClass(elClass,res) |
| 132 | + resolveClass(elClass, res) |
82 | 133 | allClasses.push(elClass)
|
83 | 134 | }
|
84 | 135 | })
|
|
90 | 141 | </script>
|
91 | 142 | </head>
|
92 | 143 | <body>
|
93 |
| - <div class="color>red"> |
| 144 | + <div class="color>red font-size>40pt hvr:font-size>60pt"> |
94 | 145 | jj
|
95 | 146 | </div>
|
96 | 147 | </body>
|
|
0 commit comments