diff --git a/assets/controllers/common/darkmode_controller.js b/assets/controllers/common/darkmode_controller.js new file mode 100644 index 00000000..6f2afb69 --- /dev/null +++ b/assets/controllers/common/darkmode_controller.js @@ -0,0 +1,41 @@ +import {Controller} from "@hotwired/stimulus"; +import Darkmode from "darkmode-js/src"; +import "darkmode-js" + +export default class extends Controller { + + _darkmode; + + connect() { + if (typeof window.getComputedStyle(document.body).mixBlendMode == 'undefined') { + console.warn("The browser does not support mix blend mode. Darkmode will not work."); + return; + } + + try { + const darkmode = new Darkmode(); + this._darkmode = darkmode; + + //Unhide darkmode button + this._showWidget(); + + //Set the switch according to our current darkmode state + const toggler = document.getElementById("toggleDarkmode"); + toggler.checked = darkmode.isActivated(); + } + catch (e) + { + console.error(e); + } + + + } + + _showWidget() { + this.element.classList.remove('hidden'); + } + + toggleDarkmode() { + this._darkmode.toggle(); + } +} \ No newline at end of file diff --git a/assets/js/app.js b/assets/js/app.js index 9d088440..3dc91240 100644 --- a/assets/js/app.js +++ b/assets/js/app.js @@ -50,6 +50,7 @@ import "./tristate_checkboxes"; //Define jquery globally window.$ = window.jQuery = require("jquery") + /** require('bootstrap-select'); @@ -95,25 +96,6 @@ require('../ts_src/ajax_ui'); require('../ts_src/event_listeners'); -//Register darkmode (we must do it here, TS does not support ES6 constructor... -try { - //The browser needs to support mix blend mode - if(typeof window.getComputedStyle(document.body).mixBlendMode !== 'undefined') { - const darkmode = new Darkmode(); - - $(document).on("ajaxUI:start ajaxUI:reload", function () { - //Show darkmode toggle to user - $('#toggleDarkmodeContainer, #toggleDarkmodeSeparator').removeAttr('hidden'); - $('#toggleDarkmode').prop('checked', darkmode.isActivated()); - $('#toggleDarkmode').change(function () { - darkmode.toggle(); - }); - }); - } -} catch (e) { - //Ignore all errors (for compatibiltiy with old browsers) -} - //Start AjaxUI AFTER all event has been registered //$(document).ready(ajaxUI.start()); diff --git a/templates/_navbar.html.twig b/templates/_navbar.html.twig index a2e11e7b..1d6615fb 100644 --- a/templates/_navbar.html.twig +++ b/templates/_navbar.html.twig @@ -58,9 +58,9 @@ aria-hidden="true"> {% trans %}user.login{% endtrans %} {% endif %} -
+
- +