luci-0.8: merge r4594

This commit is contained in:
Jo-Philipp Wich 2009-05-24 14:05:08 +00:00
parent 30ccc03e8f
commit df932b8989
9 changed files with 1124 additions and 0 deletions

View file

@ -631,6 +631,17 @@ define Package/luci-theme-freifunk-bno/install
$(call Package/luci/install/template,$(1),themes/freifunk-bno) $(call Package/luci/install/template,$(1),themes/freifunk-bno)
endef endef
define Package/luci-theme-freifunk-hannover
$(call Package/luci/fftemplate)
DEPENDS:=+luci-web
MAINTAINER:=Mikolas Bingemer <mickey-at-freifunk-hannover-dot-de>
TITLE:=Freifunk Hannover Theme
endef
define Package/luci-theme-freifunk-hannover/install
$(call Package/luci/install/template,$(1),themes/freifunk-hannover)
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)
@ -867,6 +878,9 @@ endif
ifneq ($(CONFIG_PACKAGE_luci-theme-freifunk-bno),) ifneq ($(CONFIG_PACKAGE_luci-theme-freifunk-bno),)
PKG_SELECTED_MODULES+=themes/freifunk-bno PKG_SELECTED_MODULES+=themes/freifunk-bno
endif endif
ifneq ($(CONFIG_PACKAGE_luci-theme-freifunk-hannover),)
PKG_SELECTED_MODULES+=themes/freifunk-hannover
endif
ifneq ($(CONFIG_PACKAGE_luci-theme-freifunk),) ifneq ($(CONFIG_PACKAGE_luci-theme-freifunk),)
PKG_SELECTED_MODULES+=themes/freifunk PKG_SELECTED_MODULES+=themes/freifunk
endif endif
@ -961,6 +975,7 @@ $(eval $(call BuildPackage,luci-theme-base))
$(eval $(call BuildPackage,luci-theme-fledermaus)) $(eval $(call BuildPackage,luci-theme-fledermaus))
$(eval $(call BuildPackage,luci-theme-freifunk)) $(eval $(call BuildPackage,luci-theme-freifunk))
$(eval $(call BuildPackage,luci-theme-freifunk-bno)) $(eval $(call BuildPackage,luci-theme-freifunk-bno))
$(eval $(call BuildPackage,luci-theme-freifunk-hannover))
$(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

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

View file

@ -0,0 +1,819 @@
@charset "utf-8";
@media all {
html {
min-height: 100%;
height: auto;
}
body {
color: #ffffff;
background-color: #fff;
background-image: url(bg.jpg);
background-position: bottom center;
background-repeat: repeat-x;
font-family: Verdana, Arial, sans-serif;
font-size: 101%;
line-height: 100%;
padding-bottom: 1.5em;
}
* {
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;
}
#maincontent ul {
margin-left: 2em;
}
.warning {
color: red;
background-color: white;
font-weight: bold;
text-decoration: blink;
}
.clear {
clear: both;
}
.skiplink,
.navigation,
.hidden {
position: absolute;
left: -1000px;
top: -1000px;
width: 0px;
height: 0px;
overflow: hidden;
display: inline;
}
.error {
color: #ff0000;
background-color: white;
}
#header {
min-height: 98px;
background-image: url(header.jpg);
background-repeat: no-repeat;
background-position: left bottom;
background-color: #FFFFFF;
color: #fff;
text-align: right;
font-weight: bold;
}
#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;
}
ul.dropdowns {
float: left;
margin: 0;
padding: 0;
width: auto;
list-style: none;
}
html>body ul.dropdowns {
position: relative;
}
ul.dropdowns li,
ul.dropdowns ul {
margin: 0;
padding: 0;
list-style: none;
}
ul.dropdowns li {
float: left;
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: #FFF;
color: #004a9c;
}
#menubar .warning {
color: red;
background-color: #FFF;
}
#menubar ul.dropdowns {
min-height: 1.8em;
background: #FFF;
color: #004a9c;
}
#menubar ul.dropdowns li ul {
background: #FFF;
color: #004a9c;
border-width: 0 1px 1px 1px;
border-style: dashed;
border-color: #5a5a5a;
}
#menubar ul.dropdowns ul li ul {
border-width: 1px;
}
html #menubar a:link,
html #menubar a:visited {
position: relative;
display: block;
padding: 0.5em;
background: #FFF;
color: #004a9c;
text-decoration: none;
font-size: 80%;
font-weight: normal;
}
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: #F2F2F2;
color: #e60076;
}
html #menubar a:link.active,
html #menubar a:visited.active,
html #menubar a:link.preactive,
html #menubar a:visited.preactive {
background: #FFF;
color: #e60076;
}
html #menubar a:link.warning,
html #menubar a:visited.warning {
background: #FFF;
color: red;
font-weight: bold;
text-decoration: blink;
}
#menubar ul.dropdowns li.over>a,
#menubar ul.dropdowns li.focus>a,
#menubar ul.dropdowns li:hover>a {
}
.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: none;
margin-right: 1px;
}
#modemenu li {
float: right;
list-style: none;
}
#savemenu {
float: right;
margin-right: 2em;
}
.lang_de #submenu_admin_uci {
width: 12em;
}
.lang_ru #submenu_admin_uci {
width: 11.5em;
}
textarea#syslog {
width: 98%;
min-height: 500px;
border: 3px solid #cccccc;
padding: 5px;
font-family: monospace;
}
#maincontent {
clear: both;
width: 80%;
margin: 0 auto;
padding: 0.5em;
color: #000000;
font-size: 80%;
background-color: #fff;
background-image: url(bg.jpg);
background-repeat: repeat-x;
background-position: center bottom;
border: 1px dashed #CCCCCC;
}
#maincontent h2 {
font-size: 150%;
font-family: "Trebuchet MS", Verdana, sans-serif;
font-weight: bold;
margin: 0.25em 0 0.7em 0;
border-bottom: 1px solid;
padding-top: 10px;
padding-bottom: 4px;
color: #004d9e;
}
#maincontent h3 {
margin: 0.5em 0 1.1em 0;
font-size: 125%;
font-weight: bold;
font-style: italic;
font-family: "Trebuchet MS", Verdana, sans-serif;
color: #004d9e;
}
#maincontent p {
margin-bottom: 1em;
}
.cbi-section {
margin-bottom: 0.5em;
padding: 0.5em 1em;
border: 1px dotted #555555;
background-color: #ffffff;
color: #000000;
}
.cbi-section legend {
font-size: 110%;
font-weight: bold;
height: 1em;
padding: 0 0.25em;
background-color: transparent;
color: #394d9e;
}
.cbi-section h2 {
margin: 0em 0 0.5em -0.5em !important;
}
.cbi-section h3 {
text-decoration: none !important;
font-weight: bold !important;
color: #555555 !important;
margin: 0.25em !important;
font-size: 100% !important;
}
.cbi-section-descr {
margin-bottom: 0.5em;
font-size: 95%;
}
.cbi-title-ref {
color: inherit;
text-decoration: none;
padding-right: 18px;
background: url('../resources/cbi/link.gif') no-repeat scroll right center;
background-color: inherit;
}
ul.cbi-apply {
font-size: 90%;
}
input[type=submit],
input[type=reset],
input[type=image] {
cursor: pointer;
}
select,
input,
textarea {
background: #eeeeee;
color: #000000;
border: none;
}
input[type=image] {
border: none;
}
input:focus,
input:hover,
select:focus,
select:hover,
textarea:focus,
textarea:hover {
background-color: #ffffff;
color: #000000;
}
select,
input[type=text],
input[type=password] {
width: 20em;
}
td select,
td input[type=text],
td input[type=password] {
width: 99%;
}
input.cbi-input-user {
background: url('../resources/cbi/user.gif') no-repeat scroll 1px center;
background-color: inherit;
color: #000000;
text-indent: 17px;
}
input.cbi-input-password {
background: url('../resources/cbi/key.gif') no-repeat scroll 1px center;
background-color: inherit;
color: #000000;
text-indent: 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;
}
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;
border: 1px solid #FFF;
}
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;
}
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;
border: none;
}
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;
border: none;
}
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;
border: none;
}
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;
border: 1px solid #fff;
}
div.cbi-section-remove input {
border-bottom: none;
}
textarea {
margin-left: -1px;
margin-bottom: 0.5em;
}
form > div > input[type=submit],
form > div > input[type=reset] {
float: right;
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;
font-size: 90%;
width: 80%;
margin-left: auto;
margin-right: auto;
border-collapse: collapse;
}
table.smalltext tr:hover td {
background-color: #bbddee;
color: #000000;
}
table.smalltext tr th {
padding: 0 0.25em;
border-left: 1px solid #666666;
text-align: left;
}
table.smalltext tr td {
padding: 0 0.25em;
border-top: 1px solid #666666;
border-left: 1px solid #666666;
}
table.cbi-section-table .cbi-rowstyle-1,
table.cbi-section-table .cbi-rowstyle-1 * {
background-color: #f1f6fa;
color: #000000;
}
.cbi-section .cbi-rowstyle-1 h3 {
background-color: #f1f6fa;
color: #555555;
}
.cbi-rowstyle-2 {
color: #000000;
}
div.cbi-value {
clear: left;
vertical-align: middle;
padding-left: 0.25em;
border-bottom: 1px dashed #bbbbbb;
}
div.cbi-value:hover {
background: #f8f8f8;
color: #000000;
}
.cbi-value-title {
float: left;
width: 40%;
line-height: 1.8em;
}
div.cbi-value-field {
width: 58%;
margin-left: 40%;
padding: 0.25em 0;
}
div.cbi-value-description {
font-size: 90%;
display: inline;
}
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 {
border: ;
margin-right: -0.25em;
border-top-width: 1px;
border-right-width: 1px;
border-bottom-width: 1px;
border-left-width: 1px;
border-top-color: #999999;
border-right-color: #999999;
border-bottom-color: #999999;
border-left-color: #999999;
}
div.cbi-map-descr {
margin-bottom: 1em;
}
div.cbi-optionals {
padding: 0.25em;
border-bottom: 1px dotted #bbbbbb;
}
div.cbi-section-remove {
float: right;
}
.cbi-section-node {
clear: both;
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;
}
table.cbi-section-table {
width: 100%;
font-size: 95%;
}
table.cbi-section-table th,
table.cbi-section-table td {
text-align: center;
}
tr.cbi-section-table-descr th {
font-weight: normal;
font-size: 90%;
}
td.cbi-section-table-optionals {
text-align: left !important;
padding-top: 1em;
}
.cbi-value-helpicon img {
vertical-align: bottom;
}
div.cbi-error {
font-size: 95%;
font-weight: bold;
color: #ff0000;
background-color: #ffffff;
}
td.cbi-value-error {
border-color: red;
}
.cbi-value-error input,
.cbi-value-error select {
color: red;
background-color: #ffcccc;
}
.cbi-section-error {
color: red;
background-color: white;
font-size: 95%;
border: 1px dotted red;
margin: 3px;
padding: 3px;
}
.right {
text-align: right;
}
.luci {
position: fixed;
bottom: 0;
left: 0;
text-align: right;
}
.luci a:link,
.luci a:visited {
background-color: transparent;
color: #666666;
text-decoration: none;
font-size: 70%;
}
.inline {
display: inline;
}
.error500 {
white-space: normal;
border: 1px dotted #ff0000;
background-color: #ffffff;
color: #000000;
padding: 0.5em;
}
#memorybar {
width: 200px;
height: 8px;
border: 1px solid #bbb;
color: black;
background-color: red;
}
#memfree, #membuffers, #memcached {
float: right;
border: 1px solid #bbb;
height: 6px;
}
#memfree {
background-color: green;
color: black;
}
#membuffers {
background-color: yellow;
color: black;
}
#memcached {
background-color: #ffa500;
color: black;
}
}

View file

@ -0,0 +1,77 @@
/* obligatory IE6 Voodoo Code */
* html body {
padding-left: 50% !important;
}
* html div#header {
margin-left: -100% !important;
}
* html div#menubar {
margin-left: -100% !important;
width: 200% !important;
}
* html ul.dropdowns li ul {
width: 10em;
}
* html ul.dropdowns li li {
clear: both;
float: left;
}
* html ul.dropdowns li li {
width: 100%;
}
* html ul.dropdowns li li a {
height: 1%;
}
* html div#maincontent {
margin-left: -80% !important;
width: 160% !important;
}
* html div.cbi-value-description {
width: auto !important;
}
* html div.cbi-value-field {
margin-left: 0 !important;
width: 100% !important;
}
* html .cbi-input-text,
* html .cbi-input-user,
* html .cbi-input-select,
* html .cbi-input-password {
width: 50% !important;
}
* html .cbi-input-user,
* html .cbi-input-password {
text-indent: 0 !important;
padding-left: 1.5em !important;
}
* html .cbi-section legend {
background-color: #ffffff;
color: #555555;
}
* html table.cbi-section-table td .cbi-input-text,
* html table.cbi-section-table td .cbi-input-select {
width: 100% !important;
}
* html div.cbi-page-actions {
text-align: right !important;
}
* html div.cbi-value-field input,
* html div.cbi-value-field select {
font-size: 90% !important;
}

View file

@ -0,0 +1,20 @@
div.cbi-value-field {
margin-left: 0 !important;
}
.cbi-section legend {
background-color: #ffffff;
color: #555555;
}
table.cbi-section-table td .cbi-input-text,
table.cbi-section-table td .cbi-input-select {
width: 95% !important;
}
.cbi-input-user,
.cbi-input-password {
text-indent: 0 !important;
padding-left: 1.5em !important;
width: 18.5em !important;
}

View file

@ -0,0 +1,3 @@
[ -n "${IPKG_INSTROOT}" ] || {
( . /etc/uci-defaults/luci-theme-freifunk-hannover ) && rm -f /etc/uci-defaults/luci-theme-freifunk-hannover
}

View file

@ -0,0 +1,21 @@
<%#
LuCI - Lua Configuration Interface
Copyright 2008 Steven Barth <steven@midlink.org>
Copyright 2008 Jo-Philipp Wich <xm@leipzig.freifunk.net>
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
$Id: footer.htm 4185 2009-01-30 14:00:35Z jow $
-%>
<div class="clear"></div>
</div>
<p class="luci"><a href="<%=controller%>/about">Powered by <%= luci.__appname__ .. " (v" .. luci.__version__ .. ")" %></a></p>
</body>
</html>

View file

@ -0,0 +1,163 @@
<%#
LuCI - Lua Configuration Interface
Copyright 2008 Steven Barth <steven@midlink.org>
Copyright 2008 Jo-Philipp Wich <xm@leipzig.freifunk.net>
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
$Id: header.htm 4079 2009-01-17 17:59:11Z Cyrus $
-%>
<%
require("luci.sys")
local load1, load5, load15 = luci.sys.loadavg()
local request = require("luci.dispatcher").context.path
local category = request[1]
local tree = luci.dispatcher.node()
local cattree = category and luci.dispatcher.node(category)
local node = luci.dispatcher.context.dispatched
local hostname = luci.sys.hostname()
local c = tree
for i,r in ipairs(request) do
if c.nodes and c.nodes[r] then
c = c.nodes[r]
c._menu_selected = true
end
end
require("luci.i18n").loadc("default")
require("luci.http").prepare_content("application/xhtml+xml")
-%>
<?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">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<%=luci.i18n.context.lang%>" lang="<%=luci.i18n.context.lang%>">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="Content-Script-Type" content="text/javascript" />
<link rel="stylesheet" type="text/css" media="screen" href="<%=media%>/cascade.css" />
<!--[if lt IE 7]><link rel="stylesheet" type="text/css" media="screen" href="<%=media%>/ie6.css" /><![endif]-->
<!--[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%>" />
<% end -%>
<script type="text/javascript" src="<%=resource%>/VarType.js"></script>
<script type="text/javascript" src="<%=resource%>/XHTML1.js"></script>
<script type="text/javascript" src="<%=resource%>/Dropdowns.js"></script>
<title><%=striptags( hostname .. ( (node and node.title) and ' - ' .. node.title or '')) %> - LuCI</title>
</head>
<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">
<h1><%=luci.version.distname%></h1>
<p>
<%=luci.version.distversion%><br />
<%:load%>: <%=load1%> <%=load5%> <%=load15%><br />
<%:hostname%>: <%=hostname%>
</p>
</div>
<div id="menubar">
<h2 class="navigation"><a id="navigation" name="navigation"><%:navigation Navigation%></a></h2>
<ul id="mainmenu" class="dropdowns">
<%-
local function submenu(prefix, node)
if not node.nodes or node.hidden then
return false
end
local index = {}
local count = 0
for k, n in pairs(node.nodes) do
if n.title and n.target then
table.insert(index, {name=k, order=n.order or 100})
count = count + 1
end
end
table.sort(index, function(a, b) return a.order < b.order end)
if count > 0 then
%>
<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><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
if cattree and cattree.nodes then
local index = {}
for k, node in pairs(cattree.nodes) do
table.insert(index, {name=k, order=node.order or 100})
end
table.sort(index, function(a, b) return a.order < b.order end)
for i, k in ipairs(index) do
node = cattree.nodes[k.name]
if node.title and node.target and not node.hidden then
local href = controller.."/"..category.."/"..k.name.."/"
href = (k.query) and href .. luci.http.build_querystring(k.query) or href
%>
<li><a<% if node._menu_selected then %> class="preactive"<%end%> href="<%=href%>"><%=node.title%></a><%
submenu("/" .. category .. "/" .. k.name .. "/", node)
%></li><% end
end
end
%>
</ul>
<ul id="modemenu"><%
for k,node in pairs(tree.nodes) do
if node.title and not node.hidden then %>
<li><a<% if request[1] == k then %> class="active"<%end%> href="<%=controller%>/<%=k%>/"><%=node.title%></a></li><%
end
end
%>
</ul>
<%
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
-%>
<ul id="savemenu" class="dropdowns">
<li><% if ucic > 0 then %><a class="warning" href="<%=controller%>/<%=category%>/uci/changes/"><%:unsavedchanges%>: <%=ucic%></a><%
submenu("/" .. category .. "/uci/", tree.nodes[category].nodes["uci"])
else -%>
<a href="#"><%:changes%>: 0</a><% end -%>
</li>
</ul><% end %>
<div class="clear"></div>
</div>
<div id="maincontent">

View file

@ -0,0 +1,4 @@
uci batch <<-EOF
set luci.themes.Freifunk_Hannover=/luci-static/freifunk-hannover
commit luci
EOF