From 49cbf28bbaa2f541f96376f02012554d9c333adc Mon Sep 17 00:00:00 2001
From: tvluke <tvluke@chaotikum.org>
Date: Thu, 1 Jun 2023 20:38:26 +0200
Subject: [PATCH] improve loaning stuff

---
 _inventory/3ddrucker.md                       |   1 +
 _inventory/atem-mini-blau.md                  |   1 +
 _inventory/atem-mini-weiss.md                 |   1 +
 _inventory/aver-gamer-mini.md                 |   1 +
 _inventory/beamer2.md                         |   1 +
 ...agic-design-mv-bidirect-sdihdmi-3g-blau.md |   1 +
 ...gic-design-mv-bidirect-sdihdmi-3g-weiss.md |   1 +
 _inventory/elgato-capturecard.md              |   1 +
 _inventory/elgato-stream-deck.md              |   1 +
 _inventory/fraese.md                          |   1 +
 _inventory/heatpress.md                       |   1 +
 _inventory/labornetzteil.md                   |   1 +
 _inventory/loetstationen.md                   |   1 +
 _inventory/osziloskop.md                      |   1 +
 _inventory/plotter.md                         |   1 +
 _inventory/rode-blau.md                       |   1 +
 _inventory/rode-weiss.md                      |   1 +
 _inventory/schneidplotter.md                  |   1 +
 _inventory/sirui-sh-25-blau.md                |   1 +
 _inventory/sirui-sh-25-weiss.md               |   1 +
 _inventory/stativleinwand.md                  |   1 +
 _inventory/stickmaschine.md                   |   1 +
 _inventory/superlux-hd-681-evo-blau.md        |   1 +
 _inventory/superlux-hd-681-evo-weiss.md       |   1 +
 _layouts/default.html                         |   8 +-
 _layouts/device.html                          |  61 ++-
 _layouts/events.html                          |  12 +-
 _layouts/verleih.html                         |  55 ++-
 assets/fullcalendar/loancalendar.js           | 381 ------------------
 29 files changed, 132 insertions(+), 409 deletions(-)

diff --git a/_inventory/3ddrucker.md b/_inventory/3ddrucker.md
index 6e3c082e..14c4ef97 100644
--- a/_inventory/3ddrucker.md
+++ b/_inventory/3ddrucker.md
@@ -5,6 +5,7 @@ name: "3D-Drucker"
 uid: 40873e89-1515-412c-9a40-c27daf4e9894
 wikilink: https://wiki.chaotikum.org/hackspace:infrastruktur:3ddrucker
 imagetag: 3dprinterpic
+calcolor: "#af97a6"
 sets: 
  - werkstatt
 hints:
diff --git a/_inventory/atem-mini-blau.md b/_inventory/atem-mini-blau.md
index 18784a82..9b5a1b2f 100644
--- a/_inventory/atem-mini-blau.md
+++ b/_inventory/atem-mini-blau.md
@@ -4,6 +4,7 @@ name: "ATEM Mini Extreme ISO (Koffer Blau)"
 #https://www.uuidgenerator.net/
 uid: e8b93fff-0f17-4a5a-ae97-611de68a86c5
 wikilink: https://wiki.chaotikum.org/hackspace:equipment:atem_mini_extreme_iso_1
+calcolor: "#69808e"
 sets: 
  - video
  - leihbar
diff --git a/_inventory/atem-mini-weiss.md b/_inventory/atem-mini-weiss.md
index e5570e61..6047ab08 100644
--- a/_inventory/atem-mini-weiss.md
+++ b/_inventory/atem-mini-weiss.md
@@ -4,6 +4,7 @@ name: "ATEM Mini Extreme ISO (Koffer Weiß)"
 #https://www.uuidgenerator.net/
 uid: 34eaa382-de42-4f1e-8f4d-987af077a613
 wikilink: https://wiki.chaotikum.org/hackspace:equipment:atem_mini_extreme_iso_2
+calcolor: "#118084"
 sets: 
  - video
  - leihbar
diff --git a/_inventory/aver-gamer-mini.md b/_inventory/aver-gamer-mini.md
index 07949a09..fe3e8f76 100644
--- a/_inventory/aver-gamer-mini.md
+++ b/_inventory/aver-gamer-mini.md
@@ -4,6 +4,7 @@ name: "Aver Capturecard Live Gamer MINI"
 #https://www.uuidgenerator.net/
 uid: 65b3752c-440e-4dc4-876c-5dd7b148ec92
 wikilink: https://wiki.chaotikum.org/hackspace:equipment:aver_gamer_mini
+calcolor: "#f4c3dd"
 sets: 
  - video
  - leihbar
diff --git a/_inventory/beamer2.md b/_inventory/beamer2.md
index dc99ff7e..a7c61d4a 100644
--- a/_inventory/beamer2.md
+++ b/_inventory/beamer2.md
@@ -4,6 +4,7 @@ name: "Epson EB-992F Beamer (Mobiles Vortragsset)"
 #https://www.uuidgenerator.net/
 uid: 14961ed3-235f-4869-918b-573aa4f2befa
 wikilink: https://wiki.chaotikum.org/hackspace:equipment:beamer2
+calcolor: "#c942b0"
 sets: 
  - vortrag
  - leihbar
diff --git a/_inventory/blackmagic-design-mv-bidirect-sdihdmi-3g-blau.md b/_inventory/blackmagic-design-mv-bidirect-sdihdmi-3g-blau.md
index 606b2395..91618e48 100644
--- a/_inventory/blackmagic-design-mv-bidirect-sdihdmi-3g-blau.md
+++ b/_inventory/blackmagic-design-mv-bidirect-sdihdmi-3g-blau.md
@@ -4,6 +4,7 @@ name: "Blackmagic Design MC BiDirect. SDI/HDMI 3G (2x) (Koffer Blau)"
 #https://www.uuidgenerator.net/
 uid: b5b9afc2-213d-49de-9ff0-6480cc8292fe
 wikilink: https://wiki.chaotikum.org/hackspace:equipment:blackmagic_design_mv_bidirect_sdihdmi_3g_1
+calcolor: "#0c445b"
 sets: 
  - video
  - leihbar
diff --git a/_inventory/blackmagic-design-mv-bidirect-sdihdmi-3g-weiss.md b/_inventory/blackmagic-design-mv-bidirect-sdihdmi-3g-weiss.md
index 0b3226a3..936ac786 100644
--- a/_inventory/blackmagic-design-mv-bidirect-sdihdmi-3g-weiss.md
+++ b/_inventory/blackmagic-design-mv-bidirect-sdihdmi-3g-weiss.md
@@ -4,6 +4,7 @@ name: "Blackmagic Design MC BiDirect. SDI/HDMI 3G (2x) (Koffer Weiß)"
 #https://www.uuidgenerator.net/
 uid: 67fe9c8b-a59b-4d90-9cd2-27e00a6fc013
 wikilink: https://wiki.chaotikum.org/hackspace:equipment:blackmagic_design_mv_bidirect_sdihdmi_3g_2
+calcolor: "#cdeacc"
 sets: 
  - video
  - leihbar
diff --git a/_inventory/elgato-capturecard.md b/_inventory/elgato-capturecard.md
index 790e3bed..6a4fd2e9 100644
--- a/_inventory/elgato-capturecard.md
+++ b/_inventory/elgato-capturecard.md
@@ -4,6 +4,7 @@ name: "Elgato Game Capture HD60 S"
 #https://www.uuidgenerator.net/
 uid: 0fcdfefe-6741-4833-83d4-fa0c6ed01b14
 wikilink: https://wiki.chaotikum.org/hackspace:equipment:elgato_game_capture_hd60_s
+calcolor: "#4e4f4b"
 sets: 
  - video
  - leihbar
diff --git a/_inventory/elgato-stream-deck.md b/_inventory/elgato-stream-deck.md
index c298bdd9..fd718f39 100644
--- a/_inventory/elgato-stream-deck.md
+++ b/_inventory/elgato-stream-deck.md
@@ -4,6 +4,7 @@ name: "Elgato Stream Deck"
 #https://www.uuidgenerator.net/
 uid: 78517d23-2e83-4f27-b289-df6853f1ae34
 wikilink: https://wiki.chaotikum.org/hackspace:equipment:elgato_stream_deck
+calcolor: "#47ef6c"
 sets: 
  - video
  - leihbar
diff --git a/_inventory/fraese.md b/_inventory/fraese.md
index 269921a3..5111a0a8 100644
--- a/_inventory/fraese.md
+++ b/_inventory/fraese.md
@@ -6,6 +6,7 @@ uid: 3fe2ca58-932a-440a-8c1f-b0f9f8db6ade
 safetybriefing: true
 safetylink: https://wiki.chaotikum.org/hackspace:werkstatt:sicherheitsbelehrung:fraese
 wikilink: https://wiki.chaotikum.org/hackspace:infrastruktur:cncfraese
+calcolor: "#96aa3d"
 imagetag: cncfraese
 sets: 
  - werkstatt
diff --git a/_inventory/heatpress.md b/_inventory/heatpress.md
index 1ba7b27e..2466dd72 100644
--- a/_inventory/heatpress.md
+++ b/_inventory/heatpress.md
@@ -5,6 +5,7 @@ name: "Heatpress"
 uid: 59698f81-b91b-4ee3-97d2-4c7e8fa05355
 imagetag: heatpress
 wikilink: https://wiki.chaotikum.org/hackspace:werkstatt:heatpress
+calcolor: "#87612d"
 sets: 
  - werkstatt
 hints:
diff --git a/_inventory/labornetzteil.md b/_inventory/labornetzteil.md
index b71827c7..6ddd0820 100644
--- a/_inventory/labornetzteil.md
+++ b/_inventory/labornetzteil.md
@@ -4,6 +4,7 @@ name: "Labornetzteil"
 #https://www.uuidgenerator.net/
 uid: a51708b2-7a7d-4b32-9a53-9928a324f216
 wikilink: https://wiki.chaotikum.org/hackspace:werkstatt:labornetzteil
+calcolor: "#85b2a2"
 sets: 
  - werkstatt
 hints:
diff --git a/_inventory/loetstationen.md b/_inventory/loetstationen.md
index 929f7592..ed471bdd 100644
--- a/_inventory/loetstationen.md
+++ b/_inventory/loetstationen.md
@@ -4,6 +4,7 @@ name: "Lötstationen"
 #https://www.uuidgenerator.net/
 uid: eadee3ae-82b9-480d-9766-8a408cf84193
 wikilink: https://wiki.chaotikum.org/hackspace:werkstatt:loetstationen
+calcolor: "#123456"
 sets: 
  - werkstatt
 imagetag: loetstationen
diff --git a/_inventory/osziloskop.md b/_inventory/osziloskop.md
index b2b650ac..b91a499d 100644
--- a/_inventory/osziloskop.md
+++ b/_inventory/osziloskop.md
@@ -6,6 +6,7 @@ uid: 810acaa5-3c81-4224-b6ba-5c8d990283be
 safetybriefing: true
 safetylink: https://wiki.chaotikum.org/hackspace:werkstatt:sicherheitsbelehrung:oszilloskop
 wikilink: https://wiki.chaotikum.org/hackspace:infrastruktur:oszilloskop
+calcolor: "#123456"
 sets: 
  - werkstatt
 hints:
diff --git a/_inventory/plotter.md b/_inventory/plotter.md
index ac5ce02a..22e155bd 100644
--- a/_inventory/plotter.md
+++ b/_inventory/plotter.md
@@ -4,6 +4,7 @@ name: "Plotter"
 #https://www.uuidgenerator.net/
 uid: a802345f-2e4d-44ce-8cc8-3338df8ccf7c
 wikilink: https://wiki.chaotikum.org/hackspace:equipment:plotter
+calcolor: "#123456"
 sets: 
  - werkstatt
 hints:
diff --git a/_inventory/rode-blau.md b/_inventory/rode-blau.md
index d2973039..3514618b 100644
--- a/_inventory/rode-blau.md
+++ b/_inventory/rode-blau.md
@@ -4,6 +4,7 @@ name: "ROEDE Mikrofone (Koffer Blau)"
 #https://www.uuidgenerator.net/
 uid: ed7a8302-34af-429f-9736-86740a03962a
 wikilink: https://wiki.chaotikum.org/hackspace:equipment:rode_wireless_go_1
+calcolor: "#322ce8"
 sets: 
  - video
  - leihbar
diff --git a/_inventory/rode-weiss.md b/_inventory/rode-weiss.md
index 03dff262..51dc9c6f 100644
--- a/_inventory/rode-weiss.md
+++ b/_inventory/rode-weiss.md
@@ -4,6 +4,7 @@ name: "ROEDE Mikrofone (Koffer Weiss)"
 #https://www.uuidgenerator.net/
 uid: 6c004241-448a-4b4a-b44a-e3516eb7b8ba
 wikilink: https://wiki.chaotikum.org/hackspace:equipment:rode_wireless_go_2
+calcolor: "#3f3c44"
 sets: 
  - video
  - leihbar
diff --git a/_inventory/schneidplotter.md b/_inventory/schneidplotter.md
index 8a82628b..f3be0d09 100644
--- a/_inventory/schneidplotter.md
+++ b/_inventory/schneidplotter.md
@@ -4,6 +4,7 @@ name: "Schneidplotter"
 #https://www.uuidgenerator.net/
 uid: 637ee8d8-105c-418b-b81d-96d8afce596f
 wikilink: https://wiki.chaotikum.org/hackspace:werkstatt:schneideplotter
+calcolor: "#123456"
 sets: 
  - werkstatt
 hints:
diff --git a/_inventory/sirui-sh-25-blau.md b/_inventory/sirui-sh-25-blau.md
index f2d663ac..0d26c2dd 100644
--- a/_inventory/sirui-sh-25-blau.md
+++ b/_inventory/sirui-sh-25-blau.md
@@ -4,6 +4,7 @@ name: "Videostativ SIRUI SH-25 (Koffer Blau)"
 #https://www.uuidgenerator.net/
 uid: 646997ba-ca63-4854-a1df-73c6443e65e3
 wikilink: https://wiki.chaotikum.org/hackspace:equipment:sirui_sh-25_1
+calcolor: "#73b794"
 sets: 
  - video
  - leihbar
diff --git a/_inventory/sirui-sh-25-weiss.md b/_inventory/sirui-sh-25-weiss.md
index 1467b883..00ebc29f 100644
--- a/_inventory/sirui-sh-25-weiss.md
+++ b/_inventory/sirui-sh-25-weiss.md
@@ -4,6 +4,7 @@ name: "Videostativ SIRUI SH-25 (Koffer Weiß)"
 #https://www.uuidgenerator.net/
 uid: 1cc57ea7-6bcc-4113-bb26-e682e338256c
 wikilink: https://wiki.chaotikum.org/hackspace:equipment:sirui_sh-25_2
+calcolor: "#76f787"
 sets: 
  - video
  - leihbar
diff --git a/_inventory/stativleinwand.md b/_inventory/stativleinwand.md
index 8818f8ec..c0289f38 100644
--- a/_inventory/stativleinwand.md
+++ b/_inventory/stativleinwand.md
@@ -4,6 +4,7 @@ name: "celexon Stativleinwand Ultra-lightweight 177 x 100cm"
 #https://www.uuidgenerator.net/
 uid: 3ff192c6-cc5e-4656-b202-25fd6ffaa8bc
 wikilink: https://wiki.chaotikum.org/hackspace:equipment:stativleinwand
+calcolor: "#7d8ad1"
 sets: 
  - vortrag
  - leihbar
diff --git a/_inventory/stickmaschine.md b/_inventory/stickmaschine.md
index d3679f04..ee13fb67 100644
--- a/_inventory/stickmaschine.md
+++ b/_inventory/stickmaschine.md
@@ -4,6 +4,7 @@ name: "Stickmaschine"
 #https://www.uuidgenerator.net/
 uid: 6171339f-382b-4ae2-90a2-b161951e7f11
 wikilink: https://wiki.chaotikum.org/hackspace:werkstatt:stickmaschine
+calcolor: "#eae1e5"
 sets: 
  - werkstatt
 imagetag: stickmaschine
diff --git a/_inventory/superlux-hd-681-evo-blau.md b/_inventory/superlux-hd-681-evo-blau.md
index e37d5a8a..7485d779 100644
--- a/_inventory/superlux-hd-681-evo-blau.md
+++ b/_inventory/superlux-hd-681-evo-blau.md
@@ -4,6 +4,7 @@ name: "Superlux HD-681 Evo Kopfhörer (Koffer Blau)"
 #https://www.uuidgenerator.net/
 uid: 595c58b5-2b48-4aac-b986-62ac22e0307f
 wikilink: https://wiki.chaotikum.org/hackspace:equipment:superlux_hd-681_evo_1
+calcolor: "#134a66"
 sets: 
  - video
  - leihbar
diff --git a/_inventory/superlux-hd-681-evo-weiss.md b/_inventory/superlux-hd-681-evo-weiss.md
index cf094ee2..cb77c4e8 100644
--- a/_inventory/superlux-hd-681-evo-weiss.md
+++ b/_inventory/superlux-hd-681-evo-weiss.md
@@ -4,6 +4,7 @@ name: "Superlux HD-681 Evo Kopfhörer (Koffer Weiß)"
 #https://www.uuidgenerator.net/
 uid: 75cfafdb-9b33-4bd0-af88-d051ed5f0857
 wikilink: https://wiki.chaotikum.org/hackspace:equipment:superlux_hd-681_evo_2
+calcolor: "#cacecb"
 sets: 
  - video
  - leihbar
diff --git a/_layouts/default.html b/_layouts/default.html
index d932cefa..af5a535b 100644
--- a/_layouts/default.html
+++ b/_layouts/default.html
@@ -21,11 +21,9 @@
 			{% seo %}
 		{% endif %}
 
-    <link rel="stylesheet" href="{{ "/assets/styles.css" | relative_url }}">
-    {% if page.calendar %}
-    <link href='/assets/fullcalendar/fullcalendar.min.css' rel='stylesheet'>
-    <link href='/assets/fullcalendar/fullcalendar.print.min.css' rel='stylesheet' media='print'>
-    {% endif %}
+    <link rel="stylesheet" href="{{ site.url }}/assets/styles.css">
+    <link href='{{ site.url }}/assets/fullcalendar/fullcalendar.min.css' rel='stylesheet'>
+    <link href='{{ site.url }}/assets/fullcalendar/fullcalendar.print.min.css' rel='stylesheet' media='print'>
 		{% if site.avatarurl %}{% include site-favicons.html %}{% endif %}
 	</head>
 	<body class="layout-{{ page.layout }}{% if page.title %}  {{ page.title | slugify }}{% endif %}">
diff --git a/_layouts/device.html b/_layouts/device.html
index a119b472..b73e5dc9 100644
--- a/_layouts/device.html
+++ b/_layouts/device.html
@@ -4,11 +4,9 @@ layout: default
 
 {% include site-header.html %}
 
-<main class="main  container">
-
+<main class="main container">
 <div class="content-up">
-
-    <article class="article  article--page  typeset">
+    <article class="article--page  typeset">
       <h4 id="{{page.uid}}">{{page.name}}</h4>
       <p> {{page.content}}</p>
       {%- if page.imagetag -%} {%- include {{site.gallery}} topic=page.imagetag -%} {%- endif -%}
@@ -27,7 +25,7 @@ layout: default
           </ul>
           <p style="text-align:center;margin:0">
           {% for c in page.commandsigns %}
-            <a href="https://de.wikipedia.org/wiki/Gebotszeichen" target="_blank" style="background-image:none;"><img src="{{ site.baseurl }}/assets/iso7010/{{ c}}.svg" alt="{{c}}" width="100"></a>
+            <a href="https://de.wikipedia.org/wiki/Gebotszeichen" target="_blank" style="background-image:none;"><img src="{{ site.url }}/assets/iso7010/{{ c}}.svg" alt="{{c}}" width="100"></a>
           {% endfor %}
           </p>
 
@@ -39,12 +37,53 @@ layout: default
 
           <p style="text-align:center;margin-bottom:0px;"><a href="https://wiki.chaotikum.org/hackspace:ausstattung:start">wiki.chaotikum.org/hackspace:ausstattung:start</a></p>
        </div>
-
-
-    </article>
-  
-  </div>
-
+      </article>     
+    <div id="calendar"></div>
+    </div> 
 </main>
 
 {% include site-footer.html %}
+
+<script src='{{ site.url }}/assets/fullcalendar/moment.min.js'></script>
+      <script src='{{ site.url }}/assets/fullcalendar/jquery.min.js'></script>
+      <script src='{{ site.url }}/assets/fullcalendar/ical.min.js'></script>
+      <script src='{{ site.url }}/assets/fullcalendar/fullcalendar.min.js'></script>
+      <script src='{{ site.url }}/assets/fullcalendar/de.js'></script>
+      <script>
+      $(document).ready(function() {
+        $('#calendar').fullCalendar({
+          header: {
+            left: 'prev,next today',
+            center: 'title',
+            right: 'month,agendaWeek,agendaDay,listMonth'
+          },
+          eventLimit: true, // allow "more" link when too many events
+          locale: "de",
+          navLinks: true,
+        });
+        {% assign realslug = page.url | split:'/' | last %}
+          $.get('{{ site.url }}/loancal/{{realslug}}/loancal.ics', function (res) {
+            var events = []
+            var parsed = ICAL.parse(res);
+            parsed[2].forEach(function(event) {
+              if (event[0] !== 'vevent') return
+              var data = {};
+              event[1].forEach(function(item){
+                data[item[0]] = item[3];
+              });
+              events.push({
+                title: data["summary"],
+                start: data["dtstart"],
+                end: data["dtend"],
+                url: data["url"],
+                location: data["location"]
+              });
+            });
+            e_source = {}
+            e_source['events'] = events;
+            e_source['id'] = 'holydays'
+            e_source['color']="{{device.calcolor}}"
+            $('#calendar').fullCalendar('addEventSource', e_source);
+          });
+        });
+</script>
diff --git a/_layouts/events.html b/_layouts/events.html
index 3089a28a..06f4cd50 100644
--- a/_layouts/events.html
+++ b/_layouts/events.html
@@ -13,9 +13,9 @@ layout: default
 
 {% include site-footer.html %}
 
-<script src='/assets/fullcalendar/moment.min.js'></script>
-<script src='/assets/fullcalendar/jquery.min.js'></script>
-<script src='/assets/fullcalendar/ical.min.js'></script>
-<script src='/assets/fullcalendar/fullcalendar.min.js'></script>
-<script src='/assets/fullcalendar/de.js'></script>
-<script src='/assets/fullcalendar/calendar.js'></script>
+<script src='{{ site.url }}/assets/fullcalendar/moment.min.js'></script>
+<script src='{{ site.url }}/assets/fullcalendar/jquery.min.js'></script>
+<script src='{{ site.url }}/assets/fullcalendar/ical.min.js'></script>
+<script src='{{ site.url }}/assets/fullcalendar/fullcalendar.min.js'></script>
+<script src='{{ site.url }}/assets/fullcalendar/de.js'></script>
+<script src='{{ site.url }}/assets/fullcalendar/calendar.js'></script>
diff --git a/_layouts/verleih.html b/_layouts/verleih.html
index 478ed485..93e7cf75 100644
--- a/_layouts/verleih.html
+++ b/_layouts/verleih.html
@@ -19,9 +19,52 @@ layout: default
 
 {% include site-footer.html %}
 
-<script src='/assets/fullcalendar/moment.min.js'></script>
-<script src='/assets/fullcalendar/jquery.min.js'></script>
-<script src='/assets/fullcalendar/ical.min.js'></script>
-<script src='/assets/fullcalendar/fullcalendar.min.js'></script>
-<script src='/assets/fullcalendar/de.js'></script>
-<script src='/assets/fullcalendar/loancalendar.js'></script>
+<script src='{{ site.url }}/assets/fullcalendar/moment.min.js'></script>
+      <script src='{{ site.url }}/assets/fullcalendar/jquery.min.js'></script>
+      <script src='{{ site.url }}/assets/fullcalendar/ical.min.js'></script>
+      <script src='{{ site.url }}/assets/fullcalendar/fullcalendar.min.js'></script>
+      <script src='{{ site.url }}/assets/fullcalendar/de.js'></script>
+<script>
+$(document).ready(function() {
+  $('#calendar').fullCalendar({
+    header: {
+      left: 'prev,next today',
+      center: 'title',
+      right: 'month,agendaWeek,agendaDay,listMonth'
+    },
+    eventLimit: true, // allow "more" link when too many events
+    locale: "de",
+    navLinks: true,
+  });
+  {% for loancal in site.loancal %}
+  {%- for device in site.inventory -%}
+  {%- if loancal.device == device.uid -%}
+  {%- assign realslug = device.url | split:'/' | last -%}
+    $.get('{{ site.url }}/loancal/{{realslug}}/loancal.ics', function (res) {
+      var events = []
+      var parsed = ICAL.parse(res);
+      parsed[2].forEach(function(event) {
+        if (event[0] !== 'vevent') return
+        var data = {};
+        event[1].forEach(function(item){
+          data[item[0]] = item[3];
+        });
+        events.push({
+          title: data["summary"],
+          start: data["dtstart"],
+          end: data["dtend"],
+          url: data["url"],
+          location: data["location"]
+        });
+      });
+      e_source = {}
+      e_source['events'] = events;
+      e_source['id'] = 'holydays'
+      e_source['color']="{{device.calcolor}}"
+      $('#calendar').fullCalendar('addEventSource', e_source);
+    });
+  {%- endif -%}
+  {%- endfor -%}
+  {% endfor %}
+  });
+</script>
diff --git a/assets/fullcalendar/loancalendar.js b/assets/fullcalendar/loancalendar.js
index 4081640b..e69de29b 100644
--- a/assets/fullcalendar/loancalendar.js
+++ b/assets/fullcalendar/loancalendar.js
@@ -1,381 +0,0 @@
-$(document).ready(function() {
-  $('#calendar').fullCalendar({
-    header: {
-      left: 'prev,next today',
-      center: 'title',
-      right: 'month,agendaWeek,agendaDay,listMonth'
-    },
-    eventLimit: true, // allow "more" link when too many events
-    locale: "de",
-    navLinks: true,
-  });
-  $.get('/loancal/atem-mini-blau/loancal.ics', function (res) {
-    var events = []
-    var parsed = ICAL.parse(res);
-    parsed[2].forEach(function(event) {
-      if (event[0] !== 'vevent') return
-      var data = {};
-      event[1].forEach(function(item){
-        data[item[0]] = item[3];
-      });
-      events.push({
-        title: data["summary"],
-        start: data["dtstart"],
-        end: data["dtend"],
-        url: data["url"],
-        location: data["location"]
-      });
-    });
-    e_source = {}
-    e_source['events'] = events;
-    e_source['id'] = 'holydays'
-    e_source['color']="#7697d0"
-    $('#calendar').fullCalendar('removeEventSources')
-    $('#calendar').fullCalendar('addEventSource', e_source);
-  });
-  $.get('/loancal/atem-mini-weiss/loancal.ics', function (res) {
-    var events = []
-    var parsed = ICAL.parse(res);
-    parsed[2].forEach(function(event) {
-      if (event[0] !== 'vevent') return
-      var data = {};
-      event[1].forEach(function(item){
-        data[item[0]] = item[3];
-      });
-      events.push({
-        title: data["summary"],
-        start: data["dtstart"],
-        end: data["dtend"],
-        url: data["url"],
-        location: data["location"]
-      });
-    });
-    e_source = {}
-    e_source['events'] = events;
-    e_source['id'] = 'holydays'
-    e_source['color']="#cfa687"
-    $('#calendar').fullCalendar('addEventSource', e_source);
-  });
-    $.get('/loancal/aver-gamer-mini/loancal.ics', function (res) {
-    var events = []
-    var parsed = ICAL.parse(res);
-    parsed[2].forEach(function(event) {
-      if (event[0] !== 'vevent') return
-      var data = {};
-      event[1].forEach(function(item){
-        data[item[0]] = item[3];
-      });
-      events.push({
-        title: data["summary"],
-        start: data["dtstart"],
-        end: data["dtend"],
-        url: data["url"],
-        location: data["location"]
-      });
-    });
-    e_source = {}
-    e_source['events'] = events;
-    e_source['id'] = 'holydays'
-    e_source['color']="#337b59"
-    $('#calendar').fullCalendar('addEventSource', e_source);
-  });
-  $.get('/loancal/blackmagic-design-mv-bidirect-sdihdmi-3g-blau/loancal.ics', function (res) {
-    var events = []
-    var parsed = ICAL.parse(res);
-    parsed[2].forEach(function(event) {
-      if (event[0] !== 'vevent') return
-      var data = {};
-      event[1].forEach(function(item){
-        data[item[0]] = item[3];
-      });
-      events.push({
-        title: data["summary"],
-        start: data["dtstart"],
-        end: data["dtend"],
-        url: data["url"],
-        location: data["location"]
-      });
-    });
-    e_source = {}
-    e_source['events'] = events;
-    e_source['id'] = 'holydays'
-    e_source['color']="#57034b"
-    $('#calendar').fullCalendar('addEventSource', e_source);
-  });
-  $.get('/loancal/blackmagic-design-mv-bidirect-sdihdmi-3g-weiss/loancal.ics', function (res) {
-    var events = []
-    var parsed = ICAL.parse(res);
-    parsed[2].forEach(function(event) {
-      if (event[0] !== 'vevent') return
-      var data = {};
-      event[1].forEach(function(item){
-        data[item[0]] = item[3];
-      });
-      events.push({
-        title: data["summary"],
-        start: data["dtstart"],
-        end: data["dtend"],
-        url: data["url"],
-        location: data["location"]
-      });
-    });
-    e_source = {}
-    e_source['events'] = events;
-    e_source['id'] = 'holydays'
-    e_source['color']="#3ab4bc"
-    $('#calendar').fullCalendar('addEventSource', e_source);
-  });
-  $.get('/loancal/elgato-capturecard/loancal.ics', function (res) {
-    var events = []
-    var parsed = ICAL.parse(res);
-    parsed[2].forEach(function(event) {
-      if (event[0] !== 'vevent') return
-      var data = {};
-      event[1].forEach(function(item){
-        data[item[0]] = item[3];
-      });
-      events.push({
-        title: data["summary"],
-        start: data["dtstart"],
-        end: data["dtend"],
-        url: data["url"],
-        location: data["location"]
-      });
-    });
-    e_source = {}
-    e_source['events'] = events;
-    e_source['id'] = 'holydays'
-    e_source['color']="#675cbf"
-    $('#calendar').fullCalendar('addEventSource', e_source);
-  });
-  $.get('/loancal/elgato-stream-deck/loancal.ics', function (res) {
-    var events = []
-    var parsed = ICAL.parse(res);
-    parsed[2].forEach(function(event) {
-      if (event[0] !== 'vevent') return
-      var data = {};
-      event[1].forEach(function(item){
-        data[item[0]] = item[3];
-      });
-      events.push({
-        title: data["summary"],
-        start: data["dtstart"],
-        end: data["dtend"],
-        url: data["url"],
-        location: data["location"]
-      });
-    });
-    e_source = {}
-    e_source['events'] = events;
-    e_source['id'] = 'holydays'
-    e_source['color']="#ba3946"
-    $('#calendar').fullCalendar('addEventSource', e_source);
-  });
-  $.get('/loancal/sirui-sh-25-blau/loancal.ics', function (res) {
-    var events = []
-    var parsed = ICAL.parse(res);
-    parsed[2].forEach(function(event) {
-      if (event[0] !== 'vevent') return
-      var data = {};
-      event[1].forEach(function(item){
-        data[item[0]] = item[3];
-      });
-      events.push({
-        title: data["summary"],
-        start: data["dtstart"],
-        end: data["dtend"],
-        url: data["url"],
-        location: data["location"]
-      });
-    });
-    e_source = {}
-    e_source['events'] = events;
-    e_source['id'] = 'holydays'
-    e_source['color']="#a87831"
-    $('#calendar').fullCalendar('addEventSource', e_source);
-  });
-  $.get('/loancal/sirui-sh-25-weiss/loancal.ics', function (res) {
-    var events = []
-    var parsed = ICAL.parse(res);
-    parsed[2].forEach(function(event) {
-      if (event[0] !== 'vevent') return
-      var data = {};
-      event[1].forEach(function(item){
-        data[item[0]] = item[3];
-      });
-      events.push({
-        title: data["summary"],
-        start: data["dtstart"],
-        end: data["dtend"],
-        url: data["url"],
-        location: data["location"]
-      });
-    });
-    e_source = {}
-    e_source['events'] = events;
-    e_source['id'] = 'holydays'
-    e_source['color']="#295c6e"
-    $('#calendar').fullCalendar('addEventSource', e_source);
-  });
-  $.get('/loancal/elgato-stream-deck/loancal.ics', function (res) {
-    var events = []
-    var parsed = ICAL.parse(res);
-    parsed[2].forEach(function(event) {
-      if (event[0] !== 'vevent') return
-      var data = {};
-      event[1].forEach(function(item){
-        data[item[0]] = item[3];
-      });
-      events.push({
-        title: data["summary"],
-        start: data["dtstart"],
-        end: data["dtend"],
-        url: data["url"],
-        location: data["location"]
-      });
-    });
-    e_source = {}
-    e_source['events'] = events;
-    e_source['id'] = 'holydays'
-    e_source['color']="#661f09"
-    $('#calendar').fullCalendar('addEventSource', e_source);
-  });
-  $.get('/loancal/superlux-hd-681-evo-blau/loancal.ics', function (res) {
-    var events = []
-    var parsed = ICAL.parse(res);
-    parsed[2].forEach(function(event) {
-      if (event[0] !== 'vevent') return
-      var data = {};
-      event[1].forEach(function(item){
-        data[item[0]] = item[3];
-      });
-      events.push({
-        title: data["summary"],
-        start: data["dtstart"],
-        end: data["dtend"],
-        url: data["url"],
-        location: data["location"]
-      });
-    });
-    e_source = {}
-    e_source['events'] = events;
-    e_source['id'] = 'holydays'
-    e_source['color']="#4617ab"
-    $('#calendar').fullCalendar('addEventSource', e_source);
-  });
-  $.get('/loancal/superlux-hd-681-evo-weiss/loancal.ics', function (res) {
-    var events = []
-    var parsed = ICAL.parse(res);
-    parsed[2].forEach(function(event) {
-      if (event[0] !== 'vevent') return
-      var data = {};
-      event[1].forEach(function(item){
-        data[item[0]] = item[3];
-      });
-      events.push({
-        title: data["summary"],
-        start: data["dtstart"],
-        end: data["dtend"],
-        url: data["url"],
-        location: data["location"]
-      });
-    });
-    e_source = {}
-    e_source['events'] = events;
-    e_source['id'] = 'holydays'
-    e_source['color']="#7c6a33"
-    $('#calendar').fullCalendar('addEventSource', e_source);
-  });
-  $.get('/loancal/beamer2/loancal.ics', function (res) {
-    var events = []
-    var parsed = ICAL.parse(res);
-    parsed[2].forEach(function(event) {
-      if (event[0] !== 'vevent') return
-      var data = {};
-      event[1].forEach(function(item){
-        data[item[0]] = item[3];
-      });
-      events.push({
-        title: data["summary"],
-        start: data["dtstart"],
-        end: data["dtend"],
-        url: data["url"],
-        location: data["location"]
-      });
-    });
-    e_source = {}
-    e_source['events'] = events;
-    e_source['id'] = 'holydays'
-    e_source['color']="#30feb0"
-    $('#calendar').fullCalendar('addEventSource', e_source);
-  });
-  $.get('/loancal/stativleinwand/loancal.ics', function (res) {
-    var events = []
-    var parsed = ICAL.parse(res);
-    parsed[2].forEach(function(event) {
-      if (event[0] !== 'vevent') return
-      var data = {};
-      event[1].forEach(function(item){
-        data[item[0]] = item[3];
-      });
-      events.push({
-        title: data["summary"],
-        start: data["dtstart"],
-        end: data["dtend"],
-        url: data["url"],
-        location: data["location"]
-      });
-    });
-    e_source = {}
-    e_source['events'] = events;
-    e_source['id'] = 'holydays'
-    e_source['color']="#90e18c"
-    $('#calendar').fullCalendar('addEventSource', e_source);
-  });
-  $.get('/loancal/rode-blau/loancal.ics', function (res) {
-    var events = []
-    var parsed = ICAL.parse(res);
-    parsed[2].forEach(function(event) {
-      if (event[0] !== 'vevent') return
-      var data = {};
-      event[1].forEach(function(item){
-        data[item[0]] = item[3];
-      });
-      events.push({
-        title: data["summary"],
-        start: data["dtstart"],
-        end: data["dtend"],
-        url: data["url"],
-        location: data["location"]
-      });
-    });
-    e_source = {}
-    e_source['events'] = events;
-    e_source['id'] = 'holydays'
-    e_source['color']="#90e18c"
-    $('#calendar').fullCalendar('addEventSource', e_source);
-  });
-  $.get('/loancal/rode-weiss/loancal.ics', function (res) {
-    var events = []
-    var parsed = ICAL.parse(res);
-    parsed[2].forEach(function(event) {
-      if (event[0] !== 'vevent') return
-      var data = {};
-      event[1].forEach(function(item){
-        data[item[0]] = item[3];
-      });
-      events.push({
-        title: data["summary"],
-        start: data["dtstart"],
-        end: data["dtend"],
-        url: data["url"],
-        location: data["location"]
-      });
-    });
-    e_source = {}
-    e_source['events'] = events;
-    e_source['id'] = 'holydays'
-    e_source['color']="#90e18c"
-    $('#calendar').fullCalendar('addEventSource', e_source);
-  });
-});
\ No newline at end of file
-- 
GitLab