mirror of https://github.com/onweru/compose.git

weru
30.00.2023 96146d9ab63c659556464742a61ef8dc0a13132e
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
function prefersColor(mode){
  return `(prefers-color-scheme: ${mode})`;
}
 
function systemMode() {
  if (window.matchMedia) {
    return window.matchMedia(prefersColor(dark)).matches ? dark : light;
  }
  return light;
}
 
function currentMode() {
  let acceptable_chars = light + dark;
  acceptable_chars = [...acceptable_chars];
  let mode = getComputedStyle(doc).getPropertyValue(key).replace(/\"/g, '').trim();
 
  return [...mode]
    .filter(letter => acceptable_chars.includes(letter))
    .join('');
}
 
function changeMode(is_dark_mode) {
  if(is_dark_mode) {
    bank.setItem(storageKey, light)
    elemAttribute(doc, mode_data, light);
  } else {
    bank.setItem(storageKey, dark);
    elemAttribute(doc, mode_data, dark);
  }
}
 
 
function pickModePicture(mode) {
  elems('picture').forEach(function(picture){
    let source = picture.firstElementChild;
    const picture_data = picture.dataset;
    const images = [picture_data.lit, picture_data.dark];
    source.src = mode == 'dark' ? images[1] : images[0];
  });
}
 
function setMermaidTheme(mode) {
  bank.setItem(mermaidThemeKey, mode);
  let theme_input = elem('.color_choice');
  theme_input.value = mode;
}
 
function setUserColorMode(mode = false) {
  const is_dark_mode = currentMode() == dark;
  const stored_mode = bank.getItem(storageKey);
  const sys_mode = systemMode();
  if(stored_mode) {
    mode ? changeMode(is_dark_mode) : elemAttribute(doc, mode_data, stored_mode);
  } else {
    mode === true ? changeMode(is_dark_mode) : changeMode(sys_mode!==dark);
  }
  const user_mode = doc.dataset.mode;
  doc.dataset.systemmode = sys_mode;
  user_mode ? pickModePicture(user_mode) : false;
 
  setMermaidTheme(user_mode);
}
 
setUserColorMode();