From: Jo-Philipp Wich Date: Wed, 11 Nov 2015 09:15:33 +0000 (+0100) Subject: Merge pull request #396 from fanthos/master X-Git-Url: https://git.archive.openwrt.org/?p=project%2Fluci.git;a=commitdiff_plain;h=1cb3adb619bdd876867f4c4da615ea850464e711;hp=a948f4c77e6f403c71b09559ceffab8fafc210d5 Merge pull request #396 from fanthos/master luci-app-qos: Add custom QOS classes to luci dropdown list --- diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 7c4291318..a392ade0c 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -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 ) 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 index 42cf706f3..000000000 --- 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 index 70a7e92a4..000000000 --- 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 # diff --git a/README.md b/README.md index d5ad6b46a..abccff6b7 100644 --- 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. diff --git a/applications/luci-app-ahcp/luasrc/view/ahcp_status.htm b/applications/luci-app-ahcp/luasrc/view/ahcp_status.htm index 88796cb1c..946828953 100644 --- a/applications/luci-app-ahcp/luasrc/view/ahcp_status.htm +++ b/applications/luci-app-ahcp/luasrc/view/ahcp_status.htm @@ -1,5 +1,5 @@ @@ -64,13 +64,13 @@
-

Outgoing Call Routing

+

Outgoing Call Routing

Here you can manage your dial plans which are used to route outgoing calls from your local extensions.

Related tasks:
- Manage dialzones | - Manage voicemail boxes | - Manage meetme rooms + Manage dialzones | + Manage voicemail boxes | + Manage meetme rooms
@@ -85,7 +85,7 @@ Dialplan <%=plan.name%> - + Remove this dialplan @@ -109,10 +109,10 @@

- + Edit dialzone - + Remove from this dialplan @@ -134,10 +134,10 @@

- + Manage mailboxes ... - + Remove from this dialplan @@ -157,10 +157,10 @@

- + Manage conferences ... - + Remove from this dialplan diff --git a/applications/luci-app-asterisk/luasrc/view/asterisk/dialzones.htm b/applications/luci-app-asterisk/luasrc/view/asterisk/dialzones.htm index ac527918b..ffdbbcf35 100644 --- a/applications/luci-app-asterisk/luasrc/view/asterisk/dialzones.htm +++ b/applications/luci-app-asterisk/luasrc/view/asterisk/dialzones.htm @@ -47,7 +47,7 @@ %> -
" enctype="multipart/form-data"> +
@@ -55,9 +55,9 @@
-

Dial Zone Management

+

Dial Zone Management

- " class="cbi-title-ref">Back to dialplan overview

+ " class="cbi-title-ref">Back to dialplan overview

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. @@ -109,10 +109,10 @@ <%=rule.description or rule.name%> - + Edit entry - + Delete entry diff --git a/applications/luci-app-commands/luasrc/view/commands.htm b/applications/luci-app-commands/luasrc/view/commands.htm index 72f1e1dab..73b9e6a2c 100644 --- a/applications/luci-app-commands/luasrc/view/commands.htm +++ b/applications/luci-app-commands/luasrc/view/commands.htm @@ -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) @@ -135,7 +135,7 @@ ">
-

<%:Custom Commands%>

+

<%:Custom Commands%>

<% local _, command; for _, command in ipairs(commands) do %> diff --git a/applications/luci-app-ddns/luasrc/controller/ddns.lua b/applications/luci-app-ddns/luasrc/controller/ddns.lua index 946dfefbc..4fbd3c3fc 100644 --- a/applications/luci-app-ddns/luasrc/controller/ddns.lua +++ b/applications/luci-app-ddns/luasrc/controller/ddns.lua @@ -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 diff --git a/applications/luci-app-ddns/luasrc/model/cbi/ddns/detail.lua b/applications/luci-app-ddns/luasrc/model/cbi/ddns/detail.lua index 27f9a9f26..e655ce521 100644 --- a/applications/luci-app-ddns/luasrc/model/cbi/ddns/detail.lua +++ b/applications/luci-app-ddns/luasrc/model/cbi/ddns/detail.lua @@ -108,9 +108,8 @@ end -- cbi-map definition -- ####################################################### m = Map("ddns") --- first need to close from cbi map template our closed by template -m.title = [[]] .. - translate("Dynamic DNS") +m.title = [[]] .. + translate("Dynamic DNS") .. [[]] m.description = translate("Dynamic DNS allows that your router can be reached with " .. "a fixed hostname while having a dynamically changing " .. diff --git a/applications/luci-app-ddns/luasrc/model/cbi/ddns/global.lua b/applications/luci-app-ddns/luasrc/model/cbi/ddns/global.lua index fbd3cb337..25d09b73b 100644 --- a/applications/luci-app-ddns/luasrc/model/cbi/ddns/global.lua +++ b/applications/luci-app-ddns/luasrc/model/cbi/ddns/global.lua @@ -10,9 +10,8 @@ local DDNS = require "luci.tools.ddns" -- ddns multiused functions -- cbi-map definition -- ####################################################### local m = Map("ddns") --- first need to close from cbi map template our closed by template -m.title = [[]] - .. translate("Dynamic DNS") +m.title = [[]] + .. translate("Dynamic DNS") .. [[]] m.description = translate("Dynamic DNS allows that your router can be reached with " .. "a fixed hostname while having a dynamically changing IP address.") diff --git a/applications/luci-app-ddns/luasrc/model/cbi/ddns/hints.lua b/applications/luci-app-ddns/luasrc/model/cbi/ddns/hints.lua index ff7aa7a41..2a65fd04f 100644 --- a/applications/luci-app-ddns/luasrc/model/cbi/ddns/hints.lua +++ b/applications/luci-app-ddns/luasrc/model/cbi/ddns/hints.lua @@ -23,9 +23,8 @@ bold_off = [[]] -- cbi-map definition -- ####################################################### m = Map("ddns") --- first need to close from cbi map template our closed by template -m.title = [[]] .. - translate("Dynamic DNS") +m.title = [[]] .. + translate("Dynamic DNS") .. [[]] m.description = translate("Dynamic DNS allows that your router can be reached with " .. "a fixed hostname while having a dynamically changing " .. diff --git a/applications/luci-app-ddns/luasrc/model/cbi/ddns/overview.lua b/applications/luci-app-ddns/luasrc/model/cbi/ddns/overview.lua index 9e8df2d08..5b5925b25 100644 --- a/applications/luci-app-ddns/luasrc/model/cbi/ddns/overview.lua +++ b/applications/luci-app-ddns/luasrc/model/cbi/ddns/overview.lua @@ -26,8 +26,7 @@ bold_off = [[]] -- cbi-map definition -- ####################################################### m = Map("ddns") --- first need to close from cbi map template our closed by template -m.title = [[]] - .. translate("Dynamic DNS") + .. translate("Dynamic DNS") .. [[]] m.description = translate("Dynamic DNS allows that your router can be reached with " .. "a fixed hostname while having a dynamically changing " .. diff --git a/applications/luci-app-ddns/luasrc/view/ddns/detail_logview.htm b/applications/luci-app-ddns/luasrc/view/ddns/detail_logview.htm index 494b7435c..4dcb7bb6f 100644 --- a/applications/luci-app-ddns/luasrc/view/ddns/detail_logview.htm +++ b/applications/luci-app-ddns/luasrc/view/ddns/detail_logview.htm @@ -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%>"; diff --git a/applications/luci-app-ddns/luasrc/view/ddns/overview_status.htm b/applications/luci-app-ddns/luasrc/view/ddns/overview_status.htm index ea8e4a1e3..b6d4ebb9f 100644 --- a/applications/luci-app-ddns/luasrc/view/ddns/overview_status.htm +++ b/applications/luci-app-ddns/luasrc/view/ddns/overview_status.htm @@ -136,7 +136,7 @@ // 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 "&" or "&" @@ -155,7 +155,7 @@ } // 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); } } @@ -164,7 +164,7 @@ // 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); } } diff --git a/applications/luci-app-ddns/luasrc/view/ddns/system_status.htm b/applications/luci-app-ddns/luasrc/view/ddns/system_status.htm index 4ca0abb0e..06dca48a9 100644 --- a/applications/luci-app-ddns/luasrc/view/ddns/system_status.htm +++ b/applications/luci-app-ddns/luasrc/view/ddns/system_status.htm @@ -111,13 +111,13 @@ } // 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); } } @@ -126,7 +126,7 @@ //]]>
- <%:Dynamic DNS%> + <%:Dynamic DNS%> diff --git a/applications/luci-app-ddns/po/ca/ddns.po b/applications/luci-app-ddns/po/ca/ddns.po index 35f13eba5..c57b68938 100644 --- a/applications/luci-app-ddns/po/ca/ddns.po +++ b/applications/luci-app-ddns/po/ca/ddns.po @@ -462,6 +462,9 @@ msgid "" "settings." msgstr "" +msgid "The default setting of '0' will retry infinite." +msgstr "" + msgid "There is no service configured." msgstr "" diff --git a/applications/luci-app-ddns/po/cs/ddns.po b/applications/luci-app-ddns/po/cs/ddns.po index 455c72a6a..e957d58ab 100644 --- a/applications/luci-app-ddns/po/cs/ddns.po +++ b/applications/luci-app-ddns/po/cs/ddns.po @@ -460,6 +460,9 @@ msgid "" "settings." msgstr "" +msgid "The default setting of '0' will retry infinite." +msgstr "" + msgid "There is no service configured." msgstr "" diff --git a/applications/luci-app-ddns/po/el/ddns.po b/applications/luci-app-ddns/po/el/ddns.po index edbe19d14..821e17e65 100644 --- a/applications/luci-app-ddns/po/el/ddns.po +++ b/applications/luci-app-ddns/po/el/ddns.po @@ -459,6 +459,9 @@ msgid "" "settings." msgstr "" +msgid "The default setting of '0' will retry infinite." +msgstr "" + msgid "There is no service configured." msgstr "" diff --git a/applications/luci-app-ddns/po/en/ddns.po b/applications/luci-app-ddns/po/en/ddns.po index b706fa29e..a6ba0bb12 100644 --- a/applications/luci-app-ddns/po/en/ddns.po +++ b/applications/luci-app-ddns/po/en/ddns.po @@ -457,6 +457,9 @@ msgid "" "settings." msgstr "" +msgid "The default setting of '0' will retry infinite." +msgstr "" + msgid "There is no service configured." msgstr "" diff --git a/applications/luci-app-ddns/po/es/ddns.po b/applications/luci-app-ddns/po/es/ddns.po index 1948155d2..ebee43d74 100644 --- a/applications/luci-app-ddns/po/es/ddns.po +++ b/applications/luci-app-ddns/po/es/ddns.po @@ -458,6 +458,9 @@ msgid "" "settings." msgstr "" +msgid "The default setting of '0' will retry infinite." +msgstr "" + msgid "There is no service configured." msgstr "" diff --git a/applications/luci-app-ddns/po/fr/ddns.po b/applications/luci-app-ddns/po/fr/ddns.po index 94b61b695..84e86a964 100644 --- a/applications/luci-app-ddns/po/fr/ddns.po +++ b/applications/luci-app-ddns/po/fr/ddns.po @@ -458,6 +458,9 @@ msgid "" "settings." msgstr "" +msgid "The default setting of '0' will retry infinite." +msgstr "" + msgid "There is no service configured." msgstr "" diff --git a/applications/luci-app-ddns/po/he/ddns.po b/applications/luci-app-ddns/po/he/ddns.po index a6d20303b..45f5a6db9 100644 --- a/applications/luci-app-ddns/po/he/ddns.po +++ b/applications/luci-app-ddns/po/he/ddns.po @@ -461,6 +461,9 @@ msgid "" "settings." msgstr "" +msgid "The default setting of '0' will retry infinite." +msgstr "" + msgid "There is no service configured." msgstr "" diff --git a/applications/luci-app-ddns/po/hu/ddns.po b/applications/luci-app-ddns/po/hu/ddns.po index fdd9a17a8..20388d3ea 100644 --- a/applications/luci-app-ddns/po/hu/ddns.po +++ b/applications/luci-app-ddns/po/hu/ddns.po @@ -460,6 +460,9 @@ msgid "" "settings." msgstr "" +msgid "The default setting of '0' will retry infinite." +msgstr "" + msgid "There is no service configured." msgstr "" diff --git a/applications/luci-app-ddns/po/it/ddns.po b/applications/luci-app-ddns/po/it/ddns.po index 48e680912..77ebfb727 100644 --- a/applications/luci-app-ddns/po/it/ddns.po +++ b/applications/luci-app-ddns/po/it/ddns.po @@ -458,6 +458,9 @@ msgid "" "settings." msgstr "" +msgid "The default setting of '0' will retry infinite." +msgstr "" + msgid "There is no service configured." msgstr "" diff --git a/applications/luci-app-ddns/po/ja/ddns.po b/applications/luci-app-ddns/po/ja/ddns.po index 488bac990..1b608aa22 100644 --- a/applications/luci-app-ddns/po/ja/ddns.po +++ b/applications/luci-app-ddns/po/ja/ddns.po @@ -458,6 +458,9 @@ msgid "" "settings." msgstr "" +msgid "The default setting of '0' will retry infinite." +msgstr "" + msgid "There is no service configured." msgstr "" diff --git a/applications/luci-app-ddns/po/ms/ddns.po b/applications/luci-app-ddns/po/ms/ddns.po index 5b7f0dea6..ea11b9e35 100644 --- a/applications/luci-app-ddns/po/ms/ddns.po +++ b/applications/luci-app-ddns/po/ms/ddns.po @@ -456,6 +456,9 @@ msgid "" "settings." msgstr "" +msgid "The default setting of '0' will retry infinite." +msgstr "" + msgid "There is no service configured." msgstr "" diff --git a/applications/luci-app-ddns/po/no/ddns.po b/applications/luci-app-ddns/po/no/ddns.po index b805aa4f8..80374ee7c 100644 --- a/applications/luci-app-ddns/po/no/ddns.po +++ b/applications/luci-app-ddns/po/no/ddns.po @@ -449,6 +449,9 @@ msgid "" "settings." msgstr "" +msgid "The default setting of '0' will retry infinite." +msgstr "" + msgid "There is no service configured." msgstr "" diff --git a/applications/luci-app-ddns/po/pl/ddns.po b/applications/luci-app-ddns/po/pl/ddns.po index e016cc4a4..9907b1e64 100644 --- a/applications/luci-app-ddns/po/pl/ddns.po +++ b/applications/luci-app-ddns/po/pl/ddns.po @@ -459,6 +459,9 @@ msgid "" "settings." msgstr "" +msgid "The default setting of '0' will retry infinite." +msgstr "" + msgid "There is no service configured." msgstr "" diff --git a/applications/luci-app-ddns/po/pt-br/ddns.po b/applications/luci-app-ddns/po/pt-br/ddns.po index df2fff538..5dd243fe6 100644 --- a/applications/luci-app-ddns/po/pt-br/ddns.po +++ b/applications/luci-app-ddns/po/pt-br/ddns.po @@ -458,6 +458,9 @@ msgid "" "settings." msgstr "" +msgid "The default setting of '0' will retry infinite." +msgstr "" + msgid "There is no service configured." msgstr "" diff --git a/applications/luci-app-ddns/po/pt/ddns.po b/applications/luci-app-ddns/po/pt/ddns.po index 57654928d..a788ad257 100644 --- a/applications/luci-app-ddns/po/pt/ddns.po +++ b/applications/luci-app-ddns/po/pt/ddns.po @@ -460,6 +460,9 @@ msgid "" "settings." msgstr "" +msgid "The default setting of '0' will retry infinite." +msgstr "" + msgid "There is no service configured." msgstr "" diff --git a/applications/luci-app-ddns/po/ro/ddns.po b/applications/luci-app-ddns/po/ro/ddns.po index 78c39d5e9..f32c6e98c 100644 --- a/applications/luci-app-ddns/po/ro/ddns.po +++ b/applications/luci-app-ddns/po/ro/ddns.po @@ -461,6 +461,9 @@ msgid "" "settings." msgstr "" +msgid "The default setting of '0' will retry infinite." +msgstr "" + msgid "There is no service configured." msgstr "" diff --git a/applications/luci-app-ddns/po/ru/ddns.po b/applications/luci-app-ddns/po/ru/ddns.po index d4c0eb4a8..e76cda60c 100644 --- a/applications/luci-app-ddns/po/ru/ddns.po +++ b/applications/luci-app-ddns/po/ru/ddns.po @@ -460,6 +460,9 @@ msgid "" "settings." msgstr "" +msgid "The default setting of '0' will retry infinite." +msgstr "" + msgid "There is no service configured." msgstr "" diff --git a/applications/luci-app-ddns/po/sk/ddns.po b/applications/luci-app-ddns/po/sk/ddns.po index 3cd0f4c2c..45e6632f0 100644 --- a/applications/luci-app-ddns/po/sk/ddns.po +++ b/applications/luci-app-ddns/po/sk/ddns.po @@ -451,6 +451,9 @@ msgid "" "settings." msgstr "" +msgid "The default setting of '0' will retry infinite." +msgstr "" + msgid "There is no service configured." msgstr "" diff --git a/applications/luci-app-ddns/po/sv/ddns.po b/applications/luci-app-ddns/po/sv/ddns.po index cee36e725..c3b7c56e2 100644 --- a/applications/luci-app-ddns/po/sv/ddns.po +++ b/applications/luci-app-ddns/po/sv/ddns.po @@ -452,6 +452,9 @@ msgid "" "settings." msgstr "" +msgid "The default setting of '0' will retry infinite." +msgstr "" + msgid "There is no service configured." msgstr "" diff --git a/applications/luci-app-ddns/po/tr/ddns.po b/applications/luci-app-ddns/po/tr/ddns.po index 10492bccc..74be14ab2 100644 --- a/applications/luci-app-ddns/po/tr/ddns.po +++ b/applications/luci-app-ddns/po/tr/ddns.po @@ -458,6 +458,9 @@ msgid "" "settings." msgstr "" +msgid "The default setting of '0' will retry infinite." +msgstr "" + msgid "There is no service configured." msgstr "" diff --git a/applications/luci-app-ddns/po/uk/ddns.po b/applications/luci-app-ddns/po/uk/ddns.po index 0e2c5804a..58ded215e 100644 --- a/applications/luci-app-ddns/po/uk/ddns.po +++ b/applications/luci-app-ddns/po/uk/ddns.po @@ -461,6 +461,9 @@ msgid "" "settings." msgstr "" +msgid "The default setting of '0' will retry infinite." +msgstr "" + msgid "There is no service configured." msgstr "" diff --git a/applications/luci-app-ddns/po/vi/ddns.po b/applications/luci-app-ddns/po/vi/ddns.po index 5d5a7ede7..4b0cc91fd 100644 --- a/applications/luci-app-ddns/po/vi/ddns.po +++ b/applications/luci-app-ddns/po/vi/ddns.po @@ -461,6 +461,9 @@ msgid "" "settings." msgstr "" +msgid "The default setting of '0' will retry infinite." +msgstr "" + msgid "There is no service configured." msgstr "" diff --git a/applications/luci-app-ddns/po/zh-cn/ddns.po b/applications/luci-app-ddns/po/zh-cn/ddns.po index 862c2a052..381e6684e 100644 --- a/applications/luci-app-ddns/po/zh-cn/ddns.po +++ b/applications/luci-app-ddns/po/zh-cn/ddns.po @@ -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.
This is the default if you run DDNS scripts by yourself (i.e. via cron with force_interval set to '0')" -msgstr "现在,DDNS更新在开机或者接口动作时不会被触发
如果你手工运行DDNS脚本的话(例如使用cron时把force_interval设置为0),这是默认设置." +msgid "" +"Currently DDNS updates are not started at boot or on interface events.
This is the default if you run DDNS scripts by yourself (i.e. via cron with " +"force_interval set to '0')" +msgstr "" +"现在,DDNS更新在开机或者接口动作时不会被触发
如果你手工运行DDNS脚本的话" +"(例如使用cron时把force_interval设置为0),这是默认设置." -msgid "Currently DDNS updates are not started at boot or on interface events.
You can start/stop each configuration here. It will run until next reboot." -msgstr "现在,DDNS更新在开机或者接口动作时不会被触发
你可以在这里开始/停止每一个设置的条目.它在下次重启之前一直有效." +msgid "" +"Currently DDNS updates are not started at boot or on interface events.
You can start/stop each configuration here. It will run until next reboot." +msgstr "" +"现在,DDNS更新在开机或者接口动作时不会被触发
你可以在这里开始/停止每一个" +"设置的条目.它在下次重启之前一直有效." 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
You will find more hints to optimize your system to run DDNS scripts with all options" -msgstr "打开这个链接
你将会得到更多关于如何通过所有设置项优化你的系统以运行DDNS脚本的提示." +msgid "" +"Follow this link
You will find more hints to optimize your system to " +"run DDNS scripts with all options" +msgstr "" +"打开这个链接
你将会得到更多关于如何通过所有设置项优化你的系统以运行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
Please follow the instructions on OpenWrt's homepage to enable IPv6 support
or update your system to the latest OpenWrt Release" -msgstr "当前系统暂时不能(完整地)支持IPv6
请查看OpenWrt首页的介绍以启用IPv6支持
或者更新你的系统到最新OpenWrt版本" +msgid "" +"IPv6 is currently not (fully) supported by this system
Please follow " +"the instructions on OpenWrt's homepage to enable IPv6 support
or update " +"your system to the latest OpenWrt Release" +msgstr "" +"当前系统暂时不能(完整地)支持IPv6
请查看OpenWrt首页的介绍以启用IPv6支持" +"
或者更新你的系统到最新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.
Neither from LuCI interface nor from console" -msgstr "如果服务配置被禁用那么它将不能被启动.
无论是通过LuCI页面或者是通过终端." +msgid "" +"If this service section is disabled it could not be started.
Neither " +"from LuCI interface nor from console" +msgstr "" +"如果服务配置被禁用那么它将不能被启动.
无论是通过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
Values below 5 minutes == 300 seconds are not supported" +msgid "" +"Interval to check for changed IP
Values below 5 minutes == 300 seconds " +"are not supported" msgstr "检查IP是否改变的时间隔
不支持低于5分钟(300秒)的数值." -msgid "Interval to force updates send to DDNS Provider
Setting this parameter to 0 will force the script to only run once
Values lower 'Check Interval' except '0' are not supported" -msgstr "强制向提供商更新DDNS的时间周期
把这个参数设置为0将会让脚本仅执行一次
不支持低于\"检查时间周期\"的数值(除了0)." +msgid "" +"Interval to force updates send to DDNS Provider
Setting this parameter " +"to 0 will force the script to only run once
Values lower 'Check " +"Interval' except '0' are not supported" +msgstr "" +"强制向提供商更新DDNS的时间周期
把这个参数设置为0将会让脚本仅执行一次" +"
不支持低于\"检查时间周期\"的数值(除了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.
Follow instructions you will find on their WEB page." -msgstr "DDNS提供商用于更新DDNS的URL
跟随教程你将会在它们的网站上提供这个URL." +msgid "" +"Update URL to be used for updating your DDNS Provider.
Follow " +"instructions you will find on their WEB page." +msgstr "" +"DDNS提供商用于更新DDNS的URL
跟随教程你将会在它们的网站上提供这个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." diff --git a/applications/luci-app-ddns/po/zh-tw/ddns.po b/applications/luci-app-ddns/po/zh-tw/ddns.po index ec930f432..ec1fe779e 100644 --- a/applications/luci-app-ddns/po/zh-tw/ddns.po +++ b/applications/luci-app-ddns/po/zh-tw/ddns.po @@ -455,6 +455,9 @@ msgid "" "settings." msgstr "" +msgid "The default setting of '0' will retry infinite." +msgstr "" + msgid "There is no service configured." msgstr "" diff --git a/applications/luci-app-diag-core/luasrc/view/diag/index.htm b/applications/luci-app-diag-core/luasrc/view/diag/index.htm index 328c4eccb..c66776771 100644 --- a/applications/luci-app-diag-core/luasrc/view/diag/index.htm +++ b/applications/luci-app-diag-core/luasrc/view/diag/index.htm @@ -4,7 +4,7 @@ -%> <%+header%> -

<%:Diagnostics%>

+

<%:Diagnostics%>

<%:The entries in the menu allow you to perform diagnostic tests on your system to aid in troubleshooting.%>

<%:The diagnostics available under this menu depend on what modules you have installed on your device.%>

<%+footer%> diff --git a/applications/luci-app-diag-core/luasrc/view/diag/network_config_index.htm b/applications/luci-app-diag-core/luasrc/view/diag/network_config_index.htm index 595cc5f5f..3d01453e4 100644 --- a/applications/luci-app-diag-core/luasrc/view/diag/network_config_index.htm +++ b/applications/luci-app-diag-core/luasrc/view/diag/network_config_index.htm @@ -4,7 +4,7 @@ -%> <%+header%> -

<%:Diagnostics%>

+

<%:Diagnostics%>

<%:With this menu you can configure network diagnostics, such as network device scans and ping tests.%>

<%:The diagnostics available under this menu depend on what modules you have installed on your device.%>

<%+footer%> diff --git a/applications/luci-app-diag-devinfo/Makefile b/applications/luci-app-diag-devinfo/Makefile index 258fdee60..0424fffa0 100644 --- a/applications/luci-app-diag-devinfo/Makefile +++ b/applications/luci-app-diag-devinfo/Makefile @@ -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 diff --git a/applications/luci-app-dump1090/luasrc/model/cbi/dump1090.lua b/applications/luci-app-dump1090/luasrc/model/cbi/dump1090.lua index 6015ffe1f..4470a0d2f 100644 --- a/applications/luci-app-dump1090/luasrc/model/cbi/dump1090.lua +++ b/applications/luci-app-dump1090/luasrc/model/cbi/dump1090.lua @@ -1,4 +1,4 @@ --- Copyright 2014 Álvaro Fernández Rojas +-- Copyright 2014-2015 Álvaro Fernández Rojas -- 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 diff --git a/applications/luci-app-firewall/luasrc/model/cbi/firewall/zone-details.lua b/applications/luci-app-firewall/luasrc/model/cbi/firewall/zone-details.lua index 3eb95ebb5..c8b8f22bd 100644 --- a/applications/luci-app-firewall/luasrc/model/cbi/firewall/zone-details.lua +++ b/applications/luci-app-firewall/luasrc/model/cbi/firewall/zone-details.lua @@ -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 diff --git a/applications/luci-app-firewall/po/pl/firewall.po b/applications/luci-app-firewall/po/pl/firewall.po index 18be74d23..2ccd25ccc 100644 --- a/applications/luci-app-firewall/po/pl/firewall.po +++ b/applications/luci-app-firewall/po/pl/firewall.po @@ -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ę do wskazanych sieci żródłowych" +msgstr "Ogranicz maskaradę 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ącego, czyli pakiety żródłowe. Wykonywany jest zawsze po routowaniu " +"wychodzącego, 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." diff --git a/applications/luci-app-freifunk-diagnostics/luasrc/view/freifunk/diagnostics.htm b/applications/luci-app-freifunk-diagnostics/luasrc/view/freifunk/diagnostics.htm index 2f4914e5d..fe205d053 100644 --- a/applications/luci-app-freifunk-diagnostics/luasrc/view/freifunk/diagnostics.htm +++ b/applications/luci-app-freifunk-diagnostics/luasrc/view/freifunk/diagnostics.htm @@ -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") ">
-

<%:Diagnostics%>

+

<%:Diagnostics%>

<%:Network Utilities%> diff --git a/applications/luci-app-freifunk-widgets/luasrc/view/freifunk/widgets/search/main.htm b/applications/luci-app-freifunk-widgets/luasrc/view/freifunk/widgets/search/main.htm index e319f15fb..f2e2fb906 100644 --- a/applications/luci-app-freifunk-widgets/luasrc/view/freifunk/widgets/search/main.htm +++ b/applications/luci-app-freifunk-widgets/luasrc/view/freifunk/widgets/search/main.htm @@ -33,7 +33,7 @@ end

<%=title%>

- +
<% local checked = " checked" diff --git a/applications/luci-app-fwknopd/luasrc/model/cbi/fwknopd.lua b/applications/luci-app-fwknopd/luasrc/model/cbi/fwknopd.lua index 84a1a23d8..096724f73 100644 --- a/applications/luci-app-fwknopd/luasrc/model/cbi/fwknopd.lua +++ b/applications/luci-app-fwknopd/luasrc/model/cbi/fwknopd.lua @@ -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 index 1abc6a8f9..000000000 --- a/applications/luci-app-fwknopd/po/en/en.po +++ /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 \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 index 000000000..d75c99d52 --- /dev/null +++ b/applications/luci-app-fwknopd/po/en/fwknopd.po @@ -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 \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" diff --git a/applications/luci-app-fwknopd/po/templates/fwknopd.pot b/applications/luci-app-fwknopd/po/templates/fwknopd.pot index ec1550462..4fb616f25 100644 --- a/applications/luci-app-fwknopd/po/templates/fwknopd.pot +++ b/applications/luci-app-fwknopd/po/templates/fwknopd.pot @@ -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 "" diff --git a/applications/luci-app-fwknopd/root/etc/uci-defaults/luci-fwknopd b/applications/luci-app-fwknopd/root/etc/uci-defaults/luci-fwknopd index 689bedcd1..01b85de25 100644 --- a/applications/luci-app-fwknopd/root/etc/uci-defaults/luci-fwknopd +++ b/applications/luci-app-fwknopd/root/etc/uci-defaults/luci-fwknopd @@ -1,6 +1,7 @@ #!/bin/sh #-- Copyright 2015 Jonathan Bennett #-- Licensed to the public under the GNU General Public License v2. +. /lib/functions/network.sh uci batch <//', null, +XHR.poll(5, '<%=url('admin/telephony/status')%>', null, function(x, st) { var tb = document.getElementById('telephony_status_table'); diff --git a/applications/luci-app-minidlna/luasrc/view/minidlna_status.htm b/applications/luci-app-minidlna/luasrc/view/minidlna_status.htm index 098a72a07..866eded03 100644 --- a/applications/luci-app-minidlna/luasrc/view/minidlna_status.htm +++ b/applications/luci-app-minidlna/luasrc/view/minidlna_status.htm @@ -1,5 +1,5 @@ -

<%:Active host net announcements%>

+

<%:Active host net announcements%>

diff --git a/applications/luci-app-olsr/luasrc/view/status-olsr/interfaces.htm b/applications/luci-app-olsr/luasrc/view/status-olsr/interfaces.htm index 3fb3a58e9..81d0a3dd3 100644 --- a/applications/luci-app-olsr/luasrc/view/status-olsr/interfaces.htm +++ b/applications/luci-app-olsr/luasrc/view/status-olsr/interfaces.htm @@ -11,7 +11,7 @@ local i = 1 <%+header%> -

<%:Interfaces%>

+

<%:Interfaces%>

diff --git a/applications/luci-app-olsr/luasrc/view/status-olsr/mid.htm b/applications/luci-app-olsr/luasrc/view/status-olsr/mid.htm index 3c10bd66a..f658288fc 100644 --- a/applications/luci-app-olsr/luasrc/view/status-olsr/mid.htm +++ b/applications/luci-app-olsr/luasrc/view/status-olsr/mid.htm @@ -10,7 +10,7 @@ local i = 1 %> <%+header%> -

<%:Active MID announcements%>

+

<%:Active MID announcements%>

diff --git a/applications/luci-app-olsr/luasrc/view/status-olsr/neighbors.htm b/applications/luci-app-olsr/luasrc/view/status-olsr/neighbors.htm index 9ad0d8f89..31dd7d05a 100644 --- a/applications/luci-app-olsr/luasrc/view/status-olsr/neighbors.htm +++ b/applications/luci-app-olsr/luasrc/view/status-olsr/neighbors.htm @@ -105,7 +105,7 @@ end //]]> -

<%:OLSR connections%>

+

<%:OLSR connections%>

diff --git a/applications/luci-app-olsr/luasrc/view/status-olsr/overview.htm b/applications/luci-app-olsr/luasrc/view/status-olsr/overview.htm index 0a81d17b4..61e17b3b2 100644 --- a/applications/luci-app-olsr/luasrc/view/status-olsr/overview.htm +++ b/applications/luci-app-olsr/luasrc/view/status-olsr/overview.htm @@ -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', { },
-

OLSR <%:Overview%>

+

OLSR <%:Overview%>

<%:Network%> @@ -200,13 +202,18 @@ XHR.poll(10, '<%=REQUEST_URI%>/json', { }, -
<%:Download Config%> - OpenWrt, - <% if ipv == "6and4" then %> - OLSRD IPv4, - OLSRD IPv6 - <% else %> - OLSRD - <% end %> + <% if has_ipv4_conf then %> + OpenWrt (IPv4), + <% end %> + <% if has_ipv6_conf then %> + OpenWrt (IPv6), + <% end %> + <% if has_ipv4_conf then %> + OLSRD (IPv4), + <% end %> + <% if has_ipv6_conf then %> + OLSRD (IPv6) + <% end %>
diff --git a/applications/luci-app-olsr/luasrc/view/status-olsr/routes.htm b/applications/luci-app-olsr/luasrc/view/status-olsr/routes.htm index d2b0c1be8..8e46daa02 100644 --- a/applications/luci-app-olsr/luasrc/view/status-olsr/routes.htm +++ b/applications/luci-app-olsr/luasrc/view/status-olsr/routes.htm @@ -89,7 +89,7 @@ XHR.poll(20, '<%=REQUEST_URI%>', { status: 1 }, -

<%:Known OLSR routes%>

+

<%:Known OLSR routes%>

diff --git a/applications/luci-app-olsr/luasrc/view/status-olsr/smartgw.htm b/applications/luci-app-olsr/luasrc/view/status-olsr/smartgw.htm index 45f651533..6aa7a7546 100644 --- a/applications/luci-app-olsr/luasrc/view/status-olsr/smartgw.htm +++ b/applications/luci-app-olsr/luasrc/view/status-olsr/smartgw.htm @@ -86,7 +86,7 @@ XHR.poll(10, '<%=REQUEST_URI%>', { status: 1 }, <%+header%> -

<%:SmartGW announcements%>

+

<%:SmartGW announcements%>

diff --git a/applications/luci-app-olsr/luasrc/view/status-olsr/topology.htm b/applications/luci-app-olsr/luasrc/view/status-olsr/topology.htm index ee69f72d7..b3abeaecb 100644 --- a/applications/luci-app-olsr/luasrc/view/status-olsr/topology.htm +++ b/applications/luci-app-olsr/luasrc/view/status-olsr/topology.htm @@ -11,7 +11,7 @@ local olsrtools = require "luci.tools.olsr" %> <%+header%> -

<%:Active OLSR nodes%>

+

<%:Active OLSR nodes%>

diff --git a/applications/luci-app-openvpn/luasrc/model/cbi/openvpn-advanced.lua b/applications/luci-app-openvpn/luasrc/model/cbi/openvpn-advanced.lua index 7e39dad2e..fa1530026 100644 --- a/applications/luci-app-openvpn/luasrc/model/cbi/openvpn-advanced.lua +++ b/applications/luci-app-openvpn/luasrc/model/cbi/openvpn-advanced.lua @@ -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", { diff --git a/applications/luci-app-openvpn/luasrc/view/openvpn/pageswitch.htm b/applications/luci-app-openvpn/luasrc/view/openvpn/pageswitch.htm index ac5c8936e..f22cb68c7 100644 --- a/applications/luci-app-openvpn/luasrc/view/openvpn/pageswitch.htm +++ b/applications/luci-app-openvpn/luasrc/view/openvpn/pageswitch.htm @@ -6,14 +6,14 @@
- "><%:Overview%> » + <%:Overview%> » <%=luci.i18n.translatef("Instance \"%s\"", self.instance)%> <% if self.mode == "basic" then %> - "><%:Switch to advanced configuration »%> + "><%:Switch to advanced configuration »%> <% else %> - "><%:« Switch to basic configuration%> + <%:« Switch to basic configuration%>
<%:Configuration category%>: <% for i, c in ipairs(self.categories) do %> diff --git a/applications/luci-app-polipo/luasrc/view/polipo_status.htm b/applications/luci-app-polipo/luasrc/view/polipo_status.htm index c2695ca82..007d2d5e4 100644 --- a/applications/luci-app-polipo/luasrc/view/polipo_status.htm +++ b/applications/luci-app-polipo/luasrc/view/polipo_status.htm @@ -9,7 +9,7 @@ local port = uci:get("polipo", "general", "proxyPort") or "8123" <%+header%>
-

<%:Polipo Status%>

+

<%:Polipo Status%>

diff --git a/applications/luci-app-privoxy/Makefile b/applications/luci-app-privoxy/Makefile index bc2c57ee9..260f840c6 100644 --- a/applications/luci-app-privoxy/Makefile +++ b/applications/luci-app-privoxy/Makefile @@ -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 diff --git a/applications/luci-app-privoxy/luasrc/controller/privoxy.lua b/applications/luci-app-privoxy/luasrc/controller/privoxy.lua old mode 100755 new mode 100644 index 9ffc404ce..0cedab48a --- a/applications/luci-app-privoxy/luasrc/controller/privoxy.lua +++ b/applications/luci-app-privoxy/luasrc/controller/privoxy.lua @@ -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 diff --git a/applications/luci-app-privoxy/luasrc/model/cbi/privoxy.lua b/applications/luci-app-privoxy/luasrc/model/cbi/privoxy.lua old mode 100755 new mode 100644 index c009313e3..8ea249617 --- a/applications/luci-app-privoxy/luasrc/model/cbi/privoxy.lua +++ b/applications/luci-app-privoxy/luasrc/model/cbi/privoxy.lua @@ -14,7 +14,7 @@ local HELP = [[=",CTRL.PRIVOXY_MIN) -local TITLE = [[]] .. translate("Privoxy WEB proxy") + .. [[]] 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 diff --git a/applications/luci-app-privoxy/luasrc/view/privoxy/detail_logview.htm b/applications/luci-app-privoxy/luasrc/view/privoxy/detail_logview.htm old mode 100755 new mode 100644 index 3e190709f..ab0019bdd --- a/applications/luci-app-privoxy/luasrc/view/privoxy/detail_logview.htm +++ b/applications/luci-app-privoxy/luasrc/view/privoxy/detail_logview.htm @@ -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%>"; diff --git a/applications/luci-app-privoxy/luasrc/view/privoxy/detail_startstop.htm b/applications/luci-app-privoxy/luasrc/view/privoxy/detail_startstop.htm index b9de8864e..85975ac7d 100644 --- a/applications/luci-app-privoxy/luasrc/view/privoxy/detail_startstop.htm +++ b/applications/luci-app-privoxy/luasrc/view/privoxy/detail_startstop.htm @@ -21,12 +21,12 @@ 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 index 000000000..f69a8f928 --- /dev/null +++ b/applications/luci-app-privoxy/po/zh-cn/privoxy.po @@ -0,0 +1,468 @@ +msgid "" +msgstr "" +"Project-Id-Version: luci-app-privoxy\n" +"POT-Creation-Date: 2015-06-10 20:16+0100\n" +"PO-Revision-Date: 2015-06-10 20:16+0100\n" +"Last-Translator: maz-1 \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 "" +"A URL to be displayed in the error page that users will see if access to an " +"untrusted page is denied." +msgstr "" +"当用户试图访问不受信任的页面时,错误页面所显示的URL。" + + +msgid "" +"A URL to documentation about the local Privoxy setup, configuration or " +"policies." +msgstr "" +"指向Privoxy安装、设置和规则说明文档的URL" + + +msgid "A directory where Privoxy can create temporary files." +msgstr "Privoxy存放临时文件的目录。" + +msgid "Access Control" +msgstr "访问控制" + +msgid "Actions that are applied to all sites and maybe overruled later on." +msgstr "" +"作用在所有站点上的规则,可能被后面的规则覆盖。" + + +msgid "An alternative directory where the templates are loaded from." +msgstr "可选的目录,放在里面的模板会被加载。" + +msgid "An email address to reach the Privoxy administrator." +msgstr "用于联系privoxy管理员的邮箱地址。" + +msgid "" +"Assumed server-side keep-alive timeout (in seconds) if not specified by the " +"server." +msgstr "" +"当服务端没有指定超时时间时假定的超时时间(单位秒)。" + +msgid "CGI user interface" +msgstr "CGI用户界面" + +msgid "Common Log Format" +msgstr "通用日志格式" + +msgid "" +"Configure here the routing of HTTP requests through a chain of multiple " +"proxies. Note that parent proxies can severely decrease your privacy level. " +"Also specified here are SOCKS proxies." +msgstr "" +"在这里设置http请求所经过的多重代理链。" +"注意父级代理可能严重降低你的隐私安全度。" +"在这里还可以设置SOCKS代理。" + +msgid "Debug GIF de-animation" +msgstr "GIF动画日志" + +msgid "Debug force feature" +msgstr "force feature日志" + +msgid "Debug redirects" +msgstr "重定向日志" + +msgid "Debug regular expression filters" +msgstr "正则表达式日志" + +msgid "Directory does not exist!" +msgstr "目录不存在!" + +msgid "Disabled == Transparent Proxy Mode" +msgstr "禁用 == 透明代理模式" + +msgid "Enable proxy authentication forwarding" +msgstr "允许转发代理认证" + +msgid "" +"Enable/Disable autostart of Privoxy on system startup and interface events" +msgstr "" +"开启/关闭Privoxy在系统启动或者设置界面更改时自动启动。" + +msgid "Enable/Disable filtering when Privoxy starts." +msgstr "Privoxy启动时开启/关闭过滤。" + +msgid "Enabled" +msgstr "已开启" + +msgid "" +"Enabling this option is NOT recommended if there is no parent proxy that " +"requires authentication!" +msgstr "" +"父级代理不需要认证时不推荐开启这个选项!" + +msgid "File '%s' not found inside Configuration Directory" +msgstr "文件 '%s' 没有在设置目录中找到!" + +msgid "File not found or empty" +msgstr "文件不存在或为空" + +msgid "Files and Directories" +msgstr "文件和目录" + +msgid "For help use link at the relevant option" +msgstr "" +"在相应选项下的连接可获取帮助。" + +msgid "Forwarding" +msgstr "转发" + +msgid "" +"If enabled, Privoxy hides the 'go there anyway' link. The user obviously " +"should not be able to bypass any blocks." +msgstr "" +"如果启用,Privoxy会隐藏'go there anyway'链接。用户显然不应能绕过屏蔽。" + +msgid "" +"If you intend to operate Privoxy for more users than just yourself, it might " +"be a good idea to let them know how to reach you, what you block and why you " +"do that, your policies, etc." +msgstr "" +"如果除了你还有其他用户通过privoxy连接,让他们知道如何联系你、什么内容被屏蔽了、" +"你为什么要这么做、你所制定的规范等等是一个好主意。" + +msgid "Invalid email address" +msgstr "邮箱地址无效" + +msgid "It is NOT recommended for the casual user." +msgstr "不推荐新手使用。" + +msgid "Local Set-up" +msgstr "本地设置" + +msgid "Location of the Privoxy User Manual." +msgstr "Privoxy用户手册位置" + +msgid "Log File Viewer" +msgstr "日志查看器" + +msgid "Log all data read from the network" +msgstr "记录所有从网络接收的数据" + +msgid "Log all data written to the network" +msgstr "记录所有发送给网络的数据" + +msgid "Log the applying actions" +msgstr "记录被应用的规则" + +msgid "" +"Log the destination for each request Privoxy let through. See also 'Debug " +"1024'." +msgstr "" +"记录Privoxy所允许的所有请求。另请参考'Debug 1024'。" + +msgid "" +"Log the destination for requests Privoxy didn't let through, and the reason " +"why." +msgstr "" +"记录被Privoxy拒绝的请求目标以及拒绝原因。" + +msgid "Logging" +msgstr "日志" + +msgid "Main actions file" +msgstr "主要规则文件" + +msgid "Mandatory Input: No Data given!" +msgstr "必需选项: 没有设置数据!" + +msgid "Mandatory Input: No Directory given!" +msgstr "必需选项: 没有设置目录!" + +msgid "Mandatory Input: No File given!" +msgstr "必需选项: 没有设置文件!" + +msgid "Mandatory Input: No Port given!" +msgstr "必需选项: 没有设置端口!" + +msgid "Mandatory Input: No files given!" +msgstr "必需选项: 没有设置文件!" + +msgid "Mandatory Input: No valid IPv4 address or host given!" +msgstr "" +"必需选项: 没有设置有效的IPV4地址或者主机!" + +msgid "Mandatory Input: No valid IPv6 address given!" +msgstr "必需选项: 没有设置有效的IPV6地址!" + +msgid "Mandatory Input: No valid Port given!" +msgstr "必需选项: 没有设置有效的端口!" + +msgid "Maximum number of client connections that will be served." +msgstr "客户端数量上限。" + +msgid "Maximum size (in KB) of the buffer for content filtering." +msgstr "内容过滤的最大缓冲(单位KB)。" + +msgid "Miscellaneous" +msgstr "杂项" + +msgid "No trailing '/', please." +msgstr "路径结尾不要加'/' ." + +msgid "Non-fatal errors - *we highly recommended enabling this*" +msgstr "" +"非致命性错误 - * 建议开启 *" + +msgid "" +"Number of seconds after which a socket times out if no data is received." +msgstr "" +"socket连接未收到数据的超时时间。" + +msgid "" +"Number of seconds after which an open connection will no longer be reused." +msgstr "" +"一个开放的连接不再重复使用的超时时间。" + +msgid "" +"Only when using 'external filters', Privoxy has to create temporary files." +msgstr "" +"只有使用外置规则时,privoxy才需要创建临时文件。" + +msgid "Please press [Read] button" +msgstr "请点击[读取]按钮" + +msgid "Please read Privoxy manual for details!" +msgstr "请阅读Privoxy手册以了解详情!" + +msgid "Please update to the current version!" +msgstr "请升级到当前版本!" + +msgid "Privoxy WEB proxy" +msgstr "Privoxy 网络代理" + +msgid "" +"Privoxy can (and normally does) use a number of other files for additional " +"configuration, help and logging. This section of the configuration file " +"tells Privoxy where to find those other files." +msgstr "" +"Privoxy可以使用其他一些文件用于附加设置,帮助和日志。这个区域用来告诉Privoxy从哪里找到这些文件。" + +msgid "" +"Privoxy is a non-caching web proxy with advanced filtering capabilities for " +"enhancing privacy, modifying web page data and HTTP headers, controlling " +"access, and removing ads and other obnoxious Internet junk." +msgstr "" +"Privoxy是一个无缓存的网络代理,具有高级过滤功能,能够修改网页数据和HTTP头,控制访问,移除广告等。" + +msgid "Read / Reread log file" +msgstr "读取/刷新日志文件" + +msgid "Show I/O status" +msgstr "显示 I/O 状态" + +msgid "Show each connection status" +msgstr "显示每个连接的状态" + +msgid "Show header parsing" +msgstr "Show header parsing" + +msgid "Software update required" +msgstr "需要升级软件" + +msgid "Start" +msgstr "启动" + +msgid "Start / Stop" +msgstr "启动 / 停止" + +msgid "Start/Stop Privoxy WEB Proxy" +msgstr "启动/停止 Privoxy 网络代理" + +msgid "Startup banner and warnings." +msgstr "启动标语和警告。" + +msgid "Syntax:" +msgstr "格式:" + +msgid "Syntax: Client header names delimited by spaces." +msgstr "格式: Client header names delimited by spaces." + +msgid "Syntax: target_pattern http_parent[:port]" +msgstr "格式: target_pattern http_parent[:port]" + +msgid "Syntax: target_pattern socks_proxy[:port] http_parent[:port]" +msgstr "格式: target_pattern socks_proxy[:port] http_parent[:port]" + +msgid "" +"The actions file(s) to use. Multiple actionsfile lines are permitted, and " +"are in fact recommended!" +msgstr "" +"所使用的规则文件。允许并且推荐使用多个规则文件。" + +msgid "" +"The address and TCP port on which Privoxy will listen for client requests." +msgstr "" +"Privoxy接收客户端请求时监听的地址和TCP端口。" + +msgid "" +"The compression level that is passed to the zlib library when compressing " +"buffered content." +msgstr "" +"使用zlib压缩缓冲内容时的压缩级别。" + +msgid "" +"The currently installed 'privoxy' package is not supported by LuCI " +"application." +msgstr "" +"目前安装的privoxy版本不被luci支持。" + +msgid "" +"The directory where all logging takes place (i.e. where the logfile is " +"located)." +msgstr "所有日志所在的目录。" + +msgid "The directory where the other configuration files are located." +msgstr "其他设置文件所在的目录。" + +msgid "" +"The filter files contain content modification rules that use regular " +"expressions." +msgstr "" +"过滤文件包含了使用正则表达式编写的内容修改规则" + +msgid "The hostname shown on the CGI pages." +msgstr "CGI页面显示的主机名。" + +msgid "The log file to use. File name, relative to log directory." +msgstr "" +"日志文件名称,与日志路径相对。" + +msgid "The order in which client headers are sorted before forwarding them." +msgstr "" +"转发数据前,client headers的排序。" + +msgid "" +"The status code Privoxy returns for pages blocked with +handle-as-empty-" +"document." +msgstr "" +"当页面因为handle-as-empty-document规则被阻止时返回的状态码(选上为200 OK,不选上为403 Forbidden)" + +msgid "" +"The trust mechanism is an experimental feature for building white-lists and " +"should be used with care." +msgstr "" +"信任机制是一个实验性的白名单特性,使用时应小心。" + +msgid "" +"The value of this option only matters if the experimental trust mechanism " +"has been activated." +msgstr "" +"只有开启了信任机制时这个选项的值才有效" + +msgid "" +"This option is only there for debugging purposes. It will drastically reduce " +"performance." +msgstr "" +"这个选项仅用于调试,开启后会极大地降低性能。" + +msgid "" +"This option will be removed in future releases as it has been obsoleted by " +"the more general header taggers." +msgstr "这个选项在以后的版本中将被移除,因为它被header taggers所取代了。" + +msgid "" +"This tab controls the security-relevant aspects of Privoxy's configuration." +msgstr "" +"这个标签用于设置与安全相关的Privoxy选项。" + +msgid "" +"Through which SOCKS proxy (and optionally to which parent HTTP proxy) " +"specific requests should be routed." +msgstr "" +"指定的请求应该通过哪一个SOCKS代理(并且通过哪一个HTTP父代理,可选)" + +msgid "To which parent HTTP proxy specific requests should be routed." +msgstr "" +"请求应转发至哪一个父级HTTP代理。" + +msgid "User customizations" +msgstr "用户自定义" + +msgid "Value is not a number" +msgstr "输入值不是数字" + +msgid "Value not between 0 and 9" +msgstr "输入值不在0和9之间。" + +msgid "Value not between 1 and 4096" +msgstr "输入值不在1和4096之间" + +msgid "Value not greater 0 or empty" +msgstr "输入值为空或者不是大于零。" + +msgid "Value range 1 to 4096, no entry defaults to 4096" +msgstr "输入值为1到4096,默认为4096" + +msgid "Version" +msgstr "版本" + +msgid "Version Information" +msgstr "版本信息" + +msgid "Whether intercepted requests should be treated as valid." +msgstr "被拦截的请求是否应被当作有效的。" + +msgid "" +"Whether or not Privoxy recognizes special HTTP headers to change toggle " +"state." +msgstr "" +"Privoxy是否识别特殊的HTTP头以切换状态。" + +msgid "Whether or not buffered content is compressed before delivery." +msgstr "" +"缓冲内容在传递之前是否压缩。" + +msgid "" +"Whether or not outgoing connections that have been kept alive should be " +"shared between different incoming connections." +msgstr "" +"持久出站连接是否应在不同的入站连接之间共享。" + +msgid "Whether or not pipelined requests should be served." +msgstr "是否处理管道化的请求。" + +msgid "Whether or not proxy authentication through Privoxy should work." +msgstr "是否可以通过Privoxy进行代理验证。" + +msgid "Whether or not the web-based actions file editor may be used." +msgstr "是否使用基于网页的规则编辑器。" + +msgid "Whether or not the web-based toggle feature may be used." +msgstr "是否启用基于网页的切换功能。" + +msgid "Whether requests to Privoxy's CGI pages can be blocked or redirected." +msgstr "访问Privoxy CGI页面的请求是否可以被拦截或重定向。" + + +msgid "" +"Whether the CGI interface should stay compatible with broken HTTP clients." +msgstr "" +"CGI界面是否应兼容过时的HTTP客户端。" + +msgid "Whether to run only one server thread." +msgstr "是否只运行一个服务线程。" + +msgid "Who can access what." +msgstr "谁可以访问什么。" + +msgid "installed" +msgstr "已安装" + +msgid "or higher" +msgstr "或更高" + +msgid "required" +msgstr "需要" diff --git a/applications/luci-app-qos/luasrc/model/cbi/qos/qos.lua b/applications/luci-app-qos/luasrc/model/cbi/qos/qos.lua index 06b8d4e28..177b17b07 100644 --- a/applications/luci-app-qos/luasrc/model/cbi/qos/qos.lua +++ b/applications/luci-app-qos/luasrc/model/cbi/qos/qos.lua @@ -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") diff --git a/applications/luci-app-qos/po/ca/qos.po b/applications/luci-app-qos/po/ca/qos.po index 7871b1206..e1430f1ad 100644 --- a/applications/luci-app-qos/po/ca/qos.po +++ b/applications/luci-app-qos/po/ca/qos.po @@ -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" diff --git a/applications/luci-app-qos/po/cs/qos.po b/applications/luci-app-qos/po/cs/qos.po index 361e4d542..884310f66 100644 --- a/applications/luci-app-qos/po/cs/qos.po +++ b/applications/luci-app-qos/po/cs/qos.po @@ -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í" diff --git a/applications/luci-app-qos/po/de/qos.po b/applications/luci-app-qos/po/de/qos.po index 6ba5701fd..46060de21 100644 --- a/applications/luci-app-qos/po/de/qos.po +++ b/applications/luci-app-qos/po/de/qos.po @@ -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" diff --git a/applications/luci-app-qos/po/el/qos.po b/applications/luci-app-qos/po/el/qos.po index b417b8b9a..9c8a9851a 100644 --- a/applications/luci-app-qos/po/el/qos.po +++ b/applications/luci-app-qos/po/el/qos.po @@ -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 "Ταχύτητα κατεβάσματος" diff --git a/applications/luci-app-qos/po/en/qos.po b/applications/luci-app-qos/po/en/qos.po index aeb7b27b2..b20180f0d 100644 --- a/applications/luci-app-qos/po/en/qos.po +++ b/applications/luci-app-qos/po/en/qos.po @@ -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" diff --git a/applications/luci-app-qos/po/es/qos.po b/applications/luci-app-qos/po/es/qos.po index 3c8206ddc..83ace8d1f 100644 --- a/applications/luci-app-qos/po/es/qos.po +++ b/applications/luci-app-qos/po/es/qos.po @@ -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" diff --git a/applications/luci-app-qos/po/fr/qos.po b/applications/luci-app-qos/po/fr/qos.po index a4a81f124..38e9ce863 100644 --- a/applications/luci-app-qos/po/fr/qos.po +++ b/applications/luci-app-qos/po/fr/qos.po @@ -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" diff --git a/applications/luci-app-qos/po/he/qos.po b/applications/luci-app-qos/po/he/qos.po index 71c2e3c07..e2d42ef01 100644 --- a/applications/luci-app-qos/po/he/qos.po +++ b/applications/luci-app-qos/po/he/qos.po @@ -55,9 +55,6 @@ msgstr "" msgid "Quality of Service" msgstr "" -msgid "Service" -msgstr "" - msgid "Source host" msgstr "" diff --git a/applications/luci-app-qos/po/hu/qos.po b/applications/luci-app-qos/po/hu/qos.po index d69ff082a..c77ac3cd7 100644 --- a/applications/luci-app-qos/po/hu/qos.po +++ b/applications/luci-app-qos/po/hu/qos.po @@ -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" diff --git a/applications/luci-app-qos/po/it/qos.po b/applications/luci-app-qos/po/it/qos.po index 00fb331b3..686c74519 100644 --- a/applications/luci-app-qos/po/it/qos.po +++ b/applications/luci-app-qos/po/it/qos.po @@ -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" diff --git a/applications/luci-app-qos/po/ja/qos.po b/applications/luci-app-qos/po/ja/qos.po index 857cf5b83..deeb23f60 100644 --- a/applications/luci-app-qos/po/ja/qos.po +++ b/applications/luci-app-qos/po/ja/qos.po @@ -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 "サービス" diff --git a/applications/luci-app-qos/po/ms/qos.po b/applications/luci-app-qos/po/ms/qos.po index ab3049212..f8d4ab3d2 100644 --- a/applications/luci-app-qos/po/ms/qos.po +++ b/applications/luci-app-qos/po/ms/qos.po @@ -54,9 +54,6 @@ msgstr "" msgid "Quality of Service" msgstr "" -msgid "Service" -msgstr "" - msgid "Source host" msgstr "" diff --git a/applications/luci-app-qos/po/no/qos.po b/applications/luci-app-qos/po/no/qos.po index a560b0fa0..6b390a1d6 100644 --- a/applications/luci-app-qos/po/no/qos.po +++ b/applications/luci-app-qos/po/no/qos.po @@ -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" diff --git a/applications/luci-app-qos/po/pl/qos.po b/applications/luci-app-qos/po/pl/qos.po index 7b740c78f..3c6a28ccc 100644 --- a/applications/luci-app-qos/po/pl/qos.po +++ b/applications/luci-app-qos/po/pl/qos.po @@ -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" diff --git a/applications/luci-app-qos/po/pt-br/qos.po b/applications/luci-app-qos/po/pt-br/qos.po index 1ebaea2a2..43cd6e2a6 100644 --- a/applications/luci-app-qos/po/pt-br/qos.po +++ b/applications/luci-app-qos/po/pt-br/qos.po @@ -58,9 +58,6 @@ msgstr "QoS" 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" diff --git a/applications/luci-app-qos/po/pt/qos.po b/applications/luci-app-qos/po/pt/qos.po index 2299a7848..449ddce4c 100644 --- a/applications/luci-app-qos/po/pt/qos.po +++ b/applications/luci-app-qos/po/pt/qos.po @@ -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" diff --git a/applications/luci-app-qos/po/ro/qos.po b/applications/luci-app-qos/po/ro/qos.po index 239c1f850..9c88f7c2c 100644 --- a/applications/luci-app-qos/po/ro/qos.po +++ b/applications/luci-app-qos/po/ro/qos.po @@ -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" diff --git a/applications/luci-app-qos/po/ru/qos.po b/applications/luci-app-qos/po/ru/qos.po index 6c3639243..811cbf1e0 100644 --- a/applications/luci-app-qos/po/ru/qos.po +++ b/applications/luci-app-qos/po/ru/qos.po @@ -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 "Нисходящий канал" diff --git a/applications/luci-app-qos/po/sk/qos.po b/applications/luci-app-qos/po/sk/qos.po index 102e5a94e..b4d10ab31 100644 --- a/applications/luci-app-qos/po/sk/qos.po +++ b/applications/luci-app-qos/po/sk/qos.po @@ -50,9 +50,6 @@ msgstr "" msgid "Quality of Service" msgstr "" -msgid "Service" -msgstr "" - msgid "Source host" msgstr "" diff --git a/applications/luci-app-qos/po/sv/qos.po b/applications/luci-app-qos/po/sv/qos.po index 44f8a351e..1ba407e4b 100644 --- a/applications/luci-app-qos/po/sv/qos.po +++ b/applications/luci-app-qos/po/sv/qos.po @@ -51,9 +51,6 @@ msgstr "" msgid "Quality of Service" msgstr "" -msgid "Service" -msgstr "" - msgid "Source host" msgstr "" diff --git a/applications/luci-app-qos/po/templates/qos.pot b/applications/luci-app-qos/po/templates/qos.pot index 26ea8f797..48333e456 100644 --- a/applications/luci-app-qos/po/templates/qos.pot +++ b/applications/luci-app-qos/po/templates/qos.pot @@ -43,9 +43,6 @@ msgstr "" msgid "Quality of Service" msgstr "" -msgid "Service" -msgstr "" - msgid "Source host" msgstr "" diff --git a/applications/luci-app-qos/po/tr/qos.po b/applications/luci-app-qos/po/tr/qos.po index 74647be14..d2f3611cf 100644 --- a/applications/luci-app-qos/po/tr/qos.po +++ b/applications/luci-app-qos/po/tr/qos.po @@ -55,9 +55,6 @@ msgstr "" msgid "Quality of Service" msgstr "" -msgid "Service" -msgstr "" - msgid "Source host" msgstr "" diff --git a/applications/luci-app-qos/po/uk/qos.po b/applications/luci-app-qos/po/uk/qos.po index d48100b12..5ec9f3726 100644 --- a/applications/luci-app-qos/po/uk/qos.po +++ b/applications/luci-app-qos/po/uk/qos.po @@ -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 "Низхідний канал" diff --git a/applications/luci-app-qos/po/vi/qos.po b/applications/luci-app-qos/po/vi/qos.po index 82492727c..32e7ed17a 100644 --- a/applications/luci-app-qos/po/vi/qos.po +++ b/applications/luci-app-qos/po/vi/qos.po @@ -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" diff --git a/applications/luci-app-qos/po/zh-cn/qos.po b/applications/luci-app-qos/po/zh-cn/qos.po index 92ff7d089..0a5cd6220 100644 --- a/applications/luci-app-qos/po/zh-cn/qos.po +++ b/applications/luci-app-qos/po/zh-cn/qos.po @@ -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 "下行" diff --git a/applications/luci-app-qos/po/zh-tw/qos.po b/applications/luci-app-qos/po/zh-tw/qos.po index 5cc338bb0..a011e9ca9 100644 --- a/applications/luci-app-qos/po/zh-tw/qos.po +++ b/applications/luci-app-qos/po/zh-tw/qos.po @@ -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 "下載" diff --git a/applications/luci-app-radicale/Makefile b/applications/luci-app-radicale/Makefile index 07998aee5..1501d4f0e 100644 --- a/applications/luci-app-radicale/Makefile +++ b/applications/luci-app-radicale/Makefile @@ -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 diff --git a/applications/luci-app-radicale/luasrc/controller/radicale.lua b/applications/luci-app-radicale/luasrc/controller/radicale.lua old mode 100755 new mode 100644 index 662c60d5a..10ec1fe54 --- a/applications/luci-app-radicale/luasrc/controller/radicale.lua +++ b/applications/luci-app-radicale/luasrc/controller/radicale.lua @@ -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 [[]] .. I18N.translate("Radicale CalDAV/CardDAV Server") + .. [[]] end function app_title_back() - return [[]] .. I18N.translate("Radicale CalDAV/CardDAV Server") + .. [[]] end function app_description() return I18N.translate("The Radicale Project is a complete CalDAV (calendar) and CardDAV (contact) server solution.") .. [[
]] @@ -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 diff --git a/applications/luci-app-radicale/luasrc/model/cbi/radicale.lua b/applications/luci-app-radicale/luasrc/model/cbi/radicale.lua old mode 100755 new mode 100644 diff --git a/applications/luci-app-radicale/luasrc/view/radicale/btn_startstop.htm b/applications/luci-app-radicale/luasrc/view/radicale/btn_startstop.htm index 79d1c3629..dbf4dddbc 100644 --- a/applications/luci-app-radicale/luasrc/view/radicale/btn_startstop.htm +++ b/applications/luci-app-radicale/luasrc/view/radicale/btn_startstop.htm @@ -21,12 +21,12 @@ 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 index 000000000..848a5c831 --- /dev/null +++ b/applications/luci-app-shadowsocks-libev/Makefile @@ -0,0 +1,14 @@ +# +# Copyright (C) 2008-2014 The LuCI Team +# +# 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 index 000000000..ae968168f --- /dev/null +++ b/applications/luci-app-shadowsocks-libev/luasrc/controller/shadowsocks-libev.lua @@ -0,0 +1,12 @@ +-- Copyright 2015 Jian Chang +-- Licensed to the public under the Apache License 2.0. + +module("luci.controller.shadowsocks-libev", package.seeall) + +function index() + if not nixio.fs.access("/etc/config/shadowsocks-libev") then + return + end + + entry({"admin", "services", "shadowsocks-libev"}, cbi("shadowsocks-libev"), _("ShadowSocks-libev"), 74).dependent = true +end diff --git a/applications/luci-app-shadowsocks-libev/luasrc/model/cbi/shadowsocks-libev.lua b/applications/luci-app-shadowsocks-libev/luasrc/model/cbi/shadowsocks-libev.lua new file mode 100644 index 000000000..76435e2f1 --- /dev/null +++ b/applications/luci-app-shadowsocks-libev/luasrc/model/cbi/shadowsocks-libev.lua @@ -0,0 +1,156 @@ +-- Copyright 2015 Jian Chang +-- Licensed to the public under the Apache License 2.0. + +local m, s, o, e, a + +if luci.sys.call("pidof ss-redir >/dev/null") == 0 then + m = Map("shadowsocks-libev", translate("ShadowSocks-libev"), translate("ShadowSocks-libev is running")) +else + m = Map("shadowsocks-libev", translate("ShadowSocks-libev"), translate("ShadowSocks-libev is not running")) +end + +e = { + "table", + "rc4", + "rc4-md5", + "aes-128-cfb", + "aes-192-cfb", + "aes-256-cfb", + "bf-cfb", + "camellia-128-cfb", + "camellia-192-cfb", + "camellia-256-cfb", + "cast5-cfb", + "des-cfb", + "idea-cfb", + "rc2-cfb", + "seed-cfb", + "salsa20", + "chacha20", +} + +-- Global Setting +s = m:section(TypedSection, "shadowsocks-libev", translate("Global Setting")) +s.anonymous = true + +o = s:option(Flag, "enable", translate("Enable")) +o.default = 1 +o.rmempty = false + +o = s:option(Value, "server", translate("Server Address")) +o.datatype = "ipaddr" +o.rmempty = false + +o = s:option(Value, "server_port", translate("Server Port")) +o.datatype = "port" +o.rmempty = false + +o = s:option(Value, "local_port", translate("Local Port")) +o.datatype = "port" +o.default = 1080 +o.rmempty = false + +o = s:option(Value, "timeout", translate("Connection Timeout")) +o.datatype = "uinteger" +o.default = 60 +o.rmempty = false + +o = s:option(Value, "password", translate("Password")) +o.password = true +o.rmempty = false + +o = s:option(ListValue, "encrypt_method", translate("Encrypt Method")) +for i,v in ipairs(e) do + o:value(v) +end +o.rmempty = false + +o = s:option(Value, "ignore_list", translate("Ignore List")) +o:value("/dev/null", translate("Disabled")) +o.default = "/dev/null" +o.rmempty = false + +-- UDP Relay +s = m:section(TypedSection, "shadowsocks-libev", translate("UDP Relay")) +s.anonymous = true + +o = s:option(ListValue, "udp_mode", translate("Relay Mode")) +o:value("0", translate("Disabled")) +o:value("1", translate("Enabled")) +o:value("2", translate("Custom")) +o.default = 0 +o.rmempty = false + +o = s:option(Value, "udp_server", translate("Server Address")) +o.datatype = "ipaddr" +o:depends("udp_mode", 2) + +o = s:option(Value, "udp_server_port", translate("Server Port")) +o.datatype = "port" +o:depends("udp_mode", 2) + +o = s:option(Value, "udp_local_port", translate("Local Port")) +o.datatype = "port" +o.default = 1081 +o:depends("udp_mode", 2) + +o = s:option(Value, "udp_timeout", translate("Connection Timeout")) +o.datatype = "uinteger" +o.default = 60 +o:depends("udp_mode", 2) + +o = s:option(Value, "udp_password", translate("Password")) +o.password = true +o:depends("udp_mode", 2) + +o = s:option(ListValue, "udp_encrypt_method", translate("Encrypt Method")) +for i,v in ipairs(e) do + o:value(v) +end +o:depends("udp_mode", 2) + +-- UDP Forward +s = m:section(TypedSection, "shadowsocks-libev", translate("UDP Forward")) +s.anonymous = true + +o = s:option(Flag, "tunnel_enable", translate("Enable")) +o.default = 1 +o.rmempty = false + +o = s:option(Value, "tunnel_port", translate("UDP Local Port")) +o.datatype = "port" +o.default = 5300 + +o = s:option(Value, "tunnel_forward", translate("Forwarding Tunnel")) +o.default = "8.8.4.4:53" + +-- Access Control +s = m:section(TypedSection, "shadowsocks-libev", translate("Access Control")) +s.anonymous = true + +s:tab("lan_ac", translate("LAN")) + +o = s:taboption("lan_ac", ListValue, "lan_ac_mode", translate("Access Control")) +o:value("0", translate("Disabled")) +o:value("1", translate("Allow listed only")) +o:value("2", translate("Allow all except listed")) +o.default = 0 +o.rmempty = false + +a = luci.sys.net.arptable() or {} + +o = s:taboption("lan_ac", DynamicList, "lan_ac_ip", translate("LAN IP List")) +o.datatype = "ipaddr" +for i,v in ipairs(a) do + o:value(v["IP address"]) +end + +s:tab("wan_ac", translate("WAN")) + +o = s:taboption("wan_ac", DynamicList, "wan_bp_ip", translate("Bypassed IP")) +o.datatype = "ip4addr" + +o = s:taboption("wan_ac", DynamicList, "wan_fw_ip", translate("Forwarded IP")) +o.datatype = "ip4addr" + +return m diff --git a/applications/luci-app-shadowsocks-libev/po/templates/shadowsocks-libev.pot b/applications/luci-app-shadowsocks-libev/po/templates/shadowsocks-libev.pot new file mode 100644 index 000000000..81bbcb72f --- /dev/null +++ b/applications/luci-app-shadowsocks-libev/po/templates/shadowsocks-libev.pot @@ -0,0 +1,86 @@ +msgid "" +msgstr "Content-Type: text/plain; charset=UTF-8" + +msgid "Access Control" +msgstr "" + +msgid "Allow all except listed" +msgstr "" + +msgid "Allow listed only" +msgstr "" + +msgid "Bypassed IP" +msgstr "" + +msgid "Connection Timeout" +msgstr "" + +msgid "Custom" +msgstr "" + +msgid "Disabled" +msgstr "" + +msgid "Enable" +msgstr "" + +msgid "Enabled" +msgstr "" + +msgid "Encrypt Method" +msgstr "" + +msgid "Forwarded IP" +msgstr "" + +msgid "Forwarding Tunnel" +msgstr "" + +msgid "Global Setting" +msgstr "" + +msgid "Ignore List" +msgstr "" + +msgid "LAN" +msgstr "" + +msgid "LAN IP List" +msgstr "" + +msgid "Local Port" +msgstr "" + +msgid "Password" +msgstr "" + +msgid "Relay Mode" +msgstr "" + +msgid "Server Address" +msgstr "" + +msgid "Server Port" +msgstr "" + +msgid "ShadowSocks-libev" +msgstr "" + +msgid "ShadowSocks-libev is not running" +msgstr "" + +msgid "ShadowSocks-libev is running" +msgstr "" + +msgid "UDP Forward" +msgstr "" + +msgid "UDP Local Port" +msgstr "" + +msgid "UDP Relay" +msgstr "" + +msgid "WAN" +msgstr "" diff --git a/applications/luci-app-shadowsocks-libev/po/zh-cn/shadowsocks-libev.po b/applications/luci-app-shadowsocks-libev/po/zh-cn/shadowsocks-libev.po new file mode 100644 index 000000000..f86eee7e9 --- /dev/null +++ b/applications/luci-app-shadowsocks-libev/po/zh-cn/shadowsocks-libev.po @@ -0,0 +1,97 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-11-12 14:12+0800\n" +"PO-Revision-Date: 2015-07-02 14:26+0800\n" +"Last-Translator: Jian Chang \n" +"Language: zh_CN\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Pootle 2.0.6\n" + +msgid "Access Control" +msgstr "访问控制" + +msgid "Allow all except listed" +msgstr "仅允许列表外" + +msgid "Allow listed only" +msgstr "仅允许列表内" + +msgid "Bypassed IP" +msgstr "被忽略的IP" + +msgid "Connection Timeout" +msgstr "连接超时" + +msgid "Custom" +msgstr "自定义" + +msgid "Disabled" +msgstr "已禁用" + +msgid "Enable" +msgstr "启用" + +msgid "Enabled" +msgstr "已启用" + +msgid "Encrypt Method" +msgstr "加密方式" + +msgid "Forwarded IP" +msgstr "走代理的IP" + +msgid "Forwarding Tunnel" +msgstr "UDP转发地址" + +msgid "Global Setting" +msgstr "全局设置" + +msgid "Ignore List" +msgstr "忽略列表" + +msgid "LAN" +msgstr "" + +msgid "LAN IP List" +msgstr "内网IP列表" + +msgid "Local Port" +msgstr "本地端口" + +msgid "Password" +msgstr "密码" + +msgid "Relay Mode" +msgstr "中继模式" + +msgid "Server Address" +msgstr "服务器地址" + +msgid "Server Port" +msgstr "服务器端口" + +msgid "ShadowSocks-libev" +msgstr "ShadowSocks-libev" + +msgid "ShadowSocks-libev is not running" +msgstr "ShadowSocks-libev 未运行" + +msgid "ShadowSocks-libev is running" +msgstr "ShadowSocks-libev 运行中" + +msgid "UDP Forward" +msgstr "UDP转发" + +msgid "UDP Local Port" +msgstr "UDP本地端口" + +msgid "UDP Relay" +msgstr "UDP中继" + +msgid "WAN" +msgstr "" diff --git a/applications/luci-app-shadowsocks-libev/root/etc/uci-defaults/luci-shadowsocks-libev b/applications/luci-app-shadowsocks-libev/root/etc/uci-defaults/luci-shadowsocks-libev new file mode 100644 index 000000000..6f30fa77b --- /dev/null +++ b/applications/luci-app-shadowsocks-libev/root/etc/uci-defaults/luci-shadowsocks-libev @@ -0,0 +1,11 @@ +#!/bin/sh + +uci -q batch <<-EOF >/dev/null + delete ucitrack.@shadowsocks-libev[-1] + add ucitrack shadowsocks-libev + set ucitrack.@shadowsocks-libev[-1].init=shadowsocks-libev + commit ucitrack +EOF + +rm -f /tmp/luci-indexcache +exit 0 diff --git a/applications/luci-app-splash/htdocs/cgi-bin/splash/splash.sh b/applications/luci-app-splash/htdocs/cgi-bin/splash/splash.sh index 76f6d4d3e..da8370daf 100755 --- a/applications/luci-app-splash/htdocs/cgi-bin/splash/splash.sh +++ b/applications/luci-app-splash/htdocs/cgi-bin/splash/splash.sh @@ -1,13 +1,11 @@ #!/bin/sh $(uci -q get luci_splash.general.redirect_url) || { - set -x touch /var/state/luci_splash_locations touch /etc/config/luci_splash_locations MAC=$(grep "$REMOTE_HOST" /proc/net/arp | awk '{print $4}') uci -P /var/state set luci_splash_locations.${MAC//:/}=redirect uci -P /var/state set luci_splash_locations.${MAC//:/}.location="http://${HTTP_HOST}${REQUEST_URI}" - set +x } echo -en "Cache-Control: no-cache, max-age=0, no-store, must-revalidate\r\n" diff --git a/applications/luci-app-splash/luasrc/controller/splash/splash.lua b/applications/luci-app-splash/luasrc/controller/splash/splash.lua index 4add43559..13b8edce6 100644 --- a/applications/luci-app-splash/luasrc/controller/splash/splash.lua +++ b/applications/luci-app-splash/luasrc/controller/splash/splash.lua @@ -16,7 +16,7 @@ function index() node("splash", "splash").target = template("splash_splash/splash") node("splash", "blocked").target = template("splash/blocked") - entry({"admin", "status", "splash"}, call("action_status_admin"), _("Client-Splash")) + entry({"admin", "status", "splash"}, post("action_status_admin"), _("Client-Splash")) local page = node("splash", "publicstatus") page.target = call("action_status_public") diff --git a/applications/luci-app-splash/luasrc/view/admin_status/splash.htm b/applications/luci-app-splash/luasrc/view/admin_status/splash.htm index 831fa75f6..3415c205d 100644 --- a/applications/luci-app-splash/luasrc/view/admin_status/splash.htm +++ b/applications/luci-app-splash/luasrc/view/admin_status/splash.htm @@ -210,11 +210,11 @@ end
-

<%:Client-Splash%>

+

<%:Client-Splash%>

<%:Active Clients%>
- <% if is_admin then %><% end %> + <% if is_admin then %><% end %> diff --git a/applications/luci-app-splash/luasrc/view/splash/blocked.htm b/applications/luci-app-splash/luasrc/view/splash/blocked.htm index 406139b51..c27e2fab6 100644 --- a/applications/luci-app-splash/luasrc/view/splash/blocked.htm +++ b/applications/luci-app-splash/luasrc/view/splash/blocked.htm @@ -9,7 +9,7 @@ local contacturl = luci.dispatcher.build_url("freifunk", "contact") <%+header%> -

<%:Blocked%>

+

<%:Blocked%>

<%:Your access to this network has been blocked, most likely because you did something that our rules explicitly forbid.%>

<%:To ask for the reason why you have been blocked or ask for access again you can try to contact the owner of this access point:%> <%:Contact%>

diff --git a/applications/luci-app-splash/luasrc/view/splash/splash.htm b/applications/luci-app-splash/luasrc/view/splash/splash.htm index 7626b600d..8d84463ef 100644 --- a/applications/luci-app-splash/luasrc/view/splash/splash.htm +++ b/applications/luci-app-splash/luasrc/view/splash/splash.htm @@ -72,7 +72,7 @@ if has_custom_splash then <% else %> -

<%:Welcome%>

+

<%:Welcome%>

<%:You are now connected to the free wireless mesh network%> <%=community%>. <%:Please note that we are not an internet service provider but an experimental community network.%>

diff --git a/applications/luci-app-statistics/luasrc/controller/luci_statistics/luci_statistics.lua b/applications/luci-app-statistics/luasrc/controller/luci_statistics/luci_statistics.lua index c532b4a6d..3f26aeed6 100644 --- a/applications/luci-app-statistics/luasrc/controller/luci_statistics/luci_statistics.lua +++ b/applications/luci-app-statistics/luasrc/controller/luci_statistics/luci_statistics.lua @@ -20,7 +20,7 @@ function index() local labels = { s_output = _("Output plugins"), - s_system = _("System plugins"), + s_general = _("General plugins"), s_network = _("Network plugins"), conntrack = _("Conntrack"), @@ -30,6 +30,7 @@ function index() disk = _("Disk Usage"), dns = _("DNS"), email = _("Email"), + entropy = _("Entropy"), exec = _("Exec"), interface = _("Interfaces"), iptables = _("Firewall"), @@ -41,9 +42,11 @@ function index() network = _("Network"), nut = _("UPS"), olsrd = _("OLSRd"), + openvpn = _("OpenVPN"), ping = _("Ping"), processes = _("Processes"), rrdtool = _("RRDTool"), + sensors = _("Sensors"), splash_leases = _("Splash Leases"), tcpconns = _("TCP Connections"), unixsock = _("UnixSock"), @@ -53,15 +56,15 @@ function index() -- our collectd menu local collectd_menu = { output = { "csv", "network", "rrdtool", "unixsock" }, - system = { "cpu", "df", "disk", "email", "exec", "irq", "load", "memory", "nut", "processes", "uptime" }, - network = { "conntrack", "dns", "interface", "iptables", "netlink", "olsrd", "ping", "splash_leases", "tcpconns", "iwinfo" } + general = { "cpu", "df", "disk", "email", "entropy", "exec", "irq", "load", "memory", "nut", "processes", "sensors", "uptime" }, + network = { "conntrack", "dns", "interface", "iptables", "netlink", "olsrd", "openvpn", "ping", "splash_leases", "tcpconns", "iwinfo" } } -- create toplevel menu nodes local st = entry({"admin", "statistics"}, template("admin_statistics/index"), _("Statistics"), 80) st.index = true - entry({"admin", "statistics", "collectd"}, cbi("luci_statistics/collectd"), _("Collectd"), 10).subindex = true + entry({"admin", "statistics", "collectd"}, cbi("luci_statistics/collectd"), _("Setup"), 20).subindex = true -- populate collectd plugin menu @@ -86,7 +89,7 @@ function index() end -- output views - local page = entry( { "admin", "statistics", "graph" }, template("admin_statistics/index"), _("Graphs"), 80) + local page = entry( { "admin", "statistics", "graph" }, template("admin_statistics/index"), _("Graphs"), 10) page.setuser = "nobody" page.setgroup = "nogroup" @@ -169,7 +172,7 @@ function statistics_render() if #instances == 0 then --instances = { graph.tree:plugin_instances( plugin )[1] } instances = graph.tree:plugin_instances( plugin ) - is_index = true + is_index = (#instances > 1) -- index instance requested elseif instances[1] == "-" then diff --git a/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/entropy.lua b/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/entropy.lua new file mode 100644 index 000000000..d18bf910f --- /dev/null +++ b/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/entropy.lua @@ -0,0 +1,14 @@ +-- Copyright 2015 Hannu Nyman +-- Licensed to the public under the Apache License 2.0. + +m = Map("luci_statistics", + translate("Entropy Plugin Configuration"), + translate("The entropy plugin collects statistics about the available entropy.")) + +s = m:section( NamedSection, "collectd_entropy", "luci_statistics" ) + +enable = s:option( Flag, "enable", translate("Enable this plugin") ) +enable.default = 0 + +return m + diff --git a/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/network.lua b/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/network.lua index 54b15de83..547badf56 100644 --- a/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/network.lua +++ b/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/network.lua @@ -6,7 +6,7 @@ m = Map("luci_statistics", translate( "The network plugin provides network based communication between " .. "different collectd instances. Collectd can operate both in client " .. - "and server mode. In client mode locally collected date is " .. + "and server mode. In client mode locally collected data is " .. "transferred to a collectd server instance, in server mode the " .. "local instance receives data from other hosts." )) diff --git a/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/openvpn.lua b/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/openvpn.lua new file mode 100644 index 000000000..193f0448a --- /dev/null +++ b/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/openvpn.lua @@ -0,0 +1,56 @@ +-- Copyright 2015 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +require "luci.sys" + +local m, s, o + + +m = Map("luci_statistics", + translate("OpenVPN Plugin Configuration"), + translate("The OpenVPN plugin gathers information about the current vpn connection status.")) + +s = m:section( NamedSection, "collectd_openvpn", "luci_statistics" ) + + +o = s:option( Flag, "enable", translate("Enable this plugin") ) +o.default = "0" + + +o = s:option(Flag, "CollectIndividualUsers", translate("Generate a separate graph for each logged user")) +o.default = "0" +o.rmempty = true +o:depends("enable", 1) + + +o = s:option(Flag, "CollectUserCount", translate("Aggregate number of connected users")) +o.default = "0" +o.rmempty = true +o:depends("enable", 1) + + +o = s:option(Flag, "CollectCompression", translate("Gather compression statistics")) +o.default = "0" +o.rmempty = true +o:depends("enable", 1) + + +o = s:option(Flag, "ImprovedNamingSchema", translate("Use improved naming schema")) +o.default = "0" +o.rmempty = true +o:depends("enable", 1) + + +o = s:option(DynamicList, "StatusFile", translate("OpenVPN status files")) +o.rmempty = true +o:depends("enable", 1) + +local status_files = nixio.fs.glob("/var/run/openvpn.*.status") +if status_files then + local status_file + for status_file in status_files do + o:value(status_file) + end +end + +return m diff --git a/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/sensors.lua b/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/sensors.lua new file mode 100644 index 000000000..77e36bfaf --- /dev/null +++ b/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/sensors.lua @@ -0,0 +1,125 @@ +-- Copyright 2015 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +require "luci.sys" + +local m, s, o +local sensor_types = { + ["12v"] = "voltage", + ["2.0v"] = "voltage", + ["2.5v"] = "voltage", + ["3.3v"] = "voltage", + ["5.0v"] = "voltage", + ["5v"] = "voltage", + ["ain1"] = "voltage", + ["ain2"] = "voltage", + ["cpu_temp"] = "temperature", + ["fan1"] = "fanspeed", + ["fan2"] = "fanspeed", + ["fan3"] = "fanspeed", + ["fan4"] = "fanspeed", + ["fan5"] = "fanspeed", + ["fan6"] = "fanspeed", + ["fan7"] = "fanspeed", + ["in0"] = "voltage", + ["in10"] = "voltage", + ["in2"] = "voltage", + ["in3"] = "voltage", + ["in4"] = "voltage", + ["in5"] = "voltage", + ["in6"] = "voltage", + ["in7"] = "voltage", + ["in8"] = "voltage", + ["in9"] = "voltage", + ["power1"] = "power", + ["remote_temp"] = "temperature", + ["temp1"] = "temperature", + ["temp2"] = "temperature", + ["temp3"] = "temperature", + ["temp4"] = "temperature", + ["temp5"] = "temperature", + ["temp6"] = "temperature", + ["temp7"] = "temperature", + ["temp"] = "temperature", + ["vccp1"] = "voltage", + ["vccp2"] = "voltage", + ["vdd"] = "voltage", + ["vid1"] = "voltage", + ["vid2"] = "voltage", + ["vid3"] = "voltage", + ["vid4"] = "voltage", + ["vid5"] = "voltage", + ["vid"] = "voltage", + ["vin1"] = "voltage", + ["vin2"] = "voltage", + ["vin3"] = "voltage", + ["vin4"] = "voltage", + ["volt12"] = "voltage", + ["volt5"] = "voltage", + ["voltbatt"] = "voltage", + ["vrm"] = "voltage" + +} + + +m = Map("luci_statistics", + translate("Sensors Plugin Configuration"), + translate("The sensors plugin uses the Linux Sensors framework to gather environmental statistics.")) + +s = m:section( NamedSection, "collectd_sensors", "luci_statistics" ) + + +o = s:option( Flag, "enable", translate("Enable this plugin") ) +o.default = 0 + + +o = s:option(Flag, "__all", translate("Monitor all sensors")) +o:depends("enable", 1) +o.default = 1 +o.write = function() end +o.cfgvalue = function(self, sid) + local v = self.map:get(sid, "Sensor") + if v == nil or (type(v) == "table" and #v == 0) or (type(v) == "string" and #v == 0) then + return "1" + end +end + + +o = s:option(MultiValue, "Sensor", translate("Sensor list"), translate("Hold Ctrl to select multiple items or to deselect entries.")) +o:depends({enable = 1, __all = "" }) +o.widget = "select" +o.rmempty = true +o.size = 0 + +local sensorcli = io.popen("/usr/sbin/sensors -u -A") +if sensorcli then + local bus, sensor + + while true do + local ln = sensorcli:read("*ln") + if not ln then + break + elseif ln:match("^[%w-]+$") then + bus = ln + elseif ln:match("^[%w-]+:$") then + sensor = ln:sub(0, -2):lower() + if bus and sensor_types[sensor] then + o:value("%s/%s-%s" %{ bus, sensor_types[sensor], sensor }) + o.size = o.size + 1 + end + elseif ln == "" then + bus = nil + sensor = nil + end + end + + sensorcli:close() +end + + +o = s:option( Flag, "IgnoreSelected", translate("Monitor all except specified") ) +o.default = 0 +o.rmempty = true +o:depends({ enable = 1, __all = "" }) + +return m diff --git a/applications/luci-app-statistics/luasrc/statistics/i18n.lua b/applications/luci-app-statistics/luasrc/statistics/i18n.lua index 5a2800d5f..7877e61ab 100644 --- a/applications/luci-app-statistics/luasrc/statistics/i18n.lua +++ b/applications/luci-app-statistics/luasrc/statistics/i18n.lua @@ -26,15 +26,6 @@ function Instance._subst( self, str, val ) return str end -function Instance._translate( self, key, alt ) - local val = self.i18n.string(key) - if val ~= key then - return val - else - return alt - end -end - function Instance.title( self, plugin, pinst, dtype, dinst, user_title ) local title = user_title or @@ -73,24 +64,17 @@ end function Instance.ds( self, source ) - local label = source.title or self:_translate( - string.format( "stat_ds_%s_%s_%s", source.type, source.instance, source.ds ), - self:_translate( - string.format( "stat_ds_%s_%s", source.type, source.instance ), - self:_translate( - string.format( "stat_ds_label_%s__%s", source.type, source.ds ), - self:_translate( - string.format( "stat_ds_%s", source.type ), - source.type .. "_" .. source.instance:gsub("[^%w]","_") .. "_" .. source.ds - ) - ) - ) - ) + local label = source.title or + "dt=%s/di=%s/ds=%s" % { + (source.type and #source.type > 0) and source.type or "(nil)", + (source.instance and #source.instance > 0) and source.instance or "(nil)", + (source.ds and #source.ds > 0) and source.ds or "(nil)" + } return self:_subst( label, { dtype = source.type, dinst = source.instance, dsrc = source.ds - } ) + } ):gsub(":", "\\:") end diff --git a/applications/luci-app-statistics/luasrc/statistics/rrdtool.lua b/applications/luci-app-statistics/luasrc/statistics/rrdtool.lua index 1f8f4ff88..5d4ad9859 100644 --- a/applications/luci-app-statistics/luasrc/statistics/rrdtool.lua +++ b/applications/luci-app-statistics/luasrc/statistics/rrdtool.lua @@ -397,6 +397,7 @@ function Graph._generic( self, opts, plugin, plugin_instance, dtype, index ) transform_rpn = dopts.transform_rpn or "0,+", noarea = dopts.noarea or false, title = dopts.title or nil, + weight = dopts.weight or nil, ds = dsource, type = dtype, instance = dinst, @@ -457,12 +458,24 @@ function Graph._generic( self, opts, plugin, plugin_instance, dtype, index ) _ti ( _args, "-X" ) _ti ( _args, opts.units_exponent ) end + if opts.alt_autoscale then + _ti ( _args, "-A" ) + end + if opts.alt_autoscale_max then + _ti ( _args, "-M" ) + end -- store additional rrd options if opts.rrdopts then for i, o in ipairs(opts.rrdopts) do _ti( _args, o ) end end + -- sort sources + table.sort(_sources, function(a, b) + local x = a.weight or a.index or 0 + local y = b.weight or b.index or 0 + return x < y + end) -- create DEF statements for each instance for i, source in ipairs(_sources) do diff --git a/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/conntrack.lua b/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/conntrack.lua index ee3d68fe1..fbc47731e 100644 --- a/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/conntrack.lua +++ b/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/conntrack.lua @@ -9,6 +9,10 @@ function rrdargs( graph, plugin, plugin_instance, dtype ) vlabel = "Count", number_format = "%5.0lf", data = { + -- collectd 5.5+: specify "" to exclude "max" instance + instances = { + conntrack = { "" } + }, sources = { conntrack = { "value" } }, diff --git a/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/cpu.lua b/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/cpu.lua index 1ca8a23ee..ae0c0ce77 100644 --- a/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/cpu.lua +++ b/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/cpu.lua @@ -8,22 +8,23 @@ function rrdargs( graph, plugin, plugin_instance, dtype ) return { title = "%H: Processor usage on core #%pi", y_min = "0", + alt_autoscale_max = true, vlabel = "Percent", number_format = "%5.1lf%%", data = { instances = { - cpu = { "idle", "user", "system", "nice" } + cpu = { "user", "nice", "system", "softirq", "interrupt" } }, options = { - cpu_idle = { color = "ffffff" }, - cpu_nice = { color = "00e000" }, - cpu_user = { color = "0000ff" }, - cpu_wait = { color = "ffb000" }, - cpu_system = { color = "ff0000" }, - cpu_softirq = { color = "ff00ff" }, - cpu_interrupt = { color = "a000a0" }, - cpu_steal = { color = "000000" } + cpu_idle = { color = "ffffff", title = "Idle" }, + cpu_nice = { color = "00e000", title = "Nice" }, + cpu_user = { color = "0000ff", title = "User" }, + cpu_wait = { color = "ffb000", title = "Wait" }, + cpu_system = { color = "ff0000", title = "System" }, + cpu_softirq = { color = "ff00ff", title = "Softirq" }, + cpu_interrupt = { color = "a000a0", title = "Interrupt" }, + cpu_steal = { color = "000000", title = "Steal" } } } } diff --git a/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/entropy.lua b/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/entropy.lua new file mode 100644 index 000000000..3d30a70af --- /dev/null +++ b/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/entropy.lua @@ -0,0 +1,19 @@ +-- Copyright 2015 Hannu Nyman +-- Licensed to the public under the Apache License 2.0. + +module("luci.statistics.rrdtool.definitions.entropy", package.seeall) + +function rrdargs( graph, plugin, plugin_instance, dtype ) + + return { + title = "%H: Available entropy", + vlabel = "bits", + number_format = "%4.0lf", + data = { + types = { "entropy" }, + options = { entropy = { title = "Entropy %di" } } + } + } + +end + diff --git a/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/interface.lua b/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/interface.lua index efa631d55..6f687d218 100644 --- a/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/interface.lua +++ b/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/interface.lua @@ -66,36 +66,40 @@ function rrdargs( graph, plugin, plugin_instance ) options = { -- processed packets (tx DS) if_packets__tx = { + weight = 1, overlay = true, -- don't summarize total = true, -- report total amount of bytes color = "00ff00", -- processed tx is green - title = "Processed (tx)" + title = "Processed (TX)" }, -- processed packets (rx DS) if_packets__rx = { + weight = 2, overlay = true, -- don't summarize flip = true, -- flip rx line total = true, -- report total amount of bytes color = "0000ff", -- processed rx is blue - title = "Processed (rx)" + title = "Processed (RX)" }, -- packet errors (tx DS) if_errors__tx = { + weight = 0, overlay = true, -- don't summarize total = true, -- report total amount of packets color = "ff5500", -- tx errors are orange - title = "Errors (tx)" + title = "Errors (TX)" }, -- packet errors (rx DS) if_errors__rx = { + weight = 3, overlay = true, -- don't summarize flip = true, -- flip rx line total = true, -- report total amount of packets color = "ff0000", -- rx errors are red - title = "Errors (rx)" + title = "Errors (RX)" } } } diff --git a/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/iwinfo.lua b/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/iwinfo.lua index 3ca3381ec..194afd6fc 100644 --- a/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/iwinfo.lua +++ b/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/iwinfo.lua @@ -74,6 +74,8 @@ function rrdargs( graph, plugin, plugin_instance ) local stations = { title = "%H: Associated stations on %pi", vlabel = "Stations", + y_min = "0", + alt_autoscale_max = true, number_format = "%3.0lf", data = { types = { "stations" }, diff --git a/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/memory.lua b/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/memory.lua index a1c65f56d..53d559c59 100644 --- a/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/memory.lua +++ b/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/memory.lua @@ -17,6 +17,8 @@ function rrdargs( graph, plugin, plugin_instance, dtype ) title = "%H: Memory usage", vlabel = "MB", number_format = "%5.1lf%s", + y_min = "0", + alt_autoscale_max = true, data = { instances = { memory = { "free", "buffered", "cached", "used" } diff --git a/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/netlink.lua b/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/netlink.lua index b4f2ac185..7b6acf366 100644 --- a/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/netlink.lua +++ b/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/netlink.lua @@ -22,11 +22,13 @@ function rrdargs( graph, plugin, plugin_instance ) -- special options for single data lines options = { if_octets__tx = { + title = "Bytes (TX)", total = true, -- report total amount of bytes color = "00ff00" -- tx is green }, if_octets__rx = { + title = "Bytes (RX)", flip = true, -- flip rx line total = true, -- report total amount of bytes color = "0000ff" -- rx is blue @@ -59,6 +61,8 @@ function rrdargs( graph, plugin, plugin_instance ) options = { -- processed packets (tx DS) if_packets__tx = { + weight = 2, + title = "Total (TX)", overlay = true, -- don't summarize total = true, -- report total amount of bytes color = "00ff00" -- processed tx is green @@ -66,6 +70,8 @@ function rrdargs( graph, plugin, plugin_instance ) -- processed packets (rx DS) if_packets__rx = { + weight = 3, + title = "Total (RX)", overlay = true, -- don't summarize flip = true, -- flip rx line total = true, -- report total amount of bytes @@ -74,6 +80,8 @@ function rrdargs( graph, plugin, plugin_instance ) -- dropped packets (tx DS) if_dropped__tx = { + weight = 1, + title = "Dropped (TX)", overlay = true, -- don't summarize total = true, -- report total amount of bytes color = "660055" -- dropped tx is ... dunno ;) @@ -81,14 +89,18 @@ function rrdargs( graph, plugin, plugin_instance ) -- dropped packets (rx DS) if_dropped__rx = { + weight = 4, + title = "Dropped (RX)", overlay = true, -- don't summarize flip = true, -- flip rx line total = true, -- report total amount of bytes - color = "440066" -- dropped rx is violett + color = "ff00ff" -- dropped rx is violett }, -- packet errors (tx DS) if_errors__tx = { + weight = 0, + title = "Errors (TX)", overlay = true, -- don't summarize total = true, -- report total amount of packets color = "ff5500" -- tx errors are orange @@ -96,6 +108,8 @@ function rrdargs( graph, plugin, plugin_instance ) -- packet errors (rx DS) if_errors__rx = { + weight = 5, + title = "Errors (RX)", overlay = true, -- don't summarize flip = true, -- flip rx line total = true, -- report total amount of packets @@ -122,6 +136,7 @@ function rrdargs( graph, plugin, plugin_instance ) options = { -- multicast packets if_multicast = { + title = "Packets", total = true, -- report total amount of packets color = "0000ff" -- multicast is blue } @@ -146,6 +161,7 @@ function rrdargs( graph, plugin, plugin_instance ) options = { -- collision rate if_collisions = { + title = "Collisions", total = true, -- report total amount of packets color = "ff0000" -- collsions are red } @@ -173,15 +189,19 @@ function rrdargs( graph, plugin, plugin_instance ) }, -- special options for single data lines - options = { -- XXX: fixme (define colors...) - if_tx_errors = { - total = true - }, - - if_rx_errors = { - flip = true, - total = true - } + options = { + if_tx_errors_aborted_value = { total = true, color = "ffff00", title = "Aborted (TX)" }, + if_tx_errors_carrier_value = { total = true, color = "ffcc00", title = "Carrier (TX)" }, + if_tx_errors_fifo_value = { total = true, color = "ff9900", title = "Fifo (TX)" }, + if_tx_errors_heartbeat_value = { total = true, color = "ff6600", title = "Heartbeat (TX)" }, + if_tx_errors_window_value = { total = true, color = "ff3300", title = "Window (TX)" }, + + if_rx_errors_length_value = { flip = true, total = true, color = "ff0000", title = "Length (RX)" }, + if_rx_errors_missed_value = { flip = true, total = true, color = "ff0033", title = "Missed (RX)" }, + if_rx_errors_over_value = { flip = true, total = true, color = "ff0066", title = "Over (RX)" }, + if_rx_errors_crc_value = { flip = true, total = true, color = "ff0099", title = "CRC (RX)" }, + if_rx_errors_fifo_value = { flip = true, total = true, color = "ff00cc", title = "Fifo (RX)" }, + if_rx_errors_frame_value = { flip = true, total = true, color = "ff00ff", title = "Frame (RX)" } } } } diff --git a/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/nut.lua b/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/nut.lua index 6dc81bc1d..8b04ab8b3 100644 --- a/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/nut.lua +++ b/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/nut.lua @@ -44,9 +44,6 @@ function rrdargs( graph, plugin, plugin_instance, dtype ) y_max = "100", number_format = "%5.1lf%%", data = { - sources = { - percent = { "percent" } - }, instances = { percent = "charge" }, @@ -77,9 +74,6 @@ function rrdargs( graph, plugin, plugin_instance, dtype ) vlabel = "Minutes", number_format = "%.1lfm", data = { - sources = { - timeleft = { "timeleft" } - }, instances = { timeleft = { "battery" } }, diff --git a/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/openvpn.lua b/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/openvpn.lua new file mode 100644 index 000000000..876e871d1 --- /dev/null +++ b/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/openvpn.lua @@ -0,0 +1,48 @@ +-- Copyright 2015 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +module("luci.statistics.rrdtool.definitions.openvpn", package.seeall) + +function rrdargs( graph, plugin, plugin_instance ) + local inst = plugin_instance:gsub("^openvpn%.(.+)%.status$", "%1") + + return { + { + title = "%%H: OpenVPN \"%s\" - Traffic" % inst, + vlabel = "Bytes/s", + data = { + instances = { + if_octets = { "traffic", "overhead" } + }, + sources = { + if_octets = { "tx", "rx" } + }, + options = { + if_octets_traffic_tx = { weight = 0, title = "Bytes (TX)", total = true, color = "00ff00" }, + if_octets_overhead_tx = { weight = 1, title = "Overhead (TX)", total = true, color = "ff9900" }, + if_octets_overhead_rx = { weight = 2, title = "Overhead (RX)", total = true, flip = true, color = "ff00ff" }, + if_octets_traffic_rx = { weight = 3, title = "Bytes (RX)", total = true, flip = true, color = "0000ff" } + } + } + }, + + { + title = "%%H: OpenVPN \"%s\" - Compression" % inst, + vlabel = "Bytes/s", + data = { + instances = { + compression = { "data_out", "data_in" } + }, + sources = { + compression = { "uncompressed", "compressed" } + }, + options = { + compression_data_out_uncompressed = { weight = 0, title = "Uncompressed (TX)", total = true, color = "00ff00" }, + compression_data_out_compressed = { weight = 1, title = "Compressed (TX)", total = true, color = "008800" }, + compression_data_in_compressed = { weight = 2, title = "Compressed (RX)", total = true, flip = true, color = "000088" }, + compression_data_in_uncompressed = { weight = 3, title = "Uncompressed (RX)", total = true, flip = true, color = "0000ff" } + } + } + } + } +end diff --git a/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/ping.lua b/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/ping.lua index 1a72caf22..f0a594816 100644 --- a/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/ping.lua +++ b/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/ping.lua @@ -6,24 +6,33 @@ module("luci.statistics.rrdtool.definitions.ping", package.seeall) function rrdargs( graph, plugin, plugin_instance, dtype ) return { -- Ping roundtrip time - { title = "%H: ICMP Round Trip Time", vlabel = "ms", - number_format = "%5.1lf ms", data = { + { title = "%H: ICMP Round Trip Time", + vlabel = "ms", + number_format = "%5.1lf ms", + data = { sources = { ping = { "value" } }, - options = { ping__ping = { noarea = true, title = "%di" } } + options = { ping__value = { + noarea = true, overlay = true, title = "%di" } } } }, -- Ping droprate - { title = "%H: ICMP Drop Rate", vlabel = "%", - number_format = "%5.2lf %%", data = { + { title = "%H: ICMP Drop Rate", + vlabel = "%", + number_format = "%5.2lf %%", + data = { types = { "ping_droprate" }, - options = { ping_droprate = { title = "%di" } } + options = { ping_droprate = { + noarea = true, overlay = true, title = "%di" } } } }, -- Ping standard deviation - { title = "%H: ICMP Standard Deviation", vlabel = "ms", - number_format = "%5.2lf ms", data = { + { title = "%H: ICMP Standard Deviation", + vlabel = "ms", + number_format = "%5.2lf ms", + data = { types = { "ping_stddev" }, - options = { ping_stddev = { title = "%di" } } + options = { ping_stddev = { + noarea = true, overlay = true, title = "%di" } } } }, } end diff --git a/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/sensors.lua b/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/sensors.lua new file mode 100644 index 000000000..f8bddb96e --- /dev/null +++ b/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/sensors.lua @@ -0,0 +1,24 @@ +-- Copyright 2015 Jo-Philipp Wich +-- Licensed to the public under the Apache License 2.0. + +module("luci.statistics.rrdtool.definitions.sensors", package.seeall) + +function rrdargs( graph, plugin, plugin_instance ) + return { + { + per_instance = true, + title = "%H: %pi - %di", + vlabel = "\176C", + number_format = "%4.1lf\176C", + data = { + types = { "temperature" }, + options = { + temperature__value = { + color = "ff0000", + title = "Temperature" + } + } + } + } + } +end diff --git a/applications/luci-app-statistics/luasrc/view/admin_statistics/index.htm b/applications/luci-app-statistics/luasrc/view/admin_statistics/index.htm index 0000c1961..38271995e 100644 --- a/applications/luci-app-statistics/luasrc/view/admin_statistics/index.htm +++ b/applications/luci-app-statistics/luasrc/view/admin_statistics/index.htm @@ -6,9 +6,12 @@ <%+header%> -

<%:Statistics%>

+

<%:Statistics%>

-

<%_The statistics package is based on Collectd -and uses RRD Tool to render diagram images from collected data.%>

+

<%_The statistics package uses Collectd +to gather data and RRDtool to +render diagram images.%>

+ +

<%_You can install additional collectd-mod-* plugins to enable more statistics.%>

<%+footer%> diff --git a/applications/luci-app-statistics/luasrc/view/public_statistics/graph.htm b/applications/luci-app-statistics/luasrc/view/public_statistics/graph.htm index 77169518d..ebc78badb 100644 --- a/applications/luci-app-statistics/luasrc/view/public_statistics/graph.htm +++ b/applications/luci-app-statistics/luasrc/view/public_statistics/graph.htm @@ -6,7 +6,7 @@ <%+header%> -

<%:Statistics%>

+

<%:Statistics%>

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
luci.dispatcher
luci.http
luci.http.protocol
luci.http.protocol.conditionals
luci.http.protocol.date
luci.http.protocol.mime
luci.i18n
luci.ip + LuCI IP calculation and netlink access library.
luci.ip.cidr + IP CIDR Object.
luci.json
luci.jsonc + LuCI JSON parsing and serialization library.
luci.jsonc.parser + LuCI JSON parser instance.
luci.model.ipkg
luci.model.uci
luci.rpcc
luci.rpcc.ruci
luci.sys
luci.sys.init + +LuCI system utilities / init related functions.
luci.sys.iptparser
luci.sys.net + +LuCI system utilities / network related functions.
luci.sys.process + +LuCI system utilities / process related functions.
luci.sys.user + +LuCI system utilities / user related functions.
luci.sys.wifi + +LuCI system utilities / wifi related functions.
luci.util
nixio + General POSIX IO library.
nixio.CHANGELOG + Changes and improvements.
nixio.CryptoHash + Cryptographical Hash and HMAC object.
nixio.File + Large File Object.
nixio.README + General Information.
nixio.Socket + Socket Object.
nixio.TLSContext + Transport Layer Security Context Object.
nixio.TLSSocket + TLS Socket Object.
nixio.UnifiedIO + Unified high-level I/O utility API for Files, Sockets and TLS-Sockets.
nixio.bin + Binary operations and conversion.
nixio.bit + Bitfield operators and mainpulation functions.
nixio.crypto + Cryptographical library.
nixio.fs + Low-level and high-level filesystem manipulation library.
+ + + + + + +
+ +
+ +
+

Valid XHTML 1.0!

+
+ +
+ + diff --git a/documentation/api/luadoc.css b/documentation/api/luadoc.css new file mode 100644 index 000000000..f9f974951 --- /dev/null +++ b/documentation/api/luadoc.css @@ -0,0 +1,285 @@ +body { + margin-left: 1em; + margin-right: 1em; + font-family: arial, helvetica, geneva, sans-serif; + background-color:#ffffff; margin:0px; +} + +code { + font-family: "Andale Mono", monospace; +} + +tt { + font-family: "Andale Mono", monospace; +} + +body, td, th { font-size: 11pt; } + +h1, h2, h3, h4 { margin-left: 0em; } + +textarea, pre, tt { font-size:10pt; } +body, td, th { color:#000000; } +small { font-size:0.85em; } +h1 { font-size:1.5em; } +h2 { font-size:1.25em; } +h3 { font-size:1.15em; } +h4 { font-size:1.06em; } + +a:link { font-weight:bold; color: #004080; text-decoration: none; } +a:visited { font-weight:bold; color: #006699; text-decoration: none; } +a:link:hover { text-decoration:underline; } +hr { color:#cccccc } +img { border-width: 0px; } + + +h3 { padding: 1em 0 0.5em; } + +p { margin-left: 1em; } + +p.name { + font-family: "Andale Mono", monospace; + padding-top: 1em; + margin-left: 0em; +} + +blockquote { margin-left: 3em; } + +pre.example { + background-color: rgb(245, 245, 245); + border-top-width: 1px; + border-right-width: 1px; + border-bottom-width: 1px; + border-left-width: 1px; + border-top-style: solid; + border-right-style: solid; + border-bottom-style: solid; + border-left-style: solid; + border-top-color: silver; + border-right-color: silver; + border-bottom-color: silver; + border-left-color: silver; + padding: 1em; + margin-left: 1em; + margin-right: 1em; + font-family: "Andale Mono", monospace; + font-size: smaller; +} + + +hr { + margin-left: 0em; + background: #00007f; + border: 0px; + height: 1px; +} + +ul { list-style-type: disc; } + +table.index { border: 1px #00007f; } +table.index td { text-align: left; vertical-align: top; } +table.index ul { padding-top: 0em; margin-top: 0em; } + +table { + border: 1px solid black; + border-collapse: collapse; + margin: 1em auto; +} +th { + border: 1px solid black; + padding: 0.5em; +} +td { + border: 1px solid black; + padding: 0.5em; +} +div.header, div.footer { margin-left: 0em; } + +#container +{ + margin-left: 1em; + margin-right: 1em; + background-color: #f0f0f0; +} + +#product +{ + text-align: center; + border-bottom: 1px solid #cccccc; + background-color: #ffffff; +} + +#product big { + font-size: 2em; +} + +#product_logo +{ +} + +#product_name +{ +} + +#product_description +{ +} + +#main +{ + background-color: #f0f0f0; + border-left: 2px solid #cccccc; +} + +#navigation +{ + float: left; + width: 18em; + margin: 0; + vertical-align: top; + background-color: #f0f0f0; + overflow:visible; +} + +#navigation h1 { + background-color:#e7e7e7; + font-size:1.1em; + color:#000000; + text-align:left; + margin:0px; + padding:0.2em; + border-top:1px solid #dddddd; + border-bottom:1px solid #dddddd; +} + +#navigation ul +{ + font-size:1em; + list-style-type: none; + padding: 0; + margin: 1px; +} + +#navigation li +{ + text-indent: -1em; + margin: 0em 0em 0em 0.5em; + display: block; + padding: 3px 0px 0px 12px; +} + +#navigation li li a +{ + padding: 0px 3px 0px -1em; +} + +#content +{ + margin-left: 18em; + padding: 1em; + border-left: 2px solid #cccccc; + border-right: 2px solid #cccccc; + background-color: #ffffff; +} + +#about +{ + clear: both; + margin: 0; + padding: 5px; + border-top: 2px solid #cccccc; + background-color: #ffffff; +} + +@media print { + body { + font: 12pt "Times New Roman", "TimeNR", Times, serif; + } + a { font-weight:bold; color: #004080; text-decoration: underline; } + + #main { background-color: #ffffff; border-left: 0px; } + #container { margin-left: 2%; margin-right: 2%; background-color: #ffffff; } + + #content { margin-left: 0px; padding: 1em; border-left: 0px; border-right: 0px; background-color: #ffffff; } + + #navigation { display: none; + } + pre.example { + font-family: "Andale Mono", monospace; + font-size: 10pt; + page-break-inside: avoid; + } +} + +table.module_list td +{ + border-width: 1px; + padding: 3px; + border-style: solid; + border-color: #cccccc; +} +table.module_list td.name { background-color: #f0f0f0; } +table.module_list td.summary { width: 100%; } + +table.file_list +{ + border-width: 1px; + border-style: solid; + border-color: #cccccc; + border-collapse: collapse; +} +table.file_list td +{ + border-width: 1px; + padding: 3px; + border-style: solid; + border-color: #cccccc; +} +table.file_list td.name { background-color: #f0f0f0; } +table.file_list td.summary { width: 100%; } + + +table.function_list +{ + border-width: 1px; + border-style: solid; + border-color: #cccccc; + border-collapse: collapse; +} +table.function_list td +{ + border-width: 1px; + padding: 3px; + border-style: solid; + border-color: #cccccc; +} +table.function_list td.name { background-color: #f0f0f0; } +table.function_list td.summary { width: 100%; } + + +table.table_list +{ + border-width: 1px; + border-style: solid; + border-color: #cccccc; + border-collapse: collapse; +} +table.table_list td +{ + border-width: 1px; + padding: 3px; + border-style: solid; + border-color: #cccccc; +} +table.table_list td.name { background-color: #f0f0f0; } +table.table_list td.summary { width: 100%; } + +dl.function dt {border-top: 1px solid #ccc; padding-top: 1em;} +dl.function dd {padding: 0.5em 0;} +dl.function h3 {margin: 0; font-size: medium;} + +dl.table dt {border-top: 1px solid #ccc; padding-top: 1em;} +dl.table dd {padding-bottom: 1em;} +dl.table h3 {padding: 0; margin: 0; font-size: medium;} + +#TODO: make module_list, file_list, function_list, table_list inherit from a list + diff --git a/documentation/api/modules/luci.dispatcher.html b/documentation/api/modules/luci.dispatcher.html new file mode 100644 index 000000000..4ae88fe61 --- /dev/null +++ b/documentation/api/modules/luci.dispatcher.html @@ -0,0 +1,1151 @@ + + + + Reference + + + + + +
+ +
+ +
+
+
+ +
+ + + +
+ +

Class luci.dispatcher

+ +

+ + + + + + + +

Functions

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
_ () + +No-op function used to mark translation entries for menu labels.
alias (...) + +Create a redirect to another dispatching node.
arcombine (trg1, trg2) + +Create a combined dispatching target for non argv and argv requests.
assign (path, clone, title, order) + +Clone a node of the dispatching tree to another position.
build_url (...) + +Build the URL relative to the server webroot from given virtual path.
call (name, ...) + +Create a function-call dispatching target.
cbi (model) + +Create a CBI model dispatching target.
createindex () + +Generate the dispatching index using the native file-cache based strategy.
createtree () + +Create the dispatching tree from the index.
dispatch (request) + +Dispatches a LuCI virtual path.
entry (path, target, title, order) + +Create a new dispatching node and define common parameters.
error404 (message) + +Send a 404 error code and render the "error404" template if available.
error500 (message) + +Send a 500 error code and render the "error500" template if available.
firstchild () + +Alias the first (lowest order) page automatically + +
form (model) + +Create a CBI form model dispatching target.
get (...) + +Fetch or create a dispatching node without setting the target module or + +enabling the node.
httpdispatch (request) + +Dispatch an HTTP request.
modifier (func, order) + +Register a tree modifier.
node (...) + +Fetch or create a new dispatching node.
node_childs (node) + +Return a sorted table of visible childs within a given node +
node_visible (node) + +Check whether a dispatch node shall be visible +
rewrite (n, ...) + +Rewrite the first x path values of the request.
template (name) + +Create a template render dispatching target.
translate (text) + +Access the luci.i18n translate() api.
+ + + + + + +
+
+ + +

Functions

+
+ + + +
_ ()
+
+ + +No-op function used to mark translation entries for menu labels. + +This function does not actually translate the given argument but +is used by build/i18n-scan.pl to find translatable entries. + + + + + + + + + + +
+ + + + +
alias (...)
+
+ + +Create a redirect to another dispatching node. + + + +

Parameters

+
    + +
  • + ...: Virtual path destination +
  • + +
+ + + + + + + + +
+ + + + +
arcombine (trg1, trg2)
+
+ + +Create a combined dispatching target for non argv and argv requests. + + + +

Parameters

+
    + +
  • + trg1: Overview Target +
  • + +
  • + trg2: Detail Target +
  • + +
+ + + + + + + + +
+ + + + +
assign (path, clone, title, order)
+
+ + +Clone a node of the dispatching tree to another position. + + + +

Parameters

+
    + +
  • + path: Virtual path destination +
  • + +
  • + clone: Virtual path source +
  • + +
  • + title: Destination node title (optional) +
  • + +
  • + order: Destination node order value (optional) +
  • + +
+ + + + + + +

Return value:

+Dispatching tree node + + + +
+ + + + +
build_url (...)
+
+ + +Build the URL relative to the server webroot from given virtual path. + + + +

Parameters

+
    + +
  • + ...: Virtual path +
  • + +
+ + + + + + +

Return value:

+Relative URL + + + +
+ + + + +
call (name, ...)
+
+ + +Create a function-call dispatching target. + + + +

Parameters

+
    + +
  • + name: Target function of local controller +
  • + +
  • + ...: Additional parameters passed to the function +
  • + +
+ + + + + + + + +
+ + + + +
cbi (model)
+
+ + +Create a CBI model dispatching target. + + + +

Parameters

+
    + +
  • + model: CBI model to be rendered +
  • + +
+ + + + + + + + +
+ + + + +
createindex ()
+
+ + +Generate the dispatching index using the native file-cache based strategy. + + + + + + + + + + + +
+ + + + +
createtree ()
+
+ + +Create the dispatching tree from the index. + +Build the index before if it does not exist yet. + + + + + + + + + + +
+ + + + +
dispatch (request)
+
+ + +Dispatches a LuCI virtual path. + + + +

Parameters

+
    + +
  • + request: Virtual path +
  • + +
+ + + + + + + + +
+ + + + +
entry (path, target, title, order)
+
+ + +Create a new dispatching node and define common parameters. + + + +

Parameters

+
    + +
  • + path: Virtual path +
  • + +
  • + target: Target function to call when dispatched. +
  • + +
  • + title: Destination node title +
  • + +
  • + order: Destination node order value (optional) +
  • + +
+ + + + + + +

Return value:

+Dispatching tree node + + + +
+ + + + +
error404 (message)
+
+ + +Send a 404 error code and render the "error404" template if available. + + + +

Parameters

+
    + +
  • + message: Custom error message (optional) +
  • + +
+ + + + + + +

Return value:

+false + + + +
+ + + + +
error500 (message)
+
+ + +Send a 500 error code and render the "error500" template if available. + + + +

Parameters

+
    + +
  • + message: Custom error message (optional)# +
  • + +
+ + + + + + +

Return value:

+false + + + +
+ + + + +
firstchild ()
+
+ + +Alias the first (lowest order) page automatically + + + + + + + + + + + +
+ + + + +
form (model)
+
+ + +Create a CBI form model dispatching target. + + + +

Parameters

+
    + +
  • + model: CBI form model tpo be rendered +
  • + +
+ + + + + + + + +
+ + + + +
get (...)
+
+ + +Fetch or create a dispatching node without setting the target module or + +enabling the node. + + +

Parameters

+
    + +
  • + ...: Virtual path +
  • + +
+ + + + + + +

Return value:

+Dispatching tree node + + + +
+ + + + +
httpdispatch (request)
+
+ + +Dispatch an HTTP request. + + + +

Parameters

+
    + +
  • + request: LuCI HTTP Request object +
  • + +
+ + + + + + + + +
+ + + + +
modifier (func, order)
+
+ + +Register a tree modifier. + + + +

Parameters

+
    + +
  • + func: Modifier function +
  • + +
  • + order: Modifier order value (optional) +
  • + +
+ + + + + + + + +
+ + + + +
node (...)
+
+ + +Fetch or create a new dispatching node. + + + +

Parameters

+
    + +
  • + ...: Virtual path +
  • + +
+ + + + + + +

Return value:

+Dispatching tree node + + + +
+ + + + +
node_childs (node)
+
+ + +Return a sorted table of visible childs within a given node + + + +

Parameters

+
    + +
  • + node: Dispatch node +
  • + +
+ + + + + + +

Return value:

+Ordered table of child node names + + + +
+ + + + +
node_visible (node)
+
+ + +Check whether a dispatch node shall be visible + + + +

Parameters

+
    + +
  • + node: Dispatch node +
  • + +
+ + + + + + +

Return value:

+Boolean indicating whether the node should be visible + + + +
+ + + + +
rewrite (n, ...)
+
+ + +Rewrite the first x path values of the request. + + + +

Parameters

+
    + +
  • + n: Number of path values to replace +
  • + +
  • + ...: Virtual path to replace removed path values with +
  • + +
+ + + + + + + + +
+ + + + +
template (name)
+
+ + +Create a template render dispatching target. + + + +

Parameters

+
    + +
  • + name: Template to be rendered +
  • + +
+ + + + + + + + +
+ + + + +
translate (text)
+
+ + +Access the luci.i18n translate() api. + + + +

Parameters

+
    + +
  • + text: Text to translate +
  • + +
+ + + + + + + + +
+ + +
+ + + + + +
+ +
+ +
+

Valid XHTML 1.0!

+
+ +
+ + diff --git a/documentation/api/modules/luci.http.html b/documentation/api/modules/luci.http.html new file mode 100644 index 000000000..ea04fc236 --- /dev/null +++ b/documentation/api/modules/luci.http.html @@ -0,0 +1,854 @@ + + + + Reference + + + + + +
+ +
+ +
+
+
+ +
+ + + +
+ +

Class luci.http

+ +

+ + + + + + + +

Functions

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
build_querystring (table) + +Create a querystring out of a table of key - value pairs.
close () + +Close the HTTP-Connection.
content () + +Return the request content if the request was of unknown type.
formvalue (name, noparse) + +Get a certain HTTP input value or a table of all input values.
formvaluetable (prefix) + +Get a table of all HTTP input values with a certain prefix.
getcookie (name) + +Get the value of a certain HTTP-Cookie.
getenv (name) + +Get the value of a certain HTTP environment variable + +or the environment table itself.
header (key, value) + +Send a HTTP-Header.
prepare_content (mime) + +Set the mime type of following content data.
redirect (url) + +Redirects the client to a new URL and closes the connection.
setfilehandler (callback) + +Set a handler function for incoming user file uploads.
source () + +Get the RAW HTTP input source +
splice (fp, size) + +Splice data from a filedescriptor to the client.
status (code, message) + +Set the HTTP status code and status message.
write (content, src_err) + +Send a chunk of content data to the client.
write_json (data) + +Send the given data as JSON encoded string.
+ + + + + + +
+
+ + +

Functions

+
+ + + +
build_querystring (table)
+
+ + +Create a querystring out of a table of key - value pairs. + + + +

Parameters

+
    + +
  • + table: Query string source table +
  • + +
+ + + + + + +

Return value:

+Encoded HTTP query string + + + +
+ + + + +
close ()
+
+ + +Close the HTTP-Connection. + + + + + + + + + + + +
+ + + + +
content ()
+
+ + +Return the request content if the request was of unknown type. + + + + + + + + +

Return values:

+
    + +
  1. HTTP request body + +
  2. HTTP request body length + +
+ + + +
+ + + + +
formvalue (name, noparse)
+
+ + +Get a certain HTTP input value or a table of all input values. + + + +

Parameters

+
    + +
  • + name: Name of the GET or POST variable to fetch +
  • + +
  • + noparse: Don't parse POST data before getting the value +
  • + +
+ + + + + + +

Return value:

+HTTP input value or table of all input value + + + +
+ + + + +
formvaluetable (prefix)
+
+ + +Get a table of all HTTP input values with a certain prefix. + + + +

Parameters

+
    + +
  • + prefix: Prefix +
  • + +
+ + + + + + +

Return value:

+Table of all HTTP input values with given prefix + + + +
+ + + + +
getcookie (name)
+
+ + +Get the value of a certain HTTP-Cookie. + + + +

Parameters

+
    + +
  • + name: Cookie Name +
  • + +
+ + + + + + +

Return value:

+String containing cookie data + + + +
+ + + + +
getenv (name)
+
+ + +Get the value of a certain HTTP environment variable + +or the environment table itself. + + +

Parameters

+
    + +
  • + name: Environment variable +
  • + +
+ + + + + + +

Return value:

+HTTP environment value or environment table + + + +
+ + + + +
header (key, value)
+
+ + +Send a HTTP-Header. + + + +

Parameters

+
    + +
  • + key: Header key +
  • + +
  • + value: Header value +
  • + +
+ + + + + + + + +
+ + + + +
prepare_content (mime)
+
+ + +Set the mime type of following content data. + + + +

Parameters

+
    + +
  • + mime: Mimetype of following content +
  • + +
+ + + + + + + + +
+ + + + +
redirect (url)
+
+ + +Redirects the client to a new URL and closes the connection. + + + +

Parameters

+
    + +
  • + url: Target URL +
  • + +
+ + + + + + + + +
+ + + + +
setfilehandler (callback)
+
+ + +Set a handler function for incoming user file uploads. + + + +

Parameters

+
    + +
  • + callback: Handler function +
  • + +
+ + + + + + + + +
+ + + + +
source ()
+
+ + +Get the RAW HTTP input source + + + + + + + + +

Return value:

+HTTP LTN12 source + + + +
+ + + + +
splice (fp, size)
+
+ + +Splice data from a filedescriptor to the client. + + + +

Parameters

+
    + +
  • + fp: File descriptor +
  • + +
  • + size: Bytes to splice (optional) +
  • + +
+ + + + + + + + +
+ + + + +
status (code, message)
+
+ + +Set the HTTP status code and status message. + + + +

Parameters

+
    + +
  • + code: Status code +
  • + +
  • + message: Status message +
  • + +
+ + + + + + + + +
+ + + + +
write (content, src_err)
+
+ + +Send a chunk of content data to the client. + +This function is as a valid LTN12 sink. +If the content chunk is nil this function will automatically invoke close. + + +

Parameters

+
    + +
  • + content: Content chunk +
  • + +
  • + src_err: Error object from source (optional) +
  • + +
+ + + + + + + + +

See also:

+ + +
+ + + + +
write_json (data)
+
+ + +Send the given data as JSON encoded string. + + + +

Parameters

+
    + +
  • + data: Data to send +
  • + +
+ + + + + + + + +
+ + +
+ + + + + +
+ +
+ +
+

Valid XHTML 1.0!

+
+ +
+ + diff --git a/documentation/api/modules/luci.http.protocol.conditionals.html b/documentation/api/modules/luci.http.protocol.conditionals.html new file mode 100644 index 000000000..972881540 --- /dev/null +++ b/documentation/api/modules/luci.http.protocol.conditionals.html @@ -0,0 +1,556 @@ + + + + Reference + + + + + +
+ +
+ +
+
+
+ +
+ + + +
+ +

Class luci.http.protocol.conditionals

+ +

+ + + + + + + +

Functions

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
if_match (req, stat) + +14.24 / If-Match + +Test whether the given message object contains an "If-Match" header and +compare it against the given stat object.
if_modified_since (req, stat) + +14.25 / If-Modified-Since + +Test whether the given message object contains an "If-Modified-Since" header +and compare it against the given stat object.
if_none_match (req, stat) + +14.26 / If-None-Match + +Test whether the given message object contains an "If-None-Match" header and +compare it against the given stat object.
if_range (req, stat) + +14.27 / If-Range + +The If-Range header is currently not implemented due to the lack of general +byte range stuff in luci.http.protocol .
if_unmodified_since (req, stat) + +14.28 / If-Unmodified-Since + +Test whether the given message object contains an "If-Unmodified-Since" +header and compare it against the given stat object.
mk_etag (stat) + +Implement 14.19 / ETag.
+ + + + + + +
+
+ + +

Functions

+
+ + + +
if_match (req, stat)
+
+ + +14.24 / If-Match + +Test whether the given message object contains an "If-Match" header and +compare it against the given stat object. + + +

Parameters

+
    + +
  • + req: HTTP request message object +
  • + +
  • + stat: A file.stat object +
  • + +
+ + + + + + +

Return values:

+
    + +
  1. Boolean indicating whether the precondition is ok + +
  2. Alternative status code if the precondition failed + +
+ + + +
+ + + + +
if_modified_since (req, stat)
+
+ + +14.25 / If-Modified-Since + +Test whether the given message object contains an "If-Modified-Since" header +and compare it against the given stat object. + + +

Parameters

+
    + +
  • + req: HTTP request message object +
  • + +
  • + stat: A file.stat object +
  • + +
+ + + + + + +

Return values:

+
    + +
  1. Boolean indicating whether the precondition is ok + +
  2. Alternative status code if the precondition failed + +
  3. Table containing extra HTTP headers if the precondition failed + +
+ + + +
+ + + + +
if_none_match (req, stat)
+
+ + +14.26 / If-None-Match + +Test whether the given message object contains an "If-None-Match" header and +compare it against the given stat object. + + +

Parameters

+
    + +
  • + req: HTTP request message object +
  • + +
  • + stat: A file.stat object +
  • + +
+ + + + + + +

Return values:

+
    + +
  1. Boolean indicating whether the precondition is ok + +
  2. Alternative status code if the precondition failed + +
  3. Table containing extra HTTP headers if the precondition failed + +
+ + + +
+ + + + +
if_range (req, stat)
+
+ + +14.27 / If-Range + +The If-Range header is currently not implemented due to the lack of general +byte range stuff in luci.http.protocol . This function will always return +false, 412 to indicate a failed precondition. + + +

Parameters

+
    + +
  • + req: HTTP request message object +
  • + +
  • + stat: A file.stat object +
  • + +
+ + + + + + +

Return values:

+
    + +
  1. Boolean indicating whether the precondition is ok + +
  2. Alternative status code if the precondition failed + +
+ + + +
+ + + + +
if_unmodified_since (req, stat)
+
+ + +14.28 / If-Unmodified-Since + +Test whether the given message object contains an "If-Unmodified-Since" +header and compare it against the given stat object. + + +

Parameters

+
    + +
  • + req: HTTP request message object +
  • + +
  • + stat: A file.stat object +
  • + +
+ + + + + + +

Return values:

+
    + +
  1. Boolean indicating whether the precondition is ok + +
  2. Alternative status code if the precondition failed + +
+ + + +
+ + + + +
mk_etag (stat)
+
+ + +Implement 14.19 / ETag. + + + +

Parameters

+
    + +
  • + stat: A file.stat structure +
  • + +
+ + + + + + +

Return value:

+String containing the generated tag suitable for ETag headers + + + +
+ + +
+ + + + + +
+ +
+ +
+

Valid XHTML 1.0!

+
+ +
+ + diff --git a/documentation/api/modules/luci.http.protocol.date.html b/documentation/api/modules/luci.http.protocol.date.html new file mode 100644 index 000000000..d89a72302 --- /dev/null +++ b/documentation/api/modules/luci.http.protocol.date.html @@ -0,0 +1,410 @@ + + + + Reference + + + + + +
+ +
+ +
+
+
+ +
+ + + +
+ +

Class luci.http.protocol.date

+ +

+ + + + + + + +

Functions

+ + + + + + + + + + + + + + + + + + + + + + +
compare (d1, d2) + +Compare two dates which can either be unix epoch times or HTTP date strings.
to_http (time) + +Convert the given unix epoch time to valid HTTP date string.
to_unix (data) + +Parse given HTTP date string and convert it to unix epoch time.
tz_offset (tz) + +Return the time offset in seconds between the UTC and given time zone.
+ + + + + + +
+
+ + +

Functions

+
+ + + +
compare (d1, d2)
+
+ + +Compare two dates which can either be unix epoch times or HTTP date strings. + + + +

Parameters

+
    + +
  • + d1: The first date or epoch time to compare +
  • + +
  • + d2: The first date or epoch time to compare +
  • + +
+ + + + + + +

Return values:

+
    + +
  1. -1 - if d1 is lower then d2 + +
  2. 0 - if both dates are equal + +
  3. 1 - if d1 is higher then d2 + +
+ + + +
+ + + + +
to_http (time)
+
+ + +Convert the given unix epoch time to valid HTTP date string. + + + +

Parameters

+
    + +
  • + time: Unix epoch time +
  • + +
+ + + + + + +

Return value:

+String containing the formatted date + + + +
+ + + + +
to_unix (data)
+
+ + +Parse given HTTP date string and convert it to unix epoch time. + + + +

Parameters

+
    + +
  • + data: String containing the date +
  • + +
+ + + + + + +

Return value:

+Unix epoch time + + + +
+ + + + +
tz_offset (tz)
+
+ + +Return the time offset in seconds between the UTC and given time zone. + + + +

Parameters

+
    + +
  • + tz: Symbolic or numeric timezone specifier +
  • + +
+ + + + + + +

Return value:

+Time offset to UTC in seconds + + + +
+ + +
+ + + + + +
+ +
+ +
+

Valid XHTML 1.0!

+
+ +
+ + diff --git a/documentation/api/modules/luci.http.protocol.html b/documentation/api/modules/luci.http.protocol.html new file mode 100644 index 000000000..1d45acede --- /dev/null +++ b/documentation/api/modules/luci.http.protocol.html @@ -0,0 +1,753 @@ + + + + Reference + + + + + +
+ +
+ +
+
+
+ +
+ + + +
+ +

Class luci.http.protocol

+ +

+ + + + + + + +

Functions

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
header_source (sock) + +Creates a ltn12 source from the given socket.
mimedecode_message_body (src, msg, filecb) + +Decode a mime encoded http message body with multipart/form-data + +Content-Type.
parse_message_body (src, msg, filecb) + +Try to extract and decode a http message body from the given ltn12 source.
parse_message_header (src) + +Try to extract an http message header including information like protocol + +version, message headers and resulting CGI environment variables from the +given ltn12 source.
urldecode (str, no_plus) + +Decode an urlencoded string - optionally without decoding + +the "+" sign to " " - and return the decoded string.
urldecode_message_body (src, msg) + +Decode an urlencoded http message body with application/x-www-urlencoded + +Content-Type.
urldecode_params (url, tbl) + +Extract and split urlencoded data pairs, separated bei either "&" or ";" + +from given url or string.
urlencode (str) + +Encode given string to x-www-urlencoded format.
urlencode_params (tbl) + +Encode each key-value-pair in given table to x-www-urlencoded format, + +separated by "&".
+ + + + + + +
+
+ + +

Functions

+
+ + + +
header_source (sock)
+
+ + +Creates a ltn12 source from the given socket. The source will return it's + +data line by line with the trailing \r\n stripped of. + + +

Parameters

+
    + +
  • + sock: Readable network socket +
  • + +
+ + + + + + +

Return value:

+Ltn12 source function + + + +
+ + + + +
mimedecode_message_body (src, msg, filecb)
+
+ + +Decode a mime encoded http message body with multipart/form-data + +Content-Type. Stores all extracted data associated with its parameter name +in the params table withing the given message object. Multiple parameter +values are stored as tables, ordinary ones as strings. +If an optional file callback function is given then it is feeded with the +file contents chunk by chunk and only the extracted file name is stored +within the params table. The callback function will be called subsequently +with three arguments: + o Table containing decoded (name, file) and raw (headers) mime header data + o String value containing a chunk of the file data + o Boolean which indicates wheather the current chunk is the last one (eof) + + +

Parameters

+
    + +
  • + src: Ltn12 source function +
  • + +
  • + msg: HTTP message object +
  • + +
  • + filecb: File callback function (optional) +
  • + +
+ + + + + + +

Return values:

+
    + +
  1. Value indicating successful operation (not nil means "ok") + +
  2. String containing the error if unsuccessful + +
+ + + +

See also:

+ + +
+ + + + +
parse_message_body (src, msg, filecb)
+
+ + +Try to extract and decode a http message body from the given ltn12 source. + +This function will examine the Content-Type within the given message object +to select the appropriate content decoder. +Currently the application/x-www-urlencoded and application/form-data +mime types are supported. If the encountered content encoding can't be +handled then the whole message body will be stored unaltered as "content" +property within the given message object. + + +

Parameters

+
    + +
  • + src: Ltn12 source function +
  • + +
  • + msg: HTTP message object +
  • + +
  • + filecb: File data callback (optional, see mimedecode_message_body()) +
  • + +
+ + + + + + +

Return values:

+
    + +
  1. Value indicating successful operation (not nil means "ok") + +
  2. String containing the error if unsuccessful + +
+ + + +

See also:

+ + +
+ + + + +
parse_message_header (src)
+
+ + +Try to extract an http message header including information like protocol + +version, message headers and resulting CGI environment variables from the +given ltn12 source. + + +

Parameters

+
    + +
  • + src: Ltn12 source function +
  • + +
+ + + + + + +

Return value:

+HTTP message object + + + +

See also:

+ + +
+ + + + +
urldecode (str, no_plus)
+
+ + +Decode an urlencoded string - optionally without decoding + +the "+" sign to " " - and return the decoded string. + + +

Parameters

+
    + +
  • + str: Input string in x-www-urlencoded format +
  • + +
  • + no_plus: Don't decode "+" signs to spaces +
  • + +
+ + + + + + +

Return value:

+The decoded string + + + +

See also:

+ + +
+ + + + +
urldecode_message_body (src, msg)
+
+ + +Decode an urlencoded http message body with application/x-www-urlencoded + +Content-Type. Stores all extracted data associated with its parameter name +in the params table withing the given message object. Multiple parameter +values are stored as tables, ordinary ones as strings. + + +

Parameters

+
    + +
  • + src: Ltn12 source function +
  • + +
  • + msg: HTTP message object +
  • + +
+ + + + + + +

Return values:

+
    + +
  1. Value indicating successful operation (not nil means "ok") + +
  2. String containing the error if unsuccessful + +
+ + + +

See also:

+ + +
+ + + + +
urldecode_params (url, tbl)
+
+ + +Extract and split urlencoded data pairs, separated bei either "&" or ";" + +from given url or string. Returns a table with urldecoded values. +Simple parameters are stored as string values associated with the parameter +name within the table. Parameters with multiple values are stored as array +containing the corresponding values. + + +

Parameters

+
    + +
  • + url: The url or string which contains x-www-urlencoded form data +
  • + +
  • + tbl: Use the given table for storing values (optional) +
  • + +
+ + + + + + +

Return value:

+Table containing the urldecoded parameters + + + +

See also:

+ + +
+ + + + +
urlencode (str)
+
+ + +Encode given string to x-www-urlencoded format. + + + +

Parameters

+
    + +
  • + str: String to encode +
  • + +
+ + + + + + +

Return value:

+String containing the encoded data + + + +

See also:

+ + +
+ + + + +
urlencode_params (tbl)
+
+ + +Encode each key-value-pair in given table to x-www-urlencoded format, + +separated by "&". Tables are encoded as parameters with multiple values by +repeating the parameter name with each value. + + +

Parameters

+
    + +
  • + tbl: Table with the values +
  • + +
+ + + + + + +

Return value:

+String containing encoded values + + + +

See also:

+ + +
+ + +
+ + + + + +
+ +
+ +
+

Valid XHTML 1.0!

+
+ +
+ + diff --git a/documentation/api/modules/luci.http.protocol.mime.html b/documentation/api/modules/luci.http.protocol.mime.html new file mode 100644 index 000000000..0b5ce0c0c --- /dev/null +++ b/documentation/api/modules/luci.http.protocol.mime.html @@ -0,0 +1,326 @@ + + + + Reference + + + + + +
+ +
+ +
+
+
+ +
+ + + +
+ +

Class luci.http.protocol.mime

+ +

+ + + + + + + +

Functions

+ + + + + + + + + + + + +
to_ext (mimetype) + +Return corresponding extension for a given mime type or nil if the + +given mime-type is unknown.
to_mime (filename) + +Extract extension from a filename and return corresponding mime-type or + +"application/octet-stream" if the extension is unknown.
+ + + + + + +
+
+ + +

Functions

+
+ + + +
to_ext (mimetype)
+
+ + +Return corresponding extension for a given mime type or nil if the + +given mime-type is unknown. + + +

Parameters

+
    + +
  • + mimetype: The mimetype to retrieve the extension from +
  • + +
+ + + + + + +

Return value:

+String with the extension or nil for unknown type + + + +
+ + + + +
to_mime (filename)
+
+ + +Extract extension from a filename and return corresponding mime-type or + +"application/octet-stream" if the extension is unknown. + + +

Parameters

+
    + +
  • + filename: The filename for which the mime type is guessed +
  • + +
+ + + + + + +

Return value:

+String containign the determined mime type + + + +
+ + +
+ + + + + +
+ +
+ +
+

Valid XHTML 1.0!

+
+ +
+ + diff --git a/documentation/api/modules/luci.i18n.html b/documentation/api/modules/luci.i18n.html new file mode 100644 index 000000000..0111cb200 --- /dev/null +++ b/documentation/api/modules/luci.i18n.html @@ -0,0 +1,564 @@ + + + + Reference + + + + + +
+ +
+ +
+
+
+ +
+ + + +
+ +

Class luci.i18n

+ +

+ + + + + + + +

Functions

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
clear () + +Clear the translation table.
load (file, lang, force) + +Load a translation and copy its data into the translation table.
loadc (file, force) + +Load a translation file using the default translation language.
setlanguage (lang) + +Set the context default translation language.
string (key) + +Return the translated value for a specific translation key + +and ensure that the returned value is a Lua string value.
stringf (key, ...) + +Return the translated value for a specific translation key and use it as sprintf pattern.
translate (key) + +Return the translated value for a specific translation key.
translatef (key, ...) + +Return the translated value for a specific translation key and use it as sprintf pattern.
+ + + + + + +
+
+ + +

Functions

+
+ + + +
clear ()
+
+ + +Clear the translation table. + + + + + + + + + + + +
+ + + + +
load (file, lang, force)
+
+ + +Load a translation and copy its data into the translation table. + + + +

Parameters

+
    + +
  • + file: Language file +
  • + +
  • + lang: Two-letter language code +
  • + +
  • + force: Force reload even if already loaded (optional) +
  • + +
+ + + + + + +

Return value:

+Success status + + + +
+ + + + +
loadc (file, force)
+
+ + +Load a translation file using the default translation language. + +Alternatively load the translation of the fallback language. + + +

Parameters

+
    + +
  • + file: Language file +
  • + +
  • + force: Force reload even if already loaded (optional) +
  • + +
+ + + + + + + + +
+ + + + +
setlanguage (lang)
+
+ + +Set the context default translation language. + + + +

Parameters

+
    + +
  • + lang: Two-letter language code +
  • + +
+ + + + + + + + +
+ + + + +
string (key)
+
+ + +Return the translated value for a specific translation key + +and ensure that the returned value is a Lua string value. +This is the same as calling tostring(translate(...)) + + +

Parameters

+
    + +
  • + key: Default translation text +
  • + +
+ + + + + + +

Return value:

+Translated string + + + +
+ + + + +
stringf (key, ...)
+
+ + +Return the translated value for a specific translation key and use it as sprintf pattern. + +Ensure that the returned value is a Lua string value. +This is the same as calling tostring(translatef(...)) + + +

Parameters

+
    + +
  • + key: Default translation text +
  • + +
  • + ...: Format parameters +
  • + +
+ + + + + + +

Return value:

+Translated and formatted string + + + +
+ + + + +
translate (key)
+
+ + +Return the translated value for a specific translation key. + + + +

Parameters

+
    + +
  • + key: Default translation text +
  • + +
+ + + + + + +

Return value:

+Translated string + + + +
+ + + + +
translatef (key, ...)
+
+ + +Return the translated value for a specific translation key and use it as sprintf pattern. + + + +

Parameters

+
    + +
  • + key: Default translation text +
  • + +
  • + ...: Format parameters +
  • + +
+ + + + + + +

Return value:

+Translated and formatted string + + + +
+ + +
+ + + + + +
+ +
+ +
+

Valid XHTML 1.0!

+
+ +
+ + diff --git a/documentation/api/modules/luci.ip.cidr.html b/documentation/api/modules/luci.ip.cidr.html new file mode 100644 index 000000000..28fb21d02 --- /dev/null +++ b/documentation/api/modules/luci.ip.cidr.html @@ -0,0 +1,1269 @@ + + + + Reference + + + + + +
+ +
+ +
+
+
+ +
+ + + +
+ +

Object Instance luci.ip.cidr

+ +

+ IP CIDR Object. + Represents an IPv4 or IPv6 address range.

+ + + + + + + +

Functions

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
cidr:is4 () + +Checks whether the CIDR instance is an IPv4 address range +
cidr:is4rfc1918 () + +Checks whether the CIDR instance is within the private RFC1918 address space +
cidr:is4linklocal () + +Checks whether the CIDR instance is an IPv4 link local (Zeroconf) address +
cidr:is6 () + +Checks whether the CIDR instance is an IPv6 address range +
cidr:is6linklocal () + +Checks whether the CIDR instance is an IPv6 link local address +
cidr:is6mapped4 () + +Checks whether the CIDR instance is an IPv6 mapped IPv4 address +
cidr:lower (addr) + +Checks whether this CIDR instance is lower than the given argument.
cidr:higher (addr) + +Checks whether this CIDR instance is higher than the given argument.
cidr:equal (addr) + +Checks whether this CIDR instance is equal to the given argument.
cidr:prefix (mask) + +Get or set prefix size of CIDR instance.
cidr:network (mask) + +Derive network address of CIDR instance.
cidr:host () + +Derive host address of CIDR instance.
cidr:mask (mask) + +Derive netmask of CIDR instance.
cidr:broadcast (mask) + +Derive broadcast address of CIDR instance.
cidr:mapped4 () + +Derive mapped IPv4 address of CIDR instance.
cidr:contains (addr) + +Test whether CIDR contains given range.
cidr:add (amount, inplace) + +Add given amount to CIDR instance.
cidr:sub (amount, inplace) + +Substract given amount from CIDR instance.
cidr:minhost () + +Calculate the lowest possible host address within this CIDR instance.
cidr:maxhost () + +Calculate the highest possible host address within this CIDR instance.
cidr:string () + +Convert CIDR instance into string representation.
+ + + + + + +
+
+ + +

Functions

+
+ + + +
cidr:is4 ()
+
+ + +Checks whether the CIDR instance is an IPv4 address range + + + + + + + + +

Return value:

+true if the CIDR is an IPv4 range, else false + + + +

See also:

+ + +
+ + + + +
cidr:is4rfc1918 ()
+
+ + +Checks whether the CIDR instance is within the private RFC1918 address space + + + + + + +

Usage:

+
local addr = luci.ip.new("192.168.45.2/24") 
+if addr:is4rfc1918() then 
+	print("Is a private address") 
+end
+ + + +

Return value:

+true if the entire range of this CIDR lies within one of + the ranges 10.0.0.0-10.255.255.255, + 172.16.0.0-172.31.0.0 or + 192.168.0.0-192.168.255.255, else false. + + + +
+ + + + +
cidr:is4linklocal ()
+
+ + +Checks whether the CIDR instance is an IPv4 link local (Zeroconf) address + + + + + + +

Usage:

+
local addr = luci.ip.new("169.254.34.125") 
+if addr:is4linklocal() then 
+	print("Is a zeroconf address") 
+end
+ + + +

Return value:

+true if the entire range of this CIDR lies within the range + the range 169.254.0.0-169.254.255.255, else false. + + + +
+ + + + +
cidr:is6 ()
+
+ + +Checks whether the CIDR instance is an IPv6 address range + + + + + + + + +

Return value:

+true if the CIDR is an IPv6 range, else false + + + +

See also:

+ + +
+ + + + +
cidr:is6linklocal ()
+
+ + +Checks whether the CIDR instance is an IPv6 link local address + + + + + + +

Usage:

+
local addr = luci.ip.new("fe92:53a:3216:af01:221:63ff:fe75:aa17/64") 
+if addr:is6linklocal() then 
+	print("Is a linklocal address") 
+end
+ + + +

Return value:

+true if the entire range of this CIDR lies within the range + the fe80::/10 range, else false. + + + +
+ + + + +
cidr:is6mapped4 ()
+
+ + +Checks whether the CIDR instance is an IPv6 mapped IPv4 address + + + + + + +

Usage:

+
local addr = luci.ip.new("::ffff:192.168.1.1") 
+if addr:is6mapped4() then 
+	print("Is a mapped IPv4 address") 
+end
+ + + +

Return value:

+true if the address is an IPv6 mapped IPv4 address in the + form ::ffff:1.2.3.4. + + + +
+ + + + +
cidr:lower (addr)
+
+ + +Checks whether this CIDR instance is lower than the given argument. +The comparisation follows these rules: +
  • An IPv4 address is always lower than an IPv6 address
  • +
  • Prefix sizes are ignored
+ + + +

Parameters

+
    + +
  • + addr: A luci.ip.cidr instance or a string convertable by + luci.ip.new() to compare against. +
  • + +
+ + + + +

Usage:

+
local addr = luci.ip.new("192.168.1.1") 
+print(addr:lower(addr)) -- false 
+print(addr:lower("10.10.10.10/24")) -- false 
+print(addr:lower(luci.ip.new("::1"))) -- true 
+print(addr:lower(luci.ip.new("192.168.200.1"))) -- true
+ + + +

Return value:

+true if this CIDR is lower than the given address, + else false. + + + +

See also:

+ + +
+ + + + +
cidr:higher (addr)
+
+ + +Checks whether this CIDR instance is higher than the given argument. +The comparisation follows these rules: +
  • An IPv4 address is always lower than an IPv6 address
  • +
  • Prefix sizes are ignored
+ + + +

Parameters

+
    + +
  • + addr: A luci.ip.cidr instance or a string convertable by + luci.ip.new() to compare against. +
  • + +
+ + + + +

Usage:

+
local addr = luci.ip.new("192.168.1.1") 
+print(addr:higher(addr)) -- false 
+print(addr:higher("10.10.10.10/24")) -- true 
+print(addr:higher(luci.ip.new("::1"))) -- false 
+print(addr:higher(luci.ip.new("192.168.200.1"))) -- false
+ + + +

Return value:

+true if this CIDR is higher than the given address, + else false. + + + +

See also:

+ + +
+ + + + +
cidr:equal (addr)
+
+ + +Checks whether this CIDR instance is equal to the given argument. + + + +

Parameters

+
    + +
  • + addr: A luci.ip.cidr instance or a string convertable by + luci.ip.new() to compare against. +
  • + +
+ + + + +

Usage:

+
local addr = luci.ip.new("192.168.1.1") 
+print(addr:equal(addr)) -- true 
+print(addr:equal("192.168.1.1")) -- true 
+print(addr:equal(luci.ip.new("::1"))) -- false 
+ 
+local addr6 = luci.ip.new("::1") 
+print(addr6:equal("0:0:0:0:0:0:0:1/64")) -- true 
+print(addr6:equal(luci.ip.new("fe80::221:63ff:fe75:aa17"))) -- false
+ + + +

Return value:

+true if this CIDR is equal to the given address, + else false. + + + +

See also:

+ + +
+ + + + +
cidr:prefix (mask)
+
+ + +Get or set prefix size of CIDR instance. +If the optional mask parameter is given, the prefix size of this CIDR is altered +else the current prefix size is returned. + + + +

Parameters

+
    + +
  • + mask: Either a number containing the number of bits (0..32 + for IPv4, 0..128 for IPv6) or a string containing a valid + netmask (optional) +
  • + +
+ + + + +

Usage:

+
local range = luci.ip.new("192.168.1.1/255.255.255.0") 
+print(range:prefix()) -- 24 
+ 
+range:prefix(16) 
+print(range:prefix()) -- 16 
+ 
+range:prefix("255.255.255.255") 
+print(range:prefix()) -- 32
+ + + +

Return value:

+Bit count of the current prefix size + + + +
+ + + + +
cidr:network (mask)
+
+ + +Derive network address of CIDR instance. + +Returns a new CIDR instance representing the network address of this instance +with all host parts masked out. The used prefix size can be overridden by the +optional mask parameter. + + + +

Parameters

+
    + +
  • + mask: Either a number containing the number of bits (0..32 + for IPv4, 0..128 for IPv6) or a string containing a valid + netmask (optional) +
  • + +
+ + + + +

Usage:

+
local range = luci.ip.new("192.168.62.243/255.255.0.0") 
+print(range:network())                -- "192.168.0.0" 
+print(range:network(24))              -- "192.168.62.0" 
+print(range:network("255.255.255.0")) -- "192.168.62.0" 
+ 
+local range6 = luci.ip.new("fd9b:62b3:9cc5:0:221:63ff:fe75:aa17/64") 
+print(range6:network())               -- "fd9b:62b3:9cc5::"
+ + + +

Return value:

+CIDR instance representing the network address + + + +
+ + + + +
cidr:host ()
+
+ + +Derive host address of CIDR instance. + +This function essentially constructs a copy of this CIDR with the prefix size +set to 32 for IPv4 and 128 for IPv6. + + + + + + +

Usage:

+
local range = luci.ip.new("172.19.37.45/16") 
+print(range)        -- "172.19.37.45/16" 
+print(range:host()) -- "172.19.37.45"
+ + + +

Return value:

+CIDR instance representing the host address + + + +
+ + + + +
cidr:mask (mask)
+
+ + +Derive netmask of CIDR instance. + +Constructs a CIDR instance representing the netmask of this instance. The used +prefix size can be overridden by the optional mask parameter. + + + +

Parameters

+
    + +
  • + mask: Either a number containing the number of bits (0..32 + for IPv4, 0..128 for IPv6) or a string containing a valid + netmask (optional) +
  • + +
+ + + + +

Usage:

+
local range = luci.ip.new("172.19.37.45/16") 
+print(range:mask())            -- "255.255.0.0" 
+print(range:mask(24))          -- "255.255.255.0" 
+print(range:mask("255.0.0.0")) -- "255.0.0.0"
+ + + +

Return value:

+CIDR instance representing the netmask + + + +
+ + + + +
cidr:broadcast (mask)
+
+ + +Derive broadcast address of CIDR instance. + +Constructs a CIDR instance representing the broadcast address of this instance. +The used prefix size can be overridden by the optional mask parameter. + +This function has no effect on IPv6 instances, it will return nothing in this +case. + + + +

Parameters

+
    + +
  • + mask: Either a number containing the number of bits (0..32 + for IPv4, 0..128 for IPv6) or a string containing a valid + netmask (optional) +
  • + +
+ + + + +

Usage:

+
local range = luci.ip.new("172.19.37.45/16") 
+print(range:broadcast())            -- "172.19.255.255" 
+print(range:broadcast(24))          -- "172.19.37.255" 
+print(range:broadcast("255.0.0.0")) -- "172.255.255.255"
+ + + +

Return value:

+Return a new CIDR instance representing the broadcast address if this + instance is an IPv4 range, else return nothing. + + + +
+ + + + +
cidr:mapped4 ()
+
+ + +Derive mapped IPv4 address of CIDR instance. + +Constructs a CIDR instance representing the IPv4 address of the IPv6 mapped +IPv4 address in this instance. + +This function has no effect on IPv4 instances or IPv6 instances which are not a +mapped address, it will return nothing in this case. + + + + + + +

Usage:

+
local addr = luci.ip.new("::ffff:172.16.19.1") 
+print(addr:mapped4()) -- "172.16.19.1"
+ + + +

Return value:

+Return a new CIDR instance representing the IPv4 address if this + instance is an IPv6 mapped IPv4 address, else return nothing. + + + +
+ + + + +
cidr:contains (addr)
+
+ + +Test whether CIDR contains given range. + + + +

Parameters

+
    + +
  • + addr: A luci.ip.cidr instance or a string convertable by + luci.ip.new() to test. +
  • + +
+ + + + +

Usage:

+
local range = luci.ip.new("10.24.0.0/255.255.0.0") 
+print(range:contains("10.24.5.1"))  -- true 
+print(range:contains("::1"))        -- false 
+print(range:contains("10.0.0.0/8")) -- false 
+ 
+local range6 = luci.ip.new("fe80::/10") 
+print(range6:contains("fe80::221:63f:fe75:aa17/64"))         -- true 
+print(range6:contains("fd9b:6b3:c5:0:221:63f:fe75:aa17/64")) -- false
+ + + +

Return value:

+true if this instance fully contains the given address else + false. + + + +
+ + + + +
cidr:add (amount, inplace)
+
+ + +Add given amount to CIDR instance. If the result would overflow the maximum +address space, the result is set to the highest possible address. + + + +

Parameters

+
    + +
  • + amount: A numeric value between 0 and 0xFFFFFFFF, a + luci.ip.cidr instance or a string convertable by + luci.ip.new(). +
  • + +
  • + inplace: If true, modify this instance instead of returning + a new derived CIDR instance. +
  • + +
+ + + + +

Usage:

+
local addr = luci.ip.new("192.168.1.1/24") 
+print(addr:add(250))         -- "192.168.1.251/24" 
+print(addr:add("0.0.99.0"))  -- "192.168.100.1/24" 
+ 
+addr:add(256, true)          -- true 
+print(addr)                  -- "192.168.2.1/24 
+ 
+addr:add("255.0.0.0", true)  -- false (overflow) 
+print(addr)                  -- "255.255.255.255/24 
+ 
+local addr6 = luci.ip.new("fe80::221:63f:fe75:aa17/64") 
+print(addr6:add(256))        -- "fe80::221:63f:fe75:ab17/64" 
+print(addr6:add("::ffff:0")) -- "fe80::221:640:fe74:aa17/64" 
+ 
+addr:add(256, true)          -- true 
+print(addr)                  -- "fe80::221:63f:fe75:ab17/64 
+ 
+addr:add("ffff::", true)     -- false (overflow) 
+print(addr)                  -- "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff/64"
+ + + +

Return value:

+
    +
  • When adding inplace: Return true if the addition succeded + or false when the addition overflowed.
  • +
  • When deriving new CIDR: Return new instance representing the value of + this instance plus the added amount or the highest possible address if + the addition overflowed the available address space.
+ + + +
+ + + + +
cidr:sub (amount, inplace)
+
+ + +Substract given amount from CIDR instance. If the result would under, the lowest +possible address is returned. + + + +

Parameters

+
    + +
  • + amount: A numeric value between 0 and 0xFFFFFFFF, a + luci.ip.cidr instance or a string convertable by + luci.ip.new(). +
  • + +
  • + inplace: If true, modify this instance instead of returning + a new derived CIDR instance. +
  • + +
+ + + + +

Usage:

+
local addr = luci.ip.new("192.168.1.1/24") 
+print(addr:sub(256))         -- "192.168.0.1/24" 
+print(addr:sub("0.168.0.0")) -- "192.0.1.1/24" 
+ 
+addr:sub(256, true)          -- true 
+print(addr)                  -- "192.168.0.1/24 
+ 
+addr:sub("255.0.0.0", true)  -- false (underflow) 
+print(addr)                  -- "0.0.0.0/24 
+ 
+local addr6 = luci.ip.new("fe80::221:63f:fe75:aa17/64") 
+print(addr6:sub(256))        -- "fe80::221:63f:fe75:a917/64" 
+print(addr6:sub("::ffff:0")) -- "fe80::221:63e:fe76:aa17/64" 
+ 
+addr:sub(256, true)          -- true 
+print(addr)                  -- "fe80::221:63f:fe75:a917/64" 
+ 
+addr:sub("ffff::", true)     -- false (underflow) 
+print(addr)                  -- "::/64"
+ + + +

Return value:

+
    +
  • When substracting inplace: Return true if the substraction + succeded or false when the substraction underflowed.
  • +
  • When deriving new CIDR: Return new instance representing the value of + this instance minus the substracted amount or the lowest address if + the substraction underflowed.
+ + + +
+ + + + +
cidr:minhost ()
+
+ + +Calculate the lowest possible host address within this CIDR instance. + + + + + + +

Usage:

+
local addr = luci.ip.new("192.168.123.56/24") 
+print(addr:minhost())  -- "192.168.123.1" 
+ 
+local addr6 = luci.ip.new("fd9b:62b3:9cc5:0:221:63ff:fe75:aa17/64") 
+print(addr6:minhost()) -- "fd9b:62b3:9cc5::1"
+ + + +

Return value:

+Returns a new CIDR instance representing the lowest host address + within this range. + + + +
+ + + + +
cidr:maxhost ()
+
+ + +Calculate the highest possible host address within this CIDR instance. + + + + + + +

Usage:

+
local addr = luci.ip.new("192.168.123.56/24") 
+print(addr:maxhost())  -- "192.168.123.254" (.255 is broadcast) 
+ 
+local addr6 = luci.ip.new("fd9b:62b3:9cc5:0:221:63ff:fe75:aa17/64") 
+print(addr6:maxhost()) -- "fd9b:62b3:9cc5:0:ffff:ffff:ffff:ffff"
+ + + +

Return value:

+Returns a new CIDR instance representing the highest host address + within this range. + + + +
+ + + + +
cidr:string ()
+
+ + +Convert CIDR instance into string representation. + +If the prefix size of instance is less than 32 for IPv4 or 128 for IPv6, the +address is returned in the form "address/prefix" otherwise just "address". + +It is usually not required to call this function directly as CIDR objects +define it as __tostring function in the associated metatable. + + + + + + + + +

Return value:

+Returns a string representing the range or address of this CIDR instance + + + +
+ + +
+ + + + + +
+ +
+ +
+

Valid XHTML 1.0!

+
+ +
+ + diff --git a/documentation/api/modules/luci.ip.html b/documentation/api/modules/luci.ip.html new file mode 100644 index 000000000..549a55307 --- /dev/null +++ b/documentation/api/modules/luci.ip.html @@ -0,0 +1,934 @@ + + + + Reference + + + + + +
+ +
+ +
+
+
+ +
+ + + +
+ +

Class luci.ip

+ +

+ LuCI IP calculation and netlink access library.

+ + + + + + + +

Functions

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
new (address, netmask) + +Construct a new luci.ip.cidr instance and autodetect the address family.
IPv4 (address, netmask) + +Construct a new IPv4 luci.ip.cidr instance.
IPv6 (address, netmask) + +Construct a new IPv6 luci.ip.cidr instance.
route (address) + +Determine the route leading to the given destination.
routes (filter, callback) + +Fetch all routes, optionally matching the given criteria.
neighbors (filter, callback) + +Fetches entries from the IPv4 ARP and IPv6 neighbour kernel table
link (device) + +Fetch basic device information
+ + + + + + +
+
+ + +

Functions

+
+ + + +
new (address, netmask)
+
+ + +Construct a new luci.ip.cidr instance and autodetect the address family. +Throws an error if the given strings do not represent a valid address or +if the given optional netmask is of a different family. + + +

Parameters

+
    + +
  • + address: String containing a valid IPv4 or IPv6 address, optionally +with prefix size (CIDR notation) or netmask separated by slash. +
  • + +
  • + netmask: String containing a valid IPv4 or IPv6 netmask or number +containing a prefix size in bits (0..32 for IPv4, +0..128 for IPv6). Overrides mask embedded in the first argument +if specified. (optional) +
  • + +
+ + + + +

Usage:

+
addr = luci.ip.new("10.24.0.1/24") 
+addr = luci.ip.new("10.24.0.1/255.255.255.0") 
+addr = luci.ip.new("10.24.0.1", "255.255.255.0")        -- separate netmask 
+addr = luci.ip.new("10.24.0.1/24", 16)                  -- override netmask 
+ 
+addr6 = luci.ip.new("fe80::221:63ff:fe75:aa17/64") 
+addr6 = luci.ip.new("fe80::221:63ff:fe75:aa17/ffff:ffff:ffff:ffff::") 
+addr6 = luci.ip.new("fe80::221:63ff:fe75:aa17", "ffff:ffff:ffff:ffff::") 
+addr6 = luci.ip.new("fe80::221:63ff:fe75:aa17/64", 128) -- override netmask
+ + + +

Return value:

+A luci.ip.cidr object representing the given +address/mask range. + + + +

See also:

+ + +
+ + + + +
IPv4 (address, netmask)
+
+ + +Construct a new IPv4 luci.ip.cidr instance. +Throws an error if the given string does not represent a valid IPv4 address or +if the given optional netmask is of a different family. + + +

Parameters

+
    + +
  • + address: String containing a valid IPv4, optionally with prefix size +(CIDR notation) or netmask separated by slash. +
  • + +
  • + netmask: String containing a valid IPv4 netmask or number +containing a prefix size between 0 and 32 bit. +Overrides mask embedded in the first argument if specified. (optional) +
  • + +
+ + + + +

Usage:

+
addr = luci.ip.IPv4("10.24.0.1/24") 
+addr = luci.ip.IPv4("10.24.0.1/255.255.255.0") 
+addr = luci.ip.IPv4("10.24.0.1", "255.255.255.0")        -- separate netmask 
+addr = luci.ip.IPv4("10.24.0.1/24", 16)                  -- override netmask
+ + + +

Return value:

+A luci.ip.cidr object representing the given IPv4 range. + + + +

See also:

+ + +
+ + + + +
IPv6 (address, netmask)
+
+ + +Construct a new IPv6 luci.ip.cidr instance. +Throws an error if the given string does not represent a valid IPv6 address or +if the given optional netmask is of a different family. + + +

Parameters

+
    + +
  • + address: String containing a valid IPv6, optionally with prefix size +(CIDR notation) or netmask separated by slash. +
  • + +
  • + netmask: String containing a valid IPv4 netmask or number +containing a prefix size between 0 and 128 bit. +Overrides mask embedded in the first argument if specified. (optional) +
  • + +
+ + + + +

Usage:

+
addr6 = luci.ip.IPv6("fe80::221:63ff:fe75:aa17/64") 
+addr6 = luci.ip.IPv6("fe80::221:63ff:fe75:aa17/ffff:ffff:ffff:ffff::") 
+addr6 = luci.ip.IPv6("fe80::221:63ff:fe75:aa17", "ffff:ffff:ffff:ffff::") 
+addr6 = luci.ip.IPv6("fe80::221:63ff:fe75:aa17/64", 128) -- override netmask
+ + + +

Return value:

+A luci.ip.cidr object representing the given IPv6 range. + + + +

See also:

+ + +
+ + + + +
route (address)
+
+ + +Determine the route leading to the given destination. + + +

Parameters

+
    + +
  • + address: A luci.ip.cidr instance or a string containing +a valid IPv4 or IPv6 range as specified by luci.ip.new(). +
  • + +
+ + + + +

Usage:

+
    +
  • Find default gateway by getting route to Google's public NS server +
    rt = luci.ip.route("8.8.8.8") 
    +if rt ~= nil then 
    +	print("gateway is", rt.gw) 
    +end
  • +
  • Determine IPv6 upstream interface
    rt = luci.ip.route("2001::/7") 
    +if rt ~= nil then 
    +	print("ipv6 upstream device is", rt.dev) 
    +end
  • +
+ + + +

Return value:

+

Table containing the fields described below.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldDescription
type +

Route type with one of the following numeric values:

+ + + + + + + + + + + + + + + + + + + + + +
1RTN_UNICAST - Gateway or direct route
2RTN_LOCAL - Accept locally
3RTN_BROADCAST - + Accept locally as broadcast send as broadcast
4RTN_ANYCAST - + Accept locally as broadcast but send as unicast
5RTN_MULTICAST - Multicast route
+
familyNumber containing the route family, 4 for IPv4 or + 6 for IPv6
destDestination luci.ip.cidr instance
gwGateway luci.ip.cidr instance (optional)
fromSource address luci.ip.cidr instance (optional)
srcPreferred source luci.ip.cidr instance (optional)
devString containing the name of the outgoing interface
iifString containing the name of the incoming interface (optional)
tableNumber of the associated routing table (0..65535)
protoNumber of the associated routing protocol
scopeNumber describing the scope of the route, most commonly + 0 for global or 253 for on-link
metricNumber describing the route metric (optional)
expiresNumber of seconds the prefix is valid (IPv6 only, optional)
errorRoute destination error code (optional)
+ + + +

See also:

+ + +
+ + + + +
routes (filter, callback)
+
+ + +Fetch all routes, optionally matching the given criteria. + + +

Parameters

+
    + +
  • + filter:

    Table containing one or more of the possible filter +critera described below (optional)

    + + + + + + + + + + + + + + +
    FieldDescription
    family + Number describing the address family to return - 4 selects + IPv4 routes, 6 IPv6 ones. Any other value selects both. +
    iif + String containing the incoming route interface to match. +
    oif + String containing the outgoing route interface to match. +
    type + Numeric type to match, e.g. 1 for unicast. +
    scope + Numeric scope to match, e.g. 253 for onlink. +
    proto + Numeric protocol to match, e.g. 2 for boot. +
    table + Numeric routing table to match (0..65535). +
    gw + String containing the gateway address to match. Can be in any notation + specified by luci.ip.new(). Prefix matching is performed when + comparing the routes, e.g. "192.168.1.0/24" would select routes with gateway + addresses 192.168.1.1 .. 192.168.1.255. +
    dest + String containing the destination to match. Prefix matching is performed. +
    from + String containing the source address to match. Prefix matching is performed. +
    src + String containing the preferred source address to match. + Prefix matching is performed. +
    dest_exact + String containing the destination to match. Exact matching is performed, + e.g. dest = "0.0.0.0/0" would match any IPv4 route + while dest_exact = "0.0.0.0/0" will only match the + default route. +
    from_exact + String containing the source address to match. Exact matching is performed. +
    +
  • + +
  • + callback:

    Callback function to invoke for each found route +instead of returning one table of route objects (optional)

    +
  • + +
+ + + + +

Usage:

+
    +
  • Find all IPv4 default routes: +
    luci.ip.routes({ dest_exact = "0.0.0.0/0" }, function(rt) 
    +	print(rt.type, rt.gw, rt.dev) 
    +end)
  • +
  • Find all global IPv6 prefixes on the current system: +
    luci.ip.routes({ from = "2001::/7" }, function(rt) 
    +	print(rt.from) 
    +end)
  • +
  • Fetch all IPv4 routes: +
    routes = luci.ip.routes({ family = 4 }) 
    +for _, rt in ipairs(routes) do 
    +	print(rt.dest, rt.gw, rt.dev) 
    +end
  • +
+ + + +

Return value:

+If no callback function is provided, a table of routes +as specified by luci.ip.route() +is returned. If a callback function is given, it is invoked for each route +and nothing is returned. + + + +

See also:

+ + +
+ + + + +
neighbors (filter, callback)
+
+ + +Fetches entries from the IPv4 ARP and IPv6 neighbour kernel table + + +

Parameters

+
    + +
  • + filter:

    Table containing one or more of the possible filter +critera described below (optional)

    + + + + + +
    FieldDescription
    family + Number describing the address family to return - 4 selects + IPv4 ARP, 6 select IPv6 neighbour entries. Any other value + selects both. +
    dev + String containing the associated interface to match. +
    dest + String containing the associated address to match. Can be in any notation + specified by luci.ip.new(). Prefix matching is performed when + comparing the addresses, e.g. "192.168.1.0/24" would select ARP entries + for 192.168.1.1 .. 192.168.1.255. +
    mac + String containing MAC address to match. +
    +
  • + +
  • + callback:

    Callback function to invoke for each found neighbour +entry instead of returning one table of neighbour entries (optional)

    +
  • + +
+ + + + +

Usage:

+
    +
  • Find all ARP neighbours in the LAN: +
    luci.ip.neighbors({ dest = "192.168.0.0/16" }, function(n) 
    +	print(n.dest, n.mac) 
    +end)
  • +
  • Find all active IPv6 addresses of host with given MAC: +
    luci.ip.neighbors({ family = 6, mac = "00:21:63:75:aa:17" }, 
    +	function(n) 
    +		print(n.dest) 
    +	end)
  • +
+ + + +

Return value:

+If no callback function is provided, a table of neighbour entries +is returned. If a callback function is given, it is invoked for each entry +and nothing is returned. + +A neighbour entry is a table containing the following fields: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldDescription
familyNumber containing the neighbour entry family, 4 for IPv4 + ARP or 6 for IPv6 NDP
devString containing the associated device of the neighbour entry
destIP address luci.ip.cidr instance
macString containing the associated MAC address
routerBoolean "true" if the neighbour entry is a router (IPv6, optional)
proxyBoolean "true" if this is a proxy entry (optional)
incompleteBoolean "true" if the entry is in incomplete state (optional)
reachableBoolean "true" if the entry is in reachable state (optional)
staleBoolean "true" if the entry is stale (optional)
delayBoolean "true" if the entry is delayed (optional)
probeBoolean "true" if the entry is in probe state (optional)
failedBoolean "true" if the entry is in failed state (optional)
noarpBoolean "true" if the entry is not caused by NDP or + ARP (optional)
permanentBoolean "true" if the entry was statically configured from + userspace (optional)
+ + + +
+ + + + +
link (device)
+
+ + +Fetch basic device information + + +

Parameters

+
    + +
  • + device: String containing the network device to query +
  • + +
+ + + + +

Usage:

+
    +
  • Test whether device br-lan exists: +
    print(luci.ip.link("br-lan").name ~= nil) 
    +
  • +
  • Query MAC address of eth0: +
    print(luci.ip.link("eth0").mac) 
    +
  • +
+ + + +

Return value:

+If the given interface is found, a table containing the fields +described below is returned, else an empty table. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldDescription
upBoolean indicating whether the device is in IFF_RUNNING state
typeNumeric value indicating the type of the device, e.g. 1 + for ethernet.
nameString containing the name of the device
masterIf queried device is a bridge port, string containing the name of + parent bridge device (optional)
mtuNumber containing the current MTU of the device
qlenNumber containing the TX queue length of the device
macString containing the link local address of the device in + dotted hex notation
+ + + +
+ + +
+ + + + + +
+ +
+ +
+

Valid XHTML 1.0!

+
+ +
+ + diff --git a/documentation/api/modules/luci.json.html b/documentation/api/modules/luci.json.html new file mode 100644 index 000000000..761bd6e7e --- /dev/null +++ b/documentation/api/modules/luci.json.html @@ -0,0 +1,598 @@ + + + + Reference + + + + + +
+ +
+ +
+
+
+ +
+ + + +
+ +

Object Instance luci.json

+ +

+ + + + + + + +

Functions

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ActiveDecoder (customnull) + +Create a new Active JSON-Decoder.
ActiveDecoder:get () + +Fetches one JSON-object from given source +
Decoder (customnull) + +Create a new JSON-Decoder.
Decoder:get () + +Get the decoded data packets after the rawdata has been sent to the sink.
Decoder:sink () + +Create an LTN12 sink from the decoder object which accepts the JSON-Data.
Encoder (data, buffersize, fastescape) + +Create a new JSON-Encoder.
Encoder:source () + +Create an LTN12 source providing the encoded JSON-Data.
decode (json) + +Directly decode a JSON string +
encode (obj) + +Direcly encode a Lua object into a JSON string.
null () + +Null replacement function +
+ + + + + + +
+
+ + +

Functions

+
+ + + +
ActiveDecoder (customnull)
+
+ + +Create a new Active JSON-Decoder. + + + +

Parameters

+
    + +
  • + customnull: Use luci.json.null instead of nil for decoding null +
  • + +
+ + + + + + +

Return value:

+Active JSON-Decoder + + + +
+ + + + +
ActiveDecoder:get ()
+
+ + +Fetches one JSON-object from given source + + + + + + + + +

Return value:

+Decoded object + + + +
+ + + + +
Decoder (customnull)
+
+ + +Create a new JSON-Decoder. + + + +

Parameters

+
    + +
  • + customnull: Use luci.json.null instead of nil for decoding null +
  • + +
+ + + + + + +

Return value:

+JSON-Decoder + + + +
+ + + + +
Decoder:get ()
+
+ + +Get the decoded data packets after the rawdata has been sent to the sink. + + + + + + + + +

Return value:

+Decoded data + + + +
+ + + + +
Decoder:sink ()
+
+ + +Create an LTN12 sink from the decoder object which accepts the JSON-Data. + + + + + + + + +

Return value:

+LTN12 sink + + + +
+ + + + +
Encoder (data, buffersize, fastescape)
+
+ + +Create a new JSON-Encoder. + + + +

Parameters

+
    + +
  • + data: Lua-Object to be encoded. +
  • + +
  • + buffersize: Blocksize of returned data source. +
  • + +
  • + fastescape: Use non-standard escaping (don't escape control chars) +
  • + +
+ + + + + + +

Return value:

+JSON-Encoder + + + +
+ + + + +
Encoder:source ()
+
+ + +Create an LTN12 source providing the encoded JSON-Data. + + + + + + + + +

Return value:

+LTN12 source + + + +
+ + + + +
decode (json)
+
+ + +Directly decode a JSON string + + + +

Parameters

+
    + +
  • + json: JSON-String +
  • + +
+ + + + + + +

Return value:

+Lua object + + + +
+ + + + +
encode (obj)
+
+ + +Direcly encode a Lua object into a JSON string. + + + +

Parameters

+
    + +
  • + obj: Lua Object +
  • + +
+ + + + + + +

Return value:

+JSON string + + + +
+ + + + +
null ()
+
+ + +Null replacement function + + + + + + + + +

Return value:

+null + + + +
+ + +
+ + + + + +
+ +
+ +
+

Valid XHTML 1.0!

+
+ +
+ + diff --git a/documentation/api/modules/luci.jsonc.html b/documentation/api/modules/luci.jsonc.html new file mode 100644 index 000000000..f82eb406c --- /dev/null +++ b/documentation/api/modules/luci.jsonc.html @@ -0,0 +1,397 @@ + + + + Reference + + + + + +
+ +
+ +
+
+
+ +
+ + + +
+ +

Class luci.jsonc

+ +

+ LuCI JSON parsing and serialization library. + The luci.jsonc class is a high level Lua binding to the JSON-C library to + allow reading and writing JSON data with minimal overhead.

+ + + + + + + +

Functions

+ + + + + + + + + + + + + + + + + +
new () + +Construct a new luci.jsonc.parser instance.
parse (json) + +Parse a complete JSON string and convert it into a Lua data structure.
stringify (data, pretty) + +Convert given Lua data into a JSON string.
+ + + + + + +
+
+ + +

Functions

+
+ + + +
new ()
+
+ + +Construct a new luci.jsonc.parser instance. + + + + + +

Usage:

+parser = luci.jsonc.new() + + + +

Return value:

+A luci.jsonc.parser object representing a JSON-C tokener. + + + +
+ + + + +
parse (json)
+
+ + +Parse a complete JSON string and convert it into a Lua data structure. + + +

Parameters

+
    + +
  • + json: A string containing the JSON data to parse, must be either a + JSON array or a JSON object. +
  • + +
+ + + + +

Usage:

+
data = luci.jsonc.parse('{ "name": "John", "age": 34 }') 
+print(data.name)  -- "John"
+ + + +

Return value:

+On success, a table containing the parsed JSON data is returned, on + failure the function returns nil and a string containing the reason of + the parse error. + + + +

See also:

+ + +
+ + + + +
stringify (data, pretty)
+
+ + +Convert given Lua data into a JSON string. + +This function recursively converts the given Lua data into a JSON string, +ignoring any unsupported data. Lua tables are converted into JSON arrays if they +only contain integer keys, mixed tables are turned into JSON objects with any +existing numeric keys converted into strings. + +Lua functions, coroutines and userdata objects are ignored and Lua numbers are +converted to integers if they do not contain fractional values. + + + +

Parameters

+
    + +
  • + data: The Lua data to convert, can be a table, string, boolean or number. +
  • + +
  • + pretty: A boolean value indicating whether the resulting JSON should be + pretty printed. +
  • + +
+ + + + +

Usage:

+
json = luci.jsonc.stringify({ item = true, values = { 1, 2, 3 } }) 
+print(json)  -- '{"item":true,"values":[1,2,3]}'
+ + + +

Return value:

+Returns a string containing the JSON representation of the given Lua + data. + + + +

See also:

+ + +
+ + +
+ + + + + +
+ +
+ +
+

Valid XHTML 1.0!

+
+ +
+ + diff --git a/documentation/api/modules/luci.jsonc.parser.html b/documentation/api/modules/luci.jsonc.parser.html new file mode 100644 index 000000000..4c19cf0e5 --- /dev/null +++ b/documentation/api/modules/luci.jsonc.parser.html @@ -0,0 +1,460 @@ + + + + Reference + + + + + +
+ +
+ +
+
+
+ +
+ + + +
+ +

Object Instance luci.jsonc.parser

+ +

+ LuCI JSON parser instance. + A JSON parser instance is useful to parse JSON data chunk by chunk, without + the need to assemble all data in advance.

+ + + + + + + +

Functions

+ + + + + + + + + + + + + + + + + + + + + + +
parser:parse (json) + +Parses one chunk of JSON data.
parser:get () + +Convert parsed JSON data into Lua table.
parser:set (data) + +Put Lua data into the parser.
parser:stringify (pretty) + +Serialize current parser state as JSON.
+ + + + + + +
+
+ + +

Functions

+
+ + + +
parser:parse (json)
+
+ + +Parses one chunk of JSON data. + + + +

Parameters

+
    + +
  • + json: String containing the JSON fragment to parse +
  • + +
+ + + + +

Usage:

+
parser = luci.jsonc.new() 
+ 
+while true do 
+	chunk = ...  -- fetch a cunk of data, e.g. from a socket 
+	finish, errmsg = parser.parse(chunk) 
+ 
+	if finish == nil then 
+		error("Cannot parse JSON: " .. errmsg) 
+	end 
+ 
+	if finish == true then 
+		break 
+	end 
+end
+ + + +

Return value:

+
    +
  • true if a complete JSON object has been parsed and no further input is + expected.
  • +
  • false if further input is required
  • +
  • nil if an error was encountered while parsing the current chunk. + In this case a string describing the parse error is returned as second + value.
+ + + +

See also:

+ + +
+ + + + +
parser:get ()
+
+ + +Convert parsed JSON data into Lua table. + + + + + + +

Usage:

+
parser = luci.jsonc.new() 
+parser:parse('{ "example": "test" }') 
+ 
+data = parser:get() 
+print(data.example)  -- "test"
+ + + +

Return value:

+Parsed JSON object converted into a Lua table or nil if the parser + didn't finish or encountered an error. + + + +

See also:

+ + +
+ + + + +
parser:set (data)
+
+ + +Put Lua data into the parser. + + + +

Parameters

+
    + +
  • + data: Lua data to put into the parser object. The data is converted to an + internal JSON representation that can be dumped with stringify(). + The conversion follows the rules described in luci.jsonc.stringify. +
  • + +
+ + + + +

Usage:

+
parser = luci.jsonc.new() 
+parser:set({ "some", "data" })
+ + + +

Return value:

+Nothing is returned. + + + +

See also:

+ + +
+ + + + +
parser:stringify (pretty)
+
+ + +Serialize current parser state as JSON. + + + +

Parameters

+
    + +
  • + pretty: A boolean value indicating whether the resulting JSON should be pretty printed. +
  • + +
+ + + + +

Usage:

+
parser = luci.jsonc.new() 
+parser:parse('{ "example": "test" }') 
+print(parser:serialize())  -- '{"example":"test"}'
+ + + +

Return value:

+Returns the serialized JSON data of this parser instance. + + + +
+ + +
+ + + + + +
+ +
+ +
+

Valid XHTML 1.0!

+
+ +
+ + diff --git a/documentation/api/modules/luci.model.ipkg.html b/documentation/api/modules/luci.model.ipkg.html new file mode 100644 index 000000000..921153c98 --- /dev/null +++ b/documentation/api/modules/luci.model.ipkg.html @@ -0,0 +1,734 @@ + + + + Reference + + + + + +
+ +
+ +
+
+
+ +
+ + + +
+ +

Class luci.model.ipkg

+ +

+ + + + + + + +

Functions

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
compare_versions (ver1, ver2, comp) + +lua version of opkg compare-versions +
find (pat, cb) + +Find packages that match the given pattern.
info (pkg) + +Return information about installed and available packages.
install (...) + +Install one or more packages.
installed (pkg) + +Determine whether a given package is installed.
list_all (pat, cb) + +List all packages known to opkg.
list_installed (pat, cb) + +List installed packages.
overlay_root () + +Determines the overlay root used by opkg.
remove (...) + +Remove one or more packages.
status (pkg) + +Return the package status of one or more packages.
update () + +Update package lists.
upgrade () + +Upgrades all installed packages.
+ + + + + + +
+
+ + +

Functions

+
+ + + +
compare_versions (ver1, ver2, comp)
+
+ + +lua version of opkg compare-versions + + + +

Parameters

+
    + +
  • + ver1: string version 1 +
  • + +
  • + ver2: string version 2 +
  • + +
  • + comp: string compare versions using + "<=" or "<" lower-equal + ">" or ">=" greater-equal + "=" equal + "<<" lower + ">>" greater + "~=" not equal +
  • + +
+ + + + + + +

Return value:

+Boolean indicating the status of the compare + + + +
+ + + + +
find (pat, cb)
+
+ + +Find packages that match the given pattern. + + + +

Parameters

+
    + +
  • + pat: Find packages whose names or descriptions match this pattern, nil results in zero results +
  • + +
  • + cb: Callback function invoked for each patckage, receives name, version and description as arguments +
  • + +
+ + + + + + +

Return value:

+nothing + + + +
+ + + + +
info (pkg)
+
+ + +Return information about installed and available packages. + + + +

Parameters

+
    + +
  • + pkg: Limit output to a (set of) packages +
  • + +
+ + + + + + +

Return value:

+Table containing package information + + + +
+ + + + +
install (...)
+
+ + +Install one or more packages. + + + +

Parameters

+
    + +
  • + ...: List of packages to install +
  • + +
+ + + + + + +

Return values:

+
    + +
  1. Boolean indicating the status of the action + +
  2. OPKG return code, STDOUT and STDERR + +
+ + + +
+ + + + +
installed (pkg)
+
+ + +Determine whether a given package is installed. + + + +

Parameters

+
    + +
  • + pkg: Package +
  • + +
+ + + + + + +

Return value:

+Boolean + + + +
+ + + + +
list_all (pat, cb)
+
+ + +List all packages known to opkg. + + + +

Parameters

+
    + +
  • + pat: Only find packages matching this pattern, nil lists all packages +
  • + +
  • + cb: Callback function invoked for each package, receives name, version and description as arguments +
  • + +
+ + + + + + +

Return value:

+nothing + + + +
+ + + + +
list_installed (pat, cb)
+
+ + +List installed packages. + + + +

Parameters

+
    + +
  • + pat: Only find packages matching this pattern, nil lists all packages +
  • + +
  • + cb: Callback function invoked for each package, receives name, version and description as arguments +
  • + +
+ + + + + + +

Return value:

+nothing + + + +
+ + + + +
overlay_root ()
+
+ + +Determines the overlay root used by opkg. + + + + + + + + +

Return value:

+String containing the directory path of the overlay root. + + + +
+ + + + +
remove (...)
+
+ + +Remove one or more packages. + + + +

Parameters

+
    + +
  • + ...: List of packages to install +
  • + +
+ + + + + + +

Return values:

+
    + +
  1. Boolean indicating the status of the action + +
  2. OPKG return code, STDOUT and STDERR + +
+ + + +
+ + + + +
status (pkg)
+
+ + +Return the package status of one or more packages. + + + +

Parameters

+
    + +
  • + pkg: Limit output to a (set of) packages +
  • + +
+ + + + + + +

Return value:

+Table containing package status information + + + +
+ + + + +
update ()
+
+ + +Update package lists. + + + + + + + + +

Return values:

+
    + +
  1. Boolean indicating the status of the action + +
  2. OPKG return code, STDOUT and STDERR + +
+ + + +
+ + + + +
upgrade ()
+
+ + +Upgrades all installed packages. + + + + + + + + +

Return values:

+
    + +
  1. Boolean indicating the status of the action + +
  2. OPKG return code, STDOUT and STDERR + +
+ + + +
+ + +
+ + + + + +
+ +
+ +
+

Valid XHTML 1.0!

+
+ +
+ + diff --git a/documentation/api/modules/luci.model.uci.html b/documentation/api/modules/luci.model.uci.html new file mode 100644 index 000000000..9e50d9900 --- /dev/null +++ b/documentation/api/modules/luci.model.uci.html @@ -0,0 +1,1436 @@ + + + + Reference + + + + + +
+ +
+ +
+
+
+ +
+ + + +
+ +

Object Instance luci.model.uci

+ +

+ + + + + + + +

Functions

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Cursor:add (config, type) + +Add an anonymous section.
Cursor:apply (configlist, command) + +Applies UCI configuration changes +
Cursor:changes (config) + +Get a table of saved but uncommitted changes.
Cursor:commit (config) + +Commit saved changes.
Cursor:delete (config, section, option) + +Deletes a section or an option.
Cursor:delete_all (config, type, comparator) + +Delete all sections of a given type that match certain criteria.
Cursor:foreach (config, type, callback) + +Call a function for every section of a certain type.
Cursor:get (config, section, option) + +Get a section type or an option +
Cursor:get_all (config, section) + +Get all sections of a config or all values of a section.
Cursor:get_bool (config, section, option) + +Get a boolean option and return it's value as true or false.
Cursor:get_confdir () + +Get the configuration directory.
Cursor:get_first (config, type, option, default) + +Get the given option from the first section with the given type.
Cursor:get_list (config, section, option) + +Get an option or list and return values as table.
Cursor:get_savedir () + +Get the directory for uncomitted changes.
Cursor:load (config) + +Manually load a config.
Cursor:revert (config) + +Revert saved but uncommitted changes.
Cursor:save (config) + +Saves changes made to a config to make them committable.
Cursor:section (config, type, name, values) + +Create a new section and initialize it with data.
Cursor:set (config, section, option, value) + +Set a value or create a named section.
Cursor:set_confdir (directory) + +Set the configuration directory.
Cursor:set_list (config, section, option, value) + +Set given values as list.
Cursor:set_savedir (directory) + +Set the directory for uncommited changes.
Cursor:substate () + +Create a sub-state of this cursor.
Cursor:tset (config, section, values) + +Updated the data of a section using data from a table.
Cursor:unload (config) + +Discard changes made to a config.
cursor () + +Create a new UCI-Cursor.
cursor_state () + +Create a new Cursor initialized to the state directory.
+ + + + + + +
+
+ + +

Functions

+
+ + + +
Cursor:add (config, type)
+
+ + +Add an anonymous section. + + + +

Parameters

+
    + +
  • + config: UCI config +
  • + +
  • + type: UCI section type +
  • + +
+ + + + + + +

Return value:

+Name of created section + + + +
+ + + + +
Cursor:apply (configlist, command)
+
+ + +Applies UCI configuration changes + + + +

Parameters

+
    + +
  • + configlist: List of UCI configurations +
  • + +
  • + command: Don't apply only return the command +
  • + +
+ + + + + + + + +
+ + + + +
Cursor:changes (config)
+
+ + +Get a table of saved but uncommitted changes. + + + +

Parameters

+
    + +
  • + config: UCI config +
  • + +
+ + + + + + +

Return value:

+Table of changes + + + +

See also:

+ + +
+ + + + +
Cursor:commit (config)
+
+ + +Commit saved changes. + + + +

Parameters

+
    + +
  • + config: UCI config +
  • + +
+ + + + + + +

Return value:

+Boolean whether operation succeeded + + + +

See also:

+ + +
+ + + + +
Cursor:delete (config, section, option)
+
+ + +Deletes a section or an option. + + + +

Parameters

+
    + +
  • + config: UCI config +
  • + +
  • + section: UCI section name +
  • + +
  • + option: UCI option (optional) +
  • + +
+ + + + + + +

Return value:

+Boolean whether operation succeeded + + + +
+ + + + +
Cursor:delete_all (config, type, comparator)
+
+ + +Delete all sections of a given type that match certain criteria. + + + +

Parameters

+
    + +
  • + config: UCI config +
  • + +
  • + type: UCI section type +
  • + +
  • + comparator: Function that will be called for each section and +returns a boolean whether to delete the current section (optional) +
  • + +
+ + + + + + + + +
+ + + + +
Cursor:foreach (config, type, callback)
+
+ + +Call a function for every section of a certain type. + + + +

Parameters

+
    + +
  • + config: UCI config +
  • + +
  • + type: UCI section type +
  • + +
  • + callback: Function to be called +
  • + +
+ + + + + + +

Return value:

+Boolean whether operation succeeded + + + +
+ + + + +
Cursor:get (config, section, option)
+
+ + +Get a section type or an option + + + +

Parameters

+
    + +
  • + config: UCI config +
  • + +
  • + section: UCI section name +
  • + +
  • + option: UCI option (optional) +
  • + +
+ + + + + + +

Return value:

+UCI value + + + +
+ + + + +
Cursor:get_all (config, section)
+
+ + +Get all sections of a config or all values of a section. + + + +

Parameters

+
    + +
  • + config: UCI config +
  • + +
  • + section: UCI section name (optional) +
  • + +
+ + + + + + +

Return value:

+Table of UCI sections or table of UCI values + + + +
+ + + + +
Cursor:get_bool (config, section, option)
+
+ + +Get a boolean option and return it's value as true or false. + + + +

Parameters

+
    + +
  • + config: UCI config +
  • + +
  • + section: UCI section name +
  • + +
  • + option: UCI option +
  • + +
+ + + + + + +

Return value:

+Boolean + + + +
+ + + + +
Cursor:get_confdir ()
+
+ + +Get the configuration directory. + + + + + + + + +

Return value:

+Configuration directory + + + +
+ + + + +
Cursor:get_first (config, type, option, default)
+
+ + +Get the given option from the first section with the given type. + + + +

Parameters

+
    + +
  • + config: UCI config +
  • + +
  • + type: UCI section type +
  • + +
  • + option: UCI option (optional) +
  • + +
  • + default: Default value (optional) +
  • + +
+ + + + + + +

Return value:

+UCI value + + + +
+ + + + +
Cursor:get_list (config, section, option)
+
+ + +Get an option or list and return values as table. + + + +

Parameters

+
    + +
  • + config: UCI config +
  • + +
  • + section: UCI section name +
  • + +
  • + option: UCI option +
  • + +
+ + + + + + +

Return value:

+UCI value + + + +
+ + + + +
Cursor:get_savedir ()
+
+ + +Get the directory for uncomitted changes. + + + + + + + + +

Return value:

+Save directory + + + +
+ + + + +
Cursor:load (config)
+
+ + +Manually load a config. + + + +

Parameters

+
    + +
  • + config: UCI config +
  • + +
+ + + + + + +

Return value:

+Boolean whether operation succeeded + + + +

See also:

+ + +
+ + + + +
Cursor:revert (config)
+
+ + +Revert saved but uncommitted changes. + + + +

Parameters

+
    + +
  • + config: UCI config +
  • + +
+ + + + + + +

Return value:

+Boolean whether operation succeeded + + + +

See also:

+ + +
+ + + + +
Cursor:save (config)
+
+ + +Saves changes made to a config to make them committable. + + + +

Parameters

+
    + +
  • + config: UCI config +
  • + +
+ + + + + + +

Return value:

+Boolean whether operation succeeded + + + +

See also:

+ + +
+ + + + +
Cursor:section (config, type, name, values)
+
+ + +Create a new section and initialize it with data. + + + +

Parameters

+
    + +
  • + config: UCI config +
  • + +
  • + type: UCI section type +
  • + +
  • + name: UCI section name (optional) +
  • + +
  • + values: Table of key - value pairs to initialize the section with +
  • + +
+ + + + + + +

Return value:

+Name of created section + + + +
+ + + + +
Cursor:set (config, section, option, value)
+
+ + +Set a value or create a named section. + + + +

Parameters

+
    + +
  • + config: UCI config +
  • + +
  • + section: UCI section name +
  • + +
  • + option: UCI option or UCI section type +
  • + +
  • + value: UCI value or nil if you want to create a section +
  • + +
+ + + + + + +

Return value:

+Boolean whether operation succeeded + + + +
+ + + + +
Cursor:set_confdir (directory)
+
+ + +Set the configuration directory. + + + +

Parameters

+
    + +
  • + directory: UCI configuration directory +
  • + +
+ + + + + + +

Return value:

+Boolean whether operation succeeded + + + +
+ + + + +
Cursor:set_list (config, section, option, value)
+
+ + +Set given values as list. + + + +

Parameters

+
    + +
  • + config: UCI config +
  • + +
  • + section: UCI section name +
  • + +
  • + option: UCI option +
  • + +
  • + value: UCI value +
  • + +
+ + + + + + +

Return value:

+Boolean whether operation succeeded + + + +
+ + + + +
Cursor:set_savedir (directory)
+
+ + +Set the directory for uncommited changes. + + + +

Parameters

+
    + +
  • + directory: UCI changes directory +
  • + +
+ + + + + + +

Return value:

+Boolean whether operation succeeded + + + +
+ + + + +
Cursor:substate ()
+
+ + +Create a sub-state of this cursor. The sub-state is tied to the parent + +curser, means it the parent unloads or loads configs, the sub state will +do so as well. + + + + + + + +

Return value:

+UCI state cursor tied to the parent cursor + + + +
+ + + + +
Cursor:tset (config, section, values)
+
+ + +Updated the data of a section using data from a table. + + + +

Parameters

+
    + +
  • + config: UCI config +
  • + +
  • + section: UCI section name (optional) +
  • + +
  • + values: Table of key - value pairs to update the section with +
  • + +
+ + + + + + + + +
+ + + + +
Cursor:unload (config)
+
+ + +Discard changes made to a config. + + + +

Parameters

+
    + +
  • + config: UCI config +
  • + +
+ + + + + + +

Return value:

+Boolean whether operation succeeded + + + +

See also:

+ + +
+ + + + +
cursor ()
+
+ + +Create a new UCI-Cursor. + + + + + + + + +

Return value:

+UCI-Cursor + + + +
+ + + + +
cursor_state ()
+
+ + +Create a new Cursor initialized to the state directory. + + + + + + + + +

Return value:

+UCI cursor + + + +
+ + +
+ + + + + +
+ +
+ +
+

Valid XHTML 1.0!

+
+ +
+ + diff --git a/documentation/api/modules/luci.rpcc.html b/documentation/api/modules/luci.rpcc.html new file mode 100644 index 000000000..f7cb02048 --- /dev/null +++ b/documentation/api/modules/luci.rpcc.html @@ -0,0 +1,328 @@ + + + + Reference + + + + + +
+ +
+ +
+
+
+ +
+ + + +
+ +

Object Instance luci.rpcc

+ +

+ + + + + + + +

Functions

+ + + + + + + + + + + + +
Client:proxy (prefix) + +Create a transparent RPC proxy.
Client:request (method, params, notification) + +Request an RP call and get the response.
+ + + + + + +
+
+ + +

Functions

+
+ + + +
Client:proxy (prefix)
+
+ + +Create a transparent RPC proxy. + + + +

Parameters

+
    + +
  • + prefix: Method prefix +
  • + +
+ + + + + + +

Return value:

+RPC Proxy object + + + +
+ + + + +
Client:request (method, params, notification)
+
+ + +Request an RP call and get the response. + + + +

Parameters

+
    + +
  • + method: Remote method +
  • + +
  • + params: Parameters +
  • + +
  • + notification: Notification only? +
  • + +
+ + + + + + +

Return value:

+response + + + +
+ + +
+ + + + + +
+ +
+ +
+

Valid XHTML 1.0!

+
+ +
+ + diff --git a/documentation/api/modules/luci.rpcc.ruci.html b/documentation/api/modules/luci.rpcc.ruci.html new file mode 100644 index 000000000..203779ce7 --- /dev/null +++ b/documentation/api/modules/luci.rpcc.ruci.html @@ -0,0 +1,281 @@ + + + + Reference + + + + + +
+ +
+ +
+
+
+ +
+ + + +
+ +

Object Instance luci.rpcc.ruci

+ +

+ + + + + + + +

Functions

+ + + + + + + +
factory (rpccl) + +Create a new UCI over RPC proxy.
+ + + + + + +
+
+ + +

Functions

+
+ + + +
factory (rpccl)
+
+ + +Create a new UCI over RPC proxy. + + + +

Parameters

+
    + +
  • + rpccl: RPC client +
  • + +
+ + + + + + +

Return value:

+Network transparent UCI module + + + +
+ + +
+ + + + + +
+ +
+ +
+

Valid XHTML 1.0!

+
+ +
+ + diff --git a/documentation/api/modules/luci.sys.html b/documentation/api/modules/luci.sys.html new file mode 100644 index 000000000..860c5fba2 --- /dev/null +++ b/documentation/api/modules/luci.sys.html @@ -0,0 +1,645 @@ + + + + Reference + + + + + +
+ +
+ +
+
+
+ +
+ + + +
+ +

Class luci.sys

+ +

+ + + + + + + +

Functions

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
call (...) + +Execute a given shell command and return the error code +
dmesg () + +Retrieves the output of the "dmesg" command.
exec (command) + +Execute a given shell command and capture its standard output +
getenv (var) + +Retrieve environment variables.
hostname (String) + +Get or set the current hostname.
httpget (url, stream, target) + +Returns the contents of a documented referred by an URL.
mounts () + +Retrieve information about currently mounted file systems.
reboot () + +Initiate a system reboot.
syslog () + +Retrieves the output of the "logread" command.
uniqueid (bytes) + +Generates a random id with specified length.
uptime () + +Returns the current system uptime stats.
+ + + + + + +
+
+ + +

Functions

+
+ + + +
call (...)
+
+ + +Execute a given shell command and return the error code + + + +

Parameters

+
    + +
  • + ...: Command to call +
  • + +
+ + + + + + +

Return value:

+Error code of the command + + + +
+ + + + +
dmesg ()
+
+ + +Retrieves the output of the "dmesg" command. + + + + + + + + +

Return value:

+String containing the current log buffer + + + +
+ + + + +
exec (command)
+
+ + +Execute a given shell command and capture its standard output + + + +

Parameters

+
    + +
  • + command: Command to call +
  • + +
+ + + + + + +

Return value:

+String containg the return the output of the command + + + +
+ + + + +
getenv (var)
+
+ + +Retrieve environment variables. If no variable is given then a table + +containing the whole environment is returned otherwise this function returns +the corresponding string value for the given name or nil if no such variable +exists. + + +

Parameters

+
    + +
  • + var: Name of the environment variable to retrieve (optional) +
  • + +
+ + + + + + +

Return values:

+
    + +
  1. String containg the value of the specified variable + +
  2. Table containing all variables if no variable name is given + +
+ + + +
+ + + + +
hostname (String)
+
+ + +Get or set the current hostname. + + + +

Parameters

+
    + +
  • + String: containing a new hostname to set (optional) +
  • + +
+ + + + + + +

Return value:

+String containing the system hostname + + + +
+ + + + +
httpget (url, stream, target)
+
+ + +Returns the contents of a documented referred by an URL. + + + +

Parameters

+
    + +
  • + url: The URL to retrieve +
  • + +
  • + stream: Return a stream instead of a buffer +
  • + +
  • + target: Directly write to target file name +
  • + +
+ + + + + + +

Return value:

+String containing the contents of given the URL + + + +
+ + + + +
mounts ()
+
+ + +Retrieve information about currently mounted file systems. + + + + + + + + +

Return value:

+Table containing mount information + + + +
+ + + + +
reboot ()
+
+ + +Initiate a system reboot. + + + + + + + + +

Return value:

+Return value of os.execute() + + + +
+ + + + +
syslog ()
+
+ + +Retrieves the output of the "logread" command. + + + + + + + + +

Return value:

+String containing the current log buffer + + + +
+ + + + +
uniqueid (bytes)
+
+ + +Generates a random id with specified length. + + + +

Parameters

+
    + +
  • + bytes: Number of bytes for the unique id +
  • + +
+ + + + + + +

Return value:

+String containing hex encoded id + + + +
+ + + + +
uptime ()
+
+ + +Returns the current system uptime stats. + + + + + + + + +

Return value:

+String containing total uptime in seconds + + + +
+ + +
+ + + + + +
+ +
+ +
+

Valid XHTML 1.0!

+
+ +
+ + diff --git a/documentation/api/modules/luci.sys.init.html b/documentation/api/modules/luci.sys.init.html new file mode 100644 index 000000000..596fb7cd1 --- /dev/null +++ b/documentation/api/modules/luci.sys.init.html @@ -0,0 +1,516 @@ + + + + Reference + + + + + +
+ +
+ +
+
+
+ +
+ + + +
+ +

Class luci.sys.init

+ +

+ +LuCI system utilities / init related functions. +

+ + + + + + + +

Functions

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
disable (name) + +Disable the given init script +
enable (name) + +Enable the given init script +
enabled (name) + +Test whether the given init script is enabled +
index (name) + +Get the index of he given init script +
names () + +Get the names of all installed init scripts +
start (name) + +Start the given init script +
stop (name) + +Stop the given init script +
+ + + + + + +
+
+ + +

Functions

+
+ + + +
disable (name)
+
+ + +Disable the given init script + + + +

Parameters

+
    + +
  • + name: Name of the init script +
  • + +
+ + + + + + +

Return value:

+Boolean indicating success + + + +
+ + + + +
enable (name)
+
+ + +Enable the given init script + + + +

Parameters

+
    + +
  • + name: Name of the init script +
  • + +
+ + + + + + +

Return value:

+Boolean indicating success + + + +
+ + + + +
enabled (name)
+
+ + +Test whether the given init script is enabled + + + +

Parameters

+
    + +
  • + name: Name of the init script +
  • + +
+ + + + + + +

Return value:

+Boolean indicating whether init is enabled + + + +
+ + + + +
index (name)
+
+ + +Get the index of he given init script + + + +

Parameters

+
    + +
  • + name: Name of the init script +
  • + +
+ + + + + + +

Return value:

+Numeric index value + + + +
+ + + + +
names ()
+
+ + +Get the names of all installed init scripts + + + + + + + + +

Return value:

+Table containing the names of all inistalled init scripts + + + +
+ + + + +
start (name)
+
+ + +Start the given init script + + + +

Parameters

+
    + +
  • + name: Name of the init script +
  • + +
+ + + + + + +

Return value:

+Boolean indicating success + + + +
+ + + + +
stop (name)
+
+ + +Stop the given init script + + + +

Parameters

+
    + +
  • + name: Name of the init script +
  • + +
+ + + + + + +

Return value:

+Boolean indicating success + + + +
+ + +
+ + + + + +
+ +
+ +
+

Valid XHTML 1.0!

+
+ +
+ + diff --git a/documentation/api/modules/luci.sys.iptparser.html b/documentation/api/modules/luci.sys.iptparser.html new file mode 100644 index 000000000..122afcc2a --- /dev/null +++ b/documentation/api/modules/luci.sys.iptparser.html @@ -0,0 +1,466 @@ + + + + Reference + + + + + +
+ +
+ +
+
+
+ +
+ + + +
+ +

Object Instance luci.sys.iptparser

+ +

+ + + + + + + +

Functions

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IptParser (family) + +Create a new iptables parser object.
IptParser:chain (table, chain) + +Return the given firewall chain within the given table name.
IptParser:chains (table) + +Find the names of all chains within the given table name.
IptParser:is_custom_target (target) + +Test whether the given target points to a custom chain.
IptParser:resync () + +Rebuild the internal lookup table, for example when rules have changed + +through external commands.
IptParser:tables () + +Find the names of all tables.
+ + + + + + +
+
+ + +

Functions

+
+ + + +
IptParser (family)
+
+ + +Create a new iptables parser object. + + + +

Parameters

+
    + +
  • + family: Number specifying the address family. 4 for IPv4, 6 for IPv6 +
  • + +
+ + + + + + +

Return value:

+IptParser instance + + + +
+ + + + +
IptParser:chain (table, chain)
+
+ + +Return the given firewall chain within the given table name. + + + +

Parameters

+
    + +
  • + table: String containing the table name +
  • + +
  • + chain: String containing the chain name +
  • + +
+ + + + + + +

Return value:

+Table containing the fields "policy", "packets", "bytes" + and "rules". The "rules" field is a table of rule tables. + + + +
+ + + + +
IptParser:chains (table)
+
+ + +Find the names of all chains within the given table name. + + + +

Parameters

+
    + +
  • + table: String containing the table name +
  • + +
+ + + + + + +

Return value:

+Table of chain names in the order they occur. + + + +
+ + + + +
IptParser:is_custom_target (target)
+
+ + +Test whether the given target points to a custom chain. + + + +

Parameters

+
    + +
  • + target: String containing the target action +
  • + +
+ + + + + + +

Return value:

+Boolean indicating whether target is a custom chain. + + + +
+ + + + +
IptParser:resync ()
+
+ + +Rebuild the internal lookup table, for example when rules have changed + +through external commands. + + + + + + + +

Return value:

+nothing + + + +
+ + + + +
IptParser:tables ()
+
+ + +Find the names of all tables. + + + + + + + + +

Return value:

+Table of table names. + + + +
+ + +
+ + + + + +
+ +
+ +
+

Valid XHTML 1.0!

+
+ +
+ + diff --git a/documentation/api/modules/luci.sys.net.html b/documentation/api/modules/luci.sys.net.html new file mode 100644 index 000000000..4a049e230 --- /dev/null +++ b/documentation/api/modules/luci.sys.net.html @@ -0,0 +1,569 @@ + + + + Reference + + + + + +
+ +
+ +
+
+
+ +
+ + + +
+ +

Class luci.sys.net

+ +

+ +LuCI system utilities / network related functions. +

+ + + + + + + +

Functions

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
arptable () + +Returns the current arp-table entries as two-dimensional table.
conntrack () + +Returns conntrack information +
deviceinfo () + +Return information about available network interfaces.
devices () + +Determine the names of available network interfaces.
ipv4_hints () + +Returns a two-dimensional table of IPv4 address hints.
ipv6_hints () + +Returns a two-dimensional table of IPv6 address hints.
mac_hints () + +Returns a two-dimensional table of mac address hints.
pingtest (host) + +Tests whether the given host responds to ping probes.
routes () + +Returns the current kernel routing table entries.
routes6 () + +Returns the current ipv6 kernel routing table entries.
+ + + + + + +
+
+ + +

Functions

+
+ + + +
arptable ()
+
+ + +Returns the current arp-table entries as two-dimensional table. + + + + + + + + +

Return value:

+Table of table containing the current arp entries. + The following fields are defined for arp entry objects: + { "IP address", "HW address", "HW type", "Flags", "Mask", "Device" } + + + +
+ + + + +
conntrack ()
+
+ + +Returns conntrack information + + + + + + + + +

Return value:

+Table with the currently tracked IP connections + + + +
+ + + + +
deviceinfo ()
+
+ + +Return information about available network interfaces. + + + + + + + + +

Return value:

+Table containing all current interface names and their information + + + +
+ + + + +
devices ()
+
+ + +Determine the names of available network interfaces. + + + + + + + + +

Return value:

+Table containing all current interface names + + + +
+ + + + +
ipv4_hints ()
+
+ + +Returns a two-dimensional table of IPv4 address hints. + + + + + + + + +

Return value:

+Table of table containing known hosts from various sources. + Each entry contains the values in the following order: + [ "ip", "name" ] + + + +
+ + + + +
ipv6_hints ()
+
+ + +Returns a two-dimensional table of IPv6 address hints. + + + + + + + + +

Return value:

+Table of table containing known hosts from various sources. + Each entry contains the values in the following order: + [ "ip", "name" ] + + + +
+ + + + +
mac_hints ()
+
+ + +Returns a two-dimensional table of mac address hints. + + + + + + + + +

Return value:

+Table of table containing known hosts from various sources. + Each entry contains the values in the following order: + [ "mac", "name" ] + + + +
+ + + + +
pingtest (host)
+
+ + +Tests whether the given host responds to ping probes. + + + +

Parameters

+
    + +
  • + host: String containing a hostname or IPv4 address +
  • + +
+ + + + + + +

Return value:

+Number containing 0 on success and >= 1 on error + + + +
+ + + + +
routes ()
+
+ + +Returns the current kernel routing table entries. + + + + + + + + +

Return value:

+Table of tables with properties of the corresponding routes. + The following fields are defined for route entry tables: + { "dest", "gateway", "metric", "refcount", "usecount", "irtt", + "flags", "device" } + + + +
+ + + + +
routes6 ()
+
+ + +Returns the current ipv6 kernel routing table entries. + + + + + + + + +

Return value:

+Table of tables with properties of the corresponding routes. + The following fields are defined for route entry tables: + { "source", "dest", "nexthop", "metric", "refcount", "usecount", + "flags", "device" } + + + +
+ + +
+ + + + + +
+ +
+ +
+

Valid XHTML 1.0!

+
+ +
+ + diff --git a/documentation/api/modules/luci.sys.process.html b/documentation/api/modules/luci.sys.process.html new file mode 100644 index 000000000..9c4f0a540 --- /dev/null +++ b/documentation/api/modules/luci.sys.process.html @@ -0,0 +1,448 @@ + + + + Reference + + + + + +
+ +
+ +
+
+
+ +
+ + + +
+ +

Class luci.sys.process

+ +

+ +LuCI system utilities / process related functions. +

+ + + + + + + +

Functions

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
info () + +Get the current process id.
list () + +Retrieve information about currently running processes.
setgroup (gid) + +Set the gid of a process identified by given pid.
setuser (uid) + +Set the uid of a process identified by given pid.
signal (pid, sig) + +Send a signal to a process identified by given pid.
+ + + + + + +
+
+ + +

Functions

+
+ + + +
info ()
+
+ + +Get the current process id. + + + + + + + + +

Return value:

+Number containing the current pid + + + +
+ + + + +
list ()
+
+ + +Retrieve information about currently running processes. + + + + + + + + +

Return value:

+Table containing process information + + + +
+ + + + +
setgroup (gid)
+
+ + +Set the gid of a process identified by given pid. + + + +

Parameters

+
    + +
  • + gid: Number containing the Unix group id +
  • + +
+ + + + + + +

Return values:

+
    + +
  1. Boolean indicating successful operation + +
  2. String containing the error message if failed + +
  3. Number containing the error code if failed + +
+ + + +
+ + + + +
setuser (uid)
+
+ + +Set the uid of a process identified by given pid. + + + +

Parameters

+
    + +
  • + uid: Number containing the Unix user id +
  • + +
+ + + + + + +

Return values:

+
    + +
  1. Boolean indicating successful operation + +
  2. String containing the error message if failed + +
  3. Number containing the error code if failed + +
+ + + +
+ + + + +
signal (pid, sig)
+
+ + +Send a signal to a process identified by given pid. + + + +

Parameters

+
    + +
  • + pid: Number containing the process id +
  • + +
  • + sig: Signal to send (default: 15 [SIGTERM]) +
  • + +
+ + + + + + +

Return values:

+
    + +
  1. Boolean indicating successful operation + +
  2. Number containing the error code if failed + +
+ + + +
+ + +
+ + + + + +
+ +
+ +
+

Valid XHTML 1.0!

+
+ +
+ + diff --git a/documentation/api/modules/luci.sys.user.html b/documentation/api/modules/luci.sys.user.html new file mode 100644 index 000000000..37126dd92 --- /dev/null +++ b/documentation/api/modules/luci.sys.user.html @@ -0,0 +1,416 @@ + + + + Reference + + + + + +
+ +
+ +
+
+
+ +
+ + + +
+ +

Class luci.sys.user

+ +

+ +LuCI system utilities / user related functions. +

+ + + + + + + +

Functions

+ + + + + + + + + + + + + + + + + + + + + + +
getuser (uid) + +Retrieve user informations for given uid.
checkpasswd (username, pass) + +Test whether given string matches the password of a given system user.
getpasswd (username) + +Retrieve the current user password hash.
setpasswd (username, password) + +Change the password of given user.
+ + + + + + +
+
+ + +

Functions

+
+ + + +
getuser (uid)
+
+ + +Retrieve user informations for given uid. + + + +

Parameters

+
    + +
  • + uid: Number containing the Unix user id +
  • + +
+ + + + + + +

Return value:

+Table containing the following fields: + { "uid", "gid", "name", "passwd", "dir", "shell", "gecos" } + + + +
+ + + + +
checkpasswd (username, pass)
+
+ + +Test whether given string matches the password of a given system user. + + + +

Parameters

+
    + +
  • + username: String containing the Unix user name +
  • + +
  • + pass: String containing the password to compare +
  • + +
+ + + + + + +

Return value:

+Boolean indicating wheather the passwords are equal + + + +
+ + + + +
getpasswd (username)
+
+ + +Retrieve the current user password hash. + + + +

Parameters

+
    + +
  • + username: String containing the username to retrieve the password for +
  • + +
+ + + + + + +

Return values:

+
    + +
  1. String containing the hash or nil if no password is set. + +
  2. Password database entry + +
+ + + +
+ + + + +
setpasswd (username, password)
+
+ + +Change the password of given user. + + + +

Parameters

+
    + +
  • + username: String containing the Unix user name +
  • + +
  • + password: String containing the password to compare +
  • + +
+ + + + + + +

Return value:

+Number containing 0 on success and >= 1 on error + + + +
+ + +
+ + + + + +
+ +
+ +
+

Valid XHTML 1.0!

+
+ +
+ + diff --git a/documentation/api/modules/luci.sys.wifi.html b/documentation/api/modules/luci.sys.wifi.html new file mode 100644 index 000000000..eb1f6b31d --- /dev/null +++ b/documentation/api/modules/luci.sys.wifi.html @@ -0,0 +1,284 @@ + + + + Reference + + + + + +
+ +
+ +
+
+
+ +
+ + + +
+ +

Class luci.sys.wifi

+ +

+ +LuCI system utilities / wifi related functions. +

+ + + + + + + +

Functions

+ + + + + + + +
getiwinfo (ifname) + +Get wireless information for given interface.
+ + + + + + +
+
+ + +

Functions

+
+ + + +
getiwinfo (ifname)
+
+ + +Get wireless information for given interface. + + + +

Parameters

+
    + +
  • + ifname: String containing the interface name +
  • + +
+ + + + + + +

Return value:

+A wrapped iwinfo object instance + + + +
+ + +
+ + + + + +
+ +
+ +
+

Valid XHTML 1.0!

+
+ +
+ + diff --git a/documentation/api/modules/luci.util.html b/documentation/api/modules/luci.util.html new file mode 100644 index 000000000..301cffff6 --- /dev/null +++ b/documentation/api/modules/luci.util.html @@ -0,0 +1,1717 @@ + + + + Reference + + + + + +
+ +
+ +
+
+
+ +
+ + + +
+ +

Class luci.util

+ +

+ + + + + + + +

Functions

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
append (src, ...) + +Appends numerically indexed tables or single objects to a given table.
bigendian () + +Test whether the current system is operating in big endian mode.
class (base) + +Create a Class object (Python-style object model).
clone (object, deep) + +Clones the given object and return it's copy.
cmatch (str, pattern) + +Count the occurences of given substring in given string.
combine (tbl1, tbl2, ...) + +Combines two or more numerically indexed tables and single objects into one table.
contains (table, value) + +Checks whether the given table contains the given value.
copcall (f, ...) + +This is a coroutine-safe drop-in replacement for Lua's "pcall"-function +
coxpcall (f, err, ...) + +This is a coroutine-safe drop-in replacement for Lua's "xpcall"-function +
dtable () + +Create a dynamic table which automatically creates subtables.
dumptable (t, maxdepth) + +Recursively dumps a table to stdout, useful for testing and debugging.
exec (command) + +Execute given commandline and gather stdout.
execi (command) + +Return a line-buffered iterator over the output of given command.
get_bytecode (val) + +Return the current runtime bytecode of the given data.
imatch (val) + +Return a matching iterator for the given value.
instanceof (object, class) + +Test whether the given object is an instance of the given class.
keys (t) + +Retrieve all keys of given associative table.
kspairs (t) + +Return a key, value iterator for the given table.
libpath () + +Returns the absolute path to LuCI base directory.
parse_units (ustr) + +Parse certain units from the given string and return the canonical integer + +value or 0 if the unit is unknown.
pcdata (value) + +Create valid XML PCDATA from given string.
perror (obj) + +Write given object to stderr.
restore_data (str) + +Restore data previously serialized with serialize_data().
serialize_data (val) + +Recursively serialize given data to lua code, suitable for restoring + +with loadstring().
serialize_json (data, writer) + +Convert data structure to JSON +
spairs (t, f) + +Return a key, value iterator which returns the values sorted according to + +the provided callback function.
split (str, pat, max, regex) + +Splits given string on a defined separator sequence and return a table + +containing the resulting substrings.
strip_bytecode (code) + +Strips unnescessary lua bytecode from given string.
striptags (value) + +Strip HTML tags from given string.
threadlocal () + +Create a new or get an already existing thread local store associated with + +the current active coroutine.
trim (str) + +Remove leading and trailing whitespace from given string value.
ubus (object, method, values) + +Issue an ubus call.
update (t, updates) + +Update values in given table with the values from the second given table.
vspairs (t) + +Return a key, value iterator for the given table.
+ + + + + + +
+
+ + +

Functions

+
+ + + +
append (src, ...)
+
+ + +Appends numerically indexed tables or single objects to a given table. + + + +

Parameters

+
    + +
  • + src: Target table +
  • + +
  • + ...: Objects to insert +
  • + +
+ + + + + + +

Return value:

+Target table + + + +
+ + + + +
bigendian ()
+
+ + +Test whether the current system is operating in big endian mode. + + + + + + + + +

Return value:

+Boolean value indicating whether system is big endian + + + +
+ + + + +
class (base)
+
+ + +Create a Class object (Python-style object model). + +The class object can be instantiated by calling itself. +Any class functions or shared parameters can be attached to this object. +Attaching a table to the class object makes this table shared between +all instances of this class. For object parameters use the __init__ function. +Classes can inherit member functions and values from a base class. +Class can be instantiated by calling them. All parameters will be passed +to the __init__ function of this class - if such a function exists. +The __init__ function must be used to set any object parameters that are not shared +with other objects of this class. Any return values will be ignored. + + +

Parameters

+
    + +
  • + base: The base class to inherit from (optional) +
  • + +
+ + + + + + +

Return value:

+A class object + + + +

See also:

+ + +
+ + + + +
clone (object, deep)
+
+ + +Clones the given object and return it's copy. + + + +

Parameters

+
    + +
  • + object: Table value to clone +
  • + +
  • + deep: Boolean indicating whether to do recursive cloning +
  • + +
+ + + + + + +

Return value:

+Cloned table value + + + +
+ + + + +
cmatch (str, pattern)
+
+ + +Count the occurences of given substring in given string. + + + +

Parameters

+
    + +
  • + str: String to search in +
  • + +
  • + pattern: String containing pattern to find +
  • + +
+ + + + + + +

Return value:

+Number of found occurences + + + +
+ + + + +
combine (tbl1, tbl2, ...)
+
+ + +Combines two or more numerically indexed tables and single objects into one table. + + + +

Parameters

+
    + +
  • + tbl1: Table value to combine +
  • + +
  • + tbl2: Table value to combine +
  • + +
  • + ...: More tables to combine +
  • + +
+ + + + + + +

Return value:

+Table value containing all values of given tables + + + +
+ + + + +
contains (table, value)
+
+ + +Checks whether the given table contains the given value. + + + +

Parameters

+
    + +
  • + table: Table value +
  • + +
  • + value: Value to search within the given table +
  • + +
+ + + + + + +

Return value:

+number indicating the first index at which the given value occurs + within table or false. + + + +
+ + + + +
copcall (f, ...)
+
+ + +This is a coroutine-safe drop-in replacement for Lua's "pcall"-function + + + +

Parameters

+
    + +
  • + f: Lua function to be called protected +
  • + +
  • + ...: Parameters passed to the function +
  • + +
+ + + + + + +

Return value:

+A boolean whether the function call succeeded and the returns + values of the function or the error object + + + +
+ + + + +
coxpcall (f, err, ...)
+
+ + +This is a coroutine-safe drop-in replacement for Lua's "xpcall"-function + + + +

Parameters

+
    + +
  • + f: Lua function to be called protected +
  • + +
  • + err: Custom error handler +
  • + +
  • + ...: Parameters passed to the function +
  • + +
+ + + + + + +

Return value:

+A boolean whether the function call succeeded and the return + values of either the function or the error handler + + + +
+ + + + +
dtable ()
+
+ + +Create a dynamic table which automatically creates subtables. + + + + + + + + +

Return value:

+Dynamic Table + + + +
+ + + + +
dumptable (t, maxdepth)
+
+ + +Recursively dumps a table to stdout, useful for testing and debugging. + + + +

Parameters

+
    + +
  • + t: Table value to dump +
  • + +
  • + maxdepth: Maximum depth +
  • + +
+ + + + + + +

Return value:

+Always nil + + + +
+ + + + +
exec (command)
+
+ + +Execute given commandline and gather stdout. + + + +

Parameters

+
    + +
  • + command: String containing command to execute +
  • + +
+ + + + + + +

Return value:

+String containing the command's stdout + + + +
+ + + + +
execi (command)
+
+ + +Return a line-buffered iterator over the output of given command. + + + +

Parameters

+
    + +
  • + command: String containing the command to execute +
  • + +
+ + + + + + +

Return value:

+Iterator + + + +
+ + + + +
get_bytecode (val)
+
+ + +Return the current runtime bytecode of the given data. The byte code + +will be stripped before it is returned. + + +

Parameters

+
    + +
  • + val: Value to return as bytecode +
  • + +
+ + + + + + +

Return value:

+String value containing the bytecode of the given data + + + +
+ + + + +
imatch (val)
+
+ + +Return a matching iterator for the given value. The iterator will return + +one token per invocation, the tokens are separated by whitespace. If the +input value is a table, it is transformed into a string first. A nil value +will result in a valid interator which aborts with the first invocation. + + +

Parameters

+
    + +
  • + val: The value to scan (table, string or nil) +
  • + +
+ + + + + + +

Return value:

+Iterator which returns one token per call + + + +
+ + + + +
instanceof (object, class)
+
+ + +Test whether the given object is an instance of the given class. + + + +

Parameters

+
    + +
  • + object: Object instance +
  • + +
  • + class: Class object to test against +
  • + +
+ + + + + + +

Return value:

+Boolean indicating whether the object is an instance + + + +

See also:

+ + +
+ + + + +
keys (t)
+
+ + +Retrieve all keys of given associative table. + + + +

Parameters

+
    + +
  • + t: Table to extract keys from +
  • + +
+ + + + + + +

Return value:

+Sorted table containing the keys + + + +
+ + + + +
kspairs (t)
+
+ + +Return a key, value iterator for the given table. + +The table pairs are sorted by key. + + +

Parameters

+
    + +
  • + t: The table to iterate +
  • + +
+ + + + + + +

Return value:

+Function value containing the corresponding iterator + + + +
+ + + + +
libpath ()
+
+ + +Returns the absolute path to LuCI base directory. + + + + + + + + +

Return value:

+String containing the directory path + + + +
+ + + + +
parse_units (ustr)
+
+ + +Parse certain units from the given string and return the canonical integer + +value or 0 if the unit is unknown. Upper- or lower case is irrelevant. +Recognized units are: + o "y" - one year (60*60*24*366) + o "m" - one month (60*60*24*31) + o "w" - one week (60*60*24*7) + o "d" - one day (60*60*24) + o "h" - one hour (60*60) + o "min" - one minute (60) + o "kb" - one kilobyte (1024) + o "mb" - one megabyte (1024*1024) + o "gb" - one gigabyte (1024*1024*1024) + o "kib" - one si kilobyte (1000) + o "mib" - one si megabyte (1000*1000) + o "gib" - one si gigabyte (1000*1000*1000) + + +

Parameters

+
    + +
  • + ustr: String containing a numerical value with trailing unit +
  • + +
+ + + + + + +

Return value:

+Number containing the canonical value + + + +
+ + + + +
pcdata (value)
+
+ + +Create valid XML PCDATA from given string. + + + +

Parameters

+
    + +
  • + value: String value containing the data to escape +
  • + +
+ + + + + + +

Return value:

+String value containing the escaped data + + + +
+ + + + +
perror (obj)
+
+ + +Write given object to stderr. + + + +

Parameters

+
    + +
  • + obj: Value to write to stderr +
  • + +
+ + + + + + +

Return value:

+Boolean indicating whether the write operation was successful + + + +
+ + + + +
restore_data (str)
+
+ + +Restore data previously serialized with serialize_data(). + + + +

Parameters

+
    + +
  • + str: String containing the data to restore +
  • + +
+ + + + + + +

Return value:

+Value containing the restored data structure + + + +

See also:

+ + +
+ + + + +
serialize_data (val)
+
+ + +Recursively serialize given data to lua code, suitable for restoring + +with loadstring(). + + +

Parameters

+
    + +
  • + val: Value containing the data to serialize +
  • + +
+ + + + + + +

Return value:

+String value containing the serialized code + + + +

See also:

+ + +
+ + + + +
serialize_json (data, writer)
+
+ + +Convert data structure to JSON + + + +

Parameters

+
    + +
  • + data: The data to serialize +
  • + +
  • + writer: A function to write a chunk of JSON data (optional) +
  • + +
+ + + + + + +

Return value:

+String containing the JSON if called without write callback + + + +
+ + + + +
spairs (t, f)
+
+ + +Return a key, value iterator which returns the values sorted according to + +the provided callback function. + + +

Parameters

+
    + +
  • + t: The table to iterate +
  • + +
  • + f: A callback function to decide the order of elements +
  • + +
+ + + + + + +

Return value:

+Function value containing the corresponding iterator + + + +
+ + + + +
split (str, pat, max, regex)
+
+ + +Splits given string on a defined separator sequence and return a table + +containing the resulting substrings. The optional max parameter specifies +the number of bytes to process, regardless of the actual length of the given +string. The optional last parameter, regex, specifies whether the separator +sequence is interpreted as regular expression. + + +

Parameters

+
    + +
  • + str: String value containing the data to split up +
  • + +
  • + pat: String with separator pattern (optional, defaults to "\n") +
  • + +
  • + max: Maximum times to split (optional) +
  • + +
  • + regex: Boolean indicating whether to interpret the separator + pattern as regular expression (optional, default is false) +
  • + +
+ + + + + + +

Return value:

+Table containing the resulting substrings + + + +
+ + + + +
strip_bytecode (code)
+
+ + +Strips unnescessary lua bytecode from given string. Information like line + +numbers and debugging numbers will be discarded. Original version by +Peter Cawley (http://lua-users.org/lists/lua-l/2008-02/msg01158.html) + + +

Parameters

+
    + +
  • + code: String value containing the original lua byte code +
  • + +
+ + + + + + +

Return value:

+String value containing the stripped lua byte code + + + +
+ + + + +
striptags (value)
+
+ + +Strip HTML tags from given string. + + + +

Parameters

+
    + +
  • + value: String containing the HTML text +
  • + +
+ + + + + + +

Return value:

+String with HTML tags stripped of + + + +
+ + + + +
threadlocal ()
+
+ + +Create a new or get an already existing thread local store associated with + +the current active coroutine. A thread local store is private a table object +whose values can't be accessed from outside of the running coroutine. + + + + + + + +

Return value:

+Table value representing the corresponding thread local store + + + +
+ + + + +
trim (str)
+
+ + +Remove leading and trailing whitespace from given string value. + + + +

Parameters

+
    + +
  • + str: String value containing whitespace padded data +
  • + +
+ + + + + + +

Return value:

+String value with leading and trailing space removed + + + +
+ + + + +
ubus (object, method, values)
+
+ + +Issue an ubus call. + + + +

Parameters

+
    + +
  • + object: String containing the ubus object to call +
  • + +
  • + method: String containing the ubus method to call +
  • + +
  • + values: Table containing the values to pass +
  • + +
+ + + + + + +

Return value:

+Table containin the ubus result + + + +
+ + + + +
update (t, updates)
+
+ + +Update values in given table with the values from the second given table. + +Both table are - in fact - merged together. + + +

Parameters

+
    + +
  • + t: Table which should be updated +
  • + +
  • + updates: Table containing the values to update +
  • + +
+ + + + + + +

Return value:

+Always nil + + + +
+ + + + +
vspairs (t)
+
+ + +Return a key, value iterator for the given table. + +The table pairs are sorted by value. + + +

Parameters

+
    + +
  • + t: The table to iterate +
  • + +
+ + + + + + +

Return value:

+Function value containing the corresponding iterator + + + +
+ + +
+ + + + + +
+ +
+ +
+

Valid XHTML 1.0!

+
+ +
+ + diff --git a/documentation/api/modules/nixio.CHANGELOG.html b/documentation/api/modules/nixio.CHANGELOG.html new file mode 100644 index 000000000..48bedc80a --- /dev/null +++ b/documentation/api/modules/nixio.CHANGELOG.html @@ -0,0 +1,290 @@ + + + + Reference + + + + + +
+ +
+ +
+
+
+ +
+ + + +
+ +

Class nixio.CHANGELOG

+ +

+ Changes and improvements.

+ + + + + + + + + + +

Tables

+ + + + + + + + + + + + +
0.2 + Initial Release.
0.3 + Service Release.
+ + + +
+
+ + + + +

Tables

+
+ +
0.2
+
+ Initial Release. +
    +
  • Initial Release
  • +
+ + + +
+ + +
0.3
+
+ Service Release. +
    +
  • Added getifaddrs() function.
  • +
  • Added getsockopt(), setsockopt(), getsockname() and getpeername() + directly to TLS-socket objects unifying the socket interface.
  • +
  • Added support for CyaSSL as cryptographical backend.
  • +
  • Added support for x509 certificates in DER format.
  • +
  • Added support for splice() in UnifiedIO.copyz().
  • +
  • Added interface to inject chunks into UnifiedIO.linesource() buffer.
  • +
  • Changed TLS behaviour to explicitely separate servers and clients.
  • +
  • Fixed usage of signed datatype breaking Base64 decoding.
  • +
  • Fixed namespace clashes for nixio.fs.
  • +
  • Fixed splice() support for some exotic C libraries.
  • +
  • Reconfigure axTLS cryptographical provider and mark it as obsolete.
  • +
+ + + +
+ + +
+ + + +
+ +
+ +
+

Valid XHTML 1.0!

+
+ +
+ + diff --git a/documentation/api/modules/nixio.CryptoHash.html b/documentation/api/modules/nixio.CryptoHash.html new file mode 100644 index 000000000..6158a77b6 --- /dev/null +++ b/documentation/api/modules/nixio.CryptoHash.html @@ -0,0 +1,316 @@ + + + + Reference + + + + + +
+ +
+ +
+
+
+ +
+ + + +
+ +

Object Instance nixio.CryptoHash

+ +

+ Cryptographical Hash and HMAC object.

+ + + + + + + +

Functions

+ + + + + + + + + + + + +
CryptoHash:final () + Finalize the hash and return the digest.
CryptoHash:update (chunk) + Add another chunk of data to be hashed.
+ + + + + + +
+
+ + +

Functions

+
+ + + +
CryptoHash:final ()
+
+ + Finalize the hash and return the digest. + + + + + +

Usage:

+You cannot call update on a hash object that was already finalized + you can however call final multiple times to get the digest. + + + +

Return values:

+
    + +
  1. hexdigest + +
  2. buffer containing binary digest + +
+ + + +
+ + + + +
CryptoHash:update (chunk)
+
+ + Add another chunk of data to be hashed. + + +

Parameters

+
    + +
  • + chunk: Chunk of data +
  • + +
+ + + + + + +

Return value:

+CryptoHash object (self) + + + +
+ + +
+ + + + + +
+ +
+ +
+

Valid XHTML 1.0!

+
+ +
+ + diff --git a/documentation/api/modules/nixio.File.html b/documentation/api/modules/nixio.File.html new file mode 100644 index 000000000..d9e67ea5b --- /dev/null +++ b/documentation/api/modules/nixio.File.html @@ -0,0 +1,673 @@ + + + + Reference + + + + + +
+ +
+ +
+
+
+ +
+ + + +
+ +

Object Instance nixio.File

+ +

+ Large File Object. + Large file operations are supported up to 52 bits if the Lua number type is + double (default).

+ + + + + + + +

Functions

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
File:close () + Close the file descriptor.
File:fileno () + Get the number of the filedescriptor.
File:lock (command, length) + Apply or test a lock on the file.
File:read (length) + Read from a file descriptor.
File:seek (offset, whence) + Reposition read / write offset of the file descriptor.
File:setblocking (blocking) + (POSIX) Set the blocking mode of the file descriptor.
File:stat (field) + Get file status and attributes.
File:sync (data_only) + Synchronizes the file with the storage device.
File:tell () + Return the current read / write offset of the file descriptor.
File:write (buffer, offset, length) + Write to the file descriptor.
+ + + + + + +
+
+ + +

Functions

+
+ + + +
File:close ()
+
+ + Close the file descriptor. + + + + + + + +

Return value:

+true + + + +
+ + + + +
File:fileno ()
+
+ + Get the number of the filedescriptor. + + + + + + + +

Return value:

+file descriptor number + + + +
+ + + + +
File:lock (command, length)
+
+ + Apply or test a lock on the file. + + +

Parameters

+
    + +
  • + command: Locking Command ["lock", "tlock", "ulock", "test"] +
  • + +
  • + length: Amount of Bytes to lock from current offset (optional) +
  • + +
+ + + + +

Usage

+
    + +
  • This function calls lockf() on POSIX and _locking() on Windows. + +
  • The "lock" command is blocking, "tlock" is non-blocking, + "ulock" unlocks and "test" only tests for the lock. + +
  • The "test" command is not available on Windows. + +
  • Locks are by default advisory on POSIX, but mandatory on Windows. + +
+ + + +

Return value:

+true + + + +
+ + + + +
File:read (length)
+
+ + Read from a file descriptor. + + +

Parameters

+
    + +
  • + length: Amount of data to read (in Bytes). +
  • + +
+ + + + +

Usage

+
    + +
  • Warning: It is not guaranteed that all requested data + is read at once especially when dealing with pipes. + You have to check the return value - the length of the buffer actually read - + or use the safe IO functions in the high-level IO utility module. + +
  • The length of the return buffer is limited by the (compile time) + nixio buffersize which is nixio.const.buffersize (8192 by default). + Any read request greater than that will be safely truncated to this value. + +
+ + + +

Return value:

+buffer containing data successfully read + + + +
+ + + + +
File:seek (offset, whence)
+
+ + Reposition read / write offset of the file descriptor. + The seek will be done either from the beginning of the file or relative + to the current position or relative to the end. + + +

Parameters

+
    + +
  • + offset: File Offset +
  • + +
  • + whence: Starting point ["set", "cur", "end"] +
  • + +
+ + + + +

Usage:

+This function calls lseek(). + + + +

Return value:

+new (absolute) offset position + + + +
+ + + + +
File:setblocking (blocking)
+
+ + (POSIX) Set the blocking mode of the file descriptor. + + +

Parameters

+
    + +
  • + blocking: (boolean) +
  • + +
+ + + + + + +

Return value:

+true + + + +
+ + + + +
File:stat (field)
+
+ + Get file status and attributes. + + +

Parameters

+
    + +
  • + field: Only return a specific field, not the whole table (optional) +
  • + +
+ + + + +

Usage:

+This function calls fstat(). + + + +

Return value:

+Table containing:
    +
  • atime = Last access timestamp
  • +
  • blksize = Blocksize (POSIX only)
  • +
  • blocks = Blocks used (POSIX only)
  • +
  • ctime = Creation timestamp
  • +
  • dev = Device ID
  • +
  • gid = Group ID
  • +
  • ino = Inode
  • +
  • modedec = Mode converted into a decimal number
  • +
  • modestr = Mode as string as returned by ls -l
  • +
  • mtime = Last modification timestamp
  • +
  • nlink = Number of links
  • +
  • rdev = Device ID (if special file)
  • +
  • size = Size in bytes
  • +
  • type = ["reg", "dir", "chr", "blk", "fifo", "lnk", "sock"]
  • +
  • uid = User ID
  • +
+ + + +
+ + + + +
File:sync (data_only)
+
+ + Synchronizes the file with the storage device. + Returns when the file is successfully written to the disk. + + +

Parameters

+
    + +
  • + data_only: Do not synchronize the metadata. (optional, boolean) +
  • + +
+ + + + +

Usage

+
    + +
  • This function calls fsync() when data_only equals false + otherwise fdatasync(), on Windows _commit() is used instead. + +
  • fdatasync() is only supported by Linux and Solaris. For other systems + the data_only parameter is ignored and fsync() is always called. + +
+ + + +

Return value:

+true + + + +
+ + + + +
File:tell ()
+
+ + Return the current read / write offset of the file descriptor. + + + + + +

Usage:

+This function calls lseek() with offset 0 from the current position. + + + +

Return value:

+offset position + + + +
+ + + + +
File:write (buffer, offset, length)
+
+ + Write to the file descriptor. + + +

Parameters

+
    + +
  • + buffer: Buffer holding the data to be written. +
  • + +
  • + offset: Offset to start reading the buffer from. (optional) +
  • + +
  • + length: Length of chunk to read from the buffer. (optional) +
  • + +
+ + + + +

Usage

+
    + +
  • Warning: It is not guaranteed that all data + in the buffer is written at once especially when dealing with pipes. + You have to check the return value - the number of bytes actually written - + or use the safe IO functions in the high-level IO utility module. + +
  • Unlike standard Lua indexing the lowest offset and default is 0. + +
+ + + +

Return value:

+number of bytes written + + + +
+ + +
+ + + + + +
+ +
+ +
+

Valid XHTML 1.0!

+
+ +
+ + diff --git a/documentation/api/modules/nixio.README.html b/documentation/api/modules/nixio.README.html new file mode 100644 index 000000000..a8da0f36d --- /dev/null +++ b/documentation/api/modules/nixio.README.html @@ -0,0 +1,374 @@ + + + + Reference + + + + + +
+ +
+ +
+
+
+ +
+ + + +
+ +

Class nixio.README

+ +

+ General Information.

+ + + + + + + + + + +

Tables

+ + + + + + + + + + + + + + + + + + + + + + +
Errorhandling + General error handling information.
Functions + Function conventions.
Platforms + Platform information.
TLS-Crypto + Cryptography and TLS libraries.
+ + + +
+
+ + + + +

Tables

+
+ +
Errorhandling
+
+ General error handling information. +
    +
  • Most of the functions available in this library may fail. If any error + occurs the function returns nil or false, an error code + (usually errno) and an additional error message text (if avaialable).
  • +
  • At the moment false is only returned when a non-blocking I/O function + fails with EAGAIN, EWOULDBLOCK or WSAEWOULDBLOCK for any others nil is + returned as first parameter. Therefore you can use false to write portable + non-blocking I/O applications.
  • +
  • Note that the function documentation does only mention the return values + in case of a successful operation.
  • +
  • You can find a table of common error numbers and other useful constants + like signal numbers in nixio.const e.g. nixio.const.EINVAL, + nixio.const.SIGTERM, etc. For portability there is a second error constant + table nixio.const_sock for socket error codes. This might + be important if you are dealing with Windows applications, on POSIX however + const_sock is just an alias for const.
  • +
  • With some exceptions - which are explicitely stated in the function + documentation - all blocking functions are signal-protected and will not fail + with EINTR.
  • +
  • On POSIX the SIGPIPE signal will be set to ignore upon initialization. + You should restore the default behaviour or set a custom signal handler + in your program after loading nixio if you need this behaviour.
  • +
+ + + +
+ + +
Functions
+
+ Function conventions. +
In general all functions are namend and behave like their POSIX API + counterparts - where applicable - applying the following rules: +
    +
  • Functions should be named like the underlying POSIX API function ommiting + prefixes or suffixes - especially when placed in an object-context ( + lockf -> File:lock, fsync -> File:sync, dup2 -> dup, ...)
  • +
  • If you are unclear about the behaviour of a function you should consult + your OS API documentation (e.g. the manpages).
  • +
  • If the name is significantly different from the POSIX-function, the + underlying function(s) are stated in the documentation.
  • +
  • Parameters should reflect those of the C-API, buffer length arguments and + by-reference parameters should be ommitted for pratical purposes.
  • +
  • If a C function accepts a bitfield as parameter, it should be translated + into lower case string flags representing the flags if the bitfield is the + last parameter and also ommiting prefixes or suffixes. (e.g. waitpid + (pid, &s, WNOHANG | WUNTRACED) -> waitpid(pid, "nohang", "untraced"), + getsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt)) -> + Socket:getopt("socket", "reuseaddr"), etc.)
  • +
  • If it is not applicable to provide a string representation of the + bitfield a bitfield generator helper is provided. It is named FUNCTION_flags. + (open("/tmp/test", O_RDONLY | O_NONBLOCK) -> open("/tmp/test", open_flags( + "rdonly", "nonblock")))
  • +
+ + + +
+ + +
Platforms
+
+ Platform information. +
    +
  • The minimum platform requirements are a decent POSIX 2001 support. + Builds are more or less tested on Linux, Solaris and FreeBSD. Builds for + Windows XP SP1 and later can be compiled with MinGW either from Windows + itself or using the MinGW cross-compiler. Earlier versions of Windows are not + supported.
  • +
  • In general all functions which don't have any remarks + in their documentation are available on all platforms.
  • +
  • Functions with a (POSIX), (Linux) or similar prefix are only available + on these specific platforms. Same appplies to parameters of functions + with a similar suffix.
  • +
  • Some functions might have limitations on some platforms. This should + be stated in the documentation. Please also consult your OS API + documentation.
  • +
+ + + +
+ + +
TLS-Crypto
+
+ Cryptography and TLS libraries. +
    +
  • Currently 3 underlying cryptography libraries are supported: openssl, + cyassl and axTLS. The name of the library in use is written to + nixio.tls_provider
  • +
  • You should whenever possible use openssl or cyassl as axTLS has only + limited support. It does not provide support for non-blocking sockets and + is probably less audited than the other ones.
  • +
  • As the supported Windows versions are not suitable for embedded devices + axTLS is at the moment not supported on Windows.
  • +
+ + + +
+ + +
+ + + +
+ +
+ +
+

Valid XHTML 1.0!

+
+ +
+ + diff --git a/documentation/api/modules/nixio.Socket.html b/documentation/api/modules/nixio.Socket.html new file mode 100644 index 000000000..105682ced --- /dev/null +++ b/documentation/api/modules/nixio.Socket.html @@ -0,0 +1,1033 @@ + + + + Reference + + + + + +
+ +
+ +
+
+
+ +
+ + + +
+ +

Object Instance nixio.Socket

+ +

+ Socket Object. + Supports IPv4, IPv6 and UNIX (POSIX only) families.

+ + + + + + + +

Functions

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Socket:accept () + Accept a connection on the socket.
Socket:bind (host, port) + Bind the socket to a network address.
Socket:close () + Close the socket.
Socket:connect (host, port) + Connect the socket to a network address.
Socket:fileno () + Get the number of the filedescriptor.
Socket:getopt (level, option) + Get a socket option.
Socket:getpeername () + Get the peer address of a socket.
Socket:getsockname () + Get the local address of a socket.
Socket:listen (backlog) + Listen for connections on the socket.
Socket:read  (length) + Receive a message on the socket (This is an alias for recv).
Socket:recv  (length) + Receive a message on the socket.
Socket:recvfrom (length) + Receive a message on the socket including the senders source address.
Socket:send (buffer, offset, length) + Send a message on the socket.
Socket:sendto (buffer, host, port, offset, length) + Send a message on the socket specifying the destination.
Socket:setblocking (blocking) + Set the blocking mode of the socket.
Socket:setopt (level, option, value) + Set a socket option.
Socket:shutdown (how) + Shut down part of a full-duplex connection.
Socket:write (buffer, offset, length) + Send a message on the socket (This is an alias for send).
+ + + + + + +
+
+ + +

Functions

+
+ + + +
Socket:accept ()
+
+ + Accept a connection on the socket. + + + + + + + +

Return values:

+
    + +
  1. Socket Object + +
  2. Peer IP-Address + +
  3. Peer Port + +
+ + + +
+ + + + +
Socket:bind (host, port)
+
+ + Bind the socket to a network address. + + +

Parameters

+
    + +
  • + host: Host (optional, default: all addresses) +
  • + +
  • + port: Port or service description +
  • + +
+ + + + +

Usage

+
    + +
  • This function calls getaddrinfo() and bind() but NOT listen(). + +
  • If host is a domain name it will be looked up and bind() + tries the IP-Addresses in the order returned by the DNS resolver + until the bind succeeds. + +
  • UNIX sockets ignore the port, + and interpret host as a socket path. + +
+ + + +

Return value:

+true + + + +
+ + + + +
Socket:close ()
+
+ + Close the socket. + + + + + + + +

Return value:

+true + + + +
+ + + + +
Socket:connect (host, port)
+
+ + Connect the socket to a network address. + + +

Parameters

+
    + +
  • + host: Hostname or IP-Address (optional, default: localhost) +
  • + +
  • + port: Port or service description +
  • + +
+ + + + +

Usage

+
    + +
  • This function calls getaddrinfo() and connect(). + +
  • If host is a domain name it will be looked up and connect() + tries the IP-Addresses in the order returned by the DNS resolver + until the connect succeeds. + +
  • UNIX sockets ignore the port, + and interpret host as a socket path. + +
+ + + +

Return value:

+true + + + +
+ + + + +
Socket:fileno ()
+
+ + Get the number of the filedescriptor. + + + + + + + +

Return value:

+file descriptor number + + + +
+ + + + +
Socket:getopt (level, option)
+
+ + Get a socket option. + + +

Parameters

+
    + +
  • + level: Level ["socket", "tcp", "ip", "ipv6"] +
  • + +
  • + option: Option ["keepalive", "reuseaddr", "sndbuf", "rcvbuf", + "priority", "broadcast", "linger", "sndtimeo", "rcvtimeo", "dontroute", + "bindtodevice", "error", "oobinline", "cork" (TCP), "nodelay" (TCP), + "mtu" (IP, IPv6), "hdrincl" (IP), "multicast_ttl" (IP), "multicast_loop" + (IP, IPv6), "multicast_if" (IP, IPv6), "v6only" (IPv6), "multicast_hops" + (IPv6), "add_membership" (IP, IPv6), "drop_membership" (IP, IPv6)] +
  • + +
+ + + + + + +

Return value:

+Value + + + +
+ + + + +
Socket:getpeername ()
+
+ + Get the peer address of a socket. + + + + + + + +

Return values:

+
    + +
  1. IP-Address + +
  2. Port + +
+ + + +
+ + + + +
Socket:getsockname ()
+
+ + Get the local address of a socket. + + + + + + + +

Return values:

+
    + +
  1. IP-Address + +
  2. Port + +
+ + + +
+ + + + +
Socket:listen (backlog)
+
+ + Listen for connections on the socket. + + +

Parameters

+
    + +
  • + backlog: Length of queue for pending connections +
  • + +
+ + + + + + +

Return value:

+true + + + +
+ + + + +
Socket:read  (length)
+
+ + Receive a message on the socket (This is an alias for recv). + See the recvfrom description for more details. + + +

Parameters

+
    + +
  • + length: Amount of data to read (in Bytes). +
  • + +
+ + + + + + +

Return value:

+buffer containing data successfully read + + + +

See also:

+ + +
+ + + + +
Socket:recv  (length)
+
+ + Receive a message on the socket. + This function is identical to recvfrom except that it does not return + the sender's source address. See the recvfrom description for more details. + + +

Parameters

+
    + +
  • + length: Amount of data to read (in Bytes). +
  • + +
+ + + + + + +

Return value:

+buffer containing data successfully read + + + +

See also:

+ + +
+ + + + +
Socket:recvfrom (length)
+
+ + Receive a message on the socket including the senders source address. + + +

Parameters

+
    + +
  • + length: Amount of data to read (in Bytes). +
  • + +
+ + + + +

Usage

+
    + +
  • Warning: It is not guaranteed that all requested data + is read at once. + You have to check the return value - the length of the buffer actually read - + or use the safe IO functions in the high-level IO utility module. + +
  • The length of the return buffer is limited by the (compile time) + nixio buffersize which is nixio.const.buffersize (8192 by default). + Any read request greater than that will be safely truncated to this value. + +
+ + + +

Return values:

+
    + +
  1. buffer containing data successfully read + +
  2. host IP-Address of the sender + +
  3. port Port of the sender + +
+ + + +
+ + + + +
Socket:send (buffer, offset, length)
+
+ + Send a message on the socket. + This function is identical to sendto except for the missing destination + paramters. See the sendto description for a detailed description. + + +

Parameters

+
    + +
  • + buffer: Buffer holding the data to be written. +
  • + +
  • + offset: Offset to start reading the buffer from. (optional) +
  • + +
  • + length: Length of chunk to read from the buffer. (optional) +
  • + +
+ + + + + + +

Return value:

+number of bytes written + + + +

See also:

+ + +
+ + + + +
Socket:sendto (buffer, host, port, offset, length)
+
+ + Send a message on the socket specifying the destination. + + +

Parameters

+
    + +
  • + buffer: Buffer holding the data to be written. +
  • + +
  • + host: Target IP-Address +
  • + +
  • + port: Target Port +
  • + +
  • + offset: Offset to start reading the buffer from. (optional) +
  • + +
  • + length: Length of chunk to read from the buffer. (optional) +
  • + +
+ + + + +

Usage

+
    + +
  • Warning: It is not guaranteed that all data + in the buffer is written at once. + You have to check the return value - the number of bytes actually written - + or use the safe IO functions in the high-level IO utility module. + +
  • Unlike standard Lua indexing the lowest offset and default is 0. + +
+ + + +

Return value:

+number of bytes written + + + +
+ + + + +
Socket:setblocking (blocking)
+
+ + Set the blocking mode of the socket. + + +

Parameters

+
    + +
  • + blocking: (boolean) +
  • + +
+ + + + + + +

Return value:

+true + + + +
+ + + + +
Socket:setopt (level, option, value)
+
+ + Set a socket option. + + +

Parameters

+
    + +
  • + level: Level ["socket", "tcp", "ip", "ipv6"] +
  • + +
  • + option: Option ["keepalive", "reuseaddr", "sndbuf", "rcvbuf", + "priority", "broadcast", "linger", "sndtimeo", "rcvtimeo", "dontroute", + "bindtodevice", "error", "oobinline", "cork" (TCP), "nodelay" (TCP), + "mtu" (IP, IPv6), "hdrincl" (IP), "multicast_ttl" (IP), "multicast_loop" + (IP, IPv6), "multicast_if" (IP, IPv6), "v6only" (IPv6), "multicast_hops" + (IPv6), "add_membership" (IP, IPv6), "drop_membership" (IP, IPv6)] +
  • + +
  • + value: Value +
  • + +
+ + + + + + +

Return value:

+true + + + +
+ + + + +
Socket:shutdown (how)
+
+ + Shut down part of a full-duplex connection. + + +

Parameters

+
    + +
  • + how: (optional, default: rdwr) ["rdwr", "rd", "wr"] +
  • + +
+ + + + + + +

Return value:

+true + + + +
+ + + + +
Socket:write (buffer, offset, length)
+
+ + Send a message on the socket (This is an alias for send). + See the sendto description for a detailed description. + + +

Parameters

+
    + +
  • + buffer: Buffer holding the data to be written. +
  • + +
  • + offset: Offset to start reading the buffer from. (optional) +
  • + +
  • + length: Length of chunk to read from the buffer. (optional) +
  • + +
+ + + + + + +

Return value:

+number of bytes written + + + +

See also:

+ + +
+ + +
+ + + + + +
+ +
+ +
+

Valid XHTML 1.0!

+
+ +
+ + diff --git a/documentation/api/modules/nixio.TLSContext.html b/documentation/api/modules/nixio.TLSContext.html new file mode 100644 index 000000000..a91b1eec4 --- /dev/null +++ b/documentation/api/modules/nixio.TLSContext.html @@ -0,0 +1,479 @@ + + + + Reference + + + + + +
+ +
+ +
+
+
+ +
+ + + +
+ +

Object Instance nixio.TLSContext

+ +

+ Transport Layer Security Context Object.

+ + + + + + + +

Functions

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TLSContext:create (socket) + Create a TLS Socket from a socket descriptor.
TLSContext:set_cert (path) + Assign a PEM certificate to this context.
TLSContext:set_ciphers (cipherlist) + Set the available ciphers for this context.
TLSContext:set_key (path) + Assign a PEM private key to this context.
TLSContext:set_verify (flag1, ...) + Set the verification flags of this context.
TLSContext:set_verify_depth (depth) + Set the verification depth of this context.
+ + + + + + +
+
+ + +

Functions

+
+ + + +
TLSContext:create (socket)
+
+ + Create a TLS Socket from a socket descriptor. + + +

Parameters

+
    + +
  • + socket: Socket Object +
  • + +
+ + + + + + +

Return value:

+TLSSocket Object + + + +
+ + + + +
TLSContext:set_cert (path)
+
+ + Assign a PEM certificate to this context. + + +

Parameters

+
    + +
  • + path: Certificate File path +
  • + +
+ + + + +

Usage:

+This function calls SSL_CTX_use_certificate_chain_file(). + + + +

Return value:

+true + + + +
+ + + + +
TLSContext:set_ciphers (cipherlist)
+
+ + Set the available ciphers for this context. + + +

Parameters

+
    + +
  • + cipherlist: String containing a list of ciphers +
  • + +
+ + + + +

Usage:

+This function calls SSL_CTX_set_cipher_list(). + + + +

Return value:

+true + + + +
+ + + + +
TLSContext:set_key (path)
+
+ + Assign a PEM private key to this context. + + +

Parameters

+
    + +
  • + path: Private Key File path +
  • + +
+ + + + +

Usage:

+This function calls SSL_CTX_use_PrivateKey_file(). + + + +

Return value:

+true + + + +
+ + + + +
TLSContext:set_verify (flag1, ...)
+
+ + Set the verification flags of this context. + + +

Parameters

+
    + +
  • + flag1: First Flag ["none", "peer", "verify_fail_if_no_peer_cert", + "client_once"] +
  • + +
  • + ...: More Flags [-"-] +
  • + +
+ + + + +

Usage:

+This function calls SSL_CTX_set_verify(). + + + +

Return value:

+true + + + +
+ + + + +
TLSContext:set_verify_depth (depth)
+
+ + Set the verification depth of this context. + + +

Parameters

+
    + +
  • + depth: Depth +
  • + +
+ + + + +

Usage:

+This function calls SSL_CTX_set_verify_depth(). + + + +

Return value:

+true + + + +
+ + +
+ + + + + +
+ +
+ +
+

Valid XHTML 1.0!

+
+ +
+ + diff --git a/documentation/api/modules/nixio.TLSSocket.html b/documentation/api/modules/nixio.TLSSocket.html new file mode 100644 index 000000000..3d99a6482 --- /dev/null +++ b/documentation/api/modules/nixio.TLSSocket.html @@ -0,0 +1,575 @@ + + + + Reference + + + + + +
+ +
+ +
+
+
+ +
+ + + +
+ +

Object Instance nixio.TLSSocket

+ +

+ TLS Socket Object. + TLS Sockets contain the underlying socket and context in the fields + "socket" and "context".

+ + + + + + + +

Functions

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TLSSocket:accept () + Wait for a TLS handshake from a client.
TLSSocket:connect () + Initiate the TLS handshake as client with the server.
TLSSocket:read  (length) + Receive a message on the socket (This is an alias for recv).
TLSSocket:recv (length) + Receive a message on the socket.
TLSSocket:send (buffer, offset, length) + Send a message to the socket.
TLSSocket:shutdown () + Shut down the TLS connection.
TLSSocket:write (buffer, offset, length) + Send a message on the socket (This is an alias for send).
+ + + + + + +
+
+ + +

Functions

+
+ + + +
TLSSocket:accept ()
+
+ + Wait for a TLS handshake from a client. + + + + + +

Usage

+
    + +
  • This function calls SSL_accept(). + +
  • You have to call either connect or accept before transmitting data. + +
+ + + +

Return value:

+true + + + +

See also:

+ + +
+ + + + +
TLSSocket:connect ()
+
+ + Initiate the TLS handshake as client with the server. + + + + + +

Usage

+
    + +
  • This function calls SSL_connect(). + +
  • You have to call either connect or accept before transmitting data. + +
+ + + +

Return value:

+true + + + +

See also:

+ + +
+ + + + +
TLSSocket:read  (length)
+
+ + Receive a message on the socket (This is an alias for recv). + See the recv description for more details. + + +

Parameters

+
    + +
  • + length: Amount of data to read (in Bytes). +
  • + +
+ + + + + + +

Return value:

+buffer containing data successfully read + + + +

See also:

+ + +
+ + + + +
TLSSocket:recv (length)
+
+ + Receive a message on the socket. + + +

Parameters

+
    + +
  • + length: Amount of data to read (in Bytes). +
  • + +
+ + + + +

Usage

+
    + +
  • This function calls SSL_read(). + +
  • Warning: It is not guaranteed that all requested data + is read at once. + You have to check the return value - the length of the buffer actually read - + or use the safe IO functions in the high-level IO utility module. + +
  • The length of the return buffer is limited by the (compile time) + nixio buffersize which is nixio.const.buffersize (8192 by default). + Any read request greater than that will be safely truncated to this value. + +
+ + + +

Return value:

+buffer containing data successfully read + + + +
+ + + + +
TLSSocket:send (buffer, offset, length)
+
+ + Send a message to the socket. + + +

Parameters

+
    + +
  • + buffer: Buffer holding the data to be written. +
  • + +
  • + offset: Offset to start reading the buffer from. (optional) +
  • + +
  • + length: Length of chunk to read from the buffer. (optional) +
  • + +
+ + + + +

Usage

+
    + +
  • This function calls SSL_write(). + +
  • Warning: It is not guaranteed that all data + in the buffer is written at once. + You have to check the return value - the number of bytes actually written - + or use the safe IO functions in the high-level IO utility module. + +
  • Unlike standard Lua indexing the lowest offset and default is 0. + +
+ + + +

Return value:

+number of bytes written + + + +
+ + + + +
TLSSocket:shutdown ()
+
+ + Shut down the TLS connection. + + + + + +

Usage:

+This function calls SSL_shutdown(). + + + +

Return value:

+true + + + +
+ + + + +
TLSSocket:write (buffer, offset, length)
+
+ + Send a message on the socket (This is an alias for send). + See the send description for a detailed description. + + +

Parameters

+
    + +
  • + buffer: Buffer holding the data to be written. +
  • + +
  • + offset: Offset to start reading the buffer from. (optional) +
  • + +
  • + length: Length of chunk to read from the buffer. (optional) +
  • + +
+ + + + + + +

Return value:

+number of bytes written + + + +

See also:

+ + +
+ + +
+ + + + + +
+ +
+ +
+

Valid XHTML 1.0!

+
+ +
+ + diff --git a/documentation/api/modules/nixio.UnifiedIO.html b/documentation/api/modules/nixio.UnifiedIO.html new file mode 100644 index 000000000..22e6e9165 --- /dev/null +++ b/documentation/api/modules/nixio.UnifiedIO.html @@ -0,0 +1,767 @@ + + + + Reference + + + + + +
+ +
+ +
+
+
+ +
+ + + +
+ +

Object Instance nixio.UnifiedIO

+ +

+ Unified high-level I/O utility API for Files, Sockets and TLS-Sockets. + These functions are added to the object function tables by doing + require "nixio.util", can be used on all nixio IO Descriptors and + are based on the shared low-level read() and write() functions.

+ + + + + + + +

Functions

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
UnifiedIO:blocksource (blocksize, limit) + Create a block-based iterator.
UnifiedIO:close () + Close the descriptor.
UnifiedIO:copy (fdout, size) + Copy data from the current descriptor to another one.
UnifiedIO:copyz (fdout, size) + Copy data from the current descriptor to another one using kernel-space + copying if possible.
UnifiedIO:is_file () + Test whether the I/O-Descriptor is a file.
UnifiedIO:is_socket () + Test whether the I/O-Descriptor is a socket.
UnifiedIO:is_tls_socket () + Test whether the I/O-Descriptor is a TLS socket.
UnifiedIO:linesource (limit) + Create a line-based iterator.
UnifiedIO:readall (length) + Read a block of data and wait until all data is available.
UnifiedIO:sink (close_when_done) + Create a sink.
UnifiedIO:writeall (block) + Write a block of data and wait until all data is written.
+ + + + + + +
+
+ + +

Functions

+
+ + + +
UnifiedIO:blocksource (blocksize, limit)
+
+ + Create a block-based iterator. + + +

Parameters

+
    + +
  • + blocksize: Advisory blocksize (optional) +
  • + +
  • + limit: Amount of data to consume (optional) +
  • + +
+ + + + +

Usage

+
    + +
  • This function uses the low-level read function of the descriptor. + +
  • The blocksize given is only advisory and to be seen as an upper limit, + if an underlying read returns less bytes the chunk is nevertheless returned. + +
  • If the limit parameter is ommited, the iterator returns data + until an end-of-file, end-of-stream, connection shutdown or similar happens. + +
  • The iterator will not buffer so it is safe to mix with calls to read. + +
  • If the descriptor is non-blocking the iterator may fail with EAGAIN. + +
  • The iterator can be used as an LTN12 source. + +
+ + + +

Return value:

+Block-based Iterator + + + +
+ + + + +
UnifiedIO:close ()
+
+ + Close the descriptor. + + + + + +

Usage:

+If the descriptor is a TLS-socket the underlying descriptor is + closed without touching the TLS connection. + + + +

Return value:

+true + + + +
+ + + + +
UnifiedIO:copy (fdout, size)
+
+ + Copy data from the current descriptor to another one. + + +

Parameters

+
    + +
  • + fdout: Target Descriptor +
  • + +
  • + size: Bytes to copy (optional) +
  • + +
+ + + + +

Usage

+
    + +
  • This function uses the blocksource function of the source descriptor + and the sink function of the target descriptor. + +
  • If the limit parameter is ommited, data is copied + until an end-of-file, end-of-stream, connection shutdown or similar happens. + +
  • If the descriptor is non-blocking the function may fail with EAGAIN. + +
+ + + +

Return values:

+
    + +
  1. bytes that were successfully written if no error occured + +
  2. - reserved for error code - + +
  3. - reserved for error message - + +
  4. bytes that were successfully written even if an error occured + +
+ + + +
+ + + + +
UnifiedIO:copyz (fdout, size)
+
+ + Copy data from the current descriptor to another one using kernel-space + copying if possible. + + +

Parameters

+
    + +
  • + fdout: Target Descriptor +
  • + +
  • + size: Bytes to copy (optional) +
  • + +
+ + + + +

Usage

+
    + +
  • This function uses the sendfile() syscall to copy the data or the + blocksource function of the source descriptor and the sink function + of the target descriptor as a fallback mechanism. + +
  • If the limit parameter is ommited, data is copied + until an end-of-file, end-of-stream, connection shutdown or similar happens. + +
  • If the descriptor is non-blocking the function may fail with EAGAIN. + +
+ + + +

Return values:

+
    + +
  1. bytes that were successfully written if no error occured + +
  2. - reserved for error code - + +
  3. - reserved for error message - + +
  4. bytes that were successfully written even if an error occured + +
+ + + +
+ + + + +
UnifiedIO:is_file ()
+
+ + Test whether the I/O-Descriptor is a file. + + + + + + + +

Return value:

+boolean + + + +
+ + + + +
UnifiedIO:is_socket ()
+
+ + Test whether the I/O-Descriptor is a socket. + + + + + + + +

Return value:

+boolean + + + +
+ + + + +
UnifiedIO:is_tls_socket ()
+
+ + Test whether the I/O-Descriptor is a TLS socket. + + + + + + + +

Return value:

+boolean + + + +
+ + + + +
UnifiedIO:linesource (limit)
+
+ + Create a line-based iterator. + Lines may end with either \n or \r\n, these control chars are not included + in the return value. + + +

Parameters

+
    + +
  • + limit: Line limit +
  • + +
+ + + + +

Usage

+
    + +
  • This function uses the low-level read function of the descriptor. + +
  • Note: This function uses an internal buffer to read + ahead. Do NOT mix calls to read(all) and the returned iterator. If you want + to stop reading line-based and want to use the read(all) functions instead + you can pass "true" to the iterator which will flush the buffer + and return the bufferd data. + +
  • If the limit parameter is ommited, this function uses the nixio + buffersize (8192B by default). + +
  • If the descriptor is non-blocking the iterator may fail with EAGAIN. + +
  • The iterator can be used as an LTN12 source. + +
+ + + +

Return value:

+Line-based Iterator + + + +
+ + + + +
UnifiedIO:readall (length)
+
+ + Read a block of data and wait until all data is available. + + +

Parameters

+
    + +
  • + length: Bytes to read (optional) +
  • + +
+ + + + +

Usage

+
    + +
  • This function uses the low-level read function of the descriptor. + +
  • If the length parameter is ommited, this function returns all data + that can be read before an end-of-file, end-of-stream, connection shutdown + or similar happens. + +
  • If the descriptor is non-blocking this function may fail with EAGAIN. + +
+ + + +

Return values:

+
    + +
  1. data that was successfully read if no error occured + +
  2. - reserved for error code - + +
  3. - reserved for error message - + +
  4. data that was successfully read even if an error occured + +
+ + + +
+ + + + +
UnifiedIO:sink (close_when_done)
+
+ + Create a sink. + This sink will simply write all data that it receives and optionally + close the descriptor afterwards. + + +

Parameters

+
    + +
  • + close_when_done: (optional, boolean) +
  • + +
+ + + + +

Usage

+
    + +
  • This function uses the writeall function of the descriptor. + +
  • If the descriptor is non-blocking the sink may fail with EAGAIN. + +
  • The iterator can be used as an LTN12 sink. + +
+ + + +

Return value:

+Sink + + + +
+ + + + +
UnifiedIO:writeall (block)
+
+ + Write a block of data and wait until all data is written. + + +

Parameters

+
    + +
  • + block: Bytes to write +
  • + +
+ + + + +

Usage

+
    + +
  • This function uses the low-level write function of the descriptor. + +
  • If the descriptor is non-blocking this function may fail with EAGAIN. + +
+ + + +

Return values:

+
    + +
  1. bytes that were successfully written if no error occured + +
  2. - reserved for error code - + +
  3. - reserved for error message - + +
  4. bytes that were successfully written even if an error occured + +
+ + + +
+ + +
+ + + + + +
+ +
+ +
+

Valid XHTML 1.0!

+
+ +
+ + diff --git a/documentation/api/modules/nixio.bin.html b/documentation/api/modules/nixio.bin.html new file mode 100644 index 000000000..fd8287912 --- /dev/null +++ b/documentation/api/modules/nixio.bin.html @@ -0,0 +1,427 @@ + + + + Reference + + + + + +
+ +
+ +
+
+
+ +
+ + + +
+ +

Class nixio.bin

+ +

+ Binary operations and conversion.

+ + + + + + + +

Functions

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
b64decode (buffer) + Base64 decode a given buffer.
b64encode (buffer) + Base64 encode a given buffer.
crc32 (buffer, initial) + Calculate the CRC32 value of a buffer.
hexlify (buffer) + Return a hexadecimal ASCII represantation of the content of a buffer.
unhexlify (hexvalue) + Return a binary buffer from a hexadecimal ASCII representation.
+ + + + + + +
+
+ + +

Functions

+
+ + + +
b64decode (buffer)
+
+ + Base64 decode a given buffer. + + +

Parameters

+
    + +
  • + buffer: Base 64 Encoded data +
  • + +
+ + + + + + +

Return value:

+binary data + + + +
+ + + + +
b64encode (buffer)
+
+ + Base64 encode a given buffer. + + +

Parameters

+
    + +
  • + buffer: Buffer +
  • + +
+ + + + + + +

Return value:

+base64 encoded buffer + + + +
+ + + + +
crc32 (buffer, initial)
+
+ + Calculate the CRC32 value of a buffer. + + +

Parameters

+
    + +
  • + buffer: Buffer +
  • + +
  • + initial: Initial CRC32 value (optional) +
  • + +
+ + + + + + +

Return value:

+crc32 value + + + +
+ + + + +
hexlify (buffer)
+
+ + Return a hexadecimal ASCII represantation of the content of a buffer. + + +

Parameters

+
    + +
  • + buffer: Buffer +
  • + +
+ + + + + + +

Return value:

+representation using characters [0-9a-f] + + + +
+ + + + +
unhexlify (hexvalue)
+
+ + Return a binary buffer from a hexadecimal ASCII representation. + + +

Parameters

+
    + +
  • + hexvalue: representation using characters [0-9a-f] +
  • + +
+ + + + + + +

Return value:

+binary data + + + +
+ + +
+ + + + + +
+ +
+ +
+

Valid XHTML 1.0!

+
+ +
+ + diff --git a/documentation/api/modules/nixio.bit.html b/documentation/api/modules/nixio.bit.html new file mode 100644 index 000000000..b29c29d33 --- /dev/null +++ b/documentation/api/modules/nixio.bit.html @@ -0,0 +1,744 @@ + + + + Reference + + + + + +
+ +
+ +
+
+
+ +
+ + + +
+ +

Class nixio.bit

+ +

+ Bitfield operators and mainpulation functions. + Can be used as a drop-in replacement for bitlib.

+ + + + + + + +

Functions

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
arshift (oper, shift) + Arithmetically right shift a number.
band (oper1, oper2, ...) + Bitwise AND several numbers.
bnot (oper) + Invert given number.
bor (oper1, oper2, ...) + Bitwise OR several numbers.
bxor (oper1, oper2, ...) + Bitwise XOR several numbers.
cast (oper) + Cast a number to the bit-operating range.
check (bitfield, flag1, ...) + Checks whether given flags are set in a bitfield.
div (oper1, oper2, ...) + Integer division of 2 or more numbers.
lshift (oper, shift) + Left shift a number.
rshift (oper, shift) + Right shift a number.
set (bitfield, flag1, ...) + Sets one or more flags of a bitfield.
unset (bitfield, flag1, ...) + Unsets one or more flags of a bitfield.
+ + + + + + +
+
+ + +

Functions

+
+ + + +
arshift (oper, shift)
+
+ + Arithmetically right shift a number. + + +

Parameters

+
    + +
  • + oper: number +
  • + +
  • + shift: bits to shift +
  • + +
+ + + + + + +

Return value:

+number + + + +
+ + + + +
band (oper1, oper2, ...)
+
+ + Bitwise AND several numbers. + + +

Parameters

+
    + +
  • + oper1: First Operand +
  • + +
  • + oper2: Second Operand +
  • + +
  • + ...: More Operands +
  • + +
+ + + + + + +

Return value:

+number + + + +
+ + + + +
bnot (oper)
+
+ + Invert given number. + + +

Parameters

+
    + +
  • + oper: Operand +
  • + +
+ + + + + + +

Return value:

+number + + + +
+ + + + +
bor (oper1, oper2, ...)
+
+ + Bitwise OR several numbers. + + +

Parameters

+
    + +
  • + oper1: First Operand +
  • + +
  • + oper2: Second Operand +
  • + +
  • + ...: More Operands +
  • + +
+ + + + + + +

Return value:

+number + + + +
+ + + + +
bxor (oper1, oper2, ...)
+
+ + Bitwise XOR several numbers. + + +

Parameters

+
    + +
  • + oper1: First Operand +
  • + +
  • + oper2: Second Operand +
  • + +
  • + ...: More Operands +
  • + +
+ + + + + + +

Return value:

+number + + + +
+ + + + +
cast (oper)
+
+ + Cast a number to the bit-operating range. + + +

Parameters

+
    + +
  • + oper: number +
  • + +
+ + + + + + +

Return value:

+number + + + +
+ + + + +
check (bitfield, flag1, ...)
+
+ + Checks whether given flags are set in a bitfield. + + +

Parameters

+
    + +
  • + bitfield: Bitfield +
  • + +
  • + flag1: First Flag +
  • + +
  • + ...: More Flags +
  • + +
+ + + + + + +

Return value:

+true when all flags are set, otherwise false + + + +
+ + + + +
div (oper1, oper2, ...)
+
+ + Integer division of 2 or more numbers. + + +

Parameters

+
    + +
  • + oper1: Operand 1 +
  • + +
  • + oper2: Operand 2 +
  • + +
  • + ...: More Operands +
  • + +
+ + + + + + +

Return value:

+number + + + +
+ + + + +
lshift (oper, shift)
+
+ + Left shift a number. + + +

Parameters

+
    + +
  • + oper: number +
  • + +
  • + shift: bits to shift +
  • + +
+ + + + + + +

Return value:

+number + + + +
+ + + + +
rshift (oper, shift)
+
+ + Right shift a number. + + +

Parameters

+
    + +
  • + oper: number +
  • + +
  • + shift: bits to shift +
  • + +
+ + + + + + +

Return value:

+number + + + +
+ + + + +
set (bitfield, flag1, ...)
+
+ + Sets one or more flags of a bitfield. + + +

Parameters

+
    + +
  • + bitfield: Bitfield +
  • + +
  • + flag1: First Flag +
  • + +
  • + ...: More Flags +
  • + +
+ + + + + + +

Return value:

+altered bitfield + + + +
+ + + + +
unset (bitfield, flag1, ...)
+
+ + Unsets one or more flags of a bitfield. + + +

Parameters

+
    + +
  • + bitfield: Bitfield +
  • + +
  • + flag1: First Flag +
  • + +
  • + ...: More Flags +
  • + +
+ + + + + + +

Return value:

+altered bitfield + + + +
+ + +
+ + + + + +
+ +
+ +
+

Valid XHTML 1.0!

+
+ +
+ + diff --git a/documentation/api/modules/nixio.crypto.html b/documentation/api/modules/nixio.crypto.html new file mode 100644 index 000000000..79a74584d --- /dev/null +++ b/documentation/api/modules/nixio.crypto.html @@ -0,0 +1,319 @@ + + + + Reference + + + + + +
+ +
+ +
+
+
+ +
+ + + +
+ +

Class nixio.crypto

+ +

+ Cryptographical library.

+ + + + + + + +

Functions

+ + + + + + + + + + + + +
hash (algo) + Create a hash object.
hmac (algo, key) + Create a HMAC object.
+ + + + + + +
+
+ + +

Functions

+
+ + + +
hash (algo)
+
+ + Create a hash object. + + +

Parameters

+
    + +
  • + algo: Algorithm ["sha1", "md5"] +
  • + +
+ + + + + + +

Return value:

+CryptoHash Object + + + +
+ + + + +
hmac (algo, key)
+
+ + Create a HMAC object. + + +

Parameters

+
    + +
  • + algo: Algorithm ["sha1", "md5"] +
  • + +
  • + key: HMAC-Key +
  • + +
+ + + + + + +

Return value:

+CryptoHash Object + + + +
+ + +
+ + + + + +
+ +
+ +
+

Valid XHTML 1.0!

+
+ +
+ + diff --git a/documentation/api/modules/nixio.fs.html b/documentation/api/modules/nixio.fs.html new file mode 100644 index 000000000..d4fda2c51 --- /dev/null +++ b/documentation/api/modules/nixio.fs.html @@ -0,0 +1,1562 @@ + + + + Reference + + + + + +
+ +
+ +
+
+
+ +
+ + + +
+ +

Class nixio.fs

+ +

+ Low-level and high-level filesystem manipulation library.

+ + + + + + + +

Functions

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
access (path, mode1, ...) + Check user's permission on a file.
basename (path) + Strip the directory part from a path.
chmod (path, mode) + Change the file mode.
chown (path, user, group) + (POSIX) Change owner and group of a file.
copy (src, dest) + Copy a file, directory or symlink non-recursively preserving file mode, + timestamps, owner and group.
copyr (src, dest) + Copy a file, directory or symlink recursively preserving file mode, + timestamps, owner and group.
datacopy (src, dest, limit) + Copy data between files.
dir (path) + Iterate over the entries of a directory.
dirname (path) + Strip the base from a path.
glob (pattern) + (POSIX) Find pathnames matching a pattern.
lchown (path, user, group) + (POSIX) Change owner and group of a file and do not resolve + if target is a symlink.
link (oldpath, newpath) + Create a hard link.
lstat (path, field) + Get file status and attributes and do not resolve if target is a symlink.
mkdir (path, mode) + Create a new directory.
mkdirr (dest, mode) + Create a directory and all needed parent directories recursively.
mkfifo (path, mode) + (POSIX) Create a FIFO (named pipe).
move (src, dest) + Rename a file, directory or symlink non-recursively across filesystems.
mover (src, dest) + Rename a file, directory or symlink recursively across filesystems.
readfile (path, limit) + Read the contents of a file into a buffer.
readlink (path) + (POSIX) Read the target of a symbolic link.
realpath (path) + Return the cannonicalized absolute pathname.
remove (path) + Remove a file or directory.
rename (src, dest) + Renames a file or directory.
rmdir (path) + Remove an empty directory.
stat (path, field) + Get file status and attributes.
statvfs (path) + (POSIX) Get filesystem statistics.
symlink (oldpath, newpath) + (POSIX) Create a symbolic link.
unlink (path) + Delete a name and - if no links are left - the associated file.
utimes (path, actime, mtime) + Change file last access and last modification time.
writefile (path, data) + Write a buffer into a file truncating the file first.
+ + + + + + +
+
+ + +

Functions

+
+ + + +
access (path, mode1, ...)
+
+ + Check user's permission on a file. + + +

Parameters

+
    + +
  • + path: Path +
  • + +
  • + mode1: First Mode to check ["f", "r", "w", "x"] +
  • + +
  • + ...: More Modes to check [-"-] +
  • + +
+ + + + + + +

Return value:

+true + + + +
+ + + + +
basename (path)
+
+ + Strip the directory part from a path. + + +

Parameters

+
    + +
  • + path: Path +
  • + +
+ + + + +

Usage:

+This function cannot fail and will never return nil. + + + +

Return value:

+basename + + + +
+ + + + +
chmod (path, mode)
+
+ + Change the file mode. + + +

Parameters

+
    + +
  • + path: Path +
  • + +
  • + mode: File mode + [decimal mode number, "[-r][-w][-xsS][-r][-w][-xsS][-r][-w][-xtT]"] +
  • + +
+ + + + +

Usage

+
    + +
  • Windows only supports setting the write-protection through the + "Writable to others" bit. + +
  • Notice: The mode-flag for the functions + open, mkdir, mkfifo are affected by the umask. + +
+ + + +

Return value:

+true + + + +

See also:

+ + +
+ + + + +
chown (path, user, group)
+
+ + (POSIX) Change owner and group of a file. + + +

Parameters

+
    + +
  • + path: Path +
  • + +
  • + user: User ID or Username (optional) +
  • + +
  • + group: Group ID or Groupname (optional) +
  • + +
+ + + + + + +

Return value:

+true + + + +
+ + + + +
copy (src, dest)
+
+ + Copy a file, directory or symlink non-recursively preserving file mode, + timestamps, owner and group. + + +

Parameters

+
    + +
  • + src: Source path +
  • + +
  • + dest: Destination path +
  • + +
+ + + + +

Usage:

+The destination must always be a full destination path e.g. do not + omit the basename even if source and destination basename are equal. + + + +

Return value:

+true + + + +
+ + + + +
copyr (src, dest)
+
+ + Copy a file, directory or symlink recursively preserving file mode, + timestamps, owner and group. + + +

Parameters

+
    + +
  • + src: Source path +
  • + +
  • + dest: Destination path +
  • + +
+ + + + +

Usage:

+The destination must always be a full destination path e.g. do not + omit the basename even if source and destination basename are equal. + + + +

Return value:

+true + + + +
+ + + + +
datacopy (src, dest, limit)
+
+ + Copy data between files. + + +

Parameters

+
    + +
  • + src: Source file path +
  • + +
  • + dest: Destination file path +
  • + +
  • + limit: Maximum bytes to copy (optional) +
  • + +
+ + + + + + +

Return value:

+true + + + +
+ + + + +
dir (path)
+
+ + Iterate over the entries of a directory. + + +

Parameters

+
    + +
  • + path: Path +
  • + +
+ + + + +

Usage:

+The special entries "." and ".." are omitted. + + + +

Return value:

+directory iterator returning one entry per call + + + +
+ + + + +
dirname (path)
+
+ + Strip the base from a path. + + +

Parameters

+
    + +
  • + path: Path +
  • + +
+ + + + +

Usage:

+This function cannot fail and will never return nil. + + + +

Return value:

+dirname + + + +
+ + + + +
glob (pattern)
+
+ + (POSIX) Find pathnames matching a pattern. + + +

Parameters

+
    + +
  • + pattern: Pattern +
  • + +
+ + + + + + +

Return values:

+
    + +
  1. path iterator + +
  2. number of matches + +
+ + + +
+ + + + +
lchown (path, user, group)
+
+ + (POSIX) Change owner and group of a file and do not resolve + if target is a symlink. + + +

Parameters

+
    + +
  • + path: Path +
  • + +
  • + user: User ID or Username (optional) +
  • + +
  • + group: Group ID or Groupname (optional) +
  • + +
+ + + + + + +

Return value:

+true + + + +
+ + + + +
link (oldpath, newpath)
+
+ + Create a hard link. + + +

Parameters

+
    + +
  • + oldpath: Path +
  • + +
  • + newpath: Path +
  • + +
+ + + + +

Usage:

+This function calls link() on POSIX and CreateHardLink() on Windows. + + + +

Return value:

+true + + + +
+ + + + +
lstat (path, field)
+
+ + Get file status and attributes and do not resolve if target is a symlink. + + +

Parameters

+
    + +
  • + path: Path +
  • + +
  • + field: Only return a specific field, not the whole table (optional) +
  • + +
+ + + + + + +

Return value:

+Table containing attributes (see stat for a detailed description) + + + +

See also:

+ + +
+ + + + +
mkdir (path, mode)
+
+ + Create a new directory. + + +

Parameters

+
    + +
  • + path: Path +
  • + +
  • + mode: File mode (optional, see chmod and umask) +
  • + +
+ + + + + + +

Return value:

+true + + + +

See also:

+ + +
+ + + + +
mkdirr (dest, mode)
+
+ + Create a directory and all needed parent directories recursively. + + +

Parameters

+
    + +
  • + dest: Destination path +
  • + +
  • + mode: File mode (optional, see chmod and umask) +
  • + +
+ + + + + + +

Return value:

+true + + + +

See also:

+ + +
+ + + + +
mkfifo (path, mode)
+
+ + (POSIX) Create a FIFO (named pipe). + + +

Parameters

+
    + +
  • + path: Path +
  • + +
  • + mode: File mode (optional, see chmod and umask) +
  • + +
+ + + + + + +

Return value:

+true + + + +

See also:

+ + +
+ + + + +
move (src, dest)
+
+ + Rename a file, directory or symlink non-recursively across filesystems. + + +

Parameters

+
    + +
  • + src: Source path +
  • + +
  • + dest: Destination path +
  • + +
+ + + + +

Usage:

+The destination must always be a full destination path e.g. do not + omit the basename even if source and destination basename are equal. + + + +

Return value:

+true + + + +
+ + + + +
mover (src, dest)
+
+ + Rename a file, directory or symlink recursively across filesystems. + + +

Parameters

+
    + +
  • + src: Source path +
  • + +
  • + dest: Destination path +
  • + +
+ + + + +

Usage:

+The destination must always be a full destination path e.g. do not + omit the basename even if source and destination basename are equal. + + + +

Return value:

+true + + + +
+ + + + +
readfile (path, limit)
+
+ + Read the contents of a file into a buffer. + + +

Parameters

+
    + +
  • + path: Path +
  • + +
  • + limit: Maximum bytes to read (optional) +
  • + +
+ + + + + + +

Return value:

+file contents + + + +
+ + + + +
readlink (path)
+
+ + (POSIX) Read the target of a symbolic link. + + +

Parameters

+
    + +
  • + path: Path +
  • + +
+ + + + + + +

Return value:

+target path + + + +
+ + + + +
realpath (path)
+
+ + Return the cannonicalized absolute pathname. + + +

Parameters

+
    + +
  • + path: Path +
  • + +
+ + + + + + +

Return value:

+absolute path + + + +
+ + + + +
remove (path)
+
+ + Remove a file or directory. + + +

Parameters

+
    + +
  • + path: Path +
  • + +
+ + + + + + +

Return value:

+true + + + +
+ + + + +
rename (src, dest)
+
+ + Renames a file or directory. + + +

Parameters

+
    + +
  • + src: Source path +
  • + +
  • + dest: Destination path +
  • + +
+ + + + +

Usage:

+It is normally not possible to rename files accross fileystems. + + + +

Return value:

+true + + + +
+ + + + +
rmdir (path)
+
+ + Remove an empty directory. + + +

Parameters

+
    + +
  • + path: Path +
  • + +
+ + + + + + +

Return value:

+true + + + +
+ + + + +
stat (path, field)
+
+ + Get file status and attributes. + + +

Parameters

+
    + +
  • + path: Path +
  • + +
  • + field: Only return a specific field, not the whole table (optional) +
  • + +
+ + + + + + +

Return value:

+Table containing:
    +
  • atime = Last access timestamp
  • +
  • blksize = Blocksize (POSIX only)
  • +
  • blocks = Blocks used (POSIX only)
  • +
  • ctime = Creation timestamp
  • +
  • dev = Device ID
  • +
  • gid = Group ID
  • +
  • ino = Inode
  • +
  • modedec = Mode converted into a decimal number
  • +
  • modestr = Mode as string as returned by ls -l
  • +
  • mtime = Last modification timestamp
  • +
  • nlink = Number of links
  • +
  • rdev = Device ID (if special file)
  • +
  • size = Size in bytes
  • +
  • type = ["reg", "dir", "chr", "blk", "fifo", "lnk", "sock"]
  • +
  • uid = User ID
  • +
+ + + +
+ + + + +
statvfs (path)
+
+ + (POSIX) Get filesystem statistics. + + +

Parameters

+
    + +
  • + path: Path to any file within the filesystem. +
  • + +
+ + + + + + +

Return value:

+Table containing:
    +
  • bavail = available blocks
  • +
  • bfree = free blocks
  • +
  • blocks = number of fragments
  • +
  • frsize = fragment size
  • +
  • favail = available inodes
  • +
  • ffree = free inodes
  • +
  • files = inodes
  • +
  • flag = flags
  • +
  • fsid = filesystem ID
  • +
  • namemax = maximum filename length
  • +
+ + + +
+ + + + +
symlink (oldpath, newpath)
+
+ + (POSIX) Create a symbolic link. + + +

Parameters

+
    + +
  • + oldpath: Path +
  • + +
  • + newpath: Path +
  • + +
+ + + + + + +

Return value:

+true + + + +
+ + + + +
unlink (path)
+
+ + Delete a name and - if no links are left - the associated file. + + +

Parameters

+
    + +
  • + path: Path +
  • + +
+ + + + + + +

Return value:

+true + + + +
+ + + + +
utimes (path, actime, mtime)
+
+ + Change file last access and last modification time. + + +

Parameters

+
    + +
  • + path: Path +
  • + +
  • + actime: Last access timestamp (optional, default: current time) +
  • + +
  • + mtime: Last modification timestamp (optional, default: actime) +
  • + +
+ + + + + + +

Return value:

+true + + + +
+ + + + +
writefile (path, data)
+
+ + Write a buffer into a file truncating the file first. + + +

Parameters

+
    + +
  • + path: Path +
  • + +
  • + data: Data to write +
  • + +
+ + + + + + +

Return value:

+true + + + +
+ + +
+ + + + + +
+ +
+ +
+

Valid XHTML 1.0!

+
+ +
+ + diff --git a/documentation/api/modules/nixio.html b/documentation/api/modules/nixio.html new file mode 100644 index 000000000..f02fe3be5 --- /dev/null +++ b/documentation/api/modules/nixio.html @@ -0,0 +1,2405 @@ + + + + Reference + + + + + +
+ +
+ +
+
+
+ +
+ + + +
+ +

Class nixio

+ +

+ General POSIX IO library.

+ + + + + + + +

Functions

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
bind (host, port, family, socktype) + Create a new socket and bind it to a network address.
chdir (path) + Change the working directory.
closelog () + (POSIX) Close the connection to the system logger.
connect (host, port, family, socktype) + Create a new socket and connect to a network address.
crypt (key, salt) + (POSIX) Encrypt a user password.
dup (oldfd, newfd) + Duplicate a file descriptor.
errno () + Get the last system error code.
exec (executable, ...) + Execute a file to replace the current process.
exece (executable, arguments, environment) + Execute a file with a custom environment to replace the current process.
execp (executable, ...) + Invoke the shell and execute a file to replace the current process.
fork () + (POSIX) Clone the current process.
getaddrinfo (host, family, service) + Look up a hostname and service via DNS.
getcwd () + Get the current working directory.
getenv (variable) + Get the current environment table or a specific environment variable.
getgid () + (POSIX) Get the group id of the current process.
getgr (group) + (POSIX) Get all or a specific user group.
getifaddrs () + (Linux, BSD) Get a list of available network interfaces and their addresses.
getnameinfo (ipaddr) + Reverse look up an IP-Address via DNS.
getpid () + Get the ID of the current process.
getppid () + (POSIX) Get the parent process id of the current process.
getproto (proto) + Get all or a specifc proto entry.
getprotobyname (name) + Get protocol entry by name.
getprotobynumber (proto) + Get protocol entry by number.
getpw (user) + (POSIX) Get all or a specific user account.
getsp (user) + (Linux, Solaris) Get all or a specific shadow password entry.
getuid () + (POSIX) Get the user id of the current process.
kill (target, signal) + (POSIX) Send a signal to one or more processes.
nanosleep (seconds, nanoseconds) + Sleep for a specified amount of time.
nice (nice) + (POSIX) Change priority of current process.
open (path, flags, mode) + Open a file.
open_flags (flag1, ...) + Generate flags for a call to open().
openlog (ident, flag1, ...) + (POSIX) Open a connection to the system logger.
pipe () + Create a pipe.
poll (fds, timeout) + Wait for some event on a file descriptor.
poll_flags (mode1, ...) + Generate events-bitfield or parse revents-bitfield for poll.
sendfile (socket, file, length) + (POSIX) Send data from a file to a socket in kernel-space.
setenv (variable, value) + Set or unset a environment variable.
setgid (gid) + (POSIX) Set the group id of the current process.
setlogmask (priority) + (POSIX) Set the logmask of the system logger for current process.
setsid () + (POSIX) Create a new session and set the process group ID.
setuid (gid) + (POSIX) Set the user id of the current process.
signal (signal, handler) + Ignore or use set the default handler for a signal.
socket (domain, type) + Create a new socket.
splice (fdin, fdout, length, flags) + (Linux) Send data from / to a pipe in kernel-space.
splice_flags (flag1, ...) + (Linux) Generate a flag bitfield for a call to splice.
strerror (errno) + Get the error message for the corresponding error code.
sysinfo () + (Linux) Get overall system statistics.
syslog (priority) + (POSIX) Write a message to the system logger.
times () + (POSIX) Get process times.
tls (mode) + Create a new TLS context.
umask (mask) + Sets the file mode creation mask.
uname () + (POSIX) Get information about current system and kernel.
waitpid (pid, flag1, ...) + (POSIX) Wait for a process to change state.
+ + + + + + +
+
+ + +

Functions

+
+ + + +
bind (host, port, family, socktype)
+
+ + Create a new socket and bind it to a network address. + This function is a shortcut for calling nixio.socket and then bind() + on the socket object. + + +

Parameters

+
    + +
  • + host: Hostname or IP-Address (optional, default: all addresses) +
  • + +
  • + port: Port or service description +
  • + +
  • + family: Address family ["any", "inet", "inet6"] +
  • + +
  • + socktype: Socket Type ["stream", "dgram"] +
  • + +
+ + + + +

Usage

+
    + +
  • This functions calls getaddrinfo(), socket(), + setsockopt() and bind() but NOT listen(). + +
  • The reuseaddr-option is automatically set before binding. + +
+ + + +

Return value:

+Socket Object + + + +
+ + + + +
chdir (path)
+
+ + Change the working directory. + + +

Parameters

+
    + +
  • + path: New working directory +
  • + +
+ + + + + + +

Return value:

+true + + + +
+ + + + +
closelog ()
+
+ + (POSIX) Close the connection to the system logger. + + + + + + + + + +
+ + + + +
connect (host, port, family, socktype)
+
+ + Create a new socket and connect to a network address. + This function is a shortcut for calling nixio.socket and then connect() + on the socket object. + + +

Parameters

+
    + +
  • + host: Hostname or IP-Address (optional, default: localhost) +
  • + +
  • + port: Port or service description +
  • + +
  • + family: Address family ["any", "inet", "inet6"] +
  • + +
  • + socktype: Socket Type ["stream", "dgram"] +
  • + +
+ + + + +

Usage:

+This functions calls getaddrinfo(), socket() and connect(). + + + +

Return value:

+Socket Object + + + +
+ + + + +
crypt (key, salt)
+
+ + (POSIX) Encrypt a user password. + + +

Parameters

+
    + +
  • + key: Key +
  • + +
  • + salt: Salt +
  • + +
+ + + + + + +

Return value:

+password hash + + + +
+ + + + +
dup (oldfd, newfd)
+
+ + Duplicate a file descriptor. + + +

Parameters

+
    + +
  • + oldfd: Old descriptor [File Object, Socket Object (POSIX only)] +
  • + +
  • + newfd: New descriptor to serve as copy (optional) +
  • + +
+ + + + +

Usage:

+This funcation calls dup2() if newfd is set, otherwise dup(). + + + +

Return value:

+File Object of new descriptor + + + +
+ + + + +
errno ()
+
+ + Get the last system error code. + + + + + + + +

Return value:

+Error code + + + +
+ + + + +
exec (executable, ...)
+
+ + Execute a file to replace the current process. + + +

Parameters

+
    + +
  • + executable: Executable +
  • + +
  • + ...: Parameters +
  • + +
+ + + + +

Usage

+
    + +
  • The name of the executable is automatically passed as argv[0] + +
  • This function does not return on success. + +
+ + + + + +
+ + + + +
exece (executable, arguments, environment)
+
+ + Execute a file with a custom environment to replace the current process. + + +

Parameters

+
    + +
  • + executable: Executable +
  • + +
  • + arguments: Argument Table +
  • + +
  • + environment: Environment Table (optional) +
  • + +
+ + + + +

Usage

+
    + +
  • The name of the executable is automatically passed as argv[0] + +
  • This function does not return on success. + +
+ + + + + +
+ + + + +
execp (executable, ...)
+
+ + Invoke the shell and execute a file to replace the current process. + + +

Parameters

+
    + +
  • + executable: Executable +
  • + +
  • + ...: Parameters +
  • + +
+ + + + +

Usage

+
    + +
  • The name of the executable is automatically passed as argv[0] + +
  • This function does not return on success. + +
+ + + + + +
+ + + + +
fork ()
+
+ + (POSIX) Clone the current process. + + + + + + + +

Return value:

+the child process id for the parent process, 0 for the child process + + + +
+ + + + +
getaddrinfo (host, family, service)
+
+ + Look up a hostname and service via DNS. + + +

Parameters

+
    + +
  • + host: hostname to lookup (optional) +
  • + +
  • + family: address family ["any", "inet", "inet6"] +
  • + +
  • + service: service name or port (optional) +
  • + +
+ + + + + + +

Return value:

+Table containing one or more tables containing:
    +
  • family = ["inet", "inet6"]
  • +
  • socktype = ["stream", "dgram", "raw"]
  • +
  • address = Resolved IP-Address
  • +
  • port = Resolved Port (if service was given)
  • +
+ + + +
+ + + + +
getcwd ()
+
+ + Get the current working directory. + + + + + + + +

Return value:

+workign directory + + + +
+ + + + +
getenv (variable)
+
+ + Get the current environment table or a specific environment variable. + + +

Parameters

+
    + +
  • + variable: Variable (optional) +
  • + +
+ + + + + + +

Return value:

+environment table or single environment variable + + + +
+ + + + +
getgid ()
+
+ + (POSIX) Get the group id of the current process. + + + + + + + +

Return value:

+process group id + + + +
+ + + + +
getgr (group)
+
+ + (POSIX) Get all or a specific user group. + + +

Parameters

+
    + +
  • + group: Group ID or groupname (optional) +
  • + +
+ + + + + + +

Return value:

+Table containing:
    +
  • name = Group Name
  • +
  • gid = Group ID
  • +
  • passwd = Password
  • +
  • mem = {Member #1, Member #2, ...}
  • +
+ + + +
+ + + + +
getifaddrs ()
+
+ + (Linux, BSD) Get a list of available network interfaces and their addresses. + + + + + + + +

Return value:

+Table containing one or more tables containing:
    +
  • name = Interface Name
  • +
  • family = ["inet", "inet6", "packet"]
  • +
  • addr = Interface Address (IPv4, IPv6, MAC, ...)
  • +
  • broadaddr = Broadcast Address
  • +
  • dstaddr = Destination Address (Point-to-Point)
  • +
  • netmask = Netmask (if available)
  • +
  • prefix = Prefix (if available)
  • +
  • flags = Table of interface flags (up, multicast, loopback, ...)
  • +
  • data = Statistics (Linux, "packet"-family)
  • +
  • hatype = Hardware Type Identifier (Linix, "packet"-family)
  • +
  • ifindex = Interface Index (Linux, "packet"-family)
  • +
+ + + +
+ + + + +
getnameinfo (ipaddr)
+
+ + Reverse look up an IP-Address via DNS. + + +

Parameters

+
    + +
  • + ipaddr: IPv4 or IPv6-Address +
  • + +
+ + + + + + +

Return value:

+FQDN + + + +
+ + + + +
getpid ()
+
+ + Get the ID of the current process. + + + + + + + +

Return value:

+process id + + + +
+ + + + +
getppid ()
+
+ + (POSIX) Get the parent process id of the current process. + + + + + + + +

Return value:

+parent process id + + + +
+ + + + +
getproto (proto)
+
+ + Get all or a specifc proto entry. + + +

Parameters

+
    + +
  • + proto: protocol number or name to lookup (optional) +
  • + +
+ + + + + + +

Return value:

+Table (or if no parameter is given, a table of tables) + containing the following fields:
    +
  • name = Protocol Name
  • +
  • proto = Protocol Number
  • +
  • aliases = Table of alias names
  • +
+ + + +
+ + + + +
getprotobyname (name)
+
+ + Get protocol entry by name. + + +

Parameters

+
    + +
  • + name: protocol name to lookup +
  • + +
+ + + + +

Usage:

+This function returns nil if the given protocol is unknown. + + + +

Return value:

+Table containing the following fields:
    +
  • name = Protocol Name
  • +
  • proto = Protocol Number
  • +
  • aliases = Table of alias names
  • +
+ + + +
+ + + + +
getprotobynumber (proto)
+
+ + Get protocol entry by number. + + +

Parameters

+
    + +
  • + proto: protocol number to lookup +
  • + +
+ + + + +

Usage:

+This function returns nil if the given protocol is unknown. + + + +

Return value:

+Table containing the following fields:
    +
  • name = Protocol Name
  • +
  • proto = Protocol Number
  • +
  • aliases = Table of alias names
  • +
+ + + +
+ + + + +
getpw (user)
+
+ + (POSIX) Get all or a specific user account. + + +

Parameters

+
    + +
  • + user: User ID or username (optional) +
  • + +
+ + + + + + +

Return value:

+Table containing:
    +
  • name = Name
  • +
  • uid = ID
  • +
  • gid = Group ID
  • +
  • passwd = Password
  • +
  • dir = Home directory
  • +
  • gecos = Information
  • +
  • shell = Shell
  • +
+ + + +
+ + + + +
getsp (user)
+
+ + (Linux, Solaris) Get all or a specific shadow password entry. + + +

Parameters

+
    + +
  • + user: username (optional) +
  • + +
+ + + + + + +

Return value:

+Table containing:
    +
  • namp = Name
  • +
  • expire = Expiration Date
  • +
  • flag = Flags
  • +
  • inact = Inactivity Date
  • +
  • lstchg = Last change
  • +
  • max = Maximum
  • +
  • min = Minimum
  • +
  • warn = Warning
  • +
  • pwdp = Password Hash
  • +
+ + + +
+ + + + +
getuid ()
+
+ + (POSIX) Get the user id of the current process. + + + + + + + +

Return value:

+process user id + + + +
+ + + + +
kill (target, signal)
+
+ + (POSIX) Send a signal to one or more processes. + + +

Parameters

+
    + +
  • + target: Target process of process group. +
  • + +
  • + signal: Signal to send +
  • + +
+ + + + + + +

Return value:

+true + + + +
+ + + + +
nanosleep (seconds, nanoseconds)
+
+ + Sleep for a specified amount of time. + + +

Parameters

+
    + +
  • + seconds: Seconds to wait (optional) +
  • + +
  • + nanoseconds: Nanoseconds to wait (optional) +
  • + +
+ + + + +

Usage

+
    + +
  • Not all systems support nanosecond precision but you can expect + to have at least maillisecond precision. + +
  • This function is not signal-protected and may fail with EINTR. + +
+ + + +

Return value:

+true + + + +
+ + + + +
nice (nice)
+
+ + (POSIX) Change priority of current process. + + +

Parameters

+
    + +
  • + nice: Nice Value +
  • + +
+ + + + + + +

Return value:

+true + + + +
+ + + + +
open (path, flags, mode)
+
+ + Open a file. + + +

Parameters

+
    + +
  • + path: Filesystem path to open +
  • + +
  • + flags: Flag string or number (see open_flags). + ["r", "r+", "w", "w+", "a", "a+"] +
  • + +
  • + mode: File mode for newly created files (see chmod, umask). +
  • + +
+ + + + +

Usage:

+Although this function also supports the traditional fopen() + file flags it does not create a file stream but uses the open() syscall. + + + +

Return value:

+File Object + + + +

See also:

+ + +
+ + + + +
open_flags (flag1, ...)
+
+ + Generate flags for a call to open(). + + +

Parameters

+
    + +
  • + flag1: First Flag ["append", "creat", "excl", "nonblock", "ndelay", + "sync", "trunc", "rdonly", "wronly", "rdwr"] +
  • + +
  • + ...: More Flags [-"-] +
  • + +
+ + + + +

Usage

+
    + +
  • This function cannot fail and will never return nil. + +
  • The "nonblock" and "ndelay" flags are aliases. + +
  • The "nonblock", "ndelay" and "sync" flags are no-ops on Windows. + +
+ + + +

Return value:

+flag to be used as second paramter to open + + + +
+ + + + +
openlog (ident, flag1, ...)
+
+ + (POSIX) Open a connection to the system logger. + + +

Parameters

+
    + +
  • + ident: Identifier +
  • + +
  • + flag1: Flag 1 ["cons", "nowait", "pid", "perror", "ndelay", "odelay"] +
  • + +
  • + ...: More flags [-"-] +
  • + +
+ + + + + + + + +
+ + + + +
pipe ()
+
+ + Create a pipe. + + + + + + + +

Return values:

+
    + +
  1. File Object of the read end + +
  2. File Object of the write end + +
+ + + +
+ + + + +
poll (fds, timeout)
+
+ + Wait for some event on a file descriptor. + poll() sets the revents-field of the tables provided by fds to a bitfield + indicating the events that occured. + + +

Parameters

+
    + +
  • + fds: Table containing one or more tables containing
      +
    • fd = I/O Descriptor [Socket Object, File Object (POSIX)]
    • +
    • events = events to wait for (bitfield generated with poll_flags)
    • +
    +
  • + +
  • + timeout: Timeout in milliseconds +
  • + +
+ + + + +

Usage

+
    + +
  • This function works in-place on the provided table and only + writes the revents field, you can use other fields on your demand. + +
  • All metamethods on the tables provided as fds are ignored. + +
  • The revents-fields are not reset when the call times out. + You have to check the first return value to be 0 to handle this case. + +
  • If you want to wait on a TLS-Socket you have to use the underlying + socket instead. + +
  • On Windows poll is emulated through select(), can only be used + on socket descriptors and cannot take more than 64 descriptors per call. + +
  • This function is not signal-protected and may fail with EINTR. + +
+ + + +

Return values:

+
    + +
  1. number of ready IO descriptors + +
  2. the fds-table with revents-fields set + +
+ + + +

See also:

+ + +
+ + + + +
poll_flags (mode1, ...)
+
+ + Generate events-bitfield or parse revents-bitfield for poll. + + +

Parameters

+
    + +
  • + mode1: revents-Flag bitfield returned from poll to parse OR + ["in", "out", "err", "pri" (POSIX), "hup" (POSIX), "nval" (POSIX)] +
  • + +
  • + ...: More mode strings for generating the flag [-"-] +
  • + +
+ + + + + + +

Return value:

+table with boolean fields reflecting the mode parameter + OR bitfield to use for the events-Flag field + + + +

See also:

+ + +
+ + + + +
sendfile (socket, file, length)
+
+ + (POSIX) Send data from a file to a socket in kernel-space. + + +

Parameters

+
    + +
  • + socket: Socket Object +
  • + +
  • + file: File Object +
  • + +
  • + length: Amount of data to send (in Bytes). +
  • + +
+ + + + + + +

Return value:

+bytes sent + + + +
+ + + + +
setenv (variable, value)
+
+ + Set or unset a environment variable. + + +

Parameters

+
    + +
  • + variable: Variable +
  • + +
  • + value: Value (optional) +
  • + +
+ + + + +

Usage:

+The environment variable will be unset if value is ommited. + + + +

Return value:

+true + + + +
+ + + + +
setgid (gid)
+
+ + (POSIX) Set the group id of the current process. + + +

Parameters

+
    + +
  • + gid: New Group ID +
  • + +
+ + + + + + +

Return value:

+true + + + +
+ + + + +
setlogmask (priority)
+
+ + (POSIX) Set the logmask of the system logger for current process. + + +

Parameters

+
    + +
  • + priority: Priority ["emerg", "alert", "crit", "err", "warning", + "notice", "info", "debug"] +
  • + +
+ + + + + + + + +
+ + + + +
setsid ()
+
+ + (POSIX) Create a new session and set the process group ID. + + + + + + + +

Return value:

+session id + + + +
+ + + + +
setuid (gid)
+
+ + (POSIX) Set the user id of the current process. + + +

Parameters

+
    + +
  • + gid: New User ID +
  • + +
+ + + + + + +

Return value:

+true + + + +
+ + + + +
signal (signal, handler)
+
+ + Ignore or use set the default handler for a signal. + + +

Parameters

+
    + +
  • + signal: Signal +
  • + +
  • + handler: ["ign", "dfl"] +
  • + +
+ + + + + + +

Return value:

+true + + + +
+ + + + +
socket (domain, type)
+
+ + Create a new socket. + + +

Parameters

+
    + +
  • + domain: Domain ["inet", "inet6", "unix"] +
  • + +
  • + type: Type ["stream", "dgram", "raw"] +
  • + +
+ + + + + + +

Return value:

+Socket Object + + + +
+ + + + +
splice (fdin, fdout, length, flags)
+
+ + (Linux) Send data from / to a pipe in kernel-space. + + +

Parameters

+
    + +
  • + fdin: Input I/O descriptor +
  • + +
  • + fdout: Output I/O descriptor +
  • + +
  • + length: Amount of data to send (in Bytes). +
  • + +
  • + flags: (optional, bitfield generated by splice_flags) +
  • + +
+ + + + + + +

Return value:

+bytes sent + + + +

See also:

+ + +
+ + + + +
splice_flags (flag1, ...)
+
+ + (Linux) Generate a flag bitfield for a call to splice. + + +

Parameters

+
    + +
  • + flag1: First Flag ["move", "nonblock", "more"] +
  • + +
  • + ...: More flags [-"-] +
  • + +
+ + + + + + +

Return value:

+Flag bitfield + + + +

See also:

+ + +
+ + + + +
strerror (errno)
+
+ + Get the error message for the corresponding error code. + + +

Parameters

+
    + +
  • + errno: System error code +
  • + +
+ + + + + + +

Return value:

+Error message + + + +
+ + + + +
sysinfo ()
+
+ + (Linux) Get overall system statistics. + + + + + + + +

Return value:

+Table containing:
    +
  • uptime = system uptime in seconds
  • +
  • loads = {loadavg1, loadavg5, loadavg15}
  • +
  • totalram = total RAM
  • +
  • freeram = free RAM
  • +
  • sharedram = shared RAM
  • +
  • bufferram = buffered RAM
  • +
  • totalswap = total SWAP
  • +
  • freeswap = free SWAP
  • +
  • procs = number of running processes
  • +
+ + + +
+ + + + +
syslog (priority)
+
+ + (POSIX) Write a message to the system logger. + + +

Parameters

+
    + +
  • + priority: Priority ["emerg", "alert", "crit", "err", "warning", + "notice", "info", "debug"] +
  • + +
+ + + + + + + + +
+ + + + +
times ()
+
+ + (POSIX) Get process times. + + + + + + + +

Return value:

+Table containing:
    +
  • utime = user time
  • +
  • utime = system time
  • +
  • cutime = children user time
  • +
  • cstime = children system time
  • +
+ + + +
+ + + + +
tls (mode)
+
+ + Create a new TLS context. + + +

Parameters

+
    + +
  • + mode: TLS-Mode ["client", "server"] +
  • + +
+ + + + + + +

Return value:

+TLSContext Object + + + +
+ + + + +
umask (mask)
+
+ + Sets the file mode creation mask. + + +

Parameters

+
    + +
  • + mask: New creation mask (see chmod for format specifications) +
  • + +
+ + + + + + +

Return values:

+
    + +
  1. the old umask as decimal mode number + +
  2. the old umask as mode string + +
+ + + +
+ + + + +
uname ()
+
+ + (POSIX) Get information about current system and kernel. + + + + + + + +

Return value:

+Table containing:
    +
  • sysname = operating system
  • +
  • nodename = network name (usually hostname)
  • +
  • release = OS release
  • +
  • version = OS version
  • +
  • machine = hardware identifier
  • +
+ + + +
+ + + + +
waitpid (pid, flag1, ...)
+
+ + (POSIX) Wait for a process to change state. + + +

Parameters

+
    + +
  • + pid: Process ID (optional, default: any childprocess) +
  • + +
  • + flag1: Flag (optional) ["nohang", "untraced", "continued"] +
  • + +
  • + ...: More Flags [-"-] +
  • + +
+ + + + +

Usage:

+If the "nohang" is given this function becomes non-blocking. + + + +

Return values:

+
    + +
  1. process id of child or 0 if no child has changed state + +
  2. ["exited", "signaled", "stopped"] + +
  3. [exit code, terminate signal, stop signal] + +
+ + + +
+ + +
+ + + + + +
+ +
+ +
+

Valid XHTML 1.0!

+
+ +
+ + diff --git a/documentation/i18n.md b/documentation/i18n.md new file mode 100644 index 000000000..fdacb0853 --- /dev/null +++ b/documentation/i18n.md @@ -0,0 +1,17 @@ +# General +Translations are saved in the folder po/. You find the reference in po/templates/.pot. The actual translation files can be found at po//.po . + +In order to use the commands below you need to have the _gettext'' utilities (''msgcat'', ''msgfmt'', ''msgmerge_) installed on your system. + +# Rebuild po files +If you want to rebuild the translations after you made changes to a package this is an easy way: + + + ./build/i18n-scan.pl applications/[package] > po/templates/[application].pot + ./build/i18n-update.pl po [application].po + +*Note:* Some packages share translation files, in this case you need to scan through all their folders. The first command from above should then be: + + + ./build/i18n-scan.pl applications/[package-1] applications/[package-2] applications/[package-n] > po/templates/[application].pot + diff --git a/libs/luci-lib-ip/src/ip.luadoc b/libs/luci-lib-ip/src/ip.luadoc index 00738832c..e32ae72f4 100644 --- a/libs/luci-lib-ip/src/ip.luadoc +++ b/libs/luci-lib-ip/src/ip.luadoc @@ -42,10 +42,10 @@ if the given optional netmask is of a different family. containing a prefix size between `0` and `32` bit. Overrides mask embedded in the first argument if specified. (optional) @return A `luci.ip.cidr` object representing the given IPv4 range. -@usage `addr = luci.ip.new("10.24.0.1/24") -addr = luci.ip.new("10.24.0.1/255.255.255.0") -addr = luci.ip.new("10.24.0.1", "255.255.255.0") -- separate netmask -addr = luci.ip.new("10.24.0.1/24", 16) -- override netmask` +@usage `addr = luci.ip.IPv4("10.24.0.1/24") +addr = luci.ip.IPv4("10.24.0.1/255.255.255.0") +addr = luci.ip.IPv4("10.24.0.1", "255.255.255.0") -- separate netmask +addr = luci.ip.IPv4("10.24.0.1/24", 16) -- override netmask` @see IPv6 ]] @@ -62,10 +62,10 @@ if the given optional netmask is of a different family. containing a prefix size between `0` and `128` bit. Overrides mask embedded in the first argument if specified. (optional) @return A `luci.ip.cidr` object representing the given IPv6 range. -@usage `addr6 = luci.ip.new("fe80::221:63ff:fe75:aa17/64") -addr6 = luci.ip.new("fe80::221:63ff:fe75:aa17/ffff:ffff:ffff:ffff::") -addr6 = luci.ip.new("fe80::221:63ff:fe75:aa17", "ffff:ffff:ffff:ffff::") -addr6 = luci.ip.new("fe80::221:63ff:fe75:aa17/64", 128) -- override netmask` +@usage `addr6 = luci.ip.IPv6("fe80::221:63ff:fe75:aa17/64") +addr6 = luci.ip.IPv6("fe80::221:63ff:fe75:aa17/ffff:ffff:ffff:ffff::") +addr6 = luci.ip.IPv6("fe80::221:63ff:fe75:aa17", "ffff:ffff:ffff:ffff::") +addr6 = luci.ip.IPv6("fe80::221:63ff:fe75:aa17/64", 128) -- override netmask` @see IPv4 ]] diff --git a/libs/luci-lib-json/luasrc/json.lua b/libs/luci-lib-json/luasrc/json.lua index 416b25faa..f7b57f916 100644 --- a/libs/luci-lib-json/luasrc/json.lua +++ b/libs/luci-lib-json/luasrc/json.lua @@ -149,11 +149,13 @@ function Encoder.parse_iter(self, obj) local first = true for key, entry in pairs(obj) do - first = first or self:put(",") - first = first and false - self:parse_string(tostring(key)) - self:put(":") - self:dispatch(entry) + if key ~= null then + first = first or self:put(",") + first = first and false + self:parse_string(tostring(key)) + self:put(":") + self:dispatch(entry) + end end self:put("}") diff --git a/libs/luci-lib-json/luasrc/json.luadoc b/libs/luci-lib-json/luasrc/json.luadoc index d48dba13b..37f97d25f 100644 --- a/libs/luci-lib-json/luasrc/json.luadoc +++ b/libs/luci-lib-json/luasrc/json.luadoc @@ -2,8 +2,8 @@ LuCI JSON-Library @cstyle instance -module "luci.json" ]] +module "luci.json" ---[[ Directly decode a JSON string diff --git a/libs/luci-lib-jsonc/src/jsonc.c b/libs/luci-lib-jsonc/src/jsonc.c index 49cb21f5b..b857c979e 100644 --- a/libs/luci-lib-jsonc/src/jsonc.c +++ b/libs/luci-lib-jsonc/src/jsonc.c @@ -106,6 +106,7 @@ static int json_stringify(lua_State *L) flags |= JSON_C_TO_STRING_PRETTY | JSON_C_TO_STRING_SPACED; lua_pushstring(L, json_object_to_json_string_ext(obj, flags)); + json_object_put(obj); return 1; } @@ -222,7 +223,7 @@ static int _lua_test_array(lua_State *L, int index) out: lua_pop(L, 2); - return 0; + return -1; } /* check for holes */ @@ -254,7 +255,7 @@ static struct json_object * _lua_to_json(lua_State *L, int index) case LUA_TTABLE: max = _lua_test_array(L, index); - if (max > 0) + if (max >= 0) { obj = json_object_new_array(); @@ -286,8 +287,9 @@ static struct json_object * _lua_to_json(lua_State *L, int index) lua_pushvalue(L, -2); key = lua_tostring(L, -1); - json_object_object_add(obj, key, - _lua_to_json(L, lua_gettop(L) - 1)); + if (key) + json_object_object_add(obj, key, + _lua_to_json(L, lua_gettop(L) - 1)); lua_pop(L, 2); } diff --git a/libs/luci-lib-nixio/src/address.c b/libs/luci-lib-nixio/src/address.c index 4fd557d6a..8ab4fa89c 100644 --- a/libs/luci-lib-nixio/src/address.c +++ b/libs/luci-lib-nixio/src/address.c @@ -331,7 +331,9 @@ static int nixio_getnameinfo(lua_State *L) { nixio__addr_write(&addr, (struct sockaddr *)&saddr); - int res = getnameinfo((struct sockaddr *)&saddr, sizeof(saddr), + int res = getnameinfo((struct sockaddr *)&saddr, + (saddr.ss_family == AF_INET) + ? sizeof(struct sockaddr_in) : sizeof(struct sockaddr_in6), host, sizeof(host), NULL, 0, NI_NAMEREQD); #ifdef __linux__ diff --git a/libs/luci-lib-rpcc/luasrc/rpcc.luadoc b/libs/luci-lib-rpcc/luasrc/rpcc.luadoc index 8c90ab524..5609bfd75 100644 --- a/libs/luci-lib-rpcc/luasrc/rpcc.luadoc +++ b/libs/luci-lib-rpcc/luasrc/rpcc.luadoc @@ -2,8 +2,8 @@ LuCI RPC Client. @cstyle instance -module "luci.rpcc" ]] +module "luci.rpcc" ---[[ Create a new JSON-RPC stream client. diff --git a/libs/luci-lib-rpcc/luasrc/rpcc/ruci.luadoc b/libs/luci-lib-rpcc/luasrc/rpcc/ruci.luadoc index 980ef46d9..9c842c565 100644 --- a/libs/luci-lib-rpcc/luasrc/rpcc/ruci.luadoc +++ b/libs/luci-lib-rpcc/luasrc/rpcc/ruci.luadoc @@ -2,8 +2,8 @@ Transparent UCI over RPC client. @cstyle instance -module "luci.rpcc.ruci" ]] +module "luci.rpcc.ruci" ---[[ Create a new UCI over RPC proxy. diff --git a/luci.mk b/luci.mk index d77c09e22..1e56edde5 100644 --- a/luci.mk +++ b/luci.mk @@ -30,7 +30,7 @@ LUCI_LANG.pt-br=Português do Brasil (Brazialian Portuguese) LUCI_LANG.pt=Português (Portuguese) LUCI_LANG.ro=Română (Romanian) LUCI_LANG.ru=Русский (Russian) -LUCI_LANG.sk=Slovenčina (Slovene) +LUCI_LANG.sk=Slovenčina (Slovak) LUCI_LANG.sv=Svenska (Swedish) LUCI_LANG.tr=Türkçe (Turkish) LUCI_LANG.uk=украї́нська (Ukrainian) diff --git a/modules/luci-base/Makefile b/modules/luci-base/Makefile index 80bbda107..54506b023 100644 --- a/modules/luci-base/Makefile +++ b/modules/luci-base/Makefile @@ -12,7 +12,7 @@ LUCI_TYPE:=mod LUCI_BASENAME:=base LUCI_TITLE:=LuCI core libraries -LUCI_DEPENDS:=+lua +libuci-lua +luci-lib-nixio +luci-lib-ip +rpcd +LUCI_DEPENDS:=+lua +libuci-lua +luci-lib-nixio +luci-lib-ip +rpcd +libubus-lua PKG_SOURCE:=LuaSrcDiet-0.12.1.tar.bz2 PKG_SOURCE_URL:=https://luasrcdiet.googlecode.com/files diff --git a/modules/luci-base/htdocs/luci-static/resources/cbi/edit.gif b/modules/luci-base/htdocs/luci-static/resources/cbi/edit.gif index 7b02b6e72..e06e37c75 100644 Binary files a/modules/luci-base/htdocs/luci-static/resources/cbi/edit.gif and b/modules/luci-base/htdocs/luci-static/resources/cbi/edit.gif differ diff --git a/modules/luci-base/htdocs/luci-static/resources/cbi/fieldadd.gif b/modules/luci-base/htdocs/luci-static/resources/cbi/fieldadd.gif index 431ff64d1..eebe0fffe 100644 Binary files a/modules/luci-base/htdocs/luci-static/resources/cbi/fieldadd.gif and b/modules/luci-base/htdocs/luci-static/resources/cbi/fieldadd.gif differ diff --git a/modules/luci-base/htdocs/luci-static/resources/cbi/file.gif b/modules/luci-base/htdocs/luci-static/resources/cbi/file.gif index 3b1217dd6..342a8463d 100644 Binary files a/modules/luci-base/htdocs/luci-static/resources/cbi/file.gif and b/modules/luci-base/htdocs/luci-static/resources/cbi/file.gif differ diff --git a/modules/luci-base/htdocs/luci-static/resources/icons/bridge.png b/modules/luci-base/htdocs/luci-static/resources/icons/bridge.png index 4c163bf69..7faadecf9 100644 Binary files a/modules/luci-base/htdocs/luci-static/resources/icons/bridge.png and b/modules/luci-base/htdocs/luci-static/resources/icons/bridge.png differ diff --git a/modules/luci-base/htdocs/luci-static/resources/icons/bridge_disabled.png b/modules/luci-base/htdocs/luci-static/resources/icons/bridge_disabled.png index 0f367c536..b3e620b3a 100644 Binary files a/modules/luci-base/htdocs/luci-static/resources/icons/bridge_disabled.png and b/modules/luci-base/htdocs/luci-static/resources/icons/bridge_disabled.png differ diff --git a/modules/luci-base/htdocs/luci-static/resources/icons/encryption.png b/modules/luci-base/htdocs/luci-static/resources/icons/encryption.png index 41d2ba9ac..776283360 100644 Binary files a/modules/luci-base/htdocs/luci-static/resources/icons/encryption.png and b/modules/luci-base/htdocs/luci-static/resources/icons/encryption.png differ diff --git a/modules/luci-base/htdocs/luci-static/resources/icons/encryption_disabled.png b/modules/luci-base/htdocs/luci-static/resources/icons/encryption_disabled.png index f2e05a425..9a8721b02 100644 Binary files a/modules/luci-base/htdocs/luci-static/resources/icons/encryption_disabled.png and b/modules/luci-base/htdocs/luci-static/resources/icons/encryption_disabled.png differ diff --git a/modules/luci-base/htdocs/luci-static/resources/icons/ethernet.png b/modules/luci-base/htdocs/luci-static/resources/icons/ethernet.png index a02538124..e3d24f279 100644 Binary files a/modules/luci-base/htdocs/luci-static/resources/icons/ethernet.png and b/modules/luci-base/htdocs/luci-static/resources/icons/ethernet.png differ diff --git a/modules/luci-base/htdocs/luci-static/resources/icons/ethernet_disabled.png b/modules/luci-base/htdocs/luci-static/resources/icons/ethernet_disabled.png index 2bb02e455..d8792df54 100644 Binary files a/modules/luci-base/htdocs/luci-static/resources/icons/ethernet_disabled.png and b/modules/luci-base/htdocs/luci-static/resources/icons/ethernet_disabled.png differ diff --git a/modules/luci-base/htdocs/luci-static/resources/icons/loading.gif b/modules/luci-base/htdocs/luci-static/resources/icons/loading.gif index 5bb90fd6a..715431483 100644 Binary files a/modules/luci-base/htdocs/luci-static/resources/icons/loading.gif and b/modules/luci-base/htdocs/luci-static/resources/icons/loading.gif differ diff --git a/modules/luci-base/htdocs/luci-static/resources/icons/port_down.png b/modules/luci-base/htdocs/luci-static/resources/icons/port_down.png index 25ea17232..5a2b235d0 100644 Binary files a/modules/luci-base/htdocs/luci-static/resources/icons/port_down.png and b/modules/luci-base/htdocs/luci-static/resources/icons/port_down.png differ diff --git a/modules/luci-base/htdocs/luci-static/resources/icons/port_up.png b/modules/luci-base/htdocs/luci-static/resources/icons/port_up.png index e06303791..8105e77d0 100644 Binary files a/modules/luci-base/htdocs/luci-static/resources/icons/port_up.png and b/modules/luci-base/htdocs/luci-static/resources/icons/port_up.png differ diff --git a/modules/luci-base/htdocs/luci-static/resources/icons/signal-0-25.png b/modules/luci-base/htdocs/luci-static/resources/icons/signal-0-25.png index 2e5dff466..b3a8118af 100644 Binary files a/modules/luci-base/htdocs/luci-static/resources/icons/signal-0-25.png and b/modules/luci-base/htdocs/luci-static/resources/icons/signal-0-25.png differ diff --git a/modules/luci-base/htdocs/luci-static/resources/icons/signal-0.png b/modules/luci-base/htdocs/luci-static/resources/icons/signal-0.png index 114583a67..333b1557b 100644 Binary files a/modules/luci-base/htdocs/luci-static/resources/icons/signal-0.png and b/modules/luci-base/htdocs/luci-static/resources/icons/signal-0.png differ diff --git a/modules/luci-base/htdocs/luci-static/resources/icons/signal-25-50.png b/modules/luci-base/htdocs/luci-static/resources/icons/signal-25-50.png index ee8cc4f1c..b465de3f5 100644 Binary files a/modules/luci-base/htdocs/luci-static/resources/icons/signal-25-50.png and b/modules/luci-base/htdocs/luci-static/resources/icons/signal-25-50.png differ diff --git a/modules/luci-base/htdocs/luci-static/resources/icons/signal-50-75.png b/modules/luci-base/htdocs/luci-static/resources/icons/signal-50-75.png index 26bcbf715..cd7bcaf9a 100644 Binary files a/modules/luci-base/htdocs/luci-static/resources/icons/signal-50-75.png and b/modules/luci-base/htdocs/luci-static/resources/icons/signal-50-75.png differ diff --git a/modules/luci-base/htdocs/luci-static/resources/icons/signal-75-100.png b/modules/luci-base/htdocs/luci-static/resources/icons/signal-75-100.png index 5cffaa1b8..f7a3658df 100644 Binary files a/modules/luci-base/htdocs/luci-static/resources/icons/signal-75-100.png and b/modules/luci-base/htdocs/luci-static/resources/icons/signal-75-100.png differ diff --git a/modules/luci-base/htdocs/luci-static/resources/icons/signal-none.png b/modules/luci-base/htdocs/luci-static/resources/icons/signal-none.png index b77585c0f..4a11356af 100644 Binary files a/modules/luci-base/htdocs/luci-static/resources/icons/signal-none.png and b/modules/luci-base/htdocs/luci-static/resources/icons/signal-none.png differ diff --git a/modules/luci-base/htdocs/luci-static/resources/icons/switch.png b/modules/luci-base/htdocs/luci-static/resources/icons/switch.png index 5c99ba568..be99b19ba 100644 Binary files a/modules/luci-base/htdocs/luci-static/resources/icons/switch.png and b/modules/luci-base/htdocs/luci-static/resources/icons/switch.png differ diff --git a/modules/luci-base/htdocs/luci-static/resources/icons/switch_disabled.png b/modules/luci-base/htdocs/luci-static/resources/icons/switch_disabled.png index b8c84c8dc..54588d24d 100644 Binary files a/modules/luci-base/htdocs/luci-static/resources/icons/switch_disabled.png and b/modules/luci-base/htdocs/luci-static/resources/icons/switch_disabled.png differ diff --git a/modules/luci-base/htdocs/luci-static/resources/icons/tunnel.png b/modules/luci-base/htdocs/luci-static/resources/icons/tunnel.png index c5a09dd68..63eabfef5 100644 Binary files a/modules/luci-base/htdocs/luci-static/resources/icons/tunnel.png and b/modules/luci-base/htdocs/luci-static/resources/icons/tunnel.png differ diff --git a/modules/luci-base/htdocs/luci-static/resources/icons/tunnel_disabled.png b/modules/luci-base/htdocs/luci-static/resources/icons/tunnel_disabled.png index ad9856cfe..ca79d8170 100644 Binary files a/modules/luci-base/htdocs/luci-static/resources/icons/tunnel_disabled.png and b/modules/luci-base/htdocs/luci-static/resources/icons/tunnel_disabled.png differ diff --git a/modules/luci-base/htdocs/luci-static/resources/icons/vlan.png b/modules/luci-base/htdocs/luci-static/resources/icons/vlan.png index 5c99ba568..be99b19ba 100644 Binary files a/modules/luci-base/htdocs/luci-static/resources/icons/vlan.png and b/modules/luci-base/htdocs/luci-static/resources/icons/vlan.png differ diff --git a/modules/luci-base/htdocs/luci-static/resources/icons/vlan_disabled.png b/modules/luci-base/htdocs/luci-static/resources/icons/vlan_disabled.png index b8c84c8dc..54588d24d 100644 Binary files a/modules/luci-base/htdocs/luci-static/resources/icons/vlan_disabled.png and b/modules/luci-base/htdocs/luci-static/resources/icons/vlan_disabled.png differ diff --git a/modules/luci-base/htdocs/luci-static/resources/icons/wifi.png b/modules/luci-base/htdocs/luci-static/resources/icons/wifi.png index 528ce2b4e..80a23e8e9 100644 Binary files a/modules/luci-base/htdocs/luci-static/resources/icons/wifi.png and b/modules/luci-base/htdocs/luci-static/resources/icons/wifi.png differ diff --git a/modules/luci-base/htdocs/luci-static/resources/icons/wifi_big.png b/modules/luci-base/htdocs/luci-static/resources/icons/wifi_big.png index d73a5e740..9e466aebf 100644 Binary files a/modules/luci-base/htdocs/luci-static/resources/icons/wifi_big.png and b/modules/luci-base/htdocs/luci-static/resources/icons/wifi_big.png differ diff --git a/modules/luci-base/htdocs/luci-static/resources/icons/wifi_big_disabled.png b/modules/luci-base/htdocs/luci-static/resources/icons/wifi_big_disabled.png index af93b37b7..6f9fff381 100644 Binary files a/modules/luci-base/htdocs/luci-static/resources/icons/wifi_big_disabled.png and b/modules/luci-base/htdocs/luci-static/resources/icons/wifi_big_disabled.png differ diff --git a/modules/luci-base/htdocs/luci-static/resources/icons/wifi_disabled.png b/modules/luci-base/htdocs/luci-static/resources/icons/wifi_disabled.png index 338a34f78..e989a2bd3 100644 Binary files a/modules/luci-base/htdocs/luci-static/resources/icons/wifi_disabled.png and b/modules/luci-base/htdocs/luci-static/resources/icons/wifi_disabled.png differ diff --git a/modules/luci-base/luasrc/cbi.lua b/modules/luci-base/luasrc/cbi.lua index 45c91890a..b5b2c8d8f 100644 --- a/modules/luci-base/luasrc/cbi.lua +++ b/modules/luci-base/luasrc/cbi.lua @@ -367,63 +367,64 @@ end -- Use optimized UCI writing function Map.parse(self, readinput, ...) - self.readinput = (readinput ~= false) - self:_run_hooks("on_parse") - if self:formvalue("cbi.skip") then self.state = FORM_SKIP + elseif not self.save then + self.state = FORM_INVALID + elseif not self:submitstate() then + self.state = FORM_NODATA + end + + -- Back out early to prevent unauthorized changes on the subsequent parse + if self.state ~= nil then return self:state_handler(self.state) end + self.readinput = (readinput ~= false) + self:_run_hooks("on_parse") + Node.parse(self, ...) - if self.save then - self:_run_hooks("on_save", "on_before_save") + self:_run_hooks("on_save", "on_before_save") + for i, config in ipairs(self.parsechain) do + self.uci:save(config) + end + self:_run_hooks("on_after_save") + if (not self.proceed and self.flow.autoapply) or luci.http.formvalue("cbi.apply") then + self:_run_hooks("on_before_commit") for i, config in ipairs(self.parsechain) do - self.uci:save(config) - end - self:_run_hooks("on_after_save") - if self:submitstate() and ((not self.proceed and self.flow.autoapply) or luci.http.formvalue("cbi.apply")) then - self:_run_hooks("on_before_commit") - for i, config in ipairs(self.parsechain) do - self.uci:commit(config) - - -- Refresh data because commit changes section names - self.uci:load(config) - end - self:_run_hooks("on_commit", "on_after_commit", "on_before_apply") - if self.apply_on_parse then - self.uci:apply(self.parsechain) - self:_run_hooks("on_apply", "on_after_apply") - else - -- This is evaluated by the dispatcher and delegated to the - -- template which in turn fires XHR to perform the actual - -- apply actions. - self.apply_needed = true - end - - -- Reparse sections - Node.parse(self, true) + self.uci:commit(config) + -- Refresh data because commit changes section names + self.uci:load(config) end - for i, config in ipairs(self.parsechain) do - self.uci:unload(config) - end - if type(self.commit_handler) == "function" then - self:commit_handler(self:submitstate()) + self:_run_hooks("on_commit", "on_after_commit", "on_before_apply") + if self.apply_on_parse then + self.uci:apply(self.parsechain) + self:_run_hooks("on_apply", "on_after_apply") + else + -- This is evaluated by the dispatcher and delegated to the + -- template which in turn fires XHR to perform the actual + -- apply actions. + self.apply_needed = true end + + -- Reparse sections + Node.parse(self, true) + end + for i, config in ipairs(self.parsechain) do + self.uci:unload(config) + end + if type(self.commit_handler) == "function" then + self:commit_handler(self:submitstate()) end - if self:submitstate() then - if not self.save then - self.state = FORM_INVALID - elseif self.proceed then - self.state = FORM_PROCEED - else - self.state = self.changed and FORM_CHANGED or FORM_VALID - end + if self.proceed then + self.state = FORM_PROCEED + elseif self.changed then + self.state = FORM_CHANGED else - self.state = FORM_NODATA + self.state = FORM_VALID end return self:state_handler(self.state) @@ -1470,6 +1471,7 @@ function Value.__init__(self, ...) self.template = "cbi/value" self.keylist = {} self.vallist = {} + self.readonly = nil end function Value.reset_values(self) @@ -1483,6 +1485,10 @@ function Value.value(self, key, val) table.insert(self.vallist, tostring(val)) end +function Value.parse(self, section, novld) + if self.readonly then return end + AbstractValue.parse(self, section, novld) +end -- DummyValue - This does nothing except being there DummyValue = class(AbstractValue) @@ -1527,26 +1533,39 @@ function Flag.__init__(self, ...) end -- A flag can only have two states: set or unset -function Flag.parse(self, section) +function Flag.parse(self, section, novld) local fexists = self.map:formvalue( FEXIST_PREFIX .. self.config .. "." .. section .. "." .. self.option) if fexists then local fvalue = self:formvalue(section) and self.enabled or self.disabled - if fvalue ~= self.default or (not self.optional and not self.rmempty) then - self:write(section, fvalue) - else + local cvalue = self:cfgvalue(section) + local val_err + fvalue, val_err = self:validate(fvalue, section) + if not fvalue then + if not novld then + self:add_error(section, "invalid", val_err) + end + return + end + if fvalue == self.default and (self.optional or self.rmempty) then self:remove(section) + else + self:write(section, fvalue) end + if (fvalue ~= cvalue) then self.section.changed = true end else self:remove(section) + self.section.changed = true end end function Flag.cfgvalue(self, section) return AbstractValue.cfgvalue(self, section) or self.default end - +function Flag.validate(self, value) + return value +end --[[ ListValue - A one-line value predefined in a list diff --git a/modules/luci-base/luasrc/controller/admin/servicectl.lua b/modules/luci-base/luasrc/controller/admin/servicectl.lua index 5b855cb24..1d73eb4ec 100644 --- a/modules/luci-base/luasrc/controller/admin/servicectl.lua +++ b/modules/luci-base/luasrc/controller/admin/servicectl.lua @@ -6,7 +6,7 @@ module("luci.controller.admin.servicectl", package.seeall) function index() entry({"servicectl"}, alias("servicectl", "status")).sysauth = "root" entry({"servicectl", "status"}, call("action_status")).leaf = true - entry({"servicectl", "restart"}, call("action_restart")).leaf = true + entry({"servicectl", "restart"}, post("action_restart")).leaf = true end function action_status() diff --git a/modules/luci-base/luasrc/dispatcher.lua b/modules/luci-base/luasrc/dispatcher.lua index 8b8d1fa34..cd5d77a12 100644 --- a/modules/luci-base/luasrc/dispatcher.lua +++ b/modules/luci-base/luasrc/dispatcher.lua @@ -1,4 +1,5 @@ -- Copyright 2008 Steven Barth +-- Copyright 2008-2015 Jo-Philipp Wich -- Licensed to the public under the Apache License 2.0. local fs = require "nixio.fs" @@ -26,14 +27,6 @@ function build_url(...) local path = {...} local url = { http.getenv("SCRIPT_NAME") or "" } - local k, v - for k, v in pairs(context.urltoken) do - url[#url+1] = "/;" - url[#url+1] = http.urlencode(k) - url[#url+1] = "=" - url[#url+1] = http.urlencode(v) - end - local p for _, p in ipairs(path) do if p:match("^[a-zA-Z0-9_%-%.%%/,;]+$") then @@ -42,6 +35,10 @@ function build_url(...) end end + if #path == 0 then + url[#url+1] = "/" + end + return table.concat(url, "") end @@ -112,24 +109,11 @@ function authenticator.htmlauth(validator, accs, default) return user end - if context.urltoken.stok then - context.urltoken.stok = nil - - local cookie = 'sysauth=%s; expires=%s; path=%s/' %{ - http.getcookie('sysauth') or 'x', - 'Thu, 01 Jan 1970 01:00:00 GMT', - build_url() - } - - http.header("Set-Cookie", cookie) - http.redirect(build_url()) - else - require("luci.i18n") - require("luci.template") - context.path = {} - http.status(403, "Forbidden") - luci.template.render("sysauth", {duser=default, fuser=user}) - end + require("luci.i18n") + require("luci.template") + context.path = {} + http.status(403, "Forbidden") + luci.template.render("sysauth", {duser=default, fuser=user}) return false @@ -140,7 +124,6 @@ function httpdispatch(request, prefix) local r = {} context.request = r - context.urltoken = {} local pathinfo = http.urldecode(request:getenv("PATH_INFO") or "", true) @@ -150,18 +133,8 @@ function httpdispatch(request, prefix) end end - local tokensok = true for node in pathinfo:gmatch("[^/]+") do - local tkey, tval - if tokensok then - tkey, tval = node:match(";(%w+)=([a-fA-F0-9]*)") - end - if tkey then - context.urltoken[tkey] = tval - else - tokensok = false - r[#r+1] = node - end + r[#r+1] = node end local stat, err = util.coxpcall(function() @@ -173,6 +146,48 @@ function httpdispatch(request, prefix) --context._disable_memtrace() end +local function require_post_security(target) + if type(target) == "table" then + if type(target.post) == "table" then + local param_name, required_val, request_val + + for param_name, required_val in pairs(target.post) do + request_val = http.formvalue(param_name) + + if (type(required_val) == "string" and + request_val ~= required_val) or + (required_val == true and + (request_val == nil or request_val == "")) + then + return false + end + end + + return true + end + + return (target.post == true) + end + + return false +end + +function test_post_security() + if http.getenv("REQUEST_METHOD") ~= "POST" then + http.status(405, "Method Not Allowed") + http.header("Allow", "POST") + return false + end + + if http.formvalue("token") ~= context.authtoken then + http.status(403, "Forbidden") + luci.template.render("csrftoken") + return false + end + + return true +end + function dispatch(request) --context._disable_memtrace = require "luci.debug".trap_memtrace("l") local ctx = context @@ -206,7 +221,6 @@ function dispatch(request) ctx.args = args ctx.requestargs = ctx.requestargs or args local n - local token = ctx.urltoken local preq = {} local freq = {} @@ -284,11 +298,14 @@ function dispatch(request) resource = luci.config.main.resourcebase; ifattr = function(...) return _ifattr(...) end; attr = function(...) return _ifattr(true, ...) end; + url = build_url; }, {__index=function(table, key) if key == "controller" then return build_url() elseif key == "REQUEST_URI" then return build_url(unpack(ctx.requestpath)) + elseif key == "token" then + return ctx.authtoken else return rawget(table, key) or _G[key] end @@ -311,20 +328,17 @@ function dispatch(request) local def = (type(track.sysauth) == "string") and track.sysauth local accs = def and {track.sysauth} or track.sysauth local sess = ctx.authsession - local verifytoken = false if not sess then sess = http.getcookie("sysauth") sess = sess and sess:match("^[a-f0-9]*$") - verifytoken = true end local sdat = (util.ubus("session", "get", { ubus_rpc_session = sess }) or { }).values - local user + local user, token if sdat then - if not verifytoken or ctx.urltoken.stok == sdat.token then - user = sdat.user - end + user = sdat.user + token = sdat.token else local eu = http.getenv("HTTP_AUTH_USER") local ep = http.getenv("HTTP_AUTH_PASS") @@ -357,12 +371,10 @@ function dispatch(request) end if sess and token then - http.header("Set-Cookie", 'sysauth=%s; path=%s/' %{ - sess, build_url() - }) + http.header("Set-Cookie", 'sysauth=%s; path=%s' %{ sess, build_url() }) - ctx.urltoken.stok = token ctx.authsession = sess + ctx.authtoken = token ctx.authuser = user http.redirect(build_url(unpack(ctx.requestpath))) @@ -374,10 +386,17 @@ function dispatch(request) end else ctx.authsession = sess + ctx.authtoken = token ctx.authuser = user end end + if c and require_post_security(c.target) then + if not test_post_security(c) then + return + end + end + if track.setgroup then sys.process.setgroup(track.setgroup) end @@ -703,6 +722,20 @@ function call(name, ...) return {type = "call", argv = {...}, name = name, target = _call} end +function post_on(params, name, ...) + return { + type = "call", + post = params, + argv = { ... }, + name = name, + target = _call + } +end + +function post(...) + return post_on(true, ...) +end + local _template = function(self, ...) require "luci.template".render(self.view) @@ -814,7 +847,13 @@ local function _cbi(self, ...) end function cbi(model, config) - return {type = "cbi", config = config, model = model, target = _cbi} + return { + type = "cbi", + post = { ["cbi.submit"] = "1" }, + config = config, + model = model, + target = _cbi + } end @@ -854,7 +893,12 @@ local function _form(self, ...) end function form(model) - return {type = "cbi", model = model, target = _form} + return { + type = "cbi", + post = { ["cbi.submit"] = "1" }, + model = model, + target = _form + } end translate = i18n.translate diff --git a/modules/luci-base/luasrc/http.lua b/modules/luci-base/luasrc/http.lua index a92d8affb..4b3573172 100644 --- a/modules/luci-base/luasrc/http.lua +++ b/modules/luci-base/luasrc/http.lua @@ -208,6 +208,7 @@ function splice(fd, size) end function redirect(url) + if url == "" then url = "/" end status(302, "Found") header("Location", url) close() diff --git a/modules/luci-base/luasrc/http.luadoc b/modules/luci-base/luasrc/http.luadoc index 4e31216a1..8a325db21 100644 --- a/modules/luci-base/luasrc/http.luadoc +++ b/modules/luci-base/luasrc/http.luadoc @@ -1,8 +1,7 @@ ---[[ LuCI Web Framework high-level HTTP functions. - -module "luci.http" ]] +module "luci.http" ---[[ Close the HTTP-Connection. diff --git a/modules/luci-base/luasrc/http/protocol.lua b/modules/luci-base/luasrc/http/protocol.lua index 61d7b802f..859272679 100644 --- a/modules/luci-base/luasrc/http/protocol.lua +++ b/modules/luci-base/luasrc/http/protocol.lua @@ -559,14 +559,23 @@ function parse_message_body( src, msg, filecb ) -- If we have a file callback then feed it if type(filecb) == "function" then - sink = filecb - + local meta = { + name = "raw", + encoding = msg.env.CONTENT_TYPE + } + sink = function( chunk ) + if chunk then + return filecb(meta, chunk, false) + else + return filecb(meta, nil, true) + end + end -- ... else append to .content else msg.content = "" msg.content_length = 0 - sink = function( chunk, err ) + sink = function( chunk ) if chunk then if ( msg.content_length + #chunk ) <= HTTP_MAX_CONTENT then msg.content = msg.content .. chunk diff --git a/modules/luci-base/luasrc/model/ipkg.lua b/modules/luci-base/luasrc/model/ipkg.lua index 587637272..e653b0346 100644 --- a/modules/luci-base/luasrc/model/ipkg.lua +++ b/modules/luci-base/luasrc/model/ipkg.lua @@ -122,27 +122,34 @@ function upgrade() end -- List helper -function _list(action, pat, cb) +local function _list(action, pat, cb) local fd = io.popen(ipkg .. " " .. action .. (pat and (" '%s'" % pat:gsub("'", "")) or "")) if fd then - local name, version, desc + local name, version, sz, desc while true do local line = fd:read("*l") if not line then break end - name, version, desc = line:match("^(.-) %- (.-) %- (.+)") + name, version, sz, desc = line:match("^(.-) %- (.-) %- (.-) %- (.+)") if not name then - name, version = line:match("^(.-) %- (.+)") + name, version, sz = line:match("^(.-) %- (.-) %- (.+)") desc = "" end - cb(name, version, desc) + if name and version then + if #version > 26 then + version = version:sub(1,21) .. ".." .. version:sub(-3,-1) + end + + cb(name, version, sz, desc) + end name = nil version = nil + sz = nil desc = nil end @@ -151,15 +158,15 @@ function _list(action, pat, cb) end function list_all(pat, cb) - _list("list", pat, cb) + _list("list --size", pat, cb) end function list_installed(pat, cb) - _list("list_installed", pat, cb) + _list("list_installed --size", pat, cb) end function find(pat, cb) - _list("find", pat, cb) + _list("find --size", pat, cb) end @@ -189,3 +196,47 @@ function overlay_root() return od end + +function compare_versions(ver1, comp, ver2) + if not ver1 or not ver2 + or not comp or not (#comp > 0) then + error("Invalid parameters") + return nil + end + -- correct compare string + if comp == "<>" or comp == "><" or comp == "!=" or comp == "~=" then comp = "~=" + elseif comp == "<=" or comp == "<" or comp == "=<" then comp = "<=" + elseif comp == ">=" or comp == ">" or comp == "=>" then comp = ">=" + elseif comp == "=" or comp == "==" then comp = "==" + elseif comp == "<<" then comp = "<" + elseif comp == ">>" then comp = ">" + else + error("Invalid compare string") + return nil + end + + local av1 = util.split(ver1, "[%.%-]", nil, true) + local av2 = util.split(ver2, "[%.%-]", nil, true) + + local max = table.getn(av1) + if (table.getn(av1) < table.getn(av2)) then + max = table.getn(av2) + end + + for i = 1, max, 1 do + local s1 = av1[i] or "" + local s2 = av2[i] or "" + + -- 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 and not compare greater or lower then true + return not (comp == "<" or comp == ">") +end diff --git a/modules/luci-base/luasrc/model/ipkg.luadoc b/modules/luci-base/luasrc/model/ipkg.luadoc index cf0985f94..4e1548dda 100644 --- a/modules/luci-base/luasrc/model/ipkg.luadoc +++ b/modules/luci-base/luasrc/model/ipkg.luadoc @@ -1,8 +1,7 @@ ---[[ LuCI OPKG call abstraction library - -module "luci.model.ipkg" ]] +module "luci.model.ipkg" ---[[ Return information about installed and available packages. @@ -107,3 +106,20 @@ Determines the overlay root used by opkg. @return String containing the directory path of the overlay root. ]] +---[[ +lua version of opkg compare-versions + +@class function +@name compare_versions +@param ver1 string version 1 +@param ver2 string version 2 +@param comp string compare versions using + "<=" or "<" lower-equal + ">" or ">=" greater-equal + "=" equal + "<<" lower + ">>" greater + "~=" not equal +@return Boolean indicating the status of the compare +]] + diff --git a/modules/luci-base/luasrc/model/network.lua b/modules/luci-base/luasrc/model/network.lua index b6e390e81..20e103276 100644 --- a/modules/luci-base/luasrc/model/network.lua +++ b/modules/luci-base/luasrc/model/network.lua @@ -1421,7 +1421,7 @@ function wifinet.is_up(self) end function wifinet.active_mode(self) - local m = _stror(self.iwinfo.mode, self.iwdata.mode) or "ap" + local m = _stror(self.iwdata.mode, self.iwinfo.mode) or "ap" if m == "ap" then m = "Master" elseif m == "sta" then m = "Client" @@ -1438,11 +1438,11 @@ function wifinet.active_mode_i18n(self) end function wifinet.active_ssid(self) - return _stror(self.iwinfo.ssid, self.iwdata.ssid) + return _stror(self.iwdata.ssid, self.iwinfo.ssid) end function wifinet.active_bssid(self) - return _stror(self.iwinfo.bssid, self.iwdata.bssid) or "00:00:00:00:00:00" + return _stror(self.iwdata.bssid, self.iwinfo.bssid) or "00:00:00:00:00:00" end function wifinet.active_encryption(self) diff --git a/modules/luci-base/luasrc/model/uci.luadoc b/modules/luci-base/luasrc/model/uci.luadoc index 1c208669d..80464f7ce 100644 --- a/modules/luci-base/luasrc/model/uci.luadoc +++ b/modules/luci-base/luasrc/model/uci.luadoc @@ -8,8 +8,8 @@ Cursor.commit the data to the actual config files. LuCI then needs to Cursor.apply the changes so deamons etc. are reloaded. @cstyle instance -module "luci.model.uci" ]] +module "luci.model.uci" ---[[ Create a new UCI-Cursor. diff --git a/modules/luci-base/luasrc/sys.lua b/modules/luci-base/luasrc/sys.lua index 3977da3ed..77f4d44a5 100644 --- a/modules/luci-base/luasrc/sys.lua +++ b/modules/luci-base/luasrc/sys.lua @@ -581,30 +581,20 @@ function wifi.getiwinfo(ifname) local stat, iwinfo = pcall(require, "iwinfo") if ifname then - local c = 0 - local u = uci.cursor_state() local d, n = ifname:match("^(%w+)%.network(%d+)") - if d and n then + local wstate = luci.util.ubus("network.wireless", "status") or { } + + d = d or ifname + n = n and tonumber(n) or 1 + + if type(wstate[d]) == "table" and + type(wstate[d].interfaces) == "table" and + type(wstate[d].interfaces[n]) == "table" and + type(wstate[d].interfaces[n].ifname) == "string" + then + ifname = wstate[d].interfaces[n].ifname + else ifname = d - n = tonumber(n) - u:foreach("wireless", "wifi-iface", - function(s) - if s.device == d then - c = c + 1 - if c == n then - ifname = s.ifname or s.device - return false - end - end - end) - elseif u:get("wireless", ifname) == "wifi-device" then - u:foreach("wireless", "wifi-iface", - function(s) - if s.device == ifname and s.ifname then - ifname = s.ifname - return false - end - end) end local t = stat and iwinfo.type(ifname) diff --git a/modules/luci-base/luasrc/sys.luadoc b/modules/luci-base/luasrc/sys.luadoc index 72a16a1ab..54be34958 100644 --- a/modules/luci-base/luasrc/sys.luadoc +++ b/modules/luci-base/luasrc/sys.luadoc @@ -1,8 +1,7 @@ ---[[ LuCI Linux and POSIX system utilities. - -module "luci.sys" ]] +module "luci.sys" ---[[ Execute a given shell command and return the error code diff --git a/modules/luci-base/luasrc/sys/zoneinfo/tzdata.lua b/modules/luci-base/luasrc/sys/zoneinfo/tzdata.lua index 148bdcbfc..ff13b1ccd 100644 --- a/modules/luci-base/luasrc/sys/zoneinfo/tzdata.lua +++ b/modules/luci-base/luasrc/sys/zoneinfo/tzdata.lua @@ -15,7 +15,7 @@ TZ = { { 'Africa/Blantyre', 'CAT-2' }, { 'Africa/Brazzaville', 'WAT-1' }, { 'Africa/Bujumbura', 'CAT-2' }, - { 'Africa/Cairo', 'EET-2EEST,M4.5.4/24,M9.5.4/24' }, + { 'Africa/Cairo', 'EET-2' }, { 'Africa/Casablanca', 'WET0WEST,M3.5.0,M10.5.0/3' }, { 'Africa/Ceuta', 'CET-1CEST,M3.5.0,M10.5.0/3' }, { 'Africa/Conakry', 'GMT0' }, @@ -55,7 +55,7 @@ TZ = { { 'Africa/Tripoli', 'EET-2' }, { 'Africa/Tunis', 'CET-1' }, { 'Africa/Windhoek', 'WAT-1WAST,M9.1.0,M4.1.0' }, - { 'America/Adak', 'HAST10HADT,M3.2.0,M11.1.0' }, + { 'America/Adak', 'HST10HDT,M3.2.0,M11.1.0' }, { 'America/Anchorage', 'AKST9AKDT,M3.2.0,M11.1.0' }, { 'America/Anguilla', 'AST4' }, { 'America/Antigua', 'AST4' }, @@ -89,7 +89,7 @@ TZ = { { 'America/Cancun', 'EST5' }, { 'America/Caracas', 'VET4:30' }, { 'America/Cayenne', 'GFT3' }, - { 'America/Cayman', 'EST5' }, + { 'America/Cayman', 'EST5EDT,M3.2.0,M11.1.0' }, { 'America/Chicago', 'CST6CDT,M3.2.0,M11.1.0' }, { 'America/Chihuahua', 'MST7MDT,M4.1.0,M10.5.0' }, { 'America/Costa Rica', 'CST6' }, @@ -105,6 +105,7 @@ TZ = { { 'America/Edmonton', 'MST7MDT,M3.2.0,M11.1.0' }, { 'America/Eirunepe', 'ACT5' }, { 'America/El Salvador', 'CST6' }, + { 'America/Fort Nelson', 'MST7' }, { 'America/Fortaleza', 'BRT3' }, { 'America/Glace Bay', 'AST4ADT,M3.2.0,M11.1.0' }, { 'America/Godthab', 'WGT3WGST,M3.5.0/-2,M10.5.0/-1' }, @@ -151,7 +152,7 @@ TZ = { { 'America/Miquelon', 'PMST3PMDT,M3.2.0,M11.1.0' }, { 'America/Moncton', 'AST4ADT,M3.2.0,M11.1.0' }, { 'America/Monterrey', 'CST6CDT,M4.1.0,M10.5.0' }, - { 'America/Montevideo', 'UYT3UYST,M10.1.0,M3.2.0' }, + { 'America/Montevideo', 'UYT3' }, { 'America/Montserrat', 'AST4' }, { 'America/Nassau', 'EST5EDT,M3.2.0,M11.1.0' }, { 'America/New York', 'EST5EDT,M3.2.0,M11.1.0' }, @@ -266,7 +267,7 @@ TZ = { { 'Asia/Oral', 'ORAT-5' }, { 'Asia/Phnom Penh', 'ICT-7' }, { 'Asia/Pontianak', 'WIB-7' }, - { 'Asia/Pyongyang', 'KST-9' }, + { 'Asia/Pyongyang', 'KST-8:30' }, { 'Asia/Qatar', 'AST-3' }, { 'Asia/Qyzylorda', 'QYZT-6' }, { 'Asia/Rangoon', 'MMT-6:30' }, @@ -322,7 +323,7 @@ TZ = { { 'Europe/Bucharest', 'EET-2EEST,M3.5.0/3,M10.5.0/4' }, { 'Europe/Budapest', 'CET-1CEST,M3.5.0,M10.5.0/3' }, { 'Europe/Busingen', 'CET-1CEST,M3.5.0,M10.5.0/3' }, - { 'Europe/Chisinau', 'EET-2EEST,M3.5.0/3,M10.5.0/4' }, + { 'Europe/Chisinau', 'EET-2EEST,M3.5.0,M10.5.0/3' }, { 'Europe/Copenhagen', 'CET-1CEST,M3.5.0,M10.5.0/3' }, { 'Europe/Dublin', 'GMT0IST,M3.5.0/1,M10.5.0' }, { 'Europe/Gibraltar', 'CET-1CEST,M3.5.0,M10.5.0/3' }, @@ -388,7 +389,7 @@ TZ = { { 'Pacific/Efate', 'VUT-11' }, { 'Pacific/Enderbury', 'PHOT-13' }, { 'Pacific/Fakaofo', 'TKT-13' }, - { 'Pacific/Fiji', 'FJT-12FJST,M11.1.0,M1.3.4/75' }, + { 'Pacific/Fiji', 'FJT-12FJST,M11.1.0,M1.3.0/3' }, { 'Pacific/Funafuti', 'TVT-12' }, { 'Pacific/Galapagos', 'GALT6' }, { 'Pacific/Gambier', 'GAMT9' }, @@ -404,7 +405,7 @@ TZ = { { 'Pacific/Midway', 'SST11' }, { 'Pacific/Nauru', 'NRT-12' }, { 'Pacific/Niue', 'NUT11' }, - { 'Pacific/Norfolk', 'NFT-11:30' }, + { 'Pacific/Norfolk', 'NFT-11' }, { 'Pacific/Noumea', 'NCT-11' }, { 'Pacific/Pago Pago', 'SST11' }, { 'Pacific/Palau', 'PWT-9' }, diff --git a/modules/luci-base/luasrc/sys/zoneinfo/tzoffset.lua b/modules/luci-base/luasrc/sys/zoneinfo/tzoffset.lua index fe3f86097..53c8adbc6 100644 --- a/modules/luci-base/luasrc/sys/zoneinfo/tzoffset.lua +++ b/modules/luci-base/luasrc/sys/zoneinfo/tzoffset.lua @@ -9,11 +9,10 @@ OFFSET = { wat = 3600, -- WAT cat = 7200, -- CAT eet = 7200, -- EET - eest = 10800, -- EEST wet = 0, -- WET sast = 7200, -- SAST - hast = -36000, -- HAST - hadt = -32400, -- HADT + hst = -36000, -- HST + hdt = -32400, -- HDT akst = -32400, -- AKST akdt = -28800, -- AKDT ast = -14400, -- AST @@ -42,7 +41,6 @@ OFFSET = { pmst = -10800, -- PMST pmdt = -7200, -- PMDT uyt = -10800, -- UYT - uyst = -7200, -- UYST fnt = -7200, -- FNT srt = -10800, -- SRT clt = -10800, -- CLT @@ -96,7 +94,7 @@ OFFSET = { novt = 21600, -- NOVT omst = 21600, -- OMST orat = 18000, -- ORAT - kst = 32400, -- KST + kst = 30600, -- KST qyzt = 21600, -- QYZT mmt = 23400, -- MMT sakt = 36000, -- SAKT @@ -147,7 +145,6 @@ OFFSET = { galt = -21600, -- GALT gamt = -32400, -- GAMT sbt = 39600, -- SBT - hst = -36000, -- HST lint = 50400, -- LINT kost = 39600, -- KOST mht = 43200, -- MHT @@ -155,7 +152,7 @@ OFFSET = { sst = -39600, -- SST nrt = 43200, -- NRT nut = -39600, -- NUT - nft = 41400, -- NFT + nft = 39600, -- NFT nct = 39600, -- NCT pwt = 32400, -- PWT pont = 39600, -- PONT diff --git a/modules/luci-base/luasrc/tools/status.lua b/modules/luci-base/luasrc/tools/status.lua index 6e588fe71..0dd092c6d 100644 --- a/modules/luci-base/luasrc/tools/status.lua +++ b/modules/luci-base/luasrc/tools/status.lua @@ -120,7 +120,9 @@ function wifi_networks() assoclist = net:assoclist(), country = net:country(), txpower = net:txpower(), - txpoweroff = net:txpower_offset() + txpoweroff = net:txpower_offset(), + disabled = (dev:get("disabled") == "1" or + net:get("disabled") == "1") } end diff --git a/modules/luci-base/luasrc/util.luadoc b/modules/luci-base/luasrc/util.luadoc index 1c09b7a9a..805eeb7f8 100644 --- a/modules/luci-base/luasrc/util.luadoc +++ b/modules/luci-base/luasrc/util.luadoc @@ -1,8 +1,7 @@ ---[[ LuCI utility functions. - -module "luci.util" ]] +module "luci.util" ---[[ Create a Class object (Python-style object model). @@ -182,7 +181,8 @@ Checks whether the given table contains the given value. @name contains @param table Table value @param value Value to search within the given table -@return Boolean indicating whether the given value occurs within table +@return number indicating the first index at which the given value occurs +-- within table or false. ]] ---[[ diff --git a/modules/luci-base/luasrc/view/cbi/apply_xhr.htm b/modules/luci-base/luasrc/view/cbi/apply_xhr.htm index 1814c9393..daa57c1db 100644 --- a/modules/luci-base/luasrc/view/cbi/apply_xhr.htm +++ b/modules/luci-base/luasrc/view/cbi/apply_xhr.htm @@ -4,10 +4,10 @@ <%+cbi/valuefooter%> diff --git a/modules/luci-base/luasrc/view/cbi/error.htm b/modules/luci-base/luasrc/view/cbi/error.htm index 2acb96924..75ec1082a 100644 --- a/modules/luci-base/luasrc/view/cbi/error.htm +++ b/modules/luci-base/luasrc/view/cbi/error.htm @@ -1,5 +1,5 @@
- <% if self.title and #self.title > 0 then %>

<%=self.title%>

<% end %> + <% if self.title and #self.title > 0 then %>

<%=self.title%>

<% end %> <% if self.description and #self.description > 0 then %>
<%=self.description%>
<% end %>

diff --git a/modules/luci-base/luasrc/view/cbi/header.htm b/modules/luci-base/luasrc/view/cbi/header.htm index 2bddaba61..302df1d2f 100644 --- a/modules/luci-base/luasrc/view/cbi/header.htm +++ b/modules/luci-base/luasrc/view/cbi/header.htm @@ -2,6 +2,7 @@

+
diff --git a/modules/luci-base/luasrc/view/cbi/map.htm b/modules/luci-base/luasrc/view/cbi/map.htm index 053220d18..e90c3f589 100644 --- a/modules/luci-base/luasrc/view/cbi/map.htm +++ b/modules/luci-base/luasrc/view/cbi/map.htm @@ -5,7 +5,7 @@ <%-+cbi/apply_xhr-%>
- <% if self.title and #self.title > 0 then %>

<%=self.title%>

<% end %> + <% if self.title and #self.title > 0 then %>

<%=self.title%>

<% end %> <% if self.description and #self.description > 0 then %>
<%=self.description%>
<% end %> <%- if firstmap and applymap then cbi_apply_xhr(self.config, parsechain, redirect) end -%> <%- self:render_children() %> diff --git a/modules/luci-base/luasrc/view/cbi/network_netlist.htm b/modules/luci-base/luasrc/view/cbi/network_netlist.htm index 7e23d149a..4f186ca8e 100644 --- a/modules/luci-base/luasrc/view/cbi/network_netlist.htm +++ b/modules/luci-base/luasrc/view/cbi/network_netlist.htm @@ -59,6 +59,7 @@ <%- else -%> <%:unspecified -or- create:%> <%- end -%>  + onfocus="document.getElementById('<%=cbid%>_new').checked=true" />
diff --git a/modules/luci-base/luasrc/view/cbi/simpleform.htm b/modules/luci-base/luasrc/view/cbi/simpleform.htm index 5216cd50f..78f5c5a54 100644 --- a/modules/luci-base/luasrc/view/cbi/simpleform.htm +++ b/modules/luci-base/luasrc/view/cbi/simpleform.htm @@ -2,11 +2,12 @@
+
<% end %>
- <% if self.title and #self.title > 0 then %>

<%=self.title%>

<% end %> + <% if self.title and #self.title > 0 then %>

<%=self.title%>

<% end %> <% if self.description and #self.description > 0 then %>
<%=self.description%>
<% end %> <% self:render_children() %>
diff --git a/modules/luci-base/luasrc/view/cbi/value.htm b/modules/luci-base/luasrc/view/cbi/value.htm index d1a7bea5c..8a08e08f2 100644 --- a/modules/luci-base/luasrc/view/cbi/value.htm +++ b/modules/luci-base/luasrc/view/cbi/value.htm @@ -1,7 +1,8 @@ <%+cbi/valueheader%> /> <% if self.password then %><% end %> <% if #self.keylist > 0 or self.datatype then -%> diff --git a/modules/luci-base/luasrc/view/csrftoken.htm b/modules/luci-base/luasrc/view/csrftoken.htm new file mode 100644 index 000000000..57ac03f3b --- /dev/null +++ b/modules/luci-base/luasrc/view/csrftoken.htm @@ -0,0 +1,24 @@ +<%# + Copyright 2015 Jo-Philipp Wich + Licensed to the public under the Apache License 2.0. +-%> + +<%+header%> + +

<%:Form token mismatch%>

+
+ +

<%:The submitted security token is invalid or already expired!%>

+ +

<%: + In order to prevent unauthorized access to the system, your request has + been blocked. Click "Continue »" below to return to the previous page. +%>

+ +
+ +

+ Continue » +

+ +<%+footer%> diff --git a/modules/luci-base/luasrc/view/error404.htm b/modules/luci-base/luasrc/view/error404.htm index c2be29ed5..bc7422683 100644 --- a/modules/luci-base/luasrc/view/error404.htm +++ b/modules/luci-base/luasrc/view/error404.htm @@ -5,7 +5,7 @@ -%> <%+header%> -

404 <%:Not Found%>

+

404 <%:Not Found%>

<%:Sorry, the object you requested was not found.%>

<%:Unable to dispatch%>: <%=luci.http.request.env.PATH_INFO%> <%+footer%> diff --git a/modules/luci-base/luasrc/view/error500.htm b/modules/luci-base/luasrc/view/error500.htm index 8fb18ed07..34a52cda8 100644 --- a/modules/luci-base/luasrc/view/error500.htm +++ b/modules/luci-base/luasrc/view/error500.htm @@ -5,7 +5,7 @@ -%> <%+header%> -

500 <%:Internal Server Error%>

+

500 <%:Internal Server Error%>

<%:Sorry, the server encountered an unexpected error.%>

<%=message%>
<%+footer%> diff --git a/modules/luci-base/luasrc/view/sysauth.htm b/modules/luci-base/luasrc/view/sysauth.htm index 7f0f0a622..e20750491 100644 --- a/modules/luci-base/luasrc/view/sysauth.htm +++ b/modules/luci-base/luasrc/view/sysauth.htm @@ -8,7 +8,7 @@ ">
-

<%:Authorization Required%>

+

<%:Authorization Required%>

<%:Please enter your username and password.%> <%- if fuser then %> diff --git a/modules/luci-base/po/ca/base.po b/modules/luci-base/po/ca/base.po index 2252e7c95..378b29511 100644 --- a/modules/luci-base/po/ca/base.po +++ b/modules/luci-base/po/ca/base.po @@ -46,6 +46,9 @@ msgstr "Càrrega d'1 minut:" msgid "15 Minute Load:" msgstr "Càrrega de 15 minuts:" +msgid "464XLAT (CLAT)" +msgstr "" + msgid "5 Minute Load:" msgstr "Càrrega de 5 minuts:" @@ -207,6 +210,9 @@ msgstr "Afegeix una interfície nova..." msgid "Additional Hosts files" msgstr "Fitxers de Hosts addicionals" +msgid "Additional servers file" +msgstr "" + msgid "Address" msgstr "Adreça" @@ -334,6 +340,9 @@ msgstr "Paquets disponibles" msgid "Average:" msgstr "Mitjana:" +msgid "BR / DMR / AFTR" +msgstr "" + msgid "BSSID" msgstr "BSSID" @@ -410,6 +419,11 @@ msgstr "Controlador sense fil Broadcom BCM%04x 802.11" msgid "Buffered" msgstr "En memòria intermèdia" +msgid "" +"Build/distribution specific feed definitions. This file will NOT be " +"preserved in any sysupgrade." +msgstr "" + msgid "Buttons" msgstr "Botons" @@ -563,6 +577,14 @@ msgid "Custom delegated IPv6-prefix" msgstr "" msgid "" +"Custom feed definitions, e.g. private feeds. This file can be preserved in a " +"sysupgrade." +msgstr "" + +msgid "Custom feeds" +msgstr "" + +msgid "" "Customizes the behaviour of the device LEDs if possible." msgstr "" @@ -659,6 +681,12 @@ msgstr "Dispositiu" msgid "Device Configuration" msgstr "Configuració de dispositiu" +msgid "Device is rebooting..." +msgstr "" + +msgid "Device unreachable" +msgstr "" + msgid "Diagnostics" msgstr "Diagnòstics" @@ -699,6 +727,9 @@ msgstr "Optimització de distància" msgid "Distance to farthest network member in meters." msgstr "Distància al membre de la xarxa més allunyat en metres." +msgid "Distribution feeds" +msgstr "" + msgid "Diversity" msgstr "Diversitat" @@ -769,6 +800,9 @@ msgid "" "having static leases will be served." msgstr "" +msgid "EA-bits length" +msgstr "" + msgid "EAP-Method" msgstr "Mètode EAP" @@ -798,9 +832,6 @@ msgstr "Habilita l'STP" msgid "Enable HE.net dynamic endpoint update" msgstr "" -msgid "Enable IPv6 negotiation on the PPP link" -msgstr "Habilita negociació IPv6 en la enllaç PPP" - msgid "Enable Jumbo Frame passthrough" msgstr "Habilita el passatge de trames enormes" @@ -955,6 +986,9 @@ msgstr "Força el TKIP" msgid "Force TKIP and CCMP (AES)" msgstr "Força el TKIP i el CCMP (AES)" +msgid "Form token mismatch" +msgstr "" + msgid "Forward DHCP traffic" msgstr "Reenvia el tràfic DHCP" @@ -994,6 +1028,9 @@ msgstr "Ajusts generals" msgid "General Setup" msgstr "" +msgid "General options for opkg" +msgstr "" + msgid "Generate archive" msgstr "" @@ -1105,6 +1142,9 @@ msgstr "Màscara de xarxa IPv4" msgid "IPv4 only" msgstr "Només IPv4" +msgid "IPv4 prefix" +msgstr "" + msgid "IPv4 prefix length" msgstr "Longitud de prefix IPv4" @@ -1200,8 +1240,8 @@ msgstr "" "es pot accedir al dispositiu d'intercanvi amb unes taxes tan altes com les " "de la RAM." -msgid "Ignore Hosts files" -msgstr "" +msgid "Ignore /etc/hosts" +msgstr "Ignora /etc/hosts" msgid "Ignore interface" msgstr "Ignora la interfície" @@ -1215,6 +1255,11 @@ msgstr "Imatge" msgid "In" msgstr "En" +msgid "" +"In order to prevent unauthorized access to the system, your request has been " +"blocked. Click \"Continue »\" below to return to the previous page." +msgstr "" + msgid "Inactivity timeout" msgstr "Temps d'espera d'inactivitat" @@ -1484,6 +1529,9 @@ msgstr "Filtre MAC" msgid "MAC-List" msgstr "Llista MAC" +msgid "MAP / LW4over6" +msgstr "" + msgid "MB/s" msgstr "MB/s" @@ -1498,6 +1546,9 @@ msgid "" "below:" msgstr "" +msgid "Manual" +msgstr "" + msgid "Maximum Rate" msgstr "Velocitat màxima" @@ -1607,6 +1658,9 @@ msgstr "Adreça de difusió selectiva" msgid "NAS ID" msgstr "NAS ID" +msgid "NAT64 Prefix" +msgstr "" + msgid "NDP-Proxy" msgstr "" @@ -1837,6 +1891,12 @@ msgstr "PPPoE" msgid "PPtP" msgstr "PPtP" +msgid "PSID offset" +msgstr "" + +msgid "PSID-bits length" +msgstr "" + msgid "Package libiwinfo required!" msgstr "Es requereix el paquet libiwinfo!" @@ -1864,9 +1924,6 @@ msgstr "Contrasenya de la clau privada" msgid "Password successfully changed!" msgstr "La contrasenya s'ha canviat amb èxit!" -msgid "Path" -msgstr "Ruta" - msgid "Path to CA-Certificate" msgstr "Ruta als Certificats CA" @@ -1903,9 +1960,6 @@ msgstr "Paquets" msgid "Please enter your username and password." msgstr "Si us plau entra el teu nom d'usuari i contrasenya." -msgid "Please wait: Device rebooting..." -msgstr "Si us plau espera: Dispositiu arrancant-se de nou" - msgid "Policy" msgstr "Política" @@ -2282,6 +2336,9 @@ msgstr "Senyal:" msgid "Size" msgstr "Mida" +msgid "Size (.ipk)" +msgstr "" + msgid "Skip" msgstr "Salta" @@ -2545,6 +2602,9 @@ msgstr "" msgid "The selected protocol needs a device assigned" msgstr "El protocol seleccionat necessita un dispositiu assignat" +msgid "The submitted security token is invalid or already expired!" +msgstr "" + msgid "" "The system is erasing the configuration partition now and will reboot itself " "when finished." @@ -2602,6 +2662,12 @@ msgid "This IPv4 address of the relay" msgstr "" msgid "" +"This file may contain lines like 'server=/domain/1.2.3.4' or " +"'server=1.2.3.4' fordomain-specific or full upstream DNS servers." +msgstr "" + +msgid "" "This is a list of shell glob patterns for matching files and directories to " "include during sysupgrade. Modified files in /etc/config/ and certain other " "configurations are automatically preserved." @@ -2920,13 +2986,14 @@ msgstr "Esperant que s'apliquin els canvis..." msgid "Waiting for command to complete..." msgstr "Esperant que s'acabi l'ordre..." +msgid "Waiting for device..." +msgstr "" + msgid "Warning" msgstr "Advertència" -msgid "Warning: There are unsaved changes that will be lost while rebooting!" +msgid "Warning: There are unsaved changes that will get lost on reboot!" msgstr "" -"Advertència: Hi ha canvis que no s'han desat i que es perdran mentre " -"s'arranca de nou!" msgid "Whether to create an IPv6 default route over the tunnel" msgstr "" @@ -3159,6 +3226,21 @@ msgstr "sí" msgid "« Back" msgstr "« Enrere" +#~ msgid "Enable IPv6 negotiation on the PPP link" +#~ msgstr "Habilita negociació IPv6 en la enllaç PPP" + +#~ msgid "Path" +#~ msgstr "Ruta" + +#~ msgid "Please wait: Device rebooting..." +#~ msgstr "Si us plau espera: Dispositiu arrancant-se de nou" + +#~ msgid "" +#~ "Warning: There are unsaved changes that will be lost while rebooting!" +#~ msgstr "" +#~ "Advertència: Hi ha canvis que no s'han desat i que es perdran mentre " +#~ "s'arranca de nou!" + #~ msgid "" #~ "Always use 40MHz channels even if the secondary channel overlaps. Using " #~ "this option does not comply with IEEE 802.11n-2009!" @@ -3804,9 +3886,6 @@ msgstr "« Enrere" #~ msgid "Here you can configure installed wifi devices." #~ msgstr "Ací pots configurar els dispositius sense fils instal·lats." -#~ msgid "Ignore /etc/hosts" -#~ msgstr "Ignora /etc/hosts" - #~ msgid "Independent (Ad-Hoc)" #~ msgstr "Independent (Ad-Hoc)" diff --git a/modules/luci-base/po/cs/base.po b/modules/luci-base/po/cs/base.po index 373602070..da953ae69 100644 --- a/modules/luci-base/po/cs/base.po +++ b/modules/luci-base/po/cs/base.po @@ -44,6 +44,9 @@ msgstr "Zatížení za 1 minutu:" msgid "15 Minute Load:" msgstr "Zatížení za 15 minut:" +msgid "464XLAT (CLAT)" +msgstr "" + msgid "5 Minute Load:" msgstr "Zatížení za 5 minut:" @@ -207,6 +210,9 @@ msgstr "Přidat rozhraní..." msgid "Additional Hosts files" msgstr "Dodatečné Hosts soubory" +msgid "Additional servers file" +msgstr "" + msgid "Address" msgstr "Adresa" @@ -334,6 +340,9 @@ msgstr "Dostupné balíčky" msgid "Average:" msgstr "Průměr:" +msgid "BR / DMR / AFTR" +msgstr "" + msgid "BSSID" msgstr "BSSID" @@ -409,6 +418,11 @@ msgstr "Broadcom modul BCM%04x 802.11 bezdrátový ovladač" msgid "Buffered" msgstr "Bufferováno" +msgid "" +"Build/distribution specific feed definitions. This file will NOT be " +"preserved in any sysupgrade." +msgstr "" + msgid "Buttons" msgstr "Tlačítka" @@ -567,6 +581,14 @@ msgid "Custom delegated IPv6-prefix" msgstr "" msgid "" +"Custom feed definitions, e.g. private feeds. This file can be preserved in a " +"sysupgrade." +msgstr "" + +msgid "Custom feeds" +msgstr "" + +msgid "" "Customizes the behaviour of the device LEDs if possible." msgstr "" @@ -665,6 +687,12 @@ msgstr "Zařízení" msgid "Device Configuration" msgstr "Nastavení zařízení" +msgid "Device is rebooting..." +msgstr "" + +msgid "Device unreachable" +msgstr "" + msgid "Diagnostics" msgstr "Diagnostika" @@ -705,6 +733,9 @@ msgstr "Optimalizace na vzdálenost" msgid "Distance to farthest network member in meters." msgstr "Vzdálenost nejodlehlejšího člena sítě v metrech." +msgid "Distribution feeds" +msgstr "" + msgid "Diversity" msgstr "Diverzita" @@ -779,6 +810,9 @@ msgstr "" "Pro klienty alokovat DHCP adresy dynamicky. Pokud je volba zakázána, budou " "obsloužení pouze klienti se statickými výpůjčkami." +msgid "EA-bits length" +msgstr "" + msgid "EAP-Method" msgstr "Metoda EAP" @@ -808,9 +842,6 @@ msgstr "Povolit STP" msgid "Enable HE.net dynamic endpoint update" msgstr "Povolit dynamickou aktualizaci koncového bodu HE.net" -msgid "Enable IPv6 negotiation on the PPP link" -msgstr "Na PPP spoji povolit vyjednání IPv6" - msgid "Enable Jumbo Frame passthrough" msgstr "Povolit průchod jumbo rámců" @@ -967,6 +998,9 @@ msgstr "Vynutit TKIP" msgid "Force TKIP and CCMP (AES)" msgstr "Vynutit TKIP a CCMP (AES)" +msgid "Form token mismatch" +msgstr "" + msgid "Forward DHCP traffic" msgstr "Přeposílat DHCP provoz" @@ -1006,6 +1040,9 @@ msgstr "Obecná nastavení" msgid "General Setup" msgstr "Obecné nastavení" +msgid "General options for opkg" +msgstr "" + msgid "Generate archive" msgstr "Vytvorǐt archív" @@ -1116,6 +1153,9 @@ msgstr "IPv4 maska sítě" msgid "IPv4 only" msgstr "Pouze IPv4" +msgid "IPv4 prefix" +msgstr "" + msgid "IPv4 prefix length" msgstr "Délka IPv4 prefixu" @@ -1211,8 +1251,8 @@ msgstr "" "přístup na odkládací zařízení je řádově pomalejší, než přístup do paměti " "RAM." -msgid "Ignore Hosts files" -msgstr "Ignorovat soubory Hosts" +msgid "Ignore /etc/hosts" +msgstr "" msgid "Ignore interface" msgstr "Ignorovat rozhraní" @@ -1226,6 +1266,11 @@ msgstr "Obraz" msgid "In" msgstr "Dovnitř" +msgid "" +"In order to prevent unauthorized access to the system, your request has been " +"blocked. Click \"Continue »\" below to return to the previous page." +msgstr "" + msgid "Inactivity timeout" msgstr "Časový limit nečinnosti" @@ -1506,6 +1551,9 @@ msgstr "Filtr MAC" msgid "MAC-List" msgstr "Seznam Mac" +msgid "MAP / LW4over6" +msgstr "" + msgid "MB/s" msgstr "MB/s" @@ -1520,6 +1568,9 @@ msgid "" "below:" msgstr "" +msgid "Manual" +msgstr "" + msgid "Maximum Rate" msgstr "Nejvyšší míra" @@ -1629,6 +1680,9 @@ msgstr "Adresa vícesměrového vysílání" msgid "NAS ID" msgstr "NAS ID" +msgid "NAT64 Prefix" +msgstr "" + msgid "NDP-Proxy" msgstr "" @@ -1860,6 +1914,12 @@ msgstr "PPPoE" msgid "PPtP" msgstr "PPtP" +msgid "PSID offset" +msgstr "" + +msgid "PSID-bits length" +msgstr "" + msgid "Package libiwinfo required!" msgstr "Vyžadován balíček libiwinfo!" @@ -1887,9 +1947,6 @@ msgstr "Heslo privátního klíče" msgid "Password successfully changed!" msgstr "Heslo bylo úspěšně změněno!" -msgid "Path" -msgstr "" - msgid "Path to CA-Certificate" msgstr "Cesta k certifikátu CA" @@ -1926,9 +1983,6 @@ msgstr "Paketů" msgid "Please enter your username and password." msgstr "Prosím vložte vaše uživatelské jméno a heslo." -msgid "Please wait: Device rebooting..." -msgstr "Prosím počkejte: Provádím reboot..." - msgid "Policy" msgstr "Politika" @@ -2322,6 +2376,9 @@ msgstr "Signál:" msgid "Size" msgstr "Velikost" +msgid "Size (.ipk)" +msgstr "" + msgid "Skip" msgstr "Přeskočit" @@ -2608,6 +2665,9 @@ msgstr "" msgid "The selected protocol needs a device assigned" msgstr "Vybraný protokol potřebuje mít přiřazeno zařízení" +msgid "The submitted security token is invalid or already expired!" +msgstr "" + msgid "" "The system is erasing the configuration partition now and will reboot itself " "when finished." @@ -2667,6 +2727,12 @@ msgid "This IPv4 address of the relay" msgstr "" msgid "" +"This file may contain lines like 'server=/domain/1.2.3.4' or " +"'server=1.2.3.4' fordomain-specific or full upstream DNS servers." +msgstr "" + +msgid "" "This is a list of shell glob patterns for matching files and directories to " "include during sysupgrade. Modified files in /etc/config/ and certain other " "configurations are automatically preserved." @@ -2993,11 +3059,14 @@ msgstr "Čekání na realizaci změn..." msgid "Waiting for command to complete..." msgstr "Čekání na dokončení příkazu..." +msgid "Waiting for device..." +msgstr "" + msgid "Warning" msgstr "Varování" -msgid "Warning: There are unsaved changes that will be lost while rebooting!" -msgstr "Varování: Existují neuložené změny, které budou rebootem ztraceny!" +msgid "Warning: There are unsaved changes that will get lost on reboot!" +msgstr "" msgid "Whether to create an IPv6 default route over the tunnel" msgstr "" @@ -3227,6 +3296,19 @@ msgstr "ano" msgid "« Back" msgstr "« Zpět" +#~ msgid "Enable IPv6 negotiation on the PPP link" +#~ msgstr "Na PPP spoji povolit vyjednání IPv6" + +#~ msgid "Ignore Hosts files" +#~ msgstr "Ignorovat soubory Hosts" + +#~ msgid "Please wait: Device rebooting..." +#~ msgstr "Prosím počkejte: Provádím reboot..." + +#~ msgid "" +#~ "Warning: There are unsaved changes that will be lost while rebooting!" +#~ msgstr "Varování: Existují neuložené změny, které budou rebootem ztraceny!" + #~ msgid "" #~ "Always use 40MHz channels even if the secondary channel overlaps. Using " #~ "this option does not comply with IEEE 802.11n-2009!" diff --git a/modules/luci-base/po/de/base.po b/modules/luci-base/po/de/base.po index 361abdead..f6980027a 100644 --- a/modules/luci-base/po/de/base.po +++ b/modules/luci-base/po/de/base.po @@ -46,6 +46,9 @@ msgstr "Systemlast (1 Minute):" msgid "15 Minute Load:" msgstr "Systemlast (15 Minuten):" +msgid "464XLAT (CLAT)" +msgstr "" + msgid "5 Minute Load:" msgstr "Systemlast (5 Minuten):" @@ -204,6 +207,9 @@ msgstr "Neue Schnittstelle hinzufügen..." msgid "Additional Hosts files" msgstr "Zusätzliche Hosts-Dateien" +msgid "Additional servers file" +msgstr "" + msgid "Address" msgstr "Adresse" @@ -334,6 +340,9 @@ msgstr "Verfügbare Pakete" msgid "Average:" msgstr "Durchschnitt:" +msgid "BR / DMR / AFTR" +msgstr "" + msgid "BSSID" msgstr "BSSID" @@ -410,6 +419,11 @@ msgstr "Broadcom BCM%04x 802.11 W-LAN Adapter" msgid "Buffered" msgstr "Gepuffert" +msgid "" +"Build/distribution specific feed definitions. This file will NOT be " +"preserved in any sysupgrade." +msgstr "" + msgid "Buttons" msgstr "Knöpfe" @@ -565,6 +579,14 @@ msgid "Custom delegated IPv6-prefix" msgstr "" msgid "" +"Custom feed definitions, e.g. private feeds. This file can be preserved in a " +"sysupgrade." +msgstr "" + +msgid "Custom feeds" +msgstr "" + +msgid "" "Customizes the behaviour of the device LEDs if possible." msgstr "Passt das Verhalten der Geräte-LEDs an - wenn dies möglich ist." @@ -661,6 +683,12 @@ msgstr "Gerät" msgid "Device Configuration" msgstr "Gerätekonfiguration" +msgid "Device is rebooting..." +msgstr "" + +msgid "Device unreachable" +msgstr "" + msgid "Diagnostics" msgstr "Diagnosen" @@ -701,6 +729,9 @@ msgstr "Distanzoptimierung" msgid "Distance to farthest network member in meters." msgstr "Distanz zum am weitesten entfernten Funkpartner in Metern." +msgid "Distribution feeds" +msgstr "" + msgid "Diversity" msgstr "Diversität" @@ -775,6 +806,9 @@ msgstr "" "DHCP Adressen dynamisch erzeugen. Wenn dies deaktiviert ist, werden nur " "Clients mit konfigurierten statischen Leases bedient" +msgid "EA-bits length" +msgstr "" + msgid "EAP-Method" msgstr "EAP-Methode" @@ -804,9 +838,6 @@ msgstr "STP aktivieren" msgid "Enable HE.net dynamic endpoint update" msgstr "Dynamisches HE.net IP-Adress-Update aktivieren" -msgid "Enable IPv6 negotiation on the PPP link" -msgstr "Aushandeln von IPv6-Adressen auf der PPP-Verbindung aktivieren" - msgid "Enable Jumbo Frame passthrough" msgstr "Aktiviere Jumbo Frame Durchleitung" @@ -966,6 +997,9 @@ msgstr "Erzwinge TKIP" msgid "Force TKIP and CCMP (AES)" msgstr "Erzwinge TKIP und CCMP (AES)" +msgid "Form token mismatch" +msgstr "" + msgid "Forward DHCP traffic" msgstr "DHCP Traffic weiterleiten" @@ -1005,6 +1039,9 @@ msgstr "Allgemeine Einstellungen" msgid "General Setup" msgstr "Allgemeine Einstellungen" +msgid "General options for opkg" +msgstr "" + msgid "Generate archive" msgstr "Sicherung erstellen" @@ -1116,6 +1153,9 @@ msgstr "IPv4 Netzmaske" msgid "IPv4 only" msgstr "nur IPv4" +msgid "IPv4 prefix" +msgstr "" + msgid "IPv4 prefix length" msgstr "Länge des IPv4 Präfix" @@ -1213,8 +1253,8 @@ msgstr "" "effektive Größe des Arbeitsspeichers zu erhöhen. Die Auslagerung der Daten " "ist natürlich bedeutend langsamer als direkte Arbeitsspeicherzugriffe." -msgid "Ignore Hosts files" -msgstr "Hosts-Dateien ignorieren" +msgid "Ignore /etc/hosts" +msgstr "Ignoriere /etc/hosts" msgid "Ignore interface" msgstr "Schnittstelle ignorieren" @@ -1228,6 +1268,11 @@ msgstr "Image" msgid "In" msgstr "Ein" +msgid "" +"In order to prevent unauthorized access to the system, your request has been " +"blocked. Click \"Continue »\" below to return to the previous page." +msgstr "" + msgid "Inactivity timeout" msgstr "Timeout bei Inaktivität" @@ -1510,6 +1555,9 @@ msgstr "MAC-Filter" msgid "MAC-List" msgstr "MAC-Adressliste" +msgid "MAP / LW4over6" +msgstr "" + msgid "MB/s" msgstr "MB/s" @@ -1524,6 +1572,9 @@ msgid "" "below:" msgstr "" +msgid "Manual" +msgstr "" + msgid "Maximum Rate" msgstr "Höchstübertragungsrate" @@ -1633,6 +1684,9 @@ msgstr "Multicast-Adresse" msgid "NAS ID" msgstr "NAS ID" +msgid "NAT64 Prefix" +msgstr "" + msgid "NDP-Proxy" msgstr "" @@ -1866,6 +1920,12 @@ msgstr "PPPoE" msgid "PPtP" msgstr "PPtP" +msgid "PSID offset" +msgstr "" + +msgid "PSID-bits length" +msgstr "" + msgid "Package libiwinfo required!" msgstr "Benötige das libiwinfo Paket!" @@ -1893,9 +1953,6 @@ msgstr "Passwort des Privaten Schlüssels" msgid "Password successfully changed!" msgstr "Passwort erfolgreich geändert!" -msgid "Path" -msgstr "Pfad" - msgid "Path to CA-Certificate" msgstr "Pfad zum CA-Zertifikat" @@ -1932,9 +1989,6 @@ msgstr "Pkte." msgid "Please enter your username and password." msgstr "Bitte Benutzernamen und Passwort eingeben." -msgid "Please wait: Device rebooting..." -msgstr "Bitte warten: Neustart wird durchgeführt..." - msgid "Policy" msgstr "Standardregel" @@ -2330,6 +2384,9 @@ msgstr "Signal:" msgid "Size" msgstr "Größe" +msgid "Size (.ipk)" +msgstr "" + msgid "Skip" msgstr "Überspringen" @@ -2623,6 +2680,9 @@ msgstr "" msgid "The selected protocol needs a device assigned" msgstr "Dem ausgewähltem Protokoll muss ein Gerät zugeordnet werden" +msgid "The submitted security token is invalid or already expired!" +msgstr "" + msgid "" "The system is erasing the configuration partition now and will reboot itself " "when finished." @@ -2684,6 +2744,12 @@ msgid "This IPv4 address of the relay" msgstr "IPv4-Adresse des Relais" msgid "" +"This file may contain lines like 'server=/domain/1.2.3.4' or " +"'server=1.2.3.4' fordomain-specific or full upstream DNS servers." +msgstr "" + +msgid "" "This is a list of shell glob patterns for matching files and directories to " "include during sysupgrade. Modified files in /etc/config/ and certain other " "configurations are automatically preserved." @@ -3018,13 +3084,14 @@ msgstr "Änderungen werden angewandt..." msgid "Waiting for command to complete..." msgstr "Der Befehl wird ausgeführt..." +msgid "Waiting for device..." +msgstr "" + msgid "Warning" msgstr "Warnung" -msgid "Warning: There are unsaved changes that will be lost while rebooting!" +msgid "Warning: There are unsaved changes that will get lost on reboot!" msgstr "" -"Warnung: Es gibt ungespeicherte Änderungen, die bei einem Neustart verloren " -"gehen!" msgid "Whether to create an IPv6 default route over the tunnel" msgstr "" @@ -3254,6 +3321,24 @@ msgstr "ja" msgid "« Back" msgstr "« Zurück" +#~ msgid "Enable IPv6 negotiation on the PPP link" +#~ msgstr "Aushandeln von IPv6-Adressen auf der PPP-Verbindung aktivieren" + +#~ msgid "Ignore Hosts files" +#~ msgstr "Hosts-Dateien ignorieren" + +#~ msgid "Path" +#~ msgstr "Pfad" + +#~ msgid "Please wait: Device rebooting..." +#~ msgstr "Bitte warten: Neustart wird durchgeführt..." + +#~ msgid "" +#~ "Warning: There are unsaved changes that will be lost while rebooting!" +#~ msgstr "" +#~ "Warnung: Es gibt ungespeicherte Änderungen, die bei einem Neustart " +#~ "verloren gehen!" + #~ msgid "" #~ "Always use 40MHz channels even if the secondary channel overlaps. Using " #~ "this option does not comply with IEEE 802.11n-2009!" @@ -4143,9 +4228,6 @@ msgstr "« Zurück" #~ msgid "Here you can configure installed wifi devices." #~ msgstr "An dieser Stelle können eingebaute WLAN-Geräte konfiguriert werden." -#~ msgid "Ignore /etc/hosts" -#~ msgstr "Ignoriere /etc/hosts" - #~ msgid "Independent (Ad-Hoc)" #~ msgstr "Unabhängig (Ad-Hoc)" diff --git a/modules/luci-base/po/el/base.po b/modules/luci-base/po/el/base.po index ed3a20737..8d96a7ac1 100644 --- a/modules/luci-base/po/el/base.po +++ b/modules/luci-base/po/el/base.po @@ -46,6 +46,9 @@ msgstr "Φορτίο 1 λεπτού:" msgid "15 Minute Load:" msgstr "Φορτίο 15 λεπτών:" +msgid "464XLAT (CLAT)" +msgstr "" + msgid "5 Minute Load:" msgstr "Φορτίο 5 λεπτών:" @@ -209,6 +212,9 @@ msgstr "Προσθήκη νέας διεπαφής..." msgid "Additional Hosts files" msgstr "Επιπλέον αρχεία Hosts" +msgid "Additional servers file" +msgstr "" + msgid "Address" msgstr "Διεύθυνση" @@ -341,6 +347,9 @@ msgstr "Διαθέσιμα πακέτα" msgid "Average:" msgstr "Μέσος Όρος:" +msgid "BR / DMR / AFTR" +msgstr "" + msgid "BSSID" msgstr "BSSID" @@ -418,6 +427,11 @@ msgstr "" msgid "Buffered" msgstr "" +msgid "" +"Build/distribution specific feed definitions. This file will NOT be " +"preserved in any sysupgrade." +msgstr "" + msgid "Buttons" msgstr "Κουμπιά" @@ -576,6 +590,14 @@ msgid "Custom delegated IPv6-prefix" msgstr "" msgid "" +"Custom feed definitions, e.g. private feeds. This file can be preserved in a " +"sysupgrade." +msgstr "" + +msgid "Custom feeds" +msgstr "" + +msgid "" "Customizes the behaviour of the device LEDs if possible." msgstr "" @@ -674,6 +696,12 @@ msgstr "Συσκευή" msgid "Device Configuration" msgstr "Παραμετροποίηση Συσκευής" +msgid "Device is rebooting..." +msgstr "" + +msgid "Device unreachable" +msgstr "" + msgid "Diagnostics" msgstr "Διαγνωστικά" @@ -714,6 +742,9 @@ msgstr "Βελτιστοποίηση Απόστασης" msgid "Distance to farthest network member in meters." msgstr "Απόσταση σε μέτρα από το πιο απομακρυσμένο μέλος του δικτύου." +msgid "Distribution feeds" +msgstr "" + msgid "Diversity" msgstr "Διαφορική Λήψη" @@ -791,6 +822,9 @@ msgstr "" "Δυναμική απόδοση DHCP διευθύνσεων στους πελάτες. Σε περίπτωση " "απενεργοποίησης, μόνο πελάτες με στατικα leases θα εξυπηρετούνται." +msgid "EA-bits length" +msgstr "" + msgid "EAP-Method" msgstr "Μέθοδος EAP" @@ -820,9 +854,6 @@ msgstr "Ενεργοποίηση STPRAM." -msgid "Ignore Hosts files" -msgstr "" +msgid "Ignore /etc/hosts" +msgstr "Αγνόησε /etc/hosts" msgid "Ignore interface" msgstr "Αγνόησε διεπαφή" @@ -1243,6 +1283,11 @@ msgstr "" msgid "In" msgstr "Είσοδος" +msgid "" +"In order to prevent unauthorized access to the system, your request has been " +"blocked. Click \"Continue »\" below to return to the previous page." +msgstr "" + msgid "Inactivity timeout" msgstr "" @@ -1512,6 +1557,9 @@ msgstr "MAC-Φίλτρο" msgid "MAC-List" msgstr "Λίστα MAC" +msgid "MAP / LW4over6" +msgstr "" + msgid "MB/s" msgstr "" @@ -1526,6 +1574,9 @@ msgid "" "below:" msgstr "" +msgid "Manual" +msgstr "" + msgid "Maximum Rate" msgstr "Μέγιστος Ρυθμός" @@ -1637,6 +1688,9 @@ msgstr "Διεύθυνση Multicast" msgid "NAS ID" msgstr "NAS ID" +msgid "NAT64 Prefix" +msgstr "" + msgid "NDP-Proxy" msgstr "" @@ -1867,6 +1921,12 @@ msgstr "PPPoE" msgid "PPtP" msgstr "PPtP" +msgid "PSID offset" +msgstr "" + +msgid "PSID-bits length" +msgstr "" + msgid "Package libiwinfo required!" msgstr "Απαιτείται το πακέτο libiwinfo!" @@ -1894,9 +1954,6 @@ msgstr "Κωδικός Πρόσβασης του Ιδιωτικού Κλειδι msgid "Password successfully changed!" msgstr "Ο κωδικός πρόσβασης άλλαξε επιτυχώς!" -msgid "Path" -msgstr "Διαδρομή" - msgid "Path to CA-Certificate" msgstr "Διαδρομή για Πιστοποιητικό CA" @@ -1933,9 +1990,6 @@ msgstr "Πκτ." msgid "Please enter your username and password." msgstr "Παρακαλώ εισάγετε όνομα χρήστη και κωδικό πρόσβασης." -msgid "Please wait: Device rebooting..." -msgstr "Παρακαλώ περιμένετε: Η συσκευή επανεκκινεί..." - msgid "Policy" msgstr "Πολιτική" @@ -2314,6 +2368,9 @@ msgstr "Σήμα:" msgid "Size" msgstr "Μέγεθος" +msgid "Size (.ipk)" +msgstr "" + msgid "Skip" msgstr "Παράκαμψη" @@ -2573,6 +2630,9 @@ msgstr "" msgid "The selected protocol needs a device assigned" msgstr "" +msgid "The submitted security token is invalid or already expired!" +msgstr "" + msgid "" "The system is erasing the configuration partition now and will reboot itself " "when finished." @@ -2628,6 +2688,12 @@ msgid "This IPv4 address of the relay" msgstr "" msgid "" +"This file may contain lines like 'server=/domain/1.2.3.4' or " +"'server=1.2.3.4' fordomain-specific or full upstream DNS servers." +msgstr "" + +msgid "" "This is a list of shell glob patterns for matching files and directories to " "include during sysupgrade. Modified files in /etc/config/ and certain other " "configurations are automatically preserved." @@ -2943,13 +3009,14 @@ msgstr "" msgid "Waiting for command to complete..." msgstr "" +msgid "Waiting for device..." +msgstr "" + msgid "Warning" msgstr "Προειδοποίηση" -msgid "Warning: There are unsaved changes that will be lost while rebooting!" +msgid "Warning: There are unsaved changes that will get lost on reboot!" msgstr "" -"Προειδοποίηση: Υπάρχουν μη-αποθηκευμένες αλλαγές που θα χαθούν κατά την " -"επανεκκίνηση!" msgid "Whether to create an IPv6 default route over the tunnel" msgstr "" @@ -3181,6 +3248,21 @@ msgstr "ναι" msgid "« Back" msgstr "« Πίσω" +#~ msgid "Enable IPv6 negotiation on the PPP link" +#~ msgstr "Ενεργοποίηση διαπραγμάτευσης IPv6 πάνω στη PPP ζεύξη" + +#~ msgid "Path" +#~ msgstr "Διαδρομή" + +#~ msgid "Please wait: Device rebooting..." +#~ msgstr "Παρακαλώ περιμένετε: Η συσκευή επανεκκινεί..." + +#~ msgid "" +#~ "Warning: There are unsaved changes that will be lost while rebooting!" +#~ msgstr "" +#~ "Προειδοποίηση: Υπάρχουν μη-αποθηκευμένες αλλαγές που θα χαθούν κατά την " +#~ "επανεκκίνηση!" + #~ msgid "Configures this mount as overlay storage for block-extroot" #~ msgstr "" #~ "Ορίζει το συγκεκριμένο σημείο προσάρτησης ως επικαλύπτον αποθηκευτικό " @@ -3851,9 +3933,6 @@ msgstr "« Πίσω" #~ msgid "Here you can configure installed wifi devices." #~ msgstr "Εδώ μπορείτε να ρυθμίσετε τις εγκατεστημένες ασύρματες συσκευές." -#~ msgid "Ignore /etc/hosts" -#~ msgstr "Αγνόησε /etc/hosts" - #~ msgid "Independent (Ad-Hoc)" #~ msgstr "Ανεξάρτητο (Ad-Hoc)" diff --git a/modules/luci-base/po/en/base.po b/modules/luci-base/po/en/base.po index 3ad4b140b..e15ceafc3 100644 --- a/modules/luci-base/po/en/base.po +++ b/modules/luci-base/po/en/base.po @@ -46,6 +46,9 @@ msgstr "1 Minute Load:" msgid "15 Minute Load:" msgstr "15 Minute Load:" +msgid "464XLAT (CLAT)" +msgstr "" + msgid "5 Minute Load:" msgstr "5 Minute Load:" @@ -206,6 +209,9 @@ msgstr "Add new interface..." msgid "Additional Hosts files" msgstr "Additional Hosts files" +msgid "Additional servers file" +msgstr "" + msgid "Address" msgstr "Address" @@ -332,6 +338,9 @@ msgstr "Available packages" msgid "Average:" msgstr "Average:" +msgid "BR / DMR / AFTR" +msgstr "" + msgid "BSSID" msgstr "BSSID" @@ -407,6 +416,11 @@ msgstr "" msgid "Buffered" msgstr "Buffered" +msgid "" +"Build/distribution specific feed definitions. This file will NOT be " +"preserved in any sysupgrade." +msgstr "" + msgid "Buttons" msgstr "Buttons" @@ -563,6 +577,14 @@ msgid "Custom delegated IPv6-prefix" msgstr "" msgid "" +"Custom feed definitions, e.g. private feeds. This file can be preserved in a " +"sysupgrade." +msgstr "" + +msgid "Custom feeds" +msgstr "" + +msgid "" "Customizes the behaviour of the device LEDs if possible." msgstr "" @@ -662,6 +684,12 @@ msgstr "Device" msgid "Device Configuration" msgstr "Device Configuration" +msgid "Device is rebooting..." +msgstr "" + +msgid "Device unreachable" +msgstr "" + msgid "Diagnostics" msgstr "Diagnostics" @@ -700,6 +728,9 @@ msgstr "Distance Optimization" msgid "Distance to farthest network member in meters." msgstr "Distance to farthest network member in meters." +msgid "Distribution feeds" +msgstr "" + msgid "Diversity" msgstr "Diversity" @@ -770,6 +801,9 @@ msgid "" "having static leases will be served." msgstr "" +msgid "EA-bits length" +msgstr "" + msgid "EAP-Method" msgstr "EAP-Method" @@ -799,9 +833,6 @@ msgstr "Enable STP" msgid "Enable HE.net dynamic endpoint update" msgstr "" -msgid "Enable IPv6 negotiation on the PPP link" -msgstr "" - msgid "Enable Jumbo Frame passthrough" msgstr "" @@ -956,6 +987,9 @@ msgstr "" msgid "Force TKIP and CCMP (AES)" msgstr "" +msgid "Form token mismatch" +msgstr "" + msgid "Forward DHCP traffic" msgstr "" @@ -995,6 +1029,9 @@ msgstr "" msgid "General Setup" msgstr "General Setup" +msgid "General options for opkg" +msgstr "" + msgid "Generate archive" msgstr "" @@ -1103,6 +1140,9 @@ msgstr "" msgid "IPv4 only" msgstr "" +msgid "IPv4 prefix" +msgstr "" + msgid "IPv4 prefix length" msgstr "" @@ -1197,8 +1237,8 @@ msgstr "" "slow process as the swap-device cannot be accessed with the high datarates " "of the RAM." -msgid "Ignore Hosts files" -msgstr "" +msgid "Ignore /etc/hosts" +msgstr "Ignore /etc/hosts" msgid "Ignore interface" msgstr "Ignore interface" @@ -1212,6 +1252,11 @@ msgstr "" msgid "In" msgstr "In" +msgid "" +"In order to prevent unauthorized access to the system, your request has been " +"blocked. Click \"Continue »\" below to return to the previous page." +msgstr "" + msgid "Inactivity timeout" msgstr "" @@ -1481,6 +1526,9 @@ msgstr "MAC-Filter" msgid "MAC-List" msgstr "MAC-List" +msgid "MAP / LW4over6" +msgstr "" + msgid "MB/s" msgstr "" @@ -1495,6 +1543,9 @@ msgid "" "below:" msgstr "" +msgid "Manual" +msgstr "" + msgid "Maximum Rate" msgstr "Maximum Rate" @@ -1604,6 +1655,9 @@ msgstr "" msgid "NAS ID" msgstr "NAS ID" +msgid "NAT64 Prefix" +msgstr "" + msgid "NDP-Proxy" msgstr "" @@ -1834,6 +1888,12 @@ msgstr "" msgid "PPtP" msgstr "" +msgid "PSID offset" +msgstr "" + +msgid "PSID-bits length" +msgstr "" + msgid "Package libiwinfo required!" msgstr "" @@ -1861,9 +1921,6 @@ msgstr "Password of Private Key" msgid "Password successfully changed!" msgstr "" -msgid "Path" -msgstr "Path" - msgid "Path to CA-Certificate" msgstr "Path to CA-Certificate" @@ -1900,9 +1957,6 @@ msgstr "Pkts." msgid "Please enter your username and password." msgstr "Please enter your username and password." -msgid "Please wait: Device rebooting..." -msgstr "Please wait: Device rebooting..." - msgid "Policy" msgstr "Policy" @@ -2278,6 +2332,9 @@ msgstr "" msgid "Size" msgstr "Size" +msgid "Size (.ipk)" +msgstr "" + msgid "Skip" msgstr "Skip" @@ -2533,6 +2590,9 @@ msgstr "" msgid "The selected protocol needs a device assigned" msgstr "" +msgid "The submitted security token is invalid or already expired!" +msgstr "" + msgid "" "The system is erasing the configuration partition now and will reboot itself " "when finished." @@ -2588,6 +2648,12 @@ msgid "This IPv4 address of the relay" msgstr "" msgid "" +"This file may contain lines like 'server=/domain/1.2.3.4' or " +"'server=1.2.3.4' fordomain-specific or full upstream DNS servers." +msgstr "" + +msgid "" "This is a list of shell glob patterns for matching files and directories to " "include during sysupgrade. Modified files in /etc/config/ and certain other " "configurations are automatically preserved." @@ -2902,11 +2968,14 @@ msgstr "" msgid "Waiting for command to complete..." msgstr "" +msgid "Waiting for device..." +msgstr "" + msgid "Warning" msgstr "" -msgid "Warning: There are unsaved changes that will be lost while rebooting!" -msgstr "Warning: There are unsaved changes that will be lost while rebooting!" +msgid "Warning: There are unsaved changes that will get lost on reboot!" +msgstr "" msgid "Whether to create an IPv6 default route over the tunnel" msgstr "" @@ -3135,6 +3204,17 @@ msgstr "" msgid "« Back" msgstr "« Back" +#~ msgid "Path" +#~ msgstr "Path" + +#~ msgid "Please wait: Device rebooting..." +#~ msgstr "Please wait: Device rebooting..." + +#~ msgid "" +#~ "Warning: There are unsaved changes that will be lost while rebooting!" +#~ msgstr "" +#~ "Warning: There are unsaved changes that will be lost while rebooting!" + #~ msgid "Cached" #~ msgstr "Cached" @@ -3796,9 +3876,6 @@ msgstr "« Back" #~ "firewall zone of the choosen network.
Uncheck the attach option to " #~ "define a new standalone network for this interface." -#~ msgid "Ignore /etc/hosts" -#~ msgstr "Ignore /etc/hosts" - #~ msgid "Independent (Ad-Hoc)" #~ msgstr "Independent (Ad-Hoc)" diff --git a/modules/luci-base/po/es/base.po b/modules/luci-base/po/es/base.po index 2c3ce94ad..2867229ee 100644 --- a/modules/luci-base/po/es/base.po +++ b/modules/luci-base/po/es/base.po @@ -46,6 +46,9 @@ msgstr "Carga a 1 minuto:" msgid "15 Minute Load:" msgstr "Carga a 15 minutos:" +msgid "464XLAT (CLAT)" +msgstr "" + msgid "5 Minute Load:" msgstr "Carga a 5 minutos:" @@ -210,6 +213,9 @@ msgstr "Añadir nueva interfaz..." msgid "Additional Hosts files" msgstr "Ficheros de máquinas adicionales" +msgid "Additional servers file" +msgstr "" + msgid "Address" msgstr "Dirección" @@ -338,6 +344,9 @@ msgstr "Paquetes disponibles" msgid "Average:" msgstr "Media:" +msgid "BR / DMR / AFTR" +msgstr "" + msgid "BSSID" msgstr "BSSID" @@ -414,6 +423,11 @@ msgstr "Controlador inalámbrico 802.11 BCM%04x" msgid "Buffered" msgstr "En búfer" +msgid "" +"Build/distribution specific feed definitions. This file will NOT be " +"preserved in any sysupgrade." +msgstr "" + msgid "Buttons" msgstr "Botones" @@ -572,6 +586,14 @@ msgid "Custom delegated IPv6-prefix" msgstr "" msgid "" +"Custom feed definitions, e.g. private feeds. This file can be preserved in a " +"sysupgrade." +msgstr "" + +msgid "Custom feeds" +msgstr "" + +msgid "" "Customizes the behaviour of the device LEDs if possible." msgstr "" @@ -671,6 +693,12 @@ msgstr "Dispositivo" msgid "Device Configuration" msgstr "Configuración del dispositivo" +msgid "Device is rebooting..." +msgstr "" + +msgid "Device unreachable" +msgstr "" + msgid "Diagnostics" msgstr "Diagnósticos" @@ -711,6 +739,9 @@ msgstr "Optimización de distancia" msgid "Distance to farthest network member in meters." msgstr "Distancia al miembro de la red mas lejana en metros." +msgid "Distribution feeds" +msgstr "" + msgid "Diversity" msgstr "Diversidad" @@ -785,6 +816,9 @@ msgstr "" "Reparte direcciones DHCP dinámicamente a los clientes. Si se desactiva sólo " "se servirá a clientes con cesiones estáticas." +msgid "EA-bits length" +msgstr "" + msgid "EAP-Method" msgstr "Método EAP" @@ -814,9 +848,6 @@ msgstr "Activar STP" msgid "Enable HE.net dynamic endpoint update" msgstr "Activar actualización dinámica de punto final HE.net" -msgid "Enable IPv6 negotiation on the PPP link" -msgstr "Activar negociación IPv6 en el enlace PPP" - msgid "Enable Jumbo Frame passthrough" msgstr "Activar paso de tramas jumbo" @@ -974,6 +1005,9 @@ msgstr "Forzar TKIP" msgid "Force TKIP and CCMP (AES)" msgstr "Forzar TKIP y CCMP (AES)" +msgid "Form token mismatch" +msgstr "" + msgid "Forward DHCP traffic" msgstr "Retransmitir tráfico DHCP" @@ -1014,6 +1048,9 @@ msgstr "Configuración general" msgid "General Setup" msgstr "Configuración general" +msgid "General options for opkg" +msgstr "" + msgid "Generate archive" msgstr "Generar archivo" @@ -1125,6 +1162,9 @@ msgstr "Máscara de red IPv4" msgid "IPv4 only" msgstr "Sólo IPv4" +msgid "IPv4 prefix" +msgstr "" + msgid "IPv4 prefix length" msgstr "Longitud de prefijo IPv4" @@ -1226,8 +1266,8 @@ msgstr "" "alta velocidad tal y como hace la memoria RAM." -msgid "Ignore Hosts files" -msgstr "Ignorar fichero de máquinas" +msgid "Ignore /etc/hosts" +msgstr "Ignorar /etc/hosts" msgid "Ignore interface" msgstr "Ignorar interfaz" @@ -1241,6 +1281,11 @@ msgstr "Imagen" msgid "In" msgstr "Entrada" +msgid "" +"In order to prevent unauthorized access to the system, your request has been " +"blocked. Click \"Continue »\" below to return to the previous page." +msgstr "" + msgid "Inactivity timeout" msgstr "Espera de inactividad" @@ -1520,6 +1565,9 @@ msgstr "Filtro por dirección MAC" msgid "MAC-List" msgstr "Lista de direcciones MAC" +msgid "MAP / LW4over6" +msgstr "" + msgid "MB/s" msgstr "MB/s" @@ -1534,6 +1582,9 @@ msgid "" "below:" msgstr "" +msgid "Manual" +msgstr "" + msgid "Maximum Rate" msgstr "Ratio Máximo" @@ -1643,6 +1694,9 @@ msgstr "Dirección multicast" msgid "NAS ID" msgstr "NAS ID" +msgid "NAT64 Prefix" +msgstr "" + msgid "NDP-Proxy" msgstr "" @@ -1874,6 +1928,12 @@ msgstr "PPPoE" msgid "PPtP" msgstr "PPtP" +msgid "PSID offset" +msgstr "" + +msgid "PSID-bits length" +msgstr "" + msgid "Package libiwinfo required!" msgstr "¡Se necesita el paquete libiwinfo!" @@ -1901,9 +1961,6 @@ msgstr "Contraseña de la Clave Privada" msgid "Password successfully changed!" msgstr "¡Contraseña cambiada!" -msgid "Path" -msgstr "Ruta (path)" - msgid "Path to CA-Certificate" msgstr "Ruta al Certificado CA" @@ -1940,9 +1997,6 @@ msgstr "Paq." msgid "Please enter your username and password." msgstr "Por favor, introduzca su nombre de usuario y contraseña." -msgid "Please wait: Device rebooting..." -msgstr "Espere por favor: Rearrancando dispositivo..." - msgid "Policy" msgstr "Política" @@ -2335,6 +2389,9 @@ msgstr "Señal:" msgid "Size" msgstr "Tamaño" +msgid "Size (.ipk)" +msgstr "" + msgid "Skip" msgstr "Saltar" @@ -2629,6 +2686,9 @@ msgstr "" msgid "The selected protocol needs a device assigned" msgstr "Este protocolo necesita estar asignado a un dispositivo" +msgid "The submitted security token is invalid or already expired!" +msgstr "" + msgid "" "The system is erasing the configuration partition now and will reboot itself " "when finished." @@ -2689,6 +2749,12 @@ msgid "This IPv4 address of the relay" msgstr "Dirección IPv4 del relé" msgid "" +"This file may contain lines like 'server=/domain/1.2.3.4' or " +"'server=1.2.3.4' fordomain-specific or full upstream DNS servers." +msgstr "" + +msgid "" "This is a list of shell glob patterns for matching files and directories to " "include during sysupgrade. Modified files in /etc/config/ and certain other " "configurations are automatically preserved." @@ -3019,13 +3085,14 @@ msgstr "Esperando a que se realicen los cambios..." msgid "Waiting for command to complete..." msgstr "Esperando a que termine el comando..." +msgid "Waiting for device..." +msgstr "" + msgid "Warning" msgstr "Aviso" -msgid "Warning: There are unsaved changes that will be lost while rebooting!" +msgid "Warning: There are unsaved changes that will get lost on reboot!" msgstr "" -"Advertencia: Hay cambios realizados que no han sido guardados, los mismos se " -"perderán mientras se rearranca!" msgid "Whether to create an IPv6 default route over the tunnel" msgstr "" @@ -3257,6 +3324,24 @@ msgstr "sí" msgid "« Back" msgstr "« Volver" +#~ msgid "Enable IPv6 negotiation on the PPP link" +#~ msgstr "Activar negociación IPv6 en el enlace PPP" + +#~ msgid "Ignore Hosts files" +#~ msgstr "Ignorar fichero de máquinas" + +#~ msgid "Path" +#~ msgstr "Ruta (path)" + +#~ msgid "Please wait: Device rebooting..." +#~ msgstr "Espere por favor: Rearrancando dispositivo..." + +#~ msgid "" +#~ "Warning: There are unsaved changes that will be lost while rebooting!" +#~ msgstr "" +#~ "Advertencia: Hay cambios realizados que no han sido guardados, los mismos " +#~ "se perderán mientras se rearranca!" + #~ msgid "" #~ "Always use 40MHz channels even if the secondary channel overlaps. Using " #~ "this option does not comply with IEEE 802.11n-2009!" @@ -3956,9 +4041,6 @@ msgstr "« Volver" #~ msgid "Here you can configure installed wifi devices." #~ msgstr "Aquí puede configurar los dispositivos Wi-Fi instalados." -#~ msgid "Ignore /etc/hosts" -#~ msgstr "Ignorar /etc/hosts" - #~ msgid "Independent (Ad-Hoc)" #~ msgstr "Independiente (ad hoc) " diff --git a/modules/luci-base/po/fr/base.po b/modules/luci-base/po/fr/base.po index 1d8d22475..b216590d6 100644 --- a/modules/luci-base/po/fr/base.po +++ b/modules/luci-base/po/fr/base.po @@ -46,6 +46,9 @@ msgstr "Charge sur 1 minute :" msgid "15 Minute Load:" msgstr "Charge sur 15 minutes :" +msgid "464XLAT (CLAT)" +msgstr "" + msgid "5 Minute Load:" msgstr "Charge sur 5 minutes :" @@ -212,6 +215,9 @@ msgstr "Ajout d'une nouvelle interface..." msgid "Additional Hosts files" msgstr "Fichiers hosts supplémetaires" +msgid "Additional servers file" +msgstr "" + msgid "Address" msgstr "Adresse" @@ -344,6 +350,9 @@ msgstr "Paquets disponibles" msgid "Average:" msgstr "Moyenne :" +msgid "BR / DMR / AFTR" +msgstr "" + msgid "BSSID" msgstr "BSSID" @@ -419,6 +428,11 @@ msgstr "Contrôleur sans fil Broadcom BCM%04x 802.11" msgid "Buffered" msgstr "Temporisé" +msgid "" +"Build/distribution specific feed definitions. This file will NOT be " +"preserved in any sysupgrade." +msgstr "" + msgid "Buttons" msgstr "Boutons" @@ -579,6 +593,14 @@ msgid "Custom delegated IPv6-prefix" msgstr "" msgid "" +"Custom feed definitions, e.g. private feeds. This file can be preserved in a " +"sysupgrade." +msgstr "" + +msgid "Custom feeds" +msgstr "" + +msgid "" "Customizes the behaviour of the device LEDs if possible." msgstr "" @@ -678,6 +700,12 @@ msgstr "Équipement" msgid "Device Configuration" msgstr "Configuration de l'équipement" +msgid "Device is rebooting..." +msgstr "" + +msgid "Device unreachable" +msgstr "" + msgid "Diagnostics" msgstr "Diagnostics" @@ -718,6 +746,9 @@ msgstr "Optimisation de la distance" msgid "Distance to farthest network member in meters." msgstr "Distance au membre du réseau le plus éloigné, en mètres." +msgid "Distribution feeds" +msgstr "" + msgid "Diversity" msgstr "Diversité" @@ -795,6 +826,9 @@ msgstr "" "Alloue dynamiquement des adresses pour les clients du DHCP. Si désactivé, " "seuls les clients ayant des baux statiques seront gérés." +msgid "EA-bits length" +msgstr "" + msgid "EAP-Method" msgstr "Méthode EAP" @@ -824,9 +858,6 @@ msgstr "Activer le protocole STP" msgid "Enable HE.net dynamic endpoint update" msgstr "Activer la mise à jour dynamique de l'extrémité du tunnel chez HE.net" -msgid "Enable IPv6 negotiation on the PPP link" -msgstr "Activer la négociation IPv6 sur le lien PPP" - msgid "Enable Jumbo Frame passthrough" msgstr "Activer la circulation de très grandes trames (Jumbo)" @@ -986,6 +1017,9 @@ msgstr "Forcer TKIP" msgid "Force TKIP and CCMP (AES)" msgstr "Forcer TKIP et CCMP (AES)" +msgid "Form token mismatch" +msgstr "" + msgid "Forward DHCP traffic" msgstr "Transmettre le trafic DHCP" @@ -1025,6 +1059,9 @@ msgstr "Paramètres généraux" msgid "General Setup" msgstr "Configuration générale" +msgid "General options for opkg" +msgstr "" + msgid "Generate archive" msgstr "Construire l'archive" @@ -1137,6 +1174,9 @@ msgstr "Masque-réseau IPv4" msgid "IPv4 only" msgstr "IPv4 seulement" +msgid "IPv4 prefix" +msgstr "" + msgid "IPv4 prefix length" msgstr "longueur du préfixe IPv4" @@ -1234,8 +1274,8 @@ msgstr "" "d'échange, relevant la quantité de RAM disponible. Ce processus est lent car " "la mémoire d'échange ne peut être accédée aux taux de transfert de la RAM." -msgid "Ignore Hosts files" -msgstr "Ignorer le fichiers Hosts" +msgid "Ignore /etc/hosts" +msgstr "Ignorer /etc/hosts" msgid "Ignore interface" msgstr "Ignorer l'interface" @@ -1249,6 +1289,11 @@ msgstr "Image" msgid "In" msgstr "Entrée" +msgid "" +"In order to prevent unauthorized access to the system, your request has been " +"blocked. Click \"Continue »\" below to return to the previous page." +msgstr "" + msgid "Inactivity timeout" msgstr "Délai d'inactivité" @@ -1534,6 +1579,9 @@ msgstr "Filtrage par adresses MAC" msgid "MAC-List" msgstr "Liste des adresses MAC" +msgid "MAP / LW4over6" +msgstr "" + msgid "MB/s" msgstr "MB/s" @@ -1548,6 +1596,9 @@ msgid "" "below:" msgstr "" +msgid "Manual" +msgstr "" + msgid "Maximum Rate" msgstr "Débit maximum" @@ -1657,6 +1708,9 @@ msgstr "Adresse multidiffusion" msgid "NAS ID" msgstr "NAS ID" +msgid "NAT64 Prefix" +msgstr "" + msgid "NDP-Proxy" msgstr "" @@ -1887,6 +1941,12 @@ msgstr "PPPoE" msgid "PPtP" msgstr "PPtP" +msgid "PSID offset" +msgstr "" + +msgid "PSID-bits length" +msgstr "" + msgid "Package libiwinfo required!" msgstr "Nécessite le paquet libiwinfo !" @@ -1914,9 +1974,6 @@ msgstr "Mot de passe de la clé privée" msgid "Password successfully changed!" msgstr "Mot de passe changé avec succès !" -msgid "Path" -msgstr "Chemin" - msgid "Path to CA-Certificate" msgstr "Chemin de la CA" @@ -1953,9 +2010,6 @@ msgstr "Pqts." msgid "Please enter your username and password." msgstr "Saisissez votre nom d'utilisateur et mot de passe." -msgid "Please wait: Device rebooting..." -msgstr "Patientez s'il vous plaît: équipement en cours de redémarrage..." - msgid "Policy" msgstr "Politique" @@ -2349,6 +2403,9 @@ msgstr "Signal :" msgid "Size" msgstr "Taille" +msgid "Size (.ipk)" +msgstr "" + msgid "Skip" msgstr "Passer au suivant" @@ -2641,6 +2698,9 @@ msgstr "" msgid "The selected protocol needs a device assigned" msgstr "Le protocole sélectionné nécessite l'attribution d'un périphérique" +msgid "The submitted security token is invalid or already expired!" +msgstr "" + msgid "" "The system is erasing the configuration partition now and will reboot itself " "when finished." @@ -2703,6 +2763,12 @@ msgid "This IPv4 address of the relay" msgstr "L'adresse IPv4 du relais" msgid "" +"This file may contain lines like 'server=/domain/1.2.3.4' or " +"'server=1.2.3.4' fordomain-specific or full upstream DNS servers." +msgstr "" + +msgid "" "This is a list of shell glob patterns for matching files and directories to " "include during sysupgrade. Modified files in /etc/config/ and certain other " "configurations are automatically preserved." @@ -3038,13 +3104,14 @@ msgstr "En attente de l'application des changements..." msgid "Waiting for command to complete..." msgstr "En attente de la fin de la commande..." +msgid "Waiting for device..." +msgstr "" + msgid "Warning" msgstr "Attention" -msgid "Warning: There are unsaved changes that will be lost while rebooting!" +msgid "Warning: There are unsaved changes that will get lost on reboot!" msgstr "" -"Attention : il reste des changements non appliqués qui seront perdus après " -"redémarrage !" msgid "Whether to create an IPv6 default route over the tunnel" msgstr "" @@ -3275,6 +3342,24 @@ msgstr "oui" msgid "« Back" msgstr "« Retour" +#~ msgid "Enable IPv6 negotiation on the PPP link" +#~ msgstr "Activer la négociation IPv6 sur le lien PPP" + +#~ msgid "Ignore Hosts files" +#~ msgstr "Ignorer le fichiers Hosts" + +#~ msgid "Path" +#~ msgstr "Chemin" + +#~ msgid "Please wait: Device rebooting..." +#~ msgstr "Patientez s'il vous plaît: équipement en cours de redémarrage..." + +#~ msgid "" +#~ "Warning: There are unsaved changes that will be lost while rebooting!" +#~ msgstr "" +#~ "Attention : il reste des changements non appliqués qui seront perdus " +#~ "après redémarrage !" + #~ msgid "" #~ "Always use 40MHz channels even if the secondary channel overlaps. Using " #~ "this option does not comply with IEEE 802.11n-2009!" @@ -4134,9 +4219,6 @@ msgstr "« Retour" #~ msgid "Here you can configure installed wifi devices." #~ msgstr "Ici vous pouvez configurer les équipements Wi-Fi installés." -#~ msgid "Ignore /etc/hosts" -#~ msgstr "Ignorer /etc/hosts" - #~ msgid "Independent (Ad-Hoc)" #~ msgstr "Ad-Hoc" diff --git a/modules/luci-base/po/he/base.po b/modules/luci-base/po/he/base.po index 237e8689a..30286fa05 100644 --- a/modules/luci-base/po/he/base.po +++ b/modules/luci-base/po/he/base.po @@ -44,6 +44,9 @@ msgstr "עומס במשך דקה:" msgid "15 Minute Load:" msgstr "עומס במשך רבע שעה:" +msgid "464XLAT (CLAT)" +msgstr "" + msgid "5 Minute Load:" msgstr "עומס במשך 5 דקות:" @@ -202,6 +205,9 @@ msgstr "הוסף ממשק חדש..." msgid "Additional Hosts files" msgstr "קבצי מארח נוספים" +msgid "Additional servers file" +msgstr "" + msgid "Address" msgstr "כתובת" @@ -334,6 +340,9 @@ msgstr "חבילות זמינות" msgid "Average:" msgstr "ממוצע:" +msgid "BR / DMR / AFTR" +msgstr "" + msgid "BSSID" msgstr "BSSID" @@ -410,6 +419,11 @@ msgstr "שלט אלחוטי Broadcom BCM%04x 802.11" msgid "Buffered" msgstr "" +msgid "" +"Build/distribution specific feed definitions. This file will NOT be " +"preserved in any sysupgrade." +msgstr "" + msgid "Buttons" msgstr "כפתורים" @@ -557,6 +571,14 @@ msgid "Custom delegated IPv6-prefix" msgstr "" msgid "" +"Custom feed definitions, e.g. private feeds. This file can be preserved in a " +"sysupgrade." +msgstr "" + +msgid "Custom feeds" +msgstr "" + +msgid "" "Customizes the behaviour of the device LEDs if possible." msgstr "" @@ -655,6 +677,12 @@ msgstr "מכשיר" msgid "Device Configuration" msgstr "הגדרות מכשיר" +msgid "Device is rebooting..." +msgstr "" + +msgid "Device unreachable" +msgstr "" + msgid "Diagnostics" msgstr "אבחון" @@ -693,6 +721,9 @@ msgstr "" msgid "Distance to farthest network member in meters." msgstr "מרחק לנק' הרשת הרחוקה ביותר במטרים" +msgid "Distribution feeds" +msgstr "" + msgid "Diversity" msgstr "גיוון" @@ -756,6 +787,9 @@ msgid "" "having static leases will be served." msgstr "" +msgid "EA-bits length" +msgstr "" + msgid "EAP-Method" msgstr "" @@ -785,9 +819,6 @@ msgstr "אפשר STP" msgid "Enable HE.net dynamic endpoint update" msgstr "" -msgid "Enable IPv6 negotiation on the PPP link" -msgstr "" - msgid "Enable Jumbo Frame passthrough" msgstr "" @@ -942,6 +973,9 @@ msgstr "" msgid "Force TKIP and CCMP (AES)" msgstr "" +msgid "Form token mismatch" +msgstr "" + msgid "Forward DHCP traffic" msgstr "" @@ -981,6 +1015,9 @@ msgstr "" msgid "General Setup" msgstr "" +msgid "General options for opkg" +msgstr "" + msgid "Generate archive" msgstr "" @@ -1087,6 +1124,9 @@ msgstr "" msgid "IPv4 only" msgstr "" +msgid "IPv4 prefix" +msgstr "" + msgid "IPv4 prefix length" msgstr "" @@ -1176,7 +1216,7 @@ msgid "" "of the RAM." msgstr "" -msgid "Ignore Hosts files" +msgid "Ignore /etc/hosts" msgstr "" msgid "Ignore interface" @@ -1191,6 +1231,11 @@ msgstr "" msgid "In" msgstr "" +msgid "" +"In order to prevent unauthorized access to the system, your request has been " +"blocked. Click \"Continue »\" below to return to the previous page." +msgstr "" + msgid "Inactivity timeout" msgstr "" @@ -1457,6 +1502,9 @@ msgstr "" msgid "MAC-List" msgstr "" +msgid "MAP / LW4over6" +msgstr "" + msgid "MB/s" msgstr "" @@ -1471,6 +1519,9 @@ msgid "" "below:" msgstr "" +msgid "Manual" +msgstr "" + msgid "Maximum Rate" msgstr "" @@ -1578,6 +1629,9 @@ msgstr "" msgid "NAS ID" msgstr "" +msgid "NAT64 Prefix" +msgstr "" + msgid "NDP-Proxy" msgstr "" @@ -1802,6 +1856,12 @@ msgstr "" msgid "PPtP" msgstr "" +msgid "PSID offset" +msgstr "" + +msgid "PSID-bits length" +msgstr "" + msgid "Package libiwinfo required!" msgstr "" @@ -1829,9 +1889,6 @@ msgstr "" msgid "Password successfully changed!" msgstr "" -msgid "Path" -msgstr "" - msgid "Path to CA-Certificate" msgstr "" @@ -1868,9 +1925,6 @@ msgstr "" msgid "Please enter your username and password." msgstr "אנא הזן את שם המשתמש והסיסמה שלך:" -msgid "Please wait: Device rebooting..." -msgstr "אנא המתן: המכשיר מאותחל מחדש..." - msgid "Policy" msgstr "" @@ -2246,6 +2300,9 @@ msgstr "" msgid "Size" msgstr "" +msgid "Size (.ipk)" +msgstr "" + msgid "Skip" msgstr "" @@ -2503,6 +2560,9 @@ msgstr "" msgid "The selected protocol needs a device assigned" msgstr "" +msgid "The submitted security token is invalid or already expired!" +msgstr "" + msgid "" "The system is erasing the configuration partition now and will reboot itself " "when finished." @@ -2551,6 +2611,12 @@ msgid "This IPv4 address of the relay" msgstr "" msgid "" +"This file may contain lines like 'server=/domain/1.2.3.4' or " +"'server=1.2.3.4' fordomain-specific or full upstream DNS servers." +msgstr "" + +msgid "" "This is a list of shell glob patterns for matching files and directories to " "include during sysupgrade. Modified files in /etc/config/ and certain other " "configurations are automatically preserved." @@ -2860,11 +2926,14 @@ msgstr "" msgid "Waiting for command to complete..." msgstr "" +msgid "Waiting for device..." +msgstr "" + msgid "Warning" msgstr "אזהרה" -msgid "Warning: There are unsaved changes that will be lost while rebooting!" -msgstr "אזהרה: ישנם שינויים שלא נשמרו ויאבדו בעת הפעלה מחדש!" +msgid "Warning: There are unsaved changes that will get lost on reboot!" +msgstr "" msgid "Whether to create an IPv6 default route over the tunnel" msgstr "" @@ -3088,6 +3157,13 @@ msgstr "כן" msgid "« Back" msgstr "<< אחורה" +#~ msgid "Please wait: Device rebooting..." +#~ msgstr "אנא המתן: המכשיר מאותחל מחדש..." + +#~ msgid "" +#~ "Warning: There are unsaved changes that will be lost while rebooting!" +#~ msgstr "אזהרה: ישנם שינויים שלא נשמרו ויאבדו בעת הפעלה מחדש!" + #~ msgid "Cached" #~ msgstr "שמור במטמון" diff --git a/modules/luci-base/po/hu/base.po b/modules/luci-base/po/hu/base.po index 975bf2dfc..e1aa398b4 100644 --- a/modules/luci-base/po/hu/base.po +++ b/modules/luci-base/po/hu/base.po @@ -44,6 +44,9 @@ msgstr "Terhelés (utolsó 1 perc):" msgid "15 Minute Load:" msgstr "Terhelés (utolsó 15 perc):" +msgid "464XLAT (CLAT)" +msgstr "" + msgid "5 Minute Load:" msgstr "Terhelés (utolsó 5 perc):" @@ -207,6 +210,9 @@ msgstr "Új interfész hozzáadása..." msgid "Additional Hosts files" msgstr "További 'hosts' fájlok" +msgid "Additional servers file" +msgstr "" + msgid "Address" msgstr "Cím" @@ -337,6 +343,9 @@ msgstr "Elérhető csomagok" msgid "Average:" msgstr "Átlag:" +msgid "BR / DMR / AFTR" +msgstr "" + msgid "BSSID" msgstr "BSSID" @@ -413,6 +422,11 @@ msgstr "Broadcom BCM%04x 802.11 vezeték-nélküli vezérlő" msgid "Buffered" msgstr "Átmeneti tárban van" +msgid "" +"Build/distribution specific feed definitions. This file will NOT be " +"preserved in any sysupgrade." +msgstr "" + msgid "Buttons" msgstr "Gombok" @@ -574,6 +588,14 @@ msgid "Custom delegated IPv6-prefix" msgstr "" msgid "" +"Custom feed definitions, e.g. private feeds. This file can be preserved in a " +"sysupgrade." +msgstr "" + +msgid "Custom feeds" +msgstr "" + +msgid "" "Customizes the behaviour of the device LEDs if possible." msgstr "" @@ -672,6 +694,12 @@ msgstr "Eszköz" msgid "Device Configuration" msgstr "Eszköz beállítások" +msgid "Device is rebooting..." +msgstr "" + +msgid "Device unreachable" +msgstr "" + msgid "Diagnostics" msgstr "Diagnosztika" @@ -712,6 +740,9 @@ msgstr "Távolság optimalizáció" msgid "Distance to farthest network member in meters." msgstr "A hálózat legtávolabbi tagjának távolsága méterben." +msgid "Distribution feeds" +msgstr "" + msgid "Diversity" msgstr "Diverzitás" @@ -788,6 +819,9 @@ msgstr "" "esetén csak a statikus DHCP bérlettel rendelkező kliensek lesznek " "kiszolgálva." +msgid "EA-bits length" +msgstr "" + msgid "EAP-Method" msgstr "EAP metódus" @@ -817,9 +851,6 @@ msgstr "STP engedélyezése" msgid "Enable HE.net dynamic endpoint update" msgstr "HE.net dinamikus végpont frissítésének engedélyezése" -msgid "Enable IPv6 negotiation on the PPP link" -msgstr "IPv6 egyeztetés engedélyezése a PPP linken" - msgid "Enable Jumbo Frame passthrough" msgstr "Óriás keretek átengedésének engedélyezése" @@ -977,6 +1008,9 @@ msgstr "TKIP kényszerítése" msgid "Force TKIP and CCMP (AES)" msgstr "TKIP és CCMP (AES) kényszerítése" +msgid "Form token mismatch" +msgstr "" + msgid "Forward DHCP traffic" msgstr "DHCP forgalom továbbítás" @@ -1016,6 +1050,9 @@ msgstr "Általános beállítások" msgid "General Setup" msgstr "Általános beállítások" +msgid "General options for opkg" +msgstr "" + msgid "Generate archive" msgstr "Archívum készítése" @@ -1126,6 +1163,9 @@ msgstr "IPv4 hálózati maszk" msgid "IPv4 only" msgstr "csak IPv4" +msgid "IPv4 prefix" +msgstr "" + msgid "IPv4 prefix length" msgstr "IPv4 prefix hossza" @@ -1224,8 +1264,8 @@ msgstr "" "nagyon lassú folyamat mivel a swap-eszköz nem érhető el akkora sebességgel " "mint a RAM." -msgid "Ignore Hosts files" -msgstr "A hosts fájlok figyelmen kívül hagyása" +msgid "Ignore /etc/hosts" +msgstr "" msgid "Ignore interface" msgstr "Interfész figyelmen kívül hagyása" @@ -1239,6 +1279,11 @@ msgstr "Image" msgid "In" msgstr "Be" +msgid "" +"In order to prevent unauthorized access to the system, your request has been " +"blocked. Click \"Continue »\" below to return to the previous page." +msgstr "" + msgid "Inactivity timeout" msgstr "Inaktivitási időtúllépés" @@ -1523,6 +1568,9 @@ msgstr "MAC-szűrő" msgid "MAC-List" msgstr "MAC-lista" +msgid "MAP / LW4over6" +msgstr "" + msgid "MB/s" msgstr "MB/s" @@ -1537,6 +1585,9 @@ msgid "" "below:" msgstr "" +msgid "Manual" +msgstr "" + msgid "Maximum Rate" msgstr "Maximális sebesség" @@ -1646,6 +1697,9 @@ msgstr "Multicast cím" msgid "NAS ID" msgstr "NAS azonosító" +msgid "NAT64 Prefix" +msgstr "" + msgid "NDP-Proxy" msgstr "" @@ -1877,6 +1931,12 @@ msgstr "PPPoE" msgid "PPtP" msgstr "PPtP" +msgid "PSID offset" +msgstr "" + +msgid "PSID-bits length" +msgstr "" + msgid "Package libiwinfo required!" msgstr "A libiwinfo csomag szükséges!" @@ -1904,9 +1964,6 @@ msgstr "A privát kulcsh jelszava" msgid "Password successfully changed!" msgstr "A jelszó megváltoztatása sikeres!" -msgid "Path" -msgstr "" - msgid "Path to CA-Certificate" msgstr "CA tanúsítvány elérési útja" @@ -1943,9 +2000,6 @@ msgstr "csom." msgid "Please enter your username and password." msgstr "Adja meg a felhasználónevét és a jelszavát." -msgid "Please wait: Device rebooting..." -msgstr "Kérem várjon: az eszköz újraindul..." - msgid "Policy" msgstr "Szabály" @@ -2340,6 +2394,9 @@ msgstr "Jel:" msgid "Size" msgstr "Méret" +msgid "Size (.ipk)" +msgstr "" + msgid "Skip" msgstr "Ugrás" @@ -2632,6 +2689,9 @@ msgstr "" msgid "The selected protocol needs a device assigned" msgstr "A kiválasztott protokoll eszköz hozzárendelést igényel" +msgid "The submitted security token is invalid or already expired!" +msgstr "" + msgid "" "The system is erasing the configuration partition now and will reboot itself " "when finished." @@ -2692,6 +2752,12 @@ msgid "This IPv4 address of the relay" msgstr "Az átjátszó IPV4 címe" msgid "" +"This file may contain lines like 'server=/domain/1.2.3.4' or " +"'server=1.2.3.4' fordomain-specific or full upstream DNS servers." +msgstr "" + +msgid "" "This is a list of shell glob patterns for matching files and directories to " "include during sysupgrade. Modified files in /etc/config/ and certain other " "configurations are automatically preserved." @@ -3026,13 +3092,14 @@ msgstr "Várakozás a változtatások alkalmazására..." msgid "Waiting for command to complete..." msgstr "Várakozás a parancs befejezésére..." +msgid "Waiting for device..." +msgstr "" + msgid "Warning" msgstr "Figyelmeztetés" -msgid "Warning: There are unsaved changes that will be lost while rebooting!" +msgid "Warning: There are unsaved changes that will get lost on reboot!" msgstr "" -"Figyelem: vannak el nem mentett változások melyek el fognak veszni az " -"újraindítás során!" msgid "Whether to create an IPv6 default route over the tunnel" msgstr "" @@ -3264,6 +3331,21 @@ msgstr "igen" msgid "« Back" msgstr "« Vissza" +#~ msgid "Enable IPv6 negotiation on the PPP link" +#~ msgstr "IPv6 egyeztetés engedélyezése a PPP linken" + +#~ msgid "Ignore Hosts files" +#~ msgstr "A hosts fájlok figyelmen kívül hagyása" + +#~ msgid "Please wait: Device rebooting..." +#~ msgstr "Kérem várjon: az eszköz újraindul..." + +#~ msgid "" +#~ "Warning: There are unsaved changes that will be lost while rebooting!" +#~ msgstr "" +#~ "Figyelem: vannak el nem mentett változások melyek el fognak veszni az " +#~ "újraindítás során!" + #~ msgid "" #~ "Always use 40MHz channels even if the secondary channel overlaps. Using " #~ "this option does not comply with IEEE 802.11n-2009!" diff --git a/modules/luci-base/po/it/base.po b/modules/luci-base/po/it/base.po index 771025e27..93cfef5d1 100644 --- a/modules/luci-base/po/it/base.po +++ b/modules/luci-base/po/it/base.po @@ -46,6 +46,9 @@ msgstr "Carico in 1 minuto:" msgid "15 Minute Load:" msgstr "Carico in 15 minut:" +msgid "464XLAT (CLAT)" +msgstr "" + msgid "5 Minute Load:" msgstr "Carico in 5 minuti:" @@ -214,6 +217,9 @@ msgstr "Aggiungi nuova interfaccia..." msgid "Additional Hosts files" msgstr "File Hosts Aggiuntivo" +msgid "Additional servers file" +msgstr "" + msgid "Address" msgstr "Indirizzo" @@ -327,7 +333,7 @@ msgid "Authorization Required" msgstr "Autorizzazione richiesta" msgid "Auto Refresh" -msgstr "Aggironamento Automatico" +msgstr "Aggiornamento Automatico" msgid "Automatic" msgstr "" @@ -344,6 +350,9 @@ msgstr "Pacchetti disponibili" msgid "Average:" msgstr "Media:" +msgid "BR / DMR / AFTR" +msgstr "" + msgid "BSSID" msgstr "BSSID" @@ -419,6 +428,11 @@ msgstr "Dispositivo Wireless Broadcom BCM%04x 802.11" msgid "Buffered" msgstr "Buffered" +msgid "" +"Build/distribution specific feed definitions. This file will NOT be " +"preserved in any sysupgrade." +msgstr "" + msgid "Buttons" msgstr "Pulsanti" @@ -577,6 +591,14 @@ msgid "Custom delegated IPv6-prefix" msgstr "" msgid "" +"Custom feed definitions, e.g. private feeds. This file can be preserved in a " +"sysupgrade." +msgstr "" + +msgid "Custom feeds" +msgstr "" + +msgid "" "Customizes the behaviour of the device LEDs if possible." msgstr "" @@ -676,6 +698,12 @@ msgstr "Dispositivo" msgid "Device Configuration" msgstr "Configurazione del dispositivo" +msgid "Device is rebooting..." +msgstr "" + +msgid "Device unreachable" +msgstr "" + msgid "Diagnostics" msgstr "Diagnostica" @@ -716,6 +744,9 @@ msgstr "Ottimizzazione distanza" msgid "Distance to farthest network member in meters." msgstr "Distanza del membro più lontano della rete in metri." +msgid "Distribution feeds" +msgstr "" + msgid "Diversity" msgstr "Diversità" @@ -789,6 +820,9 @@ msgstr "" "Fornisci dinamicamente gli indirizzi DHCP ai client. Se disabilitato, solo i " "client con un indirizzo statico saranno serviti." +msgid "EA-bits length" +msgstr "" + msgid "EAP-Method" msgstr "Metodo EAP" @@ -818,9 +852,6 @@ msgstr "Abilita STP" msgid "Enable HE.net dynamic endpoint update" msgstr "Abilitazione aggiornamento endpoint dinamico HE.net" -msgid "Enable IPv6 negotiation on the PPP link" -msgstr "Attiva la negoziazione IPv6 sul collegamento PPP" - msgid "Enable Jumbo Frame passthrough" msgstr "Abilita Jumbo Frame passthrough" @@ -977,6 +1008,9 @@ msgstr "Forza TKIP" msgid "Force TKIP and CCMP (AES)" msgstr "Forza TKIP e CCMP (AES)" +msgid "Form token mismatch" +msgstr "" + msgid "Forward DHCP traffic" msgstr "Inoltra il traffico DHCP" @@ -1016,6 +1050,9 @@ msgstr "Opzioni Generali" msgid "General Setup" msgstr "Impostazioni Generali" +msgid "General options for opkg" +msgstr "" + msgid "Generate archive" msgstr "Genera Archivio" @@ -1129,6 +1166,9 @@ msgstr "Maschera rete IPv4" msgid "IPv4 only" msgstr "Solo IPv4" +msgid "IPv4 prefix" +msgstr "" + msgid "IPv4 prefix length" msgstr "Lunghezza prefisso IPv4" @@ -1229,8 +1269,8 @@ msgstr "" "dispositivo di swap non può essere acceduto alle alte velocità della RAM." -msgid "Ignore Hosts files" -msgstr "Ignora i files Hosts" +msgid "Ignore /etc/hosts" +msgstr "Ignora /etc/hosts" msgid "Ignore interface" msgstr "Ignora interfaccia" @@ -1244,6 +1284,11 @@ msgstr "Immagine" msgid "In" msgstr "In" +msgid "" +"In order to prevent unauthorized access to the system, your request has been " +"blocked. Click \"Continue »\" below to return to the previous page." +msgstr "" + msgid "Inactivity timeout" msgstr "Tempo di Inattività" @@ -1521,6 +1566,9 @@ msgstr "Filtro MAC" msgid "MAC-List" msgstr "Lista MAC" +msgid "MAP / LW4over6" +msgstr "" + msgid "MB/s" msgstr "" @@ -1535,6 +1583,9 @@ msgid "" "below:" msgstr "" +msgid "Manual" +msgstr "" + msgid "Maximum Rate" msgstr "Velocità massima" @@ -1644,6 +1695,9 @@ msgstr "" msgid "NAS ID" msgstr "ID della NAS" +msgid "NAT64 Prefix" +msgstr "" + msgid "NDP-Proxy" msgstr "" @@ -1873,6 +1927,12 @@ msgstr "" msgid "PPtP" msgstr "" +msgid "PSID offset" +msgstr "" + +msgid "PSID-bits length" +msgstr "" + msgid "Package libiwinfo required!" msgstr "E' richiesto il pacchetto libiwinfo!" @@ -1900,9 +1960,6 @@ msgstr "Password della chiave privata" msgid "Password successfully changed!" msgstr "Password cambiata con successo!" -msgid "Path" -msgstr "Percorso" - msgid "Path to CA-Certificate" msgstr "Percorso al certificato CA" @@ -1939,9 +1996,6 @@ msgstr "" msgid "Please enter your username and password." msgstr "Per favore inserisci il tuo username e la password." -msgid "Please wait: Device rebooting..." -msgstr "Per favore attendi: Riavvio del dispositivo..." - msgid "Policy" msgstr "" @@ -2320,6 +2374,9 @@ msgstr "" msgid "Size" msgstr "Dimensione" +msgid "Size (.ipk)" +msgstr "" + msgid "Skip" msgstr "Salta" @@ -2598,6 +2655,9 @@ msgstr "" msgid "The selected protocol needs a device assigned" msgstr "" +msgid "The submitted security token is invalid or already expired!" +msgstr "" + msgid "" "The system is erasing the configuration partition now and will reboot itself " "when finished." @@ -2653,6 +2713,12 @@ msgid "This IPv4 address of the relay" msgstr "" msgid "" +"This file may contain lines like 'server=/domain/1.2.3.4' or " +"'server=1.2.3.4' fordomain-specific or full upstream DNS servers." +msgstr "" + +msgid "" "This is a list of shell glob patterns for matching files and directories to " "include during sysupgrade. Modified files in /etc/config/ and certain other " "configurations are automatically preserved." @@ -2977,12 +3043,14 @@ msgstr "In attesa delle modifiche da applicare ..." msgid "Waiting for command to complete..." msgstr "In attesa del comando da completare..." +msgid "Waiting for device..." +msgstr "" + msgid "Warning" msgstr "Avviso" -msgid "Warning: There are unsaved changes that will be lost while rebooting!" +msgid "Warning: There are unsaved changes that will get lost on reboot!" msgstr "" -"Attenzione: Ci sono modifiche non salvate che verranno persi riavviando!" msgid "Whether to create an IPv6 default route over the tunnel" msgstr "" @@ -3216,6 +3284,23 @@ msgstr "Sì" msgid "« Back" msgstr "« Indietro" +#~ msgid "Enable IPv6 negotiation on the PPP link" +#~ msgstr "Attiva la negoziazione IPv6 sul collegamento PPP" + +#~ msgid "Ignore Hosts files" +#~ msgstr "Ignora i files Hosts" + +#~ msgid "Path" +#~ msgstr "Percorso" + +#~ msgid "Please wait: Device rebooting..." +#~ msgstr "Per favore attendi: Riavvio del dispositivo..." + +#~ msgid "" +#~ "Warning: There are unsaved changes that will be lost while rebooting!" +#~ msgstr "" +#~ "Attenzione: Ci sono modifiche non salvate che verranno persi riavviando!" + #~ msgid "" #~ "Always use 40MHz channels even if the secondary channel overlaps. Using " #~ "this option does not comply with IEEE 802.11n-2009!" @@ -3943,9 +4028,6 @@ msgstr "« Indietro" #~ msgid "Here you can configure installed wifi devices." #~ msgstr "Qui puoi configurare i tuoi dispositivi wireless installati." -#~ msgid "Ignore /etc/hosts" -#~ msgstr "Ignora /etc/hosts" - #~ msgid "Independent (Ad-Hoc)" #~ msgstr "Independente (Ad-Hoc)" diff --git a/modules/luci-base/po/ja/base.po b/modules/luci-base/po/ja/base.po index 8bea7644e..39b81e370 100644 --- a/modules/luci-base/po/ja/base.po +++ b/modules/luci-base/po/ja/base.po @@ -46,6 +46,9 @@ msgstr "過去1分の負荷:" msgid "15 Minute Load:" msgstr "過去15分の負荷:" +msgid "464XLAT (CLAT)" +msgstr "" + msgid "5 Minute Load:" msgstr "過去5分の負荷:" @@ -205,6 +208,9 @@ msgstr "インターフェースの新規作成..." msgid "Additional Hosts files" msgstr "追加のホストファイル" +msgid "Additional servers file" +msgstr "" + msgid "Address" msgstr "アドレス" @@ -331,6 +337,9 @@ msgstr "インストール可能なパッケージ" msgid "Average:" msgstr "平均値:" +msgid "BR / DMR / AFTR" +msgstr "" + msgid "BSSID" msgstr "BSSID" @@ -406,6 +415,11 @@ msgstr "Broadcom BCM%04x 802.11 無線LANコントローラ" msgid "Buffered" msgstr "バッファ" +msgid "" +"Build/distribution specific feed definitions. This file will NOT be " +"preserved in any sysupgrade." +msgstr "" + msgid "Buttons" msgstr "ボタン" @@ -565,6 +579,14 @@ msgid "Custom delegated IPv6-prefix" msgstr "" msgid "" +"Custom feed definitions, e.g. private feeds. This file can be preserved in a " +"sysupgrade." +msgstr "" + +msgid "Custom feeds" +msgstr "" + +msgid "" "Customizes the behaviour of the device LEDs if possible." msgstr "" @@ -663,6 +685,12 @@ msgstr "デバイス" msgid "Device Configuration" msgstr "デバイス設定" +msgid "Device is rebooting..." +msgstr "" + +msgid "Device unreachable" +msgstr "" + msgid "Diagnostics" msgstr "診断機能" @@ -703,6 +731,9 @@ msgstr "距離の最適化" msgid "Distance to farthest network member in meters." msgstr "最も遠い端末との距離(メートル)を設定してください。" +msgid "Distribution feeds" +msgstr "" + msgid "Diversity" msgstr "ダイバシティ" @@ -777,6 +808,9 @@ msgstr "" "クライアントに対して動的にDHCPアドレスを割り振ります。無効に設定した場合、静" "的リースのみを行います。" +msgid "EA-bits length" +msgstr "" + msgid "EAP-Method" msgstr "EAPメソッド" @@ -806,9 +840,6 @@ msgstr "STPを有効にする" msgid "Enable HE.net dynamic endpoint update" msgstr "HE.netの動的endpoint更新を有効にします" -msgid "Enable IPv6 negotiation on the PPP link" -msgstr "PPPリンクのIPv6ネゴシエーションを有効にする" - msgid "Enable Jumbo Frame passthrough" msgstr "ジャンボフレーム・パススルーを有効にする" @@ -967,6 +998,9 @@ msgstr "TKIP を使用" msgid "Force TKIP and CCMP (AES)" msgstr "TKIP 及びCCMP (AES) を使用" +msgid "Form token mismatch" +msgstr "" + msgid "Forward DHCP traffic" msgstr "DHCPトラフィックを転送する" @@ -1006,6 +1040,9 @@ msgstr "一般設定" msgid "General Setup" msgstr "一般設定" +msgid "General options for opkg" +msgstr "" + msgid "Generate archive" msgstr "バックアップアーカイブの作成" @@ -1114,6 +1151,9 @@ msgstr "IPv4 ネットマスク" msgid "IPv4 only" msgstr "IPv4のみ" +msgid "IPv4 prefix" +msgstr "" + msgid "IPv4 prefix length" msgstr "IPv4 プレフィクス長" @@ -1210,8 +1250,8 @@ msgstr "" "title=\"Random Access Memory\">RAMにアクセスすることができなくなる恐れ" "があります。" -msgid "Ignore Hosts files" -msgstr "ホストファイルを無視する" +msgid "Ignore /etc/hosts" +msgstr "/etc/hostsを無視" msgid "Ignore interface" msgstr "インターフェースを無視する" @@ -1225,6 +1265,11 @@ msgstr "イメージ" msgid "In" msgstr "イン" +msgid "" +"In order to prevent unauthorized access to the system, your request has been " +"blocked. Click \"Continue »\" below to return to the previous page." +msgstr "" + msgid "Inactivity timeout" msgstr "未使用時タイムアウト" @@ -1499,6 +1544,9 @@ msgstr "MAC-フィルタ" msgid "MAC-List" msgstr "MAC-リスト" +msgid "MAP / LW4over6" +msgstr "" + msgid "MB/s" msgstr "MB/s" @@ -1513,6 +1561,9 @@ msgid "" "below:" msgstr "" +msgid "Manual" +msgstr "" + msgid "Maximum Rate" msgstr "最大レート" @@ -1622,6 +1673,9 @@ msgstr "マルチキャストアドレス" msgid "NAS ID" msgstr "NAS ID" +msgid "NAT64 Prefix" +msgstr "" + msgid "NDP-Proxy" msgstr "" @@ -1854,6 +1908,12 @@ msgstr "PPPoE" msgid "PPtP" msgstr "PPtP" +msgid "PSID offset" +msgstr "" + +msgid "PSID-bits length" +msgstr "" + msgid "Package libiwinfo required!" msgstr "libiwinfo パッケージをインストールしてください!" @@ -1881,9 +1941,6 @@ msgstr "秘密鍵のパスワード" msgid "Password successfully changed!" msgstr "パスワードを変更しました" -msgid "Path" -msgstr "パス" - msgid "Path to CA-Certificate" msgstr "CA証明書のパス" @@ -1920,9 +1977,6 @@ msgstr "パケット" msgid "Please enter your username and password." msgstr "ユーザー名とパスワードを入力してください。" -msgid "Please wait: Device rebooting..." -msgstr "しばらくお待ちください: 再起動中です..." - msgid "Policy" msgstr "ポリシー" @@ -2318,6 +2372,9 @@ msgstr "信号:" msgid "Size" msgstr "サイズ" +msgid "Size (.ipk)" +msgstr "" + msgid "Skip" msgstr "スキップ" @@ -2596,6 +2653,9 @@ msgstr "" msgid "The selected protocol needs a device assigned" msgstr "選択中のプロトコルを使用する場合、デバイスを設定する必要があります" +msgid "The submitted security token is invalid or already expired!" +msgstr "" + msgid "" "The system is erasing the configuration partition now and will reboot itself " "when finished." @@ -2656,6 +2716,12 @@ msgid "This IPv4 address of the relay" msgstr "" msgid "" +"This file may contain lines like 'server=/domain/1.2.3.4' or " +"'server=1.2.3.4' fordomain-specific or full upstream DNS servers." +msgstr "" + +msgid "" "This is a list of shell glob patterns for matching files and directories to " "include during sysupgrade. Modified files in /etc/config/ and certain other " "configurations are automatically preserved." @@ -2990,11 +3056,14 @@ msgstr "変更を適用中です..." msgid "Waiting for command to complete..." msgstr "コマンド実行中です..." +msgid "Waiting for device..." +msgstr "" + msgid "Warning" msgstr "警告" -msgid "Warning: There are unsaved changes that will be lost while rebooting!" -msgstr "警告: 保存されていない変更は再起動後に失われます!" +msgid "Warning: There are unsaved changes that will get lost on reboot!" +msgstr "" msgid "Whether to create an IPv6 default route over the tunnel" msgstr "" @@ -3225,6 +3294,22 @@ msgstr "はい" msgid "« Back" msgstr "« 戻る" +#~ msgid "Enable IPv6 negotiation on the PPP link" +#~ msgstr "PPPリンクのIPv6ネゴシエーションを有効にする" + +#~ msgid "Ignore Hosts files" +#~ msgstr "ホストファイルを無視する" + +#~ msgid "Path" +#~ msgstr "パス" + +#~ msgid "Please wait: Device rebooting..." +#~ msgstr "しばらくお待ちください: 再起動中です..." + +#~ msgid "" +#~ "Warning: There are unsaved changes that will be lost while rebooting!" +#~ msgstr "警告: 保存されていない変更は再起動後に失われます!" + #~ msgid "" #~ "Always use 40MHz channels even if the secondary channel overlaps. Using " #~ "this option does not comply with IEEE 802.11n-2009!" @@ -4077,9 +4162,6 @@ msgstr "« 戻る" #~ msgid "Here you can configure installed wifi devices." #~ msgstr "ここではインストールされた無線デバイスの設定を行うことが出来ます。" -#~ msgid "Ignore /etc/hosts" -#~ msgstr "/etc/hostsを無視" - #~ msgid "Independent (Ad-Hoc)" #~ msgstr "アドホック" diff --git a/modules/luci-base/po/ms/base.po b/modules/luci-base/po/ms/base.po index d2a34dfbe..e297261c7 100644 --- a/modules/luci-base/po/ms/base.po +++ b/modules/luci-base/po/ms/base.po @@ -46,6 +46,9 @@ msgstr "" msgid "15 Minute Load:" msgstr "" +msgid "464XLAT (CLAT)" +msgstr "" + msgid "5 Minute Load:" msgstr "" @@ -196,6 +199,9 @@ msgstr "" msgid "Additional Hosts files" msgstr "" +msgid "Additional servers file" +msgstr "" + msgid "Address" msgstr "" @@ -321,6 +327,9 @@ msgstr "" msgid "Average:" msgstr "" +msgid "BR / DMR / AFTR" +msgstr "" + msgid "BSSID" msgstr "" @@ -393,6 +402,11 @@ msgstr "" msgid "Buffered" msgstr "" +msgid "" +"Build/distribution specific feed definitions. This file will NOT be " +"preserved in any sysupgrade." +msgstr "" + msgid "Buttons" msgstr "Butang" @@ -541,6 +555,14 @@ msgid "Custom delegated IPv6-prefix" msgstr "" msgid "" +"Custom feed definitions, e.g. private feeds. This file can be preserved in a " +"sysupgrade." +msgstr "" + +msgid "Custom feeds" +msgstr "" + +msgid "" "Customizes the behaviour of the device LEDs if possible." msgstr "Mengkustomisasi perilaku peranti LED jika mungkin." @@ -635,6 +657,12 @@ msgstr "Alat" msgid "Device Configuration" msgstr "" +msgid "Device is rebooting..." +msgstr "" + +msgid "Device unreachable" +msgstr "" + msgid "Diagnostics" msgstr "" @@ -673,6 +701,9 @@ msgstr "Jarak Optimasi" msgid "Distance to farthest network member in meters." msgstr "Jarak ke rangkaian terjauh ahli dalam meter." +msgid "Distribution feeds" +msgstr "" + msgid "Diversity" msgstr "Keanekaragaman" @@ -740,6 +771,9 @@ msgid "" "having static leases will be served." msgstr "" +msgid "EA-bits length" +msgstr "" + msgid "EAP-Method" msgstr "EAP-Kaedah" @@ -769,9 +803,6 @@ msgstr "Mengaktifkan STP" msgid "Enable HE.net dynamic endpoint update" msgstr "" -msgid "Enable IPv6 negotiation on the PPP link" -msgstr "" - msgid "Enable Jumbo Frame passthrough" msgstr "" @@ -926,6 +957,9 @@ msgstr "" msgid "Force TKIP and CCMP (AES)" msgstr "" +msgid "Form token mismatch" +msgstr "" + msgid "Forward DHCP traffic" msgstr "" @@ -965,6 +999,9 @@ msgstr "" msgid "General Setup" msgstr "Setup Umum" +msgid "General options for opkg" +msgstr "" + msgid "Generate archive" msgstr "" @@ -1073,6 +1110,9 @@ msgstr "" msgid "IPv4 only" msgstr "" +msgid "IPv4 prefix" +msgstr "" + msgid "IPv4 prefix length" msgstr "" @@ -1167,8 +1207,8 @@ msgstr "" "sangat lambat kerana peranti-penukar tidak boleh diakses dengan datarates " "yang tinggi pada RAM." -msgid "Ignore Hosts files" -msgstr "" +msgid "Ignore /etc/hosts" +msgstr "Mengabaikan /etc/hosts" msgid "Ignore interface" msgstr "Abaikan antara muka" @@ -1182,6 +1222,11 @@ msgstr "" msgid "In" msgstr "Masuk" +msgid "" +"In order to prevent unauthorized access to the system, your request has been " +"blocked. Click \"Continue »\" below to return to the previous page." +msgstr "" + msgid "Inactivity timeout" msgstr "" @@ -1452,6 +1497,9 @@ msgstr "Penapis MAC" msgid "MAC-List" msgstr "Senarai MAC" +msgid "MAP / LW4over6" +msgstr "" + msgid "MB/s" msgstr "" @@ -1466,6 +1514,9 @@ msgid "" "below:" msgstr "" +msgid "Manual" +msgstr "" + msgid "Maximum Rate" msgstr "Rate Maksimum" @@ -1577,6 +1628,9 @@ msgstr "" msgid "NAS ID" msgstr "NAS ID" +msgid "NAT64 Prefix" +msgstr "" + msgid "NDP-Proxy" msgstr "" @@ -1806,6 +1860,12 @@ msgstr "" msgid "PPtP" msgstr "" +msgid "PSID offset" +msgstr "" + +msgid "PSID-bits length" +msgstr "" + msgid "Package libiwinfo required!" msgstr "" @@ -1833,9 +1893,6 @@ msgstr "Kata Laluan Kunci Swasta" msgid "Password successfully changed!" msgstr "" -msgid "Path" -msgstr "Path" - msgid "Path to CA-Certificate" msgstr "Path ke CA-Sijil" @@ -1872,9 +1929,6 @@ msgstr "Pkts." msgid "Please enter your username and password." msgstr "Sila masukkan username dan kata laluan anda." -msgid "Please wait: Device rebooting..." -msgstr "Sila tunggu: Peranti sedang reboot..." - msgid "Policy" msgstr "Dasar" @@ -2249,6 +2303,9 @@ msgstr "" msgid "Size" msgstr "Saiz" +msgid "Size (.ipk)" +msgstr "" + msgid "Skip" msgstr "Skip" @@ -2507,6 +2564,9 @@ msgstr "" msgid "The selected protocol needs a device assigned" msgstr "" +msgid "The submitted security token is invalid or already expired!" +msgstr "" + msgid "" "The system is erasing the configuration partition now and will reboot itself " "when finished." @@ -2562,6 +2622,12 @@ msgid "This IPv4 address of the relay" msgstr "" msgid "" +"This file may contain lines like 'server=/domain/1.2.3.4' or " +"'server=1.2.3.4' fordomain-specific or full upstream DNS servers." +msgstr "" + +msgid "" "This is a list of shell glob patterns for matching files and directories to " "include during sysupgrade. Modified files in /etc/config/ and certain other " "configurations are automatically preserved." @@ -2878,11 +2944,14 @@ msgstr "" msgid "Waiting for command to complete..." msgstr "" +msgid "Waiting for device..." +msgstr "" + msgid "Warning" msgstr "" -msgid "Warning: There are unsaved changes that will be lost while rebooting!" -msgstr "Amaran: Ada perubahan yang belum disimpan akan hilang saat reboot!" +msgid "Warning: There are unsaved changes that will get lost on reboot!" +msgstr "" msgid "Whether to create an IPv6 default route over the tunnel" msgstr "" @@ -3106,6 +3175,16 @@ msgstr "" msgid "« Back" msgstr "« Kembali" +#~ msgid "Path" +#~ msgstr "Path" + +#~ msgid "Please wait: Device rebooting..." +#~ msgstr "Sila tunggu: Peranti sedang reboot..." + +#~ msgid "" +#~ "Warning: There are unsaved changes that will be lost while rebooting!" +#~ msgstr "Amaran: Ada perubahan yang belum disimpan akan hilang saat reboot!" + #~ msgid "Frequency Hopping" #~ msgstr "Melompat Frekuensi" @@ -3695,9 +3774,6 @@ msgstr "« Kembali" #~ "dipilih. Hapus tanda pada pilihan untuk menentukan melampirkan rangkaian " #~ "mandiri baru untuk antara muka ini." -#~ msgid "Ignore /etc/hosts" -#~ msgstr "Mengabaikan /etc/hosts" - #~ msgid "Independent (Ad-Hoc)" #~ msgstr "(Ad-Hoc) Tersendiri" diff --git a/modules/luci-base/po/no/base.po b/modules/luci-base/po/no/base.po index 21176ed3f..b571cbde5 100644 --- a/modules/luci-base/po/no/base.po +++ b/modules/luci-base/po/no/base.po @@ -41,6 +41,9 @@ msgstr "1 minutts belastning:" msgid "15 Minute Load:" msgstr "15 minutters belastning:" +msgid "464XLAT (CLAT)" +msgstr "" + msgid "5 Minute Load:" msgstr "5 minutters belastning:" @@ -205,6 +208,9 @@ msgstr "Legg til grensesnitt..." msgid "Additional Hosts files" msgstr "Tilleggs vertsfiler" +msgid "Additional servers file" +msgstr "" + msgid "Address" msgstr "Adresse" @@ -330,6 +336,9 @@ msgstr "Tilgjengelige pakker" msgid "Average:" msgstr "Gjennomsnitt:" +msgid "BR / DMR / AFTR" +msgstr "" + msgid "BSSID" msgstr "BSSID" @@ -405,6 +414,11 @@ msgstr "Broadcom BCM%04x 802.11 Trådløs Kontroller" msgid "Buffered" msgstr "Bufret" +msgid "" +"Build/distribution specific feed definitions. This file will NOT be " +"preserved in any sysupgrade." +msgstr "" + msgid "Buttons" msgstr "Knapper" @@ -563,6 +577,14 @@ msgid "Custom delegated IPv6-prefix" msgstr "" msgid "" +"Custom feed definitions, e.g. private feeds. This file can be preserved in a " +"sysupgrade." +msgstr "" + +msgid "Custom feeds" +msgstr "" + +msgid "" "Customizes the behaviour of the device LEDs if possible." msgstr "" @@ -661,6 +683,12 @@ msgstr "Enhet" msgid "Device Configuration" msgstr "Enhet Konfigurasjon" +msgid "Device is rebooting..." +msgstr "" + +msgid "Device unreachable" +msgstr "" + msgid "Diagnostics" msgstr "Nettverksdiagnostikk" @@ -701,6 +729,9 @@ msgstr "Avstand Optimalisering" msgid "Distance to farthest network member in meters." msgstr "Avstand i meter til det medlem av nettverket som er lengst unna." +msgid "Distribution feeds" +msgstr "" + msgid "Diversity" msgstr "Antennevariasjon" @@ -775,6 +806,9 @@ msgstr "" "Dynamisk tildeling av DHCP adresser til klienter. Om deaktivert, kan en kun " "bruke klienter med statisk leie." +msgid "EA-bits length" +msgstr "" + msgid "EAP-Method" msgstr "EAP-metode" @@ -804,9 +838,6 @@ msgstr "Aktiver STP" msgid "Enable HE.net dynamic endpoint update" msgstr "Aktiver HE,net dynamisk endepunkt oppdatering" -msgid "Enable IPv6 negotiation on the PPP link" -msgstr "Aktiver IPv6 på PPP lenke" - msgid "Enable Jumbo Frame passthrough" msgstr "Aktiver Jumbo Frames gjennomgang" @@ -963,6 +994,9 @@ msgstr "Bruk TKIP" msgid "Force TKIP and CCMP (AES)" msgstr "Bruk TKIP og CCMP (AES)" +msgid "Form token mismatch" +msgstr "" + msgid "Forward DHCP traffic" msgstr "Videresend DHCP trafikk" @@ -1002,6 +1036,9 @@ msgstr "Generelle Innstillinger" msgid "General Setup" msgstr "Generelt Oppsett" +msgid "General options for opkg" +msgstr "" + msgid "Generate archive" msgstr "Opprett arkiv" @@ -1112,6 +1149,9 @@ msgstr "IPv4 nettmaske" msgid "IPv4 only" msgstr "Kun IPv4" +msgid "IPv4 prefix" +msgstr "" + msgid "IPv4 prefix length" msgstr "IPv4 prefikslengde" @@ -1205,8 +1245,8 @@ msgstr "" "\"Random Access Memory\">RAM. Vær oppmerksom på at bruk av swap er " "mye langsommere en RAM." -msgid "Ignore Hosts files" -msgstr "Ignorer vertsfiler" +msgid "Ignore /etc/hosts" +msgstr "" msgid "Ignore interface" msgstr "Ignorer grensesnitt" @@ -1220,6 +1260,11 @@ msgstr "Firmware" msgid "In" msgstr "i" +msgid "" +"In order to prevent unauthorized access to the system, your request has been " +"blocked. Click \"Continue »\" below to return to the previous page." +msgstr "" + msgid "Inactivity timeout" msgstr "Tidsavbrudd etter innaktivitet" @@ -1497,6 +1542,9 @@ msgstr "MAC-Filter" msgid "MAC-List" msgstr "MAC-Liste" +msgid "MAP / LW4over6" +msgstr "" + msgid "MB/s" msgstr "MB/s" @@ -1511,6 +1559,9 @@ msgid "" "below:" msgstr "" +msgid "Manual" +msgstr "" + msgid "Maximum Rate" msgstr "Maksimal hastighet" @@ -1620,6 +1671,9 @@ msgstr "Multicast adresse" msgid "NAS ID" msgstr "NAS ID" +msgid "NAT64 Prefix" +msgstr "" + msgid "NDP-Proxy" msgstr "" @@ -1852,6 +1906,12 @@ msgstr "PPPoE" msgid "PPtP" msgstr "PPtP" +msgid "PSID offset" +msgstr "" + +msgid "PSID-bits length" +msgstr "" + msgid "Package libiwinfo required!" msgstr "Pakken libiwinfo er nødvendig!" @@ -1879,9 +1939,6 @@ msgstr "Passord for privatnøkkel" msgid "Password successfully changed!" msgstr "Passordet er endret!" -msgid "Path" -msgstr "" - msgid "Path to CA-Certificate" msgstr "Sti til CA-sertifikat" @@ -1918,9 +1975,6 @@ msgstr "Pakker." msgid "Please enter your username and password." msgstr "Skriv inn ditt brukernavn og passord." -msgid "Please wait: Device rebooting..." -msgstr "Vent: Enheten starter på nytt..." - msgid "Policy" msgstr "Policy" @@ -2313,6 +2367,9 @@ msgstr "Signal:" msgid "Size" msgstr "Størrelse" +msgid "Size (.ipk)" +msgstr "" + msgid "Skip" msgstr "Gå videre" @@ -2600,6 +2657,9 @@ msgstr "" msgid "The selected protocol needs a device assigned" msgstr "Den valgte protokoll må ha en enhet tilknyttet" +msgid "The submitted security token is invalid or already expired!" +msgstr "" + msgid "" "The system is erasing the configuration partition now and will reboot itself " "when finished." @@ -2660,6 +2720,12 @@ msgid "This IPv4 address of the relay" msgstr "Dette IPv4 adressen til relayet" msgid "" +"This file may contain lines like 'server=/domain/1.2.3.4' or " +"'server=1.2.3.4' fordomain-specific or full upstream DNS servers." +msgstr "" + +msgid "" "This is a list of shell glob patterns for matching files and directories to " "include during sysupgrade. Modified files in /etc/config/ and certain other " "configurations are automatically preserved." @@ -2991,11 +3057,14 @@ msgstr "Venter på at endringer utføres..." msgid "Waiting for command to complete..." msgstr "Venter på at kommando fullføres..." +msgid "Waiting for device..." +msgstr "" + msgid "Warning" msgstr "Advarsel" -msgid "Warning: There are unsaved changes that will be lost while rebooting!" -msgstr "Advarsel: Det er ulagrede endringer som vil gå tapt under omstarten!" +msgid "Warning: There are unsaved changes that will get lost on reboot!" +msgstr "" msgid "Whether to create an IPv6 default route over the tunnel" msgstr "" @@ -3227,6 +3296,20 @@ msgstr "ja" msgid "« Back" msgstr "« Tilbake" +#~ msgid "Enable IPv6 negotiation on the PPP link" +#~ msgstr "Aktiver IPv6 på PPP lenke" + +#~ msgid "Ignore Hosts files" +#~ msgstr "Ignorer vertsfiler" + +#~ msgid "Please wait: Device rebooting..." +#~ msgstr "Vent: Enheten starter på nytt..." + +#~ msgid "" +#~ "Warning: There are unsaved changes that will be lost while rebooting!" +#~ msgstr "" +#~ "Advarsel: Det er ulagrede endringer som vil gå tapt under omstarten!" + #~ msgid "" #~ "Always use 40MHz channels even if the secondary channel overlaps. Using " #~ "this option does not comply with IEEE 802.11n-2009!" diff --git a/modules/luci-base/po/pl/base.po b/modules/luci-base/po/pl/base.po index baa7ab853..14b61f81d 100644 --- a/modules/luci-base/po/pl/base.po +++ b/modules/luci-base/po/pl/base.po @@ -42,13 +42,16 @@ msgid "-- match by label --" msgstr "" msgid "1 Minute Load:" -msgstr "Obciążenie w ciągu 1 minuty:" +msgstr "Obciążenie 1 min.:" msgid "15 Minute Load:" -msgstr "Obciążenie w ciągu 15 minut:" +msgstr "Obciążenie 15 min.:" + +msgid "464XLAT (CLAT)" +msgstr "" msgid "5 Minute Load:" -msgstr "Obciążenie w ciągu 5 minut:" +msgstr "Obciążenie 5 min.:" msgid "BSSID" msgstr "BSSID" @@ -215,6 +218,9 @@ msgstr "Dodaj nowy interfejs..." msgid "Additional Hosts files" msgstr "Dodatkowe pliki Hosts" +msgid "Additional servers file" +msgstr "" + msgid "Address" msgstr "Adres" @@ -347,6 +353,9 @@ msgstr "Dostępne pakiety" msgid "Average:" msgstr "Średnia:" +msgid "BR / DMR / AFTR" +msgstr "" + msgid "BSSID" msgstr "BSSID" @@ -424,6 +433,11 @@ msgstr "Bezprzewodowy kontroler Broadcom BCM%04x 802.11" msgid "Buffered" msgstr "Buforowana" +msgid "" +"Build/distribution specific feed definitions. This file will NOT be " +"preserved in any sysupgrade." +msgstr "" + msgid "Buttons" msgstr "Przyciski" @@ -583,6 +597,14 @@ msgstr "Interfejs Niestandardowy" msgid "Custom delegated IPv6-prefix" msgstr "" +msgid "" +"Custom feed definitions, e.g. private feeds. This file can be preserved in a " +"sysupgrade." +msgstr "" + +msgid "Custom feeds" +msgstr "" + # Spacji zabrało i napisy się skleiły msgid "" "Customizes the behaviour of the device STP" msgid "Enable HE.net dynamic endpoint update" msgstr "Włącz dynamiczną aktualizację punktu końcowego sieci HE.net" -msgid "Enable IPv6 negotiation on the PPP link" -msgstr "Włącz negocjację IPv6 na łączu PPP" - msgid "Enable Jumbo Frame passthrough" msgstr "Włącz przechodzenie ramek Jumbo" @@ -996,6 +1027,9 @@ msgstr "Wymuś TKIP" msgid "Force TKIP and CCMP (AES)" msgstr "Wymuś TKIP i CCMP (AES)" +msgid "Form token mismatch" +msgstr "" + msgid "Forward DHCP traffic" msgstr "Przekazuj ruch DHCP" @@ -1035,6 +1069,9 @@ msgstr "Ustawienia główne" msgid "General Setup" msgstr "Ustawienia podstawowe" +msgid "General options for opkg" +msgstr "" + msgid "Generate archive" msgstr "Twórz archiwum" @@ -1150,6 +1187,9 @@ msgstr "Maska IPv4" msgid "IPv4 only" msgstr "Tylko IPv4" +msgid "IPv4 prefix" +msgstr "" + msgid "IPv4 prefix length" msgstr "Długość prefiksu IPv4" @@ -1249,8 +1289,8 @@ msgstr "" "Memory\">RAM będzie dostępna. Uwaga - plik wymiany jest dużo " "wolniejszy niż pamięć RAM." -msgid "Ignore Hosts files" -msgstr "Ignoruj pliki Hosts" +msgid "Ignore /etc/hosts" +msgstr "" msgid "Ignore interface" msgstr "Ignoruj interfejs" @@ -1264,6 +1304,11 @@ msgstr "Obraz" msgid "In" msgstr "W" +msgid "" +"In order to prevent unauthorized access to the system, your request has been " +"blocked. Click \"Continue »\" below to return to the previous page." +msgstr "" + msgid "Inactivity timeout" msgstr "Czas bezczynności" @@ -1544,6 +1589,9 @@ msgstr "Filtr adresów MAC" msgid "MAC-List" msgstr "Lista MAC" +msgid "MAP / LW4over6" +msgstr "" + msgid "MB/s" msgstr "MB/s" @@ -1558,6 +1606,9 @@ msgid "" "below:" msgstr "" +msgid "Manual" +msgstr "" + msgid "Maximum Rate" msgstr "Maksymalna Szybkość" @@ -1667,6 +1718,9 @@ msgstr "Adres Multicast`u" msgid "NAS ID" msgstr "NAS ID" +msgid "NAT64 Prefix" +msgstr "" + msgid "NDP-Proxy" msgstr "" @@ -1838,7 +1892,7 @@ msgid "Out" msgstr "Wychodzące" msgid "Outbound:" -msgstr "Wychodzące:" +msgstr "Wychodzący:" msgid "Outdoor Channels" msgstr "Kanały zewnętrzne" @@ -1898,6 +1952,12 @@ msgstr "PPPoE" msgid "PPtP" msgstr "PPtP" +msgid "PSID offset" +msgstr "" + +msgid "PSID-bits length" +msgstr "" + msgid "Package libiwinfo required!" msgstr "Wymagany pakiet libiwinfo!" @@ -1925,9 +1985,6 @@ msgstr "Hasło lub klucz prywatny" msgid "Password successfully changed!" msgstr "Pomyślnie zmieniono hasło!" -msgid "Path" -msgstr "" - msgid "Path to CA-Certificate" msgstr "Ścieżka do certyfikatu CA" @@ -1966,9 +2023,6 @@ msgstr "Pktw." msgid "Please enter your username and password." msgstr "Proszę wprowadź swój login i hasło." -msgid "Please wait: Device rebooting..." -msgstr "Proszę czekać: Ponowne uruchamianie..." - msgid "Policy" msgstr "Zasada" @@ -2365,6 +2419,9 @@ msgstr "Sygnał:" msgid "Size" msgstr "Rozmiar" +msgid "Size (.ipk)" +msgstr "" + msgid "Skip" msgstr "Pomiń" @@ -2660,6 +2717,9 @@ msgstr "" msgid "The selected protocol needs a device assigned" msgstr "Wybrany protokół potrzebuje przypisanego urządzenia" +msgid "The submitted security token is invalid or already expired!" +msgstr "" + msgid "" "The system is erasing the configuration partition now and will reboot itself " "when finished." @@ -2720,6 +2780,12 @@ msgid "This IPv4 address of the relay" msgstr "Ten adres IPv4 przekaźnika" msgid "" +"This file may contain lines like 'server=/domain/1.2.3.4' or " +"'server=1.2.3.4' fordomain-specific or full upstream DNS servers." +msgstr "" + +msgid "" "This is a list of shell glob patterns for matching files and directories to " "include during sysupgrade. Modified files in /etc/config/ and certain other " "configurations are automatically preserved." @@ -3057,13 +3123,14 @@ msgstr "Trwa wprowadzenie zmian..." msgid "Waiting for command to complete..." msgstr "Trwa wykonanie polecenia..." +msgid "Waiting for device..." +msgstr "" + msgid "Warning" msgstr "Ostrzeżenie" -msgid "Warning: There are unsaved changes that will be lost while rebooting!" +msgid "Warning: There are unsaved changes that will get lost on reboot!" msgstr "" -"Ostrzeżenie: Pozostały niezapisane zmian, które zostaną utracone podczas " -"restartu!" msgid "Whether to create an IPv6 default route over the tunnel" msgstr "" @@ -3296,6 +3363,21 @@ msgstr "tak" msgid "« Back" msgstr "« Wróć" +#~ msgid "Enable IPv6 negotiation on the PPP link" +#~ msgstr "Włącz negocjację IPv6 na łączu PPP" + +#~ msgid "Ignore Hosts files" +#~ msgstr "Ignoruj pliki Hosts" + +#~ msgid "Please wait: Device rebooting..." +#~ msgstr "Proszę czekać: Ponowne uruchamianie..." + +#~ msgid "" +#~ "Warning: There are unsaved changes that will be lost while rebooting!" +#~ msgstr "" +#~ "Ostrzeżenie: Pozostały niezapisane zmian, które zostaną utracone podczas " +#~ "restartu!" + #~ msgid "" #~ "Always use 40MHz channels even if the secondary channel overlaps. Using " #~ "this option does not comply with IEEE 802.11n-2009!" diff --git a/modules/luci-base/po/pt-br/base.po b/modules/luci-base/po/pt-br/base.po index ec4401bde..2515b341c 100644 --- a/modules/luci-base/po/pt-br/base.po +++ b/modules/luci-base/po/pt-br/base.po @@ -46,6 +46,9 @@ msgstr "Carga 1 Minuto:" msgid "15 Minute Load:" msgstr "Carga 15 Minutos:" +msgid "464XLAT (CLAT)" +msgstr "" + msgid "5 Minute Load:" msgstr "Carga 5 Minutos:" @@ -215,6 +218,9 @@ msgstr "Adiciona uma nova interface..." msgid "Additional Hosts files" msgstr "Arquivos adicionais de equipamentos conhecidos (hosts)" +msgid "Additional servers file" +msgstr "" + msgid "Address" msgstr "Endereço" @@ -345,6 +351,9 @@ msgstr "Pacotes disponíveis" msgid "Average:" msgstr "Média:" +msgid "BR / DMR / AFTR" +msgstr "" + msgid "BSSID" msgstr "BSSID" @@ -420,6 +429,11 @@ msgstr "Broadcom BCM%04x 802.11 Wireless Controlador" msgid "Buffered" msgstr "Buffered" +msgid "" +"Build/distribution specific feed definitions. This file will NOT be " +"preserved in any sysupgrade." +msgstr "" + msgid "Buttons" msgstr "Botões" @@ -579,6 +593,14 @@ msgid "Custom delegated IPv6-prefix" msgstr "" msgid "" +"Custom feed definitions, e.g. private feeds. This file can be preserved in a " +"sysupgrade." +msgstr "" + +msgid "Custom feeds" +msgstr "" + +msgid "" "Customizes the behaviour of the device LEDs if possible." msgstr "" @@ -678,6 +700,12 @@ msgstr "Dispositivo" msgid "Device Configuration" msgstr "Configuração do Dispositivo" +msgid "Device is rebooting..." +msgstr "" + +msgid "Device unreachable" +msgstr "" + msgid "Diagnostics" msgstr "Diagnóstico" @@ -719,6 +747,9 @@ msgstr "Otimização de Distância" msgid "Distance to farthest network member in meters." msgstr "Distância para o computador mais distante da rede (em metros)." +msgid "Distribution feeds" +msgstr "" + msgid "Diversity" msgstr "Diversidade" @@ -798,6 +829,9 @@ msgstr "" "Aloca dinamicamente os endereços do DHCP para os clientes. Se desabilitado, " "somente os clientes com atribuições estáticas serão servidos. " +msgid "EA-bits length" +msgstr "" + msgid "EAP-Method" msgstr "Método EAP" @@ -827,9 +861,6 @@ msgstr "Ativar STP" msgid "Enable HE.net dynamic endpoint update" msgstr "Ativar a atualização de ponto final dinâmico HE.net" -msgid "Enable IPv6 negotiation on the PPP link" -msgstr "Ativar a negociação de IPv6 no enlace PPP" - msgid "Enable Jumbo Frame passthrough" msgstr "Ativar o encaminhamento de quadros jumbos (Jumbo Frames)" @@ -987,6 +1018,9 @@ msgstr "Forçar TKIP" msgid "Force TKIP and CCMP (AES)" msgstr "Forçar TKIP e CCMP (AES)" +msgid "Form token mismatch" +msgstr "" + msgid "Forward DHCP traffic" msgstr "Encaminhar tráfego DHCP" @@ -1026,6 +1060,9 @@ msgstr "Configurações Gerais" msgid "General Setup" msgstr "Configurações Gerais" +msgid "General options for opkg" +msgstr "" + msgid "Generate archive" msgstr "Gerar arquivo" @@ -1141,6 +1178,9 @@ msgstr "Máscara de rede IPv4" msgid "IPv4 only" msgstr "Somente IPv4" +msgid "IPv4 prefix" +msgstr "" + msgid "IPv4 prefix length" msgstr "Tamanho do prefixo IPv4" @@ -1242,8 +1282,8 @@ msgstr "" "de transferência tão altas com a memória RAM." -msgid "Ignore Hosts files" -msgstr "Ignorar arquivos de equipamentos conhecidos (hosts)" +msgid "Ignore /etc/hosts" +msgstr "Ignorar /etc/hosts" msgid "Ignore interface" msgstr "Ignorar interface" @@ -1257,6 +1297,11 @@ msgstr "Imagem" msgid "In" msgstr "Entrada" +msgid "" +"In order to prevent unauthorized access to the system, your request has been " +"blocked. Click \"Continue »\" below to return to the previous page." +msgstr "" + msgid "Inactivity timeout" msgstr "Tempo limite de inatividade" @@ -1545,6 +1590,9 @@ msgstr "Filtro de MAC" msgid "MAC-List" msgstr "Lista de MAC" +msgid "MAP / LW4over6" +msgstr "" + msgid "MB/s" msgstr "MB/s" @@ -1561,6 +1609,9 @@ msgid "" "below:" msgstr "" +msgid "Manual" +msgstr "" + msgid "Maximum Rate" msgstr "Taxa Máxima" @@ -1671,6 +1722,9 @@ msgstr "Endereço de Multicast" msgid "NAS ID" msgstr "NAS ID" +msgid "NAT64 Prefix" +msgstr "" + msgid "NDP-Proxy" msgstr "" @@ -1905,6 +1959,12 @@ msgstr "PPPoE" msgid "PPtP" msgstr "PPtP" +msgid "PSID offset" +msgstr "" + +msgid "PSID-bits length" +msgstr "" + msgid "Package libiwinfo required!" msgstr "O pacote libiwinfo é necessário!" @@ -1932,9 +1992,6 @@ msgstr "Senha da Chave Privada" msgid "Password successfully changed!" msgstr "A senha foi alterada com sucesso!" -msgid "Path" -msgstr "Directório" - msgid "Path to CA-Certificate" msgstr "Caminho para o Certificado da AC" @@ -1971,9 +2028,6 @@ msgstr "Pcts." msgid "Please enter your username and password." msgstr "Entre com o seu usuário e senha." -msgid "Please wait: Device rebooting..." -msgstr "Por favor aguarde: Equipamento reiniciando..." - msgid "Policy" msgstr "Política" @@ -2369,6 +2423,9 @@ msgstr "Sinal:" msgid "Size" msgstr "Tamanho" +msgid "Size (.ipk)" +msgstr "" + msgid "Skip" msgstr "Pular" @@ -2663,6 +2720,9 @@ msgstr "" msgid "The selected protocol needs a device assigned" msgstr "O protocolo selecionado necessita estar associado a um dispositivo" +msgid "The submitted security token is invalid or already expired!" +msgstr "" + msgid "" "The system is erasing the configuration partition now and will reboot itself " "when finished." @@ -2724,6 +2784,12 @@ msgid "This IPv4 address of the relay" msgstr "Este endereço IPv4 do repassar" msgid "" +"This file may contain lines like 'server=/domain/1.2.3.4' or " +"'server=1.2.3.4' fordomain-specific or full upstream DNS servers." +msgstr "" + +msgid "" "This is a list of shell glob patterns for matching files and directories to " "include during sysupgrade. Modified files in /etc/config/ and certain other " "configurations are automatically preserved." @@ -3058,13 +3124,14 @@ msgstr "Esperando a aplicação das mudanças..." msgid "Waiting for command to complete..." msgstr "Esperando o término do comando..." +msgid "Waiting for device..." +msgstr "" + msgid "Warning" msgstr "Atenção" -msgid "Warning: There are unsaved changes that will be lost while rebooting!" +msgid "Warning: There are unsaved changes that will get lost on reboot!" msgstr "" -"Aviso: Existem alterações não salvas que serão perdidas durante a " -"reiniciação!" msgid "Whether to create an IPv6 default route over the tunnel" msgstr "" @@ -3300,6 +3367,24 @@ msgstr "sim" msgid "« Back" msgstr "« Voltar" +#~ msgid "Enable IPv6 negotiation on the PPP link" +#~ msgstr "Ativar a negociação de IPv6 no enlace PPP" + +#~ msgid "Ignore Hosts files" +#~ msgstr "Ignorar arquivos de equipamentos conhecidos (hosts)" + +#~ msgid "Path" +#~ msgstr "Directório" + +#~ msgid "Please wait: Device rebooting..." +#~ msgstr "Por favor aguarde: Equipamento reiniciando..." + +#~ msgid "" +#~ "Warning: There are unsaved changes that will be lost while rebooting!" +#~ msgstr "" +#~ "Aviso: Existem alterações não salvas que serão perdidas durante a " +#~ "reiniciação!" + #~ msgid "" #~ "Always use 40MHz channels even if the secondary channel overlaps. Using " #~ "this option does not comply with IEEE 802.11n-2009!" @@ -4158,9 +4243,6 @@ msgstr "« Voltar" #~ msgid "Here you can configure installed wifi devices." #~ msgstr "Aqui pode configurar os dispositivos wifi instalados. " -#~ msgid "Ignore /etc/hosts" -#~ msgstr "Ignorar /etc/hosts" - #~ msgid "Independent (Ad-Hoc)" #~ msgstr "Independente (Ad-Hoc)" diff --git a/modules/luci-base/po/pt/base.po b/modules/luci-base/po/pt/base.po index 1acc852bb..35cd98665 100644 --- a/modules/luci-base/po/pt/base.po +++ b/modules/luci-base/po/pt/base.po @@ -46,6 +46,9 @@ msgstr "Carga de 1 Minuto:" msgid "15 Minute Load:" msgstr "Carga de 15 minutos:" +msgid "464XLAT (CLAT)" +msgstr "" + msgid "5 Minute Load:" msgstr "Carga 5 Minutos:" @@ -215,6 +218,9 @@ msgstr "Adicionar uma nova interface..." msgid "Additional Hosts files" msgstr "Ficheiro Adicional de Hosts" +msgid "Additional servers file" +msgstr "" + msgid "Address" msgstr "Endereço" @@ -343,6 +349,9 @@ msgstr "Pacotes disponíveis" msgid "Average:" msgstr "Média:" +msgid "BR / DMR / AFTR" +msgstr "" + msgid "BSSID" msgstr "BSSID" @@ -418,6 +427,11 @@ msgstr "Controlador Wireless Broadcom BCM%04x 802.11" msgid "Buffered" msgstr "" +msgid "" +"Build/distribution specific feed definitions. This file will NOT be " +"preserved in any sysupgrade." +msgstr "" + msgid "Buttons" msgstr "Botões" @@ -576,6 +590,14 @@ msgid "Custom delegated IPv6-prefix" msgstr "" msgid "" +"Custom feed definitions, e.g. private feeds. This file can be preserved in a " +"sysupgrade." +msgstr "" + +msgid "Custom feeds" +msgstr "" + +msgid "" "Customizes the behaviour of the device LEDs if possible." msgstr "" @@ -675,6 +697,12 @@ msgstr "Dispositivo" msgid "Device Configuration" msgstr "Configuração do Dispositivo" +msgid "Device is rebooting..." +msgstr "" + +msgid "Device unreachable" +msgstr "" + msgid "Diagnostics" msgstr "Diagnósticos" @@ -715,6 +743,9 @@ msgstr "Optimização de Distância" msgid "Distance to farthest network member in meters." msgstr "Distância para o último host da rede em metros." +msgid "Distribution feeds" +msgstr "" + msgid "Diversity" msgstr "Diversidade" @@ -791,6 +822,9 @@ msgstr "" "Alocar dinamicamente endereços DHCP para clientes. Se desativado, só os " "clientes com reservas estáticas serão servidos." +msgid "EA-bits length" +msgstr "" + msgid "EAP-Method" msgstr "Metodo-EAP" @@ -820,9 +854,6 @@ msgstr "Ativar STP" msgid "Enable HE.net dynamic endpoint update" msgstr "Ativar a atualização dinâmica de ponto final HE.net" -msgid "Enable IPv6 negotiation on the PPP link" -msgstr "Ativar a negociação IPv6 no link PPP" - msgid "Enable Jumbo Frame passthrough" msgstr "Ativar a passagem de Jumbo Frames" @@ -980,6 +1011,9 @@ msgstr "Forçar TKIP" msgid "Force TKIP and CCMP (AES)" msgstr "Forçar TKIP e CCMP (AES)" +msgid "Form token mismatch" +msgstr "" + msgid "Forward DHCP traffic" msgstr "Encaminhar tráfego DHCP" @@ -1019,6 +1053,9 @@ msgstr "Definições Gerais" msgid "General Setup" msgstr "Configuração Geral" +msgid "General options for opkg" +msgstr "" + msgid "Generate archive" msgstr "Gerar arquivo" @@ -1133,6 +1170,9 @@ msgstr "Máscara IPv4" msgid "IPv4 only" msgstr "Só IPv4" +msgid "IPv4 prefix" +msgstr "" + msgid "IPv4 prefix length" msgstr "Comprimento do prefixo IPv4" @@ -1228,8 +1268,8 @@ msgstr "" "lento pois o dispositivo swap não pode ser acedido com um nível elevado de " "memória RAM." -msgid "Ignore Hosts files" -msgstr "Ignorar ficheiros de Hosts" +msgid "Ignore /etc/hosts" +msgstr "Ignorar /etc/hosts" msgid "Ignore interface" msgstr "Ignorar interface" @@ -1243,6 +1283,11 @@ msgstr "Imagem" msgid "In" msgstr "Entrada" +msgid "" +"In order to prevent unauthorized access to the system, your request has been " +"blocked. Click \"Continue »\" below to return to the previous page." +msgstr "" + msgid "Inactivity timeout" msgstr "Tempo de inatividade" @@ -1521,6 +1566,9 @@ msgstr "Filtro-MAC" msgid "MAC-List" msgstr "Lista-MAC" +msgid "MAP / LW4over6" +msgstr "" + msgid "MB/s" msgstr "MB/s" @@ -1535,6 +1583,9 @@ msgid "" "below:" msgstr "" +msgid "Manual" +msgstr "" + msgid "Maximum Rate" msgstr "Taxa Máxima" @@ -1644,6 +1695,9 @@ msgstr "Endereço de multicast" msgid "NAS ID" msgstr "NAS ID" +msgid "NAT64 Prefix" +msgstr "" + msgid "NDP-Proxy" msgstr "" @@ -1874,6 +1928,12 @@ msgstr "PPPoE" msgid "PPtP" msgstr "PPtp" +msgid "PSID offset" +msgstr "" + +msgid "PSID-bits length" +msgstr "" + msgid "Package libiwinfo required!" msgstr "O pacote libiwinfo é necessário!" @@ -1901,9 +1961,6 @@ msgstr "Senha da Chave Privada" msgid "Password successfully changed!" msgstr "Password alterada com sucesso!" -msgid "Path" -msgstr "Directório" - msgid "Path to CA-Certificate" msgstr "Directorio do Certificado CA" @@ -1940,9 +1997,6 @@ msgstr "Pkts." msgid "Please enter your username and password." msgstr "Insira o seu username e password." -msgid "Please wait: Device rebooting..." -msgstr "Por favor aguarde: Equipamento a reiniciar..." - msgid "Policy" msgstr "Política" @@ -2331,6 +2385,9 @@ msgstr "Sinal:" msgid "Size" msgstr "Tamanho" +msgid "Size (.ipk)" +msgstr "" + msgid "Skip" msgstr "Saltar" @@ -2605,6 +2662,9 @@ msgstr "" msgid "The selected protocol needs a device assigned" msgstr "O protocolo escolhido precisa de um dispositivo atribuído." +msgid "The submitted security token is invalid or already expired!" +msgstr "" + msgid "" "The system is erasing the configuration partition now and will reboot itself " "when finished." @@ -2666,6 +2726,12 @@ msgid "This IPv4 address of the relay" msgstr "" msgid "" +"This file may contain lines like 'server=/domain/1.2.3.4' or " +"'server=1.2.3.4' fordomain-specific or full upstream DNS servers." +msgstr "" + +msgid "" "This is a list of shell glob patterns for matching files and directories to " "include during sysupgrade. Modified files in /etc/config/ and certain other " "configurations are automatically preserved." @@ -2984,13 +3050,14 @@ msgstr "A aguardar que as mudanças sejam aplicadas..." msgid "Waiting for command to complete..." msgstr "A aguardar que o comando termine..." +msgid "Waiting for device..." +msgstr "" + msgid "Warning" msgstr "Aviso" -msgid "Warning: There are unsaved changes that will be lost while rebooting!" +msgid "Warning: There are unsaved changes that will get lost on reboot!" msgstr "" -"Aviso: Existem alterações não salvas que serão perdidas durante a " -"reinicialização!" msgid "Whether to create an IPv6 default route over the tunnel" msgstr "" @@ -3225,6 +3292,24 @@ msgstr "sim" msgid "« Back" msgstr "« Voltar" +#~ msgid "Enable IPv6 negotiation on the PPP link" +#~ msgstr "Ativar a negociação IPv6 no link PPP" + +#~ msgid "Ignore Hosts files" +#~ msgstr "Ignorar ficheiros de Hosts" + +#~ msgid "Path" +#~ msgstr "Directório" + +#~ msgid "Please wait: Device rebooting..." +#~ msgstr "Por favor aguarde: Equipamento a reiniciar..." + +#~ msgid "" +#~ "Warning: There are unsaved changes that will be lost while rebooting!" +#~ msgstr "" +#~ "Aviso: Existem alterações não salvas que serão perdidas durante a " +#~ "reinicialização!" + #~ msgid "" #~ "Always use 40MHz channels even if the secondary channel overlaps. Using " #~ "this option does not comply with IEEE 802.11n-2009!" @@ -3860,9 +3945,6 @@ msgstr "« Voltar" #~ msgid "Here you can configure installed wifi devices." #~ msgstr "Aqui pode configurar os dispositivos wifi instalados. " -#~ msgid "Ignore /etc/hosts" -#~ msgstr "Ignorar /etc/hosts" - #~ msgid "Independent (Ad-Hoc)" #~ msgstr "Independente (Ad-Hoc)" diff --git a/modules/luci-base/po/ro/base.po b/modules/luci-base/po/ro/base.po index 3692b7de5..8c6c348f8 100644 --- a/modules/luci-base/po/ro/base.po +++ b/modules/luci-base/po/ro/base.po @@ -45,6 +45,9 @@ msgstr "Incarcarea in ultimul minut" msgid "15 Minute Load:" msgstr "Incarcarea in ultimele 15 minute" +msgid "464XLAT (CLAT)" +msgstr "" + msgid "5 Minute Load:" msgstr "Incarcarea in ultimele 5 minute" @@ -202,6 +205,9 @@ msgstr "Adauga interfata noua.." msgid "Additional Hosts files" msgstr "Fisiere de tip hosts aditionale" +msgid "Additional servers file" +msgstr "" + msgid "Address" msgstr "Adresa" @@ -330,6 +336,9 @@ msgstr "Pachete disponibile" msgid "Average:" msgstr "Medie:" +msgid "BR / DMR / AFTR" +msgstr "" + msgid "BSSID" msgstr "BSSID" @@ -402,6 +411,11 @@ msgstr "Broadcom BCM%04x 802.11 Controller Fara Fir" msgid "Buffered" msgstr "Incarcat" +msgid "" +"Build/distribution specific feed definitions. This file will NOT be " +"preserved in any sysupgrade." +msgstr "" + msgid "Buttons" msgstr "Butoane" @@ -552,6 +566,14 @@ msgid "Custom delegated IPv6-prefix" msgstr "" msgid "" +"Custom feed definitions, e.g. private feeds. This file can be preserved in a " +"sysupgrade." +msgstr "" + +msgid "Custom feeds" +msgstr "" + +msgid "" "Customizes the behaviour of the device LEDs if possible." msgstr "" @@ -646,6 +668,12 @@ msgstr "Dispozitiv" msgid "Device Configuration" msgstr "Configurarea dispozitivului" +msgid "Device is rebooting..." +msgstr "" + +msgid "Device unreachable" +msgstr "" + msgid "Diagnostics" msgstr "Diagnosticuri" @@ -686,6 +714,9 @@ msgstr "Optimizarea distantei" msgid "Distance to farthest network member in meters." msgstr "Distanta catre cel mai departat membru din retea in metri." +msgid "Distribution feeds" +msgstr "" + msgid "Diversity" msgstr "Diversitate" @@ -747,6 +778,9 @@ msgid "" "having static leases will be served." msgstr "" +msgid "EA-bits length" +msgstr "" + msgid "EAP-Method" msgstr "" @@ -776,9 +810,6 @@ msgstr "Activeaza STP" msgid "Enable HE.net dynamic endpoint update" msgstr "" -msgid "Enable IPv6 negotiation on the PPP link" -msgstr "" - msgid "Enable Jumbo Frame passthrough" msgstr "" @@ -934,6 +965,9 @@ msgstr "Forteaza TKIP" msgid "Force TKIP and CCMP (AES)" msgstr "Forteaza TKIP si CCMP (AES)" +msgid "Form token mismatch" +msgstr "" + msgid "Forward DHCP traffic" msgstr "" @@ -973,6 +1007,9 @@ msgstr "Setari principale" msgid "General Setup" msgstr "Configurare generala" +msgid "General options for opkg" +msgstr "" + msgid "Generate archive" msgstr "" @@ -1081,6 +1118,9 @@ msgstr "" msgid "IPv4 only" msgstr "Doar IPv4" +msgid "IPv4 prefix" +msgstr "" + msgid "IPv4 prefix length" msgstr "" @@ -1170,7 +1210,7 @@ msgid "" "of the RAM." msgstr "" -msgid "Ignore Hosts files" +msgid "Ignore /etc/hosts" msgstr "" msgid "Ignore interface" @@ -1185,6 +1225,11 @@ msgstr "Imagine" msgid "In" msgstr "" +msgid "" +"In order to prevent unauthorized access to the system, your request has been " +"blocked. Click \"Continue »\" below to return to the previous page." +msgstr "" + msgid "Inactivity timeout" msgstr "" @@ -1454,6 +1499,9 @@ msgstr "" msgid "MAC-List" msgstr "" +msgid "MAP / LW4over6" +msgstr "" + msgid "MB/s" msgstr "" @@ -1468,6 +1516,9 @@ msgid "" "below:" msgstr "" +msgid "Manual" +msgstr "" + msgid "Maximum Rate" msgstr "Rata maxima" @@ -1575,6 +1626,9 @@ msgstr "" msgid "NAS ID" msgstr "" +msgid "NAT64 Prefix" +msgstr "" + msgid "NDP-Proxy" msgstr "" @@ -1799,6 +1853,12 @@ msgstr "" msgid "PPtP" msgstr "" +msgid "PSID offset" +msgstr "" + +msgid "PSID-bits length" +msgstr "" + msgid "Package libiwinfo required!" msgstr "Pachetul libiwinfo este necesar !" @@ -1826,9 +1886,6 @@ msgstr "Parola cheii private" msgid "Password successfully changed!" msgstr "Parola schimbata cu succes !" -msgid "Path" -msgstr "" - msgid "Path to CA-Certificate" msgstr "Calea catre certificatul CA" @@ -1865,9 +1922,6 @@ msgstr "Packete." msgid "Please enter your username and password." msgstr "Introdu utilizatorul si parola." -msgid "Please wait: Device rebooting..." -msgstr "Asteapta: dispozitivul se restarteaza.." - msgid "Policy" msgstr "" @@ -2242,6 +2296,9 @@ msgstr "Semnal:" msgid "Size" msgstr "Marime" +msgid "Size (.ipk)" +msgstr "" + msgid "Skip" msgstr "" @@ -2492,6 +2549,9 @@ msgstr "" msgid "The selected protocol needs a device assigned" msgstr "" +msgid "The submitted security token is invalid or already expired!" +msgstr "" + msgid "" "The system is erasing the configuration partition now and will reboot itself " "when finished." @@ -2542,6 +2602,12 @@ msgid "This IPv4 address of the relay" msgstr "" msgid "" +"This file may contain lines like 'server=/domain/1.2.3.4' or " +"'server=1.2.3.4' fordomain-specific or full upstream DNS servers." +msgstr "" + +msgid "" "This is a list of shell glob patterns for matching files and directories to " "include during sysupgrade. Modified files in /etc/config/ and certain other " "configurations are automatically preserved." @@ -2852,11 +2918,14 @@ msgstr "" msgid "Waiting for command to complete..." msgstr "" +msgid "Waiting for device..." +msgstr "" + msgid "Warning" msgstr "Avertizare" -msgid "Warning: There are unsaved changes that will be lost while rebooting!" -msgstr "Atentie: exista modificari nesalvate care vor fi pierdute la restart !" +msgid "Warning: There are unsaved changes that will get lost on reboot!" +msgstr "" msgid "Whether to create an IPv6 default route over the tunnel" msgstr "" @@ -3080,6 +3149,14 @@ msgstr "da" msgid "« Back" msgstr "« Inapoi" +#~ msgid "Please wait: Device rebooting..." +#~ msgstr "Asteapta: dispozitivul se restarteaza.." + +#~ msgid "" +#~ "Warning: There are unsaved changes that will be lost while rebooting!" +#~ msgstr "" +#~ "Atentie: exista modificari nesalvate care vor fi pierdute la restart !" + #~ msgid "" #~ "Always use 40MHz channels even if the secondary channel overlaps. Using " #~ "this option does not comply with IEEE 802.11n-2009!" diff --git a/modules/luci-base/po/ru/base.po b/modules/luci-base/po/ru/base.po index 94fa6fb8e..8085a6fd5 100644 --- a/modules/luci-base/po/ru/base.po +++ b/modules/luci-base/po/ru/base.po @@ -48,6 +48,9 @@ msgstr "Загрузка за 1 минуту:" msgid "15 Minute Load:" msgstr "Загрузка за 15 минут:" +msgid "464XLAT (CLAT)" +msgstr "" + msgid "5 Minute Load:" msgstr "Загрузка за 5 минут:" @@ -212,6 +215,9 @@ msgstr "Добавить новый интерфейс..." msgid "Additional Hosts files" msgstr "Дополнительные файлы hosts" +msgid "Additional servers file" +msgstr "" + msgid "Address" msgstr "Адрес" @@ -342,6 +348,9 @@ msgstr "Доступные пакеты" msgid "Average:" msgstr "Средняя:" +msgid "BR / DMR / AFTR" +msgstr "" + msgid "BSSID" msgstr "BSSID" @@ -418,6 +427,11 @@ msgstr "Беспроводной 802.11 контроллер Broadcom BCM%04x" msgid "Buffered" msgstr "Буферизировано" +msgid "" +"Build/distribution specific feed definitions. This file will NOT be " +"preserved in any sysupgrade." +msgstr "" + msgid "Buttons" msgstr "Кнопки" @@ -576,6 +590,14 @@ msgid "Custom delegated IPv6-prefix" msgstr "" msgid "" +"Custom feed definitions, e.g. private feeds. This file can be preserved in a " +"sysupgrade." +msgstr "" + +msgid "Custom feeds" +msgstr "" + +msgid "" "Customizes the behaviour of the device LEDs if possible." msgstr "" @@ -674,6 +696,12 @@ msgstr "Устройство" msgid "Device Configuration" msgstr "Конфигурация устройства" +msgid "Device is rebooting..." +msgstr "" + +msgid "Device unreachable" +msgstr "" + msgid "Diagnostics" msgstr "Диагностика" @@ -714,6 +742,9 @@ msgstr "Оптимизация расстояния" msgid "Distance to farthest network member in meters." msgstr "Расстояние до самого удалённого сетевого узла в метрах." +msgid "Distribution feeds" +msgstr "" + msgid "Diversity" msgstr "Разновидность антенн" @@ -789,6 +820,9 @@ msgstr "" "Динамически выделять DHCP-адреса клиентам. Если выключено, то будут " "обслужены только клиенты с постоянно арендованными адресами." +msgid "EA-bits length" +msgstr "" + msgid "EAP-Method" msgstr "Метод EAP" @@ -821,9 +855,6 @@ msgstr "Включить STP" msgid "Enable HE.net dynamic endpoint update" msgstr "Включить динамическое обновление оконечной точки HE.net" -msgid "Enable IPv6 negotiation on the PPP link" -msgstr "Включить IPv6-согласование на PPP-соединении" - msgid "Enable Jumbo Frame passthrough" msgstr "Пропускать Jumbo-кадры" @@ -982,6 +1013,9 @@ msgstr "Требовать TKIP" msgid "Force TKIP and CCMP (AES)" msgstr "TKIP или CCMP (AES)" +msgid "Form token mismatch" +msgstr "" + msgid "Forward DHCP traffic" msgstr "Перенаправлять трафик DHCP" @@ -1021,6 +1055,9 @@ msgstr "Основные настройки" msgid "General Setup" msgstr "Основные настройки" +msgid "General options for opkg" +msgstr "" + msgid "Generate archive" msgstr "Создать архив" @@ -1132,6 +1169,9 @@ msgstr "Маска сети IPv4" msgid "IPv4 only" msgstr "Только IPv4" +msgid "IPv4 prefix" +msgstr "" + msgid "IPv4 prefix length" msgstr "Длина префикса IPv4" @@ -1231,8 +1271,8 @@ msgstr "" "устройство, на котором располагается раздел подкачки, работает гораздо " "медленнее, чем RAM." -msgid "Ignore Hosts files" -msgstr "Игнорировать файлы hosts" +msgid "Ignore /etc/hosts" +msgstr "Ignore /etc/hosts" msgid "Ignore interface" msgstr "Игнорировать интерфейс" @@ -1246,6 +1286,11 @@ msgstr "Образ" msgid "In" msgstr "В" +msgid "" +"In order to prevent unauthorized access to the system, your request has been " +"blocked. Click \"Continue »\" below to return to the previous page." +msgstr "" + msgid "Inactivity timeout" msgstr "Таймаут бездействия" @@ -1526,6 +1571,9 @@ msgstr "MAC-фильтр" msgid "MAC-List" msgstr "Список MAC" +msgid "MAP / LW4over6" +msgstr "" + msgid "MB/s" msgstr "МБ/с" @@ -1540,6 +1588,9 @@ msgid "" "below:" msgstr "" +msgid "Manual" +msgstr "" + msgid "Maximum Rate" msgstr "Максимальная скорость" @@ -1650,6 +1701,9 @@ msgstr "Адрес групповой передачи" msgid "NAS ID" msgstr "Идентификатор NAS" +msgid "NAT64 Prefix" +msgstr "" + msgid "NDP-Proxy" msgstr "" @@ -1882,6 +1936,12 @@ msgstr "PPPoE" msgid "PPtP" msgstr "PPTP" +msgid "PSID offset" +msgstr "" + +msgid "PSID-bits length" +msgstr "" + msgid "Package libiwinfo required!" msgstr "Требуется пакет libiwinfo!" @@ -1909,9 +1969,6 @@ msgstr "Пароль или закрытый ключ" msgid "Password successfully changed!" msgstr "Пароль успешно изменён!" -msgid "Path" -msgstr "Путь" - msgid "Path to CA-Certificate" msgstr "Путь к центру сертификации" @@ -1948,9 +2005,6 @@ msgstr "Пакетов." msgid "Please enter your username and password." msgstr "Пожалуйста, введите логин и пароль." -msgid "Please wait: Device rebooting..." -msgstr "Пожалуйста подождите: устройство перезагружается..." - msgid "Policy" msgstr "Политика" @@ -2343,6 +2397,9 @@ msgstr "Сигнал:" msgid "Size" msgstr "Размер" +msgid "Size (.ipk)" +msgstr "" + msgid "Skip" msgstr "Пропустить" @@ -2633,6 +2690,9 @@ msgstr "" msgid "The selected protocol needs a device assigned" msgstr "Для выбранного протокола необходимо задать устройство" +msgid "The submitted security token is invalid or already expired!" +msgstr "" + msgid "" "The system is erasing the configuration partition now and will reboot itself " "when finished." @@ -2693,6 +2753,12 @@ msgid "This IPv4 address of the relay" msgstr "IPv4-адрес ретранслятора" msgid "" +"This file may contain lines like 'server=/domain/1.2.3.4' or " +"'server=1.2.3.4' fordomain-specific or full upstream DNS servers." +msgstr "" + +msgid "" "This is a list of shell glob patterns for matching files and directories to " "include during sysupgrade. Modified files in /etc/config/ and certain other " "configurations are automatically preserved." @@ -3027,13 +3093,14 @@ msgstr "Ожидание применения изменений..." msgid "Waiting for command to complete..." msgstr "Ожидание завершения выполнения команды..." +msgid "Waiting for device..." +msgstr "" + msgid "Warning" msgstr "Внимание" -msgid "Warning: There are unsaved changes that will be lost while rebooting!" +msgid "Warning: There are unsaved changes that will get lost on reboot!" msgstr "" -"Внимание: есть несохранённые изменения, которые потеряются после " -"перезагрузки!" msgid "Whether to create an IPv6 default route over the tunnel" msgstr "" @@ -3267,6 +3334,24 @@ msgstr "да" msgid "« Back" msgstr "« Назад" +#~ msgid "Enable IPv6 negotiation on the PPP link" +#~ msgstr "Включить IPv6-согласование на PPP-соединении" + +#~ msgid "Ignore Hosts files" +#~ msgstr "Игнорировать файлы hosts" + +#~ msgid "Path" +#~ msgstr "Путь" + +#~ msgid "Please wait: Device rebooting..." +#~ msgstr "Пожалуйста подождите: устройство перезагружается..." + +#~ msgid "" +#~ "Warning: There are unsaved changes that will be lost while rebooting!" +#~ msgstr "" +#~ "Внимание: есть несохранённые изменения, которые потеряются после " +#~ "перезагрузки!" + #~ msgid "" #~ "Always use 40MHz channels even if the secondary channel overlaps. Using " #~ "this option does not comply with IEEE 802.11n-2009!" @@ -4101,9 +4186,6 @@ msgstr "« Назад" #~ msgid "Here you can configure installed wifi devices." #~ msgstr "Здесь вы можете настроить установленные Wi-Fi устройства." -#~ msgid "Ignore /etc/hosts" -#~ msgstr "Ignore /etc/hosts" - #~ msgid "Independent (Ad-Hoc)" #~ msgstr "Незаыисимая (Ad-Hoc)" diff --git a/modules/luci-base/po/sk/base.po b/modules/luci-base/po/sk/base.po index d943ccb89..3f328ebf1 100644 --- a/modules/luci-base/po/sk/base.po +++ b/modules/luci-base/po/sk/base.po @@ -41,6 +41,9 @@ msgstr "" msgid "15 Minute Load:" msgstr "" +msgid "464XLAT (CLAT)" +msgstr "" + msgid "5 Minute Load:" msgstr "" @@ -190,6 +193,9 @@ msgstr "" msgid "Additional Hosts files" msgstr "" +msgid "Additional servers file" +msgstr "" + msgid "Address" msgstr "" @@ -315,6 +321,9 @@ msgstr "" msgid "Average:" msgstr "" +msgid "BR / DMR / AFTR" +msgstr "" + msgid "BSSID" msgstr "" @@ -387,6 +396,11 @@ msgstr "" msgid "Buffered" msgstr "" +msgid "" +"Build/distribution specific feed definitions. This file will NOT be " +"preserved in any sysupgrade." +msgstr "" + msgid "Buttons" msgstr "" @@ -534,6 +548,14 @@ msgid "Custom delegated IPv6-prefix" msgstr "" msgid "" +"Custom feed definitions, e.g. private feeds. This file can be preserved in a " +"sysupgrade." +msgstr "" + +msgid "Custom feeds" +msgstr "" + +msgid "" "Customizes the behaviour of the device LEDs if possible." msgstr "" @@ -628,6 +650,12 @@ msgstr "" msgid "Device Configuration" msgstr "" +msgid "Device is rebooting..." +msgstr "" + +msgid "Device unreachable" +msgstr "" + msgid "Diagnostics" msgstr "" @@ -666,6 +694,9 @@ msgstr "" msgid "Distance to farthest network member in meters." msgstr "" +msgid "Distribution feeds" +msgstr "" + msgid "Diversity" msgstr "" @@ -727,6 +758,9 @@ msgid "" "having static leases will be served." msgstr "" +msgid "EA-bits length" +msgstr "" + msgid "EAP-Method" msgstr "" @@ -756,9 +790,6 @@ msgstr "" msgid "Enable HE.net dynamic endpoint update" msgstr "" -msgid "Enable IPv6 negotiation on the PPP link" -msgstr "" - msgid "Enable Jumbo Frame passthrough" msgstr "" @@ -913,6 +944,9 @@ msgstr "" msgid "Force TKIP and CCMP (AES)" msgstr "" +msgid "Form token mismatch" +msgstr "" + msgid "Forward DHCP traffic" msgstr "" @@ -952,6 +986,9 @@ msgstr "" msgid "General Setup" msgstr "" +msgid "General options for opkg" +msgstr "" + msgid "Generate archive" msgstr "" @@ -1058,6 +1095,9 @@ msgstr "" msgid "IPv4 only" msgstr "" +msgid "IPv4 prefix" +msgstr "" + msgid "IPv4 prefix length" msgstr "" @@ -1147,7 +1187,7 @@ msgid "" "of the RAM." msgstr "" -msgid "Ignore Hosts files" +msgid "Ignore /etc/hosts" msgstr "" msgid "Ignore interface" @@ -1162,6 +1202,11 @@ msgstr "" msgid "In" msgstr "" +msgid "" +"In order to prevent unauthorized access to the system, your request has been " +"blocked. Click \"Continue »\" below to return to the previous page." +msgstr "" + msgid "Inactivity timeout" msgstr "" @@ -1428,6 +1473,9 @@ msgstr "" msgid "MAC-List" msgstr "" +msgid "MAP / LW4over6" +msgstr "" + msgid "MB/s" msgstr "" @@ -1442,6 +1490,9 @@ msgid "" "below:" msgstr "" +msgid "Manual" +msgstr "" + msgid "Maximum Rate" msgstr "" @@ -1549,6 +1600,9 @@ msgstr "" msgid "NAS ID" msgstr "" +msgid "NAT64 Prefix" +msgstr "" + msgid "NDP-Proxy" msgstr "" @@ -1773,6 +1827,12 @@ msgstr "" msgid "PPtP" msgstr "" +msgid "PSID offset" +msgstr "" + +msgid "PSID-bits length" +msgstr "" + msgid "Package libiwinfo required!" msgstr "" @@ -1800,9 +1860,6 @@ msgstr "" msgid "Password successfully changed!" msgstr "" -msgid "Path" -msgstr "" - msgid "Path to CA-Certificate" msgstr "" @@ -1839,9 +1896,6 @@ msgstr "" msgid "Please enter your username and password." msgstr "" -msgid "Please wait: Device rebooting..." -msgstr "" - msgid "Policy" msgstr "" @@ -2213,6 +2267,9 @@ msgstr "" msgid "Size" msgstr "" +msgid "Size (.ipk)" +msgstr "" + msgid "Skip" msgstr "" @@ -2463,6 +2520,9 @@ msgstr "" msgid "The selected protocol needs a device assigned" msgstr "" +msgid "The submitted security token is invalid or already expired!" +msgstr "" + msgid "" "The system is erasing the configuration partition now and will reboot itself " "when finished." @@ -2511,6 +2571,12 @@ msgid "This IPv4 address of the relay" msgstr "" msgid "" +"This file may contain lines like 'server=/domain/1.2.3.4' or " +"'server=1.2.3.4' fordomain-specific or full upstream DNS servers." +msgstr "" + +msgid "" "This is a list of shell glob patterns for matching files and directories to " "include during sysupgrade. Modified files in /etc/config/ and certain other " "configurations are automatically preserved." @@ -2819,10 +2885,13 @@ msgstr "" msgid "Waiting for command to complete..." msgstr "" +msgid "Waiting for device..." +msgstr "" + msgid "Warning" msgstr "" -msgid "Warning: There are unsaved changes that will be lost while rebooting!" +msgid "Warning: There are unsaved changes that will get lost on reboot!" msgstr "" msgid "Whether to create an IPv6 default route over the tunnel" diff --git a/modules/luci-base/po/sv/base.po b/modules/luci-base/po/sv/base.po index 86fa224e7..4e97068e9 100644 --- a/modules/luci-base/po/sv/base.po +++ b/modules/luci-base/po/sv/base.po @@ -44,6 +44,9 @@ msgstr "Belastning senaste minuten:" msgid "15 Minute Load:" msgstr "Belastning senaste 15 minutrarna:" +msgid "464XLAT (CLAT)" +msgstr "" + msgid "5 Minute Load:" msgstr "Belastning senaste 5 minutrarna:" @@ -196,6 +199,9 @@ msgstr "" msgid "Additional Hosts files" msgstr "" +msgid "Additional servers file" +msgstr "" + msgid "Address" msgstr "" @@ -321,6 +327,9 @@ msgstr "" msgid "Average:" msgstr "" +msgid "BR / DMR / AFTR" +msgstr "" + msgid "BSSID" msgstr "" @@ -393,6 +402,11 @@ msgstr "" msgid "Buffered" msgstr "" +msgid "" +"Build/distribution specific feed definitions. This file will NOT be " +"preserved in any sysupgrade." +msgstr "" + msgid "Buttons" msgstr "" @@ -540,6 +554,14 @@ msgid "Custom delegated IPv6-prefix" msgstr "" msgid "" +"Custom feed definitions, e.g. private feeds. This file can be preserved in a " +"sysupgrade." +msgstr "" + +msgid "Custom feeds" +msgstr "" + +msgid "" "Customizes the behaviour of the device LEDs if possible." msgstr "" @@ -634,6 +656,12 @@ msgstr "" msgid "Device Configuration" msgstr "" +msgid "Device is rebooting..." +msgstr "" + +msgid "Device unreachable" +msgstr "" + msgid "Diagnostics" msgstr "" @@ -672,6 +700,9 @@ msgstr "" msgid "Distance to farthest network member in meters." msgstr "" +msgid "Distribution feeds" +msgstr "" + msgid "Diversity" msgstr "" @@ -733,6 +764,9 @@ msgid "" "having static leases will be served." msgstr "" +msgid "EA-bits length" +msgstr "" + msgid "EAP-Method" msgstr "" @@ -762,9 +796,6 @@ msgstr "" msgid "Enable HE.net dynamic endpoint update" msgstr "" -msgid "Enable IPv6 negotiation on the PPP link" -msgstr "" - msgid "Enable Jumbo Frame passthrough" msgstr "" @@ -919,6 +950,9 @@ msgstr "" msgid "Force TKIP and CCMP (AES)" msgstr "" +msgid "Form token mismatch" +msgstr "" + msgid "Forward DHCP traffic" msgstr "" @@ -958,6 +992,9 @@ msgstr "" msgid "General Setup" msgstr "" +msgid "General options for opkg" +msgstr "" + msgid "Generate archive" msgstr "" @@ -1064,6 +1101,9 @@ msgstr "" msgid "IPv4 only" msgstr "" +msgid "IPv4 prefix" +msgstr "" + msgid "IPv4 prefix length" msgstr "" @@ -1153,7 +1193,7 @@ msgid "" "of the RAM." msgstr "" -msgid "Ignore Hosts files" +msgid "Ignore /etc/hosts" msgstr "" msgid "Ignore interface" @@ -1168,6 +1208,11 @@ msgstr "" msgid "In" msgstr "" +msgid "" +"In order to prevent unauthorized access to the system, your request has been " +"blocked. Click \"Continue »\" below to return to the previous page." +msgstr "" + msgid "Inactivity timeout" msgstr "" @@ -1434,6 +1479,9 @@ msgstr "" msgid "MAC-List" msgstr "" +msgid "MAP / LW4over6" +msgstr "" + msgid "MB/s" msgstr "" @@ -1448,6 +1496,9 @@ msgid "" "below:" msgstr "" +msgid "Manual" +msgstr "" + msgid "Maximum Rate" msgstr "" @@ -1555,6 +1606,9 @@ msgstr "" msgid "NAS ID" msgstr "" +msgid "NAT64 Prefix" +msgstr "" + msgid "NDP-Proxy" msgstr "" @@ -1779,6 +1833,12 @@ msgstr "" msgid "PPtP" msgstr "" +msgid "PSID offset" +msgstr "" + +msgid "PSID-bits length" +msgstr "" + msgid "Package libiwinfo required!" msgstr "" @@ -1806,9 +1866,6 @@ msgstr "" msgid "Password successfully changed!" msgstr "" -msgid "Path" -msgstr "" - msgid "Path to CA-Certificate" msgstr "" @@ -1845,9 +1902,6 @@ msgstr "" msgid "Please enter your username and password." msgstr "" -msgid "Please wait: Device rebooting..." -msgstr "" - msgid "Policy" msgstr "" @@ -2219,6 +2273,9 @@ msgstr "" msgid "Size" msgstr "" +msgid "Size (.ipk)" +msgstr "" + msgid "Skip" msgstr "" @@ -2469,6 +2526,9 @@ msgstr "" msgid "The selected protocol needs a device assigned" msgstr "" +msgid "The submitted security token is invalid or already expired!" +msgstr "" + msgid "" "The system is erasing the configuration partition now and will reboot itself " "when finished." @@ -2517,6 +2577,12 @@ msgid "This IPv4 address of the relay" msgstr "" msgid "" +"This file may contain lines like 'server=/domain/1.2.3.4' or " +"'server=1.2.3.4' fordomain-specific or full upstream DNS servers." +msgstr "" + +msgid "" "This is a list of shell glob patterns for matching files and directories to " "include during sysupgrade. Modified files in /etc/config/ and certain other " "configurations are automatically preserved." @@ -2825,10 +2891,13 @@ msgstr "" msgid "Waiting for command to complete..." msgstr "" +msgid "Waiting for device..." +msgstr "" + msgid "Warning" msgstr "" -msgid "Warning: There are unsaved changes that will be lost while rebooting!" +msgid "Warning: There are unsaved changes that will get lost on reboot!" msgstr "" msgid "Whether to create an IPv6 default route over the tunnel" diff --git a/modules/luci-base/po/templates/base.pot b/modules/luci-base/po/templates/base.pot index 21ec6571e..d0211cc31 100644 --- a/modules/luci-base/po/templates/base.pot +++ b/modules/luci-base/po/templates/base.pot @@ -34,6 +34,9 @@ msgstr "" msgid "15 Minute Load:" msgstr "" +msgid "464XLAT (CLAT)" +msgstr "" + msgid "5 Minute Load:" msgstr "" @@ -183,6 +186,9 @@ msgstr "" msgid "Additional Hosts files" msgstr "" +msgid "Additional servers file" +msgstr "" + msgid "Address" msgstr "" @@ -308,6 +314,9 @@ msgstr "" msgid "Average:" msgstr "" +msgid "BR / DMR / AFTR" +msgstr "" + msgid "BSSID" msgstr "" @@ -380,6 +389,11 @@ msgstr "" msgid "Buffered" msgstr "" +msgid "" +"Build/distribution specific feed definitions. This file will NOT be " +"preserved in any sysupgrade." +msgstr "" + msgid "Buttons" msgstr "" @@ -527,6 +541,14 @@ msgid "Custom delegated IPv6-prefix" msgstr "" msgid "" +"Custom feed definitions, e.g. private feeds. This file can be preserved in a " +"sysupgrade." +msgstr "" + +msgid "Custom feeds" +msgstr "" + +msgid "" "Customizes the behaviour of the device LEDs if possible." msgstr "" @@ -621,6 +643,12 @@ msgstr "" msgid "Device Configuration" msgstr "" +msgid "Device is rebooting..." +msgstr "" + +msgid "Device unreachable" +msgstr "" + msgid "Diagnostics" msgstr "" @@ -659,6 +687,9 @@ msgstr "" msgid "Distance to farthest network member in meters." msgstr "" +msgid "Distribution feeds" +msgstr "" + msgid "Diversity" msgstr "" @@ -720,12 +751,20 @@ msgid "" "having static leases will be served." msgstr "" +msgid "EA-bits length" +msgstr "" + msgid "EAP-Method" msgstr "" msgid "Edit" msgstr "" +msgid "" +"Edit the raw configuration data above to fix any error and hit \"Save\" to " +"reload the page." +msgstr "" + msgid "Edit this interface" msgstr "" @@ -744,9 +783,6 @@ msgstr "" msgid "Enable HE.net dynamic endpoint update" msgstr "" -msgid "Enable IPv6 negotiation on the PPP link" -msgstr "" - msgid "Enable Jumbo Frame passthrough" msgstr "" @@ -901,6 +937,9 @@ msgstr "" msgid "Force TKIP and CCMP (AES)" msgstr "" +msgid "Form token mismatch" +msgstr "" + msgid "Forward DHCP traffic" msgstr "" @@ -940,6 +979,9 @@ msgstr "" msgid "General Setup" msgstr "" +msgid "General options for opkg" +msgstr "" + msgid "Generate archive" msgstr "" @@ -1046,6 +1088,9 @@ msgstr "" msgid "IPv4 only" msgstr "" +msgid "IPv4 prefix" +msgstr "" + msgid "IPv4 prefix length" msgstr "" @@ -1135,7 +1180,7 @@ msgid "" "of the RAM." msgstr "" -msgid "Ignore Hosts files" +msgid "Ignore /etc/hosts" msgstr "" msgid "Ignore interface" @@ -1150,6 +1195,11 @@ msgstr "" msgid "In" msgstr "" +msgid "" +"In order to prevent unauthorized access to the system, your request has been " +"blocked. Click \"Continue »\" below to return to the previous page." +msgstr "" + msgid "Inactivity timeout" msgstr "" @@ -1416,6 +1466,9 @@ msgstr "" msgid "MAC-List" msgstr "" +msgid "MAP / LW4over6" +msgstr "" + msgid "MB/s" msgstr "" @@ -1430,6 +1483,9 @@ msgid "" "below:" msgstr "" +msgid "Manual" +msgstr "" + msgid "Maximum Rate" msgstr "" @@ -1537,6 +1593,9 @@ msgstr "" msgid "NAS ID" msgstr "" +msgid "NAT64 Prefix" +msgstr "" + msgid "NDP-Proxy" msgstr "" @@ -1761,6 +1820,12 @@ msgstr "" msgid "PPtP" msgstr "" +msgid "PSID offset" +msgstr "" + +msgid "PSID-bits length" +msgstr "" + msgid "Package libiwinfo required!" msgstr "" @@ -1788,9 +1853,6 @@ msgstr "" msgid "Password successfully changed!" msgstr "" -msgid "Path" -msgstr "" - msgid "Path to CA-Certificate" msgstr "" @@ -1827,9 +1889,6 @@ msgstr "" msgid "Please enter your username and password." msgstr "" -msgid "Please wait: Device rebooting..." -msgstr "" - msgid "Policy" msgstr "" @@ -2201,6 +2260,9 @@ msgstr "" msgid "Size" msgstr "" +msgid "Size (.ipk)" +msgstr "" + msgid "Skip" msgstr "" @@ -2394,6 +2456,9 @@ msgid "" "code> and _" msgstr "" +msgid "The configuration file could not be loaded due to the following error:" +msgstr "" + msgid "" "The device file of the memory or partition (e.g." " /dev/sda1)" @@ -2448,6 +2513,9 @@ msgstr "" msgid "The selected protocol needs a device assigned" msgstr "" +msgid "The submitted security token is invalid or already expired!" +msgstr "" + msgid "" "The system is erasing the configuration partition now and will reboot itself " "when finished." @@ -2496,6 +2564,12 @@ msgid "This IPv4 address of the relay" msgstr "" msgid "" +"This file may contain lines like 'server=/domain/1.2.3.4' or " +"'server=1.2.3.4' fordomain-specific or full upstream DNS servers." +msgstr "" + +msgid "" "This is a list of shell glob patterns for matching files and directories to " "include during sysupgrade. Modified files in /etc/config/ and certain other " "configurations are automatically preserved." @@ -2804,10 +2878,13 @@ msgstr "" msgid "Waiting for command to complete..." msgstr "" +msgid "Waiting for device..." +msgstr "" + msgid "Warning" msgstr "" -msgid "Warning: There are unsaved changes that will be lost while rebooting!" +msgid "Warning: There are unsaved changes that will get lost on reboot!" msgstr "" msgid "Whether to create an IPv6 default route over the tunnel" diff --git a/modules/luci-base/po/tr/base.po b/modules/luci-base/po/tr/base.po index 1bf53aa57..3ef95609e 100644 --- a/modules/luci-base/po/tr/base.po +++ b/modules/luci-base/po/tr/base.po @@ -44,6 +44,9 @@ msgstr "1 Dakikalık Yük:" msgid "15 Minute Load:" msgstr "15 Dakikalık Yük:" +msgid "464XLAT (CLAT)" +msgstr "" + msgid "5 Minute Load:" msgstr "5 Dakikalık Yük:" @@ -201,6 +204,9 @@ msgstr "Yeni arabirim ekle..." msgid "Additional Hosts files" msgstr "" +msgid "Additional servers file" +msgstr "" + msgid "Address" msgstr "Adresler" @@ -328,6 +334,9 @@ msgstr "Kullanılabilir Paketler" msgid "Average:" msgstr "Ortalama:" +msgid "BR / DMR / AFTR" +msgstr "" + msgid "BSSID" msgstr "" @@ -400,6 +409,11 @@ msgstr "" msgid "Buffered" msgstr "" +msgid "" +"Build/distribution specific feed definitions. This file will NOT be " +"preserved in any sysupgrade." +msgstr "" + msgid "Buttons" msgstr "" @@ -547,6 +561,14 @@ msgid "Custom delegated IPv6-prefix" msgstr "" msgid "" +"Custom feed definitions, e.g. private feeds. This file can be preserved in a " +"sysupgrade." +msgstr "" + +msgid "Custom feeds" +msgstr "" + +msgid "" "Customizes the behaviour of the device LEDs if possible." msgstr "" @@ -641,6 +663,12 @@ msgstr "" msgid "Device Configuration" msgstr "" +msgid "Device is rebooting..." +msgstr "" + +msgid "Device unreachable" +msgstr "" + msgid "Diagnostics" msgstr "" @@ -679,6 +707,9 @@ msgstr "" msgid "Distance to farthest network member in meters." msgstr "" +msgid "Distribution feeds" +msgstr "" + msgid "Diversity" msgstr "" @@ -740,6 +771,9 @@ msgid "" "having static leases will be served." msgstr "" +msgid "EA-bits length" +msgstr "" + msgid "EAP-Method" msgstr "" @@ -769,9 +803,6 @@ msgstr "" msgid "Enable HE.net dynamic endpoint update" msgstr "" -msgid "Enable IPv6 negotiation on the PPP link" -msgstr "" - msgid "Enable Jumbo Frame passthrough" msgstr "" @@ -926,6 +957,9 @@ msgstr "" msgid "Force TKIP and CCMP (AES)" msgstr "" +msgid "Form token mismatch" +msgstr "" + msgid "Forward DHCP traffic" msgstr "" @@ -965,6 +999,9 @@ msgstr "" msgid "General Setup" msgstr "" +msgid "General options for opkg" +msgstr "" + msgid "Generate archive" msgstr "" @@ -1071,6 +1108,9 @@ msgstr "" msgid "IPv4 only" msgstr "" +msgid "IPv4 prefix" +msgstr "" + msgid "IPv4 prefix length" msgstr "" @@ -1160,7 +1200,7 @@ msgid "" "of the RAM." msgstr "" -msgid "Ignore Hosts files" +msgid "Ignore /etc/hosts" msgstr "" msgid "Ignore interface" @@ -1175,6 +1215,11 @@ msgstr "" msgid "In" msgstr "" +msgid "" +"In order to prevent unauthorized access to the system, your request has been " +"blocked. Click \"Continue »\" below to return to the previous page." +msgstr "" + msgid "Inactivity timeout" msgstr "" @@ -1441,6 +1486,9 @@ msgstr "" msgid "MAC-List" msgstr "" +msgid "MAP / LW4over6" +msgstr "" + msgid "MB/s" msgstr "" @@ -1455,6 +1503,9 @@ msgid "" "below:" msgstr "" +msgid "Manual" +msgstr "" + msgid "Maximum Rate" msgstr "" @@ -1562,6 +1613,9 @@ msgstr "" msgid "NAS ID" msgstr "" +msgid "NAT64 Prefix" +msgstr "" + msgid "NDP-Proxy" msgstr "" @@ -1786,6 +1840,12 @@ msgstr "" msgid "PPtP" msgstr "" +msgid "PSID offset" +msgstr "" + +msgid "PSID-bits length" +msgstr "" + msgid "Package libiwinfo required!" msgstr "" @@ -1813,9 +1873,6 @@ msgstr "" msgid "Password successfully changed!" msgstr "" -msgid "Path" -msgstr "" - msgid "Path to CA-Certificate" msgstr "" @@ -1852,9 +1909,6 @@ msgstr "" msgid "Please enter your username and password." msgstr "" -msgid "Please wait: Device rebooting..." -msgstr "" - msgid "Policy" msgstr "" @@ -2226,6 +2280,9 @@ msgstr "" msgid "Size" msgstr "" +msgid "Size (.ipk)" +msgstr "" + msgid "Skip" msgstr "" @@ -2476,6 +2533,9 @@ msgstr "" msgid "The selected protocol needs a device assigned" msgstr "" +msgid "The submitted security token is invalid or already expired!" +msgstr "" + msgid "" "The system is erasing the configuration partition now and will reboot itself " "when finished." @@ -2524,6 +2584,12 @@ msgid "This IPv4 address of the relay" msgstr "" msgid "" +"This file may contain lines like 'server=/domain/1.2.3.4' or " +"'server=1.2.3.4' fordomain-specific or full upstream DNS servers." +msgstr "" + +msgid "" "This is a list of shell glob patterns for matching files and directories to " "include during sysupgrade. Modified files in /etc/config/ and certain other " "configurations are automatically preserved." @@ -2832,10 +2898,13 @@ msgstr "" msgid "Waiting for command to complete..." msgstr "" +msgid "Waiting for device..." +msgstr "" + msgid "Warning" msgstr "" -msgid "Warning: There are unsaved changes that will be lost while rebooting!" +msgid "Warning: There are unsaved changes that will get lost on reboot!" msgstr "" msgid "Whether to create an IPv6 default route over the tunnel" diff --git a/modules/luci-base/po/uk/base.po b/modules/luci-base/po/uk/base.po index c5483221c..b5fbe506a 100644 --- a/modules/luci-base/po/uk/base.po +++ b/modules/luci-base/po/uk/base.po @@ -45,6 +45,9 @@ msgstr "Навантаження за 1 хвилину:" msgid "15 Minute Load:" msgstr "Навантаження за 15 хвилин:" +msgid "464XLAT (CLAT)" +msgstr "" + msgid "5 Minute Load:" msgstr "Навантаження за 5 хвилин:" @@ -222,6 +225,9 @@ msgstr "Додати новий інтерфейс..." msgid "Additional Hosts files" msgstr "Додаткові файли hosts" +msgid "Additional servers file" +msgstr "" + msgid "Address" msgstr "Адреса" @@ -352,6 +358,9 @@ msgstr "Доступні пакети" msgid "Average:" msgstr "Середнє значення:" +msgid "BR / DMR / AFTR" +msgstr "" + msgid "BSSID" msgstr "BSSID" @@ -427,6 +436,11 @@ msgstr "Бездротовий 802.11 контролер Broadcom BCM%04x" msgid "Buffered" msgstr "Буферизовано" +msgid "" +"Build/distribution specific feed definitions. This file will NOT be " +"preserved in any sysupgrade." +msgstr "" + msgid "Buttons" msgstr "Кнопки" @@ -585,6 +599,14 @@ msgid "Custom delegated IPv6-prefix" msgstr "" msgid "" +"Custom feed definitions, e.g. private feeds. This file can be preserved in a " +"sysupgrade." +msgstr "" + +msgid "Custom feeds" +msgstr "" + +msgid "" "Customizes the behaviour of the device LEDs if possible." msgstr "" @@ -684,6 +706,12 @@ msgstr "Пристрій" msgid "Device Configuration" msgstr "Конфігурація пристрою" +msgid "Device is rebooting..." +msgstr "" + +msgid "Device unreachable" +msgstr "" + msgid "Diagnostics" msgstr "Діагностика" @@ -724,6 +752,9 @@ msgstr "Оптимізація за відстанню" msgid "Distance to farthest network member in meters." msgstr "Відстань до найвіддаленішого вузла мережі в метрах." +msgid "Distribution feeds" +msgstr "" + msgid "Diversity" msgstr "Різновидність" @@ -801,6 +832,9 @@ msgstr "" "Динамічне виділення DHCP-адрес для клієнтів. Якщо вимкнути, будуть " "обслуговуватися тільки клієнти, які мають статичні оренди." +msgid "EA-bits length" +msgstr "" + msgid "EAP-Method" msgstr "EAP-Метод" @@ -830,9 +864,6 @@ msgstr "Увімкнути STP" msgid "Enable HE.net dynamic endpoint update" msgstr "Увімкнути динамічне оновлення кінцевої точки HE.net" -msgid "Enable IPv6 negotiation on the PPP link" -msgstr "Увімкнути узгодження IPv6 для PPP-з'єднань" - msgid "Enable Jumbo Frame passthrough" msgstr "Пропускати Jumbo-фрейми" @@ -989,6 +1020,9 @@ msgstr "Примусово TKIP" msgid "Force TKIP and CCMP (AES)" msgstr "Примусово TKIP та CCMP (AES)" +msgid "Form token mismatch" +msgstr "" + msgid "Forward DHCP traffic" msgstr "Спрямовувати DHCP-трафік" @@ -1028,6 +1062,9 @@ msgstr "Загальні настройки" msgid "General Setup" msgstr "Загальні настройки" +msgid "General options for opkg" +msgstr "" + msgid "Generate archive" msgstr "Cтворити архів" @@ -1140,6 +1177,9 @@ msgstr "Маска мережі IPv4" msgid "IPv4 only" msgstr "Тільки IPv4" +msgid "IPv4 prefix" +msgstr "" + msgid "IPv4 prefix length" msgstr "Довжина префікса IPv4" @@ -1239,8 +1279,8 @@ msgstr "" "своп-пристрої не можуть бути доступні з такою високою швидкістю, як RAM." -msgid "Ignore Hosts files" -msgstr "Ігнорувати файли hosts" +msgid "Ignore /etc/hosts" +msgstr "" msgid "Ignore interface" msgstr "Ігнорувати интерфейс" @@ -1254,6 +1294,11 @@ msgstr "Образ" msgid "In" msgstr "Вх." +msgid "" +"In order to prevent unauthorized access to the system, your request has been " +"blocked. Click \"Continue »\" below to return to the previous page." +msgstr "" + msgid "Inactivity timeout" msgstr "Тайм-аут бездіяльності" @@ -1535,6 +1580,9 @@ msgstr "MAC-фільтр" msgid "MAC-List" msgstr "MAC-список" +msgid "MAP / LW4over6" +msgstr "" + msgid "MB/s" msgstr "MБ/с" @@ -1549,6 +1597,9 @@ msgid "" "below:" msgstr "" +msgid "Manual" +msgstr "" + msgid "Maximum Rate" msgstr "Максимальна швидкість" @@ -1658,6 +1709,9 @@ msgstr "Адреса багатоадресного потоку" msgid "NAS ID" msgstr "Ідентифікатор NAS" +msgid "NAT64 Prefix" +msgstr "" + msgid "NDP-Proxy" msgstr "" @@ -1893,6 +1947,12 @@ msgstr "PPPoE" msgid "PPtP" msgstr "PPtP" +msgid "PSID offset" +msgstr "" + +msgid "PSID-bits length" +msgstr "" + msgid "Package libiwinfo required!" msgstr "Потрібен пакет libiwinfo!" @@ -1920,9 +1980,6 @@ msgstr "Пароль закритого ключа" msgid "Password successfully changed!" msgstr "Пароль успішно змінено!" -msgid "Path" -msgstr "" - msgid "Path to CA-Certificate" msgstr "Шлях до центру сертифікції" @@ -1959,9 +2016,6 @@ msgstr "пакетів" msgid "Please enter your username and password." msgstr "Введіть ім'я користувача і пароль" -msgid "Please wait: Device rebooting..." -msgstr "Зачекайте. Пристрій перезавантажується..." - msgid "Policy" msgstr "Політика" @@ -2356,6 +2410,9 @@ msgstr "Сигнал:" msgid "Size" msgstr "Розмір" +msgid "Size (.ipk)" +msgstr "" + msgid "Skip" msgstr "Пропустити" @@ -2647,6 +2704,9 @@ msgstr "" msgid "The selected protocol needs a device assigned" msgstr "Обраний протокол потребує призначених пристроїв" +msgid "The submitted security token is invalid or already expired!" +msgstr "" + msgid "" "The system is erasing the configuration partition now and will reboot itself " "when finished." @@ -2708,6 +2768,12 @@ msgid "This IPv4 address of the relay" msgstr "Це IPv4-адреса ретранслятора" msgid "" +"This file may contain lines like 'server=/domain/1.2.3.4' or " +"'server=1.2.3.4' fordomain-specific or full upstream DNS servers." +msgstr "" + +msgid "" "This is a list of shell glob patterns for matching files and directories to " "include during sysupgrade. Modified files in /etc/config/ and certain other " "configurations are automatically preserved." @@ -3042,11 +3108,14 @@ msgstr "Очікуємо, доки зміни наберуть чинності. msgid "Waiting for command to complete..." msgstr "Очікуємо завершення виконання команди..." +msgid "Waiting for device..." +msgstr "" + msgid "Warning" msgstr "Застереження" -msgid "Warning: There are unsaved changes that will be lost while rebooting!" -msgstr "Увага: Є незбережені зміни, які будуть втрачені при перезавантаженні!" +msgid "Warning: There are unsaved changes that will get lost on reboot!" +msgstr "" msgid "Whether to create an IPv6 default route over the tunnel" msgstr "" @@ -3280,6 +3349,20 @@ msgstr "так" msgid "« Back" msgstr "« Назад" +#~ msgid "Enable IPv6 negotiation on the PPP link" +#~ msgstr "Увімкнути узгодження IPv6 для PPP-з'єднань" + +#~ msgid "Ignore Hosts files" +#~ msgstr "Ігнорувати файли hosts" + +#~ msgid "Please wait: Device rebooting..." +#~ msgstr "Зачекайте. Пристрій перезавантажується..." + +#~ msgid "" +#~ "Warning: There are unsaved changes that will be lost while rebooting!" +#~ msgstr "" +#~ "Увага: Є незбережені зміни, які будуть втрачені при перезавантаженні!" + #~ msgid "" #~ "Always use 40MHz channels even if the secondary channel overlaps. Using " #~ "this option does not comply with IEEE 802.11n-2009!" diff --git a/modules/luci-base/po/vi/base.po b/modules/luci-base/po/vi/base.po index d81be16eb..a9b2ae178 100644 --- a/modules/luci-base/po/vi/base.po +++ b/modules/luci-base/po/vi/base.po @@ -46,6 +46,9 @@ msgstr "" msgid "15 Minute Load:" msgstr "" +msgid "464XLAT (CLAT)" +msgstr "" + msgid "5 Minute Load:" msgstr "" @@ -197,6 +200,9 @@ msgstr "" msgid "Additional Hosts files" msgstr "" +msgid "Additional servers file" +msgstr "" + msgid "Address" msgstr "" @@ -322,6 +328,9 @@ msgstr "" msgid "Average:" msgstr "" +msgid "BR / DMR / AFTR" +msgstr "" + msgid "BSSID" msgstr "" @@ -394,6 +403,11 @@ msgstr "" msgid "Buffered" msgstr "" +msgid "" +"Build/distribution specific feed definitions. This file will NOT be " +"preserved in any sysupgrade." +msgstr "" + msgid "Buttons" msgstr "" @@ -541,6 +555,14 @@ msgid "Custom delegated IPv6-prefix" msgstr "" msgid "" +"Custom feed definitions, e.g. private feeds. This file can be preserved in a " +"sysupgrade." +msgstr "" + +msgid "Custom feeds" +msgstr "" + +msgid "" "Customizes the behaviour of the device LEDs if possible." msgstr "" @@ -637,6 +659,12 @@ msgstr "Công cụ" msgid "Device Configuration" msgstr "" +msgid "Device is rebooting..." +msgstr "" + +msgid "Device unreachable" +msgstr "" + msgid "Diagnostics" msgstr "" @@ -675,6 +703,9 @@ msgstr "Khoảng cách tối ưu" msgid "Distance to farthest network member in meters." msgstr "Khoảng cách tới thành viên xa nhất trong mạng lưới tính bằng mét" +msgid "Distribution feeds" +msgstr "" + msgid "Diversity" msgstr "Tính đa dạng" @@ -745,6 +776,9 @@ msgid "" "having static leases will be served." msgstr "" +msgid "EA-bits length" +msgstr "" + msgid "EAP-Method" msgstr "EAP-Method" @@ -774,9 +808,6 @@ msgstr "Kích hoạt STP" msgid "Enable HE.net dynamic endpoint update" msgstr "" -msgid "Enable IPv6 negotiation on the PPP link" -msgstr "" - msgid "Enable Jumbo Frame passthrough" msgstr "" @@ -931,6 +962,9 @@ msgstr "" msgid "Force TKIP and CCMP (AES)" msgstr "" +msgid "Form token mismatch" +msgstr "" + msgid "Forward DHCP traffic" msgstr "" @@ -970,6 +1004,9 @@ msgstr "" msgid "General Setup" msgstr "" +msgid "General options for opkg" +msgstr "" + msgid "Generate archive" msgstr "" @@ -1078,6 +1115,9 @@ msgstr "" msgid "IPv4 only" msgstr "" +msgid "IPv4 prefix" +msgstr "" + msgid "IPv4 prefix length" msgstr "" @@ -1172,8 +1212,8 @@ msgstr "" "một quá trình rất chậm vì một thiết bị swap không thể được truy cập với " "datarates cao hơn của RAM." -msgid "Ignore Hosts files" -msgstr "" +msgid "Ignore /etc/hosts" +msgstr "Lờ đi /etc/hosts" msgid "Ignore interface" msgstr "Lờ đi giao diện" @@ -1187,6 +1227,11 @@ msgstr "" msgid "In" msgstr "Trong" +msgid "" +"In order to prevent unauthorized access to the system, your request has been " +"blocked. Click \"Continue »\" below to return to the previous page." +msgstr "" + msgid "Inactivity timeout" msgstr "" @@ -1456,6 +1501,9 @@ msgstr "Lọc MAC" msgid "MAC-List" msgstr "Danh sách MAC" +msgid "MAP / LW4over6" +msgstr "" + msgid "MB/s" msgstr "" @@ -1470,6 +1518,9 @@ msgid "" "below:" msgstr "" +msgid "Manual" +msgstr "" + msgid "Maximum Rate" msgstr "Mức cao nhất" @@ -1579,6 +1630,9 @@ msgstr "" msgid "NAS ID" msgstr "NAS ID" +msgid "NAT64 Prefix" +msgstr "" + msgid "NDP-Proxy" msgstr "" @@ -1809,6 +1863,12 @@ msgstr "" msgid "PPtP" msgstr "" +msgid "PSID offset" +msgstr "" + +msgid "PSID-bits length" +msgstr "" + msgid "Package libiwinfo required!" msgstr "" @@ -1836,9 +1896,6 @@ msgstr "Mật mã của private key" msgid "Password successfully changed!" msgstr "" -msgid "Path" -msgstr "Đường dẫn" - msgid "Path to CA-Certificate" msgstr "Đường dẫn tới CA-Certificate" @@ -1875,9 +1932,6 @@ msgstr "" msgid "Please enter your username and password." msgstr "Nhập tên và mật mã" -msgid "Please wait: Device rebooting..." -msgstr "Xin chờ: Công cụ đang reboot" - msgid "Policy" msgstr "Chính sách" @@ -2253,6 +2307,9 @@ msgstr "" msgid "Size" msgstr "Dung lượng " +msgid "Size (.ipk)" +msgstr "" + msgid "Skip" msgstr "" @@ -2507,6 +2564,9 @@ msgstr "" msgid "The selected protocol needs a device assigned" msgstr "" +msgid "The submitted security token is invalid or already expired!" +msgstr "" + msgid "" "The system is erasing the configuration partition now and will reboot itself " "when finished." @@ -2561,6 +2621,12 @@ msgid "This IPv4 address of the relay" msgstr "" msgid "" +"This file may contain lines like 'server=/domain/1.2.3.4' or " +"'server=1.2.3.4' fordomain-specific or full upstream DNS servers." +msgstr "" + +msgid "" "This is a list of shell glob patterns for matching files and directories to " "include during sysupgrade. Modified files in /etc/config/ and certain other " "configurations are automatically preserved." @@ -2874,11 +2940,14 @@ msgstr "" msgid "Waiting for command to complete..." msgstr "" +msgid "Waiting for device..." +msgstr "" + msgid "Warning" msgstr "" -msgid "Warning: There are unsaved changes that will be lost while rebooting!" -msgstr "Cảnh báo: Các thay đổi chưa lưu sẽ bị mất trong khi khởi động lại!" +msgid "Warning: There are unsaved changes that will get lost on reboot!" +msgstr "" msgid "Whether to create an IPv6 default route over the tunnel" msgstr "" @@ -3109,6 +3178,16 @@ msgstr "" msgid "« Back" msgstr "" +#~ msgid "Path" +#~ msgstr "Đường dẫn" + +#~ msgid "Please wait: Device rebooting..." +#~ msgstr "Xin chờ: Công cụ đang reboot" + +#~ msgid "" +#~ "Warning: There are unsaved changes that will be lost while rebooting!" +#~ msgstr "Cảnh báo: Các thay đổi chưa lưu sẽ bị mất trong khi khởi động lại!" + #~ msgid "Frequency Hopping" #~ msgstr "Tần số Hopping" @@ -3685,9 +3764,6 @@ msgstr "" #~ msgid "Here you can configure installed wifi devices." #~ msgstr "Ở đây bạn có thể định cấu hình của công cụ wifi được cài đặt." -#~ msgid "Ignore /etc/hosts" -#~ msgstr "Lờ đi /etc/hosts" - #~ msgid "Independent (Ad-Hoc)" #~ msgstr "Độc lập (Ad-Hoc)" diff --git a/modules/luci-base/po/zh-cn/base.po b/modules/luci-base/po/zh-cn/base.po index 72bf93795..493870c9e 100644 --- a/modules/luci-base/po/zh-cn/base.po +++ b/modules/luci-base/po/zh-cn/base.po @@ -45,6 +45,9 @@ msgstr "1分钟负载:" msgid "15 Minute Load:" msgstr "15分钟负载:" +msgid "464XLAT (CLAT)" +msgstr "" + msgid "5 Minute Load:" msgstr "5分钟负载:" @@ -200,6 +203,9 @@ msgstr "添加新接口..." msgid "Additional Hosts files" msgstr "额外的HOSTS文件" +msgid "Additional servers file" +msgstr "" + msgid "Address" msgstr "地址" @@ -327,6 +333,9 @@ msgstr "可用软件包" msgid "Average:" msgstr "平均:" +msgid "BR / DMR / AFTR" +msgstr "" + msgid "BSSID" msgstr "BSSID" @@ -401,6 +410,11 @@ msgstr "Broadcom BCM%04x 802.11 无线网卡" msgid "Buffered" msgstr "已缓冲" +msgid "" +"Build/distribution specific feed definitions. This file will NOT be " +"preserved in any sysupgrade." +msgstr "" + msgid "Buttons" msgstr "按键" @@ -548,6 +562,14 @@ msgid "Custom delegated IPv6-prefix" msgstr "自定义分配的IPv6前缀" msgid "" +"Custom feed definitions, e.g. private feeds. This file can be preserved in a " +"sysupgrade." +msgstr "" + +msgid "Custom feeds" +msgstr "" + +msgid "" "Customizes the behaviour of the device LEDs if possible." msgstr "自定义LED的活动状态。" @@ -644,6 +666,12 @@ msgstr "设备" msgid "Device Configuration" msgstr "设备配置" +msgid "Device is rebooting..." +msgstr "" + +msgid "Device unreachable" +msgstr "" + msgid "Diagnostics" msgstr "网络诊断" @@ -683,6 +711,9 @@ msgstr "距离优化" msgid "Distance to farthest network member in meters." msgstr "最远客户端的距离(米)。" +msgid "Distribution feeds" +msgstr "" + msgid "Diversity" msgstr "分集" @@ -746,6 +777,9 @@ msgid "" "having static leases will be served." msgstr "动态分配DHCP地址。如果禁用,则只能为静态租用表中的客户端提供网络服务。" +msgid "EA-bits length" +msgstr "" + msgid "EAP-Method" msgstr "EAP-Method" @@ -775,9 +809,6 @@ msgstr "开启STP" msgid "Enable HE.net dynamic endpoint update" msgstr "启用HE.net动态终端更新" -msgid "Enable IPv6 negotiation on the PPP link" -msgstr "在PPP链路上启用IPv6协商" - msgid "Enable Jumbo Frame passthrough" msgstr "启用巨型帧透传" @@ -933,6 +964,9 @@ msgstr "强制使用TKIP加密" msgid "Force TKIP and CCMP (AES)" msgstr "TKIP和CCMP(AES)混合加密" +msgid "Form token mismatch" +msgstr "" + msgid "Forward DHCP traffic" msgstr "转发DHCP数据包" @@ -972,6 +1006,9 @@ msgstr "基本设置" msgid "General Setup" msgstr "基本设置" +msgid "General options for opkg" +msgstr "" + msgid "Generate archive" msgstr "生成备份" @@ -1078,6 +1115,9 @@ msgstr "IPv4子网掩码" msgid "IPv4 only" msgstr "仅IPv4" +msgid "IPv4 prefix" +msgstr "" + msgid "IPv4 prefix length" msgstr "IPv4地址前缀长度" @@ -1167,8 +1207,8 @@ msgid "" "of the RAM." msgstr "如果物理内存不足,闲置数据可自动移到交换区暂存,以提高可用内存。" -msgid "Ignore Hosts files" -msgstr "忽略HOSTS文件" +msgid "Ignore /etc/hosts" +msgstr "忽略 /etc/hosts" msgid "Ignore interface" msgstr "关闭DHCP" @@ -1182,6 +1222,11 @@ msgstr "固件文件" msgid "In" msgstr "入口" +msgid "" +"In order to prevent unauthorized access to the system, your request has been " +"blocked. Click \"Continue »\" below to return to the previous page." +msgstr "" + msgid "Inactivity timeout" msgstr "活动超时" @@ -1450,6 +1495,9 @@ msgstr "MAC-过滤" msgid "MAC-List" msgstr "MAC-列表" +msgid "MAP / LW4over6" +msgstr "" + msgid "MB/s" msgstr "MB/s" @@ -1464,6 +1512,9 @@ msgid "" "below:" msgstr "请确认你已经复制过整个根文件系统,例如使用以下命令:" +msgid "Manual" +msgstr "" + msgid "Maximum Rate" msgstr "最高速率" @@ -1571,6 +1622,9 @@ msgstr "多播地址" msgid "NAS ID" msgstr "NAS ID" +msgid "NAT64 Prefix" +msgstr "" + msgid "NDP-Proxy" msgstr "NDP-代理" @@ -1795,6 +1849,12 @@ msgstr "PPPoE" msgid "PPtP" msgstr "PPtP" +msgid "PSID offset" +msgstr "" + +msgid "PSID-bits length" +msgstr "" + msgid "Package libiwinfo required!" msgstr "需要libiwinfo软件包!" @@ -1822,9 +1882,6 @@ msgstr "私有密钥" msgid "Password successfully changed!" msgstr "密码修改成功!" -msgid "Path" -msgstr "路径" - msgid "Path to CA-Certificate" msgstr "CA证书路径" @@ -1861,9 +1918,6 @@ msgstr "数据包" msgid "Please enter your username and password." msgstr "请输入用户名和密码。" -msgid "Please wait: Device rebooting..." -msgstr "请稍等:设备重启中..." - msgid "Policy" msgstr "策略" @@ -2247,6 +2301,9 @@ msgstr "信号:" msgid "Size" msgstr "大小" +msgid "Size (.ipk)" +msgstr "" + msgid "Skip" msgstr "跳过" @@ -2518,6 +2575,9 @@ msgstr "" msgid "The selected protocol needs a device assigned" msgstr "所选的协议需要分配设备" +msgid "The submitted security token is invalid or already expired!" +msgstr "" + msgid "" "The system is erasing the configuration partition now and will reboot itself " "when finished." @@ -2569,6 +2629,12 @@ msgid "This IPv4 address of the relay" msgstr "中继的IPv4地址" msgid "" +"This file may contain lines like 'server=/domain/1.2.3.4' or " +"'server=1.2.3.4' fordomain-specific or full upstream DNS servers." +msgstr "" + +msgid "" "This is a list of shell glob patterns for matching files and directories to " "include during sysupgrade. Modified files in /etc/config/ and certain other " "configurations are automatically preserved." @@ -2885,11 +2951,14 @@ msgstr "正在应用更改..." msgid "Waiting for command to complete..." msgstr "正在执行命令..." +msgid "Waiting for device..." +msgstr "" + msgid "Warning" msgstr "警告" -msgid "Warning: There are unsaved changes that will be lost while rebooting!" -msgstr "警告: 有尚未保存的更改,重启将丢失!" +msgid "Warning: There are unsaved changes that will get lost on reboot!" +msgstr "" msgid "Whether to create an IPv6 default route over the tunnel" msgstr "" @@ -3118,6 +3187,22 @@ msgstr "是" msgid "« Back" msgstr "« 后退" +#~ msgid "Enable IPv6 negotiation on the PPP link" +#~ msgstr "在PPP链路上启用IPv6协商" + +#~ msgid "Ignore Hosts files" +#~ msgstr "忽略HOSTS文件" + +#~ msgid "Path" +#~ msgstr "路径" + +#~ msgid "Please wait: Device rebooting..." +#~ msgstr "请稍等:设备重启中..." + +#~ msgid "" +#~ "Warning: There are unsaved changes that will be lost while rebooting!" +#~ msgstr "警告: 有尚未保存的更改,重启将丢失!" + #~ msgid "CPU frequency" #~ msgstr "CPU 频率" @@ -3906,9 +3991,6 @@ msgstr "« 后退" #~ "如果连接在已有网络,那么它会被桥接到现有接口,并且被所选的防火墙" #~ "区域覆盖。取消附加选项可以重定义此接口为新的独立网络。" -#~ msgid "Ignore /etc/hosts" -#~ msgstr "忽略 /etc/hosts" - #~ msgid "Independent (Ad-Hoc)" #~ msgstr "独立(点对点Ad-Hoc)" diff --git a/modules/luci-base/po/zh-tw/base.po b/modules/luci-base/po/zh-tw/base.po index ec901b8af..6efaa7f1e 100644 --- a/modules/luci-base/po/zh-tw/base.po +++ b/modules/luci-base/po/zh-tw/base.po @@ -44,6 +44,9 @@ msgstr "1分鐘負載" msgid "15 Minute Load:" msgstr "15分鐘負載" +msgid "464XLAT (CLAT)" +msgstr "" + msgid "5 Minute Load:" msgstr "5分鐘負載" @@ -200,6 +203,9 @@ msgstr "增加新界面" msgid "Additional Hosts files" msgstr "額外的HOST檔案" +msgid "Additional servers file" +msgstr "" + msgid "Address" msgstr "位置" @@ -325,6 +331,9 @@ msgstr "可用軟體包" msgid "Average:" msgstr "平均:" +msgid "BR / DMR / AFTR" +msgstr "" + msgid "BSSID" msgstr "BSSID" @@ -399,6 +408,11 @@ msgstr "Broadcom BCM%04x 802.11 無線控制器" msgid "Buffered" msgstr "已緩衝" +msgid "" +"Build/distribution specific feed definitions. This file will NOT be " +"preserved in any sysupgrade." +msgstr "" + msgid "Buttons" msgstr "按鈕" @@ -552,6 +566,14 @@ msgid "Custom delegated IPv6-prefix" msgstr "" msgid "" +"Custom feed definitions, e.g. private feeds. This file can be preserved in a " +"sysupgrade." +msgstr "" + +msgid "Custom feeds" +msgstr "" + +msgid "" "Customizes the behaviour of the device LEDs if possible." msgstr "" @@ -650,6 +672,12 @@ msgstr "設備" msgid "Device Configuration" msgstr "設定設備" +msgid "Device is rebooting..." +msgstr "" + +msgid "Device unreachable" +msgstr "" + msgid "Diagnostics" msgstr "診斷" @@ -689,6 +717,9 @@ msgstr "最佳化距離" msgid "Distance to farthest network member in meters." msgstr "到最遠的網路距離以米表示." +msgid "Distribution feeds" +msgstr "" + msgid "Diversity" msgstr "差異" @@ -757,6 +788,9 @@ msgid "" "having static leases will be served." msgstr "幫用戶端動態發配DHCP位址. 假如關閉的話,僅有有靜態位址的用戶端能被服務" +msgid "EA-bits length" +msgstr "" + msgid "EAP-Method" msgstr "EAP協定驗證方式" @@ -786,9 +820,6 @@ msgstr "啟用 STP" msgid "Enable HE.net dynamic endpoint update" msgstr "啟用HE.net服務代管動態更新" -msgid "Enable IPv6 negotiation on the PPP link" -msgstr "啟用PPP連結上的IPv6交涉" - msgid "Enable Jumbo Frame passthrough" msgstr "啟用超大訊框透穿" @@ -944,6 +975,9 @@ msgstr "強制TKIP加密" msgid "Force TKIP and CCMP (AES)" msgstr "強制TKIP+CCMP (AES)加密" +msgid "Form token mismatch" +msgstr "" + msgid "Forward DHCP traffic" msgstr "轉發DHCP流量" @@ -983,6 +1017,9 @@ msgstr "一般設定" msgid "General Setup" msgstr "一般設置" +msgid "General options for opkg" +msgstr "" + msgid "Generate archive" msgstr "製作壓縮檔" @@ -1089,6 +1126,9 @@ msgstr "IPv4網路遮罩" msgid "IPv4 only" msgstr "僅用IPv4" +msgid "IPv4 prefix" +msgstr "" + msgid "IPv4 prefix length" msgstr "IPv4前綴長度" @@ -1182,8 +1222,8 @@ msgstr "" "緩慢的過程,作為交換裝置不能用高數據速率訪問該RAM" -msgid "Ignore Hosts files" -msgstr "被忽視的主機檔案" +msgid "Ignore /etc/hosts" +msgstr "" msgid "Ignore interface" msgstr "被忽視的介面" @@ -1197,6 +1237,11 @@ msgstr "映像檔" msgid "In" msgstr "輸入" +msgid "" +"In order to prevent unauthorized access to the system, your request has been " +"blocked. Click \"Continue »\" below to return to the previous page." +msgstr "" + msgid "Inactivity timeout" msgstr "閒置過期" @@ -1465,6 +1510,9 @@ msgstr "MAC-過濾" msgid "MAC-List" msgstr "MAC-清單" +msgid "MAP / LW4over6" +msgstr "" + msgid "MB/s" msgstr "MB/s" @@ -1479,6 +1527,9 @@ msgid "" "below:" msgstr "" +msgid "Manual" +msgstr "" + msgid "Maximum Rate" msgstr "最快速度" @@ -1586,6 +1637,9 @@ msgstr "多點群播位址" msgid "NAS ID" msgstr " 網路附存伺服器ID" +msgid "NAT64 Prefix" +msgstr "" + msgid "NDP-Proxy" msgstr "" @@ -1814,6 +1868,12 @@ msgstr "PPPoE" msgid "PPtP" msgstr "PPtP點對點VPN虛擬私人隧道協定" +msgid "PSID offset" +msgstr "" + +msgid "PSID-bits length" +msgstr "" + msgid "Package libiwinfo required!" msgstr "軟體包必需有libiwinfo!" @@ -1841,9 +1901,6 @@ msgstr "私人金鑰密碼" msgid "Password successfully changed!" msgstr "密碼已變更成功!" -msgid "Path" -msgstr "" - msgid "Path to CA-Certificate" msgstr "CA-證書的路徑" @@ -1880,9 +1937,6 @@ msgstr "封包數." msgid "Please enter your username and password." msgstr "請輸入你的用戶名稱和密碼" -msgid "Please wait: Device rebooting..." -msgstr "請稍等:設備正重開中..." - msgid "Policy" msgstr "策略" @@ -2266,6 +2320,9 @@ msgstr "信號:" msgid "Size" msgstr "大小" +msgid "Size (.ipk)" +msgstr "" + msgid "Skip" msgstr "跳過" @@ -2541,6 +2598,9 @@ msgstr "" msgid "The selected protocol needs a device assigned" msgstr "選到的協定需要指定到設備上" +msgid "The submitted security token is invalid or already expired!" +msgstr "" + msgid "" "The system is erasing the configuration partition now and will reboot itself " "when finished." @@ -2593,6 +2653,12 @@ msgid "This IPv4 address of the relay" msgstr "IPv4位址的轉驛" msgid "" +"This file may contain lines like 'server=/domain/1.2.3.4' or " +"'server=1.2.3.4' fordomain-specific or full upstream DNS servers." +msgstr "" + +msgid "" "This is a list of shell glob patterns for matching files and directories to " "include during sysupgrade. Modified files in /etc/config/ and certain other " "configurations are automatically preserved." @@ -2914,11 +2980,14 @@ msgstr "等待修改被啟用..." msgid "Waiting for command to complete..." msgstr "等待完整性指令..." +msgid "Waiting for device..." +msgstr "" + msgid "Warning" msgstr "警告" -msgid "Warning: There are unsaved changes that will be lost while rebooting!" -msgstr "警告:重開機後某些未存檔的修改將會漏失!" +msgid "Warning: There are unsaved changes that will get lost on reboot!" +msgstr "" msgid "Whether to create an IPv6 default route over the tunnel" msgstr "" @@ -3146,6 +3215,19 @@ msgstr "是的" msgid "« Back" msgstr "« 倒退" +#~ msgid "Enable IPv6 negotiation on the PPP link" +#~ msgstr "啟用PPP連結上的IPv6交涉" + +#~ msgid "Ignore Hosts files" +#~ msgstr "被忽視的主機檔案" + +#~ msgid "Please wait: Device rebooting..." +#~ msgstr "請稍等:設備正重開中..." + +#~ msgid "" +#~ "Warning: There are unsaved changes that will be lost while rebooting!" +#~ msgstr "警告:重開機後某些未存檔的修改將會漏失!" + #~ msgid "" #~ "Always use 40MHz channels even if the secondary channel overlaps. Using " #~ "this option does not comply with IEEE 802.11n-2009!" diff --git a/modules/luci-base/root/etc/config/luci b/modules/luci-base/root/etc/config/luci index c503a8f1e..baa3ac5d1 100644 --- a/modules/luci-base/root/etc/config/luci +++ b/modules/luci-base/root/etc/config/luci @@ -1,6 +1,6 @@ config core main option lang auto - option mediaurlbase /luci-static/openwrt.org + option mediaurlbase /luci-static/bootstrap option resourcebase /luci-static/resources config extern flash_keep diff --git a/modules/luci-base/root/www/index.html b/modules/luci-base/root/www/index.html index 0b5fa1d87..59b0d8484 100644 --- a/modules/luci-base/root/www/index.html +++ b/modules/luci-base/root/www/index.html @@ -5,7 +5,7 @@ - -LuCI - Lua Configuration Interface + +LuCI - Lua Configuration Interface diff --git a/modules/luci-mod-admin-full/Makefile b/modules/luci-mod-admin-full/Makefile index 66c78e28a..5fed2797e 100644 --- a/modules/luci-mod-admin-full/Makefile +++ b/modules/luci-mod-admin-full/Makefile @@ -7,7 +7,7 @@ include $(TOPDIR)/rules.mk LUCI_TITLE:=LuCI Administration - full-featured for full control -LUCI_DEPENDS:=+luci-base +libubus-lua +LUCI_DEPENDS:=+luci-base PKG_BUILD_DEPENDS:=iwinfo diff --git a/modules/luci-mod-admin-full/luasrc/controller/admin/index.lua b/modules/luci-mod-admin-full/luasrc/controller/admin/index.lua index d00d546b6..cc8c2e3ae 100644 --- a/modules/luci-mod-admin-full/luasrc/controller/admin/index.lua +++ b/modules/luci-mod-admin-full/luasrc/controller/admin/index.lua @@ -33,12 +33,10 @@ function action_logout() if sid then utl.ubus("session", "destroy", { ubus_rpc_session = sid }) - dsp.context.urltoken.stok = nil - luci.http.header("Set-Cookie", "sysauth=%s; expires=%s; path=%s/" %{ sid, 'Thu, 01 Jan 1970 01:00:00 GMT', dsp.build_url() }) end - luci.http.redirect(luci.dispatcher.build_url()) + luci.http.redirect(dsp.build_url()) end diff --git a/modules/luci-mod-admin-full/luasrc/controller/admin/network.lua b/modules/luci-mod-admin-full/luasrc/controller/admin/network.lua index 6e578e013..879e54b24 100644 --- a/modules/luci-mod-admin-full/luasrc/controller/admin/network.lua +++ b/modules/luci-mod-admin-full/luasrc/controller/admin/network.lua @@ -1,5 +1,5 @@ -- Copyright 2008 Steven Barth --- Copyright 2011 Jo-Philipp Wich +-- Copyright 2011-2015 Jo-Philipp Wich -- Licensed to the public under the Apache License 2.0. module("luci.controller.admin.network", package.seeall) @@ -43,22 +43,22 @@ function index() end) if has_wifi then - page = entry({"admin", "network", "wireless_join"}, call("wifi_join"), nil) + page = entry({"admin", "network", "wireless_join"}, post("wifi_join"), nil) page.leaf = true - page = entry({"admin", "network", "wireless_add"}, call("wifi_add"), nil) + page = entry({"admin", "network", "wireless_add"}, post("wifi_add"), nil) page.leaf = true - page = entry({"admin", "network", "wireless_delete"}, call("wifi_delete"), nil) + page = entry({"admin", "network", "wireless_delete"}, post("wifi_delete"), nil) page.leaf = true page = entry({"admin", "network", "wireless_status"}, call("wifi_status"), nil) page.leaf = true - page = entry({"admin", "network", "wireless_reconnect"}, call("wifi_reconnect"), nil) + page = entry({"admin", "network", "wireless_reconnect"}, post("wifi_reconnect"), nil) page.leaf = true - page = entry({"admin", "network", "wireless_shutdown"}, call("wifi_shutdown"), nil) + page = entry({"admin", "network", "wireless_shutdown"}, post("wifi_shutdown"), nil) page.leaf = true page = entry({"admin", "network", "wireless"}, arcombine(template("admin_network/wifi_overview"), cbi("admin_network/wifi")), _("Wifi"), 15) @@ -85,16 +85,16 @@ function index() page = entry({"admin", "network", "iface_add"}, cbi("admin_network/iface_add"), nil) page.leaf = true - page = entry({"admin", "network", "iface_delete"}, call("iface_delete"), nil) + page = entry({"admin", "network", "iface_delete"}, post("iface_delete"), nil) page.leaf = true page = entry({"admin", "network", "iface_status"}, call("iface_status"), nil) page.leaf = true - page = entry({"admin", "network", "iface_reconnect"}, call("iface_reconnect"), nil) + page = entry({"admin", "network", "iface_reconnect"}, post("iface_reconnect"), nil) page.leaf = true - page = entry({"admin", "network", "iface_shutdown"}, call("iface_shutdown"), nil) + page = entry({"admin", "network", "iface_shutdown"}, post("iface_shutdown"), nil) page.leaf = true page = entry({"admin", "network", "network"}, arcombine(cbi("admin_network/network"), cbi("admin_network/ifaces")), _("Interfaces"), 10) @@ -138,44 +138,33 @@ function index() page.title = _("Diagnostics") page.order = 60 - page = entry({"admin", "network", "diag_ping"}, call("diag_ping"), nil) + page = entry({"admin", "network", "diag_ping"}, post("diag_ping"), nil) page.leaf = true - page = entry({"admin", "network", "diag_nslookup"}, call("diag_nslookup"), nil) + page = entry({"admin", "network", "diag_nslookup"}, post("diag_nslookup"), nil) page.leaf = true - page = entry({"admin", "network", "diag_traceroute"}, call("diag_traceroute"), nil) + page = entry({"admin", "network", "diag_traceroute"}, post("diag_traceroute"), nil) page.leaf = true - page = entry({"admin", "network", "diag_ping6"}, call("diag_ping6"), nil) + page = entry({"admin", "network", "diag_ping6"}, post("diag_ping6"), nil) page.leaf = true - page = entry({"admin", "network", "diag_traceroute6"}, call("diag_traceroute6"), nil) + page = entry({"admin", "network", "diag_traceroute6"}, post("diag_traceroute6"), nil) page.leaf = true -- end end function wifi_join() - local function param(x) - return luci.http.formvalue(x) - end - - local function ptable(x) - x = param(x) - return x and (type(x) ~= "table" and { x } or x) or {} - end - - local dev = param("device") - local ssid = param("join") + local tpl = require "luci.template" + local http = require "luci.http" + local dev = http.formvalue("device") + local ssid = http.formvalue("join") if dev and ssid then - local cancel = (param("cancel") or param("cbi.cancel")) and true or false - - if cancel then - luci.http.redirect(luci.dispatcher.build_url("admin/network/wireless_join?device=" .. dev)) - else + local cancel = (http.formvalue("cancel") or http.formvalue("cbi.cancel")) + if not cancel then local cbi = require "luci.cbi" - local tpl = require "luci.template" local map = luci.cbi.load("admin_network/wifi_add")[1] if map:parse() ~= cbi.FORM_DONE then @@ -183,10 +172,12 @@ function wifi_join() map:render() tpl.render("footer") end + + return end - else - luci.template.render("admin_network/wifi_join") end + + tpl.render("admin_network/wifi_join") end function wifi_add() diff --git a/modules/luci-mod-admin-full/luasrc/controller/admin/status.lua b/modules/luci-mod-admin-full/luasrc/controller/admin/status.lua index 2d81caf24..24db1e4ff 100644 --- a/modules/luci-mod-admin-full/luasrc/controller/admin/status.lua +++ b/modules/luci-mod-admin-full/luasrc/controller/admin/status.lua @@ -7,7 +7,10 @@ module("luci.controller.admin.status", package.seeall) function index() entry({"admin", "status"}, alias("admin", "status", "overview"), _("Status"), 20).index = true entry({"admin", "status", "overview"}, template("admin_status/index"), _("Overview"), 1) - entry({"admin", "status", "iptables"}, call("action_iptables"), _("Firewall"), 2).leaf = true + + entry({"admin", "status", "iptables"}, template("admin_status/iptables"), _("Firewall"), 2).leaf = true + entry({"admin", "status", "iptables_action"}, post("action_iptables")).leaf = true + entry({"admin", "status", "routes"}, template("admin_status/routes"), _("Routes"), 3) entry({"admin", "status", "syslog"}, call("action_syslog"), _("System Log"), 4) entry({"admin", "status", "dmesg"}, call("action_dmesg"), _("Kernel Log"), 5) @@ -42,22 +45,16 @@ end function action_iptables() if luci.http.formvalue("zero") then - if luci.http.formvalue("zero") == "6" then - luci.util.exec("ip6tables -Z") + if luci.http.formvalue("family") == "6" then + luci.util.exec("/usr/sbin/ip6tables -Z") else - luci.util.exec("iptables -Z") + luci.util.exec("/usr/sbin/iptables -Z") end - luci.http.redirect( - luci.dispatcher.build_url("admin", "status", "iptables") - ) - elseif luci.http.formvalue("restart") == "1" then - luci.util.exec("/etc/init.d/firewall reload") - luci.http.redirect( - luci.dispatcher.build_url("admin", "status", "iptables") - ) - else - luci.template.render("admin_status/iptables") + elseif luci.http.formvalue("restart") then + luci.util.exec("/etc/init.d/firewall restart") end + + luci.http.redirect(luci.dispatcher.build_url("admin/status/iptables")) end function action_bandwidth(iface) diff --git a/modules/luci-mod-admin-full/luasrc/controller/admin/system.lua b/modules/luci-mod-admin-full/luasrc/controller/admin/system.lua index 1b38c6783..cbba48cc2 100644 --- a/modules/luci-mod-admin-full/luasrc/controller/admin/system.lua +++ b/modules/luci-mod-admin-full/luasrc/controller/admin/system.lua @@ -9,12 +9,12 @@ function index() entry({"admin", "system"}, alias("admin", "system", "system"), _("System"), 30).index = true entry({"admin", "system", "system"}, cbi("admin_system/system"), _("System"), 1) - entry({"admin", "system", "clock_status"}, call("action_clock_status")) + entry({"admin", "system", "clock_status"}, post_on({ set = true }, "action_clock_status")) entry({"admin", "system", "admin"}, cbi("admin_system/admin"), _("Administration"), 2) if fs.access("/bin/opkg") then - entry({"admin", "system", "packages"}, call("action_packages"), _("Software"), 10) + entry({"admin", "system", "packages"}, post_on({ exec = "1" }, "action_packages"), _("Software"), 10) entry({"admin", "system", "packages", "ipkg"}, form("admin_system/ipkg")) end @@ -32,9 +32,16 @@ function index() end entry({"admin", "system", "flashops"}, call("action_flashops"), _("Backup / Flash Firmware"), 70) + entry({"admin", "system", "flashops", "reset"}, post("action_reset")) + entry({"admin", "system", "flashops", "backup"}, post("action_backup")) entry({"admin", "system", "flashops", "backupfiles"}, form("admin_system/backupfiles")) - entry({"admin", "system", "reboot"}, call("action_reboot"), _("Reboot"), 90) + -- call() instead of post() due to upload handling! + entry({"admin", "system", "flashops", "restore"}, call("action_restore")) + entry({"admin", "system", "flashops", "sysupgrade"}, call("action_sysupgrade")) + + entry({"admin", "system", "reboot"}, template("admin_system/reboot"), _("Reboot"), 90) + entry({"admin", "system", "reboot", "call"}, post("action_reboot")) end function action_clock_status() @@ -55,7 +62,8 @@ end function action_packages() local fs = require "nixio.fs" local ipkg = require "luci.model.ipkg" - local submit = luci.http.formvalue("submit") + local submit = (luci.http.formvalue("exec") == "1") + local update, upgrade local changes = false local install = { } local remove = { } @@ -75,59 +83,62 @@ function action_packages() query = (query ~= '') and query or nil - -- Packets to be installed - local ninst = submit and luci.http.formvalue("install") - local uinst = nil - - -- Install from URL - local url = luci.http.formvalue("url") - if url and url ~= '' and submit then - uinst = url - end + -- Modifying actions + if submit then + -- Packets to be installed + local ninst = luci.http.formvalue("install") + local uinst = nil - -- Do install - if ninst then - install[ninst], out, err = ipkg.install(ninst) - stdout[#stdout+1] = out - stderr[#stderr+1] = err - changes = true - end + -- Install from URL + local url = luci.http.formvalue("url") + if url and url ~= '' then + uinst = url + end - if uinst then - local pkg - for pkg in luci.util.imatch(uinst) do - install[uinst], out, err = ipkg.install(pkg) + -- Do install + if ninst then + install[ninst], out, err = ipkg.install(ninst) stdout[#stdout+1] = out stderr[#stderr+1] = err changes = true end - end - -- Remove packets - local rem = submit and luci.http.formvalue("remove") - if rem then - remove[rem], out, err = ipkg.remove(rem) - stdout[#stdout+1] = out - stderr[#stderr+1] = err - changes = true - end + if uinst then + local pkg + for pkg in luci.util.imatch(uinst) do + install[uinst], out, err = ipkg.install(pkg) + stdout[#stdout+1] = out + stderr[#stderr+1] = err + changes = true + end + end + -- Remove packets + local rem = luci.http.formvalue("remove") + if rem then + remove[rem], out, err = ipkg.remove(rem) + stdout[#stdout+1] = out + stderr[#stderr+1] = err + changes = true + end - -- Update all packets - local update = luci.http.formvalue("update") - if update then - update, out, err = ipkg.update() - stdout[#stdout+1] = out - stderr[#stderr+1] = err - end + + -- Update all packets + update = luci.http.formvalue("update") + if update then + update, out, err = ipkg.update() + stdout[#stdout+1] = out + stderr[#stderr+1] = err + end - -- Upgrade all packets - local upgrade = luci.http.formvalue("upgrade") - if upgrade then - upgrade, out, err = ipkg.upgrade() - stdout[#stdout+1] = out - stderr[#stderr+1] = err + -- Upgrade all packets + upgrade = luci.http.formvalue("upgrade") + if upgrade then + upgrade, out, err = ipkg.upgrade() + stdout[#stdout+1] = out + stderr[#stderr+1] = err + end end @@ -166,137 +177,185 @@ function action_packages() end end -function action_flashops() - local sys = require "luci.sys" - local fs = require "nixio.fs" - - local upgrade_avail = fs.access("/lib/upgrade/platform.sh") - local reset_avail = os.execute([[grep '"rootfs_data"' /proc/mtd >/dev/null 2>&1]]) == 0 +local function image_supported(image) + return (os.execute("sysupgrade -T %q >/dev/null" % image) == 0) +end - local restore_cmd = "tar -xzC/ >/dev/null 2>&1" - local backup_cmd = "sysupgrade --create-backup - 2>/dev/null" - local image_tmp = "/tmp/firmware.img" +local function image_checksum(image) + return (luci.sys.exec("md5sum %q" % image):match("^([^%s]+)")) +end - local function image_supported() - return (os.execute("sysupgrade -T %q >/dev/null" % image_tmp) == 0) - end +local function supports_sysupgrade() + return nixio.fs.access("/lib/upgrade/platform.sh") +end - local function image_checksum() - return (luci.sys.exec("md5sum %q" % image_tmp):match("^([^%s]+)")) - end +local function supports_reset() + return (os.execute([[grep -sq '"rootfs_data"' /proc/mtd]]) == 0) +end - local function storage_size() - local size = 0 - if fs.access("/proc/mtd") then - for l in io.lines("/proc/mtd") do - local d, s, e, n = l:match('^([^%s]+)%s+([^%s]+)%s+([^%s]+)%s+"([^%s]+)"') - if n == "linux" or n == "firmware" then - size = tonumber(s, 16) - break - end +local function storage_size() + local size = 0 + if nixio.fs.access("/proc/mtd") then + for l in io.lines("/proc/mtd") do + local d, s, e, n = l:match('^([^%s]+)%s+([^%s]+)%s+([^%s]+)%s+"([^%s]+)"') + if n == "linux" or n == "firmware" then + size = tonumber(s, 16) + break end - elseif fs.access("/proc/partitions") then - for l in io.lines("/proc/partitions") do - local x, y, b, n = l:match('^%s*(%d+)%s+(%d+)%s+([^%s]+)%s+([^%s]+)') - if b and n and not n:match('[0-9]') then - size = tonumber(b) * 1024 - break - end + end + elseif nixio.fs.access("/proc/partitions") then + for l in io.lines("/proc/partitions") do + local x, y, b, n = l:match('^%s*(%d+)%s+(%d+)%s+([^%s]+)%s+([^%s]+)') + if b and n and not n:match('[0-9]') then + size = tonumber(b) * 1024 + break end end - return size end + return size +end + + +function action_flashops() + -- + -- Overview + -- + luci.template.render("admin_system/flashops", { + reset_avail = supports_reset(), + upgrade_avail = supports_sysupgrade() + }) +end +function action_sysupgrade() + local fs = require "nixio.fs" + local http = require "luci.http" + local image_tmp = "/tmp/firmware.img" local fp - luci.http.setfilehandler( + http.setfilehandler( function(meta, chunk, eof) - if not fp then - if meta and meta.name == "image" then - fp = io.open(image_tmp, "w") - else - fp = io.popen(restore_cmd, "w") - end + if not fp and meta and meta.name == "image" then + fp = io.open(image_tmp, "w") end - if chunk then + if fp and chunk then fp:write(chunk) end - if eof then + if fp and eof then fp:close() end end ) - if luci.http.formvalue("backup") then - -- - -- Assemble file list, generate backup - -- - local reader = ltn12_popen(backup_cmd) - luci.http.header('Content-Disposition', 'attachment; filename="backup-%s-%s.tar.gz"' % { - luci.sys.hostname(), os.date("%Y-%m-%d")}) - luci.http.prepare_content("application/x-targz") - luci.ltn12.pump.all(reader, luci.http.write) - elseif luci.http.formvalue("restore") then - -- - -- Unpack received .tar.gz - -- - local upload = luci.http.formvalue("archive") - if upload and #upload > 0 then - luci.template.render("admin_system/applyreboot") - luci.sys.reboot() + if not luci.dispatcher.test_post_security() then + fs.unlink(image_tmp) + return + end + + -- + -- Cancel firmware flash + -- + if http.formvalue("cancel") then + fs.unlink(image_tmp) + http.redirect(luci.dispatcher.build_url('admin/system/flashops')) + return + end + + -- + -- Initiate firmware flash + -- + local step = tonumber(http.formvalue("step") or 1) + if step == 1 then + if image_supported(image_tmp) then + luci.template.render("admin_system/upgrade", { + checksum = image_checksum(image_tmp), + storage = storage_size(), + size = (fs.stat(image_tmp, "size") or 0), + keep = (not not http.formvalue("keep")) + }) + else + fs.unlink(image_tmp) + luci.template.render("admin_system/flashops", { + reset_avail = supports_reset(), + upgrade_avail = supports_sysupgrade(), + image_invalid = true + }) end - elseif luci.http.formvalue("image") or luci.http.formvalue("step") then - -- - -- Initiate firmware flash - -- - local step = tonumber(luci.http.formvalue("step") or 1) - if step == 1 then - if image_supported() then - luci.template.render("admin_system/upgrade", { - checksum = image_checksum(), - storage = storage_size(), - size = (fs.stat(image_tmp, "size") or 0), - keep = (not not luci.http.formvalue("keep")) - }) - else - fs.unlink(image_tmp) - luci.template.render("admin_system/flashops", { - reset_avail = reset_avail, - upgrade_avail = upgrade_avail, - image_invalid = true - }) + -- + -- Start sysupgrade flash + -- + elseif step == 2 then + local keep = (http.formvalue("keep") == "1") and "" or "-n" + luci.template.render("admin_system/applyreboot", { + title = luci.i18n.translate("Flashing..."), + msg = luci.i18n.translate("The system is flashing now.
DO NOT POWER OFF THE DEVICE!
Wait a few minutes before you try to reconnect. It might be necessary to renew the address of your computer to reach the device again, depending on your settings."), + addr = (#keep > 0) and "192.168.1.1" or nil + }) + fork_exec("killall dropbear uhttpd; sleep 1; /sbin/sysupgrade %s %q" %{ keep, image_tmp }) + end +end + +function action_backup() + local reader = ltn12_popen("sysupgrade --create-backup - 2>/dev/null") + + luci.http.header( + 'Content-Disposition', 'attachment; filename="backup-%s-%s.tar.gz"' %{ + luci.sys.hostname(), + os.date("%Y-%m-%d") + }) + + luci.http.prepare_content("application/x-targz") + luci.ltn12.pump.all(reader, luci.http.write) +end + +function action_restore() + local fs = require "nixio.fs" + local http = require "luci.http" + local archive_tmp = "/tmp/restore.tar.gz" + + local fp + http.setfilehandler( + function(meta, chunk, eof) + if not fp and meta and meta.name == "archive" then + fp = io.open(archive_tmp, "w") + end + if fp and chunk then + fp:write(chunk) + end + if fp and eof then + fp:close() end - -- - -- Start sysupgrade flash - -- - elseif step == 2 then - local keep = (luci.http.formvalue("keep") == "1") and "" or "-n" - luci.template.render("admin_system/applyreboot", { - title = luci.i18n.translate("Flashing..."), - msg = luci.i18n.translate("The system is flashing now.
DO NOT POWER OFF THE DEVICE!
Wait a few minutes before you try to reconnect. It might be necessary to renew the address of your computer to reach the device again, depending on your settings."), - addr = (#keep > 0) and "192.168.1.1" or nil - }) - fork_exec("killall dropbear uhttpd; sleep 1; /sbin/sysupgrade %s %q" %{ keep, image_tmp }) end - elseif reset_avail and luci.http.formvalue("reset") then - -- - -- Reset system - -- + ) + + if not luci.dispatcher.test_post_security() then + fs.unlink(archive_tmp) + return + end + + local upload = http.formvalue("archive") + if upload and #upload > 0 then + luci.template.render("admin_system/applyreboot") + os.execute("tar -C / -xzf %q >/dev/null 2>&1" % archive_tmp) + luci.sys.reboot() + return + end + + http.redirect(luci.dispatcher.build_url('admin/system/flashops')) +end + +function action_reset() + if supports_reset() then luci.template.render("admin_system/applyreboot", { title = luci.i18n.translate("Erasing..."), msg = luci.i18n.translate("The system is erasing the configuration partition now and will reboot itself when finished."), addr = "192.168.1.1" }) + fork_exec("killall dropbear uhttpd; sleep 1; mtd -r erase rootfs_data") - else - -- - -- Overview - -- - luci.template.render("admin_system/flashops", { - reset_avail = reset_avail, - upgrade_avail = upgrade_avail - }) + return end + + http.redirect(luci.dispatcher.build_url('admin/system/flashops')) end function action_passwd() @@ -316,11 +375,7 @@ function action_passwd() end function action_reboot() - local reboot = luci.http.formvalue("reboot") - luci.template.render("admin_system/reboot", {reboot=reboot}) - if reboot then - luci.sys.reboot() - end + luci.sys.reboot() end function fork_exec(command) diff --git a/modules/luci-mod-admin-full/luasrc/controller/admin/uci.lua b/modules/luci-mod-admin-full/luasrc/controller/admin/uci.lua index 6de3c73a3..9c33d9c18 100644 --- a/modules/luci-mod-admin-full/luasrc/controller/admin/uci.lua +++ b/modules/luci-mod-admin-full/luasrc/controller/admin/uci.lua @@ -1,5 +1,5 @@ -- Copyright 2008 Steven Barth --- Copyright 2010 Jo-Philipp Wich +-- Copyright 2010-2015 Jo-Philipp Wich -- Licensed to the public under the Apache License 2.0. module("luci.controller.admin.uci", package.seeall) @@ -10,9 +10,9 @@ function index() entry({"admin", "uci"}, nil, _("Configuration")) entry({"admin", "uci", "changes"}, call("action_changes"), _("Changes"), 40).query = {redir=redir} - entry({"admin", "uci", "revert"}, call("action_revert"), _("Revert"), 30).query = {redir=redir} - entry({"admin", "uci", "apply"}, call("action_apply"), _("Apply"), 20).query = {redir=redir} - entry({"admin", "uci", "saveapply"}, call("action_apply"), _("Save & Apply"), 10).query = {redir=redir} + entry({"admin", "uci", "revert"}, post("action_revert"), _("Revert"), 30).query = {redir=redir} + entry({"admin", "uci", "apply"}, post("action_apply"), _("Apply"), 20).query = {redir=redir} + entry({"admin", "uci", "saveapply"}, post("action_apply"), _("Save & Apply"), 10).query = {redir=redir} end function action_changes() diff --git a/modules/luci-mod-admin-full/luasrc/model/cbi/admin_network/dhcp.lua b/modules/luci-mod-admin-full/luasrc/model/cbi/admin_network/dhcp.lua index 997a9274d..4dc52ada0 100644 --- a/modules/luci-mod-admin-full/luasrc/model/cbi/admin_network/dhcp.lua +++ b/modules/luci-mod-admin-full/luasrc/model/cbi/admin_network/dhcp.lua @@ -51,13 +51,10 @@ rf.optional = true s:taboption("files", Flag, "nohosts", - translate("Ignore Hosts files")).optional = true + translate("Ignore /etc/hosts")).optional = true -hf = s:taboption("files", DynamicList, "addnhosts", - translate("Additional Hosts files")) - -hf:depends("nohosts", "") -hf.optional = true +s:taboption("files", DynamicList, "addnhosts", + translate("Additional Hosts files")).optional = true s:taboption("advanced", Flag, "boguspriv", @@ -89,6 +86,11 @@ s:taboption("advanced", Flag, "nonegcache", translate("No negative cache"), translate("Do not cache negative replies, e.g. for not existing domains")) +s:taboption("advanced", Value, "serversfile", + translate("Additional servers file"), + translate("This file may contain lines like 'server=/domain/1.2.3.4' or 'server=1.2.3.4' for".. + "domain-specific or full upstream DNS servers.")) + s:taboption("advanced", Flag, "strictorder", translate("Strict order"), translate("DNS servers will be queried in the " .. diff --git a/modules/luci-mod-admin-full/luasrc/model/cbi/admin_network/iface_add.lua b/modules/luci-mod-admin-full/luasrc/model/cbi/admin_network/iface_add.lua index da1e140de..e48e3b4bd 100644 --- a/modules/luci-mod-admin-full/luasrc/model/cbi/admin_network/iface_add.lua +++ b/modules/luci-mod-admin-full/luasrc/model/cbi/admin_network/iface_add.lua @@ -17,7 +17,12 @@ newnet = m:field(Value, "_netname", translate("Name of the new interface"), newnet:depends("_attach", "") newnet.default = arg[1] and "net_" .. arg[1]:gsub("[^%w_]+", "_") -newnet.datatype = "uciname" +newnet.datatype = "and(uciname,maxlength(15))" + +advice = m:field(DummyValue, "d1", translate("Note: interface name length"), + translate("Maximum length of the name is 15 characters including " .. + "the automatic protocol/bridge prefix (br-, 6in4-, pppoe- etc.)" + )) newproto = m:field(ListValue, "_netproto", translate("Protocol of the new interface")) diff --git a/modules/luci-mod-admin-full/luasrc/model/cbi/admin_network/wifi.lua b/modules/luci-mod-admin-full/luasrc/model/cbi/admin_network/wifi.lua index dd619b314..9a2bd5d20 100644 --- a/modules/luci-mod-admin-full/luasrc/model/cbi/admin_network/wifi.lua +++ b/modules/luci-mod-admin-full/luasrc/model/cbi/admin_network/wifi.lua @@ -143,7 +143,7 @@ local found_sta = nil local _, net if wnet:mode() ~= "sta" then for _, net in ipairs(wdev:get_wifinets()) do - if net:mode() == "sta" then + if net:mode() == "sta" and net:get("disabled") ~= "1" then if not found_sta then found_sta = {} found_sta.channel = net:channel() diff --git a/modules/luci-mod-admin-full/luasrc/model/cbi/admin_system/fstab/mount.lua b/modules/luci-mod-admin-full/luasrc/model/cbi/admin_system/fstab/mount.lua index 2652e00f2..f5751673f 100644 --- a/modules/luci-mod-admin-full/luasrc/model/cbi/admin_system/fstab/mount.lua +++ b/modules/luci-mod-admin-full/luasrc/model/cbi/admin_system/fstab/mount.lua @@ -112,7 +112,7 @@ o.default = [[ mkdir -p /tmp/extroot mount --bind / /tmp/introot mount /dev/sda1 /tmp/extroot -tar -C /tmp/intproot -cvf - . | tar -C /tmp/extroot -xf - +tar -C /tmp/introot -cvf - . | tar -C /tmp/extroot -xf - umount /tmp/introot umount /tmp/extroot ]] %{ diff --git a/modules/luci-mod-admin-full/luasrc/model/cbi/admin_system/ipkg.lua b/modules/luci-mod-admin-full/luasrc/model/cbi/admin_system/ipkg.lua index 2f3c4927b..7c6d7e1c6 100644 --- a/modules/luci-mod-admin-full/luasrc/model/cbi/admin_system/ipkg.lua +++ b/modules/luci-mod-admin-full/luasrc/model/cbi/admin_system/ipkg.lua @@ -3,12 +3,15 @@ -- Licensed to the public under the Apache License 2.0. local ipkgfile = "/etc/opkg.conf" +local distfeeds = "/etc/opkg/distfeeds.conf" +local customfeeds = "/etc/opkg/customfeeds.conf" -f = SimpleForm("ipkgconf", translate("OPKG-Configuration")) +f = SimpleForm("ipkgconf", translate("OPKG-Configuration"), translate("General options for opkg")) f:append(Template("admin_system/ipkg")) t = f:field(TextValue, "lines") +t.wrap = "off" t.rows = 10 function t.cfgvalue() return nixio.fs.readfile(ipkgfile) or "" @@ -22,4 +25,40 @@ function f.handle(self, state, data) return true end -return f +g = SimpleForm("distfeedconf", translate("Distribution feeds"), + translate("Build/distribution specific feed definitions. This file will NOT be preserved in any sysupgrade.")) + +d = g:field(TextValue, "lines2") +d.wrap = "off" +d.rows = 10 +function d.cfgvalue() + return nixio.fs.readfile(distfeeds) or "" +end + +function d.write(self, section, data) + return nixio.fs.writefile(distfeeds, data:gsub("\r\n", "\n")) +end + +function g.handle(self, state, data) + return true +end + +h = SimpleForm("customfeedconf", translate("Custom feeds"), + translate("Custom feed definitions, e.g. private feeds. This file can be preserved in a sysupgrade.")) + +c = h:field(TextValue, "lines3") +c.wrap = "off" +c.rows = 10 +function c.cfgvalue() + return nixio.fs.readfile(customfeeds) or "" +end + +function c.write(self, section, data) + return nixio.fs.writefile(customfeeds, data:gsub("\r\n", "\n")) +end + +function h.handle(self, state, data) + return true +end + +return f, g, h diff --git a/modules/luci-mod-admin-full/luasrc/view/admin_network/diagnostics.htm b/modules/luci-mod-admin-full/luasrc/view/admin_network/diagnostics.htm index 05c866128..685082a33 100644 --- a/modules/luci-mod-admin-full/luasrc/view/admin_network/diagnostics.htm +++ b/modules/luci-mod-admin-full/luasrc/view/admin_network/diagnostics.htm @@ -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("admin", "network")%>/diag_' + tool + protocol + '/' + addr, null, + stxhr.post('<%=url('admin/network')%>/diag_' + tool + protocol + '/' + addr, { token: '<%=token%>' }, function(x) { if (x.responseText) @@ -53,9 +53,9 @@ local has_traceroute6 = fs.access("/usr/bin/traceroute6") } //]]> -"> +
-

<%:Diagnostics%>

+

<%:Diagnostics%>

<%:Network Utilities%> diff --git a/modules/luci-mod-admin-full/luasrc/view/admin_network/iface_overview.htm b/modules/luci-mod-admin-full/luasrc/view/admin_network/iface_overview.htm index 1de349856..9a77f8910 100644 --- a/modules/luci-mod-admin-full/luasrc/view/admin_network/iface_overview.htm +++ b/modules/luci-mod-admin-full/luasrc/view/admin_network/iface_overview.htm @@ -49,7 +49,7 @@ s.innerHTML = '<%:Waiting for changes to be applied...%>'; } - XHR.get('<%=luci.dispatcher.build_url("admin", "network")%>/iface_' + (reconnect ? 'reconnect' : 'shutdown') + '/' + id, null, + (new XHR()).post('<%=url('admin/network')%>/iface_' + (reconnect ? 'reconnect' : 'shutdown') + '/' + id, { token: '<%=token%>' }, function(x) { if (s) @@ -66,12 +66,22 @@ ); } + function iface_delete(id) { + if (!confirm('<%:Really delete this interface? The deletion cannot be undone!\nYou might lose access to this device if you are connected via this interface.%>')) + return; + + (new XHR()).post('<%=url('admin/network/iface_delete')%>/' + id, { token: '<%=token%>' }, + function(x) { + location.href = '<%=url('admin/network/network')%>'; + } + ); + } var iwxhr = new XHR(); var wifidevs = <%=luci.http.write_json(netdevs)%>; var arptable = <%=luci.http.write_json(arpcache)%>; - XHR.poll(5, '<%=luci.dispatcher.build_url("admin", "network", "iface_status", table.concat(ifaces, ","))%>', null, + XHR.poll(5, '<%=url('admin/network/iface_status', table.concat(ifaces, ","))%>', null, function(x, ifcs) { if (ifcs) @@ -178,14 +188,14 @@ d.innerHTML = String.format( '<%:Unsupported protocol type.%>
' + '<%:Install protocol extensions...%>', - '<%=luci.dispatcher.build_url("admin/system/packages")%>?query=luci-proto&display=available' + '<%=url("admin/system/packages")%>?query=luci-proto&display=available' ); } else if (d && !ifc.ifname) { d.innerHTML = String.format( '<%:Network without interfaces.%>
' + - '?tab.network.%s=physical"><%:Assign interfaces...%>', + '?tab.network.%s=physical"><%:Assign interfaces...%>', ifc.name, ifc.name ); } @@ -239,13 +249,13 @@ - '" title="<%:Edit this interface%>" value="<%:Edit%>" id="<%=net[1]%>-ifc-edit" /> - '" title="<%:Delete this interface%>" value="<%:Delete%>" /> + '" title="<%:Edit this interface%>" value="<%:Edit%>" id="<%=net[1]%>-ifc-edit" /> + <% end %> - '" /> + '" />
diff --git a/modules/luci-mod-admin-full/luasrc/view/admin_network/iface_status.htm b/modules/luci-mod-admin-full/luasrc/view/admin_network/iface_status.htm index 813638396..1ebdbfcfb 100644 --- a/modules/luci-mod-admin-full/luasrc/view/admin_network/iface_status.htm +++ b/modules/luci-mod-admin-full/luasrc/view/admin_network/iface_status.htm @@ -1,7 +1,7 @@ <%+cbi/valueheader%> -

<%:Wireless Overview%>

+

<%:Wireless Overview%>

- + <% end %> + + <% if chaincnt == 0 then %> + + <%:No chains in this table%> + + <% end %> + +

+ <% end %> +
+
<%+footer%> diff --git a/modules/luci-mod-admin-full/luasrc/view/admin_status/load.htm b/modules/luci-mod-admin-full/luasrc/view/admin_status/load.htm index d095948e5..97a2f5ed5 100644 --- a/modules/luci-mod-admin-full/luasrc/view/admin_status/load.htm +++ b/modules/luci-mod-admin-full/luasrc/view/admin_status/load.htm @@ -242,7 +242,7 @@ ); //]]> -

<%:Realtime Load%>

+

<%:Realtime Load%>

-
diff --git a/modules/luci-mod-admin-full/luasrc/view/admin_status/routes.htm b/modules/luci-mod-admin-full/luasrc/view/admin_status/routes.htm index 82dd3a7df..5f2c07493 100644 --- a/modules/luci-mod-admin-full/luasrc/view/admin_status/routes.htm +++ b/modules/luci-mod-admin-full/luasrc/view/admin_status/routes.htm @@ -33,7 +33,7 @@ <%+header%>
-

<%:Routes%>

+

<%:Routes%>

<%:The following rules are currently active on this system.%>
diff --git a/modules/luci-mod-admin-full/luasrc/view/admin_status/syslog.htm b/modules/luci-mod-admin-full/luasrc/view/admin_status/syslog.htm index 40032a142..b87f21d08 100644 --- a/modules/luci-mod-admin-full/luasrc/view/admin_status/syslog.htm +++ b/modules/luci-mod-admin-full/luasrc/view/admin_status/syslog.htm @@ -5,7 +5,7 @@ -%> <%+header%> -

<%:System Log%>

+

<%:System Log%>

diff --git a/modules/luci-mod-admin-full/luasrc/view/admin_status/wireless.htm b/modules/luci-mod-admin-full/luasrc/view/admin_status/wireless.htm index 025fece90..f18592610 100644 --- a/modules/luci-mod-admin-full/luasrc/view/admin_status/wireless.htm +++ b/modules/luci-mod-admin-full/luasrc/view/admin_status/wireless.htm @@ -314,7 +314,7 @@ ); //]]> -

<%:Realtime Wireless%>

+

<%:Realtime Wireless%>

    <% for _, dev in ipairs(devices) do %> diff --git a/modules/luci-mod-admin-full/luasrc/view/admin_system/applyreboot.htm b/modules/luci-mod-admin-full/luasrc/view/admin_system/applyreboot.htm index 15c96e34d..e722a4809 100644 --- a/modules/luci-mod-admin-full/luasrc/view/admin_system/applyreboot.htm +++ b/modules/luci-mod-admin-full/luasrc/view/admin_system/applyreboot.htm @@ -25,7 +25,7 @@
    -

    <%:System%> - <% if title then %><%=title%><% else %><%:Rebooting...%><% end %>

    +

    <%:System%> - <% if title then %><%=title%><% else %><%:Rebooting...%><% end %>

    <% if msg then %><%=msg%><% else %><%:Changes applied.%><% end %> diff --git a/modules/luci-mod-admin-full/luasrc/view/admin_system/backupfiles.htm b/modules/luci-mod-admin-full/luasrc/view/admin_system/backupfiles.htm index 0a6df109d..c1f3361ae 100644 --- a/modules/luci-mod-admin-full/luasrc/view/admin_system/backupfiles.htm +++ b/modules/luci-mod-admin-full/luasrc/view/admin_system/backupfiles.htm @@ -5,6 +5,6 @@ -%>

    diff --git a/modules/luci-mod-admin-full/luasrc/view/admin_system/clock_status.htm b/modules/luci-mod-admin-full/luasrc/view/admin_system/clock_status.htm index 84e151075..37d8ae0e8 100644 --- a/modules/luci-mod-admin-full/luasrc/view/admin_system/clock_status.htm +++ b/modules/luci-mod-admin-full/luasrc/view/admin_system/clock_status.htm @@ -1,7 +1,7 @@ <%+cbi/valueheader%> + +<%- local c = require("luci.model.uci").cursor():changes(); if c and next(c) then -%> +

    <%:Warning: There are unsaved changes that will get lost on reboot!%>

    <%- end -%> -<%+footer%> \ No newline at end of file + +
    + + + + + + + +<%+footer%> diff --git a/modules/luci-mod-admin-full/luasrc/view/admin_system/upgrade.htm b/modules/luci-mod-admin-full/luasrc/view/admin_system/upgrade.htm index b9d42357b..5ca0398e1 100644 --- a/modules/luci-mod-admin-full/luasrc/view/admin_system/upgrade.htm +++ b/modules/luci-mod-admin-full/luasrc/view/admin_system/upgrade.htm @@ -6,7 +6,7 @@ <%+header%> -

    <%:Flash Firmware%> - <%:Verify%>

    +

    <%:Flash Firmware%> - <%:Verify%>

    <%_ The flash image was uploaded. Below is the checksum and file size listed, @@ -45,12 +45,11 @@

    -
    - -
    -
    + + " /> +
    diff --git a/modules/luci-mod-admin-full/luasrc/view/admin_uci/apply.htm b/modules/luci-mod-admin-full/luasrc/view/admin_uci/apply.htm index 4284b44d3..370027e51 100644 --- a/modules/luci-mod-admin-full/luasrc/view/admin_uci/apply.htm +++ b/modules/luci-mod-admin-full/luasrc/view/admin_uci/apply.htm @@ -6,7 +6,7 @@ <%+header%> -

    <%:Configuration%> / <%:Apply%>

    +

    <%:Configuration%> / <%:Apply%>

    <% if changes then %> <%+cbi/apply_xhr%> diff --git a/modules/luci-mod-admin-full/luasrc/view/admin_uci/changes.htm b/modules/luci-mod-admin-full/luasrc/view/admin_uci/changes.htm index 84e22879e..c3373604f 100644 --- a/modules/luci-mod-admin-full/luasrc/view/admin_uci/changes.htm +++ b/modules/luci-mod-admin-full/luasrc/view/admin_uci/changes.htm @@ -1,12 +1,12 @@ <%# Copyright 2008 Steven Barth - Copyright 2008 Jo-Philipp Wich + Copyright 2008-2015 Jo-Philipp Wich Licensed to the public under the Apache License 2.0. -%> <%+header%> -

    <%:Configuration%> / <%:Changes%>

    +

    <%:Configuration%> / <%:Changes%>

    <% if changes then %> <%+admin_uci/changelog%> @@ -25,15 +25,18 @@ <% end %>
    -
    + + " />
    -
    + + " />
    -
    + + " />
    diff --git a/modules/luci-mod-admin-full/luasrc/view/admin_uci/revert.htm b/modules/luci-mod-admin-full/luasrc/view/admin_uci/revert.htm index d2bdc7a97..5da7281a8 100644 --- a/modules/luci-mod-admin-full/luasrc/view/admin_uci/revert.htm +++ b/modules/luci-mod-admin-full/luasrc/view/admin_uci/revert.htm @@ -6,7 +6,7 @@ <%+header%> -

    <%:Configuration%> / <%:Revert%>

    +

    <%:Configuration%> / <%:Revert%>

    <% if changes then %> <%+cbi/apply_xhr%> diff --git a/modules/luci-mod-admin-mini/luasrc/view/mini/applyreboot.htm b/modules/luci-mod-admin-mini/luasrc/view/mini/applyreboot.htm index 4c536249a..d33a2ca29 100644 --- a/modules/luci-mod-admin-mini/luasrc/view/mini/applyreboot.htm +++ b/modules/luci-mod-admin-mini/luasrc/view/mini/applyreboot.htm @@ -5,7 +5,7 @@ -%> <%+header%> -

    <%:System%>

    +

    <%:System%>


    <% if msg then %><%=msg%><% else %><%:Changes applied.%><% end %>

    <%:Please wait: Device rebooting...%>

    diff --git a/modules/luci-mod-admin-mini/luasrc/view/mini/backup.htm b/modules/luci-mod-admin-mini/luasrc/view/mini/backup.htm index b0f52f791..efc6aa72f 100644 --- a/modules/luci-mod-admin-mini/luasrc/view/mini/backup.htm +++ b/modules/luci-mod-admin-mini/luasrc/view/mini/backup.htm @@ -5,7 +5,7 @@ -%> <%+header%> -

    <%:System%>

    +

    <%:System%>

    <%:Backup / Restore%>

    <%:Here you can backup and restore your configuration and - if possible - reset this device to the default settings.%>


    diff --git a/modules/luci-mod-admin-mini/luasrc/view/mini/index.htm b/modules/luci-mod-admin-mini/luasrc/view/mini/index.htm index 9fb03c3c6..5818a567f 100644 --- a/modules/luci-mod-admin-mini/luasrc/view/mini/index.htm +++ b/modules/luci-mod-admin-mini/luasrc/view/mini/index.htm @@ -4,7 +4,7 @@ Licensed to the public under the Apache License 2.0. -%> -

    <%:Hello!%>

    +

    <%:Hello!%>

    <%_This is the administration area of LuCI.%>

    <%_LuCI is a free, flexible, and user friendly graphical interface for configuring OpenWrt.%>
    <%:On the following pages you can adjust all important settings of this device.%>

    diff --git a/modules/luci-mod-admin-mini/luasrc/view/mini/reboot.htm b/modules/luci-mod-admin-mini/luasrc/view/mini/reboot.htm index 0717f68d8..f70e7c92d 100644 --- a/modules/luci-mod-admin-mini/luasrc/view/mini/reboot.htm +++ b/modules/luci-mod-admin-mini/luasrc/view/mini/reboot.htm @@ -5,7 +5,7 @@ -%> <%+header%> -

    <%:System%>

    +

    <%:System%>

    <%:Reboot%>

    <%:Reboots the operating system of your device%>

    <%- diff --git a/modules/luci-mod-admin-mini/luasrc/view/mini/upgrade.htm b/modules/luci-mod-admin-mini/luasrc/view/mini/upgrade.htm index 474c22037..ecd1e8a7a 100644 --- a/modules/luci-mod-admin-mini/luasrc/view/mini/upgrade.htm +++ b/modules/luci-mod-admin-mini/luasrc/view/mini/upgrade.htm @@ -6,7 +6,7 @@ <%+header%> -

    <%:System%>

    +

    <%:System%>

    <%:Flash Firmware%>

    <% if step == 1 then %> diff --git a/modules/luci-mod-failsafe/luasrc/controller/failsafe/failsafe.lua b/modules/luci-mod-failsafe/luasrc/controller/failsafe/failsafe.lua index 6f7864301..60caadb4b 100644 --- a/modules/luci-mod-failsafe/luasrc/controller/failsafe/failsafe.lua +++ b/modules/luci-mod-failsafe/luasrc/controller/failsafe/failsafe.lua @@ -84,11 +84,13 @@ function action_flashops() fp = io.open(image_tmp, "w") end end - if chunk then - fp:write(chunk) - end - if eof then - fp:close() + if fp then + if chunk then + fp:write(chunk) + end + if eof then + fp:close() + end end end ) diff --git a/modules/luci-mod-failsafe/luasrc/view/failsafe/applyreboot.htm b/modules/luci-mod-failsafe/luasrc/view/failsafe/applyreboot.htm index 0c8cebc13..12c138c16 100644 --- a/modules/luci-mod-failsafe/luasrc/view/failsafe/applyreboot.htm +++ b/modules/luci-mod-failsafe/luasrc/view/failsafe/applyreboot.htm @@ -25,7 +25,7 @@
    -

    <%:System%> - <% if title then %><%=title%><% else %><%:Rebooting...%><% end %>

    +

    <%:System%> - <% if title then %><%=title%><% else %><%:Rebooting...%><% end %>

    <% if msg then %><%=msg%><% else %><%:Changes applied.%><% end %> diff --git a/modules/luci-mod-failsafe/luasrc/view/failsafe/flashops.htm b/modules/luci-mod-failsafe/luasrc/view/failsafe/flashops.htm index 29c4d2d6f..3c8d11bb7 100644 --- a/modules/luci-mod-failsafe/luasrc/view/failsafe/flashops.htm +++ b/modules/luci-mod-failsafe/luasrc/view/failsafe/flashops.htm @@ -7,7 +7,7 @@ <%+header%> -

    <%:Flash operations%>

    +

    <%:Flash operations%>

    <%:Flash new firmware image%> <% if upgrade_avail then %> diff --git a/modules/luci-mod-failsafe/luasrc/view/failsafe/reboot.htm b/modules/luci-mod-failsafe/luasrc/view/failsafe/reboot.htm index 189939afb..cbbe13b42 100644 --- a/modules/luci-mod-failsafe/luasrc/view/failsafe/reboot.htm +++ b/modules/luci-mod-failsafe/luasrc/view/failsafe/reboot.htm @@ -6,7 +6,7 @@ -%> <%+header%> -

    <%:System%>

    +

    <%:System%>

    <%:Reboot%>

    <%:Reboots the operating system of your device%>

    <%- if not reboot then -%> diff --git a/modules/luci-mod-failsafe/luasrc/view/failsafe/upgrade.htm b/modules/luci-mod-failsafe/luasrc/view/failsafe/upgrade.htm index 619ed85de..3be9ae119 100644 --- a/modules/luci-mod-failsafe/luasrc/view/failsafe/upgrade.htm +++ b/modules/luci-mod-failsafe/luasrc/view/failsafe/upgrade.htm @@ -7,7 +7,7 @@ <%+header%> -

    <%:Flash Firmware%> - <%:Verify%>

    +

    <%:Flash Firmware%> - <%:Verify%>

    <%_ The flash image was uploaded. Below is the checksum and file size listed, diff --git a/modules/luci-mod-freifunk/luasrc/model/cbi/freifunk/basics.lua b/modules/luci-mod-freifunk/luasrc/model/cbi/freifunk/basics.lua index 019e404ef..0d3d971c3 100644 --- a/modules/luci-mod-freifunk/luasrc/model/cbi/freifunk/basics.lua +++ b/modules/luci-mod-freifunk/luasrc/model/cbi/freifunk/basics.lua @@ -5,7 +5,7 @@ local fs = require "nixio.fs" local util = require "luci.util" local uci = require "luci.model.uci".cursor() -local profiles = "/etc/config/profile_" +local profiles = "/etc/config/profile_*" m = Map("freifunk", translate ("Community")) c = m:section(NamedSection, "community", "public", nil, translate("These are the basic settings for your local wireless community. These settings define the default values for the wizard and DO NOT affect the actual configuration of the router.")) @@ -14,7 +14,7 @@ community = c:option(ListValue, "name", translate ("Community")) community.rmempty = false local profile -for profile in fs.dir(profiles) do +for profile in fs.glob(profiles) do local name = uci:get_first(profile, "community", "name") or "?" community:value(profile, name) end diff --git a/modules/luci-mod-freifunk/luasrc/view/freifunk-map/frame.htm b/modules/luci-mod-freifunk/luasrc/view/freifunk-map/frame.htm index b2e168363..dbf3820f5 100644 --- a/modules/luci-mod-freifunk/luasrc/view/freifunk-map/frame.htm +++ b/modules/luci-mod-freifunk/luasrc/view/freifunk-map/frame.htm @@ -11,7 +11,7 @@ %> <% if has_latlon then %> - +

    <%:Legend%>:

    • <%:Green%>:<%:Very good (ETX < 2)%>
    • diff --git a/modules/luci-mod-freifunk/luasrc/view/freifunk/contact.htm b/modules/luci-mod-freifunk/luasrc/view/freifunk/contact.htm index f7cb4a92b..1add595c6 100644 --- a/modules/luci-mod-freifunk/luasrc/view/freifunk/contact.htm +++ b/modules/luci-mod-freifunk/luasrc/view/freifunk/contact.htm @@ -27,7 +27,7 @@ else end %> -

      <%:Contact%>

      +

      <%:Contact%>

      <%:Operator%> diff --git a/modules/luci-mod-freifunk/luasrc/view/freifunk/public_status.htm b/modules/luci-mod-freifunk/luasrc/view/freifunk/public_status.htm index 42a58f9dd..fc3948ecc 100644 --- a/modules/luci-mod-freifunk/luasrc/view/freifunk/public_status.htm +++ b/modules/luci-mod-freifunk/luasrc/view/freifunk/public_status.htm @@ -49,6 +49,32 @@ for _, dev in ipairs(devices) do end local has_iwinfo = pcall(require, "iwinfo") + +-- Find default routes + +local _, r, def4, def6 + +for _, r in ipairs(ip.routes({ type = 1, dest_exact = "0.0.0.0/0" })) do + def4 = { + gateway = r.gw:string(), + dest = r.dest:string(), + dev = r.dev, + metr = r.metric or 0 + } + break +end + +for _, r in ipairs(ip.routes({ type = 1, dest_exact = "::/0" })) do + def6 = { + gateway = r.gw:string(), + dest = r.dest:string(), + dev = r.dev, + metr = r.metric or 0 + } + break +end + + if luci.http.formvalue("status") == "1" then local rv = { } for dev in pairs(netdevs) do @@ -67,30 +93,6 @@ if luci.http.formvalue("status") == "1" then end - -- Find default routes - - local _, r, def4, def6 - - for _, r in ipairs(ip.routes({ type = 1, dest_exact = "0.0.0.0/0" })) do - def4 = { - gateway = r.gw:string(), - dest = r.dest:string(), - dev = r.dev, - metr = r.metric or 0 - } - break - end - - for _, r in ipairs(ip.routes({ type = 1, dest_exact = "::/0" })) do - def6 = { - gateway = r.gw:string(), - dest = r.dest:string(), - dev = r.dev, - metr = r.metric or 0 - } - break - end - rv[#rv+1] = { time = time, uptime = uptime, @@ -297,7 +299,7 @@ end if bitrate ~= "N/A" then bitrate = ( bitrate / 1000 ).."Mb/s" end - local interface = net.iwdata.ifname or "N/A" + local interface = net.iwinfo.ifname or "N/A" %> <%=signal_string%> @@ -323,7 +325,7 @@ end
      -<% if not defroutev4 and not defroutev6 then %> +<% if not def4 and not def6 then %> <%:No default routes known.%> <%else%> @@ -334,23 +336,22 @@ end - <% if defroutev4 then %> - + <% if def4 then %> - - - - + + + + <% end - if defroutev6 then %> + if def6 then %> - - - - + + + + <% end %> diff --git a/modules/luci-mod-rpc/luasrc/controller/rpc.lua b/modules/luci-mod-rpc/luasrc/controller/rpc.lua index 862e5839f..759bb749c 100644 --- a/modules/luci-mod-rpc/luasrc/controller/rpc.lua +++ b/modules/luci-mod-rpc/luasrc/controller/rpc.lua @@ -49,8 +49,10 @@ function rpc_auth() server.challenge = function(user, pass) local sid, token, secret + local config = require "luci.config" + if sys.user.checkpasswd(user, pass) then - local sdat = util.ubus("session", "create", { timeout = luci.config.sauth.sessiontime }) + local sdat = util.ubus("session", "create", { timeout = config.sauth.sessiontime }) if sdat then sid = sdat.ubus_rpc_session token = sys.uniqueid(16) diff --git a/protocols/luci-proto-ipv6/luasrc/model/cbi/admin_network/proto_map.lua b/protocols/luci-proto-ipv6/luasrc/model/cbi/admin_network/proto_map.lua index 2f8108ef1..37d4ec901 100644 --- a/protocols/luci-proto-ipv6/luasrc/model/cbi/admin_network/proto_map.lua +++ b/protocols/luci-proto-ipv6/luasrc/model/cbi/admin_network/proto_map.lua @@ -50,7 +50,7 @@ ip6prefixlen.datatype = "range(0,64)" s:taboption("general", Value, "ealen", - translate("EA-bits length")).datatype = "range(0,16)" + translate("EA-bits length")).datatype = "range(0,48)" s:taboption("general", Value, "psidlen", translate("PSID-bits length")).datatype = "range(0,16)" diff --git a/themes/luci-theme-bootstrap/luasrc/view/themes/bootstrap/header.htm b/themes/luci-theme-bootstrap/luasrc/view/themes/bootstrap/header.htm index f4a681009..3b40ad438 100644 --- a/themes/luci-theme-bootstrap/luasrc/view/themes/bootstrap/header.htm +++ b/themes/luci-theme-bootstrap/luasrc/view/themes/bootstrap/header.htm @@ -178,7 +178,7 @@ %>
      <% if ucichanges > 0 then %> - <%:Unsaved Changes%>: <%=ucichanges%> + "><%:Unsaved Changes%>: <%=ucichanges%> <% end %>
      - - - -
      - <% local ver = require "luci.version" -%> - Powered by <%= ver.luciname %> (<%= ver.luciversion %>) -
      -
      -
      - - - - - - - diff --git a/themes/luci-theme-freifunk-bno/luasrc/view/themes/freifunk-bno/header.htm b/themes/luci-theme-freifunk-bno/luasrc/view/themes/freifunk-bno/header.htm deleted file mode 100644 index d108a0893..000000000 --- a/themes/luci-theme-freifunk-bno/luasrc/view/themes/freifunk-bno/header.htm +++ /dev/null @@ -1,209 +0,0 @@ -<%# - Copyright 2008 Steven Barth - Copyright 2008 Jo-Philipp Wich - Licensed to the public under the Apache License 2.0. --%> - -<% -require("luci.sys") -require("luci.util") - -local boardinfo = luci.util.ubus("system", "board") - -local request = require("luci.dispatcher").context.path -local category = request[1] -local tree = luci.dispatcher.node() -local cattree = category and luci.dispatcher.node(category) -local node = luci.dispatcher.context.dispatched - -local c = tree -for i,r in ipairs(request) do - if c.nodes and c.nodes[r] then - c = c.nodes[r] - c._menu_selected = true - end -end - -require("luci.http").prepare_content("text/html") - --%> - - - - - - - <% if node and node.css then %><% end %> - <% if css then %> - <% end -%> - - - - - <%=striptags( (boardinfo.hostname or "?") .. ( (node and node.title) and ' - ' .. translate(node.title) or '')) %> - LuCI - - - - -
      -
      - -
      -<%- if luci.sys.user.getuser("root") and not luci.sys.user.getpasswd("root") then -%> -
      - <%:No password set!%>
      - <%:There is no password set on this router. Please configure a root password to protect the web interface and enable SSH.%> -
      -<%- end -%> -
      - - - - -
      -<%:Path%>: <% -local c = tree -local url = controller -for k,v in pairs(request) do - if c.nodes and c.nodes[v] then - c = c.nodes[v] - url = url .. "/" .. v - %><%=pcdata(striptags(translate(c.title) or v))%> <% if k ~= #request then %>» <% end - end -end -%> -
      - - -
      - -
      - - <% - if tree.nodes[category] and tree.nodes[category].ucidata then - local ucic = 0 - - for i, j in pairs(require("luci.model.uci").cursor():changes()) do - for k, l in pairs(j) do - for m, n in pairs(l) do - ucic = ucic + 1; - end - end - end - %> - - <% end %> - -
      -
      - -
      -<% if category ~= "freifunk" and category ~= "splash" then %> - -<% end %> diff --git a/themes/luci-theme-freifunk-bno/root/etc/uci-defaults/luci-theme-freifunk-bno b/themes/luci-theme-freifunk-bno/root/etc/uci-defaults/luci-theme-freifunk-bno deleted file mode 100755 index a19f2bb41..000000000 --- a/themes/luci-theme-freifunk-bno/root/etc/uci-defaults/luci-theme-freifunk-bno +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/sh -uci batch <<-EOF - set luci.themes.Freifunk_BNO=/luci-static/freifunk-bno - set luci.main.mediaurlbase=/luci-static/freifunk-bno - commit luci -EOF diff --git a/themes/luci-theme-material/Makefile b/themes/luci-theme-material/Makefile new file mode 100755 index 000000000..5bc16eb7d --- /dev/null +++ b/themes/luci-theme-material/Makefile @@ -0,0 +1,14 @@ +# +# Copyright (C) 2008-2014 The LuCI Team +# +# This is free software, licensed under the Apache License, Version 2.0 . +# + +include $(TOPDIR)/rules.mk + +LUCI_TITLE:=Material Theme +LUCI_DEPENDS:= + +include ../../luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/themes/luci-theme-material/htdocs/luci-static/material/css/style.css b/themes/luci-theme-material/htdocs/luci-static/material/css/style.css new file mode 100755 index 000000000..d4feb368b --- /dev/null +++ b/themes/luci-theme-material/htdocs/luci-static/material/css/style.css @@ -0,0 +1,1504 @@ +/** + * Material is a clean HTML5 theme for LuCI. It is based on luci-theme-bootstrap and MUI + * + * luci-theme-material + * Copyright 2015 Lutty Yang + * + * Have a bug? Please create an issue here on GitHub! + * https://github.com/LuttyYang/luci-theme-material/issues + * + * luci-theme-bootstrap: + * Copyright 2008 Steven Barth + * Copyright 2008 Jo-Philipp Wich + * Copyright 2012 David Menting + * + * MUI: + * https://github.com/muicss/mui + * + * Licensed to the public under the Apache License 2.0 + */ + +/* + * Font generate by Icomoon + */ +@font-face { + font-family: 'icomoon'; + src: url('../fonts/font.eot'); + src: url('../fonts/font.eot') format('embedded-opentype'), + url('../fonts/font.ttf') format('truetype'), + url('../fonts/font.woff') format('woff'), + url('../fonts/font.svg') format('svg'); + font-weight: normal; + font-style: normal; +} + +.cbi-button-up, +.cbi-button-down, +.cbi-value-helpicon, +.showSide, +.main > .loading > span { + font-family: 'icomoon' !important; + speak: none; + font-style: normal !important; + font-weight: normal !important; + font-variant: normal !important; + text-transform: none !important; + line-height: 1; + + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +* { + margin: 0; + padding: 0; + box-sizing: border-box; +} + +.h1, .h2, .h3, .h4, .h5, .h6, h1, h2, h3, h4, h5, h6 { + font-family: inherit; + font-weight: 500; + line-height: 1.1; + color: inherit; +} + +html { + -webkit-text-size-adjust: 100%; + -ms-text-size-adjust: 100%; +} + +html, body { + margin: 0px; + padding: 0px; + height: 100%; + font-family: "Helvetica Neue", Helvetica, Microsoft Yahei, Hiragino Sans GB, WenQuanYi Micro Hei, sans-serif; +} + +select { + padding: 0.36rem 0.8rem; + color: #555; + background-color: #fff; + background-image: none; + border: 1px solid #ccc; +} + +select, +input { + background-color: transparent; + color: rgba(0, 0, 0, .87); + border: none; + border-bottom: 1px solid rgba(0, 0, 0, .26); + outline: 0; + padding: 0; + box-shadow: none; + border-radius: 0; + background-image: none; + height: 2rem; + font-size: 1.1rem; +} + +select:not([multiple="multiple"]):focus, +input:focus { + height: 2rem; + height: calc(2rem + 1px); + margin-bottom: -1px; + border-color: #0099CC; + border-width: 2px; +} + +select[multiple="multiple"] { + height: auto; +} + +code { + color: #0099CC; +} + +abbr { + color: #005470; + text-decoration: underline; + cursor: help; +} + +hr{ + margin: 1rem 0; + border-color: #EEE; + opacity: 0.1; +} + +header, .main { + width: 100%; + position: absolute; +} + +header { + height: 4rem; + box-shadow: 0 2px 5px rgba(0, 0, 0, .26); + transition: box-shadow .2s; + float: left; + position: fixed; + z-index: 101; +} + +footer { + text-align: right; + padding: 1rem; + color: #aaa; + font-size: 0.8rem; + text-shadow: 0px 0px 2px #BBB; +} + +footer > a { + color: #aaa; + text-decoration: none; +} + +.main { + top: 4rem; + bottom: 0rem; + position: relative; + height: 100%; + height: calc(100% - 4rem); +} + +.main > .loading { + position: fixed; + width: 100%; + height: 100%; + z-index: 1000; + display: block; + background-color: rgb(240, 240, 240); + top: 0; +} + +.main > .loading > span { + display: block; + text-align: center; + margin-top: 2rem; + color: #888; + font-size: 1.3rem; +} + +.main > .loading > span > .loading-img:before { + content: "\e603"; +} + +.main > .loading > span > .loading-img { + animation: anim-rotate 2s infinite linear; + margin-right: 0.2rem; + display: inline-block; +} + +@keyframes anim-rotate { + 0% { + -webkit-transform: rotate(0); + -ms-transform: rotate(0); + transform: rotate(0); + } + 100% { + -webkit-transform: rotate(360deg); + -ms-transform: rotate(360deg); + transform: rotate(360deg) + } +} + +.main-left { + float: left; + top: 4rem; + width: 15%; + width: calc(0% + 17rem); + height: 100%; + height: calc(100% - 4rem); + background-color: white; + + overflow-x: auto; + position: fixed; +} + +.main-right { + width: 85%; + width: calc(100% - 17rem); + float: right; + height: 100%; + background-color: #EEE; +} + +.main-right > #maincontent { + background-color: #EEE; +} + +.pull-right { + float: right; +} + +.pull-left { + float: left; +} + +header { + background: #0099CC; + color: white; +} + +header > .container { + margin-top: 0.5rem; + padding: 0.5rem 1rem 0 1rem; +} + +header > .container > .brand { + font-size: 1.5rem; + color: white; + text-decoration: none; + cursor: default; + vertical-align: text-bottom; +} + +.warning { + background-color: #FF7D60 !important; + color: #FFF; +} + +.errorbox, +.alert-message { + margin: 2rem 0 0 0; + padding: 2rem; + border: 0; + font-weight: normal; + font-style: normal; + line-height: 1; + font-family: inherit; + min-width: inherit; + overflow: auto; + border-radius: 0; + background-color: #FFF; + box-shadow: 0 2px 2px 0 rgba(0, 0, 0, .16), 0 0 2px 0 rgba(0, 0, 0, .12); +} + +.errorbox { + color: #fff; + background-color: #f0ad4e; + border-color: #eea236; +} + +.error { + color: red; +} + +#maincontent > .container > div:nth-child(1).alert-message.warning > a { + font: inherit; + overflow: visible; + text-transform: none; + display: inline-block; + margin-bottom: 0; + font-weight: 400; + text-align: center; + white-space: nowrap; + vertical-align: middle; + touch-action: manipulation; + cursor: pointer; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + background-image: none; + min-width: 6rem; + padding: 0.5rem 1rem; + font-size: 1.1rem; + line-height: 1.42857143; + color: #fff; + background-color: #5bc0de; + border-color: #46b8da; + margin-top: 2rem; + text-decoration: inherit; +} + +.main > .main-left > .nav { + margin-top: 0.5rem; +} + +.main > .main-left > .nav > li a { + color: #404040; + display: block; +} + +.main > .main-left > .nav > li:nth-last-child(1) { + margin-top: 2rem; + font-size: 1.2rem; +} + +.main > .main-left > .nav > li { + padding: 0.5rem 1rem; + cursor: pointer; +} + +.main > .main-left > .nav > .slide { + padding: 0; +} + +.main > .main-left > .nav > .slide > ul { + display: none; +} + +.main > .main-left > .nav > .slide > .menu { + display: block; + padding: 0.5rem 1rem; + text-decoration: none; + cursor: default; + font-size: 1.2rem; +} + +.main > .main-left > .nav > li:hover, +.main > .main-left > .nav > .slide > .menu:hover { + background: #D4D4D4; +} + +.main > .main-left > .nav > .slide:hover { + background: none; +} + +.main > .main-left > .nav > .slide > .slide-menu > li { + padding: 0.4rem 2rem; +} + +.main > .main-left > .nav > .slide > .slide-menu > .active { + background-color: #0099CC; +} + +.main > .main-left > .nav > .slide > .slide-menu > li > a { + text-decoration: none; + white-space: nowrap; +} + +.main > .main-left > .nav > .slide > .slide-menu > .active > a { + color: white; +} + +.main > .main-left > .nav > .slide > .slide-menu > li:hover { + background: #D4D4D4; +} + +.main > .main-left > .nav > .slide > .slide-menu > .active:hover { + background-color: #0099CC; + cursor: hand; +} + +li { + list-style-type: none; +} + +#maincontent > .container { + margin: 0 2rem 1rem 2rem; +} + +h1 { + font-size: 4rem; + padding-bottom: 10px; + border-bottom: 1px solid #eee; +} + +h2 { + margin: 2rem 0 0 0; + font-size: 2.5rem; + padding-bottom: 10px; + border-bottom: 1px solid #eee; +} + +h3 { + margin: 2rem 0 0 0; + font-size: 2rem; + padding-bottom: 10px; +} + +h4 { + +} + +fieldset { + margin: 2rem 0 0 0; + padding: 2rem; + border: 0; + font-weight: normal; + font-style: normal; + line-height: 1; + font-family: inherit; + + min-width: inherit; + overflow-x: auto; + overflow-y: hidden; + + border-radius: 0; + background-color: #FFF; + box-shadow: 0 2px 2px 0 rgba(0, 0, 0, .16), 0 0 2px 0 rgba(0, 0, 0, .12); + + -webkit-overflow-scrolling: touch; +} + +fieldset > legend { + display: none !important; +} + +fieldset > fieldset { + margin: 0; + padding: 0; + border: none; + box-shadow: none; +} + +.panel-title { + width: 100%; + display: block; + line-height: 1; + color: #404040; + font-size: 1.9rem; + padding-bottom: 2rem; + border-bottom: 1px solid #eee; +} + +table { + border-spacing: 0; + border-collapse: collapse; + width: 100%; + border: 1px solid #eee; +} + +table > tbody > tr > td, table > tbody > tr > th, table > tfoot > tr > td, table > tfoot > tr > th, table > thead > tr > td, table > thead > tr > th { + padding: 8px; + line-height: 1.42857143; + border-top: 1px solid #ddd; + + white-space: nowrap; +} + +.cbi-section-table-cell { + text-align: center; +} + +.cbi-section-table-row { + text-align: center; +} + +fieldset > table > tbody > tr:nth-of-type(odd) { + background-color: #f9f9f9; +} + +/* fix progress bar */ +#swaptotal > div, +#swapfree > div, +#memfree > div, +#membuff > div, +#conns > div, +#memtotal > div { + width: 100% !important; + height: 1.4rem !important; +} + +#swaptotal > div > div, +#swapfree > div > div, +#memfree > div > div, +#membuff > div > div, +#conns > div > div, +#memtotal > div > div { + height: 1.4rem !important; + background-color: #0099CC !important; +} + +/* fix multiple table */ + +table table { + border: none; +} + +.cbi-value-field table { + border: none; +} + +td > table > tbody > tr > td { + border: none; +} + +.cbi-value-field > table > tbody > tr > td { + border: none; +} + +/* button style */ + +.cbi-button { + -webkit-appearance: none; + text-transform: uppercase; + color: rgba(0, 0, 0, 0.87); + background-color: #F0F0F0; + transition: all 0.2s ease-in-out; + display: inline-block; + padding: 0.5rem 1rem; + border: none; + border-radius: 0.2rem; + cursor: pointer; + -ms-touch-action: manipulation; + touch-action: manipulation; + background-image: none; + text-align: center; + vertical-align: middle; + white-space: nowrap; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + font-size: 1rem; + width: auto !important; +} + +.cbi-button:hover, +.cbi-button:focus, +.cbi-button:active { + color: rgba(0, 0, 0, 0.87); + outline: 0; + text-decoration: none; + color: rgba(0, 0, 0, 0.87); +} + +.cbi-button:hover, +.cbi-button:focus { + box-shadow: 0 0px 2px rgba(0, 0, 0, 0.12), 0 2px 2px rgba(0, 0, 0, 0.2); +} + +.cbi-button:active { + box-shadow: 0 10px 20px rgba(0, 0, 0, 0.19), 0 6px 6px rgba(0, 0, 0, 0.23); +} + +.cbi-button:disabled { + cursor: not-allowed; + pointer-events: none; + opacity: 0.60; + box-shadow: none; +} + +form.inline + form.inline, +.cbi-button + .cbi-button { + margin-left: 0.6rem; +} + +.cbi-button-reset, +.cbi-input-remove { + color: #fff !important; + background-color: #f0ad4e !important; + border-color: #eea236 !important; +} + +.cbi-input-find, +.cbi-input-save, +.cbi-button-add, +.cbi-button-save, +.cbi-button-find, +.cbi-input-reload, +.cbi-button-reload { + color: #fff !important; + background-color: #337ab7 !important; + border-color: #2e6da4 !important; +} + +.cbi-input-apply, +.cbi-button-apply, +.cbi-button-edit { + color: #fff !important; + background-color: #5bc0de !important; + border-color: #46b8da !important; +} + +.cbi-input-reset, +.cbi-button-remove { + color: #fff !important; + background-color: #d9534f !important; + border-color: #d43f3a !important; +} + +.a-to-btn { + text-decoration: none; +} + +/* table */ + +.tabs { + margin: 0 -2rem; + padding-left: 0.5rem; + background-color: #FFFFFF; +} + +.cbi-tabmenu > li, +.tabs > li { + display: inline-block; + padding: 0.9rem 0rem; +} + +.cbi-tabmenu > li > a, +.tabs > li > a { + text-decoration: none; + color: #404040; + padding: 0.9rem 1.5rem; +} + +.tabs > li[class~="active"], +.tabs > li:hover { + cursor: pointer; + border-bottom: 0.2rem solid #0099CC; + color: #0099CC; + margin-bottom: -0.18751rem; +} + +.tabs > li[class~="active"] > a { + color: #0099cc; +} + +.tabs > li:hover { + border-bottom: 0.18751rem solid #C9C9C9; +} + +.cbi-tabmenu { + border-top: 1px solid #D4D4D4; + border-left: 1px solid #D4D4D4; + border-right: 1px solid #D4D4D4; +} + +.cbi-tabmenu > li:hover { + background-color: #F1F1F1; +} + +.cbi-tabmenu > li[class~="cbi-tab"] { + background-color: white; +} + +.cbi-tabmenu { + background-color: #D4D4D4; +} + +.cbi-section-node-tabbed { + padding: 0; + margin-top: 0; + border-bottom: 1px solid #D4D4D4; + border-left: 1px solid #D4D4D4; + border-right: 1px solid #D4D4D4; +} + +.cbi-tabcontainer > .cbi-value:nth-of-type(2n) { + background-color: #f9f9f9; +} + +.cbi-value-field, +.cbi-value-description { + display: table-cell; +} + +.cbi-value-helpicon > img { + display: none; +} + +.cbi-value-helpicon:before { + content: "\f059"; +} + +.cbi-value-description { + font-size: small; + opacity: 0.5; + padding: 0.5rem 0 0 0; +} + +.cbi-value-title { + word-wrap: break-word; + padding-top: 0.6rem; + width: 23rem; + float: left; + text-align: right; + padding-right: 2rem; + display: table-cell; +} + +.cbi-value { + padding: 1rem; + display: inline-block; + width: 100%; +} + +.cbi-section-table-descr > .cbi-section-table-cell, +.cbi-section-table-titles > .cbi-section-table-cell { + border: none; +} + +.cbi-rowstyle-2 { + background-color: #eee; +} + +.cbi-rowstyle-2 .cbi-button-up, +.cbi-rowstyle-2 .cbi-button-down{ + background-color: #FFF !important; +} + +.cbi-section-table .cbi-section-table-titles .cbi-section-table-cell { + width: auto !important; +} + +/* desc */ +.cbi-section-descr, +.cbi-map-descr { + padding: 0.5rem; + color: #999; + font-size: small; +} + +/* luci */ + +.hidden { + display: none +} + +.left { + text-align: left !important; +} + +.right { + text-align: right !important; +} + +.inline { + display: inline; +} + +.cbi-page-actions { + border-top: 1px solid #eee; + padding-top: 2rem; + text-align: right; +} + +/* input */ +.cbi-value input[type="password"], +.cbi-value input[type="text"] { + min-width: 15rem; +} + +/* select */ +.cbi-value-field .cbi-input-select { + min-width: 15rem; +} + +.ifacebadge { + display: inline-flex; + border-bottom: 1px solid #CCCCCC; + padding: 0.5rem 1rem; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); +} + +.ifacebadge > img { + float: right; + margin-left: 0.3rem; +} + +/*textarea*/ + +.cbi-input-textarea { + width: 100%; + min-height: 16rem; + padding: 1rem; + font-size: 0.9rem; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + color: black; +} + +#syslog { + width: 100%; + min-height: 15rem; + padding: 1rem; + font-size: small; + color: #5F5F5F; + + margin-bottom: 20px; + border-radius: 0; + background-color: #FFF; + box-shadow: 0 2px 2px 0 rgba(0, 0, 0, .16), 0 0 2px 0 rgba(0, 0, 0, .12); + border: none; +} + +/* change */ + +.uci-change-list { + font-family: monospace; +} + +.uci-change-list ins, +.uci-change-legend-label ins { + text-decoration: none; + border: 1px solid #00FF00; + background-color: #CCFFCC; + display: block; + padding: 2px; +} + +.uci-change-list del, +.uci-change-legend-label del { + text-decoration: none; + border: 1px solid #FF0000; + background-color: #FFCCCC; + display: block; + font-style: normal; + padding: 2px; +} + +.uci-change-list var, +.uci-change-legend-label var { + text-decoration: none; + border: 1px solid #CCCCCC; + background-color: #EEEEEE; + display: block; + font-style: normal; + padding: 2px; +} + +.uci-change-list var ins, +.uci-change-list var del { + border: none; + white-space: pre; + font-style: normal; + padding: 0px; +} + +.uci-change-legend { + padding: 5px; +} + +.uci-change-legend-label { + width: 150px; + float: left; +} + +.uci-change-legend-label > ins, +.uci-change-legend-label > del, +.uci-change-legend-label > var { + float: left; + margin-right: 4px; + width: 10px; + height: 10px; + display: block; +} + +.uci-change-legend-label var ins, +.uci-change-legend-label var del { + line-height: 6px; + border: none; +} + +.uci-change-list var, +.uci-change-list del, +.uci-change-list ins { + padding: 0.5rem; +} + +/* other fix */ +#iwsvg, +#iwsvg2, +#bwsvg { + border: 1px solid #D4D4D4 !important; + border-top: none !important; +} + +.ifacebox { + border: 1px solid #999; + background-color: #f9f9f9; +} + +.cbi-image-button { + margin-left: 0.5rem; +} + +.zonebadge { + padding: 0.2rem 0.5rem; + display: inline-block; + cursor: pointer; +} + +.zonebadge > .ifacebadge { + padding: 0.2rem 1rem; + margin: 0.3rem; + border: 1px solid #6C6C6C; +} + +.zonebadge > input[type="text"] { + padding: 0.16rem 1rem; + min-width: 10rem; + margin-top: 0.3rem; +} + +.cbi-value-field .cbi-input-checkbox, +.cbi-value-field .cbi-input-radio { + margin-top: 0.3rem; +} + +.cbi-section-table-row > .cbi-value-field .cbi-input-select { + min-width: 7rem; +} + +.cbi-section-create > .cbi-button-add { + margin: 0.5rem; +} + +div.cbi-value var, td.cbi-value-field var { + font-style: italic; + color: #0069D6; +} + +small { + font-size: small; + white-space: normal; +} + +.cbi-button-up, +.cbi-button-down { + display: inline-block; + min-width: 0; + padding: 0.2rem 0.3rem; + font-size: 1.3rem; +} + +.cbi-optionals { + padding: 1rem 1rem 0 1rem; + border-top: 1px solid #CCC; +} + +#diag-rc-output > pre { + background-color: #f5f5f5; + display: block; + padding: 8.5px; + margin: 0 0 18px; + line-height: 1.5rem; + -moz-border-radius: 3px; + white-space: pre-wrap; + word-wrap: break-word; + font-size: 1.5rem; + color: #404040; +} + +input[name="ping"], +input[name="traceroute"], +input[name="nslookup"] { + width: 80%; +} + +header > .container > .pull-right > * { + position: relative; + top: 0.45rem; + cursor: pointer; +} + +#xhr_poll_status > .label.success { + background-color: #14CE14; +} + +.label { + padding: 0.3rem 0.8rem; + font-size: 1rem; + font-weight: bold; + color: #ffffff !important; + text-transform: uppercase; + white-space: nowrap; + background-color: #bfbfbf; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; + text-shadow: none; + text-decoration: none; +} + +.notice { + background-color: #5BC0DE; +} + +.showSide { + display: none; +} + +.darkMask { + width: 100%; + height: 100%; + position: fixed; + background-color: rgba(0, 0, 0, 0.56); + content: ""; + z-index: 99; + display: none; +} + +/* fix Main Login*/ +.node-main-login > .main > .main-left { + display: none; +} + +.node-main-login > .main > .main-right { + width: 100%; +} + +.node-main-login > .main fieldset { + padding: 0.5rem; + margin-bottom: 1rem; + display: inline; + background: none; + border: none; + box-shadow: none; + overflow: hidden; +} + +.node-main-login > .main .cbi-value-title { + width: 7rem; +} + +.node-main-login > .main #maincontent { + + text-align: center; +} + +.node-main-login > .main .container { + display: inline-block; + padding: 2rem 4rem; + margin-top: 2rem !important; + background-color: #FFF; + box-shadow: 0 2px 2px 0 rgba(0, 0, 0, .16), 0 0 2px 0 rgba(0, 0, 0, .12); + text-align: left; +} + +.node-main-login > .main form > div:nth-last-child(1) { + float: right; +} + +.node-main-login > .main .cbi-value { + display: block; +} + +.node-main-login > .main .cbi-value > * { + display: inline-block !important; +} + +.node-main-login > .main .cbi-input-user, +.node-main-login > .main .cbi-input-password { + min-width: 15rem; +} + +.node-main-login footer { + bottom: 0; + position: absolute; + width: 100%; +} + +/* fix status overview */ + +.node-status-overview > .main fieldset:nth-child(4) td:nth-child(2) { + white-space: normal; +} + +/* fix status processes */ + +.node-status-processes > .main table tr td:nth-child(3) { + white-space: normal; +} + +.node-status-iptables > .main div > .cbi-map > form { + margin: 2rem 2rem 0 0; +} + +/* fix system reboot */ + +.node-system-reboot > .main > .main-right p, +.node-system-reboot > .main > .main-right h3 { + padding-left: 2rem; +} + +/* fix Services Network Shares*/ +.node-services-samba > .main .cbi-tabcontainer:nth-child(3) .cbi-value-title { + margin-bottom: 1rem; +} + +.node-services-samba > .main .cbi-tabcontainer:nth-child(3) .cbi-value-field { + display: list-item; +} + +.node-services-samba > .main .cbi-tabcontainer:nth-child(3) .cbi-value-description { + padding-top: 1rem; +} + +/* fix System Software*/ +.node-system-packages > .main table tr td:nth-child(1) { + width: auto !important; +} + +.node-system-packages > .main table tr td:nth-last-child(1) { + white-space: normal; + font-size: small; + color: #404040; +} + +.node-system-packages > .main .cbi-tabmenu > li > a, .tabs > li > a { + padding: 0.5rem 1rem; +} + +.node-system-packages > .main .cbi-value > pre { + background-color: #eee; + padding: 0.5rem; + overflow: auto; +} + +.cbi-tabmenu + .cbi-section { + margin-top: 0; +} + +/* fix network firewall*/ +.node-network-firewall > .main .cbi-section-table-row > .cbi-value-field .cbi-input-select { + min-width: 4rem; +} + +.node-status-iptables fieldset, +.node-system-packages fieldset, +.node-system-flashops fieldset { + margin-top: 0; +} + +.node-status-iptables .cbi-tabmenu, +.node-system-packages .cbi-tabmenu, +.node-system-flashops .cbi-tabmenu { + border: none; + box-shadow: 0 2px 2px 0 rgba(0, 0, 0, .16), 0 0 2px 0 rgba(0, 0, 0, .12); +} + +#cbi-firewall-redirect table *, +#cbi-network-switch_vlan table *, +#cbi-firewall-zone table *{ + font-size: small; +} + +#cbi-firewall-redirect table input[type="text"], +#cbi-network-switch_vlan table input[type="text"], +#cbi-firewall-zone table input[type="text"]{ + width: 5rem; +} + +#cbi-firewall-redirect table select, +#cbi-network-switch_vlan table select, +#cbi-firewall-zone table select{ + min-width: 3.5rem; +} + + +/* language fix */ +body.lang_pl.node-main-login .cbi-value-title { + width: 12rem; +} + +@media screen and (max-width: 1600px) { + .main-left { + width: calc(0% + 15rem); + } + + .main-right { + width: calc(100% - 15rem); + } + + .cbi-button { + padding: 0.3rem 0.6rem; + font-size: 1rem; + line-height: 1.5; + } + + header > .container > .pull-right > * { + top: 0.35rem; + } + + .label { + padding: 0.2rem 0.6rem; + } + + .cbi-value-title { + width: 15rem; + padding-right: 0.6rem; + } + + fieldset { + padding: 1rem; + } + + .cbi-input-textarea { + font-size: small; + } + + .node-status-iptables > .main fieldset li > a { + padding: 0.3rem 0.6rem; + } +} + +@media screen and (max-width: 1280px) { + header { + height: 3.5rem; + } + + header > .container { + margin-top: 0.25rem; + } + + .main { + top: 3.5rem; + height: calc(100% - 3.5rem); + } + + .main-left { + width: calc(0% + 13rem); + top: 3.5rem; + height: calc(100% - 3.5rem); + } + + .main-right { + width: calc(100% - 13rem); + } + + .cbi-tabmenu > li > a, .tabs > li > a { + padding: 0.2rem 0.5rem; + } + + .panel-title { + font-size: 1.3rem; + padding-bottom: 1rem; + } + + table { + font-size: 0.8rem !important; + width: 100% !important; + } + + .main > .main-left > .nav > li, + .main > .main-left > .nav > li a, + .main > .main-left > .nav > .slide > .menu { + font-size: 1.1rem; + } + + .main > .main-left > .nav > .slide > .slide-menu > li > a { + font-size: 0.9rem; + } +} + +@media screen and (max-width: 992px) { + .main-left { + width: 0; + position: fixed; + z-index: 100; + } + + .main-right { + width: 100%; + } + + .showSide { + padding: 0.1rem; + margin-right: 0.5rem; + display: inline-block; + } + + .showSide:before { + content: "\e20e"; + font-size: 1.7rem; + } + + .node-main-login .showSide { + display: none !important; + } + + .cbi-value-title { + width: 9rem; + padding-right: 1rem; + } + + .node-network-diagnostics > .main .cbi-map fieldset > div * { + width: 100% !important; + } + + .node-network-diagnostics > .main .cbi-map fieldset > div input[type="text"] { + margin: 3rem 0 0 0 !important; + } + + .node-network-diagnostics > .main .cbi-map fieldset > div:nth-child(4) input[type="text"] { + margin: 0 !important; + } + + .node-network-diagnostics > .main .cbi-map fieldset > div select, + .node-network-diagnostics > .main .cbi-map fieldset > div input[type="button"] { + margin: 1rem 0 0 0; + } + + .node-network-diagnostics > .main .cbi-map fieldset > div { + width: 100% !important; + } + + #diag-rc-output > pre { + font-size: 1.2rem; + } + + .node-main-login > .main .cbi-value-title { + text-align: left; + } +} + +@media screen and (max-width: 480px) { + fieldset { + padding: 1rem; + margin: 1rem 0 0 0; + } + + .tabs { + margin: 0 -1rem; + } + + #maincontent > .container { + margin: 0 1rem 1.5rem 1rem; + } + + .main > .main-left > .nav > .slide > .menu { + font-size: 1.3rem; + } + + .main > .main-left > .nav > .slide > .slide-menu > li > a { + font-size: 1.1rem; + } + + .cbi-value-title { + width: 100%; + min-width: 0rem !important; + display: block; + margin-top: 1rem; + margin-bottom: 0.5rem; + text-align: left; + } + + .cbi-value-field, .cbi-value-description { + width: 100%; + } + + .cbi-value > .cbi-value-field { + display: inline-block; + } + + .cbi-tabmenu > li, .tabs > li { + padding: 0.6rem 0rem; + } + + .cbi-tabmenu > li > a, .tabs > li > a { + padding: 0.2rem 0.3rem; + font-size: 0.9rem; + } + + .cbi-page-actions > div > input { + display: none; + } + + .node-main-login > .main .container { + padding: 0.5rem 1rem 2rem 1rem; + } + + .node-main-login > .main .cbi-value { + padding: 0; + } + + .node-main-login > .main form > div:nth-last-child(1) { + margin-top: 2rem; + } + + .node-main-login > .main .cbi-value-title { + width: 100% !important; + font-size: 1.2rem; + } + + .node-main-login > .main fieldset { + margin: 0; + padding: 0.5rem; + } + + h2 { + font-size: 2rem; + } + + .tabs > li > a { + font-size: 0.9rem; + } + + select, + input { + font-size: 0.9rem; + } + + .mobile-hide { + display: none; + } + + .panel-title { + font-size: 1.4rem; + padding-bottom: 1rem; + } + + .node-system-packages > .main .cbi-value.cbi-value-last > div { + width: 100% !important; + } + + .node-system-packages > .main .cbi-value .cbi-value-field input { + width: 100%; + } + + .node-status-iptables > .main div > .cbi-map > form { + position: static !important; + margin: 0 0 2rem 0; + padding: 2rem; + border: 0; + font-weight: normal; + font-style: normal; + line-height: 1; + font-family: inherit; + min-width: inherit; + overflow-x: auto; + overflow-y: hidden; + border-radius: 0; + background-color: #FFF; + box-shadow: 0 2px 2px 0 rgba(0, 0, 0, .16), 0 0 2px 0 rgba(0, 0, 0, .12); + -webkit-overflow-scrolling: touch; + } + + .node-status-iptables > .main div > .cbi-map > form input[type="submit"]{ + width: 100% !important; + margin: 0; + } + + .node-status-iptables > .main div > .cbi-map > form input[type="submit"] + input[type="submit"]{ + margin-top: 1rem; + } +} + +@media screen and (min-width: 992px) { + .cbi-value input[type="password"], + .cbi-value input[type="text"] { + min-width: 20rem; + } + + .cbi-value-field .cbi-input-select { + min-width: 20rem; + } +} + +@media screen and (min-width: 1280px) { + .cbi-value input[type="password"], + .cbi-value input[type="text"] { + min-width: 22rem; + } + + .cbi-value-field .cbi-input-select { + min-width: 22rem; + } +} + +@media screen and (min-width: 1600px) { + .cbi-value input[type="password"], + .cbi-value input[type="text"] { + min-width: 25rem; + } + + .cbi-value-field .cbi-input-select { + min-width: 25rem; + } +} \ No newline at end of file diff --git a/themes/luci-theme-material/htdocs/luci-static/material/favicon.ico b/themes/luci-theme-material/htdocs/luci-static/material/favicon.ico new file mode 100755 index 000000000..b407d1845 Binary files /dev/null and b/themes/luci-theme-material/htdocs/luci-static/material/favicon.ico differ diff --git a/themes/luci-theme-material/htdocs/luci-static/material/fonts/font.eot b/themes/luci-theme-material/htdocs/luci-static/material/fonts/font.eot new file mode 100644 index 000000000..9e6ffc9b8 Binary files /dev/null and b/themes/luci-theme-material/htdocs/luci-static/material/fonts/font.eot differ diff --git a/themes/luci-theme-material/htdocs/luci-static/material/fonts/font.svg b/themes/luci-theme-material/htdocs/luci-static/material/fonts/font.svg new file mode 100644 index 000000000..d38d057da --- /dev/null +++ b/themes/luci-theme-material/htdocs/luci-static/material/fonts/font.svg @@ -0,0 +1,16 @@ + + + +Generated by IcoMoon + + + + + + + + + + + + \ No newline at end of file diff --git a/themes/luci-theme-material/htdocs/luci-static/material/fonts/font.ttf b/themes/luci-theme-material/htdocs/luci-static/material/fonts/font.ttf new file mode 100644 index 000000000..84669323e Binary files /dev/null and b/themes/luci-theme-material/htdocs/luci-static/material/fonts/font.ttf differ diff --git a/themes/luci-theme-material/htdocs/luci-static/material/fonts/font.woff b/themes/luci-theme-material/htdocs/luci-static/material/fonts/font.woff new file mode 100644 index 000000000..00cf84ea0 Binary files /dev/null and b/themes/luci-theme-material/htdocs/luci-static/material/fonts/font.woff differ diff --git a/themes/luci-theme-material/htdocs/luci-static/material/js/jquery.min.js b/themes/luci-theme-material/htdocs/luci-static/material/js/jquery.min.js new file mode 100755 index 000000000..f3644431e --- /dev/null +++ b/themes/luci-theme-material/htdocs/luci-static/material/js/jquery.min.js @@ -0,0 +1,6 @@ +/*! jQuery v1.11.3 | (c) 2005, 2015 jQuery Foundation, Inc. | jquery.org/license */ +!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k={},l="1.11.3",m=function(a,b){return new m.fn.init(a,b)},n=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,o=/^-ms-/,p=/-([\da-z])/gi,q=function(a,b){return b.toUpperCase()};m.fn=m.prototype={jquery:l,constructor:m,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=m.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return m.each(this,a,b)},map:function(a){return this.pushStack(m.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},m.extend=m.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||m.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(e=arguments[h]))for(d in e)a=g[d],c=e[d],g!==c&&(j&&c&&(m.isPlainObject(c)||(b=m.isArray(c)))?(b?(b=!1,f=a&&m.isArray(a)?a:[]):f=a&&m.isPlainObject(a)?a:{},g[d]=m.extend(j,f,c)):void 0!==c&&(g[d]=c));return g},m.extend({expando:"jQuery"+(l+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===m.type(a)},isArray:Array.isArray||function(a){return"array"===m.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){return!m.isArray(a)&&a-parseFloat(a)+1>=0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},isPlainObject:function(a){var b;if(!a||"object"!==m.type(a)||a.nodeType||m.isWindow(a))return!1;try{if(a.constructor&&!j.call(a,"constructor")&&!j.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}if(k.ownLast)for(b in a)return j.call(a,b);for(b in a);return void 0===b||j.call(a,b)},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(b){b&&m.trim(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(o,"ms-").replace(p,q)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=r(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(n,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(r(Object(a))?m.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){var d;if(b){if(g)return g.call(b,a,c);for(d=b.length,c=c?0>c?Math.max(0,d+c):c:0;d>c;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,b){var c=+b.length,d=0,e=a.length;while(c>d)a[e++]=b[d++];if(c!==c)while(void 0!==b[d])a[e++]=b[d++];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=r(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(f=a[b],b=a,a=f),m.isFunction(a)?(c=d.call(arguments,2),e=function(){return a.apply(b||this,c.concat(d.call(arguments)))},e.guid=a.guid=a.guid||m.guid++,e):void 0},now:function(){return+new Date},support:k}),m.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function r(a){var b="length"in a&&a.length,c=m.type(a);return"function"===c||m.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var s=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ha(),z=ha(),A=ha(),B=function(a,b){return a===b&&(l=!0),0},C=1<<31,D={}.hasOwnProperty,E=[],F=E.pop,G=E.push,H=E.push,I=E.slice,J=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},K="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",L="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",N=M.replace("w","w#"),O="\\["+L+"*("+M+")(?:"+L+"*([*^$|!~]?=)"+L+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+N+"))|)"+L+"*\\]",P=":("+M+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+O+")*)|.*)\\)|)",Q=new RegExp(L+"+","g"),R=new RegExp("^"+L+"+|((?:^|[^\\\\])(?:\\\\.)*)"+L+"+$","g"),S=new RegExp("^"+L+"*,"+L+"*"),T=new RegExp("^"+L+"*([>+~]|"+L+")"+L+"*"),U=new RegExp("="+L+"*([^\\]'\"]*?)"+L+"*\\]","g"),V=new RegExp(P),W=new RegExp("^"+N+"$"),X={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),TAG:new RegExp("^("+M.replace("w","w*")+")"),ATTR:new RegExp("^"+O),PSEUDO:new RegExp("^"+P),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+L+"*(even|odd|(([+-]|)(\\d*)n|)"+L+"*(?:([+-]|)"+L+"*(\\d+)|))"+L+"*\\)|)","i"),bool:new RegExp("^(?:"+K+")$","i"),needsContext:new RegExp("^"+L+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+L+"*((?:-\\d)?\\d*)"+L+"*\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,$=/^[^{]+\{\s*\[native \w/,_=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,aa=/[+~]/,ba=/'|\\/g,ca=new RegExp("\\\\([\\da-f]{1,6}"+L+"?|("+L+")|.)","ig"),da=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},ea=function(){m()};try{H.apply(E=I.call(v.childNodes),v.childNodes),E[v.childNodes.length].nodeType}catch(fa){H={apply:E.length?function(a,b){G.apply(a,I.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function ga(a,b,d,e){var f,h,j,k,l,o,r,s,w,x;if((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,d=d||[],k=b.nodeType,"string"!=typeof a||!a||1!==k&&9!==k&&11!==k)return d;if(!e&&p){if(11!==k&&(f=_.exec(a)))if(j=f[1]){if(9===k){if(h=b.getElementById(j),!h||!h.parentNode)return d;if(h.id===j)return d.push(h),d}else if(b.ownerDocument&&(h=b.ownerDocument.getElementById(j))&&t(b,h)&&h.id===j)return d.push(h),d}else{if(f[2])return H.apply(d,b.getElementsByTagName(a)),d;if((j=f[3])&&c.getElementsByClassName)return H.apply(d,b.getElementsByClassName(j)),d}if(c.qsa&&(!q||!q.test(a))){if(s=r=u,w=b,x=1!==k&&a,1===k&&"object"!==b.nodeName.toLowerCase()){o=g(a),(r=b.getAttribute("id"))?s=r.replace(ba,"\\$&"):b.setAttribute("id",s),s="[id='"+s+"'] ",l=o.length;while(l--)o[l]=s+ra(o[l]);w=aa.test(a)&&pa(b.parentNode)||b,x=o.join(",")}if(x)try{return H.apply(d,w.querySelectorAll(x)),d}catch(y){}finally{r||b.removeAttribute("id")}}}return i(a.replace(R,"$1"),b,d,e)}function ha(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ia(a){return a[u]=!0,a}function ja(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ka(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function la(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||C)-(~a.sourceIndex||C);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function na(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function oa(a){return ia(function(b){return b=+b,ia(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function pa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=ga.support={},f=ga.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=ga.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=g.documentElement,e=g.defaultView,e&&e!==e.top&&(e.addEventListener?e.addEventListener("unload",ea,!1):e.attachEvent&&e.attachEvent("onunload",ea)),p=!f(g),c.attributes=ja(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ja(function(a){return a.appendChild(g.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=$.test(g.getElementsByClassName),c.getById=ja(function(a){return o.appendChild(a).id=u,!g.getElementsByName||!g.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(ca,da);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(ca,da);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=$.test(g.querySelectorAll))&&(ja(function(a){o.appendChild(a).innerHTML="",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+L+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+L+"*(?:value|"+K+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ja(function(a){var b=g.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+L+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=$.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ja(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",P)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=$.test(o.compareDocumentPosition),t=b||$.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===g||a.ownerDocument===v&&t(v,a)?-1:b===g||b.ownerDocument===v&&t(v,b)?1:k?J(k,a)-J(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,h=[a],i=[b];if(!e||!f)return a===g?-1:b===g?1:e?-1:f?1:k?J(k,a)-J(k,b):0;if(e===f)return la(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)i.unshift(c);while(h[d]===i[d])d++;return d?la(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0},g):n},ga.matches=function(a,b){return ga(a,null,null,b)},ga.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(U,"='$1']"),!(!c.matchesSelector||!p||r&&r.test(b)||q&&q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return ga(b,n,null,[a]).length>0},ga.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},ga.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&D.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},ga.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},ga.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=ga.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=ga.selectors={cacheLength:50,createPseudo:ia,match:X,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(ca,da),a[3]=(a[3]||a[4]||a[5]||"").replace(ca,da),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||ga.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&ga.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return X.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&V.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(ca,da).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+L+")"+a+"("+L+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=ga.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(Q," ")+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){k=q[u]||(q[u]={}),j=k[a]||[],n=j[0]===w&&j[1],m=j[0]===w&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[w,n,m];break}}else if(s&&(j=(b[u]||(b[u]={}))[a])&&j[0]===w)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(s&&((l[u]||(l[u]={}))[a]=[w,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||ga.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ia(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=J(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ia(function(a){var b=[],c=[],d=h(a.replace(R,"$1"));return d[u]?ia(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ia(function(a){return function(b){return ga(a,b).length>0}}),contains:ia(function(a){return a=a.replace(ca,da),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ia(function(a){return W.test(a||"")||ga.error("unsupported lang: "+a),a=a.replace(ca,da).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Z.test(a.nodeName)},input:function(a){return Y.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:oa(function(){return[0]}),last:oa(function(a,b){return[b-1]}),eq:oa(function(a,b,c){return[0>c?c+b:c]}),even:oa(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:oa(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:oa(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:oa(function(a,b,c){for(var d=0>c?c+b:c;++db;b++)d+=a[b].value;return d}function sa(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[u]||(b[u]={}),(h=i[d])&&h[0]===w&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function ta(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function ua(a,b,c){for(var d=0,e=b.length;e>d;d++)ga(a,b[d],c);return c}function va(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function wa(a,b,c,d,e,f){return d&&!d[u]&&(d=wa(d)),e&&!e[u]&&(e=wa(e,f)),ia(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||ua(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:va(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=va(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?J(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=va(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):H.apply(g,r)})}function xa(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=sa(function(a){return a===b},h,!0),l=sa(function(a){return J(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];f>i;i++)if(c=d.relative[a[i].type])m=[sa(ta(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return wa(i>1&&ta(m),i>1&&ra(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(R,"$1"),c,e>i&&xa(a.slice(i,e)),f>e&&xa(a=a.slice(e)),f>e&&ra(a))}m.push(c)}return ta(m)}function ya(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,m,o,p=0,q="0",r=f&&[],s=[],t=j,u=f||e&&d.find.TAG("*",k),v=w+=null==t?1:Math.random()||.1,x=u.length;for(k&&(j=g!==n&&g);q!==x&&null!=(l=u[q]);q++){if(e&&l){m=0;while(o=a[m++])if(o(l,g,h)){i.push(l);break}k&&(w=v)}c&&((l=!o&&l)&&p--,f&&r.push(l))}if(p+=q,c&&q!==p){m=0;while(o=b[m++])o(r,s,g,h);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=F.call(i));s=va(s)}H.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&ga.uniqueSort(i)}return k&&(w=v,j=t),r};return c?ia(f):f}return h=ga.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=xa(b[c]),f[u]?d.push(f):e.push(f);f=A(a,ya(e,d)),f.selector=a}return f},i=ga.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(ca,da),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=X.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(ca,da),aa.test(j[0].type)&&pa(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&ra(j),!a)return H.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,aa.test(a)&&pa(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ja(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ja(function(a){return a.innerHTML="","#"===a.firstChild.getAttribute("href")})||ka("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ja(function(a){return a.innerHTML="",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ka("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ja(function(a){return null==a.getAttribute("disabled")})||ka(K,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),ga}(a);m.find=s,m.expr=s.selectors,m.expr[":"]=m.expr.pseudos,m.unique=s.uniqueSort,m.text=s.getText,m.isXMLDoc=s.isXML,m.contains=s.contains;var t=m.expr.match.needsContext,u=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,v=/^.[^:#\[\.,]*$/;function w(a,b,c){if(m.isFunction(b))return m.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return m.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(v.test(b))return m.filter(b,a,c);b=m.filter(b,a)}return m.grep(a,function(a){return m.inArray(a,b)>=0!==c})}m.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?m.find.matchesSelector(d,a)?[d]:[]:m.find.matches(a,m.grep(b,function(a){return 1===a.nodeType}))},m.fn.extend({find:function(a){var b,c=[],d=this,e=d.length;if("string"!=typeof a)return this.pushStack(m(a).filter(function(){for(b=0;e>b;b++)if(m.contains(d[b],this))return!0}));for(b=0;e>b;b++)m.find(a,d[b],c);return c=this.pushStack(e>1?m.unique(c):c),c.selector=this.selector?this.selector+" "+a:a,c},filter:function(a){return this.pushStack(w(this,a||[],!1))},not:function(a){return this.pushStack(w(this,a||[],!0))},is:function(a){return!!w(this,"string"==typeof a&&t.test(a)?m(a):a||[],!1).length}});var x,y=a.document,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=m.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a.charAt(0)&&">"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||x).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof m?b[0]:b,m.merge(this,m.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:y,!0)),u.test(c[1])&&m.isPlainObject(b))for(c in b)m.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}if(d=y.getElementById(c[2]),d&&d.parentNode){if(d.id!==c[2])return x.find(a);this.length=1,this[0]=d}return this.context=y,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):m.isFunction(a)?"undefined"!=typeof x.ready?x.ready(a):a(m):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),m.makeArray(a,this))};A.prototype=m.fn,x=m(y);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};m.extend({dir:function(a,b,c){var d=[],e=a[b];while(e&&9!==e.nodeType&&(void 0===c||1!==e.nodeType||!m(e).is(c)))1===e.nodeType&&d.push(e),e=e[b];return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),m.fn.extend({has:function(a){var b,c=m(a,this),d=c.length;return this.filter(function(){for(b=0;d>b;b++)if(m.contains(this,c[b]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=t.test(a)||"string"!=typeof a?m(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&m.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?m.unique(f):f)},index:function(a){return a?"string"==typeof a?m.inArray(this[0],m(a)):m.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(m.unique(m.merge(this.get(),m(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}m.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return m.dir(a,"parentNode")},parentsUntil:function(a,b,c){return m.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return m.dir(a,"nextSibling")},prevAll:function(a){return m.dir(a,"previousSibling")},nextUntil:function(a,b,c){return m.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return m.dir(a,"previousSibling",c)},siblings:function(a){return m.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return m.sibling(a.firstChild)},contents:function(a){return m.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:m.merge([],a.childNodes)}},function(a,b){m.fn[a]=function(c,d){var e=m.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=m.filter(d,e)),this.length>1&&(C[a]||(e=m.unique(e)),B.test(a)&&(e=e.reverse())),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return m.each(a.match(E)||[],function(a,c){b[c]=!0}),b}m.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):m.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(c=a.memory&&l,d=!0,f=g||0,g=0,e=h.length,b=!0;h&&e>f;f++)if(h[f].apply(l[0],l[1])===!1&&a.stopOnFalse){c=!1;break}b=!1,h&&(i?i.length&&j(i.shift()):c?h=[]:k.disable())},k={add:function(){if(h){var d=h.length;!function f(b){m.each(b,function(b,c){var d=m.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&f(c)})}(arguments),b?e=h.length:c&&(g=d,j(c))}return this},remove:function(){return h&&m.each(arguments,function(a,c){var d;while((d=m.inArray(c,h,d))>-1)h.splice(d,1),b&&(e>=d&&e--,f>=d&&f--)}),this},has:function(a){return a?m.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],e=0,this},disable:function(){return h=i=c=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,c||k.disable(),this},locked:function(){return!i},fireWith:function(a,c){return!h||d&&!i||(c=c||[],c=[a,c.slice?c.slice():c],b?i.push(c):j(c)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!d}};return k},m.extend({Deferred:function(a){var b=[["resolve","done",m.Callbacks("once memory"),"resolved"],["reject","fail",m.Callbacks("once memory"),"rejected"],["notify","progress",m.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return m.Deferred(function(c){m.each(b,function(b,f){var g=m.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&m.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?m.extend(a,d):d}},e={};return d.pipe=d.then,m.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&m.isFunction(a.promise)?e:0,g=1===f?a:m.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&m.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;m.fn.ready=function(a){return m.ready.promise().done(a),this},m.extend({isReady:!1,readyWait:1,holdReady:function(a){a?m.readyWait++:m.ready(!0)},ready:function(a){if(a===!0?!--m.readyWait:!m.isReady){if(!y.body)return setTimeout(m.ready);m.isReady=!0,a!==!0&&--m.readyWait>0||(H.resolveWith(y,[m]),m.fn.triggerHandler&&(m(y).triggerHandler("ready"),m(y).off("ready")))}}});function I(){y.addEventListener?(y.removeEventListener("DOMContentLoaded",J,!1),a.removeEventListener("load",J,!1)):(y.detachEvent("onreadystatechange",J),a.detachEvent("onload",J))}function J(){(y.addEventListener||"load"===event.type||"complete"===y.readyState)&&(I(),m.ready())}m.ready.promise=function(b){if(!H)if(H=m.Deferred(),"complete"===y.readyState)setTimeout(m.ready);else if(y.addEventListener)y.addEventListener("DOMContentLoaded",J,!1),a.addEventListener("load",J,!1);else{y.attachEvent("onreadystatechange",J),a.attachEvent("onload",J);var c=!1;try{c=null==a.frameElement&&y.documentElement}catch(d){}c&&c.doScroll&&!function e(){if(!m.isReady){try{c.doScroll("left")}catch(a){return setTimeout(e,50)}I(),m.ready()}}()}return H.promise(b)};var K="undefined",L;for(L in m(k))break;k.ownLast="0"!==L,k.inlineBlockNeedsLayout=!1,m(function(){var a,b,c,d;c=y.getElementsByTagName("body")[0],c&&c.style&&(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),typeof b.style.zoom!==K&&(b.style.cssText="display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1",k.inlineBlockNeedsLayout=a=3===b.offsetWidth,a&&(c.style.zoom=1)),c.removeChild(d))}),function(){var a=y.createElement("div");if(null==k.deleteExpando){k.deleteExpando=!0;try{delete a.test}catch(b){k.deleteExpando=!1}}a=null}(),m.acceptData=function(a){var b=m.noData[(a.nodeName+" ").toLowerCase()],c=+a.nodeType||1;return 1!==c&&9!==c?!1:!b||b!==!0&&a.getAttribute("classid")===b};var M=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,N=/([A-Z])/g;function O(a,b,c){if(void 0===c&&1===a.nodeType){var d="data-"+b.replace(N,"-$1").toLowerCase();if(c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:M.test(c)?m.parseJSON(c):c}catch(e){}m.data(a,b,c)}else c=void 0}return c}function P(a){var b;for(b in a)if(("data"!==b||!m.isEmptyObject(a[b]))&&"toJSON"!==b)return!1; + +return!0}function Q(a,b,d,e){if(m.acceptData(a)){var f,g,h=m.expando,i=a.nodeType,j=i?m.cache:a,k=i?a[h]:a[h]&&h;if(k&&j[k]&&(e||j[k].data)||void 0!==d||"string"!=typeof b)return k||(k=i?a[h]=c.pop()||m.guid++:h),j[k]||(j[k]=i?{}:{toJSON:m.noop}),("object"==typeof b||"function"==typeof b)&&(e?j[k]=m.extend(j[k],b):j[k].data=m.extend(j[k].data,b)),g=j[k],e||(g.data||(g.data={}),g=g.data),void 0!==d&&(g[m.camelCase(b)]=d),"string"==typeof b?(f=g[b],null==f&&(f=g[m.camelCase(b)])):f=g,f}}function R(a,b,c){if(m.acceptData(a)){var d,e,f=a.nodeType,g=f?m.cache:a,h=f?a[m.expando]:m.expando;if(g[h]){if(b&&(d=c?g[h]:g[h].data)){m.isArray(b)?b=b.concat(m.map(b,m.camelCase)):b in d?b=[b]:(b=m.camelCase(b),b=b in d?[b]:b.split(" ")),e=b.length;while(e--)delete d[b[e]];if(c?!P(d):!m.isEmptyObject(d))return}(c||(delete g[h].data,P(g[h])))&&(f?m.cleanData([a],!0):k.deleteExpando||g!=g.window?delete g[h]:g[h]=null)}}}m.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(a){return a=a.nodeType?m.cache[a[m.expando]]:a[m.expando],!!a&&!P(a)},data:function(a,b,c){return Q(a,b,c)},removeData:function(a,b){return R(a,b)},_data:function(a,b,c){return Q(a,b,c,!0)},_removeData:function(a,b){return R(a,b,!0)}}),m.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=m.data(f),1===f.nodeType&&!m._data(f,"parsedAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=m.camelCase(d.slice(5)),O(f,d,e[d])));m._data(f,"parsedAttrs",!0)}return e}return"object"==typeof a?this.each(function(){m.data(this,a)}):arguments.length>1?this.each(function(){m.data(this,a,b)}):f?O(f,a,m.data(f,a)):void 0},removeData:function(a){return this.each(function(){m.removeData(this,a)})}}),m.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=m._data(a,b),c&&(!d||m.isArray(c)?d=m._data(a,b,m.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=m.queue(a,b),d=c.length,e=c.shift(),f=m._queueHooks(a,b),g=function(){m.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return m._data(a,c)||m._data(a,c,{empty:m.Callbacks("once memory").add(function(){m._removeData(a,b+"queue"),m._removeData(a,c)})})}}),m.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.lengthh;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},W=/^(?:checkbox|radio)$/i;!function(){var a=y.createElement("input"),b=y.createElement("div"),c=y.createDocumentFragment();if(b.innerHTML="
      <%:Metric%>
      <%=defroutev4.dest%><%=defroutev4.device%><%=defroutev4.gateway%><%=defroutev4.metric%><%=def4.dest%><%=def4.dev%><%=def4.gateway%><%=def4.metr%>
      <%=defroutev6.dest%><%=defroutev6.device%><%=defroutev6.nexthop%><%=defroutev6.metric%><%=def6.dest%><%=def6.dev%><%=def6.gateway%><%=def6.metr%>
      a",k.leadingWhitespace=3===b.firstChild.nodeType,k.tbody=!b.getElementsByTagName("tbody").length,k.htmlSerialize=!!b.getElementsByTagName("link").length,k.html5Clone="<:nav>"!==y.createElement("nav").cloneNode(!0).outerHTML,a.type="checkbox",a.checked=!0,c.appendChild(a),k.appendChecked=a.checked,b.innerHTML="",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue,c.appendChild(b),b.innerHTML="",k.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,k.noCloneEvent=!0,b.attachEvent&&(b.attachEvent("onclick",function(){k.noCloneEvent=!1}),b.cloneNode(!0).click()),null==k.deleteExpando){k.deleteExpando=!0;try{delete b.test}catch(d){k.deleteExpando=!1}}}(),function(){var b,c,d=y.createElement("div");for(b in{submit:!0,change:!0,focusin:!0})c="on"+b,(k[b+"Bubbles"]=c in a)||(d.setAttribute(c,"t"),k[b+"Bubbles"]=d.attributes[c].expando===!1);d=null}();var X=/^(?:input|select|textarea)$/i,Y=/^key/,Z=/^(?:mouse|pointer|contextmenu)|click/,$=/^(?:focusinfocus|focusoutblur)$/,_=/^([^.]*)(?:\.(.+)|)$/;function aa(){return!0}function ba(){return!1}function ca(){try{return y.activeElement}catch(a){}}m.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m._data(a);if(r){c.handler&&(i=c,c=i.handler,e=i.selector),c.guid||(c.guid=m.guid++),(g=r.events)||(g=r.events={}),(k=r.handle)||(k=r.handle=function(a){return typeof m===K||a&&m.event.triggered===a.type?void 0:m.event.dispatch.apply(k.elem,arguments)},k.elem=a),b=(b||"").match(E)||[""],h=b.length;while(h--)f=_.exec(b[h])||[],o=q=f[1],p=(f[2]||"").split(".").sort(),o&&(j=m.event.special[o]||{},o=(e?j.delegateType:j.bindType)||o,j=m.event.special[o]||{},l=m.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&m.expr.match.needsContext.test(e),namespace:p.join(".")},i),(n=g[o])||(n=g[o]=[],n.delegateCount=0,j.setup&&j.setup.call(a,d,p,k)!==!1||(a.addEventListener?a.addEventListener(o,k,!1):a.attachEvent&&a.attachEvent("on"+o,k))),j.add&&(j.add.call(a,l),l.handler.guid||(l.handler.guid=c.guid)),e?n.splice(n.delegateCount++,0,l):n.push(l),m.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m.hasData(a)&&m._data(a);if(r&&(k=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=_.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=m.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,n=k[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),i=f=n.length;while(f--)g=n[f],!e&&q!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&("**"!==d||!g.selector)||(n.splice(f,1),g.selector&&n.delegateCount--,l.remove&&l.remove.call(a,g));i&&!n.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||m.removeEvent(a,o,r.handle),delete k[o])}else for(o in k)m.event.remove(a,o+b[j],c,d,!0);m.isEmptyObject(k)&&(delete r.handle,m._removeData(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,l,n,o=[d||y],p=j.call(b,"type")?b.type:b,q=j.call(b,"namespace")?b.namespace.split("."):[];if(h=l=d=d||y,3!==d.nodeType&&8!==d.nodeType&&!$.test(p+m.event.triggered)&&(p.indexOf(".")>=0&&(q=p.split("."),p=q.shift(),q.sort()),g=p.indexOf(":")<0&&"on"+p,b=b[m.expando]?b:new m.Event(p,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=q.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:m.makeArray(c,[b]),k=m.event.special[p]||{},e||!k.trigger||k.trigger.apply(d,c)!==!1)){if(!e&&!k.noBubble&&!m.isWindow(d)){for(i=k.delegateType||p,$.test(i+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),l=h;l===(d.ownerDocument||y)&&o.push(l.defaultView||l.parentWindow||a)}n=0;while((h=o[n++])&&!b.isPropagationStopped())b.type=n>1?i:k.bindType||p,f=(m._data(h,"events")||{})[b.type]&&m._data(h,"handle"),f&&f.apply(h,c),f=g&&h[g],f&&f.apply&&m.acceptData(h)&&(b.result=f.apply(h,c),b.result===!1&&b.preventDefault());if(b.type=p,!e&&!b.isDefaultPrevented()&&(!k._default||k._default.apply(o.pop(),c)===!1)&&m.acceptData(d)&&g&&d[p]&&!m.isWindow(d)){l=d[g],l&&(d[g]=null),m.event.triggered=p;try{d[p]()}catch(r){}m.event.triggered=void 0,l&&(d[g]=l)}return b.result}},dispatch:function(a){a=m.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(m._data(this,"events")||{})[a.type]||[],k=m.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=m.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,g=0;while((e=f.handlers[g++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(e.namespace))&&(a.handleObj=e,a.data=e.data,c=((m.event.special[e.origType]||{}).handle||e.handler).apply(f.elem,i),void 0!==c&&(a.result=c)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!=this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(e=[],f=0;h>f;f++)d=b[f],c=d.selector+" ",void 0===e[c]&&(e[c]=d.needsContext?m(c,this).index(i)>=0:m.find(c,this,null,[i]).length),e[c]&&e.push(d);e.length&&g.push({elem:i,handlers:e})}return h]","i"),ha=/^\s+/,ia=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,ja=/<([\w:]+)/,ka=/\s*$/g,ra={option:[1,""],legend:[1,"
      ","
      "],area:[1,"",""],param:[1,"",""],thead:[1,"","
      "],tr:[2,"","
      "],col:[2,"","
      "],td:[3,"","
      "],_default:k.htmlSerialize?[0,"",""]:[1,"X
      ","
      "]},sa=da(y),ta=sa.appendChild(y.createElement("div"));ra.optgroup=ra.option,ra.tbody=ra.tfoot=ra.colgroup=ra.caption=ra.thead,ra.th=ra.td;function ua(a,b){var c,d,e=0,f=typeof a.getElementsByTagName!==K?a.getElementsByTagName(b||"*"):typeof a.querySelectorAll!==K?a.querySelectorAll(b||"*"):void 0;if(!f)for(f=[],c=a.childNodes||a;null!=(d=c[e]);e++)!b||m.nodeName(d,b)?f.push(d):m.merge(f,ua(d,b));return void 0===b||b&&m.nodeName(a,b)?m.merge([a],f):f}function va(a){W.test(a.type)&&(a.defaultChecked=a.checked)}function wa(a,b){return m.nodeName(a,"table")&&m.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function xa(a){return a.type=(null!==m.find.attr(a,"type"))+"/"+a.type,a}function ya(a){var b=pa.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function za(a,b){for(var c,d=0;null!=(c=a[d]);d++)m._data(c,"globalEval",!b||m._data(b[d],"globalEval"))}function Aa(a,b){if(1===b.nodeType&&m.hasData(a)){var c,d,e,f=m._data(a),g=m._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;e>d;d++)m.event.add(b,c,h[c][d])}g.data&&(g.data=m.extend({},g.data))}}function Ba(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!k.noCloneEvent&&b[m.expando]){e=m._data(b);for(d in e.events)m.removeEvent(b,d,e.handle);b.removeAttribute(m.expando)}"script"===c&&b.text!==a.text?(xa(b).text=a.text,ya(b)):"object"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),k.html5Clone&&a.innerHTML&&!m.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):"input"===c&&W.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):"option"===c?b.defaultSelected=b.selected=a.defaultSelected:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}}m.extend({clone:function(a,b,c){var d,e,f,g,h,i=m.contains(a.ownerDocument,a);if(k.html5Clone||m.isXMLDoc(a)||!ga.test("<"+a.nodeName+">")?f=a.cloneNode(!0):(ta.innerHTML=a.outerHTML,ta.removeChild(f=ta.firstChild)),!(k.noCloneEvent&&k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||m.isXMLDoc(a)))for(d=ua(f),h=ua(a),g=0;null!=(e=h[g]);++g)d[g]&&Ba(e,d[g]);if(b)if(c)for(h=h||ua(a),d=d||ua(f),g=0;null!=(e=h[g]);g++)Aa(e,d[g]);else Aa(a,f);return d=ua(f,"script"),d.length>0&&za(d,!i&&ua(a,"script")),d=h=e=null,f},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,l,n=a.length,o=da(b),p=[],q=0;n>q;q++)if(f=a[q],f||0===f)if("object"===m.type(f))m.merge(p,f.nodeType?[f]:f);else if(la.test(f)){h=h||o.appendChild(b.createElement("div")),i=(ja.exec(f)||["",""])[1].toLowerCase(),l=ra[i]||ra._default,h.innerHTML=l[1]+f.replace(ia,"<$1>")+l[2],e=l[0];while(e--)h=h.lastChild;if(!k.leadingWhitespace&&ha.test(f)&&p.push(b.createTextNode(ha.exec(f)[0])),!k.tbody){f="table"!==i||ka.test(f)?""!==l[1]||ka.test(f)?0:h:h.firstChild,e=f&&f.childNodes.length;while(e--)m.nodeName(j=f.childNodes[e],"tbody")&&!j.childNodes.length&&f.removeChild(j)}m.merge(p,h.childNodes),h.textContent="";while(h.firstChild)h.removeChild(h.firstChild);h=o.lastChild}else p.push(b.createTextNode(f));h&&o.removeChild(h),k.appendChecked||m.grep(ua(p,"input"),va),q=0;while(f=p[q++])if((!d||-1===m.inArray(f,d))&&(g=m.contains(f.ownerDocument,f),h=ua(o.appendChild(f),"script"),g&&za(h),c)){e=0;while(f=h[e++])oa.test(f.type||"")&&c.push(f)}return h=null,o},cleanData:function(a,b){for(var d,e,f,g,h=0,i=m.expando,j=m.cache,l=k.deleteExpando,n=m.event.special;null!=(d=a[h]);h++)if((b||m.acceptData(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)n[e]?m.event.remove(d,e):m.removeEvent(d,e,g.handle);j[f]&&(delete j[f],l?delete d[i]:typeof d.removeAttribute!==K?d.removeAttribute(i):d[i]=null,c.push(f))}}}),m.fn.extend({text:function(a){return V(this,function(a){return void 0===a?m.text(this):this.empty().append((this[0]&&this[0].ownerDocument||y).createTextNode(a))},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wa(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wa(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?m.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||m.cleanData(ua(c)),c.parentNode&&(b&&m.contains(c.ownerDocument,c)&&za(ua(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&m.cleanData(ua(a,!1));while(a.firstChild)a.removeChild(a.firstChild);a.options&&m.nodeName(a,"select")&&(a.options.length=0)}return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return m.clone(this,a,b)})},html:function(a){return V(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(fa,""):void 0;if(!("string"!=typeof a||ma.test(a)||!k.htmlSerialize&&ga.test(a)||!k.leadingWhitespace&&ha.test(a)||ra[(ja.exec(a)||["",""])[1].toLowerCase()])){a=a.replace(ia,"<$1>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(m.cleanData(ua(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,m.cleanData(ua(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,n=this,o=l-1,p=a[0],q=m.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&na.test(p))return this.each(function(c){var d=n.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(i=m.buildFragment(a,this[0].ownerDocument,!1,this),c=i.firstChild,1===i.childNodes.length&&(i=c),c)){for(g=m.map(ua(i,"script"),xa),f=g.length;l>j;j++)d=i,j!==o&&(d=m.clone(d,!0,!0),f&&m.merge(g,ua(d,"script"))),b.call(this[j],d,j);if(f)for(h=g[g.length-1].ownerDocument,m.map(g,ya),j=0;f>j;j++)d=g[j],oa.test(d.type||"")&&!m._data(d,"globalEval")&&m.contains(h,d)&&(d.src?m._evalUrl&&m._evalUrl(d.src):m.globalEval((d.text||d.textContent||d.innerHTML||"").replace(qa,"")));i=c=null}return this}}),m.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){m.fn[a]=function(a){for(var c,d=0,e=[],g=m(a),h=g.length-1;h>=d;d++)c=d===h?this:this.clone(!0),m(g[d])[b](c),f.apply(e,c.get());return this.pushStack(e)}});var Ca,Da={};function Ea(b,c){var d,e=m(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:m.css(e[0],"display");return e.detach(),f}function Fa(a){var b=y,c=Da[a];return c||(c=Ea(a,b),"none"!==c&&c||(Ca=(Ca||m("