From 0437e1a11eab3389897a9cfb92e2d7c7a8ee6080 Mon Sep 17 00:00:00 2001 From: ccd0 Date: Mon, 8 Jul 2019 13:39:35 -0700 Subject: [PATCH] Mechanism to insert site-specific selectors. #2169 --- src/Miscellaneous/CustomCSS.coffee | 4 ++-- src/css/CSS.js | 18 +++++++++++++++++- src/main/Main.coffee | 2 +- 3 files changed, 20 insertions(+), 4 deletions(-) diff --git a/src/Miscellaneous/CustomCSS.coffee b/src/Miscellaneous/CustomCSS.coffee index a6f621793..666d09c85 100644 --- a/src/Miscellaneous/CustomCSS.coffee +++ b/src/Miscellaneous/CustomCSS.coffee @@ -4,7 +4,7 @@ CustomCSS = @addStyle() addStyle: -> - @style = $.addStyle Conf['usercss'], 'custom-css', '#fourchanx-css' + @style = $.addStyle CSS.sub(Conf['usercss']), 'custom-css', '#fourchanx-css' rmStyle: -> if @style @@ -14,4 +14,4 @@ CustomCSS = update: -> unless @style return @addStyle() - @style.textContent = Conf['usercss'] + @style.textContent = CSS.sub Conf['usercss'] diff --git a/src/css/CSS.js b/src/css/CSS.js index cbafdda42..efdd903f4 100644 --- a/src/css/CSS.js +++ b/src/css/CSS.js @@ -16,6 +16,22 @@ report: <%= multiline(read('report.css')) %>, www: -<%= multiline(read('www.css')) %> +<%= multiline(read('www.css')) %>, + +sub: function(css) { + var variables = { + site: Site.selectors + }; + return css.replace(/\$[\w\$]+/g, function(name) { + var words = name.slice(1).split('$'); + var sel = variables; + for (var i = 0; i < words.length; i++) { + if (typeof sel !== 'object') return name; + sel = sel[words[i]]; + } + if (typeof sel !== 'string') return name; + return sel; + }); +} }; diff --git a/src/main/Main.coffee b/src/main/Main.coffee index ca428d504..5f06510ff 100644 --- a/src/main/Main.coffee +++ b/src/main/Main.coffee @@ -223,7 +223,7 @@ Main = Conf['Autohiding Scrollbar'] = !Conf['Autohiding Scrollbar'] $.set 'Autohiding Scrollbar', Conf['Autohiding Scrollbar'] $.toggleClass doc, 'autohiding-scrollbar' - $.addStyle CSS.boards, 'fourchanx-css' + $.addStyle CSS.sub(CSS.boards), 'fourchanx-css' Main.bgColorStyle = $.el 'style', id: 'fourchanx-bgcolor-css' keyboard = false