luci-mod-network: wifi scan: add button to start/stop refreshes
authorJo-Philipp Wich <jo@mein.io>
Fri, 21 Feb 2020 20:09:45 +0000 (21:09 +0100)
committerJo-Philipp Wich <jo@mein.io>
Fri, 21 Feb 2020 20:09:45 +0000 (21:09 +0100)
Fixes: #3662
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js

index a4de1c17c048bb0f098c347eeb3c4f3d657551a6..1aafb2b77a13454c078781ef4cfd0e045315e480 100644 (file)
@@ -1744,27 +1744,37 @@ return L.view.extend({
                                ])
                        ]);
 
+                       var stop = E('button', {
+                               'class': 'btn',
+                               'click': L.bind(this.handleScanStartStop, this),
+                               'style': 'display:none',
+                               'data-state': 'stop'
+                       }, _('Stop refresh'));
+
                        cbi_update_table(table, [], E('em', { class: 'spinning' }, _('Starting wireless scan...')));
 
                        var md = ui.showModal(_('Join Network: Wireless Scan'), [
                                table,
-                               E('div', { 'class': 'right' },
+                               E('div', { 'class': 'right' }, [
+                                       stop,
+                                       ' ',
                                        E('button', {
                                                'class': 'btn',
                                                'click': L.bind(this.handleScanAbort, this)
-                                       }, _('Dismiss')))
+                                       }, _('Dismiss'))
+                               ])
                        ]);
 
                        md.style.maxWidth = '90%';
                        md.style.maxHeight = 'none';
 
-                       this.pollFn = L.bind(this.handleScanRefresh, this, radioDev, {}, table);
+                       this.pollFn = L.bind(this.handleScanRefresh, this, radioDev, {}, table, stop);
 
                        L.Poll.add(this.pollFn);
                        L.Poll.start();
                };
 
-               s.handleScanRefresh = function(radioDev, scanCache, table) {
+               s.handleScanRefresh = function(radioDev, scanCache, table, stop) {
                        return radioDev.getScanList().then(L.bind(function(results) {
                                var rows = [];
 
@@ -1816,9 +1826,30 @@ return L.view.extend({
                                }
 
                                cbi_update_table(table, rows);
+
+                               stop.disabled = false;
+                               stop.style.display = '';
+                               stop.classList.remove('spinning');
                        }, this));
                };
 
+               s.handleScanStartStop = function(ev) {
+                       var btn = ev.currentTarget;
+
+                       if (btn.getAttribute('data-state') == 'stop') {
+                               L.Poll.remove(this.pollFn);
+                               btn.firstChild.data = _('Start refresh');
+                               btn.setAttribute('data-state', 'start');
+                       }
+                       else {
+                               L.Poll.add(this.pollFn);
+                               btn.firstChild.data = _('Stop refresh');
+                               btn.setAttribute('data-state', 'stop');
+                               btn.classList.add('spinning');
+                               btn.disabled = true;
+                       }
+               };
+
                s.handleScanAbort = function(ev) {
                        var md = L.dom.parent(ev.target, 'div[aria-modal="true"]');
                        if (md) {