From cd018db0d7b2102949ea629cff337d8545cb3891 Mon Sep 17 00:00:00 2001 From: kaennchenstruggle <54073894+kaennchenstruggle@users.noreply.github.com> Date: Wed, 1 Nov 2023 00:08:04 +0100 Subject: [PATCH 1/3] =?UTF-8?q?Adjusted=20calendar/titleReplace,=20customE?= =?UTF-8?q?vents=20for=20MM=C2=B2=20PR=20#3942=20(#207)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Adjusted calendar/titleReplace, customEvents for PR #3942 * Update calendar.md * adding screenshots for calendar/customEvents/transform * adjusted scrrenshots in calendar.md --- modules/calendar.md | 4 ++-- .../screenshots/customEvents_transform_after.png | Bin 0 -> 7784 bytes .../customEvents_transform_before.png | Bin 0 -> 8471 bytes 3 files changed, 2 insertions(+), 2 deletions(-) create mode 100644 modules/screenshots/customEvents_transform_after.png create mode 100644 modules/screenshots/customEvents_transform_before.png diff --git a/modules/calendar.md b/modules/calendar.md index dc444089..b9a378b3 100755 --- a/modules/calendar.md +++ b/modules/calendar.md @@ -46,7 +46,7 @@ The following properties can be configured: | `fadePoint` | Where to start fade?

**Possible values:** `0` (top of the list) - `1` (bottom of list)
**Default value:** `0.25` | | `tableClass` | Name of the classes issued from `main.css`.

**Possible values:** xsmall, small, medium, large, xlarge.
**Default value:** _small._ | | `calendars` | The list of calendars.

**Possible values:** An array, see _calendar configuration_ below.
**Default value:** _An example calendar._ | -| `titleReplace` | An object of textual replacements applied to the tile of the event. This allow to remove or replace certain words in the title.

**Example:** `{'Birthday of ' : '', 'foo':'bar'}`
**Default value:** `{ "De verjaardag van ": "", "'s birthday": "" }` | +| `titleReplace` | DEPRECATED, please consider switching to `customEvents`

An object of textual replacements applied to the tile of the event. This allow to remove or replace certain words in the title.

**Example:** `{'Birthday of ' : '', 'foo':'bar'}`
**Default value:** `{ "De verjaardag van ": "", "'s birthday": "" }` | | `displayRepeatingCountTitle` | Show count title for yearly repeating events (e.g. "X. Birthday", "X. Anniversary")

**Possible values:** `true` or `false`
**Default value:** `false` | | `dateFormat` | Format to use for the date of events when using absolute dates. (version <= 2.16.0) From version 2.16.0, this option will be used to format absolute and relative dates. (e.g. DD/MM/YY to change from the default MM/DD/YYYY)

To show the event time along with the date, use a format like `MMM Do HH:mm`. Depending on configuration, may also require the options `timeFormat:"absolute", urgency:0, getRelative:0,`

**Possible values:** See [Moment.js formats](https://momentjs.com/docs/#/parsing/string-format/)
**Default value:** `MMM Do` (e.g. Jan 18th) | | `dateEndFormat` | Format to use for the end time of events

**Possible values:** See [Moment.js formats](https://momentjs.com/docs/#/parsing/string-format/)
**Default value:** `HH:mm` (e.g. 16:30) | @@ -63,7 +63,7 @@ The following properties can be configured: | `broadcastPastEvents` | If this is set to true, events from the past `maximumNumberOfDays` will be included in event broadcasts
**Default value:** `false` | | `sliceMultiDayEvents` | If this is set to true, events exceeding at least one midnight will be sliced into separate events including a counter like (1/2). This is especially helpful in "dateheaders" mode. Events will be sliced at midnight, end time for all events but the last will be 23:59
**Default value:** `false` | | `nextDaysRelative` | If this is set to true, the appointments of today and tomorrow are displayed relatively, even if the timeformat is set to absolute.
**Default value:** `false` | -| `customEvents` | An array of `keyword`/`symbol`/`color` that will customize events based on keyword in title.

`keyword` is a case-insensitive string that if present in event title will trigger the use of custom symbol and/or color for that event, `symbol` is the Font Awesome icon to use as symbol and `color` is the CSS color to use for the event. `keyword` and at least one of `symbol` and `color`is required.

**Example:** `customEvents: [{keyword: 'Birthday', symbol: 'birthday-cake', color: 'Gold'}]` | +| `customEvents` | An array of `keyword`/`symbol`/`color`/`transform` that will customize events based on keyword in title.

`keyword` is a case-insensitive string that if present in event title will trigger the use of custom symbol and/or color for that event,
`symbol` is the Font Awesome icon to use as symbol and
`color` is the CSS color to use for the event.
`transform` is an object for regular expression text replacement of the calendar title consisting of the following elements:
- `search` regular expression to search for
- `replace` replace string, may contain group match references
- `yearmatchgroup` (optional) the regex match group of a year that you want to replace to the current age

`keyword` and at least one of `symbol`, `color`, `transform` is required.

**Examples:**
`customEvents: [{keyword: 'Birthday', symbol: 'birthday-cake', color: 'Gold'}]`

`customEvents: [{keyword: 'Geburtstag', symbol: 'birthday-cake', color: 'Gold', transform: { search: '^([^\']*) \'(\\d{4})$' , replace: '$1 ($2.)', yearmatchgroup: 2}},{keyword: 'in Hamburg', transform: { search: ' in Hamburg$' , replace: ''}} ]`
Will transform
![before](./screenshots/customEvents_transform_before.png)
to
![after](./screenshots/customEvents_transform_after.png) | | `limitDays` | If this property is set to a value greater than zero, the number of unique days displayed will be limited to `limitDays` days.

**Default value:** `0` (no limit) | | `limitDaysNeverSkip` | If this property is set to true, every event for every day will be shown regardless of if the day on has a single full day event or not.

**Default value:** `false` | | `flipDateHeaderTitle` | This property deterines if the title for the date header in the `dateheaders` time format will align to the left or right.

**Possible values:** `true` (right) or `false` (left)
**Default value:** `false` (left) | diff --git a/modules/screenshots/customEvents_transform_after.png b/modules/screenshots/customEvents_transform_after.png new file mode 100644 index 0000000000000000000000000000000000000000..cda1f292b3689403535f8cf3750e59d7636b3996 GIT binary patch literal 7784 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 Date: Thu, 14 Dec 2023 03:51:14 -0500 Subject: [PATCH 2/3] Update clock.md (#210) --- modules/clock.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/clock.md b/modules/clock.md index ade8e7e6..9cafac20 100644 --- a/modules/clock.md +++ b/modules/clock.md @@ -40,7 +40,7 @@ The following properties can be configured: | `showDate` | Turn off or on the Date section.

**Possible values:** `true` or `false`
**Default value:** `true` | | `showWeek` | Turn off or on the Week section.

**Possible values:** `true` or `false`
**Default value:** `false` | | `showSunTimes` | Turn off or on the section showing sunrise and sunset times (digital clock only).

**Possible values:** `true` or `false`
**Default value:** `false` | -| `showMoonTimes` | Turn off or on the section showing moonrise and moonset times (digital clock only).

**Possible values:** `true` or `false`
**Default value:** `false` | +| `showMoonTimes` | Turn off or on the section showing moonrise and moonset times (digital clock only). Optionally display an image of lunar phase and lit percentage of the moon

**Possible values:** `times`, `percent`, `phase`, `both` or `false` (disable)
**Default value:** `false` | | `lat` | Latitude for sun/moon calculations.

**Default value:** `47.630539` | | `lon` | Longitude for sun/moon calculations.

**Default value:** `-122.344147` | | `dateFormat` | Configure the date format as you like.

**Possible values:** [Docs](https://momentjs.com/docs/#/displaying/format/)
**Default value:** `"dddd, LL"` | From b284abf0eba528651154e92186d06fca18ea8325 Mon Sep 17 00:00:00 2001 From: Veeck Date: Thu, 14 Dec 2023 22:38:49 +0100 Subject: [PATCH 3/3] Winter cleanups (#212) * update dependencies * Prettier some files * Update module screenshots * Cleanup markdown a little --- development/core-module-file.md | 36 ++++--- development/node-helper.md | 8 +- getting-started/installation.md | 4 +- modules/animate.md | 2 + modules/calendar.md | 100 +++++++++--------- modules/clock.md | 4 +- modules/compliments.md | 5 +- modules/configuration.md | 4 +- modules/newsfeed.md | 3 +- .../{clock_screenshot.png => clock.png} | Bin ...liments_screenshot.png => compliments.png} | Bin modules/screenshots/current.png | Bin 8141 -> 0 bytes modules/screenshots/forecast.png | Bin 16385 -> 0 bytes .../{newsfeed_screenshot.png => newsfeed.png} | Bin modules/screenshots/weather_current.png | Bin 0 -> 24438 bytes modules/screenshots/weather_forecast.png | Bin 0 -> 37680 bytes modules/weather.md | 33 +++--- package-lock.json | 16 +-- package.json | 4 +- yarn.lock | 16 +-- 20 files changed, 123 insertions(+), 112 deletions(-) rename modules/screenshots/{clock_screenshot.png => clock.png} (100%) rename modules/screenshots/{compliments_screenshot.png => compliments.png} (100%) delete mode 100644 modules/screenshots/current.png delete mode 100644 modules/screenshots/forecast.png rename modules/screenshots/{newsfeed_screenshot.png => newsfeed.png} (100%) create mode 100644 modules/screenshots/weather_current.png create mode 100644 modules/screenshots/weather_forecast.png diff --git a/development/core-module-file.md b/development/core-module-file.md index 7066ac6c..5f7601a3 100644 --- a/development/core-module-file.md +++ b/development/core-module-file.md @@ -283,9 +283,10 @@ When this module is called, it has 2 arguments: - `payload` - AnyType - The payload of a notification. **Note 1:** When a node helper sends a notification, all modules of that module -type receive the same notifications.
-**Note 2:** The socket connection is -established as soon as the module sends its first message using +type receive the same notifications. + +**Note 2:** The socket connection is established as soon as the module sends its +first message using [sendSocketNotification](#this-sendsocketnotification-notification-payload). **Example:** @@ -316,8 +317,7 @@ module. ### `this.file(filename)` **_filename_ String** - The name of the file you want to create the path -for.
-**Returns String** +for.
**Returns String** If you want to create a path to a file in your module folder, use the `file()` method. It returns the path to the filename given as the attribute. Is method @@ -345,22 +345,24 @@ start: function() { ... ``` -**_options_ Object** - (_Introduced in version: 2.25.0._) Optional. Allows you to determine the animation speed and animation type options, whenever your module needs to be updated +**_options_ Object** - (_Introduced in version: 2.25.0._) Optional. Allows you +to determine the animation speed and animation type options, whenever your +module needs to be updated -| options | type | description | -| ------- | ---- | ----------- | -| speed | Number | animation speed in ms | +| options | type | description | +| ------- | ------ | ------------------------------------ | +| speed | Number | animation speed in ms | | animate | Object | animate IN and OUT rules (see below) | - **animate Object** -| animate | type | description | -| ------- | ---- | ----------- | -| in | String | Animate name when module will be shown (after dom update), it will use an `animateIn` type name (see [Animation Guide](../modules/animate#animatein)) | +| animate | type | description | +| ------- | ------ | --------------------------------------------------------------------------------------------------------------------------------------------------------- | +| in | String | Animate name when module will be shown (after dom update), it will use an `animateIn` type name (see [Animation Guide](../modules/animate#animatein)) | | out | String | Animate name when module will be hidden (before dom update), it will use an `animateOut` type name (see [Animation Guide](../modules/animate#animateout)) | As an example: + ```javascript ... this.updateDom( { @@ -377,8 +379,8 @@ As an example: ### `this.sendNotification(notification, payload)` -**_notification_ String** - The notification identifier.
-**_payload_ AnyType** - Optional. A notification payload. +- `notification` - String - The notification identifier. +- `payload` - AnyType - (Optional) A notification payload. If you want to send a notification to all other modules, use the `sendNotification(notification, payload)`. All other modules will receive the @@ -395,8 +397,8 @@ this.sendNotification("MYMODULE_READY_FOR_ACTION", { foo: bar }); ### `this.sendSocketNotification(notification, payload)` -**_notification_ String** - The notification identifier.
-**_payload_ AnyType** - Optional. A notification payload. +- `notification` - String - The notification identifier. +- `payload` - AnyType - (Optional) A notification payload. If you want to send a notification to the node_helper, use the `sendSocketNotification(notification, payload)`. Only the node_helper of this diff --git a/development/node-helper.md b/development/node-helper.md index e90d1e5c..7e7b24fe 100644 --- a/development/node-helper.md +++ b/development/node-helper.md @@ -147,12 +147,12 @@ module. ### `this.sendSocketNotification(notification, payload)` -**_notification_ String** - The notification identifier.
-**_payload_ AnyType** - Optional. A notification payload. +- `notification` - String - The notification identifier. +- `payload` - AnyType - (Optional) The payload of a notification. If you want to send a notification to your module, use the -`sendSocketNotification(notification, payload)`.
-Only the module of your module type will receive the socket notification. +`sendSocketNotification(notification, payload)`. Only the module of your module +type will receive the socket notification. **Note:** Since all instances of your module will receive the notifications, it's your task to make sure the right module responds to your messages. diff --git a/getting-started/installation.md b/getting-started/installation.md index aa42171f..3729a442 100644 --- a/getting-started/installation.md +++ b/getting-started/installation.md @@ -14,7 +14,9 @@ installers can be found under: ## Manual Installation -1. Download and install the latest _Node.js_ version, see the official documentation: +1. Download and install the latest _Node.js_ version, see the official + documentation: + - [Linux based distributions](https://github.com/nodesource/distributions) - [Others](https://nodejs.org/en/download) diff --git a/modules/animate.md b/modules/animate.md index e846db9a..a89c1d51 100644 --- a/modules/animate.md +++ b/modules/animate.md @@ -1,4 +1,5 @@ # Animation Guide + (_Introduced in version: 2.25.0_) ::: tip Preview of animation @@ -6,6 +7,7 @@ check the [animate.css](https://animate.style/) library to see a preview of the ::: ::: warning Where animation can be used? + - [global module configuration](configuration.html#animated) of a module - [this.hide()](../development/core-module-file.html#this-hide-speed-callback-options) function in core module file - [this.show()](../development/core-module-file.html#this-show-speed-callback-options) function in core module file diff --git a/modules/calendar.md b/modules/calendar.md index b9a378b3..568e231d 100755 --- a/modules/calendar.md +++ b/modules/calendar.md @@ -26,55 +26,55 @@ modules: [ The following properties can be configured: -| Option | Description | -| ------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `maximumEntries` | The maximum number of events shown. / **Possible values:** `0` - `100`
**Default value:** `10` | -| `maximumNumberOfDays` | The maximum number of days in the future.

**Default value:** `365` | -| `pastDaysCount` | The number of days of which events in the past should be displayed.

**Default value:** `0` | -| `displaySymbol` | Display a symbol in front of an entry.

**Possible values:** `true` or `false`
**Default value:** `true` | -| `defaultSymbol` | The default symbol.

**Possible values:** See [Font Awesome](https://fontawesome.com/v6/search?o=r&m=free) website.
**Default value:** `calendar` | -| `showLocation` | Whether to show event locations.

**Possible values:** `true` or `false`
**Default value:** `false` | -| `maxTitleLength` | The maximum title length.

**Possible values:** `10` - `50`
**Default value:** `25` | -| `maxLocationTitleLength` | The maximum location title length.

**Possible values:** `10` - `50`
**Default value:** `25` | -| `wrapEvents` | Wrap event titles to multiple lines. Breaks lines at the length defined by `maxTitleLength`.

**Possible values:** `true` or `false`
**Default value:** `false` | -| `wrapLocationEvents` | Wrap event location titles to multiple lines. Breaks lines at the length defined by `maxLocationTitleLength`.

**Possible values:** `true` or `false`
**Default value:** `false` | -| `maxTitleLines` | The maximum number of lines a title will wrap vertically before being cut (Only enabled if `wrapEvents` is also enabled).

**Possible values:** `0` - `10`
**Default value:** `3` | -| `maxEventTitleLines` | The maximum number of lines a location title will wrap vertically before being cut (Only enabled if `wrapLocationEvents` is also enabled).

**Possible values:** `0` - `10`
**Default value:** `3` | -| `fetchInterval` | How often does the content needs to be fetched? (Milliseconds)

**Possible values:** `1000` - `86400000`
**Default value:** `300000` (5 minutes) | -| `animationSpeed` | Speed of the update animation. (Milliseconds)

**Possible values:** `0` - `5000`
**Default value:** `2000` (2 seconds) | -| `fade` | Fade the future events to black. (Gradient)

**Possible values:** `true` or `false`
**Default value:** `true` | -| `fadePoint` | Where to start fade?

**Possible values:** `0` (top of the list) - `1` (bottom of list)
**Default value:** `0.25` | -| `tableClass` | Name of the classes issued from `main.css`.

**Possible values:** xsmall, small, medium, large, xlarge.
**Default value:** _small._ | -| `calendars` | The list of calendars.

**Possible values:** An array, see _calendar configuration_ below.
**Default value:** _An example calendar._ | -| `titleReplace` | DEPRECATED, please consider switching to `customEvents`

An object of textual replacements applied to the tile of the event. This allow to remove or replace certain words in the title.

**Example:** `{'Birthday of ' : '', 'foo':'bar'}`
**Default value:** `{ "De verjaardag van ": "", "'s birthday": "" }` | -| `displayRepeatingCountTitle` | Show count title for yearly repeating events (e.g. "X. Birthday", "X. Anniversary")

**Possible values:** `true` or `false`
**Default value:** `false` | -| `dateFormat` | Format to use for the date of events when using absolute dates. (version <= 2.16.0) From version 2.16.0, this option will be used to format absolute and relative dates. (e.g. DD/MM/YY to change from the default MM/DD/YYYY)

To show the event time along with the date, use a format like `MMM Do HH:mm`. Depending on configuration, may also require the options `timeFormat:"absolute", urgency:0, getRelative:0,`

**Possible values:** See [Moment.js formats](https://momentjs.com/docs/#/parsing/string-format/)
**Default value:** `MMM Do` (e.g. Jan 18th) | -| `dateEndFormat` | Format to use for the end time of events

**Possible values:** See [Moment.js formats](https://momentjs.com/docs/#/parsing/string-format/)
**Default value:** `HH:mm` (e.g. 16:30) | -| `showEnd` | Show end time of events

**Possible values:** `true` or `false`
**Default value:** `true` | -| `fullDayEventDateFormat` | Format to use for the date of full day events (when using absolute dates)

**Possible values:** See [Moment.js formats](https://momentjs.com/docs/#/parsing/string-format/)
**Default value:** `MMM Do` (e.g. Jan 18th) | -| `timeFormat` | Display event times as absolute dates, or relative time, or using absolute date headers with times for each event next to it

**Possible values:** `absolute` or `relative` or `dateheaders`
**Default value:** `relative` | -| `showEnd` | Display the end of a date as well

**Possible values:** `true` or `false`
**Default value:** `true` | -| `getRelative` | How much time (in hours) should be left until calendar events start getting relative?

**Possible values:** `0` (events stay absolute) - `48` (48 hours before the event starts)
**Default value:** `6` | -| `urgency` | When using a timeFormat of `absolute`, the `urgency` setting allows you to display events within a specific time frame as `relative`. This allows events within a certain time frame to be displayed as relative (in xx days) while others are displayed as absolute dates

**Possible values:** a positive integer representing the number of days for which you want a relative date, for example `7` (for 7 days)

**Default value:** `7` | -| `broadcastEvents` | If this property is set to true, the calendar will broadcast all the events to all other modules with the notification message: `CALENDAR_EVENTS`. The event objects are stored in an array and contain the following fields: `title`, `startDate`, `endDate`, `fullDayEvent`, `location` and `geo`.

**Possible values:** `true`, `false`

**Default value:** `true` | -| `hidePrivate` | Hides private calendar events.

**Possible values:** `true` or `false`
**Default value:** `false` | -| `hideOngoing` | Hides calendar events that have already started.

**Possible values:** `true` or `false`
**Default value:** `false` | -| `excludedEvents` | An array of words / phrases from event titles that will be excluded from being shown.

Additionally advanced filter objects can be passed in. Below is the configuration for the advance filtering object.
**Required**
`filterBy` - string used to determine if filter is applied.
**Optional**
`until` - Time before an event to display it Ex: [`'3 days'`, `'2 months'`, `'1 week'`]
`caseSensitive` - By default, excludedEvents are case insensitive, set this to true to enforce case sensitivity
`regex` - set to `true` if filterBy is a regex. For those not familiar with regex it is used for pattern matching, please see [here](https://regexr.com/) for more info.

**Example:** `['Birthday', 'Hide This Event', {filterBy: 'Payment', until: '6 days', caseSensitive: true}, {filterBy: '^[0-9]{1,}.*', regex: true}]`
**Default value:** `[]` | -| `broadcastPastEvents` | If this is set to true, events from the past `maximumNumberOfDays` will be included in event broadcasts
**Default value:** `false` | -| `sliceMultiDayEvents` | If this is set to true, events exceeding at least one midnight will be sliced into separate events including a counter like (1/2). This is especially helpful in "dateheaders" mode. Events will be sliced at midnight, end time for all events but the last will be 23:59
**Default value:** `false` | -| `nextDaysRelative` | If this is set to true, the appointments of today and tomorrow are displayed relatively, even if the timeformat is set to absolute.
**Default value:** `false` | -| `customEvents` | An array of `keyword`/`symbol`/`color`/`transform` that will customize events based on keyword in title.

`keyword` is a case-insensitive string that if present in event title will trigger the use of custom symbol and/or color for that event,
`symbol` is the Font Awesome icon to use as symbol and
`color` is the CSS color to use for the event.
`transform` is an object for regular expression text replacement of the calendar title consisting of the following elements:
- `search` regular expression to search for
- `replace` replace string, may contain group match references
- `yearmatchgroup` (optional) the regex match group of a year that you want to replace to the current age

`keyword` and at least one of `symbol`, `color`, `transform` is required.

**Examples:**
`customEvents: [{keyword: 'Birthday', symbol: 'birthday-cake', color: 'Gold'}]`

`customEvents: [{keyword: 'Geburtstag', symbol: 'birthday-cake', color: 'Gold', transform: { search: '^([^\']*) \'(\\d{4})$' , replace: '$1 ($2.)', yearmatchgroup: 2}},{keyword: 'in Hamburg', transform: { search: ' in Hamburg$' , replace: ''}} ]`
Will transform
![before](./screenshots/customEvents_transform_before.png)
to
![after](./screenshots/customEvents_transform_after.png) | -| `limitDays` | If this property is set to a value greater than zero, the number of unique days displayed will be limited to `limitDays` days.

**Default value:** `0` (no limit) | -| `limitDaysNeverSkip` | If this property is set to true, every event for every day will be shown regardless of if the day on has a single full day event or not.

**Default value:** `false` | -| `flipDateHeaderTitle` | This property deterines if the title for the date header in the `dateheaders` time format will align to the left or right.

**Possible values:** `true` (right) or `false` (left)
**Default value:** `false` (left) | -| `hideTime` | If this property is set to true the time portion on relative times will be hidden.

**Default value:** `false` | -| `showTimeToday` | If this property is set to true, the event time will be displayed for same-day events even when relative display is being used.

**Default value:** `false` | -| `colored`
_(deprecated)_ | If this property is set to true, an individual color can be set for each calendar.

**Default value:** `false` | -| `coloredSymbolOnly`
_(deprecated)_ | If this property is set to true, an individual symbol color can be set for each calendar, not the whole line. This is only applicable when `colored` is also enabled.

**Default value:** `false` | -| `coloredText` | If this property is set to true, an individual text color can be set for each calendar.

**Default value:** `false` | -| `coloredBorder` | If this property is set to true, an individual border color can be set for each calendar.

**Default value:** `false` | -| `coloredSymbol` | If this property is set to true, an individual symbol color can be set for each calendar.

**Default value:** `false` | -| `coloredBackground` | If this property is set to true, an individual background color can be set for each calendar.

**Default value:** `false` | +| Option | Description | +| ------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `maximumEntries` | The maximum number of events shown. / **Possible values:** `0` - `100`
**Default value:** `10` | +| `maximumNumberOfDays` | The maximum number of days in the future.

**Default value:** `365` | +| `pastDaysCount` | The number of days of which events in the past should be displayed.

**Default value:** `0` | +| `displaySymbol` | Display a symbol in front of an entry.

**Possible values:** `true` or `false`
**Default value:** `true` | +| `defaultSymbol` | The default symbol.

**Possible values:** See [Font Awesome](https://fontawesome.com/v6/search?o=r&m=free) website.
**Default value:** `calendar` | +| `showLocation` | Whether to show event locations.

**Possible values:** `true` or `false`
**Default value:** `false` | +| `maxTitleLength` | The maximum title length.

**Possible values:** `10` - `50`
**Default value:** `25` | +| `maxLocationTitleLength` | The maximum location title length.

**Possible values:** `10` - `50`
**Default value:** `25` | +| `wrapEvents` | Wrap event titles to multiple lines. Breaks lines at the length defined by `maxTitleLength`.

**Possible values:** `true` or `false`
**Default value:** `false` | +| `wrapLocationEvents` | Wrap event location titles to multiple lines. Breaks lines at the length defined by `maxLocationTitleLength`.

**Possible values:** `true` or `false`
**Default value:** `false` | +| `maxTitleLines` | The maximum number of lines a title will wrap vertically before being cut (Only enabled if `wrapEvents` is also enabled).

**Possible values:** `0` - `10`
**Default value:** `3` | +| `maxEventTitleLines` | The maximum number of lines a location title will wrap vertically before being cut (Only enabled if `wrapLocationEvents` is also enabled).

**Possible values:** `0` - `10`
**Default value:** `3` | +| `fetchInterval` | How often does the content needs to be fetched? (Milliseconds)

**Possible values:** `1000` - `86400000`
**Default value:** `300000` (5 minutes) | +| `animationSpeed` | Speed of the update animation. (Milliseconds)

**Possible values:** `0` - `5000`
**Default value:** `2000` (2 seconds) | +| `fade` | Fade the future events to black. (Gradient)

**Possible values:** `true` or `false`
**Default value:** `true` | +| `fadePoint` | Where to start fade?

**Possible values:** `0` (top of the list) - `1` (bottom of list)
**Default value:** `0.25` | +| `tableClass` | Name of the classes issued from `main.css`.

**Possible values:** xsmall, small, medium, large, xlarge.
**Default value:** _small._ | +| `calendars` | The list of calendars.

**Possible values:** An array, see _calendar configuration_ below.
**Default value:** _An example calendar._ | +| `titleReplace` | DEPRECATED, please consider switching to `customEvents`

An object of textual replacements applied to the tile of the event. This allow to remove or replace certain words in the title.

**Example:** `{'Birthday of ' : '', 'foo':'bar'}`
**Default value:** `{ "De verjaardag van ": "", "'s birthday": "" }` | +| `displayRepeatingCountTitle` | Show count title for yearly repeating events (e.g. "X. Birthday", "X. Anniversary")

**Possible values:** `true` or `false`
**Default value:** `false` | +| `dateFormat` | Format to use for the date of events when using absolute dates. (version <= 2.16.0) From version 2.16.0, this option will be used to format absolute and relative dates. (e.g. DD/MM/YY to change from the default MM/DD/YYYY)

To show the event time along with the date, use a format like `MMM Do HH:mm`. Depending on configuration, may also require the options `timeFormat:"absolute", urgency:0, getRelative:0,`

**Possible values:** See [Moment.js formats](https://momentjs.com/docs/#/parsing/string-format/)
**Default value:** `MMM Do` (e.g. Jan 18th) | +| `dateEndFormat` | Format to use for the end time of events

**Possible values:** See [Moment.js formats](https://momentjs.com/docs/#/parsing/string-format/)
**Default value:** `HH:mm` (e.g. 16:30) | +| `showEnd` | Show end time of events

**Possible values:** `true` or `false`
**Default value:** `true` | +| `fullDayEventDateFormat` | Format to use for the date of full day events (when using absolute dates)

**Possible values:** See [Moment.js formats](https://momentjs.com/docs/#/parsing/string-format/)
**Default value:** `MMM Do` (e.g. Jan 18th) | +| `timeFormat` | Display event times as absolute dates, or relative time, or using absolute date headers with times for each event next to it

**Possible values:** `absolute` or `relative` or `dateheaders`
**Default value:** `relative` | +| `showEnd` | Display the end of a date as well

**Possible values:** `true` or `false`
**Default value:** `true` | +| `getRelative` | How much time (in hours) should be left until calendar events start getting relative?

**Possible values:** `0` (events stay absolute) - `48` (48 hours before the event starts)
**Default value:** `6` | +| `urgency` | When using a timeFormat of `absolute`, the `urgency` setting allows you to display events within a specific time frame as `relative`. This allows events within a certain time frame to be displayed as relative (in xx days) while others are displayed as absolute dates

**Possible values:** a positive integer representing the number of days for which you want a relative date, for example `7` (for 7 days)

**Default value:** `7` | +| `broadcastEvents` | If this property is set to true, the calendar will broadcast all the events to all other modules with the notification message: `CALENDAR_EVENTS`. The event objects are stored in an array and contain the following fields: `title`, `startDate`, `endDate`, `fullDayEvent`, `location` and `geo`.

**Possible values:** `true`, `false`

**Default value:** `true` | +| `hidePrivate` | Hides private calendar events.

**Possible values:** `true` or `false`
**Default value:** `false` | +| `hideOngoing` | Hides calendar events that have already started.

**Possible values:** `true` or `false`
**Default value:** `false` | +| `excludedEvents` | An array of words / phrases from event titles that will be excluded from being shown.

Additionally advanced filter objects can be passed in. Below is the configuration for the advance filtering object.
**Required**
`filterBy` - string used to determine if filter is applied.
**Optional**
`until` - Time before an event to display it Ex: [`'3 days'`, `'2 months'`, `'1 week'`]
`caseSensitive` - By default, excludedEvents are case insensitive, set this to true to enforce case sensitivity
`regex` - set to `true` if filterBy is a regex. For those not familiar with regex it is used for pattern matching, please see [here](https://regexr.com/) for more info.

**Example:** `['Birthday', 'Hide This Event', {filterBy: 'Payment', until: '6 days', caseSensitive: true}, {filterBy: '^[0-9]{1,}.*', regex: true}]`
**Default value:** `[]` | +| `broadcastPastEvents` | If this is set to true, events from the past `maximumNumberOfDays` will be included in event broadcasts
**Default value:** `false` | +| `sliceMultiDayEvents` | If this is set to true, events exceeding at least one midnight will be sliced into separate events including a counter like (1/2). This is especially helpful in "dateheaders" mode. Events will be sliced at midnight, end time for all events but the last will be 23:59
**Default value:** `false` | +| `nextDaysRelative` | If this is set to true, the appointments of today and tomorrow are displayed relatively, even if the timeformat is set to absolute.
**Default value:** `false` | +| `customEvents` | An array of `keyword`/`symbol`/`color`/`transform` that will customize events based on keyword in title.

`keyword` is a case-insensitive string that if present in event title will trigger the use of custom symbol and/or color for that event,
`symbol` is the Font Awesome icon to use as symbol and
`color` is the CSS color to use for the event.
`transform` is an object for regular expression text replacement of the calendar title consisting of the following elements:
- `search` regular expression to search for
- `replace` replace string, may contain group match references
- `yearmatchgroup` (optional) the regex match group of a year that you want to replace to the current age

`keyword` and at least one of `symbol`, `color`, `transform` is required.

**Examples:**
`customEvents: [{keyword: 'Birthday', symbol: 'birthday-cake', color: 'Gold'}]`

`customEvents: [{keyword: 'Geburtstag', symbol: 'birthday-cake', color: 'Gold', transform: { search: '^([^\']*) \'(\\d{4})$' , replace: '$1 ($2.)', yearmatchgroup: 2}},{keyword: 'in Hamburg', transform: { search: ' in Hamburg$' , replace: ''}} ]`
Will transform
![before](./screenshots/customEvents_transform_before.png)
to
![after](./screenshots/customEvents_transform_after.png) | +| `limitDays` | If this property is set to a value greater than zero, the number of unique days displayed will be limited to `limitDays` days.

**Default value:** `0` (no limit) | +| `limitDaysNeverSkip` | If this property is set to true, every event for every day will be shown regardless of if the day on has a single full day event or not.

**Default value:** `false` | +| `flipDateHeaderTitle` | This property deterines if the title for the date header in the `dateheaders` time format will align to the left or right.

**Possible values:** `true` (right) or `false` (left)
**Default value:** `false` (left) | +| `hideTime` | If this property is set to true the time portion on relative times will be hidden.

**Default value:** `false` | +| `showTimeToday` | If this property is set to true, the event time will be displayed for same-day events even when relative display is being used.

**Default value:** `false` | +| `colored`
_(deprecated)_ | If this property is set to true, an individual color can be set for each calendar.

**Default value:** `false` | +| `coloredSymbolOnly`
_(deprecated)_ | If this property is set to true, an individual symbol color can be set for each calendar, not the whole line. This is only applicable when `colored` is also enabled.

**Default value:** `false` | +| `coloredText` | If this property is set to true, an individual text color can be set for each calendar.

**Default value:** `false` | +| `coloredBorder` | If this property is set to true, an individual border color can be set for each calendar.

**Default value:** `false` | +| `coloredSymbol` | If this property is set to true, an individual symbol color can be set for each calendar.

**Default value:** `false` | +| `coloredBackground` | If this property is set to true, an individual background color can be set for each calendar.

**Default value:** `false` | #### Default value: @@ -121,7 +121,7 @@ config: { #### Calendar authentication options: | Option | Description | -| -------- |--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | `user` | The username for HTTP authentication. | | `pass` | The password for HTTP authentication. (If you use Bearer authentication, this should be your BearerToken.) | | `method` | Which authentication method should be used. HTTP Basic and Bearer authentication methods are supported. Basic authentication is used by default if this option is omitted.
**Possible values:** `basic`, `bearer` **Default value:** `basic` | diff --git a/modules/clock.md b/modules/clock.md index 9cafac20..0c6d6b36 100644 --- a/modules/clock.md +++ b/modules/clock.md @@ -5,7 +5,7 @@ displays the current date and time. The information will be updated realtime. ## Screenshot -- Current time ![Current time](./screenshots/clock_screenshot.png) +![Clock screenshot](./screenshots/clock.png) ## Using the module @@ -40,7 +40,7 @@ The following properties can be configured: | `showDate` | Turn off or on the Date section.

**Possible values:** `true` or `false`
**Default value:** `true` | | `showWeek` | Turn off or on the Week section.

**Possible values:** `true` or `false`
**Default value:** `false` | | `showSunTimes` | Turn off or on the section showing sunrise and sunset times (digital clock only).

**Possible values:** `true` or `false`
**Default value:** `false` | -| `showMoonTimes` | Turn off or on the section showing moonrise and moonset times (digital clock only). Optionally display an image of lunar phase and lit percentage of the moon

**Possible values:** `times`, `percent`, `phase`, `both` or `false` (disable)
**Default value:** `false` | +| `showMoonTimes` | Turn off or on the section showing moonrise and moonset times (digital clock only). Optionally display an image of lunar phase and lit percentage of the moon

**Possible values:** `times`, `percent`, `phase`, `both` or `false` (disable)
**Default value:** `false` | | `lat` | Latitude for sun/moon calculations.

**Default value:** `47.630539` | | `lon` | Longitude for sun/moon calculations.

**Default value:** `-122.344147` | | `dateFormat` | Configure the date format as you like.

**Possible values:** [Docs](https://momentjs.com/docs/#/displaying/format/)
**Default value:** `"dddd, LL"` | diff --git a/modules/compliments.md b/modules/compliments.md index e12373a2..49589de4 100644 --- a/modules/compliments.md +++ b/modules/compliments.md @@ -3,10 +3,9 @@ The `compliments` module is one of the default modules of the MagicMirror. This module displays a random compliment. -## Screenshots +## Screenshot -- Compliments Screenshot - ![Compliments Screenshot](./screenshots/compliments_screenshot.png) +![Compliments Screenshot](./screenshots/compliments.png) ## Using the module diff --git a/modules/configuration.md b/modules/configuration.md index e1dbbc3f..c6ae3b9d 100644 --- a/modules/configuration.md +++ b/modules/configuration.md @@ -64,6 +64,7 @@ screen, one under everything else and the other above. All these regions will resize as needed. ## Animated + (_Introduced in version: 2.25.0_) Animated feature allows to define an animation to a module @@ -79,7 +80,8 @@ The whole of animation names are available [there](./animate.html). ### Example with `newsfeed` module -For this example, news will come from the left (`slideInLeft` animation), wait in the middle, and exit from the right (`slideOutRight` animation) +For this example, news will come from the left (`slideInLeft` animation), wait +in the middle, and exit from the right (`slideOutRight` animation) ![animateCSS](./screenshots/animate.gif) diff --git a/modules/newsfeed.md b/modules/newsfeed.md index 922b8f4c..9ad069b6 100644 --- a/modules/newsfeed.md +++ b/modules/newsfeed.md @@ -7,8 +7,7 @@ sending news feed specific notifications to the module. ## Screenshot -- News Feed Screenshot using the NYT - ![NYT News Feed Screenshot](./screenshots/newsfeed_screenshot.png) +![NYT News Feed Screenshot](./screenshots/newsfeed.png) ## Using the module diff --git a/modules/screenshots/clock_screenshot.png b/modules/screenshots/clock.png similarity index 100% rename from modules/screenshots/clock_screenshot.png rename to modules/screenshots/clock.png diff --git a/modules/screenshots/compliments_screenshot.png b/modules/screenshots/compliments.png similarity index 100% rename from modules/screenshots/compliments_screenshot.png rename to modules/screenshots/compliments.png diff --git a/modules/screenshots/current.png b/modules/screenshots/current.png deleted file mode 100644 index de6c5a39ea341592fcd25d19d6a382457bad9e35..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8141 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 BxD@~Z diff --git a/modules/screenshots/forecast.png b/modules/screenshots/forecast.png deleted file mode 100644 index 1afd31913ffba849a334aeedb0aad2c799a3de20..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16385 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 ZC??9%ZOK#@g4?!_rz8gk6}~VF_+LS8+!_D? diff --git a/modules/screenshots/newsfeed_screenshot.png b/modules/screenshots/newsfeed.png similarity index 100% rename from modules/screenshots/newsfeed_screenshot.png rename to modules/screenshots/newsfeed.png diff --git a/modules/screenshots/weather_current.png b/modules/screenshots/weather_current.png new file mode 100644 index 0000000000000000000000000000000000000000..4335c63990a0a3fa89537826461ba58d79711383 GIT binary patch literal 24438 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
**Possible values:** `true` or `false`
**Default value:** `false` | -| `showWindDirection` | Show the wind direction next to the wind speed.

**Possible values:** `true` or `false`
**Default value:** `true` | -| `showWindDirectionAsArrow` | Show the wind direction as an arrow instead of abbreviation

**Possible values:** `true` or `false`
**Default value:** `false` | -| `showHumidity` | Show the current humidity

**Possible values:** `true` or `false`
**Default value:** `false` | -| `showIndoorTemperature` | If you have another module that emits the `INDOOR_TEMPERATURE` notification, the indoor temperature will be displayed
**Default value:** `false` | -| `showIndoorHumidity` | If you have another module that emits the `INDOOR_HUMIDITY` notification, the indoor humidity will be displayed
**Default value:** `false` | -| `showFeelsLike` | Shows the Feels like temperature weather.

**Possible values:** `true` or `false`
**Default value:** `true` | -| `showSun` | Shows Sunrise and Sunset time.

**Possible values:** `true` or `false`
**Default value:** `true` | -| `allowOverrideNotification` | Enables the ability to provide a `CURRENT_WEATHER_OVERRIDE` notification containing a `WeatherObject` payload that will be combined with the existing current weather
**Default value:** `false` | +| Option | Description | +| --------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `onlyTemp` | Show only current Temperature and weather icon without windspeed, sunset, sunrise time and feels like.

**Possible values:** `true` or `false`
**Default value:** `false` | +| `showWindDirection` | Show the wind direction next to the wind speed.

**Possible values:** `true` or `false`
**Default value:** `true` | +| `showWindDirectionAsArrow` | Show the wind direction as an arrow instead of abbreviation

**Possible values:** `true` or `false`
**Default value:** `false` | +| `showHumidity` | Show the current humidity

**Possible values:** `true` or `false`
**Default value:** `false` | +| `showIndoorTemperature` | If you have another module that emits the `INDOOR_TEMPERATURE` notification, the indoor temperature will be displayed
**Default value:** `false` | +| `showIndoorHumidity` | If you have another module that emits the `INDOOR_HUMIDITY` notification, the indoor humidity will be displayed
**Default value:** `false` | +| `showFeelsLike` | Shows the Feels like temperature weather.

**Possible values:** `true` or `false`
**Default value:** `true` | +| `showSun` | Shows Sunrise and Sunset time.

**Possible values:** `true` or `false`
**Default value:** `true` | +| `allowOverrideNotification` | Enables the ability to provide a `CURRENT_WEATHER_OVERRIDE` notification containing a `WeatherObject` payload that will be combined with the existing current weather
**Default value:** `false` | #### Weather forecast options diff --git a/package-lock.json b/package-lock.json index 14f207c7..7dd63189 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7,9 +7,9 @@ "devDependencies": { "@vuepress/plugin-back-to-top": "^1.9.10", "@vuepress/plugin-google-analytics": "^1.9.10", - "prettier": "^3.0.3", + "prettier": "^3.1.1", "prettier-config-vuepress": "^4.4.0", - "vue-template-compiler": "^2.7.14", + "vue-template-compiler": "^2.7.15", "vuepress": "^1.9.10", "vuepress-plugin-check-md": "^0.0.3" } @@ -11441,9 +11441,9 @@ } }, "node_modules/prettier": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.0.3.tgz", - "integrity": "sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.1.1.tgz", + "integrity": "sha512-22UbSzg8luF4UuZtzgiUOfcGM8s4tjBv6dJRT7j275NXsy2jb4aJa4NNveul5x4eqlF1wuhuR2RElK71RvmVaw==", "dev": true, "bin": { "prettier": "bin/prettier.cjs" @@ -14886,9 +14886,9 @@ } }, "node_modules/vue-template-compiler": { - "version": "2.7.14", - "resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.7.14.tgz", - "integrity": "sha512-zyA5Y3ArvVG0NacJDkkzJuPQDF8RFeRlzV2vLeSnhSpieO6LK2OVbdLPi5MPPs09Ii+gMO8nY4S3iKQxBxDmWQ==", + "version": "2.7.15", + "resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.7.15.tgz", + "integrity": "sha512-yQxjxMptBL7UAog00O8sANud99C6wJF+7kgbcwqkvA38vCGF7HWE66w0ZFnS/kX5gSoJr/PQ4/oS3Ne2pW37Og==", "dev": true, "dependencies": { "de-indent": "^1.0.2", diff --git a/package.json b/package.json index 822d7d93..3557d957 100644 --- a/package.json +++ b/package.json @@ -2,9 +2,9 @@ "devDependencies": { "@vuepress/plugin-back-to-top": "^1.9.10", "@vuepress/plugin-google-analytics": "^1.9.10", - "prettier": "^3.0.3", + "prettier": "^3.1.1", "prettier-config-vuepress": "^4.4.0", - "vue-template-compiler": "^2.7.14", + "vue-template-compiler": "^2.7.15", "vuepress": "^1.9.10", "vuepress-plugin-check-md": "^0.0.3" }, diff --git a/yarn.lock b/yarn.lock index 9041b615..0ac3a15b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6755,10 +6755,10 @@ prettier-config-vuepress@^4.4.0: resolved "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz" integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== -prettier@^3.0.3: - version "3.0.3" - resolved "https://registry.npmjs.org/prettier/-/prettier-3.0.3.tgz" - integrity sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg== +prettier@^3.1.1: + version "3.1.1" + resolved "https://registry.npmjs.org/prettier/-/prettier-3.1.1.tgz" + integrity sha512-22UbSzg8luF4UuZtzgiUOfcGM8s4tjBv6dJRT7j275NXsy2jb4aJa4NNveul5x4eqlF1wuhuR2RElK71RvmVaw== pretty-error@^2.0.2: version "2.1.2" @@ -8471,10 +8471,10 @@ vue-style-loader@^4.1.0: hash-sum "^1.0.2" loader-utils "^1.0.2" -vue-template-compiler@^2.6.10, vue-template-compiler@^2.7.14: - version "2.7.14" - resolved "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.7.14.tgz" - integrity sha512-zyA5Y3ArvVG0NacJDkkzJuPQDF8RFeRlzV2vLeSnhSpieO6LK2OVbdLPi5MPPs09Ii+gMO8nY4S3iKQxBxDmWQ== +vue-template-compiler@^2.6.10, vue-template-compiler@^2.7.15: + version "2.7.15" + resolved "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.7.15.tgz" + integrity sha512-yQxjxMptBL7UAog00O8sANud99C6wJF+7kgbcwqkvA38vCGF7HWE66w0ZFnS/kX5gSoJr/PQ4/oS3Ne2pW37Og== dependencies: de-indent "^1.0.2" he "^1.2.0"