* luci-0.8: merge r3607, r3608, r3611 and r3612

This commit is contained in:
Jo-Philipp Wich 2008-10-21 01:56:50 +00:00
parent 4e8af56ac1
commit 85fbb033cf
15 changed files with 1456 additions and 550 deletions

View file

@ -22,6 +22,8 @@ tinyproxy_tinyproxy_startservers = 'Servidores sobressalentes iniciar com'
tinyproxy_tinyproxy_statfile = 'Documento de estatísticas' tinyproxy_tinyproxy_statfile = 'Documento de estatísticas'
tinyproxy_tinyproxy_syslog = 'Escrever para syslog' tinyproxy_tinyproxy_syslog = 'Escrever para syslog'
tinyproxy_tinyproxy_timeout = 'Timeout de conexão' tinyproxy_tinyproxy_timeout = 'Timeout de conexão'
tinyproxy_tinyproxy_group = 'Grupo'
tinyproxy_tinyproxy_user = 'Usuário'
tinyproxy_tinyproxy_viaproxyname = 'Valor do cabeçalho "Via-Header"' tinyproxy_tinyproxy_viaproxyname = 'Valor do cabeçalho "Via-Header"'
tinyproxy_tinyproxy_xtinyproxy = 'Incluir o IP do cliente' tinyproxy_tinyproxy_xtinyproxy = 'Incluir o IP do cliente'
tinyproxy_type_proxy = 'Via proxy' tinyproxy_type_proxy = 'Via proxy'

View file

@ -442,9 +442,20 @@ endef
### Themes ### ### Themes ###
define Package/luci-theme-base
$(call Package/luci/thtemplate)
DEPENDS:=+luci-web
TITLE:=Common base for all themes
endef
define Package/luci-theme-base/install
$(call Package/luci/install/template,$(1),themes/base)
endef
define Package/luci-theme-openwrt define Package/luci-theme-openwrt
$(call Package/luci/thtemplate) $(call Package/luci/thtemplate)
TITLE:=OpenWRT.org (default) TITLE:=OpenWRT.org (default)
DEPENDS:=+luci-theme-base
endef endef
define Package/luci-theme-openwrt/install define Package/luci-theme-openwrt/install
@ -454,6 +465,7 @@ endef
define Package/luci-theme-openwrtlight define Package/luci-theme-openwrtlight
$(call Package/luci/thtemplate) $(call Package/luci/thtemplate)
TITLE:=OpenWRT.org - light variant without images TITLE:=OpenWRT.org - light variant without images
DEPENDS:=+luci-theme-base
endef endef
define Package/luci-theme-openwrtlight/install define Package/luci-theme-openwrtlight/install
@ -606,6 +618,10 @@ ifneq ($(CONFIG_PACKAGE_luci-sgi-cgi),)
PKG_SELECTED_MODULES+=libs/sgi-cgi PKG_SELECTED_MODULES+=libs/sgi-cgi
endif endif
ifneq ($(CONFIG_PACKAGE_luci-theme-base),)
PKG_SELECTED_MODULES+=themes/base
endif
ifneq ($(CONFIG_PACKAGE_luci-theme-openwrt),) ifneq ($(CONFIG_PACKAGE_luci-theme-openwrt),)
PKG_SELECTED_MODULES+=themes/openwrt.org PKG_SELECTED_MODULES+=themes/openwrt.org
endif endif
@ -672,6 +688,7 @@ $(eval $(call BuildPackage,luci-app-initmgr))
$(eval $(call BuildPackage,luci-sgi-cgi)) $(eval $(call BuildPackage,luci-sgi-cgi))
$(eval $(call BuildPackage,luci-theme-base))
$(eval $(call BuildPackage,luci-theme-openwrt)) $(eval $(call BuildPackage,luci-theme-openwrt))
$(eval $(call BuildPackage,luci-theme-openwrtlight)) $(eval $(call BuildPackage,luci-theme-openwrtlight))

View file

@ -158,10 +158,13 @@ dhcp_dnsmasq_logqueries = 'Log das consultas'
dhcp_dnsmasq_noresolv = 'Ignorar arquivo resolv' dhcp_dnsmasq_noresolv = 'Ignorar arquivo resolv'
dhcp_dnsmasq_dnsforwardmax = 'Consultas simultâneas' dhcp_dnsmasq_dnsforwardmax = 'Consultas simultâneas'
dhcp_dnsmasq_port = 'Porta do <abbr title="Sistema de Nomes de Domínios">DNS</abbr>' dhcp_dnsmasq_port = 'Porta do <abbr title="Sistema de Nomes de Domínios">DNS</abbr>'
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' 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>'
dhcp_dnsmasq_dhcpleasemax = '<abbr title="máximo">max.</abbr> <abbr title="Protocolo de Configuração Dinâmica de Hosts">DHCP</abbr>-Leases' dhcp_dnsmasq_dhcpleasemax = '<abbr title="máximo">max.</abbr> de <abbr title="Protocolo de Configuração Dinâmica de Hosts">DHCP</abbr>-Leases'
dhcp_dnsmasq_addnhosts = 'arquivo host adicional' dhcp_dnsmasq_addnhosts = 'arquivo host adicional'
dhcp_dnsmasq_queryport = 'porta da consulta' dhcp_dnsmasq_queryport = 'porta para consulta'
dhcp_dnsmasq_enabletftp = 'Ativar servidor TFTP'
dhcp_dnsmasq_tftproot = 'Diretório raiz do servidor TFTP'
dhcp_dnsmasq_dhcpboot = 'Imagem para o boot remoto'
a_n_switch = 'Switch' a_n_switch = 'Switch'
a_n_conntrack = 'Conexões Ativas' a_n_conntrack = 'Conexões Ativas'
a_n_conntrack_desc = 'Esta página fornece informações sobre as conexões de rede ativas.' a_n_conntrack_desc = 'Esta página fornece informações sobre as conexões de rede ativas.'

View file

@ -106,24 +106,22 @@ end
</div> </div>
<% end %> <% end %>
<%- if self.addremove then -%> <%- if self.addremove then -%>
<div class="cbi-section-table-row"> <% if self.template_addremove then include(self.template_addremove) else -%>
<td colspan="<%=count%>" class="cbi-section-table-optionals"> <div class="cbi-section-create cbi-tblsection-create">
<div class="cbi-section-create"> <% if self.anonymous then %>
<% if self.anonymous then %> <input class="cbi-button cbi-button-add" type="submit" value="<%:cbi_add%>" name="cbi.cts.<%=self.config%>.<%=self.sectiontype%>" title="<%:cbi_add%>" />
<input class="cbi-button cbi-button-add" type="submit" value="<%:cbi_add%>" name="cbi.cts.<%=self.config%>.<%=self.sectiontype%>" title="<%:cbi_add%>" /> <% else %>
<% else %> <% if self.invalid_cts then -%><div class="cbi-section-error"><% end %>
<% if self.invalid_cts then -%><div class="cbi-section-error"><% end %> <input type="text" class="cbi-section-create-name" name="cbi.cts.<%=self.config%>.<%=self.sectiontype%>" />
<input type="text" class="cbi-section-create-name" name="cbi.cts.<%=self.config%>.<%=self.sectiontype%>" /> <input class="cbi-button cbi-button-add" type="submit" value="<%:cbi_add%>" title="<%:cbi_add%>" />
<input class="cbi-button cbi-button-add" type="submit" value="<%:cbi_add%>" title="<%:cbi_add%>" /> <% if self.invalid_cts then -%>
<% if self.invalid_cts then -%> <br /><%:cbi_invalid%></div>
<br /><%:cbi_invalid%></div> <%- end %>
<%- end %> <% end %>
<% end %>
</div>
</td>
</div> </div>
<%- end -%> <%- end %>
<%- end -%>
</div> </div>
</fieldset> </fieldset>
<!-- /tblsection --> <!-- /tblsection -->

2
themes/base/Makefile Normal file
View file

@ -0,0 +1,2 @@
include ../../build/config.mk
include ../../build/module.mk

View file

@ -0,0 +1,120 @@
/*
Copyright (C) 2008 Alina Friedrichsen <x-alina@gmx.net>
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
*/
function initDropdowns() {
var aSelects = XHTML1.getElementsByTagName("select");
var isIE6 = false /*@cc_on || @_jscript_version < 5.7 @*/;
function showPlaceholder(sel) {
if( ! sel._ph ) {
var box = sel.getBoundingClientRect();
sel._dm = sel.currentStyle.display;
sel._ph = document.createElement('input');
sel.parentNode.insertBefore(sel._ph, sel);
sel._ph.style.width = ( box.right - box.left ) + 'px';
sel._ph.style.height = ( box.bottom - box.top ) + 'px';
sel._ph.style.margin = sel.currentStyle.margin;
}
sel._ph.value = sel.options[sel.selectedIndex].text;
sel._ph.style.display = sel._dm;
sel.style.display = 'none';
}
function hidePlaceholder(sel) {
if( sel._ph ) sel._ph.style.display = 'none';
sel.style.display = sel._dm;
}
function hideSelects() {
for(var i = 0; i < aSelects.length; i++) {
showPlaceholder(aSelects[i]);
}
}
function showSelects() {
for(var i = 0; i < aSelects.length; i++) {
hidePlaceholder(aSelects[i]);
}
}
function onmouseover(evt) {
XHTML1.addClass(evt.currentTarget, "over");
if( isIE6 ) hideSelects();
}
function onmouseout(evt) {
XHTML1.removeClass(evt.currentTarget, "over");
if( isIE6 ) showSelects();
}
function onfocus(evt) {
for(var element = evt.currentTarget; element; element = element.parentNode) {
if(XHTML1.isElement(element, "li")) {
XHTML1.addClass(element, "focus");
}
}
if( isIE6 ) hideSelects();
}
function onblur(evt) {
for(var element = evt.currentTarget; element; element = element.parentNode) {
if(XHTML1.isElement(element, "li")) {
XHTML1.removeClass(element, "focus");
}
}
if( isIE6 ) showSelects();
}
if(document.all) {
var liElements = XHTML1.getElementsByTagName("li");
for(var i = 0; i < liElements.length; i++) {
var li = liElements[i];
for(var element = li.parentNode; element; element = element.parentNode) {
if(XHTML1.isElement(element, "ul") && XHTML1.containsClass(element, "dropdowns")) {
XHTML1.addEventListener(li, "mouseover", onmouseover);
XHTML1.addEventListener(li, "mouseout", onmouseout);
break;
}
}
}
}
var aElements = XHTML1.getElementsByTagName("a");
for(var i = 0; i < aElements.length; i++) {
var a = aElements[i];
for(var element = a.parentNode; element; element = element.parentNode) {
if(XHTML1.isElement(element, "ul") && XHTML1.containsClass(element, "dropdowns")) {
XHTML1.addEventListener(a, "focus", onfocus);
XHTML1.addEventListener(a, "blur", onblur);
break;
}
}
}
}
if(XHTML1.isDOMSupported()) {
XHTML1.addEventListener(window, "load", initDropdowns);
}

View file

@ -0,0 +1,91 @@
/*
Copyright (C) 2008 Alina Friedrichsen <x-alina@gmx.net>
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
*/
function VarType() {
}
VarType.isNull = function(obj) {
if(typeof obj == "undefined") return true;
if(typeof obj == "object" && (!obj)) return true;
return false;
};
VarType.toFloat = function(value) {
value = Number(value);
return value;
};
VarType.toDecimal = function(value) {
value = Number(value);
if(!isFinite(value)) value = 0.0;
return value;
};
VarType.toInt = function(value) {
value = Number(value);
if(!isFinite(value)) value = 0.0;
value = Math.floor(value);
return value;
};
VarType.toUInt = function(value) {
value = Number(value);
if(!isFinite(value)) value = 0.0;
else if(value < 0.0) value = 0.0;
value = Math.floor(value);
return value;
};
VarType.toStr = function(value) {
if(VarType.isNull(value)) value = "";
value = String(value);
return value;
};
VarType.toBool = function(value) {
value = Boolean(value);
return value;
};
VarType.needObject = function(obj) {
if(typeof obj != "object" || (!obj)) throw new TypeError();
};
VarType.needInstanceOf = function(obj, type) {
if(!(obj instanceof type)) throw new TypeError();
};
VarType.needFunction = function(obj) {
if(typeof obj != "function") throw new TypeError();
};
VarType.needNode = function(obj, type) {
VarType.needObject(obj);
if(VarType.isNull(obj.nodeType)) throw new TypeError();
if(!VarType.isNull(type)) {
type = VarType.toInt(type);
if(obj.nodeType != type) throw new TypeError();
}
};

View file

@ -0,0 +1,271 @@
/*
Copyright (C) 2007, 2008 Alina Friedrichsen <x-alina@gmx.net>
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
*/
var XMLNS_XMLNS = "http://www.w3.org/2000/xmlns/";
var XMLNS_XML = "http://www.w3.org/XML/1998/namespace";
var XMLNS_XHTML = "http://www.w3.org/1999/xhtml";
function W3CDOM_Event(currentTarget) {
VarType.needObject(currentTarget);
this.currentTarget = currentTarget;
this.preventDefault = function() { window.event.returnValue = false; };
return this;
}
function XHTML1() {
}
XHTML1.isDOMSupported = function() {
if(!document.getElementById) return false;
if(!(window.addEventListener || window.attachEvent)) return false;
return true;
};
XHTML1.isXHTML = function() {
if(document.documentElement.nodeName == "HTML") return false;
return true;
};
XHTML1.addEventListener = function(target, type, listener) {
VarType.needObject(target);
type = VarType.toStr(type);
VarType.needFunction(listener);
if(target.addEventListener) {
target.addEventListener(type, listener, false);
}
else if(target.attachEvent) {
target.attachEvent("on" + type, function() { listener(new W3CDOM_Event(target)); } );
}
};
XHTML1.createElement = function(tagName) {
tagName = VarType.toStr(tagName);
if(XHTML1.isXHTML()) {
return document.createElementNS(XMLNS_XHTML, tagName.toLowerCase());
}
return document.createElement(tagName.toUpperCase());
};
XHTML1.getElementsByTagName = function(tagName) {
tagName = VarType.toStr(tagName);
if(XHTML1.isXHTML()) {
return document.getElementsByTagNameNS(XMLNS_XHTML, tagName.toLowerCase());
}
return document.getElementsByTagName(tagName.toUpperCase());
};
XHTML1.isElement = function(node, tagName) {
VarType.needNode(node);
tagName = VarType.toStr(tagName);
if(node.nodeType == 1) {
if(XHTML1.isXHTML()) {
if(node.namespaceURI == XMLNS_XHTML) {
if(node.localName == tagName.toLowerCase()) return true;
}
} else {
if(node.nodeName == tagName.toUpperCase()) return true;
}
}
return false;
};
XHTML1.getAttribute = function(element, name) {
VarType.needNode(element, 1);
name = VarType.toStr(name);
name = name.toLowerCase();
if(XHTML1.isXHTML()) {
return element.getAttributeNS(null, name);
}
if(name == "class") {
return element.className;
}
return element.getAttribute(name);
};
XHTML1.setAttribute = function(element, name, value) {
VarType.needNode(element, 1);
name = VarType.toStr(name);
value = VarType.toStr(value);
name = name.toLowerCase();
if(XHTML1.isXHTML()) {
element.setAttributeNS(null, name, value);
return;
}
if(name == "class") {
element.className = value;
return;
}
element.setAttribute(name, value);
};
XHTML1.removeAttribute = function(element, name) {
VarType.needNode(element, 1);
name = VarType.toStr(name);
name = name.toLowerCase();
if(XHTML1.isXHTML()) {
element.removeAttributeNS(null, name);
return;
}
if(name == "class") {
element.className = "";
return;
}
element.removeAttribute(name);
};
XHTML1.containsClass = function(element, className) {
VarType.needNode(element, 1);
className = VarType.toStr(className).replace(/^\s+/g, "").replace(/\s+$/g, "");
var classString = XHTML1.getAttribute(element, "class").replace(/\s+/g, " ").replace(/^\s+/g, "").replace(/\s+$/g, "");
var classArray = classString.split(" ");
for(var i = 0; i < classArray.length; i++) {
if(classArray[i] == className) return true;
}
return false;
};
XHTML1.addClass = function(element, className) {
VarType.needNode(element, 1);
className = VarType.toStr(className).replace(/^\s+/g, "").replace(/\s+$/g, "");
var classString = XHTML1.getAttribute(element, "class").replace(/\s+/g, " ").replace(/^\s+/g, "").replace(/\s+$/g, "");
var classArray = classString.split(" ");
classString = "";
for(var i = 0; i < classArray.length; i++) {
if(classArray[i] != className) {
if(classString == "") classString = classArray[i];
else classString += " " + classArray[i];
}
}
if(classString == "") classString = className;
else classString += " " + className;
XHTML1.setAttribute(element, "class", classString);
};
XHTML1.removeClass = function(element, className) {
VarType.needNode(element, 1);
className = VarType.toStr(className).replace(/^\s+/g, "").replace(/\s+$/g, "");
var classString = XHTML1.getAttribute(element, "class").replace(/\s+/g, " ").replace(/^\s+/g, "").replace(/\s+$/g, "");
var classArray = classString.split(" ");
classString = "";
for(var i = 0; i < classArray.length; i++) {
if(classArray[i] != className) {
if(classString == "") classString = classArray[i];
else classString += " " + classArray[i];
}
}
XHTML1.setAttribute(element, "class", classString);
};
XHTML1.removeAllChildren = function(node) {
VarType.needNode(node);
while(node.lastChild) {
node.removeChild(node.lastChild);
}
};
XHTML1.getTextContent = function(node) {
VarType.needNode(node);
if(typeof node.textContent != "undefined") {
return node.textContent;
}
switch(node.nodeType) {
case 1:
case 2:
case 5:
case 6:
case 11:
var textContent = "";
for(node = node.firstChild; node; node = node.nextSibling) {
if(node.nodeType == 7) continue;
if(node.nodeType == 8) continue;
textContent += VarType.toStr(XHTML1.getTextContent(node));
}
return textContent;
case 3:
case 4:
case 7:
case 8:
return node.nodeValue;
}
return null;
};
XHTML1.setTextContent = function(node, value) {
VarType.needNode(node);
value = VarType.toStr(value);
if(typeof node.textContent != "undefined") {
node.textContent = value;
}
switch(node.nodeType) {
case 1:
case 2:
case 5:
case 6:
case 11:
XHTML1.removeAllChildren(node);
if(value != "") {
node.appendChild(document.createTextNode(value));
}
break;
case 3:
case 4:
case 7:
case 8:
node.nodeValue = value;
break;
}
};

View file

@ -1,14 +1,41 @@
@charset "utf-8";
@media all {
html,
body {
background-color: #4a6b7c;
color: #ffffff;
}
body {
font-family: Verdana, Arial, sans-serif;
font-size: 101%;
line-height: 100%;
}
* { * {
margin: 0; margin: 0;
padding: 0; padding: 0;
} }
body { abbr,
background-color: #4a6b7c; acronym {
color: #ffffff; font-style: normal;
font-family: Verdana, Arial, sans-serif; font-variant: normal;
font-size: 100%; }
line-height: 100%;
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 { code {
@ -16,137 +43,290 @@ code {
white-space: pre; white-space: pre;
} }
div#content ul { #maincontent ul {
margin-left: 2em; margin-left: 2em;
} }
.warning { .warning {
color: red !important; color: red;
background-color: white;
font-weight: bold; font-weight: bold;
} }
.clear { .clear {
clear: both; clear: both;
height: 1px;
} }
.skiplink,
.navigation,
.hidden { .hidden {
display: none; position: absolute;
left: -1000px;
top: -1000px;
width: 0px;
height: 0px;
overflow: hidden;
display: inline;
} }
.error { .error {
color: #ff0000; color: #ff0000;
background-color: white;
} }
#header { #header {
background-color: #557788; background-color: #557788;
color: #ffffff;
text-align: right;
padding: 0.5em;
}
#header h1 {
display: inline;
}
#header p {
display: inline;
}
#header h1,
#header p {
font-size: 70%;
font-weight: normal;
line-height: 160%;
text-align: right; text-align: right;
} }
#header .info { ul.dropdowns {
padding: 1em 1em;
font-size: 70%;
line-height: 160%;
}
#header .title {
display: none;
}
.pathbar {
display: none;
}
.menubar {
width: 100%;
min-height: 1.8em;
background: #000000;
color: #ffffff;
}
.mainmenu {
float: left; float: left;
margin: 0;
padding: 0;
width: auto; width: auto;
min-height: 1.8em; list-style: none;
background: #000000;
color: #ffffff;
} }
.mainmenu div { html>body ul.dropdowns {
position: relative;
}
ul.dropdowns li,
ul.dropdowns ul {
margin: 0;
padding: 0;
list-style: none;
}
ul.dropdowns li {
float: left; float: left;
} position: relative;
.mainmenu li {
white-space: nowrap; white-space: nowrap;
} }
.mainmenu div ul { ul.dropdowns li ul {
display: none;
position: absolute; position: absolute;
z-index: 1000;
top: auto;
min-width: 10em;
}
ul.dropdowns li li {
float: none;
position: relative;
}
ul.dropdowns li a {
display: block;
}
ul.dropdowns ul li ul {
top: 0;
}
ul.dropdowns li ul,
ul.dropdowns li.over ul ul,
ul.dropdowns li.focus ul ul,
ul.dropdowns li:hover ul ul,
ul.dropdowns li.over ul ul ul,
ul.dropdowns li.focus ul ul ul,
ul.dropdowns li:hover ul ul ul,
ul.dropdowns li.over ul ul ul ul,
ul.dropdowns li.focus ul ul ul ul,
ul.dropdowns li:hover ul ul ul ul {
left: -3000px;
}
ul.dropdowns li.over ul,
ul.dropdowns li.focus ul,
ul.dropdowns li:hover ul {
left: 0;
}
ul.dropdowns ul li.over ul,
ul.dropdowns ul li.focus ul,
ul.dropdowns ul li:hover ul,
ul.dropdowns ul ul li.over ul,
ul.dropdowns ul ul li.focus ul,
ul.dropdowns ul ul li:hover ul,
ul.dropdowns ul ul ul li.over ul,
ul.dropdowns ul ul ul li.focus ul,
ul.dropdowns ul ul ul li:hover ul {
left: 100%;
}
#menubar {
position: relative;
width: 100%;
background: #000000;
color: #ffffff;
}
#menubar .warning {
color: red;
background-color: #557788;
}
#menubar ul.dropdowns {
min-height: 1.8em;
background: #000000;
color: #ffffff;
}
#menubar ul.dropdowns li ul {
background: #000000; background: #000000;
color: #ffffff; color: #ffffff;
border-width: 0 1px 1px 1px; border-width: 0 1px 1px 1px;
border-style: solid; border-style: solid;
border-color: #444444; border-color: #444444;
list-style-type: none;
} }
.mainmenu ul li:hover > ul, #menubar ul.dropdowns ul li ul {
.mainmenu div:hover > ul {
display: block;
}
.mainmenu ul li > ul {
left: 100%;
margin-top: -1.8em;
border-width: 1px; border-width: 1px;
} }
.modemenu a, html #menubar a:link,
.mainmenu a { html #menubar a:visited {
position: relative;
display: block; display: block;
padding: 0.5em; padding: 0.5em;
background: #000000;
color: #ffffff; color: #ffffff;
text-decoration: none; text-decoration: none;
font-size: 80%; font-size: 80%;
font-weight: normal;
} }
.mainmenu .active a,
.modemenu .active a { html #menubar a:link:hover,
html #menubar a:visited:hover,
html #menubar a:link:active,
html #menubar a:visited:active,
#menubar a:link:focus,
#menubar a:visited:focus {
background: #000000;
color: #ffff00; color: #ffff00;
font-weight: bold; font-weight: bold;
} }
.mainmenu li:hover > span > a, html #menubar a:link.active,
.mainmenu div:hover > a { html #menubar a:visited.active,
font-weight: bold; html #menubar a:link.preactive,
} html #menubar a:visited.preactive {
background: #000000;
.modemenu a:hover,
.modemenu a:focus,
.mainmenu a:hover,
.mainmenu a:focus {
color: #ffff00; color: #ffff00;
font-weight: bold; font-weight: bold;
} }
.mainmenu div.preactive > a { html #menubar a:link.warning,
color: #ffff00; html #menubar a:visited.warning {
background: #000000;
color: red;
font-weight: bold; font-weight: bold;
} }
.modemenu ul { #menubar ul.dropdowns li.over>a,
#menubar ul.dropdowns li.focus>a,
#menubar ul.dropdowns li:hover>a {
font-weight: bold;
}
.lang_de #submenu_mini_system { min-width: 13.3em; }
* html .lang_de #submenu_mini_system { width: 13.3em; }
.lang_pt-br #submenu_mini_network { min-width: 14em; }
* html .lang_pt-br #submenu_mini_network { width: 14em; }
.lang_pt-br #submenu_mini_system { min-width: 11.5em; }
* html .lang_pt-br #submenu_mini_system { width: 11.5em; }
.lang_ru #submenu_mini_system { min-width: 18em; }
* html .lang_ru #submenu_mini_system { width: 18em; }
.lang_pt-br #submenu_admin_index { min-width: 11em; }
* html .lang_pt-br #submenu_admin_index { width: 11em; }
.lang_ru #submenu_admin_index { min-width: 15.5em; }
* html .lang_ru #submenu_admin_index { width: 15.5em; }
.lang_ru #submenu_admin_status { min-width: 10.5em; }
* html .lang_ru #submenu_admin_status { width: 10.5em; }
.lang_de #submenu_admin_system { min-width: 13.3em; }
* html .lang_de #submenu_admin_system { width: 13.3em; }
.lang_fr #submenu_admin_system { min-width: 14.5em; }
* html .lang_fr #submenu_admin_system { width: 14.5em; }
.lang_pt-br #submenu_admin_system { min-width: 11.5em; }
* html .lang_pt-br #submenu_admin_system { width: 11.5em; }
.lang_ru #submenu_admin_system { min-width: 18em; }
* html .lang_ru #submenu_admin_system { width: 18em; }
#submenu_admin_services_chillispot { min-width: 15.5em; }
* html #submenu_admin_services_chillispot { width: 15.5em; }
#submenu_admin_services_coovachilli { min-width: 15em; }
* html #submenu_admin_services_coovachilli { width: 15em; }
.lang_ru #submenu_admin_network_routes { min-width: 15.3em; }
* html .lang_ru #submenu_admin_network_routes { width: 15.3em; }
#submenu_admin_network_firewall { min-width: 14em; }
* html #submenu_admin_network_firewall { width: 14em; }
.lang_de #submenu_admin_network_firewall { min-width: 16.5em; }
* html .lang_de #submenu_admin_network_firewall { width: 16.5em; }
.lang_pt-br #submenu_admin_network_firewall { min-width: 15em; }
* html .lang_pt-br #submenu_admin_network_firewall { width: 15em; }
#modemenu {
width: auto; width: auto;
background: #000000; background: #000000;
color: #ffffff; color: #ffffff;
list-style-type: none; list-style: none;
margin-right: 1px;
} }
.modemenu li { #modemenu li {
float: right; float: right;
list-style: none;
} }
#content { #savemenu {
float: right;
margin-right: 2em;
}
.lang_de #submenu_admin_uci {
width: 12em;
}
.lang_ru #submenu_admin_uci {
width: 11.5em;
}
#maincontent {
clear: both; clear: both;
width: 80%; width: 80%;
margin: 0 auto; margin: 0 auto;
@ -159,20 +339,20 @@ div#content ul {
font-size: 80%; font-size: 80%;
} }
#content h1 { #maincontent h2 {
margin: 0.25em 0 0.5em 0; margin: 0.25em 0 0.5em 0;
font-size: 150%; font-size: 150%;
font-weight: normal; font-weight: normal;
} }
#content h2 { #maincontent h3 {
margin: 0.5em 0; margin: 0.5em 0;
font-size: 120%; font-size: 120%;
font-weight: normal; font-weight: normal;
text-decoration: underline; text-decoration: underline;
} }
#content p { #maincontent p {
margin-bottom: 1em; margin-bottom: 1em;
} }
@ -181,6 +361,7 @@ div#content ul {
padding: 0.5em 1em; padding: 0.5em 1em;
border: 1px dotted #555555; border: 1px dotted #555555;
background-color: #ffffff; background-color: #ffffff;
color: #000000;
} }
.cbi-section legend { .cbi-section legend {
@ -188,6 +369,7 @@ div#content ul {
font-weight: bold; font-weight: bold;
height: 1em; height: 1em;
padding: 0 0.25em; padding: 0 0.25em;
background-color: transparent;
color: #555555; color: #555555;
} }
@ -196,9 +378,11 @@ div#content ul {
} }
.cbi-section h3 { .cbi-section h3 {
height: 1.5em; text-decoration: none !important;
font-size: 90%; font-weight: bold !important;
color: #555555; color: #555555 !important;
margin: 0.25em !important;
font-size: 100% !important;
} }
.cbi-section-descr { .cbi-section-descr {
@ -214,10 +398,13 @@ div#content ul {
background-color: inherit; background-color: inherit;
} }
ul.cbi-apply {
font-size: 90%;
}
input[type=submit], input[type=submit],
input[type=reset], input[type=reset],
input[type=image], input[type=image] {
label {
cursor: pointer; cursor: pointer;
} }
@ -242,6 +429,7 @@ select:hover,
textarea:focus, textarea:focus,
textarea:hover { textarea:hover {
background-color: #ffffff; background-color: #ffffff;
color: #000000;
} }
select, select,
@ -259,24 +447,28 @@ td input[type=password] {
input.cbi-input-user { input.cbi-input-user {
background: url('../resources/cbi/user.gif') no-repeat scroll 1px center; background: url('../resources/cbi/user.gif') no-repeat scroll 1px center;
background-color: inherit; background-color: inherit;
color: #000000;
padding-left: 17px; padding-left: 17px;
} }
input.cbi-input-key { input.cbi-input-password {
background: url('../resources/cbi/key.gif') no-repeat scroll 1px center; background: url('../resources/cbi/key.gif') no-repeat scroll 1px center;
background-color: inherit; background-color: inherit;
color: #000000;
padding-left: 17px; padding-left: 17px;
} }
input.cbi-input-find { input.cbi-input-find {
background: url('../resources/cbi/find.gif') no-repeat scroll 1px center; background: url('../resources/cbi/find.gif') no-repeat scroll 1px center;
background-color: inherit; background-color: inherit;
color: #000000;
padding-left: 17px; padding-left: 17px;
} }
input.cbi-input-reload { input.cbi-input-reload {
background: url('../resources/cbi/reload.gif') no-repeat scroll 1px center; background: url('../resources/cbi/reload.gif') no-repeat scroll 1px center;
background-color: inherit; background-color: inherit;
color: #000000;
padding-left: 17px; padding-left: 17px;
} }
@ -284,6 +476,7 @@ input.cbi-input-add,
input.cbi-button-add { input.cbi-button-add {
background: url('../resources/cbi/add.gif') no-repeat scroll 1px center; background: url('../resources/cbi/add.gif') no-repeat scroll 1px center;
background-color: inherit; background-color: inherit;
color: #000000;
padding-left: 17px; padding-left: 17px;
padding-right: 1px; padding-right: 1px;
} }
@ -292,6 +485,7 @@ input.cbi-input-fieldadd,
input.cbi-button-fieldadd { input.cbi-button-fieldadd {
background: url(../resources/cbi/fieldadd.gif) no-repeat scroll 1px center; background: url(../resources/cbi/fieldadd.gif) no-repeat scroll 1px center;
background-color: inherit; background-color: inherit;
color: #000000;
padding-left: 17px; padding-left: 17px;
padding-right: 1px; padding-right: 1px;
} }
@ -300,6 +494,7 @@ input.cbi-input-reset,
input.cbi-button-reset { input.cbi-button-reset {
background: url('../resources/cbi/reset.gif') no-repeat scroll 1px center; background: url('../resources/cbi/reset.gif') no-repeat scroll 1px center;
background-color: inherit; background-color: inherit;
color: #000000;
padding-left: 17px; padding-left: 17px;
padding-right: 1px; padding-right: 1px;
} }
@ -308,6 +503,7 @@ input.cbi-input-save,
input.cbi-button-save { input.cbi-button-save {
background: url('../resources/cbi/save.gif') no-repeat scroll 1px center; background: url('../resources/cbi/save.gif') no-repeat scroll 1px center;
background-color: inherit; background-color: inherit;
color: #000000;
padding-left: 17px; padding-left: 17px;
padding-right: 1px; padding-right: 1px;
} }
@ -316,6 +512,7 @@ input.cbi-input-apply,
input.cbi-button-apply { input.cbi-button-apply {
background: url('../resources/cbi/apply.gif') no-repeat scroll 1px center; background: url('../resources/cbi/apply.gif') no-repeat scroll 1px center;
background-color: inherit; background-color: inherit;
color: #000000;
padding-left: 17px; padding-left: 17px;
padding-right: 1px; padding-right: 1px;
} }
@ -324,6 +521,7 @@ input.cbi-input-remove,
div.cbi-section-remove input { div.cbi-section-remove input {
background: url('../resources/cbi/remove.gif') no-repeat scroll 1px center; background: url('../resources/cbi/remove.gif') no-repeat scroll 1px center;
background-color: inherit; background-color: inherit;
color: #000000;
padding-left: 17px; padding-left: 17px;
padding-right: 1px; padding-right: 1px;
} }
@ -343,8 +541,14 @@ form > div > input[type=reset] {
margin-left: 0.5em; margin-left: 0.5em;
} }
table td,
table th {
color: #000000;
}
table.smalltext { table.smalltext {
background: #f5f5f5; background: #f5f5f5;
color: #000000;
border-top: 1px solid #666666; border-top: 1px solid #666666;
border-right: 1px solid #666666; border-right: 1px solid #666666;
border-bottom: 1px solid #666666; border-bottom: 1px solid #666666;
@ -357,6 +561,7 @@ table.smalltext {
table.smalltext tr:hover td { table.smalltext tr:hover td {
background-color: #bbddee; background-color: #bbddee;
color: #000000;
} }
table.smalltext tr th { table.smalltext tr th {
@ -371,12 +576,19 @@ table.smalltext tr td {
border-left: 1px solid #666666; border-left: 1px solid #666666;
} }
.cbi-rowstyle-1 { table.cbi-section-table .cbi-rowstyle-1,
table.cbi-section-table .cbi-rowstyle-1 * {
background-color: #eeeeff; background-color: #eeeeff;
color: #000000;
}
.cbi-section .cbi-rowstyle-1 h3 {
background-color: #eeeeff;
color: #555555;
} }
.cbi-rowstyle-2 { .cbi-rowstyle-2 {
color: #000000;
} }
div.cbi-value { div.cbi-value {
@ -388,36 +600,42 @@ div.cbi-value {
div.cbi-value:hover { div.cbi-value:hover {
background: #f8f8f8; background: #f8f8f8;
} color: #000000;
div.cbi-value:last-child {
border: none;
} }
.cbi-value-title { .cbi-value-title {
float: left; float: left;
width: 40%; width: 40%;
line-height: 1.8em;
} }
div.cbi-value-field { div.cbi-value-field {
width: 58%; width: 58%;
margin: 0.25em 0 0.25em 40%; margin-left: 40%;
padding: 0.25em 0;
} }
div.cbi-value-description { div.cbi-value-description {
font-size: 90%; font-size: 90%;
} display: inline;
div.cbi-value-field > div.cbi-value-description {
display: none;
}
div.cbi-value:hover div.cbi-value-field > div.cbi-value-description {
display: block;
} }
div.cbi-section-create { div.cbi-section-create {
clear: left; clear: left;
white-space: nowrap;
vertical-align: top;
}
div.cbi-tblsection-create {
border-bottom: 1px dotted #bbbbbb;
}
div.cbi-section-create .cbi-button {
margin: 0.25em;
}
input.cbi-section-create-name {
margin-right: -0.25em;
} }
div.cbi-map-descr { div.cbi-map-descr {
@ -425,8 +643,8 @@ div.cbi-map-descr {
} }
div.cbi-optionals { div.cbi-optionals {
margin: 0.5em 0; padding: 0.25em;
padding: 0 0.25em; border-bottom: 1px dotted #bbbbbb;
} }
div.cbi-section-remove { div.cbi-section-remove {
@ -435,10 +653,18 @@ div.cbi-section-remove {
.cbi-section-node { .cbi-section-node {
clear: both; clear: both;
border: 1px dotted #bbbbbb; border-top: 1px dotted #bbbbbb;
border-left: 1px dotted #bbbbbb;
border-right: 1px dotted #bbbbbb;
border-bottom: none;
padding-bottom: 0; padding-bottom: 0;
} }
.cbi-section-node table div {
padding-bottom: 0;
border-bottom: none;
}
.cbi-section-node div.cbi-section-table-row { .cbi-section-node div.cbi-section-table-row {
margin: 0.25em; margin: 0.25em;
} }
@ -470,31 +696,29 @@ td.cbi-section-table-optionals {
div.cbi-error { div.cbi-error {
font-size: 95%; font-size: 95%;
font-weight: bold; font-weight: bold;
color: #FF0000; color: #ff0000;
background-color: #ffffff;
} }
td.cbi-value-error { td.cbi-value-error {
border-color: red !important; border-color: red;
} }
.cbi-value-error input, .cbi-value-error input,
.cbi-value-error select { .cbi-value-error select {
color: red !important; color: red;
background-color: #FFCCCC; background-color: #ffcccc;
} }
.cbi-section-error { .cbi-section-error {
color: red; color: red;
background-color: white;
font-size: 95%; font-size: 95%;
border: 1px dotted red; border: 1px dotted red;
margin: 3px; margin: 3px;
padding: 3px; padding: 3px;
} }
ul.cbi-apply {
font-size: 90%;
}
.right { .right {
text-align: right; text-align: right;
} }
@ -506,7 +730,9 @@ ul.cbi-apply {
text-align: right; text-align: right;
} }
.luci a { .luci a:link,
.luci a:visited {
background-color: transparent;
color: #666666; color: #666666;
text-decoration: none; text-decoration: none;
font-size: 70%; font-size: 70%;
@ -518,85 +744,39 @@ ul.cbi-apply {
.error500 { .error500 {
white-space: normal; white-space: normal;
border: 1px dotted #FF0000; border: 1px dotted #ff0000;
background-color: #FFFFFF; background-color: #ffffff;
color: #000000;
padding: 0.5em; padding: 0.5em;
} }
#memorybar { #memorybar {
width:200px; width: 200px;
height:8px; height: 8px;
border:1px solid #bbb; border: 1px solid #bbb;
background-color:red color: black;
background-color: red;
} }
#memfree, #membuffers, #memcached { #memfree, #membuffers, #memcached {
float:right; float: right;
border:1px solid #bbb; border: 1px solid #bbb;
height:6px; height: 6px;
} }
#memfree { #memfree {
background-color:green; background-color: green;
color: black;
} }
#membuffers { #membuffers {
background-color:yellow; background-color: yellow;
color: black;
} }
#memcached { #memcached {
background-color:orange; background-color: #ffa500;
color: black;
} }
/* 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 div#content {
margin-left: -80% !important;
width: 160% !important;
}
* html div.mainmenu div.hover ul,
* html div.mainmenu div li.hover ul,
* html div.mainmenu div li li.hover ul,
* html div.mainmenu div li li li.hover ul,
* html div.mainmenu div li li li li.hover ul {
display: block !important;
margin-left: 3em;
}
* html div.mainmenu div.hover ul {
margin-left: 0;
}
* html div.mainmenu .hover ul ul,
* html div.mainmenu .hover ul ul ul,
* html div.mainmenu .hover ul ul ul ul,
* html div.mainmenu .hover ul ul ul ul ul {
display: none !important;
}
* html div.mainmenu li {
height: 1em !important;
width: 10em !important;
}
* html .mainmenu {
height: 1.8em;
}
* html div.cbi-value-description {
margin-left: 40%;
} }

View file

@ -0,0 +1,71 @@
/* 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-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;
}

View file

@ -0,0 +1,13 @@
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;
}

View file

@ -12,11 +12,10 @@ You may obtain a copy of the License at
$Id$ $Id$
-%> -%>
<br class="clear" /> <div class="clear"></div>
</div>
</div></div>
</div> </div>
<div class="luci separator black whitetext bold"><a href="<%=controller%>/about">Powered by <%= luci.__appname__ .. " " .. luci.__version__%></a></div> <p class="luci"><a href="<%=controller%>/about">Powered by <%= luci.__appname__ .. " " .. luci.__version__%></a></p>
</body> </body>
</html> </html>

View file

@ -31,69 +31,48 @@ for i,r in ipairs(request) do
end end
require("luci.i18n").loadc("default") require("luci.i18n").loadc("default")
require("luci.http").prepare_content("text/html") require("luci.http").prepare_content("application/xhtml+xml")
-%> -%>
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<%=luci.i18n.context.lang%>" lang="<%=luci.i18n.context.lang%>">
<head> <head>
<link rel="stylesheet" type="text/css" href="<%=media%>/cascade.css" /> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<% if node and node.css then %><link rel="stylesheet" type="text/css" href="<%=resource%>/<%=node.css%>" /><% end %> <meta http-equiv="Content-Script-Type" content="text/javascript" />
<meta http-equiv="content-type" content="application/xhtml+xml; charset=utf-8" /> <link rel="stylesheet" type="text/css" media="screen" href="<%=media%>/cascade.css" />
<meta http-equiv="content-script-type" content="text/javascript" /> <!--[if lt IE 7]><link rel="stylesheet" type="text/css" media="screen" href="<%=media%>/ie6.css" /><![endif]-->
<title><%=striptags( hostname .. ( (node and node.title) and ' - ' .. node.title or '')) %> - LuCI</title> <!--[if IE 7]><link rel="stylesheet" type="text/css" media="screen" href="<%=media%>/ie7.css" /><![endif]-->
<% if node and node.css then %><link rel="stylesheet" type="text/css" media="screen" href="<%=resource%>/<%=node.css%>" />
<!--[if lt IE 7]> <% end -%>
<script type="text/javascript"> <script type="text/javascript" src="<%=resource%>/VarType.js"></script>
function setup_hover() { <script type="text/javascript" src="<%=resource%>/XHTML1.js"></script>
function ie_hover(e) { <script type="text/javascript" src="<%=resource%>/Dropdowns.js"></script>
e.onmouseover = function() { this.className = "hover" } <title><%=striptags( hostname .. ( (node and node.title) and ' - ' .. node.title or '')) %> - LuCI</title>
e.onmouseout = function() { this.className = null }
}
var lis = document.getElementById("mainmenu").getElementsByTagName("LI");
var divs = document.getElementById("mainmenu").getElementsByTagName("DIV");
for( var i = 0; i < lis.length; i++ ) ie_hover( lis[i] );
for( var i = 0; i < divs.length; i++ ) ie_hover( divs[i] );
}
</script>
<![endif]-->
</head> </head>
<body onload="window.setup_hover && setup_hover()"> <body class="lang_<%=luci.i18n.context.lang%>">
<p class="skiplink">
<span id="skiplink1"><a href="#navigation"><%:skiplink1 Skip to navigation%></a></span>
<span id="skiplink2"><a href="#content"><%:skiplink2 Skip to content%></a></span>
</p>
<div id="header"> <div id="header">
<div class="info whitetext smalltext bold right"> <h1><%=luci.config.brand.firmware%></h1>
<%=luci.config.brand.firmware%> (<%=luci.config.brand.distro%>) | <p>
<%:load%>: <%=load1%> <%=load5%> <%=load15%> | (<%=luci.config.brand.distro%>) |
<%:hostname%>: <%=hostname%> <%:load%>: <%=load1%> <%=load5%> <%=load15%> |
</div> <%:hostname%>: <%=hostname%>
<div class="title"> </p>
<span class="headertitle"><%=luci.config.brand.title%></span><br />
<span class="whitetext bold"><%=luci.config.brand.subtitle%></span>
</div>
</div> </div>
<div class="pathbar separator black whitetext bold"> <div id="menubar">
<%:path%>: <% <h2 class="navigation"><a id="navigation" name="navigation"><%:navigation Navigation%></a></h2>
local c = tree <ul id="mainmenu" class="dropdowns">
local url = controller
for k,v in pairs(request) do
if c.nodes and c.nodes[v] then
c = c.nodes[v]
url = url .. "/" .. v
%><a href="<%=url%>"><%=c.title or v%></a> <% if k ~= #request then %>&#187; <% end
end
end
%>
</div>
<div class="menubar">
<div id="mainmenu" class="mainmenu">
<%- <%-
local function submenu(prefix, node) local function submenu(prefix, node)
if node.hidden or not node.nodes then if not node.nodes or node.hidden then
return false return false
end end
local index = {} local index = {}
@ -109,21 +88,23 @@ local function submenu(prefix, node)
if count > 0 then if count > 0 then
%> %>
<ul> <ul id="submenu_<%=string.gsub(string.gsub(prefix, "/", "_"), "^_(.-)_$", "%1")%>">
<%- for j, v in pairs(index) do
if not v.hidden and #v.name > 0 then
local nnode = node.nodes[v.name]
local href = controller .. prefix .. v.name
href = (nnode.query) and href .. luci.http.build_querystring(nnode.query) or href
%>
<li>
<span<% if nnode._menu_selected then %> class="active"<%end%>><a href="<%=luci.util.pcdata(href)%>"><%=nnode.title%></a></span>
<%- submenu(prefix .. v.name .. "/", nnode) %>
</li>
<%- end %>
<%- end %>
</ul>
<%- <%-
for j, v in pairs(index) do
if #v.name > 0 then
local nnode = node.nodes[v.name]
local href = controller .. prefix .. v.name .. "/"
href = (nnode.query) and href .. luci.http.build_querystring(nnode.query) or href
%>
<li><a<% if nnode._menu_selected then %> class="active"<%end%> href="<%=luci.util.pcdata(href)%>"><%=nnode.title%></a><%-
submenu(prefix .. v.name .. "/", nnode)
%></li>
<%-
end
end
%>
</ul>
<%
end end
end end
@ -137,50 +118,46 @@ if cattree and cattree.nodes then
for i, k in ipairs(index) do for i, k in ipairs(index) do
node = cattree.nodes[k.name] node = cattree.nodes[k.name]
if not node.hidden and node.title and node.target then if node.title and node.target and not node.hidden then
local href = controller.."/"..category.."/"..k.name local href = controller.."/"..category.."/"..k.name.."/"
href = (k.query) and href .. luci.http.build_querystring(k.query) or href %> href = (k.query) and href .. luci.http.build_querystring(k.query) or href
<div<% if node._menu_selected then %> class="preactive"<%end%>><a href="<%=href%>"><%=node.title%></a> %>
<%submenu("/" .. category .. "/" .. k.name .. "/", node)%> <li><a<% if node._menu_selected then %> class="preactive"<%end%> href="<%=href%>"><%=node.title%></a><%
</div> submenu("/" .. category .. "/" .. k.name .. "/", node)
<% end %></li><% end
end end
end end
%> %>
</div> </ul>
<div class="modemenu">
<ul><%
for k,node in pairs(tree.nodes) do
if node.title and not node.hidden then %>
<li<% if request[1] == k then %> class="active"<%end%>><a href="<%=controller%>/<%=k%>"><%=node.title%></a></li>
<% end
end%>
</ul>
</div>
<% <ul id="modemenu"><%
if tree.nodes[category] and tree.nodes[category].ucidata then for k,node in pairs(tree.nodes) do
local ucic = 0 if node.title and not node.hidden then %>
for i, j in pairs(require("luci.model.uci").cursor():changes()) do <li><a<% if request[1] == k then %> class="active"<%end%> href="<%=controller%>/<%=k%>/"><%=node.title%></a></li><%
for k, l in pairs(j) do end
for m, n in pairs(l) do end
ucic = ucic + 1; %>
end </ul>
end
<%
if tree.nodes[category] and tree.nodes[category].ucidata then
local ucic = 0
for i, j in pairs(require("luci.model.uci").cursor():changes()) do
for k, l in pairs(j) do
for m, n in pairs(l) do
ucic = ucic + 1;
end end
%> end
<div class="mainmenu" style="float:right; margin-right:2em"> end
<div> -%>
<% if ucic > 0 then %> <ul id="savemenu" class="dropdowns">
<a class="warning" href="<%=controller%>/<%=category%>/uci/changes"><%:unsavedchanges%>: <%=ucic%></a> <li><% if ucic > 0 then %><a class="warning" href="<%=controller%>/<%=category%>/uci/changes/"><%:unsavedchanges%>: <%=ucic%></a><%
<% submenu("/" .. category .. "/uci/", tree.nodes[category].nodes["uci"]) -%> submenu("/" .. category .. "/uci/", tree.nodes[category].nodes["uci"])
<% else %> else -%>
<a href="#"><%:changes%>: 0</a> <a href="#"><%:changes%>: 0</a><% end -%>
<% end %> </li>
</div> </ul><% end %>
</div>
<% end %>
<br class="clear" /> <div class="clear"></div>
</div> </div>
<div id="content"> <div id="content">

View file

@ -1,8 +1,8 @@
* { @charset "utf-8";
margin: 0;
padding: 0;
}
@media all {
html,
body { body {
background-color: #4a6b7c; background-color: #4a6b7c;
background-image: url(bg.jpg); background-image: url(bg.jpg);
@ -10,36 +10,72 @@ body {
background-attachment: fixed; background-attachment: fixed;
background-repeat: repeat-x; background-repeat: repeat-x;
color: #ffffff; color: #ffffff;
}
body {
font-family: Verdana, Arial, sans-serif; font-family: Verdana, Arial, sans-serif;
font-size: 100%; font-size: 101%;
line-height: 100%; line-height: 100%;
} }
* {
margin: 0;
padding: 0;
}
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 { code {
font-family: monospace; font-family: monospace;
white-space: pre; white-space: pre;
} }
div#content ul { #maincontent ul {
margin-left: 2em; margin-left: 2em;
} }
.warning { .warning {
color: red !important; color: red;
background-color: white;
font-weight: bold; font-weight: bold;
} }
.clear { .clear {
clear: both; clear: both;
height: 1px;
} }
.skiplink,
.navigation,
.hidden { .hidden {
display: none; position: absolute;
left: -1000px;
top: -1000px;
width: 0px;
height: 0px;
overflow: hidden;
display: inline;
} }
.error { .error {
color: #ff0000; color: #ff0000;
background-color: white;
} }
#header { #header {
@ -48,113 +84,256 @@ div#content ul {
background-repeat: no-repeat; background-repeat: no-repeat;
background-position: left center; background-position: left center;
background-color: #557788; background-color: #557788;
color: #ffffff;
text-align: right; text-align: right;
} }
#header .info { #header h1 {
padding: 1em 1em; padding: 1em 1em 0 1em;
}
#header p {
padding: 0 1em 1em 1em;
}
#header h1,
#header p {
font-size: 70%; font-size: 70%;
font-weight: normal;
line-height: 160%; line-height: 160%;
text-align: right;
} }
#header .title { ul.dropdowns {
display: none;
}
.pathbar {
display: none;
}
.menubar {
width: 100%;
min-height: 1.8em;
background: #000000;
color: #ffffff;
}
.mainmenu {
float: left; float: left;
margin: 0;
padding: 0;
width: auto; width: auto;
min-height: 1.8em; list-style: none;
background: #000000;
color: #ffffff;
} }
.mainmenu div { html>body ul.dropdowns {
position: relative;
}
ul.dropdowns li,
ul.dropdowns ul {
margin: 0;
padding: 0;
list-style: none;
}
ul.dropdowns li {
float: left; float: left;
} position: relative;
.mainmenu li {
white-space: nowrap; white-space: nowrap;
} }
.mainmenu div ul { ul.dropdowns li ul {
display: none;
position: absolute; position: absolute;
z-index: 1000;
top: auto;
min-width: 10em;
}
ul.dropdowns li li {
float: none;
position: relative;
}
ul.dropdowns li a {
display: block;
}
ul.dropdowns ul li ul {
top: 0;
}
ul.dropdowns li ul,
ul.dropdowns li.over ul ul,
ul.dropdowns li.focus ul ul,
ul.dropdowns li:hover ul ul,
ul.dropdowns li.over ul ul ul,
ul.dropdowns li.focus ul ul ul,
ul.dropdowns li:hover ul ul ul,
ul.dropdowns li.over ul ul ul ul,
ul.dropdowns li.focus ul ul ul ul,
ul.dropdowns li:hover ul ul ul ul {
left: -3000px;
}
ul.dropdowns li.over ul,
ul.dropdowns li.focus ul,
ul.dropdowns li:hover ul {
left: 0;
}
ul.dropdowns ul li.over ul,
ul.dropdowns ul li.focus ul,
ul.dropdowns ul li:hover ul,
ul.dropdowns ul ul li.over ul,
ul.dropdowns ul ul li.focus ul,
ul.dropdowns ul ul li:hover ul,
ul.dropdowns ul ul ul li.over ul,
ul.dropdowns ul ul ul li.focus ul,
ul.dropdowns ul ul ul li:hover ul {
left: 100%;
}
#menubar {
position: relative;
width: 100%;
background: #000000;
color: #ffffff;
}
#menubar .warning {
color: red;
background-color: #557788;
}
#menubar ul.dropdowns {
min-height: 1.8em;
background: #000000;
color: #ffffff;
}
#menubar ul.dropdowns li ul {
background: #000000; background: #000000;
color: #ffffff; color: #ffffff;
border-width: 0 1px 1px 1px; border-width: 0 1px 1px 1px;
border-style: solid; border-style: solid;
border-color: #444444; border-color: #444444;
list-style-type: none;
} }
.mainmenu ul li:hover > ul, #menubar ul.dropdowns ul li ul {
.mainmenu div:hover > ul {
display: block;
}
.mainmenu ul li > ul {
left: 100%;
margin-top: -1.8em;
border-width: 1px; border-width: 1px;
} }
.modemenu a, html #menubar a:link,
.mainmenu a { html #menubar a:visited {
position: relative;
display: block; display: block;
padding: 0.5em; padding: 0.5em;
background: #000000;
color: #ffffff; color: #ffffff;
text-decoration: none; text-decoration: none;
font-size: 80%; font-size: 80%;
font-weight: normal;
} }
.mainmenu .active a,
.modemenu .active a { html #menubar a:link:hover,
html #menubar a:visited:hover,
html #menubar a:link:active,
html #menubar a:visited:active,
#menubar a:link:focus,
#menubar a:visited:focus {
background: #000000;
color: #ffff00; color: #ffff00;
font-weight: bold; font-weight: bold;
} }
.mainmenu li:hover > span > a, html #menubar a:link.active,
.mainmenu div:hover > a { html #menubar a:visited.active,
font-weight: bold; html #menubar a:link.preactive,
} html #menubar a:visited.preactive {
background: #000000;
.modemenu a:hover,
.modemenu a:focus,
.mainmenu a:hover,
.mainmenu a:focus {
color: #ffff00; color: #ffff00;
font-weight: bold; font-weight: bold;
} }
.mainmenu div.preactive > a { html #menubar a:link.warning,
color: #ffff00; html #menubar a:visited.warning {
background: #000000;
color: red;
font-weight: bold; font-weight: bold;
} }
.modemenu ul { #menubar ul.dropdowns li.over>a,
#menubar ul.dropdowns li.focus>a,
#menubar ul.dropdowns li:hover>a {
font-weight: bold;
}
.lang_de #submenu_mini_system { min-width: 13.3em; }
* html .lang_de #submenu_mini_system { width: 13.3em; }
.lang_pt-br #submenu_mini_network { min-width: 14em; }
* html .lang_pt-br #submenu_mini_network { width: 14em; }
.lang_pt-br #submenu_mini_system { min-width: 11.5em; }
* html .lang_pt-br #submenu_mini_system { width: 11.5em; }
.lang_ru #submenu_mini_system { min-width: 18em; }
* html .lang_ru #submenu_mini_system { width: 18em; }
.lang_pt-br #submenu_admin_index { min-width: 11em; }
* html .lang_pt-br #submenu_admin_index { width: 11em; }
.lang_ru #submenu_admin_index { min-width: 15.5em; }
* html .lang_ru #submenu_admin_index { width: 15.5em; }
.lang_ru #submenu_admin_status { min-width: 10.5em; }
* html .lang_ru #submenu_admin_status { width: 10.5em; }
.lang_de #submenu_admin_system { min-width: 13.3em; }
* html .lang_de #submenu_admin_system { width: 13.3em; }
.lang_fr #submenu_admin_system { min-width: 14.5em; }
* html .lang_fr #submenu_admin_system { width: 14.5em; }
.lang_pt-br #submenu_admin_system { min-width: 11.5em; }
* html .lang_pt-br #submenu_admin_system { width: 11.5em; }
.lang_ru #submenu_admin_system { min-width: 18em; }
* html .lang_ru #submenu_admin_system { width: 18em; }
#submenu_admin_services_chillispot { min-width: 15.5em; }
* html #submenu_admin_services_chillispot { width: 15.5em; }
#submenu_admin_services_coovachilli { min-width: 15em; }
* html #submenu_admin_services_coovachilli { width: 15em; }
.lang_ru #submenu_admin_network_routes { min-width: 15.3em; }
* html .lang_ru #submenu_admin_network_routes { width: 15.3em; }
#submenu_admin_network_firewall { min-width: 14em; }
* html #submenu_admin_network_firewall { width: 14em; }
.lang_de #submenu_admin_network_firewall { min-width: 16.5em; }
* html .lang_de #submenu_admin_network_firewall { width: 16.5em; }
.lang_pt-br #submenu_admin_network_firewall { min-width: 15em; }
* html .lang_pt-br #submenu_admin_network_firewall { width: 15em; }
#modemenu {
width: auto; width: auto;
background: #000000; background: #000000;
color: #ffffff; color: #ffffff;
list-style-type: none; list-style: none;
margin-right: 1px;
} }
.modemenu li { #modemenu li {
float: right; float: right;
list-style: none;
} }
#content { #savemenu {
float: right;
margin-right: 2em;
}
.lang_de #submenu_admin_uci {
width: 12em;
}
.lang_ru #submenu_admin_uci {
width: 11.5em;
}
#maincontent {
clear: both; clear: both;
width: 80%; width: 80%;
margin: 0 auto; margin: 0 auto;
@ -167,20 +346,20 @@ div#content ul {
font-size: 80%; font-size: 80%;
} }
#content h1 { #maincontent h2 {
margin: 0.25em 0 0.5em 0; margin: 0.25em 0 0.5em 0;
font-size: 150%; font-size: 150%;
font-weight: normal; font-weight: normal;
} }
#content h2 { #maincontent h3 {
margin: 0.5em 0; margin: 0.5em 0;
font-size: 120%; font-size: 120%;
font-weight: normal; font-weight: normal;
text-decoration: underline; text-decoration: underline;
} }
#content p { #maincontent p {
margin-bottom: 1em; margin-bottom: 1em;
} }
@ -189,6 +368,7 @@ div#content ul {
padding: 0.5em 1em; padding: 0.5em 1em;
border: 1px dotted #555555; border: 1px dotted #555555;
background-color: #ffffff; background-color: #ffffff;
color: #000000;
} }
.cbi-section legend { .cbi-section legend {
@ -196,6 +376,7 @@ div#content ul {
font-weight: bold; font-weight: bold;
height: 1em; height: 1em;
padding: 0 0.25em; padding: 0 0.25em;
background-color: transparent;
color: #555555; color: #555555;
} }
@ -204,9 +385,11 @@ div#content ul {
} }
.cbi-section h3 { .cbi-section h3 {
height: 1.5em; text-decoration: none !important;
font-size: 90%; font-weight: bold !important;
color: #555555; color: #555555 !important;
margin: 0.25em !important;
font-size: 100% !important;
} }
.cbi-section-descr { .cbi-section-descr {
@ -228,8 +411,7 @@ ul.cbi-apply {
input[type=submit], input[type=submit],
input[type=reset], input[type=reset],
input[type=image], input[type=image] {
label {
cursor: pointer; cursor: pointer;
} }
@ -254,6 +436,7 @@ select:hover,
textarea:focus, textarea:focus,
textarea:hover { textarea:hover {
background-color: #ffffff; background-color: #ffffff;
color: #000000;
} }
select, select,
@ -271,24 +454,28 @@ td input[type=password] {
input.cbi-input-user { input.cbi-input-user {
background: url('../resources/cbi/user.gif') no-repeat scroll 1px center; background: url('../resources/cbi/user.gif') no-repeat scroll 1px center;
background-color: inherit; background-color: inherit;
color: #000000;
padding-left: 17px; padding-left: 17px;
} }
input.cbi-input-key { input.cbi-input-password {
background: url('../resources/cbi/key.gif') no-repeat scroll 1px center; background: url('../resources/cbi/key.gif') no-repeat scroll 1px center;
background-color: inherit; background-color: inherit;
color: #000000;
padding-left: 17px; padding-left: 17px;
} }
input.cbi-input-find { input.cbi-input-find {
background: url('../resources/cbi/find.gif') no-repeat scroll 1px center; background: url('../resources/cbi/find.gif') no-repeat scroll 1px center;
background-color: inherit; background-color: inherit;
color: #000000;
padding-left: 17px; padding-left: 17px;
} }
input.cbi-input-reload { input.cbi-input-reload {
background: url('../resources/cbi/reload.gif') no-repeat scroll 1px center; background: url('../resources/cbi/reload.gif') no-repeat scroll 1px center;
background-color: inherit; background-color: inherit;
color: #000000;
padding-left: 17px; padding-left: 17px;
} }
@ -296,6 +483,7 @@ input.cbi-input-add,
input.cbi-button-add { input.cbi-button-add {
background: url('../resources/cbi/add.gif') no-repeat scroll 1px center; background: url('../resources/cbi/add.gif') no-repeat scroll 1px center;
background-color: inherit; background-color: inherit;
color: #000000;
padding-left: 17px; padding-left: 17px;
padding-right: 1px; padding-right: 1px;
} }
@ -304,6 +492,7 @@ input.cbi-input-fieldadd,
input.cbi-button-fieldadd { input.cbi-button-fieldadd {
background: url(../resources/cbi/fieldadd.gif) no-repeat scroll 1px center; background: url(../resources/cbi/fieldadd.gif) no-repeat scroll 1px center;
background-color: inherit; background-color: inherit;
color: #000000;
padding-left: 17px; padding-left: 17px;
padding-right: 1px; padding-right: 1px;
} }
@ -312,6 +501,7 @@ input.cbi-input-reset,
input.cbi-button-reset { input.cbi-button-reset {
background: url('../resources/cbi/reset.gif') no-repeat scroll 1px center; background: url('../resources/cbi/reset.gif') no-repeat scroll 1px center;
background-color: inherit; background-color: inherit;
color: #000000;
padding-left: 17px; padding-left: 17px;
padding-right: 1px; padding-right: 1px;
} }
@ -320,6 +510,7 @@ input.cbi-input-save,
input.cbi-button-save { input.cbi-button-save {
background: url('../resources/cbi/save.gif') no-repeat scroll 1px center; background: url('../resources/cbi/save.gif') no-repeat scroll 1px center;
background-color: inherit; background-color: inherit;
color: #000000;
padding-left: 17px; padding-left: 17px;
padding-right: 1px; padding-right: 1px;
} }
@ -328,6 +519,7 @@ input.cbi-input-apply,
input.cbi-button-apply { input.cbi-button-apply {
background: url('../resources/cbi/apply.gif') no-repeat scroll 1px center; background: url('../resources/cbi/apply.gif') no-repeat scroll 1px center;
background-color: inherit; background-color: inherit;
color: #000000;
padding-left: 17px; padding-left: 17px;
padding-right: 1px; padding-right: 1px;
} }
@ -336,6 +528,7 @@ input.cbi-input-remove,
div.cbi-section-remove input { div.cbi-section-remove input {
background: url('../resources/cbi/remove.gif') no-repeat scroll 1px center; background: url('../resources/cbi/remove.gif') no-repeat scroll 1px center;
background-color: inherit; background-color: inherit;
color: #000000;
padding-left: 17px; padding-left: 17px;
padding-right: 1px; padding-right: 1px;
} }
@ -355,8 +548,14 @@ form > div > input[type=reset] {
margin-left: 0.5em; margin-left: 0.5em;
} }
table td,
table th {
color: #000000;
}
table.smalltext { table.smalltext {
background: #f5f5f5; background: #f5f5f5;
color: #000000;
border-top: 1px solid #666666; border-top: 1px solid #666666;
border-right: 1px solid #666666; border-right: 1px solid #666666;
border-bottom: 1px solid #666666; border-bottom: 1px solid #666666;
@ -369,6 +568,7 @@ table.smalltext {
table.smalltext tr:hover td { table.smalltext tr:hover td {
background-color: #bbddee; background-color: #bbddee;
color: #000000;
} }
table.smalltext tr th { table.smalltext tr th {
@ -383,12 +583,19 @@ table.smalltext tr td {
border-left: 1px solid #666666; border-left: 1px solid #666666;
} }
.cbi-rowstyle-1 { table.cbi-section-table .cbi-rowstyle-1,
table.cbi-section-table .cbi-rowstyle-1 * {
background-color: #eeeeff; background-color: #eeeeff;
color: #000000;
}
.cbi-section .cbi-rowstyle-1 h3 {
background-color: #eeeeff;
color: #555555;
} }
.cbi-rowstyle-2 { .cbi-rowstyle-2 {
color: #000000;
} }
div.cbi-value { div.cbi-value {
@ -400,20 +607,19 @@ div.cbi-value {
div.cbi-value:hover { div.cbi-value:hover {
background: #f8f8f8; background: #f8f8f8;
} color: #000000;
div.cbi-value:last-child {
border: none;
} }
.cbi-value-title { .cbi-value-title {
float: left; float: left;
width: 40%; width: 40%;
line-height: 1.8em;
} }
div.cbi-value-field { div.cbi-value-field {
width: 58%; width: 58%;
margin: 0.25em 0 0.25em 40%; margin-left: 40%;
padding: 0.25em 0;
} }
div.cbi-value-description { div.cbi-value-description {
@ -423,6 +629,20 @@ div.cbi-value-description {
div.cbi-section-create { div.cbi-section-create {
clear: left; clear: left;
white-space: nowrap;
vertical-align: top;
}
div.cbi-tblsection-create {
border-bottom: 1px dotted #bbbbbb;
}
div.cbi-section-create .cbi-button {
margin: 0.25em;
}
input.cbi-section-create-name {
margin-right: -0.25em;
} }
div.cbi-map-descr { div.cbi-map-descr {
@ -430,8 +650,8 @@ div.cbi-map-descr {
} }
div.cbi-optionals { div.cbi-optionals {
margin: 0.5em 0; padding: 0.25em;
padding: 0 0.25em; border-bottom: 1px dotted #bbbbbb;
} }
div.cbi-section-remove { div.cbi-section-remove {
@ -440,10 +660,18 @@ div.cbi-section-remove {
.cbi-section-node { .cbi-section-node {
clear: both; clear: both;
border: 1px dotted #bbbbbb; border-top: 1px dotted #bbbbbb;
border-left: 1px dotted #bbbbbb;
border-right: 1px dotted #bbbbbb;
border-bottom: none;
padding-bottom: 0; padding-bottom: 0;
} }
.cbi-section-node table div {
padding-bottom: 0;
border-bottom: none;
}
.cbi-section-node div.cbi-section-table-row { .cbi-section-node div.cbi-section-table-row {
margin: 0.25em; margin: 0.25em;
} }
@ -475,21 +703,23 @@ td.cbi-section-table-optionals {
div.cbi-error { div.cbi-error {
font-size: 95%; font-size: 95%;
font-weight: bold; font-weight: bold;
color: #FF0000; color: #ff0000;
background-color: #ffffff;
} }
td.cbi-value-error { td.cbi-value-error {
border-color: red !important; border-color: red;
} }
.cbi-value-error input, .cbi-value-error input,
.cbi-value-error select { .cbi-value-error select {
color: red !important; color: red;
background-color: #FFCCCC; background-color: #ffcccc;
} }
.cbi-section-error { .cbi-section-error {
color: red; color: red;
background-color: white;
font-size: 95%; font-size: 95%;
border: 1px dotted red; border: 1px dotted red;
margin: 3px; margin: 3px;
@ -507,7 +737,9 @@ td.cbi-value-error {
text-align: right; text-align: right;
} }
.luci a { .luci a:link,
.luci a:visited {
background-color: transparent;
color: #666666; color: #666666;
text-decoration: none; text-decoration: none;
font-size: 70%; font-size: 70%;
@ -519,85 +751,39 @@ td.cbi-value-error {
.error500 { .error500 {
white-space: normal; white-space: normal;
border: 1px dotted #FF0000; border: 1px dotted #ff0000;
background-color: #FFFFFF; background-color: #ffffff;
color: #000000;
padding: 0.5em; padding: 0.5em;
} }
#memorybar { #memorybar {
width:200px; width: 200px;
height:8px; height: 8px;
border:1px solid #bbb; border: 1px solid #bbb;
background-color:red color: black;
background-color: red;
} }
#memfree, #membuffers, #memcached { #memfree, #membuffers, #memcached {
float:right; float: right;
border:1px solid #bbb; border: 1px solid #bbb;
height:6px; height: 6px;
} }
#memfree { #memfree {
background-color:green; background-color: green;
color: black;
} }
#membuffers { #membuffers {
background-color:yellow; background-color: yellow;
color: black;
} }
#memcached { #memcached {
background-color:orange; background-color: #ffa500;
color: black;
} }
/* 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 div#content {
margin-left: -80% !important;
width: 160% !important;
}
* html div.mainmenu div.hover ul,
* html div.mainmenu div li.hover ul,
* html div.mainmenu div li li.hover ul,
* html div.mainmenu div li li li.hover ul,
* html div.mainmenu div li li li li.hover ul {
display: block !important;
margin-left: 3em;
}
* html div.mainmenu div.hover ul {
margin-left: 0;
}
* html div.mainmenu .hover ul ul,
* html div.mainmenu .hover ul ul ul,
* html div.mainmenu .hover ul ul ul ul,
* html div.mainmenu .hover ul ul ul ul ul {
display: none !important;
}
* html div.mainmenu li {
height: 1em !important;
width: 10em !important;
}
* html .mainmenu {
height: 1.8em;
}
* html div.cbi-value-description {
margin-left: 40%;
} }

View file

@ -37,61 +37,39 @@ require("luci.http").prepare_content("application/xhtml+xml")
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<%=luci.i18n.context.lang%>" lang="<%=luci.i18n.context.lang%>">
<head> <head>
<link rel="stylesheet" type="text/css" href="<%=media%>/cascade.css" /> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<% if node and node.css then %><link rel="stylesheet" type="text/css" href="<%=resource%>/<%=node.css%>" /><% end %> <meta http-equiv="Content-Script-Type" content="text/javascript" />
<meta http-equiv="content-type" content="application/xhtml+xml; charset=utf-8" /> <link rel="stylesheet" type="text/css" media="screen" href="<%=media%>/cascade.css" />
<meta http-equiv="content-script-type" content="text/javascript" /> <!--[if lt IE 7]><link rel="stylesheet" type="text/css" media="screen" href="<%=media%>/ie6.css" /><![endif]-->
<title><%=striptags( hostname .. ( (node and node.title) and ' - ' .. node.title or '')) %> - LuCI</title> <!--[if IE 7]><link rel="stylesheet" type="text/css" media="screen" href="<%=media%>/ie7.css" /><![endif]-->
<% if node and node.css then %><link rel="stylesheet" type="text/css" media="screen" href="<%=resource%>/<%=node.css%>" />
<!--[if lt IE 7]> <% end -%>
<script type="text/javascript"> <script type="text/javascript" src="<%=resource%>/VarType.js"></script>
function setup_hover() { <script type="text/javascript" src="<%=resource%>/XHTML1.js"></script>
function ie_hover(e) { <script type="text/javascript" src="<%=resource%>/Dropdowns.js"></script>
e.onmouseover = function() { this.className = "hover" } <title><%=striptags( hostname .. ( (node and node.title) and ' - ' .. node.title or '')) %> - LuCI</title>
e.onmouseout = function() { this.className = null }
}
var lis = document.getElementById("mainmenu").getElementsByTagName("LI");
var divs = document.getElementById("mainmenu").getElementsByTagName("DIV");
for( var i = 0; i < lis.length; i++ ) ie_hover( lis[i] );
for( var i = 0; i < divs.length; i++ ) ie_hover( divs[i] );
}
</script>
<![endif]-->
</head> </head>
<body onload="window.setup_hover &amp;&amp; setup_hover()"> <body class="lang_<%=luci.i18n.context.lang%>">
<p class="skiplink">
<span id="skiplink1"><a href="#navigation"><%:skiplink1 Skip to navigation%></a></span>
<span id="skiplink2"><a href="#content"><%:skiplink2 Skip to content%></a></span>
</p>
<div id="header"> <div id="header">
<div class="info whitetext smalltext bold right"> <h1><%=luci.config.brand.firmware%></h1>
<%=luci.config.brand.firmware%><br /> <p>
<%=luci.config.brand.distro%><br /> <%=luci.config.brand.distro%><br />
<%:load%>: <%=load1%> <%=load5%> <%=load15%><br /> <%:load%>: <%=load1%> <%=load5%> <%=load15%><br />
<%:hostname%>: <%=hostname%> <%:hostname%>: <%=hostname%>
</div> </p>
<div class="title">
<span class="headertitle"><%=luci.config.brand.title%></span><br />
<span class="whitetext bold"><%=luci.config.brand.subtitle%></span>
</div>
</div> </div>
<div class="pathbar separator black whitetext bold"> <div id="menubar">
<%:path%>: <% <h2 class="navigation"><a id="navigation" name="navigation"><%:navigation Navigation%></a></h2>
local c = tree <ul id="mainmenu" class="dropdowns">
local url = controller
for k,v in pairs(request) do
if c.nodes and c.nodes[v] then
c = c.nodes[v]
url = url .. "/" .. v
%><a href="<%=url%>"><%=c.title or v%></a> <% if k ~= #request then %>&#187; <% end
end
end
%>
</div>
<div class="menubar">
<div id="mainmenu" class="mainmenu">
<%- <%-
local function submenu(prefix, node) local function submenu(prefix, node)
if not node.nodes or node.hidden then if not node.nodes or node.hidden then
@ -110,21 +88,23 @@ local function submenu(prefix, node)
if count > 0 then if count > 0 then
%> %>
<ul> <ul id="submenu_<%=string.gsub(string.gsub(prefix, "/", "_"), "^_(.-)_$", "%1")%>">
<%- for j, v in pairs(index) do
if #v.name > 0 then
local nnode = node.nodes[v.name]
local href = controller .. prefix .. v.name
href = (nnode.query) and href .. luci.http.build_querystring(nnode.query) or href
%>
<li>
<span<% if nnode._menu_selected then %> class="active"<%end%>><a href="<%=luci.util.pcdata(href)%>"><%=nnode.title%></a></span>
<%- submenu(prefix .. v.name .. "/", nnode) %>
</li>
<%- end %>
<%- end %>
</ul>
<%- <%-
for j, v in pairs(index) do
if #v.name > 0 then
local nnode = node.nodes[v.name]
local href = controller .. prefix .. v.name .. "/"
href = (nnode.query) and href .. luci.http.build_querystring(nnode.query) or href
%>
<li><a<% if nnode._menu_selected then %> class="active"<%end%> href="<%=luci.util.pcdata(href)%>"><%=nnode.title%></a><%-
submenu(prefix .. v.name .. "/", nnode)
%></li>
<%-
end
end
%>
</ul>
<%
end end
end end
@ -139,49 +119,45 @@ if cattree and cattree.nodes then
for i, k in ipairs(index) do for i, k in ipairs(index) do
node = cattree.nodes[k.name] node = cattree.nodes[k.name]
if node.title and node.target and not node.hidden then if node.title and node.target and not node.hidden then
local href = controller.."/"..category.."/"..k.name local href = controller.."/"..category.."/"..k.name.."/"
href = (k.query) and href .. luci.http.build_querystring(k.query) or href %> href = (k.query) and href .. luci.http.build_querystring(k.query) or href
<div<% if node._menu_selected then %> class="preactive"<%end%>><a href="<%=href%>"><%=node.title%></a> %>
<%submenu("/" .. category .. "/" .. k.name .. "/", node)%> <li><a<% if node._menu_selected then %> class="preactive"<%end%> href="<%=href%>"><%=node.title%></a><%
</div> submenu("/" .. category .. "/" .. k.name .. "/", node)
<% end %></li><% end
end end
end end
%> %>
</div> </ul>
<div class="modemenu">
<ul><%
for k,node in pairs(tree.nodes) do
if node.title and not node.hidden then %>
<li<% if request[1] == k then %> class="active"<%end%>><a href="<%=controller%>/<%=k%>"><%=node.title%></a></li>
<% end
end%>
</ul>
</div>
<% <ul id="modemenu"><%
if tree.nodes[category] and tree.nodes[category].ucidata then for k,node in pairs(tree.nodes) do
local ucic = 0 if node.title and not node.hidden then %>
for i, j in pairs(require("luci.model.uci").cursor():changes()) do <li><a<% if request[1] == k then %> class="active"<%end%> href="<%=controller%>/<%=k%>/"><%=node.title%></a></li><%
for k, l in pairs(j) do end
for m, n in pairs(l) do end
ucic = ucic + 1; %>
end </ul>
end
<%
if tree.nodes[category] and tree.nodes[category].ucidata then
local ucic = 0
for i, j in pairs(require("luci.model.uci").cursor():changes()) do
for k, l in pairs(j) do
for m, n in pairs(l) do
ucic = ucic + 1;
end end
%> end
<div class="mainmenu" style="float:right; margin-right:2em"> end
<div> -%>
<% if ucic > 0 then %> <ul id="savemenu" class="dropdowns">
<a class="warning" href="<%=controller%>/<%=category%>/uci/changes"><%:unsavedchanges%>: <%=ucic%></a> <li><% if ucic > 0 then %><a class="warning" href="<%=controller%>/<%=category%>/uci/changes/"><%:unsavedchanges%>: <%=ucic%></a><%
<% submenu("/" .. category .. "/uci/", tree.nodes[category].nodes["uci"]) -%> submenu("/" .. category .. "/uci/", tree.nodes[category].nodes["uci"])
<% else %> else -%>
<a href="#"><%:changes%>: 0</a> <a href="#"><%:changes%>: 0</a><% end -%>
<% end %> </li>
</div> </ul><% end %>
</div>
<% end %>
<br class="clear" /> <div class="clear"></div>
</div> </div>
<div id="content"> <div id="maincontent">