mirror of
https://github.com/edward-shen/MMM-pages.git
synced 2025-03-31 10:08:19 -07:00
feat: Add individual rotation time for each page (#88)
This commit is contained in:
parent
20204de36c
commit
2ccd56ef36
2 changed files with 41 additions and 24 deletions
18
MMM-pages.js
18
MMM-pages.js
|
@ -12,6 +12,7 @@ Module.register('MMM-pages', {
|
||||||
hiddenPages: {},
|
hiddenPages: {},
|
||||||
animationTime: 1000,
|
animationTime: 1000,
|
||||||
rotationTime: 0,
|
rotationTime: 0,
|
||||||
|
timings: { default: 0 },
|
||||||
rotationFirstPage: 0, // Keep for compatibility
|
rotationFirstPage: 0, // Keep for compatibility
|
||||||
rotationHomePage: 0,
|
rotationHomePage: 0,
|
||||||
rotationDelay: 10000,
|
rotationDelay: 10000,
|
||||||
|
@ -48,12 +49,17 @@ Module.register('MMM-pages', {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.config.rotationFirstPage) {
|
if (this.config.rotationFirstPage) {
|
||||||
Log.warn('[MMM-pages] The config option "rotationFirstPage" is deprecated. Please used "rotationHomePage" instead.');
|
Log.warn('[MMM-pages] The config option "rotationFirstPage" is deprecated. Please use "rotationHomePage" instead.');
|
||||||
this.config.rotationHomePage = this.config.rotationFirstPage;
|
this.config.rotationHomePage = this.config.rotationFirstPage;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (this.config.rotationTime) {
|
||||||
|
Log.warn('[MMM-pages] The config option "rotationTime" is deprecated. Please use "timings" instead.');
|
||||||
|
this.config.timings.default = this.config.rotationTime;
|
||||||
|
}
|
||||||
|
|
||||||
// Disable rotation if an invalid input is given
|
// Disable rotation if an invalid input is given
|
||||||
this.config.rotationTime = Math.max(this.config.rotationTime, 0);
|
this.config.timings.default = Math.max(this.config.timings.default, 0);
|
||||||
this.config.rotationDelay = Math.max(this.config.rotationDelay, 0);
|
this.config.rotationDelay = Math.max(this.config.rotationDelay, 0);
|
||||||
this.config.rotationHomePage = Math.max(this.config.rotationHomePage, 0);
|
this.config.rotationHomePage = Math.max(this.config.rotationHomePage, 0);
|
||||||
|
|
||||||
|
@ -221,11 +227,15 @@ Module.register('MMM-pages', {
|
||||||
* @param {number} delay the delay, in milliseconds.
|
* @param {number} delay the delay, in milliseconds.
|
||||||
*/
|
*/
|
||||||
resetTimerWithDelay(delay) {
|
resetTimerWithDelay(delay) {
|
||||||
if (this.config.rotationTime > 0) {
|
if (this.config.timings.default > 0 || Object.keys(this.config.timings).length > 1) {
|
||||||
// This timer is the auto rotate function.
|
// This timer is the auto rotate function.
|
||||||
clearInterval(this.timer);
|
clearInterval(this.timer);
|
||||||
// This is delay timer after manually updating.
|
// This is delay timer after manually updating.
|
||||||
clearInterval(this.delayTimer);
|
clearInterval(this.delayTimer);
|
||||||
|
let currentRotationTime = this.config.timings.default;
|
||||||
|
if (this.config.timings[this.curPage]) {
|
||||||
|
currentRotationTime = this.config.timings[this.curPage];
|
||||||
|
}
|
||||||
const self = this;
|
const self = this;
|
||||||
|
|
||||||
this.delayTimer = setTimeout(() => {
|
this.delayTimer = setTimeout(() => {
|
||||||
|
@ -235,7 +245,7 @@ Module.register('MMM-pages', {
|
||||||
// message, so we need to trigger it for ourselves.
|
// message, so we need to trigger it for ourselves.
|
||||||
self.sendNotification('PAGE_INCREMENT');
|
self.sendNotification('PAGE_INCREMENT');
|
||||||
self.notificationReceived('PAGE_INCREMENT');
|
self.notificationReceived('PAGE_INCREMENT');
|
||||||
}, self.config.rotationTime);
|
}, currentRotationTime);
|
||||||
}, delay);
|
}, delay);
|
||||||
} else if (this.config.rotationHomePage > 0) {
|
} else if (this.config.rotationHomePage > 0) {
|
||||||
// This timer is the auto rotate function.
|
// This timer is the auto rotate function.
|
||||||
|
|
47
README.md
47
README.md
|
@ -71,10 +71,13 @@ The first element of the array is the first page, the second element is the seco
|
||||||
{
|
{
|
||||||
module: "MMM-pages",
|
module: "MMM-pages",
|
||||||
config: {
|
config: {
|
||||||
rotationTime: 1000 * 20, // rotate every 20 seconds
|
timings: {
|
||||||
|
default: 5000, // rotate every 5 seconds
|
||||||
|
0: 20000 // page 0 rotates every 20 seconds
|
||||||
|
},
|
||||||
modules: [
|
modules: [
|
||||||
["newsfeed"], // page 1
|
["newsfeed"], // page 0
|
||||||
["calendar", "compliments"], // page 2
|
["calendar", "compliments"], // page 1
|
||||||
],
|
],
|
||||||
fixed: [ // modules that are always shown
|
fixed: [ // modules that are always shown
|
||||||
"clock",
|
"clock",
|
||||||
|
@ -103,11 +106,14 @@ Instead of using the module name, you can also use a class name for each page. T
|
||||||
{
|
{
|
||||||
module: "MMM-pages",
|
module: "MMM-pages",
|
||||||
config: {
|
config: {
|
||||||
rotationTime: 1000 * 20, // rotate every 20 seconds
|
timings: {
|
||||||
|
default: 20000, // rotate every 20 seconds
|
||||||
|
2: 30000 // page 2 rotates every 30 seconds
|
||||||
|
},
|
||||||
modules: [
|
modules: [
|
||||||
|
["page0"], // class name for page 0
|
||||||
["page1"], // class name for page 1
|
["page1"], // class name for page 1
|
||||||
["page2"], // class name for page 2
|
["page2"], // class name for page 2
|
||||||
["page3"], // class name for page 3
|
|
||||||
],
|
],
|
||||||
fixed: ["fixed_page"],
|
fixed: ["fixed_page"],
|
||||||
hiddenPages: {
|
hiddenPages: {
|
||||||
|
@ -121,15 +127,23 @@ Instead of using the module name, you can also use a class name for each page. T
|
||||||
You have to add the class name to the config of the module you want to show on a specific page. You can even add more than one class name to show a module instance on multiple pages.
|
You have to add the class name to the config of the module you want to show on a specific page. You can even add more than one class name to show a module instance on multiple pages.
|
||||||
|
|
||||||
```js
|
```js
|
||||||
{ // newsfeed on page 1
|
{ // newsfeed on page 0
|
||||||
module: "newsfeed",
|
module: "newsfeed",
|
||||||
|
classes: "page0",
|
||||||
|
position: "...",
|
||||||
|
config: {
|
||||||
|
...
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{ // first calendar instance on page 1
|
||||||
|
module: "calendar",
|
||||||
classes: "page1",
|
classes: "page1",
|
||||||
position: "...",
|
position: "...",
|
||||||
config: {
|
config: {
|
||||||
...
|
...
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{ // first calendar instance on page 2
|
{ // second calendar instance on page 2
|
||||||
module: "calendar",
|
module: "calendar",
|
||||||
classes: "page2",
|
classes: "page2",
|
||||||
position: "...",
|
position: "...",
|
||||||
|
@ -137,17 +151,9 @@ You have to add the class name to the config of the module you want to show on a
|
||||||
...
|
...
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{ // second calendar instance on page 3
|
{ // this compliments instance appears on page 0 and 2
|
||||||
module: "calendar",
|
|
||||||
classes: "page3",
|
|
||||||
position: "...",
|
|
||||||
config: {
|
|
||||||
...
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{ // this compliments instance appears on page 1 and 3
|
|
||||||
module: "compliments",
|
module: "compliments",
|
||||||
classes: "page1 page3",
|
classes: "page0 page2",
|
||||||
position: "...",
|
position: "...",
|
||||||
config: {
|
config: {
|
||||||
...
|
...
|
||||||
|
@ -158,14 +164,15 @@ You have to add the class name to the config of the module you want to show on a
|
||||||
|
|
||||||
### Configuration options
|
### Configuration options
|
||||||
|
|
||||||
| Option | Type | Default Value | Description |
|
| Option | Type | Default Value | Description |
|
||||||
| --- | --- | --- | --- |
|
| ------------------- | -------------------------- | ------------------------ | ----------- |
|
||||||
| `modules` | `[[String...]...]` | `[]` | A 2D String array of what each module should be on which page. Note that all entries must take their class name (e.g. this module's class name is `MMM-pages`, while the default modules may just have `newsfeed`, without the `MMM-` prefix. |
|
| `modules` | `[[String...]...]` | `[]` | A 2D String array of what each module should be on which page. Note that all entries must take their class name (e.g. this module's class name is `MMM-pages`, while the default modules may just have `newsfeed`, without the `MMM-` prefix. |
|
||||||
| `fixed` | `[String...]` | `["MMM-page-indicator"]` | Which modules should show up all the time. |
|
| `fixed` | `[String...]` | `["MMM-page-indicator"]` | Which modules should show up all the time. |
|
||||||
| `excludes` | *NA* | *NA* | **Deprecated**. Use `fixed` instead. |
|
| `excludes` | *NA* | *NA* | **Deprecated**. Use `fixed` instead. |
|
||||||
| `hiddenPages` | `{String: [String...]...}` | `{}` | An Object defining special `hiddenPages` which are not available on the normal page rotation and only accessible via a notification. Modules defined in `fixed` are ignored and need to be also added if you wish to have them on any hidden page. |
|
| `hiddenPages` | `{String: [String...]...}` | `{}` | An Object defining special `hiddenPages` which are not available on the normal page rotation and only accessible via a notification. Modules defined in `fixed` are ignored and need to be also added if you wish to have them on any hidden page. |
|
||||||
| `animationTime` | `int` | `1000` | Fading animation time. Set to `0` for instant change. Value is in milliseconds (1 second = 1000 milliseconds). |
|
| `animationTime` | `int` | `1000` | Fading animation time. Set to `0` for instant change. Value is in milliseconds (1 second = 1000 milliseconds). |
|
||||||
| `rotationTime` | `int` | `0` | Time, in milliseconds, between automatic page changes. |
|
| `rotationTime` | *NA* | *NA* | **Deprecated**. Use `timings` instead. |
|
||||||
|
| `timings` | `object` | `{ default: 0 }` | An object whose keys define the rotation time of the pages in milliseconds. <br>Example, where each page is 3 seconds, except page 3 which is 20 seconds:<br>`{ default: 3000, 2: 20000 }`<br>If a page is not defined, it will use the `default` value. <br> *Note:* Remember that the numbering starts at 0, so the first page is `0`, the second page is `1`, and so forth. |
|
||||||
| `rotationDelay` | `int` | `10000` | Time, in milliseconds, of how long should a manual page change linger before returning to automatic page changing. In other words, how long should the timer wait for after you manually change a page. This does include the animation time, so you may wish to increase it by a few seconds or so to account for the animation time. |
|
| `rotationDelay` | `int` | `10000` | Time, in milliseconds, of how long should a manual page change linger before returning to automatic page changing. In other words, how long should the timer wait for after you manually change a page. This does include the animation time, so you may wish to increase it by a few seconds or so to account for the animation time. |
|
||||||
| `rotationHomePage` | `int` | `0` | Time, in milliseconds, before automatically returning to the home page. If a home page is not set, this returns to the leftmost page instead. |
|
| `rotationHomePage` | `int` | `0` | Time, in milliseconds, before automatically returning to the home page. If a home page is not set, this returns to the leftmost page instead. |
|
||||||
| `rotationFirstPage` | *NA* | *NA* | **Deprecated**. Use `rotationHomePage` instead. |
|
| `rotationFirstPage` | *NA* | *NA* | **Deprecated**. Use `rotationHomePage` instead. |
|
||||||
|
|
Loading…
Reference in a new issue