]> git.p6c8.net - jirafeau_mojo42.git/commitdiff
[FEATURE] Support light/dark mode
authorJerome Jutteau <jerome@jutteau.fr>
Mon, 4 Jul 2022 07:15:53 +0000 (09:15 +0200)
committerJerome Jutteau <jerome@jutteau.fr>
Mon, 4 Jul 2022 07:42:55 +0000 (09:42 +0200)
A new option `dark_style` is introduced to set which dark theme administrators want to user.
If administrator don"t want to use a dark mode, they can just set `dark_syle` and `style` option to the same value.

closes #305

Signed-off-by: Jerome Jutteau <jerome@jutteau.fr>
CHANGELOG.md
lib/config.original.php
lib/functions.js.php
lib/template/header.php

index d2598a01d108b141058941b6fc84d6d97f13af01..1f8488cd495215a4e3d3bb0fecd283ab05f3358e 100644 (file)
 5. Follow the installation wizard, it should propose you the same data folder or even update automatically
 6. Check your `/lib/config.local.php` and compare it with the `/lib/config.original.php` to see if new configuration items are available. If a new item is missing in your `config.local.php`, this may trigger some errors as Jirafeau may expect to have them.
 
-# version 4.5
+# version 4.5.0
 
+- Support for dark theme
 - Fix side effects of setting too high values in php configuration.
 
 New configuration items:
--  `max_upload_chunk_size_bytes` option
+- `max_upload_chunk_size_bytes` option
+- `dark_tyle` option
 
 # version 4.4.0
 
index ffff3ce843161f23534697296ce86320f2243f8f..96dd6f34e964f4a0f3dd0205c2e46f6eb95c7cff 100644 (file)
@@ -43,6 +43,7 @@ $cfg['lang'] = 'auto';
 /* Select a theme - see media folder for available themes
  */
 $cfg['style'] = 'courgette';
+$cfg['dark_style'] = 'dark-courgette';
 
 /* Name the organisation running this installation, eg. 'ACME'
  */
index c1a81d8045c16bc2ecbb5c2346d3f2188404f676..1114dfd6188d2444e295be047c33c4ac5559772d 100644 (file)
@@ -789,4 +789,34 @@ function addCopyListener(button_id, link_id) {
                 copyLinkToClipboard(link_id);});
     }
 }
+
+function set_dark_mode() {
+    let steel_sheet = "<?php echo 'media/' . $cfg['dark_style'] . '/style.css.php'; ?>";
+    let shortcut_icon = "<?php echo 'media/' . $cfg['dark_style'] . '/favicon.ico'; ?>";
+    document.getElementById('stylesheet').href = steel_sheet;
+    document.getElementById('shortcut_icon').href = steel_sheet;
+}
+
+function set_light_mode() {
+    let steel_sheet = "<?php echo 'media/' . $cfg['style'] . '/style.css.php'; ?>";
+    let shortcut_icon = "<?php echo 'media/' . $cfg['style'] . '/favicon.ico'; ?>";
+    document.getElementById('stylesheet').href = steel_sheet;
+    document.getElementById('shortcut_icon').href = steel_sheet;
+}
+
+function color_scheme_preferences() {
+    
+    let dark_mode_steel_sheet = "<?php echo 'media/' . $cfg['dark_style'] . '/style.css.php'; ?>"
+    if (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches) {
+        set_dark_mode();
+    } else {
+        set_light_mode();
+    }
+
+    // When user change its preference
+    window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', lightMode => {
+        lightMode.matches ? set_dark_mode() : set_light_mode();
+    });
+}
+
 // @license-end
index 55b3379ac05fd7fed8aa8c237239575b54cbb26e..71b8857962beea748de406f723703877b2b89fe4 100644 (file)
@@ -7,11 +7,12 @@ header('x-ua-compatible: ie=edge');
 <head>
   <meta charset="utf-8">
   <title><?php echo (true === empty($cfg['title']))? t('JI_WEB_RE') : $cfg['title']; ?></title>
-  <link rel="shortcut icon" href="<?php echo 'media/' . $cfg['style'] . '/favicon.ico'; ?>">
-  <link href="<?php echo 'media/' . $cfg['style'] . '/style.css.php'; ?>" rel="stylesheet" type="text/css" />
+  <link id="shortcut_icon" rel="shortcut icon" href="<?php echo 'media/' . $cfg['style'] . '/favicon.ico'; ?>">
+  <link id="stylesheet" rel="stylesheet" href="<?php echo 'media/' . $cfg['style'] . '/style.css.php'; ?>" type="text/css" />
 </head>
 <body>
 <script type="text/javascript" src="<?php echo 'lib/functions.js.php'; ?>"></script>
+<script type="text/javascript" lang="Javascript">color_scheme_preferences();</script>
 <div id="content">
   <h1>
     <a href="./">

patrick-canterino.de