Merge pull request #501 from LuttyYang/master
authorJo-Philipp Wich <jow@openwrt.org>
Mon, 5 Oct 2015 18:29:41 +0000 (20:29 +0200)
committerJo-Philipp Wich <jow@openwrt.org>
Mon, 5 Oct 2015 18:29:41 +0000 (20:29 +0200)
luci-theme-material: PR from version 0.2.6

65 files changed:
CONTRIBUTING.md
applications/luci-app-asterisk/Makefile
applications/luci-app-dump1090/luasrc/model/cbi/dump1090.lua
applications/luci-app-firewall/luasrc/model/cbi/firewall/zone-details.lua
applications/luci-app-firewall/po/pl/firewall.po
applications/luci-app-multiwan/po/es/multiwan.po
applications/luci-app-statistics/luasrc/controller/luci_statistics/luci_statistics.lua
applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/openvpn.lua [new file with mode: 0644]
applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/sensors.lua [new file with mode: 0644]
applications/luci-app-statistics/luasrc/statistics/i18n.lua
applications/luci-app-statistics/luasrc/statistics/rrdtool.lua
applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/interface.lua
applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/netlink.lua
applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/nut.lua
applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/openvpn.lua [new file with mode: 0644]
applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/sensors.lua [new file with mode: 0644]
applications/luci-app-statistics/root/etc/config/luci_statistics
applications/luci-app-statistics/root/usr/bin/stat-genconfig
documentation/SubmitPatchesHowTo:.md [deleted file]
modules/luci-base/htdocs/luci-static/resources/icons/bridge.png
modules/luci-base/htdocs/luci-static/resources/icons/bridge_disabled.png
modules/luci-base/htdocs/luci-static/resources/icons/encryption.png
modules/luci-base/htdocs/luci-static/resources/icons/encryption_disabled.png
modules/luci-base/htdocs/luci-static/resources/icons/ethernet.png
modules/luci-base/htdocs/luci-static/resources/icons/ethernet_disabled.png
modules/luci-base/htdocs/luci-static/resources/icons/port_down.png
modules/luci-base/htdocs/luci-static/resources/icons/port_up.png
modules/luci-base/htdocs/luci-static/resources/icons/signal-0-25.png
modules/luci-base/htdocs/luci-static/resources/icons/signal-0.png
modules/luci-base/htdocs/luci-static/resources/icons/signal-25-50.png
modules/luci-base/htdocs/luci-static/resources/icons/signal-50-75.png
modules/luci-base/htdocs/luci-static/resources/icons/signal-75-100.png
modules/luci-base/htdocs/luci-static/resources/icons/signal-none.png
modules/luci-base/htdocs/luci-static/resources/icons/switch.png
modules/luci-base/htdocs/luci-static/resources/icons/switch_disabled.png
modules/luci-base/htdocs/luci-static/resources/icons/tunnel.png
modules/luci-base/htdocs/luci-static/resources/icons/tunnel_disabled.png
modules/luci-base/htdocs/luci-static/resources/icons/vlan.png
modules/luci-base/htdocs/luci-static/resources/icons/vlan_disabled.png
modules/luci-base/htdocs/luci-static/resources/icons/wifi.png
modules/luci-base/htdocs/luci-static/resources/icons/wifi_big.png
modules/luci-base/htdocs/luci-static/resources/icons/wifi_big_disabled.png
modules/luci-base/htdocs/luci-static/resources/icons/wifi_disabled.png
modules/luci-base/po/pl/base.po
modules/luci-base/root/etc/config/luci
modules/luci-base/root/www/index.html
modules/luci-mod-admin-full/luasrc/model/cbi/admin_network/dhcp.lua
modules/luci-mod-admin-full/luasrc/model/cbi/admin_system/ipkg.lua
modules/luci-mod-admin-full/luasrc/view/admin_status/index.htm
modules/luci-mod-failsafe/luasrc/controller/failsafe/failsafe.lua
modules/luci-mod-rpc/luasrc/controller/rpc.lua
protocols/luci-proto-ipv6/luasrc/model/cbi/admin_network/proto_map.lua
themes/luci-theme-freifunk-bno/Makefile [deleted file]
themes/luci-theme-freifunk-bno/htdocs/luci-static/freifunk-bno/cascade.css [deleted file]
themes/luci-theme-freifunk-bno/htdocs/luci-static/freifunk-bno/images/bgoption.png [deleted file]
themes/luci-theme-freifunk-bno/htdocs/luci-static/freifunk-bno/images/favicon.ico [deleted file]
themes/luci-theme-freifunk-bno/htdocs/luci-static/freifunk-bno/images/header-back.gif [deleted file]
themes/luci-theme-freifunk-bno/htdocs/luci-static/freifunk-bno/images/header-left.gif [deleted file]
themes/luci-theme-freifunk-bno/htdocs/luci-static/freifunk-bno/images/header-right.gif [deleted file]
themes/luci-theme-freifunk-bno/htdocs/luci-static/freifunk-bno/images/logo.gif [deleted file]
themes/luci-theme-freifunk-bno/htdocs/luci-static/freifunk-bno/images/main-back.png [deleted file]
themes/luci-theme-freifunk-bno/htdocs/luci-static/freifunk-bno/images/schriftzug.gif [deleted file]
themes/luci-theme-freifunk-bno/luasrc/view/themes/freifunk-bno/footer.htm [deleted file]
themes/luci-theme-freifunk-bno/luasrc/view/themes/freifunk-bno/header.htm [deleted file]
themes/luci-theme-freifunk-bno/root/etc/uci-defaults/luci-theme-freifunk-bno [deleted file]

index 7c42913..a392ade 100644 (file)
@@ -1,16 +1,16 @@
 # Contributing Guidelines
 
-Patches and pull-requests:
+## Patches and Pull requests:
 
 If you want to contribute a change to LuCI, please either send a patch using git send-email
-or open a pull request against the openwrt/luci repository.
+or open a "pull request" against the openwrt/luci repository.
 
 Regardless of whether you send a patch or open a pull request, please try to follow these rules:
 
-* Have a useful subject prefixed with the component name  
-    (E.g.: "modules/admin-full: fix wifi channel selection on multiple STA networks")
+* Have a useful subject prefixed with the component name
+    (E.g.: "luci-mod-admin-full: fix wifi channel selection on multiple STA networks")
 * Shortly explain the changes made and - if applicable - the reasoning behind them
-* Include Signed-off-by in the comment  
+* Include Signed-off-by in the comment
     (See <https://dev.openwrt.org/wiki/SubmittingPatches#a10.Signyourwork>)
        
 In case you like to send patches by mail, please use the [LuCI mailinglist](https://lists.subsignal.org/mailman/listinfo/luci)
@@ -19,22 +19,41 @@ or the [OpenWrt Development List](https://lists.openwrt.org/cgi-bin/mailman/list
 If you send via the OpenWrt list, include a "[luci]" tag in your subject line.
 For general information on patch submission, follow the [OpenWrt patch submission guideline](https://dev.openwrt.org/wiki/SubmittingPatches).
 
+## Advice on pull requests:
 
-If you have commit access:
+Pull requests are the easiest way to contribute changes to git repos at Github. They are the preferred contribution method, as they offer a nice way for commenting and amending the proposed changes.
+
+* You need a local "fork" of the Github repo.
+* Use a "feature branch" for your changes. That separates the changes in the pull request from your other changes and makes it easy to edit/amend commits in the pull request. Workflow using "feature_x" as the example:
+  - Update your local git fork to the tip (of the master, usually)
+  - Create the feature branch with `git checkout -b feature_x`
+  - Edit changes and commit them locally
+  - Push them to your Github fork by `git push -u origin feature_x`. That creates the "feature_x" branch at your Github fork and sets it as the remote of this branch
+  - When you now visit Github, you should see a proposal to create a pull request
+
+* If you later need to add new commits to the pull request, you can simply commit the changes to the local branch and then use `git push` to automatically update the pull request.
+
+* If you need to change something in the existing pull request (e.g. to add a missing signed-off-by line to the commit message), you can use `git push -f` to overwrite the original commits. That is easy and safe when using a feature branch. Example workflow:
+  - Checkout the feature branch by `git checkout feature_x`
+  - Edit changes and commit them locally. If you are just updating the commit message in the last commit, you can use `git commit --amend` to do that
+  - If you added several new commits or made other changes that require cleaning up, you can use `git rebase -i HEAD~X` (X = number of commits to edit) to possibly squash some commits
+  - Push the changed commits to Github with `git push -f` to overwrite the original commits in the "feature_x" branch with the new ones. The pull request gets automatically updated
+
+## If you have commit access:
 
 * Do NOT use git push --force.
 * Use Pull Requests if you are unsure and to suggest changes to other developers.
 
-Gaining commit access:
+## Gaining commit access:
 
 * Commit access will be granted to responsible contributors who have made
   useful pull requests and / or feedback or patches to this repository or
   OpenWrt in general. Please include your request for commit access in your
   next pull request or ticket.
 
-Release Branches:
+## Release Branches:
 
-* Branches named "luci-X.Y" (e.g. luci-0.12) are release branches.
+* Branches named "for-XX.YY" or "luci-X.Y" (e.g. "for-15.05") are release branches.
 * These branches are built with the respective OpenWrt release and are created
   during the release stabilisation phase.
 * Please ONLY cherry-pick or commit security and bug-fixes to these branches.
index f2f3cd1..3434e16 100644 (file)
@@ -7,7 +7,6 @@
 include $(TOPDIR)/rules.mk
 
 LUCI_TITLE:=LuCI Support for Asterisk
-LUCI_DEPENDS:=+ahcpd
 
 include ../../luci.mk
 
index 6015ffe..8559c52 100644 (file)
@@ -1,4 +1,4 @@
--- Copyright 2014 Álvaro Fernández Rojas <noltari@gmail.com>
+-- Copyright 2014-2015 Álvaro Fernández Rojas <noltari@gmail.com>
 -- Licensed to the public under the Apache License 2.0.
 
 m = Map("dump1090", "dump1090", translate("dump1090 is a Mode S decoder specifically designed for RTLSDR devices, here you can configure the settings."))
@@ -12,6 +12,7 @@ enable.enabled="0"
 enable.disabled="1"
 enable.default = "1"
 enable.rmempty = false
+
 respawn=s:option(Flag, "respawn", translate("Respawn"))
 respawn.default = false
 
@@ -34,6 +35,15 @@ ifile=s:option(Value, "ifile", translate("Data file"))
 ifile.rmempty = true
 ifile.datatype = "file"
 
+iformat=s:option(ListValue, "iformat", translate("Sample format for data file"))
+iformat:value("", translate("Default"))
+iformat:value("UC8")
+iformat:value("SC16")
+iformat:value("SC16Q11")
+
+throttle=s:option(Flag, "throttle", translate("When reading from a file play back in realtime, not at max speed"))
+throttle.default = false
+
 raw=s:option(Flag, "raw", translate("Show only messages hex values"))
 raw.default = false
 
@@ -76,13 +86,17 @@ net_bo_port=s:option(Value, "net_bo_port", translate("TCP Beast output listen po
 net_bo_port.rmempty = true
 net_bo_port.datatype = "port"
 
+net_fatsv_port=s:option(Value, "net_fatsv_port", translate("FlightAware TSV output port"))
+net_fatsv_port.rmempty = true
+net_fatsv_port.datatype = "port"
+
 net_ro_size=s:option(Value, "net_ro_size", translate("TCP raw output minimum size"))
 net_ro_size.rmempty = true
 net_ro_size.datatype = "uinteger"
 
-net_ro_rate=s:option(Value, "net_ro_rate", translate("TCP raw output memory flush rate"))
-net_ro_rate.rmempty = true
-net_ro_rate.datatype = "uinteger"
+net_ro_interval=s:option(Value, "net_ro_interval", translate("TCP raw output memory flush rate in seconds"))
+net_ro_interval.rmempty = true
+net_ro_interval.datatype = "uinteger"
 
 net_heartbeat=s:option(Value, "net_heartbeat", translate("TCP heartbeat rate in seconds"))
 net_heartbeat.rmempty = true
@@ -92,6 +106,12 @@ net_buffer=s:option(Value, "net_buffer", translate("TCP buffer size 64Kb * (2^n)
 net_buffer.rmempty = true
 net_buffer.datatype = "uinteger"
 
+net_verbatim=s:option(Flag, "net_verbatim", translate("Do not apply CRC corrections to messages we forward"))
+net_verbatim.default = false
+
+forward_mlat=s:option(Flag, "forward_mlat", translate("Allow forwarding of received mlat results to output ports"))
+forward_mlat.default = false
+
 lat=s:option(Value, "lat", translate("Reference/receiver latitude for surface posn"))
 lat.rmempty = true
 lat.datatype = "integer"
@@ -100,6 +120,10 @@ lon=s:option(Value, "lon", translate("Reference/receiver longitude for surface p
 lon.rmempty = true
 lon.datatype = "integer"
 
+max_range=s:option(Value, "max_range", translate("Absolute maximum range for position decoding"))
+max_range.rmempty = true
+max_range.datatype = "uinteger"
+
 fix=s:option(Flag, "fix", translate("Enable single-bits error correction using CRC"))
 fix.default = false
 
@@ -121,6 +145,9 @@ mlat.default = false
 stats=s:option(Flag, "stats", translate("Print stats at exit"))
 stats.default = false
 
+stats_range=s:option(Flag, "stats_range", translate("Collect/show range histogram"))
+stats_range.default = false
+
 stats_every=s:option(Value, "stats_every", translate("Show and reset stats every seconds"))
 stats_every.rmempty = true
 stats_every.datatype = "uinteger"
@@ -131,15 +158,42 @@ onlyaddr.default = false
 metric=s:option(Flag, "metric", translate("Use metric units"))
 metric.default = false
 
-snip=s:option(Flag, "snip", translate("Strip IQ file removing samples"))
+snip=s:option(Value, "snip", translate("Strip IQ file removing samples"))
 snip.rmempty = true
 snip.datatype = "uinteger"
 
-debug_mode=s:option(Flag, "debug", translate("Debug mode flags"))
+debug_mode=s:option(Value, "debug", translate("Debug mode flags"))
 debug_mode.rmempty = true
 
-ppm=s:option(Flag, "ppm", translate("Set receiver error in parts per million"))
+ppm=s:option(Value, "ppm", translate("Set receiver error in parts per million"))
 ppm.rmempty = true
 ppm.datatype = "uinteger"
 
+html_dir=s:option(Value, "html_dir", translate("Base directory for the internal HTTP server"))
+html_dir.rmempty = true
+html_dir.datatype = "directory"
+
+write_json=s:option(Value, "write_json", translate("Periodically write json output to a directory"))
+write_json.rmempty = true
+write_json.datatype = "directory"
+
+write_json_every=s:option(Flag, "write_json_every", translate("Write json output every t seconds"))
+write_json_every.rmempty = true
+write_json_every.datatype = "uinteger"
+
+json_location_accuracy=s:option(ListValue, "json_location_accuracy", translate("Accuracy of receiver location in json metadata"))
+json_location_accuracy:value("", translate("Default"))
+json_location_accuracy:value("0", "No location")
+json_location_accuracy:value("1", "Approximate")
+json_location_accuracy:value("2", "Exact")
+
+oversample=s:option(Flag, "oversample", translate("Use the 2.4MHz demodulator"))
+oversample.default = false
+
+dcfilter=s:option(Flag, "dcfilter", translate("Apply a 1Hz DC filter to input data"))
+dcfilter.default = false
+
+measure_noise=s:option(Flag, "measure_noise", translate("Measure noise power"))
+measure_noise.default = false
+
 return m
index 46b3744..6c90476 100644 (file)
@@ -60,7 +60,7 @@ s:tab("advanced", translate("Advanced Settings"))
 name = s:taboption("general", Value, "name", translate("Name"))
 name.optional = false
 name.forcewrite = true
-name.datatype = "uciname"
+name.datatype = "and(uciname,maxlength(14))"
 
 function name.write(self, section, value)
        if zone:name() ~= value then
@@ -76,15 +76,6 @@ function name.write(self, section, value)
        }
 end
 
-function name.validate(self, value)
-       -- fw3 defines 14 as the maximum length of zone name
-       if #value > 14 then
-               return nil, translate("Zone name is too long")
-       else
-               return value
-       end
-end
-
 p = {
        s:taboption("general", ListValue, "input", translate("Input")),
        s:taboption("general", ListValue, "output", translate("Output")),
index 18be74d..2ccd25c 100644 (file)
@@ -301,7 +301,7 @@ msgid "Restrict Masquerading to given destination subnets"
 msgstr "Ogranicz maskaradę do wskazanych sieci docelowych"
 
 msgid "Restrict Masquerading to given source subnets"
-msgstr "Ogranicz maskaradÄ\99 do wskazanych sieci Å¼ródłowych"
+msgstr "Ogranicz maskaradÄ\99 do wskazanych sieci Åºródłowych"
 
 # Wstawiłem rodzinę gdyż gdzieś wcześniej było tak opisane ale klasa pasuje mi tu bardziej.
 # Obsy - niestety ale "rodzina". W gui dotyczy to wyboru IPv4/IPv6, więc "rodzina" a nie klasa.
@@ -317,7 +317,7 @@ msgid ""
 "Rewrite matched traffic to the given source port. May be left empty to only "
 "rewrite the IP address."
 msgstr ""
-"Przepisz dopasowany ruch do danego portu Å¼ródłowego. Można zostawić puste "
+"Przepisz dopasowany ruch do danego portu Åºródłowego. Można zostawić puste "
 "aby przepisać tylko adres IP"
 
 msgid "Rewrite to source %s"
@@ -339,7 +339,7 @@ msgid "Source MAC address"
 msgstr "Źródłowy adres MAC"
 
 msgid "Source NAT"
-msgstr "NAT Å¼ródłowy"
+msgstr "NAT Åºródłowy"
 
 # http://www.digipedia.pl/def/doc/id/677604507/name/SNAT/
 msgid ""
@@ -348,7 +348,7 @@ msgid ""
 "multiple WAN addresses to internal subnets."
 msgstr ""
 "SNAT używany jest wtedy, gdy zmieniane są adresy pakietów połączenia "
-"wychodzÄ\85cego, czyli pakiety Å¼ródłowe. Wykonywany jest zawsze po routowaniu "
+"wychodzÄ\85cego, czyli pakiety Åºródłowe. Wykonywany jest zawsze po routowaniu "
 "(POSTROUTING), a więc w chwili, gdy pakiety są gotowe opuścić host. "
 "IPmasquerading jest formą SNAT."
 
index 1a54f75..4d2447e 100644 (file)
@@ -118,7 +118,7 @@ msgid "WAN Interfaces"
 msgstr "Interfaces WAN"
 
 msgid "WAN Uplink"
-msgstr "Enalce saliente WAN"
+msgstr "Enlace saliente WAN"
 
 msgid "all"
 msgstr "todos"
index 49eab5a..3f26aee 100644 (file)
@@ -20,7 +20,7 @@ function index()
 
        local labels = {
                s_output        = _("Output plugins"),
-               s_system        = _("System plugins"),
+               s_general       = _("General plugins"),
                s_network       = _("Network plugins"),
 
                conntrack       = _("Conntrack"),
@@ -42,9 +42,11 @@ function index()
                network         = _("Network"),
                nut                     = _("UPS"),
                olsrd           = _("OLSRd"),
+               openvpn         = _("OpenVPN"),
                ping            = _("Ping"),
                processes       = _("Processes"),
                rrdtool         = _("RRDTool"),
+               sensors     = _("Sensors"),
                splash_leases = _("Splash Leases"),
                tcpconns        = _("TCP Connections"),
                unixsock        = _("UnixSock"),
@@ -54,15 +56,15 @@ function index()
        -- our collectd menu
        local collectd_menu = {
                output  = { "csv", "network", "rrdtool", "unixsock" },
-               system  = { "cpu", "df", "disk", "email", "entropy", "exec", "irq", "load", "memory", "nut", "processes", "uptime" },
-               network = { "conntrack", "dns", "interface", "iptables", "netlink", "olsrd", "ping", "splash_leases", "tcpconns", "iwinfo" }
+               general = { "cpu", "df", "disk", "email", "entropy", "exec", "irq", "load", "memory", "nut", "processes", "sensors", "uptime" },
+               network = { "conntrack", "dns", "interface", "iptables", "netlink", "olsrd", "openvpn", "ping", "splash_leases", "tcpconns", "iwinfo" }
        }
 
        -- create toplevel menu nodes
        local st = entry({"admin", "statistics"}, template("admin_statistics/index"), _("Statistics"), 80)
        st.index = true
 
-       entry({"admin", "statistics", "collectd"}, cbi("luci_statistics/collectd"), _("Collectd"), 10).subindex = true
+       entry({"admin", "statistics", "collectd"}, cbi("luci_statistics/collectd"), _("Setup"), 20).subindex = true
 
 
        -- populate collectd plugin menu
@@ -87,7 +89,7 @@ function index()
        end
 
        -- output views
-       local page = entry( { "admin", "statistics", "graph" }, template("admin_statistics/index"), _("Graphs"), 80)
+       local page = entry( { "admin", "statistics", "graph" }, template("admin_statistics/index"), _("Graphs"), 10)
              page.setuser  = "nobody"
              page.setgroup = "nogroup"
 
@@ -170,7 +172,7 @@ function statistics_render()
        if #instances == 0 then
                --instances = { graph.tree:plugin_instances( plugin )[1] }
                instances = graph.tree:plugin_instances( plugin )
-               is_index = true
+               is_index = (#instances > 1)
 
        -- index instance requested
        elseif instances[1] == "-" then
diff --git a/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/openvpn.lua b/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/openvpn.lua
new file mode 100644 (file)
index 0000000..193f044
--- /dev/null
@@ -0,0 +1,56 @@
+-- Copyright 2015 Jo-Philipp Wich <jow@openwrt.org>
+-- Licensed to the public under the Apache License 2.0.
+
+require "luci.sys"
+
+local m, s, o
+
+
+m = Map("luci_statistics",
+       translate("OpenVPN Plugin Configuration"),
+       translate("The OpenVPN plugin gathers information about the current vpn connection status."))
+
+s = m:section( NamedSection, "collectd_openvpn", "luci_statistics" )
+
+
+o = s:option( Flag, "enable", translate("Enable this plugin") )
+o.default = "0"
+
+
+o = s:option(Flag, "CollectIndividualUsers", translate("Generate a separate graph for each logged user"))
+o.default = "0"
+o.rmempty = true
+o:depends("enable", 1)
+
+
+o = s:option(Flag, "CollectUserCount", translate("Aggregate number of connected users"))
+o.default = "0"
+o.rmempty = true
+o:depends("enable", 1)
+
+
+o = s:option(Flag, "CollectCompression", translate("Gather compression statistics"))
+o.default = "0"
+o.rmempty = true
+o:depends("enable", 1)
+
+
+o = s:option(Flag, "ImprovedNamingSchema", translate("Use improved naming schema"))
+o.default = "0"
+o.rmempty = true
+o:depends("enable", 1)
+
+
+o = s:option(DynamicList, "StatusFile", translate("OpenVPN status files"))
+o.rmempty = true
+o:depends("enable", 1)
+
+local status_files = nixio.fs.glob("/var/run/openvpn.*.status")
+if status_files then
+       local status_file
+       for status_file in status_files do
+               o:value(status_file)
+       end
+end
+
+return m
diff --git a/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/sensors.lua b/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/sensors.lua
new file mode 100644 (file)
index 0000000..77e36bf
--- /dev/null
@@ -0,0 +1,125 @@
+-- Copyright 2015 Jo-Philipp Wich <jow@openwrt.org>
+-- Licensed to the public under the Apache License 2.0.
+
+require "luci.sys"
+
+local m, s, o
+local sensor_types = {
+       ["12v"] = "voltage",
+       ["2.0v"] = "voltage",
+       ["2.5v"] = "voltage",
+       ["3.3v"] = "voltage",
+       ["5.0v"] = "voltage",
+       ["5v"] = "voltage",
+       ["ain1"] = "voltage",
+       ["ain2"] = "voltage",
+       ["cpu_temp"] = "temperature",
+       ["fan1"] = "fanspeed",
+       ["fan2"] = "fanspeed",
+       ["fan3"] = "fanspeed",
+       ["fan4"] = "fanspeed",
+       ["fan5"] = "fanspeed",
+       ["fan6"] = "fanspeed",
+       ["fan7"] = "fanspeed",
+       ["in0"] = "voltage",
+       ["in10"] = "voltage",
+       ["in2"] = "voltage",
+       ["in3"] = "voltage",
+       ["in4"] = "voltage",
+       ["in5"] = "voltage",
+       ["in6"] = "voltage",
+       ["in7"] = "voltage",
+       ["in8"] = "voltage",
+       ["in9"] = "voltage",
+       ["power1"] = "power",
+       ["remote_temp"] = "temperature",
+       ["temp1"] = "temperature",
+       ["temp2"] = "temperature",
+       ["temp3"] = "temperature",
+       ["temp4"] = "temperature",
+       ["temp5"] = "temperature",
+       ["temp6"] = "temperature",
+       ["temp7"] = "temperature",
+       ["temp"] = "temperature",
+       ["vccp1"] = "voltage",
+       ["vccp2"] = "voltage",
+       ["vdd"] = "voltage",
+       ["vid1"] = "voltage",
+       ["vid2"] = "voltage",
+       ["vid3"] = "voltage",
+       ["vid4"] = "voltage",
+       ["vid5"] = "voltage",
+       ["vid"] = "voltage",
+       ["vin1"] = "voltage",
+       ["vin2"] = "voltage",
+       ["vin3"] = "voltage",
+       ["vin4"] = "voltage",
+       ["volt12"] = "voltage",
+       ["volt5"] = "voltage",
+       ["voltbatt"] = "voltage",
+       ["vrm"] = "voltage"
+
+}
+
+
+m = Map("luci_statistics",
+       translate("Sensors Plugin Configuration"),
+       translate("The sensors plugin uses the Linux Sensors framework to gather environmental statistics."))
+
+s = m:section( NamedSection, "collectd_sensors", "luci_statistics" )
+
+
+o = s:option( Flag, "enable", translate("Enable this plugin") )
+o.default = 0
+
+
+o = s:option(Flag, "__all", translate("Monitor all sensors"))
+o:depends("enable", 1)
+o.default = 1
+o.write = function() end
+o.cfgvalue = function(self, sid)
+       local v = self.map:get(sid, "Sensor")
+       if v == nil or (type(v) == "table" and #v == 0) or (type(v) == "string" and #v == 0) then
+               return "1"
+       end
+end
+
+
+o = s:option(MultiValue, "Sensor", translate("Sensor list"), translate("Hold Ctrl to select multiple items or to deselect entries."))
+o:depends({enable = 1, __all = "" })
+o.widget = "select"
+o.rmempty = true
+o.size = 0
+
+local sensorcli = io.popen("/usr/sbin/sensors -u -A")
+if sensorcli then
+       local bus, sensor
+
+       while true do
+               local ln = sensorcli:read("*ln")
+               if not ln then
+                       break
+               elseif ln:match("^[%w-]+$") then
+                       bus = ln
+               elseif ln:match("^[%w-]+:$") then
+                       sensor = ln:sub(0, -2):lower()
+                       if bus and sensor_types[sensor] then
+                               o:value("%s/%s-%s" %{ bus, sensor_types[sensor], sensor })
+                               o.size = o.size + 1
+                       end
+               elseif ln == "" then
+                       bus = nil
+                       sensor = nil
+               end
+       end
+
+       sensorcli:close()
+end
+
+
+o = s:option( Flag, "IgnoreSelected", translate("Monitor all except specified") )
+o.default = 0
+o.rmempty = true
+o:depends({ enable = 1, __all = "" })
+
+return m
index 5a2800d..7877e61 100644 (file)
@@ -26,15 +26,6 @@ function Instance._subst( self, str, val )
        return str
 end
 
-function Instance._translate( self, key, alt )
-       local val = self.i18n.string(key)
-       if val ~= key then
-               return val
-       else
-               return alt
-       end
-end
-
 function Instance.title( self, plugin, pinst, dtype, dinst, user_title )
 
        local title = user_title or
@@ -73,24 +64,17 @@ end
 
 function Instance.ds( self, source )
 
-       local label = source.title or self:_translate(
-               string.format( "stat_ds_%s_%s_%s", source.type, source.instance, source.ds ),
-               self:_translate(
-                       string.format( "stat_ds_%s_%s", source.type, source.instance ),
-                       self:_translate(
-                               string.format( "stat_ds_label_%s__%s", source.type, source.ds ),
-                               self:_translate(
-                                       string.format( "stat_ds_%s", source.type ),
-                                       source.type .. "_" .. source.instance:gsub("[^%w]","_") .. "_" .. source.ds
-                               )
-                       )
-               )
-       )
+       local label = source.title or
+               "dt=%s/di=%s/ds=%s" % {
+                       (source.type     and #source.type     > 0) and source.type     or "(nil)",
+                       (source.instance and #source.instance > 0) and source.instance or "(nil)",
+                       (source.ds       and #source.ds       > 0) and source.ds       or "(nil)"
+               }
 
        return self:_subst( label, {
                dtype = source.type,
                dinst = source.instance,
                dsrc  = source.ds
-       } )
+       } ):gsub(":", "\\:")
 
 end
index d8317a8..5d4ad98 100644 (file)
@@ -397,6 +397,7 @@ function Graph._generic( self, opts, plugin, plugin_instance, dtype, index )
                                        transform_rpn = dopts.transform_rpn or "0,+",
                                        noarea   = dopts.noarea  or false,
                                        title    = dopts.title   or nil,
+                                       weight   = dopts.weight  or nil,
                                        ds       = dsource,
                                        type     = dtype,
                                        instance = dinst,
@@ -469,6 +470,12 @@ function Graph._generic( self, opts, plugin, plugin_instance, dtype, index )
                        for i, o in ipairs(opts.rrdopts) do _ti( _args, o ) end
                end
 
+               -- sort sources
+               table.sort(_sources, function(a, b)
+                       local x = a.weight or a.index or 0
+                       local y = b.weight or b.index or 0
+                       return x < y
+               end)
 
                -- create DEF statements for each instance
                for i, source in ipairs(_sources) do
index efa631d..6f687d2 100644 (file)
@@ -66,36 +66,40 @@ function rrdargs( graph, plugin, plugin_instance )
                        options = {
                                -- processed packets (tx DS)
                                if_packets__tx = {
+                                       weight  = 1,
                                        overlay = true,         -- don't summarize
                                        total   = true,         -- report total amount of bytes
                                        color   = "00ff00",     -- processed tx is green
-                                       title   = "Processed (tx)"
+                                       title   = "Processed (TX)"
                                },
 
                                -- processed packets (rx DS)
                                if_packets__rx = {
+                                       weight  = 2,
                                        overlay = true,         -- don't summarize
                                        flip    = true,         -- flip rx line
                                        total   = true,         -- report total amount of bytes
                                        color   = "0000ff",     -- processed rx is blue
-                                       title   = "Processed (rx)"
+                                       title   = "Processed (RX)"
                                },
 
                                -- packet errors (tx DS)
                                if_errors__tx = {
+                                       weight  = 0,
                                        overlay = true,         -- don't summarize
                                        total   = true,         -- report total amount of packets
                                        color   = "ff5500",     -- tx errors are orange
-                                       title   = "Errors (tx)"
+                                       title   = "Errors    (TX)"
                                },
 
                                -- packet errors (rx DS)
                                if_errors__rx = {
+                                       weight  = 3,
                                        overlay = true,         -- don't summarize
                                        flip    = true,         -- flip rx line
                                        total   = true,         -- report total amount of packets
                                        color   = "ff0000",     -- rx errors are red
-                                       title   = "Errors (rx)"
+                                       title   = "Errors    (RX)"
                                }
                        }
                }
index b4f2ac1..7b6acf3 100644 (file)
@@ -22,11 +22,13 @@ function rrdargs( graph, plugin, plugin_instance )
                        -- special options for single data lines
                        options = {
                                if_octets__tx = {
+                                       title = "Bytes (TX)",
                                        total = true,           -- report total amount of bytes
                                        color = "00ff00"        -- tx is green
                                },
 
                                if_octets__rx = {
+                                       title = "Bytes (RX)",
                                        flip  = true,           -- flip rx line
                                        total = true,           -- report total amount of bytes
                                        color = "0000ff"        -- rx is blue
@@ -59,6 +61,8 @@ function rrdargs( graph, plugin, plugin_instance )
                        options = {
                                -- processed packets (tx DS)
                                if_packets__tx = {
+                                       weight  = 2,
+                                       title   = "Total   (TX)",
                                        overlay = true,         -- don't summarize
                                        total   = true,         -- report total amount of bytes
                                        color   = "00ff00"      -- processed tx is green
@@ -66,6 +70,8 @@ function rrdargs( graph, plugin, plugin_instance )
 
                                -- processed packets (rx DS)
                                if_packets__rx = {
+                                       weight  = 3,
+                                       title   = "Total   (RX)",
                                        overlay = true,         -- don't summarize
                                        flip    = true,         -- flip rx line
                                        total   = true,         -- report total amount of bytes
@@ -74,6 +80,8 @@ function rrdargs( graph, plugin, plugin_instance )
 
                                -- dropped packets (tx DS)
                                if_dropped__tx = {
+                                       weight  = 1,
+                                       title   = "Dropped (TX)",
                                        overlay = true,         -- don't summarize
                                        total   = true,         -- report total amount of bytes
                                        color   = "660055"      -- dropped tx is ... dunno ;)
@@ -81,14 +89,18 @@ function rrdargs( graph, plugin, plugin_instance )
 
                                -- dropped packets (rx DS)
                                if_dropped__rx = {
+                                       weight  = 4,
+                                       title   = "Dropped (RX)",
                                        overlay = true,         -- don't summarize
                                        flip    = true,         -- flip rx line
                                        total   = true,         -- report total amount of bytes
-                                       color   = "440066"      -- dropped rx is violett
+                                       color   = "ff00ff"      -- dropped rx is violett
                                },
 
                                -- packet errors (tx DS)
                                if_errors__tx = {
+                                       weight  = 0,
+                                       title   = "Errors  (TX)",
                                        overlay = true,         -- don't summarize
                                        total   = true,         -- report total amount of packets
                                        color   = "ff5500"      -- tx errors are orange
@@ -96,6 +108,8 @@ function rrdargs( graph, plugin, plugin_instance )
 
                                -- packet errors (rx DS)
                                if_errors__rx = {
+                                       weight  = 5,
+                                       title   = "Errors  (RX)",
                                        overlay = true,         -- don't summarize
                                        flip    = true,         -- flip rx line
                                        total   = true,         -- report total amount of packets
@@ -122,6 +136,7 @@ function rrdargs( graph, plugin, plugin_instance )
                        options = {
                                -- multicast packets
                                if_multicast = {
+                                       title = "Packets",
                                        total = true,           -- report total amount of packets
                                        color = "0000ff"        -- multicast is blue
                                }
@@ -146,6 +161,7 @@ function rrdargs( graph, plugin, plugin_instance )
                        options = {
                                -- collision rate
                                if_collisions = {
+                                       title = "Collisions",
                                        total = true,           -- report total amount of packets
                                        color = "ff0000"        -- collsions are red
                                }
@@ -173,15 +189,19 @@ function rrdargs( graph, plugin, plugin_instance )
                        },
 
                        -- special options for single data lines
-                       options = {     -- XXX: fixme (define colors...)
-                               if_tx_errors = {
-                                       total = true
-                               },
-
-                               if_rx_errors = {
-                                       flip  = true,
-                                       total = true
-                               }
+                       options = {
+                               if_tx_errors_aborted_value   = { total = true, color = "ffff00", title = "Aborted   (TX)" },
+                               if_tx_errors_carrier_value   = { total = true, color = "ffcc00", title = "Carrier   (TX)" },
+                               if_tx_errors_fifo_value      = { total = true, color = "ff9900", title = "Fifo      (TX)" },
+                               if_tx_errors_heartbeat_value = { total = true, color = "ff6600", title = "Heartbeat (TX)" },
+                               if_tx_errors_window_value    = { total = true, color = "ff3300", title = "Window    (TX)" },
+
+                               if_rx_errors_length_value    = { flip = true, total = true, color = "ff0000", title = "Length    (RX)" },
+                               if_rx_errors_missed_value    = { flip = true, total = true, color = "ff0033", title = "Missed    (RX)" },
+                               if_rx_errors_over_value      = { flip = true, total = true, color = "ff0066", title = "Over      (RX)" },
+                               if_rx_errors_crc_value       = { flip = true, total = true, color = "ff0099", title = "CRC       (RX)" },
+                               if_rx_errors_fifo_value      = { flip = true, total = true, color = "ff00cc", title = "Fifo      (RX)" },
+                               if_rx_errors_frame_value     = { flip = true, total = true, color = "ff00ff", title = "Frame     (RX)" }
                        }
                }
        }
index 6dc81bc..8b04ab8 100644 (file)
@@ -44,9 +44,6 @@ function rrdargs( graph, plugin, plugin_instance, dtype )
                y_max = "100",
                number_format = "%5.1lf%%",
                data = {
-                       sources = {
-                               percent = { "percent" }
-                       },
                        instances = {
                                percent = "charge"
                        },
@@ -77,9 +74,6 @@ function rrdargs( graph, plugin, plugin_instance, dtype )
                vlabel = "Minutes",
                number_format = "%.1lfm",
                data = {
-                       sources = {
-                               timeleft = { "timeleft" }
-                       },
                        instances = {
                                timeleft = { "battery" }
                        },
diff --git a/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/openvpn.lua b/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/openvpn.lua
new file mode 100644 (file)
index 0000000..876e871
--- /dev/null
@@ -0,0 +1,48 @@
+-- Copyright 2015 Jo-Philipp Wich <jow@openwrt.org>
+-- Licensed to the public under the Apache License 2.0.
+
+module("luci.statistics.rrdtool.definitions.openvpn", package.seeall)
+
+function rrdargs( graph, plugin, plugin_instance )
+       local inst = plugin_instance:gsub("^openvpn%.(.+)%.status$", "%1")
+
+       return {
+               {
+                       title = "%%H: OpenVPN \"%s\" - Traffic" % inst,
+                       vlabel = "Bytes/s",
+                       data = {
+                               instances = {
+                                       if_octets = { "traffic", "overhead" }
+                               },
+                               sources = {
+                                       if_octets = { "tx", "rx" }
+                               },
+                               options = {
+                                       if_octets_traffic_tx  = { weight = 0, title = "Bytes    (TX)", total = true, color = "00ff00" },
+                                       if_octets_overhead_tx = { weight = 1, title = "Overhead (TX)", total = true, color = "ff9900" },
+                                       if_octets_overhead_rx = { weight = 2, title = "Overhead (RX)", total = true, flip = true, color = "ff00ff" },
+                                       if_octets_traffic_rx  = { weight = 3, title = "Bytes    (RX)", total = true, flip = true, color = "0000ff" }
+                               }
+                       }
+               },
+
+               {
+                       title = "%%H: OpenVPN \"%s\" - Compression" % inst,
+                       vlabel = "Bytes/s",
+                       data = {
+                               instances = {
+                                       compression = { "data_out", "data_in" }
+                               },
+                               sources = {
+                                       compression = { "uncompressed", "compressed" }
+                               },
+                               options = {
+                                       compression_data_out_uncompressed = { weight = 0, title = "Uncompressed (TX)", total = true, color = "00ff00" },
+                                       compression_data_out_compressed   = { weight = 1, title = "Compressed   (TX)", total = true, color = "008800" },
+                                       compression_data_in_compressed    = { weight = 2, title = "Compressed   (RX)", total = true, flip = true, color = "000088" },
+                                       compression_data_in_uncompressed  = { weight = 3, title = "Uncompressed (RX)", total = true, flip = true, color = "0000ff" }
+                               }
+                       }
+               }
+       }
+end
diff --git a/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/sensors.lua b/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/sensors.lua
new file mode 100644 (file)
index 0000000..f8bddb9
--- /dev/null
@@ -0,0 +1,24 @@
+-- Copyright 2015 Jo-Philipp Wich <jow@openwrt.org>
+-- Licensed to the public under the Apache License 2.0.
+
+module("luci.statistics.rrdtool.definitions.sensors", package.seeall)
+
+function rrdargs( graph, plugin, plugin_instance )
+       return {
+               {
+                       per_instance = true,
+                       title = "%H: %pi - %di",
+                       vlabel = "\176C",
+                       number_format = "%4.1lf\176C",
+                       data = {
+                               types = { "temperature" },
+                               options = {
+                                       temperature__value = {
+                                               color = "ff0000",
+                                               title = "Temperature"
+                                       }
+                               }
+                       }
+               }
+       }
+end
index abcee3e..de16f29 100644 (file)
@@ -140,6 +140,9 @@ config statistics 'collectd_processes'
        option enable '0'
        option Processes 'uhttpd dnsmasq dropbear'
 
+config statistics 'collectd_sensors'
+       option enable '0'
+
 config statistics 'collectd_splash_leases'
        option enable '0'
 
index 8acae46..49d8a09 100755 (executable)
@@ -187,9 +187,9 @@ function _list_expand( c, l, nopad )
                        end
 
                        if n:find("(%w+)ses") then
-                               k = n:gsub("(%w+)ses", "%1s")
+                               k = n:gsub("(%w+)ses$", "%1s")
                        else
-                               k = n:gsub("(%w+)s", "%1")
+                               k = n:gsub("(%w+)s$", "%1")
                        end
 
                        str = str .. _expand( c[n], k, nopad )
@@ -375,6 +375,12 @@ plugins = {
                { }
        },
 
+       openvpn = {
+               { },
+               { "CollectIndividualUsers", "CollectUserCount", "CollectCompression", "ImprovedNamingSchema" },
+               { "StatusFile" }
+       },
+
        ping    = {
                { "TTL", "Interval" },
                { },
@@ -393,6 +399,12 @@ plugins = {
                { "RRATimespans" }
        },
 
+       sensors = {
+               { },
+               { "IgnoreSelected" },
+               { "Sensor" }
+       },
+
         splash_leases = {
           { },
           { },
diff --git a/documentation/SubmitPatchesHowTo:.md b/documentation/SubmitPatchesHowTo:.md
deleted file mode 100644 (file)
index cdd1552..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-# Checkout svn
-       
-       svn co http://svn.luci.subsignal.org/luci/trunk
-       
-and change to that directory:
-       
-       cd trunk
-       
-# Make your changes
-
-Edit the files you want to change. If you add some new files you need to add them to the svn tree:
-       
-       svn add <dir/files>
-       
-Where <dir/files> are the directories/files you have added. Its possible to specify multiple files/directories here.
-
-# Use svn diff to generate a patch with your changes
-
-To check if your changes look ok first do:
-       
-       svn diff <dir/files>
-       
-and check the output. Again you can specify multiple dirs/directories here.
-
-If everything looks like expected save the patch:
-       
-       svn diff <dir/files> > ./mypatch.patch
-       
-
-# Submit patches
-
-Use the [Ticket system](http://luci.subsignal.org/trac/newticket) to submit your patch.
-
index 4c163bf..7faadec 100644 (file)
Binary files a/modules/luci-base/htdocs/luci-static/resources/icons/bridge.png and b/modules/luci-base/htdocs/luci-static/resources/icons/bridge.png differ
index 0f367c5..b3e620b 100644 (file)
Binary files a/modules/luci-base/htdocs/luci-static/resources/icons/bridge_disabled.png and b/modules/luci-base/htdocs/luci-static/resources/icons/bridge_disabled.png differ
index 41d2ba9..7762833 100644 (file)
Binary files a/modules/luci-base/htdocs/luci-static/resources/icons/encryption.png and b/modules/luci-base/htdocs/luci-static/resources/icons/encryption.png differ
index f2e05a4..9a8721b 100644 (file)
Binary files a/modules/luci-base/htdocs/luci-static/resources/icons/encryption_disabled.png and b/modules/luci-base/htdocs/luci-static/resources/icons/encryption_disabled.png differ
index a025381..e3d24f2 100644 (file)
Binary files a/modules/luci-base/htdocs/luci-static/resources/icons/ethernet.png and b/modules/luci-base/htdocs/luci-static/resources/icons/ethernet.png differ
index 2bb02e4..d8792df 100644 (file)
Binary files a/modules/luci-base/htdocs/luci-static/resources/icons/ethernet_disabled.png and b/modules/luci-base/htdocs/luci-static/resources/icons/ethernet_disabled.png differ
index 25ea172..5a2b235 100644 (file)
Binary files a/modules/luci-base/htdocs/luci-static/resources/icons/port_down.png and b/modules/luci-base/htdocs/luci-static/resources/icons/port_down.png differ
index e063037..8105e77 100644 (file)
Binary files a/modules/luci-base/htdocs/luci-static/resources/icons/port_up.png and b/modules/luci-base/htdocs/luci-static/resources/icons/port_up.png differ
index 2e5dff4..b3a8118 100644 (file)
Binary files a/modules/luci-base/htdocs/luci-static/resources/icons/signal-0-25.png and b/modules/luci-base/htdocs/luci-static/resources/icons/signal-0-25.png differ
index 114583a..333b155 100644 (file)
Binary files a/modules/luci-base/htdocs/luci-static/resources/icons/signal-0.png and b/modules/luci-base/htdocs/luci-static/resources/icons/signal-0.png differ
index ee8cc4f..b465de3 100644 (file)
Binary files a/modules/luci-base/htdocs/luci-static/resources/icons/signal-25-50.png and b/modules/luci-base/htdocs/luci-static/resources/icons/signal-25-50.png differ
index 26bcbf7..cd7bcaf 100644 (file)
Binary files a/modules/luci-base/htdocs/luci-static/resources/icons/signal-50-75.png and b/modules/luci-base/htdocs/luci-static/resources/icons/signal-50-75.png differ
index 5cffaa1..f7a3658 100644 (file)
Binary files a/modules/luci-base/htdocs/luci-static/resources/icons/signal-75-100.png and b/modules/luci-base/htdocs/luci-static/resources/icons/signal-75-100.png differ
index b77585c..4a11356 100644 (file)
Binary files a/modules/luci-base/htdocs/luci-static/resources/icons/signal-none.png and b/modules/luci-base/htdocs/luci-static/resources/icons/signal-none.png differ
index 5c99ba5..be99b19 100644 (file)
Binary files a/modules/luci-base/htdocs/luci-static/resources/icons/switch.png and b/modules/luci-base/htdocs/luci-static/resources/icons/switch.png differ
index b8c84c8..54588d2 100644 (file)
Binary files a/modules/luci-base/htdocs/luci-static/resources/icons/switch_disabled.png and b/modules/luci-base/htdocs/luci-static/resources/icons/switch_disabled.png differ
index c5a09dd..63eabfe 100644 (file)
Binary files a/modules/luci-base/htdocs/luci-static/resources/icons/tunnel.png and b/modules/luci-base/htdocs/luci-static/resources/icons/tunnel.png differ
index ad9856c..ca79d81 100644 (file)
Binary files a/modules/luci-base/htdocs/luci-static/resources/icons/tunnel_disabled.png and b/modules/luci-base/htdocs/luci-static/resources/icons/tunnel_disabled.png differ
index 5c99ba5..be99b19 100644 (file)
Binary files a/modules/luci-base/htdocs/luci-static/resources/icons/vlan.png and b/modules/luci-base/htdocs/luci-static/resources/icons/vlan.png differ
index b8c84c8..54588d2 100644 (file)
Binary files a/modules/luci-base/htdocs/luci-static/resources/icons/vlan_disabled.png and b/modules/luci-base/htdocs/luci-static/resources/icons/vlan_disabled.png differ
index 528ce2b..80a23e8 100644 (file)
Binary files a/modules/luci-base/htdocs/luci-static/resources/icons/wifi.png and b/modules/luci-base/htdocs/luci-static/resources/icons/wifi.png differ
index d73a5e7..9e466ae 100644 (file)
Binary files a/modules/luci-base/htdocs/luci-static/resources/icons/wifi_big.png and b/modules/luci-base/htdocs/luci-static/resources/icons/wifi_big.png differ
index af93b37..6f9fff3 100644 (file)
Binary files a/modules/luci-base/htdocs/luci-static/resources/icons/wifi_big_disabled.png and b/modules/luci-base/htdocs/luci-static/resources/icons/wifi_big_disabled.png differ
index 338a34f..e989a2b 100644 (file)
Binary files a/modules/luci-base/htdocs/luci-static/resources/icons/wifi_disabled.png and b/modules/luci-base/htdocs/luci-static/resources/icons/wifi_disabled.png differ
index baa7ab8..e1ec57f 100644 (file)
@@ -42,13 +42,13 @@ msgid "-- match by label --"
 msgstr ""
 
 msgid "1 Minute Load:"
-msgstr "Obciążenie w ciągu 1 minuty:"
+msgstr "Obciążenie 1 min.:"
 
 msgid "15 Minute Load:"
-msgstr "Obciążenie w ciągu 15 minut:"
+msgstr "Obciążenie 15 min.:"
 
 msgid "5 Minute Load:"
-msgstr "Obciążenie w ciągu 5 minut:"
+msgstr "Obciążenie 5 min.:"
 
 msgid "<abbr title=\"Basic Service Set Identifier\">BSSID</abbr>"
 msgstr "<abbr title=\"Basic Service Set Identifier\">BSSID</abbr>"
@@ -1838,7 +1838,7 @@ msgid "Out"
 msgstr "Wychodzące"
 
 msgid "Outbound:"
-msgstr "Wychodzące:"
+msgstr "Wychodzący:"
 
 msgid "Outdoor Channels"
 msgstr "Kanały zewnętrzne"
index c503a8f..baa3ac5 100644 (file)
@@ -1,6 +1,6 @@
 config core main
        option lang auto
-       option mediaurlbase /luci-static/openwrt.org
+       option mediaurlbase /luci-static/bootstrap
        option resourcebase /luci-static/resources
        
 config extern flash_keep
index 0b5fa1d..59b0d84 100644 (file)
@@ -5,7 +5,7 @@
 <meta http-equiv="Cache-Control" content="no-cache" />
 <meta http-equiv="refresh" content="0; URL=/cgi-bin/luci" />
 </head>
-<body style="background-color: black">
-<a style="color: white; text-decoration: none" href="/cgi-bin/luci">LuCI - Lua Configuration Interface</a>
+<body style="background-color: white">
+<a style="color: black; font-family: arial, helvetica, sans-serif;" href="/cgi-bin/luci">LuCI - Lua Configuration Interface</a>
 </body>
 </html>
index 49103a8..4dc52ad 100644 (file)
@@ -51,13 +51,10 @@ rf.optional = true
 
 
 s:taboption("files", Flag, "nohosts",
-       translate("Ignore Hosts files")).optional = true
+       translate("Ignore <code>/etc/hosts</code>")).optional = true
 
-hf = s:taboption("files", DynamicList, "addnhosts",
-       translate("Additional Hosts files"))
-
-hf:depends("nohosts", "")
-hf.optional = true
+s:taboption("files", DynamicList, "addnhosts",
+       translate("Additional Hosts files")).optional = true
 
 
 s:taboption("advanced", Flag, "boguspriv",
index b01b5db..7c6d7e1 100644 (file)
@@ -11,6 +11,7 @@ f = SimpleForm("ipkgconf", translate("OPKG-Configuration"), translate("General o
 f:append(Template("admin_system/ipkg"))
 
 t = f:field(TextValue, "lines")
+t.wrap = "off"
 t.rows = 10
 function t.cfgvalue()
        return nixio.fs.readfile(ipkgfile) or ""
@@ -28,6 +29,7 @@ g = SimpleForm("distfeedconf", translate("Distribution feeds"),
        translate("Build/distribution specific feed definitions. This file will NOT be preserved in any sysupgrade."))
 
 d = g:field(TextValue, "lines2")
+d.wrap = "off"
 d.rows = 10
 function d.cfgvalue()
        return nixio.fs.readfile(distfeeds) or ""
@@ -45,6 +47,7 @@ h = SimpleForm("customfeedconf", translate("Custom feeds"),
        translate("Custom feed definitions, e.g. private feeds. This file can be preserved in a sysupgrade."))
 
 c = h:field(TextValue, "lines3")
+c.wrap = "off"
 c.rows = 10
 function c.cfgvalue()
        return nixio.fs.readfile(customfeeds) or ""
index 07a96b2..a98d790 100644 (file)
@@ -88,7 +88,9 @@
                if has_dsl then
                        local dsl_stat = luci.sys.exec("/etc/init.d/dsl_control lucistat")
                        local dsl_func = loadstring(dsl_stat)
-                       rv.dsl = dsl_func()
+                       if dsl_func then
+                               rv.dsl = dsl_func()
+                       end
                end
 
                luci.http.prepare_content("application/json")
index 6f78643..60caadb 100644 (file)
@@ -84,11 +84,13 @@ function action_flashops()
                                        fp = io.open(image_tmp, "w")
                                end
                        end
-                       if chunk then
-                               fp:write(chunk)
-                       end
-                       if eof then
-                               fp:close()
+                       if fp then
+                               if chunk then
+                                       fp:write(chunk)
+                               end
+                               if eof then
+                                       fp:close()
+                               end
                        end
                end
        )
index 129ca43..759bb74 100644 (file)
@@ -49,10 +49,10 @@ function rpc_auth()
        server.challenge = function(user, pass)
                local sid, token, secret
 
-               require "luci.config"
+               local config = require "luci.config"
 
                if sys.user.checkpasswd(user, pass) then
-                       local sdat = util.ubus("session", "create", { timeout = luci.config.sauth.sessiontime })
+                       local sdat = util.ubus("session", "create", { timeout = config.sauth.sessiontime })
                        if sdat then
                                sid = sdat.ubus_rpc_session
                                token = sys.uniqueid(16)
index 2f8108e..37d4ec9 100644 (file)
@@ -50,7 +50,7 @@ ip6prefixlen.datatype    = "range(0,64)"
 
 
 s:taboption("general", Value, "ealen",
-       translate("EA-bits length")).datatype = "range(0,16)"
+       translate("EA-bits length")).datatype = "range(0,48)"
 
 s:taboption("general", Value, "psidlen",
        translate("PSID-bits length")).datatype = "range(0,16)"
diff --git a/themes/luci-theme-freifunk-bno/Makefile b/themes/luci-theme-freifunk-bno/Makefile
deleted file mode 100644 (file)
index 1491a97..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-#
-# 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 Berlin Nordost Theme
-LUCI_DEPENDS:=
-
-include ../../luci.mk
-
-# call BuildPackage - OpenWrt buildroot signature
diff --git a/themes/luci-theme-freifunk-bno/htdocs/luci-static/freifunk-bno/cascade.css b/themes/luci-theme-freifunk-bno/htdocs/luci-static/freifunk-bno/cascade.css
deleted file mode 100644 (file)
index 4f89b2d..0000000
+++ /dev/null
@@ -1,872 +0,0 @@
-* {
-       margin: 0;
-       padding: 0;
-}
-
-body {
-       background-color: #ffffff;
-       color: #ffffff;
-       font-family: Verdana, Arial, sans-serif;
-       font-size: 100%;
-       line-height: 100%;
-       background-image: url(images/main-back.png);
-       background-repeat: repeat-x;
-       background-position: left bottom;
-       }
-#all {
-        margin: 0px;
-       padding: 0px;
-        min-height: 800px;
-}
-
-code {
-       font-family: monospace;
-       white-space: pre;
-}
-
-a:link, a:visited {
-       color:#000000;
-       font-weight:bold;
-       text-decoration:none;
-       }
-a:hover {
-       color:#333333;
-       font-weight:bold;
-       }
-
-/* Custom*/
- #wrapper
-{
-       width: 95%;
-       color: #333333;
-       margin-left: auto;
-       margin-right: auto;
-/*     background-image: url(images/corner-left.gif);  */
-/*     background-repeat: no-repeat;                   */
-/*     background-position: left bottom;               */
-       background-color: #FffdF4;
-       min-width: 710px;
-   min-height: 710px;
-}
-#main {
-  clear: both;
-  width: 100%;
-  margin: 0;
-  padding: 0;
-  color: #333333;
-/*  background-image: url(images/corner-right.gif);    */
-/*  background-repeat: no-repeat;                      */
-/*  background-position: right bottom;                 */
-   min-height: 710px;
-}
-
-div#maincontent ul {
-       margin-left: 2em;
-}
-
-.warning {
-       color: red !important;
-       font-weight: bold;
-}
-
-.clear {
-       clear: both;
-       height: 1px;
-}
-
-.hidden {
-       display: none;
-}
-
-.error {
-       color: #ff0000;
-}
-
-#header
-{
- padding: 0px;
- height: 100px;
-}
-#headerleft
-{
- height: 100px;
- background-color: #FFFfff;
- background-image: url(images/header-left.gif);
- background-repeat: no-repeat;
- background-position: left top;
-}
-#headerright
-{
- height: 100px;
- background-color: #FFfffF;
-
- margin-left: 5px;
- background-image: url(images/header-right.gif);
- background-repeat: no-repeat;
- background-position: right top;
-}
-
-#headerback
-{
- margin-right: 5px;
- height: 100px;
- background-color: #FFfffF;
- background-image: url(images/header-back.gif);
- background-repeat: repeat-x;
- background-position: left top;
-}
-#schriftzug {
- font-size : 1.5em;
- text-align:left;
- margin-bottom: 7px;
- margin-top: 7px;
- float:left;
- width: 450px;
-}
-
-#schriftzug a:hover{
- background-color:transparent;
-}
-#logo{
- margin-top: 5px;
- float:right;
- width: 115px;
-}
-
-.pathbar {
-       display: none;
-}
-
-.menubar {
-       width: 100%;
-       min-height: 1.8em;
-       background: #ffffff;
-       color: #000000;
-       border-top:0.4em solid #DC0067;
-}
-
-.mainmenu {
-       float: left;
-       width: auto;
-       min-height: 1.8em;
-       background: #ffffff;
-       color: #000000;
-}
-.modemenu li {
-       border-top:0.3em solid #DC0067;
-       margin-left:  0.3em;
-       margin-top:  -0.3em;
-}
-.mainmenu div {
-       float: left;
-       border-top:0.3em solid #DC0067;
-       margin-right:  0.3em;
-       margin-top:  -0.3em;
-}
-.mainmenu div.preactive {
-       border-top: 0.3em solid #FFCB05;
-       margin-top:  -0.2em;
-}
-
-.mainmenu li {
-       white-space: nowrap;
-}
-
-.mainmenu div ul {
-       display: none;
-       position: absolute;
-       background: #ffffff;
-       color: #000000;
-       border-width: 0 1px 1px 1px;
-       border-style: solid;
-       border-color: #444444;
-       list-style-type: none;
-}
-
-.mainmenu ul li:hover > ul,
-.mainmenu div:hover > ul {
-       display: block;
-}
-
-.mainmenu ul li > ul {
-       left: 100%;
-       margin-top: -1.8em;
-       border-width: 1px;
-}
-
-.modemenu a,
-.mainmenu a {
-       display: block;
-       padding: 0.2em;
-       color: #000000;
-       text-decoration: none;
-       font-size: 70%;
-       font-weight: bold;
-}
-
-
-.modemenu .active a {
-       color: #000000;
-       font-weight: bold;
-       border-top:0.3em solid #FFCB05;
-       margin-top:  -0.2em;
-}
-.mainmenu .active a{
-       color: #000000;
-       font-weight: bold;
-       border-top:0.2em solid #FFCB05;
-}
-.mainmenu li > span:active {
-       background-color: #FFE990;
-}
-
-.mainmenu li:hover > span > a,
-.mainmenu div:hover > a {
-color: #ffffff;
-background-color: #FFCB05;
-}
-
-
-.modemenu a:focus,
-.mainmenu a:focus {
-       color: #000000;
-}
-
-.mainmenu a:hover,
-.modemenu a:hover {
-color: #ffffff;
-background-color: #FFCB05;
-}
-
-.mainmenu div.preactive > a {
-       color: #DC0067;
-       font-weight: bold;
-}
-.mainmenu div.preactive > a:hover,
-.mainmenu div.preactive > a:focus {
-       color: #ffffff;
-       font-weight: bold;
-}
-
-.modemenu ul {
-       width: auto;
-       background: #000000;
-       color: #ffffff;
-       list-style-type: none;
-}
-
-.modemenu li {
-       float: right;
-
-}
-
-#maincontent {
-       clear: both;
-       width: 98%;
-       margin: 0 auto;
-       padding: 0.5em;
-       background: #FFF4BE;
-       color: #000000;
-       font-size: 80%;
-       border-top:1px solid #D2A800;
-}
-
-#maincontent h2 {
-       margin: 0.25em 0 0.5em 0;
-       font-size: 150%;
-       font-weight: normal;
-}
-
-#maincontent h3 {
-       margin: 0.5em 0;
-       font-size: 120%;
-       font-weight: normal;
-       text-decoration: underline;
-}
-
-#maincontent p {
-       margin-bottom: 1em;
-}
-
-.cbi-section {
-       margin-bottom: 0.5em;
-       padding: 0.5em 1em;
-       border: 1px dotted #D2A800;
-       background-color: #FFE990;
-}
-
-.cbi-section legend {
-       font-size: 110%;
-       font-weight: bold;
-       height: 1em;
-       padding: 0 0.25em;
-       color: #555555;
-}
-
-.cbi-section h2 {
-       margin: 0em 0 0.5em -0.5em !important;
-}
-
-.cbi-section h3 {
-       height: 1.5em;
-       font-size: 90%;
-       color: #555555;
-}
-
-.cbi-section-descr {
-       margin-bottom: 0.5em;
-       font-size: 95%;
-}
-
-.cbi-title-ref {
-       color: inherit;
-       text-decoration: none;
-       padding-right: 18px;
-       background: url('../resources/cbi/link.gif') no-repeat scroll right center;
-       background-color: inherit;
-}
-
-input[type=submit],
-input[type=reset],
-input[type=image],
-label {
-       cursor: pointer;
-}
-
-select,
-input,
-textarea {
-       background: #FffdF4;
-       color: #000000;
-       border-width: 1px;
-       border-color: #000000;
-}
-
-input[type=image] {
-       border: none;
-}
-
-
-input:focus,
-input:hover,
-select:focus,
-select:hover,
-textarea:focus,
-textarea:hover {
-       background-color: #FFF4BE;
-}
-
-select,
-input[type=text],
-input[type=password] {
-       width: 20em;
-}
-
-td select,
-td input[type=text],
-td input[type=password] {
-       width: 99%;
-}
-
-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;
-       padding-left: 17px;
-}
-
-input.cbi-input-password {
-       background: url('../resources/cbi/key.gif') no-repeat scroll 1px center;
-       background-color: inherit;
-       padding-left: 17px;
-}
-
-input.cbi-input-find {
-       background: url('../resources/cbi/find.gif') no-repeat scroll 1px center;
-       background-color: inherit;
-       padding-left: 17px;
-}
-
-input.cbi-input-reload {
-       background: url('../resources/cbi/reload.gif') no-repeat scroll 1px center;
-       background-color: inherit;
-       padding-left: 17px;
-}
-
-input.cbi-input-add,
-input.cbi-button-add {
-       background: url('../resources/cbi/add.gif') no-repeat scroll 1px center;
-       background-color: inherit;
-       padding-left: 17px;
-       padding-right: 1px;
-}
-
-input.cbi-input-fieldadd,
-input.cbi-button-fieldadd {
-       background: url(../resources/cbi/fieldadd.gif) no-repeat scroll 1px center;
-       background-color: inherit;
-       padding-left: 17px;
-       padding-right: 1px;
-}
-
-input.cbi-input-reset,
-input.cbi-button-reset {
-       background: url('../resources/cbi/reset.gif') no-repeat scroll 1px center;
-       background-color: inherit;
-       padding-left: 17px;
-       padding-right: 1px;
-}
-
-input.cbi-input-save,
-input.cbi-button-save {
-       background: url('../resources/cbi/save.gif') no-repeat scroll 1px center;
-       background-color: inherit;
-       padding-left: 17px;
-       padding-right: 1px;
-}
-
-input.cbi-input-apply,
-input.cbi-button-apply {
-       background: url('../resources/cbi/apply.gif') no-repeat scroll 1px center;
-       background-color: inherit;
-       padding-left: 17px;
-       padding-right: 1px;
-}
-
-input.cbi-input-remove,
-div.cbi-section-remove input {
-       background: url('../resources/cbi/remove.gif') no-repeat scroll 1px center;
-       background-color: inherit;
-       padding-left: 17px;
-       padding-right: 1px;
-}
-
-input.cbi-button-up {
-       background-image: url('../resources/cbi/up.gif');
-       padding-left: 11px;
-       padding-right: 1px;
-}
-
-input.cbi-button-down {
-       background-image: url('../resources/cbi/down.gif');
-       padding-left: 11px;
-       padding-right: 1px;
-}
-
-input.cbi-button-edit {
-       background-image: url('../resources/cbi/edit.gif');
-       color: #000000;
-       padding-left: 17px;
-       padding-right: 1px;
-}
-
-input.cbi-button-reload {
-       background-image: url('../resources/cbi/reload.gif');
-       color: #000000;
-       padding-left: 17px;
-       padding-right: 1px;
-}
-
-input.cbi-button-reset {
-       background-image: url('../resources/cbi/reset.gif');
-       color: #000000;
-       padding-left: 17px;
-       padding-right: 1px;
-}
-
-input.cbi-button-remove {
-       background-image: url('../resources/cbi/remove.gif');
-       color: #000000;
-       padding-left: 17px;
-       padding-right: 1px;
-}
-
-.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.smalltext {
-background-color: #FFCB05;
-       border-top: 1px solid #666666;
-       border-right: 1px solid #666666;
-       border-bottom: 1px solid #666666;
-       font-size: 90%;
-       width: 80%;
-       margin-left: auto;
-       margin-right: auto;
-       border-collapse: collapse;
-}
-
-table.smalltext tr:hover td {
-background-color: #FFE990;
-}
-
-table.smalltext tr th {
-       padding: 0 0.25em;
-       border-left: 1px solid #666666;
-       text-align: left;
-}
-
-table.smalltext tr td {
-       padding: 0 0.25em;
-       border-top: 1px solid #666666;
-       border-left: 1px solid #666666;
-}
-
-.cbi-rowstyle-1 {
-       background-color: #FFF4BE;
-}
-
-.cbi-rowstyle-2 {
-}
-
-table.cbi-section-table .cbi-section-table-cell {
-       padding: 3px;
-       white-space: nowrap;
-}
-
-div.cbi-value {
-       clear: left;
-       vertical-align: middle;
-       padding-left: 0.25em;
-       border-bottom: 1px dotted #FFCB05;
-}
-
-div.cbi-value:hover {
-       background: #FFF4BE;
-}
-
-div.cbi-value:last-child {
-       border: none;
-}
-
-.cbi-value-title {
-       float: left;
-       width: 40%;
-}
-
-div.cbi-value-field {
-       width: 58%;
-       margin: 0.25em 0 0.25em 40%;
-}
-
-div.cbi-value-description {
-       font-size: 90%;
-}
-
-div.cbi-value-field > div.cbi-value-description {
-       display: none;
-}
-
-div.cbi-value:hover div.cbi-value-field > div.cbi-value-description {
-       display: block;
-       color: #ffffff;
-       background-color: #FFCB05;
-}
-
-option:active,
-option:before,
-option:after,
-option:focus,
-option:hover {
-       color: #ffffff;
-       background-color: #EEBA00;
-       background: url(images/bgoption.png);
-}
-
-div.cbi-section-create {
-       clear: left;
-       white-space: nowrap;
-}
-
-div.cbi-map-descr {
-       margin-bottom: 1em;
-}
-
-div.cbi-optionals {
-       margin: 0.5em 0;
-       padding: 0 0.25em;
-}
-
-div.cbi-section-remove {
-       float: right;
-}
-
-.cbi-section-node {
-       clear: both;
-       border: 1px dotted #FFCB05;
-       padding-bottom: 0;
-}
-
-.cbi-section-node div.cbi-section-table-row {
-       margin: 0.25em;
-}
-
-table.cbi-section-table {
-       width: 100%;
-       font-size: 95%;
-}
-
-table.cbi-section-table th,
-table.cbi-section-table td {
-       text-align: center;
-}
-
-tr.cbi-section-table-descr th {
-       font-weight: normal;
-       font-size: 90%;
-}
-
-td.cbi-section-table-optionals {
-       text-align: left !important;
-       padding-top: 1em;
-}
-
-.cbi-value-helpicon img {
-       vertical-align: bottom;
-}
-
-div.cbi-error {
-       font-size: 95%;
-       font-weight: bold;
-       color: #FF0000;
-}
-
-td.cbi-value-error {
-       border-color: red !important;
-}
-
-.cbi-value-error input,
-.cbi-value-error select {
-       color: red !important;
-       background-color: #FFCCCC;
-}
-
-.cbi-section-error {
-       color: red;
-       font-size: 95%;
-       border: 1px dotted red;
-       margin: 3px;
-       padding: 3px;
-}
-
-ul.cbi-apply {
-       font-size: 90%;
-}
-
-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 outset #000;
-       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;
-}
-
-
-.left {
-       text-align: left !important;
-}
-
-.right {
-       text-align: right !important;
-}
-
-.luci {
-       position: fixed;
-       bottom: 0;
-       left: 0;
-       text-align: right;
-}
-
-.luci a {
-       color: #666666;
-       text-decoration: none;
-       font-size: 70%;
-}
-
-.inline {
-       display: inline;
-}
-
-.error500 {
-       white-space: normal;
-       border: 1px dotted #FF0000;
-       background-color: #FFFFFF;
-       padding: 0.5em;
-}
-
-/* obligatory IE6 Voodoo Code */
-* html body {
-       padding-left: 50% !important;
-}
-
-* html div#header {
-       margin-left: -100% !important;
-}
-
-* html div.menubar {
-       margin-left: -100% !important;
-       width: 200% !important;
-}
-
-* html div#maincontent {
-       margin-left: -80% !important;
-       width: 160% !important;
-}
-
-* html div.mainmenu div.hover ul,
-* html div.mainmenu div li.hover ul,
-* html div.mainmenu div li li.hover ul,
-* html div.mainmenu div li li li.hover ul,
-* html div.mainmenu div li li li li.hover ul {
-       display: block !important;
-       margin-left: 3em;
-}
-
-* html div.mainmenu div.hover ul {
-       margin-left: 0;
-}
-
-* html div.mainmenu .hover ul ul,
-* html div.mainmenu .hover ul ul ul,
-* html div.mainmenu .hover ul ul ul ul,
-* html div.mainmenu .hover ul ul ul ul ul {
-       display: none !important;
-}
-
-* html div.mainmenu li {
-       height: 1em !important;
-       width: 10em !important;
-}
-
-* html .mainmenu {
-       height: 1.8em;
-}
-
-* html div.cbi-value-description {
-       margin-left: 40%;
-}
-
-
-.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;
-}
diff --git a/themes/luci-theme-freifunk-bno/htdocs/luci-static/freifunk-bno/images/bgoption.png b/themes/luci-theme-freifunk-bno/htdocs/luci-static/freifunk-bno/images/bgoption.png
deleted file mode 100644 (file)
index 6fd1e2f..0000000
Binary files a/themes/luci-theme-freifunk-bno/htdocs/luci-static/freifunk-bno/images/bgoption.png and /dev/null differ
diff --git a/themes/luci-theme-freifunk-bno/htdocs/luci-static/freifunk-bno/images/favicon.ico b/themes/luci-theme-freifunk-bno/htdocs/luci-static/freifunk-bno/images/favicon.ico
deleted file mode 100644 (file)
index 7247cfa..0000000
Binary files a/themes/luci-theme-freifunk-bno/htdocs/luci-static/freifunk-bno/images/favicon.ico and /dev/null differ
diff --git a/themes/luci-theme-freifunk-bno/htdocs/luci-static/freifunk-bno/images/header-back.gif b/themes/luci-theme-freifunk-bno/htdocs/luci-static/freifunk-bno/images/header-back.gif
deleted file mode 100644 (file)
index 21fe02b..0000000
Binary files a/themes/luci-theme-freifunk-bno/htdocs/luci-static/freifunk-bno/images/header-back.gif and /dev/null differ
diff --git a/themes/luci-theme-freifunk-bno/htdocs/luci-static/freifunk-bno/images/header-left.gif b/themes/luci-theme-freifunk-bno/htdocs/luci-static/freifunk-bno/images/header-left.gif
deleted file mode 100644 (file)
index a3258cc..0000000
Binary files a/themes/luci-theme-freifunk-bno/htdocs/luci-static/freifunk-bno/images/header-left.gif and /dev/null differ
diff --git a/themes/luci-theme-freifunk-bno/htdocs/luci-static/freifunk-bno/images/header-right.gif b/themes/luci-theme-freifunk-bno/htdocs/luci-static/freifunk-bno/images/header-right.gif
deleted file mode 100644 (file)
index 93d0291..0000000
Binary files a/themes/luci-theme-freifunk-bno/htdocs/luci-static/freifunk-bno/images/header-right.gif and /dev/null differ
diff --git a/themes/luci-theme-freifunk-bno/htdocs/luci-static/freifunk-bno/images/logo.gif b/themes/luci-theme-freifunk-bno/htdocs/luci-static/freifunk-bno/images/logo.gif
deleted file mode 100644 (file)
index ff00d6d..0000000
Binary files a/themes/luci-theme-freifunk-bno/htdocs/luci-static/freifunk-bno/images/logo.gif and /dev/null differ
diff --git a/themes/luci-theme-freifunk-bno/htdocs/luci-static/freifunk-bno/images/main-back.png b/themes/luci-theme-freifunk-bno/htdocs/luci-static/freifunk-bno/images/main-back.png
deleted file mode 100644 (file)
index 34aca44..0000000
Binary files a/themes/luci-theme-freifunk-bno/htdocs/luci-static/freifunk-bno/images/main-back.png and /dev/null differ
diff --git a/themes/luci-theme-freifunk-bno/htdocs/luci-static/freifunk-bno/images/schriftzug.gif b/themes/luci-theme-freifunk-bno/htdocs/luci-static/freifunk-bno/images/schriftzug.gif
deleted file mode 100644 (file)
index 82607d5..0000000
Binary files a/themes/luci-theme-freifunk-bno/htdocs/luci-static/freifunk-bno/images/schriftzug.gif and /dev/null differ
diff --git a/themes/luci-theme-freifunk-bno/luasrc/view/themes/freifunk-bno/footer.htm b/themes/luci-theme-freifunk-bno/luasrc/view/themes/freifunk-bno/footer.htm
deleted file mode 100644 (file)
index 2dbade3..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-<%#
- Copyright 2008 Steven Barth <steven@midlink.org>
- Copyright 2008 Jo-Philipp Wich <jow@openwrt.org>
- Licensed to the public under the Apache License 2.0.
--%>
-
-               <br class="clear" />
-       </div>
-</div></div>
-</div>
-
-<div class="luci separator black whitetext bold">
-       <% local ver = require "luci.version" -%>
-       <a href="<%=controller%>/about">Powered by <%= ver.luciname %> (<%= ver.luciversion %>)</a>
-</div>
-</div><!-- end main --><div align="center" style="padding-top:5px "></div>
-<br>
-</div><!-- end wrapper -->
-
-</center>
-</div>
-
-</body>
-</html>
diff --git a/themes/luci-theme-freifunk-bno/luasrc/view/themes/freifunk-bno/header.htm b/themes/luci-theme-freifunk-bno/luasrc/view/themes/freifunk-bno/header.htm
deleted file mode 100644 (file)
index d108a08..0000000
+++ /dev/null
@@ -1,209 +0,0 @@
-<%#
- Copyright 2008 Steven Barth <steven@midlink.org>
- Copyright 2008 Jo-Philipp Wich <jow@openwrt.org>
- Licensed to the public under the Apache License 2.0.
--%>
-
-<%
-require("luci.sys")
-require("luci.util")
-
-local boardinfo = luci.util.ubus("system", "board")
-
-local request  = require("luci.dispatcher").context.path
-local category = request[1]
-local tree     = luci.dispatcher.node()
-local cattree  = category and luci.dispatcher.node(category)
-local node     = luci.dispatcher.context.dispatched
-
-local 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.http").prepare_content("text/html")
-
--%>
-
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-       <link rel="stylesheet" type="text/css" href="<%=media%>/cascade.css" />
-       <% if node and node.css then %><link rel="stylesheet" type="text/css" href="<%=resource%>/<%=node.css%>" /><% end %>
-       <% if css then %><style title="text/css">
-       <%-= css %>
-       </style>
-       <% end -%>
-       <link rel="shortcut icon" href="<%=media%>/images/favicon.ico" />
-       <meta http-equiv="content-type" content="application/xhtml+xml; charset=utf-8" />
-       <meta http-equiv="content-script-type" content="text/javascript" />
-       <script type="text/javascript" src="<%=resource%>/xhr.js"></script>
-       <title><%=striptags( (boardinfo.hostname or "?") .. ( (node and node.title) and ' - ' .. translate(node.title) or '')) %> - LuCI</title>
-
-       <!--[if lt IE 7]>
-               <script type="text/javascript">
-                       function setup_hover() {
-                               function ie_hover(e) {
-                                       e.onmouseover = function() { this.className = "hover" }
-                                       e.onmouseout  = function() { this.className = null    }
-                               }
-
-                               var lis  = document.getElementById("mainmenu").getElementsByTagName("LI");
-                               var divs = document.getElementById("mainmenu").getElementsByTagName("DIV");
-
-                               for( var i = 0; i < lis.length;  i++ ) ie_hover( lis[i]  );
-                               for( var i = 0; i < divs.length; i++ ) ie_hover( divs[i] );
-                       }
-               </script>
-       <![endif]-->
-</head>
-<body onload="window.setup_hover && setup_hover()">
-<div id="all">
-<center>
-
-<div id="wrapper">
-<%- if 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 -%>
-<div id="main">
-
-
-<div id="header">
-       <div id="headerleft">
-               <div id="headerright">
-                       <div id="headerback">
-       <div id="schriftzug"><img src="<%=media%>/images/schriftzug.gif" alt="Freifunk Nordost ueberschrift" name="Freifunk_nordost_ueberschrift" border="0"> </div>
-       <div id="logo"><img src="<%=media%>/images/logo.gif" alt="Freifunk Nordost logo" name="Freifunk_nordost" border="0"></a></div>
-       <div class="clear"></div>
-
-                       </div>
-               </div>
-       </div>
-</div>
-
-<div class="pathbar separator black whitetext bold">
-<%:Path%>: <%
-local c = tree
-local url = controller
-for k,v in pairs(request) do
-       if c.nodes and c.nodes[v] then
-               c = c.nodes[v]
-               url = url .. "/" .. v
-       %><a href="<%=url%>"><%=pcdata(striptags(translate(c.title) or v))%></a> <% if k ~= #request then %>&#187; <% end
-       end
-end
-%>
-</div>
-
-<div class="menubar">
-       <div id="mainmenu" class="mainmenu">
-<%-
-local function submenu(prefix, node)
-       if not node.nodes or node.hidden then
-               return false
-       end
-       local index = {}
-       local count = 0
-       for k, n in pairs(node.nodes) do
-               if n.title and n.target then
-                       table.insert(index, {name=k, order=n.order or 100})
-                       count = count + 1
-               end
-       end
-
-       table.sort(index, function(a, b) return a.order < b.order end)
-
-       if count > 0 then
-%>
-       <ul>
-       <%- for j, v in pairs(index) do
-               if not v.hidden and #v.name > 0 then
-                       local nnode = node.nodes[v.name]
-                       local href = controller .. prefix .. v.name
-                       href = (nnode.query) and href .. luci.http.build_querystring(nnode.query) or href
-               %>
-               <li>
-                       <span<% if nnode._menu_selected then %> class="active"<%end%>><a href="<%=pcdata(href)%>"><%=pcdata(striptags(translate(nnode.title)))%></a></span>
-                       <%- submenu(prefix .. v.name .. "/", nnode) %>
-               </li>
-               <%- end %>
-       <%- end %>
-       </ul>
-<%-
-       end
-end
-
-if cattree and cattree.nodes then
-       local index = {}
-       for k, node in pairs(cattree.nodes) do
-               table.insert(index, {name=k, order=node.order or 100})
-       end
-
-       table.sort(index, function(a, b) return a.order < b.order end)
-
-       for i, k in ipairs(index) do
-               node = cattree.nodes[k.name]
-               if not node.hidden and node.title and node.target then
-                       local href = controller.."/"..category.."/"..k.name
-                       href = (k.query) and href .. luci.http.build_querystring(k.query) or href %>
-                       <div<% if node._menu_selected then %> class="preactive"<%end%>><a href="<%=pcdata(href)%>"><%=pcdata(striptags(translate(node.title)))%></a>
-                               <%submenu("/" .. category .. "/" .. k.name .. "/", node)%>
-                       </div>
-<%             end
-       end
-end
-%>
-       </div>
-       <div class="modemenu">
-               <ul><%
-                       for k,node in pairs(tree.nodes) do
-                               if node.title and not node.hidden then %>
-                                       <li<% if request[1] == k then %> class="active"<%end%>><a href="<%=controller%>/<%=k%>"><%=pcdata(striptags(translate(node.title)))%></a></li>
-<%                             end
-                       end%>
-               </ul>
-       </div>
-
-       <%
-               if tree.nodes[category] and tree.nodes[category].ucidata then
-                       local ucic = 0
-
-                       for i, j in pairs(require("luci.model.uci").cursor():changes()) do
-                               for k, l in pairs(j) do
-                                       for m, n in pairs(l) do
-                                               ucic = ucic + 1;
-                                       end
-                               end
-                       end
-       %>
-       <div class="mainmenu" style="float:right; margin-right:2em">
-               <div>
-                       <% if ucic > 0 then %>
-                       <a class="warning" href="<%=controller%>/<%=category%>/uci/changes"><%:Unsaved Changes%>: <%=ucic%></a>
-                       <% submenu("/" .. category .. "/uci/", tree.nodes[category].nodes["uci"]) -%>
-                       <% else %>
-                       <a href="#"><%:Changes%>: 0</a>
-                       <% end %>
-               </div>
-       </div>
-       <% end %>
-
-       <br class="clear" />
-</div>
-
-<div id="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-bno/root/etc/uci-defaults/luci-theme-freifunk-bno b/themes/luci-theme-freifunk-bno/root/etc/uci-defaults/luci-theme-freifunk-bno
deleted file mode 100755 (executable)
index a19f2bb..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-#!/bin/sh
-uci batch <<-EOF
-       set luci.themes.Freifunk_BNO=/luci-static/freifunk-bno
-       set luci.main.mediaurlbase=/luci-static/freifunk-bno
-        commit luci
-EOF