mirror of
https://github.com/GNS3/gns3-server.git
synced 2026-08-27 12:30:13 +03:00
169 lines
4.2 KiB
JavaScript
169 lines
4.2 KiB
JavaScript
/*
|
|
* This file is part of Xpra.
|
|
* Copyright (C) 2016 Antoine Martin <antoine@xpra.org>
|
|
* Copyright (c) 2016 Spikes, Inc.
|
|
* Licensed under MPL 2.0, see:
|
|
* http://www.mozilla.org/MPL/2.0/
|
|
*
|
|
*/
|
|
|
|
$(function() {
|
|
window.notification_timers = {};
|
|
|
|
const NOTIFICATION_SELECTOR = ".notifications";
|
|
|
|
window.doNotification = function(
|
|
type,
|
|
nid,
|
|
title,
|
|
message,
|
|
timeout,
|
|
icon,
|
|
actions,
|
|
hints,
|
|
onAction,
|
|
onClose
|
|
) {
|
|
console.debug(
|
|
"doNotification",
|
|
type,
|
|
nid,
|
|
title,
|
|
message,
|
|
timeout,
|
|
icon,
|
|
actions,
|
|
hints,
|
|
onAction,
|
|
onClose
|
|
);
|
|
const nID = `notification${nid}`;
|
|
const a = $(
|
|
`<div id="${nID}" class="alert ${type}">` +
|
|
`<img class="notification_icon" id="notification_icon${nID}">` +
|
|
`<span class="title">${title}</span>` +
|
|
`<span class="message">${message}</span>` +
|
|
`<div class="dismiss">×</div>` +
|
|
`</div>`
|
|
);
|
|
const notifications_elements = $(NOTIFICATION_SELECTOR);
|
|
notifications_elements.prepend(a);
|
|
if (actions) {
|
|
const notification_buttons = $(
|
|
'<div class="notification_buttons"></div>'
|
|
);
|
|
a.append(notification_buttons);
|
|
for (let index = 0; index < actions.length; index += 2) {
|
|
const action_id = actions[index];
|
|
const action_label = actions[index + 1];
|
|
const notification_button = window._notification_button(
|
|
nid,
|
|
action_id,
|
|
action_label,
|
|
onAction,
|
|
onClose
|
|
);
|
|
notification_buttons.append(notification_button);
|
|
}
|
|
}
|
|
notifications_elements.prepend(a);
|
|
if (icon) {
|
|
const encoding = icon[0];
|
|
const img_data = icon[3];
|
|
if (encoding == "png") {
|
|
const source = `data:image/${encoding};base64,${Utilities.ArrayBufferToBase64(
|
|
img_data
|
|
)}`;
|
|
$(`#notification_icon${nID}`).attr("src", source);
|
|
}
|
|
}
|
|
|
|
a.on("click", ".dismiss", function() {
|
|
window.cancelNotificationTimer(nid);
|
|
a.removeClass("visible").addClass("hidden");
|
|
a.on(
|
|
"transitionend webkitTransitionEnd",
|
|
$.debounce(250, function() {
|
|
a.trigger("dismissed");
|
|
a.remove();
|
|
})
|
|
);
|
|
if (onClose) {
|
|
onClose(nid, 3, "user clicked dismiss");
|
|
}
|
|
});
|
|
|
|
setTimeout(function() {
|
|
a.addClass("visible");
|
|
}, 1);
|
|
|
|
if (timeout) {
|
|
a.data("timeLeft", timeout);
|
|
window.notification_timers[nid] = setInterval(function() {
|
|
const tleft = a.data("timeLeft") - 1;
|
|
if (a.data("timeLeft") === 0) {
|
|
a.find(".dismiss").trigger("click");
|
|
if (onClose) {
|
|
onClose(nid, 1, "timeout");
|
|
}
|
|
} else {
|
|
a.find("sec").text(tleft);
|
|
a.data("timeLeft", tleft);
|
|
}
|
|
}, 1000);
|
|
}
|
|
return a;
|
|
};
|
|
|
|
window._notification_button = function(
|
|
nid,
|
|
action_id,
|
|
action_label,
|
|
onAction,
|
|
onClose
|
|
) {
|
|
const notification_button = $(
|
|
`<div class="notification_button" id=notification"${action_id}">${action_label}</div>`
|
|
);
|
|
notification_button.on("click", function() {
|
|
window.closeNotification(nid);
|
|
if (onAction) {
|
|
onAction(nid, action_id);
|
|
}
|
|
if (onClose) {
|
|
onClose(nid, 3, "user clicked action");
|
|
}
|
|
});
|
|
return notification_button;
|
|
};
|
|
|
|
window.cancelNotificationTimer = function(nid) {
|
|
const timer = window.notification_timers[nid];
|
|
if (timer) {
|
|
window.clearInterval(timer);
|
|
delete window.notification_timers[nid];
|
|
}
|
|
};
|
|
window.cancelNotificationTimers = function() {
|
|
for (const nid in window.notification_timers) {
|
|
window.cancelNotificationTimer(nid);
|
|
}
|
|
};
|
|
|
|
window.closeNotification = function(nid) {
|
|
window.cancelNotificationTimer(nid);
|
|
const nID = `notification${nid}`;
|
|
$(NOTIFICATION_SELECTOR).find(`#${nID}`).find(".dismiss").trigger("click");
|
|
};
|
|
|
|
window.clearNotifications = function() {
|
|
window.cancelNotificationTimers();
|
|
$(NOTIFICATION_SELECTOR).find(".dismiss").trigger("click");
|
|
};
|
|
|
|
window.removeNotifications = function() {
|
|
window.cancelNotificationTimers();
|
|
$(NOTIFICATION_SELECTOR).empty();
|
|
};
|
|
});
|