Skip to content

Commit

Permalink
update to stick to mrbkap’s latest API
Browse files Browse the repository at this point in the history
  • Loading branch information
fabi1cazenave committed Mar 9, 2012
1 parent 13991bc commit 8313439
Show file tree
Hide file tree
Showing 3 changed files with 112 additions and 52 deletions.
97 changes: 65 additions & 32 deletions apps/settings/js/wifi.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,36 +11,55 @@ window.addEventListener('DOMContentLoaded', function scanWifiNetworks(evt) {
var gList = document.querySelector('#wifi-networks');

// current state
// XXX we need an event to know when the wifi is reallly enabled/disabled,
// and this function should be called by an event listener.
function updateState() {
var currentNetwork = wifiManager.connected;
var enabledBox = document.querySelector('#wifi input[type=checkbox]');
if (currentNetwork) {
gStatus.textContent = 'connected to ' + currentNetwork.ssid + '.';
enabledBox.checked = true;
} else if (wifiManager.enabled) {
}
else if (wifiManager.enabled) {
gStatus.textContent = 'offline';
enabledBox.checked = true;
} else {
}
else {
gStatus.textContent = 'disabled';
enabledBox.checked = false;
}
}

// toggle wifi on/off
document.querySelector('#status input').onchange = function() {
while (gList.hasChildNodes())
gList.removeChild(gList.lastChild);

var req;
if (wifiManager.enabled) {
req = wifiManager.setEnabled(false);
while (gList.hasChildNodes())
gList.removeChild(gList.lastChild);
updateState();
} else {
wifiManager.setEnabled(true);
}
else {
req = wifiManager.setEnabled(true);
gList.appendChild(newScanItem());
wifiScanNetworks();
updateState();
}
req.onsuccess = updateState;
}

function newScanItem() {
var a = document.createElement('a');
a.textContent = 'Scanning…';

var span = document.createElement('span');
span.className = 'wifi-search';

var label = document.createElement('label');
label.appendChild(span);

var li = document.createElement('li');
li.appendChild(a);
li.appendChild(label);

return li;
}

function newListItem(network) {
Expand All @@ -58,13 +77,14 @@ window.addEventListener('DOMContentLoaded', function scanWifiNetworks(evt) {

// supported authentication methods
var small = document.createElement('small');
var keys = network.keyManagement;
var keys = network.capabilities;
if (keys && keys.length) {
small.textContent = 'secured by ' + keys.join(', ');
var secure = document.createElement('span');
secure.className = 'wifi-secure';
label.appendChild(secure);
} else {
}
else {
small.textContent = 'open';
}

Expand All @@ -84,7 +104,7 @@ window.addEventListener('DOMContentLoaded', function scanWifiNetworks(evt) {
function wifiConnect(network) {
var connection = wifiManager.select(network);
connection.onsuccess = function() {
gStatus.textContent = 'Connecting to ' + network.ssid + '…';
gStatus.textContent = 'connecting to ' + network.ssid + '…';
};
connection.onerror = function() {
gStatus.textContent = connection.error.name;
Expand All @@ -97,16 +117,16 @@ window.addEventListener('DOMContentLoaded', function scanWifiNetworks(evt) {

// mozWifiManager events / callbacks
wifiManager.onassociate = function(event) {
var ssid = event.network ? (' from ' + event.network.id) : '';
var ssid = event.network ? (' from ' + event.network.ssid) : '';
gStatus.textContent = 'obtaining an IP address' + ssid + '…';
};

wifiManager.onconnect = function(event) {
var ssid = event.network ? (' to ' + event.network.id) : '';
var ssid = event.network ? (' to ' + event.network.ssid) : '';
gStatus.textContent = 'connected' + ssid + '.';
};

wifiManager.ondisconnect = function() {
wifiManager.ondisconnect = function(event) {
gStatus.textContent = 'offline';
};

Expand Down Expand Up @@ -141,10 +161,14 @@ window.addEventListener('DOMContentLoaded', function scanWifiNetworks(evt) {
}
else {
// offline: offer to connect
if (/EAP$/.test(network.keyManagement)) {
var key = network.capabilities[0];
if (/WEP$/.test(key)) {
wifiDialog('#wifi-wep', network, wifiConnect);
}
else if (/EAP$/.test(key)) {
wifiDialog('#wifi-eap', network, wifiConnect);
}
else if (/PSK$/.test(network.keyManagement)) {
else if (/PSK$/.test(key)) {
wifiDialog('#wifi-psk', network, wifiConnect);
}
else {
Expand All @@ -155,18 +179,15 @@ window.addEventListener('DOMContentLoaded', function scanWifiNetworks(evt) {

function wifiDialog(selector, network, callback) {
var dialog = document.querySelector(selector);
if (!dialog)
return;

if (!network)
throw 'no network!';
if (!dialog || !network)
return null;

// network info
var ssid = dialog.querySelector('*[data-ssid]');
if (ssid)
ssid.textContent = network.ssid;

var keys = network.keyManagement;
var keys = network.capabilities;
var security = dialog.querySelector('*[data-security]');
if (security)
security.textContent = (keys && keys.length) ? keys.join(', ') : 'none';
Expand Down Expand Up @@ -199,26 +220,38 @@ window.addEventListener('DOMContentLoaded', function scanWifiNetworks(evt) {
dialog.classList.remove('active');
}

// OK|Cancel
// OK|Cancel buttons
var buttons = dialog.querySelectorAll('footer button');

var okButton = buttons[0];
okButton.onclick = function() {
close();
if (identity)
network.identity = identity.value;
if (password) {
network.password = password.value;
// XXX temporary workaround:
// the API should not require to assign any string to 'keyManagement',
// which is an *array*. A distinct property will be used instead.
network.keyManagement = network.keyManagement[0];
var key = network.capabilities[0];
var keyManagement = '';
if (/WEP$/.test(key)) {
keyManagement = 'WEP';
network.wep = password.value;
}
else if (/PSK$/.test(key)) {
keyManagement = 'WPA-PSK';
network.psk = password.value;
}
else if (/EAP$/.test(key)) {
keyManagement = 'WPA-EAP';
network.password = password.value;
}
network.keyManagement = keyManagement;
}
return callback ? callback(network) : null;
return callback ? callback(network) : false;
};

var cancelButton = buttons[1];
cancelButton.onclick = function() {
close();
return null;
return;
};

// show dialog box
Expand Down
32 changes: 26 additions & 6 deletions apps/settings/settings.html
Original file line number Diff line number Diff line change
Expand Up @@ -94,12 +94,7 @@ <h2>Settings</h2>
</ul>
<h2> Wi-Fi networks </h2>
<ul id="wifi-networks">
<li>
<a>Scanning…</a>
<label>
<span class="wifi-search"></span>
</label>
</li>
<!-- filled by wifi.js -->
</ul>
</div>

Expand Down Expand Up @@ -322,6 +317,31 @@ <h2>Layouts</h2>
</footer>
</div>

<!-- WEP authentication -->
<div id="wifi-wep" class="dialog">
<header data-ssid>Authentication</header>
<dl>
<dt>security:</dt>
<dd data-security>WPA-WEP</dd>
<dt>signal strength:</dt>
<dd data-signal>good</dd>
</dl>
<form action="#">
<label>
password
<input data-wep name="password" type="password" />
</label>
<label>
<input name="show-pwd" type="checkbox" />
show password
</label>
</form>
<footer>
<button>OK</button>
<button>Cancel</button>
</footer>
</div>

<!-- PSK authentication -->
<div id="wifi-psk" class="dialog">
<header data-ssid>Authentication</header>
Expand Down
35 changes: 21 additions & 14 deletions webapi.js
Original file line number Diff line number Diff line change
Expand Up @@ -1537,36 +1537,41 @@

/** fake network list, where each network object looks like:
* {
* ssid : SSID string (human-readable name)
* bssid : network identifier string
* keyManagement : array of strings (supported authentication methods)
* signal : 0-100 signal level (integer)
* ssid : SSID string (human-readable name)
* bssid : network identifier string
* capabilities : array of strings (supported authentication methods)
* signal : 0-100 signal level (integer)
* connected : boolean state
* }
*/
var fakeNetworks = {
'Mozilla-G': {
ssid: 'Mozilla-G',
bssid: 'xx:xx:xx:xx:xx:xx',
keyManagement: ['WPA-EAP'],
signal: 67
capabilities: ['WPA-EAP'],
signal: 67,
connected: false
},
'Livebox 6752': {
ssid: 'Livebox 6752',
bssid: 'xx:xx:xx:xx:xx:xx',
keyManagement: ['WEP'],
signal: 32
capabilities: ['WEP'],
signal: 32,
connected: false
},
'Mozilla Guest': {
ssid: 'Mozilla Guest',
bssid: 'xx:xx:xx:xx:xx:xx',
keyManagement: [],
signal: 98
capabilities: [],
signal: 98,
connected: false
},
'Freebox 8953': {
ssid: 'Freebox 8953',
bssid: 'xx:xx:xx:xx:xx:xx',
keyManagement: ['WPA2'],
signal: 89
capabilities: ['WPA2-PSK'],
signal: 89,
connected: false
}
};

Expand All @@ -1576,13 +1581,15 @@

// enables/disables the wifi
setEnabled: function fakeSetEnabled(bool) {
var self = this;
var request = { result: bool };

setTimeout(function() {
if (request.onsuccess)
request.onsuccess();
}, 0);

self.enabled = bool;
return request;
},

Expand All @@ -1593,7 +1600,7 @@
setTimeout(function() {
if (request.onsuccess)
request.onsuccess();
}, 0);
}, 2000);

return request;
},
Expand All @@ -1602,7 +1609,7 @@
select: function(network) {
var self = this;
var connection = { result: network };
var networkEvent = { id: network.ssid };
var networkEvent = { network: network };

setTimeout(function() {
if (connection.onsuccess)
Expand Down

0 comments on commit 8313439

Please sign in to comment.