* Core translation part 1
authorSteven Barth <steven@midlink.org>
Sat, 31 May 2008 08:04:49 +0000 (08:04 +0000)
committerSteven Barth <steven@midlink.org>
Sat, 31 May 2008 08:04:49 +0000 (08:04 +0000)
* Introduced new default theme "OpenWRT.org"
* Minor tweaks

17 files changed:
contrib/package/luci/Makefile
i18n/english/luasrc/i18n/admin-core.en [new file with mode: 0644]
i18n/english/luasrc/i18n/default.en [new file with mode: 0644]
libs/web/luasrc/dispatcher.lua
libs/web/root/etc/config/luci
modules/admin-core/luasrc/controller/admin/index.lua
modules/admin-core/luasrc/controller/admin/status.lua
modules/admin-core/luasrc/controller/admin/system.lua
modules/admin-core/luasrc/i18n/admin_index.en [deleted file]
modules/admin-core/luasrc/view/about.htm
modules/admin-core/luasrc/view/admin_index/index.htm
modules/admin-core/luasrc/view/admin_status/index.htm
themes/fledermaus/luasrc/view/themes/fledermaus/header.htm
themes/openwrt.org/Makefile [new file with mode: 0644]
themes/openwrt.org/luasrc/view/themes/openwrt.org/footer.htm [new file with mode: 0644]
themes/openwrt.org/luasrc/view/themes/openwrt.org/header.htm [new file with mode: 0644]
themes/openwrt.org/root/www/luci-static/openwrt.org/cascade.css [new file with mode: 0644]

index fc0e468eaec47c6a0dd2a1742eb4b5a8cb0e8dcb..39f08c4e9cb6115a97a58389fb43476c90c97b46 100644 (file)
@@ -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 (file)
index 0000000..2e96bdb
--- /dev/null
@@ -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 (file)
index 0000000..a387c5e
--- /dev/null
@@ -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
index e769fd7b1b4aa315263d69b57c716b855c98e604..e9d3b24d1b8094ac691ff63b164996a12d8bfd3f 100644 (file)
@@ -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
index 701c9393867e5f0f636443adcaad829bc0871c1e..5fefe5b273186564e1674b86b0f152da4b52a2e4 100644 (file)
@@ -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"
index 7ce7f1bdc506c3ff7ae580a32946295ad51c6668..51f60bd83c2b77a6ab9aef6a033cee79472227a4 100644 (file)
@@ -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
index 79f728b99dd3887efbdafc17853d15a8c0d48a79..223f54b2953c7d5019e995e997176baaec30cccc 100644 (file)
@@ -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()
index a7c65872afcc580588d5b2995eda9cf12252341b..1bd52e943d8ccbaddaa7a6edcd6e38c399e64168 100644 (file)
@@ -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 (file)
index 0831b59..0000000
+++ /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
index 48a8674e002420833fb955b6f7668afc62a7dd5c..c6dd1a10155d63d80220dceeba4dcddd5497e3e5 100644 (file)
@@ -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>
index 8bcf59746ec309cdc1e9374ecefb7aa6cbba66a2..0623eddae048fe30ea0c8fd2c9ebfb73ec09dd3a 100644 (file)
@@ -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
index 984093693dcbc923a0d0200ac34dccfde838a2b1..849a7a67e0dc7a5d22d46a1c70723ece085e3767 100644 (file)
@@ -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
index 5f876781f6f339609aabd0f30e8ad070d4566fb8..99bd39924882b1bf0d440e5de22bca5677a40430 100644 (file)
@@ -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 (file)
index 0000000..81a96f6
--- /dev/null
@@ -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 (file)
index 0000000..6fc2f60
--- /dev/null
@@ -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 (file)
index 0000000..2ab67ec
--- /dev/null
@@ -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 (file)
index 0000000..6469b8f
--- /dev/null
@@ -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