diff options
Diffstat (limited to 'themes')
28 files changed, 1926 insertions, 0 deletions
diff --git a/themes/freifunk-bno/Makefile b/themes/freifunk-bno/Makefile new file mode 100644 index 0000000000..81a96f6a83 --- /dev/null +++ b/themes/freifunk-bno/Makefile @@ -0,0 +1,2 @@ +include ../../build/config.mk +include ../../build/module.mk
\ No newline at end of file diff --git a/themes/freifunk-bno/htdocs/luci-static/freifunk-bno/cascade.css b/themes/freifunk-bno/htdocs/luci-static/freifunk-bno/cascade.css new file mode 100644 index 0000000000..8f8dc69398 --- /dev/null +++ b/themes/freifunk-bno/htdocs/luci-static/freifunk-bno/cascade.css @@ -0,0 +1,726 @@ +* { + margin: 0; + padding: 0; +} + +body { + background-color: #ffffff; + color: #ffffff; + font-family: Verdana, Arial, sans-serif; + font-size: 100%; + line-height: 100%; + background-image: url(images/main-back.png); + background-repeat: repeat-x; + background-position: left bottom; + } +#all { + margin: 0px; + padding: 0px; + min-height: 800px; +} + +code { + font-family: monospace; + white-space: pre; +} + +a:link, a:visited { + color:#000000; + font-weight:bold; + text-decoration:none; + } +a:hover { + color:#333333; + font-weight:bold; + } + +/* Custom*/ + #wrapper +{ + width: 95%; + color: #333333; + margin-left: auto; + margin-right: auto; +/* background-image: url(images/corner-left.gif); */ +/* background-repeat: no-repeat; */ +/* background-position: left bottom; */ + background-color: #FffdF4; + min-width: 710px; + min-height: 710px; +} +#main { + clear: both; + width: 100%; + margin: 0; + padding: 0; + color: #333333; +/* background-image: url(images/corner-right.gif); */ +/* background-repeat: no-repeat; */ +/* background-position: right bottom; */ + min-height: 710px; +} + +div#content ul { + margin-left: 2em; +} + +.warning { + color: red !important; + font-weight: bold; +} + +.clear { + clear: both; + height: 1px; +} + +.hidden { + display: none; +} + +.error { + color: #ff0000; +} + +#header +{ + padding: 0px; + height: 100px; +} +#headerleft +{ + height: 100px; + background-color: #FFFfff; + background-image: url(images/header-left.gif); + background-repeat: no-repeat; + background-position: left top; +} +#headerright +{ + height: 100px; + background-color: #FFfffF; + + margin-left: 5px; + background-image: url(images/header-right.gif); + background-repeat: no-repeat; + background-position: right top; +} + +#headerback +{ + margin-right: 5px; + height: 100px; + background-color: #FFfffF; + background-image: url(images/header-back.gif); + background-repeat: repeat-x; + background-position: left top; +} +#schriftzug { + font-size : 1.5em; + text-align:left; + margin-bottom: 7px; + margin-top: 7px; + float:left; + width: 450px; +} + +#schriftzug a:hover{ + background-color:transparent; +} +#logo{ + margin-top: 5px; + float:right; + width: 115px; +} + +.pathbar { + display: none; +} + +.menubar { + width: 100%; + min-height: 1.8em; + background: #ffffff; + color: #000000; + border-top:0.4em solid #DC0067; +} + +.mainmenu { + float: left; + width: auto; + min-height: 1.8em; + background: #ffffff; + color: #000000; +} +.modemenu li { + border-top:0.3em solid #DC0067; + margin-left: 0.3em; + margin-top: -0.3em; +} +.mainmenu div { + float: left; + border-top:0.3em solid #DC0067; + margin-right: 0.3em; + margin-top: -0.3em; +} +.mainmenu div.preactive { + border-top: 0.3em solid #FFCB05; + margin-top: -0.2em; +} + +.mainmenu li { + white-space: nowrap; +} + +.mainmenu div ul { + display: none; + position: absolute; + background: #ffffff; + color: #000000; + 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; + border-width: 1px; +} + +.modemenu a, +.mainmenu a { + display: block; + padding: 0.2em; + color: #000000; + text-decoration: none; + font-size: 70%; + font-weight: bold; +} + + +.modemenu .active a { + color: #000000; + font-weight: bold; + border-top:0.3em solid #FFCB05; + margin-top: -0.2em; +} +.mainmenu .active a{ + color: #000000; + font-weight: bold; + border-top:0.2em solid #FFCB05; +} +.mainmenu li > span:active { + background-color: #FFE990; +} + +.mainmenu li:hover > span > a, +.mainmenu div:hover > a { +color: #ffffff; +background-color: #FFCB05; +} + + +.modemenu a:focus, +.mainmenu a:focus { + color: #000000; +} + +.mainmenu a:hover, +.modemenu a:hover { +color: #ffffff; +background-color: #FFCB05; +} + +.mainmenu div.preactive > a { + color: #DC0067; + font-weight: bold; +} +.mainmenu div.preactive > a:hover, +.mainmenu div.preactive > a:focus { + color: #ffffff; + font-weight: bold; +} + +.modemenu ul { + width: auto; + background: #000000; + color: #ffffff; + list-style-type: none; +} + +.modemenu li { + float: right; + +} + +#content { + clear: both; + width: 98%; + margin: 0 auto; + padding: 0.5em; + background: #FFF4BE; + color: #000000; + font-size: 80%; + border-top:1px solid #D2A800; +} + +#content h1 { + margin: 0.25em 0 0.5em 0; + font-size: 150%; + font-weight: normal; +} + +#content h2 { + margin: 0.5em 0; + font-size: 120%; + font-weight: normal; + text-decoration: underline; +} + +#content p { + margin-bottom: 1em; +} + +.cbi-section { + margin-bottom: 0.5em; + padding: 0.5em 1em; + border: 1px dotted #D2A800; + background-color: #FFE990; +} + +.cbi-section legend { + font-size: 110%; + font-weight: bold; + height: 1em; + padding: 0 0.25em; + color: #555555; +} + +.cbi-section h2 { + margin: 0em 0 0.5em -0.5em !important; +} + +.cbi-section h3 { + height: 1.5em; + font-size: 90%; + color: #555555; +} + +.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; +} + +input[type=submit], +input[type=reset], +input[type=image], +label { + cursor: pointer; +} + +select, +input, +textarea { + background: #FffdF4; + color: #000000; + border-width: 1px; + border-color: #000000; +} + +input[type=image] { + border: none; +} + + +input:focus, +input:hover, +select:focus, +select:hover, +textarea:focus, +textarea:hover { + background-color: #FFF4BE; +} + +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; + padding-left: 17px; +} + +input.cbi-input-key { + background: url('../resources/cbi/key.gif') no-repeat scroll 1px center; + background-color: inherit; + padding-left: 17px; +} + +input.cbi-input-find { + background: url('../resources/cbi/find.gif') no-repeat scroll 1px center; + background-color: inherit; + padding-left: 17px; +} + +input.cbi-input-reload { + background: url('../resources/cbi/reload.gif') no-repeat scroll 1px center; + background-color: inherit; + 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; + padding-left: 17px; + padding-right: 1px; +} + +input.cbi-input-fieldadd, +input.cbi-button-fieldadd { + background: url(../resources/cbi/fieldadd.gif) no-repeat scroll 1px center; + background-color: inherit; + 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; + padding-left: 17px; + padding-right: 1px; +} + +input.cbi-input-save, +input.cbi-button-save { + background: url('../resources/cbi/save.gif') no-repeat scroll 1px center; + background-color: inherit; + padding-left: 17px; + padding-right: 1px; +} + +input.cbi-input-apply, +input.cbi-button-apply { + background: url('../resources/cbi/apply.gif') no-repeat scroll 1px center; + background-color: inherit; + padding-left: 17px; + padding-right: 1px; +} + +input.cbi-input-remove, +div.cbi-section-remove input { + background: url('../resources/cbi/remove.gif') no-repeat scroll 1px center; + background-color: inherit; + padding-left: 17px; + padding-right: 1px; +} + +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.smalltext { +background-color: #FFCB05; + 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: #FFE990; +} + +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; +} + +.cbi-rowstyle-1 { + background-color: #FFF4BE; +} + +.cbi-rowstyle-2 { +} + +div.cbi-value { + clear: left; + vertical-align: middle; + padding-left: 0.25em; + border-bottom: 1px dotted #FFCB05; +} + +div.cbi-value:hover { + background: #FFF4BE; +} + +div.cbi-value:last-child { + border: none; +} + +.cbi-value-title { + float: left; + width: 40%; +} + +div.cbi-value-field { + width: 58%; + margin: 0.25em 0 0.25em 40%; +} + +div.cbi-value-description { + font-size: 90%; +} + +div.cbi-value-field > div.cbi-value-description { + display: none; +} + +div.cbi-value:hover div.cbi-value-field > div.cbi-value-description { + display: block; + color: #ffffff; + background-color: #FFCB05; +} + +option:active, +option:before, +option:after, +option:focus, +option:hover { + color: #ffffff; + background-color: #EEBA00; + background: url(images/bgoption.png); +} + +div.cbi-section-create { + clear: left; + white-space: nowrap; +} + +div.cbi-map-descr { + margin-bottom: 1em; +} + +div.cbi-optionals { + margin: 0.5em 0; + padding: 0 0.25em; +} + +div.cbi-section-remove { + float: right; +} + +.cbi-section-node { + clear: both; + border: 1px dotted #FFCB05; + padding-bottom: 0; +} + +.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; +} + +td.cbi-value-error { + border-color: red !important; +} + +.cbi-value-error input, +.cbi-value-error select { + color: red !important; + background-color: #FFCCCC; +} + +.cbi-section-error { + color: red; + font-size: 95%; + border: 1px dotted red; + margin: 3px; + padding: 3px; +} + +ul.cbi-apply { + font-size: 90%; +} + +.right { + text-align: right; +} + +.luci { + position: fixed; + bottom: 0; + left: 0; + text-align: right; +} + +.luci a { + color: #666666; + text-decoration: none; + font-size: 70%; +} + +.inline { + display: inline; +} + +.error500 { + white-space: normal; + border: 1px dotted #FF0000; + background-color: #FFFFFF; + padding: 0.5em; +} + +#memorybar { + width:200px; + height:8px; + border:1px solid #bbb; + background-color:red +} + +#memfree, #membuffers, #memcached { + float:right; + border:1px solid #bbb; + height:6px; +} + +#memfree { + background-color:green; +} + +#membuffers { + background-color:yellow; +} + +#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; +} + +* html .mainmenu { + height: 1.8em; +} + +* html div.cbi-value-description { + margin-left: 40%; +} diff --git a/themes/freifunk-bno/htdocs/luci-static/freifunk-bno/images/bgoption.png b/themes/freifunk-bno/htdocs/luci-static/freifunk-bno/images/bgoption.png Binary files differnew file mode 100644 index 0000000000..6fd1e2f347 --- /dev/null +++ b/themes/freifunk-bno/htdocs/luci-static/freifunk-bno/images/bgoption.png diff --git a/themes/freifunk-bno/htdocs/luci-static/freifunk-bno/images/favicon.ico b/themes/freifunk-bno/htdocs/luci-static/freifunk-bno/images/favicon.ico Binary files differnew file mode 100644 index 0000000000..7247cfac5f --- /dev/null +++ b/themes/freifunk-bno/htdocs/luci-static/freifunk-bno/images/favicon.ico diff --git a/themes/freifunk-bno/htdocs/luci-static/freifunk-bno/images/header-back.gif b/themes/freifunk-bno/htdocs/luci-static/freifunk-bno/images/header-back.gif Binary files differnew file mode 100644 index 0000000000..21fe02b1e9 --- /dev/null +++ b/themes/freifunk-bno/htdocs/luci-static/freifunk-bno/images/header-back.gif diff --git a/themes/freifunk-bno/htdocs/luci-static/freifunk-bno/images/header-left.gif b/themes/freifunk-bno/htdocs/luci-static/freifunk-bno/images/header-left.gif Binary files differnew file mode 100644 index 0000000000..a3258ccb6d --- /dev/null +++ b/themes/freifunk-bno/htdocs/luci-static/freifunk-bno/images/header-left.gif diff --git a/themes/freifunk-bno/htdocs/luci-static/freifunk-bno/images/header-right.gif b/themes/freifunk-bno/htdocs/luci-static/freifunk-bno/images/header-right.gif Binary files differnew file mode 100644 index 0000000000..93d0291a21 --- /dev/null +++ b/themes/freifunk-bno/htdocs/luci-static/freifunk-bno/images/header-right.gif diff --git a/themes/freifunk-bno/htdocs/luci-static/freifunk-bno/images/logo.gif b/themes/freifunk-bno/htdocs/luci-static/freifunk-bno/images/logo.gif Binary files differnew file mode 100644 index 0000000000..ff00d6ddb8 --- /dev/null +++ b/themes/freifunk-bno/htdocs/luci-static/freifunk-bno/images/logo.gif diff --git a/themes/freifunk-bno/htdocs/luci-static/freifunk-bno/images/main-back.png b/themes/freifunk-bno/htdocs/luci-static/freifunk-bno/images/main-back.png Binary files differnew file mode 100644 index 0000000000..34aca44e01 --- /dev/null +++ b/themes/freifunk-bno/htdocs/luci-static/freifunk-bno/images/main-back.png diff --git a/themes/freifunk-bno/htdocs/luci-static/freifunk-bno/images/schriftzug.gif b/themes/freifunk-bno/htdocs/luci-static/freifunk-bno/images/schriftzug.gif Binary files differnew file mode 100644 index 0000000000..82607d533f --- /dev/null +++ b/themes/freifunk-bno/htdocs/luci-static/freifunk-bno/images/schriftzug.gif diff --git a/themes/freifunk-bno/ipkg/postinst b/themes/freifunk-bno/ipkg/postinst new file mode 100755 index 0000000000..5972881a89 --- /dev/null +++ b/themes/freifunk-bno/ipkg/postinst @@ -0,0 +1,4 @@ +#!/bin/sh +[ -n "${IPKG_INSTROOT}" ] || { + ( . /etc/uci-defaults/luci-theme-freifunk-bno ) && rm -f /etc/uci-defaults/luci-theme-freifunk-bno +} diff --git a/themes/freifunk-bno/luasrc/view/themes/freifunk-bno/footer.htm b/themes/freifunk-bno/luasrc/view/themes/freifunk-bno/footer.htm new file mode 100644 index 0000000000..cf0a25352b --- /dev/null +++ b/themes/freifunk-bno/luasrc/view/themes/freifunk-bno/footer.htm @@ -0,0 +1,29 @@ +<%# +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$ + +-%> + <br class="clear" /> + </div> +</div></div> +</div> + +<div class="luci separator black whitetext bold"><a href="<%=controller%>/about">Powered by <%= luci.__appname__ .. " " .. luci.__version__%></a></div> +</div><!-- end main --><div align="center" style="padding-top:5px "></div> +<br> +</div><!-- end wrapper --> + +</center> +</div> + +</body> +</html> diff --git a/themes/freifunk-bno/luasrc/view/themes/freifunk-bno/header.htm b/themes/freifunk-bno/luasrc/view/themes/freifunk-bno/header.htm new file mode 100644 index 0000000000..26b67e2453 --- /dev/null +++ b/themes/freifunk-bno/luasrc/view/themes/freifunk-bno/header.htm @@ -0,0 +1,196 @@ +<%# +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$ + +-%> +<% +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("text/html") + +-%> + +<?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"> +<head> + <link rel="stylesheet" type="text/css" href="<%=media%>/cascade.css" /> + <% if node and node.css then %><link rel="stylesheet" type="text/css" href="<%=resource%>/<%=node.css%>" /><% end %> + <link rel="shortcut icon" href="<%=media%>/images/favicon.ico" /> + <meta http-equiv="content-type" content="application/xhtml+xml; charset=utf-8" /> + <meta http-equiv="content-script-type" content="text/javascript" /> + <title><%=striptags( hostname .. ( (node and node.title) and ' - ' .. node.title or '')) %> - LuCI</title> + + <!--[if lt IE 7]> + <script type="text/javascript"> + function setup_hover() { + function ie_hover(e) { + e.onmouseover = function() { this.className = "hover" } + 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> +<body onload="window.setup_hover && setup_hover()"> +<div id="all"> +<center> + +<div id="wrapper"> +<div id="main"> + + +<div id="header"> + <div id="headerleft"> + <div id="headerright"> + <div id="headerback"> + <div id="schriftzug"><img src="<%=media%>/images/schriftzug.gif" alt="Freifunk Nordost ueberschrift" name="Freifunk_nordost_ueberschrift" border="0"> </div> + <div id="logo"><img src="<%=media%>/images/logo.gif" alt="Freifunk Nordost logo" name="Freifunk_nordost" border="0"></a></div> + <div class="clear"></div> + + </div> + </div> + </div> +</div> + +<div class="pathbar separator black whitetext bold"> +<%: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 + %><a href="<%=url%>"><%=c.title or v%></a> <% if k ~= #request then %>» <% end + end +end +%> +</div> + +<div class="menubar"> + <div id="mainmenu" class="mainmenu"> +<%- +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> + <%- 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> +<%- + 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 not node.hidden and node.title and node.target then + local href = controller.."/"..category.."/"..k.name + 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)%> + </div> +<% end + end +end +%> + </div> + <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> + + <% + 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"> + <div> + <% 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 %> + </div> + </div> + <% end %> + + <br class="clear" /> +</div> +<div id="content"> diff --git a/themes/freifunk-bno/root/etc/uci-defaults/luci-theme-freifunk-bno b/themes/freifunk-bno/root/etc/uci-defaults/luci-theme-freifunk-bno new file mode 100755 index 0000000000..e5fb8a12dc --- /dev/null +++ b/themes/freifunk-bno/root/etc/uci-defaults/luci-theme-freifunk-bno @@ -0,0 +1,6 @@ +#!/bin/sh +uci batch <<-EOF + set luci.themes.Freifunk_BNO=/luci-static/freifunk-bno + commit luci +EOF + diff --git a/themes/freifunk/Makefile b/themes/freifunk/Makefile new file mode 100644 index 0000000000..81a96f6a83 --- /dev/null +++ b/themes/freifunk/Makefile @@ -0,0 +1,2 @@ +include ../../build/config.mk +include ../../build/module.mk
\ No newline at end of file diff --git a/themes/freifunk/htdocs/luci-static/freifunk/cascade.css b/themes/freifunk/htdocs/luci-static/freifunk/cascade.css new file mode 100644 index 0000000000..8f8dc69398 --- /dev/null +++ b/themes/freifunk/htdocs/luci-static/freifunk/cascade.css @@ -0,0 +1,726 @@ +* { + margin: 0; + padding: 0; +} + +body { + background-color: #ffffff; + color: #ffffff; + font-family: Verdana, Arial, sans-serif; + font-size: 100%; + line-height: 100%; + background-image: url(images/main-back.png); + background-repeat: repeat-x; + background-position: left bottom; + } +#all { + margin: 0px; + padding: 0px; + min-height: 800px; +} + +code { + font-family: monospace; + white-space: pre; +} + +a:link, a:visited { + color:#000000; + font-weight:bold; + text-decoration:none; + } +a:hover { + color:#333333; + font-weight:bold; + } + +/* Custom*/ + #wrapper +{ + width: 95%; + color: #333333; + margin-left: auto; + margin-right: auto; +/* background-image: url(images/corner-left.gif); */ +/* background-repeat: no-repeat; */ +/* background-position: left bottom; */ + background-color: #FffdF4; + min-width: 710px; + min-height: 710px; +} +#main { + clear: both; + width: 100%; + margin: 0; + padding: 0; + color: #333333; +/* background-image: url(images/corner-right.gif); */ +/* background-repeat: no-repeat; */ +/* background-position: right bottom; */ + min-height: 710px; +} + +div#content ul { + margin-left: 2em; +} + +.warning { + color: red !important; + font-weight: bold; +} + +.clear { + clear: both; + height: 1px; +} + +.hidden { + display: none; +} + +.error { + color: #ff0000; +} + +#header +{ + padding: 0px; + height: 100px; +} +#headerleft +{ + height: 100px; + background-color: #FFFfff; + background-image: url(images/header-left.gif); + background-repeat: no-repeat; + background-position: left top; +} +#headerright +{ + height: 100px; + background-color: #FFfffF; + + margin-left: 5px; + background-image: url(images/header-right.gif); + background-repeat: no-repeat; + background-position: right top; +} + +#headerback +{ + margin-right: 5px; + height: 100px; + background-color: #FFfffF; + background-image: url(images/header-back.gif); + background-repeat: repeat-x; + background-position: left top; +} +#schriftzug { + font-size : 1.5em; + text-align:left; + margin-bottom: 7px; + margin-top: 7px; + float:left; + width: 450px; +} + +#schriftzug a:hover{ + background-color:transparent; +} +#logo{ + margin-top: 5px; + float:right; + width: 115px; +} + +.pathbar { + display: none; +} + +.menubar { + width: 100%; + min-height: 1.8em; + background: #ffffff; + color: #000000; + border-top:0.4em solid #DC0067; +} + +.mainmenu { + float: left; + width: auto; + min-height: 1.8em; + background: #ffffff; + color: #000000; +} +.modemenu li { + border-top:0.3em solid #DC0067; + margin-left: 0.3em; + margin-top: -0.3em; +} +.mainmenu div { + float: left; + border-top:0.3em solid #DC0067; + margin-right: 0.3em; + margin-top: -0.3em; +} +.mainmenu div.preactive { + border-top: 0.3em solid #FFCB05; + margin-top: -0.2em; +} + +.mainmenu li { + white-space: nowrap; +} + +.mainmenu div ul { + display: none; + position: absolute; + background: #ffffff; + color: #000000; + 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; + border-width: 1px; +} + +.modemenu a, +.mainmenu a { + display: block; + padding: 0.2em; + color: #000000; + text-decoration: none; + font-size: 70%; + font-weight: bold; +} + + +.modemenu .active a { + color: #000000; + font-weight: bold; + border-top:0.3em solid #FFCB05; + margin-top: -0.2em; +} +.mainmenu .active a{ + color: #000000; + font-weight: bold; + border-top:0.2em solid #FFCB05; +} +.mainmenu li > span:active { + background-color: #FFE990; +} + +.mainmenu li:hover > span > a, +.mainmenu div:hover > a { +color: #ffffff; +background-color: #FFCB05; +} + + +.modemenu a:focus, +.mainmenu a:focus { + color: #000000; +} + +.mainmenu a:hover, +.modemenu a:hover { +color: #ffffff; +background-color: #FFCB05; +} + +.mainmenu div.preactive > a { + color: #DC0067; + font-weight: bold; +} +.mainmenu div.preactive > a:hover, +.mainmenu div.preactive > a:focus { + color: #ffffff; + font-weight: bold; +} + +.modemenu ul { + width: auto; + background: #000000; + color: #ffffff; + list-style-type: none; +} + +.modemenu li { + float: right; + +} + +#content { + clear: both; + width: 98%; + margin: 0 auto; + padding: 0.5em; + background: #FFF4BE; + color: #000000; + font-size: 80%; + border-top:1px solid #D2A800; +} + +#content h1 { + margin: 0.25em 0 0.5em 0; + font-size: 150%; + font-weight: normal; +} + +#content h2 { + margin: 0.5em 0; + font-size: 120%; + font-weight: normal; + text-decoration: underline; +} + +#content p { + margin-bottom: 1em; +} + +.cbi-section { + margin-bottom: 0.5em; + padding: 0.5em 1em; + border: 1px dotted #D2A800; + background-color: #FFE990; +} + +.cbi-section legend { + font-size: 110%; + font-weight: bold; + height: 1em; + padding: 0 0.25em; + color: #555555; +} + +.cbi-section h2 { + margin: 0em 0 0.5em -0.5em !important; +} + +.cbi-section h3 { + height: 1.5em; + font-size: 90%; + color: #555555; +} + +.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; +} + +input[type=submit], +input[type=reset], +input[type=image], +label { + cursor: pointer; +} + +select, +input, +textarea { + background: #FffdF4; + color: #000000; + border-width: 1px; + border-color: #000000; +} + +input[type=image] { + border: none; +} + + +input:focus, +input:hover, +select:focus, +select:hover, +textarea:focus, +textarea:hover { + background-color: #FFF4BE; +} + +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; + padding-left: 17px; +} + +input.cbi-input-key { + background: url('../resources/cbi/key.gif') no-repeat scroll 1px center; + background-color: inherit; + padding-left: 17px; +} + +input.cbi-input-find { + background: url('../resources/cbi/find.gif') no-repeat scroll 1px center; + background-color: inherit; + padding-left: 17px; +} + +input.cbi-input-reload { + background: url('../resources/cbi/reload.gif') no-repeat scroll 1px center; + background-color: inherit; + 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; + padding-left: 17px; + padding-right: 1px; +} + +input.cbi-input-fieldadd, +input.cbi-button-fieldadd { + background: url(../resources/cbi/fieldadd.gif) no-repeat scroll 1px center; + background-color: inherit; + 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; + padding-left: 17px; + padding-right: 1px; +} + +input.cbi-input-save, +input.cbi-button-save { + background: url('../resources/cbi/save.gif') no-repeat scroll 1px center; + background-color: inherit; + padding-left: 17px; + padding-right: 1px; +} + +input.cbi-input-apply, +input.cbi-button-apply { + background: url('../resources/cbi/apply.gif') no-repeat scroll 1px center; + background-color: inherit; + padding-left: 17px; + padding-right: 1px; +} + +input.cbi-input-remove, +div.cbi-section-remove input { + background: url('../resources/cbi/remove.gif') no-repeat scroll 1px center; + background-color: inherit; + padding-left: 17px; + padding-right: 1px; +} + +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.smalltext { +background-color: #FFCB05; + 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: #FFE990; +} + +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; +} + +.cbi-rowstyle-1 { + background-color: #FFF4BE; +} + +.cbi-rowstyle-2 { +} + +div.cbi-value { + clear: left; + vertical-align: middle; + padding-left: 0.25em; + border-bottom: 1px dotted #FFCB05; +} + +div.cbi-value:hover { + background: #FFF4BE; +} + +div.cbi-value:last-child { + border: none; +} + +.cbi-value-title { + float: left; + width: 40%; +} + +div.cbi-value-field { + width: 58%; + margin: 0.25em 0 0.25em 40%; +} + +div.cbi-value-description { + font-size: 90%; +} + +div.cbi-value-field > div.cbi-value-description { + display: none; +} + +div.cbi-value:hover div.cbi-value-field > div.cbi-value-description { + display: block; + color: #ffffff; + background-color: #FFCB05; +} + +option:active, +option:before, +option:after, +option:focus, +option:hover { + color: #ffffff; + background-color: #EEBA00; + background: url(images/bgoption.png); +} + +div.cbi-section-create { + clear: left; + white-space: nowrap; +} + +div.cbi-map-descr { + margin-bottom: 1em; +} + +div.cbi-optionals { + margin: 0.5em 0; + padding: 0 0.25em; +} + +div.cbi-section-remove { + float: right; +} + +.cbi-section-node { + clear: both; + border: 1px dotted #FFCB05; + padding-bottom: 0; +} + +.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; +} + +td.cbi-value-error { + border-color: red !important; +} + +.cbi-value-error input, +.cbi-value-error select { + color: red !important; + background-color: #FFCCCC; +} + +.cbi-section-error { + color: red; + font-size: 95%; + border: 1px dotted red; + margin: 3px; + padding: 3px; +} + +ul.cbi-apply { + font-size: 90%; +} + +.right { + text-align: right; +} + +.luci { + position: fixed; + bottom: 0; + left: 0; + text-align: right; +} + +.luci a { + color: #666666; + text-decoration: none; + font-size: 70%; +} + +.inline { + display: inline; +} + +.error500 { + white-space: normal; + border: 1px dotted #FF0000; + background-color: #FFFFFF; + padding: 0.5em; +} + +#memorybar { + width:200px; + height:8px; + border:1px solid #bbb; + background-color:red +} + +#memfree, #membuffers, #memcached { + float:right; + border:1px solid #bbb; + height:6px; +} + +#memfree { + background-color:green; +} + +#membuffers { + background-color:yellow; +} + +#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; +} + +* html .mainmenu { + height: 1.8em; +} + +* html div.cbi-value-description { + margin-left: 40%; +} diff --git a/themes/freifunk/htdocs/luci-static/freifunk/images/bgoption.png b/themes/freifunk/htdocs/luci-static/freifunk/images/bgoption.png Binary files differnew file mode 100644 index 0000000000..6fd1e2f347 --- /dev/null +++ b/themes/freifunk/htdocs/luci-static/freifunk/images/bgoption.png diff --git a/themes/freifunk/htdocs/luci-static/freifunk/images/favicon.ico b/themes/freifunk/htdocs/luci-static/freifunk/images/favicon.ico Binary files differnew file mode 100644 index 0000000000..f785830ff7 --- /dev/null +++ b/themes/freifunk/htdocs/luci-static/freifunk/images/favicon.ico diff --git a/themes/freifunk/htdocs/luci-static/freifunk/images/header-back.gif b/themes/freifunk/htdocs/luci-static/freifunk/images/header-back.gif Binary files differnew file mode 100644 index 0000000000..21fe02b1e9 --- /dev/null +++ b/themes/freifunk/htdocs/luci-static/freifunk/images/header-back.gif diff --git a/themes/freifunk/htdocs/luci-static/freifunk/images/header-left.gif b/themes/freifunk/htdocs/luci-static/freifunk/images/header-left.gif Binary files differnew file mode 100644 index 0000000000..a3258ccb6d --- /dev/null +++ b/themes/freifunk/htdocs/luci-static/freifunk/images/header-left.gif diff --git a/themes/freifunk/htdocs/luci-static/freifunk/images/header-right.gif b/themes/freifunk/htdocs/luci-static/freifunk/images/header-right.gif Binary files differnew file mode 100644 index 0000000000..93d0291a21 --- /dev/null +++ b/themes/freifunk/htdocs/luci-static/freifunk/images/header-right.gif diff --git a/themes/freifunk/htdocs/luci-static/freifunk/images/logo.png b/themes/freifunk/htdocs/luci-static/freifunk/images/logo.png Binary files differnew file mode 100644 index 0000000000..0beeb2fad1 --- /dev/null +++ b/themes/freifunk/htdocs/luci-static/freifunk/images/logo.png diff --git a/themes/freifunk/htdocs/luci-static/freifunk/images/main-back.png b/themes/freifunk/htdocs/luci-static/freifunk/images/main-back.png Binary files differnew file mode 100644 index 0000000000..34aca44e01 --- /dev/null +++ b/themes/freifunk/htdocs/luci-static/freifunk/images/main-back.png diff --git a/themes/freifunk/htdocs/luci-static/freifunk/images/schriftzug.png b/themes/freifunk/htdocs/luci-static/freifunk/images/schriftzug.png Binary files differnew file mode 100644 index 0000000000..5b372230f1 --- /dev/null +++ b/themes/freifunk/htdocs/luci-static/freifunk/images/schriftzug.png diff --git a/themes/freifunk/ipkg/postinst b/themes/freifunk/ipkg/postinst new file mode 100755 index 0000000000..5972881a89 --- /dev/null +++ b/themes/freifunk/ipkg/postinst @@ -0,0 +1,4 @@ +#!/bin/sh +[ -n "${IPKG_INSTROOT}" ] || { + ( . /etc/uci-defaults/luci-theme-freifunk-bno ) && rm -f /etc/uci-defaults/luci-theme-freifunk-bno +} diff --git a/themes/freifunk/luasrc/view/themes/freifunk/footer.htm b/themes/freifunk/luasrc/view/themes/freifunk/footer.htm new file mode 100644 index 0000000000..cf0a25352b --- /dev/null +++ b/themes/freifunk/luasrc/view/themes/freifunk/footer.htm @@ -0,0 +1,29 @@ +<%# +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$ + +-%> + <br class="clear" /> + </div> +</div></div> +</div> + +<div class="luci separator black whitetext bold"><a href="<%=controller%>/about">Powered by <%= luci.__appname__ .. " " .. luci.__version__%></a></div> +</div><!-- end main --><div align="center" style="padding-top:5px "></div> +<br> +</div><!-- end wrapper --> + +</center> +</div> + +</body> +</html> diff --git a/themes/freifunk/luasrc/view/themes/freifunk/header.htm b/themes/freifunk/luasrc/view/themes/freifunk/header.htm new file mode 100644 index 0000000000..a0f7c6339f --- /dev/null +++ b/themes/freifunk/luasrc/view/themes/freifunk/header.htm @@ -0,0 +1,196 @@ +<%# +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$ + +-%> +<% +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("text/html") + +-%> + +<?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"> +<head> + <link rel="stylesheet" type="text/css" href="<%=media%>/cascade.css" /> + <% if node and node.css then %><link rel="stylesheet" type="text/css" href="<%=resource%>/<%=node.css%>" /><% end %> + <link rel="shortcut icon" href="<%=media%>/images/favicon.ico" /> + <meta http-equiv="content-type" content="application/xhtml+xml; charset=utf-8" /> + <meta http-equiv="content-script-type" content="text/javascript" /> + <title><%=striptags( hostname .. ( (node and node.title) and ' - ' .. node.title or '')) %> - LuCI</title> + + <!--[if lt IE 7]> + <script type="text/javascript"> + function setup_hover() { + function ie_hover(e) { + e.onmouseover = function() { this.className = "hover" } + 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> +<body onload="window.setup_hover && setup_hover()"> +<div id="all"> +<center> + +<div id="wrapper"> +<div id="main"> + + +<div id="header"> + <div id="headerleft"> + <div id="headerright"> + <div id="headerback"> + <div id="schriftzug"><img src="<%=media%>/images/schriftzug.png" alt="Freifunk ueberschrift" name="Freifunk_nordost_ueberschrift" border="0"> </div> + <div id="logo"><img src="<%=media%>/images/logo.png" alt="Freifunk logo" name="Freifunk_nordost" border="0"></a></div> + <div class="clear"></div> + + </div> + </div> + </div> +</div> + +<div class="pathbar separator black whitetext bold"> +<%: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 + %><a href="<%=url%>"><%=c.title or v%></a> <% if k ~= #request then %>» <% end + end +end +%> +</div> + +<div class="menubar"> + <div id="mainmenu" class="mainmenu"> +<%- +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> + <%- 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> +<%- + 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 not node.hidden and node.title and node.target then + local href = controller.."/"..category.."/"..k.name + 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)%> + </div> +<% end + end +end +%> + </div> + <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> + + <% + 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"> + <div> + <% 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 %> + </div> + </div> + <% end %> + + <br class="clear" /> +</div> +<div id="content"> diff --git a/themes/freifunk/root/etc/uci-defaults/luci-theme-freifunk b/themes/freifunk/root/etc/uci-defaults/luci-theme-freifunk new file mode 100755 index 0000000000..eb038f0acc --- /dev/null +++ b/themes/freifunk/root/etc/uci-defaults/luci-theme-freifunk @@ -0,0 +1,6 @@ +#!/bin/sh +uci batch <<-EOF + set luci.themes.Freifunk=/luci-static/freifunk + commit luci +EOF + |