From 9c8395808c3ed785b77b7dc15b7c72e7a6844d1e Mon Sep 17 00:00:00 2001 From: psychobunny Date: Thu, 2 Oct 2014 18:29:40 -0400 Subject: [PATCH] use page visibility api instead of window.onblur this lib supports most major browsers --- public/src/app.js | 14 +++++++------- public/vendor/visibility/visibility.min.js | 1 + src/meta/js.js | 1 + 3 files changed, 9 insertions(+), 7 deletions(-) create mode 100644 public/vendor/visibility/visibility.min.js diff --git a/public/src/app.js b/public/src/app.js index 8138f956f2..5769353138 100644 --- a/public/src/app.js +++ b/public/src/app.js @@ -525,13 +525,13 @@ var socket, $('#logout-link').on('click', app.logout); - $window.blur(function(){ - app.isFocused = false; - }); - - $window.focus(function(){ - app.isFocused = true; - app.alternatingTitle(''); + Visibility.change(function(e, state){ + if (state === 'visible') { + app.isFocused = true; + app.alternatingTitle(''); + } else if (state === 'hidden') { + app.isFocused = false; + } }); createHeaderTooltips(); diff --git a/public/vendor/visibility/visibility.min.js b/public/vendor/visibility/visibility.min.js new file mode 100644 index 0000000000..3733ccd08a --- /dev/null +++ b/public/vendor/visibility/visibility.min.js @@ -0,0 +1 @@ +!function(e){"use strict";var i=-1,t={onVisible:function(e){var i=t.isSupported();if(!i||!t.hidden())return e(),i;var n=t.change(function(){t.hidden()||(t.unbind(n),e())});return n},change:function(e){if(!t.isSupported())return!1;i+=1;var n=i;return t._callbacks[n]=e,t._listen(),n},unbind:function(e){delete t._callbacks[e]},afterPrerendering:function(e){var i=t.isSupported(),n="prerender";if(!i||n!=t.state())return e(),i;var r=t.change(function(i,d){n!=d&&(t.unbind(r),e())});return r},hidden:function(){return!(!t._doc.hidden&&!t._doc.webkitHidden)},state:function(){return t._doc.visibilityState||t._doc.webkitVisibilityState||"visible"},isSupported:function(){return!(!t._doc.visibilityState&&!t._doc.webkitVisibilityState)},_doc:document||{},_callbacks:{},_change:function(e){var i=t.state();for(var n in t._callbacks)t._callbacks[n].call(t._doc,e,i)},_listen:function(){if(!t._init){var e="visibilitychange";t._doc.webkitVisibilityState&&(e="webkit"+e);var i=function(){t._change.apply(t,arguments)};t._doc.addEventListener?t._doc.addEventListener(e,i):t._doc.attachEvent(e,i),t._init=!0}}};"undefined"!=typeof module&&module.exports?module.exports=t:e.Visibility=t}(this),function(e){"use strict";var i=-1,t=function(t){return t.every=function(e,n,r){t._time(),r||(r=n,n=null),i+=1;var d=i;return t._timers[d]={visible:e,hidden:n,callback:r},t._run(d,!1),t.isSupported()&&t._listen(),d},t.stop=function(e){return t._timers[e]?(t._stop(e),delete t._timers[e],!0):!1},t._timers={},t._time=function(){t._timed||(t._timed=!0,t._wasHidden=t.hidden(),t.change(function(){t._stopRun(),t._wasHidden=t.hidden()}))},t._run=function(i,n){var r,d=t._timers[i];if(t.hidden()){if(null===d.hidden)return;r=d.hidden}else r=d.visible;var a=function(){d.last=new Date,d.callback.call(e)};if(n){var o=new Date,u=o-d.last;r>u?d.delay=setTimeout(function(){a(),d.id=setInterval(a,r)},r-u):(a(),d.id=setInterval(a,r))}else d.id=setInterval(a,r)},t._stop=function(e){var i=t._timers[e];clearInterval(i.id),clearTimeout(i.delay),delete i.id,delete i.delay},t._stopRun=function(){var e=t.hidden(),i=t._wasHidden;if(e&&!i||!e&&i)for(var n in t._timers)t._stop(n),t._run(n,!e)},t};"undefined"!=typeof module&&module.exports?module.exports=t(require("./visibility.core")):t(e.Visibility)}(window); \ No newline at end of file diff --git a/src/meta/js.js b/src/meta/js.js index 688e984ee7..131ae17b5b 100644 --- a/src/meta/js.js +++ b/src/meta/js.js @@ -31,6 +31,7 @@ module.exports = function(Meta) { 'public/vendor/jquery/js/jquery.form.min.js', 'public/vendor/jquery/serializeObject/jquery.ba-serializeobject.min.js', 'public/vendor/jquery/deserialize/jquery.deserialize.min.js', + 'public/vendor/visibility/visibility.min.js', 'public/vendor/bootstrap/js/bootstrap.min.js', 'public/vendor/jquery/bootstrap-tagsinput/bootstrap-tagsinput.min.js', 'public/vendor/requirejs/require.js',