[PATCH 1/1] Use pure.css for SSL WebUI

Dominik Heidler dominik at heidler.eu
Do Jan 28 17:09:33 CET 2016


Signed-off-by: Dominik Heidler <dominik at heidler.eu>
---
 .../fff/fff-web/files/www/public/cgi-bin/status    |   2 +-
 .../fff/fff-web/files/www/public/css/style.css     |  38 +++-
 .../fff/fff-web/files/www/ssl/cgi-bin/home         |   1 +
 src/packages/fff/fff-web/files/www/ssl/css         |   1 +
 src/packages/fff/fff-web/files/www/ssl/home.html   |  62 +++---
 src/packages/fff/fff-web/files/www/ssl/home.js     |   4 +
 src/packages/fff/fff-web/files/www/ssl/index.html  |  27 ++-
 .../fff/fff-web/files/www/ssl/password.html        |  17 +-
 .../fff/fff-web/files/www/ssl/settings.html        |  13 +-
 src/packages/fff/fff-web/files/www/ssl/settings.js |  20 +-
 src/packages/fff/fff-web/files/www/ssl/shared.js   |  50 +++--
 src/packages/fff/fff-web/files/www/ssl/style.css   | 226 ---------------------
 .../fff/fff-web/files/www/ssl/upgrade.html         |  15 +-
 .../fff/fff-web/files/www/ssl/wifiscan.html        |  11 +-
 src/packages/fff/fff-web/files/www/ssl/wifiscan.js |   2 +-
 15 files changed, 168 insertions(+), 321 deletions(-)
 create mode 120000 src/packages/fff/fff-web/files/www/ssl/css
 delete mode 100644 src/packages/fff/fff-web/files/www/ssl/style.css

diff --git a/src/packages/fff/fff-web/files/www/public/cgi-bin/status b/src/packages/fff/fff-web/files/www/public/cgi-bin/status
index fa837af..087a318 100755
--- a/src/packages/fff/fff-web/files/www/public/cgi-bin/status
+++ b/src/packages/fff/fff-web/files/www/public/cgi-bin/status
@@ -39,7 +39,7 @@ if [ -n "$position_comment" ]; then
 	echo "				<li><a href='#'>${position_comment}</a></li>"
 fi
 %>
-				<li><form action="https://<% echo -n "$HTTP_HOST" %>"><button type="submit" class="pure-button">Login</button></form></li>
+				<li><form action="https://<% echo -n "$HTTP_HOST" %>"><button type="submit" class="pure-button pure-button-primary">Login</button></form></li>
 			</ul>
 		</div>
 	</div>
diff --git a/src/packages/fff/fff-web/files/www/public/css/style.css b/src/packages/fff/fff-web/files/www/public/css/style.css
index a194087..2b4f818 100644
--- a/src/packages/fff/fff-web/files/www/public/css/style.css
+++ b/src/packages/fff/fff-web/files/www/public/css/style.css
@@ -26,9 +26,6 @@ label {
 }
 
 .pure-button {
-	background-color: #1f8dd6;
-	color: white;
-	padding: 0.5em 2em;
 	border-radius: 5px;
 }
 
@@ -63,12 +60,15 @@ a.pure-button-primary {
 	color: #6FBEF3;
 }
 
-.home-menu li a:hover,
-.home-menu li a:focus {
+.home-menu li a:hover {
 	background: none;
 	color: #AECFE5;
 }
 
+.home-menu li a:focus {
+	background: none;
+}
+
 .home-menu {
 	text-align: left;
 }
@@ -76,3 +76,31 @@ a.pure-button-primary {
 .home-menu ul {
 	float: right;
 }
+
+li { list-style-type: none; }
+
+.pure-form-aligned div.pure-control-group > label {
+	width: 11.5em;
+}
+
+fieldset > legend {
+	font-weight: bold;
+}
+
+span > label {
+	width: auto !important;
+	margin: 0 1em 0 3px !important;
+}
+
+.formtable th {
+	padding-right: 5px;
+	text-align: right;
+	vertical-align: top;
+	color: #34495e;
+	font-weight: normal;
+}
+
+.formtable ul {
+	margin: 0;
+	padding: 0;
+}
diff --git a/src/packages/fff/fff-web/files/www/ssl/cgi-bin/home b/src/packages/fff/fff-web/files/www/ssl/cgi-bin/home
index 7b04b05..b696fb2 100755
--- a/src/packages/fff/fff-web/files/www/ssl/cgi-bin/home
+++ b/src/packages/fff/fff-web/files/www/ssl/cgi-bin/home
@@ -43,6 +43,7 @@ print 'date' "$(date)"
 
 if [ $(sockread /var/run/fastd.status < /dev/null 2> /dev/null | grep  -c '"connection": {') -gt 0 ]; then
 	print 'has_vpn' 'Ja'
+	printList 'fastd_peer' "$(cd /etc/fastd/fff/peers/; ls)"
 else
 	print 'has_vpn' 'Nein'
 fi
diff --git a/src/packages/fff/fff-web/files/www/ssl/css b/src/packages/fff/fff-web/files/www/ssl/css
new file mode 120000
index 0000000..0a52d25
--- /dev/null
+++ b/src/packages/fff/fff-web/files/www/ssl/css
@@ -0,0 +1 @@
+../public/css
\ No newline at end of file
diff --git a/src/packages/fff/fff-web/files/www/ssl/home.html b/src/packages/fff/fff-web/files/www/ssl/home.html
index 3cb0583..023c33f 100644
--- a/src/packages/fff/fff-web/files/www/ssl/home.html
+++ b/src/packages/fff/fff-web/files/www/ssl/home.html
@@ -4,51 +4,63 @@
 <head>
 <title>Home</title>
 <meta charset="utf-8"/>
-<link rel="stylesheet" type="text/css" href="style.css" />
 <script src="shared.js"></script>
 <script src="home.js"></script>
 </head>
 <body onload="init();">
 
+<div class="content">
+<div class="pure-form pure-form-aligned">
 <fieldset>
 <legend id="system">System</legend>
-<div><label>Name: </label><span id="name">?</span></div>
-<div><label>Modell: </label><span id="model">?</span></div>
-<div><label>MAC-Adresse: </label><span id="mac">?</span></div>
-<div><label>Bekannte Knoten: </label><span id="node_count">?</span></div>
-<div><label>Nachbarknoten: </label><span id="neigh_count">?</span></div>
-<div><label>VPN aktiv: </label><span id="has_vpn">?</span></div>
-<div><label>Laufzeit: </label><span id="uptime">?</span></div>
-<div><label>Auslastung: </label><span id="load">?</span></div>
-<div><label>System: </label><span id="uname">?</span></div>
-<div><label>Uhrzeit: </label><span id="date">?</span></div>
+<table class="formtable">
+<tr><th>Name:</th><td id="name">?</td></tr>
+<tr><th>Modell:</th><td id="model">?</td></tr>
+<tr><th>MAC-Adresse:</th><td id="mac">?</td></tr>
+<tr><th>Bekannte Knoten:</th><td id="node_count">?</td></tr>
+<tr><th>Nachbarknoten:</th><td id="neigh_count">?</td></tr>
+<tr><th>VPN aktiv:</th><td id="has_vpn">?</td></tr>
+<tr><th>Laufzeit:</th><td id="uptime">?</td></tr>
+<tr><th>Auslastung:</th><td id="load">?</td></tr>
+<tr><th>System:</th><td id="uname">?</td></tr>
+<tr><th>Uhrzeit:</th><td id="date">?</td></tr>
+<tr><th>VPN Gateways:</th><td id="fastd_peer">keine</td></tr>
+</table>
 </fieldset>
 
 <fieldset>
 <legend id="freifunk">Netz: Freifunk</legend>
-<div><label>Nutzer: </label><span id="freifunk_user_count">?</span></div>
-<div><label>Empfangen: </label><span id="freifunk_rx_bytes">?</span> </div>
-<div><label>Gesendet: </label><span id="freifunk_tx_bytes">?</span></div>
-<div><label>IPv4 Adressen: </label><span id="freifunk_addr4">?</span></div>
-<div><label>IPv6 Adressen: </label><span id="freifunk_addr6">?</span></div>
+<table class="formtable">
+<tr><th>Nutzer:</th><td id="freifunk_user_count">?</td></tr>
+<tr><th>Empfangen:</th><td id="freifunk_rx_bytes">?</td></tr>
+<tr><th>Gesendet:</th><td id="freifunk_tx_bytes">?</td></tr>
+<tr><th>IPv4 Adressen:</th><td id="freifunk_addr4">?</td></tr>
+<tr><th>IPv6 Adressen:</th><td id="freifunk_addr6">?</td></tr>
+</table>
 </fieldset>
 
 <fieldset>
 <legend id="wan">Netz: WAN</legend>
-<div><label>Internet Vorhanden: </label><span id="has_internet">?</span></div>
-<div><label>Empfangen: </label><span id="wan_rx_bytes">?</span> </div>
-<div><label>Gesendet: </label><span id="wan_tx_bytes">?</span></div>
-<div><label>IPv4 Adressen: </label><span id="wan_addr4">?</span></div>
-<div><label>IPv6 Adressen: </label><span id="wan_addr6">?</span></div>
+<table class="formtable">
+<tr><th>Internet vorhanden:</th><td id="has_internet">?</td></tr>
+<tr><th>Empfangen:</th><td id="wan_rx_bytes">?</td></tr>
+<tr><th>Gesendet:</th><td id="wan_tx_bytes">?</td></tr>
+<tr><th>IPv4 Adressen:</th><td id="wan_addr4">?</td></tr>
+<tr><th>IPv6 Adressen:</th><td id="wan_addr6">?</td></tr>
+</table>
 </fieldset>
 
 <fieldset>
 <legend id="software">Software</legend>
-<div><label>Firmware Version: </label><span id="firmware_version">?</span></div>
-<div><label>OpenWrt Version: </label><span id="openwrt_version">?</span></div>
-<div><label>Batman-Adv Version: </label><span id="batman_version">?</span></div>
-<div><label>Fastd Version: </label><span id="fastd_version">?</span></div>
+<table class="formtable">
+<tr><th>Firmware Version:</th><td id="firmware_version">?</td></tr>
+<tr><th>OpenWrt Version:</th><td id="openwrt_version">?</td></tr>
+<tr><th>Batman-Adv Version:</th><td id="batman_version">?</td></tr>
+<tr><th>Fastd Version:</th><td id="fastd_version">?</td></tr>
+</table>
 </fieldset>
+</div>
+</div>
 
 </body>
 </html>
diff --git a/src/packages/fff/fff-web/files/www/ssl/home.js b/src/packages/fff/fff-web/files/www/ssl/home.js
index da12f32..289c746 100644
--- a/src/packages/fff/fff-web/files/www/ssl/home.js
+++ b/src/packages/fff/fff-web/files/www/ssl/home.js
@@ -23,6 +23,10 @@ function init() {
 				continue;
 			}
 
+			if (key == 'name') {
+				document.getElementsByTagName("title")[0].innerHTML = "FFF Router :: " + value;
+			}
+
 			//for traffic
 			if(/_bytes$/.test(key)) {
 				value = formatSize(value);
diff --git a/src/packages/fff/fff-web/files/www/ssl/index.html b/src/packages/fff/fff-web/files/www/ssl/index.html
index cc6cff7..ab5c91e 100644
--- a/src/packages/fff/fff-web/files/www/ssl/index.html
+++ b/src/packages/fff/fff-web/files/www/ssl/index.html
@@ -2,9 +2,12 @@
 
 <html>
 <head>
-<title>Freifunk</title>
+<title>FFF Router</title>
 <meta charset="utf-8"/>
-<link rel="stylesheet" type="text/css" href="style.css" />
+<link rel="stylesheet" href="/css/pure-min.css">
+<link rel="stylesheet" href="/css/side-menu.css">
+<link rel="stylesheet" href="/css/grids-responsive-min.css">
+<link rel="stylesheet" href="/css/style.css">
 <script src="shared.js"></script>
 
 <script type="text/javascript">
@@ -28,6 +31,7 @@ function adv_toggle(e)
 	adv_mode = !adv_mode;
 	e.innerHTML = adv_mode ? "Erweitert: An" : "Erweitert: Aus";
 	adv_apply();
+	document.activeElement.blur();
 }
 
 function nav_onclick() 
@@ -70,8 +74,9 @@ function nav_onclick()
 	onParents(this, 'UL', function(n) { show(n); });
 	onChilds(this.parentNode, 'UL', function(n) { show(n); });
 
-	onDesc($("globalnav"), 'A', function(n) { removeClass(n, "here"); });
-	onParents(this, 'LI', function(n) { addClass(n.firstChild, "here"); });
+	onDesc($("globalnav"), 'LI', function(n) { removeClass(n, "pure-menu-selected"); });
+	onParents(this, 'LI', function(n) { addClass(n, "pure-menu-selected"); });
+	document.activeElement.blur();
 
 	return false;
 }
@@ -86,6 +91,7 @@ function preselect() {
 }
 
 function reboot() {
+	document.activeElement.blur();
 	if(!confirm("Neustart durchf\xFChren?")) return;
 	send("/cgi-bin/misc", { func : "reboot" }, function(data) {
 		setText('msg', data);
@@ -99,7 +105,9 @@ function logout() {
 
 </head>
 <body onload="preselect();">
-
+<div class="header">
+<div class="home-menu pure-menu pure-menu-open pure-menu-horizontal pure-menu-fixed">
+<a class="pure-menu-heading" href="http://www.freifunk-franken.de">freifunk-franken.de</a>
 <ul id="globalnav">
 	<li><a href="home.html" id="first">Home</a></li>
 	<li><a href="settings.html">Einstellungen</a></li>
@@ -107,13 +115,14 @@ function logout() {
 	<li><a href="upgrade.html">Upgrade</a></li>
 	<li><a href="password.html">Password</a></li>
 	<li><a href="#" onclick="reboot()">Neustart</a></li>
-	<li><a href="#" onclick="logout()">Logout</a></li>
 	<li><a href="#" onclick="adv_toggle(this)">Erweitert: Aus</a></li>
+	<li><button class="pure-button pure-button-primary" onclick="logout()">Logout</button></li>
 </ul>
-<br>
-<pre id="msg" tabindex="-1"></pre>
+</div>
+</div>
 
-<div id="help"></div>
+<br>
+<div class="content" style="margin-bottom: 0;"><pre id="msg" tabindex="-1"></pre></div>
 
 <div id="body"></div>
 
diff --git a/src/packages/fff/fff-web/files/www/ssl/password.html b/src/packages/fff/fff-web/files/www/ssl/password.html
index 08f10b4..f33cf26 100644
--- a/src/packages/fff/fff-web/files/www/ssl/password.html
+++ b/src/packages/fff/fff-web/files/www/ssl/password.html
@@ -4,24 +4,27 @@
 <head>
 <title>Password</title>
 <meta charset="utf-8"/>
-<link rel="stylesheet" type="text/css" href="style.css" />
 <script src="shared.js"></script>
 <script src="password.js"></script>
 </head>
 <body onload="init();">
 
+<div class="content">
+<form class="pure-form pure-form-aligned">
 <fieldset>
 	<legend>Passwort</legend>
-	<div>
-		<label>Neues Password:</label> <input id="p1" type="password">
+	<div class="pure-control-group">
+		<label>Neues Password:</label><input id="p1" type="password">
 	</div>
-	<div>
-		<label>Bestätigung:</label> <input id="p2" type="password">
+	<div class="pure-control-group">
+		<label>Bestätigung:</label><input id="p2" type="password">
 	</div>
-	<div><br />Das Passwort ist für den Zugriff auf die Weboberfläche des Routers und auch den Zugriff per SSH. Der Benutzername ist 'root'.</div>
+	<div>Das Passwort ist für den Zugriff auf die Weboberfläche des Routers und auch den Zugriff per SSH.<br />Der Benutzername ist 'root'.</div>
 </fieldset>
 <div>
-	<button type="button" onclick="apply()">Ändern</button>
+	<button type="button" class="pure-button pure-button-primary" onclick="apply()">Ändern</button>
+</div>
+</form>
 </div>
 
 </body>
diff --git a/src/packages/fff/fff-web/files/www/ssl/settings.html b/src/packages/fff/fff-web/files/www/ssl/settings.html
index eb081a2..1176d8f 100644
--- a/src/packages/fff/fff-web/files/www/ssl/settings.html
+++ b/src/packages/fff/fff-web/files/www/ssl/settings.html
@@ -4,23 +4,26 @@
 <head>
 <title>Einstellungen</title>
 <meta charset="utf-8"/>
-<link rel="stylesheet" type="text/css" href="style.css" />
 <script src="shared.js"></script>
 <script src="settings.js"></script>
 </head>
 <body onload="init();">
 
+<div class="content">
+<form class="pure-form pure-form-aligned" onsubmit="save_data(); return false;">
 <fieldset>
 	<legend>Allgemeine Einstellungen</legend>
-	<span id="general"></span>
+	<div id="general"></div>
 </fieldset>
 <fieldset>
 	<legend>Bandbreitenkontrolle</legend>
-	<span id="traffic"></span>
-	<div><br />Die für das Freifunknetz beanspruchte Internet-Bandbreite am WAN kann hier begrenzt werden.</div>
+	<div id="traffic"></div>
+	<div>Die für das Freifunknetz beanspruchte Internet-Bandbreite am WAN kann hier begrenzt werden.<br /><br /></div>
 </fieldset>
 
-<button type="button" onclick="save_data()">Speichern</button>
+<input type="submit" class="pure-button pure-button-primary" value="Speichern" />
+</form>
+</div>
 
 </body>
 </html>
diff --git a/src/packages/fff/fff-web/files/www/ssl/settings.js b/src/packages/fff/fff-web/files/www/ssl/settings.js
index bf1b878..f2dfc61 100644
--- a/src/packages/fff/fff-web/files/www/ssl/settings.js
+++ b/src/packages/fff/fff-web/files/www/ssl/settings.js
@@ -53,27 +53,21 @@ function appendSetting(p, path, value, mode)
 	switch(name)
 	{
 	case "latitude":
-		b = append_input(p, "GPS-Koordinaten Latitude", id, value);
+		b = append_input(p, "GPS Breitengrad", id, value);
 		b.lastChild.placeholder = "52.02713078";
 		addInputCheck(b.lastChild, /^$|^\d{1,3}\.\d{1,8}$/, "Ung\xfcltige Eingabe. Bitte nur maximal 8 Nachkommastellen und keine Kommas verwenden.");
 		addHelpText(b, "Die Latitude Koordinate dieses Knotens auf der Freifunk-Karte (z.B. \"52.02713078\").");
-		var map_button = append_button(b, "Position auf Karte anzeigen / setzen", function() {
-			window.open('/map.html', '_blank', 'location=0,status=0,scrollbars=1,width=400,height=300')
-		});
-		b.style["position"] = "relative";
-		map_button.style["position"] = "absolute";
-		map_button.style["height"] = "44px";
+		var map_button = append_button(b, "Position auf Karte anzeigen / setzen", function() {window.open('/map.html', '_blank', 'location=0,status=0,scrollbars=1,width=400,height=300')});
 		map_button.style["margin-left"] = "5px";
-		map_button.style["z-index"] = "-1";
 		break;
 	case "longitude":
-		b = append_input(p, "GPS-Koordinaten Longitude", id, value);
+		b = append_input(p, "GPS Längengrad", id, value);
 		b.lastChild.placeholder = "8.52829987";
 		addInputCheck(b.lastChild, /^$|^\d{1,3}\.\d{1,8}$/, "Ung\xfcltige Eingabe. Bitte nur maximal 8 Nachkommastellen und keine Kommas verwenden.");
 		addHelpText(b, "Die Longitude Koordinate dieses Knotens auf der Freifunk-Karte (z.B. \"8.52829987\").");
 		break;
 	case "position_comment":
-		b = append_input(p, "Standort Beschreibung", id, value);
+		b = append_input(p, "Standortbeschreibung", id, value);
 		b.lastChild.placeholder = "Am Antennenmast";
 		addInputCheck(b.lastChild, /^$|^[\-\^'\w\.\:\[\]\(\)\/ &@\+\u0080-\u00FF]{0,255}$/, "Ung\xfcltige Eingabe.");
 		addHelpText(b, "Eine genauere Beschreibung zum Standort");
@@ -83,9 +77,10 @@ function appendSetting(p, path, value, mode)
 		b.lastChild.placeholder = "MeinRouter";
 		addInputCheck(b.lastChild, /^$|^[\-\^'\w\.\:\[\]\(\)\/ &@\+\u0080-\u00FF]{0,32}$/, "Ung\xfcltige Eingabe.");
 		addHelpText(b, "Der Name dieses Knotens auf der Freifunk-Karte.");
+		document.getElementsByTagName("title")[0].innerHTML = "FFF Router :: " + value;
 		break;
 	case "description":
-		b = append_input(p, "Knotenbeschreibung", id, value);
+		b = append_textarea(p, "Knotenbeschreibung", id, value);
 		b.lastChild.placeholder = "In einer grauen Kiste versteckt";
 		addInputCheck(b.lastChild, /^$|^[\-\^'\w\.\:\[\]\(\)\/ &@\+\u0080-\u00FF]{0,255}$/, "Ung\xfcltige Eingabe.");
 		addHelpText(b, "Beschreibung dieses Knotens.");
@@ -98,7 +93,7 @@ function appendSetting(p, path, value, mode)
 		break;
 	case "enabled":
 		if(cfg == "simple-tc") {
-			b = append_radio(p, "Bandbreitenkontrolle", id, value, [["An", "1"], ["Aus", "0"]]);
+			b = append_radio(p, "Bandbreitenkontrolle", id, value, [["An", "1"], ["Aus", "0"]], true);
 			addHelpText(b, "Bandbreitenkontrolle f\xfcr den Upload-/Download \xfcber das Freifunknetz \xfcber den eigenen Internetanschluss.");
 		}
 		break;
@@ -117,6 +112,7 @@ function appendSetting(p, path, value, mode)
 	}
 
 	b.id = id; //needed for updateFrom
+	addClass(b, "pure-control-group");
 	b.onchange = function() {
 		updateFrom(b);
 	};
diff --git a/src/packages/fff/fff-web/files/www/ssl/shared.js b/src/packages/fff/fff-web/files/www/ssl/shared.js
index 1c4c0e0..e652595 100644
--- a/src/packages/fff/fff-web/files/www/ssl/shared.js
+++ b/src/packages/fff/fff-web/files/www/ssl/shared.js
@@ -53,21 +53,7 @@ function replaceItem(str, old_item, new_item)
 }
 
 function addHelpText(elem, text) {
-	var help = $("help");
-
-	if(help) {
-		elem.onmouseover = function(e) {
-			help.style.top = (e.clientY-20)+"px";
-			help.style.left = (e.clientX+80)+"px";
-			help.innerHTML = text;
-			show(help);
-		};
-
-		elem.onmouseout = function() {
-			help.innerHTML = "";
-			hide(help);
-		};
-	}
+	elem.title = text;
 }
 
 //to config file syntax
@@ -261,6 +247,8 @@ function collect_inputs(p, obj)
 {
 	if(p.tagName == "SELECT")
 		obj[p.name] = p.value;
+	if(p.tagName == "TEXTAREA")
+		obj[p.name] = p.value;
 	if(p.tagName == "INPUT")
 		if(p.type == "text" || p.type == "password" || (p.type == "radio" && p.checked))
 			obj[p.name] = p.value
@@ -296,6 +284,7 @@ function append_section(parent, title, id)
 function append_button(parent, text, onclick)
 {
 	var button = append(parent, 'button');
+	addClass(button, "pure-button");
 	button.type = 'button';
 	button.innerHTML = text;
 	button.onclick = onclick;
@@ -370,6 +359,27 @@ function append_input(parent, title, name, value)
 	input.value = (typeof value == "undefined") ? "" : value;
 	input.name = name;
 	input.type = "text";
+	addClass(input, "pure-input-1-3");
+
+	div.appendChild(label);
+	div.appendChild(input);
+
+	return div;
+}
+
+//append a textarea field
+//e.g. append_input(parent, "Name", "name_string", "MyName")
+function append_textarea(parent, title, name, value)
+{
+	var div = append(parent, 'div');
+	var label = create('label');
+	var input = create('textarea');
+
+	label.innerHTML = title + ":";
+	input.value = (typeof value == "undefined") ? "" : value;
+	input.name = name;
+	input.type = "text";
+	addClass(input, "pure-input-1-3");
 
 	div.appendChild(label);
 	div.appendChild(input);
@@ -378,9 +388,9 @@ function append_input(parent, title, name, value)
 }
 
 //append a radio field
-//e.g. append_radio(parent, "Enabled", "enabled", 0, [["Yes", 1], ["No", 0])
-function append_radio(parent, title, name, selected, choices) {
-	return _selection("radio", parent, title, name, [selected], choices);
+//e.g. append_radio(parent, "Enabled", "enabled", 0, [["Yes", 1], ["No", 0], true)
+function append_radio(parent, title, name, selected, choices, inline) {
+	return _selection("radio", parent, title, name, [selected], choices, inline);
 }
 
 //append a checkbox field
@@ -389,7 +399,7 @@ function append_check(parent, title, name, selected, choices) {
 	return _selection("checkbox", parent, title, name, selected, choices);
 }
 
-function _selection(type, parent, title, name, selected, choices)
+function _selection(type, parent, title, name, selected, choices, inline)
 {
 	var p = append(parent, 'div');
 	var label = append(p, 'label');
@@ -405,7 +415,7 @@ function _selection(type, parent, title, name, selected, choices)
 		var choice_value = "" + (s ? choices[i] : choices[i][1]);
 		var choice_help = s ? undefined : choices[i][2];
 
-		var div = append(span, 'div');
+		var div = append(span, (inline)?'span':'div');
 		var input = append(div, 'input');
 		var label = append(div, 'label');
 
diff --git a/src/packages/fff/fff-web/files/www/ssl/style.css b/src/packages/fff/fff-web/files/www/ssl/style.css
deleted file mode 100644
index 61fc3f0..0000000
--- a/src/packages/fff/fff-web/files/www/ssl/style.css
+++ /dev/null
@@ -1,226 +0,0 @@
-
-/* common */
-
-* { margin:0; padding:0; }
-
-a { text-decoration: none; }
-
-li { list-style-type: none; }
-
-html {
-	font: 90%/1.3 arial,sans-serif;
-	padding:1em;
-	background:#fafafa;
-}
-
-body {
-	font: normal 16px verdana,arial,'Bitstream Vera Sans',helvetica,sans-serif;
-}
-
-
-/* specific */
-
-.mac {
-	color: #0033CC;
-	cursor: help;
-}
-
-#nds_files label {
-	width: 18em;
-}
-
-#nds_macs {
-	margin-bottom: 2em;
-}
-
-#wifiscan table {
-	text-align: center;
-}
-
-#wifiscan td:nth-of-type(1) {
-	text-align: left;
-}
-
-#help {
-	padding: 5px;
-	height: 0px;
-	position: absolute;
-	min-height: 50px;
-	background-color: #f2f2f2;
-	display:none;
-	border: 2px dotted grey;
-}
-
-#switches label {
-	width: 6em;
-}
-
-/* forms */
-
-legend {
-	color: #0b77b7;
-	font-size: 1.2em;
-}
-
-label {
-	float: left;
-	width: 12em;
-	text-align: right;
-	margin-right: 1em;
-	white-space: nowrap;
-}
-
-fieldset {
-	border: 1px solid #ddd;
-	padding: 0.5em;
-	margin: 0.5em;
-	width: 36em;
-}
-
-fieldset fieldset {
-	width: auto;
-}
-
-fieldset > * {
-	margin: 0.3em 0;
-	clear: both;
-}
-
-fieldset div > * {
-	display: inline-block;
-	vertical-align: middle;
-}
-
-input {
-	padding: 0.15em;
-	width: 15em;
-	border: 1px solid #ddd;
-	background: #fafafa;
-	font: bold 0.95em arial, sans-serif;
-	-moz-border-radius: 0.4em;
-	-khtml-border-radius: 0.4em;
-}
-
-input:hover, input:focus {
-	border-color: #c5c5c5;
-	background: #f6f6f6;
-}
-
-select {
-	min-width: 4em;
-}
-
-option {
-	padding-right: 1em;
-}
-
-.radio_option div {
-	float: left;
-	white-space: nowrap;
-	clear: none;
-}
-
-.radio_option div label, .radio_option div input {
-	vertical-align: middle;
-	display: inline;
-	float: none;
-	width: auto;
-	background: none;
-	border: none;
-}
-
-.select_option label {
-	font-size: 1em;
-	color: #000;
-}
-
-.list_option div {
-	clear: left;
-	margin: 0;
-	padding: 0;
-	float: left;
-	list-style: none;
-}
-
-
-/* navigation */
-
-#globalnav {
-	position: relative;
-	float: auto;
-	width: 98%;
-	padding: 0 0 1.75em 1em;
-	margin: 0;
-	margin-bottom: 2%;
-	list-style: none;
-	line-height: 1em;
-}
-
-#globalnav li {
-	float: left;
-	margin: 0;
-	padding: 0;
-}
-
-#globalnav a {
-	display: block;
-	color: #444;
-	text-decoration: none;
-	font-weight: bold;
-	background: #ddd;
-	margin: 0;
-	padding: 0.25em 1em;
-	border-left: 1px solid #fff;
-	border-top: 1px solid #fff;
-	border-right: 1px solid #aaa;
-}
-
-#globalnav a:hover,
-#globalnav a:active,
-#globalnav a.here:link,
-#globalnav a.here:visited {
-	background: #bbb;
-}
-
-#globalnav a.here:link,
-#globalnav a.here:visited {
-	position: relative;
-	z-index: 102;
-}
-
-/* sub-navigation */
-
-#globalnav ul {
-	position: absolute;
-	left: 0;
-	top: 1.5em;
-	float: left;
-	background: #bbb;
-	width: 100%;
-	margin: 0;
-	padding: 0.25em 0.25em 0.25em 1em;
-	list-style: none;
-	border-top: 1px solid #fff;
-}
-
-#globalnav ul li {
-	float: left;
-	display: block;
-	margin-top: 1px;
-}
-
-#globalnav ul a {
-	background: #bbb;
-	color: #fff;
-	display: inline;
-	margin: 0;
-	padding: 0 1em;
-	border: 0;
-}
-
-#globalnav ul a:hover,
-#globalnav ul a:active,
-#globalnav ul a.here:link,
-#globalnav ul a.here:visited {
-	color: #444;
-}
diff --git a/src/packages/fff/fff-web/files/www/ssl/upgrade.html b/src/packages/fff/fff-web/files/www/ssl/upgrade.html
index 41d4543..42e57cd 100644
--- a/src/packages/fff/fff-web/files/www/ssl/upgrade.html
+++ b/src/packages/fff/fff-web/files/www/ssl/upgrade.html
@@ -4,18 +4,19 @@
 <head>
 <title>Upgrade</title>
 <meta charset="utf-8"/>
-<link rel="stylesheet" type="text/css" href="style.css" />
 <script src="shared.js"></script>
 <script src="upgrade.js"></script>
 </head>
 <body onload="init();">
 
+<div class="content">
+<div class="pure-form pure-form-aligned">
 <fieldset>
 	<legend>Router Zurücksetzen</legend>
 	<div>
-		<button type="button" onclick="restore_firmware()">Zurücksetzen</button>
+		<button type="button" class="pure-button pure-button-primary" onclick="restore_firmware()">Zurücksetzen</button>
 	</div>
-	<div><br />Alle Einstellungen werden zurückgesetzt und der Router startet neu.</div>
+	<div>Alle Einstellungen werden zurückgesetzt und der Router startet neu.</div>
 </fieldset>
 <fieldset>
 	<legend>Manuelles Update</legend>
@@ -25,8 +26,8 @@
 		<label>
 			<input type="file" id="import_file" name="firmware" onchange="$('selected_image').innerHTML=this.value.replace(/^.*[\\\/](.*)$/, '$1');" style="visibility:hidden;position:absolute;top:-50;left:-50"/>
 			<input type="hidden" name="func" value="apply_firmware" />
-			<button type="button" onclick="$('import_file').click()">Image Auswählen</button>
-			<button type="submit">Senden</button>
+			<button type="button" class="pure-button" onclick="$('import_file').click()">Image Auswählen</button>
+			<button type="submit" class="pure-button pure-button-primary">Senden</button>
 		</label>
 		<div>
 			<input type="checkbox" name="keep_config" value="yes" />
@@ -34,8 +35,10 @@
 		</div>
 	</div>
 	</form>
-	<div><br />Hier kann ein Freifunk-Image verwendet werden (*-sysupgrade.bin) oder die Firmware des Routerherstellers.</div>
+	<div>Hier kann ein Freifunk-Image verwendet werden (*-sysupgrade.bin) oder die Firmware des Routerherstellers.</div>
 </fieldset>
+</div>
+</div>
 
 
 </body>
diff --git a/src/packages/fff/fff-web/files/www/ssl/wifiscan.html b/src/packages/fff/fff-web/files/www/ssl/wifiscan.html
index 9e58c85..429301e 100644
--- a/src/packages/fff/fff-web/files/www/ssl/wifiscan.html
+++ b/src/packages/fff/fff-web/files/www/ssl/wifiscan.html
@@ -4,23 +4,26 @@
 <head>
 <title>Wifiscan</title>
 <meta charset="utf-8"/>
-<link rel="stylesheet" type="text/css" href="style.css" />
 <script src="shared.js"></script>
 <script src="wifiscan.js"></script>
 </head>
 <body onload="init();">
 
+<div class="content">
+<form class="pure-form pure-form-aligned">
 <fieldset id="wifiscan">
 	<legend>Wifi Scan</legend>
 	<div>
 		<select id="wifiscan_selection"></select>
-		<button type="button" onclick="wifi_scan()">Scan starten</button>
+		<button type="button" class="pure-button" onclick="wifi_scan()">Scan starten</button>
 	</div>
-	<table id="wifiscan_table" style="display: none">
-		<tr><th>Name</th><th>Kanal</th><th>Signal</th><th>Typ</th></tr>
+	<table id="wifiscan_table" style="display: none; margin-top: 1em;" class="pure-table pure-table-striped">
+		<thead><tr><th>Name</th><th>Kanal</th><th>Signal</th><th>Typ</th></tr></thead>
 		<tbody id="wifiscan_tbody"></tbody>
 	</table>
 </fieldset>
+</form>
+</div>
 
 </body>
 </html>
diff --git a/src/packages/fff/fff-web/files/www/ssl/wifiscan.js b/src/packages/fff/fff-web/files/www/ssl/wifiscan.js
index 3be2591..bf0815c 100644
--- a/src/packages/fff/fff-web/files/www/ssl/wifiscan.js
+++ b/src/packages/fff/fff-web/files/www/ssl/wifiscan.js
@@ -46,7 +46,7 @@ function wifi_scan()
 		}
 
 		var table = $('wifiscan_table');
-		show(table);
+		table.style["display"] = "table";
 	});
 }
 
-- 
2.6.4




Mehr Informationen über die Mailingliste franken-dev