Repository navigation
Tags
Tags
Update to 4.20.0 (#1343) * Bump the npm-minor-patch group with 5 updates (#344) Bumps the npm-minor-patch group with 5 updates: | Package | From | To | | --- | --- | --- | | [swiper](https://github.com/nolimits4web/Swiper) | `14.2.0` | `14.3.0` | | [@babel/core](https://github.com/babel/babel/tree/HEAD/packages/babel-core) | `8.0.6` | `8.0.7` | | [@babel/preset-env](https://github.com/babel/babel/tree/HEAD/packages/babel-preset-env) | `8.0.6` | `8.0.7` | | [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) | `26.6.3` | `26.6.4` | | [sass](https://github.com/sass/dart-sass) | `1.105.0` | `1.105.1` | Updates `swiper` from 14.2.0 to 14.3.0 - [Release notes](https://github.com/nolimits4web/Swiper/releases) - [Changelog](https://github.com/nolimits4web/swiper/blob/master/CHANGELOG.md) - [Commits](nolimits4web/swiper@v14.2.0...v14.3.0) Updates `@babel/core` from 8.0.6 to 8.0.7 - [Release notes](https://github.com/babel/babel/releases) - [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md) - [Commits](https://github.com/babel/babel/commits/v8.0.7/packages/babel-core) Updates `@babel/preset-env` from 8.0.6 to 8.0.7 - [Release notes](https://github.com/babel/babel/releases) - [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md) - [Commits](https://github.com/babel/babel/commits/v8.0.7/packages/babel-preset-env) Updates `@types/node` from 26.6.3 to 26.6.4 - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node) Updates `sass` from 1.105.0 to 1.105.1 - [Release 8000 notes](https://github.com/sass/dart-sass/releases) - [Changelog](https://github.com/sass/dart-sass/blob/main/CHANGELOG.md) - [Commits](sass/dart-sass@1.105.0...1.105.1) --- updated-dependencies: - dependency-name: swiper dependency-version: 14.3.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: npm-minor-patch - dependency-name: "@babel/core" dependency-version: 8.0.7 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: npm-minor-patch - dependency-name: "@babel/preset-env" dependency-version: 8.0.7 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: npm-minor-patch - dependency-name: "@types/node" dependency-version: 26.6.4 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: npm-minor-patch - dependency-name: sass dependency-version: 1.105.1 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: npm-minor-patch ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Bump johngrogg/ics-parser (#337) Bumps the composer-minor-patch group in /vendor/dashticz/ical with 1 update: [johngrogg/ics-parser](https://github.com/u01jmg3/ics-parser). Updates `johngrogg/ics-parser` from 3.1.1 to 3.6.0 - [Release notes](https://github.com/u01jmg3/ics-parser/releases) - [Commits](u01jmg3/ics-parser@v3.1.1...v3.6.0) --- updated-dependencies: - dependency-name: johngrogg/ics-parser dependency-version: 3.6.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: composer-minor-patch ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Bump actions/upload-artifact from 4 to 7 (#343) Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 4 to 7. - [Release notes](https://github.com/actions/upload-artifact/releases) - [Commits](actions/upload-artifact@v4...v7) --- updated-dependencies: - dependency-name: actions/upload-artifact dependency-version: '7' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Bump actions/checkout from 4 to 7 (#342) Bumps [actions/checkout](https://github.com/actions/checkout) from 4 to 7. - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](actions/checkout@v4...v7) --- updated-dependencies: - dependency-name: actions/checkout dependency-version: '7' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Bump actions/cache from 4 to 6 (#341) Bumps [actions/cache](https://github.com/actions/cache) from 4 to 6. - [Release notes](https://github.com/actions/cache/releases) - [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md) - [Commits](actions/cache@v4...v6) --- updated-dependencies: - dependency-name: actions/cache dependency-version: '6' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Bump actions/setup-node from 4 to 7 (#340) Bumps [actions/setup-node](https://github.com/actions/setup-node) from 4 to 7. - [Release notes](https://github.com/actions/setup-node/releases) - [Commits](actions/setup-node@v4...v7) --- updated-dependencies: - dependency-name: actions/setup-node dependency-version: '7' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Bump actions/setup-python from 5 to 7 (#339) Bumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 7. - [Release notes](https://github.com/actions/setup-python/releases) - [Commits](actions/setup-python@v5...v7) --- updated-dependencies: - dependency-name: actions/setup-python dependency-version: '7' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Bump version to 4.1.7 (dependency updates) (#345) Co-authored-by: Claude <noreply@anthropic.com> * Rebuild dist/, raise _DASHTICZ_VERSION to 205, check dist in CI (#346) dist/ was last built before the swiper, babel and sass updates, so users still ran the old bundle. Rebuild it, raise the cache-buster, document the rule in AGENTS.md (and drop the stale curlGetJson note) and let the quality job fail when a build differs from the committed dist/. Co-authored-by: Claude <noreply@anthropic.com> * Update johngrogg/ics-parser to 3.6.0 in vendored ical bridge (#347) composer.lock already pointed to 3.6.0 (via #337) but the committed vendor/ directory still held the older sources. Run `composer update johngrogg/ics-parser` so the vendored copy matches the lock file. Checked against 30 sample calendars for all three parser methods: methods 0 and 1 are byte-identical; method 2 no longer emits PHP 8.2+ deprecation notices, includes the inclusive UNTIL occurrence that was missed before, and only changes ordering of same-timestamp events. Composer platform check requires PHP >= 7.2, below the supported 7.4. Co-authored-by: Claude <noreply@anthropic.com> * Sandbox remote responses relayed by cors.php and nocache.php (#348) Both proxies passed the remote Content-Type through unchanged, so a remote text/html or image/svg+xml body opened as a page ran its scripts in the dashboard origin (reflected XSS). Send X-Content-Type-Options: nosniff and a sandbox CSP with every relayed response, via a shared helper in security.php that also refuses CR/LF in relayed header values. Images, JSON and text fetched by the dashboard are unaffected. Co-authored-by: Claude <noreply@anthropic.com> * Add a regression test for the ical bridge (#349) vendor/dashticz/ical/index.php had no automated test. Serve a small calendar (a single event and a weekly series with an inclusive UNTIL) from a local HTTP server and run the bridge for all three parser methods. Methods 1 and 2 must expand the series, and method 2 must not put PHP warnings into the JSON. Co-authored-by: Claude <noreply@anthropic.com> * Fix PHP 8.1+ deprecations in the SG_iCal parser (method 0) (#350) On PHP 8.1 the SG_iCal_Line and SG_iCal_VCalendar interface methods lacked return types and PHP 8.2 rejects the dynamic properties set on SG_iCal_VEvent. Every request through the ical bridge with method 0 therefore put these deprecations in the "_errors" of the JSON. Add #[\ReturnTypeWillChange] (a plain comment on PHP 7.4) and declare the two properties. The parsed events of 30 sample calendars are unchanged. Co-authored-by: Claude <noreply@anthropic.com> * Restrict and harden the garbage bridge (#351) vendor/dashticz/garbage/index.php sent Access-Control-Allow-Origin: *, so any website could query it, and it concatenated request parameters unencoded into the provider URLs and form bodies, so a value could add or replace parameters of the provider request. Require a same-origin request like the other bridges and encode the parameters. Adds tests for the cross-site refusal and for the encoding. Co-authored-by: Claude <noreply@anthropic.com> * Insert only numeric device values into the graph custom header (#352) createCurrentValues() pasted device.currentValue into a string that is then evaluated. A text device with a quote in its value could change the expression. Convert the value with parseFloat first, which is what the expression did with it already. Adds a source test. Co-authored-by: Claude <noreply@anthropic.com> * Quote hostile keys in the CONFIG.js blocks written by the editors (#353) configwriter_format_props() wrote property names unquoted and the block line writers put the block key unescaped inside a single-quoted string. The callers validate their input, but the writer itself should not be able to produce a line that ends its string or object literal. Plain names keep the exact output they have now; other names are quoted and block keys are escaped. Adds a test. Co-authored-by: Claude <noreply@anthropic.com> * Require a clean _errors for ical parser method 0 in the bridge test (#354) The SG_iCal PHP 8.1+ deprecations are fixed, so the bridge test can check method 0 like method 2. Co-authored-by: Claude <noreply@anthropic.com> * Complete the Dutch and French language files (#355) nl_NL lacked switches.state_mixed and fr_FR lacked 98 keys (theme variables and the custom field presets/options). Add them, and add a test that keeps both files complete compared to en_US. The other language files are older and incomplete; the interface falls back to en_US for their missing keys. Co-authored-by: Claude <noreply@anthropic.com> * Test and fix the moon phase calculation (#356) * Add tests for the moon phase calculation of the Button widget js/moon.js had no test. Check the phase, illumination and phase name at known new moon, quarter and full moon moments, and that the image index the Button widget derives from the phase always has an image in img/moon. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> * Fix the unused quarter and age methods of the moon phase The quarters were calculated in a nested function that was never called (and used the wrong this), so newMoon(), fullMoon() and the other quarter methods threw, age() returned NaN because it multiplied by a function, and nextFirstQuarter() pointed at the previous first quarter. Call the calculation with the right this, use the phase value for the age, return the right quarter, remove a debug console.log and bound the search loop. phase(), which the Button widget uses, is unchanged. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> --------- Co-authored-by: Claude <noreply@anthropic.com> * Add tests for the thermostat block and setpoint command (#357) Co-authored-by: Claude <noreply@anthropic.com> * Widget editor: manage only the first block of a catalog kind (#358) Co-authored-by: Claude <noreply@anthropic.com> * Layout editor: no config control for special blocks the device editor cannot open (#359) Co-authored-by: Claude <noreply@anthropic.com> * Keep settings with a semicolon in a string value when rewriting CONFIG.js (#360) Co-authored-by: Claude <noreply@anthropic.com> * Grid layout save: only delete a screen on an explicit deleteScreen flag (#361) Co-authored-by: Claude <noreply@anthropic.com> * Coins block: use the CoinGecko API (#362) Co-authored-by: Claude <noreply@anthropic.com> * Editors: keep text custom field values a string Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> * Widget editor: do not write 0 for an empty number setting (#364) Co-authored-by: Claude <noreply@anthropic.com> * Version 4.20.0; no 'undefined' after the version in Info (#365) Co-authored-by: Claude <noreply@anthropic.com> * Fully Kiosk widget: label naast de switch, 3 kolommen (4.20.1) (#366) Het label staat direct naast elke schakelaar en de schakelaars staan in 3 kolommen (2 onder 768 px, 1 onder 480 px). * Version back to 4.20.0 (Fully Kiosk change folded into 4.20.0) * Fully Kiosk settings: label next to switch, 3 columns; no-attribution rule in AGENTS.md (4.20.2) * Fully Kiosk: Lettergrootte naar de weergave-opties (#369) Het veld Lettergrootte staat nu onder de iconen bij de weergave-opties, in Device Config en bij het toevoegen van de widget. * Widgetinstellingen: lettergrootte onder de iconen, switch naast de tekst (#370) Lettergrootte bij de weergave-opties voor F1, TVgids, Weather Info, HP iLO en PostNL, switches met de tekst ernaast in de Widget Config en de icoon per level in 2 kolommen. * Layout Editor (classic screens): keep the definition of existing blocks when saving * Layout Editor: treat a hand-keyed block with a device idx as a custom device, like the Device Editor * Editors: stricter key patterns, no INF/NaN in CONFIG.js, UTF-8 safe cuts, program folders refused, LMS fields protected * Device Rules: leave an unchanged CSS file alone and restore it exactly on a failed write * Device/Widget Editor: an empty text value of a custom field no longer blocks the popup * Release notes for the editor fixes * Device Editor: alle 46 punten uit de review van deviceeditor.js (#372) Klassieke schermen, quick-add popups, scans, LMS, Calendar, Graph, Multi Device, slide button en opslaan-logica uit de review van deviceeditor.js. * Editors: keep last_update false in the Widget Editor, check inline grid blocks (ED-016, ED-017) --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Claude <noreply@anthropic.com>
Added PostNL, F1 and Multi calendar (#1301) * Fixes/postnl colors (#308) * PostNL widget: configurable colors and two-column config form Add icon/date/time/text color settings to the PostNL widget and lay out its config popup fields in two columns. * PostNL widget: center rows and force icon color Center each shipment row and its text horizontally, and apply the configured icon color with !important so themes can't override it. * PostNL widget: icon style choice (Font Awesome / emoji) Add a Icon style setting with Font Awesome (default) or colorful emoji icons, and remove the icon color option. * PostNL widget: tie Font Awesome icon size to font size setting Font Awesome icons are now the configured font size + 2px. * f1 widget (#309) * Add F1 widget (domoticz_F1 plugin) New widget in the widget menu that shows the race weekend schedule from the domoticz_F1 plugin's text device. Settings: device idx and font size; icon, title and background are the standard widget options. Registered in the widget editor, device editor, layout editor and savewidgets.php, with en/nl translations, CSS and docs. * Fix F1 widget config popup The lng.f1 lookup was declared in the wrong function, so opening the config threw a ReferenceError. Also persist f1 settings on save. * Make F1 widget standalone with plugin options The widget now downloads and parses the F1 ICS calendar itself (vendor/dashticz/f1/index.php) instead of reading a Domoticz text device. Settings mirror the domoticz_F1 plugin: language, calendar URL per language (defaulting to the plugin's feeds), UTC offset, poll interval, session filter, next-event visibility, no-event text, plus hideimageonempty. * Show F1 widget as centered next-event text Grand Prix name with the next session below it ("Do 24 Sep 10:30 : Vrije Training 1"), matching the plugin's next-event output. * Add F1 - All events widget next to F1 - Next event Two widgets in the widget menu (block types f1 and f1events) sharing one set of F1 settings, so both can be placed on one screen. F1 - All events lists every (filtered) session of the next race weekend. * F1 widget config in two columns * Give F1 - All events its own icon * Unify repeatable F1 blocks Replace the legacy F1 widget variants with a single repeatable F1 block keyed by f1mode ('next' or 'all'). This updates the block config flow in the device/layout editors, saves custom-field settings consistently, validates F1 calendar URLs server-side, and refreshes the docs and translations to match the new widget behavior. * Add F1 next-event image option This adds an optional `f1image` field for F1 blocks, rendering a custom image before the next race/session text. The device editor now includes the setting with validation and a custom-image picker, and the docs and translations were updated to describe the new option. * Update creative.css * Add race location to F1 tile title Show the race location in the F1 tile title (e.g. "F1 agenda - Baku") and avoid duplicating it as a heading when a title exists. Added setTitleLocation(me, location) and a titleHasLocation flag passed into weekendHtml so the location is only rendered once. showEmpty now clears the title. Updated docs (docs/blocks/specials/f1.rst) and implementation (js/components/f1.js). The location falls back to the heading when the tile has no title; title-only behavior requires block.title to be present. * Make f1 tile font size optional and theme-aware Allow the f1 block to inherit the theme/cluster font size by making the fontsize option optional. Set --font-device-title on the tile when a valid f1fontsize (8-60 px) is provided; empty value removes the override. Update device editor to accept empty/null, validate bounds, and stop forcing default 14. Update component docs, CSS comment, and add help strings in en_US/nl_NL. * Fix saving a second F1 widget * Add F1 widget and bump release version (#310) * Add multi-calendar support to the repeatable Calendar block (#311) The Screen Editor's Calendar quick-add popup started as a single ICS URL field only. It now has a "+ Add calendar" button that appends further rows (name/URL/color); on save, one row still writes icalurl as a plain string (unchanged), while two or more write the name -> {ics, color} object shape js/components/calendar.js already accepts for any block - the same shape the Widgets catalog's own singleton calendar widget uses. Also extends the generic Device Config popup's Calendar section with the same row builder (so re-editing a saved multi-calendar block keeps its own config icon, per AGENTS.md), and relaxes both _specialFromReference() and layouteditor.js's _resolveBlock() to recognize a repeatable calendar block whose icalurl is now an object instead of only a string. js/saveblocks.php validates the object shape the same way js/savewidgets.php already does for the singleton widget.
PreviousNext