diff options
author | Jo-Philipp Wich <jow@openwrt.org> | 2014-12-03 15:17:05 +0100 |
---|---|---|
committer | Jo-Philipp Wich <jow@openwrt.org> | 2015-01-08 16:26:20 +0100 |
commit | 1bb4822dca6113f73e3bc89e2acf15935e6f8e92 (patch) | |
tree | 35e16f100466e4e00657199b38bb3d87d52bf73f /themes/luci-theme-freifunk-generic | |
parent | 9edd0e46c3f880727738ce8ca6ff1c8b85f99ef4 (diff) |
Rework LuCI build system
* Rename subdirectories to their repective OpenWrt package names
* Make each LuCI module its own standalone package
* Deploy a shared luci.mk which is used by each module Makefile
Signed-off-by: Jo-Philipp Wich <jow@openwrt.org>
Diffstat (limited to 'themes/luci-theme-freifunk-generic')
12 files changed, 1432 insertions, 0 deletions
diff --git a/themes/luci-theme-freifunk-generic/Makefile b/themes/luci-theme-freifunk-generic/Makefile new file mode 100644 index 000000000..2fc62fdbc --- /dev/null +++ b/themes/luci-theme-freifunk-generic/Makefile @@ -0,0 +1,14 @@ +# +# Copyright (C) 2008-2014 The LuCI Team <luci@lists.subsignal.org> +# +# This is free software, licensed under the Apache License, Version 2.0 . +# + +include $(TOPDIR)/rules.mk + +LUCI_TITLE:=Freifunk Generic Theme +LUCI_DEPENDS:= + +include ../../luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/themes/luci-theme-freifunk-generic/htdocs/luci-static/freifunk-generic/bg.jpg b/themes/luci-theme-freifunk-generic/htdocs/luci-static/freifunk-generic/bg.jpg Binary files differnew file mode 100644 index 000000000..822527ead --- /dev/null +++ b/themes/luci-theme-freifunk-generic/htdocs/luci-static/freifunk-generic/bg.jpg diff --git a/themes/luci-theme-freifunk-generic/htdocs/luci-static/freifunk-generic/cascade.css b/themes/luci-theme-freifunk-generic/htdocs/luci-static/freifunk-generic/cascade.css new file mode 100644 index 000000000..ed97427c9 --- /dev/null +++ b/themes/luci-theme-freifunk-generic/htdocs/luci-static/freifunk-generic/cascade.css @@ -0,0 +1,1072 @@ +@charset "utf-8"; + +@media all { + +html { + min-height: 100%; + height: auto; +} + +body { + color: #ccc; + background:#e5eef5 url(bg.jpg) repeat-x top left; + font-family: Verdana, Arial, sans-serif; + font-size: 100%; + line-height: 100%; + padding-bottom: 1.5em; +} + +html, body { + height: 99%; +} + +* { + 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; +} + +a img { + border: 0; +} + +.skiplink, +.navigation, +.hidden { + position: absolute; + left: -1000px; + top: -1000px; + width: 0px; + height: 0px; + overflow: hidden; + display: inline; +} + +.error { + color: #f00; + background-color: white; +} + +.errorbox { + border: 1px solid #F00; + background-color: #FCC; + padding: 5px; +} + + +.ifacebox { + background-color: #FFFFFF; + border: 1px solid #CCCCCC; + margin: 0 10px; + text-align: center; + white-space: nowrap; +} + +.ifacebox .ifacebox-head { + border-bottom: 1px solid #CCCCCC; + padding: 2px; +} + +.ifacebox .ifacebox-body { + padding: 2px; +} + + +.ifacebadge { + background-color: #FFFFFF; + border: 1px solid #CCCCCC; + padding: 2px; + margin-left: 2px; + display: inline-block; +} + +.ifacebadge-active { + border-color: #000000; + font-weight: bold; +} + + +.zonebadge { + padding: 2px; + display: inline-block; + white-space: nowrap; + cursor: pointer; +} + +.zonebadge em, +.zonebadge strong { + margin: 3px; + display: inline-block; +} + +.zonebadge input { + width: 6em; + height: 1.5em; +} + +.zonebadge-empty { + border: 1px dashed #AAAAAA; + color: #AAAAAA; + font-style: italic; + font-size: smaller; +} + + +#header { + height: auto; + background: #FFF url(header.jpg) repeat-x left bottom; + color: #ccc; + font-weight: bold; + text-align:right; +} + +.header_left img { + padding: 10px 10px 0px 10px; + margin-bottom: 10px; +} + +.header_banner { + overflow:hidden; + padding-bottom: 6px; + text-align:left; +} + +.header_banner img{ + padding: 0px; +} + +.header_left{ + text-align:left; + max-width: 50%; + float:left; +} + +.header_left a{ + color: #dc0067; + font: bold 36px Helvetica; + text-decoration: none; +} + +#header h1, +.header_right { + max-width: 45%; + text-align: right; + font-size: 70%; + font-weight: normal; + line-height: 160%; + float:right; + padding: 10px 10px 0 0; +} + +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%; +} + +#xhr_poll_status { + cursor: pointer; +} + +#xhr_poll_status #xhr_poll_status_off { + font-weight: bold; + color: #FF0000; +} + +#xhr_poll_status #xhr_poll_status_on { + font-weight: bold; + color: #00FF00; +} + +#menubar { + position: relative; + width: 100%; + background: #FFF; + color: #004a9c; + border-bottom: 1px dotted #5A5A5A; +} +#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: dotted; + 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: #000; + color: #fff; + 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 #ccc; + padding: 5px; + font-family: monospace; +} + + +#maincontent { + clear: both; + width: 90%; + margin: 0 auto; + padding: 0.5em; + color: #000; + font-size: 80%; +} + +#maincontent h2 { + font:normal bold 150% "Trebuchet MS", Verdana, sans-serif; + margin: 0.25em 0 0.7em 0; + border-bottom: 1px solid; + padding: 10px 0 4px 0; + color: #404040; +} + +#maincontent h3 { + margin: 0.5em 0 1.1em 0; + font:italic bold 125% "Trebuchet MS", Verdana, sans-serif; + color: #404040; +} + +#maincontent p { + margin-bottom: 1em; +} + +.cbi-section { + margin-bottom: 0.5em; + padding: 0.5em 1em; + border: 1px dotted #555; + background-color: #fff; + color: #000; +} + +.cbi-section legend { + font-size: 110%; + font-weight: bold; + height: 1em; + padding: 0.5em 0.25em; + background-color: transparent; + color: #404040 ; +} + +.cbi-section h2 { + margin: 0em 0 0.5em -0.5em !important; +} + +.cbi-section h3 { + text-decoration: none !important; + font-weight: bold !important; + color: #555 !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%; +} + +ul.cbi-tabmenu { + padding: 3px 0; + margin-left: 0 !important; + margin-bottom: -1px; + list-style-type: none; +} + +ul.cbi-tabmenu li.cbi-tab, +ul.cbi-tabmenu li.cbi-tab-disabled { + display: inline; + margin: 0; +} + +ul.cbi-tabmenu li.cbi-tab a, +ul.cbi-tabmenu li.cbi-tab-disabled a { + text-decoration: none; + padding: 3px 7px; + margin-right: 3px; + border: 1px dotted #bbb; + border-bottom: none; + background-color: #eee; + color: #bbb; +} + +ul.cbi-tabmenu li.cbi-tab-highlighted a { + color: #000; + background-color: #FFEEAA; +} + +ul.cbi-tabmenu li a:hover { + color: #000; +} + +ul.cbi-tabmenu li.cbi-tab a { + position: relative; + top: 1px; + padding-top: 4px; + color: #000; + background-color: #fff; +} + +div.cbi-tab-descr { + background-image: url(/luci-static/resources/cbi/help.gif); + background-position: 0.25em 50%; + background-repeat: no-repeat; + border-bottom: 1px solid #ccc; + margin: 0.25em 0.25em 2em; + padding: 0.5em 0.5em 0.5em 2em; +} + +input[type=submit], +input[type=reset], +input[type=image], +input[type=button] { + cursor: pointer; +} + +select, +input, +textarea { + background: #fff; + color: #000; + border: 1px solid #cccccc; +} + +input[type=image] { + border: none; +} + +input:focus, +input:hover, +select:focus, +select:hover, +textarea:focus, +textarea:hover { + background-color: #fff; + color: #000; +} + +select, +input[type=text], +input[type=password] { + width: 20em; +} + +td select, +td input[type=text], +td input[type=password] { + width: 99%; +} + +img.cbi-image-button { + cursor: pointer; + margin: 0 2px; + vertical-align: middle; +} + +input.cbi-input-user { + background: url('../resources/cbi/user.gif') no-repeat scroll 1px center; + background-color: inherit; + color: #000; + text-indent: 17px; +} + +input.cbi-input-password { + background: url('../resources/cbi/key.gif') no-repeat scroll 1px center; + background-color: inherit; + color: #000; + text-indent: 17px; +} + +input.cbi-input-find, +input.cbi-button-find { + background: url('../resources/cbi/find.gif') no-repeat scroll 1px center; + background-color: inherit; + color: #000; + padding-left: 17px; + border: none; +} + +input.cbi-input-reload { + background: url('../resources/cbi/reload.gif') no-repeat scroll 1px center; + background-color: inherit; + color: #000; + padding-left: 17px; +} + +input.cbi-button{ + margin-top: 1.3em; +} + +input.cbi-input-add, +input.cbi-button-add { + background: url('../resources/cbi/add.gif') no-repeat scroll 1px center; + background-color: inherit; + color: #000; + padding: 0 1px 0 17px; + 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: #000; + padding: 0 1px 0 17px; +} + +input.cbi-input-reset, +input.cbi-button-reset { + background: url('../resources/cbi/reset.gif') no-repeat scroll 1px center; + background-color: inherit; + color: #000; + padding: 0 1px 0 17px; +} + + +} + +input.cbi-input-save, +input.cbi-button-save { + background: url('../resources/cbi/save.gif') no-repeat scroll 1px center; + background-color: inherit; + color: #000; + padding: 0 1px 0 17px; +} + +input.cbi-input-apply, +input.cbi-button-apply { + background: url('../resources/cbi/apply.gif') no-repeat scroll 1px center; + background-color: inherit; + color: #000; + padding: 0 1px 0 17px; +} + +input.cbi-input-link, +input.cbi-button-link { + background: url('../resources/cbi/link.gif') no-repeat scroll 1px center; + background-color: inherit; + color: #000; + padding: 0 1px 0 17px; + border: none; +} + +input.cbi-input-download, +input.cbi-button-download { + background: url('../resources/cbi/download.gif') no-repeat scroll 1px center; + background-color: inherit; + color: #000; + padding: 0 1px 0 17px; + 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: #000; + padding: 0 1px 0 17px; + border: 1px solid #fff; +} + +input.cbi-button-up { + background-image: url('../resources/cbi/up.gif'); + padding: 0 1px 0 11px; +} + +input.cbi-button-down { + background-image: url('../resources/cbi/down.gif'); + padding: 0 1px 0 11px; +} + +input.cbi-button-edit { + background: url('../resources/cbi/edit.gif') no-repeat scroll 1px center; + color: #000000; + padding: 0 1px 0 17px; +} + +input.cbi-button-reload { + background: url('../resources/cbi/reload.gif') no-repeat scroll 1px center; + color: #000000; + padding: 0 1px 0 17px; +} + +input.cbi-button-remove { + background: url('../resources/cbi/remove.gif') no-repeat scroll 1px center; + color: #000000; + padding: 0 1px 0 17px; +} + +.cbi-input-invalid { + background-image: url('../resources/cbi/reset.gif'); + background-repeat: no-repeat; + background-position: right; + color: #FF0000 !important; + border-color: #FF0000; +} + +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: #000; +} + +table.smalltext { + background: #f5f5f5; + color: #000; + border: 1px solid #666; + font-size: 90%; + width: 80%; + margin-left: auto; + margin-right: auto; + border-collapse: collapse; +} + +table.smalltext tr:hover td { + background-color: #bbddee; + color: #000; +} + +table.smalltext tr th { + padding: 0 0.25em; + border-left: 1px dotted #666; + text-align: left; +} + +table.smalltext tr td { + padding: 0.2em; + border-top: 1px dotted #666; + border-left: 1px dotted #666; +} + +table.cbi-section-table .cbi-rowstyle-1 { + background-color: #f1f6fa; + color: #000; +} + +table.cbi-section-table .cbi-rowstyle-1:hover, +table.cbi-section-table .cbi-rowstyle-2:hover { + background-color: #b2c8d4; + color: #000000; +} + +table.cbi-section-table .cbi-section-table-cell { + padding: 3px; + white-space: nowrap; +} + +.cbi-section .cbi-rowstyle-1 h3 { + background-color: #f1f6fa; + color: #555; +} + +.cbi-rowstyle-2 { + color: #000; +} + +div.cbi-value { + clear: left; + vertical-align: middle; + padding-left: 0.25em; + border-bottom: 1px dotted #bbb; +} + +div.cbi-value:hover { + background: #f8f8f8; + color: #000; +} + +.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 #bbb; +} + +div.cbi-section-create .cbi-button { + margin: 0.25em; +} + +input.cbi-section-create-name { + margin-right: -0.25em; + border: 1px solid #999; +} + +div.cbi-map-descr { + margin-bottom: 1em; +} + +div.cbi-optionals { + padding: 0.25em; + border-bottom: 1px dotted #bbb; +} + +div.cbi-section-remove { + float: right; +} + +.cbi-section-node { + clear: both; + border: 1px dotted #bbb; + 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: bold; + 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: #f00; + background-color: #fff; +} + +td.cbi-value-error { + border-color: red; +} + +.cbi-value-error input, +.cbi-value-error select { + color: red; + background-color: #fcc; +} + +.cbi-section-error { + color: red; + background-color: white; + font-size: 95%; + border: 1px dotted red; + margin: 3px; + padding: 3px; +} + +.left { + text-align: left !important; +} + +.right { + text-align: right !important; +} + +.footer, .push { + height: 2em; +} + +.footer { + width: 99%; + padding: 0.3em; +} + + +.wrapper { + min-height: 100%; + height: auto !important; + height: 100%; + margin: 0 auto -2em; +} + +.luci a:link, +.luci a:visited, +.exectime { + color: #666; + text-decoration: none; + font-size: 70%; +} + +.inline { + display: inline; +} + +.error500 { + white-space: normal; + border: 1px dotted #f00; + background-color: #fff; + color: #000; + padding: 0.5em; +} + +.uci-change-list { + font-family: monospace; +} + +.uci-change-list ins, +.uci-change-legend-label ins { + text-decoration: none; + border: 1px solid #00FF00; + background-color: #CCFFCC; + display: block; + padding: 2px; +} + +.uci-change-list del, +.uci-change-legend-label del { + text-decoration: none; + border: 1px solid #FF0000; + background-color: #FFCCCC; + display: block; + font-style: normal; + padding: 2px; +} + +.uci-change-list var, +.uci-change-legend-label var { + text-decoration: none; + border: 1px solid #CCCCCC; + background-color: #EEEEEE; + display: block; + font-style: normal; + padding: 2px; +} + +.uci-change-list var ins, +.uci-change-list var del { + /*display: inline;*/ + border: none; + white-space: pre; + font-style: normal; + padding: 0px; +} + +.uci-change-legend { + padding: 5px; +} + +.uci-change-legend-label { + width: 150px; + float: left; + font-size: 80%; +} + +.uci-change-legend-label>ins, +.uci-change-legend-label>del, +.uci-change-legend-label>var { + float: left; + margin-right: 4px; + width: 10px; + height: 10px; + display: block; +} + +.uci-change-legend-label var ins, +.uci-change-legend-label var del { + line-height: 6px; + border: none; +} + +} diff --git a/themes/luci-theme-freifunk-generic/htdocs/luci-static/freifunk-generic/header.jpg b/themes/luci-theme-freifunk-generic/htdocs/luci-static/freifunk-generic/header.jpg Binary files differnew file mode 100644 index 000000000..2fde5a212 --- /dev/null +++ b/themes/luci-theme-freifunk-generic/htdocs/luci-static/freifunk-generic/header.jpg diff --git a/themes/luci-theme-freifunk-generic/htdocs/luci-static/freifunk-generic/ie7.css b/themes/luci-theme-freifunk-generic/htdocs/luci-static/freifunk-generic/ie7.css new file mode 100644 index 000000000..67ed9fb81 --- /dev/null +++ b/themes/luci-theme-freifunk-generic/htdocs/luci-static/freifunk-generic/ie7.css @@ -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; +} diff --git a/themes/luci-theme-freifunk-generic/htdocs/luci-static/freifunk-generic/logo.jpg b/themes/luci-theme-freifunk-generic/htdocs/luci-static/freifunk-generic/logo.jpg Binary files differnew file mode 100644 index 000000000..ea06ce77f --- /dev/null +++ b/themes/luci-theme-freifunk-generic/htdocs/luci-static/freifunk-generic/logo.jpg diff --git a/themes/luci-theme-freifunk-generic/htdocs/luci-static/freifunk-generic/mobile.css b/themes/luci-theme-freifunk-generic/htdocs/luci-static/freifunk-generic/mobile.css new file mode 100644 index 000000000..37d77b4f4 --- /dev/null +++ b/themes/luci-theme-freifunk-generic/htdocs/luci-static/freifunk-generic/mobile.css @@ -0,0 +1,59 @@ +#header{ + padding-left:0px !important; + padding-bottom:24px; +} + +.header_left{ + max-width: 100%; +} + +#mainlogo { + max-width: 90%; +} + +#content { + margin-left:0px !important; +} + +#maincontent{ + font-size:1.2em; + line-height:1.5em; +} + +input[type=submit], +.cbi-button, +.cbi-button-reset, +.cbi-button-save{ + display:inline !important; + float:none !important; + padding:10px 30px !important; + margin: 10px 10px 10px 0 !important; +} + +.cbi-input-text, +.cbi-input-select, +.cbi-input-user, +.cbi-input-password{ + display:block !important; + margin: 0 !important; + padding:0 !important; +} + +.cbi-value-field{ + margin:0 !important; + margin-bottom: 1em !important; + width:100% !important; +} + +.cbi-section legend{ + white-space:normal !important; +} + +.cbi-value-title{ + font-weight:bold; + float:none !important; +} + +img { + max-width:100%; +} diff --git a/themes/luci-theme-freifunk-generic/htdocs/luci-static/freifunk-generic/smallscreen.css b/themes/luci-theme-freifunk-generic/htdocs/luci-static/freifunk-generic/smallscreen.css new file mode 100644 index 000000000..660cd8df4 --- /dev/null +++ b/themes/luci-theme-freifunk-generic/htdocs/luci-static/freifunk-generic/smallscreen.css @@ -0,0 +1,3 @@ +.header_right { + display:none; +} diff --git a/themes/luci-theme-freifunk-generic/ipkg/postinst b/themes/luci-theme-freifunk-generic/ipkg/postinst new file mode 100644 index 000000000..76edf3621 --- /dev/null +++ b/themes/luci-theme-freifunk-generic/ipkg/postinst @@ -0,0 +1,3 @@ +[ -n "${IPKG_INSTROOT}" ] || { + ( . /etc/uci-defaults/luci-theme-freifunk-generic ) && rm -f /etc/uci-defaults/luci-theme-freifunk-generic +} diff --git a/themes/luci-theme-freifunk-generic/luasrc/view/themes/freifunk-generic/footer.htm b/themes/luci-theme-freifunk-generic/luasrc/view/themes/freifunk-generic/footer.htm new file mode 100644 index 000000000..e9df8cda0 --- /dev/null +++ b/themes/luci-theme-freifunk-generic/luasrc/view/themes/freifunk-generic/footer.htm @@ -0,0 +1,31 @@ +<%# +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 +-%> +<% local xtime +if exectime then + xtime = (string.format("%.2fs", os.clock() - exectime)) +end %> + +</div> +<div class="clear"></div> +<div class="push"></div> +</div> + +<div class="footer"> +<p class="luci"><a href="http://luci.subsignal.org">Powered by <%= luci.__appname__ .. " (" .. luci.__version__ .. ")" %></a></p> +<% if xtime then %> +<p class="exectime">Script execution time: <%=xtime%></p> +<% end %> +</div> + +</body> +</html> + diff --git a/themes/luci-theme-freifunk-generic/luasrc/view/themes/freifunk-generic/header.htm b/themes/luci-theme-freifunk-generic/luasrc/view/themes/freifunk-generic/header.htm new file mode 100644 index 000000000..e8b1c062d --- /dev/null +++ b/themes/luci-theme-freifunk-generic/luasrc/view/themes/freifunk-generic/header.htm @@ -0,0 +1,226 @@ +<%# +LuCI - Lua Configuration Interface +Copyright 2008 Steven Barth <steven@midlink.org> +Copyright 2008-2011 Jo-Philipp Wich <xm@subsignal.org> + +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 +-%> + +<% + local fs = require "luci.fs" + local sys = require "luci.sys" + local http = require "luci.http" + local disp = require "luci.dispatcher" + + local hostname = sys.hostname() + local load1, load5, load15 = sys.loadavg() + + local request = disp.context.path + local category = request[1] + local cattree = category and disp.node(category) + + local tree = disp.node() + local node = disp.context.dispatched + + local categories = disp.node_childs(tree) + + local c = tree + local i, r + + -- tag all nodes leading to this page + 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 + + local uci = require "luci.model.uci".cursor() + local ff = uci:get("freifunk", "community", "name") or "" + local co = "profile_" .. ff + local community = uci:get_first(co, "community", "name") or "Freifunk" + local hp = uci:get_first(co, "community", "homepage") or "http://www.freifunk.net" + local logo = "/luci-static/freifunk-generic/logo.jpg" + local banner = false + local show_comm = true + + local lo = fs.glob("/www/luci-static/resources/custom_logo.*") + if lo[1] then + logo = string.gsub(lo[1], "/www", "") + end + + local lon = fs.glob("/www/luci-static/resources/custom_logo_only.*") + if lon[1] then + logo = string.gsub(lon[1], "/www", "") + show_comm = false + end + + local hea = fs.glob("/www/luci-static/resources/custom_header.*") + if hea[1] then + logo = string.gsub(hea[1], "/www", "") + show_comm = false + banner = true + end +-%> + +<?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" /> +<link rel="stylesheet" media="only screen and (max-device-width: 854px)" href="<%=media%>/mobile.css" type="text/css" /> +<link rel="stylesheet" media="only screen and (max-width: 854px)" href="<%=media%>/smallscreen.css" type="text/css" /> +<link rel="stylesheet" media="handheld" href="<%=media%>/mobile.css" type="text/css" /> +<!--[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 -%> +<% if css then %><style title="text/css"> +<%= css %> +</style> +<% end -%> +<meta name="viewport" content="initial-scale=1.0" /> +<script type="text/javascript" src="<%=resource%>/xhr.js"></script> + +<title><%=striptags( hostname .. ( (node and node.title) and ' - ' .. translate(tostring(node.title)) or '')) %> - LuCI</title> +</head> + +<body class="lang_<%=luci.i18n.context.lang%>"> + +<div class="wrapper"> + +<!--[if lt IE 7]> +<div class="warning"><div style="background-color: #cccccc;padding: 2px 10px 2px 10px"> +<%: Your Internet Explorer is too old to display this page correctly. Please upgrade it to at least version 7 or use another browser like Firefox, Opera or Safari.%> +</div></div> +<![endif]--> + +<%- if luci.sys.process.info("uid") == 0 and luci.sys.user.getuser("root") and not luci.sys.user.getpasswd("root") then -%> + <div class="warning"> + <strong><%:No password set!%></strong><br /> + <%:There is no password set on this router. Please configure a root password to protect the web interface and enable SSH.%> + </div> +<%- end -%> + +<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"> + <%if banner then%> + <div class="header_banner"> + <a href="<%=hp%>"><img src="<%=logo%>" alt="Header" /></a> + </div> + <%else%> + <div class="header_left"> + <a href="<%=hp%>"><img src="<%=logo%>" id="mainlogo" alt="Logo" /></a> + <%if show_comm then%> + <a href="<%=hp%>"><%=community%></a> + <br/> + <%end%> + </div> + <div class="header_right"> + <%=luci.version.distversion%><br /> + <%:Load%>: <%="%.2f" % load1%> <%="%.2f" % load5%> <%="%.2f" % load15%><br /> + <%:Hostname%>: <%=hostname%><br /> + <span id="xhr_poll_status" style="display:none" onclick="XHR.running() ? XHR.halt() : XHR.run()"> + <%:Auto Refresh%>: + <span id="xhr_poll_status_on"><%:on%></span> + <span id="xhr_poll_status_off" style="display:none"><%:off%></span> + </span> + </div> + <div class="clear"></div> + + <%end%> +</div> + +<%- + local function submenu(prefix, node) + local childs = disp.node_childs(node) + if #childs > 0 then +%> + <ul id="submenu_<%=string.gsub(string.gsub(prefix, "/", "_"), "^_(.-)_$", "%1")%>"> + <%- + for i, r in ipairs(childs) do + local nnode = node.nodes[r] + local href = controller .. prefix .. r .. "/" .. + (nnode.query and http.build_querystring(nnode.query) or "") + %> + <li> + <a<%=ifattr(nnode._menu_selected, "class", "active")%> href="<%=luci.util.pcdata(href)%>"><%=translate(nnode.title)%></a> + <%- submenu(prefix .. r .. "/", nnode) %> + </li> + <%- + end + %> + </ul> +<% + end + end +%> + +<div id="menubar"> +<h2 class="navigation"><a id="navigation" name="navigation"><%:navigation Navigation%></a></h2> +<ul id="mainmenu" class="dropdowns"> + <% + local childs = disp.node_childs(cattree) + if #childs > 0 then + for i, r in ipairs(childs) do + local nnode = cattree.nodes[r] + local href = controller .. "/" .. category .. "/" .. r .. + (nnode.query and http.build_querystring(k.query) or "") + %> + <li> + <a<%=ifattr(nnode._menu_selected, "class", "preactive")%> href="<%=href%>"><%=translate(nnode.title)%></a> + <%- submenu("/" .. category .. "/" .. r .. "/", nnode) %> + </li> + <% + end + end + %> + <li></li> +</ul> + +<% if #categories > 1 then %> + <ul id="modemenu"> + <% for i, r in ipairs(categories) do %> + <li><a<%=ifattr(request[1] == r, "class", "active")%> href="<%=controller%>/<%=r%>/"><%=striptags(translate(tree.nodes[r].title))%></a></li> + <% end %> + </ul> +<% end %> + +<% +if tree.nodes[category] and tree.nodes[category].ucidata then + local ucic = 0 + for i, j in pairs(require("luci.model.uci").cursor():changes()) do + for k, l in pairs(j) do + for m, n in pairs(l) do + ucic = ucic + 1; + end + end + end +-%> + <div id="savemenu"> + <% if ucic > 0 then %> + <a class="warning" href="<%=controller%>/<%=category%>/uci/changes/?redir=<%=http.urlencode(http.formvalue("redir") or REQUEST_URI)%>"><%:Unsaved Changes%>: <%=ucic%></a> + <% end -%> + </div> +<% end %> + +<div class="clear"></div> +</div> +<div id="maincontent"> +<% if category ~= "freifunk" and category ~= "splash" then %> +<noscript> + <div class="errorbox"> + <strong><%:Java Script required!%></strong><br /> + <%:You must enable Java Script in your browser or LuCI will not work properly.%> + </div> +</noscript> +<% end %> diff --git a/themes/luci-theme-freifunk-generic/root/etc/uci-defaults/luci-theme-freifunk-generic b/themes/luci-theme-freifunk-generic/root/etc/uci-defaults/luci-theme-freifunk-generic new file mode 100644 index 000000000..131f54e21 --- /dev/null +++ b/themes/luci-theme-freifunk-generic/root/etc/uci-defaults/luci-theme-freifunk-generic @@ -0,0 +1,4 @@ +uci batch <<-EOF + set luci.themes.Freifunk_Generic=/luci-static/freifunk-generic + commit luci +EOF |