s:option(Value, "domain", translate("hostname")).rmempty = true
s:option(Value, "username", translate("username")).rmempty = true
-s:option(Value, "password", translate("password")).rmempty = true
+pw = s:option(Value, "password", translate("password"))
+pw.rmempty = true
+pw.password = true
src = s:option(ListValue, "ip_source")
src:value("network", translate("network"))
unit:value("hours", "h")
-return m
\ No newline at end of file
+return m
s:option(Value, "domain", translate("hostname")).rmempty = true
s:option(Value, "username", translate("username")).rmempty = true
-s:option(Value, "password", translate("password")).rmempty = true
+pw = s:option(Value, "password", translate("password"))
+pw.rmempty = true
+pw.password = true
s.defaults.ip_source = "network"
s.defaults.ip_network = "wan"
unit:value("hours", "h")
-return m
\ No newline at end of file
+return m
stat_statistics = 'Statistics'
+stat_desc = 'The statistics package is based on <a href="http://collectd.org/index.shtml">Collectd</a> and uses <a href="http://oss.oetiker.ch/rrdtool/">RRD Tool</a> to render diagram images from collected data.'
stat_systemplugins = 'System plugins'
stat_networkplugins = 'Network plugins'
stat_outputplugins = 'Output plugins'
<i18n:msgs xmlns:i18n="http://luci.freifunk-halle.net/2008/i18n#" xmlns="http://www.w3.org/1999/xhtml">
<i18n:msg xml:id="stat_statistics">Statistics</i18n:msg>
+<i18n:msg xml:id="stat_desc">The statistics package is based on <a href="http://collectd.org/index.shtml">Collectd</a> and uses <a href="http://oss.oetiker.ch/rrdtool/">RRD Tool</a> to render diagram images from collected data.</i18n:msg>
<i18n:msg xml:id="stat_systemplugins">System plugins</i18n:msg>
<i18n:msg xml:id="stat_networkplugins">Network plugins</i18n:msg>
<i18n:msg xml:id="stat_outputplugins">Output plugins</i18n:msg>
stat_statistics = 'Estatísticas'
+stat_desc = 'As estatísticas são baseadas no <a href="http://collectd.org/index.shtml">Collectd</a> e é utilizado o <a href="http://oss.oetiker.ch/rrdtool/">RRD Tool</a> para renderização das imagens à partir dos dados coletados.'
stat_systemplugins = 'Plugis de Sistema'
stat_networkplugins = 'Plugins de rede'
stat_outputplugins = 'Plugins de saída'
stat_unixsock = 'UnixSock'
lucistatistics = 'Estatísticas'
lucistatistics_collectd = 'Configurações do Collectd'
-lucistatistics_collectd_desc = 'Collectd é um pequeno daemon que coleta dados de várias fontes através de diferentes plugins. Nesta página você pode alterar as configurações gerais do daemon collectdn.'
+lucistatistics_collectd_desc = 'Collectd é um pequeno daemon que coleta dados de várias fontes através de diferentes plugins. Nesta página você pode alterar as configurações gerais do daemon collectd.'
lucistatistics_collectd_hostname = 'Hostname'
lucistatistics_collectd_basedir = 'Diretório Base'
lucistatistics_collectd_include = 'Diretório para sub-configurações'
<i18n:msgs xmlns:i18n="http://luci.freifunk-halle.net/2008/i18n#" xmlns="http://www.w3.org/1999/xhtml">
<i18n:msg xml:id="stat_statistics">Estatísticas</i18n:msg>
+<i18n:msg xml:id="stat_desc">As estatísticas são baseadas no <a href="http://collectd.org/index.shtml">Collectd</a> e é utilizado o <a href="http://oss.oetiker.ch/rrdtool/">RRD Tool</a> para renderização das imagens à partir dos dados coletados.</i18n:msg>
<i18n:msg xml:id="stat_systemplugins">Plugis de Sistema</i18n:msg>
<i18n:msg xml:id="stat_networkplugins">Plugins de rede</i18n:msg>
<i18n:msg xml:id="stat_outputplugins">Plugins de saída</i18n:msg>
<i18n:msg xml:id="lucistatistics">Estatísticas</i18n:msg>
<i18n:msg xml:id="lucistatistics_collectd">Configurações do Collectd</i18n:msg>
-<i18n:msg xml:id="lucistatistics_collectd_desc">Collectd é um pequeno daemon que coleta dados de várias fontes através de diferentes plugins. Nesta página você pode alterar as configurações gerais do daemon collectdn.</i18n:msg>
+<i18n:msg xml:id="lucistatistics_collectd_desc">Collectd é um pequeno daemon que coleta dados de várias fontes através de diferentes plugins. Nesta página você pode alterar as configurações gerais do daemon collectd.</i18n:msg>
<i18n:msg xml:id="lucistatistics_collectd_hostname">Hostname</i18n:msg>
<i18n:msg xml:id="lucistatistics_collectd_basedir">Diretório Base</i18n:msg>
resolution = 'Resolução'
settings = 'Configurações'
uvc_streamer = 'Webcam streaming'
-uvc_streamer_desc = 'Configure seu Linux-UVC compatível com uma webcam. Coloque no seu browser por ex. <a href="http://%s:%i/">http://%s:%i/</a>'
+uvc_streamer_desc = 'Configure a sua webcam compatível com o Linux-UVC. Coloque no seu browser por ex. <a href="http://%s:%i/">http://%s:%i/</a>'
<i18n:msg xml:id="resolution">Resolução</i18n:msg>
<i18n:msg xml:id="settings">Configurações</i18n:msg>
<i18n:msg xml:id="uvc_streamer">Webcam streaming</i18n:msg>
-<i18n:msg xml:id="uvc_streamer_desc">Configure seu Linux-UVC compatível com uma webcam. Coloque no seu browser por ex. <a href="http://%s:%i/">http://%s:%i/</a></i18n:msg>
+<i18n:msg xml:id="uvc_streamer_desc">Configure a sua webcam compatível com o Linux-UVC. Coloque no seu browser por ex. <a href="http://%s:%i/">http://%s:%i/</a></i18n:msg>
</i18n:msgs>
dhcp_leases_active = 'Active Leases'
a_n_ptp = 'Point-to-Point Connections'
a_n_ptp1 = 'Point-to-Point connections with <abbr title="Point-to-Point Protocol over Ethernet">PPPoE</abbr> or <abbr title="Point-to-Point Tunneling Protocol">PPTP</abbr> are often used to connect a device over <abbr title="Digital Subscriber Line">DSL</abbr> or similar technologies to an internet access point.'
+network_interface_prereq = 'You need to install "comgt" for UMTS/GPRS, "ppp-mod-pppoe" for PPPoE, "ppp-mod-pppoa" for PPPoA or "pptp" for PPtP support'
+network_interface_prereq_mini = 'You need to install "ppp-mod-pppoe" for PPPoE or "pptp" for PPtP support'
network_interface_server = '<abbr title="Point-to-Point Tunneling Protocol">PPTP</abbr>-Server'
network_interface_demand = 'Automatic Disconnect'
network_interface_demand_desc = 'Time (in seconds) after which an unused connection will be closed'
<i18n:msg xml:id="dhcp_leases_active">Active Leases</i18n:msg>
<i18n:msg xml:id="a_n_ptp">Point-to-Point Connections</i18n:msg>
<i18n:msg xml:id="a_n_ptp1">Point-to-Point connections with <abbr title="Point-to-Point Protocol over Ethernet">PPPoE</abbr> or <abbr title="Point-to-Point Tunneling Protocol">PPTP</abbr> are often used to connect a device over <abbr title="Digital Subscriber Line">DSL</abbr> or similar technologies to an internet access point.</i18n:msg>
+<i18n:msg xml:id="network_interface_prereq">You need to install "comgt" for UMTS/GPRS, "ppp-mod-pppoe" for PPPoE, "ppp-mod-pppoa" for PPPoA or "pptp" for PPtP support</i18n:msg>
+<i18n:msg xml:id="network_interface_prereq_mini">You need to install "ppp-mod-pppoe" for PPPoE or "pptp" for PPtP support</i18n:msg>
<i18n:msg xml:id="network_interface_server"><abbr title="Point-to-Point Tunneling Protocol">PPTP</abbr>-Server</i18n:msg>
<i18n:msg xml:id="network_interface_demand">Automatic Disconnect</i18n:msg>
<i18n:msg xml:id="network_interface_demand_desc">Time (in seconds) after which an unused connection will be closed</i18n:msg>
luci_ethers = 'Statische Einträge'
dhcp_timeremain = 'Verbleibende Gültigkeit'
dhcp_leases_active = 'Aktive Zuweisungen'
+network_interface_prereq = 'Für die Unterstützung von UMTS/GPRS muss "comgt", für PPPoE "ppp-mod-pppoe", für PPPoA "ppp-mod-pppoa" und für PPtP "pptp" installiert sein'
+network_interface_prereq_mini = 'Für die Unterstützung von PPPoE muss "ppp-mod-pppoe" und für PPtP "pptp" installiert sein'
network_interface_demand = 'Automatische Trennung'
network_interface_demand_desc = 'Zeit (in s) nach der die Verbindung bei Inaktivität getrennt wird'
network_interface_keepalive = 'Keep-Alive'
<i18n:msg xml:id="dhcp_timeremain">Verbleibende Gültigkeit</i18n:msg>
<i18n:msg xml:id="dhcp_leases_active">Aktive Zuweisungen</i18n:msg>
+<i18n:msg xml:id="network_interface_prereq">Für die Unterstützung von UMTS/GPRS muss "comgt", für PPPoE "ppp-mod-pppoe", für PPPoA "ppp-mod-pppoa" und für PPtP "pptp" installiert sein</i18n:msg>
+<i18n:msg xml:id="network_interface_prereq_mini">Für die Unterstützung von PPPoE muss "ppp-mod-pppoe" und für PPtP "pptp" installiert sein</i18n:msg>
<i18n:msg xml:id="network_interface_demand">Automatische Trennung</i18n:msg>
<i18n:msg xml:id="network_interface_demand_desc">Zeit (in s) nach der die Verbindung bei Inaktivität getrennt wird</i18n:msg>
<i18n:msg xml:id="network_interface_keepalive">Keep-Alive</i18n:msg>
dhcp_leases_active = 'Leases Ativos'
a_n_ptp = 'Conexões Ponto-a-Ponto'
a_n_ptp1 = 'Conexões Ponto-a-Ponto com <abbr title="Protocolo Ponto-a-Ponto sobre Ethernet">PPPoE</abbr> ou <abbr title="Protocolo de Tunelamento Ponto-a-Ponto">PPTP</abbr> muitas vezes são usados para conectar um dispositivo sobre <abbr title="Linha Digital de Assinante">DSL</abbr> ou tecnologia similar para um ponto de acesso à internet.'
+network_interface_prereq = 'Você precisa instalar os pacotes "comgt" para UMTS/GPRS, "ppp-mod-pppoe" para PPPoE, "ppp-mod-pppoa" para PPPoA ou "pptp" para o suporte PPtP'
+network_interface_prereq_mini = 'Você precisa instalar os pacotes "ppp-mod-pppoe" para PPPoE ou "pptp" para o suporte PPtP'
network_interface_server = 'Servidor-<abbr title="Protocolo de Tunelamento Ponto-a-Ponto">PPTP</abbr>'
network_interface_demand = 'Desconexão Automática'
network_interface_demand_desc = 'Tempo (em segundos) para desconexão de uma conexão não mais utilizada'
<i18n:msg xml:id="dhcp_dnsmasq_noresolv">Ignorar arquivo resolv</i18n:msg>
<i18n:msg xml:id="dhcp_dnsmasq_dnsforwardmax">Consultas simultâneas</i18n:msg>
<i18n:msg xml:id="dhcp_dnsmasq_port">Porta do <abbr title="Sistema de Nomes de Domínios">DNS</abbr></i18n:msg>
-<i18n:msg xml:id="dhcp_dnsmasq_ednspacket_max">tamanho <abbr title="máximo">max.</abbr> <abbr title="Mecanismos de Extensão do Sistema de Nomes de Domínios">EDNS0</abbr> do pacote</i18n:msg>
-<i18n:msg xml:id="dhcp_dnsmasq_dhcpleasemax"><abbr title="máximo">max.</abbr> <abbr title="Protocolo de Configuração Dinâmica de Hosts">DHCP</abbr>-Leases</i18n:msg>
+<i18n:msg xml:id="dhcp_dnsmasq_ednspacket_max">tamanho <abbr title="máximo">max.</abbr> do pacote <abbr title="Mecanismos de Extensão do Sistema de Nomes de Domínios">EDNS0</abbr></i18n:msg>
+<i18n:msg xml:id="dhcp_dnsmasq_dhcpleasemax"><abbr title="máximo">max.</abbr> de <abbr title="Protocolo de Configuração Dinâmica de Hosts">DHCP</abbr>-Leases</i18n:msg>
<i18n:msg xml:id="dhcp_dnsmasq_addnhosts">arquivo host adicional</i18n:msg>
-<i18n:msg xml:id="dhcp_dnsmasq_queryport">porta da consulta</i18n:msg>
+<i18n:msg xml:id="dhcp_dnsmasq_queryport">porta para consulta</i18n:msg>
+<i18n:msg xml:id="dhcp_dnsmasq_enabletftp">Ativar servidor TFTP</i18n:msg>
+<i18n:msg xml:id="dhcp_dnsmasq_tftproot">Diretório raiz do servidor TFTP</i18n:msg>
+<i18n:msg xml:id="dhcp_dnsmasq_dhcpboot">Imagem para o boot remoto</i18n:msg>
<i18n:msg xml:id="a_n_switch">Switch</i18n:msg>
<i18n:msg xml:id="a_n_conntrack">Conexões Ativas</i18n:msg>
<i18n:msg xml:id="a_n_conntrack_desc">Esta página fornece informações sobre as conexões de rede ativas.</i18n:msg>
<i18n:msg xml:id="dhcp_leases_active">Leases Ativos</i18n:msg>
<i18n:msg xml:id="a_n_ptp">Conexões Ponto-a-Ponto</i18n:msg>
<i18n:msg xml:id="a_n_ptp1">Conexões Ponto-a-Ponto com <abbr title="Protocolo Ponto-a-Ponto sobre Ethernet">PPPoE</abbr> ou <abbr title="Protocolo de Tunelamento Ponto-a-Ponto">PPTP</abbr> muitas vezes são usados para conectar um dispositivo sobre <abbr title="Linha Digital de Assinante">DSL</abbr> ou tecnologia similar para um ponto de acesso à internet.</i18n:msg>
+<i18n:msg xml:id="network_interface_prereq">Você precisa instalar os pacotes "comgt" para UMTS/GPRS, "ppp-mod-pppoe" para PPPoE, "ppp-mod-pppoa" para PPPoA ou "pptp" para o suporte PPtP</i18n:msg>
+<i18n:msg xml:id="network_interface_prereq_mini">Você precisa instalar os pacotes "ppp-mod-pppoe" para PPPoE ou "pptp" para o suporte PPtP</i18n:msg>
<i18n:msg xml:id="network_interface_server">Servidor-<abbr title="Protocolo de Tunelamento Ponto-a-Ponto">PPTP</abbr></i18n:msg>
<i18n:msg xml:id="network_interface_demand">Desconexão Automática</i18n:msg>
<i18n:msg xml:id="network_interface_demand_desc">Tempo (em segundos) para desconexão de uma conexão não mais utilizada</i18n:msg>
local getmetatable, setmetatable = getmetatable, setmetatable
local getfenv, setfenv = getfenv, setfenv
local rawget, rawset, unpack = rawget, rawset, unpack
-local tostring, type, assert = tostring, type, assert
+local tostring, type, assert = tostring, type, assert
local ipairs, pairs, loadstring = ipairs, pairs, loadstring
local require, pcall, xpcall = require, pcall, xpcall
function dumptable(t, maxdepth, i, seen)
i = i or 0
seen = seen or setmetatable({}, {__mode="k"})
-
+
for k,v in pairs(t) do
perror(string.rep("\t", i) .. tostring(k) .. "\t" .. tostring(v))
if type(v) == "table" and (not maxdepth or i < maxdepth) then
-- @return String value containing the escaped data
function pcdata(value)
return value and tostring(value):gsub("[&\"'<>]", {
- ["&"] = "&",
- ['"'] = """,
- ["'"] = "'",
- ["<"] = "<",
- [">"] = ">"
+ ["&"] = "&",
+ ['"'] = """,
+ ["'"] = "'",
+ ["<"] = "<",
+ [">"] = ">"
})
end
function _serialize_table(t, seen)
assert(not seen[t], "Recursion detected.")
seen[t] = true
-
+
local data = ""
local idata = ""
local ilen = 0
for i = 1, ilen do
local v = serialize_data(t[i], seen)
idata = idata .. ( #idata > 0 and ", " or "" ) .. v
- end
+ end
return idata .. ( #data > 0 and #idata > 0 and ", " or "" ) .. data
end
-- @see get_bytecode
function serialize_data(val, seen)
seen = seen or setmetatable({}, {__mode="k"})
-
+
if val == nil then
return "nil"
elseif type(val) == "number" then
return pp and function()
local line = pp:read()
-
+
if not line then
pp:close()
end
-
+
return line
end
end
option resourcebase /luci-static/resources
config core brand
- option title "OpenWRT Kamikaze"
+ option title "OpenWrt Kamikaze"
option subtitle "Lua Configuration Interface"
- option firmware "OpenWRT Kamikaze"
+ option firmware "OpenWrt Kamikaze"
option distro ""
config extern flash_keep
$Id$
]]--
+
require("luci.tools.webadmin")
arg[1] = arg[1] or ""
+
+local has_3g = luci.fs.mtime("/usr/bin/gcom")
+local has_pptp = luci.fs.mtime("/usr/sbin/pptp")
+local has_pppd = luci.fs.mtime("/usr/sbin/pppd")
+local has_pppoe = luci.fs.glob("/usr/lib/pppd/*/rp-pppoe.so")
+local has_pppoa = luci.fs.glob("/usr/lib/pppd/*/pppoatm.so")
+
m = Map("network", translate("interfaces"), translate("a_n_ifaces1"))
s = m:section(NamedSection, arg[1], "interface")
back.titleref = luci.dispatcher.build_url("admin", "network", "network")
p = s:option(ListValue, "proto", translate("protocol"))
+p.override_scheme = true
+p.default = "static"
p:value("static", translate("static"))
p:value("dhcp", "DHCP")
-p:value("pppoe", "PPPoE")
-p:value("ppp", "PPP")
-p:value("3g", "UMTS/3G")
-p:value("pptp", "PPTP")
-p.default = "static"
+if has_pppd then p:value("ppp", "PPP") end
+if has_pppoe then p:value("pppoe", "PPPoE") end
+if has_pppoa then p:value("pppoa", "PPPoA") end
+if has_3g then p:value("3g", "UMTS/3G") end
+if has_pptp then p:value("pptp", "PPTP") end
+
+if not ( has_pppd and has_pppoe and has_pppoa and has_3g and has_pptp ) then
+ p.description = translate("network_interface_prereq")
+end
br = s:option(Flag, "type", translate("a_n_i_bridge"), translate("a_n_i_bridge1"))
br.enabled = "bridge"
pass = s:option(Value, "password", translate("password"))
pass.rmempty = true
+pass.password = true
pass:depends("proto", "pptp")
pass:depends("proto", "pppoe")
pass:depends("proto", "ppp")
<%+header%>
<h1><%:status%></h1>
<h2><%:syslog%></h2>
-<code><%=luci.util.pcdata(syslog)%></code>
+<div id="content_syslog">
+<textarea readonly="readonly" wrap="off" id="syslog"><%=luci.util.pcdata(syslog)%></textarea>
+</div>
<%+footer%>
$Id$
]]--
+
require("luci.tools.webadmin")
require("luci.sys")
+require("luci.fs")
+
+local has_pptp = luci.fs.mtime("/usr/sbin/pptp")
+local has_pppoe = luci.fs.glob("/usr/lib/pppd/*/rp-pppoe.so")
local network = luci.model.uci.cursor_state():get_all("network")
function txrx.cfgvalue(self, section)
local ix = self.map:get(section, "ifname")
-
+
local rx = netstat and netstat[ix] and netstat[ix][1]
rx = rx and luci.tools.webadmin.byte_format(tonumber(rx)) or "-"
-
+
local tx = netstat and netstat[ix] and netstat[ix][9]
tx = tx and luci.tools.webadmin.byte_format(tonumber(tx)) or "-"
-
+
return string.format("%s / %s", tx, rx)
end
function errors.cfgvalue(self, section)
local ix = self.map:get(section, "ifname")
-
+
local rx = netstat and netstat[ix] and netstat[ix][3]
local tx = netstat and netstat[ix] and netstat[ix][11]
-
+
rx = rx and tostring(rx) or "-"
tx = tx and tostring(tx) or "-"
-
+
return string.format("%s / %s", tx, rx)
end
s = m:section(NamedSection, "wan", "interface", translate("m_n_inet"))
s.addremove = false
p = s:option(ListValue, "proto", translate("protocol"))
+p.override_values = true
p:value("none", "disabled")
p:value("static", translate("manual", "manual"))
p:value("dhcp", translate("automatic", "automatic"))
-p:value("pppoe", "PPPoE")
-p:value("pptp", "PPTP")
+if has_pppoe then p:value("pppoe", "PPPoE") end
+if has_pptp then p:value("pptp", "PPTP") end
+
+if not ( has_pppoe and has_pptp ) then
+ p.description = translate("network_interface_prereq_mini")
+end
+
ip = s:option(Value, "ipaddr", translate("ipaddress"))
ip:depends("proto", "static")
usr:depends("proto", "pptp")
pwd = s:option(Value, "password", translate("password"))
+pwd.password = true
pwd:depends("proto", "pppoe")
pwd:depends("proto", "pptp")
-return m
\ No newline at end of file
+return m
background: url('../resources/cbi/user.gif') no-repeat scroll 1px center;
background-color: inherit;
color: #000000;
- padding-left: 17px;
+ text-indent: 17px;
}
input.cbi-input-password {
background: url('../resources/cbi/key.gif') no-repeat scroll 1px center;
background-color: inherit;
color: #000000;
- padding-left: 17px;
+ text-indent: 17px;
}
input.cbi-input-find {
width: 50% !important;
}
+* html .cbi-input-user,
+* html .cbi-input-password {
+ text-indent: 0 !important;
+ padding-left: 1.5em !important;
+}
+
* html .cbi-section legend {
background-color: #ffffff;
color: #555555;
table.cbi-section-table td .cbi-input-select {
width: 95% !important;
}
+
+.cbi-input-user,
+.cbi-input-password {
+ text-indent: 0 !important;
+ padding-left: 1.5em !important;
+ width: 18.5em !important;
+}
#!/bin/sh
uci batch <<-EOF
- set luci.themes.OpenWRT_Light=/luci-static/openwrt-light
+ set luci.themes.OpenWrt_Light=/luci-static/openwrt-light
commit luci
EOF
width: 11.5em;
}
+textarea#syslog {
+ width: 98%;
+ height: 450px;
+ border: 3px solid #cccccc;
+ padding: 5px;
+ font-family: monospace;
+ overflow: auto;
+}
+
#maincontent {
clear: both;
width: 80%;
}
#maincontent h2 {
- margin: 0.25em 0 0.5em 0;
font-size: 150%;
- font-weight: normal;
+ font-family: Trebuchet MS, Verdana, sans-serif;
+ font-weight: bold;
+ margin: 0.25em 0 0.7em 0;
+ border-bottom: 1px solid;
+ padding-top: 10px;
+ padding-bottom: 4px;
}
#maincontent h3 {
- margin: 0.5em 0;
- font-size: 120%;
- font-weight: normal;
- text-decoration: underline;
+ margin: 0.5em 0 1.1em 0;
+ font-size: 125%;
+ font-weight: bold;
+ font-style: italic;
+ font-family: Trebuchet MS, Verdana, sans-serif;
+ color: #27408B;
}
#maincontent p {
background: url('../resources/cbi/user.gif') no-repeat scroll 1px center;
background-color: inherit;
color: #000000;
- padding-left: 17px;
+ text-indent: 17px;
}
input.cbi-input-password {
background: url('../resources/cbi/key.gif') no-repeat scroll 1px center;
background-color: inherit;
color: #000000;
- padding-left: 17px;
+ text-indent: 17px;
}
input.cbi-input-find {
--- /dev/null
+/* obligatory IE6 Voodoo Code */
+
+* html body {
+ padding-left: 50% !important;
+}
+
+* html div#header {
+ margin-left: -100% !important;
+}
+
+* html div#menubar {
+ margin-left: -100% !important;
+ width: 200% !important;
+}
+
+* html ul.dropdowns li ul {
+ width: 10em;
+}
+
+* html ul.dropdowns li li {
+ clear: both;
+ float: left;
+}
+
+* html ul.dropdowns li li {
+ width: 100%;
+}
+
+* html ul.dropdowns li li a {
+ height: 1%;
+}
+
+* html div#maincontent {
+ margin-left: -80% !important;
+ width: 160% !important;
+}
+
+* html div.cbi-value-description {
+ width: auto !important;
+}
+
+* html div.cbi-value-field {
+ margin-left: 0 !important;
+ width: 100% !important;
+}
+
+* html .cbi-input-text,
+* html .cbi-input-user,
+* html .cbi-input-select,
+* html .cbi-input-password {
+ width: 50% !important;
+}
+
+* html .cbi-input-user,
+* html .cbi-input-password {
+ text-indent: 0 !important;
+ padding-left: 1.5em !important;
+}
+
+* html .cbi-section legend {
+ background-color: #ffffff;
+ color: #555555;
+}
+
+* html table.cbi-section-table td .cbi-input-text,
+* html table.cbi-section-table td .cbi-input-select {
+ width: 100% !important;
+}
+
+* html div.cbi-page-actions {
+ text-align: right !important;
+}
+
+* html div.cbi-value-field input,
+* html div.cbi-value-field select {
+ font-size: 90% !important;
+}
--- /dev/null
+div.cbi-value-field {
+ margin-left: 0 !important;
+}
+
+.cbi-section legend {
+ background-color: #ffffff;
+ color: #555555;
+}
+
+table.cbi-section-table td .cbi-input-text,
+table.cbi-section-table td .cbi-input-select {
+ width: 95% !important;
+}
+
+.cbi-input-user,
+.cbi-input-password {
+ text-indent: 0 !important;
+ padding-left: 1.5em !important;
+ width: 18.5em !important;
+}
#!/bin/sh
uci batch <<-EOF
- set luci.themes.OpenWRT=/luci-static/openwrt.org
+ set luci.themes.OpenWrt=/luci-static/openwrt.org
commit luci
EOF