VulpesOS/gaia/apps/settings/js/panels/wifi_wps/panel.js
OverSu b38dea0597 Publish Vulpes Preview 15 sources for desktop, Android and Tundra
Share Gaia assets and adapters, keep private profiles and development documents local, and update both public READMEs.
2026-09-30 23:13:03 +02:00

89 lines
3.1 KiB
JavaScript
Executable file

define(function(require) {
'use strict';
var DialogPanel = require('modules/dialog_panel');
var WifiWps = require('panels/wifi_wps/wifi_wps');
return function ctor_wpsWifi() {
var wifiWps = WifiWps();
var elements = {};
return DialogPanel({
onInit: function(panel) {
elements.panel = panel;
elements.submitWpsButton = panel.querySelector('button[type=submit]');
elements.apSelectionArea = panel.querySelector('.wifi-wps-pin-aps');
elements.apSelect = elements.apSelectionArea.querySelector('select');
elements.pinItem = panel.querySelector('.wifi-wps-pin-area');
elements.pinDesc = elements.pinItem.querySelector('p');
elements.pinInput = elements.pinItem.querySelector('input');
elements.wpsMethodRadios = panel.querySelectorAll('gaia-radio');
// Check validWpsPin each time when typing
elements.pinInput.oninput = function() {
elements.submitWpsButton.disabled =
!wifiWps._isValidWpsPin(elements.pinInput.value);
};
for (var i = 0; i < elements.wpsMethodRadios.length; i++) {
elements.wpsMethodRadios[i].onchange = this._onWpsMethodChange;
}
this._onWpsMethodChange();
},
onBeforeShow: function(panel, options) {
this._cleanupApList();
options.wpsAvailableNetworks().then((networks) => {
this._updateApList(networks);
});
},
onSubmit: function() {
var selectedAp = elements.apSelect.options[
elements.apSelect.selectedIndex].value;
var selectedMethod = elements.panel.querySelector(
'gaia-radio[checked]').value;
var pin = elements.pinInput.value;
return Promise.resolve({
selectedAp: selectedAp,
selectedMethod: selectedMethod,
pin: pin
});
},
_cleanupApList: function() {
var apSelect = elements.apSelect;
while (apSelect.hasChildNodes()) {
apSelect.removeChild(apSelect.firstChild);
}
},
_updateApList: function(wpsAvailableNetworks) {
// Add the first option
var option = document.createElement('option');
option.setAttribute('data-l10n-id', 'wpsAnyAp');
option.value = 'any';
elements.apSelect.appendChild(option);
// Add the other networks
for (var i = 0; i < wpsAvailableNetworks.length; i++) {
option = document.createElement('option');
option.textContent = wpsAvailableNetworks[i].ssid;
option.value = wpsAvailableNetworks[i].bssid;
elements.apSelect.appendChild(option);
}
},
_onWpsMethodChange: function() {
var method = elements.panel.querySelector(
'gaia-radio[checked]').value;
if (method === 'apPin') {
elements.submitWpsButton.disabled =
!wifiWps._isValidWpsPin(elements.pinInput.value);
elements.pinItem.hidden = false;
} else {
elements.submitWpsButton.disabled = false;
elements.pinItem.hidden = true;
}
elements.apSelectionArea.hidden = method === 'pbc';
}
});
};
});