Compare commits
11 Commits
dev/link-t
...
main
Author | SHA1 | Date | |
---|---|---|---|
9794c3b0ef | |||
3a3b729cb7 | |||
![]() |
40daf6b447 | ||
![]() |
8a7fa81267 | ||
![]() |
9171cf0275 | ||
d759a573f0 | |||
c1c5e3461c | |||
09962d8720 | |||
![]() |
f8a78060c9 | ||
![]() |
73145637c6 | ||
![]() |
877f36fa55 |
31
.github/workflows/deploy-to-gh-pages.yml
vendored
Normal file
31
.github/workflows/deploy-to-gh-pages.yml
vendored
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
name: Deploy to Github Pages
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches: [main]
|
||||||
|
pull_request:
|
||||||
|
branches: [main]
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
# Give the default GITHUB_TOKEN write permission to commit and push the
|
||||||
|
# added or changed files to the repository.
|
||||||
|
contents: write
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
|
||||||
|
|
||||||
|
- name: Deploy 🚀
|
||||||
|
uses: JamesIves/github-pages-deploy-action@v4
|
||||||
|
with:
|
||||||
|
branch: pages
|
||||||
|
folder: docs
|
||||||
|
clean: true
|
||||||
|
single-commit: true
|
12
README.md
12
README.md
@@ -1,15 +1,15 @@
|
|||||||
# AbfallAlarm
|
# AbfallAlarm
|
||||||
**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. 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.
|
[**AbfallAlarm**](https://0xmax42.github.io/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. 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.
|
||||||
|
|
||||||
## Hauptmerkmale
|
## Hauptmerkmale
|
||||||
- **Einfaches Hochladen**: Benutzer können ihre bestehenden iCalendar-Dateien des Abfallkalenders direkt in die App hochladen.
|
- **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.
|
- **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.
|
- **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.
|
- **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.
|
- **Datenschutzorientiert**: Keine Speicherung persönlicher Daten. Die Verarbeitung erfolgt clientseitig, und die Dateien werden nicht auf dem Server gespeichert.
|
||||||
|
|
||||||
## Zielsetzung
|
## 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.
|
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
|
# 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.
|
||||||
|
@@ -30,4 +30,8 @@ packageJson.version = versionParts.join('.');
|
|||||||
|
|
||||||
// Zurückschreiben der package.json
|
// Zurückschreiben der package.json
|
||||||
fs.writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 2));
|
fs.writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 2));
|
||||||
console.log(`Version updated to ${packageJson.version}`);
|
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);
|
||||||
|
@@ -1,2 +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;return`-P${this.reminderDays}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));function s(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...");const e=document.getElementById("work-button");document.getElementById("ical-upload").addEventListener("change",(()=>{e.disabled=!1})),e.addEventListener("click",s)}))}},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)})();
|
(()=>{"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.5"}},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
|
//# sourceMappingURL=bundle.js.map
|
@@ -12,7 +12,7 @@
|
|||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
<a href="https://github.com/PxaMMaxP/AbfallAlarm" class="github-corner" aria-label="View source on GitHub"><svg
|
<a href="https://github.com/0xmax42/AbfallAlarm" class="github-corner" aria-label="View source on GitHub"><svg
|
||||||
width="80" height="80" viewBox="0 0 250 250"
|
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">
|
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="M0,0 L115,115 L130,115 L142,142 L250,250 L250,0 Z"></path>
|
||||||
@@ -46,8 +46,8 @@
|
|||||||
hochladen und automatisch Erinnerungen für jeden Abholtermin hinzufügen.</p>
|
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:
|
<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))/"
|
<a href="https://abfallkalender.arnsberg.de/" target="_blank">Quelle</a>. Kommen Sie danach zurück und
|
||||||
target="_blank">Quelle</a>. Kommen Sie danach zurück und folgen Sie den Anweisungen unten.
|
folgen Sie den Anweisungen unten.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -61,7 +61,6 @@
|
|||||||
<label for="reminder-days-select">Tage vor Abfuhr erinnern:</label>
|
<label for="reminder-days-select">Tage vor Abfuhr erinnern:</label>
|
||||||
<select id="reminder-days-select">
|
<select id="reminder-days-select">
|
||||||
<!-- Options for days -->
|
<!-- Options for days -->
|
||||||
<option value="0">Am Tag selbst</option>
|
|
||||||
<option value="1" selected>1 Tag</option>
|
<option value="1" selected>1 Tag</option>
|
||||||
<option value="2">2 Tage</option>
|
<option value="2">2 Tage</option>
|
||||||
<option value="3">3 Tage</option>
|
<option value="3">3 Tage</option>
|
||||||
@@ -124,11 +123,13 @@
|
|||||||
|
|
||||||
<!-- Footer Section -->
|
<!-- Footer Section -->
|
||||||
<div id="footer">
|
<div id="footer">
|
||||||
M. Passarello | <a href="https://github.com/PxaMMaxP" target="_blank">Github Profil</a>
|
0xMax42 | <a href="https://github.com/0xmax42" target="_blank">Github Profil</a>
|
||||||
|
<br>
|
||||||
|
<span id="footer-version"></span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script src="./bundle.js"></script>
|
<script src="./bundle.js"></script>
|
||||||
</body>
|
</body>
|
||||||
|
|
||||||
</html>
|
</html>
|
||||||
|
6
package-lock.json
generated
6
package-lock.json
generated
@@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"name": "abfallalarm",
|
"name": "abfallalarm",
|
||||||
"version": "0.1.2",
|
"version": "0.1.3",
|
||||||
"lockfileVersion": 3,
|
"lockfileVersion": 3,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "abfallalarm",
|
"name": "abfallalarm",
|
||||||
"version": "0.1.2",
|
"version": "0.1.3",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"fs-extra": "^11.2.0",
|
"fs-extra": "^11.2.0",
|
||||||
@@ -4008,4 +4008,4 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@@ -1,13 +1,13 @@
|
|||||||
{
|
{
|
||||||
"name": "abfallalarm",
|
"name": "abfallalarm",
|
||||||
"displayName": "AbfallAlarm",
|
"displayName": "AbfallAlarm",
|
||||||
"version": "0.1.2",
|
"version": "0.1.5",
|
||||||
"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.",
|
"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",
|
"main": "index.js",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"build:patch": "webpack --config webpack.config.js --mode production && npm run bump-version patch && npm run copy-release && npm run zip-release",
|
"build:patch": "npm run bump-version patch && webpack --config webpack.config.js --mode production && 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:minor": "npm run copy-release && webpack --config webpack.config.js --mode production && 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",
|
"build:major": "npm run bump-version major && webpack --config webpack.config.js --mode production && npm run copy-release && npm run zip-release",
|
||||||
"bump-version": "node bump-version.js",
|
"bump-version": "node bump-version.js",
|
||||||
"copy-release": "node copy-release-docs.js",
|
"copy-release": "node copy-release-docs.js",
|
||||||
"zip-release": "node zip-release.js",
|
"zip-release": "node zip-release.js",
|
||||||
|
@@ -46,8 +46,8 @@
|
|||||||
hochladen und automatisch Erinnerungen für jeden Abholtermin hinzufügen.</p>
|
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:
|
<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))/"
|
<a href="https://abfallkalender.arnsberg.de/" target="_blank">Quelle</a>. Kommen Sie danach zurück und
|
||||||
target="_blank">Quelle</a>. Kommen Sie danach zurück und folgen Sie den Anweisungen unten.
|
folgen Sie den Anweisungen unten.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -61,7 +61,6 @@
|
|||||||
<label for="reminder-days-select">Tage vor Abfuhr erinnern:</label>
|
<label for="reminder-days-select">Tage vor Abfuhr erinnern:</label>
|
||||||
<select id="reminder-days-select">
|
<select id="reminder-days-select">
|
||||||
<!-- Options for days -->
|
<!-- Options for days -->
|
||||||
<option value="0">Am Tag selbst</option>
|
|
||||||
<option value="1" selected>1 Tag</option>
|
<option value="1" selected>1 Tag</option>
|
||||||
<option value="2">2 Tage</option>
|
<option value="2">2 Tage</option>
|
||||||
<option value="3">3 Tage</option>
|
<option value="3">3 Tage</option>
|
||||||
@@ -125,6 +124,8 @@
|
|||||||
<!-- Footer Section -->
|
<!-- Footer Section -->
|
||||||
<div id="footer">
|
<div id="footer">
|
||||||
M. Passarello | <a href="https://github.com/PxaMMaxP" target="_blank">Github Profil</a>
|
M. Passarello | <a href="https://github.com/PxaMMaxP" target="_blank">Github Profil</a>
|
||||||
|
<br>
|
||||||
|
<span id="footer-version"></span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
@@ -51,7 +51,11 @@ export default class IcsModifier {
|
|||||||
const hoursUntilMidnight = this.reminderHours === 0 ? 0 : 24 - this.reminderHours;
|
const hoursUntilMidnight = this.reminderHours === 0 ? 0 : 24 - this.reminderHours;
|
||||||
|
|
||||||
// Use reminderDays directly as daysPart
|
// 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
|
// Create the trigger string
|
||||||
const trigger = `-P${daysPart}DT${hoursUntilMidnight}H0M0S`;
|
const trigger = `-P${daysPart}DT${hoursUntilMidnight}H0M0S`;
|
||||||
|
@@ -1,9 +1,13 @@
|
|||||||
// main.ts
|
// main.ts
|
||||||
import IcsModifier from './IcsModifier';
|
import IcsModifier from './IcsModifier';
|
||||||
|
import { version } from './version';
|
||||||
|
|
||||||
// Event listener for DOMContentLoaded to initialize the application
|
// Event listener for DOMContentLoaded to initialize the application
|
||||||
document.addEventListener('DOMContentLoaded', () => {
|
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 workButton = document.getElementById('work-button') as HTMLButtonElement;
|
||||||
const fileInput = document.getElementById('ical-upload') as HTMLInputElement;
|
const fileInput = document.getElementById('ical-upload') as HTMLInputElement;
|
||||||
|
1
src/version.ts
Normal file
1
src/version.ts
Normal file
@@ -0,0 +1 @@
|
|||||||
|
export const version = '0.1.5';
|
Reference in New Issue
Block a user