Skip to content

Commit 380545c

Browse files
committed
feat(tpl): add shim for class name operations
1 parent dd7cfeb commit 380545c

File tree

1 file changed

+46
-25
lines changed

1 file changed

+46
-25
lines changed

src/tpl/frontend/index.js

Lines changed: 46 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,42 @@
1010
var Esc = 'Esc';
1111
var Space = ' ';
1212

13+
var hasClass, addClass, removeClass;
14+
if (document.body.classList) {
15+
hasClass = function (el, className) {
16+
return el && el.classList.contains(className);
17+
}
18+
addClass = function (el, className) {
19+
el && el.classList.add(className);
20+
}
21+
removeClass = function (el, className) {
22+
el && el.classList.remove(className);
23+
}
24+
} else {
25+
hasClass = function (el, className) {
26+
if (!el) return;
27+
var reClassName = new RegExp('\\b' + className + '\\b');
28+
return reClassName.test(el.className);
29+
}
30+
addClass = function (el, className) {
31+
if (!el) return;
32+
var originalClassName = el.className;
33+
var reClassName = new RegExp('\\b' + className + '\\b');
34+
if (!reClassName.test(originalClassName)) {
35+
el.className = originalClassName + ' ' + className;
36+
}
37+
}
38+
removeClass = function (el, className) {
39+
if (!el) return;
40+
var originalClassName = el.className;
41+
var reClassName = new RegExp('^\\s*' + className + '\\s+|\\s+' + className + '\\b', 'g');
42+
var newClassName = originalClassName.replace(reClassName, '');
43+
if (originalClassName !== newClassName) {
44+
el.className = newClassName;
45+
}
46+
}
47+
}
48+
1349
function enableFilter() {
1450
if (!document.querySelector) {
1551
var filter = document.getElementById && document.getElementById('panel-filter');
@@ -24,7 +60,7 @@
2460
if (!filter) {
2561
return;
2662
}
27-
if (!filter.classList || !filter.addEventListener) {
63+
if (!filter.addEventListener) {
2864
filter.className += ' none';
2965
return;
3066
}
@@ -59,7 +95,7 @@
5995
selector = selectorItemNone;
6096
items = document.body.querySelectorAll(selector);
6197
for (i = items.length - 1; i >= 0; i--) {
62-
items[i].classList.remove(classNone);
98+
removeClass(items[i], classNone);
6399
}
64100
} else {
65101
if (clear) {
@@ -78,9 +114,9 @@
78114
var item = items[i];
79115
var name = item.querySelector('.name');
80116
if (name && name.textContent.toLowerCase().indexOf(filterText) < 0) {
81-
item.classList.add(classNone);
117+
addClass(item, classNone);
82118
} else {
83-
item.classList.remove(classNone);
119+
removeClass(item, classNone);
84120
}
85121
}
86122
}
@@ -143,7 +179,6 @@
143179
if (
144180
!document.querySelector ||
145181
!document.addEventListener ||
146-
!document.body.classList ||
147182
!document.body.parentElement
148183
) {
149184
return;
@@ -191,8 +226,8 @@
191226
}
192227
}
193228
} while (siblingLI !== startLI && (
194-
siblingLI.classList.contains(classNone) ||
195-
siblingLI.classList.contains(classHeader)
229+
hasClass(siblingLI, classNone) ||
230+
hasClass(siblingLI, classHeader)
196231
));
197232

198233
if (siblingLI) {
@@ -416,7 +451,7 @@
416451
}
417452

418453
function enhanceUpload() {
419-
if (!document.querySelector || !document.addEventListener || !document.body.classList) {
454+
if (!document.querySelector || !document.addEventListener) {
420455
return;
421456
}
422457

@@ -447,14 +482,6 @@
447482
var optInnerDirFile = uploadType.querySelector('.' + innerDirFile);
448483
var optActive = optFile;
449484

450-
function addClass(ele, className) {
451-
ele && ele.classList.add(className);
452-
}
453-
454-
function removeClass(ele, className) {
455-
ele && ele.classList.remove(className);
456-
}
457-
458485
var padStart = String.prototype.padStart ? function (sourceString, targetLength, padTemplate) {
459486
return sourceString.padStart(targetLength, padTemplate);
460487
} : function (sourceString, targetLength, padTemplate) {
@@ -753,7 +780,7 @@
753780
} else {
754781
uploading = false;
755782
if (elUploadStatus) {
756-
elUploadStatus.classList.remove(classUploading);
783+
removeClass(elUploadStatus, classUploading);
757784
}
758785
}
759786
}
@@ -779,7 +806,7 @@
779806
} else {
780807
uploading = true;
781808
if (elUploadStatus) {
782-
elUploadStatus.classList.add(classUploading);
809+
addClass(elUploadStatus, classUploading);
783810
}
784811
uploadBatch(files);
785812
}
@@ -1058,13 +1085,7 @@
10581085
if (!itemList || !itemList.addEventListener) {
10591086
return;
10601087
}
1061-
if (itemList.classList) {
1062-
if (!itemList.classList.contains('has-deletable')) {
1063-
return;
1064-
}
1065-
} else if (itemList.className.indexOf('has-deletable') < 0) {
1066-
return;
1067-
}
1088+
if (!hasClass(itemList, 'has-deletable')) return;
10681089

10691090
itemList.addEventListener('submit', function (e) {
10701091
if (e.defaultPrevented) {

0 commit comments

Comments
 (0)