Merge pull request #396 from fanthos/master
authorJo-Philipp Wich <jow@openwrt.org>
Wed, 11 Nov 2015 09:15:33 +0000 (10:15 +0100)
committerJo-Philipp Wich <jow@openwrt.org>
Wed, 11 Nov 2015 09:15:33 +0000 (10:15 +0100)
luci-app-qos: Add custom QOS classes to luci dropdown list

486 files changed:
CONTRIBUTING.md
INSTALL [deleted file]
Makefile [deleted file]
README.md
applications/luci-app-ahcp/luasrc/view/ahcp_status.htm
applications/luci-app-asterisk/Makefile
applications/luci-app-asterisk/luasrc/view/asterisk/dialplans.htm
applications/luci-app-asterisk/luasrc/view/asterisk/dialzones.htm
applications/luci-app-commands/luasrc/view/commands.htm
applications/luci-app-ddns/luasrc/controller/ddns.lua
applications/luci-app-ddns/luasrc/model/cbi/ddns/detail.lua
applications/luci-app-ddns/luasrc/model/cbi/ddns/global.lua
applications/luci-app-ddns/luasrc/model/cbi/ddns/hints.lua
applications/luci-app-ddns/luasrc/model/cbi/ddns/overview.lua
applications/luci-app-ddns/luasrc/view/ddns/detail_logview.htm
applications/luci-app-ddns/luasrc/view/ddns/overview_status.htm
applications/luci-app-ddns/luasrc/view/ddns/system_status.htm
applications/luci-app-ddns/po/ca/ddns.po
applications/luci-app-ddns/po/cs/ddns.po
applications/luci-app-ddns/po/el/ddns.po
applications/luci-app-ddns/po/en/ddns.po
applications/luci-app-ddns/po/es/ddns.po
applications/luci-app-ddns/po/fr/ddns.po
applications/luci-app-ddns/po/he/ddns.po
applications/luci-app-ddns/po/hu/ddns.po
applications/luci-app-ddns/po/it/ddns.po
applications/luci-app-ddns/po/ja/ddns.po
applications/luci-app-ddns/po/ms/ddns.po
applications/luci-app-ddns/po/no/ddns.po
applications/luci-app-ddns/po/pl/ddns.po
applications/luci-app-ddns/po/pt-br/ddns.po
applications/luci-app-ddns/po/pt/ddns.po
applications/luci-app-ddns/po/ro/ddns.po
applications/luci-app-ddns/po/ru/ddns.po
applications/luci-app-ddns/po/sk/ddns.po
applications/luci-app-ddns/po/sv/ddns.po
applications/luci-app-ddns/po/tr/ddns.po
applications/luci-app-ddns/po/uk/ddns.po
applications/luci-app-ddns/po/vi/ddns.po
applications/luci-app-ddns/po/zh-cn/ddns.po
applications/luci-app-ddns/po/zh-tw/ddns.po
applications/luci-app-diag-core/luasrc/view/diag/index.htm
applications/luci-app-diag-core/luasrc/view/diag/network_config_index.htm
applications/luci-app-diag-devinfo/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-freifunk-diagnostics/luasrc/view/freifunk/diagnostics.htm
applications/luci-app-freifunk-widgets/luasrc/view/freifunk/widgets/search/main.htm
applications/luci-app-fwknopd/luasrc/model/cbi/fwknopd.lua
applications/luci-app-fwknopd/po/en/en.po [deleted file]
applications/luci-app-fwknopd/po/en/fwknopd.po [new file with mode: 0644]
applications/luci-app-fwknopd/po/templates/fwknopd.pot
applications/luci-app-fwknopd/root/etc/uci-defaults/luci-fwknopd
applications/luci-app-ltqtapi/luasrc/view/telephony_status.htm
applications/luci-app-minidlna/luasrc/view/minidlna_status.htm
applications/luci-app-mjpg-streamer/luasrc/model/cbi/mjpg-streamer.lua
applications/luci-app-mjpg-streamer/po/templates/mjpg-streamer.pot
applications/luci-app-mjpg-streamer/po/zh-cn/mjpg-streamer.po [new file with mode: 0644]
applications/luci-app-multiwan/Makefile
applications/luci-app-multiwan/luasrc/view/multiwan_status.htm
applications/luci-app-multiwan/po/es/multiwan.po
applications/luci-app-ocserv/luasrc/controller/ocserv.lua
applications/luci-app-ocserv/luasrc/model/cbi/ocserv/main.lua
applications/luci-app-ocserv/luasrc/model/cbi/ocserv/users.lua
applications/luci-app-ocserv/luasrc/view/ocserv_status.htm
applications/luci-app-olsr-services/luasrc/view/freifunk-services/services.htm
applications/luci-app-olsr/Makefile
applications/luci-app-olsr/luasrc/controller/olsr.lua
applications/luci-app-olsr/luasrc/view/status-olsr/error_olsr.htm
applications/luci-app-olsr/luasrc/view/status-olsr/hna.htm
applications/luci-app-olsr/luasrc/view/status-olsr/interfaces.htm
applications/luci-app-olsr/luasrc/view/status-olsr/mid.htm
applications/luci-app-olsr/luasrc/view/status-olsr/neighbors.htm
applications/luci-app-olsr/luasrc/view/status-olsr/overview.htm
applications/luci-app-olsr/luasrc/view/status-olsr/routes.htm
applications/luci-app-olsr/luasrc/view/status-olsr/smartgw.htm
applications/luci-app-olsr/luasrc/view/status-olsr/topology.htm
applications/luci-app-openvpn/luasrc/model/cbi/openvpn-advanced.lua
applications/luci-app-openvpn/luasrc/view/openvpn/pageswitch.htm
applications/luci-app-polipo/luasrc/view/polipo_status.htm
applications/luci-app-privoxy/Makefile
applications/luci-app-privoxy/luasrc/controller/privoxy.lua [changed mode: 0755->0644]
applications/luci-app-privoxy/luasrc/model/cbi/privoxy.lua [changed mode: 0755->0644]
applications/luci-app-privoxy/luasrc/view/privoxy/detail_logview.htm [changed mode: 0755->0644]
applications/luci-app-privoxy/luasrc/view/privoxy/detail_startstop.htm
applications/luci-app-privoxy/po/zh-cn/privoxy.po [new file with mode: 0644]
applications/luci-app-qos/luasrc/model/cbi/qos/qos.lua
applications/luci-app-qos/po/ca/qos.po
applications/luci-app-qos/po/cs/qos.po
applications/luci-app-qos/po/de/qos.po
applications/luci-app-qos/po/el/qos.po
applications/luci-app-qos/po/en/qos.po
applications/luci-app-qos/po/es/qos.po
applications/luci-app-qos/po/fr/qos.po
applications/luci-app-qos/po/he/qos.po
applications/luci-app-qos/po/hu/qos.po
applications/luci-app-qos/po/it/qos.po
applications/luci-app-qos/po/ja/qos.po
applications/luci-app-qos/po/ms/qos.po
applications/luci-app-qos/po/no/qos.po
applications/luci-app-qos/po/pl/qos.po
applications/luci-app-qos/po/pt-br/qos.po
applications/luci-app-qos/po/pt/qos.po
applications/luci-app-qos/po/ro/qos.po
applications/luci-app-qos/po/ru/qos.po
applications/luci-app-qos/po/sk/qos.po
applications/luci-app-qos/po/sv/qos.po
applications/luci-app-qos/po/templates/qos.pot
applications/luci-app-qos/po/tr/qos.po
applications/luci-app-qos/po/uk/qos.po
applications/luci-app-qos/po/vi/qos.po
applications/luci-app-qos/po/zh-cn/qos.po
applications/luci-app-qos/po/zh-tw/qos.po
applications/luci-app-radicale/Makefile
applications/luci-app-radicale/luasrc/controller/radicale.lua [changed mode: 0755->0644]
applications/luci-app-radicale/luasrc/model/cbi/radicale.lua [changed mode: 0755->0644]
applications/luci-app-radicale/luasrc/view/radicale/btn_startstop.htm
applications/luci-app-shadowsocks-libev/Makefile [new file with mode: 0644]
applications/luci-app-shadowsocks-libev/luasrc/controller/shadowsocks-libev.lua [new file with mode: 0644]
applications/luci-app-shadowsocks-libev/luasrc/model/cbi/shadowsocks-libev.lua [new file with mode: 0644]
applications/luci-app-shadowsocks-libev/po/templates/shadowsocks-libev.pot [new file with mode: 0644]
applications/luci-app-shadowsocks-libev/po/zh-cn/shadowsocks-libev.po [new file with mode: 0644]
applications/luci-app-shadowsocks-libev/root/etc/uci-defaults/luci-shadowsocks-libev [new file with mode: 0644]
applications/luci-app-splash/htdocs/cgi-bin/splash/splash.sh
applications/luci-app-splash/luasrc/controller/splash/splash.lua
applications/luci-app-splash/luasrc/view/admin_status/splash.htm
applications/luci-app-splash/luasrc/view/splash/blocked.htm
applications/luci-app-splash/luasrc/view/splash/splash.htm
applications/luci-app-statistics/luasrc/controller/luci_statistics/luci_statistics.lua
applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/entropy.lua [new file with mode: 0644]
applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/network.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/conntrack.lua
applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/cpu.lua
applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/entropy.lua [new file with mode: 0644]
applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/interface.lua
applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/iwinfo.lua
applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/memory.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/ping.lua
applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/sensors.lua [new file with mode: 0644]
applications/luci-app-statistics/luasrc/view/admin_statistics/index.htm
applications/luci-app-statistics/luasrc/view/public_statistics/graph.htm
applications/luci-app-statistics/po/ca/statistics.po
applications/luci-app-statistics/po/cs/statistics.po
applications/luci-app-statistics/po/de/statistics.po
applications/luci-app-statistics/po/el/statistics.po
applications/luci-app-statistics/po/en/statistics.po
applications/luci-app-statistics/po/es/statistics.po
applications/luci-app-statistics/po/fr/statistics.po
applications/luci-app-statistics/po/he/statistics.po
applications/luci-app-statistics/po/hu/statistics.po
applications/luci-app-statistics/po/it/statistics.po
applications/luci-app-statistics/po/ja/statistics.po
applications/luci-app-statistics/po/ms/statistics.po
applications/luci-app-statistics/po/no/statistics.po
applications/luci-app-statistics/po/pl/statistics.po
applications/luci-app-statistics/po/pt-br/statistics.po
applications/luci-app-statistics/po/pt/statistics.po
applications/luci-app-statistics/po/ro/statistics.po
applications/luci-app-statistics/po/ru/statistics.po
applications/luci-app-statistics/po/sk/statistics.po
applications/luci-app-statistics/po/sv/statistics.po
applications/luci-app-statistics/po/templates/statistics.pot
applications/luci-app-statistics/po/tr/statistics.po
applications/luci-app-statistics/po/uk/statistics.po
applications/luci-app-statistics/po/vi/statistics.po
applications/luci-app-statistics/po/zh-cn/statistics.po
applications/luci-app-statistics/po/zh-tw/statistics.po
applications/luci-app-statistics/root/etc/config/luci_statistics
applications/luci-app-statistics/root/etc/init.d/luci_statistics
applications/luci-app-statistics/root/etc/uci-defaults/luci-statistics
applications/luci-app-statistics/root/usr/bin/stat-genconfig
applications/luci-app-tinyproxy/luasrc/view/tinyproxy_status.htm
applications/luci-app-upnp/luasrc/controller/upnp.lua
applications/luci-app-upnp/luasrc/view/upnp_status.htm
applications/luci-app-upnp/po/ca/upnp.po
applications/luci-app-upnp/po/cs/upnp.po
applications/luci-app-upnp/po/de/upnp.po
applications/luci-app-upnp/po/el/upnp.po
applications/luci-app-upnp/po/en/upnp.po
applications/luci-app-upnp/po/es/upnp.po
applications/luci-app-upnp/po/fr/upnp.po
applications/luci-app-upnp/po/he/upnp.po
applications/luci-app-upnp/po/hu/upnp.po
applications/luci-app-upnp/po/it/upnp.po
applications/luci-app-upnp/po/ja/upnp.po
applications/luci-app-upnp/po/ms/upnp.po
applications/luci-app-upnp/po/no/upnp.po
applications/luci-app-upnp/po/pl/upnp.po
applications/luci-app-upnp/po/pt-br/upnp.po
applications/luci-app-upnp/po/pt/upnp.po
applications/luci-app-upnp/po/ro/upnp.po
applications/luci-app-upnp/po/ru/upnp.po
applications/luci-app-upnp/po/sk/upnp.po
applications/luci-app-upnp/po/sv/upnp.po
applications/luci-app-upnp/po/templates/upnp.pot
applications/luci-app-upnp/po/tr/upnp.po
applications/luci-app-upnp/po/uk/upnp.po
applications/luci-app-upnp/po/vi/upnp.po
applications/luci-app-upnp/po/zh-cn/upnp.po
applications/luci-app-upnp/po/zh-tw/upnp.po
applications/luci-app-upnp/root/etc/uci-defaults/luci-upnp [deleted file]
applications/luci-app-vnstat/luasrc/view/vnstat.htm
applications/luci-app-voice-core/Makefile
applications/luci-app-voice-core/luasrc/view/luci_voice/index.htm
applications/luci-app-voice-core/luasrc/view/luci_voice/phone_index.htm
applications/luci-app-voice-diag/Makefile
applications/luci-app-voice-diag/luasrc/view/luci_voice/diag_index.htm
build/makedocs.sh
contrib/luasrcdiet/Makefile [deleted file]
contrib/luasrcdiet/lua/COPYRIGHT [deleted file]
contrib/luasrcdiet/lua/LuaSrcDiet.lua [deleted file]
contrib/luasrcdiet/lua/llex.lua [deleted file]
contrib/luasrcdiet/lua/lparser.lua [deleted file]
contrib/luasrcdiet/lua/optlex.lua [deleted file]
contrib/luasrcdiet/lua/optparser.lua [deleted file]
contrib/package/community-profiles/files/etc/config/profile_augsburg
contrib/package/community-profiles/files/etc/config/profile_bno [deleted file]
contrib/package/community-profiles/files/etc/config/profile_hameln [new file with mode: 0644]
contrib/package/community-profiles/files/etc/config/profile_reihen
contrib/package/freifunk-watchdog/src/watchdog.h
contrib/package/meshwizard/Makefile
contrib/package/meshwizard/files/usr/bin/meshwizard/functions.sh
contrib/package/meshwizard/files/usr/bin/meshwizard/helpers/read_defaults.sh
contrib/package/meshwizard/files/usr/bin/meshwizard/helpers/rename-wifi.sh
contrib/package/meshwizard/files/usr/bin/meshwizard/helpers/restore_default_config.sh [deleted file]
contrib/package/meshwizard/files/usr/bin/meshwizard/helpers/setup_dhcp.sh
contrib/package/meshwizard/files/usr/bin/meshwizard/helpers/setup_firewall.sh
contrib/package/meshwizard/files/usr/bin/meshwizard/helpers/setup_network.sh
contrib/package/meshwizard/files/usr/bin/meshwizard/helpers/setup_olsrd.sh
contrib/package/meshwizard/files/usr/bin/meshwizard/helpers/setup_splash.sh
contrib/package/meshwizard/files/usr/bin/meshwizard/wizard.sh
contrib/uci/.gitignore [deleted file]
contrib/uci/Makefile [deleted file]
contrib/uci/hostfiles/bin/uci [deleted file]
contrib/uci/hostfiles/bin/uci-defaults [deleted file]
contrib/uci/hostfiles/etc/config/batmand [deleted file]
contrib/uci/hostfiles/etc/config/ddns [deleted file]
contrib/uci/hostfiles/etc/config/dhcp [deleted file]
contrib/uci/hostfiles/etc/config/dropbear [deleted file]
contrib/uci/hostfiles/etc/config/firewall [deleted file]
contrib/uci/hostfiles/etc/config/fstab [deleted file]
contrib/uci/hostfiles/etc/config/httpd [deleted file]
contrib/uci/hostfiles/etc/config/luci_devinfo [deleted file]
contrib/uci/hostfiles/etc/config/mactodevinfo [deleted file]
contrib/uci/hostfiles/etc/config/network [deleted file]
contrib/uci/hostfiles/etc/config/ntpclient [deleted file]
contrib/uci/hostfiles/etc/config/qos [deleted file]
contrib/uci/hostfiles/etc/config/system [deleted file]
contrib/uci/hostfiles/etc/config/upnpd [deleted file]
contrib/uci/hostfiles/etc/config/wireless [deleted file]
contrib/uhttpd/Makefile [deleted file]
contrib/uhttpd/patches/001-pass-env.patch [deleted file]
contrib/uhttpd/patches/002-link-order.patch [deleted file]
contrib/uhttpd/patches/series [deleted file]
documentation/CBI.md [new file with mode: 0644]
documentation/JsonRpcHowTo.md [new file with mode: 0644]
documentation/LAR.md [new file with mode: 0644]
documentation/LMO.md [new file with mode: 0644]
documentation/LuCI-0.10.md [new file with mode: 0644]
documentation/Modules.md [new file with mode: 0644]
documentation/ModulesHowTo.md [new file with mode: 0644]
documentation/Templates.md [new file with mode: 0644]
documentation/ThemesHowTo.md [new file with mode: 0644]
documentation/api/index.html [new file with mode: 0644]
documentation/api/luadoc.css [new file with mode: 0644]
documentation/api/modules/luci.dispatcher.html [new file with mode: 0644]
documentation/api/modules/luci.http.html [new file with mode: 0644]
documentation/api/modules/luci.http.protocol.conditionals.html [new file with mode: 0644]
documentation/api/modules/luci.http.protocol.date.html [new file with mode: 0644]
documentation/api/modules/luci.http.protocol.html [new file with mode: 0644]
documentation/api/modules/luci.http.protocol.mime.html [new file with mode: 0644]
documentation/api/modules/luci.i18n.html [new file with mode: 0644]
documentation/api/modules/luci.ip.cidr.html [new file with mode: 0644]
documentation/api/modules/luci.ip.html [new file with mode: 0644]
documentation/api/modules/luci.json.html [new file with mode: 0644]
documentation/api/modules/luci.jsonc.html [new file with mode: 0644]
documentation/api/modules/luci.jsonc.parser.html [new file with mode: 0644]
documentation/api/modules/luci.model.ipkg.html [new file with mode: 0644]
documentation/api/modules/luci.model.uci.html [new file with mode: 0644]
documentation/api/modules/luci.rpcc.html [new file with mode: 0644]
documentation/api/modules/luci.rpcc.ruci.html [new file with mode: 0644]
documentation/api/modules/luci.sys.html [new file with mode: 0644]
documentation/api/modules/luci.sys.init.html [new file with mode: 0644]
documentation/api/modules/luci.sys.iptparser.html [new file with mode: 0644]
documentation/api/modules/luci.sys.net.html [new file with mode: 0644]
documentation/api/modules/luci.sys.process.html [new file with mode: 0644]
documentation/api/modules/luci.sys.user.html [new file with mode: 0644]
documentation/api/modules/luci.sys.wifi.html [new file with mode: 0644]
documentation/api/modules/luci.util.html [new file with mode: 0644]
documentation/api/modules/nixio.CHANGELOG.html [new file with mode: 0644]
documentation/api/modules/nixio.CryptoHash.html [new file with mode: 0644]
documentation/api/modules/nixio.File.html [new file with mode: 0644]
documentation/api/modules/nixio.README.html [new file with mode: 0644]
documentation/api/modules/nixio.Socket.html [new file with mode: 0644]
documentation/api/modules/nixio.TLSContext.html [new file with mode: 0644]
documentation/api/modules/nixio.TLSSocket.html [new file with mode: 0644]
documentation/api/modules/nixio.UnifiedIO.html [new file with mode: 0644]
documentation/api/modules/nixio.bin.html [new file with mode: 0644]
documentation/api/modules/nixio.bit.html [new file with mode: 0644]
documentation/api/modules/nixio.crypto.html [new file with mode: 0644]
documentation/api/modules/nixio.fs.html [new file with mode: 0644]
documentation/api/modules/nixio.html [new file with mode: 0644]
documentation/i18n.md [new file with mode: 0644]
libs/luci-lib-ip/src/ip.luadoc
libs/luci-lib-json/luasrc/json.lua
libs/luci-lib-json/luasrc/json.luadoc
libs/luci-lib-jsonc/src/jsonc.c
libs/luci-lib-nixio/src/address.c
libs/luci-lib-rpcc/luasrc/rpcc.luadoc
libs/luci-lib-rpcc/luasrc/rpcc/ruci.luadoc
luci.mk
modules/luci-base/Makefile
modules/luci-base/htdocs/luci-static/resources/cbi/edit.gif
modules/luci-base/htdocs/luci-static/resources/cbi/fieldadd.gif
modules/luci-base/htdocs/luci-static/resources/cbi/file.gif
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/loading.gif
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/luasrc/cbi.lua
modules/luci-base/luasrc/controller/admin/servicectl.lua
modules/luci-base/luasrc/dispatcher.lua
modules/luci-base/luasrc/http.lua
modules/luci-base/luasrc/http.luadoc
modules/luci-base/luasrc/http/protocol.lua
modules/luci-base/luasrc/model/ipkg.lua
modules/luci-base/luasrc/model/ipkg.luadoc
modules/luci-base/luasrc/model/network.lua
modules/luci-base/luasrc/model/uci.luadoc
modules/luci-base/luasrc/sys.lua
modules/luci-base/luasrc/sys.luadoc
modules/luci-base/luasrc/sys/zoneinfo/tzdata.lua
modules/luci-base/luasrc/sys/zoneinfo/tzoffset.lua
modules/luci-base/luasrc/tools/status.lua
modules/luci-base/luasrc/util.luadoc
modules/luci-base/luasrc/view/cbi/apply_xhr.htm
modules/luci-base/luasrc/view/cbi/browser.htm
modules/luci-base/luasrc/view/cbi/error.htm
modules/luci-base/luasrc/view/cbi/header.htm
modules/luci-base/luasrc/view/cbi/map.htm
modules/luci-base/luasrc/view/cbi/network_netlist.htm
modules/luci-base/luasrc/view/cbi/simpleform.htm
modules/luci-base/luasrc/view/cbi/value.htm
modules/luci-base/luasrc/view/csrftoken.htm [new file with mode: 0644]
modules/luci-base/luasrc/view/error404.htm
modules/luci-base/luasrc/view/error500.htm
modules/luci-base/luasrc/view/sysauth.htm
modules/luci-base/po/ca/base.po
modules/luci-base/po/cs/base.po
modules/luci-base/po/de/base.po
modules/luci-base/po/el/base.po
modules/luci-base/po/en/base.po
modules/luci-base/po/es/base.po
modules/luci-base/po/fr/base.po
modules/luci-base/po/he/base.po
modules/luci-base/po/hu/base.po
modules/luci-base/po/it/base.po
modules/luci-base/po/ja/base.po
modules/luci-base/po/ms/base.po
modules/luci-base/po/no/base.po
modules/luci-base/po/pl/base.po
modules/luci-base/po/pt-br/base.po
modules/luci-base/po/pt/base.po
modules/luci-base/po/ro/base.po
modules/luci-base/po/ru/base.po
modules/luci-base/po/sk/base.po
modules/luci-base/po/sv/base.po
modules/luci-base/po/templates/base.pot
modules/luci-base/po/tr/base.po
modules/luci-base/po/uk/base.po
modules/luci-base/po/vi/base.po
modules/luci-base/po/zh-cn/base.po
modules/luci-base/po/zh-tw/base.po
modules/luci-base/root/etc/config/luci
modules/luci-base/root/www/index.html
modules/luci-mod-admin-full/Makefile
modules/luci-mod-admin-full/luasrc/controller/admin/index.lua
modules/luci-mod-admin-full/luasrc/controller/admin/network.lua
modules/luci-mod-admin-full/luasrc/controller/admin/status.lua
modules/luci-mod-admin-full/luasrc/controller/admin/system.lua
modules/luci-mod-admin-full/luasrc/controller/admin/uci.lua
modules/luci-mod-admin-full/luasrc/model/cbi/admin_network/dhcp.lua
modules/luci-mod-admin-full/luasrc/model/cbi/admin_network/iface_add.lua
modules/luci-mod-admin-full/luasrc/model/cbi/admin_network/wifi.lua
modules/luci-mod-admin-full/luasrc/model/cbi/admin_system/fstab/mount.lua
modules/luci-mod-admin-full/luasrc/model/cbi/admin_system/ipkg.lua
modules/luci-mod-admin-full/luasrc/view/admin_network/diagnostics.htm
modules/luci-mod-admin-full/luasrc/view/admin_network/iface_overview.htm
modules/luci-mod-admin-full/luasrc/view/admin_network/iface_status.htm
modules/luci-mod-admin-full/luasrc/view/admin_network/lease_status.htm
modules/luci-mod-admin-full/luasrc/view/admin_network/switch_status.htm
modules/luci-mod-admin-full/luasrc/view/admin_network/wifi_join.htm
modules/luci-mod-admin-full/luasrc/view/admin_network/wifi_overview.htm
modules/luci-mod-admin-full/luasrc/view/admin_network/wifi_status.htm
modules/luci-mod-admin-full/luasrc/view/admin_status/bandwidth.htm
modules/luci-mod-admin-full/luasrc/view/admin_status/connections.htm
modules/luci-mod-admin-full/luasrc/view/admin_status/dmesg.htm
modules/luci-mod-admin-full/luasrc/view/admin_status/index.htm
modules/luci-mod-admin-full/luasrc/view/admin_status/iptables.htm
modules/luci-mod-admin-full/luasrc/view/admin_status/load.htm
modules/luci-mod-admin-full/luasrc/view/admin_status/routes.htm
modules/luci-mod-admin-full/luasrc/view/admin_status/syslog.htm
modules/luci-mod-admin-full/luasrc/view/admin_status/wireless.htm
modules/luci-mod-admin-full/luasrc/view/admin_system/applyreboot.htm
modules/luci-mod-admin-full/luasrc/view/admin_system/backupfiles.htm
modules/luci-mod-admin-full/luasrc/view/admin_system/clock_status.htm
modules/luci-mod-admin-full/luasrc/view/admin_system/flashops.htm
modules/luci-mod-admin-full/luasrc/view/admin_system/ipkg.htm
modules/luci-mod-admin-full/luasrc/view/admin_system/packages.htm
modules/luci-mod-admin-full/luasrc/view/admin_system/reboot.htm
modules/luci-mod-admin-full/luasrc/view/admin_system/upgrade.htm
modules/luci-mod-admin-full/luasrc/view/admin_uci/apply.htm
modules/luci-mod-admin-full/luasrc/view/admin_uci/changes.htm
modules/luci-mod-admin-full/luasrc/view/admin_uci/revert.htm
modules/luci-mod-admin-mini/luasrc/view/mini/applyreboot.htm
modules/luci-mod-admin-mini/luasrc/view/mini/backup.htm
modules/luci-mod-admin-mini/luasrc/view/mini/index.htm
modules/luci-mod-admin-mini/luasrc/view/mini/reboot.htm
modules/luci-mod-admin-mini/luasrc/view/mini/upgrade.htm
modules/luci-mod-failsafe/luasrc/controller/failsafe/failsafe.lua
modules/luci-mod-failsafe/luasrc/view/failsafe/applyreboot.htm
modules/luci-mod-failsafe/luasrc/view/failsafe/flashops.htm
modules/luci-mod-failsafe/luasrc/view/failsafe/reboot.htm
modules/luci-mod-failsafe/luasrc/view/failsafe/upgrade.htm
modules/luci-mod-freifunk/luasrc/model/cbi/freifunk/basics.lua
modules/luci-mod-freifunk/luasrc/view/freifunk-map/frame.htm
modules/luci-mod-freifunk/luasrc/view/freifunk/contact.htm
modules/luci-mod-freifunk/luasrc/view/freifunk/public_status.htm
modules/luci-mod-rpc/luasrc/controller/rpc.lua
protocols/luci-proto-ipv6/luasrc/model/cbi/admin_network/proto_map.lua
themes/luci-theme-bootstrap/luasrc/view/themes/bootstrap/header.htm
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]
themes/luci-theme-material/Makefile [new file with mode: 0755]
themes/luci-theme-material/htdocs/luci-static/material/css/style.css [new file with mode: 0755]
themes/luci-theme-material/htdocs/luci-static/material/favicon.ico [new file with mode: 0755]
themes/luci-theme-material/htdocs/luci-static/material/fonts/font.eot [new file with mode: 0644]
themes/luci-theme-material/htdocs/luci-static/material/fonts/font.svg [new file with mode: 0644]
themes/luci-theme-material/htdocs/luci-static/material/fonts/font.ttf [new file with mode: 0644]
themes/luci-theme-material/htdocs/luci-static/material/fonts/font.woff [new file with mode: 0644]
themes/luci-theme-material/htdocs/luci-static/material/js/jquery.min.js [new file with mode: 0755]
themes/luci-theme-material/htdocs/luci-static/material/js/script.js [new file with mode: 0755]
themes/luci-theme-material/htdocs/luci-static/material/logo.png [new file with mode: 0755]
themes/luci-theme-material/luasrc/view/themes/material/footer.htm [new file with mode: 0755]
themes/luci-theme-material/luasrc/view/themes/material/header.htm [new file with mode: 0755]
themes/luci-theme-material/root/etc/uci-defaults/luci-theme-material [new file with mode: 0755]

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.
diff --git a/INSTALL b/INSTALL
deleted file mode 100644 (file)
index 42cf706..0000000
--- a/INSTALL
+++ /dev/null
@@ -1,27 +0,0 @@
-LuCI Installation Instructions
-
-TOC:
-1. Kamikaze Feed
-2. Kamikaze Packages
-
-
-1. Kamikaze Feed
-       1. Change to your OpenWrt buildroot
-
-       2. Add the following line to your OpenWrt feeds.conf:
-               src-svn luci http://svn.luci.subsignal.org/luci/trunk/contrib/package
-               
-       3. Run ./scripts/feeds update
-       
-       4. Run ./scripts/feeds install -a -p luci
-       
-       5. Type make menuconfig and you will find luci in the menu "Administration"
-       
-               
-2. Kamikaze Packages
-       1.      cd to the "package" directory of your kamikaze buildroot
-       
-       3.      Type: ln -s /path/to/luci/contrib/package/* ./
-       
-       4.      cd to your kamikaze build root and type: make menuconfig
-               You will find luci in the menu "Administration"
diff --git a/Makefile b/Makefile
deleted file mode 100644 (file)
index 70a7e92..0000000
--- a/Makefile
+++ /dev/null
@@ -1,99 +0,0 @@
-include build/config.mk
-
-MODULES = contrib/* applications/* libs/* modules/* themes/* i18n/*
-
-OS:=$(shell uname)
-MODULES:=$(foreach item,$(wildcard $(MODULES)),$(if $(realpath $(wildcard $(item)/Makefile)),$(item)))
-
-export OS
-
-.PHONY: all build gccbuild luabuild clean host gcchost luahost hostcopy hostclean
-
-all: build
-
-build: gccbuild luabuild
-
-gccbuild:
-       make -C modules/base CC="cc" CFLAGS="" LDFLAGS="" SDK="$(shell test -f .running-sdk && echo 1)" host-install
-       for i in $(MODULES); do \
-               make -C$$i SDK="$(shell test -f .running-sdk && echo 1)" compile || { \
-                       echo "*** Compilation of $$i failed!"; \
-                       exit 1; \
-               }; \
-       done
-
-luabuild: i18nbuild
-       for i in $(MODULES); do HOST=$(realpath host) \
-               SDK="$(shell test -f .running-sdk && echo 1)" make -C$$i luabuild; done
-
-i18nbuild:
-       mkdir -p host/lua-po
-       ./build/i18n-po2lua.pl ./po host/lua-po
-
-clean:
-       rm -f .running-sdk
-       rm -rf docs
-       make -C modules/base host-clean
-       for i in $(MODULES); do make -C$$i clean; done
-
-
-host: build hostcopy
-
-gcchost: gccbuild hostcopy
-
-luahost: luabuild hostcopy
-
-hostcopy: 
-       mkdir -p host/tmp
-       mkdir -p host/var/state
-       for i in $(MODULES); do cp -pR $$i/dist/* host/ 2>/dev/null || true; done
-       for i in $(MODULES); do cp -pR $$i/hostfiles/* host/ 2>/dev/null || true; done
-       rm -f host/luci
-       ln -s .$(LUCI_MODULEDIR) host/luci
-       rm -rf /tmp/luci-* || true
-
-hostenv: sdk host ucidefaults
-
-sdk:
-       touch .running-sdk
-
-ucidefaults:
-       build/hostenv.sh $(realpath host) $(LUA_MODULEDIR) $(LUA_LIBRARYDIR) "$(realpath host)/bin/uci-defaults --exclude luci-freifunk-*"
-
-runuhttpd: hostenv
-       cp $(realpath build)/luci.cgi $(realpath host)/www/cgi-bin/luci
-       build/hostenv.sh $(realpath host) $(LUA_MODULEDIR) $(LUA_LIBRARYDIR) "$(realpath host)/usr/sbin/uhttpd -p 8080 -h $(realpath host)/www -f"
-
-runlua: hostenv
-       build/hostenv.sh $(realpath host) $(LUA_MODULEDIR) $(LUA_LIBRARYDIR) "lua -i build/setup.lua"
-
-runshell: hostenv
-       build/hostenv.sh $(realpath host) $(LUA_MODULEDIR) $(LUA_LIBRARYDIR) $$SHELL
-
-hostclean: clean
-       rm -rf host
-
-apidocs: hostenv
-       build/hostenv.sh $(realpath host) $(LUA_MODULEDIR) $(LUA_LIBRARYDIR) "build/makedocs.sh host/luci/ docs"
-
-nixiodocs: hostenv
-       build/hostenv.sh $(realpath host) $(LUA_MODULEDIR) $(LUA_LIBRARYDIR) "build/makedocs.sh libs/nixio/ nixiodocs"
-
-po: host
-       for L in $${LANGUAGE:-$$(find i18n/ -path 'i18n/*/luasrc/i18n/*' -name 'default.*.lua' | \
-         sed -e 's!.*/default\.\(.*\)\.lua!\1!')}; do \
-           build/i18n-lua2po.pl . $(realpath host)/po $$L; \
-       done
-
-run:
-       #       make run is deprecated                          #
-       #       Please use:                                     #
-       #                                                       #
-       #       To run LuCI WebUI using uhttpd                  #
-       #       make runuhttpd                                  #
-       #                                                       #
-       #       To start a shell in the LuCI environment        #
-       #       make runshell                                   #
-       #                                                       #
-       #       To run Lua CLI in the LuCI environment          #
-       #       make runlua                                     #
index d5ad6b4..abccff6 100644 (file)
--- a/README.md
+++ b/README.md
@@ -6,12 +6,21 @@ This is the OpenWrt "luci"-feed containing LuCI - OpenWrt Configuration Interfac
 
 ## Usage
 
-This feed is enabled by default. To install all its package definitions, run:
+This feed is enabled by default. Your feeds.conf.default (or feeds.conf) should contain a line like:
+```
+src-git luci https://github.com/openwrt/luci.git
+```
+
+To install all its package definitions, run:
 ```
 ./scripts/feeds update luci
 ./scripts/feeds install -a -p luci
 ```
 
+## API Reference
+
+You can browse the generated API documentation [directly on Github](http://htmlpreview.github.io/?http://raw.githubusercontent.com/openwrt/luci/master/documentation/api/index.html).
+
 ## License
 
 See [LICENSE](LICENSE) file.
index 88796cb..9468289 100644 (file)
@@ -1,5 +1,5 @@
 <script type="text/javascript">//<![CDATA[
-       XHR.poll(5, '<%=luci.dispatcher.build_url("admin", "network", "ahcpd", "status")%>', null,
+       XHR.poll(5, '<%=url('admin/network/ahcpd/status')%>', null,
                function(x, st)
                {
                        var tb = document.getElementById('ahcpd_status_table');
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 70f986c..9f644ba 100644 (file)
@@ -56,7 +56,7 @@
 %>
 
 
-<form method="post" action="<%=luci.dispatcher.build_url("admin", "asterisk", "dialplans")%>" enctype="multipart/form-data">
+<form method="post" action="<%=url('admin/asterisk/dialplans')%>" enctype="multipart/form-data">
        <div>
                <script type="text/javascript" src="/luci-static/resources/cbi.js"></script>
                <input type="hidden" name="cbi.submit" value="1" />
        </div>
 
 <div class="cbi-map" id="cbi-asterisk">
-       <h2><a id="content" name="content">Outgoing Call Routing</a></h2>
+       <h2 name="content">Outgoing Call Routing</h2>
        <div class="cbi-map-descr">
                Here you can manage your dial plans which are used to route outgoing calls from your local extensions.<br /><br />
                Related tasks:<br />
-               <a href="<%=luci.dispatcher.build_url('admin/asterisk/dialplans/zones')%>" class="cbi-title-ref">Manage dialzones</a> |
-               <a href="<%=luci.dispatcher.build_url('admin/asterisk/voicemail/mailboxes')%>" class="cbi-title-ref">Manage voicemail boxes</a> |
-               <a href="<%=luci.dispatcher.build_url('admin/asterisk/meetme/rooms')%>" class="cbi-title-ref">Manage meetme rooms</a>
+               <a href="<%=url('admin/asterisk/dialplans/zones')%>" class="cbi-title-ref">Manage dialzones</a> |
+               <a href="<%=url('admin/asterisk/voicemail/mailboxes')%>" class="cbi-title-ref">Manage voicemail boxes</a> |
+               <a href="<%=url('admin/asterisk/meetme/rooms')%>" class="cbi-title-ref">Manage meetme rooms</a>
        </div>
        <!-- tblsection -->
        <fieldset class="cbi-section" id="cbi-asterisk-sip">
@@ -85,7 +85,7 @@
                                                <big>Dialplan <em><%=plan.name%></em></big>
                                        </th>
                                        <td>
-                                               <a href="<%=luci.dispatcher.build_url('admin', 'asterisk', 'dialplans')%>?delplan=<%=plan.name%>">
+                                               <a href="<%=url('admin/asterisk/dialplans')%>?delplan=<%=plan.name%>">
                                                        <img style="border:none" alt="Remove this dialplan" title="Remove this dialplan" src="/luci-static/resources/cbi/remove.gif" />
                                                </a>
                                        </td>
                                                </p>
                                        </td>
                                        <td style="width:5%" class="cbi-value-field">
-                                               <a href="<%=luci.dispatcher.build_url('admin/asterisk/dialplans/out', zone.name)%>">
+                                               <a href="<%=url('admin/asterisk/dialplans/out', zone.name)%>">
                                                        <img style="border:none" alt="Edit dialzone" title="Edit dialzone" src="/luci-static/resources/cbi/edit.gif" />
                                                </a>
-                                               <a href="<%=luci.dispatcher.build_url('admin/asterisk/dialplans')%>?delzone.<%=plan.name%>=<%=zone.name%>">
+                                               <a href="<%=url('admin/asterisk/dialplans')%>?delzone.<%=plan.name%>=<%=zone.name%>">
                                                        <img style="border:none" alt="Remove from this dialplan" title="Remove from this dialplan" src="/luci-static/resources/cbi/remove.gif" />
                                                </a>
                                        </td>
                                                </p>
                                        </td>
                                        <td style="width:5%" class="cbi-value-field">
-                                               <a href="<%=luci.dispatcher.build_url('admin/asterisk/voicemail/mailboxes')%>">
+                                               <a href="<%=url('admin/asterisk/voicemail/mailboxes')%>">
                                                        <img style="border:none" alt="Manage mailboxes ..." title="Manage mailboxes ..." src="/luci-static/resources/cbi/edit.gif" />
                                                </a>
-                                               <a href="<%=luci.dispatcher.build_url('admin/asterisk/dialplans')%>?delvbox.<%=plan.name%>=<%=ext%>">
+                                               <a href="<%=url('admin/asterisk/dialplans')%>?delvbox.<%=plan.name%>=<%=ext%>">
                                                        <img style="border:none" alt="Remove from this dialplan" title="Remove from this dialplan" src="/luci-static/resources/cbi/remove.gif" />
                                                </a>
                                        </td>
                                                </p>
                                        </td>
                                        <td style="width:5%" class="cbi-value-field">
-                                               <a href="<%=luci.dispatcher.build_url('admin/asterisk/meetme/rooms')%>">
+                                               <a href="<%=url('admin/asterisk/meetme/rooms')%>">
                                                        <img style="border:none" alt="Manage conferences ..." title="Manage conferences ..." src="/luci-static/resources/cbi/edit.gif" />
                                                </a>
-                                               <a href="<%=luci.dispatcher.build_url('admin/asterisk/dialplans')%>?delmeetme.<%=plan.name%>=<%=ext%>">
+                                               <a href="<%=url('admin/asterisk/dialplans')%>?delmeetme.<%=plan.name%>=<%=ext%>">
                                                        <img style="border:none" alt="Remove from this dialplan" title="Remove from this dialplan" src="/luci-static/resources/cbi/remove.gif" />
                                                </a>
                                        </td>
index ac52791..ffdbbcf 100644 (file)
@@ -47,7 +47,7 @@
 %>
 
 
-<form method="post" action="<%=luci.dispatcher.build_url("admin", "asterisk", "dialplans", "zones")%>" enctype="multipart/form-data">
+<form method="post" action="<%=url('admin/asterisk/dialplans/zones')%>" enctype="multipart/form-data">
        <div>
                <script type="text/javascript" src="/luci-static/resources/cbi.js"></script>
                <input type="hidden" name="cbi.submit" value="1" />
@@ -55,9 +55,9 @@
        </div>
 
 <div class="cbi-map" id="cbi-asterisk">
-       <h2><a id="content" name="content">Dial Zone Management</a></h2>
+       <h2 name="content">Dial Zone Management</h2>
        <div class="cbi-map-descr">
-               <a href="<%=luci.dispatcher.build_url("admin/asterisk/dialplans")%>" class="cbi-title-ref">Back to dialplan overview</a><br /><br />
+               <a href="<%=url("admin/asterisk/dialplans")%>" class="cbi-title-ref">Back to dialplan overview</a><br /><br />
                Here you can manage your dial zones. The zones are used to route outgoing calls to the destination.
                Each zone groups multiple trunks and number matches to represent a logical destination. Zones can
                also be used to enforce certain dial restrictions on selected extensions.
                                                <%=rule.description or rule.name%>
                                        </td>
                                        <td style="text-align:left" class="cbi-value-field">
-                                               <a href="<%=luci.dispatcher.build_url('admin', 'asterisk', 'dialplans', 'out', rule.name)%>">
+                                               <a href="<%=url('admin/asterisk/dialplans/out', rule.name)%>">
                                                        <img style="border:none" alt="Edit entry" title="Edit entry" src="/luci-static/resources/cbi/edit.gif" />
                                                </a>
-                                               <a href="<%=luci.dispatcher.build_url('admin', 'asterisk', 'dialplans', 'zones')%>?delzone=<%=rule.name%>">
+                                               <a href="<%=url('admin/asterisk/dialplans/zones')%>?delzone=<%=rule.name%>">
                                                        <img style="border:none" alt="Delete entry" title="Delete entry" src="/luci-static/resources/cbi/remove.gif" />
                                                </a>
                                        </td>
index 72f1e1d..73b9e6a 100644 (file)
@@ -58,7 +58,7 @@
                        legend.parentNode.style.display = 'block';
                        legend.style.display = 'inline';
 
-                       stxhr.get('<%=luci.dispatcher.build_url("admin", "system", "commands", "run")%>/' + id + (args ? '/' + args : ''), null,
+                       stxhr.get('<%=url('admin/system/commands/run')%>/' + id + (args ? '/' + args : ''), null,
                                function(x, st)
                                {
                                        if (st)
@@ -93,7 +93,7 @@
                if (field)
                        args = encodeURIComponent(field.value);
 
-               location.href = '<%=luci.dispatcher.build_url("admin", "system", "commands", "download")%>/' + id + (args ? '/' + args : '');
+               location.href = '<%=url('admin/system/commands/download')%>/' + id + (args ? '/' + args : '');
        }
 
        function command_link(id)
 
 <form method="get" action="<%=pcdata(luci.http.getenv("REQUEST_URI"))%>">
        <div class="cbi-map">
-               <h2><a id="content" name="content"><%:Custom Commands%></a></h2>
+               <h2 name="content"><%:Custom Commands%></h2>
 
                <fieldset class="cbi-section">
                        <% local _, command; for _, command in ipairs(commands) do %>
index 946dfef..4fbd3c3 100644 (file)
@@ -38,7 +38,7 @@ function index()
                {hideapplybtn=true, hidesavebtn=true, hideresetbtn=true}), nil ).leaf = true
        entry( {"admin", "services", "ddns", "global"}, cbi("ddns/global"), nil ).leaf = true
        entry( {"admin", "services", "ddns", "logview"}, call("logread") ).leaf = true
-       entry( {"admin", "services", "ddns", "startstop"}, call("startstop") ).leaf = true
+       entry( {"admin", "services", "ddns", "startstop"}, post("startstop") ).leaf = true
        entry( {"admin", "services", "ddns", "status"}, call("status") ).leaf = true
 end
 
index 27f9a9f..e655ce5 100644 (file)
@@ -108,9 +108,8 @@ end
 -- cbi-map definition -- #######################################################
 m = Map("ddns")
 
--- first need to close <a> from cbi map template our <a> closed by template
-m.title = [[</a><a href="]] .. DISP.build_url("admin", "services", "ddns") .. [[">]] ..
-               translate("Dynamic DNS")
+m.title = [[<a href="]] .. DISP.build_url("admin", "services", "ddns") .. [[">]] ..
+               translate("Dynamic DNS") .. [[</a>]]
 
 m.description = translate("Dynamic DNS allows that your router can be reached with " ..
                        "a fixed hostname while having a dynamically changing " ..
index fbd3cb3..25d09b7 100644 (file)
@@ -10,9 +10,8 @@ local DDNS = require "luci.tools.ddns"                -- ddns multiused functions
 -- cbi-map definition -- #######################################################
 local m = Map("ddns")
 
--- first need to close <a> from cbi map template our <a> closed by template
-m.title = [[</a><a href="]] .. DISP.build_url("admin", "services", "ddns") .. [[">]] 
-       .. translate("Dynamic DNS")
+m.title = [[<a href="]] .. DISP.build_url("admin", "services", "ddns") .. [[">]] 
+       .. translate("Dynamic DNS") .. [[</a>]]
 
 m.description = translate("Dynamic DNS allows that your router can be reached with " ..
                        "a fixed hostname while having a dynamically changing IP address.")
index ff7aa7a..2a65fd0 100644 (file)
@@ -23,9 +23,8 @@ bold_off = [[</strong>]]
 -- cbi-map definition -- #######################################################
 m = Map("ddns")
 
--- first need to close <a> from cbi map template our <a> closed by template
-m.title = [[</a><a href="]] .. DISP.build_url("admin", "services", "ddns") .. [[">]] ..
-               translate("Dynamic DNS")
+m.title = [[<a href="]] .. DISP.build_url("admin", "services", "ddns") .. [[">]] ..
+               translate("Dynamic DNS") .. [[</a>]]
 
 m.description = translate("Dynamic DNS allows that your router can be reached with " ..
                        "a fixed hostname while having a dynamically changing " ..
index 9e8df2d..5b5925b 100644 (file)
@@ -26,8 +26,7 @@ bold_off = [[</strong>]]
 -- cbi-map definition -- #######################################################
 m = Map("ddns")
 
--- first need to close <a> from cbi map template our <a> closed by template
-m.title        = [[</a><a href="javascript:alert(']]
+m.title        = [[<a href="javascript:alert(']]
                .. translate("Version Information")
                .. [[\n\nluci-app-ddns]]
                .. [[\n\t]] .. translate("Version") .. [[:\t]] .. DDNS.ipkg_ver_installed("luci-app-ddns")
@@ -37,7 +36,7 @@ m.title       = [[</a><a href="javascript:alert(']]
                .. [[\n\t]] .. translate("Version") .. [[:\t]] .. DDNS.ipkg_ver_installed("ddns-scripts")
                .. [[\n\n]]
        .. [[')">]]
-       .. translate("Dynamic DNS")
+       .. translate("Dynamic DNS") .. [[</a>]]
 
 m.description = translate("Dynamic DNS allows that your router can be reached with " ..
                        "a fixed hostname while having a dynamically changing " ..
index 494b743..4dcb7bb 100644 (file)
@@ -6,7 +6,7 @@
                var txt = document.getElementById("cbid.ddns." + section + "._logview.txt");    // TextArea
                if ( !txt ) { return; } // security check
 
-               XHR.get('<%=luci.dispatcher.build_url("admin", "services", "ddns", "logview")%>/' + section, null,
+               XHR.get('<%=url('admin/services/ddns/logview')%>/' + section, null,
                        function(x) {
                                if (x.responseText == "_nodata_")
                                        txt.value = "<%:File not found or empty%>";
index ea8e4a1..b6d4ebb 100644 (file)
 
                // do start/stop
                var btnXHR = new XHR();
-               btnXHR.get('<%=luci.dispatcher.build_url("admin", "services", "ddns", "startstop")%>/' + section + '/' + cbx.checked, null,
+               btnXHR.post('<%=url('admin/services/ddns/startstop')%>/' + section + '/' + cbx.checked, { token: '<%=token%>' },
                        function(x, data) {
                                if (x.responseText == "_uncommitted_") {
                                        // we need a trick to display Ampersand "&" in stead of "&#38;" or "&amp;"
        }
 
        // force to immediate show status on page load (not waiting for XHR.poll)
-       XHR.get('<%=luci.dispatcher.build_url("admin", "services", "ddns", "status")%>', null,
+       XHR.get('<%=url('admin/services/ddns/status')%>', null,
                function(x, data) {
                        if (data) { _data2elements(data); }
                }
        // define only ONE XHR.poll in a page because if one is running it blocks the other one
        // optimum is to define on Map or Section Level from here you can reach all elements
        // we need update every 15 seconds only
-       XHR.poll(15, '<%=luci.dispatcher.build_url("admin", "services", "ddns", "status")%>', null,
+       XHR.poll(15, '<%=url('admin/services/ddns/status')%>', null,
                function(x, data) {
                        if (data) { _data2elements(data); }
                }
index 4ca0abb..06dca48 100644 (file)
        }
 
        // force to immediate show status (not waiting for XHR.poll)
-       XHR.get('<%=luci.dispatcher.build_url("admin", "services", "ddns", "status")%>', null,
+       XHR.get('<%=url('admin/services/ddns/status')%>', null,
                function(x, data) {
                        if (data) { _data2elements(x, data); }
                }
        );
 
-       XHR.poll(5, '<%=luci.dispatcher.build_url("admin", "services", "ddns", "status")%>', null,
+       XHR.poll(5, '<%=url('admin/services/ddns/status')%>', null,
                function(x, data) {
                        if (data) { _data2elements(x, data); }
                }
 //]]></script>
 
 <fieldset class="cbi-section" id="ddns_status_section">
-       <legend><a href="<%=luci.dispatcher.build_url([[admin]], [[services]], [[ddns]])%>"><%:Dynamic DNS%></a></legend>
+       <legend><a href="<%=url([[admin]], [[services]], [[ddns]])%>"><%:Dynamic DNS%></a></legend>
 
        <table class="cbi-section-table" id="ddns_status_table">
                <tr class="cbi-section-table-titles">
index 35f13eb..c57b689 100644 (file)
@@ -462,6 +462,9 @@ msgid ""
 "settings."
 msgstr ""
 
+msgid "The default setting of '0' will retry infinite."
+msgstr ""
+
 msgid "There is no service configured."
 msgstr ""
 
index 455c72a..e957d58 100644 (file)
@@ -460,6 +460,9 @@ msgid ""
 "settings."
 msgstr ""
 
+msgid "The default setting of '0' will retry infinite."
+msgstr ""
+
 msgid "There is no service configured."
 msgstr ""
 
index edbe19d..821e17e 100644 (file)
@@ -459,6 +459,9 @@ msgid ""
 "settings."
 msgstr ""
 
+msgid "The default setting of '0' will retry infinite."
+msgstr ""
+
 msgid "There is no service configured."
 msgstr ""
 
index b706fa2..a6ba0bb 100644 (file)
@@ -457,6 +457,9 @@ msgid ""
 "settings."
 msgstr ""
 
+msgid "The default setting of '0' will retry infinite."
+msgstr ""
+
 msgid "There is no service configured."
 msgstr ""
 
index 1948155..ebee43d 100644 (file)
@@ -458,6 +458,9 @@ msgid ""
 "settings."
 msgstr ""
 
+msgid "The default setting of '0' will retry infinite."
+msgstr ""
+
 msgid "There is no service configured."
 msgstr ""
 
index 94b61b6..84e86a9 100644 (file)
@@ -458,6 +458,9 @@ msgid ""
 "settings."
 msgstr ""
 
+msgid "The default setting of '0' will retry infinite."
+msgstr ""
+
 msgid "There is no service configured."
 msgstr ""
 
index a6d2030..45f5a6d 100644 (file)
@@ -461,6 +461,9 @@ msgid ""
 "settings."
 msgstr ""
 
+msgid "The default setting of '0' will retry infinite."
+msgstr ""
+
 msgid "There is no service configured."
 msgstr ""
 
index fdd9a17..20388d3 100644 (file)
@@ -460,6 +460,9 @@ msgid ""
 "settings."
 msgstr ""
 
+msgid "The default setting of '0' will retry infinite."
+msgstr ""
+
 msgid "There is no service configured."
 msgstr ""
 
index 48e6809..77ebfb7 100644 (file)
@@ -458,6 +458,9 @@ msgid ""
 "settings."
 msgstr ""
 
+msgid "The default setting of '0' will retry infinite."
+msgstr ""
+
 msgid "There is no service configured."
 msgstr ""
 
index 488bac9..1b608aa 100644 (file)
@@ -458,6 +458,9 @@ msgid ""
 "settings."
 msgstr ""
 
+msgid "The default setting of '0' will retry infinite."
+msgstr ""
+
 msgid "There is no service configured."
 msgstr ""
 
index 5b7f0de..ea11b9e 100644 (file)
@@ -456,6 +456,9 @@ msgid ""
 "settings."
 msgstr ""
 
+msgid "The default setting of '0' will retry infinite."
+msgstr ""
+
 msgid "There is no service configured."
 msgstr ""
 
index b805aa4..80374ee 100644 (file)
@@ -449,6 +449,9 @@ msgid ""
 "settings."
 msgstr ""
 
+msgid "The default setting of '0' will retry infinite."
+msgstr ""
+
 msgid "There is no service configured."
 msgstr ""
 
index e016cc4..9907b1e 100644 (file)
@@ -459,6 +459,9 @@ msgid ""
 "settings."
 msgstr ""
 
+msgid "The default setting of '0' will retry infinite."
+msgstr ""
+
 msgid "There is no service configured."
 msgstr ""
 
index df2fff5..5dd243f 100644 (file)
@@ -458,6 +458,9 @@ msgid ""
 "settings."
 msgstr ""
 
+msgid "The default setting of '0' will retry infinite."
+msgstr ""
+
 msgid "There is no service configured."
 msgstr ""
 
index 5765492..a788ad2 100644 (file)
@@ -460,6 +460,9 @@ msgid ""
 "settings."
 msgstr ""
 
+msgid "The default setting of '0' will retry infinite."
+msgstr ""
+
 msgid "There is no service configured."
 msgstr ""
 
index 78c39d5..f32c6e9 100644 (file)
@@ -461,6 +461,9 @@ msgid ""
 "settings."
 msgstr ""
 
+msgid "The default setting of '0' will retry infinite."
+msgstr ""
+
 msgid "There is no service configured."
 msgstr ""
 
index d4c0eb4..e76cda6 100644 (file)
@@ -460,6 +460,9 @@ msgid ""
 "settings."
 msgstr ""
 
+msgid "The default setting of '0' will retry infinite."
+msgstr ""
+
 msgid "There is no service configured."
 msgstr ""
 
index 3cd0f4c..45e6632 100644 (file)
@@ -451,6 +451,9 @@ msgid ""
 "settings."
 msgstr ""
 
+msgid "The default setting of '0' will retry infinite."
+msgstr ""
+
 msgid "There is no service configured."
 msgstr ""
 
index cee36e7..c3b7c56 100644 (file)
@@ -452,6 +452,9 @@ msgid ""
 "settings."
 msgstr ""
 
+msgid "The default setting of '0' will retry infinite."
+msgstr ""
+
 msgid "There is no service configured."
 msgstr ""
 
index 10492bc..74be14a 100644 (file)
@@ -458,6 +458,9 @@ msgid ""
 "settings."
 msgstr ""
 
+msgid "The default setting of '0' will retry infinite."
+msgstr ""
+
 msgid "There is no service configured."
 msgstr ""
 
index 0e2c580..58ded21 100644 (file)
@@ -461,6 +461,9 @@ msgid ""
 "settings."
 msgstr ""
 
+msgid "The default setting of '0' will retry infinite."
+msgstr ""
+
 msgid "There is no service configured."
 msgstr ""
 
index 5d5a7ed..4b0cc91 100644 (file)
@@ -461,6 +461,9 @@ msgid ""
 "settings."
 msgstr ""
 
+msgid "The default setting of '0' will retry infinite."
+msgstr ""
+
 msgid "There is no service configured."
 msgstr ""
 
index 862c2a0..381e668 100644 (file)
@@ -12,6 +12,9 @@ msgstr ""
 "Plural-Forms: nplurals=1; plural=0;\n"
 "X-Generator: Poedit 1.7.5\n"
 
+msgid "&"
+msgstr ""
+
 msgid "-- custom --"
 msgstr "-- 自定义 --"
 
@@ -30,10 +33,13 @@ msgstr "正在应用更改"
 msgid "Basic Settings"
 msgstr "基础设置"
 
-msgid "Below a list of configuration tips for your system to run Dynamic DNS updates without limitations"
+msgid ""
+"Below a list of configuration tips for your system to run Dynamic DNS "
+"updates without limitations"
 msgstr "以下是一个能够让你的系统不受限制地进行动态DNS更新的设置贴士."
 
-msgid "Below is a list of configured DDNS configurations and their current state."
+msgid ""
+"Below is a list of configured DDNS configurations and their current state."
 msgstr "一下是当前已经配置好的DDNS设置项列表以及它们的当前状态."
 
 msgid "Bind Network"
@@ -42,10 +48,14 @@ msgstr "使用的接口"
 msgid "Binding to a specific network not supported"
 msgstr "不支持绑定到一个指定的网络"
 
-msgid "BusyBox's nslookup and Wget do not support to specify the IP version to use for communication with DDNS Provider."
+msgid ""
+"BusyBox's nslookup and Wget do not support to specify the IP version to use "
+"for communication with DDNS Provider."
 msgstr "与DDNS供应商通讯时BusyBox的nslookup和Wget不支持设置特定的IP协议版本."
 
-msgid "BusyBox's nslookup does not support to specify to use TCP instead of default UDP when requesting DNS server"
+msgid ""
+"BusyBox's nslookup does not support to specify to use TCP instead of default "
+"UDP when requesting DNS server"
 msgstr "BusyBox的nslookup不支持使用TCP协议代替UDP协议请求DNS记录"
 
 msgid "Casual users should not change this setting"
@@ -63,7 +73,9 @@ msgstr "配置错误"
 msgid "Configuration"
 msgstr "设置"
 
-msgid "Configure here the details for all Dynamic DNS services including this LuCI application."
+msgid ""
+"Configure here the details for all Dynamic DNS services including this LuCI "
+"application."
 msgstr "在这里修改动态DNS服务的详细配置"
 
 msgid "Configure here the details for selected Dynamic DNS service."
@@ -72,11 +84,20 @@ msgstr "在这里修改选择的DDNS服务的详细配置"
 msgid "Current setting"
 msgstr "当前设置"
 
-msgid "Currently DDNS updates are not started at boot or on interface events.<br />This is the default if you run DDNS scripts by yourself (i.e. via cron with force_interval set to '0')"
-msgstr "现在,DDNS更新在开机或者接口动作时不会被触发<br />如果你手工运行DDNS脚本的话(例如使用cron时把force_interval设置为0),这是默认设置."
+msgid ""
+"Currently DDNS updates are not started at boot or on interface events.<br /"
+">This is the default if you run DDNS scripts by yourself (i.e. via cron with "
+"force_interval set to '0')"
+msgstr ""
+"现在,DDNS更新在开机或者接口动作时不会被触发<br />如果你手工运行DDNS脚本的话"
+"(例如使用cron时把force_interval设置为0),这是默认设置."
 
-msgid "Currently DDNS updates are not started at boot or on interface events.<br />You can start/stop each configuration here. It will run until next reboot."
-msgstr "现在,DDNS更新在开机或者接口动作时不会被触发<br />你可以在这里开始/停止每一个设置的条目.它在下次重启之前一直有效."
+msgid ""
+"Currently DDNS updates are not started at boot or on interface events.<br /"
+">You can start/stop each configuration here. It will run until next reboot."
+msgstr ""
+"现在,DDNS更新在开机或者接口动作时不会被触发<br />你可以在这里开始/停止每一个"
+"设置的条目.它在下次重启之前一直有效."
 
 msgid "Custom update script to be used for updating your DDNS Provider."
 msgstr "用来更新动态DNS的自定义脚本"
@@ -117,10 +138,14 @@ msgstr "设定用来读取系统IPv4地址的网络"
 msgid "Defines the network to read systems IPv6-Address from"
 msgstr "设定用来读取系统IPv6地址的网络"
 
-msgid "Defines the source to read systems IPv4-Address from, that will be send to the DDNS provider"
+msgid ""
+"Defines the source to read systems IPv4-Address from, that will be send to "
+"the DDNS provider"
 msgstr "设定IPv4地址的来源.这将会被发送给DDNS提供商"
 
-msgid "Defines the source to read systems IPv6-Address from, that will be send to the DDNS provider"
+msgid ""
+"Defines the source to read systems IPv6-Address from, that will be send to "
+"the DDNS provider"
 msgstr "设定IPv6地址的来源.这将会被发送给DDNS提供商"
 
 msgid "Defines which IP address 'IPv4/IPv6' is send to the DDNS provider"
@@ -132,7 +157,8 @@ msgstr "详情:"
 msgid "Directory contains Log files for each running section"
 msgstr "保存每一个运行中的设置的运行日志的目录"
 
-msgid "Directory contains PID and other status information for each running section"
+msgid ""
+"Directory contains PID and other status information for each running section"
 msgstr "保存每个运行中的设置的PID以及其它状态信息的目录"
 
 msgid "Disabled"
@@ -141,7 +167,9 @@ msgstr "已禁用"
 msgid "Dynamic DNS"
 msgstr "动态DNS"
 
-msgid "Dynamic DNS allows that your router can be reached with a fixed hostname while having a dynamically changing IP address."
+msgid ""
+"Dynamic DNS allows that your router can be reached with a fixed hostname "
+"while having a dynamically changing IP address."
 msgstr "动态DNS允许为拥有动态IP的主机配置一个固定的可访问域名."
 
 msgid "Enable secure communication with DDNS provider"
@@ -171,8 +199,12 @@ msgstr "文件未找到"
 msgid "File not found or empty"
 msgstr "文件未找到或为空"
 
-msgid "Follow this link<br />You will find more hints to optimize your system to run DDNS scripts with all options"
-msgstr "打开这个链接<br />你将会得到更多关于如何通过所有设置项优化你的系统以运行DDNS脚本的提示."
+msgid ""
+"Follow this link<br />You will find more hints to optimize your system to "
+"run DDNS scripts with all options"
+msgstr ""
+"打开这个链接<br />你将会得到更多关于如何通过所有设置项优化你的系统以运行DDNS"
+"脚本的提示."
 
 msgid "For detailed information about parameter settings look here."
 msgstr "请看这里获得关于参数设置的详细信息"
@@ -201,7 +233,9 @@ msgstr "格式"
 msgid "Format: IP or FQDN"
 msgstr "格式:IP或者FQDN"
 
-msgid "GNU Wget will use the IP of given network, cURL will use the physical interface."
+msgid ""
+"GNU Wget will use the IP of given network, cURL will use the physical "
+"interface."
 msgstr "GNU Wget将会使用给定的网络的IP地址,而cURL将会使用物理接口"
 
 msgid "Global Settings"
@@ -228,8 +262,13 @@ msgstr "IPv4地址"
 msgid "IPv6 address must be given in square brackets"
 msgstr "IPv6地址必须填写在中括号(\"[  ]\")内"
 
-msgid "IPv6 is currently not (fully) supported by this system<br />Please follow the instructions on OpenWrt's homepage to enable IPv6 support<br />or update your system to the latest OpenWrt Release"
-msgstr "当前系统暂时不能(完整地)支持IPv6<br />请查看OpenWrt首页的介绍以启用IPv6支持<br />或者更新你的系统到最新OpenWrt版本"
+msgid ""
+"IPv6 is currently not (fully) supported by this system<br />Please follow "
+"the instructions on OpenWrt's homepage to enable IPv6 support<br />or update "
+"your system to the latest OpenWrt Release"
+msgstr ""
+"当前系统暂时不能(完整地)支持IPv6<br />请查看OpenWrt首页的介绍以启用IPv6支持"
+"<br />或者更新你的系统到最新OpenWrt版本"
 
 msgid "IPv6 not supported"
 msgstr "IPv6不被支持"
@@ -240,13 +279,21 @@ msgstr "IPv6地址"
 msgid "If both cURL and GNU Wget are installed, Wget is used by default."
 msgstr "如果cURL和GNU Wget同时被安装,那么Wget将会被优先使用."
 
-msgid "If this service section is disabled it could not be started.<br />Neither from LuCI interface nor from console"
-msgstr "如果服务配置被禁用那么它将不能被启动.<br />无论是通过LuCI页面或者是通过终端."
+msgid ""
+"If this service section is disabled it could not be started.<br />Neither "
+"from LuCI interface nor from console"
+msgstr ""
+"如果服务配置被禁用那么它将不能被启动.<br />无论是通过LuCI页面或者是通过终端."
 
-msgid "If you want to send updates for IPv4 and IPv6 you need to define two separate Configurations i.e. 'myddns_ipv4' and 'myddns_ipv6'"
-msgstr "如果你需要同时更新IPv4和IPv6地址,你需要单独添加两个配置项(例如'myddns_ipv4'和'myddns_ipv6')"
+msgid ""
+"If you want to send updates for IPv4 and IPv6 you need to define two "
+"separate Configurations i.e. 'myddns_ipv4' and 'myddns_ipv6'"
+msgstr ""
+"如果你需要同时更新IPv4和IPv6地址,你需要单独添加两个配置项(例"
+"如'myddns_ipv4'和'myddns_ipv6')"
 
-msgid "In some versions cURL/libcurl in OpenWrt is compiled without proxy support."
+msgid ""
+"In some versions cURL/libcurl in OpenWrt is compiled without proxy support."
 msgstr "OpenWrt中,cURL/libcurl的某些版本编译时没有启用代理服务器支持"
 
 msgid "Info"
@@ -255,11 +302,18 @@ msgstr "信息"
 msgid "Interface"
 msgstr "接口"
 
-msgid "Interval to check for changed IP<br />Values below 5 minutes == 300 seconds are not supported"
+msgid ""
+"Interval to check for changed IP<br />Values below 5 minutes == 300 seconds "
+"are not supported"
 msgstr "检查IP是否改变的时间隔<br />不支持低于5分钟(300秒)的数值."
 
-msgid "Interval to force updates send to DDNS Provider<br />Setting this parameter to 0 will force the script to only run once<br />Values lower 'Check Interval' except '0' are not supported"
-msgstr "强制向提供商更新DDNS的时间周期<br />把这个参数设置为0将会让脚本仅执行一次<br />不支持低于\"检查时间周期\"的数值(除了0)."
+msgid ""
+"Interval to force updates send to DDNS Provider<br />Setting this parameter "
+"to 0 will force the script to only run once<br />Values lower 'Check "
+"Interval' except '0' are not supported"
+msgstr ""
+"强制向提供商更新DDNS的时间周期<br />把这个参数设置为0将会让脚本仅执行一次"
+"<br />不支持低于\"检查时间周期\"的数值(除了0)."
 
 msgid "It is NOT recommended for casual users to change settings on this page."
 msgstr "强烈不建议初次使用的用户修改本页设定."
@@ -285,10 +339,14 @@ msgstr "把日志记录到文件"
 msgid "Log to syslog"
 msgstr "把日志记录到系统日志"
 
-msgid "Neither GNU Wget with SSL nor cURL installed to select a network to use for communication."
+msgid ""
+"Neither GNU Wget with SSL nor cURL installed to select a network to use for "
+"communication."
 msgstr "包含SSL支持的GNU Wget或者cURL均未被安装.无法选择一个网络用于通信."
 
-msgid "Neither GNU Wget with SSL nor cURL installed to support updates via HTTPS protocol."
+msgid ""
+"Neither GNU Wget with SSL nor cURL installed to support updates via HTTPS "
+"protocol."
 msgstr "包含SSL支持的GNU Wget或者cURL均未被安装.无法使用HTTPS更新DDNS"
 
 msgid "Network"
@@ -405,9 +463,14 @@ msgstr "状态目录"
 msgid "Stopped"
 msgstr "已停止"
 
-msgid "The currently installed 'ddns-scripts' package did not support all available settings."
+msgid ""
+"The currently installed 'ddns-scripts' package did not support all available "
+"settings."
 msgstr "当前已安装的'ddns-scripts'软件包暂不支持所有可用设置项"
 
+msgid "The default setting of '0' will retry infinite."
+msgstr ""
+
 msgid "There is no service configured."
 msgstr "没有已经配置好的服务项"
 
@@ -429,8 +492,11 @@ msgstr "用于检测的URL"
 msgid "Unknown error"
 msgstr "未知错误"
 
-msgid "Update URL to be used for updating your DDNS Provider.<br />Follow instructions you will find on their WEB page."
-msgstr "DDNS提供商用于更新DDNS的URL<br />跟随教程你将会在它们的网站上提供这个URL."
+msgid ""
+"Update URL to be used for updating your DDNS Provider.<br />Follow "
+"instructions you will find on their WEB page."
+msgstr ""
+"DDNS提供商用于更新DDNS的URL<br />跟随教程你将会在它们的网站上提供这个URL."
 
 msgid "Update error"
 msgstr "更新错误"
@@ -462,10 +528,13 @@ msgstr "正在应用更改..."
 msgid "Warning"
 msgstr "等待"
 
-msgid "Writes detailed messages to log file. File will be truncated automatically."
+msgid ""
+"Writes detailed messages to log file. File will be truncated automatically."
 msgstr "向日志中写入详细信息.文件将会被自动减小."
 
-msgid "Writes log messages to syslog. Critical Errors will always be written to syslog."
+msgid ""
+"Writes log messages to syslog. Critical Errors will always be written to "
+"syslog."
 msgstr "把日志写入系统日志.无论是否启用这项,错误信息总是会被写入系统日志"
 
 msgid "You should install BIND host package for DNS requests."
index ec930f4..ec1fe77 100644 (file)
@@ -455,6 +455,9 @@ msgid ""
 "settings."
 msgstr ""
 
+msgid "The default setting of '0' will retry infinite."
+msgstr ""
+
 msgid "There is no service configured."
 msgstr ""
 
index 328c4ec..c667767 100644 (file)
@@ -4,7 +4,7 @@
 -%>
 
 <%+header%>
-<h2><a id="content" name="content"><%:Diagnostics%></a></h2>
+<h2 name="content"><%:Diagnostics%></h2>
 <p><%:The entries in the menu allow you to perform diagnostic tests on your system to aid in troubleshooting.%></p>
 <p><%:The diagnostics available under this menu depend on what modules you have installed on your device.%></p>
 <%+footer%>
index 595cc5f..3d01453 100644 (file)
@@ -4,7 +4,7 @@
 -%>
 
 <%+header%>
-<h2><a id="content" name="content"><%:Diagnostics%></a></h2>
+<h2 name="content"><%:Diagnostics%></h2>
 <p><%:With this menu you can configure network diagnostics, such as network device scans and ping tests.%></p>
 <p><%:The diagnostics available under this menu depend on what modules you have installed on your device.%></p>
 <%+footer%>
index 258fdee..0424fff 100644 (file)
@@ -7,7 +7,7 @@
 include $(TOPDIR)/rules.mk
 
 LUCI_TITLE:=LuCI Diagnostics Tools (Device Info)
-LUCI_DEPENDS:=+luci-app-diag-core +smap +netdiscover +mac-to-devinfo +httping +smap-to-devinfo +netdiscover-to-devinfo
+LUCI_DEPENDS:=+luci-app-diag-core +smap +netdiscover +mac-to-devinfo +httping +smap-to-devinfo +netdiscover-to-devinfo @BROKEN
 
 include ../../luci.mk
 
index 6015ffe..4470a0d 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,13 +106,23 @@ 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"
+lat.datatype = "float"
 
 lon=s:option(Value, "lon", translate("Reference/receiver longitude for surface posn"))
 lon.rmempty = true
-lon.datatype = "integer"
+lon.datatype = "float"
+
+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 3eb95eb..c8b8f22 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(11))"
 
 function name.write(self, section, value)
        if zone:name() ~= value then
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 2f4914e..fe205d0 100644 (file)
@@ -34,7 +34,7 @@ local has_traceroute6 = fs.access("/usr/bin/traceroute6")
                        legend.parentNode.style.display = 'block';
                        legend.style.display = 'inline';
 
-                       stxhr.get('<%=luci.dispatcher.build_url("freifunk", "status")%>/diag_' + tool + protocol + '/' + addr, null,
+                       stxhr.get('<%=url('freifunk/status')%>/diag_' + tool + protocol + '/' + addr, null,
                                function(x)
                                {
                                        if (x.responseText)
@@ -55,7 +55,7 @@ local has_traceroute6 = fs.access("/usr/bin/traceroute6")
 
 <form method="post" action="<%=pcdata(luci.http.getenv("REQUEST_URI"))%>">
        <div class="cbi-map">
-               <h2><a id="content" name="content"><%:Diagnostics%></a></h2>
+               <h2 name="content"><%:Diagnostics%></h2>
 
                <fieldset class="cbi-section">
                        <legend><%:Network Utilities%></legend>
index e319f15..f2e2fb9 100644 (file)
@@ -33,7 +33,7 @@ end
 <div id="<%=name%>" style="width:<%=width%>;float:left">
        <h2><%=title%></h2>
        <div id="form_<%=name%>">
-               <form name="searchform" id="search_<%=name%>" action="<%=luci.dispatcher.build_url('freifunk', 'search_redirect')%>">
+               <form name="searchform" id="search_<%=name%>" action="<%=url('freifunk/search_redirect')%>">
                        <input type="text" name="searchterms" style="margin-bottom:15px; width: 90%"><br />
                        <%
                        local checked = " checked"
index 84a1a23..096724f 100644 (file)
@@ -46,6 +46,8 @@ s = m:section(TypedSection, "config", translate("fwknopd.conf config options"))
 s.anonymous=true
 s.dynamic=true
 s:option(Value, "MAX_SPA_PACKET_AGE", "MAX_SPA_PACKET_AGE", translate("Maximum age in seconds that an SPA packet will be accepted. defaults to 120 seconds"))
+s:option(Value, "PCAP_INTF", "PCAP_INTF", translate("Specify the ethernet interface on which fwknopd will sniff packets."))
+s:option(Value, "ENABLE_IPT_FORWARDING", "ENABLE_IPT_FORWARDING", translate("Allow SPA clients to request access to services through an iptables firewall instead of just to it."))
 s:option(DummyValue, "note2", translate("Enter custom fwknopd.conf variables below:"))
 
 return m
diff --git a/applications/luci-app-fwknopd/po/en/en.po b/applications/luci-app-fwknopd/po/en/en.po
deleted file mode 100644 (file)
index 1abc6a8..0000000
+++ /dev/null
@@ -1,103 +0,0 @@
-msgid ""
-msgstr ""
-"Content-Type: text/plain; charset=UTF-8\n"
-"Project-Id-Version: PACKAGE VERSION\n"
-"PO-Revision-Date: 2015-05-12 21:03-0500\n"
-"Last-Translator: Jonathan Bennett <JBennett@incomsystems.biz>\n"
-"Language-Team: English\n"
-"Language: en\n"
-"MIME-Version: 1.0\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-msgid "Base 64 key"
-msgstr "Base 64 key"
-
-msgid ""
-"Define a set of ports and protocols (tcp or udp) that will be opened if a "
-"valid knock sequence is seen. If this entry is not set, fwknopd will attempt "
-"to honor any proto/port request specified in the SPA data (unless of it "
-"matches any “RESTRICT_PORTS” entries). Multiple entries are comma-separated."
-msgstr ""
-"Define a set of ports and protocols (tcp or udp) that will be opened if a "
-"valid knock sequence is seen. If this entry is not set, fwknopd will attempt "
-"to honor any proto/port request specified in the SPA data (unless of it "
-"matches any “RESTRICT_PORTS” entries). Multiple entries are comma-separated."
-
-msgid ""
-"Define the length of time access will be granted by fwknopd through the "
-"firewall after a valid knock sequence from a source IP address. If "
-"“FW_ACCESS_TIMEOUT” is not set then the default timeout of 30 seconds will "
-"automatically be set."
-msgstr ""
-"Define the length of time access will be granted by fwknopd through the "
-"firewall after a valid knock sequence from a source IP address. If "
-"“FW_ACCESS_TIMEOUT” is not set then the default timeout of 30 seconds will "
-"automatically be set."
-
-msgid ""
-"Define the symmetric key used for decrypting an incoming SPA packet that is "
-"encrypted by the fwknop client with Rijndael."
-msgstr ""
-"Define the symmetric key used for decrypting an incoming SPA packet that is "
-"encrypted by the fwknop client with Rijndael."
-
-msgid "Enable Uci/Luci control"
-msgstr "Enable Uci/Luci control"
-
-msgid "Enable config overwrite"
-msgstr "Enable config overwrite"
-
-msgid "Enter custom access.conf variables below:"
-msgstr "Enter custom access.conf variables below:"
-
-msgid "Enter custom fwknopd.conf variables below:"
-msgstr "Enter custom fwknopd.conf variables below:"
-
-msgid "Firewall Knock Daemon"
-msgstr "Firewall Knock Daemon"
-
-msgid "Firewall Knock Operator"
-msgstr "Firewall Knock Operator"
-
-msgid ""
-"Force all SPA packets to contain a real IP address within the encrypted "
-"data. This makes it impossible to use the -s command line argument on the "
-"fwknop client command line, so either -R has to be used to automatically "
-"resolve the external address (if the client behind a NAT) or the client must "
-"know the external IP and set it via the -a argument."
-msgstr ""
-"Force all SPA packets to contain a real IP address within the encrypted "
-"data. This makes it impossible to use the -s command line argument on the "
-"fwknop client command line, so either -R has to be used to automatically "
-"resolve the external address (if the client behind a NAT) or the client must "
-"know the external IP and set it via the -a argument."
-
-msgid ""
-"Maximum age in seconds that an SPA packet will be accepted. defaults to 120 "
-"seconds"
-msgstr ""
-"Maximum age in seconds that an SPA packet will be accepted. defaults to 120 "
-"seconds"
-
-msgid "Normal Key"
-msgstr "Normal Key"
-
-msgid "The base64 hmac key"
-msgstr "The base64 hmac key"
-
-msgid "Use ANY for any source ip"
-msgstr "Use ANY for any source ip"
-
-msgid ""
-"When unchecked, the config files in /etc/fwknopd will be used as is, "
-"ignoring any settings here."
-msgstr ""
-"When unchecked, the config files in /etc/fwknopd will be used as is, "
-"ignoring any settings here."
-
-msgid "access.conf stanzas"
-msgstr "access.conf stanzas"
-
-msgid "fwknopd.conf config options"
-msgstr "fwknopd.conf config options"
diff --git a/applications/luci-app-fwknopd/po/en/fwknopd.po b/applications/luci-app-fwknopd/po/en/fwknopd.po
new file mode 100644 (file)
index 0000000..d75c99d
--- /dev/null
@@ -0,0 +1,113 @@
+msgid ""
+msgstr ""
+"Content-Type: text/plain; charset=UTF-8\n"
+"Project-Id-Version: PACKAGE VERSION\n"
+"PO-Revision-Date: 2015-05-12 21:03-0500\n"
+"Last-Translator: Jonathan Bennett <JBennett@incomsystems.biz>\n"
+"Language-Team: English\n"
+"Language: en\n"
+"MIME-Version: 1.0\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+msgid ""
+"Allow SPA clients to request access to services through an iptables firewall "
+"instead of just to it."
+msgstr ""
+"Allow SPA clients to request access to services through an iptables firewall "
+"instead of just to it."
+
+msgid "Base 64 key"
+msgstr "Base 64 key"
+
+msgid ""
+"Define a set of ports and protocols (tcp or udp) that will be opened if a "
+"valid knock sequence is seen. If this entry is not set, fwknopd will attempt "
+"to honor any proto/port request specified in the SPA data (unless of it "
+"matches any “RESTRICT_PORTS” entries). Multiple entries are comma-separated."
+msgstr ""
+"Define a set of ports and protocols (tcp or udp) that will be opened if a "
+"valid knock sequence is seen. If this entry is not set, fwknopd will attempt "
+"to honor any proto/port request specified in the SPA data (unless of it "
+"matches any “RESTRICT_PORTS” entries). Multiple entries are comma-separated."
+
+msgid ""
+"Define the length of time access will be granted by fwknopd through the "
+"firewall after a valid knock sequence from a source IP address. If "
+"“FW_ACCESS_TIMEOUT” is not set then the default timeout of 30 seconds will "
+"automatically be set."
+msgstr ""
+"Define the length of time access will be granted by fwknopd through the "
+"firewall after a valid knock sequence from a source IP address. If "
+"“FW_ACCESS_TIMEOUT” is not set then the default timeout of 30 seconds will "
+"automatically be set."
+
+msgid ""
+"Define the symmetric key used for decrypting an incoming SPA packet that is "
+"encrypted by the fwknop client with Rijndael."
+msgstr ""
+"Define the symmetric key used for decrypting an incoming SPA packet that is "
+"encrypted by the fwknop client with Rijndael."
+
+msgid "Enable Uci/Luci control"
+msgstr "Enable Uci/Luci control"
+
+msgid "Enable config overwrite"
+msgstr "Enable config overwrite"
+
+msgid "Enter custom access.conf variables below:"
+msgstr "Enter custom access.conf variables below:"
+
+msgid "Enter custom fwknopd.conf variables below:"
+msgstr "Enter custom fwknopd.conf variables below:"
+
+msgid "Firewall Knock Daemon"
+msgstr "Firewall Knock Daemon"
+
+msgid "Firewall Knock Operator"
+msgstr "Firewall Knock Operator"
+
+msgid ""
+"Force all SPA packets to contain a real IP address within the encrypted "
+"data. This makes it impossible to use the -s command line argument on the "
+"fwknop client command line, so either -R has to be used to automatically "
+"resolve the external address (if the client behind a NAT) or the client must "
+"know the external IP and set it via the -a argument."
+msgstr ""
+"Force all SPA packets to contain a real IP address within the encrypted "
+"data. This makes it impossible to use the -s command line argument on the "
+"fwknop client command line, so either -R has to be used to automatically "
+"resolve the external address (if the client behind a NAT) or the client must "
+"know the external IP and set it via the -a argument."
+
+msgid ""
+"Maximum age in seconds that an SPA packet will be accepted. defaults to 120 "
+"seconds"
+msgstr ""
+"Maximum age in seconds that an SPA packet will be accepted. defaults to 120 "
+"seconds"
+
+msgid "Normal Key"
+msgstr "Normal Key"
+
+msgid "Specify the ethernet interface on which fwknopd will sniff packets."
+msgstr "Specify the ethernet interface on which fwknopd will sniff packets."
+
+msgid "The base64 hmac key"
+msgstr "The base64 hmac key"
+
+msgid "Use ANY for any source ip"
+msgstr "Use ANY for any source ip"
+
+msgid ""
+"When unchecked, the config files in /etc/fwknopd will be used as is, "
+"ignoring any settings here."
+msgstr ""
+"When unchecked, the config files in /etc/fwknopd will be used as is, "
+"ignoring any settings here."
+
+msgid "access.conf stanzas"
+msgstr "access.conf stanzas"
+
+msgid "fwknopd.conf config options"
+msgstr "fwknopd.conf config options"
index ec15504..4fb616f 100644 (file)
@@ -1,6 +1,11 @@
 msgid ""
 msgstr "Content-Type: text/plain; charset=UTF-8"
 
+msgid ""
+"Allow SPA clients to request access to services through an iptables firewall "
+"instead of just to it."
+msgstr ""
+
 msgid "Base 64 key"
 msgstr ""
 
@@ -57,6 +62,9 @@ msgstr ""
 msgid "Normal Key"
 msgstr ""
 
+msgid "Specify the ethernet interface on which fwknopd will sniff packets."
+msgstr ""
+
 msgid "The base64 hmac key"
 msgstr ""
 
index 689bedc..01b85de 100644 (file)
@@ -1,6 +1,7 @@
 #!/bin/sh
 #-- Copyright 2015 Jonathan Bennett <jbennett@incomsystems.biz>
 #-- Licensed to the public under the GNU General Public License v2.
+. /lib/functions/network.sh
 
 uci batch <<EOF
        add ucitrack fwknopd
@@ -8,10 +9,14 @@ uci batch <<EOF
        commit ucitrack
 EOF
 
+uci delete fwknopd.@access[0].KEY
+uci delete fwknopd.@access[0].HMAC_KEY
 uci set fwknopd.@access[0].keytype='Base 64 key'
 uci set fwknopd.@access[0].hkeytype='Base 64 key'
 uci set fwknopd.@access[0].KEY_BASE64=`fwknopd --key-gen | awk '/^KEY/ {print $2;}'`
 uci set fwknopd.@access[0].HMAC_KEY_BASE64=`fwknopd --key-gen | awk '/^HMAC/ {print $2;}'`
+uci set fwknopd.@config[0].ENABLE_IPT_FORWARDING='y'
+
 uci commit fwknopd
 rm -f /tmp/luci-indexcache
 exit 0
index 234f909..d861ef9 100644 (file)
@@ -1,5 +1,5 @@
 <script type="text/javascript">//<![CDATA[
-XHR.poll(5, '<%=luci.dispatcher.build_url("admin", "telephony", "status")%>', null,
+XHR.poll(5, '<%=url('admin/telephony/status')%>', null,
        function(x, st)
        {
                var tb = document.getElementById('telephony_status_table');
index 098a72a..866eded 100644 (file)
@@ -1,5 +1,5 @@
 <script type="text/javascript">//<![CDATA[
-       XHR.poll(5, '<%=luci.dispatcher.build_url("admin/services/minidlna_status")%>', null,
+       XHR.poll(5, '<%=url("admin/services/minidlna_status")%>', null,
                function(x, st)
                {
                        var tb = document.getElementById('minidlna_status');
index 0e1c8bf..d89ab27 100644 (file)
@@ -5,19 +5,19 @@ m = Map("mjpg-streamer", "MJPG-streamer", translate("mjpg streamer is a streamin
 
 --- General settings ---
 
-section_gen = m:section(TypedSection, "mjpg-streamer", "General")
+section_gen = m:section(TypedSection, "mjpg-streamer", translate("General"))
     section_gen.addremove=false
     section_gen.anonymous=true
 
-enabled = section_gen:option(Flag, "enabled", "Enabled", "Enable MJPG-streamer")
+enabled = section_gen:option(Flag, "enabled", translate("Enabled"), translate("Enable MJPG-streamer"))
 
-input = section_gen:option(ListValue, "input",  "Input plugin")
+input = section_gen:option(ListValue, "input",  translate("Input plugin"))
    input:depends("enabled", "1")
    input:value("uvc", "UVC")
    ---input:value("file", "File")
    input.optional = false
 
-output = section_gen:option(ListValue, "output",  "Output plugin")
+output = section_gen:option(ListValue, "output",  translate("Output plugin"))
    output:depends("enabled", "1")
    output:value("http", "HTTP")
    output:value("file", "File")
@@ -26,7 +26,7 @@ output = section_gen:option(ListValue, "output",  "Output plugin")
 
 --- Plugin settings ---
 
-s = m:section(TypedSection, "mjpg-streamer", "Plugin settings")
+s = m:section(TypedSection, "mjpg-streamer", translate("Plugin settings"))
     s.addremove=false
     s.anonymous=true
 
index 5cd722f..ecb374d 100644 (file)
@@ -37,9 +37,15 @@ msgstr ""
 msgid "Drop frames smaller then this limit"
 msgstr ""
 
+msgid "Enable MJPG-streamer"
+msgstr ""
+
 msgid "Enable YUYV format"
 msgstr ""
 
+msgid "Enabled"
+msgstr ""
+
 msgid "Exceed"
 msgstr ""
 
@@ -63,9 +69,15 @@ msgstr ""
 msgid "Frames per second"
 msgstr ""
 
+msgid "General"
+msgstr ""
+
 msgid "HTTP output"
 msgstr ""
 
+msgid "Input plugin"
+msgstr ""
+
 msgid "Interval between saving pictures"
 msgstr ""
 
@@ -90,9 +102,15 @@ msgstr ""
 msgid "On"
 msgstr ""
 
+msgid "Output plugin"
+msgstr ""
+
 msgid "Password"
 msgstr ""
 
+msgid "Plugin settings"
+msgstr ""
+
 msgid "Port"
 msgstr ""
 
diff --git a/applications/luci-app-mjpg-streamer/po/zh-cn/mjpg-streamer.po b/applications/luci-app-mjpg-streamer/po/zh-cn/mjpg-streamer.po
new file mode 100644 (file)
index 0000000..8b51f6a
--- /dev/null
@@ -0,0 +1,165 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: luci-app-mjpg-streamer\n"
+"POT-Creation-Date: 2015-06-11 21:11+0100\n"
+"PO-Revision-Date: 2015-06-11 21:11+0100\n"
+"Last-Translator: maz-1 <ohmygod19993 at gmail dotcom>\n"
+"Language-Team: \n"
+"Language: zh-cn\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Poedit 1.5.4\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Poedit-SourceCharset: UTF-8\n"
+
+msgid "Allow ringbuffer to exceed limit by this amount"
+msgstr "允许环形缓冲区最多超过这个数值"
+
+msgid "Ask for username and password on connect"
+msgstr "连接时询问用户名和密码"
+
+msgid "Authentication required"
+msgstr "需要验证"
+
+msgid "Auto"
+msgstr "自动"
+
+msgid "Automatic disabling of MJPEG mode"
+msgstr "自动禁用MJPEG模式"
+
+msgid "Blink"
+msgstr "闪烁"
+
+msgid "Check to save the stream to an mjpeg file"
+msgstr "勾选以保存视频流至一个mjpeg文件"
+
+msgid "Command to run"
+msgstr "运行的命令"
+
+msgid "Device"
+msgstr "设备"
+
+msgid "Do not initalize dynctrls of Linux-UVC driver"
+msgstr "不要初始化Linux-UVC驱动的dynctrls"
+
+msgid "Don't initalize dynctrls"
+msgstr "不要初始化dynctrls"
+
+msgid "Drop frames smaller then this limit"
+msgstr "丢弃小于该尺寸限制的帧"
+
+msgid "Enable MJPG-streamer"
+msgstr "启用MJPG-streamer"
+
+msgid "Enable YUYV format"
+msgstr "启用YUYV格式"
+
+msgid "Enabled"
+msgstr "启用"
+
+msgid "Exceed"
+msgstr "超出"
+
+msgid ""
+"Execute command after saving picture. Mjpg-streamer parse the filename as "
+"first parameter to your script."
+msgstr "保存图片后执行命令。文件名将作为第一个参数传递给命令。"
+
+msgid "File input"
+msgstr "文件输入"
+
+msgid "File output"
+msgstr "文件输出"
+
+msgid "Folder"
+msgstr "文件夹"
+
+msgid "Folder that contains webpages"
+msgstr "保存网页的文件夹"
+
+msgid "Frames per second"
+msgstr "帧每秒"
+
+msgid "General"
+msgstr "一般设置"
+
+msgid "HTTP output"
+msgstr "HTTP输出"
+
+msgid "Input plugin"
+msgstr "输入插件"
+
+msgid "Interval between saving pictures"
+msgstr "图片保存时间间隔"
+
+msgid "JPEG compression quality"
+msgstr "JPEG压缩品质"
+
+msgid "Led control"
+msgstr "LED控制"
+
+msgid "MJPG-streamer"
+msgstr "MJPG-streamer"
+
+msgid "Max. number of pictures to hold"
+msgstr "保存的图片数量上限"
+
+msgid "Mjpeg output"
+msgstr "Mjpeg输出"
+
+msgid "Off"
+msgstr "关"
+
+msgid "On"
+msgstr "开"
+
+msgid "Output plugin"
+msgstr "输出插件"
+
+msgid "Password"
+msgstr "密码"
+
+msgid "Plugin settings"
+msgstr "插件设置"
+
+msgid "Port"
+msgstr "端口"
+
+msgid "Resolution"
+msgstr "分辨率"
+
+msgid "Ring buffer size"
+msgstr "环形缓冲区大小"
+
+msgid "Set folder to save pictures"
+msgstr "图片保存位置"
+
+msgid "Set the inteval in millisecond"
+msgstr "设置时间间隔(毫秒)"
+
+msgid ""
+"Set the minimum size if the webcam produces small-sized garbage frames. May "
+"happen under low light conditions"
+msgstr "设置无用帧的最小尺寸。当光照不足时可能出现无用帧。"
+
+msgid ""
+"Set the quality in percent. This setting activates YUYV format, disables "
+"MJPEG"
+msgstr "设置品质(百分比)。此设置会开启YUYV格式输出,关闭MJPEG输出。"
+
+msgid "TCP port for this HTTP server"
+msgstr "HTTP服务监听的TCP端口"
+
+msgid "UVC input"
+msgstr "UVC输入"
+
+msgid "Username"
+msgstr "用户名"
+
+msgid "WWW folder"
+msgstr "WWW文件夹"
+
+msgid ""
+"mjpg streamer is a streaming application for Linux-UVC compatible webcams"
+msgstr "mjpg streamer是一个视频流程序,用于兼容Linux-UVC的摄像头。"
index 20fba89..c5b731a 100644 (file)
@@ -6,8 +6,8 @@
 
 include $(TOPDIR)/rules.mk
 
-LUCI_TITLE:=LuCI Support for the OpenWrt MultiWAN agent
-LUCI_DEPENDS:=+multiwan
+LUCI_TITLE:=LuCI Support for the OpenWrt MultiWAN agent (obsoleted by mwan3)
+LUCI_DEPENDS:=+multiwan @BROKEN
 
 include ../../luci.mk
 
index 8c4127b..03bfad1 100644 (file)
@@ -1,5 +1,5 @@
 <script type="text/javascript">//<![CDATA[
-       XHR.poll(5, '<%=luci.dispatcher.build_url("admin", "network", "multiwan", "status")%>', null,
+       XHR.poll(5, '<%=url('admin/network/multiwan/status')%>', null,
                function(x, st)
                {
                        var tx = document.getElementById('multiwan_status_text');
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 91bddc7..79c6ddb 100644 (file)
@@ -28,7 +28,7 @@ function index()
                call("ocserv_status")).leaf = true
 
        entry({"admin", "services", "ocserv", "disconnect"},
-               call("ocserv_disconnect")).leaf = true
+               post("ocserv_disconnect")).leaf = true
 
 end
 
@@ -44,7 +44,7 @@ function ocserv_status()
                        if not ln then break end
                
                        local id, user, group, vpn_ip, ip, device, time, cipher, status = 
-                               ln:match("^%s*(%d+)%s+([-_%w]+)%s+([%.%*-_%w]+)%s+([%:%.-_%w]+)%s+([%:%.-_%w]+)%s+([%:%.-_%w]+)%s+([%:%.-_%w]+)%s+([%(%)%:%.-_%w]+)%s+([%:%.-_%w]+).*")
+                               ln:match("^%s*(%d+)%s+([-_%w]+)%s+([%(%)%.%*-_%w]+)%s+([%:%.-_%w]+)%s+([%:%.-_%w]+)%s+([%:%.-_%w]+)%s+([%:%.-_%w]+)%s+([%(%)%:%.-_%w]+)%s+([%:%.-_%w]+).*")
                        if id then
                                fwd[#fwd+1] = {
                                        id = id,
index d1cc155..74edaf4 100644 (file)
@@ -74,12 +74,6 @@ o.default = "plain"
 o:value("plain")
 o:value("PAM")
 
-o = s:taboption("general", Value, "zone", translate("Firewall Zone"),
-       translate("The firewall zone that the VPN clients will be set to"))
-o.nocreate = true
-o.default = "lan"
-o.template = "cbi/firewall_zonelist"
-
 s:taboption("general", Value, "port", translate("Port"),
        translate("The same UDP and TCP ports will be used"))
 s:taboption("general", Value, "max_clients", translate("Max clients"))
@@ -102,22 +96,6 @@ local cisco = s:taboption("general", Flag, "cisco_compat", translate("AnyConnect
        translate("Enable support for CISCO AnyConnect clients"))
 cisco.default = "1"
 
-ipaddr = s:taboption("general", Value, "ipaddr", translate("VPN <abbr title=\"Internet Protocol Version 4\">IPv4</abbr>-Network-Address"))
-ipaddr.datatype = "ip4addr"
-ipaddr.default = "192.168.100.1"
-
-nm = s:taboption("general", Value, "netmask", translate("VPN <abbr title=\"Internet Protocol Version 4\">IPv4</abbr>-Netmask"))
-nm.datatype = "ip4addr"
-nm.default = "255.255.255.0"
-nm:value("255.255.255.0")
-nm:value("255.255.0.0")
-nm:value("255.0.0.0")
-
-if has_ipv6 then
-       ip6addr = s:taboption("general", Value, "ip6addr", translate("VPN <abbr title=\"Internet Protocol Version 6\">IPv6</abbr>-Network-Address"), translate("<abbr title=\"Classless Inter-Domain Routing\">CIDR</abbr>-Notation: address/prefix"))
-       ip6addr.datatype = "ip6addr"
-end
-
 
 tmpl = s:taboption("template", Value, "_tmpl",
        translate("Edit the template that is used for generating the ocserv configuration."))
@@ -144,10 +122,36 @@ function ca.cfgvalue(self, section)
        return nixio.fs.readfile("/etc/ocserv/ca.pem")
 end
 
+--[[Networking options]]--
+
+local parp = s:taboption("general", Flag, "proxy_arp", translate("Enable proxy arp"),
+       translate("Provide addresses to clients from a subnet of LAN; if enabled the network below must be a subnet of LAN. Note that the first address of the specified subnet will be reserved by ocserv, so it should not be in use. If you have a network in LAN covering 192.168.1.0/24 use 192.168.1.192/26 to reserve the upper 62 addresses."))
+parp.default = "0"
+
+ipaddr = s:taboption("general", Value, "ipaddr", translate("VPN <abbr title=\"Internet Protocol Version 4\">IPv4</abbr>-Network-Address"),
+        translate("The IPv4 subnet address to provide to clients; this should be some private network different than the LAN addresses unless proxy ARP is enabled. Leave empty to attempt auto-configuration."))
+ipaddr.datatype = "ip4addr"
+ipaddr.default = "192.168.100.1"
+
+nm = s:taboption("general", Value, "netmask", translate("VPN <abbr title=\"Internet Protocol Version 4\">IPv4</abbr>-Netmask"),
+        translate("The mask of the subnet above."))
+nm.datatype = "ip4addr"
+nm.default = "255.255.255.0"
+nm:value("255.255.255.0")
+nm:value("255.255.0.0")
+nm:value("255.0.0.0")
+
+if has_ipv6 then
+       ip6addr = s:taboption("general", Value, "ip6addr", translate("VPN <abbr title=\"Internet Protocol Version 6\">IPv6</abbr>-Network-Address"), translate("<abbr title=\"Classless Inter-Domain Routing\">CIDR</abbr>-Notation: address/prefix"),
+                             translate("The IPv6 subnet address to provide to clients; leave empty to attempt auto-configuration."))
+       ip6addr.datatype = "ip6addr"
+end
+
+
 --[[DNS]]--
 
 s = m:section(TypedSection, "dns", translate("DNS servers"),
-       translate("The DNS servers to be provided to clients; can be either IPv6 or IPv4"))
+       translate("The DNS servers to be provided to clients; can be either IPv6 or IPv4. Typically you should include the address of this device"))
 s.anonymous = true
 s.addremove = true
 s.template = "cbi/tblsection"
index c4be181..0fa997c 100644 (file)
@@ -47,7 +47,7 @@ if fd then local ln
                if not ln then break end
 
                local id, user, group, vpn_ip, ip, device, time, cipher, status = 
-                       ln:match("^%s*(%d+)%s+([-_%w]+)%s+([%.%*-_%w]+)%s+([%:%.-_%w]+)%s+([%:%.-_%w]+)%s+([%:%.-_%w]+)%s+([%:%.-_%w]+)%s+([%(%)%:%.-_%w]+)%s+([%:%.-_%w]+).*")
+                       ln:match("^%s*(%d+)%s+([-_%w]+)%s+([%(%)%.%*-_%w]+)%s+([%:%.-_%w]+)%s+([%:%.-_%w]+)%s+([%:%.-_%w]+)%s+([%:%.-_%w]+)%s+([%(%)%:%.-_%w]+)%s+([%:%.-_%w]+).*")
                if id then
                        table.insert(lusers, {id, user, group, vpn_ip, ip, device, time, cipher, status})
                end
index fabc1bc..03a9ed7 100644 (file)
@@ -1,7 +1,7 @@
 <script type="text/javascript">//<![CDATA[
 
        function ocserv_disconnect(idx) {
-               XHR.get('<%=luci.dispatcher.build_url("admin", "services", "ocserv", "disconnect")%>/' + idx, null,
+               (new XHR()).post('<%=url('admin/services/ocserv/disconnect')%>/' + idx, { token: '<%=token%>' },
                        function(x)
                        {
                                var tb = document.getElementById('ocserv_status_table');
@@ -11,7 +11,7 @@
                );
        }
 
-       XHR.poll(5, '<%=luci.dispatcher.build_url("admin", "services", "ocserv", "status")%>', null,
+       XHR.poll(5, '<%=url('admin/services/ocserv/status')%>', null,
                function(x, st)
                {
                        var tb = document.getElementById('ocserv_status_table');
index 0e59c61..476150d 100644 (file)
@@ -149,7 +149,7 @@ end
 
 
 
-       <h2><a id="content" name="content"><%:Services%></a></h2>
+       <h2 name="content"><%:Services%></h2>
 
        <fieldset class="cbi-section">
        <legend><%:Internal services%></legend>
index f30c242..93815a5 100644 (file)
@@ -7,7 +7,7 @@
 include $(TOPDIR)/rules.mk
 
 LUCI_TITLE:=OLSR configuration and status module
-LUCI_DEPENDS:=+olsrd +olsrd-mod-jsoninfo +luci-lib-luaneightbl
+LUCI_DEPENDS:=+olsrd +olsrd-mod-jsoninfo +luci-lib-luaneightbl +luci-lib-json
 
 include ../../luci.mk
 
index 74deb71..cfadd9b 100644 (file)
@@ -80,12 +80,15 @@ end
 function action_json()
        local http = require "luci.http"
        local utl = require "luci.util"
-       local uci = require "luci.model.uci".cursor_state()
+       local uci = require "luci.model.uci".cursor()
        local jsonreq4
        local jsonreq6
 
-       jsonreq4 = utl.exec("echo /status | nc 127.0.0.1 9090")
-       jsonreq6 = utl.exec("echo /status | nc ::1 9090")
+       local v4_port = uci:get("olsrd", "olsrd_jsoninfo", "port") or 9090
+       local v6_port = uci:get("olsrd6", "olsrd_jsoninfo", "port") or 9090
+
+       jsonreq4 = utl.exec("(echo /status | nc 127.0.0.1 " .. v4_port .. ") 2>/dev/null" )
+       jsonreq6 = utl.exec("(echo /status | nc ::1 " .. v6_port .. ") 2>/dev/null")
        http.prepare_content("application/json")
        if not jsonreq4 or jsonreq4 == "" then
                jsonreq4 = "{}"
@@ -368,8 +371,11 @@ function fetch_jsoninfo(otable)
        local IpVersion = uci:get_first("olsrd", "olsrd","IpVersion")
        local jsonreq4 = ""
        local jsonreq6 = ""
-       jsonreq4 = utl.exec("echo /" .. otable .. " | nc 127.0.0.1 9090")
-       jsonreq6 = utl.exec("echo /" .. otable .. " | nc ::1 9090")
+       local v4_port = uci:get("olsrd", "olsrd_jsoninfo", "port") or 9090
+       local v6_port = uci:get("olsrd6", "olsrd_jsoninfo", "port") or 9090
+
+       jsonreq4 = utl.exec("(echo /" .. otable .. " | nc 127.0.0.1 " .. v4_port .. ") 2>/dev/null")
+       jsonreq6 = utl.exec("(echo /" .. otable .. " | nc ::1 " .. v6_port .. ") 2>/dev/null")
        local jsondata4 = {}
        local jsondata6 = {}
        local data4 = {}
index d997670..eb41219 100644 (file)
@@ -5,7 +5,7 @@
 -%>
 
 <%+header%>
-<h2><a id="content" name="content"><%:OLSR Daemon%></a></h2>
+<h2 name="content"><%:OLSR Daemon%></h2>
 <p class="error"><%:Unable to connect to the OLSR daemon!%></p>
 <p><%:Make sure that OLSRd is running, the "jsoninfo" plugin is loaded, configured on port 9090 and accepts connections from "127.0.0.1".%></p>
 <%+footer%>
index 89e4436..5ea7b74 100644 (file)
@@ -73,7 +73,7 @@ XHR.poll(10, '<%=REQUEST_URI%>', { status: 1 },
 );
 //]]></script>
 
-<h2><a id="content" name="content"><%:Active host net announcements%></a></h2>
+<h2 name="content"><%:Active host net announcements%></h2>
 
 <div id="togglebuttons"></div>
 <fieldset class="cbi-section">
index 3fb3a58..81d0a3d 100644 (file)
@@ -11,7 +11,7 @@ local i = 1
 
 <%+header%>
 
-<h2><a id="content" name="content"><%:Interfaces%></a></h2>
+<h2 name="content"><%:Interfaces%></h2>
 
 <div id="togglebuttons"></div>
 
index 3c10bd6..f658288 100644 (file)
@@ -10,7 +10,7 @@ local i = 1
 %>
 
 <%+header%>
-<h2><a id="content" name="content"><%:Active MID announcements%></a></h2>
+<h2 name="content"><%:Active MID announcements%></h2>
 
 <div id="togglebuttons"></div> 
 <fieldset class="cbi-section">
index 9ad0d8f..31dd7d0 100644 (file)
@@ -105,7 +105,7 @@ end
 //]]></script>
 
 
-<h2><a id="content" name="content"><%:OLSR connections%></a></h2>
+<h2 name="content"><%:OLSR connections%></h2>
 
 <div id="togglebuttons"></div>
 
index 0a81d17..61e17b3 100644 (file)
@@ -6,7 +6,9 @@
 -%>
 
 <%
-local ipv = luci.model.uci.cursor():get_first("olsrd", "olsrd", "IpVersion", "4")
+
+has_ipv4_conf = luci.model.uci.cursor():get_first("olsrd", "olsrd", "IpVersion")
+has_ipv6_conf = luci.model.uci.cursor():get_first("olsrd6", "olsrd", "IpVersion")
 
 function write_conf(conf, file)
        local fs = require "nixio.fs"
@@ -19,23 +21,23 @@ end
 
 conf = luci.http.formvalue()
 
-if conf.openwrt then
+if conf.openwrt_v4 then
        write_conf("/etc/config/olsrd", "olsrd")
        return false
 end
 
-if conf.conf_v4 then   
-       write_conf("/var/etc/olsrd.conf.ipv4", "olsrd.conf.ipv4")
+if conf.openwrt_v6 then
+       write_conf("/etc/config/olsrd6", "olsrd6")
        return false
 end
 
-if conf.conf_v6 then
-       write_conf("/var/etc/olsrd.conf.ipv6", "olsrd.conf.ipv6")
+if conf.conf_v4 then
+       write_conf("/var/etc/olsrd.conf", "olsrd.conf")
        return false
 end
 
-if conf.conf then
-       write_conf("/var/etc/olsrd.conf", "olsrd.conf")
+if conf.conf_v6 then
+       write_conf("/var/etc/olsrd6.conf", "olsrd6.conf")
        return false
 end
 
@@ -153,7 +155,7 @@ XHR.poll(10, '<%=REQUEST_URI%>/json', { },
 
 <div id="error" class="error"></div>
 
-<h2><a id="content" name="content">OLSR <%:Overview%></a></h2>
+<h2 name="content">OLSR <%:Overview%></h2>
 
 <fieldset class="cbi-section">
         <legend><%:Network%></legend>
@@ -200,13 +202,18 @@ XHR.poll(10, '<%=REQUEST_URI%>/json', { },
                        <span id="version">-<span>
                </td></tr>
                 <tr><td width="33%"><%:Download Config%></td><td>
-                               <a href="<%=REQUEST_URI%>?openwrt">OpenWrt</a>,
-                               <% if ipv == "6and4" then %>
-                                       <a href="<%=REQUEST_URI%>?conf_v4">OLSRD IPv4</a>,
-                                       <a href="<%=REQUEST_URI%>?conf_v6">OLSRD IPv6</a>
-                               <% else %>
-                                       <a href="<%=REQUEST_URI%>?conf">OLSRD</a>
-                               <% end %>
+                       <% if has_ipv4_conf then %>
+                           <a href="<%=REQUEST_URI%>?openwrt_v4">OpenWrt (IPv4)</a>,
+                       <% end %>
+                       <% if has_ipv6_conf then %>
+                           <a href="<%=REQUEST_URI%>?openwrt_v6">OpenWrt (IPv6)</a>,
+                       <% end %>
+                       <% if has_ipv4_conf then %>
+                           <a href="<%=REQUEST_URI%>?conf_v4">OLSRD (IPv4)</a>,
+                       <% end %>
+                       <% if has_ipv6_conf then %>
+                           <a href="<%=REQUEST_URI%>?conf_v6">OLSRD (IPv6)</a>
+                       <% end %>
                </td></tr>
        </table>
 </fieldset>
index d2b0c1b..8e46daa 100644 (file)
@@ -89,7 +89,7 @@ XHR.poll(20, '<%=REQUEST_URI%>', { status: 1 },
 
 
 
-<h2><a id="content" name="content"><%:Known OLSR routes%></a></h2>
+<h2 name="content"><%:Known OLSR routes%></h2>
 
 <div id="togglebuttons"></div>
 
index 45f6515..6aa7a75 100644 (file)
@@ -86,7 +86,7 @@ XHR.poll(10, '<%=REQUEST_URI%>', { status: 1 },
 
 <%+header%>
 
-<h2><a id="content" name="content"><%:SmartGW announcements%></a></h2>
+<h2 name="content"><%:SmartGW announcements%></h2>
 
 <div id="togglebuttons"></div>
 
index ee69f72..b3abeae 100644 (file)
@@ -11,7 +11,7 @@ local olsrtools = require "luci.tools.olsr"
 %>
 
 <%+header%>
-<h2><a id="content" name="content"><%:Active OLSR nodes%></a></h2>
+<h2 name="content"><%:Active OLSR nodes%></h2>
 
 <div id="togglebuttons"></div>
 
index 7e39dad..fa15300 100644 (file)
@@ -48,7 +48,7 @@ local knownParams = {
                { Flag,                 "client_disconnect",                    0,                                                                                                                              translate("Run script cmd on client disconnection") },
                { Value,                "learn_address",                                "/usr/bin/ovpn-learnaddress",                                                                   translate("Executed in server mode whenever an IPv4 address/route or MAC address is added to OpenVPN's internal routing table") },
                { Value,                "auth_user_pass_verify",                "/usr/bin/ovpn-userpass via-env",                                                               translate("Executed in server mode on new client connections, when the client is still untrusted") },
-               { ListValue,    "script_security",                              { 0, 1, 2, 3 },                                                                                                 translate("Policy level over usage of external programs and scripts"),  {mode="server" } },
+               { ListValue,    "script_security",                              { 0, 1, 2, 3 },                                                                                                 translate("Policy level over usage of external programs and scripts") },
        } },
 
        { "Networking", {
index ac5c893..f22cb68 100644 (file)
@@ -6,14 +6,14 @@
 
 <fieldset class="cbi-section">
        <legend>
-               <a href="<%=luci.dispatcher.build_url("admin", "services", "openvpn")%>"><%:Overview%></a> &raquo;
+               <a href="<%=url('admin/services/openvpn')%>"><%:Overview%></a> &raquo;
                <%=luci.i18n.translatef("Instance \"%s\"", self.instance)%>
        </legend>
 
        <% if self.mode == "basic" then %>
-               <a href="<%=luci.dispatcher.build_url("admin", "services", "openvpn", "advanced", self.instance, "Service")%>"><%:Switch to advanced configuration »%></a>
+               <a href="<%=url('admin/services/openvpn/advanced', self.instance, "Service")%>"><%:Switch to advanced configuration »%></a>
        <% else %>
-               <a href="<%=luci.dispatcher.build_url("admin", "services", "openvpn", "basic", self.instance)%>"><%:« Switch to basic configuration%></a>
+               <a href="<%=url('admin/services/openvpn/basic', self.instance)%>"><%:« Switch to basic configuration%></a>
                <hr style="margin:0.5em 0" />
                <%:Configuration category%>:
                <% for i, c in ipairs(self.categories) do %>
index c2695ca..007d2d5 100644 (file)
@@ -9,7 +9,7 @@ local port = uci:get("polipo", "general", "proxyPort") or "8123"
 <%+header%>
 
 <div class="cbi-map">
-       <h2><a id="content" name="content"><%:Polipo Status%></a></h2>
+       <h2 name="content"><%:Polipo Status%></h2>
        <div class="cbi-section">
                <iframe id="sf" src="http://<%=luci.http.getenv('SERVER_NAME')%>:<%=port%>/polipo/" style="width:100%; height:350px; border:none"></iframe>
        </div>
index bc2c57e..260f840 100644 (file)
@@ -10,7 +10,7 @@ PKG_NAME:=luci-app-privoxy
 
 # Version == major.minor.patch
 # increase "minor" on new functionality and "patch" on patches/optimization
-PKG_VERSION:=1.0.3
+PKG_VERSION:=1.0.5
 
 # Release == build
 # increase on changes of translation files
old mode 100755 (executable)
new mode 100644 (file)
index 9ffc404..0cedab4
@@ -15,7 +15,7 @@ PRIVOXY_MIN = "3.0.22-0"      -- minimum version of service required
 function index()
        entry( {"admin", "services", "privoxy"}, cbi("privoxy"), _("Privoxy WEB proxy"), 59)
        entry( {"admin", "services", "privoxy", "logview"}, call("logread") ).leaf = true
-       entry( {"admin", "services", "privoxy", "startstop"}, call("startstop") ).leaf = true
+       entry( {"admin", "services", "privoxy", "startstop"}, post("startstop") ).leaf = true
        entry( {"admin", "services", "privoxy", "status"}, call("get_pid") ).leaf = true
 end
 
@@ -72,8 +72,7 @@ end
 
 -- compare versions using "<=" "<" ">" ">=" "=" "<<" ">>"
 function ipkg_ver_compare(ver1, comp, ver2)
-       if not ver1 or not (#ver1 > 0)
-       or not ver2 or not (#ver2 > 0)
+       if not ver1 or not ver2
        or not comp or not (#comp > 0) then return nil end
        -- correct compare string
        if comp == "<>" or comp == "><" or comp == "!=" or comp == "~=" then comp = "~="
@@ -90,33 +89,19 @@ function ipkg_ver_compare(ver1, comp, ver2)
        for i = 1, math.max(table.getn(av1),table.getn(av2)), 1  do
                local s1 = av1[i] or ""
                local s2 = av2[i] or ""
-               local n1 = tonumber(s1)
-               local n2 = tonumber(s2)
-
-               -- one numeric and other empty string then set other to 0
-               if n1 and not n2 and (not s2 or #s2 == 0) then n2 = 0 end
-               if n2 and not n1 and (not s1 or #s1 == 0) then n1 = 0 end
-
-               local nc = (n1 and n2)  -- numeric compare
-
-               if nc then
-                       -- first "not equal" found return true
-                       if comp == "~=" and (n1 ~= n2) then return true end
-                       -- first "lower" found return true
-                       if (comp == "<" or comp == "<=") and (n1 < n2) then return true end
-                       -- first "greater" found return true
-                       if (comp == ">" or comp == ">=") and (n1 > n2) then return true end
-                       -- not equal then return false
-                       if (n1 ~= n2) then return false end
-               else
-                       if comp == "~=" and (s1 ~= s2) then return true end
-                       if (comp == "<" or comp == "<=") and (s1 < s2) then return true end
-                       if (comp == ">" or comp == ">=") and (s1 > s2) then return true end
-                       if (s1 ~= s2) then return false end
-               end
+
+               -- first "not equal" found return true
+               if comp == "~=" and (s1 ~= s2) then return true end
+               -- first "lower" found return true
+               if (comp == "<" or comp == "<=") and (s1 < s2) then return true end
+               -- first "greater" found return true
+               if (comp == ">" or comp == ">=") and (s1 > s2) then return true end
+               -- not equal then return false
+               if (s1 ~= s2) then return false end
        end
-       -- all equal then true
-       return true
+
+       -- all equal and not compare greater or lower then true
+       return not (comp == "<" or comp == ">")
 end
 
 -- read version information for given package if installed
old mode 100755 (executable)
new mode 100644 (file)
index c009313..8ea2496
@@ -14,7 +14,7 @@ local HELP = [[<a href="http://www.privoxy.org/user-manual/config.html#%s" targe
 local VERINST = CTRL.ipkg_ver_installed("privoxy")
 local VEROK   = CTRL.ipkg_ver_compare(VERINST,">=",CTRL.PRIVOXY_MIN)
 
-local TITLE = [[</a><a href="javascript:alert(']]
+local TITLE = [[<a href="javascript:alert(']]
                .. translate("Version Information")
                .. [[\n\nluci-app-privoxy]]
                .. [[\n\t]] .. translate("Version") .. [[:\t]]
@@ -26,6 +26,7 @@ local TITLE = [[</a><a href="javascript:alert(']]
                .. [[\n\n]]
        .. [[')">]]
        .. translate("Privoxy WEB proxy")
+       .. [[</a>]]
 
 local DESC = translate("Privoxy is a non-caching web proxy with advanced filtering "
                .. "capabilities for enhancing privacy, modifying web page data and HTTP headers, "
@@ -39,6 +40,7 @@ if not nixio.fs.access("/etc/config/privoxy") or not VEROK then
        local f = SimpleForm("_no_config")
        f.title = TITLE
        f.description = DESC
+       f.embedded = true
        f.submit = false
        f.reset  = false
 
old mode 100755 (executable)
new mode 100644 (file)
index 3e19070..ab0019b
@@ -6,7 +6,7 @@
                var txt = document.getElementById("cbid.privoxy.privoxy._logview.txt"); // TextArea
                if ( !txt ) { return; } // security check
                var lvXHR = new XHR();
-               lvXHR.get('<%=luci.dispatcher.build_url("admin", "services", "privoxy", "logview")%>', null,
+               lvXHR.get('<%=url('admin/services/privoxy/logview')%>', null,
                        function(x) {
                                if (x.responseText == "_nodata_")
                                        txt.value = "<%:File not found or empty%>";
index b9de886..85975ac 100644 (file)
        function onclick_startstop(id) {
                // do start/stop
                var btnXHR = new XHR();
-               btnXHR.get('<%=luci.dispatcher.build_url("admin", "services", "privoxy", "startstop")%>', null,
+               btnXHR.post('<%=url('admin/services/privoxy/startstop')%>', { token: '<%=token%>' },
                        function(x) { _data2elements(x); }
                );
        }
 
-       XHR.poll(5, '<%=luci.dispatcher.build_url("admin", "services", "privoxy", "status")%>', null,
+       XHR.poll(5, '<%=url('admin/services/privoxy/status')%>', null,
                function(x, data) { _data2elements(x); }
        );
 
diff --git a/applications/luci-app-privoxy/po/zh-cn/privoxy.po b/applications/luci-app-privoxy/po/zh-cn/privoxy.po
new file mode 100644 (file)
index 0000000..f69a8f9
--- /dev/null
@@ -0,0 +1,468 @@
+msgid ""\r
+msgstr ""\r
+"Project-Id-Version: luci-app-privoxy\n"\r
+"POT-Creation-Date: 2015-06-10 20:16+0100\n"\r
+"PO-Revision-Date: 2015-06-10 20:16+0100\n"\r
+"Last-Translator: maz-1 <ohmygod19993 at gmail dotcom>\n"\r
+"Language-Team: \n"\r
+"Language: zh-cn\n"\r
+"MIME-Version: 1.0\n"\r
+"Content-Type: text/plain; charset=UTF-8\n"\r
+"Content-Transfer-Encoding: 8bit\n"\r
+"X-Generator: Poedit 1.5.4\n"\r
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"\r
+"X-Poedit-SourceCharset: UTF-8\n"\r
+\r
+msgid ""\r
+"A URL to be displayed in the error page that users will see if access to an "\r
+"untrusted page is denied."\r
+msgstr ""\r
+"当用户试图访问不受信任的页面时,错误页面所显示的URL。"\r
+\r
+\r
+msgid ""\r
+"A URL to documentation about the local Privoxy setup, configuration or "\r
+"policies."\r
+msgstr ""\r
+"指向Privoxy安装、设置和规则说明文档的URL"\r
+\r
+\r
+msgid "A directory where Privoxy can create temporary files."\r
+msgstr "Privoxy存放临时文件的目录。"\r
+\r
+msgid "Access Control"\r
+msgstr "访问控制"\r
+\r
+msgid "Actions that are applied to all sites and maybe overruled later on."\r
+msgstr ""\r
+"作用在所有站点上的规则,可能被后面的规则覆盖。"\r
+\r
+\r
+msgid "An alternative directory where the templates are loaded from."\r
+msgstr "可选的目录,放在里面的模板会被加载。"\r
+\r
+msgid "An email address to reach the Privoxy administrator."\r
+msgstr "用于联系privoxy管理员的邮箱地址。"\r
+\r
+msgid ""\r
+"Assumed server-side keep-alive timeout (in seconds) if not specified by the "\r
+"server."\r
+msgstr ""\r
+"当服务端没有指定超时时间时假定的超时时间(单位秒)。"\r
+\r
+msgid "CGI user interface"\r
+msgstr "CGI用户界面"\r
+\r
+msgid "Common Log Format"\r
+msgstr "通用日志格式"\r
+\r
+msgid ""\r
+"Configure here the routing of HTTP requests through a chain of multiple "\r
+"proxies. Note that parent proxies can severely decrease your privacy level. "\r
+"Also specified here are SOCKS proxies."\r
+msgstr ""\r
+"在这里设置http请求所经过的多重代理链。"\r
+"注意父级代理可能严重降低你的隐私安全度。"\r
+"在这里还可以设置SOCKS代理。"\r
+\r
+msgid "Debug GIF de-animation"\r
+msgstr "GIF动画日志"\r
+\r
+msgid "Debug force feature"\r
+msgstr "force feature日志"\r
+\r
+msgid "Debug redirects"\r
+msgstr "重定向日志"\r
+\r
+msgid "Debug regular expression filters"\r
+msgstr "正则表达式日志"\r
+\r
+msgid "Directory does not exist!"\r
+msgstr "目录不存在!"\r
+\r
+msgid "Disabled == Transparent Proxy Mode"\r
+msgstr "禁用 == 透明代理模式"\r
+\r
+msgid "Enable proxy authentication forwarding"\r
+msgstr "允许转发代理认证"\r
+\r
+msgid ""\r
+"Enable/Disable autostart of Privoxy on system startup and interface events"\r
+msgstr ""\r
+"开启/关闭Privoxy在系统启动或者设置界面更改时自动启动。"\r
+\r
+msgid "Enable/Disable filtering when Privoxy starts."\r
+msgstr "Privoxy启动时开启/关闭过滤。"\r
+\r
+msgid "Enabled"\r
+msgstr "已开启"\r
+\r
+msgid ""\r
+"Enabling this option is NOT recommended if there is no parent proxy that "\r
+"requires authentication!"\r
+msgstr ""\r
+"父级代理不需要认证时不推荐开启这个选项!"\r
+\r
+msgid "File '%s' not found inside Configuration Directory"\r
+msgstr "文件 '%s' 没有在设置目录中找到!"\r
+\r
+msgid "File not found or empty"\r
+msgstr "文件不存在或为空"\r
+\r
+msgid "Files and Directories"\r
+msgstr "文件和目录"\r
+\r
+msgid "For help use link at the relevant option"\r
+msgstr ""\r
+"在相应选项下的连接可获取帮助。"\r
+\r
+msgid "Forwarding"\r
+msgstr "转发"\r
+\r
+msgid ""\r
+"If enabled, Privoxy hides the 'go there anyway' link. The user obviously "\r
+"should not be able to bypass any blocks."\r
+msgstr ""\r
+"如果启用,Privoxy会隐藏'go there anyway'链接。用户显然不应能绕过屏蔽。"\r
+\r
+msgid ""\r
+"If you intend to operate Privoxy for more users than just yourself, it might "\r
+"be a good idea to let them know how to reach you, what you block and why you "\r
+"do that, your policies, etc."\r
+msgstr ""\r
+"如果除了你还有其他用户通过privoxy连接,让他们知道如何联系你、什么内容被屏蔽了、"\r
+"你为什么要这么做、你所制定的规范等等是一个好主意。"\r
+\r
+msgid "Invalid email address"\r
+msgstr "邮箱地址无效"\r
+\r
+msgid "It is NOT recommended for the casual user."\r
+msgstr "不推荐新手使用。"\r
+\r
+msgid "Local Set-up"\r
+msgstr "本地设置"\r
+\r
+msgid "Location of the Privoxy User Manual."\r
+msgstr "Privoxy用户手册位置"\r
+\r
+msgid "Log File Viewer"\r
+msgstr "日志查看器"\r
+\r
+msgid "Log all data read from the network"\r
+msgstr "记录所有从网络接收的数据"\r
+\r
+msgid "Log all data written to the network"\r
+msgstr "记录所有发送给网络的数据"\r
+\r
+msgid "Log the applying actions"\r
+msgstr "记录被应用的规则"\r
+\r
+msgid ""\r
+"Log the destination for each request Privoxy let through. See also 'Debug "\r
+"1024'."\r
+msgstr ""\r
+"记录Privoxy所允许的所有请求。另请参考'Debug 1024'。"\r
+\r
+msgid ""\r
+"Log the destination for requests Privoxy didn't let through, and the reason "\r
+"why."\r
+msgstr ""\r
+"记录被Privoxy拒绝的请求目标以及拒绝原因。"\r
+\r
+msgid "Logging"\r
+msgstr "日志"\r
+\r
+msgid "Main actions file"\r
+msgstr "主要规则文件"\r
+\r
+msgid "Mandatory Input: No Data given!"\r
+msgstr "必需选项: 没有设置数据!"\r
+\r
+msgid "Mandatory Input: No Directory given!"\r
+msgstr "必需选项: 没有设置目录!"\r
+\r
+msgid "Mandatory Input: No File given!"\r
+msgstr "必需选项: 没有设置文件!"\r
+\r
+msgid "Mandatory Input: No Port given!"\r
+msgstr "必需选项: 没有设置端口!"\r
+\r
+msgid "Mandatory Input: No files given!"\r
+msgstr "必需选项: 没有设置文件!"\r
+\r
+msgid "Mandatory Input: No valid IPv4 address or host given!"\r
+msgstr ""\r
+"必需选项: 没有设置有效的IPV4地址或者主机!"\r
+\r
+msgid "Mandatory Input: No valid IPv6 address given!"\r
+msgstr "必需选项: 没有设置有效的IPV6地址!"\r
+\r
+msgid "Mandatory Input: No valid Port given!"\r
+msgstr "必需选项: 没有设置有效的端口!"\r
+\r
+msgid "Maximum number of client connections that will be served."\r
+msgstr "客户端数量上限。"\r
+\r
+msgid "Maximum size (in KB) of the buffer for content filtering."\r
+msgstr "内容过滤的最大缓冲(单位KB)。"\r
+\r
+msgid "Miscellaneous"\r
+msgstr "杂项"\r
+\r
+msgid "No trailing '/', please."\r
+msgstr "路径结尾不要加'/' ."\r
+\r
+msgid "Non-fatal errors - *we highly recommended enabling this*"\r
+msgstr ""\r
+"非致命性错误 - * 建议开启 *"\r
+\r
+msgid ""\r
+"Number of seconds after which a socket times out if no data is received."\r
+msgstr ""\r
+"socket连接未收到数据的超时时间。"\r
+\r
+msgid ""\r
+"Number of seconds after which an open connection will no longer be reused."\r
+msgstr ""\r
+"一个开放的连接不再重复使用的超时时间。"\r
+\r
+msgid ""\r
+"Only when using 'external filters', Privoxy has to create temporary files."\r
+msgstr ""\r
+"只有使用外置规则时,privoxy才需要创建临时文件。"\r
+\r
+msgid "Please press [Read] button"\r
+msgstr "请点击[读取]按钮"\r
+\r
+msgid "Please read Privoxy manual for details!"\r
+msgstr "请阅读Privoxy手册以了解详情!"\r
+\r
+msgid "Please update to the current version!"\r
+msgstr "请升级到当前版本!"\r
+\r
+msgid "Privoxy WEB proxy"\r
+msgstr "Privoxy 网络代理"\r
+\r
+msgid ""\r
+"Privoxy can (and normally does) use a number of other files for additional "\r
+"configuration, help and logging. This section of the configuration file "\r
+"tells Privoxy where to find those other files."\r
+msgstr ""\r
+"Privoxy可以使用其他一些文件用于附加设置,帮助和日志。这个区域用来告诉Privoxy从哪里找到这些文件。"\r
+\r
+msgid ""\r
+"Privoxy is a non-caching web proxy with advanced filtering capabilities for "\r
+"enhancing privacy, modifying web page data and HTTP headers, controlling "\r
+"access, and removing ads and other obnoxious Internet junk."\r
+msgstr ""\r
+"Privoxy是一个无缓存的网络代理,具有高级过滤功能,能够修改网页数据和HTTP头,控制访问,移除广告等。"\r
+\r
+msgid "Read / Reread log file"\r
+msgstr "读取/刷新日志文件"\r
+\r
+msgid "Show I/O status"\r
+msgstr "显示 I/O 状态"\r
+\r
+msgid "Show each connection status"\r
+msgstr "显示每个连接的状态"\r
+\r
+msgid "Show header parsing"\r
+msgstr "Show header parsing"\r
+\r
+msgid "Software update required"\r
+msgstr "需要升级软件"\r
+\r
+msgid "Start"\r
+msgstr "启动"\r
+\r
+msgid "Start / Stop"\r
+msgstr "启动 / 停止"\r
+\r
+msgid "Start/Stop Privoxy WEB Proxy"\r
+msgstr "启动/停止 Privoxy 网络代理"\r
+\r
+msgid "Startup banner and warnings."\r
+msgstr "启动标语和警告。"\r
+\r
+msgid "Syntax:"\r
+msgstr "格式:"\r
+\r
+msgid "Syntax: Client header names delimited by spaces."\r
+msgstr "格式: Client header names delimited by spaces."\r
+\r
+msgid "Syntax: target_pattern http_parent[:port]"\r
+msgstr "格式: target_pattern http_parent[:port]"\r
+\r
+msgid "Syntax: target_pattern socks_proxy[:port] http_parent[:port]"\r
+msgstr "格式: target_pattern socks_proxy[:port] http_parent[:port]"\r
+\r
+msgid ""\r
+"The actions file(s) to use. Multiple actionsfile lines are permitted, and "\r
+"are in fact recommended!"\r
+msgstr ""\r
+"所使用的规则文件。允许并且推荐使用多个规则文件。"\r
+\r
+msgid ""\r
+"The address and TCP port on which Privoxy will listen for client requests."\r
+msgstr ""\r
+"Privoxy接收客户端请求时监听的地址和TCP端口。"\r
+\r
+msgid ""\r
+"The compression level that is passed to the zlib library when compressing "\r
+"buffered content."\r
+msgstr ""\r
+"使用zlib压缩缓冲内容时的压缩级别。"\r
+\r
+msgid ""\r
+"The currently installed 'privoxy' package is not supported by LuCI "\r
+"application."\r
+msgstr ""\r
+"目前安装的privoxy版本不被luci支持。"\r
+\r
+msgid ""\r
+"The directory where all logging takes place (i.e. where the logfile is "\r
+"located)."\r
+msgstr "所有日志所在的目录。"\r
+\r
+msgid "The directory where the other configuration files are located."\r
+msgstr "其他设置文件所在的目录。"\r
+\r
+msgid ""\r
+"The filter files contain content modification rules that use regular "\r
+"expressions."\r
+msgstr ""\r
+"过滤文件包含了使用正则表达式编写的内容修改规则"\r
+\r
+msgid "The hostname shown on the CGI pages."\r
+msgstr "CGI页面显示的主机名。"\r
+\r
+msgid "The log file to use. File name, relative to log directory."\r
+msgstr ""\r
+"日志文件名称,与日志路径相对。"\r
+\r
+msgid "The order in which client headers are sorted before forwarding them."\r
+msgstr ""\r
+"转发数据前,client headers的排序。"\r
+\r
+msgid ""\r
+"The status code Privoxy returns for pages blocked with +handle-as-empty-"\r
+"document."\r
+msgstr ""\r
+"当页面因为handle-as-empty-document规则被阻止时返回的状态码(选上为200 OK,不选上为403 Forbidden)"\r
+\r
+msgid ""\r
+"The trust mechanism is an experimental feature for building white-lists and "\r
+"should be used with care."\r
+msgstr ""\r
+"信任机制是一个实验性的白名单特性,使用时应小心。"\r
+\r
+msgid ""\r
+"The value of this option only matters if the experimental trust mechanism "\r
+"has been activated."\r
+msgstr ""\r
+"只有开启了信任机制时这个选项的值才有效"\r
+\r
+msgid ""\r
+"This option is only there for debugging purposes. It will drastically reduce "\r
+"performance."\r
+msgstr ""\r
+"这个选项仅用于调试,开启后会极大地降低性能。"\r
+\r
+msgid ""\r
+"This option will be removed in future releases as it has been obsoleted by "\r
+"the more general header taggers."\r
+msgstr "这个选项在以后的版本中将被移除,因为它被header taggers所取代了。"\r
+\r
+msgid ""\r
+"This tab controls the security-relevant aspects of Privoxy's configuration."\r
+msgstr ""\r
+"这个标签用于设置与安全相关的Privoxy选项。"\r
+\r
+msgid ""\r
+"Through which SOCKS proxy (and optionally to which parent HTTP proxy) "\r
+"specific requests should be routed."\r
+msgstr ""\r
+"指定的请求应该通过哪一个SOCKS代理(并且通过哪一个HTTP父代理,可选)"\r
+\r
+msgid "To which parent HTTP proxy specific requests should be routed."\r
+msgstr ""\r
+"请求应转发至哪一个父级HTTP代理。"\r
+\r
+msgid "User customizations"\r
+msgstr "用户自定义"\r
+\r
+msgid "Value is not a number"\r
+msgstr "输入值不是数字"\r
+\r
+msgid "Value not between 0 and 9"\r
+msgstr "输入值不在0和9之间。"\r
+\r
+msgid "Value not between 1 and 4096"\r
+msgstr "输入值不在1和4096之间"\r
+\r
+msgid "Value not greater 0 or empty"\r
+msgstr "输入值为空或者不是大于零。"\r
+\r
+msgid "Value range 1 to 4096, no entry defaults to 4096"\r
+msgstr "输入值为1到4096,默认为4096"\r
+\r
+msgid "Version"\r
+msgstr "版本"\r
+\r
+msgid "Version Information"\r
+msgstr "版本信息"\r
+\r
+msgid "Whether intercepted requests should be treated as valid."\r
+msgstr "被拦截的请求是否应被当作有效的。"\r
+\r
+msgid ""\r
+"Whether or not Privoxy recognizes special HTTP headers to change toggle "\r
+"state."\r
+msgstr ""\r
+"Privoxy是否识别特殊的HTTP头以切换状态。"\r
+\r
+msgid "Whether or not buffered content is compressed before delivery."\r
+msgstr ""\r
+"缓冲内容在传递之前是否压缩。"\r
+\r
+msgid ""\r
+"Whether or not outgoing connections that have been kept alive should be "\r
+"shared between different incoming connections."\r
+msgstr ""\r
+"持久出站连接是否应在不同的入站连接之间共享。"\r
+\r
+msgid "Whether or not pipelined requests should be served."\r
+msgstr "是否处理管道化的请求。"\r
+\r
+msgid "Whether or not proxy authentication through Privoxy should work."\r
+msgstr "是否可以通过Privoxy进行代理验证。"\r
+\r
+msgid "Whether or not the web-based actions file editor may be used."\r
+msgstr "是否使用基于网页的规则编辑器。"\r
+\r
+msgid "Whether or not the web-based toggle feature may be used."\r
+msgstr "是否启用基于网页的切换功能。"\r
+\r
+msgid "Whether requests to Privoxy's CGI pages can be blocked or redirected."\r
+msgstr "访问Privoxy CGI页面的请求是否可以被拦截或重定向。"\r
+\r
+\r
+msgid ""\r
+"Whether the CGI interface should stay compatible with broken HTTP clients."\r
+msgstr ""\r
+"CGI界面是否应兼容过时的HTTP客户端。"\r
+\r
+msgid "Whether to run only one server thread."\r
+msgstr "是否只运行一个服务线程。"\r
+\r
+msgid "Who can access what."\r
+msgstr "谁可以访问什么。"\r
+\r
+msgid "installed"\r
+msgstr "已安装"\r
+\r
+msgid "or higher"\r
+msgstr "或更高"\r
+\r
+msgid "required"\r
+msgstr "需要"\r
index 06b8d4e..177b17b 100644 (file)
@@ -63,25 +63,6 @@ dsth.rmempty = true
 dsth:value("", translate("all"))
 wa.cbi_add_knownips(dsth)
 
-l7 = s:option(ListValue, "layer7", translate("Service"))
-l7.rmempty = true
-l7:value("", translate("all"))
-
-local pats = io.popen("find /etc/l7-protocols/ -type f -name '*.pat'")
-if pats then
-       local l
-       while true do
-               l = pats:read("*l")
-               if not l then break end
-
-               l = l:match("([^/]+)%.pat$")
-               if l then
-                       l7:value(l)
-               end
-       end
-       pats:close()
-end
-
 p = s:option(Value, "proto", translate("Protocol"))
 p:value("", translate("all"))
 p:value("tcp", "TCP")
index 7871b12..e1430f1 100644 (file)
@@ -59,9 +59,6 @@ msgstr "QoS"
 msgid "Quality of Service"
 msgstr "Qualitat de Servei"
 
-msgid "Service"
-msgstr "Servei"
-
 msgid "Source host"
 msgstr "Host d'origen"
 
@@ -97,6 +94,9 @@ msgstr "normal"
 msgid "priority"
 msgstr "prioritat"
 
+#~ msgid "Service"
+#~ msgstr "Servei"
+
 #~ msgid "Downlink"
 #~ msgstr "Enllaç de baixada"
 
index 361e4d5..884310f 100644 (file)
@@ -59,9 +59,6 @@ msgstr "QoS"
 msgid "Quality of Service"
 msgstr "Quality of Service"
 
-msgid "Service"
-msgstr "Služba"
-
 msgid "Source host"
 msgstr "Zdrojová adresa"
 
@@ -97,6 +94,9 @@ msgstr "normální priorita"
 msgid "priority"
 msgstr "nejvyšší priorita (malé rámce)"
 
+#~ msgid "Service"
+#~ msgstr "Služba"
+
 #~ msgid "Downlink"
 #~ msgstr "Stahování"
 
index 6ba5701..46060de 100644 (file)
@@ -57,9 +57,6 @@ msgstr "QoS"
 msgid "Quality of Service"
 msgstr "Quality of Service"
 
-msgid "Service"
-msgstr "Dienst"
-
 msgid "Source host"
 msgstr "Quelladresse"
 
@@ -94,6 +91,9 @@ msgstr "normal"
 msgid "priority"
 msgstr "Priorität"
 
+#~ msgid "Service"
+#~ msgstr "Dienst"
+
 #~ msgid "Downlink"
 #~ msgstr "Downlink"
 
index b417b8b..9c8a985 100644 (file)
@@ -60,9 +60,6 @@ msgstr ""
 msgid "Quality of Service"
 msgstr "Ποιότητα Υπηρεσίας"
 
-msgid "Service"
-msgstr "Υπηρεσία"
-
 #, fuzzy
 msgid "Source host"
 msgstr "Διεύθυνση πηγής"
@@ -100,6 +97,9 @@ msgstr "κανονική"
 msgid "priority"
 msgstr "προτεραιότητα"
 
+#~ msgid "Service"
+#~ msgstr "Υπηρεσία"
+
 #, fuzzy
 #~ msgid "Downlink"
 #~ msgstr "Ταχύτητα κατεβάσματος"
index aeb7b27..b20180f 100644 (file)
@@ -53,9 +53,6 @@ msgstr ""
 msgid "Quality of Service"
 msgstr "Quality of Service"
 
-msgid "Service"
-msgstr "Service"
-
 msgid "Source host"
 msgstr "Source host"
 
@@ -89,3 +86,6 @@ msgstr "normal"
 
 msgid "priority"
 msgstr "priority"
+
+#~ msgid "Service"
+#~ msgstr "Service"
index 3c8206d..83ace8d 100644 (file)
@@ -55,9 +55,6 @@ msgstr "QoS"
 msgid "Quality of Service"
 msgstr "Calidad de Servicio"
 
-msgid "Service"
-msgstr "Servicio"
-
 msgid "Source host"
 msgstr "Máquina origen"
 
@@ -92,6 +89,9 @@ msgstr "normal"
 msgid "priority"
 msgstr "prioritario"
 
+#~ msgid "Service"
+#~ msgstr "Servicio"
+
 #~ msgid "Downlink"
 #~ msgstr "Enlace de bajada"
 
index a4a81f1..38e9ce8 100644 (file)
@@ -55,9 +55,6 @@ msgstr ""
 msgid "Quality of Service"
 msgstr "Qualité de service"
 
-msgid "Service"
-msgstr "Service"
-
 msgid "Source host"
 msgstr "Hôte source"
 
@@ -93,5 +90,8 @@ msgstr "normal"
 msgid "priority"
 msgstr "prioritaire"
 
+#~ msgid "Service"
+#~ msgstr "Service"
+
 #~ msgid "qos_connbytes"
 #~ msgstr "qos_connbytes"
index 71c2e3c..e2d42ef 100644 (file)
@@ -55,9 +55,6 @@ msgstr ""
 msgid "Quality of Service"
 msgstr ""
 
-msgid "Service"
-msgstr ""
-
 msgid "Source host"
 msgstr ""
 
index d69ff08..c77ac3c 100644 (file)
@@ -57,9 +57,6 @@ msgstr "QoS"
 msgid "Quality of Service"
 msgstr "Quality of Service"
 
-msgid "Service"
-msgstr "Szolgáltatás"
-
 msgid "Source host"
 msgstr "Forrás gép"
 
@@ -95,6 +92,9 @@ msgstr "normál"
 msgid "priority"
 msgstr "prioritás"
 
+#~ msgid "Service"
+#~ msgstr "Szolgáltatás"
+
 #~ msgid "Downlink"
 #~ msgstr "Downlink"
 
index 00fb331..686c745 100644 (file)
@@ -55,9 +55,6 @@ msgstr "QoS"
 msgid "Quality of Service"
 msgstr "Qualità del Servizio"
 
-msgid "Service"
-msgstr "Servizi"
-
 msgid "Source host"
 msgstr "Host sorgente"
 
@@ -92,6 +89,9 @@ msgstr "normale"
 msgid "priority"
 msgstr "priorità"
 
+#~ msgid "Service"
+#~ msgstr "Servizi"
+
 #~ msgid "Downlink"
 #~ msgstr "Collegamento discendente"
 
index 857cf5b..deeb23f 100644 (file)
@@ -55,9 +55,6 @@ msgstr ""
 msgid "Quality of Service"
 msgstr "Quality of Service"
 
-msgid "Service"
-msgstr "サービス"
-
 msgid "Source host"
 msgstr "送信元ホスト"
 
@@ -91,3 +88,6 @@ msgstr "標準"
 
 msgid "priority"
 msgstr "最優先"
+
+#~ msgid "Service"
+#~ msgstr "サービス"
index ab30492..f8d4ab3 100644 (file)
@@ -54,9 +54,6 @@ msgstr ""
 msgid "Quality of Service"
 msgstr ""
 
-msgid "Service"
-msgstr ""
-
 msgid "Source host"
 msgstr ""
 
index a560b0f..6b390a1 100644 (file)
@@ -50,9 +50,6 @@ msgstr "QoS"
 msgid "Quality of Service"
 msgstr "Quality of Service"
 
-msgid "Service"
-msgstr "Service"
-
 msgid "Source host"
 msgstr "Kilde vert"
 
@@ -87,6 +84,9 @@ msgstr "normal"
 msgid "priority"
 msgstr "prioritet"
 
+#~ msgid "Service"
+#~ msgstr "Service"
+
 #~ msgid "Downlink"
 #~ msgstr "Nedlinje"
 
index 7b740c7..3c6a28c 100644 (file)
@@ -56,9 +56,6 @@ msgstr "QoS"
 msgid "Quality of Service"
 msgstr "Jakość usługi (ang. Quality of Service)"
 
-msgid "Service"
-msgstr "Usługa"
-
 msgid "Source host"
 msgstr "Host źródłowy"
 
@@ -93,6 +90,9 @@ msgstr "normalny"
 msgid "priority"
 msgstr "priorytetowy"
 
+#~ msgid "Service"
+#~ msgstr "Usługa"
+
 #~ msgid "Downlink"
 #~ msgstr "Ruch przychodzący"
 
index 1ebaea2..43cd6e2 100644 (file)
@@ -58,9 +58,6 @@ msgstr "<abbr title=\"Quality of Service, Qualidade de serviço\">QoS</abbr>"
 msgid "Quality of Service"
 msgstr "Qualidade de Serviço"
 
-msgid "Service"
-msgstr "Serviço"
-
 msgid "Source host"
 msgstr "Endereço de origem"
 
@@ -96,6 +93,9 @@ msgstr "normal"
 msgid "priority"
 msgstr "prioritário"
 
+#~ msgid "Service"
+#~ msgstr "Serviço"
+
 #~ msgid "Downlink"
 #~ msgstr "Link para download"
 
index 2299a78..449ddce 100644 (file)
@@ -57,9 +57,6 @@ msgstr "QoS"
 msgid "Quality of Service"
 msgstr "Qualidade de Serviço"
 
-msgid "Service"
-msgstr "Serviço"
-
 msgid "Source host"
 msgstr "Host de origem"
 
@@ -94,6 +91,9 @@ msgstr "normal"
 msgid "priority"
 msgstr "prioridade"
 
+#~ msgid "Service"
+#~ msgstr "Serviço"
+
 #~ msgid "Downlink"
 #~ msgstr "Link para download"
 
index 239c1f8..9c88f7c 100644 (file)
@@ -58,9 +58,6 @@ msgstr "QoS"
 msgid "Quality of Service"
 msgstr "Quality of Service"
 
-msgid "Service"
-msgstr "Serviciu"
-
 msgid "Source host"
 msgstr ""
 
@@ -93,5 +90,8 @@ msgstr "normala"
 msgid "priority"
 msgstr "ridicata"
 
+#~ msgid "Service"
+#~ msgstr "Serviciu"
+
 #~ msgid "Internet Connection"
 #~ msgstr "Conexiune internet"
index 6c36392..811cbf1 100644 (file)
@@ -57,9 +57,6 @@ msgstr "QoS"
 msgid "Quality of Service"
 msgstr "Качество обслуживания (QoS)"
 
-msgid "Service"
-msgstr "Служба"
-
 msgid "Source host"
 msgstr "Хост источника"
 
@@ -94,6 +91,9 @@ msgstr "обычный"
 msgid "priority"
 msgstr "приоритетный"
 
+#~ msgid "Service"
+#~ msgstr "Служба"
+
 #~ msgid "Downlink"
 #~ msgstr "Нисходящий канал"
 
index 102e5a9..b4d10ab 100644 (file)
@@ -50,9 +50,6 @@ msgstr ""
 msgid "Quality of Service"
 msgstr ""
 
-msgid "Service"
-msgstr ""
-
 msgid "Source host"
 msgstr ""
 
index 44f8a35..1ba407e 100644 (file)
@@ -51,9 +51,6 @@ msgstr ""
 msgid "Quality of Service"
 msgstr ""
 
-msgid "Service"
-msgstr ""
-
 msgid "Source host"
 msgstr ""
 
index 26ea8f7..48333e4 100644 (file)
@@ -43,9 +43,6 @@ msgstr ""
 msgid "Quality of Service"
 msgstr ""
 
-msgid "Service"
-msgstr ""
-
 msgid "Source host"
 msgstr ""
 
index 74647be..d2f3611 100644 (file)
@@ -55,9 +55,6 @@ msgstr ""
 msgid "Quality of Service"
 msgstr ""
 
-msgid "Service"
-msgstr ""
-
 msgid "Source host"
 msgstr ""
 
index d48100b..5ec9f37 100644 (file)
@@ -58,9 +58,6 @@ msgstr "QoS"
 msgid "Quality of Service"
 msgstr "Якість обслуговування (QoS)"
 
-msgid "Service"
-msgstr "Сервіс"
-
 msgid "Source host"
 msgstr "Вихідний вузол"
 
@@ -96,6 +93,9 @@ msgstr "звичайний"
 msgid "priority"
 msgstr "пріоритетний"
 
+#~ msgid "Service"
+#~ msgstr "Сервіс"
+
 #~ msgid "Downlink"
 #~ msgstr "Низхідний канал"
 
index 8249272..32e7ed1 100644 (file)
@@ -60,9 +60,6 @@ msgstr ""
 msgid "Quality of Service"
 msgstr "Chất lượng dịch vụ "
 
-msgid "Service"
-msgstr ""
-
 #, fuzzy
 msgid "Source host"
 msgstr "Địa chỉ nguồn"
index 92ff7d0..0a5cd62 100644 (file)
@@ -55,9 +55,6 @@ msgstr "QoS"
 msgid "Quality of Service"
 msgstr "QOS服务"
 
-msgid "Service"
-msgstr "服务"
-
 msgid "Source host"
 msgstr "源主机"
 
@@ -90,6 +87,9 @@ msgstr "普通"
 msgid "priority"
 msgstr "最高"
 
+#~ msgid "Service"
+#~ msgstr "服务"
+
 #~ msgid "Downlink"
 #~ msgstr "下行"
 
index 5cc338b..a011e9c 100644 (file)
@@ -53,9 +53,6 @@ msgstr "先進先出頻寬管理"
 msgid "Quality of Service"
 msgstr "連線品質服務"
 
-msgid "Service"
-msgstr "服務"
-
 msgid "Source host"
 msgstr "來源主機"
 
@@ -90,6 +87,9 @@ msgstr "一般優先權"
 msgid "priority"
 msgstr "優先權"
 
+#~ msgid "Service"
+#~ msgstr "服務"
+
 #~ msgid "Downlink"
 #~ msgstr "下載"
 
index 07998ae..1501d4f 100644 (file)
@@ -10,7 +10,7 @@ PKG_NAME:=luci-app-radicale
 
 # Version == major.minor.patch
 # increase "minor" on new functionality and "patch" on patches/optimization
-PKG_VERSION:=1.0.0
+PKG_VERSION:=1.0.2
 
 # Release == build
 # increase on changes of translation files
old mode 100755 (executable)
new mode 100644 (file)
index 662c60d..10ec1fe
@@ -15,7 +15,7 @@ function index()
        entry( {"admin", "services", "radicale"}, alias("admin", "services", "radicale", "edit"), _("CalDAV/CardDAV"), 58)
        entry( {"admin", "services", "radicale", "edit"}, cbi("radicale") ).leaf = true
        entry( {"admin", "services", "radicale", "logview"}, call("_logread") ).leaf = true
-       entry( {"admin", "services", "radicale", "startstop"}, call("_startstop") ).leaf = true
+       entry( {"admin", "services", "radicale", "startstop"}, post("_startstop") ).leaf = true
        entry( {"admin", "services", "radicale", "status"}, call("_status") ).leaf = true
 end
 
@@ -82,7 +82,7 @@ function service_ok()
 end
 
 function app_title_main()
-       return  [[</a><a href="javascript:alert(']]
+       return  [[<a href="javascript:alert(']]
                        .. I18N.translate("Version Information")
                        .. [[\n\n]] .. luci_app_name()
                        .. [[\n\t]] .. I18N.translate("Version") .. [[:\t]]
@@ -100,12 +100,14 @@ function app_title_main()
                        .. [[\n\n]]
                .. [[')">]]
                .. I18N.translate("Radicale CalDAV/CardDAV Server")
+               .. [[</a>]]
 end
 function app_title_back()
-       return  [[</a><a href="]]
+       return  [[<a href="]]
                        .. DISP.build_url("admin", "services", "radicale")
                .. [[">]]
                .. I18N.translate("Radicale CalDAV/CardDAV Server")
+               .. [[</a>]]
 end
 function app_description()
        return  I18N.translate("The Radicale Project is a complete CalDAV (calendar) and CardDAV (contact) server solution.") .. [[<br />]]
@@ -122,8 +124,7 @@ end
 
 -- compare versions using "<=" "<" ">" ">=" "=" "<<" ">>"
 function ipkg_ver_compare(ver1, comp, ver2)
-       if not ver1 or not (#ver1 > 0)
-       or not ver2 or not (#ver2 > 0)
+       if not ver1 or not ver2
        or not comp or not (#comp > 0) then return nil end
        -- correct compare string
        if comp == "<>" or comp == "><" or comp == "!=" or comp == "~=" then comp = "~="
@@ -140,33 +141,19 @@ function ipkg_ver_compare(ver1, comp, ver2)
        for i = 1, math.max(table.getn(av1),table.getn(av2)), 1  do
                local s1 = av1[i] or ""
                local s2 = av2[i] or ""
-               local n1 = tonumber(s1)
-               local n2 = tonumber(s2)
-
-               -- one numeric and other empty string then set other to 0
-               if n1 and not n2 and (not s2 or #s2 == 0) then n2 = 0 end
-               if n2 and not n1 and (not s1 or #s1 == 0) then n1 = 0 end
-
-               local nc = (n1 and n2)  -- numeric compare
-
-               if nc then
-                       -- first "not equal" found return true
-                       if comp == "~=" and (n1 ~= n2) then return true end
-                       -- first "lower" found return true
-                       if (comp == "<" or comp == "<=") and (n1 < n2) then return true end
-                       -- first "greater" found return true
-                       if (comp == ">" or comp == ">=") and (n1 > n2) then return true end
-                       -- not equal then return false
-                       if (n1 ~= n2) then return false end
-               else
-                       if comp == "~=" and (s1 ~= s2) then return true end
-                       if (comp == "<" or comp == "<=") and (s1 < s2) then return true end
-                       if (comp == ">" or comp == ">=") and (s1 > s2) then return true end
-                       if (s1 ~= s2) then return false end
-               end
+
+               -- first "not equal" found return true
+               if comp == "~=" and (s1 ~= s2) then return true end
+               -- first "lower" found return true
+               if (comp == "<" or comp == "<=") and (s1 < s2) then return true end
+               -- first "greater" found return true
+               if (comp == ">" or comp == ">=") and (s1 > s2) then return true end
+               -- not equal then return false
+               if (s1 ~= s2) then return false end
        end
-       -- all equal then true
-       return true
+
+       -- all equal and not compare greater or lower then true
+       return not (comp == "<" or comp == ">")
 end
 
 -- read version information for given package if installed
index 79d1c36..dbf4ddd 100644 (file)
        function onclick_startstop(id) {
                // do start/stop
                var btnXHR = new XHR();
-               btnXHR.get('<%=luci.dispatcher.build_url("admin", "services", "radicale", "startstop")%>', null,
+               btnXHR.post('<%=url('admin/services/radicale/startstop')%>', { token: '<%=token%>' },
                        function(x) { _data2elements(x); }
                );
        }
 
-       XHR.poll(5, '<%=luci.dispatcher.build_url("admin", "services", "radicale", "status")%>', null,
+       XHR.poll(5, '<%=url('admin/services/radicale/status')%>', null,
                function(x, data) { _data2elements(x); }
        );
 
diff --git a/applications/luci-app-shadowsocks-libev/Makefile b/applications/luci-app-shadowsocks-libev/Makefile
new file mode 100644 (file)
index 0000000..848a5c8
--- /dev/null
@@ -0,0 +1,14 @@
+#
+# Copyright (C) 2008-2014 The LuCI Team <luci@lists.subsignal.org>
+#
+# This is free software, licensed under the Apache License, Version 2.0 .
+#
+
+include $(TOPDIR)/rules.mk
+
+LUCI_TITLE:=LuCI Support for Shadowsocks-libev
+LUCI_DEPENDS:=
+
+include ../../luci.mk
+
+# call BuildPackage - OpenWrt buildroot signature
diff --git a/applications/luci-app-shadowsocks-libev/luasrc/controller/shadowsocks-libev.lua b/applications/luci-app-shadowsocks-libev/luasrc/controller/shadowsocks-libev.lua
new file mode 100644 (file)
index 0000000..ae96816
--- /dev/null
+++ b/