mirror of
https://github.com/FrankerFaceZ/FrankerFaceZ.git
synced 2025-07-26 20:48:30 +00:00
149 lines
No EOL
3.1 KiB
JavaScript
149 lines
No EOL
3.1 KiB
JavaScript
var FFZ = window.FrankerFaceZ;
|
|
|
|
|
|
// ---------------------
|
|
// Initialization
|
|
// ---------------------
|
|
|
|
FFZ.prototype.setup_notifications = function() {
|
|
this.log("Adding event handler for window focus.");
|
|
window.addEventListener("focus", this.clear_notifications.bind(this));
|
|
}
|
|
|
|
|
|
// ---------------------
|
|
// Settings
|
|
// ---------------------
|
|
|
|
FFZ.settings_info.highlight_notifications = {
|
|
type: "boolean",
|
|
value: false,
|
|
|
|
category: "Chat",
|
|
no_bttv: true,
|
|
//visible: function() { return ! this.has_bttv },
|
|
|
|
name: "Highlight Notifications",
|
|
help: "Display notifications when a highlighted word appears in chat in an unfocused tab. This is automatically disabled on the dashboard.",
|
|
|
|
on_update: function(val, direct) {
|
|
// Check to see if we have notification permission. If this is
|
|
// enabled, at least.
|
|
if ( ! val || ! direct )
|
|
return;
|
|
|
|
if ( Notification.permission === "denied" ) {
|
|
this.log("Notifications have been denied by the user.");
|
|
this.settings.set("highlight_notifications", false);
|
|
return;
|
|
|
|
} else if ( Notification.permission === "granted" )
|
|
return;
|
|
|
|
var f = this;
|
|
Notification.requestPermission(function(e) {
|
|
if ( e === "denied" ) {
|
|
f.log("Notifications have been denied by the user.");
|
|
f.settings.set("highlight_notifications", false);
|
|
}
|
|
});
|
|
}
|
|
};
|
|
|
|
|
|
// ---------------------
|
|
// Socket Commands
|
|
// ---------------------
|
|
|
|
FFZ.ws_commands.message = function(message) {
|
|
this.show_message(message);
|
|
}
|
|
|
|
|
|
// ---------------------
|
|
// Notifications
|
|
// ---------------------
|
|
|
|
FFZ._notifications = {};
|
|
FFZ._last_notification = 0;
|
|
|
|
FFZ.prototype.clear_notifications = function() {
|
|
for(var k in FFZ._notifications) {
|
|
var n = FFZ._notifications[k];
|
|
if ( n )
|
|
try {
|
|
n.close();
|
|
} catch(err) { }
|
|
}
|
|
|
|
FFZ._notifications = {};
|
|
FFZ._last_notification = 0;
|
|
}
|
|
|
|
|
|
FFZ.prototype.show_notification = function(message, title, tag, timeout, on_click, on_close) {
|
|
var perm = Notification.permission;
|
|
if ( perm === "denied " )
|
|
return false;
|
|
|
|
if ( perm === "granted" ) {
|
|
title = title || "FrankerFaceZ";
|
|
timeout = timeout || 10000;
|
|
|
|
var options = {
|
|
lang: "en-US",
|
|
dir: "ltr",
|
|
body: message,
|
|
tag: tag || "FrankerFaceZ",
|
|
icon: "http://cdn.frankerfacez.com/icon32.png"
|
|
};
|
|
|
|
var f = this,
|
|
n = new Notification(title, options),
|
|
nid = FFZ._last_notification++;
|
|
|
|
FFZ._notifications[nid] = n;
|
|
|
|
n.addEventListener("click", function() {
|
|
delete FFZ._notifications[nid];
|
|
if ( on_click )
|
|
on_click.bind(f)();
|
|
});
|
|
|
|
n.addEventListener("close", function() {
|
|
delete FFZ._notifications[nid];
|
|
if ( on_close )
|
|
on_close.bind(f)();
|
|
});
|
|
|
|
if ( typeof timeout == "number" )
|
|
n.addEventListener("show", function() {
|
|
setTimeout(function() {
|
|
delete FFZ._notifications[nid];
|
|
n.close();
|
|
}, timeout);
|
|
});
|
|
|
|
return;
|
|
}
|
|
|
|
var f = this;
|
|
Notification.requestPermission(function(e) {
|
|
f.show_notification(message, title, tag);
|
|
});
|
|
}
|
|
|
|
|
|
|
|
// ---------------------
|
|
// Noty Notification
|
|
// ---------------------
|
|
|
|
FFZ.prototype.show_message = function(message) {
|
|
window.noty({
|
|
text: message,
|
|
theme: "ffzTheme",
|
|
layout: "bottomCenter",
|
|
closeWith: ["button"]
|
|
}).show();
|
|
} |