summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--contrib/package/luci/Makefile20
-rw-r--r--i18n/english/luasrc/i18n/admin-core.en37
-rw-r--r--i18n/english/luasrc/i18n/default.en27
-rw-r--r--libs/web/luasrc/dispatcher.lua17
-rw-r--r--libs/web/root/etc/config/luci21
-rw-r--r--modules/admin-core/luasrc/controller/admin/index.lua12
-rw-r--r--modules/admin-core/luasrc/controller/admin/status.lua7
-rw-r--r--modules/admin-core/luasrc/controller/admin/system.lua19
-rw-r--r--modules/admin-core/luasrc/i18n/admin_index.en20
-rw-r--r--modules/admin-core/luasrc/view/about.htm12
-rw-r--r--modules/admin-core/luasrc/view/admin_index/index.htm16
-rw-r--r--modules/admin-core/luasrc/view/admin_status/index.htm4
-rw-r--r--themes/fledermaus/luasrc/view/themes/fledermaus/header.htm5
-rw-r--r--themes/openwrt.org/Makefile2
-rw-r--r--themes/openwrt.org/luasrc/view/themes/openwrt.org/footer.htm8
-rw-r--r--themes/openwrt.org/luasrc/view/themes/openwrt.org/header.htm136
-rw-r--r--themes/openwrt.org/root/www/luci-static/openwrt.org/cascade.css298
17 files changed, 591 insertions, 70 deletions
diff --git a/contrib/package/luci/Makefile b/contrib/package/luci/Makefile
index fc0e468ea..39f08c4e9 100644
--- a/contrib/package/luci/Makefile
+++ b/contrib/package/luci/Makefile
@@ -132,6 +132,7 @@ define Package/luci-ff-halle
DEPENDS+= \
+luci-sgi-haserl +luci-app-splash \
+luci-app-ffwizard-leipzig \
+ +luci-theme-fledermaus \
+olsrd +olsrd-mod-dyn-gw +olsrd-mod-txtinfo +olsrd-mod-nameservice \
+kmod-tun +ip
TITLE:=Freifunk Halle Community Meta-Package
@@ -148,6 +149,7 @@ define Package/luci-ff-leipzig
DEPENDS+= \
+luci-sgi-haserl +luci-app-splash \
+luci-app-ffwizard-leipzig \
+ +luci-theme-fledermaus \
+olsrd +olsrd-mod-dyn-gw +olsrd-mod-txtinfo +olsrd-mod-nameservice \
+kmod-tun +ip
TITLE:=Freifunk Leipzig Community Meta-Package
@@ -163,6 +165,7 @@ define Package/luci-ff-hannover
$(call Package/luci/fftemplate)
DEPENDS+= \
+luci-sgi-haserl +luci-app-splash \
+ +luci-theme-fledermaus \
+olsrd +olsrd-mod-dyn-gw +olsrd-mod-txtinfo +olsrd-mod-nameservice
TITLE:=Freifunk Hannover Community Meta-Package
URL:=http://www.freifunk-hannover.de/
@@ -179,7 +182,7 @@ endef
define Package/luci-mod-admin-core
$(call Package/luci/webtemplate)
- DEPENDS+=+luci-web +luci-cbi +luci-theme-fledermaus
+ DEPENDS+=+luci-web +luci-cbi +luci-theme-openwrt
TITLE:=Administration module
endef
@@ -297,13 +300,22 @@ endef
### Templates ###
define Package/luci-theme-fledermaus
$(call Package/luci/thtemplate)
- TITLE:=Fledermaus (default)
+ TITLE:=Fledermaus (Freifunk theme)
endef
define Package/luci-theme-fledermaus/install
$(call Package/luci/install/template,$(1),themes/fledermaus)
endef
+define Package/luci-theme-openwrt
+ $(call Package/luci/thtemplate)
+ TITLE:=OpenWRT.org (default)
+endef
+
+define Package/luci-theme-openwrt/install
+ $(call Package/luci/install/template,$(1),themes/openwrt.org)
+endef
+
### Compile ###
ifneq ($(CONFIG_PACKAGE_luci-core),)
@@ -356,6 +368,9 @@ endif
ifneq ($(CONFIG_PACKAGE_luci-theme-fledermaus),)
PKG_SELECTED_MODULES+=themes/fledermaus
endif
+ifneq ($(CONFIG_PACKAGE_luci-theme-openwrt),)
+ PKG_SELECTED_MODULES+=themes/openwrt.org
+endif
$(eval $(call BuildPackage,luci-core))
@@ -378,3 +393,4 @@ $(eval $(call BuildPackage,luci-sgi-haserl))
$(eval $(call BuildPackage,luci-sgi-webuci))
$(eval $(call BuildPackage,luci-theme-fledermaus))
+$(eval $(call BuildPackage,luci-theme-openwrt))
diff --git a/i18n/english/luasrc/i18n/admin-core.en b/i18n/english/luasrc/i18n/admin-core.en
new file mode 100644
index 000000000..2e96bdb50
--- /dev/null
+++ b/i18n/english/luasrc/i18n/admin-core.en
@@ -0,0 +1,37 @@
+a_i_ui = "User Interface"
+
+c_lucidesc = [[LuCI is a free Lua library with integrated MVC-Webframework and webinterface for embedded devices,
+aspecially routers that run OpenWRT. Luci is licensed under the Apache-License.]]
+c_projecthome = "Project Homepage"
+c_leaddev = "Lead Development"
+c_contributors = "Contributing Developers"
+c_thanksto = "Thanks To"
+
+a_i_i_hello = "Hello!"
+a_i_i_admin1 = "This is the administration area of LuCI."
+a_i_i_admin2 = "LuCI is a free, flexible, and user friendly graphical interface for configuring OpenWRT Kamikaze."
+a_i_i_admin3 = "On the following pages you can adjust all important settings of your router."
+a_i_i_admin4 = "You will find a navigation leading to the different configuration pages on the left side."
+a_i_i_admin5 = [[As we are always want to improve this interface we are looking forward
+to your feedback and suggestions.]]
+a_i_i_admin6 = "And now have fun with your router!"
+a_i_i_team = "The LuCI Team"
+
+a_i_status1 = [[Here you can find information about the current system status like CPU clock frequency, memory
+usage or network interface data.]]
+a_i_status2 = [[Also kernel or service logfiles can be viewed here to get an overview over their current state.]]
+
+a_s_packages = "Software"
+a_s_changepw = "Admin Password"
+a_s_ipkg = "IPKG-Configuration"
+a_s_sshkeys = "SSH-Keys"
+a_s_fstab = "Mount Points"
+
+luci1 = "Here you can customize the settings and the functionality of LuCI."
+language = "Language"
+general = "General"
+ucicommit = "Post-commit actions"
+ucicommit1 = [[These commands will be executed automatically when a given UCI configuration is committed allowing
+changes to be applied instantly.]]
+keepflash = "Files to be kept when flashing a new firmware"
+keepflash1 = "When flashing a new firmware with LuCI these files will be added to the new firmware installation." \ No newline at end of file
diff --git a/i18n/english/luasrc/i18n/default.en b/i18n/english/luasrc/i18n/default.en
new file mode 100644
index 000000000..a387c5e1c
--- /dev/null
+++ b/i18n/english/luasrc/i18n/default.en
@@ -0,0 +1,27 @@
+about = "About"
+add = "Add"
+administration = "Administration"
+apply = "Apply"
+
+changes = "Changes"
+config = "Configuration"
+
+fwupgrade = "Firmware Upgrade"
+
+hostname = "Hostname"
+
+load = "Load"
+
+overview = "Overview"
+packagemanager = "Package Manager"
+path = "Path"
+
+reset = "Reset"
+revert = "Revert"
+
+save = "Save"
+statistics = "Statistics"
+syslog = "System Log"
+system = "System"
+
+webui = "Web UI" \ No newline at end of file
diff --git a/libs/web/luasrc/dispatcher.lua b/libs/web/luasrc/dispatcher.lua
index e769fd7b1..e9d3b24d1 100644
--- a/libs/web/luasrc/dispatcher.lua
+++ b/libs/web/luasrc/dispatcher.lua
@@ -128,9 +128,6 @@ function dispatch()
tpl.viewns.media = luci.config.main.mediaurlbase
tpl.viewns.resource = luci.config.main.resourcebase
- -- Load default translation
- require("luci.i18n").loadc("default")
-
if c and type(c.target) == "function" then
dispatched = c
@@ -224,10 +221,20 @@ function createtree()
end
require("luci.i18n")
+
+ -- Load default translation
+ luci.i18n.loadc("default")
+
+ local scope = _G
+ for k,v in pairs(_M) do
+ if type(v) == "function" then
+ scope[k] = v
+ end
+ end
for k, v in pairs(index) do
- luci.util.updfenv(v, _M)
- luci.util.extfenv(v, "_NAME", k)
+ scope._NAME = k
+ setfenv(v, scope)
local stat, err = pcall(v)
if not stat then
diff --git a/libs/web/root/etc/config/luci b/libs/web/root/etc/config/luci
index 701c93938..5fefe5b27 100644
--- a/libs/web/root/etc/config/luci
+++ b/libs/web/root/etc/config/luci
@@ -1,33 +1,33 @@
config core main
option lang de
- option mediaurlbase /luci-static/fledermaus
+ option mediaurlbase /luci-static/openwrt.org
option resourcebase /luci-static/resources
config core brand
- option title "OpenWRT Kamikaze"
- option subtitle Freifunkedition
- option firmware "OpenWRT Kamikaze"
- option distro "Freifunk Firmware 2.x"
+ option title "OpenWRT Kamikaze"
+ option subtitle "Lua Configuration Interface"
+ option firmware "OpenWRT Kamikaze"
+ option distro "Development Snapshot"
config extern flash_keep
- option uci "/etc/config"
+ option uci "/etc/config"
option dropbear "/etc/dropbear"
option openvpn "/etc/openvpn"
option passwd "/etc/passwd"
- option ipkg "/etc/ipkg.conf"
+ option ipkg "/etc/ipkg.conf"
option httpd "/etc/httpd.conf"
option firewall "/etc/firewall.user"
config event uci_oncommit
option network "/etc/init.d/network restart"
option wireless "/etc/init.d/network restart"
- option olsr "/sbin/reboot"
- option dhcp "/etc/init.d/dnsmasq restart"
+ option olsr "/etc/init.d/olsrd restart"
+ option dhcp "/etc/init.d/dnsmasq restart"
option luci_fw "/etc/init.d/luci_fw restart"
option dropbear "/etc/init.d/dropbear restart"
option httpd "/etc/init.d/httpd restart"
option fstab "/etc/init.d/fstab restart"
- option qos "/etc/init.d/qos restart"
+ option qos "/etc/init.d/qos restart"
option luci_splash "/etc/init.d/luci_splash restart"
option freifunk "/etc/init.d/luci_freifunk restart"
@@ -36,4 +36,5 @@ config internal languages
option en "English"
config internal themes
+ option OpenWRT "/luci-static/openwrt.org"
option Fledermaus "/luci-static/fledermaus"
diff --git a/modules/admin-core/luasrc/controller/admin/index.lua b/modules/admin-core/luasrc/controller/admin/index.lua
index 7ce7f1bdc..51f60bd83 100644
--- a/modules/admin-core/luasrc/controller/admin/index.lua
+++ b/modules/admin-core/luasrc/controller/admin/index.lua
@@ -1,26 +1,30 @@
module("luci.controller.admin.index", package.seeall)
function index()
+ luci.i18n.loadc("admin-core")
+ local i18n = luci.i18n.translate
+
local root = node()
if not root.target then
root.target = alias("admin")
end
- entry({"about"}, template("about"))
+ entry({"about"}, template("about")).i18n = "admin-core"
local page = node("admin")
page.target = alias("admin", "index")
- page.title = "Administration"
+ page.title = i18n("administration", "Administration")
page.order = 10
+ page.i18n = "admin-core"
local page = node("admin", "index")
page.target = template("admin_index/index")
- page.title = "Übersicht"
+ page.title = i18n("overview", "Übersicht")
page.order = 10
local page = node("admin", "index", "luci")
page.target = cbi("admin_index/luci")
- page.title = "Oberfläche"
+ page.title = i18n("a_i_ui", "Oberfläche")
end \ No newline at end of file
diff --git a/modules/admin-core/luasrc/controller/admin/status.lua b/modules/admin-core/luasrc/controller/admin/status.lua
index 79f728b99..223f54b29 100644
--- a/modules/admin-core/luasrc/controller/admin/status.lua
+++ b/modules/admin-core/luasrc/controller/admin/status.lua
@@ -1,8 +1,11 @@
module("luci.controller.admin.status", package.seeall)
function index()
- entry({"admin", "status"}, template("admin_status/index"), "Status", 20)
- entry({"admin", "status", "syslog"}, call("action_syslog"), "Systemprotokoll")
+ luci.i18n.loadc("admin-core")
+ local i18n = luci.i18n.translate
+
+ entry({"admin", "status"}, template("admin_status/index"), i18n("status", "Status"), 20)
+ entry({"admin", "status", "syslog"}, call("action_syslog"), i18n("syslog", "Systemprotokoll"))
end
function action_syslog()
diff --git a/modules/admin-core/luasrc/controller/admin/system.lua b/modules/admin-core/luasrc/controller/admin/system.lua
index a7c65872a..1bd52e943 100644
--- a/modules/admin-core/luasrc/controller/admin/system.lua
+++ b/modules/admin-core/luasrc/controller/admin/system.lua
@@ -8,14 +8,17 @@ require("luci.model.ipkg")
require("luci.model.uci")
function index()
- entry({"admin", "system"}, template("admin_system/index"), "System", 30)
- entry({"admin", "system", "packages"}, call("action_packages"), "Paketverwaltung", 10)
- entry({"admin", "system", "packages", "ipkg"}, call("action_ipkg"), "IPKG-Konfiguration")
- entry({"admin", "system", "passwd"}, call("action_passwd"), "Passwort ändern", 20)
- entry({"admin", "system", "sshkeys"}, call("action_sshkeys"), "SSH-Schlüssel", 30)
- entry({"admin", "system", "hostname"}, cbi("admin_system/hostname"), "Hostname", 40)
- entry({"admin", "system", "fstab"}, cbi("admin_system/fstab"), "Einhängepunkte", 50)
- entry({"admin", "system", "upgrade"}, call("action_upgrade"), "Firmwareupgrade", 60)
+ luci.i18n.loadc("admin-core")
+ local i18n = luci.i18n.translate
+
+ entry({"admin", "system"}, template("admin_system/index"), i18n("system", "System"), 30)
+ entry({"admin", "system", "packages"}, call("action_packages"), i18n("a_s_packages", "Paketverwaltung"), 10)
+ entry({"admin", "system", "packages", "ipkg"}, call("action_ipkg"), i18n("a_s_ipkg", "IPKG-Konfiguration"))
+ entry({"admin", "system", "passwd"}, call("action_passwd"), i18n("a_s_changepw", "Passwort ändern"), 20)
+ entry({"admin", "system", "sshkeys"}, call("action_sshkeys"), i18n("a_s_sshkeys", "SSH-Schlüssel"), 30)
+ entry({"admin", "system", "hostname"}, cbi("admin_system/hostname"), i18n("hostname", "Hostname"), 40)
+ entry({"admin", "system", "fstab"}, cbi("admin_system/fstab"), i18n("a_s_fstab", "Einhängepunkte"), 50)
+ entry({"admin", "system", "upgrade"}, call("action_upgrade"), i18n("fwupgrade", "Firmwareupgrade"), 60)
entry({"admin", "system", "reboot"}, call("action_reboot"), "Neu starten", 70)
end
diff --git a/modules/admin-core/luasrc/i18n/admin_index.en b/modules/admin-core/luasrc/i18n/admin_index.en
deleted file mode 100644
index 0831b59f0..000000000
--- a/modules/admin-core/luasrc/i18n/admin_index.en
+++ /dev/null
@@ -1,20 +0,0 @@
-luci = "User Interface"
-
-hello = "Hello!"
-admin1 = "This is the administration area of LuCI."
-admin2 = "LuCI is a free, flexible, and user friendly graphical interface for configuring OpenWRT Kamikaze."
-admin3 = "On the following pages you can adjust all important settings of your router."
-admin4 = "You will find a navigation leading to the different configuration pages on the left side."
-admin5 = [[As we are always want to improve this interface we are looking forward
-to your feedback and suggestions.]]
-admin6 = "And now have fun with your router!"
-team = "The LuCI Team"
-
-luci1 = "Here you can customize the settings and the functionality of LuCI."
-language = "Language"
-general = "General"
-ucicommit = "Post-commit actions"
-ucicommit1 = [[These commands will be executed automatically when a given UCI configuration is committed allowing
-changes to be applied instantly.]]
-keepflash = "Files to be kept when flashing a new firmware"
-keepflash1 = "When flashing a new firmware with LuCI these files will be added to the new firmware installation." \ No newline at end of file
diff --git a/modules/admin-core/luasrc/view/about.htm b/modules/admin-core/luasrc/view/about.htm
index 48a8674e0..c6dd1a101 100644
--- a/modules/admin-core/luasrc/view/about.htm
+++ b/modules/admin-core/luasrc/view/about.htm
@@ -1,25 +1,25 @@
<%+header%>
-<h1><%:about Über%> Luci</h1>
-<p><%:lucidesc Luci ist eine freie Lua-Bibliothek mit integriertem MVC-Webframework und Weboberfläche für eingebettete Geräte,
+<h1><%:about Über%> LuCI</h1>
+<p><%:c_lucidesc LuCI ist eine freie Lua-Bibliothek mit integriertem MVC-Webframework und Weboberfläche für eingebettete Geräte,
speziell Netzwerkrouter unter OpenWRT. Luci steht unter der Apache-Lizenz.%></p>
-<p><strong><%:projecthome Projekt-Homepage%>: </strong><a href="http://luci.freifunk-halle.net">luci.freifunk-halle.net</a></p>
+<p><strong><%:c_projecthome Projekt-Homepage%>: </strong><a href="http://luci.freifunk-halle.net">luci.freifunk-halle.net</a></p>
<br />
-<h2><%:leaddev Leitende Entwicklung%></h2>
+<h2><%:c_leaddev Leitende Entwicklung%></h2>
<ul style="font-weight: bold">
<li><a href="mailto:steven-at-midlink-dot-org">Steven "Cyrus" Barth</a> (OpenWRT, Freifunk Halle)</li>
<li><a href="mailto:xm-at-leipzig.freifunk-dot-net">Jo-Philipp "Jow" Wich</a> (Freifunk Leipzig)</li>
</ul>
<br />
-<h2><%:contributors Mitwirkende Entwickler%></h2>
+<h2><%:c_contributors Mitwirkende Entwickler%></h2>
<ul style="font-weight: bold">
<li><a href="mailto:nbd-at-openwrt-dot-org">Felix "nbd" Fietkau</a> (OpenWRT)</li>
</ul>
<br />
-<h2><%:thanksto Dank an%></h2>
+<h2><%:c_thanksto Dank an%></h2>
<ul style="font-weight: bold">
<li><a href="http://www.computerhilfe-halle.de">Mono</a> (Computerhilfe-Halle.de)</li>
<li><a href="mailto:mickey-at-netfreaks-dot-org">Mickey Knox</a> (Freifunk Hannover)</li>
diff --git a/modules/admin-core/luasrc/view/admin_index/index.htm b/modules/admin-core/luasrc/view/admin_index/index.htm
index 8bcf59746..0623eddae 100644
--- a/modules/admin-core/luasrc/view/admin_index/index.htm
+++ b/modules/admin-core/luasrc/view/admin_index/index.htm
@@ -1,11 +1,11 @@
<%+header%>
-<h1><%:hello Hallo!%></h1>
-<p><%:admin1 Dies ist der Administrationsbereich von LuCI.%></p>
-<p><%:admin2 LuCI ist eine freie, flexible und benutzerfreundliche grafische Oberfläche zur Konfiguration von OpenWRT Kamikaze.%><br />
-<%:admin3 Auf den folgenden Seiten können alle wichtigen Einstellungen des Routers vorgenommen werden.%></p>
-<p><%:admin4 Auf der linken Seite befindet sich eine Navigation, die zu den einzelnen Konfigurationsseiten führt.%></p>
-<p><%:admin5 Wir sind natürlich stets darum bemüht, diese Oberfläche
+<h1><%:a_i_i_hello Hallo!%></h1>
+<p><%:a_i_i_admin1 Dies ist der Administrationsbereich von LuCI.%></p>
+<p><%:a_i_i_admin2 LuCI ist eine freie, flexible und benutzerfreundliche grafische Oberfläche zur Konfiguration von OpenWRT Kamikaze.%><br />
+<%:a_i_i_admin3 Auf den folgenden Seiten können alle wichtigen Einstellungen des Routers vorgenommen werden.%></p>
+<p><%:a_i_i_admin4 Auf der linken Seite befindet sich eine Navigation, die zu den einzelnen Konfigurationsseiten führt.%></p>
+<p><%:a_i_i_admin5 Wir sind natürlich stets darum bemüht, diese Oberfläche
noch besser und intuitiver zu Gestalten und freuen uns über jegliche Art von Feedback oder Verbesserungsvorschlägen.%></p>
-<p><%:admin6 Und nun wünschen wir viel Spaß mit dem Router!%></p>
-<p><em><strong><a href="<%=controller%>/about"><%:team Das LuCI-Team%></a></strong></em></p>
+<p><%:a_i_i_admin6 Und nun wünschen wir viel Spaß mit dem Router!%></p>
+<p><em><strong><a href="<%=controller%>/about"><%:a_i_i_team Das LuCI-Team%></a></strong></em></p>
<%+footer%> \ No newline at end of file
diff --git a/modules/admin-core/luasrc/view/admin_status/index.htm b/modules/admin-core/luasrc/view/admin_status/index.htm
index 984093693..849a7a67e 100644
--- a/modules/admin-core/luasrc/view/admin_status/index.htm
+++ b/modules/admin-core/luasrc/view/admin_status/index.htm
@@ -1,7 +1,7 @@
<%+header%>
<h1><%:status Status%></h1>
-<p><%:status1 Hier finden sich Informationen über den aktuellen Status des Systems, beispielsweise
+<p><%:a_i_status1 Hier finden sich Informationen über den aktuellen Status des Systems, beispielsweise
Prozessortakt, Speicherauslastung und Netzwerkschnittstellen.%></p>
-<p><%:status2 Zusätzlich können hier Protokolldaten, des Kernels und diverser Systemdienste eingesehen werden,
+<p><%:a_i_status2 Zusätzlich können hier Protokolldaten, des Kernels und diverser Systemdienste eingesehen werden,
um deren Zustand zu kontrollieren.%></p>
<%+footer%> \ No newline at end of file
diff --git a/themes/fledermaus/luasrc/view/themes/fledermaus/header.htm b/themes/fledermaus/luasrc/view/themes/fledermaus/header.htm
index 5f876781f..99bd39924 100644
--- a/themes/fledermaus/luasrc/view/themes/fledermaus/header.htm
+++ b/themes/fledermaus/luasrc/view/themes/fledermaus/header.htm
@@ -1,7 +1,6 @@
<%
require("luci.sys")
local load1, load5, load15 = luci.sys.loadavg()
-
local request = require("luci.dispatcher").request
local category = request[1]
local tree = luci.dispatcher.node()
@@ -27,7 +26,7 @@ require("luci.http").prepare_content("text/html")
<% if node and node.css then %><link rel="stylesheet" type="text/css" href="<%=resource%>/<%=node.css%>" /><% end %>
<meta http-equiv="content-type" content="text/xhtml+xml; charset=utf-8" />
<meta http-equiv="content-script-type" content="text/javascript" />
- <title>LuCI - Lua Configuration Interface</title>
+ <title>LuCI - Lua Configuration Interface - <%=node.title%></title>
</head>
<body>
<div id="header">
@@ -104,7 +103,7 @@ end
%>
</div>
<div class="sidebar right">
- <div><%:webif Weboberfläche%>
+ <div><%:webui Weboberfläche%>
<ul><%
for k,node in pairs(tree.nodes) do
if node.title then %>
diff --git a/themes/openwrt.org/Makefile b/themes/openwrt.org/Makefile
new file mode 100644
index 000000000..81a96f6a8
--- /dev/null
+++ b/themes/openwrt.org/Makefile
@@ -0,0 +1,2 @@
+include ../../build/config.mk
+include ../../build/module.mk \ No newline at end of file
diff --git a/themes/openwrt.org/luasrc/view/themes/openwrt.org/footer.htm b/themes/openwrt.org/luasrc/view/themes/openwrt.org/footer.htm
new file mode 100644
index 000000000..6fc2f6089
--- /dev/null
+++ b/themes/openwrt.org/luasrc/view/themes/openwrt.org/footer.htm
@@ -0,0 +1,8 @@
+ </div>
+ <div class="clear"></div>
+</div></div>
+</div>
+
+<div class="separator black whitetext bold"><a href="<%=controller%>/about"><%=require("luci").__appname__ .. " " .. luci.__version__%> - Lua Configuration Interface</a></div>
+</body>
+</html> \ No newline at end of file
diff --git a/themes/openwrt.org/luasrc/view/themes/openwrt.org/header.htm b/themes/openwrt.org/luasrc/view/themes/openwrt.org/header.htm
new file mode 100644
index 000000000..2ab67ecf4
--- /dev/null
+++ b/themes/openwrt.org/luasrc/view/themes/openwrt.org/header.htm
@@ -0,0 +1,136 @@
+<%
+require("luci.sys")
+local load1, load5, load15 = luci.sys.loadavg()
+local request = require("luci.dispatcher").request
+local category = request[1]
+local tree = luci.dispatcher.node()
+local cattree = category and luci.dispatcher.node(category)
+local node = luci.dispatcher.dispatched
+
+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.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.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 %>
+ <meta http-equiv="content-type" content="text/xhtml+xml; charset=utf-8" />
+ <meta http-equiv="content-script-type" content="text/javascript" />
+ <title>LuCI - Lua Configuration Interface - <%=node.title%></title>
+</head>
+<body>
+<div id="header">
+ <div class="whitetext smalltext bold right">
+ <%=luci.config.brand.firmware%><br />
+ <%=luci.config.brand.distro%><br />
+ <%:load Last%>: <%=load1%> <%=load5%> <%=load15%><br />
+ <%:hostname Hostname%>: <%=luci.sys.hostname()%>
+ </div>
+ <div>
+ <span class="headertitle"><%=luci.config.brand.title%></span><br />
+ <span class="whitetext bold"><%=luci.config.brand.subtitle%></span>
+ </div>
+</div>
+
+<div class="separator black whitetext bold">
+<%:path Pfad%>: <%
+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 %>&#187; <% end
+ end
+end
+%>
+</div>
+
+<div id="page">
+<div id="columns"><div id="columnswrapper">
+ <div class="sidebar left">
+<%
+local function submenu(prefix, node)
+ if not node._menu_selected or not node.nodes then
+ return false
+ end
+ local index = {}
+ for k, n in pairs(node.nodes) do
+ table.insert(index, {name=k, order=n.order or 100})
+ end
+
+ table.sort(index, function(a, b) return a.order < b.order end)
+%>
+ <ul>
+ <% for j, v in pairs(index) do
+ local nnode = node.nodes[v.name]%>
+ <li>
+ <span<% if nnode._menu_selected then %> class="blacktext"<%end%>><a href="<%=controller .. prefix .. v.name%>"><%=nnode.title%></a></span>
+ <% submenu(prefix .. v.name .. "/", nnode) %>
+ </li>
+ <% end %>
+ </ul>
+<%
+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 then %>
+ <div<% if node._menu_selected then %> class="blacktext"<%end%>><a href="<%=controller%>/<%=category%>/<%=k.name%>"><%=node.title%></a>
+ <%submenu("/" .. category .. "/" .. k.name .. "/", node)%>
+ </div>
+<% end
+ end
+end
+%>
+ </div>
+ <div class="sidebar right">
+ <div><%:webui Weboberfläche%>
+ <ul><%
+ for k,node in pairs(tree.nodes) do
+ if node.title then %>
+ <li<% if request[1] == k then %> class="blacktext"<%end%>><a href="<%=controller%>/<%=k%>"><%=node.title%></a></li>
+<% end
+ end%>
+ </ul>
+ </div>
+ <%
+ if "admin" == request[1] then
+ require("luci.model.uci")
+ local ucic = luci.model.uci.changes()
+ if ucic then
+ ucic = #luci.util.split(ucic)
+ end
+ %>
+ <div><%:config Konfiguration%>
+ <ul>
+ <% if ucic then %>
+ <li><a href="<%=controller%>/admin/uci/changes"><%:changes Änderungen%>: <%=ucic%></a></li>
+ <li><a href="<%=controller%>/admin/uci/apply"><%:apply Anwenden%></a></li>
+ <li><a href="<%=controller%>/admin/uci/revert"><%:revert Verwerfen%></a></li>
+ <% else %>
+ <li><%:changes Änderungen%>: 0</li>
+ <% end %>
+ </ul>
+ </div>
+ <% end %>
+ </div>
+ <div id="content"> \ No newline at end of file
diff --git a/themes/openwrt.org/root/www/luci-static/openwrt.org/cascade.css b/themes/openwrt.org/root/www/luci-static/openwrt.org/cascade.css
new file mode 100644
index 000000000..6469b8f23
--- /dev/null
+++ b/themes/openwrt.org/root/www/luci-static/openwrt.org/cascade.css
@@ -0,0 +1,298 @@
+@charset "utf-8";
+
+body {
+ font-family: Verdana, Arial, sans-serif;
+ background-color: #557788;
+}
+
+h1 {
+ margin: 0%;
+ font-size: 1.4em;
+ font-weight: bold;
+ margin-bottom: 0.5em;
+}
+
+h2 {
+ margin: 0%;
+ font-size: 1.2em;
+ font-weight: bold;
+}
+
+h3 {
+ margin: 0%;
+}
+
+#page {
+ background-color: #d4dce0;
+ border-left: 3px solid #000000;
+ border-right: 3px solid #000000;
+}
+
+#header {
+ padding: 0.2em;
+ height: 4.5em;
+ padding-left: 1.2em;
+}
+
+#columns {
+ border-left: 10.1em solid #ccd6db;
+ border-right: 10.1em solid #ccd6db;
+ display: block;
+ padding: 0.1em;
+}
+
+#columnswrapper {
+ display: block;
+ margin-left: -10em;
+ margin-right: -10em;
+}
+
+#content {
+ margin-left: 14em;
+ margin-right: 14em;
+ display: block;
+ position: relative;
+ padding: 2px;
+ font-size: 0.8em;
+}
+
+.headerlogo {
+ height: 4em;
+ padding: 5px;
+}
+
+.headerlogo img {
+ height: 100%;
+}
+
+.headertitle {
+ font-size: 2.4em;
+ color: black;
+ font-weight: bold;
+ letter-spacing: 0.6em;
+ text-transform: lowercase;
+}
+
+.separator {
+ padding-left: 0.25em;
+ font-weight: bold;
+ font-size: 0.8em;
+ line-height: 1.4em;
+}
+
+.whitetext {
+ color: white;
+}
+
+.blacktext {
+ color: #000000;
+}
+
+.magentatext {
+ color: #dc0065;
+}
+
+.inheritcolor {
+ color: inherit;
+}
+
+.smalltext {
+ font-size: 0.8em;
+}
+
+.black {
+ background-color: #000000;
+}
+
+.nodeco {
+ text-decoration: none;
+}
+
+.redhover:hover {
+ color: red;
+}
+
+.bold {
+ font-weight: bold;
+}
+
+.sidebar {
+ position: relative;
+ padding: 0.25em;
+ color: gray;
+ width: 9em;
+ font-weight: bold;
+}
+
+.separator a, .sidebar a {
+ color: inherit;
+ text-decoration: inherit;
+}
+
+.separator a:hover, .sidebar a:hover {
+ color: red;
+}
+
+.sidebar div {
+ padding-bottom: 0.5em;
+}
+
+.sidebar ul {
+ font-size: 0.8em;
+ color: white;
+ list-style-type: none;
+ padding-left: 1em;
+ margin-top: 0%;
+}
+
+.table {
+ display: table;
+}
+
+.table-row {
+ display: table-row;
+}
+
+.table-cell {
+ display: table-cell;
+}
+
+.left {
+ float: left;
+ text-align: left;
+}
+
+.right {
+ float: right;
+ text-align: right;
+}
+
+.clear {
+ clear: both;
+}
+
+.hidden {
+ display: none;
+}
+
+.inline {
+ display: inline;
+}
+
+.code {
+ background: #f7f7f7;
+ border: 1px solid #d7d7d7;
+ margin: 1em 1.75em;
+ padding: 1em;
+}
+
+code {
+ display: block;
+ background: #f7f7f7;
+ border: 1px solid #d7d7d7;
+ margin: 1em 1.75em;
+ padding: 1em;
+ overflow: auto;
+ white-space: pre;
+}
+
+.cbi-section {
+ margin-top: 1em;
+}
+
+.cbi-section-remove {
+ text-align: right;
+}
+
+.cbi-value {
+ display: table-row;
+}
+
+.cbi-value-title {
+ display: table-cell;
+ line-height: 1.75em;
+ font-weight: bold;
+ padding: 0.25em;
+}
+
+.cbi-value-field {
+ display: table-cell;
+ text-align: left;
+ padding: 0.25em;
+ line-height: 1.75em;
+}
+
+.cbi-value-field input, .cbi-value-field select,
+.cbi-optionals select, .cbi-optionals input,
+.cbi-section-remove input, .cbi-section-create input {
+ font-size: 0.8em;
+ margin: 0%;
+}
+
+.cbi-section-descr {
+ padding-bottom: 1em;
+}
+
+.cbi-value-description {
+ display: inline;
+ font-style: italic;
+ font-size: 0.8em;
+ padding: 0.25em;
+ margin-bottom: 0.5em;
+}
+
+.cbi-form-separator {
+ margin-top: 1em;
+}
+
+.cbi-section-node {
+ display: table;
+ padding: 0.25em;
+ border: 1px solid #000000;
+}
+
+.cbi-section-row {
+ display: table-row;
+}
+
+.cbi-section-row-head {
+ display: table-cell;
+ font-weight: bold;
+ padding: 0.25em;
+}
+
+.cbi-section-row-descr {
+ display: table-cell;
+ padding: 0.25em;
+ font-size: 0.8em;
+}
+
+.cbi-section-node h3 {
+ margin-bottom: 0.5em;
+}
+
+.cbi-error {
+ color: red;
+ font-weight: bold;
+ font-size: 0.8em;
+ margin-bottom: 0.75em;
+}
+
+.cbi-optionals {
+ margin-top: 1em;
+ display: table-cell;
+}
+
+.cbi-optionals option {
+ font-size: 0.8em;
+}
+
+.error {
+ color: red;
+ font-weight: bold;
+}
+
+.ok {
+ color: green;
+ font-weight: bold;
+} \ No newline at end of file