Committed by
Gerrit Code Review
ONOS-3747: Delayed start refactored into LoadingService.
Change-Id: I07d3c3ffdfe6b207aa21e7b9e470b037a3cffb9b
Showing
2 changed files
with
34 additions
and
27 deletions
1 | /* | 1 | /* |
2 | - * Copyright 2015 Open Networking Laboratory | 2 | + * Copyright 2015,2016 Open Networking Laboratory |
3 | * | 3 | * |
4 | * Licensed under the Apache License, Version 2.0 (the "License"); | 4 | * Licensed under the Apache License, Version 2.0 (the "License"); |
5 | * you may not use this file except in compliance with the License. | 5 | * you may not use this file except in compliance with the License. |
... | @@ -29,14 +29,16 @@ | ... | @@ -29,14 +29,16 @@ |
29 | var id = 'loading-anim', | 29 | var id = 'loading-anim', |
30 | dir = 'data/img/loading/', | 30 | dir = 'data/img/loading/', |
31 | pfx = '/load-', | 31 | pfx = '/load-', |
32 | - speed = 100; | 32 | + speed = 100, |
33 | + waitDelay = 500; | ||
33 | 34 | ||
34 | // internal state | 35 | // internal state |
35 | var div, | 36 | var div, |
36 | img, | 37 | img, |
37 | th, | 38 | th, |
38 | idx, | 39 | idx, |
39 | - task; | 40 | + task, |
41 | + wait; | ||
40 | 42 | ||
41 | function fname(i) { | 43 | function fname(i) { |
42 | var z = i > 9 ? '' : '0'; | 44 | var z = i > 9 ? '' : '0'; |
... | @@ -50,7 +52,7 @@ | ... | @@ -50,7 +52,7 @@ |
50 | } | 52 | } |
51 | 53 | ||
52 | // start displaying 'loading...' animation (idempotent) | 54 | // start displaying 'loading...' animation (idempotent) |
53 | - function start() { | 55 | + function startAnim() { |
54 | th = ts.theme(); | 56 | th = ts.theme(); |
55 | div = d3.select('#'+id); | 57 | div = d3.select('#'+id); |
56 | if (div.empty()) { | 58 | if (div.empty()) { |
... | @@ -62,7 +64,7 @@ | ... | @@ -62,7 +64,7 @@ |
62 | } | 64 | } |
63 | 65 | ||
64 | // stop displaying 'loading...' animation (idempotent) | 66 | // stop displaying 'loading...' animation (idempotent) |
65 | - function stop() { | 67 | + function stopAnim() { |
66 | if (task) { | 68 | if (task) { |
67 | $timeout.cancel(task); | 69 | $timeout.cancel(task); |
68 | task = null; | 70 | task = null; |
... | @@ -70,6 +72,25 @@ | ... | @@ -70,6 +72,25 @@ |
70 | d3.select('#'+id).remove(); | 72 | d3.select('#'+id).remove(); |
71 | } | 73 | } |
72 | 74 | ||
75 | + // schedule function to start animation in the future | ||
76 | + function start() { | ||
77 | + wait = $timeout(startAnim, waitDelay); | ||
78 | + } | ||
79 | + | ||
80 | + // cancel future start, if any; stop the animation | ||
81 | + function stop() { | ||
82 | + if (wait) { | ||
83 | + $timeout.cancel(wait); | ||
84 | + wait = null; | ||
85 | + } | ||
86 | + stopAnim(); | ||
87 | + } | ||
88 | + | ||
89 | + // return true if start() has been called but not stop() | ||
90 | + function waiting() { | ||
91 | + return !!wait; | ||
92 | + } | ||
93 | + | ||
73 | angular.module('onosLayer') | 94 | angular.module('onosLayer') |
74 | .factory('LoadingService', ['$log', '$timeout', 'ThemeService', | 95 | .factory('LoadingService', ['$log', '$timeout', 'ThemeService', |
75 | function (_$log_, _$timeout_, _ts_) { | 96 | function (_$log_, _$timeout_, _ts_) { |
... | @@ -79,7 +100,8 @@ | ... | @@ -79,7 +100,8 @@ |
79 | 100 | ||
80 | return { | 101 | return { |
81 | start: start, | 102 | start: start, |
82 | - stop: stop | 103 | + stop: stop, |
104 | + waiting: waiting | ||
83 | }; | 105 | }; |
84 | }]); | 106 | }]); |
85 | 107 | ... | ... |
1 | /* | 1 | /* |
2 | - * Copyright 2015 Open Networking Laboratory | 2 | + * Copyright 2015,2016 Open Networking Laboratory |
3 | * | 3 | * |
4 | * Licensed under the Apache License, Version 2.0 (the "License"); | 4 | * Licensed under the Apache License, Version 2.0 (the "License"); |
5 | * you may not use this file except in compliance with the License. | 5 | * you may not use this file except in compliance with the License. |
... | @@ -24,8 +24,7 @@ | ... | @@ -24,8 +24,7 @@ |
24 | var $log, $interval, $timeout, fs, wss, ls; | 24 | var $log, $interval, $timeout, fs, wss, ls; |
25 | 25 | ||
26 | // constants | 26 | // constants |
27 | - var refreshInterval = 2000, | 27 | + var refreshInterval = 2000; |
28 | - tardyWait = 500; | ||
29 | 28 | ||
30 | // example params to buildTable: | 29 | // example params to buildTable: |
31 | // { | 30 | // { |
... | @@ -49,8 +48,7 @@ | ... | @@ -49,8 +48,7 @@ |
49 | onResp = fs.isF(o.respCb), | 48 | onResp = fs.isF(o.respCb), |
50 | idKey = o.idKey || 'id', | 49 | idKey = o.idKey || 'id', |
51 | oldTableData = [], | 50 | oldTableData = [], |
52 | - refreshPromise, | 51 | + refreshPromise; |
53 | - tardyPromise; | ||
54 | 52 | ||
55 | o.scope.tableData = []; | 53 | o.scope.tableData = []; |
56 | o.scope.changedData = []; | 54 | o.scope.changedData = []; |
... | @@ -61,7 +59,6 @@ | ... | @@ -61,7 +59,6 @@ |
61 | // === websocket functions -------------------- | 59 | // === websocket functions -------------------- |
62 | // response | 60 | // response |
63 | function respCb(data) { | 61 | function respCb(data) { |
64 | - cancelTardy(); | ||
65 | ls.stop(); | 62 | ls.stop(); |
66 | o.scope.tableData = data[root]; | 63 | o.scope.tableData = data[root]; |
67 | o.scope.annots = data.annots; | 64 | o.scope.annots = data.annots; |
... | @@ -85,24 +82,12 @@ | ... | @@ -85,24 +82,12 @@ |
85 | handlers[resp] = respCb; | 82 | handlers[resp] = respCb; |
86 | wss.bindHandlers(handlers); | 83 | wss.bindHandlers(handlers); |
87 | 84 | ||
88 | - // handle "loading..." animation | ||
89 | - function scheduleTardy() { | ||
90 | - tardyPromise = $timeout(ls.start, tardyWait); | ||
91 | - } | ||
92 | - | ||
93 | - function cancelTardy() { | ||
94 | - if (tardyPromise) { | ||
95 | - $timeout.cancel(tardyPromise); | ||
96 | - tardyPromise = null; | ||
97 | - } | ||
98 | - } | ||
99 | - | ||
100 | // request | 85 | // request |
101 | function sortCb(params) { | 86 | function sortCb(params) { |
102 | var p = angular.extend({}, params, o.query); | 87 | var p = angular.extend({}, params, o.query); |
103 | if (wss.isConnected()) { | 88 | if (wss.isConnected()) { |
104 | wss.sendEvent(req, p); | 89 | wss.sendEvent(req, p); |
105 | - scheduleTardy(); | 90 | + ls.start(); |
106 | } | 91 | } |
107 | } | 92 | } |
108 | o.scope.sortCallback = sortCb; | 93 | o.scope.sortCallback = sortCb; |
... | @@ -118,7 +103,7 @@ | ... | @@ -118,7 +103,7 @@ |
118 | 103 | ||
119 | // === autoRefresh functions ------------------ | 104 | // === autoRefresh functions ------------------ |
120 | function fetchDataIfNotWaiting() { | 105 | function fetchDataIfNotWaiting() { |
121 | - if (!tardyPromise) { | 106 | + if (!ls.waiting()) { |
122 | if (fs.debugOn('widget')) { | 107 | if (fs.debugOn('widget')) { |
123 | $log.debug('Refreshing ' + root + ' page'); | 108 | $log.debug('Refreshing ' + root + ' page'); |
124 | } | 109 | } |
... | @@ -147,7 +132,7 @@ | ... | @@ -147,7 +132,7 @@ |
147 | o.scope.$on('$destroy', function () { | 132 | o.scope.$on('$destroy', function () { |
148 | wss.unbindHandlers(handlers); | 133 | wss.unbindHandlers(handlers); |
149 | stopRefresh(); | 134 | stopRefresh(); |
150 | - cancelTardy(); | 135 | + ls.stop(); |
151 | }); | 136 | }); |
152 | 137 | ||
153 | sortCb(o.scope.sortParams); | 138 | sortCb(o.scope.sortParams); | ... | ... |
-
Please register or login to post a comment