iobroker.time-tracker 0.7.14 → 0.7.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -41,9 +41,21 @@ PIN. All data stays on your own ioBroker host: no cloud, no subscription.
41
41
  **The instance `time-tracker.0` is created automatically** — `iobroker add time-tracker` is only needed if you want
42
42
  the instance on its own.
43
43
  2. Start the instance and open the web app on the port of the instance settings (default **8092**):
44
- `http://<ioBroker host>:8092/`
44
+ `http://<ioBroker host>:8092/`. The instance tile in the admin carries the same way in as a symbol (see
45
+ [The link in the instance list](#the-link-in-the-instance-list)), so host and port do not have to be typed.
45
46
  3. Log in with the start password (see [First start](#first-start)) and create your employees.
46
47
 
48
+ ### The link in the instance list
49
+
50
+ The adapter reports its own way into the web interface (`common.localLinks`), and the admin renders a symbol out of it:
51
+ the tile of `time-tracker.0` in **Instances** offers *Open the time tracking app*, the overview page does the same — one
52
+ click and the login screen shows up, without typing host and port.
53
+
54
+ The address is **not** written into the adapter; the admin puts it together from the instance settings — the bind
55
+ address gives the host, the port the port. With the default `127.0.0.1` the link leads to the ioBroker machine itself
56
+ (that is where the app answers), with `0.0.0.0` it takes the address you reached the admin with, so phone and PC use the
57
+ same link. A reverse proxy rule for `time-tracker.0` replaces the link with its own path.
58
+
47
59
  ## First start
48
60
 
49
61
  The first start creates the database, the roles and the settings — and **one administrator account**, because
@@ -445,6 +457,14 @@ local SQLite file, access is role-based, and every correction is written to an a
445
457
 
446
458
  ### **WORK IN PROGRESS**
447
459
 
460
+ ### 0.7.15 (2026-10-01)
461
+
462
+ - (Alex) new: the instance tile in the admin carries a **symbol that opens the app** now. The adapter announces the way
463
+ into its own web interface as `common.localLinks`, so the admin shows *Open the time tracking app* next to the
464
+ instance — one click and the login screen shows up, without typing host and port. The link uses the bind address and
465
+ the port of the instance settings; with the default `127.0.0.1` it leads to the ioBroker machine itself, with
466
+ `0.0.0.0` to the address the browser reached the admin with.
467
+
448
468
  ### 0.7.14 (2026-10-01)
449
469
 
450
470
  - (Alex) fix: a start password that is entered **after** the first start opens the installation now. The first
@@ -479,12 +499,6 @@ local SQLite file, access is role-based, and every correction is written to an a
479
499
  `files/time-tracker.<n>/` is known to the file manager and exists from the first start, because a small `INFO.txt`
480
500
  keeps it in place; the state `calendar.feedFile` still carries the path for the `ical` adapter
481
501
 
482
- ### 0.7.10 (2026-09-26)
483
-
484
- - (Alex) change: the state `calendar.feedFile` is called “Path of the calendar file” now — in all eleven languages.
485
- The old name said “calendar file” and let the value look like a download, while it is the **path** that the `ical`
486
- adapter reads; browsers and calendar apps use the link `calendar.feedUrl`
487
-
488
502
  Older entries are kept in [`CHANGELOG_OLD.md`](CHANGELOG_OLD.md).
489
503
 
490
504
  ## Provenance
package/io-package.json CHANGED
@@ -1,9 +1,41 @@
1
1
  {
2
2
  "common": {
3
3
  "name": "time-tracker",
4
- "version": "0.7.14",
4
+ "version": "0.7.15",
5
5
  "nogit": true,
6
+ "localLinks": {
7
+ "_default": {
8
+ "link": "%protocol%://%ip%:%port%/",
9
+ "name": {
10
+ "en": "Open the time tracking app",
11
+ "de": "Zeiterfassungs-App öffnen",
12
+ "ru": "Открыть приложение учёта времени",
13
+ "pt": "Abrir a aplicação de controlo de tempo",
14
+ "nl": "Tijdregistratie-app openen",
15
+ "fr": "Ouvrir l'application de suivi du temps",
16
+ "it": "Apri l'app di monitoraggio del tempo",
17
+ "es": "Abrir la aplicación de seguimiento del tiempo",
18
+ "pl": "Otwórz aplikację śledzenia czasu",
19
+ "uk": "Відкрити застосунок обліку часу",
20
+ "zh-cn": "打开时间追踪应用"
21
+ },
22
+ "order": 5
23
+ }
24
+ },
6
25
  "news": {
26
+ "0.7.15": {
27
+ "en": "new: the instance tile in the admin opens the time tracking app now - the adapter announces its web interface as common.localLinks, so the admin shows a symbol next to the instance and on the overview page. The address comes from the bind address and the port of the instance settings, nothing is hardcoded.",
28
+ "de": "new: Die Instanzkachel im Admin öffnet jetzt die Zeiterfassungs-App — der Adapter meldet seine Oberfläche als `common.localLinks` an, deshalb zeigt der Admin ein Symbol neben der Instanz und auf der Übersichtsseite. Die Adresse setzt sich aus der Bind-Adresse und dem Port der Instanzeinstellungen zusammen, fest verdrahtet ist nichts.",
29
+ "ru": "новое: плитка экземпляра в admin теперь открывает приложение учёта времени — адаптер объявляет свой веб-интерфейс как `common.localLinks`, поэтому admin показывает символ рядом с экземпляром и на странице обзора. Адрес складывается из адреса привязки и порта из настроек экземпляра, жёстко ничего не задано.",
30
+ "pt": "novidade: o mosaico da instância no admin abre agora a aplicação de controlo de tempo — o adaptador anuncia a sua interface web como `common.localLinks`, por isso o admin mostra um símbolo ao lado da instância e na página de resumo. O endereço resulta do endereço de escuta e da porta das definições da instância; nada está fixo no código.",
31
+ "nl": "nieuw: de tegel van de instantie in de admin opent nu de tijdregistratie-app — de adapter meldt zijn webinterface aan als `common.localLinks`, daarom toont de admin een symbool naast de instantie en op de overzichtspagina. Het adres komt uit het bindadres en de poort uit de instellingen van de instantie, niets is hard gecodeerd.",
32
+ "fr": "nouveauté : la tuile de l'instance dans l'admin ouvre désormais l'application de suivi du temps — l'adaptateur annonce son interface web sous `common.localLinks`, c'est pourquoi l'admin affiche un symbole à côté de l'instance et sur la page de vue d'ensemble. L'adresse provient de l'adresse d'écoute et du port des réglages de l'instance, rien n'est codé en dur.",
33
+ "it": "novità: il riquadro dell'istanza nell'admin apre ora l'app di monitoraggio del tempo — l'adattatore annuncia la propria interfaccia web come `common.localLinks`, perciò l'admin mostra un simbolo accanto all'istanza e nella pagina di panoramica. L'indirizzo deriva dall'indirizzo di bind e dalla porta delle impostazioni dell'istanza, nulla è codificato a mano.",
34
+ "es": "novedad: el mosaico de la instancia en el admin abre ahora la aplicación de seguimiento del tiempo — el adaptador anuncia su interfaz web como `common.localLinks`, por eso el admin muestra un símbolo junto a la instancia y en la página de resumen. La dirección resulta de la dirección de escucha y del puerto de los ajustes de la instancia, nada está fijado en el código.",
35
+ "pl": "nowość: kafelek instancji w adminie otwiera teraz aplikację śledzenia czasu — adapter zgłasza swój interfejs web jako `common.localLinks`, dlatego admin pokazuje symbol obok instancji i na stronie przeglądu. Adres składa się z adresu bindowania i portu z ustawień instancji, nic nie jest zapisane na stałe.",
36
+ "uk": "нове: плитка екземпляра в admin тепер відкриває застосунок обліку часу — адаптер оголошує свій веб-інтерфейс як `common.localLinks`, тому admin показує символ поруч із екземпляром і на сторінці огляду. Адреса складається з адреси прив'язки та порту з налаштувань екземпляра, жорстко нічого не прописано.",
37
+ "zh-cn": "新增:管理界面中的实例卡片现在可以打开时间追踪应用——适配器将其 Web 界面声明为 `common.localLinks`,因此管理界面会在实例旁和概览页显示一个图标。地址由绑定地址和实例设置中的端口组成,没有任何内容被写死。"
38
+ },
7
39
  "0.7.14": {
8
40
  "en": "fix: a start password that is entered after the first start opens the installation now — as long as the first administrator still carries his unchanged start password, the configured value is applied on every start and the log names what happened; once the password was changed in the app the setting stays out of play and the log says so.",
9
41
  "de": "fix: Ein Startpasswort, das erst nach dem ersten Start eingetragen wird, öffnet die Installation jetzt — solange der Erst-Administrator sein Startpasswort noch nicht gewechselt hat, setzt der Adapter den konfigurierten Wert bei jedem Start und nennt im Log, was passiert ist; nach einem Passwortwechsel in der App bleibt die Einstellung wirkungslos und das Log sagt es.",
@@ -81,19 +113,6 @@
81
113
  "pl": "poprawka: „Feiertag hinzufügen” był wyszarzony, dopóki dzień trzeba było wpisywać jako tekst — teraz pochodzi z pola daty przeglądarki, a etykieta nie podaje już formatu. Święto dodane bez regionu należy do kraju instancji, a nie zawsze do „DE”, lista pokazuje dni wszystkich regionów roku, a dzień następnego roku pociąga za sobą wyświetlany rok. „Abbrechen” zamyka też okno zmiany.",
82
114
  "uk": "виправлення: «Feiertag hinzufügen» залишалася сірою, доки день потрібно було вводити текстом — тепер він надходить із поля дати браузера, і підпис більше не називає формат. Свято, додане без регіону, належить країні екземпляра, а не завжди «DE», список показує дні всіх регіонів року, а день наступного року тягне за собою показаний рік. «Abbrechen» закриває й вікно зміни.",
83
115
  "zh-cn": "修复:“Feiertag hinzufügen”在必须以文本输入日期时一直是灰色——现在日期来自浏览器的日期字段,标签也不再说明格式。未填写地区的节日属于实例所在国家,而不再固定为“DE”,列表会显示该年度所有地区的日期,下一年度的日期会一并切换显示的年份。“Abbrechen”也会关闭修改窗口。"
84
- },
85
- "0.7.7": {
86
- "en": "change: the rule dialog keeps “Aktiv” beside “Wiederholung”, and the validity dates (“Gültig ab” and “Gültig bis”) stand in a row of their own below it — the two date fields no longer wrap around the button.",
87
- "de": "change: Im Regel-Dialog bleibt „Aktiv“ neben „Wiederholung“, und die Gültigkeitsfelder „Gültig ab“ und „Gültig bis“ stehen in einer eigenen Zeile darunter – die beiden Datumsfelder umfließen den Knopf nicht mehr.",
88
- "ru": "изменение: в диалоге правила «Aktiv» остаётся рядом с «Wiederholung», а поля срока действия «Gültig ab» и «Gültig bis» стоят в отдельной строке под ним — два поля даты больше не обтекают кнопку.",
89
- "pt": "alteração: no diálogo da regra «Aktiv» fica ao lado de «Wiederholung», e os campos de validade «Gültig ab» e «Gültig bis» ficam numa linha própria abaixo dele — as duas datas deixam de contornar o botão.",
90
- "nl": "wijziging: in het regeldialoog blijft ‘Aktiv’ naast ‘Wiederholung’ staan, en de geldigheidsvelden ‘Gültig ab’ en ‘Gültig bis’ staan in een eigen regel daaronder — de twee datumvelden lopen niet meer om de knop heen.",
91
- "fr": "changement : dans la boîte de dialogue, « Aktiv » reste à côté de « Wiederholung » et les champs de validité « Gültig ab » et « Gültig bis » occupent une ligne à part en dessous — les deux dates ne s'enroulent plus autour du bouton.",
92
- "it": "modifica: nella finestra della regola «Aktiv» resta accanto a «Wiederholung», mentre i campi di validità «Gültig ab» e «Gültig bis» stanno su una riga propria sotto di esso — le due date non si avvolgono più attorno al pulsante.",
93
- "es": "cambio: en el diálogo de la regla «Aktiv» se queda junto a «Wiederholung», y los campos de validez «Gültig ab» y «Gültig bis» ocupan una fila propia debajo — las dos fechas ya no rodean el botón.",
94
- "pl": "zmiana: w oknie reguły „Aktiv” pozostaje obok „Wiederholung”, a pola ważności „Gültig ab” i „Gültig bis” stoją w osobnym wierszu pod nim — dwa pola daty nie opływają już przycisku.",
95
- "uk": "зміна: у вікні правила «Aktiv» залишається поруч із «Wiederholung», а поля терміну дії «Gültig ab» і «Gültig bis» стоять в окремому рядку під ним — два поля дати більше не обтікають кнопку.",
96
- "zh-cn": "变更:规则对话框中“Aktiv”仍与“Wiederholung”同一行,而有效期字段“Gültig ab”和“Gültig bis”单独位于下一行——两个日期字段不再围绕按钮换行。"
97
116
  }
98
117
  },
99
118
  "titleLang": {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "iobroker.time-tracker",
3
- "version": "0.7.14",
3
+ "version": "0.7.15",
4
4
  "description": "Time tracking (clock-in/out) for ioBroker with web app, badge terminal and reports",
5
5
  "author": {
6
6
  "name": "Alex",
package/www/sw.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"sw.js","sources":["../../../../../../tmp/db90dbddabb3f6418304c14daeab8944/sw.js"],"sourcesContent":["import {clientsClaim as workbox_core_clientsClaim} from '/home/runner/work/ioBroker.time-tracker/ioBroker.time-tracker/src-www/node_modules/workbox-core/clientsClaim.mjs';\nimport {precacheAndRoute as workbox_precaching_precacheAndRoute} from '/home/runner/work/ioBroker.time-tracker/ioBroker.time-tracker/src-www/node_modules/workbox-precaching/precacheAndRoute.mjs';\nimport {cleanupOutdatedCaches as workbox_precaching_cleanupOutdatedCaches} from '/home/runner/work/ioBroker.time-tracker/ioBroker.time-tracker/src-www/node_modules/workbox-precaching/cleanupOutdatedCaches.mjs';\nimport {registerRoute as workbox_routing_registerRoute} from '/home/runner/work/ioBroker.time-tracker/ioBroker.time-tracker/src-www/node_modules/workbox-routing/registerRoute.mjs';\nimport {NavigationRoute as workbox_routing_NavigationRoute} from '/home/runner/work/ioBroker.time-tracker/ioBroker.time-tracker/src-www/node_modules/workbox-routing/NavigationRoute.mjs';\nimport {createHandlerBoundToURL as workbox_precaching_createHandlerBoundToURL} from '/home/runner/work/ioBroker.time-tracker/ioBroker.time-tracker/src-www/node_modules/workbox-precaching/createHandlerBoundToURL.mjs';/**\n * Welcome to your Workbox-powered service worker!\n *\n * You'll need to register this file in your web app.\n * See https://goo.gl/nhQhGp\n *\n * The rest of the code is auto-generated. Please don't update this file\n * directly; instead, make changes to your Workbox build configuration\n * and re-run your build process.\n * See https://goo.gl/2aRDsh\n */\n\n\n\n\nself.skipWaiting();\nworkbox_core_clientsClaim();\n/**\n * The precacheAndRoute() method efficiently caches and responds to\n * requests for URLs in the manifest.\n * See https://goo.gl/S9QRab\n */\nworkbox_precaching_precacheAndRoute([\n {\n \"url\": \"person.png\",\n \"revision\": \"771d3283ece4739e203e02aac535855e\"\n },\n {\n \"url\": \"index.html\",\n \"revision\": \"6d2083467c5cde28f5f7b04204705994\"\n },\n {\n \"url\": \"icon-512.png\",\n \"revision\": \"d8e3715779f4cd7e67e1f82f215a2f22\"\n },\n {\n \"url\": \"icon-192.png\",\n \"revision\": \"940ef37caef09c52272ddab844b9ea9b\"\n },\n {\n \"url\": \"favicon.svg\",\n \"revision\": \"309e9efece69d60920618512ab9d57bf\"\n },\n {\n \"url\": \"assets/workbox-window.prod.es5-Bd17z0YL.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/index-D5c1Xz-S.js\",\n \"revision\": null\n },\n {\n \"url\": \"icon-192.png\",\n \"revision\": \"940ef37caef09c52272ddab844b9ea9b\"\n },\n {\n \"url\": \"icon-512.png\",\n \"revision\": \"d8e3715779f4cd7e67e1f82f215a2f22\"\n },\n {\n \"url\": \"manifest.webmanifest\",\n \"revision\": \"6f40f1ce0ce138d5af307fb0dbb1e6f9\"\n }\n], {});\nworkbox_precaching_cleanupOutdatedCaches();workbox_routing_registerRoute(new workbox_routing_NavigationRoute(workbox_precaching_createHandlerBoundToURL(\"index.html\"), {\n allowlist: [/^\\/$/], denylist: [/^\\/api\\//],}));\n\n\n"],"names":["self","skipWaiting","workbox_core_clientsClaim","workbox_precaching_precacheAndRoute","url","revision","workbox_precaching_cleanupOutdatedCaches","workbox_routing_registerRoute","workbox_routing_NavigationRoute","workbox_precaching_createHandlerBoundToURL","allowlist","denylist"],"mappings":"inBAoBAA,KAAKC,cACLC,EAAAA,eAMAC,EAAAA,iBAAoC,CAClC,CACEC,IAAO,aACPC,SAAY,oCAEd,CACED,IAAO,aACPC,SAAY,oCAEd,CACED,IAAO,eACPC,SAAY,oCAEd,CACED,IAAO,eACPC,SAAY,oCAEd,CACED,IAAO,cACPC,SAAY,oCAEd,CACED,IAAO,6CACPC,SAAY,MAEd,CACED,IAAO,2BACPC,SAAY,MAEd,CACED,IAAO,eACPC,SAAY,oCAEd,CACED,IAAO,eACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,qCAEb,CAAA,GACHC,EAAAA,wBAA2CC,EAAAA,cAA8B,IAAIC,EAAAA,gBAAgCC,0BAA2C,cAAe,CACrKC,UAAW,CAAC,QAAUC,SAAU,CAAC"}
1
+ {"version":3,"file":"sw.js","sources":["../../../../../../tmp/64e37e67a2233e637456ec225b71d20c/sw.js"],"sourcesContent":["import {clientsClaim as workbox_core_clientsClaim} from '/home/runner/work/ioBroker.time-tracker/ioBroker.time-tracker/src-www/node_modules/workbox-core/clientsClaim.mjs';\nimport {precacheAndRoute as workbox_precaching_precacheAndRoute} from '/home/runner/work/ioBroker.time-tracker/ioBroker.time-tracker/src-www/node_modules/workbox-precaching/precacheAndRoute.mjs';\nimport {cleanupOutdatedCaches as workbox_precaching_cleanupOutdatedCaches} from '/home/runner/work/ioBroker.time-tracker/ioBroker.time-tracker/src-www/node_modules/workbox-precaching/cleanupOutdatedCaches.mjs';\nimport {registerRoute as workbox_routing_registerRoute} from '/home/runner/work/ioBroker.time-tracker/ioBroker.time-tracker/src-www/node_modules/workbox-routing/registerRoute.mjs';\nimport {NavigationRoute as workbox_routing_NavigationRoute} from '/home/runner/work/ioBroker.time-tracker/ioBroker.time-tracker/src-www/node_modules/workbox-routing/NavigationRoute.mjs';\nimport {createHandlerBoundToURL as workbox_precaching_createHandlerBoundToURL} from '/home/runner/work/ioBroker.time-tracker/ioBroker.time-tracker/src-www/node_modules/workbox-precaching/createHandlerBoundToURL.mjs';/**\n * Welcome to your Workbox-powered service worker!\n *\n * You'll need to register this file in your web app.\n * See https://goo.gl/nhQhGp\n *\n * The rest of the code is auto-generated. Please don't update this file\n * directly; instead, make changes to your Workbox build configuration\n * and re-run your build process.\n * See https://goo.gl/2aRDsh\n */\n\n\n\n\nself.skipWaiting();\nworkbox_core_clientsClaim();\n/**\n * The precacheAndRoute() method efficiently caches and responds to\n * requests for URLs in the manifest.\n * See https://goo.gl/S9QRab\n */\nworkbox_precaching_precacheAndRoute([\n {\n \"url\": \"person.png\",\n \"revision\": \"771d3283ece4739e203e02aac535855e\"\n },\n {\n \"url\": \"index.html\",\n \"revision\": \"6d2083467c5cde28f5f7b04204705994\"\n },\n {\n \"url\": \"icon-512.png\",\n \"revision\": \"d8e3715779f4cd7e67e1f82f215a2f22\"\n },\n {\n \"url\": \"icon-192.png\",\n \"revision\": \"940ef37caef09c52272ddab844b9ea9b\"\n },\n {\n \"url\": \"favicon.svg\",\n \"revision\": \"309e9efece69d60920618512ab9d57bf\"\n },\n {\n \"url\": \"assets/workbox-window.prod.es5-Bd17z0YL.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/index-D5c1Xz-S.js\",\n \"revision\": null\n },\n {\n \"url\": \"icon-192.png\",\n \"revision\": \"940ef37caef09c52272ddab844b9ea9b\"\n },\n {\n \"url\": \"icon-512.png\",\n \"revision\": \"d8e3715779f4cd7e67e1f82f215a2f22\"\n },\n {\n \"url\": \"manifest.webmanifest\",\n \"revision\": \"6f40f1ce0ce138d5af307fb0dbb1e6f9\"\n }\n], {});\nworkbox_precaching_cleanupOutdatedCaches();workbox_routing_registerRoute(new workbox_routing_NavigationRoute(workbox_precaching_createHandlerBoundToURL(\"index.html\"), {\n allowlist: [/^\\/$/], denylist: [/^\\/api\\//],}));\n\n\n"],"names":["self","skipWaiting","workbox_core_clientsClaim","workbox_precaching_precacheAndRoute","url","revision","workbox_precaching_cleanupOutdatedCaches","workbox_routing_registerRoute","workbox_routing_NavigationRoute","workbox_precaching_createHandlerBoundToURL","allowlist","denylist"],"mappings":"inBAoBAA,KAAKC,cACLC,EAAAA,eAMAC,EAAAA,iBAAoC,CAClC,CACEC,IAAO,aACPC,SAAY,oCAEd,CACED,IAAO,aACPC,SAAY,oCAEd,CACED,IAAO,eACPC,SAAY,oCAEd,CACED,IAAO,eACPC,SAAY,oCAEd,CACED,IAAO,cACPC,SAAY,oCAEd,CACED,IAAO,6CACPC,SAAY,MAEd,CACED,IAAO,2BACPC,SAAY,MAEd,CACED,IAAO,eACPC,SAAY,oCAEd,CACED,IAAO,eACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,qCAEb,CAAA,GACHC,EAAAA,wBAA2CC,EAAAA,cAA8B,IAAIC,EAAAA,gBAAgCC,0BAA2C,cAAe,CACrKC,UAAW,CAAC,QAAUC,SAAU,CAAC"}