123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168 |
- // Copyright (c) Jupyter Development Team.
- // Distributed under the terms of the Modified BSD License.
- define(['jquery'], function($) {
- "use strict";
- /**
- * Construct a NotificationWidget object.
- *
- * @constructor
- * @param {string} selector - a jQuery selector string for the
- * notification widget element
- */
- var NotificationWidget = function (selector) {
- this.selector = selector;
- this.timeout = null;
- this.busy = false;
- if (this.selector !== undefined) {
- this.element = $(selector);
- this.style();
- }
- this.element.hide();
- this.inner = $('<span/>');
- this.element.append(this.inner);
- };
- /**
- * Add the 'notification_widget' CSS class to the widget element.
- *
- * @method style
- */
- NotificationWidget.prototype.style = function () {
- // use explicit bootstrap classes here,
- // because multiple inheritance in LESS doesn't work
- // for this particular combination
- this.element.addClass('notification_widget btn btn-xs navbar-btn');
- };
-
- /**
- * hide the widget and empty the text
- **/
- NotificationWidget.prototype.hide = function () {
- var that = this;
- this.element.fadeOut(100, function(){that.inner.text('');});
- };
- /**
- * Set the notification widget message to display for a certain
- * amount of time (timeout). The widget will be shown forever if
- * timeout is <= 0 or undefined. If the widget is clicked while it
- * is still displayed, execute an optional callback
- * (click_callback). If the callback returns false, it will
- * prevent the notification from being dismissed.
- *
- * Options:
- * class - CSS class name for styling
- * icon - CSS class name for the widget icon
- * title - HTML title attribute for the widget
- *
- * @method set_message
- * @param {string} msg - The notification to display
- * @param {integer} [timeout] - The amount of time in milliseconds to display the widget
- * @param {function} [click_callback] - The function to run when the widget is clicked
- * @param {Object} [options] - Additional options
- */
- NotificationWidget.prototype.set_message = function (msg, timeout, click_callback, options) {
- options = options || {};
- // unbind potential previous callback
- this.element.unbind('click');
- this.inner.attr('class', options.icon);
- this.inner.attr('title', options.title);
- this.inner.text(msg);
- this.element.fadeIn(100);
- // reset previous set style
- this.element.removeClass();
- this.style();
- if (options.class) {
- this.element.addClass(options.class);
- }
- // clear previous timer
- if (this.timeout !== null) {
- clearTimeout(this.timeout);
- this.timeout = null;
- }
- // set the timer if a timeout is given
- var that = this;
- if (timeout !== undefined && timeout >= 0) {
- this.timeout = setTimeout(function () {
- that.element.fadeOut(100, function () {that.inner.text('');});
- that.element.unbind('click');
- that.timeout = null;
- }, timeout);
- }
- // if no click callback assume we will just dismiss the notification
- if (click_callback === undefined) {
- click_callback = function(){return true};
- }
- // on click, remove widget if click callback say so
- // and unbind click event.
- this.element.click(function () {
- if (click_callback() !== false) {
- that.element.fadeOut(100, function () {that.inner.text('');});
- that.element.unbind('click');
- }
- if (that.timeout !== null) {
- clearTimeout(that.timeout);
- that.timeout = null;
- }
- });
- };
- /**
- * Display an information message (styled with the 'info'
- * class). Arguments are the same as in set_message. Default
- * timeout is 3500 milliseconds.
- *
- * @method info
- */
- NotificationWidget.prototype.info = function (msg, timeout, click_callback, options) {
- options = options || {};
- options.class = options.class + ' info';
- timeout = timeout || 3500;
- this.set_message(msg, timeout, click_callback, options);
- };
- /**
- * Display a warning message (styled with the 'warning'
- * class). Arguments are the same as in set_message. Messages are
- * sticky by default.
- *
- * @method warning
- */
- NotificationWidget.prototype.warning = function (msg, timeout, click_callback, options) {
- options = options || {};
- options.class = options.class + ' warning';
- this.set_message(msg, timeout, click_callback, options);
- };
- /**
- * Display a danger message (styled with the 'danger'
- * class). Arguments are the same as in set_message. Messages are
- * sticky by default.
- *
- * @method danger
- */
- NotificationWidget.prototype.danger = function (msg, timeout, click_callback, options) {
- options = options || {};
- options.class = options.class + ' danger';
- this.set_message(msg, timeout, click_callback, options);
- };
- /**
- * Get the text of the widget message.
- *
- * @method get_message
- * @return {string} - the message text
- */
- NotificationWidget.prototype.get_message = function () {
- return this.inner.html();
- };
- return {'NotificationWidget': NotificationWidget};
- });
|