12 Commits
0.1.0 ... 0.1.4

Author SHA1 Message Date
d22acff11f Version Tag added. 2023-12-28 00:44:20 +01:00
09962d8720 Bug in the reminder fixed:
The reminder was entered one day too early.
2023-12-28 00:36:15 +01:00
Max P
f8a78060c9 Merge pull request #5 from PxaMMaxP/dev/link-trash-calender-arnsberg
More scripts added.
2023-12-28 00:04:59 +01:00
64e1492d76 More scripts added. 2023-12-28 00:04:18 +01:00
Max P
73145637c6 Update README.md 2023-12-27 23:59:02 +01:00
Max P
877f36fa55 Merge pull request #4 from PxaMMaxP/dev/link-trash-calender-arnsberg
Download link added.
2023-12-27 23:56:18 +01:00
6c69245bda Update iCal-Datei download link in index.html, bump package version and copy files to docs folder. 2023-12-27 23:55:29 +01:00
Max P
05704ac899 Merge pull request #3 from PxaMMaxP/dev/init
Github page folder name corrected.
2023-12-27 23:38:26 +01:00
ebf5f3524f Github page folder name corrected. 2023-12-27 23:38:05 +01:00
Max P
ad91e6f7a2 Merge pull request #2 from PxaMMaxP/dev/init
Github page added.
2023-12-27 23:37:16 +01:00
15017dcfb3 Github page added.
Paths corrected.
2023-12-27 23:36:39 +01:00
Max P
f613e60b3e Update LICENSE 2023-12-27 23:26:49 +01:00
17 changed files with 804 additions and 19 deletions

2
.gitignore vendored
View File

@@ -1,3 +1,5 @@
.vscode/*
dist/*
node_modules/*
release/*

View File

@@ -1,6 +1,6 @@
MIT License
Copyright (c) 2023 Max P.
Copyright (c) 2023 M. Passarello
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal

View File

@@ -3,13 +3,13 @@
## Hauptmerkmale
- **Einfaches Hochladen**: Benutzer können ihre bestehenden iCalendar-Dateien des Abfallkalenders direkt in die App hochladen.
**Flexible Erinnerungseinstellungen**: Benutzer haben die Möglichkeit, Erinnerungszeiten individuell anzupassen, um ihren persönlichen Bedürfnissen gerecht zu werden.
**Automatische Aktualisierung**: Die App fügt automatisch Erinnerungen zu allen Ereignissen in der iCalendar-Datei hinzu und generiert eine neue Datei zur einfachen Integration in persönliche Kalenderanwendungen.
**Benutzerfreundliches Interface**: Eine klare und einfache Benutzeroberfläche macht die Bedienung der App für jedermann leicht und intuitiv.
**Datenschutzorientiert**: Keine Speicherung persönlicher Daten. Die Verarbeitung erfolgt clientseitig, und die Dateien werden nicht auf dem Server gespeichert.
- **Flexible Erinnerungseinstellungen**: Benutzer haben die Möglichkeit, Erinnerungszeiten individuell anzupassen, um ihren persönlichen Bedürfnissen gerecht zu werden.
- **Automatische Aktualisierung**: Die App fügt automatisch Erinnerungen zu allen Ereignissen in der iCalendar-Datei hinzu und generiert eine neue Datei zur einfachen Integration in persönliche Kalenderanwendungen.
- **Benutzerfreundliches Interface**: Eine klare und einfache Benutzeroberfläche macht die Bedienung der App für jedermann leicht und intuitiv.
- **Datenschutzorientiert**: Keine Speicherung persönlicher Daten. Die Verarbeitung erfolgt clientseitig, und die Dateien werden nicht auf dem Server gespeichert.
## Zielsetzung
Unser Ziel ist es, den Bürgern von Arnsberg einen bequemen und effizienten Weg zu bieten, um ihre Abfallentsorgung zu planen und zu verwalten. Durch die Bereitstellung einer zuverlässigen Erinnerungsfunktion wollen wir das städtische Recycling- und Abfallmanagement fördern und dadurch einen Beitrag zum Umweltschutz leisten.
# Mitwirken
Wir heißen Beiträge zur Verbesserung von AbfallAlarm herzlich willkommen! Falls Sie Ideen, Feedback oder Verbesserungsvorschläge haben, zögern Sie bitte nicht, einen Issue zu eröffnen oder einen Pull Request zu stellen.
Wir heißen Beiträge zur Verbesserung von AbfallAlarm herzlich willkommen! Falls Sie Ideen, Feedback oder Verbesserungsvorschläge haben, zögern Sie bitte nicht, einen Issue zu eröffnen oder einen Pull Request zu stellen.

37
bump-version.js Normal file
View File

@@ -0,0 +1,37 @@
//bump-version.js
const fs = require('fs');
const path = require('path');
const packageJsonPath = path.join(__dirname, 'package.json');
const packageJson = require(packageJsonPath);
// Bestimmen des Versionsteils, der erhöht werden soll
const versionPart = process.argv[2]; // 'major', 'minor', 'patch'
let versionParts = packageJson.version.split('.').map(part => parseInt(part));
switch (versionPart) {
case 'major':
versionParts[0]++;
versionParts[1] = 0;
versionParts[2] = 0;
break;
case 'minor':
versionParts[1]++;
versionParts[2] = 0;
break;
case 'patch':
default:
versionParts[2]++;
break;
}
packageJson.version = versionParts.join('.');
// Zurückschreiben der package.json
fs.writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 2));
console.log(`Version updated to ${packageJson.version}`);
// Versionsnummer in Datei schreiben..
const content = `export const version = '${packageJson.version}';\n`;
fs.writeFileSync(path.join(__dirname, 'src', 'version.ts'), content);

17
copy-release-docs.js Normal file
View File

@@ -0,0 +1,17 @@
//copy-release-docs.js
// Zweck: Kopiert die Dateien aus dem Ordner "public" in den Ordner "docs" und die Datei "dist/bundle.js" in den Ordner "docs/bundle.js"
const copy = require('fs-extra').copy;
// Funktion zum Kopieren von Dateien
async function copyFiles() {
try {
await copy('public', 'docs');
await copy('dist/bundle.js', 'docs/bundle.js');
console.log('Dateien erfolgreich kopiert.');
} catch (error) {
console.error('Fehler beim Kopieren der Dateien:', error);
}
}
// Kopiervorgang starten
copyFiles();

2
docs/bundle.js Normal file
View File

@@ -0,0 +1,2 @@
(()=>{"use strict";var e={953:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.default=class{constructor(e,t,n){this.reminderPrefix="Erinnerung: ",this.icsContent=e,this.reminderDays=t,this.reminderHours=n}modifyEvents(){return this.icsContent.replace(/BEGIN:VEVENT.*?END:VEVENT/gs,(e=>{const t=e.match(/SUMMARY:(.*)\r\n/),n=t?t[1]:"",r=this.createTriggerValue(),o=this.createVAlarmString(this.reminderPrefix+n,r);return e.replace(/END:VEVENT/,o+"END:VEVENT")}))}createVAlarmString(e,t){let n="BEGIN:VALARM\r\n";return n+="ACTION:DISPLAY\r\n",n+=`DESCRIPTION:${e}\r\n`,n+=`TRIGGER:${t}\r\n`,n+="END:VALARM\r\n",n}createTriggerValue(){const e=0===this.reminderHours?0:24-this.reminderHours;let t=this.reminderDays;return 1===t&&(t=0),`-P${t}DT${e}H0M0S`}}},519:function(e,t,n){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const o=r(n(953)),s=n(412);function d(e){!function(){const e=document.getElementById("download-area");e&&e.classList.remove("show-download-area")}();const t=document.getElementById("ical-upload"),n=document.getElementById("reminder-days-select"),r=document.getElementById("reminder-hours-select"),s=parseInt(n.value,10),d=parseInt(r.value,10),i=t.files?t.files[0]:null;if(i){console.log("File uploaded:",i.name);const e=new FileReader;e.onload=e=>{var t;const n=null===(t=e.target)||void 0===t?void 0:t.result;if("string"==typeof n){console.log("File content readable..");const e=new o.default(n,s,d).modifyEvents(),t=function(e){const t=e.lastIndexOf(".");return-1===t?e+" with reminders":e.substring(0,t)+" with reminders"+e.substring(t)}(i.name),r=new Blob([e],{type:"text/calendar"});!function(e,t){const n=document.getElementById("download-area"),r=document.getElementById("download-button");n&&r&&(r.href=t,r.download=e,setTimeout((()=>n.classList.add("show-download-area")),0),document.getElementById("work-button").disabled=!0)}(t,URL.createObjectURL(r))}},e.readAsText(i)}}document.addEventListener("DOMContentLoaded",(()=>{console.log("Loading the WebApp Version "+s.version+"..."),document.getElementById("footer-version").innerText=`Version: ${s.version}`;const e=document.getElementById("work-button");document.getElementById("ical-upload").addEventListener("change",(()=>{e.disabled=!1})),e.addEventListener("click",d)}))},412:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.version=void 0,t.version="0.1.3"}},t={};!function n(r){var o=t[r];if(void 0!==o)return o.exports;var s=t[r]={exports:{}};return e[r].call(s.exports,s,s.exports,n),s.exports}(519)})();
//# sourceMappingURL=bundle.js.map

31
docs/github-corner.css Normal file
View File

@@ -0,0 +1,31 @@
.github-corner:hover .octo-arm {
animation: octocat-wave 560ms ease-in-out
}
@keyframes octocat-wave {
0%,
100% {
transform: rotate(0)
}
20%,
60% {
transform: rotate(-25deg)
}
40%,
80% {
transform: rotate(10deg)
}
}
@media (max-width:500px) {
.github-corner:hover .octo-arm {
animation: none
}
.github-corner .octo-arm {
animation: octocat-wave 560ms ease-in-out
}
}

170
docs/index.css Normal file
View File

@@ -0,0 +1,170 @@
html {
min-height: 100vh;
min-width: 100vw;
}
body {
margin: 0;
padding: 0;
width: 100vw;
min-height: 100vh;
height: auto;
display: flex;
align-items: center;
text-align: center;
font-family: Arial, sans-serif;
}
#app-content {
width: 60%;
max-width: 880px;
padding: 30px 40px;
margin: auto;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
background-color: #ffffff;
background-image: linear-gradient(to right, #ffffff, #e6e6e6);
box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2);
border-radius: 25px;
}
#app-content .header {
width: 90%;
height: auto;
margin-bottom: 10px;
font-size: xx-large;
}
#app-content .logo {
width: 30%;
height: auto;
margin-bottom: 20px;
}
#app-content .description {
margin-bottom: 20px;
}
#working-area .areas {
margin-bottom: 25px;
}
#reminder-setting-area .reminder-days,
#reminder-setting-area .reminder-hours {
margin-bottom: 10px;
}
#upload-area .button,
#upload-area .file-input {
padding: 10px 15px;
margin-bottom: 15px;
border: none;
border-radius: 5px;
cursor: pointer;
font-size: 16px;
transition: background-color 0.3s, box-shadow 0.3s;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
outline: none;
}
#upload-area .button:hover,
#upload-area .file-input:hover {
background-color: #007BFF;
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.3);
}
#upload-area .file-input {
display: block;
width: 80%;
color: #555;
background-color: #f9f9f9;
}
#upload-area .button {
background-color: #28a745;
color: white;
}
#upload-area .button:disabled {
background-color: #cccccc;
cursor: not-allowed;
}
#upload-area #ical-upload {
opacity: 0;
position: absolute;
z-index: -1;
}
#upload-area #ical-upload-label {
background-color: #007bff;
color: white;
display: inline-block;
cursor: pointer;
text-align: center;
}
#upload-area #ical-upload-label:hover {
background-color: #0056b3;
}
#app-content #download-area {
display: block;
overflow: hidden;
height: 0;
opacity: 0;
transition: height 1.5s ease, opacity 0.5s ease;
}
#app-content #download-area.show-download-area {
height: 175px;
opacity: 1;
}
#app-content #download-button {
background-color: #4CAF50;
color: white;
padding: 10px 20px;
text-align: center;
text-decoration: none;
display: inline-block;
font-size: 16px;
margin: 4px 2px;
cursor: pointer;
border: none;
border-radius: 5px;
transition: background-color 0.3s;
}
#app-content #download-button:hover {
background-color: #45a049;
}
#app-content #footer {
margin-top: 30px;
}
h1,
a {
text-wrap: nowrap;
}
@media (max-width: 768px) {
h1 {
font-size: 2rem;
}
h2 {
font-size: 1.5rem;
}
p {
font-size: 1rem;
}
#app-content #download-area.show-download-area {
height: 290px;
}
}

135
docs/index.html Normal file
View File

@@ -0,0 +1,135 @@
<!DOCTYPE html>
<html>
<head>
<title>AbfallAlarm</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1"> <!-- Responsive design meta tag -->
<meta name="description" content="AbfallAlarm, eine benutzerfreundliche WebApp, die darauf abzielt, das Leben der
Bürger von Arnsberg zu vereinfachen.">
<link rel="stylesheet" href="./index.css">
<link rel="stylesheet" href="./github-corner.css">
</head>
<body>
<a href="https://github.com/PxaMMaxP/AbfallAlarm" class="github-corner" aria-label="View source on GitHub"><svg
width="80" height="80" viewBox="0 0 250 250"
style="fill:#64CEAA; color:#fff; position: absolute; top: 0; border: 0; right: 0;" aria-hidden="true">
<path d="M0,0 L115,115 L130,115 L142,142 L250,250 L250,0 Z"></path>
<path
d="M128.3,109.0 C113.8,99.7 119.0,89.6 119.0,89.6 C122.0,82.7 120.5,78.6 120.5,78.6 C119.2,72.0 123.4,76.3 123.4,76.3 C127.3,80.9 125.5,87.3 125.5,87.3 C122.9,97.6 130.6,101.9 134.4,103.2"
fill="currentColor" style="transform-origin: 130px 106px;" class="octo-arm"></path>
<path
d="M115.0,115.0 C114.9,115.1 118.7,116.5 119.8,115.4 L133.7,101.6 C136.9,99.2 139.9,98.4 142.2,98.6 C133.8,88.0 127.5,74.4 143.8,58.0 C148.5,53.4 154.0,51.2 159.7,51.0 C160.3,49.4 163.2,43.6 171.4,40.1 C171.4,40.1 176.1,42.5 178.8,56.2 C183.1,58.6 187.2,61.8 190.9,65.4 C194.5,69.0 197.7,73.2 200.1,77.6 C213.8,80.2 216.3,84.9 216.3,84.9 C212.7,93.1 206.9,96.0 205.4,96.6 C205.1,102.4 203.0,107.8 198.3,112.5 C181.9,128.9 168.3,122.5 157.7,114.1 C157.9,116.9 156.7,120.9 152.7,124.9 L141.0,136.5 C139.8,137.7 141.6,141.9 141.8,141.8 Z"
fill="currentColor" class="octo-body"></path>
</svg></a>
<div id="app-content">
<!-- Header Section -->
<div class="header">
<h1>Abfall Alarm</h1>
</div>
<!-- Logo Section -->
<div class="logo">
<img src="logo.svg" alt="Abfall Alarm Logo">
</div>
<!-- Description Text -->
<div class="description">
<p><b>Abfall Alarm</b> ist eine intuitive und benutzerfreundliche WebApp, die darauf abzielt, das Leben der
Bürger von Arnsberg zu vereinfachen, indem sie eine zuverlässige Erinnerungsfunktion für den städtischen
Abfallkalender bietet.</p>
<p>Mit dieser App können Nutzer ihre iCalendar (.ics) Dateien für den Abfallkalender der Stadt Arnsberg
hochladen und automatisch Erinnerungen für jeden Abholtermin hinzufügen.</p>
<p>Laden Sie sich bitte zuerst eine entsprechende <b>iCal-Datei</b> von der Stadt Arnsberg herunter:
<a href="https://web.c-trace.de/arnsberg-abfallkalender/(S(ujf4cewvsnomrdo0l5zcrkph))/"
target="_blank">Quelle</a>. Kommen Sie danach zurück und folgen Sie den Anweisungen unten.
</p>
</div>
<!-- Working Area -->
<div class="working-area">
<!-- Reminder Settings -->
<div id="reminder-setting-area" class="areas">
<h2>1. Erinnerung einstellen</h2>
<p>Wählen Sie aus, wann Sie an die Abfuhr erinnert werden möchten.</p>
<div class="reminder-days">
<label for="reminder-days-select">Tage vor Abfuhr erinnern:</label>
<select id="reminder-days-select">
<!-- Options for days -->
<option value="1" selected>1 Tag</option>
<option value="2">2 Tage</option>
<option value="3">3 Tage</option>
<option value="4">4 Tage</option>
<option value="5">5 Tage</option>
<option value="6">6 Tage</option>
<option value="7">7 Tage</option>
</select>
</div>
<div class="reminder-hours">
<label for="reminder-hours-select">Uhrzeit:</label>
<select id="reminder-hours-select">
<!-- Options for hours -->
<option value="0">00:00 Uhr</option>
<option value="1">01:00 Uhr</option>
<option value="2">02:00 Uhr</option>
<option value="3">03:00 Uhr</option>
<option value="4">04:00 Uhr</option>
<option value="5">05:00 Uhr</option>
<option value="6">06:00 Uhr</option>
<option value="7">07:00 Uhr</option>
<option value="8">08:00 Uhr</option>
<option value="9">09:00 Uhr</option>
<option value="10">10:00 Uhr</option>
<option value="11">11:00 Uhr</option>
<option value="12" selected>12:00 Uhr</option>
<option value="13">13:00 Uhr</option>
<option value="14">14:00 Uhr</option>
<option value="15">15:00 Uhr</option>
<option value="16">16:00 Uhr</option>
<option value="17">17:00 Uhr</option>
<option value="18">18:00 Uhr</option>
<option value="19">19:00 Uhr</option>
<option value="20">20:00 Uhr</option>
<option value="21">21:00 Uhr</option>
<option value="22">22:00 Uhr</option>
<option value="23">23:00 Uhr</option>
</select>
</div>
</div>
<!-- Upload Section -->
<div id="upload-area" class="areas">
<h2>2. Abfallkalender hochladen</h2>
<p>Wählen Sie Ihren Abfallkalender aus und klicken Sie danach auf den 'Kalender bearbeiten'-Button.</p>
<!-- Hidden upload field for .ical file and label as a button replacement -->
<input type="file" id="ical-upload" accept=".ics">
<label for="ical-upload" id="ical-upload-label" class="button file-input">Datei auswählen...</label>
<button id="work-button" class="button" disabled>Kalender bearbeiten..</button>
</div>
<!-- Download Section -->
<div id="download-area" class="areas">
<h2>3. Abfallkalender inkl. Erinnerungen herunterladen</h2>
<p>Wenn Sie Ihren Abfallkalender inkl. Erinnerungen herunterladen möchten, klicken Sie auf den
folgenden Button.</p>
<a id="download-button">Herunterladen</a>
</div>
</div>
<!-- Footer Section -->
<div id="footer">
M. Passarello | <a href="https://github.com/PxaMMaxP" target="_blank">Github Profil</a>
<br>
<span id="footer-version"></span>
</div>
</div>
<script src="./bundle.js"></script>
</body>
</html>

41
docs/logo.svg Normal file
View File

@@ -0,0 +1,41 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Creator: CorelDRAW 2019 (64-Bit) -->
<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" version="1.1" style="shape-rendering:geometricPrecision; text-rendering:geometricPrecision; image-rendering:optimizeQuality; fill-rule:evenodd; clip-rule:evenodd"
viewBox="174 330 710 715"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:xodm="http://www.corel.com/coreldraw/odm/2003">
<defs>
<style type="text/css">
<![CDATA[
.fil1 {fill:#363636}
.fil5 {fill:#383838}
.fil2 {fill:#79929E}
.fil4 {fill:#9DBACD}
.fil3 {fill:#D04C7C}
.fil6 {fill:#E0EEFE}
.fil0 {fill:#E1EFFF}
]]>
</style>
</defs>
<g id="Ebene_x0020_1">
<metadata id="CorelCorpID_0Corel-Layer"/>
<g id="_1996037455472">
<path class="fil0" d="M366.28 926.47l25.19 0 -24.46 -267.19c-8.66,-3.19 -11.8,-1.89 -17.69,-8.14 -11.18,-11.85 -9.02,-43.36 6.61,-54.99 12.75,-9.48 24.1,-7.45 41.88,-7.45 16.29,0 32.59,0 48.89,0 1.47,-11.21 -5.22,-40.73 17.98,-45.72 7.52,-1.61 120,-1.61 127.47,0.01 7.76,1.68 14.46,8.81 16.55,16.11 2.4,8.41 0.21,20.25 1.44,29.6 16.75,0 33.5,0 50.25,0 17.63,0 29.17,-1.47 41.29,8.04 15,11.75 20.03,52.01 -2.21,59.95 -2.14,0.77 -3.36,0.74 -5.32,1.31 -6.45,1.87 5.19,-1.86 -2.22,0.74l-25.52 254.91 151.86 0.11c23.42,-0.77 35.23,-16.47 35.26,-40.35 0.03,-36.32 1.67,-365.52 -0.61,-377.57l-649 0c-2.35,12.38 -0.54,335.37 -0.59,372.13 -0.03,19.18 2.65,40.15 28.19,45.09 11.58,2.25 88.21,0.77 110.51,0.72 15.61,-0.04 21.18,-1.75 24.25,12.69z"/>
<path class="fil1" d="M390.29 658.32l275.54 0c-4.71,73.71 -13.22,148.56 -20.04,222.14 -3.44,37.08 -6.84,73.76 -10.34,110.88 -0.99,10.52 -3.74,15.08 -14.44,15.38 -44.08,1.22 -106.41,-0.03 -152.45,-0.03 -29.19,0 -45.17,4.63 -47.14,-14.17 -3.85,-36.87 -6.95,-73.91 -10.3,-110.81 -6.73,-74.11 -15.44,-149.18 -20.83,-223.39zm-98.22 -325.05l9.41 0c3.86,0.53 7.62,1.71 11.1,3.6 18.09,9.83 18.56,22.88 18.56,42.66l46.26 0c0,-16.96 -0.28,-23.23 7.32,-33.49 5.93,-8 14.78,-12.16 25.07,-12.77l5.53 0c25.39,1.46 32.83,22.6 32.83,46.26l44.9 0c0,-15.24 0.39,-24.79 7.79,-33.02 6.76,-7.53 14.56,-11.94 22.55,-13.24l10.06 0c7.99,1.3 15.79,5.71 22.55,13.24 7.4,8.23 7.79,17.78 7.79,33.02l44.9 0c0,-14.38 1.39,-24.76 7.91,-32.91 6.03,-7.55 14.75,-12.15 23.76,-13.35l9.42 0c3.86,0.53 7.62,1.71 11.1,3.6 4.55,2.48 8.25,5.14 11.24,9.17 7.6,10.26 7.32,16.53 7.32,33.49l46.26 0c0,-19.78 0.47,-32.83 18.56,-42.66 3.48,-1.89 7.24,-3.07 11.1,-3.6l9.41 0c9.02,1.2 17.74,5.8 23.77,13.35 6.52,8.15 7.91,18.53 7.91,32.91 33.46,0 51.07,-1.04 70.19,25.04 2.08,2.85 3.32,4.67 4.67,7.58 3.79,8.22 5.05,15.48 5.41,23.86l0 23.79 0 371.43 0 53.2c-1.64,13.18 -6.11,24.82 -17.11,35.82 -23.79,23.79 -54.34,17.1 -89.01,17.1 -35.38,0 -70.75,0 -106.13,0 -0.68,8.21 -2.48,18.33 -2.71,27.22 -0.23,8.71 -2.37,18.39 -2.73,27.2 -1.09,26.74 -15.35,35.56 -33.26,38.1l-45.65 0 -1.83 0 -1.83 0 -1.82 0 -1.83 0 -1.83 0 -1.83 0 -1.83 0 -1.83 0 -1.82 0 -1.83 0 -1.83 0 -1.83 0 -1.83 0 -1.83 0 -1.82 0 -1.83 0 -1.83 0 -1.83 0 -1.83 0 -1.82 0 -1.83 0 -1.83 0 -1.83 0 -1.83 0 -1.83 0 -1.82 0 -1.83 0 -1.83 0 -1.83 0 -1.83 0 -1.83 0 -1.82 0 -1.83 0 -1.83 0 -1.83 0 -1.83 0 -1.82 0 -1.83 0 -1.83 0 -1.83 0 -1.83 0 -1.83 0 -1.82 0 -1.83 0 -1.83 0 -1.83 0 -1.83 0 -1.83 0 -1.82 0 -1.83 0 -1.83 0 -1.83 0 -1.83 0 -1.82 0 -1.83 0 -1.83 0 -1.83 0 -1.83 0 -1.83 0 -1.82 0 -1.83 0 -1.83 0 -1.83 0 -1.83 0 -28.47 0c-15.64,-1.24 -30.24,-6.43 -34.93,-25.04 -3.57,-14.19 -6.18,-73.43 -8.24,-78.36l-24.46 -267.19c-8.66,-3.19 -11.8,-1.89 -17.69,-8.14 -11.18,-11.85 -9.02,-43.36 6.61,-54.99 12.75,-9.48 24.1,-7.45 41.88,-7.45 16.29,0 32.59,0 48.89,0 1.47,-11.21 -5.22,-40.73 17.98,-45.72 7.52,-1.61 120,-1.61 127.47,0.01 7.76,1.68 14.46,8.81 16.55,16.11 2.4,8.41 0.21,20.25 1.44,29.6 16.75,0 33.5,0 50.25,0 17.63,0 29.17,-1.47 41.29,8.04 15,11.75 20.03,52.01 -2.21,59.95 -2.14,0.77 -3.36,0.74 -5.32,1.31 -6.45,1.87 5.19,-1.86 -2.22,0.74l-25.52 254.91 151.86 0.11c23.42,-0.77 35.23,-16.47 35.26,-40.35 0.03,-36.32 1.67,-365.52 -0.61,-377.57l-649 0c-2.35,12.38 -0.54,335.37 -0.59,372.13 -0.03,19.18 2.65,40.15 28.19,45.09 11.58,2.25 88.21,0.77 110.51,0.72 15.61,-0.04 21.18,-1.75 24.25,12.69 -2.71,7.1 -2.79,10.97 -16.04,10.94 -23.74,-0.06 -110.51,2.16 -128.25,-2.47 -10.34,-2.69 -17.71,-7.97 -24.95,-14.51 -1.46,-1.31 -4.31,-4.88 -5.67,-6.58 -1.73,-2.17 -3.77,-5.7 -5.27,-8.33 -5.64,-9.86 -5.97,-21.05 -5.98,-32.38l0 -0.55 0 -0.54 0 -364.63 0 -65.15c0.88,-13.75 2.83,-25.88 6.81,-32.8 5.93,-10.28 15.75,-20.25 26.75,-24.95 15.17,-6.47 26.32,-4.99 46.71,-4.99 0,-14.38 1.39,-24.76 7.91,-32.91 6.03,-7.55 14.75,-12.15 23.77,-13.35zm398.64 301.88l-325.56 0c-0.84,-29.9 8.38,-23.26 70.75,-23.26l231.29 0c20.96,-0.04 25.13,0.74 23.52,23.26zm-220.11 -69.7l115.93 0.59 -0.26 22.45 -4.79 0.24 -106.13 0.07 -4.95 -0.41 0.2 -22.94zm-267.28 -92.96c0,-41.26 -6.5,-74.84 57.9,-69.3 0.88,14.81 -0.31,22.44 7.87,32.91 13.62,17.42 40.14,18.06 55.19,-0.81 6.7,-8.41 6.03,-19.83 7.2,-32.38l45.74 0c1.09,13.59 0.12,24.55 7.65,33.12 16.36,18.62 41.76,17.12 55.16,-0.71 8.55,-11.37 6.41,-17.42 7.29,-32.36l45.9 -0.05c1.69,15.55 -0.36,21.03 7.56,32.83 4.47,6.67 14.86,13.55 27.64,13.55 34.55,-0.01 33.68,-32.43 35.2,-46.4l45.9 0.3c0.88,14.81 -0.32,22.44 7.87,32.91 13.62,17.42 40.14,18.06 55.19,-0.81 6.7,-8.41 6.03,-19.83 7.03,-32.38l45.91 0c1.09,13.59 0.12,24.55 7.65,33.12 6,6.82 14.88,13.46 27.91,13.25 13.31,-0.21 22.14,-7.16 27.25,-13.96 8.55,-11.37 6.41,-17.42 7.29,-32.13 21.49,-1.85 40.62,-0.19 50.15,12.75 11.11,15.09 7.75,35.3 7.75,56.55l-650.2 0zm553.76 -115.15c17.7,-6.2 15.16,17.4 15.16,28.99 0,12.15 4.06,35.19 -7.61,39.04 -19.31,6.36 -15.63,-21.2 -15.63,-29.51 0,-7.72 -0.09,-15.48 -0.04,-23.19 0.06,-9.17 0.83,-12.78 8.12,-15.33zm-115.93 -0.16c17.23,-5.23 14.99,16.18 14.99,29.15 0,11.6 4.1,35.02 -7.22,38.93 -21,7.26 -16.29,-28.09 -16.07,-52.57 0.07,-8.04 0.62,-13.17 8.3,-15.51zm-232.37 0.16c17.7,-6.2 15.16,17.4 15.16,28.99 0,12.15 4.06,35.19 -7.61,39.04 -19.31,6.36 -15.63,-21.2 -15.63,-29.51 0,-20.06 -3.39,-34.5 8.08,-38.52zm-115.93 -0.16c17.23,-5.23 14.99,16.18 14.99,29.15 0,11.6 4.1,35.02 -7.22,38.93 -18.44,6.38 -16.02,-16.9 -16.02,-29.4 0,-18.38 -3.41,-35.13 8.25,-38.68zm231.89 0.35c6.52,-2.78 12.99,1.67 14.65,6.92 1.23,3.87 0.66,16.84 0.66,21.88 0,12.25 3.64,34.91 -6.82,38.86 -18.76,7.08 -16.44,-16.29 -16.44,-29.33 0,-22.14 -3.4,-33.48 7.95,-38.33z"/>
<path class="fil2" d="M516.92 972.73c-1.28,-13.11 -0.09,-180.65 -0.09,-209.53 0,-9.17 -2.86,-25.25 3.28,-31.46 7.48,-7.56 18.78,-2.56 19.82,7.35l0.08 209.15c0,9.18 2.85,25.19 -3.31,31.43 -6.95,7.05 -18.85,2.68 -19.78,-6.94zm102.85 -217.69c-4.45,45.92 -9.3,91.68 -13.76,137.43 -2.22,22.76 -4.67,45.44 -6.8,68.07 -1.02,10.78 -0.85,24.54 -14.62,22.63 -12.2,-1.69 -9.4,-15.1 -8.21,-26.81 4.64,-45.77 9.13,-91.54 13.73,-137.34 2.28,-22.65 4.54,-45.33 6.8,-68.03 1.13,-11.27 0.99,-24.12 14.22,-22.74 13.4,1.4 9.66,16.23 8.64,26.79zm-183.39 -6.8c-1.08,-10.7 0.52,-24.29 14.8,-19.39 9.39,3.21 8.34,17.42 9.48,28.9l20.69 206.71c1.13,10.64 -1.74,22.23 -14.67,18.29 -10.15,-3.09 -8.68,-18.44 -9.7,-28.45l-20.6 -206.06zm6.88 -65.41c5.5,-2.72 130.7,-1.18 154.55,-1.23 8.94,-0.01 16.38,-1.14 20.99,4.83 5.03,6.52 1.05,14.64 -4.42,17.13 -5.28,2.4 -131.75,1.14 -155.35,1.19 -34.7,0.08 -23.64,-18.03 -15.77,-21.92zm192.19 308.51c3.5,-37.12 6.9,-73.8 10.34,-110.88 6.82,-73.58 15.33,-148.43 20.04,-222.14l-275.54 0c5.39,74.21 14.1,149.28 20.83,223.39 3.35,36.9 6.45,73.94 10.3,110.81 1.97,18.8 17.95,14.17 47.14,14.17 46.04,0 108.37,1.25 152.45,0.03 10.7,-0.3 13.45,-4.86 14.44,-15.38z"/>
<path class="fil3" d="M203.32 472.49l650.2 0c0,-21.25 3.36,-41.46 -7.75,-56.55 -9.53,-12.94 -28.66,-14.6 -50.15,-12.75 -0.88,14.71 1.26,20.76 -7.29,32.13 -5.11,6.8 -13.94,13.75 -27.25,13.96 -13.03,0.21 -21.91,-6.43 -27.91,-13.25 -7.53,-8.57 -6.56,-19.53 -7.65,-33.12l-45.91 0c-1,12.55 -0.33,23.97 -7.03,32.38 -15.05,18.87 -41.57,18.23 -55.19,0.81 -8.19,-10.47 -6.99,-18.1 -7.87,-32.91l-45.9 -0.3c-1.52,13.97 -0.65,46.39 -35.2,46.4 -12.78,0 -23.17,-6.88 -27.64,-13.55 -7.92,-11.8 -5.87,-17.28 -7.56,-32.83l-45.9 0.05c-0.88,14.94 1.26,20.99 -7.29,32.36 -13.4,17.83 -38.8,19.33 -55.16,0.71 -7.53,-8.57 -6.56,-19.53 -7.65,-33.12l-45.74 0c-1.17,12.55 -0.5,23.97 -7.2,32.38 -15.05,18.87 -41.57,18.23 -55.19,0.81 -8.18,-10.47 -6.99,-18.1 -7.87,-32.91 -64.4,-5.54 -57.9,28.04 -57.9,69.3z"/>
<path class="fil4" d="M690.71 635.15c1.61,-22.52 -2.56,-23.3 -23.52,-23.26l-231.29 0c-62.37,0 -71.59,-6.64 -70.75,23.26l325.56 0z"/>
<path class="fil5" d="M516.92 972.73c0.93,9.62 12.83,13.99 19.78,6.94 6.16,-6.24 3.31,-22.25 3.31,-31.43l-0.08 -209.15c-1.04,-9.91 -12.34,-14.91 -19.82,-7.35 -6.14,6.21 -3.28,22.29 -3.28,31.46 0,28.88 -1.19,196.42 0.09,209.53z"/>
<path class="fil1" d="M456.98 954.3c1.02,10.01 -0.45,25.36 9.7,28.45 12.93,3.94 15.8,-7.65 14.67,-18.29l-20.69 -206.71c-1.14,-11.48 -0.09,-25.69 -9.48,-28.9 -14.28,-4.9 -15.88,8.69 -14.8,19.39l20.6 206.06z"/>
<path class="fil1" d="M619.77 755.04c1.02,-10.56 4.76,-25.39 -8.64,-26.79 -13.23,-1.38 -13.09,11.47 -14.22,22.74 -2.26,22.7 -4.52,45.38 -6.8,68.03 -4.6,45.8 -9.09,91.57 -13.73,137.34 -1.19,11.71 -3.99,25.12 8.21,26.81 13.77,1.91 13.6,-11.85 14.62,-22.63 2.13,-22.63 4.58,-45.31 6.8,-68.07 4.46,-45.75 9.31,-91.51 13.76,-137.43z"/>
<path class="fil1" d="M443.26 682.83c-7.87,3.89 -18.93,22 15.77,21.92 23.6,-0.05 150.07,1.21 155.35,-1.19 5.47,-2.49 9.45,-10.61 4.42,-17.13 -4.61,-5.97 -12.05,-4.84 -20.99,-4.83 -23.85,0.05 -149.05,-1.49 -154.55,1.23z"/>
<polygon class="fil2" points="470.4,588.39 475.35,588.8 581.48,588.73 586.27,588.49 586.53,566.04 470.6,565.45 "/>
<path class="fil6" d="M641.15 357.18c-7.68,2.34 -8.23,7.47 -8.3,15.51 -0.22,24.48 -4.93,59.83 16.07,52.57 11.32,-3.91 7.22,-27.33 7.22,-38.93 0,-12.97 2.24,-34.38 -14.99,-29.15z"/>
<path class="fil6" d="M408.78 357.34c-11.47,4.02 -8.08,18.46 -8.08,38.52 0,8.31 -3.68,35.87 15.63,29.51 11.67,-3.85 7.61,-26.89 7.61,-39.04 0,-11.59 2.54,-35.19 -15.16,-28.99z"/>
<path class="fil6" d="M292.85 357.18c-11.66,3.55 -8.25,20.3 -8.25,38.68 0,12.5 -2.42,35.78 16.02,29.4 11.32,-3.91 7.22,-27.33 7.22,-38.93 0,-12.97 2.24,-34.38 -14.99,-29.15z"/>
<path class="fil6" d="M757.08 357.34c-7.29,2.55 -8.06,6.16 -8.12,15.33 -0.05,7.71 0.04,15.47 0.04,23.19 0,8.31 -3.68,35.87 15.63,29.51 11.67,-3.85 7.61,-26.89 7.61,-39.04 0,-11.59 2.54,-35.19 -15.16,-28.99z"/>
<path class="fil6" d="M524.74 357.53c-11.35,4.85 -7.95,16.19 -7.95,38.33 0,13.04 -2.32,36.41 16.44,29.33 10.46,-3.95 6.82,-26.61 6.82,-38.86 0,-5.04 0.57,-18.01 -0.66,-21.88 -1.66,-5.25 -8.13,-9.7 -14.65,-6.92z"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 10 KiB

304
package-lock.json generated
View File

@@ -1,17 +1,19 @@
{
"name": "abfallalarm",
"version": "0.1.0",
"version": "0.1.2",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "abfallalarm",
"version": "0.1.0",
"version": "0.1.2",
"license": "MIT",
"dependencies": {
"fs-extra": "^11.2.0",
"ical.js": "^1.5.0"
},
"devDependencies": {
"archiver": "^6.0.1",
"ts-loader": "^9.5.1",
"typescript": "^5.3.3",
"webpack": "^5.89.0",
@@ -631,12 +633,99 @@
"node": ">= 8"
}
},
"node_modules/archiver": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/archiver/-/archiver-6.0.1.tgz",
"integrity": "sha512-CXGy4poOLBKptiZH//VlWdFuUC1RESbdZjGjILwBuZ73P7WkAUN0htfSfBq/7k6FRFlpu7bg4JOkj1vU9G6jcQ==",
"dev": true,
"dependencies": {
"archiver-utils": "^4.0.1",
"async": "^3.2.4",
"buffer-crc32": "^0.2.1",
"readable-stream": "^3.6.0",
"readdir-glob": "^1.1.2",
"tar-stream": "^3.0.0",
"zip-stream": "^5.0.1"
},
"engines": {
"node": ">= 12.0.0"
}
},
"node_modules/archiver-utils": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-4.0.1.tgz",
"integrity": "sha512-Q4Q99idbvzmgCTEAAhi32BkOyq8iVI5EwdO0PmBDSGIzzjYNdcFn7Q7k3OzbLy4kLUPXfJtG6fO2RjftXbobBg==",
"dev": true,
"dependencies": {
"glob": "^8.0.0",
"graceful-fs": "^4.2.0",
"lazystream": "^1.0.0",
"lodash": "^4.17.15",
"normalize-path": "^3.0.0",
"readable-stream": "^3.6.0"
},
"engines": {
"node": ">= 12.0.0"
}
},
"node_modules/archiver-utils/node_modules/brace-expansion": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
"integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
"dev": true,
"dependencies": {
"balanced-match": "^1.0.0"
}
},
"node_modules/archiver-utils/node_modules/glob": {
"version": "8.1.0",
"resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
"integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
"dev": true,
"dependencies": {
"fs.realpath": "^1.0.0",
"inflight": "^1.0.4",
"inherits": "2",
"minimatch": "^5.0.1",
"once": "^1.3.0"
},
"engines": {
"node": ">=12"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
}
},
"node_modules/archiver-utils/node_modules/minimatch": {
"version": "5.1.6",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz",
"integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==",
"dev": true,
"dependencies": {
"brace-expansion": "^2.0.1"
},
"engines": {
"node": ">=10"
}
},
"node_modules/array-flatten": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz",
"integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==",
"dev": true
},
"node_modules/async": {
"version": "3.2.5",
"resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz",
"integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==",
"dev": true
},
"node_modules/b4a": {
"version": "1.6.4",
"resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.4.tgz",
"integrity": "sha512-fpWrvyVHEKyeEvbKZTVOeZF3VSKKWtJxFIxX/jaVPf+cLbGUSitjb49pHLqPV2BUNNZ0LcoeEGfE/YCpyDYHIw==",
"dev": true
},
"node_modules/balanced-match": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
@@ -757,6 +846,15 @@
"node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
}
},
"node_modules/buffer-crc32": {
"version": "0.2.13",
"resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz",
"integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==",
"dev": true,
"engines": {
"node": "*"
}
},
"node_modules/buffer-from": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
@@ -902,6 +1000,21 @@
"integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
"dev": true
},
"node_modules/compress-commons": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-5.0.1.tgz",
"integrity": "sha512-MPh//1cERdLtqwO3pOFLeXtpuai0Y2WCd5AhtKxznqM7WtaMYaOEMSgn45d9D10sIHSfIKE603HlOp8OPGrvag==",
"dev": true,
"dependencies": {
"crc-32": "^1.2.0",
"crc32-stream": "^5.0.0",
"normalize-path": "^3.0.0",
"readable-stream": "^3.6.0"
},
"engines": {
"node": ">= 12.0.0"
}
},
"node_modules/compressible": {
"version": "2.0.18",
"resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz",
@@ -995,6 +1108,31 @@
"integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==",
"dev": true
},
"node_modules/crc-32": {
"version": "1.2.2",
"resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz",
"integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==",
"dev": true,
"bin": {
"crc32": "bin/crc32.njs"
},
"engines": {
"node": ">=0.8"
}
},
"node_modules/crc32-stream": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-5.0.0.tgz",
"integrity": "sha512-B0EPa1UK+qnpBZpG+7FgPCu0J2ETLpXq09o9BkLkEAhdB6Z61Qo4pJ3JYu0c+Qi+/SAL7QThqnzS06pmSSyZaw==",
"dev": true,
"dependencies": {
"crc-32": "^1.2.0",
"readable-stream": "^3.4.0"
},
"engines": {
"node": ">= 12.0.0"
}
},
"node_modules/cross-spawn": {
"version": "7.0.3",
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
@@ -1307,6 +1445,12 @@
"integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
"dev": true
},
"node_modules/fast-fifo": {
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz",
"integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==",
"dev": true
},
"node_modules/fast-json-stable-stringify": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
@@ -1424,6 +1568,19 @@
"node": ">= 0.6"
}
},
"node_modules/fs-extra": {
"version": "11.2.0",
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz",
"integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==",
"dependencies": {
"graceful-fs": "^4.2.0",
"jsonfile": "^6.0.1",
"universalify": "^2.0.0"
},
"engines": {
"node": ">=14.14"
}
},
"node_modules/fs-monkey": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.5.tgz",
@@ -1539,8 +1696,7 @@
"node_modules/graceful-fs": {
"version": "4.2.11",
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
"integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
"dev": true
"integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="
},
"node_modules/handle-thing": {
"version": "2.0.1",
@@ -1987,6 +2143,17 @@
"integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
"dev": true
},
"node_modules/jsonfile": {
"version": "6.1.0",
"resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
"integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
"dependencies": {
"universalify": "^2.0.0"
},
"optionalDependencies": {
"graceful-fs": "^4.1.6"
}
},
"node_modules/kind-of": {
"version": "6.0.3",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
@@ -2006,6 +2173,48 @@
"shell-quote": "^1.8.1"
}
},
"node_modules/lazystream": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz",
"integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==",
"dev": true,
"dependencies": {
"readable-stream": "^2.0.5"
},
"engines": {
"node": ">= 0.6.3"
}
},
"node_modules/lazystream/node_modules/readable-stream": {
"version": "2.3.8",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
"integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
"dev": true,
"dependencies": {
"core-util-is": "~1.0.0",
"inherits": "~2.0.3",
"isarray": "~1.0.0",
"process-nextick-args": "~2.0.0",
"safe-buffer": "~5.1.1",
"string_decoder": "~1.1.1",
"util-deprecate": "~1.0.1"
}
},
"node_modules/lazystream/node_modules/safe-buffer": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
"dev": true
},
"node_modules/lazystream/node_modules/string_decoder": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
"integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
"dev": true,
"dependencies": {
"safe-buffer": "~5.1.0"
}
},
"node_modules/loader-runner": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz",
@@ -2027,6 +2236,12 @@
"node": ">=8"
}
},
"node_modules/lodash": {
"version": "4.17.21",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
"dev": true
},
"node_modules/lru-cache": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
@@ -2480,6 +2695,12 @@
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/queue-tick": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.1.tgz",
"integrity": "sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==",
"dev": true
},
"node_modules/randombytes": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
@@ -2536,6 +2757,36 @@
"node": ">= 6"
}
},
"node_modules/readdir-glob": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.3.tgz",
"integrity": "sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==",
"dev": true,
"dependencies": {
"minimatch": "^5.1.0"
}
},
"node_modules/readdir-glob/node_modules/brace-expansion": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
"integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
"dev": true,
"dependencies": {
"balanced-match": "^1.0.0"
}
},
"node_modules/readdir-glob/node_modules/minimatch": {
"version": "5.1.6",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz",
"integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==",
"dev": true,
"dependencies": {
"brace-expansion": "^2.0.1"
},
"engines": {
"node": ">=10"
}
},
"node_modules/readdirp": {
"version": "3.6.0",
"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
@@ -3039,6 +3290,16 @@
"node": ">= 0.8"
}
},
"node_modules/streamx": {
"version": "2.15.6",
"resolved": "https://registry.npmjs.org/streamx/-/streamx-2.15.6.tgz",
"integrity": "sha512-q+vQL4AAz+FdfT137VF69Cc/APqUbxy+MDOImRrMvchJpigHj9GksgDU2LYbO9rx7RX6osWgxJB2WxhYv4SZAw==",
"dev": true,
"dependencies": {
"fast-fifo": "^1.1.0",
"queue-tick": "^1.0.1"
}
},
"node_modules/string_decoder": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
@@ -3090,6 +3351,17 @@
"node": ">=6"
}
},
"node_modules/tar-stream": {
"version": "3.1.6",
"resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.6.tgz",
"integrity": "sha512-B/UyjYwPpMBv+PaFSWAmtYjwdrlEaZQEhMIBFNC5oEG8lpiW8XjcSdmEaClj28ArfKScKHs2nshz3k2le6crsg==",
"dev": true,
"dependencies": {
"b4a": "^1.6.4",
"fast-fifo": "^1.2.0",
"streamx": "^2.15.0"
}
},
"node_modules/terser": {
"version": "5.26.0",
"resolved": "https://registry.npmjs.org/terser/-/terser-5.26.0.tgz",
@@ -3221,6 +3493,14 @@
"integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==",
"dev": true
},
"node_modules/universalify": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz",
"integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==",
"engines": {
"node": ">= 10.0.0"
}
},
"node_modules/unpipe": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
@@ -3712,6 +3992,20 @@
"resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
"integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
"dev": true
},
"node_modules/zip-stream": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-5.0.1.tgz",
"integrity": "sha512-UfZ0oa0C8LI58wJ+moL46BDIMgCQbnsb+2PoiJYtonhBsMh2bq1eRBVkvjfVsqbEHd9/EgKPUuL9saSSsec8OA==",
"dev": true,
"dependencies": {
"archiver-utils": "^4.0.1",
"compress-commons": "^5.0.1",
"readable-stream": "^3.6.0"
},
"engines": {
"node": ">= 12.0.0"
}
}
}
}
}

View File

@@ -1,10 +1,16 @@
{
"name": "abfallalarm",
"version": "0.1.0",
"displayName": "AbfallAlarm",
"version": "0.1.4",
"description": "AbfallAlarm ist eine intuitive und benutzerfreundliche WebApp, die darauf abzielt, das Leben der Bürger von Arnsberg zu vereinfachen, indem sie eine zuverlässige Erinnerungsfunktion für den städtischen Abfallkalender bietet.",
"main": "index.js",
"scripts": {
"build": "webpack --config webpack.config.js --mode production",
"build:patch": "webpack --config webpack.config.js --mode production && npm run bump-version patch && npm run copy-release && npm run zip-release",
"build:minor": "webpack --config webpack.config.js --mode production && npm run bump-version minor && npm run copy-release && npm run zip-release",
"build:major": "webpack --config webpack.config.js --mode production && npm run bump-version major && npm run copy-release && npm run zip-release",
"bump-version": "node bump-version.js",
"copy-release": "node copy-release-docs.js",
"zip-release": "node zip-release.js",
"start": "webpack serve --config webpack.config.js --mode development",
"stop": "sh stop-server.sh"
},
@@ -20,6 +26,7 @@
},
"homepage": "https://github.com/PxaMMaxP/AbfallAlarm#readme",
"devDependencies": {
"archiver": "^6.0.1",
"ts-loader": "^9.5.1",
"typescript": "^5.3.3",
"webpack": "^5.89.0",
@@ -27,6 +34,7 @@
"webpack-dev-server": "^4.15.1"
},
"dependencies": {
"fs-extra": "^11.2.0",
"ical.js": "^1.5.0"
}
}

View File

@@ -7,8 +7,8 @@
<meta name="viewport" content="width=device-width, initial-scale=1"> <!-- Responsive design meta tag -->
<meta name="description" content="AbfallAlarm, eine benutzerfreundliche WebApp, die darauf abzielt, das Leben der
Bürger von Arnsberg zu vereinfachen.">
<link rel="stylesheet" href="/index.css">
<link rel="stylesheet" href="/github-corner.css">
<link rel="stylesheet" href="./index.css">
<link rel="stylesheet" href="./github-corner.css">
</head>
<body>
@@ -44,6 +44,11 @@
<p>Mit dieser App können Nutzer ihre iCalendar (.ics) Dateien für den Abfallkalender der Stadt Arnsberg
hochladen und automatisch Erinnerungen für jeden Abholtermin hinzufügen.</p>
<p>Laden Sie sich bitte zuerst eine entsprechende <b>iCal-Datei</b> von der Stadt Arnsberg herunter:
<a href="https://web.c-trace.de/arnsberg-abfallkalender/(S(ujf4cewvsnomrdo0l5zcrkph))/"
target="_blank">Quelle</a>. Kommen Sie danach zurück und folgen Sie den Anweisungen unten.
</p>
</div>
<!-- Working Area -->
@@ -56,7 +61,6 @@
<label for="reminder-days-select">Tage vor Abfuhr erinnern:</label>
<select id="reminder-days-select">
<!-- Options for days -->
<option value="0">Am Tag selbst</option>
<option value="1" selected>1 Tag</option>
<option value="2">2 Tage</option>
<option value="3">3 Tage</option>
@@ -120,10 +124,12 @@
<!-- Footer Section -->
<div id="footer">
M. Passarello | <a href="https://github.com/PxaMMaxP" target="_blank">Github Profil</a>
<br>
<span id="footer-version"></span>
</div>
</div>
<script src="/bundle.js"></script>
<script src="./bundle.js"></script>
</body>
</html>

View File

@@ -51,7 +51,11 @@ export default class IcsModifier {
const hoursUntilMidnight = this.reminderHours === 0 ? 0 : 24 - this.reminderHours;
// Use reminderDays directly as daysPart
const daysPart = this.reminderDays;
let daysPart = this.reminderDays;
// daysPart is 1 set to 0
if (daysPart === 1) {
daysPart = 0;
}
// Create the trigger string
const trigger = `-P${daysPart}DT${hoursUntilMidnight}H0M0S`;

View File

@@ -1,9 +1,13 @@
// main.ts
import IcsModifier from './IcsModifier';
import { version } from './version';
// Event listener for DOMContentLoaded to initialize the application
document.addEventListener('DOMContentLoaded', () => {
console.log('Loading the WebApp...');
console.log('Loading the WebApp Version ' + version + '...');
const versionTag = document.getElementById('footer-version') as HTMLSpanElement;
versionTag.innerText = `Version: ${version}`;
const workButton = document.getElementById('work-button') as HTMLButtonElement;
const fileInput = document.getElementById('ical-upload') as HTMLInputElement;

1
src/version.ts Normal file
View File

@@ -0,0 +1 @@
export const version = '0.1.4';

33
zip-release.js Normal file
View File

@@ -0,0 +1,33 @@
const fs = require('fs');
const archiver = require('archiver');
const path = require('path');
const packageJsonPath = path.join(__dirname, 'package.json');
const packageJson = require(packageJsonPath);
const outputFileName = `${packageJson.displayName}_v${packageJson.version}.zip`;
const outputFilePath = path.join(__dirname, 'release', outputFileName);
const sourceDirPath = path.join(__dirname, 'docs');
// Stellen Sie sicher, dass das Release-Verzeichnis existiert
if (!fs.existsSync(path.join(__dirname, 'release'))) {
fs.mkdirSync(path.join(__dirname, 'release'));
}
// Erstellen des ZIP-Archivs
const output = fs.createWriteStream(outputFilePath);
const archive = archiver('zip', {
zlib: { level: 9 } // Maximaler Kompressionsgrad
});
output.on('close', function () {
console.log(`Archiv ${outputFileName} erstellt: ${archive.pointer()} Bytes`);
});
archive.on('error', function (err) {
throw err;
});
archive.pipe(output);
archive.directory(sourceDirPath, false);
archive.finalize();