diff --git a/IPython/html/static/notebook/js/notificationarea.js b/IPython/html/static/notebook/js/notificationarea.js index 0fad72b..2cb0107 100644 --- a/IPython/html/static/notebook/js/notificationarea.js +++ b/IPython/html/static/notebook/js/notificationarea.js @@ -203,7 +203,7 @@ define([ nnw.set_message("Notebook saved",2000); }); this.events.on('notebook_save_failed.Notebook', function (evt, xhr, status, data) { - nnw.set_message(data || "Notebook save failed"); + nnw.warning(data || "Notebook save failed"); }); // Checkpoint events @@ -216,19 +216,19 @@ define([ nnw.set_message(msg, 2000); }); this.events.on('checkpoint_failed.Notebook', function () { - nnw.set_message("Checkpoint failed"); + nnw.warning("Checkpoint failed"); }); this.events.on('checkpoint_deleted.Notebook', function () { nnw.set_message("Checkpoint deleted", 500); }); this.events.on('checkpoint_delete_failed.Notebook', function () { - nnw.set_message("Checkpoint delete failed"); + nnw.warning("Checkpoint delete failed"); }); this.events.on('checkpoint_restoring.Notebook', function () { nnw.set_message("Restoring to checkpoint...", 500); }); this.events.on('checkpoint_restore_failed.Notebook', function () { - nnw.set_message("Checkpoint restore failed"); + nnw.warning("Checkpoint restore failed"); }); // Autosave events diff --git a/IPython/html/static/notebook/js/notificationwidget.js b/IPython/html/static/notebook/js/notificationwidget.js index 51c40e7..9bd5443 100644 --- a/IPython/html/static/notebook/js/notificationwidget.js +++ b/IPython/html/static/notebook/js/notificationwidget.js @@ -15,7 +15,6 @@ define([ this.element = $(selector); this.style(); } - this.element.button(); this.element.hide(); var that = this; @@ -25,8 +24,7 @@ define([ }; NotificationWidget.prototype.style = function () { - this.element.addClass('notification_widget pull-right'); - this.element.addClass('border-box-sizing'); + this.element.addClass('notification_widget'); }; // msg : message to display @@ -36,13 +34,23 @@ define([ // click_callback : function called if user click on notification // could return false to prevent the notification to be dismissed NotificationWidget.prototype.set_message = function (msg, timeout, click_callback, options) { - options = options || {}; - var callback = click_callback || function() {return false;}; + var options = options || {}; + var callback = click_callback || function() {return true;}; var that = this; + // 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) + } if (this.timeout !== null) { clearTimeout(this.timeout); this.timeout = null; @@ -66,11 +74,30 @@ define([ } }; + + NotificationWidget.prototype.info = function (msg, timeout, click_callback, options) { + var options = options || {}; + options.class = options.class +' info'; + var timeout = timeout || 3500; + this.set_message(msg, timeout, click_callback, options); + } + NotificationWidget.prototype.warning = function (msg, timeout, click_callback, options) { + var options = options || {}; + options.class = options.class +' warning'; + this.set_message(msg, timeout, click_callback, options); + } + NotificationWidget.prototype.danger = function (msg, timeout, click_callback, options) { + var options = options || {}; + options.class = options.class +' danger'; + this.set_message(msg, timeout, click_callback, options); + } + + NotificationWidget.prototype.get_message = function () { return this.inner.html(); }; - // For backwards compatability. + // For backwards compatibility. IPython.NotificationWidget = NotificationWidget; return {'NotificationWidget': NotificationWidget}; diff --git a/IPython/html/static/notebook/less/notificationwidget.less b/IPython/html/static/notebook/less/notificationwidget.less index 3981948..6a665dd 100644 --- a/IPython/html/static/notebook/less/notificationwidget.less +++ b/IPython/html/static/notebook/less/notificationwidget.less @@ -3,11 +3,29 @@ padding: 1px 12px; margin: 2px 4px; z-index: 10; - border: 1px solid #ccc; border-radius: @border-radius-base; background: @notification_widget_bg; + .pull-right(); + .border-box-sizing(); + .btn(); + .btn-default(); + .btn-xs(); &.span { padding-right:2px; } } + +.notification_widget.warning { + .btn-warning() +} +.notification_widget.success { + .btn-success() +} +.notification_widget.info { + .btn-info() +} +.notification_widget.danger { + .btn-danger() +} + diff --git a/IPython/html/static/style/style.min.css b/IPython/html/static/style/style.min.css index 9ffd03f..9119798 100644 --- a/IPython/html/static/style/style.min.css +++ b/IPython/html/static/style/style.min.css @@ -9588,13 +9588,287 @@ ul#help_menu li a i { padding: 1px 12px; margin: 2px 4px; z-index: 10; - border: 1px solid #ccc; - border-radius: 4px; background: rgba(240, 240, 240, 0.5); + float: right !important; + float: right; + box-sizing: border-box; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + display: inline-block; + margin-bottom: 0; + font-weight: normal; + text-align: center; + vertical-align: middle; + cursor: pointer; + background-image: none; + border: 1px solid transparent; + white-space: nowrap; + padding: 6px 12px; + font-size: 13px; + line-height: 1.42857143; + border-radius: 4px; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + color: #333333; + background-color: #ffffff; + border-color: #cccccc; + padding: 1px 5px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} +.notification_widget:focus, +.notification_widget:active:focus, +.notification_widget.active:focus { + outline: thin dotted; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} +.notification_widget:hover, +.notification_widget:focus { + color: #333333; + text-decoration: none; +} +.notification_widget:active, +.notification_widget.active { + outline: 0; + background-image: none; + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); +} +.notification_widget.disabled, +.notification_widget[disabled], +fieldset[disabled] .notification_widget { + cursor: not-allowed; + pointer-events: none; + opacity: 0.65; + filter: alpha(opacity=65); + -webkit-box-shadow: none; + box-shadow: none; +} +.notification_widget [class^="icon-"].icon-large, +.notification_widget [class*=" icon-"].icon-large { + line-height: .9em; +} +.notification_widget [class^="icon-"].icon-spin, +.notification_widget [class*=" icon-"].icon-spin { + display: inline-block; +} +.notification_widget [class^="icon-"].pull-left.icon-2x, +.notification_widget [class*=" icon-"].pull-left.icon-2x, +.notification_widget [class^="icon-"].pull-right.icon-2x, +.notification_widget [class*=" icon-"].pull-right.icon-2x { + margin-top: .18em; +} +.notification_widget [class^="icon-"].icon-spin.icon-large, +.notification_widget [class*=" icon-"].icon-spin.icon-large { + line-height: .8em; +} +.notification_widget:hover, +.notification_widget:focus, +.notification_widget:active, +.notification_widget.active, +.open .dropdown-toggle.notification_widget { + color: #333333; + background-color: #ebebeb; + border-color: #adadad; +} +.notification_widget:active, +.notification_widget.active, +.open .dropdown-toggle.notification_widget { + background-image: none; +} +.notification_widget.disabled, +.notification_widget[disabled], +fieldset[disabled] .notification_widget, +.notification_widget.disabled:hover, +.notification_widget[disabled]:hover, +fieldset[disabled] .notification_widget:hover, +.notification_widget.disabled:focus, +.notification_widget[disabled]:focus, +fieldset[disabled] .notification_widget:focus, +.notification_widget.disabled:active, +.notification_widget[disabled]:active, +fieldset[disabled] .notification_widget:active, +.notification_widget.disabled.active, +.notification_widget[disabled].active, +fieldset[disabled] .notification_widget.active { + background-color: #ffffff; + border-color: #cccccc; +} +.notification_widget .badge { + color: #ffffff; + background-color: #333333; } .notification_widget.span { padding-right: 2px; } +.notification_widget.warning { + color: #ffffff; + background-color: #f0ad4e; + border-color: #eea236; +} +.notification_widget.warning:hover, +.notification_widget.warning:focus, +.notification_widget.warning:active, +.notification_widget.warning.active, +.open .dropdown-toggle.notification_widget.warning { + color: #ffffff; + background-color: #ed9c28; + border-color: #d58512; +} +.notification_widget.warning:active, +.notification_widget.warning.active, +.open .dropdown-toggle.notification_widget.warning { + background-image: none; +} +.notification_widget.warning.disabled, +.notification_widget.warning[disabled], +fieldset[disabled] .notification_widget.warning, +.notification_widget.warning.disabled:hover, +.notification_widget.warning[disabled]:hover, +fieldset[disabled] .notification_widget.warning:hover, +.notification_widget.warning.disabled:focus, +.notification_widget.warning[disabled]:focus, +fieldset[disabled] .notification_widget.warning:focus, +.notification_widget.warning.disabled:active, +.notification_widget.warning[disabled]:active, +fieldset[disabled] .notification_widget.warning:active, +.notification_widget.warning.disabled.active, +.notification_widget.warning[disabled].active, +fieldset[disabled] .notification_widget.warning.active { + background-color: #f0ad4e; + border-color: #eea236; +} +.notification_widget.warning .badge { + color: #f0ad4e; + background-color: #ffffff; +} +.notification_widget.success { + color: #ffffff; + background-color: #5cb85c; + border-color: #4cae4c; +} +.notification_widget.success:hover, +.notification_widget.success:focus, +.notification_widget.success:active, +.notification_widget.success.active, +.open .dropdown-toggle.notification_widget.success { + color: #ffffff; + background-color: #47a447; + border-color: #398439; +} +.notification_widget.success:active, +.notification_widget.success.active, +.open .dropdown-toggle.notification_widget.success { + background-image: none; +} +.notification_widget.success.disabled, +.notification_widget.success[disabled], +fieldset[disabled] .notification_widget.success, +.notification_widget.success.disabled:hover, +.notification_widget.success[disabled]:hover, +fieldset[disabled] .notification_widget.success:hover, +.notification_widget.success.disabled:focus, +.notification_widget.success[disabled]:focus, +fieldset[disabled] .notification_widget.success:focus, +.notification_widget.success.disabled:active, +.notification_widget.success[disabled]:active, +fieldset[disabled] .notification_widget.success:active, +.notification_widget.success.disabled.active, +.notification_widget.success[disabled].active, +fieldset[disabled] .notification_widget.success.active { + background-color: #5cb85c; + border-color: #4cae4c; +} +.notification_widget.success .badge { + color: #5cb85c; + background-color: #ffffff; +} +.notification_widget.info { + color: #ffffff; + background-color: #5bc0de; + border-color: #46b8da; +} +.notification_widget.info:hover, +.notification_widget.info:focus, +.notification_widget.info:active, +.notification_widget.info.active, +.open .dropdown-toggle.notification_widget.info { + color: #ffffff; + background-color: #39b3d7; + border-color: #269abc; +} +.notification_widget.info:active, +.notification_widget.info.active, +.open .dropdown-toggle.notification_widget.info { + background-image: none; +} +.notification_widget.info.disabled, +.notification_widget.info[disabled], +fieldset[disabled] .notification_widget.info, +.notification_widget.info.disabled:hover, +.notification_widget.info[disabled]:hover, +fieldset[disabled] .notification_widget.info:hover, +.notification_widget.info.disabled:focus, +.notification_widget.info[disabled]:focus, +fieldset[disabled] .notification_widget.info:focus, +.notification_widget.info.disabled:active, +.notification_widget.info[disabled]:active, +fieldset[disabled] .notification_widget.info:active, +.notification_widget.info.disabled.active, +.notification_widget.info[disabled].active, +fieldset[disabled] .notification_widget.info.active { + background-color: #5bc0de; + border-color: #46b8da; +} +.notification_widget.info .badge { + color: #5bc0de; + background-color: #ffffff; +} +.notification_widget.danger { + color: #ffffff; + background-color: #d9534f; + border-color: #d43f3a; +} +.notification_widget.danger:hover, +.notification_widget.danger:focus, +.notification_widget.danger:active, +.notification_widget.danger.active, +.open .dropdown-toggle.notification_widget.danger { + color: #ffffff; + background-color: #d2322d; + border-color: #ac2925; +} +.notification_widget.danger:active, +.notification_widget.danger.active, +.open .dropdown-toggle.notification_widget.danger { + background-image: none; +} +.notification_widget.danger.disabled, +.notification_widget.danger[disabled], +fieldset[disabled] .notification_widget.danger, +.notification_widget.danger.disabled:hover, +.notification_widget.danger[disabled]:hover, +fieldset[disabled] .notification_widget.danger:hover, +.notification_widget.danger.disabled:focus, +.notification_widget.danger[disabled]:focus, +fieldset[disabled] .notification_widget.danger:focus, +.notification_widget.danger.disabled:active, +.notification_widget.danger[disabled]:active, +fieldset[disabled] .notification_widget.danger:active, +.notification_widget.danger.disabled.active, +.notification_widget.danger[disabled].active, +fieldset[disabled] .notification_widget.danger.active { + background-color: #d9534f; + border-color: #d43f3a; +} +.notification_widget.danger .badge { + color: #d9534f; + background-color: #ffffff; +} div#pager_splitter { height: 8px; }