Next major version 2 with PHP 8.1, Symfony 6, Tabler UI, 2FA ... (#2902)

This commit is contained in:
Kevin Papst
2022-12-31 21:19:55 +01:00
committed by GitHub
parent 95e06746bd
commit 90a0fd8a22
2164 changed files with 83700 additions and 86426 deletions

View File

@@ -0,0 +1,101 @@
/*
* This file is part of the Kimai time-tracking app.
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
/*!
* [KIMAI] Notification: notifications for Kimai
*/
import KimaiPlugin from '../KimaiPlugin';
export default class KimaiNotification extends KimaiPlugin {
getId()
{
return 'notification';
}
isSupported()
{
if (!window.Notification) {
return false;
}
if (Notification.permission === 'denied') {
return false;
}
return Notification.permission === "granted";
}
request(callback)
{
try {
Notification.requestPermission().then((permission) => {
if (permission === "granted") {
callback(true);
} else if (permission === "default") {
callback(null);
} else {
callback(false);
}
});
} catch (e) {
Notification.requestPermission((permission) => {
if (permission === "granted") {
callback(true);
} else if (permission === "default") {
callback(null);
} else {
callback(false);
}
});
}
}
notify(title, message, icon, options)
{
this.request((permission) => {
if (permission !== true) {
/** @type KimaiAlert */
const ALERT = this.getPlugin('alert');
ALERT.info(message);
}
let opts = {
body: message,
dir: this.getConfigurations().isRTL() ? 'rtl' : 'ltr',
};
//opts.requireInteraction = true;
//opts.renotify = true;
/*
if (options.tag === undefined) {
opts.tag = 'kimai';
}
*/
if (icon !== undefined && icon !== null) {
opts.icon = icon;
}
let nTitle = 'Kimai';
if (title !== null) {
nTitle = nTitle + ': ' + title;
}
if (options !== undefined && options !== null) {
opts = { ...opts, ...options};
}
const notification = new window.Notification(nTitle, opts);
notification.onclick = function () {
window.focus();
notification.close();
};
});
}
}