From 5f3dbf9890a2addcd7396986abb8c20e0fe9aa22 Mon Sep 17 00:00:00 2001 From: Grant Nestor Date: Thu, 27 Apr 2017 13:31:08 -0700 Subject: [PATCH 1/2] Use different favicons for different components (notebook, terminal, file) --- notebook/static/base/images/favicon-file.ico | Bin 0 -> 1150 bytes notebook/static/base/images/favicon-notebook.ico | Bin 0 -> 1150 bytes notebook/static/base/images/favicon-terminal.ico | Bin 0 -> 1150 bytes notebook/templates/edit.html | 2 ++ notebook/templates/notebook.html | 2 ++ notebook/templates/terminal.html | 2 ++ 6 files changed, 6 insertions(+) create mode 100644 notebook/static/base/images/favicon-file.ico create mode 100644 notebook/static/base/images/favicon-notebook.ico create mode 100644 notebook/static/base/images/favicon-terminal.ico diff --git a/notebook/static/base/images/favicon-file.ico b/notebook/static/base/images/favicon-file.ico new file mode 100644 index 0000000000000000000000000000000000000000..8167018cd005ff4a24d8287c620539e23c69aac9 GIT binary patch literal 1150 zcmeHGu?@m75Ih7usc1=q#Ar}3g9{1u5G9Vze%<}~9qSED z_*E4+*VxQ}1%Nd{icIFY0Mu3#9X}t*S|qcPXdmjkckEEPihH)7%2nLouWvxzmEyD; z_Z}H)ul%aFKJ%B}O15MDW@wjZiljJOvMuwx&zB)}Yvgo9FK{i_b#L8MN~r!Z`{GSC cvToVotH@v7c?w*vZ?LC+B96p?o;l#&8_znXx&QzG literal 0 HcmV?d00001 diff --git a/notebook/static/base/images/favicon-notebook.ico b/notebook/static/base/images/favicon-notebook.ico new file mode 100644 index 0000000000000000000000000000000000000000..4537e2d989843ae1a96a0548aa0a7066a22e2698 GIT binary patch literal 1150 zcmd6kJxT;Y5QX2WpqU$)xPggaBK}}1>McBhsCWizK|@m`1#e)g;lhS0Vx(Z8XsF1B zf@t|QGc63$HWTg)-xU2`y`G|5YVo$);ya`5F=+Oz;Y!U7Un(3%^tjC*nw^$zt$lCLQe;7 z68RSTXM;T!>A8mbS(zU-$nVo*u$!1+qs)I$$1A@12wJ$KD_DZdiXRr{6L1H)bNs;% z_xMoD7kliL`IDM&zEXNy)YY0_vYhz#zuJz@P!dKp~(AL>x#lFaYILfs!CRtU&#LehmNA|NqHQ z|NlP@`~yXO{r??6b?qo(q;Ts0O91s>q0kHwp#F0dnjr+#{|<-?NpU`0ZTkWVxAGzYSw`z#PH=!+V$+80G`{{Xl#ih#x~Shz$}0 J$-&gZXaKG5Ui|<7 literal 0 HcmV?d00001 diff --git a/notebook/templates/edit.html b/notebook/templates/edit.html index 9cda9fbc7..8c69952be 100644 --- a/notebook/templates/edit.html +++ b/notebook/templates/edit.html @@ -2,6 +2,8 @@ {% block title %}{{page_title}}{% endblock %} +{% block favicon %}{% endblock %} + {% block stylesheet %} diff --git a/notebook/templates/notebook.html b/notebook/templates/notebook.html index 53e5ebbb4..dfa9610e6 100644 --- a/notebook/templates/notebook.html +++ b/notebook/templates/notebook.html @@ -1,5 +1,7 @@ {% extends "page.html" %} +{% block favicon %}{% endblock %} + {% block stylesheet %} {% if mathjax_url %} diff --git a/notebook/templates/terminal.html b/notebook/templates/terminal.html index 945e19070..0a3cfd05c 100644 --- a/notebook/templates/terminal.html +++ b/notebook/templates/terminal.html @@ -2,6 +2,8 @@ {% block title %}{{page_title}}{% endblock %} +{% block favicon %}{% endblock %} + {% block bodyclasses %}terminal-app {{super()}}{% endblock %} {% block params %} From 3e01e128f5082e70e665b446529adfb06912bd7e Mon Sep 17 00:00:00 2001 From: Grant Nestor Date: Thu, 27 Apr 2017 13:31:30 -0700 Subject: [PATCH 2/2] Use animated favicon for kernel busy indicator --- .../static/base/images/favicon-busy-1.ico | Bin 0 -> 1150 bytes .../static/base/images/favicon-busy-2.ico | Bin 0 -> 1150 bytes .../static/base/images/favicon-busy-3.ico | Bin 0 -> 1150 bytes notebook/static/base/images/favicon-busy.ico | Bin 32038 -> 0 bytes notebook/static/base/js/utils.js | 14 ++++++- .../static/notebook/js/notificationarea.js | 36 ++++++++++-------- 6 files changed, 34 insertions(+), 16 deletions(-) create mode 100644 notebook/static/base/images/favicon-busy-1.ico create mode 100644 notebook/static/base/images/favicon-busy-2.ico create mode 100644 notebook/static/base/images/favicon-busy-3.ico delete mode 100644 notebook/static/base/images/favicon-busy.ico diff --git a/notebook/static/base/images/favicon-busy-1.ico b/notebook/static/base/images/favicon-busy-1.ico new file mode 100644 index 0000000000000000000000000000000000000000..5b46a822610b0f49bad2579cbd0ff8bfbb80d0fd GIT binary patch literal 1150 zcmb_byH3L}6g^dGo28;tXBH$Rx;Ed$575>80V^QE&SR*=53qHun5k4Lm9n-QOtR82Nz_X^HRP`gV>i zs3~bABf?&*Z>V1;{4?rb3H^!sbwXcIe@y5(^@12TVw5woBl3p!pD=RAn0I1S(MEUf!g|U7v-&*>0|Gw9aAF6di9sM_PubX2Yvi@>L zG=DBG)~52O^%L_sK2<+@2kN}}8#OYZ9`u)Ep9UFL3Y z=FNL|``!U5p2Z?~Eu)nIN&u<^DKduV4WL$`DERxK^aD!kNZg(E<8rvYl2GY=ME#w! zw(*bYUlUyqR^&$kf0O!|$p6F$r}T+v{%D_s(tXA(h+IO;+Hiw}^DUIlGIm023Hu!z zu4hEnXG?hFpECBlm-9%!y#Ke?J`a;Ru7&K4-)nO;T-Fz-wDhkN(A(5Q{ge5r1^jjD yq4|-2z`w_)kM8-6n|-?n?i}71_Y3S4mTBO?X|p)4fLjl^7Tyr;a(P2M;(Y>vrxNA> literal 0 HcmV?d00001 diff --git a/notebook/static/base/images/favicon-busy-3.ico b/notebook/static/base/images/favicon-busy-3.ico new file mode 100644 index 0000000000000000000000000000000000000000..b5edce573303a1d750106afa0a3b17bb2e6f2fb7 GIT binary patch literal 1150 zcmb_bv1$TA5PiXDk|Jo8+9n_Y3x)Vi`2fLkKEXB-v{wTWzrfB?k~)Dv1Y6U^YVwA4 zPh|JbExhC1&b>Ep=D3{&E_l~!;IodWOW+PbgCIr5@mv6E_Y@6hzeINs)kOS7`=`~2 zd##}8S3>{KXm95qCHRL0{!W6wlk0ci@XQ)-L^;c|*l{lzmludum^&s`M4M>s<0;ol zo-N~@f5O}k!u*DJ;+078+xO3pa$U_Cxk1(^7KqyaTNAf|Y@E{`1I-hnwtrp!8myu{ z>P7o!^Yak+JR#boUNk>;2CjX2u!`PLkI!$~?ECW-uMspnP4L8GQ3AfNj`7zbAWlw`wvCu45I)5 literal 0 HcmV?d00001 diff --git a/notebook/static/base/images/favicon-busy.ico b/notebook/static/base/images/favicon-busy.ico deleted file mode 100644 index 85f9995a47b5d870432cdef19a388b33d5cdfb3f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32038 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 R{Z=SPe-GgH^H)m({|`3Z&RPHf diff --git a/notebook/static/base/js/utils.js b/notebook/static/base/js/utils.js index b70b3ceb6..474b03426 100644 --- a/notebook/static/base/js/utils.js +++ b/notebook/static/base/js/utils.js @@ -1051,6 +1051,17 @@ define([ fn(); } } + + var change_favicon = function (src) { + var link = document.createElement('link'), + oldLink = document.getElementById('favicon'); + link.id = 'favicon'; + link.type = 'image/x-icon'; + link.rel = 'shortcut icon'; + link.href = utils.url_path_join(utils.get_body_data('baseUrl'), src); + if (oldLink) document.head.removeChild(oldLink); + document.head.appendChild(link); + }; var utils = { throttle: throttle, @@ -1101,7 +1112,8 @@ define([ format_datetime: format_datetime, datetime_sort_helper: datetime_sort_helper, dnd_contain_file: dnd_contain_file, - _ansispan:_ansispan + _ansispan:_ansispan, + change_favicon: change_favicon }; return utils; diff --git a/notebook/static/notebook/js/notificationarea.js b/notebook/static/notebook/js/notificationarea.js index 121fc6be2..89abc33e0 100644 --- a/notebook/static/notebook/js/notificationarea.js +++ b/notebook/static/notebook/js/notificationarea.js @@ -40,6 +40,23 @@ define([ var $modal_ind_icon = $("#modal_indicator"); var $readonly_ind_icon = $('#readonly-indicator'); var $body = $('body'); + var interval = 0; + + var set_busy_favicon = function(on) { + if (on && !interval) { + var i = 0; + var icons = ['favicon-busy-1.ico', 'favicon-busy-3.ico', 'favicon-busy-3.ico']; + interval = setInterval(function() { + var icon = icons[i % 3]; + utils.change_favicon('/static/base/images/' + icon); + i += 1; + }, 300); + } else { + clearInterval(interval); + utils.change_favicon('/static/base/images/favicon-notebook.ico'); + interval = 0; + } + }; // Listen for the notebook loaded event. Set readonly indicator. this.events.on('notebook_loaded.Notebook', function() { @@ -244,41 +261,30 @@ define([ knw.danger(short, undefined, showMsg); }); - var change_favicon = function (src) { - var link = document.createElement('link'), - oldLink = document.getElementById('favicon'); - link.id = 'favicon'; - link.type = 'image/x-icon'; - link.rel = 'shortcut icon'; - link.href = utils.url_path_join(utils.get_body_data('baseUrl'), src); - if (oldLink) document.head.removeChild(oldLink); - document.head.appendChild(link); - }; - this.events.on('kernel_starting.Kernel kernel_created.Session', function () { // window.document.title='(Starting) '+window.document.title; $kernel_ind_icon.attr('class','kernel_busy_icon').attr('title','Kernel Busy'); knw.set_message("Kernel starting, please wait..."); - change_favicon('/static/base/images/favicon-busy.ico'); + set_busy_favicon(true); }); this.events.on('kernel_ready.Kernel', function () { // that.save_widget.update_document_title(); $kernel_ind_icon.attr('class','kernel_idle_icon').attr('title','Kernel Idle'); knw.info("Kernel ready", 500); - change_favicon('/static/base/images/favicon.ico'); + set_busy_favicon(false); }); this.events.on('kernel_idle.Kernel', function () { // that.save_widget.update_document_title(); $kernel_ind_icon.attr('class','kernel_idle_icon').attr('title','Kernel Idle'); - change_favicon('/static/base/images/favicon.ico'); + set_busy_favicon(false); }); this.events.on('kernel_busy.Kernel', function () { // window.document.title='(Busy) '+window.document.title; $kernel_ind_icon.attr('class','kernel_busy_icon').attr('title','Kernel Busy'); - change_favicon('/static/base/images/favicon-busy.ico'); + set_busy_favicon(true); }); this.events.on('spec_match_found.Kernel', function (evt, data) {