Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found
Select Git revision
  • 0x4A6F-master
  • 0x4A6F-rpi4
  • autinerd/experimental-openwrt-24.10
  • experimental
  • feature/addMikrotikwAP
  • master
  • nrb/airmax-test
  • nrb/ar9344-reset-sequence
  • nrb/ex400-remove-wps
  • nrb/gluon-master-cpe510
  • nrb/test-radv-filter
  • nrbffs/fastd-remove-delay
  • nrbffs/netgear-ex6120
  • v2018.2.2-ffs
  • v2018.2.3-ffs
  • v2019.1-ffs
  • v2019.1.1-ffs
  • v2019.1.2-ffs
  • v2020.1-ffs
  • v2020.1.1-ffs
  • v2020.1.3-ffs
  • v2020.2-ffs
  • v2020.2.1-ffs
  • v2020.2.2-ffs
  • v2020.2.3-ffs
  • v2021.1-ffs
  • v2021.1.1-ffs
  • v2021.1.2-ffs
  • v2022.1.1-ffs
  • v2022.1.3-ffs
  • v2022.1.4-ffs
  • v2023.1-ffs
  • v2023.2-ffs
  • v2023.2.2-ffs
  • v2023.2.3-ffs
  • v2023.2.4-ffs
  • v2023.2.5-ffs
  • experimental-2022-09-24
  • experimental-2022-09-24-base
  • experimental-2023-03-11
  • experimental-2023-03-11-base
  • experimental-2023-03-12
  • experimental-2023-03-12-base
  • experimental-2023-03-16
  • experimental-2023-03-16-base
  • experimental-2023-03-20
  • experimental-2023-03-20-base
  • experimental-2023-03-23
  • experimental-2023-03-23-base
  • experimental-2023-03-25
  • experimental-2023-03-25-base
  • experimental-2023-03-26
  • experimental-2023-03-26-base
  • experimental-2023-03-30
  • experimental-2023-03-30-base
  • experimental-2023-03-31
  • experimental-2023-03-31-base
  • experimental-2023-04-01
  • experimental-2023-04-01-base
  • experimental-2023-04-08
  • experimental-2023-04-08-base
  • experimental-2023-04-10
  • experimental-2023-04-10-base
  • experimental-2023-04-13
  • experimental-2023-04-13-base
  • experimental-2023-04-15
  • experimental-2023-04-15-base
  • experimental-2023-04-16
  • experimental-2023-04-16-base
  • experimental-2023-04-18
  • experimental-2023-04-18-base
  • experimental-2023-04-20
  • experimental-2023-04-20-base
  • experimental-2023-04-26
  • experimental-2023-04-26-base
  • experimental-2023-04-28
  • experimental-2023-04-28-base
  • experimental-2023-04-30
  • experimental-2023-04-30-base
  • experimental-2023-05-02
  • experimental-2023-05-02-base
  • experimental-2023-05-03
  • experimental-2023-05-03-base
  • experimental-2023-05-12
  • experimental-2023-05-12-base
  • experimental-2023-05-21
  • experimental-2023-05-21-base
  • experimental-2023-05-25
  • experimental-2023-05-25-base
  • experimental-2023-07-02
  • experimental-2023-07-02-base
  • experimental-2023-07-04
  • experimental-2023-07-04-base
  • experimental-2023-07-12
  • experimental-2023-07-12-base
  • experimental-2023-07-16
  • experimental-2023-07-16-base
  • experimental-2023-08-04
  • experimental-2023-08-04-base
  • experimental-2023-08-10
  • experimental-2023-08-10-base
  • experimental-2023-09-08
  • experimental-2023-09-08-base
  • experimental-2023-09-09
  • experimental-2023-09-09-base
  • experimental-2023-09-10
  • experimental-2023-09-10-base
  • experimental-2023-09-11
  • experimental-2023-09-11-base
  • experimental-2023-09-12
  • experimental-2023-09-12-base
  • experimental-2023-09-13
  • experimental-2023-09-13-base
  • experimental-2023-09-15
  • experimental-2023-09-15-base
  • experimental-2023-09-16
  • experimental-2023-09-16-base
  • experimental-2023-09-18
  • experimental-2023-09-18-base
  • experimental-2023-09-20
  • experimental-2023-09-20-base
  • experimental-2023-09-27
  • experimental-2023-09-27-base
  • experimental-2023-09-28
  • experimental-2023-09-28-base
  • experimental-2023-09-29
  • experimental-2023-09-29-base
  • experimental-2023-10-02
  • experimental-2023-10-02-base
  • experimental-2023-10-13
  • experimental-2023-10-13-base
  • experimental-2023-10-14
  • experimental-2023-10-14-base
  • experimental-2023-10-16
  • experimental-2023-10-16-base
  • experimental-2023-10-23
  • experimental-2023-10-23-base
137 results

Target

Select target project
  • firmware/gluon
  • 0x4A6F/gluon
  • patrick/gluon
3 results
Select Git revision
  • 0x4A6F-master
  • 0x4A6F-rpi4
  • 2014.3.x
  • 2014.4.x
  • babel
  • hoodselector
  • master
  • radv-filterd
  • v2015.1.x
  • v2016.1.x
  • v2016.2.4-batmanbug
  • v2016.2.x
  • v2018.2.2-ffs
  • v2018.2.x
  • v2014.1
  • v2014.2
  • v2014.3
  • v2014.3.1
  • v2014.4
  • v2015.1
  • v2015.1.1
  • v2015.1.2
  • v2016.1
  • v2016.1.1
  • v2016.1.2
  • v2016.1.3
  • v2016.1.4
  • v2016.1.5
  • v2016.1.6
  • v2016.2
  • v2016.2.1
  • v2016.2.2
  • v2016.2.3
  • v2016.2.4
  • v2016.2.5
  • v2016.2.6
  • v2016.2.7
  • v2017.1
  • v2017.1.1
  • v2017.1.2
  • v2017.1.3
  • v2017.1.4
  • v2017.1.5
  • v2017.1.6
  • v2017.1.7
  • v2017.1.8
  • v2018.1
  • v2018.1.1
  • v2018.1.2
  • v2018.1.3
  • v2018.1.4
  • v2018.2
  • v2018.2-ffs0.1
  • v2018.2.1
  • v2018.2.1-ffs0.1
  • v2018.2.2-ffs0.1
56 results
Show changes
Showing
with 440 additions and 732 deletions
......@@ -10,18 +10,18 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
msgid ""
"If this node has a special role within the mesh network you can specify this "
"role here. Please find out about the available roles and their impact first. "
"Only change the role if you know what you are doing."
msgstr ""
"Wenn dein Knoten eine besondere Rolle im Mesh-Netzwerk einnimmt, kannst du "
"diese hier angeben. Bringe bitte zuvor in Erfahrung, welche Bedeutung die "
"zur Verfügung stehenden Rollen haben. Setze die Rolle nur, wenn du weißt, "
"was du tust."
msgid "Node role"
msgstr "Verwendungszweck"
msgid "Role"
msgstr "Rolle"
msgid ""
"If this node has a special role within the freifunk network you can specify "
"this role here. Please find out about the available roles and their impact "
"first. Only change the role if you know what you are doing."
msgstr ""
"Wenn dein Freifunk-Knoten eine besondere Rolle im Freifunk Netz einnimmt, "
"kannst du diese hier angeben. Bringe bitte zuvor in Erfahrung, welche "
"Auswirkungen die zur Verfügung stehenden Rollen im Freifunk-Netz haben. "
"Setze die Rolle nur, wenn du weißt was du machst."
msgid ""
msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Project-Id-Version: PACKAGE VERSION\n"
"PO-Revision-Date: 2015-08-19 23:30+0100\n"
"Last-Translator:Tobias Bernot <tqbs@airmail.cc>\n"
"Language-Team: French\n"
"Language: fr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
msgid ""
"If this node has a special role within the mesh network you can specify this "
"role here. Please find out about the available roles and their impact first. "
"Only change the role if you know what you are doing."
msgstr ""
"Si votre nœud a un rôle spécial dans le réseau MESH, vous pouvez spécifier "
"ce rôle ici. Avant de changer, informez vous sur les rôles disponibles et "
"sur leur impacts. Changez de rôle uniquement si vous comprenez ce que vous "
"faites."
msgid "Node role"
msgstr "Rôle du nœud"
msgid "Role"
msgstr "Rôle"
msgid ""
"If this node has a special role within the freifunk network you can specify "
"this role here. Please find out about the available roles and their impact "
"first. Only change the role if you know what you are doing."
msgstr ""
"Si votre nœud a un rôle spécial dans le réseau freifunk, vous pouvez spécifier ce "
"rôle ici. Avant de changer, informez vous sur les rôles disponibles et sur leur impacts. "
"Changez de rôle uniquement si vous comprenez ce que vous faites."
msgid ""
msgstr "Content-Type: text/plain; charset=UTF-8"
msgid "Node role"
msgid ""
"If this node has a special role within the mesh network you can specify this "
"role here. Please find out about the available roles and their impact first. "
"Only change the role if you know what you are doing."
msgstr ""
msgid "Role"
msgid "Node role"
msgstr ""
msgid ""
"If this node has a special role within the freifunk network you can specify this role here. "
"Please find out about the available roles and their impact first. "
"Only change the role if you know what you are doing."
msgid "Role"
msgstr ""
package 'gluon-web-node-role'
entry({"admin", "noderole"}, model("admin/noderole"), "Node role", 60)
local f, s, o
local site = require 'gluon.site'
local site_i18n = i18n 'gluon-site'
local uci = require("simple-uci").cursor()
local config = 'gluon-node-info'
......@@ -9,15 +10,15 @@ local role = uci:get(config, uci:get_first(config, "system"), "role")
f = Form(translate("Node role"))
s = f:section(Section, nil, translate(
"If this node has a special role within the freifunk network you can specify this role here. "
"If this node has a special role within the mesh network you can specify this role here. "
.. "Please find out about the available roles and their impact first. "
.. "Only change the role if you know what you are doing."
))
o = s:option(ListValue, "role", translate("Role"))
o.default = role
for _, role in ipairs(site.roles.list()) do
o:value(role, translate('gluon-web-node-role:role:' .. role))
for _, role_value in ipairs(site.roles.list()) do
o:value(role_value, site_i18n.translate('gluon-web-node-role:role:' .. role_value))
end
function o:write(data)
......
include $(TOPDIR)/rules.mk
PKG_NAME:=gluon-web-osm
include ../gluon.mk
define Package/gluon-web-osm
TITLE:=base src for OSM inlay
endef
PKG_CONFIG_DEPENDS += CONFIG_GLUON_MINIFY
define Package/gluon-web-osm/install
$(Gluon/Build/Install)
$(INSTALL_DIR) $(1)/lib/gluon/web/www/static/
ifdef CONFIG_GLUON_MINIFY
$(INSTALL_DATA) ./javascript/gluon-web-osm.min.js $(1)/lib/gluon/web/www/static/gluon-web-osm.js
else
$(INSTALL_DATA) ./javascript/gluon-web-osm.js $(1)/lib/gluon/web/www/static/
endif
endef
$(eval $(call BuildPackageGluon,gluon-web-osm))
<div id="<%=id%>" class="gluon-osm-map" style="display: none"></div>
<script type="text/javascript" src="/static/gluon-web-osm.js"></script>
<script type="text/javascript">
(function() {
var elMap = document.getElementById(<%=json(id)%>);
var wrapper = elMap.parentNode;
var elLon, elLat;
window.addEventListener('gluon-update', function() {
<% if self.lon then -%>
elLon = document.getElementById(<%=json(self.lon:id())%>);
<%- end %>
<% if self.lat then -%>
elLat = document.getElementById(<%=json(self.lat:id())%>);
<%- end %>
}, {once: true});
initOSM(<%=json(self.options)%>, function(createMap) {
elMap.style.display = '';
var pos = <%=json(self:cfgvalue().pos)%>;
var map = createMap(
elMap,
[pos.lon, pos.lat],
<%=json(self:cfgvalue().zoom)%>,
<%=json(self:cfgvalue().set)%>,
function(lonlat) {
if (elLon) {
elLon.value = lonlat[0].toFixed(6);
elLon.dispatchEvent(new Event('gluon-revalidate'));
}
if (elLat) {
elLat.value = lonlat[1].toFixed(6);
elLat.dispatchEvent(new Event('gluon-revalidate'));
}
}
);
wrapper.addEventListener('gluon-show', function() {
map.updateSize();
});
});
})();
</script>
/*
Build using:
uglifyjs javascript/gluon-web-osm.js -o javascript/gluon-web-osm.min.js -c -m
*/
'use strict';
function initOSM(options, ready) {
var markerSvg = '<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="30" height="45">'
+ '<path d="M2,15A13,13,0,0,1,28,13Q28,28,15,45Q2,28,2,15" fill="#48b" stroke="#369" stroke-width="1.5" />'
+ '<circle cx="15" cy="15" r="6" fill="#fff" />'
+ '</svg>';
var style = document.createElement('link');
style.rel = 'stylesheet';
style.type = 'text/css';
style.href = options.openlayers_url + '/css/ol.css';
document.head.appendChild(style);
var script = document.createElement('script');
var done = false;
script.onload = script.onreadystatechange = function() {
if (done)
return;
if (this.readyState && this.readyState !== "loaded" && this.readyState !== "complete")
return;
done = true;
var markerImg = new Image();
markerImg.onload = function() {
var markerStyle = new ol.style.Style({
image: new ol.style.Icon({
img: markerImg,
imgSize: [30, 45],
anchor: [0.5, 1]
})
});
var marker = new ol.Feature();
marker.setStyle(markerStyle);
var source;
if (options.tile_layer && options.tile_layer.type === 'XYZ') {
source = new ol.source.XYZ({
url: options.tile_layer.url,
attributions: options.tile_layer.attributions,
});
} else {
source = new ol.source.OSM();
}
ready(function(elMap, pos, zoom, set, onUpdate) {
var map = new ol.Map({
target: elMap,
layers: [
new ol.layer.Tile({
source: source
}),
new ol.layer.Vector({
source: new ol.source.Vector({
features: [marker]
})
})
],
view: new ol.View({
center: ol.proj.fromLonLat(pos),
zoom: zoom,
})
});
var refresh = function(coord) {
marker.setGeometry(new ol.geom.Point(coord));
}
map.addEventListener('click', function(e) {
refresh(e.coordinate);
onUpdate(ol.proj.toLonLat(e.coordinate));
});
if (set)
refresh(ol.proj.fromLonLat(pos));
return map;
});
}
markerImg.src = 'data:image/svg+xml,' + escape(markerSvg);
};
script.src = options.openlayers_url + '/build/ol.js';
document.head.appendChild(script);
}
"use strict";function initOSM(o,r){var e=document.createElement("link");e.rel="stylesheet",e.type="text/css",e.href=o.openlayers_url+"/css/ol.css",document.head.appendChild(e);var t=document.createElement("script"),l=!1;t.onload=t.onreadystatechange=function(){if(!(l||this.readyState&&"loaded"!==this.readyState&&"complete"!==this.readyState)){l=!0;var t=new Image;t.onload=function(){var i,e=new ol.style.Style({image:new ol.style.Icon({img:t,imgSize:[30,45],anchor:[.5,1]})}),s=new ol.Feature;s.setStyle(e),i=o.tile_layer&&"XYZ"===o.tile_layer.type?new ol.source.XYZ({url:o.tile_layer.url,attributions:o.tile_layer.attributions}):new ol.source.OSM,r(function(e,t,o,r,l){function n(e){s.setGeometry(new ol.geom.Point(e))}var a=new ol.Map({target:e,layers:[new ol.layer.Tile({source:i}),new ol.layer.Vector({source:new ol.source.Vector({features:[s]})})],view:new ol.View({center:ol.proj.fromLonLat(t),zoom:o})});return a.addEventListener("click",function(e){n(e.coordinate),l(ol.proj.toLonLat(e.coordinate))}),r&&n(ol.proj.fromLonLat(t)),a})},t.src="data:image/svg+xml,"+escape('<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="30" height="45"><path d="M2,15A13,13,0,0,1,28,13Q28,28,15,45Q2,28,2,15" fill="#48b" stroke="#369" stroke-width="1.5" /><circle cx="15" cy="15" r="6" fill="#fff" /></svg>')}},t.src=o.openlayers_url+"/build/ol.js",document.head.appendChild(t)}
\ No newline at end of file
local classes = require 'gluon.web.model.classes'
local util = require "gluon.web.util"
local class = util.class
local DEFAULT_URL =
'https://cdn.jsdelivr.net/gh/openlayers/openlayers.github.io@35ffe7626ce16c372143f3c903950750075e7068/en/v5.3.0'
local M = {}
local MapValue = class(classes.AbstractValue)
M.MapValue = MapValue
function MapValue:__init__(title, options)
classes.AbstractValue.__init__(self, title)
self.subtemplate = "model/osm/map"
self.options = {
openlayers_url = options.openlayers_url or DEFAULT_URL,
tile_layer = options.tile_layer,
}
self.lon = options.lon
self.lat = options.lat
self.pos = options.pos or {lon = 0, lat = 0}
self.zoom = options.zoom or 0
self.set = options.set or false
end
function MapValue:cfgvalue()
local pos_lon = tonumber(self.lon and self.lon:cfgvalue())
local pos_lat = tonumber(self.lat and self.lat:cfgvalue())
if pos_lon and pos_lat then
return {
zoom = 18,
pos = { lon = pos_lon, lat = pos_lat },
set = true,
}
else
return self
end
end
function MapValue:validate()
return true
end
return M
include $(TOPDIR)/rules.mk
PKG_NAME:=gluon-web-private-wifi
PKG_VERSION:=1
PKG_RELEASE:=1
PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME)
include ../gluon.mk
PKG_CONFIG_DEPENDS += $(GLUON_I18N_CONFIG)
define Package/gluon-web-private-wifi
SECTION:=gluon
CATEGORY:=Gluon
DEPENDS:=+gluon-web-admin
DEPENDS:=+gluon-web-admin +gluon-private-wifi
TITLE:=UI for activating a private WLAN
endef
define Build/Prepare
mkdir -p $(PKG_BUILD_DIR)
endef
define Build/Configure
endef
define Build/Compile
$(call GluonBuildI18N,gluon-web-private-wifi,i18n)
$(call GluonSrcDiet,./luasrc,$(PKG_BUILD_DIR)/luadest/)
endef
define Package/gluon-web-private-wifi/install
$(CP) $(PKG_BUILD_DIR)/luadest/* $(1)/
$(call GluonInstallI18N,gluon-web-private-wifi,$(1))
endef
$(eval $(call BuildPackage,gluon-web-private-wifi))
$(eval $(call BuildPackageGluon,gluon-web-private-wifi))
......@@ -13,18 +13,45 @@ msgstr ""
msgid "8-63 characters"
msgstr "8-63 Zeichen"
msgid "Disabled"
msgstr "Deaktiviert"
msgid "Enabled"
msgstr "Aktiviert"
msgid "Encryption"
msgstr "Verschlüsselung"
msgid "Key"
msgstr "Schlüssel"
msgid "Management Frame Protection"
msgstr ""
msgid "Name (SSID)"
msgstr "Name (SSID)"
msgid "Optional"
msgstr ""
msgid "Private WLAN"
msgstr "Privates WLAN"
msgid "Required"
msgstr "Aktiviert"
msgid "WPA2"
msgstr ""
msgid "WPA2 / WPA3"
msgstr ""
msgid "WPA3"
msgstr ""
msgid "Meshing on WAN interface is enabled. This can lead to problems."
msgstr "Mesh auf WAN ist aktiv. Dies kann zu Problemen führen."
msgid ""
"Your node can additionally extend your private network by bridging the WAN "
"interface with a separate WLAN. This feature is completely independent of "
......
......@@ -13,17 +13,41 @@ msgstr ""
msgid "8-63 characters"
msgstr "8-63 charactères"
msgid "Disabled"
msgstr ""
msgid "Enabled"
msgstr "Activé"
msgid "Encryption"
msgstr ""
msgid "Key"
msgstr "Clé"
msgid "Management Frame Protection"
msgstr ""
msgid "Name (SSID)"
msgstr "Nom (SSID)"
msgid "Optional"
msgstr ""
msgid "Private WLAN"
msgstr "WLAN privé"
msgstr "Wi-Fi privé"
msgid "Required"
msgstr ""
msgid "WPA2"
msgstr ""
msgid "WPA2 / WPA3"
msgstr ""
msgid "WPA3"
msgstr ""
msgid ""
"Your node can additionally extend your private network by bridging the WAN "
......@@ -31,7 +55,7 @@ msgid ""
"the mesh functionality. Please note that the private WLAN and meshing on the "
"WAN interface should not be enabled at the same time."
msgstr ""
"Votre nœud peut étendre votre réseau privé en interfaçant le WAN avec un "
"WLAN séparé. Cette fonction est complètement indépendante de les fonctions "
"de MESH. Il ne faut pas activer la fonction de MESH et de WLAN privé en même "
"Votre nœud peut étendre votre réseau privé en interfaçant le WAN avec un Wi-"
"Fi séparé. Cette fonction est complètement indépendante de les fonctions de "
"MESH. Il ne faut pas activer la fonction de MESH et de Wi-Fi privé en même "
"temps."
......@@ -4,18 +4,45 @@ msgstr "Content-Type: text/plain; charset=UTF-8"
msgid "8-63 characters"
msgstr ""
msgid "Disabled"
msgstr ""
msgid "Enabled"
msgstr ""
msgid "Encryption"
msgstr ""
msgid "Key"
msgstr ""
msgid "Management Frame Protection"
msgstr ""
msgid "Name (SSID)"
msgstr ""
msgid "Optional"
msgstr ""
msgid "Private WLAN"
msgstr ""
msgid "Required"
msgstr ""
msgid "WPA2"
msgstr ""
msgid "WPA2 / WPA3"
msgstr ""
msgid "WPA3"
msgstr ""
msgid "Meshing on WAN interface is enabled. This can lead to problems."
msgstr ""
msgid ""
"Your node can additionally extend your private network by bridging the WAN "
"interface with a separate WLAN. This feature is completely independent of "
......
local uci = require("simple-uci").cursor()
local wireless = require 'gluon.wireless'
package 'gluon-web-private-wifi'
if wireless.device_uses_wlan(uci) then
entry({"admin", "privatewifi"}, model("admin/privatewifi"), _("Private WLAN"), 30)
end
local uci = require("simple-uci").cursor()
local wireless = require 'gluon.wireless'
local util = require 'gluon.util'
-- where to read the configuration from
......@@ -13,9 +14,27 @@ local s = f:section(Section, nil, translate(
.. 'at the same time.'
))
local uplink_interfaces = util.get_role_interfaces(uci, 'uplink')
local mesh_on_wan = false
for _, iface in ipairs(util.get_role_interfaces(uci, 'mesh')) do
if util.contains(uplink_interfaces, iface) then
mesh_on_wan = true
end
end
local enabled = s:option(Flag, "enabled", translate("Enabled"))
enabled.default = uci:get('wireless', primary_iface) and not uci:get_bool('wireless', primary_iface, "disabled")
local warning = s:element('model/warning', {
content = translate(
'Meshing on WAN interface is enabled. ' ..
'This can lead to problems.'
),
hide = not mesh_on_wan,
}, 'warning')
warning:depends(enabled, true)
local ssid = s:option(Value, "ssid", translate("Name (SSID)"))
ssid:depends(enabled, true)
ssid.datatype = "maxlength(32)"
......@@ -26,24 +45,52 @@ key:depends(enabled, true)
key.datatype = "wpakey"
key.default = uci:get('wireless', primary_iface, "key")
local encryption = s:option(ListValue, "encryption", translate("Encryption"))
encryption:depends(enabled, true)
encryption:value("psk2", translate("WPA2"))
if wireless.device_supports_wpa3() then
encryption:value("sae-mixed", translate("WPA2 / WPA3"))
encryption:value("sae", translate("WPA3"))
end
encryption.default = uci:get('wireless', primary_iface, 'encryption') or "psk2"
local mfp = s:option(ListValue, "mfp", translate("Management Frame Protection"))
mfp:depends(enabled, true)
mfp:value("0", translate("Disabled"))
if wireless.device_supports_mfp(uci) then
mfp:value("1", translate("Optional"))
mfp:value("2", translate("Required"))
end
mfp.default = uci:get('wireless', primary_iface, 'ieee80211w') or "0"
function f:write()
util.foreach_radio(uci, function(radio, index)
wireless.foreach_radio(uci, function(radio, index)
local radio_name = radio['.name']
local suffix = radio_name:match('^radio(%d+)$')
local name = "wan_" .. radio_name
if enabled.data then
local macaddr = util.get_wlan_mac(uci, radio, index, 4)
local macaddr = wireless.get_wlan_mac('wan_radio', index, radio)
uci:section('wireless', "wifi-iface", name, {
uci:section('wireless', 'wifi-iface', name, {
device = radio_name,
network = "wan",
network = 'wan',
mode = 'ap',
encryption = 'psk2',
encryption = encryption.data,
ssid = ssid.data,
key = key.data,
macaddr = macaddr,
ifname = suffix and 'wl-wan' .. suffix,
disabled = false,
})
-- hostapd-mini won't start in case 802.11w is configured
if wireless.device_supports_mfp(uci) then
uci:set('wireless', name, 'ieee80211w', mfp.data)
else
uci:delete('wireless', name, 'ieee80211w')
end
else
uci:set('wireless', name, "disabled", true)
end
......
entry({"admin", "privatewifi"}, model("admin/privatewifi"), _("Private WLAN"), 30)
# Copyright (C) 2013 Nils Schneider <nils at nilsschneider.net>
# This is free software, licensed under the Apache 2.0 license.
include $(TOPDIR)/rules.mk
PKG_NAME:=gluon-web-theme
PKG_VERSION:=0.1
PKG_RELEASE:=1
PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME)
include ../gluon.mk
define Package/gluon-web-theme
SECTION:=gluon
CATEGORY:=Gluon
TITLE:=gluon-web theme
DEPENDS:=+pretty-hostname
endef
define Build/Prepare
mkdir -p $(PKG_BUILD_DIR)
endef
define Build/Configure
endef
define Build/Compile
endef
define Package/gluon-web-theme/install
$(CP) ./files/* $(1)/
endef
$(eval $(call BuildPackage,gluon-web-theme))
.lang_he{direction:RTL;unicode-bidi:embed}.hidden{display:none}html{min-height:100%;height:auto;position:relative}body,input,select,option{font-family:'Open Sans', Arial, sans-serif;font-size:12pt}body{color:#4d4e53;line-height:1.5em;margin:0;display:flex;flex-direction:column;min-height:100vh;background-color:#f3f3f3}a img{border:none;text-decoration:none}.tabmenu1{text-align:center}ul.tabmenu{list-style:none;padding:0;margin:2em 0;display:inline-flex}ul.tabmenu li{white-space:nowrap;margin:0 0.5em;padding:0;text-align:center}ul.tabmenu li a{display:block;text-decoration:none;padding:1em;margin:0;color:#333;border-radius:2em}ul.tabmenu li a:hover{background:#ffe9b3}ul.tabmenu li.active a{font-weight:bold;background:white;color:#333}abbr,acronym{font-style:normal;font-variant:normal}abbr[title],acronym[title]{border-bottom:1px dotted;cursor:help}a:link abbr[title],a:visited abbr[title],a:link acronym[title],a:visited acronym[title]{cursor:pointer}code{font-family:monospace;white-space:pre}#maincontent ul{margin-left:2em}.clear{clear:both}.error{color:#ff0000;background-color:white}#menubar{display:flex;background:#dc0067;color:#ffffff}#menubar a:link.topcat,#menubar a:visited.topcat{position:relative;display:block;padding:0.5em;text-decoration:none;font-size:80%;font-weight:normal;color:white}#menubar a:link.topcat:hover,#menubar a:link.topcat:focus,#menubar a:visited.topcat:hover,#menubar a:visited.topcat:focus{background:#ffb400;color:black}#menubar a:link.topcat.active,#menubar a:visited.topcat.active{background:#ffb400;color:black;font-weight:bold}#menubar div.hostinfo{position:relative;margin:0;padding:0.5em;flex:1;font-weight:bold;font-size:80%}#menubar div.hostinfo a:link,#menubar div.hostinfo a:visited{text-decoration:none;font-weight:bold;color:white}#menubar div.hostinfo a:link:hover,#menubar div.hostinfo a:link:focus,#menubar div.hostinfo a:visited:hover,#menubar div.hostinfo a:visited:focus{text-decoration:underline}#topmenu{list-style:none;margin:0;padding:0}#topmenu li{display:inline-block}#maincontent{padding:0 1em 2em;max-width:60em;min-width:40em;margin:1em auto}#maincontent p{margin-bottom:1em}.gluon-section{margin:0;padding:0;border:none;margin-bottom:1.3em}.gluon-section:last-child{margin-bottom:0.7em}.gluon-section legend{font-size:1.4em;font-weight:bold;position:relative;padding:0;margin-bottom:0.5em}.gluon-section h2{margin:0em 0 0.5em -0.5em !important}.gluon-section h3{text-decoration:none !important;font-weight:bold !important;color:#555555 !important;margin:0.25em !important;font-size:100% !important}.gluon-section-descr{margin-bottom:2em}input:placeholder{color:#aaaaaa}input:-webkit-input-placeholder{color:#aaaaaa}input:-moz-placeholder{color:#aaaaaa}input:-ms-input-placeholder{color:#aaaaaa}input[type=checkbox]{display:none}input[type=checkbox]+label{display:inline-block;position:relative;width:1em;height:1em;margin:0}input[type=checkbox]:checked+label:after{content:'✔';color:#dc0067;vertical-align:middle;position:absolute;top:50%;left:0;margin-top:-0.5em;width:100%;text-align:center;font-size:1.7em}input[type=radio]{display:none}input[type=radio]+label{display:inline-block;position:relative;width:0.8em;height:0.8em;padding:0.5em;margin:0.2em 0.2em 0.2em 0.1em;border:none;background:#ffe199;vertical-align:middle;border-radius:50%}input[type=radio]:checked+label:after{content:'•';color:#dc0067;vertical-align:middle;position:absolute;top:50%;left:0;margin-top:-0.4em;width:100%;text-align:center;font-size:2em}input[type=submit],input[type=reset],input[type=image],input[type=button]{cursor:pointer}select,input,textarea,input[type=checkbox]+label{color:#003247;border:none;background:#ffe199;border-radius:3pt;padding:0.5em;margin-top:1px;margin-bottom:2px}input[type=image]{border:none}select,input[type=text],input[type=password]{min-width:20em}input.gluon-button{display:inline-block;zoom:1;line-height:normal;white-space:nowrap;vertical-align:baseline;text-align:center;cursor:pointer;user-select:none;font-size:100%;padding:0.5em 1em;color:rgba(0,0,0,0.8);border:none transparent;background-color:#E6E6E6;text-decoration:none;border-radius:2px;transition:0.1s linear box-shadow;margin-left:0.5em;background-repeat:no-repeat}input.gluon-button::-moz-focus-inner{padding:0;border:0}input.gluon-button:active{box-shadow:0 0 0 1px rgba(0,0,0,0.15) inset,0 0 6px rgba(0,0,0,0.2) inset}input.gluon-button:focus{outline:0}input.gluon-button:hover,input.gluon-button:focus{background-image:linear-gradient(transparent, rgba(0,0,0,0.05) 40%, rgba(0,0,0,0.1))}input.gluon-button[disabled]{border:none;background-image:none;opacity:0.40;cursor:not-allowed;box-shadow:none}input.gluon-button-reset{background-color:#e30;color:#fff}input.gluon-button-submit{background-color:#009ee0;color:#fff}.gluon-input-invalid{background:#e30 !important;color:white}div.gluon-section-remove input{border-bottom:none}textarea{margin-left:-1px;margin-bottom:0.5em}.gluon-section .gluon-rowstyle-1 h3{background-color:#eeeeff;color:#555555}.gluon-rowstyle-2{color:#000000}div.gluon-value{display:flex;flex-direction:row;margin-bottom:0.5em}.gluon-section-node .gluon-value:last-child{margin-bottom:0}.gluon-value-title{flex:2;text-align:right;padding-top:0.39em;padding-right:1em;font-weight:bold}div.gluon-value-field{flex:3;position:relative}div.gluon-value-field input,div.gluon-value-field select,div.gluon-value-field input+label{position:relative}div.gluon-value-field-text{flex:3;padding-top:0.39em}div.gluon-value-field-long{flex:10;position:relative;margin-top:0.65em}div.gluon-value-field-long input,div.gluon-value-field-long select,div.gluon-value-field-long input+label{position:relative}div.gluon-value-field-long-after{flex:2}div.gluon-value-description{font-size:8pt}div.gluon-section-create{clear:left;white-space:nowrap;vertical-align:top}div.gluon-section-create .gluon-button{margin:0.25em}input.gluon-section-create-name{margin-right:-0.25em}div.gluon-map-descr{margin-bottom:1em}.gluon-map-descr:empty,.gluon-section-descr:empty{display:none}.gluon-map-descr,.gluon-section-descr,.gluon-page-actions{padding:1em;background:#ececec}.gluon-page-actions{text-align:right;display:flex;flex-flow:row-reverse}div.gluon-optionals{padding:0.25em;border-bottom:1px dotted #bbbbbb}div.gluon-section-remove{float:right}.gluon-section-node{clear:both;position:relative;border:none}.gluon-section-node-tabbed{border-top-left-radius:0}div.gluon-error{font-size:95%;font-weight:bold;color:#ff0000;background-color:#ffffff}.gluon-value-error input,.gluon-value-error select{background-color:#ffcccc}.gluon-section-error{color:red;background-color:white;font-size:95%;border:1px dotted red;margin:3px;padding:3px}.gluon-value-field var{color:#2222FF}.gluon-add:after,.gluon-remove:after{cursor:pointer;display:inline-block;text-align:center;vertical-align:middle;font-size:180%;width:1.2em;height:1em}.gluon-add{color:#008000;position:relative;left:21em}input+.gluon-add{left:0;top:0.04em}.gluon-add:first-child{top:0.53em;left:-0.08em}.gluon-add:after{content:'+'}.gluon-remove{color:#800000;position:relative;top:-0.03em}.gluon-remove:after{content:'–'}.left{text-align:left !important}.right{text-align:right !important}.inline{display:inline}.error500{border:1px dotted #ff0000;background-color:#ffffff;color:#000000;padding:0.5em}.errorbox{border:1px solid #FF0000;background-color:#FFCCCC;padding:5px;margin-bottom:5px}.errorbox a{color:#000000 !important}.the-key{text-align:left;font-size:1.4em;background:#ffe9b3;border:3pt dashed #dc0067;margin-bottom:0.5em;padding:0.5em}
/*
ATTENTION: This file is not compiled when building gluon.
The compiled version is at ../files/lib/gluon/web/www/static/gluon/cascade.css
Use sass like this to update it:
sass --sourcemap=none -C -t compressed sass/cascade.scss files/lib/gluon/web/www/static/gluon/cascade.css
When commiting changes to this file make sure to commit the respective
changes to the compilid version within the same commit!
*/
@charset "utf-8";
$ffyellow: #ffb400;
$ffmagenta: #dc0067;
$ffzusatz: #009ee0;
$red: #ee3300;
@mixin button {
&::-moz-focus-inner {
padding: 0;
border: 0;
}
display: inline-block;
zoom: 1;
line-height: normal;
white-space: nowrap;
vertical-align: baseline;
text-align: center;
cursor: pointer;
user-select: none;
font-size: 100%;
padding: 0.5em 1em;
color: rgba(0, 0, 0, 0.80);
border: none rgba(0, 0, 0, 0);
background-color: #E6E6E6;
text-decoration: none;
border-radius: 2px;
/* Transitions */
transition: 0.1s linear box-shadow;
&:active {
box-shadow: 0 0 0 1px rgba(0,0,0, 0.15) inset, 0 0 6px rgba(0,0,0, 0.20) inset;
}
&:focus {
outline: 0;
}
&:hover, &:focus {
background-image: linear-gradient(transparent, rgba(0,0,0, 0.05) 40%, rgba(0,0,0, 0.10));
}
&[disabled] {
border: none;
background-image: none;
opacity: 0.40;
cursor: not-allowed;
box-shadow: none;
}
}
@mixin button-primary {
background-color: $ffzusatz;
color: #fff;
}
.lang_he {
direction: RTL;
unicode-bidi: embed;
}
.hidden {
display: none;
}
html {
min-height: 100%;
height: auto;
position:relative;
}
body, input, select, option {
font-family: 'Open Sans', Arial, sans-serif;
font-size: 12pt;
}
body {
color: rgb(77, 78, 83);
line-height: 1.5em;
margin: 0;
display: flex;
flex-direction: column;
min-height: 100vh;
background-color: #f3f3f3;
}
a img {
border: none;
text-decoration: none;
}
.tabmenu1 {
text-align: center;
}
ul.tabmenu {
list-style: none;
padding: 0;
margin: 2em 0;
display: inline-flex;
}
ul.tabmenu li {
white-space: nowrap;
margin: 0 0.5em;
padding: 0;
text-align: center;
a {
display: block;
text-decoration: none;
padding: 1em;
margin: 0;
color: #333;
border-radius: 2em;
&:hover {
background: lighten($ffyellow, 35);
}
}
&.active a {
font-weight: bold;
background: white;
color: #333;
}
}
abbr,
acronym {
font-style: normal;
font-variant: normal;
}
abbr[title],
acronym[title] {
border-bottom: 1px dotted;
cursor: help;
}
a:link abbr[title],
a:visited abbr[title],
a:link acronym[title],
a:visited acronym[title] {
cursor: pointer;
}
code {
font-family: monospace;
white-space: pre;
}
#maincontent ul {
margin-left: 2em;
}
.clear {
clear: both;
}
.error {
color: #ff0000;
background-color: white;
}
#menubar {
display: flex;
background: $ffmagenta;
color: #ffffff;
}
#menubar a:link.topcat,
#menubar a:visited.topcat {
position: relative;
display: block;
padding: 0.5em;
text-decoration: none;
font-size: 80%;
font-weight: normal;
color: white;
&:hover, &:focus {
background: $ffyellow;
color: black;
}
&.active {
background: $ffyellow;
color: black;
font-weight: bold;
}
}
#menubar div.hostinfo {
position: relative;
margin: 0;
padding: 0.5em;
flex: 1;
font-weight: bold;
font-size: 80%;
}
#menubar div.hostinfo a {
&:link, &:visited {
text-decoration: none;
font-weight: bold;
color: white;
&:hover, &:focus {
text-decoration: underline;
}
}
}
#topmenu {
list-style: none;
margin: 0;
padding: 0;
}
#topmenu li {
display: inline-block;
}
#maincontent {
padding: 0 1em 2em;
max-width: 60em;
min-width: 40em;
margin: 1em auto;
}
#maincontent p {
margin-bottom: 1em;
}
.gluon-section {
margin: 0;
padding: 0;
border: none;
margin-bottom: 1.3em;
}
.gluon-section:last-child {
margin-bottom: 0.7em;
}
.gluon-section legend {
font-size: 1.4em;
font-weight: bold;
position: relative;
padding: 0;
margin-bottom: 0.5em;
}
.gluon-section h2 {
margin: 0em 0 0.5em -0.5em !important;
}
.gluon-section h3 {
text-decoration: none !important;
font-weight: bold !important;
color: #555555 !important;
margin: 0.25em !important;
font-size: 100% !important;
}
.gluon-section-descr {
margin-bottom: 2em;
}
input:placeholder {
color: #aaaaaa;
}
input:-webkit-input-placeholder {
color: #aaaaaa;
}
input:-moz-placeholder {
color: #aaaaaa;
}
input:-ms-input-placeholder {
color: #aaaaaa;
}
input[type=checkbox] {
display: none;
& + label {
display: inline-block;
position: relative;
width: 1em;
height: 1em;
margin: 0;
}
&:checked + label:after {
content: '✔';
color: $ffmagenta;
vertical-align: middle;
position: absolute;
top: 50%;
left: 0;
margin-top: -0.5em;
width: 100%;
text-align: center;
font-size: 1.7em;
}
}
input[type=radio] {
display: none;
& + label {
display: inline-block;
position: relative;
width: 0.8em;
height: 0.8em;
padding: 0.5em;
margin: 0.2em 0.2em 0.2em 0.1em;
border: none;
background: lighten($ffyellow, 30);
vertical-align: middle;
border-radius: 50%;
}
&:checked + label:after {
content: '•';
color: $ffmagenta;
vertical-align: middle;
position: absolute;
top: 50%;
left: 0;
margin-top: -0.4em;
width: 100%;
text-align: center;
font-size: 2em;
}
}
input[type=submit],
input[type=reset],
input[type=image],
input[type=button] {
cursor: pointer;
}
select,
input,
textarea,
input[type=checkbox] + label {
color: darken($ffzusatz, 30);
border: none;
background: lighten($ffyellow, 30);
border-radius: 3pt;
padding: 0.5em;
margin-top: 1px;
margin-bottom: 2px;
}
input[type=image] {
border: none;
}
select,
input[type=text],
input[type=password] {
min-width: 20em;
}
input.gluon-button {
@include button;
margin-left: 0.5em;
background-repeat: no-repeat;
}
input.gluon-button-reset {
background-color: $red;
color: #fff;
}
input.gluon-button-submit {
@include button-primary;
}
.gluon-input-invalid {
background: $red !important;
color: white;
}
div.gluon-section-remove input {
border-bottom: none;
}
textarea {
margin-left: -1px;
margin-bottom: 0.5em;
}
.gluon-section .gluon-rowstyle-1 h3 {
background-color: #eeeeff;
color: #555555;
}
.gluon-rowstyle-2 {
color: #000000;
}
div.gluon-value {
display: flex;
flex-direction: row;
margin-bottom: 0.5em;
}
.gluon-section-node .gluon-value:last-child {
margin-bottom: 0;
}
.gluon-value-title {
flex: 2;
text-align: right;
padding-top: 0.39em;
padding-right: 1em;
font-weight: bold;
}
div.gluon-value-field {
flex: 3;
position: relative;
input, select, input + label {
position: relative;
}
}
div.gluon-value-field-text {
flex: 3;
padding-top: 0.39em;
}
div.gluon-value-field-long {
flex: 10;
position: relative;
margin-top: 0.65em;
input, select, input + label {
position: relative;
}
}
div.gluon-value-field-long-after {
flex: 2;
}
div.gluon-value-description {
font-size: 8pt;
}
div.gluon-section-create {
clear: left;
white-space: nowrap;
vertical-align: top;
}
div.gluon-section-create .gluon-button {
margin: 0.25em;
}
input.gluon-section-create-name {
margin-right: -0.25em;
}
div.gluon-map-descr {
margin-bottom: 1em;
}
.gluon-map-descr:empty, .gluon-section-descr:empty {
display: none;
}
.gluon-map-descr, .gluon-section-descr, .gluon-page-actions {
padding: 1em;
background: #ececec;
}
.gluon-page-actions {
text-align: right;
display: flex;
flex-flow: row-reverse;
}
div.gluon-optionals {
padding: 0.25em;
border-bottom: 1px dotted #bbbbbb;
}
div.gluon-section-remove {
float: right;
}
.gluon-section-node {
clear: both;
position: relative;
border: none;
}
.gluon-section-node-tabbed {
border-top-left-radius: 0;
}
div.gluon-error {
font-size: 95%;
font-weight: bold;
color: #ff0000;
background-color: #ffffff;
}
.gluon-value-error input,
.gluon-value-error select {
background-color: #ffcccc;
}
.gluon-section-error {
color: red;
background-color: white;
font-size: 95%;
border: 1px dotted red;
margin: 3px;
padding: 3px;
}
.gluon-value-field var {
color: #2222FF;
}
.gluon-add:after, .gluon-remove:after {
cursor: pointer;
display: inline-block;
text-align: center;
vertical-align: middle;
font-size: 180%;
width: 1.2em;
height: 1em;
}
.gluon-add {
color: #008000;
position: relative;
left: 21em;
input + & {
left: 0;
top: 0.04em;
}
&:first-child {
top: 0.53em;
left: -0.08em;
}
&:after {
content: '+';
}
}
.gluon-remove {
color: #800000;
position: relative;
top: -0.03em;
&:after {
content: '–';
}
}
.left {
text-align: left !important;
}
.right {
text-align: right !important;
}
.inline {
display: inline;
}
.error500 {
border: 1px dotted #ff0000;
background-color: #ffffff;
color: #000000;
padding: 0.5em;
}
.errorbox {
border: 1px solid #FF0000;
background-color: #FFCCCC;
padding: 5px;
margin-bottom: 5px;
}
.errorbox a {
color: #000000 !important;
}
.the-key {
text-align: left;
font-size: 1.4em;
background: lighten($ffyellow, 35);
border: 3pt dashed $ffmagenta;
margin-bottom: 0.5em;
padding: 0.5em
}