Browse code

Add zoom capability

Benjamin Roth authored on10/10/2024 15:20:38
Showing2 changed files
... ...
@@ -7,6 +7,38 @@
7 7
 {% endblock %}
8 8
 
9 9
 {% block main %}
10
+    <div class="tl_panel">
11
+        <div id="vr-daily-schedule-zoom" class="tl_submit_panel">
12
+            <button id="daily-zoom-in" class="tl_submit">+</button>
13
+            <button id="daily-zoom-out" class="tl_submit">-</button>
14
+            <button id="daily-zoom-reset" class="tl_submit" data-default="3">Reset</button>
15
+        </div>
16
+        <script>
17
+            const zoomPanel = document.querySelector('#vr-daily-schedule-zoom');
18
+            const root = document.querySelector(':root');
19
+            const rootStyles = getComputedStyle(root);
20
+            const defaultZoom = rootStyles.getPropertyValue('--slot-height');
21
+
22
+            zoomPanel.querySelectorAll('button').forEach((element) => {
23
+                element.addEventListener('click',() => {
24
+                    let currentVal = rootStyles.getPropertyValue('--slot-height');
25
+                    let split = currentVal.match(/^([-.\d]+(?:\.\d+)?)(.*)$/);
26
+                    [value,unit] = [parseFloat(split[1]),split[2] ? split[2] : ''];
27
+
28
+                    if (element.id == 'daily-zoom-in' && value < 9)
29
+                    {
30
+                        root.style.setProperty('--slot-height',(value + 1.5) + unit);
31
+                    } else if (element.id == 'daily-zoom-out' && value >= 3)
32
+                    {
33
+                        root.style.setProperty('--slot-height',(value - 1.5) + unit);
34
+                    } else if (element.id == 'daily-zoom-reset')
35
+                    {
36
+                        root.style.setProperty('--slot-height',defaultZoom);
37
+                    }
38
+                });
39
+            });
40
+        </script>
41
+    </div>
10 42
     <div class="vr-daily-schedule">
11 43
         <div class="daily-timeline-container">
12 44
             <div class="daily-timeline">
... ...
@@ -11,6 +11,10 @@ $header-bg-color: #f2f2f2;
11 11
 $slot-height: 3rem;
12 12
 $cell-amount: 48;
13 13
 
14
+:root {
15
+  --slot-height: #{$slot-height};
16
+}
17
+
14 18
 .vr-daily-schedule {
15 19
   position: relative;
16 20
   display: flex;
... ...
@@ -35,7 +39,7 @@ $cell-amount: 48;
35 39
   }
36 40
 
37 41
   .daily-timeline-label-container {
38
-    height: $slot-height;
42
+    height: var(--slot-height);
39 43
     position: relative;
40 44
     padding-inline-end: 8px;
41 45
     text-align: right;
... ...
@@ -72,7 +76,7 @@ $cell-amount: 48;
72 76
     vertical-align: top;
73 77
 
74 78
     .line {
75
-      height: $slot-height;
79
+      height: var(--slot-height);
76 80
 
77 81
       &:after {
78 82
         content: "";
... ...
@@ -104,10 +108,10 @@ $cell-amount: 48;
104 108
       height: 100%;
105 109
       width: 100%;
106 110
       display: grid;
107
-      grid-template-rows: repeat($cell-amount, #{$slot-height / ($cell-amount / 24)});
111
+      grid-template-rows: repeat($cell-amount, calc(var(--slot-height) / (#{$cell-amount} / 24)));
108 112
 
109 113
       .event-cell {
110
-        line-height: $slot-height / 4;
114
+        line-height: calc(var(--slot-height) / 4);
111 115
         z-index: 2;
112 116
         box-sizing: border-box;
113 117
         border-radius: 5px;