iobroker.kanban 0.3.0 → 0.3.2
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 +98 -7
- package/admin/i18n/de.json +101 -100
- package/admin/i18n/en.json +101 -100
- package/admin/i18n/es.json +101 -100
- package/admin/i18n/fr.json +101 -100
- package/admin/i18n/it.json +101 -100
- package/admin/i18n/nl.json +101 -100
- package/admin/i18n/pl.json +101 -100
- package/admin/i18n/pt.json +101 -100
- package/admin/i18n/ru.json +101 -100
- package/admin/i18n/uk.json +101 -100
- package/admin/i18n/zh-cn.json +101 -100
- package/admin/jsonConfig.json +679 -668
- package/io-package.json +28 -95
- package/lib/adapter-config.d.ts +44 -0
- package/lib/cron.js +203 -203
- package/lib/dueat.js +77 -77
- package/lib/events.js +24 -24
- package/lib/freeze.js +69 -0
- package/lib/holidays.js +167 -167
- package/lib/i18n-server.js +301 -301
- package/lib/notify.js +693 -627
- package/lib/scheduler.js +194 -198
- package/lib/server.js +841 -799
- package/lib/store.js +2053 -1500
- package/main.js +591 -382
- package/package.json +13 -4
- package/www/css/app.css +1468 -1022
- package/www/i18n/de.json +294 -238
- package/www/i18n/en.json +294 -238
- package/www/i18n/es.json +294 -238
- package/www/i18n/fr.json +294 -238
- package/www/i18n/it.json +294 -238
- package/www/i18n/nl.json +294 -238
- package/www/i18n/pl.json +294 -238
- package/www/i18n/pt.json +294 -238
- package/www/i18n/ru.json +294 -238
- package/www/i18n/uk.json +294 -238
- package/www/i18n/zh-cn.json +294 -238
- package/www/index.html +198 -171
- package/www/js/api.js +123 -98
- package/www/js/app.js +552 -411
- package/www/js/board.js +1609 -983
- package/www/js/colorpicker.js +165 -165
- package/www/js/dialogs.js +2363 -1419
package/README.md
CHANGED
|
@@ -11,7 +11,7 @@ Kanban board adapter for ioBroker with its **own web server**, live sync, webhoo
|
|
|
11
11
|
|
|
12
12
|

|
|
13
13
|
|
|
14
|
-
|
|
14
|
+
**Full documentation:** [English](docs/en/README.md) · [Deutsch](docs/de/README.md)
|
|
15
15
|
|
|
16
16
|
## Installation
|
|
17
17
|
|
|
@@ -84,7 +84,7 @@ curl -X POST http://<host>:8095/webhook/<token>/action \
|
|
|
84
84
|
-d '{"cmd":"addCard","board":"family","title":"Buy milk","assignees":["user1"],"due":"2026-07-15"}'
|
|
85
85
|
```
|
|
86
86
|
|
|
87
|
-
Commands: `listBoards`, `getBoard`, `addBoard`, `deleteBoard`, `addCard`, `updateCard`, `moveCard`, `doneCard`, `deleteCard`. From ioBroker scripts:
|
|
87
|
+
Commands: `listBoards`, `getBoard`, `addBoard`, `deleteBoard`, `addCard`, `updateCard`, `moveCard`, `doneCard`, `deleteCard`, `reassignUser`. From ioBroker scripts:
|
|
88
88
|
|
|
89
89
|
```js
|
|
90
90
|
sendTo('kanban.0', 'addCard', { board: 'family', title: 'From a script' }, res => log(JSON.stringify(res)));
|
|
@@ -101,6 +101,7 @@ setState('kanban.0.action', JSON.stringify({ cmd: 'doneCard', board: 'family', c
|
|
|
101
101
|
| `kanban.0.boards.<id>.rev` / `.cardCount` / `.overdueCount` | revision & counters |
|
|
102
102
|
| `kanban.0.users.<name>.assignedCount` / `.overdueCount` / `.overdueList` | per user |
|
|
103
103
|
| `kanban.0.lastEvent` | last event as JSON (can trigger scripts) |
|
|
104
|
+
| `kanban.0.info.orphanedAssignees` | assignees that no longer exist as users, after a user ID was renamed |
|
|
104
105
|
| `kanban.0.action` | command input (write JSON, cleared after processing) |
|
|
105
106
|
|
|
106
107
|
## Security
|
|
@@ -113,23 +114,111 @@ Details: [Security & access control](docs/en/README.md#security--access-control)
|
|
|
113
114
|
|
|
114
115
|
## Requirements
|
|
115
116
|
|
|
116
|
-
- js-controller
|
|
117
|
+
- js-controller >= 6.0.11, Node.js >= 22
|
|
117
118
|
- For e-mail notifications: a configured `iobroker.email` instance
|
|
118
119
|
- Optional: `iobroker.feiertage` for region-accurate public-holiday calculation of the working-day recurrences
|
|
119
120
|
|
|
120
121
|
## Changelog
|
|
121
122
|
|
|
123
|
+
<!-- Der Platzhalter bleibt stehen. release-script trägt hier die
|
|
124
|
+
nächste Version ein und ersetzt die Überschrift. -->
|
|
125
|
+
### 0.3.2 (2026-09-10)
|
|
126
|
+
* (bmueller77) **The trash has the sort toggle now**, like every other column. The default stays deletion time, oldest first, so whatever is closest to being removed for good sits on top; sorting by due date, priority or age is available all the same. The broom moved to the left of the toggle so that the sorting sits in the same place in every column
|
|
127
|
+
* (bmueller77) Fix: the **focus ring** took the accent colour unchanged. That works in the light theme; in the dark one the same dark tone stood against dark surfaces, measured down to 1.52:1 on a card in the trash, against the 3:1 that is required. The ring colour is computed now: lightened or darkened from the accent colour in five percent steps, only as far as it takes to clear every surface it lands on, so the instance keeps its colour family
|
|
128
|
+
* (bmueller77) Fix: below 600 px the card editor, the board manager and the views dialog were 32 px narrower and 48 px shorter than the screen and sat pinned to the top left. Their rules hang on their IDs and beat the element rule in the mobile block
|
|
129
|
+
* (bmueller77) Fix: in the same block the tab panel was squashed as a flex child while its content visibly ran out of it. The scroll area did not count the overflowing pixels, and on a short window **Save scrolled out of sight entirely** - anyone who did not think to scroll back lost their input
|
|
130
|
+
* (bmueller77) Fix: the text colour on avatars and chips hung on a fixed brightness threshold of 0.31. The point where black and white give the same contrast is 0.179, and in between the choice came out systematically wrong: on turquoise, white scored 3.0:1 where black would have reached 7.0:1. The calculation itself now stands there instead of a number
|
|
131
|
+
* (bmueller77) Fix: the **browser's back button** closed the card editor without a word, while Escape and the close cross ask first. The open dialog now adds a history entry; the back button takes it away and raises the same prompt
|
|
132
|
+
* (bmueller77) Fix: if someone changed the same card in another window, the open editor did not notice and **overwrote it silently on save**. It now compares the state it opened with against the current one and asks when they differ. Only the fields the editor edits are compared, so a column change or a fresh completion timestamp does not raise the prompt
|
|
133
|
+
* (bmueller77) **Hit areas below 24 px**: the eye and the broom in the column header measured 22 x 18, the drag handles in the settings 18 x 18, the "+X more" row was 20 px high. All four are on 24 px now, per WCAG 2.5.8. It weighs more on the broom than elsewhere, since an irreversible action sits behind it
|
|
134
|
+
* (bmueller77) Fix: the sort menu carried no roles, the tooltip on a completed card was the only single-line one, a badge without a warning colour stood at 1.21:1 against the white card and now carries a hairline, the disabled menu entry kept the pointing hand, the triangle was lost on a coloured badge, the focus landed on `body` after toggling "+X more", and in drag-handle mode the whole card carried the grab cursor while dragging only starts at the handle
|
|
135
|
+
* (bmueller77) Fix: the explanatory line in the due-date tooltip told the timeline backwards. It runs from yellow to red now, in eleven languages
|
|
136
|
+
* (bmueller77) Fix: the heading above the label switch always read "hide labels", even when it was set to "show only these labels". Fix: the prompt for removing a board member counted the cards correctly but named every future non-member instead of the people actually on those cards
|
|
137
|
+
* (bmueller77) Fix: the subject "card deleted" stood for a move to the trash. The checkbox says "to the trash" and so does the confirmation dialog, only the mail did not. Corrected in eleven languages
|
|
138
|
+
* (bmueller77) **Yellow means tomorrow, the lead time only drives the mail** (#25). Colour and column count followed the setting **Remind X days before due**: at a lead time of 3 everything up to the day after tomorrow turned yellow while the number above it still read "Tomorrow". Yellow now means the next calendar day, full stop, and the same arithmetic drives the column count. The tooltip needs no number any more, since the scale is the same for every instance
|
|
139
|
+
* (bmueller77) **Only IDs that something hangs on are frozen now.** Until now the adapter wrote the marker back for every user on the first start, and every such write restarts the instance - exactly the window in which saving in the admin was lost, reproduced twice, without a message and without a log entry. It hit the setup, the moment when someone sets the port, saves, enters users, saves. A fresh instance with users but no cards no longer writes its configuration back at all
|
|
140
|
+
* (bmueller77) Fix: creating a card fired "card created" and "card assigned", and **both attached the `.ics`** although the manual says the invite comes once. The notifier remembers the dispatch itself now
|
|
141
|
+
* (bmueller77) **Deleting a card sends a cancellation**: an `.ics` with `METHOD:CANCEL`, the same `UID` and the next sequence number, so the calendar clears the entry instead of leaving the appointment standing. Only where an invite was ever sent
|
|
142
|
+
* (bmueller77) The **add button** at the foot of a column is narrower. At 25 percent column width it covered 111 of 423 px and caught the clicks on two rows of an expanded checklist. A "+" does not need that width
|
|
143
|
+
* (bmueller77) **No cards are created in a done column any more.** A card created there carried no `doneAt` and therefore dropped out of three documented features: the "age in column" sort, the display limit for done cards and the automatic cleanup. It stayed there forever without anyone seeing why. The store refuses it and the UI does not offer it: the card editor leaves done columns out when creating and copying, the transfer dialog likewise, and there is no "+" at the foot of such a column. Moving and editing an existing card keeps the column selectable
|
|
144
|
+
* (bmueller77) Fix: `doneAt` was cleared when a card moved to the trash, so restoring it lost the completion time. Fix: labels created through the interface were all green and now take their colour in turn from the same palette as the UI. Fix: the mirror states of deleted users stayed behind under `users.*`, so a dashboard reading `assignedCount` kept counting people too many. Fix: the "+" at the foot of a column was not blocked when no user existed - only the header button had been secured, the dead end was still reachable by the other route
|
|
145
|
+
* (bmueller77) **Error messages no longer arrive as a browser box.** All eight `alert()` calls go through the in-page hint now: a red border, `role=alert`, and they stay until someone closes them. A modal box halts the page until it is clicked away and is unreadable to any automated check - two testers could only report that the renderer refused scripts and had to leave the wording open
|
|
146
|
+
* (bmueller77) Fix: on a board without columns "+ Card" stayed active, the editor opened, the column field was empty, and only saving ran into the error. Fix: the menus in the column header hang off `body`, so a deleted column left its menu standing and operable. Fix: with fifteen users the chip bar was 1750 px long and pushed the whole page out of a 1584 px window; it wraps now. Fix: markdown tables in the description and the reading window had neither borders nor padding
|
|
147
|
+
* (bmueller77) The socket around the sticky add button is one pixel wide instead of seven. It only shows when the button floats over a card, and then as a heavy frame
|
|
148
|
+
* (bmueller77) Fix: a saved card that the active filter hides straight away **disappeared without a word**. A tester created six cards and thought saving was broken until the network response 201 told him otherwise. After saving, the board is checked for the card and the UI says so when it is not there
|
|
149
|
+
* (bmueller77) Fix: from the sixth column on, "+ Add column" sat on the edge of the scroll area, half cut off and without effect, and the input that followed was lost. Fix: the recurrence prefilled day and month with today's date even when the card carried a due date. Fix: the remembered expanded state silently overruled a freshly set display limit, so "Max 3" showed seven cards and looked broken. Fix: the board picker still showed the old name after renaming
|
|
150
|
+
* (bmueller77) Fix: the "duration" field took the whole width next to the checkbox, measured 850 px for a value like `01:00`. Fix: the summary of a collapsed section showed raw markdown for the description and only the host for the link, so two cards with different files on the same server looked identical. Fix: the label summary carried no colour dots although the manual describes them. Fix: the interface error texts wrote "zustaendige" without the umlaut
|
|
151
|
+
* (bmueller77) Fix: with the WIP limit exceeded and a filter active, the column header read "2/5" in red - the filtered figure before the slash, the colour from the unfiltered one. The column's own figure stands there now, and the tooltip still names how many the filter shows. The rule sat in the middle of the rendering and had been wrong twice for that reason; it lives in `totalLabel()` with five tests beside it
|
|
152
|
+
* (bmueller77) Fix: the plural form still read "card(s)", "tarjeta(s)" in the prompt for removing a board member. Written out in all eleven languages now. Fix: "+ New" in the card editor always assigned green - the palette had only reached the board manager
|
|
153
|
+
* (bmueller77) **A fresh instance no longer ships with two example users.** Since the adapter freezes user IDs, the presets were permanently called "user1" and "user2" and could only be deleted, not renamed, so the first thing to do on a new instance was to throw away two users whose names must not be touched. "+ Card" explains by itself that a user is missing first
|
|
154
|
+
* (bmueller77) Fix: a recurring card left lying for several intervals produced a follow-up card **dated in the past**. Due 28.08., interval 7, completed 07.09. gave 04.09. The calculation now starts from the later of due date and today. Finishing early keeps the calendar as the reference, otherwise the grid would creep forward with every early tick
|
|
155
|
+
* (bmueller77) Fix: without a single user the card editor opened and saving failed on a condition nobody could meet there. Fix: the reason on the blocked "+ Card" never appeared, because Chrome delivers no mouse events on disabled buttons. It uses `aria-disabled` now, so the click is caught and says what is missing
|
|
156
|
+
* (bmueller77) Fix: the column count and the sort button in the column header measured 46x18 and 22x18 px and are on 24 px minimum height now. Fix: "+X more" hung on the column while the add button hung in the card list, so the hint sat below the add button with 40 px to the last card instead of 8, and 4 px further left than the cards
|
|
157
|
+
* (bmueller77) Fix: `info.orphanedAssignees` was only written on start, so a repair or a restore from the trash left the state stale until the next start. Fix: `info.frozenUserIds` only ever grew, so a user created later with the same ID would have found the field locked from the outset. Fix: `info.apiSecret` was created on fresh instances after all, although the manual has said the opposite since 0.3.0
|
|
158
|
+
* (bmueller77) Fix: "setInterval called, but adapter is shutting down" did not come from a normal restart but from saving the settings: the host stops the instance mid-start while the start is still creating timers. Server, scheduler and the delayed write ask first now
|
|
159
|
+
* (bmueller77) Fix: "2 Karte(n)" in the prompt for removing a board member. Fix: the tooltip on the due date named only the state; the scale stands below it now. Fix: after "+ Add column" and "+ Add label" the focus stayed on the link. Fix: the links in the rendered markdown preview sat in the tab order although it is display only
|
|
160
|
+
* (bmueller77) A card that carries a **time of day** now turns red once that time has passed. Until now the colour only changed at midnight, although 0.3.0 introduced the minute precise `cardDue` event, so the event and the colour contradicted each other. The badges are refreshed in place every minute rather than by re-rendering the board, which leaves the scroll position and a drag in progress untouched
|
|
161
|
+
* (bmueller77) Fix: **`boards.<id>.overdueCount` went stale.** The minute tick only refreshed the per-user states; the board counters were written by the persist path, which runs on changes. A card that becomes overdue purely because the date rolled over triggers no change, so on an untouched board the counter kept its old value
|
|
162
|
+
* (bmueller77) **A user ID can no longer be renamed once it exists.** Cards, avatar files and the addresses of shared views all hang on that ID, so a rename left every one of them pointing nowhere - and the adapter could not even clean up afterwards, because a rename cannot be told apart from "deleted and newly created". The field is locked as soon as the user has been saved once. The display name stays freely editable, which is what people actually want to change. Cost: the adapter writes a marker into its own instance configuration, which restarts the instance once per newly added user
|
|
163
|
+
* (bmueller77) **Cards that point at a user who no longer exists can be repaired in the board settings**, under *Users -> Orphaned assignees*. Each orphaned ID shows how many cards it holds and on which boards; the count expands into the list of cards - title, board, column, due date, done ones struck through - and each card opens in the normal editor, because nobody moves thirteen cards on trust. The gear icon carries a small dot while anything is open. The section is absent when there is nothing to fix, and it never appears in embedded views with `hideSettings=1`
|
|
164
|
+
* (bmueller77) The trash is now left out of the repair as well, not just out of the detection. Until now the confirmation named a number that the card list did not contain, and cards on their way to deletion were reassigned to somebody
|
|
165
|
+
* (bmueller77) `reassignUser` also moves the **avatar picture** now. The files are named after the user ID, so the picture stayed behind under the old one and the target person was left without. An existing picture of the target is not overwritten. The target also becomes a member of every board it touches - otherwise it would be responsible for cards while missing from that board's person filter
|
|
166
|
+
* (bmueller77) **The API validates assignees the way the card editor does.** At least one person is required, and every ID has to exist; unknown ones are answered with `400` and a list of the valid IDs. Until now anything went through, placeholders like `default` included, which produced cards the editor could never have created and which stay invisible behind a `users` filter. An ID already on the card stays allowed when editing, so an orphaned card does not become the one card you cannot touch. **This is a behaviour change:** callers that create cards without an assignee will start failing
|
|
167
|
+
* (bmueller77) An unknown **label** coming in through the API is added to the board instead of being rejected, so a script can hand out a new label without creating it first. Without that the card would carry a label the board does not list, which makes it invisible behind an `onlyLabel` filter
|
|
168
|
+
* (bmueller77) New commands `reassignUser` and `listOrphanedAssignees`, plus `POST /api/users/<name>/reassign`, `GET /api/users/orphaned` and `GET /api/users/orphaned/<name>` for the card list behind one ID. All of them touch every board, so they stay closed to board-restricted tokens
|
|
169
|
+
* (bmueller77) "+X more" below a column is a button now. It looked like one and was plain text, so the cards hidden by the display limit could not be reached without changing the limit itself. Clicking shows them, clicking again hides them, and the choice is remembered per device. Its text also lines up with the left edge of the cards now instead of sitting six pixels further left
|
|
170
|
+
* (bmueller77) Fix: with a filter on, an exceeded WIP limit turned the column red while the badge showed only the match count, so two cards against a limit of three looked like a bug. The limit now stays visible in that case, and the tooltip names both figures, the cards the column really holds and the ones the filter shows
|
|
171
|
+
* (bmueller77) **New recurrence kind: every X days counted from completion** (#40). "Every X days" keeps a fixed grid from its start date, so a card due every 30 days that is finished ten days late comes back after 20 days, not 30. The new kind counts from the moment the card is ticked off, which is what maintenance intervals mean: the filter lasts 30 days from the change, not from the calendar. Both kinds share the same arithmetic, only the anchor differs, and the follow-up card carries its own copy of the rule. No calendar series can be built for it, so such cards get a single invite like "working day of the month" does
|
|
172
|
+
* (bmueller77) The hint below the recurrence field for "every X days" said "new card after the configured number of days", which described the new kind rather than the existing one. That reading is exactly what was reported in #40
|
|
173
|
+
* (bmueller77) Fix: the adapter was killed with SIGKILL on every restart. Shutdown closed the web server first and wrote the data afterwards, but `server.close` waits for every connection to go away and an open browser tab holds its keep-alive. The adapter hung, never got to writing, and the host killed it after a second, so the last changes were at stake on every restart. Data is written first now, and open connections are closed instead of waited for
|
|
174
|
+
* (bmueller77) Fix: Escape and the close cross discarded card edits without asking. The settings dialog had always asked; the card editor had not. It now compares the form against a snapshot taken when it opened, so no field can be forgotten. "Cancel" still discards without asking
|
|
175
|
+
* (bmueller77) Fix: a card belonging to a deleted user showed an empty required field in the editor. Clicking a person then left the old ID in place unnoticed. The ID now appears as its own dashed chip marked "(deleted)"
|
|
176
|
+
* (bmueller77) Fix: the dot on the gear was only computed on load, on the assumption that orphaned assignees cannot appear while the board is open. They can: a card restored from the trash brings its ID back. The check now also runs after a restore, and it clears the dot again
|
|
177
|
+
* (bmueller77) Fix: an unusable date format was accepted without checking and then printed on every card verbatim. A format without a day, month or year token is discarded with a warning in the log
|
|
178
|
+
* (bmueller77) Fix: Enter inside the checklist saved the whole card and closed the dialog. It creates the next item now; Ctrl and Enter saves from there
|
|
179
|
+
* (bmueller77) Fix: selection and keyboard focus looked identical on the chips, both a two-pixel ring in the accent colour. The focus ring is dashed now
|
|
180
|
+
* (bmueller77) Fix: white on the orange due badge reached 3.08:1, below the 4.5:1 of WCAG AA. The orange is darker (4.59:1). Red as a text colour on a dark surface reached 3.14:1 and now uses a lighter tone through `--danger-fg` (6.85:1)
|
|
181
|
+
* (bmueller77) Fix: the sticky add-card button sat on top of card titles and labels while scrolling. It has an opaque pad in the column colour now
|
|
182
|
+
* (bmueller77) Fix: below 600 px the board row in the settings stretched the board picker and the name field to 140 px, because the column direction turned a `flex-basis` meant as width into a height
|
|
183
|
+
* (bmueller77) The due-date badge has a tooltip naming its state, since a colour on its own does not say whether it is worse than the one beside it. New labels take their colour from a palette in rotation. The pencil and the other card icons have a 24 px hit area. "+ Card" is disabled while no board exists, and the filter button that has been dead since 0.3.0 is gone
|
|
184
|
+
* (bmueller77) **With exactly one user, assignment disappears** (#35). No chips in the header, no avatars on the cards, no assignees field in the editor, no user picker in the views dialog: with one person there is nothing to choose and nothing to filter. The API fills the field in instead of answering `400`, so a script does not fail on a question that answers itself. A card carrying an ID that no longer exists keeps it rather than being silently moved. Adding a second user brings all of it back
|
|
185
|
+
* (bmueller77) The copy button on a done card is `mdi:content-copy` now, two offset sheets (#33). It used to be a sheet with a circular arrow, which at 14 px looked like the recurrence icon sitting on the same card, so people read the copy button as a recurrence marker that had moved. The recurrence icon itself never moved. The documentation gained a table listing every icon that can appear on a card
|
|
186
|
+
* (bmueller77) Labels keep one order everywhere (#32). A card used to list them in the order they had been clicked in the editor, so two cards carrying the same labels looked different. Card, picker and section summary now all follow the order of the board, and that order can be dragged by a handle in the board settings, the same way the columns already worked
|
|
187
|
+
* (bmueller77) Fix: `overdueCount` and `overdueList` ignored the time of day (#31). A card due today at 09:00 turned red in the board at 09:01, while the states kept their old value until midnight, because the counters compared dates only. One function now decides it for the states, the `cardDue` event and the colour alike
|
|
188
|
+
* (bmueller77) **The column header can show more than the card count.** Clicking the number opens a menu with four checkmarks: total, tomorrow, today, overdue. Each ticked entry gets its own badge next to the others, in the same colours the due-date badges use on the cards and following the same arithmetic, lead time and time of day included. The choice is stored per column and per device, like the sort mode. Done columns and the trash have no menu, since every card there counts as completed
|
|
189
|
+
* (bmueller77) The sort menu and the new counts menu can be operated from the keyboard. Both hang off `body`, so a Tab from the button that opened them used to jump past them into the cards; they now take the focus, move with the arrow keys and hand it back on Escape
|
|
190
|
+
* (bmueller77) **The card editor is reorganised.** The two required fields come first, title and assignees - the latter used to sit far down and could fall below the fold on a small screen, so the card could not be saved without scrolling for it. Everything optional now sits in collapsible sections: description, labels and card colour, link, location, recurrence, checklist. Each header shows on its right what is inside, so a collapsed section summarises rather than hides. Which sections are open is remembered per device and applies to the next new card as well
|
|
191
|
+
* (bmueller77) Labels and card colour share one section header on wide screens; below 600 px each gets its own and collapses separately
|
|
192
|
+
* (bmueller77) **The chip groups can be operated from the keyboard.** Assignees, labels, card colours and the new link type bar are `<span>` elements and were invisible to Tab: focus skipped straight past them, and in the colour picker it landed on the last swatch because only the custom-colour wheel carried a `tabIndex`. Each group is now a single tab stop with arrow keys inside, Home and End for the ends, space or Enter to select. The section headers are tab stops too
|
|
193
|
+
* (bmueller77) **The link field has a bar of the nine link types above it.** Clicking one puts a matching example into the field as a placeholder, `tel:+49123456789` instead of `https://...`, without touching what is already typed. The bar also highlights which type matches the current address, using the same detection the board uses for the card
|
|
194
|
+
* (bmueller77) The link field accepts exactly what the board renders. It was an `<input type="url">`, which demanded a scheme and therefore rejected `example.com` and relative paths although the adapter accepts both - while letting `javascript:` through, because that is a formally valid URL. The same function now decides in both places
|
|
195
|
+
* (bmueller77) All dialogs have a close cross in the top right. Card editor and settings share one width and height so nothing jumps when switching between them; the views dialog stays as tall as its content
|
|
196
|
+
* (bmueller77) Fix: **a closed dialog stayed on screen.** The rule giving the dialogs their flex layout was not bound to `[open]` and therefore overrode the browser default `dialog:not([open]) { display: none }`. The dialog kept its space and, no longer being in the top layer, the board painted through it
|
|
197
|
+
* (bmueller77) Fix: the first label in the editor stretched over all free vertical space and pushed everything below it down, because `flex: 1` on labels is meant to distribute width in a row, not height in a column
|
|
198
|
+
* (bmueller77) Fix: the focus ring of the fields was clipped at the left edge of the scrolling area, and section headers did not line up with the other labels
|
|
199
|
+
* (bmueller77) The yellow of the lead-time step is `#ffd800`
|
|
200
|
+
* (bmueller77) `/api/config` now also carries `reminderDaysBefore`, which the web UI needs for the colour window
|
|
201
|
+
* (bmueller77) New CSS variables `--due-upcoming` and `--due-upcoming-text` for the yellow step, defined for both themes and referenced with a fallback so existing custom themes keep working
|
|
202
|
+
|
|
203
|
+
### 0.3.1 (2026-08-19)
|
|
204
|
+
* (bmueller77) Releases are now built and published by CI when a version tag is pushed, signed with provenance through npm trusted publishing. The 0.3.0 package was published by hand and carries no signature, which is what the repository checker flags as E2008 and E3032
|
|
205
|
+
* (bmueller77) The workflow follows the ioBroker standard now: separate `check-and-lint` and `adapter-tests` jobs, a trigger for `v*` tags, a concurrency group per branch, and a `deploy` job that also creates the GitHub release. Adapter tests run on Node 22 and 24 across Linux, Windows and macOS instead of Linux alone
|
|
206
|
+
* (bmueller77) Type checking for the adapter sources (`tsconfig.json` on `@tsconfig/node22`), with `lib/adapter-config.d.ts` declaring the 29 fields of the instance configuration, so a typo in `adapter.config.<field>` surfaces instead of silently reading `undefined`
|
|
207
|
+
* (bmueller77) `npm run lint` is usable again. Prettier flagged every line of every file on a Windows checkout because the repository stores LF and git checks out CRLF; it now accepts the line ending a file arrives with
|
|
208
|
+
* (bmueller77) `common.news` lists only the versions that actually exist on npm, so the changelog shown in the admin matches what can be installed
|
|
209
|
+
* (bmueller77) Internal: the day difference of the "every X days" recurrence is computed from `getTime()` on both dates rather than subtracting the Date objects. Same result, without the implicit conversion
|
|
210
|
+
|
|
122
211
|
### 0.3.0 (2026-08-04)
|
|
123
212
|
* (bmueller77) **Trash**: deleting a card no longer removes it immediately, it moves to a per-board **Trash** column and can be restored for **30 days**, after which it is deleted permanently. The trash column is hidden by default and can be shown per device (board settings). It has its own fixed grey styling, is sorted by deletion time and shows the remaining days per card
|
|
124
213
|
* (bmueller77) Optional **automatic cleanup** of old done cards per board, by **age** (default 90 days) or by **count** (default 100), moving them into the trash daily and on adapter start
|
|
125
|
-
* (bmueller77) **Per-column sorting**: a toggle in the column header opens a menu with five modes, drag & drop, drag handles, due date (incl. time, cards without a date last), priority and age in column (most recently added on top, e.g. the last card you completed). For the automatic modes a **direction toggle** sits next to it and reverses the order with one click. Mode and direction are stored per device; returning to the manual modes restores your own order. Requested by @lyc in the [ioBroker forum](https://forum.iobroker.net/topic/85030/neuer-adapter-kanban-board) (post #5), tracked as [#10](https://github.com/bmueller77/
|
|
126
|
-
* (bmueller77) Cards can be **moved or copied to another board**: labels are matched by name, assignees are limited to members of the target board, and if none remain you are asked to pick one. Requested by @lyc in the [ioBroker forum](https://forum.iobroker.net/topic/85030/neuer-adapter-kanban-board) (post #5), tracked as [#11](https://github.com/bmueller77/
|
|
214
|
+
* (bmueller77) **Per-column sorting**: a toggle in the column header opens a menu with five modes, drag & drop, drag handles, due date (incl. time, cards without a date last), priority and age in column (most recently added on top, e.g. the last card you completed). For the automatic modes a **direction toggle** sits next to it and reverses the order with one click. Mode and direction are stored per device; returning to the manual modes restores your own order. Requested by @lyc in the [ioBroker forum](https://forum.iobroker.net/topic/85030/neuer-adapter-kanban-board) (post #5), tracked as [#10](https://github.com/bmueller77/ioBroker.kanban/issues/10)
|
|
215
|
+
* (bmueller77) Cards can be **moved or copied to another board**: labels are matched by name, assignees are limited to members of the target board, and if none remain you are asked to pick one. Requested by @lyc in the [ioBroker forum](https://forum.iobroker.net/topic/85030/neuer-adapter-kanban-board) (post #5), tracked as [#11](https://github.com/bmueller77/ioBroker.kanban/issues/11)
|
|
127
216
|
* (bmueller77) The same dialog can **clone a card in place**: three buttons at the top (clone / copy / move) decide what happens, and a clone duplicates the card with all its content directly below the original
|
|
128
217
|
* (bmueller77) **Recurrence by cron expression**: a new recurrence type takes the usual five fields (`0 8 * * 1-5`) with lists, ranges, steps and the English short names for month and weekday. The expression works as a pattern, not as a schedule: the adapter uses it to find the next due date when a card is ticked off. Minute and hour set the time of the card, and the editor shows the rule in plain words plus the next three dates while you type. Simple patterns also become a proper recurring calendar invitation
|
|
129
218
|
* (bmueller77) Recurring cards now produce a **series invite** (`RRULE`) instead of one single event per instance, and the invite is sent **once**: follow-up cards attach nothing, an updated invite (same `UID`, higher `SEQUENCE`) only follows a change of due date, time, duration or recurrence rule
|
|
130
219
|
* (bmueller77) Calendar invites get an adjustable **duration** (`calendarDuration`, `HH:MM`, default one hour) next to the calendar checkbox
|
|
131
220
|
* (bmueller77) Done cards now show a **strikethrough title**, a **completion timestamp** in the configured date/time format, and a **copy button** that opens the editor with the same content
|
|
132
|
-
* (bmueller77) The **"Email" tab is now called "Notifications"** and is sorted so that the mail settings come first: adapter instance, sender, reminder time, lead time, the card-precise due trigger, then the per-event defaults. The pointer to other services (Telegram, Pushover and the rest through the lastEvent state or an outbound webhook) sat in the middle of the mail settings and now closes the tab under its own heading, linking straight to the docs section that walks through it. Native messenger support stays open as [#12](https://github.com/bmueller77/
|
|
221
|
+
* (bmueller77) The **"Email" tab is now called "Notifications"** and is sorted so that the mail settings come first: adapter instance, sender, reminder time, lead time, the card-precise due trigger, then the per-event defaults. The pointer to other services (Telegram, Pushover and the rest through the lastEvent state or an outbound webhook) sat in the middle of the mail settings and now closes the tab under its own heading, linking straight to the docs section that walks through it. Native messenger support stays open as [#12](https://github.com/bmueller77/ioBroker.kanban/issues/12), raised by @lyc in the [ioBroker forum](https://forum.iobroker.net/topic/85030/neuer-adapter-kanban-board) (posts #5 and #6)
|
|
133
222
|
* (bmueller77) New events **cardRestored** and **cardPurged**; `cardDeleted` now means "moved to trash" (automatic cleanup adds `detail.auto`). Per-user e-mail toggles for all three; automatic cleanup runs are bundled into one summary e-mail per user
|
|
134
223
|
* (bmueller77) The **created** notification now reaches all members of the board instead of only the assignees of the card, so you also hear about cards someone else is responsible for
|
|
135
224
|
* (bmueller77) Every notification event and every card returned by the **REST API** now carries the computed field **`dueAt`**, the due date including time as an ISO timestamp with local offset (no time = 00:00), so automations no longer need to combine `due` + `dueTime` + time zone themselves
|
|
@@ -153,7 +242,7 @@ Details: [Security & access control](docs/en/README.md#security--access-control)
|
|
|
153
242
|
* (bmueller77) **Security: the write token was readable by any website.** `Access-Control-Allow-Origin: *` sat on every route, including the one that hands the token to the UI in a `<meta>` tag, so any page open in your browser could scan the network for the adapter, read that page cross-origin, take the token and then change or delete boards. CORS is now limited to `/api` and `/webhook` and to origins listed in the new **"Allowed browser origins"** setting (empty by default = same origin only). Only browser access was affected; scripts, Node-RED and curl are unchanged
|
|
154
243
|
* (bmueller77) **Security: a board-restricted token could still escape its boards.** It was only checked for board-specific webhook calls and could change any board via `/api`. On the command route the guard accepted any allowed board named anywhere in the body as proof, even for commands that ignore that field: `addBoard` with `"board":"<allowed>"` created boards elsewhere, and the same trick worked on the user and avatar routes. What counts now is the board the call actually touches: the path board for REST plus a transfer's target, and per command the field that command really evaluates. A writing command that names no board is refused for restricted tokens; reading commands (`listBoards`, `getBoard`) stay open
|
|
155
244
|
* (bmueller77) **Security: an empty token row opened the API.** A row added in the token table but left blank matched every request that carried no token at all, because a missing token fell back to the empty string. Blank tokens are now rejected outright. In the same vein, an empty **"allowed boards"** field counted as `*`, so clearing it to take rights away in fact granted them for every board. Empty now means no board; enter `*` explicitly for all
|
|
156
|
-
* (bmueller77) Tokens are **no longer accepted as a URL parameter** (`?token
|
|
245
|
+
* (bmueller77) Tokens are **no longer accepted as a URL parameter** (`?token=...`), only in the `X-Kanban-Token` header or as `_token` in the body, so they stop showing up in logs, browser history and referrers
|
|
157
246
|
* (bmueller77) The **SPA write secret moved into the adapter's file storage**; the state `kanban.0.info.apiSecret` stays but is kept empty. An existing value is migrated on first start. Object access no longer implies write access to the API
|
|
158
247
|
* (bmueller77) The **`action` state can be switched off** in the instance settings ("Webhooks (in)"). It executes the full command vocabulary without a token, so installations that do not use it can close that door
|
|
159
248
|
* (bmueller77) **Irreversible commands** (`deleteBoard`, `emptyTrash`, `purgeCard`) are logged with their source, no matter which route they came in through
|
|
@@ -195,6 +284,8 @@ Details: [Security & access control](docs/en/README.md#security--access-control)
|
|
|
195
284
|
- **0.1.1**, Security: token-protected write API, sanitized Markdown preview, CSP, safe link schemes
|
|
196
285
|
- **0.1.0**, Initial release
|
|
197
286
|
|
|
287
|
+
[Older changelogs can be found here](CHANGELOG_OLD.md)
|
|
288
|
+
|
|
198
289
|
## Acknowledgements
|
|
199
290
|
|
|
200
291
|
Built with the support of Anthropic's **Claude**, in particular for the translations of the web UI and this documentation (English, French, Dutch, Italian), as well as testing and documentation review.
|
package/admin/i18n/de.json
CHANGED
|
@@ -1,100 +1,101 @@
|
|
|
1
|
-
{
|
|
2
|
-
"emailTab__hdr_text": "Vorgabe (gilt, wenn beim Benutzer nichts gesetzt ist)",
|
|
3
|
-
"emailTab__otherHdr_text": "Andere Dienste (Telegram, Pushover, …)",
|
|
4
|
-
"emailTab__otherServicesHint_text": "Eingebaut ist nur E-Mail. Jeder andere Dienst läuft über den lastEvent-State oder einen ausgehenden Webhook — die Doku zeigt das an einem Telegram-Skript zum Kopieren.",
|
|
5
|
-
"emailTab__otherServicesLink_label": "An Telegram, Pushover und andere schicken",
|
|
6
|
-
"emailTab_dueExact_help": "Zusätzlich zur täglichen Erinnerung: Karten mit Uhrzeit lösen cardDue genau dann aus (detail.exact = true). Achtung: Damit geht auch eine zweite „Fällig\"-E-Mail an alle raus, die diese Benachrichtigung aktiviert haben.",
|
|
7
|
-
"emailTab_dueExact_label": "„Karte fällig\" zur Uhrzeit der Karte auslösen",
|
|
8
|
-
"emailTab_emailFrom_label": "Absenderadresse (leer = Adapter-Vorgabe)",
|
|
9
|
-
"emailTab_emailInstance_label": "E-Mail-Adapter-Instanz",
|
|
10
|
-
"emailTab_label": "Benachrichtigungen",
|
|
11
|
-
"emailTab_notifyAssigned_label": "Karte zugewiesen",
|
|
12
|
-
"emailTab_notifyCreated_label": "Karte angelegt",
|
|
13
|
-
"emailTab_notifyDeleted_label": "In den Papierkorb",
|
|
14
|
-
"emailTab_notifyDone_label": "Karte erledigt",
|
|
15
|
-
"emailTab_notifyDue_label": "Karte fällig/überfällig",
|
|
16
|
-
"emailTab_notifyMoved_label": "Karte verschoben",
|
|
17
|
-
"emailTab_notifyPurged_label": "Endgültig gelöscht",
|
|
18
|
-
"emailTab_notifyRestored_label": "Karte wiederhergestellt",
|
|
19
|
-
"emailTab_notifyUpdated_label": "Karte geändert",
|
|
20
|
-
"emailTab_reminderDaysBefore_label": "X Tage vor Fälligkeit erinnern",
|
|
21
|
-
"emailTab_reminderTime_label": "Erinnerungs-Uhrzeit (HH:MM)",
|
|
22
|
-
"emailTab_reminderTime_validatorErrorText": "Bitte im Format HH:MM angeben, z. B. 07:30.",
|
|
23
|
-
"generalTab_accentColor_label": "Akzentfarbe",
|
|
24
|
-
"generalTab_bind_label": "IP-Adresse",
|
|
25
|
-
"generalTab_customCss_help": "Wird als letztes Stylesheet in der Board-Oberfläche geladen",
|
|
26
|
-
"generalTab_customCss_label": "Eigenes CSS",
|
|
27
|
-
"generalTab_dateFormat_help": "Leer = ioBroker-Systemformat. Platzhalter: D/DD Tag, M/MM Monat, MMM/MMMM Monatsname, YY/YYYY Jahr, ddd/dddd Wochentag (z.B. DD. MMMM YYYY)",
|
|
28
|
-
"generalTab_dateFormat_label": "Datumsformat",
|
|
29
|
-
"generalTab_label": "Allgemein",
|
|
30
|
-
"generalTab_language_help": "Leer/Automatisch = ioBroker-Systemsprache",
|
|
31
|
-
"generalTab_language_label": "Sprache",
|
|
32
|
-
"generalTab_language_options10_label": "Українська",
|
|
33
|
-
"generalTab_language_options11_label": "中文",
|
|
34
|
-
"generalTab_language_options6_label": "Español",
|
|
35
|
-
"generalTab_language_options7_label": "Polski",
|
|
36
|
-
"generalTab_language_options8_label": "Português",
|
|
37
|
-
"generalTab_language_options9_label": "Русский",
|
|
38
|
-
"generalTab_language_options_0_label": "Automatisch (System)",
|
|
39
|
-
"generalTab_language_options_1_label": "Deutsch",
|
|
40
|
-
"generalTab_language_options_2_label": "English",
|
|
41
|
-
"generalTab_language_options_3_label": "Français",
|
|
42
|
-
"generalTab_language_options_4_label": "Nederlands",
|
|
43
|
-
"generalTab_language_options_5_label": "Italiano",
|
|
44
|
-
"generalTab_port_label": "Port",
|
|
45
|
-
"generalTab_publicUrl_help": "z.B. http://192.168.1.10:8095 — leer = automatisch",
|
|
46
|
-
"generalTab_publicUrl_label": "Basis-URL (für Links in E-Mails)",
|
|
47
|
-
"generalTab_themeDefault_label": "Standard-Theme",
|
|
48
|
-
"generalTab_themeDefault_options_0_label": "Automatisch (System)",
|
|
49
|
-
"generalTab_themeDefault_options_1_label": "Hell",
|
|
50
|
-
"generalTab_themeDefault_options_2_label": "Dunkel",
|
|
51
|
-
"generalTab_timeFormat_label": "Uhrzeit-Format",
|
|
52
|
-
"generalTab_timeFormat_options_0_label": "24-Stunden (14:00)",
|
|
53
|
-
"generalTab_timeFormat_options_1_label": "12-Stunden (2:00 PM)",
|
|
54
|
-
"usersTab__info_text": "Benutzer können Karten zugewiesen werden. Kein Login — die Benutzer-Chips in der Board-Kopfzeile dienen als Filter.",
|
|
55
|
-
"usersTab__notifyInfo_text": "Nicht angehakt = globale Vorgabe (Tab „Benachrichtigungen\"). Eine E-Mail wird nur gesendet, wenn beim Benutzer eine Adresse hinterlegt und der Tab konfiguriert ist. Automatische Aufräumläufe werden zu einer Sammelmail je Benutzer gebündelt.",
|
|
56
|
-
"usersTab__notifyLegend_text": "<div style='font-size:0.85rem;line-height:1.5;opacity:0.85'><b>Was die Spalten bedeuten</b><table style='border-collapse:collapse'><tr><td style='padding:1px 12px 1px 0;white-space:nowrap'><b>→ Zugew.</b></td><td>dem Benutzer wurde eine Karte zugewiesen, auch nachträglich bei einer bestehenden Karte</td></tr><tr><td style='padding:1px 12px 1px 0;white-space:nowrap'><b>→ Fällig</b></td><td>eine offene Karte des Benutzers ist fällig, überfällig oder rückt in die eingestellten Tage vor Fälligkeit. Die Erinnerung wiederholt sich täglich zur Erinnerungs-Uhrzeit</td></tr><tr><td style='padding:1px 12px 1px 0;white-space:nowrap'><b>→ Geänd.</b></td><td>eine Karte des Benutzers wurde bearbeitet</td></tr><tr><td style='padding:1px 12px 1px 0;white-space:nowrap'><b>→ Versch.</b></td><td>eine Karte des Benutzers wurde in eine andere Spalte verschoben</td></tr><tr><td style='padding:1px 12px 1px 0;white-space:nowrap'><b>→ Erled.</b></td><td>eine Karte des Benutzers wurde als erledigt markiert</td></tr><tr><td style='padding:1px 12px 1px 0;white-space:nowrap'><b>→ Neu</b></td><td>in einem Board, in dem der Benutzer Mitglied ist, wurde eine neue Karte angelegt, ganz gleich wer zuständig ist. Das gilt auch für Kopien aus einem anderen Board und für Folgekarten von Wiederholungen</td></tr><tr><td style='padding:1px 12px 1px 0;white-space:nowrap'><b>→ Papier.</b></td><td>eine Karte des Benutzers ist im Papierkorb gelandet, manuell oder durch das automatische Aufräumen. Dort bleibt sie 30 Tage wiederherstellbar</td></tr><tr><td style='padding:1px 12px 1px 0;white-space:nowrap'><b>→ Wiederh.</b></td><td>eine Karte des Benutzers wurde aus dem Papierkorb wiederhergestellt</td></tr><tr><td style='padding:1px 12px 1px 0;white-space:nowrap'><b>→ Gelöscht</b></td><td>eine Karte des Benutzers wurde nach den 30 Tagen endgültig gelöscht</td></tr></table></div>",
|
|
57
|
-
"usersTab_label": "Benutzer",
|
|
58
|
-
"usersTab_users_0_title": "ID (klein, ohne Umlaute)",
|
|
59
|
-
"
|
|
60
|
-
"
|
|
61
|
-
"
|
|
62
|
-
"
|
|
63
|
-
"
|
|
64
|
-
"
|
|
65
|
-
"
|
|
66
|
-
"
|
|
67
|
-
"
|
|
68
|
-
"
|
|
69
|
-
"
|
|
70
|
-
"
|
|
71
|
-
"
|
|
72
|
-
"
|
|
73
|
-
"
|
|
74
|
-
"
|
|
75
|
-
"
|
|
76
|
-
"
|
|
77
|
-
"
|
|
78
|
-
"
|
|
79
|
-
"
|
|
80
|
-
"
|
|
81
|
-
"
|
|
82
|
-
"
|
|
83
|
-
"
|
|
84
|
-
"
|
|
85
|
-
"
|
|
86
|
-
"
|
|
87
|
-
"
|
|
88
|
-
"
|
|
89
|
-
"
|
|
90
|
-
"
|
|
91
|
-
"
|
|
92
|
-
"
|
|
93
|
-
"
|
|
94
|
-
"
|
|
95
|
-
"
|
|
96
|
-
"
|
|
97
|
-
"
|
|
98
|
-
"
|
|
99
|
-
"
|
|
100
|
-
|
|
1
|
+
{
|
|
2
|
+
"emailTab__hdr_text": "Vorgabe (gilt, wenn beim Benutzer nichts gesetzt ist)",
|
|
3
|
+
"emailTab__otherHdr_text": "Andere Dienste (Telegram, Pushover, …)",
|
|
4
|
+
"emailTab__otherServicesHint_text": "Eingebaut ist nur E-Mail. Jeder andere Dienst läuft über den lastEvent-State oder einen ausgehenden Webhook — die Doku zeigt das an einem Telegram-Skript zum Kopieren.",
|
|
5
|
+
"emailTab__otherServicesLink_label": "An Telegram, Pushover und andere schicken",
|
|
6
|
+
"emailTab_dueExact_help": "Zusätzlich zur täglichen Erinnerung: Karten mit Uhrzeit lösen cardDue genau dann aus (detail.exact = true). Achtung: Damit geht auch eine zweite „Fällig\"-E-Mail an alle raus, die diese Benachrichtigung aktiviert haben.",
|
|
7
|
+
"emailTab_dueExact_label": "„Karte fällig\" zur Uhrzeit der Karte auslösen",
|
|
8
|
+
"emailTab_emailFrom_label": "Absenderadresse (leer = Adapter-Vorgabe)",
|
|
9
|
+
"emailTab_emailInstance_label": "E-Mail-Adapter-Instanz",
|
|
10
|
+
"emailTab_label": "Benachrichtigungen",
|
|
11
|
+
"emailTab_notifyAssigned_label": "Karte zugewiesen",
|
|
12
|
+
"emailTab_notifyCreated_label": "Karte angelegt",
|
|
13
|
+
"emailTab_notifyDeleted_label": "In den Papierkorb",
|
|
14
|
+
"emailTab_notifyDone_label": "Karte erledigt",
|
|
15
|
+
"emailTab_notifyDue_label": "Karte fällig/überfällig",
|
|
16
|
+
"emailTab_notifyMoved_label": "Karte verschoben",
|
|
17
|
+
"emailTab_notifyPurged_label": "Endgültig gelöscht",
|
|
18
|
+
"emailTab_notifyRestored_label": "Karte wiederhergestellt",
|
|
19
|
+
"emailTab_notifyUpdated_label": "Karte geändert",
|
|
20
|
+
"emailTab_reminderDaysBefore_label": "X Tage vor Fälligkeit erinnern",
|
|
21
|
+
"emailTab_reminderTime_label": "Erinnerungs-Uhrzeit (HH:MM)",
|
|
22
|
+
"emailTab_reminderTime_validatorErrorText": "Bitte im Format HH:MM angeben, z. B. 07:30.",
|
|
23
|
+
"generalTab_accentColor_label": "Akzentfarbe",
|
|
24
|
+
"generalTab_bind_label": "IP-Adresse",
|
|
25
|
+
"generalTab_customCss_help": "Wird als letztes Stylesheet in der Board-Oberfläche geladen",
|
|
26
|
+
"generalTab_customCss_label": "Eigenes CSS",
|
|
27
|
+
"generalTab_dateFormat_help": "Leer = ioBroker-Systemformat. Platzhalter: D/DD Tag, M/MM Monat, MMM/MMMM Monatsname, YY/YYYY Jahr, ddd/dddd Wochentag (z.B. DD. MMMM YYYY)",
|
|
28
|
+
"generalTab_dateFormat_label": "Datumsformat",
|
|
29
|
+
"generalTab_label": "Allgemein",
|
|
30
|
+
"generalTab_language_help": "Leer/Automatisch = ioBroker-Systemsprache",
|
|
31
|
+
"generalTab_language_label": "Sprache",
|
|
32
|
+
"generalTab_language_options10_label": "Українська",
|
|
33
|
+
"generalTab_language_options11_label": "中文",
|
|
34
|
+
"generalTab_language_options6_label": "Español",
|
|
35
|
+
"generalTab_language_options7_label": "Polski",
|
|
36
|
+
"generalTab_language_options8_label": "Português",
|
|
37
|
+
"generalTab_language_options9_label": "Русский",
|
|
38
|
+
"generalTab_language_options_0_label": "Automatisch (System)",
|
|
39
|
+
"generalTab_language_options_1_label": "Deutsch",
|
|
40
|
+
"generalTab_language_options_2_label": "English",
|
|
41
|
+
"generalTab_language_options_3_label": "Français",
|
|
42
|
+
"generalTab_language_options_4_label": "Nederlands",
|
|
43
|
+
"generalTab_language_options_5_label": "Italiano",
|
|
44
|
+
"generalTab_port_label": "Port",
|
|
45
|
+
"generalTab_publicUrl_help": "z.B. http://192.168.1.10:8095 — leer = automatisch",
|
|
46
|
+
"generalTab_publicUrl_label": "Basis-URL (für Links in E-Mails)",
|
|
47
|
+
"generalTab_themeDefault_label": "Standard-Theme",
|
|
48
|
+
"generalTab_themeDefault_options_0_label": "Automatisch (System)",
|
|
49
|
+
"generalTab_themeDefault_options_1_label": "Hell",
|
|
50
|
+
"generalTab_themeDefault_options_2_label": "Dunkel",
|
|
51
|
+
"generalTab_timeFormat_label": "Uhrzeit-Format",
|
|
52
|
+
"generalTab_timeFormat_options_0_label": "24-Stunden (14:00)",
|
|
53
|
+
"generalTab_timeFormat_options_1_label": "12-Stunden (2:00 PM)",
|
|
54
|
+
"usersTab__info_text": "Benutzer können Karten zugewiesen werden. Kein Login — die Benutzer-Chips in der Board-Kopfzeile dienen als Filter.",
|
|
55
|
+
"usersTab__notifyInfo_text": "Nicht angehakt = globale Vorgabe (Tab „Benachrichtigungen\"). Eine E-Mail wird nur gesendet, wenn beim Benutzer eine Adresse hinterlegt und der Tab konfiguriert ist. Automatische Aufräumläufe werden zu einer Sammelmail je Benutzer gebündelt.",
|
|
56
|
+
"usersTab__notifyLegend_text": "<div style='font-size:0.85rem;line-height:1.5;opacity:0.85'><b>Was die Spalten bedeuten</b><table style='border-collapse:collapse'><tr><td style='padding:1px 12px 1px 0;white-space:nowrap'><b>→ Zugew.</b></td><td>dem Benutzer wurde eine Karte zugewiesen, auch nachträglich bei einer bestehenden Karte</td></tr><tr><td style='padding:1px 12px 1px 0;white-space:nowrap'><b>→ Fällig</b></td><td>eine offene Karte des Benutzers ist fällig, überfällig oder rückt in die eingestellten Tage vor Fälligkeit. Die Erinnerung wiederholt sich täglich zur Erinnerungs-Uhrzeit</td></tr><tr><td style='padding:1px 12px 1px 0;white-space:nowrap'><b>→ Geänd.</b></td><td>eine Karte des Benutzers wurde bearbeitet</td></tr><tr><td style='padding:1px 12px 1px 0;white-space:nowrap'><b>→ Versch.</b></td><td>eine Karte des Benutzers wurde in eine andere Spalte verschoben</td></tr><tr><td style='padding:1px 12px 1px 0;white-space:nowrap'><b>→ Erled.</b></td><td>eine Karte des Benutzers wurde als erledigt markiert</td></tr><tr><td style='padding:1px 12px 1px 0;white-space:nowrap'><b>→ Neu</b></td><td>in einem Board, in dem der Benutzer Mitglied ist, wurde eine neue Karte angelegt, ganz gleich wer zuständig ist. Das gilt auch für Kopien aus einem anderen Board und für Folgekarten von Wiederholungen</td></tr><tr><td style='padding:1px 12px 1px 0;white-space:nowrap'><b>→ Papier.</b></td><td>eine Karte des Benutzers ist im Papierkorb gelandet, manuell oder durch das automatische Aufräumen. Dort bleibt sie 30 Tage wiederherstellbar</td></tr><tr><td style='padding:1px 12px 1px 0;white-space:nowrap'><b>→ Wiederh.</b></td><td>eine Karte des Benutzers wurde aus dem Papierkorb wiederhergestellt</td></tr><tr><td style='padding:1px 12px 1px 0;white-space:nowrap'><b>→ Gelöscht</b></td><td>eine Karte des Benutzers wurde nach den 30 Tagen endgültig gelöscht</td></tr></table></div>",
|
|
57
|
+
"usersTab_label": "Benutzer",
|
|
58
|
+
"usersTab_users_0_title": "ID (klein, ohne Umlaute)",
|
|
59
|
+
"usersTab_users_0_tooltip": "Nach dem Anlegen nicht mehr änderbar: Karten, Avatare und geteilte Ansichten hängen an dieser ID. Zum Umziehen dient der Befehl reassignUser.",
|
|
60
|
+
"usersTab_users_10_title": "→ Wiederh.",
|
|
61
|
+
"usersTab_users_10_tooltip": "E-Mail, wenn eine Karte dieses Benutzers aus dem Papierkorb zurückgeholt wird",
|
|
62
|
+
"usersTab_users_11_title": "→ Gelöscht",
|
|
63
|
+
"usersTab_users_11_tooltip": "E-Mail, wenn eine Karte dieses Benutzers endgültig gelöscht wird",
|
|
64
|
+
"usersTab_users_1_title": "Anzeigename",
|
|
65
|
+
"usersTab_users_2_title": "E-Mail",
|
|
66
|
+
"usersTab_users_3_title": "→ Zugew.",
|
|
67
|
+
"usersTab_users_3_tooltip": "E-Mail, wenn dem Benutzer eine Karte zugewiesen wird",
|
|
68
|
+
"usersTab_users_4_title": "→ Fällig",
|
|
69
|
+
"usersTab_users_4_tooltip": "E-Mail, wenn eine Karte des Benutzers fällig/überfällig ist",
|
|
70
|
+
"usersTab_users_5_title": "→ Geänd.",
|
|
71
|
+
"usersTab_users_5_tooltip": "E-Mail, wenn eine Karte des Benutzers bearbeitet wird",
|
|
72
|
+
"usersTab_users_6_title": "→ Versch.",
|
|
73
|
+
"usersTab_users_6_tooltip": "E-Mail, wenn eine Karte in eine andere Spalte wandert",
|
|
74
|
+
"usersTab_users_7_title": "→ Erled.",
|
|
75
|
+
"usersTab_users_7_tooltip": "E-Mail, wenn eine Karte als erledigt markiert wird",
|
|
76
|
+
"usersTab_users_8_title": "→ Neu",
|
|
77
|
+
"usersTab_users_8_tooltip": "E-Mail, wenn eine neue Karte angelegt wird",
|
|
78
|
+
"usersTab_users_9_title": "→ Papier.",
|
|
79
|
+
"usersTab_users_9_tooltip": "E-Mail, wenn eine Karte dieses Benutzers in den Papierkorb wandert (manuell oder durch Aufräumen)",
|
|
80
|
+
"usersTab_users_label": "Benutzer",
|
|
81
|
+
"webhookInTab__info_text": "Externe Systeme (Skripte, KI-Agenten, …) lesen und schreiben Karten via POST /webhook/<token>/action — Kommandos siehe README. Jede Integration sollte einen eigenen Token bekommen.",
|
|
82
|
+
"webhookInTab__scopeInfo_text": "Die Board-Begrenzung gilt für die Webhook-Route und für die REST-API: Ein auf Boards begrenzter Token kann keine anderen Boards ändern, keine Boards anlegen und keine Benutzer bearbeiten. Tokens werden nur noch im Header X-Kanban-Token oder als _token im Body angenommen — nicht mehr als URL-Parameter.",
|
|
83
|
+
"webhookInTab_actionStateEnabled_help": "Der action-State dieser Instanz führt dieselben Kommandos aus wie die Webhooks, auch deleteBoard und emptyTrash, und braucht keinen Token. Abschalten, wenn kein Skript darauf schreibt.",
|
|
84
|
+
"webhookInTab_actionStateEnabled_label": "Kommandos über den action-State annehmen",
|
|
85
|
+
"webhookInTab_corsOrigins_help": "Nur nötig für Webseiten anderer Herkunft, die die API aus dem Browser aufrufen, z. B. https://dashboard.local:8123 (mehrere per Komma). Leer = nur gleiche Herkunft, das ist die sichere Vorgabe. Skripte, Node-RED und curl sind davon nicht betroffen.",
|
|
86
|
+
"webhookInTab_corsOrigins_label": "Erlaubte Browser-Herkünfte (CORS)",
|
|
87
|
+
"webhookInTab_generateToken_label": "Neuen Token generieren",
|
|
88
|
+
"webhookInTab_inboundTokens_0_title": "Name",
|
|
89
|
+
"webhookInTab_inboundTokens_1_title": "Token",
|
|
90
|
+
"webhookInTab_inboundTokens_2_title": "Erlaubte Boards (Komma oder *)",
|
|
91
|
+
"webhookInTab_inboundTokens_3_title": "Aktiv",
|
|
92
|
+
"webhookInTab_inboundTokens_label": "Tokens",
|
|
93
|
+
"webhookInTab_label": "Webhooks (eingehend)",
|
|
94
|
+
"webhookOutTab__info_text": "Bei Ereignissen sendet der Adapter einen JSON-POST an diese URLs. Ereignisse: cardCreated, cardUpdated, cardMoved, cardAssigned, cardDone, cardDeleted, cardRestored, cardPurged, cardDue — oder * für alle. Jede Nachricht enthält dueAt (Fälligkeit mit Datum + Uhrzeit und lokalem Offset).",
|
|
95
|
+
"webhookOutTab_label": "Webhooks (ausgehend)",
|
|
96
|
+
"webhookOutTab_outboundWebhooks_0_title": "Name",
|
|
97
|
+
"webhookOutTab_outboundWebhooks_1_title": "URL",
|
|
98
|
+
"webhookOutTab_outboundWebhooks_2_title": "Ereignisse (Komma oder *)",
|
|
99
|
+
"webhookOutTab_outboundWebhooks_3_title": "Aktiv",
|
|
100
|
+
"webhookOutTab_outboundWebhooks_label": "Webhooks"
|
|
101
|
+
}
|