mirror of
https://github.com/MichMich/MagicMirror.git
synced 2025-04-25 06:58:30 -04:00
Thanks to: @Developer-Incoming, @eltociear, @geraki, @khassel, @KristjanESPERANTO, @MagMar94, @mixasgr, @n8many, @OWL4C, @rejas, @savvadam, @sdetweil. > ⚠️ This release needs nodejs version `v22.14.0 or higher` ### Added - Add CSS support to the digital clock hour/minute/second through the use of the classes `clock-hour-digital`, `clock-minute-digital`, and `clock-second-digital`. - Add Arabic (#3719) and Esperanto translation. - Mark option `secondsColor` as deprecated in clock module. - Add Greek translation to Alerts module. - [newsfeed] Add specific ignoreOlderThan value (override) per feed (#3360) - [weather] Added option Humidity to hourly View - [weather] Added option to hide hourly entries that are Zero, hiding the entire column if empty. - [updatenotification] Added option to iterate over modules directory instead using modules defined in `config.js` (#3739) ### Changed - [core] starting clientonly now checks for needed env var `WAYLAND_DISPLAY` or `DISPLAY` and starts electron with needed parameters (if both are set wayland is used) (#3677) - [core] Optimize systeminformation calls and output (#3689) - [core] Add issue templates for feature requests and bug reports (#3695) - [core] Adapt `start:x11:dev` script - [weather/yr] The Yr weather provider now enforces a minimum `updateInterval` of 600 000 ms (10 minutes) to comply with the terms of service. If a lower value is set, it will be automatically increased to this minimum. - [weather/weatherflow] Fixed icons and added hourly support as well as UV, precipitation, and location name support. - [workflow] Run `sudo apt-get update` before installing packages to avoid install errors - [workflow] Exclude issues with label `ready (coming with next release)` from stale job ### Removed ### Updated - [core] Update requirements and dependencies including electron to v35 and formatting (#3593, #3693, #3717) - [core] Update prettier, ESLint and simplify config - Update Greek translation ### Fixed - [calendar] Fix clipping events being broadcast (#3678) - [tests] Fix Electron tests by running them under new github image ubuntu-24.04, replace xserver with labwc, running under xserver and labwc depending on env variable WAYLAND_DISPLAY is set (#3676) - [calendar] Fix arrayed symbols, #3267, again, add testcase, add testcase for #3678 - [weather] Fix wrong weatherCondition name in openmeteo provider which lead to n/a icon (#3691) - [core] Fix wrong port in log message when starting server only (#3696) - [calendar] Fix NewYork event processed on system in Central timezone shows wrong time #3701 - [weather/yr] The Yr weather provider is now able to recover from bad API responses instead of freezing (#3296) - [compliments] Fix evening events being shown during the day (#3727) - [weather] Fixed minor spacing issues when using UV Index in Hourly - [workflow] Fix command to run spellcheck --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: Michael Teeuw <michael@xonaymedia.nl> Co-authored-by: Kristjan ESPERANTO <35647502+KristjanESPERANTO@users.noreply.github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Karsten Hassel <hassel@gmx.de> Co-authored-by: Ross Younger <crazyscot@gmail.com> Co-authored-by: Bugsounet - Cédric <github@bugsounet.fr> Co-authored-by: jkriegshauser <joshuakr@nvidia.com> Co-authored-by: illimarkangur <116028111+illimarkangur@users.noreply.github.com> Co-authored-by: sam detweiler <sdetweil@gmail.com> Co-authored-by: vppencilsharpener <tim.pray@gmail.com> Co-authored-by: Paranoid93 <6515818+Paranoid93@users.noreply.github.com> Co-authored-by: Brian O'Connor <btoconnor@users.noreply.github.com> Co-authored-by: WallysWellies <59727507+WallysWellies@users.noreply.github.com> Co-authored-by: Jason Stieber <jrstieber@gmail.com> Co-authored-by: jargordon <50050429+jargordon@users.noreply.github.com> Co-authored-by: Daniel <32464403+dkallen78@users.noreply.github.com> Co-authored-by: Ryan Williams <65094007+ryan-d-williams@users.noreply.github.com> Co-authored-by: Panagiotis Skias <panagiotis.skias@gmail.com> Co-authored-by: Marc Landis <dirk.rettschlag@gmail.com> Co-authored-by: HeikoGr <20295490+HeikoGr@users.noreply.github.com> Co-authored-by: Pedro Lamas <pedrolamas@gmail.com> Co-authored-by: veeck <gitkraken@veeck.de> Co-authored-by: Magnus <34011212+MagMar94@users.noreply.github.com> Co-authored-by: Ikko Eltociear Ashimine <eltociear@gmail.com> Co-authored-by: DevIncomin <56730075+Developer-Incoming@users.noreply.github.com> Co-authored-by: Nathan <n8nyoung@gmail.com> Co-authored-by: mixasgr <mixasgr@users.noreply.github.com> Co-authored-by: Savvas Adamtziloglou <savvas-gr@greeklug.gr> Co-authored-by: Konstantinos <geraki@gmail.com> Co-authored-by: OWL4C <124401812+OWL4C@users.noreply.github.com>
142 lines
3.5 KiB
JavaScript
142 lines
3.5 KiB
JavaScript
/* global NotificationFx */
|
|
|
|
Module.register("alert", {
|
|
alerts: {},
|
|
|
|
defaults: {
|
|
effect: "slide", // scale|slide|genie|jelly|flip|bouncyflip|exploader
|
|
alert_effect: "jelly", // scale|slide|genie|jelly|flip|bouncyflip|exploader
|
|
display_time: 3500, // time a notification is displayed in seconds
|
|
position: "center",
|
|
welcome_message: false // shown at startup
|
|
},
|
|
|
|
getScripts () {
|
|
return ["notificationFx.js"];
|
|
},
|
|
|
|
getStyles () {
|
|
return ["font-awesome.css", this.file("./styles/notificationFx.css"), this.file(`./styles/${this.config.position}.css`)];
|
|
},
|
|
|
|
getTranslations () {
|
|
return {
|
|
bg: "translations/bg.json",
|
|
da: "translations/da.json",
|
|
de: "translations/de.json",
|
|
en: "translations/en.json",
|
|
eo: "translations/eo.json",
|
|
es: "translations/es.json",
|
|
fr: "translations/fr.json",
|
|
hu: "translations/hu.json",
|
|
nl: "translations/nl.json",
|
|
ru: "translations/ru.json",
|
|
th: "translations/th.json"
|
|
};
|
|
},
|
|
|
|
getTemplate (type) {
|
|
return `templates/${type}.njk`;
|
|
},
|
|
|
|
async start () {
|
|
Log.info(`Starting module: ${this.name}`);
|
|
|
|
if (this.config.effect === "slide") {
|
|
this.config.effect = `${this.config.effect}-${this.config.position}`;
|
|
}
|
|
|
|
if (this.config.welcome_message) {
|
|
const message = this.config.welcome_message === true ? this.translate("welcome") : this.config.welcome_message;
|
|
await this.showNotification({ title: this.translate("sysTitle"), message });
|
|
}
|
|
},
|
|
|
|
notificationReceived (notification, payload, sender) {
|
|
if (notification === "SHOW_ALERT") {
|
|
if (payload.type === "notification") {
|
|
this.showNotification(payload);
|
|
} else {
|
|
this.showAlert(payload, sender);
|
|
}
|
|
} else if (notification === "HIDE_ALERT") {
|
|
this.hideAlert(sender);
|
|
}
|
|
},
|
|
|
|
async showNotification (notification) {
|
|
const message = await this.renderMessage(notification.templateName || "notification", notification);
|
|
|
|
new NotificationFx({
|
|
message,
|
|
layout: "growl",
|
|
effect: this.config.effect,
|
|
ttl: notification.timer || this.config.display_time
|
|
}).show();
|
|
},
|
|
|
|
async showAlert (alert, sender) {
|
|
// If module already has an open alert close it
|
|
if (this.alerts[sender.name]) {
|
|
this.hideAlert(sender, false);
|
|
}
|
|
|
|
// Add overlay
|
|
if (!Object.keys(this.alerts).length) {
|
|
this.toggleBlur(true);
|
|
}
|
|
|
|
const message = await this.renderMessage(alert.templateName || "alert", alert);
|
|
|
|
// Store alert in this.alerts
|
|
this.alerts[sender.name] = new NotificationFx({
|
|
message,
|
|
effect: this.config.alert_effect,
|
|
ttl: alert.timer,
|
|
onClose: () => this.hideAlert(sender),
|
|
al_no: "ns-alert"
|
|
});
|
|
|
|
// Show alert
|
|
this.alerts[sender.name].show();
|
|
|
|
// Add timer to dismiss alert and overlay
|
|
if (alert.timer) {
|
|
setTimeout(() => {
|
|
this.hideAlert(sender);
|
|
}, alert.timer);
|
|
}
|
|
},
|
|
|
|
hideAlert (sender, close = true) {
|
|
// Dismiss alert and remove from this.alerts
|
|
if (this.alerts[sender.name]) {
|
|
this.alerts[sender.name].dismiss(close);
|
|
delete this.alerts[sender.name];
|
|
// Remove overlay
|
|
if (!Object.keys(this.alerts).length) {
|
|
this.toggleBlur(false);
|
|
}
|
|
}
|
|
},
|
|
|
|
renderMessage (type, data) {
|
|
return new Promise((resolve) => {
|
|
this.nunjucksEnvironment().render(this.getTemplate(type), data, function (err, res) {
|
|
if (err) {
|
|
Log.error("Failed to render alert", err);
|
|
}
|
|
|
|
resolve(res);
|
|
});
|
|
});
|
|
},
|
|
|
|
toggleBlur (add = false) {
|
|
const method = add ? "add" : "remove";
|
|
const modules = document.querySelectorAll(".module");
|
|
for (const module of modules) {
|
|
module.classList[method]("alert-blur");
|
|
}
|
|
}
|
|
});
|