From 5a603a084f31cb53ae63fea52dea300e069352d5 Mon Sep 17 00:00:00 2001 From: Zack Rauen Date: Thu, 9 Aug 2018 01:18:49 -0400 Subject: [PATCH] normalize DOM on load --- client/src/ui/classnormaliser.js | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/client/src/ui/classnormaliser.js b/client/src/ui/classnormaliser.js index ef9b933a..f8509bf4 100644 --- a/client/src/ui/classnormaliser.js +++ b/client/src/ui/classnormaliser.js @@ -10,17 +10,19 @@ import { Module, WebpackModules } from 'modules'; -const randClass = new RegExp(`^(?!da-)((?:[A-Za-z]|[0-9]|-)+)-(?:[A-Za-z]|[0-9]|-|_){6}$`); +const normalizedPrefix = 'da'; +const randClass = new RegExp(`^(?!${normalizedPrefix}-)((?:[A-Za-z]|[0-9]|-)+)-(?:[A-Za-z]|[0-9]|-|_){6}$`); export default class ClassNormaliser extends Module { init() { this.patchClassModules(WebpackModules.getModule(this.moduleFilter.bind(this), false)); + this.normalizeElement(document.querySelector('#app-mount')); } patchClassModules(modules) { for (let module of modules) { - this.patchClassModule('da', module); + this.patchClassModule(normalizedPrefix, module); } } @@ -61,4 +63,17 @@ export default class ClassNormaliser extends Module { } } + normalizeElement(element) { + if (!(element instanceof Element)) return; + if (element.children && element.children.length) this.normalizeElement(element.children[0]); + if (element.nextElementSibling) this.normalizeElement(element.nextElementSibling); + const classes = element.classList; + for (let c = 0, clen = classes.length; c < clen; c++) { + if (!randClass.test(classes[c])) continue; + const match = classes[c].match(randClass)[1]; + const newClass = match.split('-').map((s, i) => i ? s[0].toUpperCase() + s.slice(1) : s).join(''); + element.classList.add(`${normalizedPrefix}-${newClass}`); + } + } + }