From ab0c5ee48152818bc923a1d093f3151da42eb88e Mon Sep 17 00:00:00 2001 From: Michael Foster Date: Tue, 23 Jul 2013 01:35:56 -0400 Subject: [PATCH] Option to make stylesheet selections board-specific --- inc/config.php | 3 +++ templates/main.js | 63 ++++++++++++++++++++++++++++++++++++++--------- 2 files changed, 54 insertions(+), 12 deletions(-) diff --git a/inc/config.php b/inc/config.php index 987777ef..d6391778 100644 --- a/inc/config.php +++ b/inc/config.php @@ -560,6 +560,9 @@ // The default stylesheet to use $config['default_stylesheet'] = array('Yotsuba B', $config['stylesheets']['Yotsuba B']); + // Make stylesheet selections board-specific + $config['stylesheets_board'] = false; + // Boardlinks // You can group, order and place the boardlist at the top of every page, using the following template. //$config['boards'] = array( diff --git a/templates/main.js b/templates/main.js index 9ec0025f..b3219b3c 100644 --- a/templates/main.js +++ b/templates/main.js @@ -9,9 +9,19 @@ var styles = { {% for stylesheet in stylesheets %}{% raw %}'{% endraw %}{{ stylesheet.name|addslashes }}{% raw %}' : '{% endraw %}{{ stylesheet.uri|addslashes }}{% raw %}', {% endraw %}{% endfor %}{% raw %} }; - -function changeStyle(styleName, link) { - localStorage.stylesheet = styleName; +var board_name = false; + +function changeStyle(styleName, link) { + {% endraw %} + {% if config.stylesheets_board %}{% raw %} + if (board_name) { + stylesheet_choices[board_name] = styleName; + localStorage.board_stylesheets = JSON.stringify(stylesheet_choices); + } + {% endraw %}{% else %} + localStorage.stylesheet = styleName; + {% endif %} + {% raw %} if (!document.getElementById('stylesheet')) { var s = document.createElement('link'); @@ -27,7 +37,7 @@ function changeStyle(styleName, link) { if (document.getElementsByClassName('styles').length != 0) { var styleLinks = document.getElementsByClassName('styles')[0].childNodes; - for (i = 0; i < styleLinks.length; i++) { + for (var i = 0; i < styleLinks.length; i++) { styleLinks[i].className = ''; } } @@ -36,15 +46,44 @@ function changeStyle(styleName, link) { link.className = 'selected'; } } - -if (localStorage.stylesheet) { - for (styleName in styles) { - if (styleName == localStorage.stylesheet) { - changeStyle(styleName); - break; + + +{% endraw %} +{% if config.stylesheets_board %} + {# This is such an unacceptable mess. There needs to be an easier way. #} + var matches = document.URL.match(/\/(\w+)\/($|{{ config.dir.res|replace({'/': '\\/'}) }}{{ config.file_page|replace({'%d': '\\d+', '.': '\\.'}) }}|{{ config.file_index|replace({'.': '\\.'}) }}|{{ config.file_page|replace({'%d': '\\d+', '.': '\\.'}) }})/); + {% raw %} + if (matches) { + board_name = matches[1]; + } + + if (!localStorage.board_stylesheets) { + localStorage.board_stylesheets = '{}'; + } + + var stylesheet_choices = JSON.parse(localStorage.board_stylesheets); + if (board_name && stylesheet_choices[board_name]) { + for (var styleName in styles) { + if (styleName == stylesheet_choices[board_name]) { + changeStyle(styleName); + break; + } + } + } + {% endraw%} +{% else %} + {% raw %} + if (localStorage.stylesheet) { + for (var styleName in styles) { + if (styleName == localStorage.stylesheet) { + changeStyle(styleName); + break; + } } - } -} + } + {% endraw %} +{% endif %} +{% raw %} function init_stylechooser() { var newElement = document.createElement('div');