From f344dd85d38761f87bfb02fadb543e4ec5d6923f Mon Sep 17 00:00:00 2001 From: Alexander OSTROVSKY Date: Wed, 7 Aug 2019 14:46:41 -0400 Subject: [PATCH] parent 207f4c5fb0423c13a2afcf34c78b9629a0c0ca75 author Alexander OSTROVSKY 1565203601 -0400 committer Alexander OSTROVSKY 1582640692 -0500 Notifications on job completion JS lint for var notification Altered to accomodate job failures and user cancellations Added an icon to easily differentiate job success from failure Tab updates when window is hidden. Better completion message, removed console.log Notification grammar, and linking tab icon change with notification permissions tab fix Tab resets on view js lint --- .../scripts/mvc/dataset/dataset-model.js | 28 ++++++++++ client/galaxy/scripts/mvc/user/tab-updates.js | 52 ++++++++++++++++++ static/erricon.ico | Bin 0 -> 2253 bytes 3 files changed, 80 insertions(+) create mode 100644 client/galaxy/scripts/mvc/user/tab-updates.js create mode 100644 static/erricon.ico diff --git a/client/galaxy/scripts/mvc/dataset/dataset-model.js b/client/galaxy/scripts/mvc/dataset/dataset-model.js index 69f18aa6ce0..b16aae7a0bd 100644 --- a/client/galaxy/scripts/mvc/dataset/dataset-model.js +++ b/client/galaxy/scripts/mvc/dataset/dataset-model.js @@ -5,8 +5,10 @@ import { getAppRoot } from "onload/loadConfig"; import STATES from "mvc/dataset/states"; import BASE_MVC from "mvc/base-mvc"; import _l from "utils/localization"; +import TAB_UPDATES from "mvc/user/tab-updates"; var logNamespace = "dataset"; +var hiddenupdates = 1; //============================================================================== var searchableMixin = BASE_MVC.SearchableModelMixin; /** @class base model for any DatasetAssociation (HDAs, LDDAs, DatasetCollectionDAs). @@ -99,6 +101,25 @@ var DatasetAssociation = Backbone.Model.extend(BASE_MVC.LoggableMixin).extend( this.log(`${this} has changed state:`, currModel, newState); if (this.inReadyState()) { this.trigger("state:ready", currModel, newState, this.previous("state")); + if (newState != "discarded"){ + if(newState === "ok"){ + new Notification(`Job complete: ${this.get("name")}`, { + icon: "static/favicon.ico" + }); + if(TAB_UPDATES.is_hidden()){ + TAB_UPDATES.hidden_count(hiddenupdates); + hiddenupdates++; + } + } else if(newState == "error"){ + new Notification(`Job failure: ${this.get("name")}`, { + icon: "static/erricon.ico" + }); + if(TAB_UPDATES.is_hidden() && Notification.permission == "granted"){ + TAB_UPDATES.change_favicon("static/erricon.ico") + } + } + + } } }); // the download url (currently) relies on having a correct file extension @@ -349,6 +370,13 @@ var DatasetAssociationCollection = Backbone.Collection.extend(BASE_MVC.LoggableM } ); +window.addEventListener("focus", function(){ + if(document.getElementById('tabicon').href.search("erricon") != -1){ + TAB_UPDATES.change_favicon("static/favicon.ico"); + } + document.title = "Galaxy"; + hiddenupdates = 1; +}); //============================================================================== export default { DatasetAssociation: DatasetAssociation, diff --git a/client/galaxy/scripts/mvc/user/tab-updates.js b/client/galaxy/scripts/mvc/user/tab-updates.js new file mode 100644 index 00000000000..b098eae4fa9 --- /dev/null +++ b/client/galaxy/scripts/mvc/user/tab-updates.js @@ -0,0 +1,52 @@ +//Allow change tab on event===================================================== +function change_favicon(img){ + var favicon = document.createElement("link"); + favicon.id = "tabicon"; + favicon.setAttribute("rel", "shortcut icon"); + var head = document.querySelector("head"); + head.appendChild(favicon); + favicon.setAttribute("type", "image/png"); + favicon.setAttribute("href", img); +} + +//Check if browser is hidden-aware============================================== +function hidden_permit(){ + var browsers = ["webkit","moz","ms","o"]; + if ("hidden" in document){ + return "hidden"; + } + for (var i=0; i < browsers.length; i++){ + if ((browsers[i] + "Hidden") in document){ + return browsers[i] + "Hidden"; + } + } + return null; +} + +//Find out if browser tab is hidden============================================= +function is_hidden(){ + var state = hidden_permit(); + if (!state){ + return false; + } + return document[state]; +} + +//Generate new tab message to display on update in window======================= +function hidden_count(current){ + if(is_hidden()){ + if(current === 1){ + document.title = "Galaxy (1 job completed)"; + }else{ + document.title = "Galaxy (" + current + " jobs completed)"; + } + } +} + + +export default{ + change_favicon: change_favicon, + hidden_permit: hidden_permit, + is_hidden: is_hidden, + hidden_count: hidden_count +}; diff --git a/static/erricon.ico b/static/erricon.ico new file mode 100644 index 0000000000000000000000000000000000000000..c5ee4d32e54a720ba16fd2a49149cface7122767 GIT binary patch literal 2253 zcmaJ@2{fBo8~$PmVynuitpu5|OTyUFP$f!6?KxwqmLSSOzEncur?%G6R&3L1`7!zz zZEaIachp`*wU%1i(W){+$6ni!@+X*%>FLaO&imba-}^l8`@HwO=bn4s$-zb(CJzGu zK%8KUcj1m`o(V&_e>cAMB<=vAx!70&72S$c+=U3$)`JEBqS8Er06Dp`0Kg9f5#8zT z_Q$Y(V5lC+AM_>bF+-_bGyve3Snf2GOeZ0jp&=9+mT9KCjlgo}JU2=eu??XIo2k0n zJ0YyVFfzhW?|VJ8syPgSK;Xjs1F$amqq}tO%1kwoPN!l~C3&L83kx6tio@?g%XpE^Y+E~{BL&TV1 zF{W6IF%IYn+=vD}vZKO!&K!bOw`()$Dj1ePCh z5yer(nV7=1n`QU4tZtDTFq#=H)mo0umwJduwU=Y0u00gFc&5KIYS^{o ztC3VJeTta_z zqH-?4&~WM3GaRfFzA7G0=sR4c-a6uj->lG#m|dKgs8tKQRjq4wz1q#Sp6_L^vG6_n zl97mIrBCB)7ei8p74ELYq@Ri0XJp8|X6Iuxex}%we4^qc8gE62br#$FK`o+b@h>0l zx&G=-G!jPDRFe48;>JAF7b=mFk{RDVW@s=)qrm^vRS!hq4Oas6l*SoN<%3 za$hXVuGM)&KIsRjtbE+{I!Iw9gt&IUH-B=S6?_ur6#~>4KIn`B1|d3S_x3-wxT0^(UJo{-MuVfGwFqD_Rxju08hUxZws{ zu1-SNoc-;*vqa+?kI=^vIkH*rwHR(34HX;Jv-hl5&>tHw7Jf=gGLX7CE#xJ7iBm>F zEO=jC&_G$$Cf$Bjtl=JPk$OB!CaX&3>SDGvYbm-rZdR^V(s|MRy%%Y#5;*xgCv>#V z(mca*xq)BjRD)mP@Hgw8ZHvWbmokMb=F=>M&~b8uLYdfprbEYRNY2=BPdpM_Zv80a z`%u^-&C4Uuz$Ns}{4FJy4%4)I4%IyX-$E_Hfd zVYlhXtTjQj9u2m3++o9U?9;#-J+{RB0UwEI5$1UZXsgx(4=m>-6{ns9xiBu?9Sgko zBs!wK!#Bfh?z_*9Xish2=)nFL;xHAY3Vm#1IQ?njxyo}0p|p8e>}HHZ;^i)V<#(dAZgQ2K?K*|Nbue? zL^syn4PKjwTX?S+6$fLqfK1188*`(4D@DN}ixrQp#`IU>?9;x{Bo?{qF3IN|eHLFU zOs;5Y>bQezIyn7E=aHoZlFTR)$v#+3gSW$VKQyQzqUNA%6{@sJr6LPj+_S2ACC`1s jAvz~Udvo{BqvPf!6Q@h_ieiZFyf+5H+5ul->67q(P{pnO literal 0 HcmV?d00001