Projet

Général

Profil

0001-do-not-refresh-table-when-tab-is-invisible-or-user-i.patch

Benjamin Dauvergne, 28 septembre 2018 12:39

Télécharger (2,59 ko)

Voir les différences:

Subject: [PATCH] do not refresh table when tab is invisible or user idle
 (#26804)

* refresh timer is cleared on tab invisible event
* refresh timer is cleared after 5 minutes of inactivity
* table is refreshed immediately when tab become visible and user has been inactive
more than 5 minutes
 wcs/qommon/static/js/wcs.listing.js | 42 +++++++++++++++++++++++++++++
 1 file changed, 42 insertions(+)
wcs/qommon/static/js/wcs.listing.js
1
/**
2
 * vis() -> bool : is tab visible ?
3
 * vis(aFunction) -> call aFunction on visibility change.
4
 */
5
var vis = (function(){
6
    var stateKey, eventKey, keys = {
7
        hidden: "visibilitychange",
8
        webkitHidden: "webkitvisibilitychange",
9
        mozHidden: "mozvisibilitychange",
10
        msHidden: "msvisibilitychange"
11
    };
12
    for (stateKey in keys) {
13
        if (stateKey in document) {
14
            eventKey = keys[stateKey];
15
            break;
16
        }
17
    }
18
    return function(c) {
19
        if (c) document.addEventListener(eventKey, c);
20
        return !document[stateKey];
21
    }
22
})();
23

  
1 24
function prepare_page_links() {
2 25
  $('#page-links a').click(function() {
3 26
    $('form#listing-settings input[name="offset"]').val($(this).data('offset'));
......
184 207

  
185 208
  if ($('#statistics').length == 0) {
186 209
    var idle_id = null;
210
    var longidle_id = null;
211
    vis(function () {
212
      if (! vis()) {
213
        /* stop refreshing in invisible tabs */
214
        if (idle_id) idle_id = window.clearInterval(idle_id);
215
      } else {
216
        /* if tab invisible for more than 5 minutes, refresh now */
217
        if (! longidle_id) refresh_table();
218
      }
219
    }
187 220
    $(window).on('mousemove keydown mousedown touchstart', function() {
221
      /* if refresh timer exists, clear it */
188 222
      if (idle_id) window.clearInterval(idle_id);
223
      /* if stop refresh timer exists, clear it */
224
      if (longidle_id) window.clearTimeout(longidle_id);
225
      /* launch timer to refresh every 30 seconds */
189 226
      idle_id = setInterval(refresh_table, 30000);
227
      /* launch timer to stop refresh after 5 minutes idle */
228
      longidle_id = setTimeout(function () {
229
          if (idle_id) idle_id = window.clearInterval(idle_id);
230
          longidle_id = undefined;
231
      }, 300 * 1000);
190 232
    });
191 233
  }
192 234

  
193
-