157 lines
4.1 KiB
JavaScript
157 lines
4.1 KiB
JavaScript
|
/*
|
||
|
* This file is part of Toolkit.
|
||
|
*
|
||
|
* Toolkit is free software; you can redistribute it and/or
|
||
|
* modify it under the terms of the GNU General Public
|
||
|
* License as published by the Free Software Foundation; either
|
||
|
* version 3 of the License, or (at your option) any later version.
|
||
|
*
|
||
|
* Toolkit is distributed in the hope that it will be useful,
|
||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||
|
* Lesser General Public License for more details.
|
||
|
*
|
||
|
* You should have received a copy of the GNU General
|
||
|
* Public License along with this program; if not, write to the
|
||
|
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
||
|
* Boston, MA 02110-1301 USA
|
||
|
*/
|
||
|
"use strict";
|
||
|
(function (w, TK) {
|
||
|
|
||
|
function close_clicked (e) {
|
||
|
/**
|
||
|
* Is fired when the user clicks on the close button.
|
||
|
*
|
||
|
* @event TK.Notification#closeclicked
|
||
|
*/
|
||
|
this.fire_event("closeclicked");
|
||
|
close.call(this.parent);
|
||
|
}
|
||
|
|
||
|
function after_hide() {
|
||
|
TK.S.after_frame(function() {
|
||
|
if (this.is_destructed()) return;
|
||
|
this.destroy();
|
||
|
}.bind(this));
|
||
|
}
|
||
|
|
||
|
function close () {
|
||
|
this.add_event("hide", after_hide);
|
||
|
this.hide();
|
||
|
/**
|
||
|
* Is fired when the notification was removed from the DOM after the hiding animation.
|
||
|
*
|
||
|
* @event TK.Notification#closed
|
||
|
*/
|
||
|
this.fire_event("closed");
|
||
|
}
|
||
|
|
||
|
function timeout() {
|
||
|
this._timeout = void(0);
|
||
|
close.call(this);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* TK.Notification is a {@link TK.Container} to be used in {@link TK.Notifications}.
|
||
|
*
|
||
|
* @class TK.Notification
|
||
|
*
|
||
|
* @extends TK.Container
|
||
|
*
|
||
|
* @param {Object} [options={ }] - An object containing initial options.
|
||
|
*
|
||
|
* @property {Number} [options.timeout=5000] - Time in milliseconds
|
||
|
* after the notification disappears automatically.
|
||
|
* Set to 0 for permanent notification.
|
||
|
* @property {String} [options.icon=false] - Show an icon. Set to
|
||
|
* <code>false</code> to hide it from the DOM.
|
||
|
* @property {Boolean} [options.show_close=false] - Show a close button.
|
||
|
*/
|
||
|
|
||
|
TK.Notification = TK.class({
|
||
|
|
||
|
_class: "Notification",
|
||
|
Extends: TK.Container,
|
||
|
|
||
|
_options: Object.assign(TK.Container.prototype._options, {
|
||
|
timeout: "number",
|
||
|
icon: "string",
|
||
|
show_close: "boolean",
|
||
|
}),
|
||
|
options: {
|
||
|
timeout: 5000,
|
||
|
icon: false,
|
||
|
show_close: false,
|
||
|
},
|
||
|
|
||
|
initialize: function (options) {
|
||
|
TK.Container.prototype.initialize.call(this, options);
|
||
|
var O = this.options;
|
||
|
/**
|
||
|
* @member {HTMLDivElement} TK.Notification#element - The main DIV container.
|
||
|
* Has class <code>toolkit-notification</code>.
|
||
|
*/
|
||
|
TK.add_class(this.element, "toolkit-notification");
|
||
|
this._timeout = void(0);
|
||
|
this.set("timeout", O.timeout);
|
||
|
},
|
||
|
redraw: function () {
|
||
|
var I = this.invalid;
|
||
|
var O = this.options;
|
||
|
var i = I.content;
|
||
|
TK.Container.prototype.redraw.call(this);
|
||
|
if (i && this.icon)
|
||
|
this.element.insertBefore(this.icon.element, this.element.firstChild);
|
||
|
if (i && this.close)
|
||
|
this.element.insertBefore(this.close.element, this.element.firstChild);
|
||
|
},
|
||
|
|
||
|
remove: close,
|
||
|
destroy: function() {
|
||
|
if (this._timeout !== void(0))
|
||
|
window.clearTimeout(this._timeout);
|
||
|
TK.Container.prototype.destroy.call(this);
|
||
|
},
|
||
|
set: function(key, val) {
|
||
|
TK.Container.prototype.set.call(this, key, val);
|
||
|
if (key === "timeout") {
|
||
|
if (this._timeout !== void(0))
|
||
|
window.clearTimeout(this._timeout);
|
||
|
if (val > 0)
|
||
|
this._timeout = window.setTimeout(timeout.bind(this), val);
|
||
|
}
|
||
|
},
|
||
|
});
|
||
|
|
||
|
/**
|
||
|
* @member {TK.Button} TK.Notification#close - The TK.Button for closing the notification.
|
||
|
*/
|
||
|
TK.ChildWidget(TK.Notification, "close", {
|
||
|
create: TK.Button,
|
||
|
show: false,
|
||
|
toggle_class: true,
|
||
|
static_events: {
|
||
|
click: close_clicked,
|
||
|
},
|
||
|
default_options: {
|
||
|
"icon" : "close",
|
||
|
"class" : "toolkit-close",
|
||
|
},
|
||
|
});
|
||
|
|
||
|
/**
|
||
|
* @member {TK.Icon} TK.Notification#icon - The TK.Icon widget.
|
||
|
*/
|
||
|
TK.ChildWidget(TK.Notification, "icon", {
|
||
|
create: TK.Icon,
|
||
|
show: false,
|
||
|
toggle_class: true,
|
||
|
option: "icon",
|
||
|
map_options: {
|
||
|
icon: "icon",
|
||
|
},
|
||
|
});
|
||
|
|
||
|
})(this, this.TK);
|