From a2fe3d9fc4f967b9d79346f358aaaf12eeb1e040 Mon Sep 17 00:00:00 2001 From: Jo-Philipp Wich Date: Fri, 21 Feb 2020 21:09:45 +0100 Subject: [PATCH] luci-mod-network: wifi scan: add button to start/stop refreshes Fixes: #3662 Signed-off-by: Jo-Philipp Wich --- .../resources/view/network/wireless.js | 39 +++++++++++++++++-- 1 file changed, 35 insertions(+), 4 deletions(-) diff --git a/modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js b/modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js index a4de1c17c..1aafb2b77 100644 --- a/modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js +++ b/modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js @@ -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) { -- 2.25.1