@zohodesk/react-cli 0.0.1-exp.168.2 → 0.0.1-exp.168.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (102) hide show
  1. package/.eslintignore +7 -7
  2. package/.eslintrc.js +179 -179
  3. package/README.md +925 -918
  4. package/bin/cli.js +492 -492
  5. package/cert/Tsicsezwild-22-23.crt +37 -37
  6. package/cert/Tsicsezwild-22-23.key +27 -27
  7. package/docs/CustomChunks.md +26 -26
  8. package/docs/DevStart.md +18 -18
  9. package/docs/InstallNode.md +28 -28
  10. package/docs/TODOS.md +10 -10
  11. package/docs/ValueReplacer.md +60 -60
  12. package/docs/warnings_while_install.txt +35 -35
  13. package/files/eslintrc.js +62 -62
  14. package/files/prettierrc.js +3 -3
  15. package/lib/configs/webpack.css.umd.config.js +4 -4
  16. package/lib/configs/webpack.prod.config.js +1 -1
  17. package/lib/loaderUtils/configsAssetsLoaders.js +33 -33
  18. package/lib/loaders/workerLoader.js +9 -9
  19. package/lib/pluginUtils/getDevPlugins.js +5 -5
  20. package/lib/pluginUtils/getProdPlugins.js +5 -5
  21. package/lib/plugins/EFCPlugin.md +6 -6
  22. package/lib/plugins/I18NInjectIntoIndexPlugin.js +4 -4
  23. package/lib/plugins/I18nSplitPlugin/I18nDownlodLogic.js +38 -38
  24. package/lib/plugins/I18nSplitPlugin/I18nFilesEmitter.js +30 -30
  25. package/lib/plugins/I18nSplitPlugin/I18nKeysIdentifer.js +8 -8
  26. package/lib/plugins/I18nSplitPlugin/I18nSplit.md +86 -86
  27. package/lib/plugins/I18nSplitPlugin/README.md +25 -25
  28. package/lib/plugins/I18nSplitPlugin/index.js +57 -57
  29. package/lib/plugins/ResourceHintsPlugin.js +17 -17
  30. package/lib/plugins/RtlSplitPlugin/RtlCssPlugin.js +6 -6
  31. package/lib/plugins/RtlSplitPlugin/RtrSplit.md +30 -30
  32. package/lib/plugins/ServiceWorkerPlugin.js +9 -9
  33. package/lib/plugins/TPHashMappingPlugin.js +4 -4
  34. package/lib/postcss-plugins/RTLSplitPlugin.js +10 -10
  35. package/lib/postcss-plugins/hoverActivePlugin.js +324 -231
  36. package/lib/postcss-plugins/keyframesPlugin.js +20 -20
  37. package/lib/sh/pre-commit.sh +34 -34
  38. package/lib/sh/reportPublish.sh +45 -45
  39. package/lib/utils/buildstats.html +148 -148
  40. package/lib/utils/resultSchema.json +73 -73
  41. package/npm8.md +9 -9
  42. package/package.json +148 -148
  43. package/postpublish.js +6 -6
  44. package/templates/app/.eslintrc.js +140 -140
  45. package/templates/app/README.md +12 -12
  46. package/templates/app/app/index.html +24 -24
  47. package/templates/app/app/properties/ApplicationResources_en_US.properties +1 -1
  48. package/templates/app/app/properties/i18nkeys.json +3 -3
  49. package/templates/app/docs/all.html +69 -69
  50. package/templates/app/mockapi/index.js +18 -18
  51. package/templates/app/package.json +37 -37
  52. package/templates/app/src/actions/SampleActions/index.js +37 -37
  53. package/templates/app/src/actions/index.js +65 -65
  54. package/templates/app/src/appUrls.js +19 -19
  55. package/templates/app/src/components/Alert/Alert.js +134 -134
  56. package/templates/app/src/components/Alert/Alert.module.css +79 -79
  57. package/templates/app/src/components/FreezeLayer/FreezeLayer.css +37 -37
  58. package/templates/app/src/components/FreezeLayer/FreezeLayer.js +84 -84
  59. package/templates/app/src/components/Sample/Sample.module.css +11 -11
  60. package/templates/app/src/components/Sample/SampleList.js +61 -61
  61. package/templates/app/src/components/Slider/Slider.css +41 -41
  62. package/templates/app/src/components/Slider/Slider.js +55 -55
  63. package/templates/app/src/containers/AlertContainer/index.js +15 -15
  64. package/templates/app/src/containers/AppContainer/index.js +96 -96
  65. package/templates/app/src/containers/AppContainer/index.module.css +27 -27
  66. package/templates/app/src/containers/CustomMatch/index.js +65 -65
  67. package/templates/app/src/containers/DevTools/index.js +10 -10
  68. package/templates/app/src/containers/Header/index.js +67 -67
  69. package/templates/app/src/containers/Header/index.module.css +43 -43
  70. package/templates/app/src/containers/Redirect/index.js +63 -63
  71. package/templates/app/src/containers/Redirector/index.js +47 -47
  72. package/templates/app/src/containers/SampleListContainer/ListContainer.js +42 -42
  73. package/templates/app/src/containers/SampleListContainer/ListContainer.module.css +3 -3
  74. package/templates/app/src/historyChange.js +5 -5
  75. package/templates/app/src/index.html +10 -10
  76. package/templates/app/src/index.js +24 -24
  77. package/templates/app/src/middleware/PromiseMiddleware.js +59 -59
  78. package/templates/app/src/reducers/alertData.js +11 -11
  79. package/templates/app/src/reducers/index.js +6 -6
  80. package/templates/app/src/reducers/samples.js +19 -19
  81. package/templates/app/src/store/configureStore.dev.js +51 -51
  82. package/templates/app/src/store/configureStore.js +5 -5
  83. package/templates/app/src/store/configureStore.prod.js +26 -26
  84. package/templates/app/src/util/Common.js +5 -5
  85. package/templates/app/src/util/RequestAPI.js +132 -132
  86. package/templates/docs/all.html +249 -249
  87. package/templates/docs/component.html +178 -178
  88. package/templates/docs/components.html +221 -221
  89. package/templates/docs/css/b.min.css +6 -6
  90. package/templates/docs/css/component.css +42 -42
  91. package/templates/docs/css/componentTest.css +6 -6
  92. package/templates/docs/css/hopscotch.css +585 -585
  93. package/templates/docs/css/style.css +1022 -1022
  94. package/templates/docs/impactReportTemplate.html +154 -154
  95. package/templates/docs/index.html +1493 -1493
  96. package/templates/docs/js/active-line.js +72 -72
  97. package/templates/docs/js/b.min.js +7 -7
  98. package/templates/docs/js/codemirror.js +9680 -9680
  99. package/templates/docs/js/designTokens.js +334 -334
  100. package/templates/docs/js/j.min.js +4 -4
  101. package/templates/docs/js/javascript.js +874 -874
  102. package/templates/docs/js/matchbrackets.js +145 -145
@@ -4,261 +4,354 @@ var _postcss = _interopRequireDefault(require("postcss"));
4
4
 
5
5
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
6
6
 
7
- module.exports = _postcss.default.plugin("postcss-mobile-hover", () => {
8
- return root => {
9
- function checkHoverIgnore(rule, index) {
10
- return rule.nodes !== undefined && rule.nodes[index - 1] !== undefined && rule.nodes[index - 1].type == "comment" && rule.nodes[index - 1].text.includes("hover:ignore");
7
+ function previousNodeCheck(nodes, index) {
8
+ return nodes !== undefined && nodes[index - 1] !== undefined && nodes[index - 1] && nodes[index - 1].text !== undefined;
9
+ }
10
+
11
+ function isComment(node) {
12
+ return node !== undefined && node.type === 'comment';
13
+ }
14
+
15
+ function isHoverPresent(atrule) {
16
+ let hoverPresent = false;
17
+ atrule.walkRules(rule => {
18
+ if (rule.selector.includes('hover')) {
19
+ hoverPresent = true;
11
20
  }
21
+ });
22
+ return hoverPresent;
23
+ }
12
24
 
13
- function checkPositionNodeHov(parent) {
14
- let clone = parent.clone();
15
- clone.params = clone.params + " and (hover: hover)";
16
- var posn = -1;
17
- root.nodes.map((node, index) => {
18
- if (node.params == clone.params) {
19
- posn = index;
20
- }
21
- });
22
- return posn;
25
+ module.exports = _postcss.default.plugin('postcss-mobile-hover', () => rootOriginal => {
26
+ const hoverRules = [];
27
+ let positionsObj = {};
28
+ const hoverIgnoreQuery = 'Hover:ignore',
29
+ activeIgnoreQuery = 'Active:ignore',
30
+ hoverActiveIgnoreQuery = 'HoverActive:ignore';
31
+ const medHoverIgnoreQuery = 'MedHover:ignore',
32
+ medActiveIgnoreQuery = 'MedActive:ignore',
33
+ medHoverActiveIgnoreQuery = 'MedHoverActive:ignore';
34
+
35
+ function QueryIgnoreCheck(index, type) {
36
+ if (previousNodeCheck(rootOriginal.nodes, index)) {
37
+ return rootOriginal.nodes[index - 1].text === type;
23
38
  }
24
39
 
25
- function checkPositionNodeAct(parent) {
26
- let clone = parent.clone();
27
- clone.params = clone.params + " and (hover: none)";
28
- var posn = -1;
29
- root.nodes.map((node, index) => {
30
- if (clone.params == node.params) {
31
- posn = index;
32
- }
33
- });
34
- return posn;
40
+ return false;
41
+ }
42
+
43
+ function mediaQueryIgnoreCheck(node, type) {
44
+ if (isComment(node)) {
45
+ return node.text === type;
35
46
  }
36
47
 
37
- function checkPositionNodeFireFox(parent) {
38
- var posn = -1;
39
- root.nodes.map((nodes, index) => {
40
- if (nodes.params == "all and (min--moz-device-pixel-ratio:0)") {
41
- posn = index;
48
+ return false;
49
+ }
50
+
51
+ function handleIgnore({
52
+ index,
53
+ atrule,
54
+ type
55
+ }) {
56
+ if (type.match(/(Hover:ignore|Active:ignore|HoverActive:ignore)/g)) {
57
+ return QueryIgnoreCheck(index, type);
58
+ }
59
+
60
+ if (type.match(/(MedHover:ignore|MedActive:ignore|MedHoverActive:ignore)/g)) {
61
+ return mediaQueryIgnoreCheck(atrule.nodes[index - 1], type.slice(3));
62
+ }
63
+ }
64
+
65
+ function returnPositions(parent) {
66
+ let positions = {
67
+ hovMed: rootOriginal.nodes[positionsObj[`${parent.params} and all and (min--moz-device-pixel-ratio:0) and (hover: hover), (hover: hover)`] - 1],
68
+ actMed: rootOriginal.nodes[positionsObj[`${parent.params} and (hover: none)`] - 1]
69
+ };
70
+ return positions;
71
+ }
72
+
73
+ function handleMedHoverAndHoverActiveIgnore(atrule, index) {
74
+ return !handleIgnore({
75
+ atrule,
76
+ index,
77
+ type: medHoverIgnoreQuery
78
+ }) && !handleIgnore({
79
+ atrule,
80
+ index,
81
+ type: medHoverActiveIgnoreQuery
82
+ });
83
+ }
84
+
85
+ function handleMedActiveAndHoverActiveIgnore(atrule, index) {
86
+ return !handleIgnore({
87
+ atrule,
88
+ index,
89
+ type: medActiveIgnoreQuery
90
+ }) && !handleIgnore({
91
+ atrule,
92
+ index,
93
+ type: medHoverActiveIgnoreQuery
94
+ });
95
+ }
96
+
97
+ function handleHoverAndHoverActiveIgnore(index) {
98
+ return !handleIgnore({
99
+ index,
100
+ type: hoverIgnoreQuery
101
+ }) && !handleIgnore({
102
+ index,
103
+ type: hoverActiveIgnoreQuery
104
+ });
105
+ }
106
+
107
+ function handleActiveAndHoverActiveIgnore(index) {
108
+ return !handleIgnore({
109
+ index,
110
+ type: activeIgnoreQuery
111
+ }) && !handleIgnore({
112
+ index,
113
+ type: hoverActiveIgnoreQuery
114
+ });
115
+ }
116
+
117
+ function handleAllIgnoreCases(index) {
118
+ return !handleIgnore({
119
+ index,
120
+ type: activeIgnoreQuery
121
+ }) && !handleIgnore({
122
+ index,
123
+ type: hoverIgnoreQuery
124
+ }) && !handleIgnore({
125
+ index,
126
+ type: hoverActiveIgnoreQuery
127
+ });
128
+ }
129
+
130
+ function mediaCommaQuery(rule, index) {
131
+ if (rule.parent.params !== undefined && !rule.parent.params.includes('hover')) {
132
+ //console.log(hovMed, actMed);
133
+ let newSelector = '';
134
+ let {
135
+ hovMed,
136
+ actMed
137
+ } = returnPositions(rule.parent);
138
+ let hovQueries = [];
139
+ let actQueries = [];
140
+ rule.selector.split(/\s*,\s*/).forEach(_subrule => {
141
+ let subrule = _subrule.trim();
142
+
143
+ let clone = rule.clone();
144
+
145
+ if (subrule.includes('hover')) {
146
+ clone.selector = subrule;
147
+
148
+ if (handleMedHoverAndHoverActiveIgnore(rule.parent, index)) {
149
+ hovQueries.push(subrule);
150
+ }
151
+
152
+ if (handleMedActiveAndHoverActiveIgnore(rule.parent, index)) {
153
+ actQueries.push(subrule);
154
+ }
155
+ } else {
156
+ newSelector += `${subrule}, `;
42
157
  }
43
158
  });
44
- return posn;
159
+
160
+ if (hovQueries.length > 0) {
161
+ let clone = rule.clone();
162
+ clone.selector = hovQueries.join(',');
163
+ hovMed.append(clone);
164
+ }
165
+
166
+ if (actQueries.length > 0) {
167
+ let clone = rule.clone();
168
+ clone.selector = actQueries.join(',');
169
+ actMed.append(clone.clone({
170
+ selector: clone.selector.replace(/:hover/gi, ':active')
171
+ }));
172
+ }
173
+
174
+ if (handleMedHoverAndHoverActiveIgnore(rule.parent, index)) {
175
+ rule.selector = newSelector.substring(0, newSelector.length - 2);
176
+ }
177
+
178
+ if (rule.selector === '') {
179
+ rule.remove();
180
+ }
45
181
  }
182
+ }
46
183
 
47
- const hoverRules = []; // Start by identifying all :hover rules
184
+ function mediaQuery(rule, index) {
185
+ // console.log(rule.parent.params + " and all and (min--moz-device-pixel-ratio:0) and (hover: hover), (hover: hover)");
186
+ if (rule.parent.params !== undefined && !rule.parent.params.includes('hover')) {
187
+ let {
188
+ hovMed,
189
+ actMed
190
+ } = returnPositions(rule.parent);
48
191
 
49
- root.walkAtRules((atrule, index) => {
50
- let hoverPresent = false;
51
- atrule.walkRules((rule, index) => {
52
- if (rule.selector.includes("hover")) {
53
- hoverPresent = true;
192
+ if (rule.selector.includes('hover') && hovMed !== undefined && rule.parent.type === 'atrule') {
193
+ if (handleMedHoverAndHoverActiveIgnore(rule.parent, index)) {
194
+ hovMed.append(rule);
54
195
  }
196
+
197
+ if (handleMedActiveAndHoverActiveIgnore(rule.parent, index)) {
198
+ actMed.append(rule.clone({
199
+ selector: rule.selector.replace(/:hover/gi, ':active')
200
+ }));
201
+ }
202
+ }
203
+ }
204
+ }
205
+
206
+ function commaQuery(rule, index) {
207
+ //console.log("comma" , rule.selector.split('\n'));
208
+ let newSelector = '';
209
+ let hovQueries = [];
210
+ rule.selector.split(/\s*,\s*/).forEach(_subrule => {
211
+ let subrule = _subrule.trim();
212
+
213
+ if (subrule.includes('hover')) {
214
+ // hoverRules.push({ rule: clone, index });
215
+ hovQueries.push(subrule);
216
+ } else {
217
+ newSelector += `${subrule}, `;
218
+ }
219
+ });
220
+
221
+ if (hovQueries.length > 0) {
222
+ let clone = rule.clone();
223
+ clone.selector = hovQueries.join(',');
224
+ hoverRules.push({
225
+ rule: clone,
226
+ index
55
227
  });
228
+ }
56
229
 
57
- if (hoverPresent) {
58
- root.append({
59
- name: "media",
60
- params: atrule.params + " and (hover: hover)"
61
- });
62
- root.append({
63
- name: "media",
64
- params: atrule.params + " and (hover: none)"
230
+ if (handleHoverAndHoverActiveIgnore(index)) {
231
+ rule.selector = newSelector.substring(0, newSelector.length - 2).trim();
232
+ }
233
+
234
+ if (rule.selector === '') {
235
+ rule.remove();
236
+ }
237
+ } // Start by identifying all :hover rules
238
+
239
+
240
+ rootOriginal.walkAtRules(atrule => {
241
+ //console.log(positions[`${atrule.params} and all and (min--moz-device-pixel-ratio:0) and (hover: hover), (hover: hover)`])
242
+ const hoverQuery = `${atrule.params} and all and (min--moz-device-pixel-ratio:0) and (hover: hover), (hover: hover)`;
243
+ const activeQuery = `${atrule.params} and (hover: none)`;
244
+
245
+ if (isHoverPresent(atrule)) {
246
+ if (!positionsObj[hoverQuery] && !positionsObj[activeQuery]) {
247
+ rootOriginal.append({
248
+ name: 'media',
249
+ params: hoverQuery
65
250
  });
66
- root.append({
67
- name: "media",
68
- params: "all and (min--moz-device-pixel-ratio:0)"
251
+ positionsObj[hoverQuery] = rootOriginal.nodes.length - 1;
252
+ rootOriginal.append({
253
+ name: 'media',
254
+ params: activeQuery
69
255
  });
256
+ positionsObj[activeQuery] = rootOriginal.nodes.length - 1;
70
257
  }
71
- });
72
- root.walkRules(/:hover/i, (rule, index) => {
73
- if (!checkHoverIgnore(rule, index)) {
74
- // media hover query with ',' ' ' '+'
75
- if (rule.parent.name != undefined && rule.parent.params !== undefined) {
76
- //console.log(rule.parent.params)
77
- // console.log("media query" , rule.selector)
78
- if (rule.selector.includes(" ") && rule.selector.includes(",") || !rule.selector.includes(" ") && rule.selector.includes(",")) {
79
- //console.log("media comma", rule.selector)
80
- if (rule.parent.params != undefined && !rule.parent.params.includes("hover")) {
81
- //console.log("not hovered")
82
- var posHov = checkPositionNodeHov(rule.parent);
83
- var actHov = checkPositionNodeAct(rule.parent);
84
- var firHov = checkPositionNodeFireFox(rule.parent);
85
- var hovMed = root.nodes[posHov];
86
- var actMed = root.nodes[actHov];
87
- var firMed = root.nodes[firHov]; //console.log(hovMed, actMed);
88
-
89
- var str = ",";
90
-
91
- if (rule.selector.includes(",\n")) {
92
- str = ",\n";
93
- }
94
-
95
- rule.selector.split(str).map(subrule => {
96
- subrule = subrule.trim();
97
- let clone = rule.clone();
98
-
99
- if (subrule.includes("hover")) {
100
- clone.selector = subrule;
101
- hovMed.append(clone);
102
- firMed.append(clone);
103
- actMed.append(clone.clone({
104
- selector: clone.selector.replace(/:hover/gi, ":active")
105
- }));
106
- } else {
107
- clone.selector = subrule;
108
- root.append(clone);
109
- }
110
- });
111
- rule.remove();
112
- }
113
- } else if (rule.selector.includes(" ") && rule.selector.includes("+") || !rule.selector.includes(" ") && rule.selector.includes("+")) {
114
- //console.log("media plus", rule.selector)
115
- if (rule.parent.params != undefined && !rule.parent.params.includes("hover")) {
116
- //console.log("not hovered")
117
- var posHov = checkPositionNodeHov(rule.parent);
118
- var actHov = checkPositionNodeAct(rule.parent);
119
- var firHov = checkPositionNodeFireFox(rule.parent);
120
- var hovMed = root.nodes[posHov];
121
- var actMed = root.nodes[actHov];
122
- var firMed = root.nodes[firHov]; // console.log(hovMed, actMed);
123
-
124
- if (rule.selector.includes("hover")) {
125
- console.log(rule.selector);
126
- firMed.append(rule);
127
- hovMed.append(rule);
128
- actMed.append(rule.clone({
129
- selector: rule.selector.replace(/:hover/gi, ":active")
130
- }));
131
- } else {
132
- root.append(rule);
133
- }
134
- } else {// console.log(rule.selector)
135
- }
136
- } else if (rule.selector.includes(" ")) {
137
- //console.log("media space", rule.selector)
138
- if (rule.parent.params != undefined && !rule.parent.params.includes("hover")) {
139
- //console.log("not hovered")
140
- var posHov = checkPositionNodeHov(rule.parent);
141
- var actHov = checkPositionNodeAct(rule.parent);
142
- var firHov = checkPositionNodeFireFox(rule.parent);
143
- var hovMed = root.nodes[posHov];
144
- var actMed = root.nodes[actHov];
145
- var firMed = root.nodes[firMed]; //console.log(hovMed, actMed);
146
-
147
- if (rule.selector.includes("hover")) {
148
- hovMed.append(rule);
149
- actMed.append(rule.clone({
150
- selector: rule.selector.replace(/:hover/gi, ":active")
151
- }));
152
- } else {
153
- root.append(rule);
154
- }
155
- }
156
- }
157
- } //usual hover query with ',' ' ' '+'
158
- else if ((rule.selector.includes(",") || rule.selector.includes(" ") || rule.selector.includes("+")) && rule.parent.name == undefined) {
159
- if (rule.selector.includes(" ") && rule.selector.includes(",") || !rule.selector.includes(" ") && rule.selector.includes(",")) {
160
- //console.log("comma" , rule.selector.split('\n'));
161
- rule.selector.split(",\n").map(subrule => {
162
- subrule = subrule.trim();
163
- let clone = rule.clone();
164
-
165
- if (subrule.includes("hover")) {
166
- clone.selector = subrule;
167
- hoverRules.push(clone);
168
- } else {
169
- clone.selector = subrule;
170
- root.append(clone);
171
- }
172
- });
173
- rule.remove();
174
- } else if (rule.selector.includes(" ") && rule.selector.includes("+") || !rule.selector.includes(" ") && rule.selector.includes("+")) {
175
- //console.log("plus" , rule.selector);
176
- if (rule.selector.includes("hover")) {
177
- //console.log("plus:", rule.selector);
178
- hoverRules.push(rule);
179
- rule.remove();
180
- }
181
- } else if (rule.selector.includes(" ")) {
182
- //console.log("space", rule.selector);
183
- hoverRules.push(rule);
184
- rule.remove();
185
- }
186
- } // usual hover query
187
- else {
188
- //console.log(rule);
189
- if (rule.selector.includes("hover")) {
190
- hoverRules.push(rule);
191
- }
258
+ }
259
+ });
260
+ rootOriginal.walkRules(/:hover/i, (rule, index) => {
261
+ // console.log({ rule, index });
262
+ // media hover query with ',' ' ' '+'
263
+ // console.log("media query" , rule.selector)
264
+ if (rule.parent.type === 'atrule' && rule.selector.includes(',')) {
265
+ //console.log("media comma", rule.selector)
266
+ mediaCommaQuery(rule, index);
267
+ } else {
268
+ // plus, space and other media queries
269
+ //console.log("media", rule.selector)
270
+ mediaQuery(rule, index);
271
+ } // usual hover query
272
+
273
+
274
+ if (!rule.selector.match(/,+| +|\++/g) && rule.parent !== undefined && rule.parent.name === undefined) {
275
+ hoverRules.push({
276
+ rule,
277
+ index
278
+ });
279
+ } //usual hover query with ',' ' ' '+'
280
+
281
+
282
+ if (rule.selector.match(/,+| +|\++/g) && rule.parent.name === undefined) {
283
+ if (rule.selector.includes(',')) {
284
+ commaQuery(rule, index);
285
+ } else if (rule.selector.match(/ +|\++/g)) {
286
+ //console.log("plus or space" , rule.selector);
287
+ if (rule.selector.includes('hover')) {
288
+ hoverRules.push({
289
+ rule,
290
+ index
291
+ }); //rule.remove();
192
292
  }
193
293
  }
194
- }); // If there are any :hover rules in the input, then create media queries
195
- // to automatically translate it into :active on touch-based devices
196
-
197
- if (hoverRules.length > 0) {
198
- //console.log(hoverRules)
199
- // Create a media query targetting ie10 + 11, as these browsers
200
- // wont support @media (hover: hover) - but we know that this
201
- // browser never runs on mobile devices, so we'll just push the
202
- // hover rules there
203
- // const ieQuery = root.append({
204
- // name: 'media',
205
- // params:
206
- // 'all and ' +
207
- // '(-ms-high-contrast: none), ' +
208
- // '(-ms-high-contrast: active)'
209
- // }).last;
210
- // Create a media query targetting firefox, as this browser doesn't
211
- // support @media (hover: hover)... Technically this browser could
212
- // run on both desktop and mobile devices, but we're going to be
213
- // applying :hover and hope for the best
214
- const firefoxQuery = root.append({
215
- name: "media",
216
- params: "all and (min--moz-device-pixel-ratio:0)"
217
- }).last; // Create a media query targetting devices that actually support
218
- // hover
219
-
220
- const hoverQuery = root.append({
221
- name: "media",
222
- params: "(hover: hover)"
223
- }).last; // Create a media query targetting devices that don't support hover
224
- // (ie. devices where we should fall back to :active instead)
225
-
226
- const activeQuery = root.append({
227
- name: "media",
228
- params: "(hover: none)"
229
- }).last; // Loop through the hover rules and apply them to each of the media
230
- // queries
231
- // eslint-disable-next-line no-labels
232
-
233
- outerLoop: for (const hoverRule of hoverRules) {
234
- // determine if the rule has been nested inside another media
235
- // query; in that case bail out as we have no way of reliably
236
- // nesting these queries
237
- let parentRule = hoverRule.parent;
238
-
239
- while (parentRule) {
240
- if (parentRule.type === "atrule" && parentRule.name === "media") {
241
- // eslint-disable-next-line no-labels
242
- continue outerLoop;
243
- }
294
+ }
295
+ }); // If there are any :hover rules in the input, then create media queries
296
+ // to automatically translate it into :active on touch-based devices
244
297
 
245
- parentRule = parentRule.parent;
246
- } // Push a clone of the :hover rule 'as is' to queries where we
247
- // expect the user's device to support hover
248
- // ieQuery.append(hoverRule.clone());
298
+ if (hoverRules.length > 0) {
299
+ // Create a media query targetting devices that actually support
300
+ // hover
301
+ const hoverQuery = rootOriginal.append({
302
+ name: 'media',
303
+ params: 'all and (min--moz-device-pixel-ratio:0) and (hover: hover), (hover: hover)'
304
+ }).last; // Create a media query targetting devices that don't support hover
305
+ // (ie. devices where we should fall back to :active instead)
249
306
 
307
+ const activeQuery = rootOriginal.append({
308
+ name: 'media',
309
+ params: '(hover: none)'
310
+ }).last; // Loop through the hover rules and apply them to each of the media
311
+ // queries
312
+ // eslint-disable-next-line no-labels
250
313
 
251
- firefoxQuery.append(hoverRule.clone());
252
- hoverQuery.append(hoverRule.clone()); // Push a clone of the :hover rule, where we transform the
253
- // selector to :active to the query targetting devices that
254
- // don't support hover
314
+ outerLoop: for (const hoverRule of hoverRules) {
315
+ // determine if the rule has been nested inside another media
316
+ // query; in that case bail out as we have no way of reliably
317
+ // nesting these queries
318
+ let parentRule = hoverRule.rule.parent;
319
+
320
+ while (parentRule) {
321
+ if (parentRule.type === 'atrule' && parentRule.name === 'media') {
322
+ // eslint-disable-next-line no-labels
323
+ continue outerLoop;
324
+ }
325
+
326
+ parentRule = parentRule.parent;
327
+ } // Push a clone of the :hover rule 'as is' to queries where we
328
+ // expect the user's device to support hover
329
+ // ieQuery.append(hoverRule.clone());
330
+
331
+
332
+ if (handleHoverAndHoverActiveIgnore(hoverRule.index)) {
333
+ hoverQuery.append(hoverRule.rule.clone());
334
+ } // Push a clone of the :hover rule, where we transform the
335
+ // selector to :active to the query targetting devices that
336
+ // don't support hover
255
337
 
256
- activeQuery.append(hoverRule.clone({
257
- selector: hoverRule.selector.replace(/:hover/gi, ":active")
258
- })); // remove legacy rule from output
259
338
 
260
- hoverRule.remove();
339
+ if (handleActiveAndHoverActiveIgnore(hoverRule.index)) {
340
+ activeQuery.append(hoverRule.rule.clone({
341
+ selector: hoverRule.rule.selector.replace(/:hover/gi, ':active')
342
+ }));
343
+ } // remove legacy rule from output
344
+
345
+
346
+ if (handleAllIgnoreCases(hoverRule.index)) {
347
+ hoverRule.rule.remove();
261
348
  }
262
349
  }
263
- };
350
+ }
351
+
352
+ rootOriginal.walkAtRules(atrule => {
353
+ if (atrule !== undefined && atrule.nodes !== undefined && atrule.nodes.length === 0 || atrule.nodes === undefined) {
354
+ atrule.remove();
355
+ }
356
+ });
264
357
  });