From 85fbb033cf3cd0e86844755c266c1a02946b392e Mon Sep 17 00:00:00 2001 From: Jo-Philipp Wich Date: Tue, 21 Oct 2008 01:56:50 +0000 Subject: [PATCH] * luci-0.8: merge r3607, r3608, r3611 and r3612 --- .../luasrc/i18n/tinyproxy.pt-br.lua | 2 + contrib/package/luci/Makefile | 17 + .../luasrc/i18n/admin-core.pt-br.lua | 9 +- libs/cbi/luasrc/view/cbi/tblsection.htm | 32 +- themes/base/Makefile | 2 + .../htdocs/luci-static/resources/Dropdowns.js | 120 +++++ .../htdocs/luci-static/resources/VarType.js | 91 ++++ .../htdocs/luci-static/resources/XHTML1.js | 271 ++++++++++ .../luci-static/openwrt-light/cascade.css | 486 ++++++++++++------ .../htdocs/luci-static/openwrt-light/ie6.css | 71 +++ .../htdocs/luci-static/openwrt-light/ie7.css | 13 + .../view/themes/openwrt-light/footer.htm | 7 +- .../view/themes/openwrt-light/header.htm | 189 +++---- .../luci-static/openwrt.org/cascade.css | 472 +++++++++++------ .../luasrc/view/themes/openwrt.org/header.htm | 186 +++---- 15 files changed, 1437 insertions(+), 531 deletions(-) create mode 100644 themes/base/Makefile create mode 100644 themes/base/htdocs/luci-static/resources/Dropdowns.js create mode 100644 themes/base/htdocs/luci-static/resources/VarType.js create mode 100644 themes/base/htdocs/luci-static/resources/XHTML1.js create mode 100644 themes/openwrt-light/htdocs/luci-static/openwrt-light/ie6.css create mode 100644 themes/openwrt-light/htdocs/luci-static/openwrt-light/ie7.css diff --git a/applications/luci-tinyproxy/luasrc/i18n/tinyproxy.pt-br.lua b/applications/luci-tinyproxy/luasrc/i18n/tinyproxy.pt-br.lua index ca63414c22..33b664a57b 100644 --- a/applications/luci-tinyproxy/luasrc/i18n/tinyproxy.pt-br.lua +++ b/applications/luci-tinyproxy/luasrc/i18n/tinyproxy.pt-br.lua @@ -22,6 +22,8 @@ tinyproxy_tinyproxy_startservers = 'Servidores sobressalentes iniciar com' tinyproxy_tinyproxy_statfile = 'Documento de estatísticas' tinyproxy_tinyproxy_syslog = 'Escrever para syslog' 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_xtinyproxy = 'Incluir o IP do cliente' tinyproxy_type_proxy = 'Via proxy' diff --git a/contrib/package/luci/Makefile b/contrib/package/luci/Makefile index abd5541d13..90bf68d727 100644 --- a/contrib/package/luci/Makefile +++ b/contrib/package/luci/Makefile @@ -442,9 +442,20 @@ endef ### 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 $(call Package/luci/thtemplate) TITLE:=OpenWRT.org (default) + DEPENDS:=+luci-theme-base endef define Package/luci-theme-openwrt/install @@ -454,6 +465,7 @@ endef define Package/luci-theme-openwrtlight $(call Package/luci/thtemplate) TITLE:=OpenWRT.org - light variant without images + DEPENDS:=+luci-theme-base endef define Package/luci-theme-openwrtlight/install @@ -606,6 +618,10 @@ ifneq ($(CONFIG_PACKAGE_luci-sgi-cgi),) PKG_SELECTED_MODULES+=libs/sgi-cgi endif + +ifneq ($(CONFIG_PACKAGE_luci-theme-base),) + PKG_SELECTED_MODULES+=themes/base +endif ifneq ($(CONFIG_PACKAGE_luci-theme-openwrt),) PKG_SELECTED_MODULES+=themes/openwrt.org endif @@ -672,6 +688,7 @@ $(eval $(call BuildPackage,luci-app-initmgr)) $(eval $(call BuildPackage,luci-sgi-cgi)) +$(eval $(call BuildPackage,luci-theme-base)) $(eval $(call BuildPackage,luci-theme-openwrt)) $(eval $(call BuildPackage,luci-theme-openwrtlight)) diff --git a/i18n/portuguese_brazilian/luasrc/i18n/admin-core.pt-br.lua b/i18n/portuguese_brazilian/luasrc/i18n/admin-core.pt-br.lua index d919a2700c..7d914860b5 100644 --- a/i18n/portuguese_brazilian/luasrc/i18n/admin-core.pt-br.lua +++ b/i18n/portuguese_brazilian/luasrc/i18n/admin-core.pt-br.lua @@ -158,10 +158,13 @@ dhcp_dnsmasq_logqueries = 'Log das consultas' dhcp_dnsmasq_noresolv = 'Ignorar arquivo resolv' dhcp_dnsmasq_dnsforwardmax = 'Consultas simultâneas' dhcp_dnsmasq_port = 'Porta do DNS' -dhcp_dnsmasq_ednspacket_max = 'tamanho max. EDNS0 do pacote' -dhcp_dnsmasq_dhcpleasemax = 'max. DHCP-Leases' +dhcp_dnsmasq_ednspacket_max = 'tamanho max. do pacote EDNS0' +dhcp_dnsmasq_dhcpleasemax = 'max. de DHCP-Leases' 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_conntrack = 'Conexões Ativas' a_n_conntrack_desc = 'Esta página fornece informações sobre as conexões de rede ativas.' diff --git a/libs/cbi/luasrc/view/cbi/tblsection.htm b/libs/cbi/luasrc/view/cbi/tblsection.htm index be7e723f7a..898645a72b 100644 --- a/libs/cbi/luasrc/view/cbi/tblsection.htm +++ b/libs/cbi/luasrc/view/cbi/tblsection.htm @@ -106,24 +106,22 @@ end <% end %> - <%- if self.addremove then -%> -
- -
- <% if self.anonymous then %> - - <% else %> - <% if self.invalid_cts then -%>
<% end %> - - - <% if self.invalid_cts then -%> -
<%:cbi_invalid%>
- <%- end %> - <% end %> -
- + <%- if self.addremove then -%> + <% if self.template_addremove then include(self.template_addremove) else -%> +
+ <% if self.anonymous then %> + + <% else %> + <% if self.invalid_cts then -%>
<% end %> + + + <% if self.invalid_cts then -%> +
<%:cbi_invalid%>
+ <%- end %> + <% end %>
- <%- end -%> + <%- end %> + <%- end -%>
diff --git a/themes/base/Makefile b/themes/base/Makefile new file mode 100644 index 0000000000..81a96f6a83 --- /dev/null +++ b/themes/base/Makefile @@ -0,0 +1,2 @@ +include ../../build/config.mk +include ../../build/module.mk \ No newline at end of file diff --git a/themes/base/htdocs/luci-static/resources/Dropdowns.js b/themes/base/htdocs/luci-static/resources/Dropdowns.js new file mode 100644 index 0000000000..ff2f0e6653 --- /dev/null +++ b/themes/base/htdocs/luci-static/resources/Dropdowns.js @@ -0,0 +1,120 @@ +/* +Copyright (C) 2008 Alina Friedrichsen + +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); +} diff --git a/themes/base/htdocs/luci-static/resources/VarType.js b/themes/base/htdocs/luci-static/resources/VarType.js new file mode 100644 index 0000000000..d4668109d6 --- /dev/null +++ b/themes/base/htdocs/luci-static/resources/VarType.js @@ -0,0 +1,91 @@ +/* +Copyright (C) 2008 Alina Friedrichsen + +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(); + } +}; diff --git a/themes/base/htdocs/luci-static/resources/XHTML1.js b/themes/base/htdocs/luci-static/resources/XHTML1.js new file mode 100644 index 0000000000..a7d4f7ddd6 --- /dev/null +++ b/themes/base/htdocs/luci-static/resources/XHTML1.js @@ -0,0 +1,271 @@ +/* +Copyright (C) 2007, 2008 Alina Friedrichsen + +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; + } +}; diff --git a/themes/openwrt-light/htdocs/luci-static/openwrt-light/cascade.css b/themes/openwrt-light/htdocs/luci-static/openwrt-light/cascade.css index ebc1c60395..93b0a32eaf 100644 --- a/themes/openwrt-light/htdocs/luci-static/openwrt-light/cascade.css +++ b/themes/openwrt-light/htdocs/luci-static/openwrt-light/cascade.css @@ -1,152 +1,332 @@ -* { - margin: 0; - padding: 0; -} +@charset "utf-8"; +@media all { + +html, body { background-color: #4a6b7c; color: #ffffff; +} + +body { font-family: Verdana, Arial, sans-serif; - font-size: 100%; + font-size: 101%; 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 { font-family: monospace; white-space: pre; } -div#content ul { +#maincontent ul { margin-left: 2em; } .warning { - color: red !important; + color: red; + background-color: white; font-weight: bold; } .clear { clear: both; - height: 1px; } +.skiplink, +.navigation, .hidden { - display: none; + position: absolute; + left: -1000px; + top: -1000px; + width: 0px; + height: 0px; + overflow: hidden; + display: inline; } .error { color: #ff0000; + background-color: white; } #header { background-color: #557788; + color: #ffffff; text-align: right; + padding: 0.5em; } -#header .info { - padding: 1em 1em; +#header h1 { + display: inline; +} + +#header p { + display: inline; +} + +#header h1, +#header p { font-size: 70%; + font-weight: normal; line-height: 160%; + text-align: right; } -#header .title { - display: none; +ul.dropdowns { + float: left; + margin: 0; + padding: 0; + width: auto; + list-style: none; } -.pathbar { - display: none; +html>body ul.dropdowns { + position: relative; } -.menubar { - width: 100%; - min-height: 1.8em; - background: #000000; - color: #ffffff; +ul.dropdowns li, +ul.dropdowns ul { + margin: 0; + padding: 0; + list-style: none; } -.mainmenu { +ul.dropdowns li { float: left; - width: auto; - min-height: 1.8em; + position: relative; + white-space: nowrap; +} + +ul.dropdowns li ul { + 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; } -.mainmenu div { - float: left; +#menubar .warning { + color: red; + background-color: #557788; } -.mainmenu li { - white-space: nowrap; +#menubar ul.dropdowns { + min-height: 1.8em; + background: #000000; + color: #ffffff; } -.mainmenu div ul { - display: none; - position: absolute; +#menubar ul.dropdowns li ul { background: #000000; color: #ffffff; border-width: 0 1px 1px 1px; border-style: solid; border-color: #444444; - list-style-type: none; } -.mainmenu ul li:hover > ul, -.mainmenu div:hover > ul { - display: block; -} - -.mainmenu ul li > ul { - left: 100%; - margin-top: -1.8em; +#menubar ul.dropdowns ul li ul { border-width: 1px; } -.modemenu a, -.mainmenu a { +html #menubar a:link, +html #menubar a:visited { + position: relative; display: block; padding: 0.5em; + background: #000000; color: #ffffff; text-decoration: none; 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; font-weight: bold; } -.mainmenu li:hover > span > a, -.mainmenu div:hover > a { +html #menubar a:link.active, +html #menubar a:visited.active, +html #menubar a:link.preactive, +html #menubar a:visited.preactive { + background: #000000; + color: #ffff00; font-weight: bold; } -.modemenu a:hover, -.modemenu a:focus, -.mainmenu a:hover, -.mainmenu a:focus { - color: #ffff00; +html #menubar a:link.warning, +html #menubar a:visited.warning { + background: #000000; + color: red; font-weight: bold; } -.mainmenu div.preactive > a { - color: #ffff00; +#menubar ul.dropdowns li.over>a, +#menubar ul.dropdowns li.focus>a, +#menubar ul.dropdowns li:hover>a { font-weight: bold; } -.modemenu ul { +.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; background: #000000; color: #ffffff; - list-style-type: none; + list-style: none; + margin-right: 1px; } -.modemenu li { +#modemenu li { 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; width: 80%; margin: 0 auto; @@ -159,20 +339,20 @@ div#content ul { font-size: 80%; } -#content h1 { +#maincontent h2 { margin: 0.25em 0 0.5em 0; font-size: 150%; font-weight: normal; } -#content h2 { +#maincontent h3 { margin: 0.5em 0; font-size: 120%; font-weight: normal; text-decoration: underline; } -#content p { +#maincontent p { margin-bottom: 1em; } @@ -181,6 +361,7 @@ div#content ul { padding: 0.5em 1em; border: 1px dotted #555555; background-color: #ffffff; + color: #000000; } .cbi-section legend { @@ -188,6 +369,7 @@ div#content ul { font-weight: bold; height: 1em; padding: 0 0.25em; + background-color: transparent; color: #555555; } @@ -196,9 +378,11 @@ div#content ul { } .cbi-section h3 { - height: 1.5em; - font-size: 90%; - color: #555555; + text-decoration: none !important; + font-weight: bold !important; + color: #555555 !important; + margin: 0.25em !important; + font-size: 100% !important; } .cbi-section-descr { @@ -214,10 +398,13 @@ div#content ul { background-color: inherit; } +ul.cbi-apply { + font-size: 90%; +} + input[type=submit], input[type=reset], -input[type=image], -label { +input[type=image] { cursor: pointer; } @@ -242,6 +429,7 @@ select:hover, textarea:focus, textarea:hover { background-color: #ffffff; + color: #000000; } select, @@ -259,24 +447,28 @@ td input[type=password] { input.cbi-input-user { background: url('../resources/cbi/user.gif') no-repeat scroll 1px center; background-color: inherit; + color: #000000; padding-left: 17px; } -input.cbi-input-key { +input.cbi-input-password { background: url('../resources/cbi/key.gif') no-repeat scroll 1px center; background-color: inherit; + color: #000000; padding-left: 17px; } input.cbi-input-find { background: url('../resources/cbi/find.gif') no-repeat scroll 1px center; background-color: inherit; + color: #000000; padding-left: 17px; } input.cbi-input-reload { background: url('../resources/cbi/reload.gif') no-repeat scroll 1px center; background-color: inherit; + color: #000000; padding-left: 17px; } @@ -284,6 +476,7 @@ input.cbi-input-add, input.cbi-button-add { background: url('../resources/cbi/add.gif') no-repeat scroll 1px center; background-color: inherit; + color: #000000; padding-left: 17px; padding-right: 1px; } @@ -292,6 +485,7 @@ input.cbi-input-fieldadd, input.cbi-button-fieldadd { background: url(../resources/cbi/fieldadd.gif) no-repeat scroll 1px center; background-color: inherit; + color: #000000; padding-left: 17px; padding-right: 1px; } @@ -300,6 +494,7 @@ input.cbi-input-reset, input.cbi-button-reset { background: url('../resources/cbi/reset.gif') no-repeat scroll 1px center; background-color: inherit; + color: #000000; padding-left: 17px; padding-right: 1px; } @@ -308,6 +503,7 @@ input.cbi-input-save, input.cbi-button-save { background: url('../resources/cbi/save.gif') no-repeat scroll 1px center; background-color: inherit; + color: #000000; padding-left: 17px; padding-right: 1px; } @@ -316,6 +512,7 @@ input.cbi-input-apply, input.cbi-button-apply { background: url('../resources/cbi/apply.gif') no-repeat scroll 1px center; background-color: inherit; + color: #000000; padding-left: 17px; padding-right: 1px; } @@ -324,6 +521,7 @@ input.cbi-input-remove, div.cbi-section-remove input { background: url('../resources/cbi/remove.gif') no-repeat scroll 1px center; background-color: inherit; + color: #000000; padding-left: 17px; padding-right: 1px; } @@ -343,8 +541,14 @@ form > div > input[type=reset] { margin-left: 0.5em; } +table td, +table th { + color: #000000; +} + table.smalltext { background: #f5f5f5; + color: #000000; border-top: 1px solid #666666; border-right: 1px solid #666666; border-bottom: 1px solid #666666; @@ -357,6 +561,7 @@ table.smalltext { table.smalltext tr:hover td { background-color: #bbddee; + color: #000000; } table.smalltext tr th { @@ -371,12 +576,19 @@ table.smalltext tr td { 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; + color: #000000; } -.cbi-rowstyle-2 { +.cbi-section .cbi-rowstyle-1 h3 { + background-color: #eeeeff; + color: #555555; +} +.cbi-rowstyle-2 { + color: #000000; } div.cbi-value { @@ -388,36 +600,42 @@ div.cbi-value { div.cbi-value:hover { background: #f8f8f8; -} - -div.cbi-value:last-child { - border: none; + color: #000000; } .cbi-value-title { float: left; width: 40%; + line-height: 1.8em; } div.cbi-value-field { width: 58%; - margin: 0.25em 0 0.25em 40%; + margin-left: 40%; + padding: 0.25em 0; } div.cbi-value-description { font-size: 90%; + display: inline; } -div.cbi-value-field > div.cbi-value-description { - display: none; +div.cbi-section-create { + clear: left; + white-space: nowrap; + vertical-align: top; } -div.cbi-value:hover div.cbi-value-field > div.cbi-value-description { - display: block; +div.cbi-tblsection-create { + border-bottom: 1px dotted #bbbbbb; } -div.cbi-section-create { - clear: left; +div.cbi-section-create .cbi-button { + margin: 0.25em; +} + +input.cbi-section-create-name { + margin-right: -0.25em; } div.cbi-map-descr { @@ -425,8 +643,8 @@ div.cbi-map-descr { } div.cbi-optionals { - margin: 0.5em 0; - padding: 0 0.25em; + padding: 0.25em; + border-bottom: 1px dotted #bbbbbb; } div.cbi-section-remove { @@ -435,8 +653,16 @@ div.cbi-section-remove { .cbi-section-node { 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; +} + +.cbi-section-node table div { padding-bottom: 0; + border-bottom: none; } .cbi-section-node div.cbi-section-table-row { @@ -470,31 +696,29 @@ td.cbi-section-table-optionals { div.cbi-error { font-size: 95%; font-weight: bold; - color: #FF0000; + color: #ff0000; + background-color: #ffffff; } td.cbi-value-error { - border-color: red !important; + border-color: red; } .cbi-value-error input, .cbi-value-error select { - color: red !important; - background-color: #FFCCCC; + color: red; + background-color: #ffcccc; } .cbi-section-error { color: red; + background-color: white; font-size: 95%; border: 1px dotted red; margin: 3px; padding: 3px; } -ul.cbi-apply { - font-size: 90%; -} - .right { text-align: right; } @@ -506,7 +730,9 @@ ul.cbi-apply { text-align: right; } -.luci a { +.luci a:link, +.luci a:visited { + background-color: transparent; color: #666666; text-decoration: none; font-size: 70%; @@ -518,85 +744,39 @@ ul.cbi-apply { .error500 { white-space: normal; - border: 1px dotted #FF0000; - background-color: #FFFFFF; + border: 1px dotted #ff0000; + background-color: #ffffff; + color: #000000; padding: 0.5em; } #memorybar { - width:200px; - height:8px; - border:1px solid #bbb; - background-color:red + width: 200px; + height: 8px; + border: 1px solid #bbb; + color: black; + background-color: red; } #memfree, #membuffers, #memcached { - float:right; - border:1px solid #bbb; - height:6px; + float: right; + border: 1px solid #bbb; + height: 6px; } #memfree { - background-color:green; + background-color: green; + color: black; } #membuffers { - background-color:yellow; + background-color: yellow; + color: black; } #memcached { - background-color:orange; -} - - -/* 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; + background-color: #ffa500; + color: black; } -* html .mainmenu { - height: 1.8em; -} - -* html div.cbi-value-description { - margin-left: 40%; } diff --git a/themes/openwrt-light/htdocs/luci-static/openwrt-light/ie6.css b/themes/openwrt-light/htdocs/luci-static/openwrt-light/ie6.css new file mode 100644 index 0000000000..d65da4a19d --- /dev/null +++ b/themes/openwrt-light/htdocs/luci-static/openwrt-light/ie6.css @@ -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; +} diff --git a/themes/openwrt-light/htdocs/luci-static/openwrt-light/ie7.css b/themes/openwrt-light/htdocs/luci-static/openwrt-light/ie7.css new file mode 100644 index 0000000000..c410f11ff6 --- /dev/null +++ b/themes/openwrt-light/htdocs/luci-static/openwrt-light/ie7.css @@ -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; +} diff --git a/themes/openwrt-light/luasrc/view/themes/openwrt-light/footer.htm b/themes/openwrt-light/luasrc/view/themes/openwrt-light/footer.htm index d1a8d43fee..f8ea5ad577 100644 --- a/themes/openwrt-light/luasrc/view/themes/openwrt-light/footer.htm +++ b/themes/openwrt-light/luasrc/view/themes/openwrt-light/footer.htm @@ -12,11 +12,10 @@ You may obtain a copy of the License at $Id$ -%> -
- - +
- +

Powered by <%= luci.__appname__ .. " " .. luci.__version__%>

+ diff --git a/themes/openwrt-light/luasrc/view/themes/openwrt-light/header.htm b/themes/openwrt-light/luasrc/view/themes/openwrt-light/header.htm index 31b1ad0175..0182f5beec 100644 --- a/themes/openwrt-light/luasrc/view/themes/openwrt-light/header.htm +++ b/themes/openwrt-light/luasrc/view/themes/openwrt-light/header.htm @@ -31,69 +31,48 @@ for i,r in ipairs(request) do end require("luci.i18n").loadc("default") -require("luci.http").prepare_content("text/html") +require("luci.http").prepare_content("application/xhtml+xml") -%> - + - - <% if node and node.css then %><% end %> - - - <%=striptags( hostname .. ( (node and node.title) and ' - ' .. node.title or '')) %> - LuCI - - + + + + + +<% if node and node.css then %> +<% end -%> + + + +<%=striptags( hostname .. ( (node and node.title) and ' - ' .. node.title or '')) %> - LuCI - - + -
-<%:path%>: <% -local c = tree -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 - %><%=c.title or v%> <% if k ~= #request then %>» <% end - end -end -%> + + + -
diff --git a/themes/openwrt.org/htdocs/luci-static/openwrt.org/cascade.css b/themes/openwrt.org/htdocs/luci-static/openwrt.org/cascade.css index 3c52300352..d83733ff30 100644 --- a/themes/openwrt.org/htdocs/luci-static/openwrt.org/cascade.css +++ b/themes/openwrt.org/htdocs/luci-static/openwrt.org/cascade.css @@ -1,8 +1,8 @@ -* { - margin: 0; - padding: 0; -} +@charset "utf-8"; + +@media all { +html, body { background-color: #4a6b7c; background-image: url(bg.jpg); @@ -10,36 +10,72 @@ body { background-attachment: fixed; background-repeat: repeat-x; color: #ffffff; +} + +body { font-family: Verdana, Arial, sans-serif; - font-size: 100%; + font-size: 101%; 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 { font-family: monospace; white-space: pre; } -div#content ul { +#maincontent ul { margin-left: 2em; } .warning { - color: red !important; + color: red; + background-color: white; font-weight: bold; } .clear { clear: both; - height: 1px; } +.skiplink, +.navigation, .hidden { - display: none; + position: absolute; + left: -1000px; + top: -1000px; + width: 0px; + height: 0px; + overflow: hidden; + display: inline; } .error { color: #ff0000; + background-color: white; } #header { @@ -48,113 +84,256 @@ div#content ul { background-repeat: no-repeat; background-position: left center; background-color: #557788; + color: #ffffff; text-align: right; } -#header .info { - padding: 1em 1em; +#header h1 { + padding: 1em 1em 0 1em; +} + +#header p { + padding: 0 1em 1em 1em; +} + +#header h1, +#header p { font-size: 70%; + font-weight: normal; line-height: 160%; + text-align: right; } -#header .title { - display: none; +ul.dropdowns { + float: left; + margin: 0; + padding: 0; + width: auto; + list-style: none; } -.pathbar { - display: none; +html>body ul.dropdowns { + position: relative; } -.menubar { - width: 100%; - min-height: 1.8em; - background: #000000; - color: #ffffff; +ul.dropdowns li, +ul.dropdowns ul { + margin: 0; + padding: 0; + list-style: none; } -.mainmenu { +ul.dropdowns li { float: left; - width: auto; - min-height: 1.8em; + position: relative; + white-space: nowrap; +} + +ul.dropdowns li ul { + 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; } -.mainmenu div { - float: left; +#menubar .warning { + color: red; + background-color: #557788; } -.mainmenu li { - white-space: nowrap; +#menubar ul.dropdowns { + min-height: 1.8em; + background: #000000; + color: #ffffff; } -.mainmenu div ul { - display: none; - position: absolute; +#menubar ul.dropdowns li ul { background: #000000; color: #ffffff; border-width: 0 1px 1px 1px; border-style: solid; border-color: #444444; - list-style-type: none; -} - -.mainmenu ul li:hover > ul, -.mainmenu div:hover > ul { - display: block; } -.mainmenu ul li > ul { - left: 100%; - margin-top: -1.8em; +#menubar ul.dropdowns ul li ul { border-width: 1px; } -.modemenu a, -.mainmenu a { +html #menubar a:link, +html #menubar a:visited { + position: relative; display: block; padding: 0.5em; + background: #000000; color: #ffffff; text-decoration: none; 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; font-weight: bold; } -.mainmenu li:hover > span > a, -.mainmenu div:hover > a { +html #menubar a:link.active, +html #menubar a:visited.active, +html #menubar a:link.preactive, +html #menubar a:visited.preactive { + background: #000000; + color: #ffff00; font-weight: bold; } -.modemenu a:hover, -.modemenu a:focus, -.mainmenu a:hover, -.mainmenu a:focus { - color: #ffff00; +html #menubar a:link.warning, +html #menubar a:visited.warning { + background: #000000; + color: red; font-weight: bold; } -.mainmenu div.preactive > a { - color: #ffff00; +#menubar ul.dropdowns li.over>a, +#menubar ul.dropdowns li.focus>a, +#menubar ul.dropdowns li:hover>a { font-weight: bold; } -.modemenu ul { +.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; background: #000000; color: #ffffff; - list-style-type: none; + list-style: none; + margin-right: 1px; } -.modemenu li { +#modemenu li { 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; width: 80%; margin: 0 auto; @@ -167,20 +346,20 @@ div#content ul { font-size: 80%; } -#content h1 { +#maincontent h2 { margin: 0.25em 0 0.5em 0; font-size: 150%; font-weight: normal; } -#content h2 { +#maincontent h3 { margin: 0.5em 0; font-size: 120%; font-weight: normal; text-decoration: underline; } -#content p { +#maincontent p { margin-bottom: 1em; } @@ -189,6 +368,7 @@ div#content ul { padding: 0.5em 1em; border: 1px dotted #555555; background-color: #ffffff; + color: #000000; } .cbi-section legend { @@ -196,6 +376,7 @@ div#content ul { font-weight: bold; height: 1em; padding: 0 0.25em; + background-color: transparent; color: #555555; } @@ -204,9 +385,11 @@ div#content ul { } .cbi-section h3 { - height: 1.5em; - font-size: 90%; - color: #555555; + text-decoration: none !important; + font-weight: bold !important; + color: #555555 !important; + margin: 0.25em !important; + font-size: 100% !important; } .cbi-section-descr { @@ -228,8 +411,7 @@ ul.cbi-apply { input[type=submit], input[type=reset], -input[type=image], -label { +input[type=image] { cursor: pointer; } @@ -254,6 +436,7 @@ select:hover, textarea:focus, textarea:hover { background-color: #ffffff; + color: #000000; } select, @@ -271,24 +454,28 @@ td input[type=password] { input.cbi-input-user { background: url('../resources/cbi/user.gif') no-repeat scroll 1px center; background-color: inherit; + color: #000000; padding-left: 17px; } -input.cbi-input-key { +input.cbi-input-password { background: url('../resources/cbi/key.gif') no-repeat scroll 1px center; background-color: inherit; + color: #000000; padding-left: 17px; } input.cbi-input-find { background: url('../resources/cbi/find.gif') no-repeat scroll 1px center; background-color: inherit; + color: #000000; padding-left: 17px; } input.cbi-input-reload { background: url('../resources/cbi/reload.gif') no-repeat scroll 1px center; background-color: inherit; + color: #000000; padding-left: 17px; } @@ -296,6 +483,7 @@ input.cbi-input-add, input.cbi-button-add { background: url('../resources/cbi/add.gif') no-repeat scroll 1px center; background-color: inherit; + color: #000000; padding-left: 17px; padding-right: 1px; } @@ -304,6 +492,7 @@ input.cbi-input-fieldadd, input.cbi-button-fieldadd { background: url(../resources/cbi/fieldadd.gif) no-repeat scroll 1px center; background-color: inherit; + color: #000000; padding-left: 17px; padding-right: 1px; } @@ -312,6 +501,7 @@ input.cbi-input-reset, input.cbi-button-reset { background: url('../resources/cbi/reset.gif') no-repeat scroll 1px center; background-color: inherit; + color: #000000; padding-left: 17px; padding-right: 1px; } @@ -320,6 +510,7 @@ input.cbi-input-save, input.cbi-button-save { background: url('../resources/cbi/save.gif') no-repeat scroll 1px center; background-color: inherit; + color: #000000; padding-left: 17px; padding-right: 1px; } @@ -328,6 +519,7 @@ input.cbi-input-apply, input.cbi-button-apply { background: url('../resources/cbi/apply.gif') no-repeat scroll 1px center; background-color: inherit; + color: #000000; padding-left: 17px; padding-right: 1px; } @@ -336,6 +528,7 @@ input.cbi-input-remove, div.cbi-section-remove input { background: url('../resources/cbi/remove.gif') no-repeat scroll 1px center; background-color: inherit; + color: #000000; padding-left: 17px; padding-right: 1px; } @@ -355,8 +548,14 @@ form > div > input[type=reset] { margin-left: 0.5em; } +table td, +table th { + color: #000000; +} + table.smalltext { background: #f5f5f5; + color: #000000; border-top: 1px solid #666666; border-right: 1px solid #666666; border-bottom: 1px solid #666666; @@ -369,6 +568,7 @@ table.smalltext { table.smalltext tr:hover td { background-color: #bbddee; + color: #000000; } table.smalltext tr th { @@ -383,12 +583,19 @@ table.smalltext tr td { 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; + color: #000000; } -.cbi-rowstyle-2 { +.cbi-section .cbi-rowstyle-1 h3 { + background-color: #eeeeff; + color: #555555; +} +.cbi-rowstyle-2 { + color: #000000; } div.cbi-value { @@ -400,20 +607,19 @@ div.cbi-value { div.cbi-value:hover { background: #f8f8f8; -} - -div.cbi-value:last-child { - border: none; + color: #000000; } .cbi-value-title { float: left; width: 40%; + line-height: 1.8em; } div.cbi-value-field { width: 58%; - margin: 0.25em 0 0.25em 40%; + margin-left: 40%; + padding: 0.25em 0; } div.cbi-value-description { @@ -423,6 +629,20 @@ div.cbi-value-description { div.cbi-section-create { 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 { @@ -430,8 +650,8 @@ div.cbi-map-descr { } div.cbi-optionals { - margin: 0.5em 0; - padding: 0 0.25em; + padding: 0.25em; + border-bottom: 1px dotted #bbbbbb; } div.cbi-section-remove { @@ -440,10 +660,18 @@ div.cbi-section-remove { .cbi-section-node { 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; } +.cbi-section-node table div { + padding-bottom: 0; + border-bottom: none; +} + .cbi-section-node div.cbi-section-table-row { margin: 0.25em; } @@ -475,21 +703,23 @@ td.cbi-section-table-optionals { div.cbi-error { font-size: 95%; font-weight: bold; - color: #FF0000; + color: #ff0000; + background-color: #ffffff; } td.cbi-value-error { - border-color: red !important; + border-color: red; } .cbi-value-error input, .cbi-value-error select { - color: red !important; - background-color: #FFCCCC; + color: red; + background-color: #ffcccc; } .cbi-section-error { color: red; + background-color: white; font-size: 95%; border: 1px dotted red; margin: 3px; @@ -507,7 +737,9 @@ td.cbi-value-error { text-align: right; } -.luci a { +.luci a:link, +.luci a:visited { + background-color: transparent; color: #666666; text-decoration: none; font-size: 70%; @@ -519,85 +751,39 @@ td.cbi-value-error { .error500 { white-space: normal; - border: 1px dotted #FF0000; - background-color: #FFFFFF; + border: 1px dotted #ff0000; + background-color: #ffffff; + color: #000000; padding: 0.5em; } #memorybar { - width:200px; - height:8px; - border:1px solid #bbb; - background-color:red + width: 200px; + height: 8px; + border: 1px solid #bbb; + color: black; + background-color: red; } #memfree, #membuffers, #memcached { - float:right; - border:1px solid #bbb; - height:6px; + float: right; + border: 1px solid #bbb; + height: 6px; } #memfree { - background-color:green; + background-color: green; + color: black; } #membuffers { - background-color:yellow; + background-color: yellow; + color: black; } #memcached { - background-color:orange; -} - - -/* 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; + background-color: #ffa500; + color: black; } -* 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%; } diff --git a/themes/openwrt.org/luasrc/view/themes/openwrt.org/header.htm b/themes/openwrt.org/luasrc/view/themes/openwrt.org/header.htm index 6e460d5b03..e658bfc674 100644 --- a/themes/openwrt.org/luasrc/view/themes/openwrt.org/header.htm +++ b/themes/openwrt.org/luasrc/view/themes/openwrt.org/header.htm @@ -37,61 +37,39 @@ require("luci.http").prepare_content("application/xhtml+xml") - + - - <% if node and node.css then %><% end %> - - - <%=striptags( hostname .. ( (node and node.title) and ' - ' .. node.title or '')) %> - LuCI - - + + + + + +<% if node and node.css then %> +<% end -%> + + + +<%=striptags( hostname .. ( (node and node.title) and ' - ' .. node.title or '')) %> - LuCI - - + -
-<%:path%>: <% -local c = tree -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 - %><%=c.title or v%> <% if k ~= #request then %>» <% end - end -end -%> + + + - -
+
-- 2.30.2