diff options
130 files changed, 3707 insertions, 6705 deletions
diff --git a/applications/luci-app-adblock/luasrc/view/adblock/blocklist.htm b/applications/luci-app-adblock/luasrc/view/adblock/blocklist.htm index b4b62db5f..424a72f6f 100644 --- a/applications/luci-app-adblock/luasrc/view/adblock/blocklist.htm +++ b/applications/luci-app-adblock/luasrc/view/adblock/blocklist.htm @@ -51,37 +51,37 @@ table.cbi-section-table td, <%- end %> <div class="cbi-section-descr"><%=self.description%></div> <div class="cbi-section-node"> - <table class="cbi-section-table"> - <tr class="cbi-section-table-titles"> + <div class="table cbi-section-table"> + <div class="tr cbi-section-table-titles"> <%- if self.sectionhead then -%> - <th class="cbi-section-table-cell"><%=self.sectionhead%></th> + <div class="th cbi-section-table-cell"><%=self.sectionhead%></div> <%- else -%> - <th> </th> + <div class="th"> </div> <%- end -%> <%- for i, k in pairs(self.children) do -%> - <th class="cbi-section-table-cell"<%=width(k)%>> + <div class="th cbi-section-table-cell"<%=width(k)%>> <%-=k.title-%> - </th> + </div> <%- end -%> - </tr> + </div> <%- local isempty = true for i, k in ipairs(self:cfgsections()) do section = k isempty = false scope = { valueheader = "cbi/cell_valueheader", valuefooter = "cbi/cell_valuefooter" } -%> - <tr class="cbi-section-table-row" id="cbi-<%=self.config%>-<%=section%>"> - <th><%=k%></th> + <div class="tr cbi-section-table-row" id="cbi-<%=self.config%>-<%=section%>"> + <div class="th"><%=k%></div> <%- for k, node in ipairs(self.children) do node:render(section, scope or {}) end if not scope.cbid:match("adb_src_cat") then -%> - <td class="cbi-value-field"> </td> + <div class="td cbi-value-field"> </div> <%- end -%> - </tr> + </div> <%- end -%> - </table> + </div> </div> </fieldset> diff --git a/applications/luci-app-advanced-reboot/luasrc/view/advanced_reboot/advanced_reboot.htm b/applications/luci-app-advanced-reboot/luasrc/view/advanced_reboot/advanced_reboot.htm index 0629c84b3..5f7429dfd 100644 --- a/applications/luci-app-advanced-reboot/luasrc/view/advanced_reboot/advanced_reboot.htm +++ b/applications/luci-app-advanced-reboot/luasrc/view/advanced_reboot/advanced_reboot.htm @@ -21,24 +21,24 @@ <%- if device_name then -%> <fieldset class="cbi-section"> <legend><%=device_name%><%: Partitions%></legend> - <table class="cbi-section-table" id="partitions"> - <tr class="cbi-section-table-titles"> - <th class="cbi-section-table-cell"><%:Partition%></th> - <th class="cbi-section-table-cell"><%:Status%></th> - <th class="cbi-section-table-cell"><%:Firmware/OS (Kernel)%></th> - <th class="cbi-section-table-cell"><%:Action%></th> - </tr> - <tr class="cbi-section-table-row"> - <td> + <div class="table cbi-section-table" id="partitions"> + <div class="tr cbi-section-table-titles"> + <div class="th cbi-section-table-cell"><%:Partition%></div> + <div class="th cbi-section-table-cell"><%:Status%></div> + <div class="th cbi-section-table-cell"><%:Firmware/OS (Kernel)%></div> + <div class="th cbi-section-table-cell"><%:Action%></div> + </div> + <div class="tr cbi-section-table-row"> + <div class="td"> <%=string.format("%X", boot_envvar1_partition_one)%> - </td> - <td> + </div> + <div class="td"> <%- if boot_envvar1_partition_one == current_partition then -%><%:Current%><%- else -%><%:Alternative%><%- end -%> - </td> - <td> + </div> + <div class="td"> <%=partition_one_os%> - </td> - <td> + </div> + <div class="td"> <%- if boot_envvar1_partition_one == current_partition then -%> <form method="post" action="<%=url('admin/system/advanced_reboot/reboot')%>"> <input type="hidden" name="token" value="<%=token%>" /> @@ -50,19 +50,19 @@ <input id="altreboot-button" type="submit" class="cbi-button cbi-button-apply" value="<%:Reboot to alternative partition...%>" /> </form> <%- end -%> - </td> - </tr> - <tr class="cbi-section-table-row"> - <td> + </div> + </div> + <div class="tr cbi-section-table-row"> + <div class="td"> <%=string.format("%X", boot_envvar1_partition_two)%> - </td> - <td> + </div> + <div class="td"> <%- if boot_envvar1_partition_two == current_partition then -%><%:Current%><%- else -%><%:Alternative%><%- end -%> - </td> - <td> + </div> + <div class="td"> <%=partition_two_os%> - </td> - <td> + </div> + <div class="td"> <%- if boot_envvar1_partition_two == current_partition then -%> <form method="post" action="<%=url('admin/system/advanced_reboot/reboot')%>"> <input type="hidden" name="token" value="<%=token%>" /> @@ -74,9 +74,9 @@ <input id="altreboot-button" type="submit" class="cbi-button cbi-button-apply" value="<%:Reboot to alternative partition...%>" /> </form> <%- end -%> - </td> - </tr> - </table> + </div> + </div> + </div> </fieldset> <%- else -%> <p class="alert-message warning"><%:Warning: This system does not have two partitions!%></p> diff --git a/applications/luci-app-ahcp/luasrc/view/ahcp_status.htm b/applications/luci-app-ahcp/luasrc/view/ahcp_status.htm index 946828953..ab25f862b 100644 --- a/applications/luci-app-ahcp/luasrc/view/ahcp_status.htm +++ b/applications/luci-app-ahcp/luasrc/view/ahcp_status.htm @@ -7,29 +7,21 @@ if (st && tb && tx) { /* clear all rows */ - while( tb.rows.length > 1 ) - tb.deleteRow(1); + while (tb.firstElementChild !== tb.lastElementChild) + tb.removeChild(tb.lastElementChild); - for( var i = 0; i < st.leases.length; i++ ) + for (var i = 0; i < st.leases.length; i++) { - var tr = tb.insertRow(-1); - tr.className = 'cbi-section-table-row cbi-rowstyle-' + ((i % 2) + 1); - - tr.insertCell(-1).innerHTML = st.leases[i].addr; - tr.insertCell(-1).innerHTML = String.format('%t', st.leases[i].age); + tb.appendChild(E('<div class="tr cbi-section-table-row cbi-rowstyle-%d">'.format((i % 2) + 1), [ + E('<div class="td">', st.leases[i].addr), + E('<div class="td">', '%t'.format(st.leases[i].age)) + ])); } - if( tb.rows.length == 1 ) - { - var tr = tb.insertRow(-1); - tr.className = 'cbi-section-table-row'; - - var td = tr.insertCell(-1); - td.colSpan = 2; - td.innerHTML = '<em><br /><%:There are no active leases.%></em>'; - } + if (tb.firstElementChild === tb.lastElementChild) + tb.appendChild(E('<div class="tr cbi-section-table-row"><div class="td"><em><br /><%:There are no active leases.%></em></div></div>')); - if( st.uid == '00:00:00:00:00:00:00:00' ) + if (st.uid == '00:00:00:00:00:00:00:00') tx.innerHTML = '<%:The AHCP Service is not running.%>'; else tx.innerHTML = String.format('<%:The AHCP Service is running with ID %s.%>', st.uid); @@ -41,13 +33,13 @@ <fieldset class="cbi-section"> <legend><%:Active AHCP Leases%></legend> <p id="ahcpd_status_text"></p> - <table class="cbi-section-table" id="ahcpd_status_table"> - <tr class="cbi-section-table-titles"> - <th class="cbi-section-table-cell"><%:Address%></th> - <th class="cbi-section-table-cell"><%:Age%></th> - </tr> - <tr class="cbi-section-table-row"> - <td colspan="5"><em><br /><%:Collecting data...%></em></td> - </tr> - </table> + <div class="table cbi-section-table" id="ahcpd_status_table"> + <div class="tr cbi-section-table-titles"> + <div class="th cbi-section-table-cell"><%:Address%></div> + <div class="th cbi-section-table-cell"><%:Age%></div> + </div> + <div class="tr cbi-section-table-row"> + <div class="td" colspan="5"><em><br /><%:Collecting data...%></em></div> + </div> + </div> </fieldset> diff --git a/applications/luci-app-asterisk/luasrc/view/asterisk/dialplans.htm b/applications/luci-app-asterisk/luasrc/view/asterisk/dialplans.htm index 9f644ba07..fb40335f9 100644 --- a/applications/luci-app-asterisk/luasrc/view/asterisk/dialplans.htm +++ b/applications/luci-app-asterisk/luasrc/view/asterisk/dialplans.htm @@ -79,23 +79,23 @@ <% for i, plan in pairs(ast.dialplan.plans()) do %> <div class="cbi-section-node"> - <table class="cbi-section-table"> - <tr class="cbi-section-table-titles"> - <th style="text-align: left; padding: 3px" class="cbi-section-table-cell"> + <div class="table cbi-section-table"> + <div class="tr cbi-section-table-titles"> + <div style="text-align: left; padding: 3px" class="th cbi-section-table-cell"> <big>Dialplan <em><%=plan.name%></em></big> - </th> - <td> + </div> + <div class="td"> <a href="<%=url('admin/asterisk/dialplans')%>?delplan=<%=plan.name%>"> <img style="border:none" alt="Remove this dialplan" title="Remove this dialplan" src="/luci-static/resources/cbi/remove.gif" /> </a> - </td> - </tr> + </div> + </div> <!-- dialzones --> <% local zones_used = { }; local row = 0 %> <% for i, zone in ipairs(plan.zones) do zones_used[zone.name] = true %> - <tr class="cbi-section-table-row <%=rowstyle(row)%>"> - <td style="text-align: left; padding: 3px" class="cbi-section-table-cell"> + <div class="tr cbi-section-table-row <%=rowstyle(row)%>"> + <div style="text-align: left; padding: 3px" class="td cbi-section-table-cell"> <strong>└ Dialzone <em><%=zone.name%></em></strong> (<%=zone.description%>) <p style="padding-left: 1em; margin-bottom:0"> Lines: @@ -107,24 +107,24 @@ Matches: <%=format_matches(zone)%> </p> - </td> - <td style="width:5%" class="cbi-value-field"> + </div> + <div style="width:5%" class="td cbi-value-field"> <a href="<%=url('admin/asterisk/dialplans/out', zone.name)%>"> <img style="border:none" alt="Edit dialzone" title="Edit dialzone" src="/luci-static/resources/cbi/edit.gif" /> </a> <a href="<%=url('admin/asterisk/dialplans')%>?delzone.<%=plan.name%>=<%=zone.name%>"> <img style="border:none" alt="Remove from this dialplan" title="Remove from this dialplan" src="/luci-static/resources/cbi/remove.gif" /> </a> - </td> - </tr> + </div> + </div> <% row = row + 1; end %> <!-- /dialzones --> <!-- voicemail --> <% local boxes_used = { } %> <% for ext, box in luci.util.kspairs(plan.voicemailboxes) do boxes_used[box.id] = true %> - <tr class="cbi-section-table-row <%=rowstyle(row)%>"> - <td style="text-align: left; padding: 3px" class="cbi-section-table-cell"> + <div class="tr cbi-section-table-row <%=rowstyle(row)%>"> + <div style="text-align: left; padding: 3px" class="td cbi-section-table-cell"> <strong>└ Voicemailbox <em><%=box.id%></em></strong> (<%=box.name%>) <p style="padding-left: 1em; margin-bottom:0"> Owner: <%=box.name%> | @@ -132,44 +132,44 @@ Pager: <%=#box.page > 0 and box.page or 'n/a'%><br /> Matches: <%=format_matches(ext)%> </p> - </td> - <td style="width:5%" class="cbi-value-field"> + </div> + <div style="width:5%" class="td cbi-value-field"> <a href="<%=url('admin/asterisk/voicemail/mailboxes')%>"> <img style="border:none" alt="Manage mailboxes ..." title="Manage mailboxes ..." src="/luci-static/resources/cbi/edit.gif" /> </a> <a href="<%=url('admin/asterisk/dialplans')%>?delvbox.<%=plan.name%>=<%=ext%>"> <img style="border:none" alt="Remove from this dialplan" title="Remove from this dialplan" src="/luci-static/resources/cbi/remove.gif" /> </a> - </td> - </tr> + </div> + </div> <% row = row + 1; end %> <!-- /voicemail --> <!-- meetme --> <% local rooms_used = { } %> <% for ext, room in luci.util.kspairs(plan.meetmerooms) do rooms_used[room.room] = true %> - <tr class="cbi-section-table-row <%=rowstyle(row)%>"> - <td style="text-align: left; padding: 3px" class="cbi-section-table-cell"> + <div class="tr cbi-section-table-row <%=rowstyle(row)%>"> + <div style="text-align: left; padding: 3px" class="td cbi-section-table-cell"> <strong>└ MeetMe Room <em><%=room.room%></em></strong> <% if room.description and #room.description > 0 then %> (<%=room.description%>)<% end %> <p style="padding-left: 1em; margin-bottom:0"> Matches: <%=format_matches(ext)%> </p> - </td> - <td style="width:5%" class="cbi-value-field"> + </div> + <div style="width:5%" class="td cbi-value-field"> <a href="<%=url('admin/asterisk/meetme/rooms')%>"> <img style="border:none" alt="Manage conferences ..." title="Manage conferences ..." src="/luci-static/resources/cbi/edit.gif" /> </a> <a href="<%=url('admin/asterisk/dialplans')%>?delmeetme.<%=plan.name%>=<%=ext%>"> <img style="border:none" alt="Remove from this dialplan" title="Remove from this dialplan" src="/luci-static/resources/cbi/remove.gif" /> </a> - </td> - </tr> + </div> + </div> <% row = row + 1; end %> <!-- /meetme --> - <tr class="cbi-section-table-row"> - <td style="text-align: left; padding: 3px" class="cbi-section-table-cell" colspan="2"> + <div class="tr cbi-section-table-row"> + <div style="text-align: left; padding: 3px" class="td cbi-section-table-cell" colspan="2"> <hr style="margin-bottom:0.5em; border-width:0 0 1px 0" /> Add Dialzone:<br /> @@ -213,10 +213,10 @@ <br /><br /> <input type="submit" class="cbi-button cbi-button-add" value="Add item »" title="Add item ..."/> - </td> - </tr> + </div> + </div> - </table> + </div> <div class="cbi-section-create cbi-tblsection-create"></div> </div> diff --git a/applications/luci-app-asterisk/luasrc/view/asterisk/dialzones.htm b/applications/luci-app-asterisk/luasrc/view/asterisk/dialzones.htm index ffdbbcf35..e48da608a 100644 --- a/applications/luci-app-asterisk/luasrc/view/asterisk/dialzones.htm +++ b/applications/luci-app-asterisk/luasrc/view/asterisk/dialzones.htm @@ -66,59 +66,59 @@ <!-- tblsection --> <fieldset class="cbi-section" id="cbi-asterisk-sip"> <div class="cbi-section-node"> - <table class="cbi-section-table"> - <tr class="cbi-section-table-titles"> - <th style="text-align: left; padding: 3px" class="cbi-section-table-cell" colspan="6"> + <div class="table cbi-section-table"> + <div class="tr cbi-section-table-titles"> + <div style="text-align: left; padding: 3px" class="th cbi-section-table-cell" colspan="6"> <h3>Dialzone Overview</h3> - </th> - </tr> - - <tr class="cbi-section-table-descr"> - <th style="width: 5%; text-align:right" class="cbi-section-table-cell">Name</th> - <th style="width: 5%; text-align:right" class="cbi-section-table-cell">Prepend</th> - <th style="width: 20%; text-align:left" class="cbi-section-table-cell">- Match</th> - <th style="text-align:left" class="cbi-section-table-cell">Trunk</th> - <th style="width: 35%; text-align:left" class="cbi-section-table-cell">Description</th> - <th style="width: 4%; text-align:left" class="cbi-section-table-cell"></th> - </tr> + </div> + </div> + + <div class="tr cbi-section-table-descr"> + <div style="width: 5%; text-align:right" class="th cbi-section-table-cell">Name</div> + <div style="width: 5%; text-align:right" class="th cbi-section-table-cell">Prepend</div> + <div style="width: 20%; text-align:left" class="th cbi-section-table-cell">- Match</div> + <div style="text-align:left" class="th cbi-section-table-cell">Trunk</div> + <div style="width: 35%; text-align:left" class="th cbi-section-table-cell">Description</div> + <div style="width: 4%; text-align:left" class="th cbi-section-table-cell"></div> + </div> <% for i, rule in pairs(ast.dialzone.zones()) do %> - <tr class="cbi-section-table-row <%=rowstyle(i)%>"> - <td style="text-align:right" class="cbi-value-field"> + <div class="tr cbi-section-table-row <%=rowstyle(i)%>"> + <div style="text-align:right" class="td cbi-value-field"> <%=rule.name%> - </td> - <td style="text-align:right" class="cbi-value-field"> + </div> + <div style="text-align:right" class="td cbi-value-field"> <% for _ in ipairs(rule.matches) do %> <%=rule.addprefix and digit_pattern(rule.addprefix)%> <br /> <% end %> - </td> - <td style="text-align:left" class="cbi-value-field"> + </div> + <div style="text-align:left" class="td cbi-value-field"> <% for _, m in ipairs(rule.matches) do %> <%=rule.localprefix and "%s " % digit_pattern(rule.localprefix)%> <%=digit_pattern(m)%><br /> <% end %> - </td> - <td style="text-align:left" class="cbi-value-field"> + </div> + <div style="text-align:left" class="td cbi-value-field"> <%=ast.tools.hyperlinks( rule.trunks, function(v) return luci.dispatcher.build_url("admin", "asterisk", "trunks", "%s") % v:lower() end )%> - </td> - <td style="text-align:left" class="cbi-value-field"> + </div> + <div style="text-align:left" class="td cbi-value-field"> <%=rule.description or rule.name%> - </td> - <td style="text-align:left" class="cbi-value-field"> + </div> + <div style="text-align:left" class="td cbi-value-field"> <a href="<%=url('admin/asterisk/dialplans/out', rule.name)%>"> <img style="border:none" alt="Edit entry" title="Edit entry" src="/luci-static/resources/cbi/edit.gif" /> </a> <a href="<%=url('admin/asterisk/dialplans/zones')%>?delzone=<%=rule.name%>"> <img style="border:none" alt="Delete entry" title="Delete entry" src="/luci-static/resources/cbi/remove.gif" /> </a> - </td> - </tr> + </div> + </div> <% end %> - </table> + </div> <div class="cbi-section-create cbi-tblsection-create"></div> </div> <br /> @@ -133,26 +133,26 @@ <br /><span style="color:red">Invalid name given!</span><br /> <% end -%> - <table> - <tr> - <td style="padding:3px"> + <div class="table"> + <div class="tr"> + <div class="td" style="padding:3px"> <label for="create1">1) Name</label><br /> <input type="text" class="cbi-section-create-name" id="create1" name="newzone_name" style="width:200px" /> <br /><br /> <label for="create2">2) Number Match</label><br /> <input type="text" class="cbi-section-create-name" id="create2" name="newzone_match" style="width:200px" /> - </td> - <td style="padding:3px"> + </div> + <div class="td" style="padding:3px"> <label for="create3">3) Trunks</label><br /> <select class="cbi-input-select" multiple="multiple" id="create3" name="newzone_uses" size="4" style="width:200px"> <% for i, t in ipairs(find_trunks()) do %> <option value="<%=t[1]%>"><%=t[2]%></option> <% end %> </select> - </td> - </tr> - </table> + </div> + </div> + </div> <br /> <input type="submit" class="cbi-button cbi-button-add" name="newzone" value="Add entry" title="Add entry"/> diff --git a/applications/luci-app-firewall/luasrc/model/cbi/firewall/zones.lua b/applications/luci-app-firewall/luasrc/model/cbi/firewall/zones.lua index 500e5078f..2c5083a01 100644 --- a/applications/luci-app-firewall/luasrc/model/cbi/firewall/zones.lua +++ b/applications/luci-app-firewall/luasrc/model/cbi/firewall/zones.lua @@ -3,6 +3,7 @@ local ds = require "luci.dispatcher" local fw = require "luci.model.firewall" +local fs = require "nixio.fs" local m, s, o, p, i, v @@ -32,6 +33,28 @@ for i, v in ipairs(p) do v:value("ACCEPT", translate("accept")) end +-- Netfilter flow offload support + +local offload = fs.access("/sys/module/xt_FLOWOFFLOAD/refcnt") + +if offload then + s:option(DummyValue, "offload_advice", + translate("Routing/NAT Offloading"), + translate("Experimental feature. Not fully compatible with QoS/SQM.")) + + o = s:option(Flag, "flow_offloading", + translate("Software flow offloading"), + translate("Software based offloading for routing/NAT")) + o.optional = true + + o = s:option(Flag, "flow_offloading_hw", + translate("Hardware flow offloading"), + translate("Requires hardware NAT support. Implemented at least for mt7621")) + o.optional = true + o:depends( "flow_offloading", 1) +end + +-- Firewall zones s = m:section(TypedSection, "zone", translate("Zones")) s.template = "cbi/tblsection" diff --git a/applications/luci-app-firewall/luasrc/view/firewall/cbi_addforward.htm b/applications/luci-app-firewall/luasrc/view/firewall/cbi_addforward.htm index b3079f3a4..279b6e06d 100644 --- a/applications/luci-app-firewall/luasrc/view/firewall/cbi_addforward.htm +++ b/applications/luci-app-firewall/luasrc/view/firewall/cbi_addforward.htm @@ -20,58 +20,58 @@ -%> <div class="cbi-section-create cbi-tblsection-create"> <br /> - <table class="cbi-section-table" style="width:810px; margin-left:5px"> - <tr class="cbi-section-table-titles"> - <th class="cbi-section-table-cell" colspan="8"><%:New port forward%>:</th> - </tr> - <tr class="cbi-section-table-descr"> - <th class="cbi-section-table-cell"><%:Name%></th> - <th class="cbi-section-table-cell"><%:Protocol%></th> - <th class="cbi-section-table-cell"><%:External zone%></th> - <th class="cbi-section-table-cell"><%:External port%></th> - <th class="cbi-section-table-cell"><%:Internal zone%></th> - <th class="cbi-section-table-cell"><%:Internal IP address%></th> - <th class="cbi-section-table-cell"><%:Internal port%></th> - <th class="cbi-section-table-cell"></th> - </tr> - <tr class="cbi-section-table-row"> - <td class="cbi-section-table-cell"> + <div class="table cbi-section-table" style="width:810px; margin-left:5px"> + <div class="tr cbi-section-table-titles"> + <div class="th cbi-section-table-cell" colspan="8"><%:New port forward%>:</div> + </div> + <div class="tr cbi-section-table-descr"> + <div class="th cbi-section-table-cell"><%:Name%></div> + <div class="th cbi-section-table-cell"><%:Protocol%></div> + <div class="th cbi-section-table-cell"><%:External zone%></div> + <div class="th cbi-section-table-cell"><%:External port%></div> + <div class="th cbi-section-table-cell"><%:Internal zone%></div> + <div class="th cbi-section-table-cell"><%:Internal IP address%></div> + <div class="th cbi-section-table-cell"><%:Internal port%></div> + <div class="th cbi-section-table-cell"></div> + </div> + <div class="tr cbi-section-table-row"> + <div class="td cbi-section-table-cell"> <input type="text" class="cbi-input-text" id="_newfwd.name" name="_newfwd.name" placeholder="<%:New port forward%>" /> - </td> - <td class="cbi-section-table-cell" style="width:110px"> + </div> + <div class="td cbi-section-table-cell" style="width:110px"> <select class="cbi-input-select" id="_newfwd.proto" name="_newfwd.proto"> <option value="tcp udp">TCP+UDP</option> <option value="tcp">TCP</option> <option value="udp">UDP</option> <option value="other"><%:Other...%></option> </select> - </td> - <td class="cbi-section-table-cell" style="width:55px"> + </div> + <div class="td cbi-section-table-cell" style="width:55px"> <select class="cbi-input-select" id="_newfwd.extzone" name="_newfwd.extzone"> <% for _, z in ipairs(ezl) do -%><option value="<%=z:name()%>"><%=z:name()%></option><%- end %> </select> - </td> - <td class="cbi-section-table-cell" style="width:110px"> + </div> + <div class="td cbi-section-table-cell" style="width:110px"> <input type="text" class="cbi-input-text" id="_newfwd.extport" name="_newfwd.extport" data-type="portrange" data-optional="true" /> - </td> - <td class="cbi-section-table-cell" style="width:55px"> + </div> + <div class="td cbi-section-table-cell" style="width:55px"> <select class="cbi-input-select" id="_newfwd.intzone" name="_newfwd.intzone"> <% for _, z in ipairs(izl) do -%><option value="<%=z:name()%>"><%=z:name()%></option><%- end %> </select> - </td> - <td class="cbi-section-table-cell" style="width:110px"> + </div> + <div class="td cbi-section-table-cell" style="width:110px"> <input type="text" class="cbi-input-text" id="_newfwd.intaddr" name="_newfwd.intaddr" data-type="host" data-optional="true"<%= ifattr(#keys > 0, "data-choices", {keys, vals}) %>/> - </td> - <td class="cbi-section-table-cell" style="width:110px"> + </div> + <div class="td cbi-section-table-cell" style="width:110px"> <input type="text" class="cbi-input-text" id="_newfwd.intport" name="_newfwd.intport" data-type="portrange" data-optional="true" /> - </td> - <td class="cbi-section-table-cell"> + </div> + <div class="td cbi-section-table-cell"> <input type="submit" class="cbi-button cbi-button-add" name="cbi.cts.<%=self.config%>.<%=self.sectiontype%>.<%=section%>" value="<%:Add%>" /> - </td> - </tr> - </table> + </div> + </div> + </div> <script type="text/javascript">//<![CDATA[ cbi_bind(document.getElementById('_newfwd.extport'), 'blur', diff --git a/applications/luci-app-firewall/luasrc/view/firewall/cbi_addrule.htm b/applications/luci-app-firewall/luasrc/view/firewall/cbi_addrule.htm index b06fac3de..c99ecaca3 100644 --- a/applications/luci-app-firewall/luasrc/view/firewall/cbi_addrule.htm +++ b/applications/luci-app-firewall/luasrc/view/firewall/cbi_addrule.htm @@ -8,71 +8,71 @@ <div class="cbi-section-create cbi-tblsection-create"> <% if wz then %> <br /> - <table class="cbi-section-table" style="margin-left:5px"> - <tr class="cbi-section-table-titles"> - <th class="cbi-section-table-cell left" colspan="4"><%:Open ports on router%>:</th> - </tr> - <tr class="cbi-section-table-descr"> - <th class="cbi-section-table-cell"><%:Name%></th> - <th class="cbi-section-table-cell"><%:Protocol%></th> - <th class="cbi-section-table-cell"><%:External port%></th> - <th class="cbi-section-table-cell"></th> - </tr> - <tr class="cbi-section-table-row"> - <td class="cbi-section-table-cell" style="width:130px"> + <div class="table cbi-section-table" style="margin-left:5px"> + <div class="tr cbi-section-table-titles"> + <div class="th cbi-section-table-cell left" colspan="4"><%:Open ports on router%>:</div> + </div> + <div class="tr cbi-section-table-descr"> + <div class="th cbi-section-table-cell"><%:Name%></div> + <div class="th cbi-section-table-cell"><%:Protocol%></div> + <div class="th cbi-section-table-cell"><%:External port%></div> + <div class="th cbi-section-table-cell"></div> + </div> + <div class="tr cbi-section-table-row"> + <div class="td cbi-section-table-cell" style="width:130px"> <input type="text" class="cbi-input-text" id="_newopen.name" name="_newopen.name" placeholder="<%:New input rule%>" /> - </td> - <td class="cbi-section-table-cell" style="width:110px"> + </div> + <div class="td cbi-section-table-cell" style="width:110px"> <select class="cbi-input-select" id="_newopen.proto" name="_newopen.proto"> <option value="tcp udp">TCP+UDP</option> <option value="tcp">TCP</option> <option value="udp">UDP</option> <option value="other"><%:Other...%></option> </select> - </td> - <td class="cbi-section-table-cell" style="width:110px"> + </div> + <div class="td cbi-section-table-cell" style="width:110px"> <input type="text" class="cbi-input-text" id="_newopen.extport" name="_newopen.extport" /> - </td> - <td class="cbi-section-table-cell left"> + </div> + <div class="td cbi-section-table-cell left"> <input type="submit" class="cbi-button cbi-button-add" name="_newopen.submit" value="<%:Add%>" /> - </td> - </tr> - </table> + </div> + </div> + </div> <% end %> <% if #zones > 1 then %> - <table class="cbi-section-table" style="margin-left:5px"> - <tr class="cbi-section-table-titles"> - <th class="cbi-section-table-cell left" colspan="6"><br /><%:New forward rule%>:</th> - </tr> - <tr class="cbi-section-table-descr"> - <th class="cbi-section-table-cell"><%:Name%></th> - <th class="cbi-section-table-cell"><%:Source zone%></th> - <th class="cbi-section-table-cell"><%:Destination zone%></th> - <th class="cbi-section-table-cell"></th> - </tr> - <tr class="cbi-section-table-row"> - <td class="cbi-section-table-cell" style="width:130px"> + <div class="table cbi-section-table" style="margin-left:5px"> + <div class="tr cbi-section-table-titles"> + <div class="th cbi-section-table-cell left" colspan="6"><br /><%:New forward rule%>:</div> + </div> + <div class="tr cbi-section-table-descr"> + <div class="th cbi-section-table-cell"><%:Name%></div> + <div class="th cbi-section-table-cell"><%:Source zone%></div> + <div class="th cbi-section-table-cell"><%:Destination zone%></div> + <div class="th cbi-section-table-cell"></div> + </div> + <div class="tr cbi-section-table-row"> + <div class="td cbi-section-table-cell" style="width:130px"> <input type="text" class="cbi-input-text" id="_newfwd.name" name="_newfwd.name" placeholder="<%:New forward rule%>" /> - </td> - <td class="cbi-section-table-cell" style="width:110px"> + </div> + <div class="td cbi-section-table-cell" style="width:110px"> <select class="cbi-input-text" id="_newfwd.src" name="_newfwd.src"> <% local k, v; for k, v in ipairs(fw:get_zones()) do -%> <option<%=ifattr(v:name() == "wan", "selected", "selected")%> value="<%=v:name()%>"><%=v:name()%></option> <%- end %> </select> - </td> - <td class="cbi-section-table-cell" style="width:110px"> + </div> + <div class="td cbi-section-table-cell" style="width:110px"> <select class="cbi-input-text" id="_newfwd.dest" name="_newfwd.dest"> <% local k, v; for k, v in ipairs(fw:get_zones()) do -%> <option<%=ifattr(v:name() == "lan", "selected", "selected")%> value="<%=v:name()%>"><%=v:name()%></option> <%- end %> </select> - </td> - <td class="cbi-section-table-cell left"> + </div> + <div class="td cbi-section-table-cell left"> <input type="submit" class="cbi-button cbi-button-link" name="_newfwd.submit" value="<%:Add and edit...%>" /> - </td> - </tr> - </table> + </div> + </div> + </div> <% else %> <input type="submit" class="cbi-button cbi-button-add" name="cbi.cts.<%=self.config%>.<%=self.sectiontype%>.<%=section%>" value="<%:Add%>" /> <% end %> diff --git a/applications/luci-app-firewall/luasrc/view/firewall/cbi_addsnat.htm b/applications/luci-app-firewall/luasrc/view/firewall/cbi_addsnat.htm index 0a5913fc0..b2775cf69 100644 --- a/applications/luci-app-firewall/luasrc/view/firewall/cbi_addsnat.htm +++ b/applications/luci-app-firewall/luasrc/view/firewall/cbi_addsnat.htm @@ -15,49 +15,49 @@ <div class="cbi-section-create cbi-tblsection-create"> <% if #zones > 1 then %> <br /> - <table class="cbi-section-table" style="width:700px; margin-left:5px"> - <tr class="cbi-section-table-titles"> - <th class="cbi-section-table-cell left" colspan="6"><%:New source NAT%>:</th> - </tr> - <tr class="cbi-section-table-descr"> - <th class="cbi-section-table-cell"><%:Name%></th> - <th class="cbi-section-table-cell"><%:Source zone%></th> - <th class="cbi-section-table-cell"><%:Destination zone%></th> - <th class="cbi-section-table-cell"><%:To source IP%></th> - <th class="cbi-section-table-cell"><%:To source port%></th> - <th class="cbi-section-table-cell"></th> - </tr> - <tr class="cbi-section-table-row"> - <td class="cbi-section-table-cell"> + <div class="table cbi-section-table" style="width:700px; margin-left:5px"> + <div class="tr cbi-section-table-titles"> + <div class="th cbi-section-table-cell left" colspan="6"><%:New source NAT%>:</div> + </div> + <div class="tr cbi-section-table-descr"> + <div class="th cbi-section-table-cell"><%:Name%></div> + <div class="th cbi-section-table-cell"><%:Source zone%></div> + <div class="th cbi-section-table-cell"><%:Destination zone%></div> + <div class="th cbi-section-table-cell"><%:To source IP%></div> + <div class="th cbi-section-table-cell"><%:To source port%></div> + <div class="th cbi-section-table-cell"></div> + </div> + <div class="tr cbi-section-table-row"> + <div class="td cbi-section-table-cell"> <input type="text" class="cbi-input-text" id="_newsnat.name" name="_newsnat.name" placeholder="<%:New SNAT rule%>" /> - </td> - <td class="cbi-section-table-cell" style="width:110px"> + </div> + <div class="td cbi-section-table-cell" style="width:110px"> <select class="cbi-input-text" id="_newsnat.src" name="_newsnat.src"> <% local k, v; for k, v in ipairs(fw:get_zones()) do -%> <option<%=ifattr(v:name() == "lan", "selected", "selected")%> value="<%=v:name()%>"><%=v:name()%></option> <%- end %> </select> - </td> - <td class="cbi-section-table-cell" style="width:110px"> + </div> + <div class="td cbi-section-table-cell" style="width:110px"> <select class="cbi-input-text" id="_newsnat.dest" name="_newsnat.dest"> <% local k, v; for k, v in ipairs(fw:get_zones()) do -%> <option<%=ifattr(v:name() == "wan", "selected", "selected")%> value="<%=v:name()%>"><%=v:name()%></option> <%- end %> </select> - </td> - <td class="cbi-section-table-cell" style="width:110px"> + </div> + <div class="td cbi-section-table-cell" style="width:110px"> <input type="text" class="cbi-input-text" id="_newsnat.dip" name="_newsnat.dip" placeholder="<%:Do not rewrite%>" data-type="ip4addr" data-optional="true"<%= ifattr(#keys > 0, "data-choices", { keys, vals }) %> /> - </td> - <td class="cbi-section-table-cell" style="width:110px"> + </div> + <div class="td cbi-section-table-cell" style="width:110px"> <input type="text" class="cbi-input-text" id="_newsnat.dport" name="_newsnat.dport" placeholder="<%:Do not rewrite%>" data-type="portrange" data-optional="true" /> - </td> - <td class="cbi-section-table-cell"> + </div> + <div class="td cbi-section-table-cell"> <input type="submit" class="cbi-button cbi-button-link" name="_newsnat.submit" value="<%:Add and edit...%>" /> - </td> - </tr> - </table> + </div> + </div> + </div> <% else %> <input type="submit" class="cbi-button cbi-button-add" name="cbi.cts.<%=self.config%>.<%=self.sectiontype%>.<%=section%>" value="<%:Add%>" /> <% end %> diff --git a/applications/luci-app-firewall/po/ca/firewall.po b/applications/luci-app-firewall/po/ca/firewall.po index ff43427ee..2ccffca9a 100644 --- a/applications/luci-app-firewall/po/ca/firewall.po +++ b/applications/luci-app-firewall/po/ca/firewall.po @@ -130,6 +130,9 @@ msgstr "Habilita protecció contra la inundació SYN" msgid "Enable logging on this zone" msgstr "Habilita el registre d'aquesta zona" +msgid "Experimental feature. Not fully compatible with QoS/SQM." +msgstr "" + msgid "External IP address" msgstr "Adreça IP extern" @@ -181,6 +184,9 @@ msgstr "Des de %s en %s amb orÃgens %s i %s" msgid "General Settings" msgstr "Ajusts generals" +msgid "Hardware flow offloading" +msgstr "" + msgid "IP" msgstr "" @@ -337,6 +343,9 @@ msgstr "" msgid "Refuse input" msgstr "" +msgid "Requires hardware NAT support. Implemented at least for mt7621" +msgstr "" + msgid "Restart Firewall" msgstr "" @@ -365,6 +374,9 @@ msgstr "Reescriu a l'origen %s" msgid "Rewrite to source %s, %s" msgstr "Reescriu als orÃgens %s, %s" +msgid "Routing/NAT Offloading" +msgstr "" + msgid "Rule is disabled" msgstr "" @@ -380,6 +392,12 @@ msgstr "Port SNAT" msgid "Saturday" msgstr "" +msgid "Software based offloading for routing/NAT" +msgstr "" + +msgid "Software flow offloading" +msgstr "" + msgid "Source IP address" msgstr "Adreça IP d'origen" diff --git a/applications/luci-app-firewall/po/cs/firewall.po b/applications/luci-app-firewall/po/cs/firewall.po index caa7e1998..4cbf356d0 100644 --- a/applications/luci-app-firewall/po/cs/firewall.po +++ b/applications/luci-app-firewall/po/cs/firewall.po @@ -125,6 +125,9 @@ msgstr "Povolit ochranu proti SYN-flood" msgid "Enable logging on this zone" msgstr "Povolit logovánà v této oblasti" +msgid "Experimental feature. Not fully compatible with QoS/SQM." +msgstr "" + msgid "External IP address" msgstr "VnÄ›jÅ¡Ã IP adresa" @@ -176,6 +179,9 @@ msgstr "Z %s v %s se zdrojovou %s a %s" msgid "General Settings" msgstr "Obecné nastavenÃ" +msgid "Hardware flow offloading" +msgstr "" + msgid "IP" msgstr "" @@ -334,6 +340,9 @@ msgstr "" msgid "Refuse input" msgstr "" +msgid "Requires hardware NAT support. Implemented at least for mt7621" +msgstr "" + msgid "Restart Firewall" msgstr "" @@ -362,6 +371,9 @@ msgstr "PÅ™epsat na zdrojovou %s" msgid "Rewrite to source %s, %s" msgstr "PÅ™epsat na zdrojovou %s, %s" +msgid "Routing/NAT Offloading" +msgstr "" + msgid "Rule is disabled" msgstr "" @@ -377,6 +389,12 @@ msgstr "Port SNATu" msgid "Saturday" msgstr "" +msgid "Software based offloading for routing/NAT" +msgstr "" + +msgid "Software flow offloading" +msgstr "" + msgid "Source IP address" msgstr "Zdrojová IP adresa" diff --git a/applications/luci-app-firewall/po/de/firewall.po b/applications/luci-app-firewall/po/de/firewall.po index fcf8bec67..0ee6007dd 100644 --- a/applications/luci-app-firewall/po/de/firewall.po +++ b/applications/luci-app-firewall/po/de/firewall.po @@ -128,6 +128,9 @@ msgstr "Schutz vor SYN-flood-Attacken" msgid "Enable logging on this zone" msgstr "Protokollierung innerhalb der Zone aktivieren" +msgid "Experimental feature. Not fully compatible with QoS/SQM." +msgstr "" + msgid "External IP address" msgstr "Externe IP-Adresse" @@ -179,6 +182,9 @@ msgstr "Von %s in %s mit Quell-%s und %s" msgid "General Settings" msgstr "Allgemein" +msgid "Hardware flow offloading" +msgstr "" + msgid "IP" msgstr "" @@ -334,6 +340,9 @@ msgstr "" msgid "Refuse input" msgstr "" +msgid "Requires hardware NAT support. Implemented at least for mt7621" +msgstr "" + msgid "Restart Firewall" msgstr "" @@ -362,6 +371,9 @@ msgstr "Schreibe um auf Quell-%s" msgid "Rewrite to source %s, %s" msgstr "Schreibe um auf Quell-%s, %s" +msgid "Routing/NAT Offloading" +msgstr "" + msgid "Rule is disabled" msgstr "" @@ -377,6 +389,12 @@ msgstr "SNAT-Port" msgid "Saturday" msgstr "" +msgid "Software based offloading for routing/NAT" +msgstr "" + +msgid "Software flow offloading" +msgstr "" + msgid "Source IP address" msgstr "Quell-IP-Adresse" diff --git a/applications/luci-app-firewall/po/el/firewall.po b/applications/luci-app-firewall/po/el/firewall.po index 598927557..9ddd4c9db 100644 --- a/applications/luci-app-firewall/po/el/firewall.po +++ b/applications/luci-app-firewall/po/el/firewall.po @@ -126,6 +126,9 @@ msgstr "Î Ïοστασία SYN-flood" msgid "Enable logging on this zone" msgstr "" +msgid "Experimental feature. Not fully compatible with QoS/SQM." +msgstr "" + msgid "External IP address" msgstr "ΕξωτεÏική διεÏθυνση IP" @@ -177,6 +180,9 @@ msgstr "" msgid "General Settings" msgstr "ΓενικÎÏ‚ Ρυθμίσεις" +msgid "Hardware flow offloading" +msgstr "" + msgid "IP" msgstr "" @@ -327,6 +333,9 @@ msgstr "" msgid "Refuse input" msgstr "" +msgid "Requires hardware NAT support. Implemented at least for mt7621" +msgstr "" + msgid "Restart Firewall" msgstr "" @@ -353,6 +362,9 @@ msgstr "" msgid "Rewrite to source %s, %s" msgstr "" +msgid "Routing/NAT Offloading" +msgstr "" + msgid "Rule is disabled" msgstr "" @@ -368,6 +380,12 @@ msgstr "" msgid "Saturday" msgstr "" +msgid "Software based offloading for routing/NAT" +msgstr "" + +msgid "Software flow offloading" +msgstr "" + #, fuzzy msgid "Source IP address" msgstr "ΔιεÏθυνση MAC πηγής" diff --git a/applications/luci-app-firewall/po/en/firewall.po b/applications/luci-app-firewall/po/en/firewall.po index df1ed4a08..f0fe0b378 100644 --- a/applications/luci-app-firewall/po/en/firewall.po +++ b/applications/luci-app-firewall/po/en/firewall.po @@ -122,6 +122,9 @@ msgstr "Enable SYN-flood protection" msgid "Enable logging on this zone" msgstr "" +msgid "Experimental feature. Not fully compatible with QoS/SQM." +msgstr "" + msgid "External IP address" msgstr "" @@ -177,6 +180,9 @@ msgstr "" msgid "General Settings" msgstr "" +msgid "Hardware flow offloading" +msgstr "" + msgid "IP" msgstr "" @@ -327,6 +333,9 @@ msgstr "" msgid "Refuse input" msgstr "" +msgid "Requires hardware NAT support. Implemented at least for mt7621" +msgstr "" + msgid "Restart Firewall" msgstr "" @@ -353,6 +362,9 @@ msgstr "" msgid "Rewrite to source %s, %s" msgstr "" +msgid "Routing/NAT Offloading" +msgstr "" + msgid "Rule is disabled" msgstr "" @@ -368,6 +380,12 @@ msgstr "" msgid "Saturday" msgstr "" +msgid "Software based offloading for routing/NAT" +msgstr "" + +msgid "Software flow offloading" +msgstr "" + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # Generated from applications/luci-fw/luasrc/model/cbi/luci_fw/rrule.lua # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # diff --git a/applications/luci-app-firewall/po/es/firewall.po b/applications/luci-app-firewall/po/es/firewall.po index bae8b693d..000853e9b 100644 --- a/applications/luci-app-firewall/po/es/firewall.po +++ b/applications/luci-app-firewall/po/es/firewall.po @@ -129,6 +129,9 @@ msgstr "Activar protección a inundación-SYN" msgid "Enable logging on this zone" msgstr "Activar registro en esta zona" +msgid "Experimental feature. Not fully compatible with QoS/SQM." +msgstr "" + msgid "External IP address" msgstr "Dirección IP externa" @@ -180,6 +183,9 @@ msgstr "Desde %s en %s con origen %s y %s" msgid "General Settings" msgstr "Configuración general" +msgid "Hardware flow offloading" +msgstr "" + msgid "IP" msgstr "" @@ -336,6 +342,9 @@ msgstr "" msgid "Refuse input" msgstr "" +msgid "Requires hardware NAT support. Implemented at least for mt7621" +msgstr "" + msgid "Restart Firewall" msgstr "" @@ -364,6 +373,9 @@ msgstr "Reescribir a origen %s" msgid "Rewrite to source %s, %s" msgstr "Reescribir a origen %s, %s" +msgid "Routing/NAT Offloading" +msgstr "" + msgid "Rule is disabled" msgstr "" @@ -379,6 +391,12 @@ msgstr "Puerto SNAT" msgid "Saturday" msgstr "" +msgid "Software based offloading for routing/NAT" +msgstr "" + +msgid "Software flow offloading" +msgstr "" + msgid "Source IP address" msgstr "Dirección IP origen" diff --git a/applications/luci-app-firewall/po/fr/firewall.po b/applications/luci-app-firewall/po/fr/firewall.po index 281999b55..74c28b883 100644 --- a/applications/luci-app-firewall/po/fr/firewall.po +++ b/applications/luci-app-firewall/po/fr/firewall.po @@ -124,6 +124,9 @@ msgstr "Activer la protection contre le SYN-flood" msgid "Enable logging on this zone" msgstr "Activer les traces (logs) sur cette zone" +msgid "Experimental feature. Not fully compatible with QoS/SQM." +msgstr "" + msgid "External IP address" msgstr "Adresse IP externe" @@ -179,6 +182,9 @@ msgstr "" msgid "General Settings" msgstr "Paramètres généraux" +msgid "Hardware flow offloading" +msgstr "" + msgid "IP" msgstr "" @@ -332,6 +338,9 @@ msgstr "" msgid "Refuse input" msgstr "" +msgid "Requires hardware NAT support. Implemented at least for mt7621" +msgstr "" + msgid "Restart Firewall" msgstr "" @@ -362,6 +371,9 @@ msgstr "" msgid "Rewrite to source %s, %s" msgstr "" +msgid "Routing/NAT Offloading" +msgstr "" + msgid "Rule is disabled" msgstr "" @@ -377,6 +389,12 @@ msgstr "Port SNAT" msgid "Saturday" msgstr "" +msgid "Software based offloading for routing/NAT" +msgstr "" + +msgid "Software flow offloading" +msgstr "" + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # applications/luci-fw/luasrc/model/cbi/luci_fw/rrule.lua # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # diff --git a/applications/luci-app-firewall/po/he/firewall.po b/applications/luci-app-firewall/po/he/firewall.po index 06952d490..0416661c2 100644 --- a/applications/luci-app-firewall/po/he/firewall.po +++ b/applications/luci-app-firewall/po/he/firewall.po @@ -119,6 +119,9 @@ msgstr "" msgid "Enable logging on this zone" msgstr "" +msgid "Experimental feature. Not fully compatible with QoS/SQM." +msgstr "" + msgid "External IP address" msgstr "" @@ -170,6 +173,9 @@ msgstr "" msgid "General Settings" msgstr "" +msgid "Hardware flow offloading" +msgstr "" + msgid "IP" msgstr "" @@ -317,6 +323,9 @@ msgstr "" msgid "Refuse input" msgstr "" +msgid "Requires hardware NAT support. Implemented at least for mt7621" +msgstr "" + msgid "Restart Firewall" msgstr "" @@ -343,6 +352,9 @@ msgstr "" msgid "Rewrite to source %s, %s" msgstr "" +msgid "Routing/NAT Offloading" +msgstr "" + msgid "Rule is disabled" msgstr "" @@ -358,6 +370,12 @@ msgstr "" msgid "Saturday" msgstr "" +msgid "Software based offloading for routing/NAT" +msgstr "" + +msgid "Software flow offloading" +msgstr "" + msgid "Source IP address" msgstr "" diff --git a/applications/luci-app-firewall/po/hu/firewall.po b/applications/luci-app-firewall/po/hu/firewall.po index 29aa32418..33a305ce8 100644 --- a/applications/luci-app-firewall/po/hu/firewall.po +++ b/applications/luci-app-firewall/po/hu/firewall.po @@ -126,6 +126,9 @@ msgstr "SYN-flood védelem engedélyezése" msgid "Enable logging on this zone" msgstr "Naplózás engeélyezése ezen a zónán" +msgid "Experimental feature. Not fully compatible with QoS/SQM." +msgstr "" + msgid "External IP address" msgstr "KülsÅ‘ IP cÃm" @@ -177,6 +180,9 @@ msgstr "%s felÅ‘l %s-ben %s és %s forrással" msgid "General Settings" msgstr "Ãltalános beállÃtások" +msgid "Hardware flow offloading" +msgstr "" + msgid "IP" msgstr "" @@ -338,6 +344,9 @@ msgstr "" msgid "Refuse input" msgstr "" +msgid "Requires hardware NAT support. Implemented at least for mt7621" +msgstr "" + msgid "Restart Firewall" msgstr "" @@ -366,6 +375,9 @@ msgstr "ÃtÃrás %s forrásra" msgid "Rewrite to source %s, %s" msgstr "ÃtÃrás %s, %s forrásra" +msgid "Routing/NAT Offloading" +msgstr "" + msgid "Rule is disabled" msgstr "" @@ -381,6 +393,12 @@ msgstr "SNAT port" msgid "Saturday" msgstr "" +msgid "Software based offloading for routing/NAT" +msgstr "" + +msgid "Software flow offloading" +msgstr "" + msgid "Source IP address" msgstr "Forrás IP cÃm" diff --git a/applications/luci-app-firewall/po/it/firewall.po b/applications/luci-app-firewall/po/it/firewall.po index 43b90a9e9..4808d1247 100644 --- a/applications/luci-app-firewall/po/it/firewall.po +++ b/applications/luci-app-firewall/po/it/firewall.po @@ -128,6 +128,9 @@ msgstr "Attiva protezione SYN-flood" msgid "Enable logging on this zone" msgstr "Attiva registro su questa zona" +msgid "Experimental feature. Not fully compatible with QoS/SQM." +msgstr "" + msgid "External IP address" msgstr "Indirizzo IP Esterno" @@ -179,6 +182,9 @@ msgstr "Da %s a %s con sorgente %s e %s" msgid "General Settings" msgstr "Opzioni Generali" +msgid "Hardware flow offloading" +msgstr "" + msgid "IP" msgstr "" @@ -334,6 +340,9 @@ msgstr "" msgid "Refuse input" msgstr "" +msgid "Requires hardware NAT support. Implemented at least for mt7621" +msgstr "" + msgid "Restart Firewall" msgstr "Riavvia Firewall" @@ -362,6 +371,9 @@ msgstr "Riscrivi alla sorgente %s" msgid "Rewrite to source %s, %s" msgstr "Riscrivi alla sorgente %s, %s" +msgid "Routing/NAT Offloading" +msgstr "" + msgid "Rule is disabled" msgstr "" @@ -377,6 +389,12 @@ msgstr "Porta SNAT" msgid "Saturday" msgstr "Sabato" +msgid "Software based offloading for routing/NAT" +msgstr "" + +msgid "Software flow offloading" +msgstr "" + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # Generated from applications/luci-fw/luasrc/model/cbi/luci_fw/rrule.lua # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # diff --git a/applications/luci-app-firewall/po/ja/firewall.po b/applications/luci-app-firewall/po/ja/firewall.po index 2d252797f..27109904b 100644 --- a/applications/luci-app-firewall/po/ja/firewall.po +++ b/applications/luci-app-firewall/po/ja/firewall.po @@ -3,14 +3,14 @@ msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2010-03-30 17:00+0200\n" -"PO-Revision-Date: 2018-01-15 14:56+0900\n" +"PO-Revision-Date: 2018-05-27 21:24+0900\n" "Last-Translator: INAGAKI Hiroshi <musashino.open@gmail.com>\n" "Language: ja\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: Poedit 2.0.5\n" +"X-Generator: Poedit 2.0.7\n" "Language-Team: \n" msgid "%s in %s" @@ -129,6 +129,9 @@ msgstr "SYN-Floodプãƒãƒ†ã‚¯ã‚·ãƒ§ãƒ³ã‚’有効ã«ã™ã‚‹" msgid "Enable logging on this zone" msgstr "ã“ã®ã‚¾ãƒ¼ãƒ³ã®ãƒã‚°è¨˜éŒ²ã‚’有効ã«ã™ã‚‹" +msgid "Experimental feature. Not fully compatible with QoS/SQM." +msgstr "実験的ãªæ©Ÿèƒ½ã§ã™ã€‚ QoS/SQM ã¨ã®å®Œå…¨ãªäº’æ›æ€§ã¯ã‚ã‚Šã¾ã›ã‚“。" + msgid "External IP address" msgstr "外部IPアドレス" @@ -180,6 +183,9 @@ msgstr "é€ä¿¡å…ƒ %s (%s) , é€ä¿¡å…ƒ %s, é€ä¿¡å…ƒ %s" msgid "General Settings" msgstr "一般è¨å®š" +msgid "Hardware flow offloading" +msgstr "ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ フãƒãƒ¼ã‚ªãƒ•ãƒãƒ¼ãƒ‰" + msgid "IP" msgstr "IP" @@ -343,6 +349,10 @@ msgstr "転é€ã‚’æ‹’å¦" msgid "Refuse input" msgstr "入力を拒å¦" +msgid "Requires hardware NAT support. Implemented at least for mt7621" +msgstr "" +"ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ NAT サãƒãƒ¼ãƒˆãŒå¿…è¦ã§ã™ã€‚ mt7621 ã®ã¿ã«ãŠã„ã¦å®Ÿè£…ã•ã‚Œã¦ã„ã¾ã™ã€‚" + msgid "Restart Firewall" msgstr "ファイアウォールã®å†èµ·å‹•" @@ -372,6 +382,9 @@ msgstr "é€ä¿¡å…ƒ %s ã«ãƒªãƒ©ã‚¤ãƒˆ" msgid "Rewrite to source %s, %s" msgstr "é€ä¿¡å…ƒ %s, %s ã«ãƒªãƒ©ã‚¤ãƒˆ" +msgid "Routing/NAT Offloading" +msgstr "ルーティング/NAT オフãƒãƒ¼ãƒ‰" + msgid "Rule is disabled" msgstr "ルールã¯ç„¡åŠ¹ã§ã™" @@ -387,6 +400,12 @@ msgstr "SNAT ãƒãƒ¼ãƒˆ" msgid "Saturday" msgstr "土曜日" +msgid "Software based offloading for routing/NAT" +msgstr "ルーティング/NAT ã®ãŸã‚ã®ã€ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ãƒ™ãƒ¼ã‚¹ã®ã‚ªãƒ•ãƒãƒ¼ãƒ‰ã§ã™ã€‚" + +msgid "Software flow offloading" +msgstr "ソフトウェア フãƒãƒ¼ã‚ªãƒ•ãƒãƒ¼ãƒ‰" + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # Generated from applications/luci-fw/luasrc/model/cbi/luci_fw/rrule.lua # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # diff --git a/applications/luci-app-firewall/po/ko/firewall.po b/applications/luci-app-firewall/po/ko/firewall.po index bfe94d04a..dd4f96197 100644 --- a/applications/luci-app-firewall/po/ko/firewall.po +++ b/applications/luci-app-firewall/po/ko/firewall.po @@ -127,6 +127,9 @@ msgstr "SYN-flood protection 활성화" msgid "Enable logging on this zone" msgstr "zone ì˜ logging 활성화" +msgid "Experimental feature. Not fully compatible with QoS/SQM." +msgstr "" + msgid "External IP address" msgstr "외부 IP 주소" @@ -178,6 +181,9 @@ msgstr "" msgid "General Settings" msgstr "" +msgid "Hardware flow offloading" +msgstr "" + msgid "IP" msgstr "" @@ -327,6 +333,9 @@ msgstr "" msgid "Refuse input" msgstr "" +msgid "Requires hardware NAT support. Implemented at least for mt7621" +msgstr "" + msgid "Restart Firewall" msgstr "" @@ -353,6 +362,9 @@ msgstr "" msgid "Rewrite to source %s, %s" msgstr "" +msgid "Routing/NAT Offloading" +msgstr "" + msgid "Rule is disabled" msgstr "" @@ -368,6 +380,12 @@ msgstr "" msgid "Saturday" msgstr "í† ìš”ì¼" +msgid "Software based offloading for routing/NAT" +msgstr "" + +msgid "Software flow offloading" +msgstr "" + msgid "Source IP address" msgstr "Source IP 주소" diff --git a/applications/luci-app-firewall/po/ms/firewall.po b/applications/luci-app-firewall/po/ms/firewall.po index c6ab19791..58aea1fd0 100644 --- a/applications/luci-app-firewall/po/ms/firewall.po +++ b/applications/luci-app-firewall/po/ms/firewall.po @@ -118,6 +118,9 @@ msgstr "" msgid "Enable logging on this zone" msgstr "" +msgid "Experimental feature. Not fully compatible with QoS/SQM." +msgstr "" + msgid "External IP address" msgstr "" @@ -169,6 +172,9 @@ msgstr "" msgid "General Settings" msgstr "" +msgid "Hardware flow offloading" +msgstr "" + msgid "IP" msgstr "" @@ -316,6 +322,9 @@ msgstr "" msgid "Refuse input" msgstr "" +msgid "Requires hardware NAT support. Implemented at least for mt7621" +msgstr "" + msgid "Restart Firewall" msgstr "" @@ -342,6 +351,9 @@ msgstr "" msgid "Rewrite to source %s, %s" msgstr "" +msgid "Routing/NAT Offloading" +msgstr "" + msgid "Rule is disabled" msgstr "" @@ -357,6 +369,12 @@ msgstr "" msgid "Saturday" msgstr "" +msgid "Software based offloading for routing/NAT" +msgstr "" + +msgid "Software flow offloading" +msgstr "" + msgid "Source IP address" msgstr "" diff --git a/applications/luci-app-firewall/po/no/firewall.po b/applications/luci-app-firewall/po/no/firewall.po index e9ecb2b63..2a13b6b3c 100644 --- a/applications/luci-app-firewall/po/no/firewall.po +++ b/applications/luci-app-firewall/po/no/firewall.po @@ -122,6 +122,9 @@ msgstr "Aktiver SYN-flood beskyttelse" msgid "Enable logging on this zone" msgstr "Aktiver logging av denne sonen" +msgid "Experimental feature. Not fully compatible with QoS/SQM." +msgstr "" + msgid "External IP address" msgstr "Ekstern IP adressse" @@ -174,6 +177,9 @@ msgstr "Fra %s i %s med kilde %s og %s" msgid "General Settings" msgstr "Generelle Innstillinger" +msgid "Hardware flow offloading" +msgstr "" + msgid "IP" msgstr "" @@ -333,6 +339,9 @@ msgstr "" msgid "Refuse input" msgstr "" +msgid "Requires hardware NAT support. Implemented at least for mt7621" +msgstr "" + msgid "Restart Firewall" msgstr "" @@ -361,6 +370,9 @@ msgstr "Omskriv til kilde %s" msgid "Rewrite to source %s, %s" msgstr "Omskriv til kilde %s, %s" +msgid "Routing/NAT Offloading" +msgstr "" + msgid "Rule is disabled" msgstr "" @@ -376,6 +388,12 @@ msgstr "SNAT port" msgid "Saturday" msgstr "" +msgid "Software based offloading for routing/NAT" +msgstr "" + +msgid "Software flow offloading" +msgstr "" + msgid "Source IP address" msgstr "Kilde IP adresse" diff --git a/applications/luci-app-firewall/po/pl/firewall.po b/applications/luci-app-firewall/po/pl/firewall.po index fe4806023..a08a1e560 100644 --- a/applications/luci-app-firewall/po/pl/firewall.po +++ b/applications/luci-app-firewall/po/pl/firewall.po @@ -129,6 +129,9 @@ msgstr "WÅ‚Ä…cz ochronÄ™ przed atakiem SYN-flood" msgid "Enable logging on this zone" msgstr "WÅ‚Ä…cz logowanie na tej strefy" +msgid "Experimental feature. Not fully compatible with QoS/SQM." +msgstr "" + msgid "External IP address" msgstr "ZewnÄ™trzne adresy IP" @@ -183,6 +186,9 @@ msgstr "Z %s w %s ze źródÅ‚em %s i %s" msgid "General Settings" msgstr "Ustawienia ogólne" +msgid "Hardware flow offloading" +msgstr "" + msgid "IP" msgstr "" @@ -342,6 +348,9 @@ msgstr "" msgid "Refuse input" msgstr "" +msgid "Requires hardware NAT support. Implemented at least for mt7621" +msgstr "" + msgid "Restart Firewall" msgstr "" @@ -374,6 +383,9 @@ msgstr "Przepisz do źródÅ‚a %s" msgid "Rewrite to source %s, %s" msgstr "Przepisz do źródÅ‚a %s, %s" +msgid "Routing/NAT Offloading" +msgstr "" + msgid "Rule is disabled" msgstr "" @@ -389,6 +401,12 @@ msgstr "Port SNAT" msgid "Saturday" msgstr "" +msgid "Software based offloading for routing/NAT" +msgstr "" + +msgid "Software flow offloading" +msgstr "" + msgid "Source IP address" msgstr "ŹródÅ‚owy adres IP" diff --git a/applications/luci-app-firewall/po/pt-br/firewall.po b/applications/luci-app-firewall/po/pt-br/firewall.po index b49adccdd..7da028bee 100644 --- a/applications/luci-app-firewall/po/pt-br/firewall.po +++ b/applications/luci-app-firewall/po/pt-br/firewall.po @@ -127,6 +127,9 @@ msgstr "Habilite proteção contra SYN-flood" msgid "Enable logging on this zone" msgstr "Habilite o registro nesta zona" +msgid "Experimental feature. Not fully compatible with QoS/SQM." +msgstr "" + msgid "External IP address" msgstr "Endereço IP externo" @@ -178,6 +181,9 @@ msgstr "Vindo de %s em %s com origem %s e %s" msgid "General Settings" msgstr "Configurações Gerais" +msgid "Hardware flow offloading" +msgstr "" + msgid "IP" msgstr "" @@ -337,6 +343,9 @@ msgstr "" msgid "Refuse input" msgstr "" +msgid "Requires hardware NAT support. Implemented at least for mt7621" +msgstr "" + msgid "Restart Firewall" msgstr "Reiniciar o Firewall" @@ -365,6 +374,9 @@ msgstr "Reescrever para a origem %s" msgid "Rewrite to source %s, %s" msgstr "Reescrever para a origem %s, %s" +msgid "Routing/NAT Offloading" +msgstr "" + msgid "Rule is disabled" msgstr "" @@ -380,6 +392,12 @@ msgstr "Porta da SNAT" msgid "Saturday" msgstr "Sábado" +msgid "Software based offloading for routing/NAT" +msgstr "" + +msgid "Software flow offloading" +msgstr "" + msgid "Source IP address" msgstr "Endereço IP de origem" diff --git a/applications/luci-app-firewall/po/pt/firewall.po b/applications/luci-app-firewall/po/pt/firewall.po index 29a7c7c2c..543489e1a 100644 --- a/applications/luci-app-firewall/po/pt/firewall.po +++ b/applications/luci-app-firewall/po/pt/firewall.po @@ -128,6 +128,9 @@ msgstr "Ativar a Proteção SYN-flood" msgid "Enable logging on this zone" msgstr "Ativar registo nesta zona" +msgid "Experimental feature. Not fully compatible with QoS/SQM." +msgstr "" + msgid "External IP address" msgstr "Endereço IP externo" @@ -179,6 +182,9 @@ msgstr "De %s em %s com origem %s e %s" msgid "General Settings" msgstr "Definições Gerais" +msgid "Hardware flow offloading" +msgstr "" + msgid "IP" msgstr "" @@ -339,6 +345,9 @@ msgstr "" msgid "Refuse input" msgstr "" +msgid "Requires hardware NAT support. Implemented at least for mt7621" +msgstr "" + msgid "Restart Firewall" msgstr "" @@ -365,6 +374,9 @@ msgstr "Re-escrever para a origem %s" msgid "Rewrite to source %s, %s" msgstr "Re-escrever para a origem %s, %s" +msgid "Routing/NAT Offloading" +msgstr "" + msgid "Rule is disabled" msgstr "" @@ -380,6 +392,12 @@ msgstr "Porta SNAT" msgid "Saturday" msgstr "" +msgid "Software based offloading for routing/NAT" +msgstr "" + +msgid "Software flow offloading" +msgstr "" + msgid "Source IP address" msgstr "Endereço IP de origem" diff --git a/applications/luci-app-firewall/po/ro/firewall.po b/applications/luci-app-firewall/po/ro/firewall.po index cc4d7a62a..937efe722 100644 --- a/applications/luci-app-firewall/po/ro/firewall.po +++ b/applications/luci-app-firewall/po/ro/firewall.po @@ -123,6 +123,9 @@ msgstr "Activează protecÅ£ia SYN-flood" msgid "Enable logging on this zone" msgstr "Activeaza log in aceasta zona" +msgid "Experimental feature. Not fully compatible with QoS/SQM." +msgstr "" + msgid "External IP address" msgstr "Adresă IP externă" @@ -174,6 +177,9 @@ msgstr "" msgid "General Settings" msgstr "Setari generale" +msgid "Hardware flow offloading" +msgstr "" + msgid "IP" msgstr "" @@ -321,6 +327,9 @@ msgstr "" msgid "Refuse input" msgstr "" +msgid "Requires hardware NAT support. Implemented at least for mt7621" +msgstr "" + msgid "Restart Firewall" msgstr "" @@ -347,6 +356,9 @@ msgstr "" msgid "Rewrite to source %s, %s" msgstr "" +msgid "Routing/NAT Offloading" +msgstr "" + msgid "Rule is disabled" msgstr "" @@ -362,6 +374,12 @@ msgstr "" msgid "Saturday" msgstr "" +msgid "Software based offloading for routing/NAT" +msgstr "" + +msgid "Software flow offloading" +msgstr "" + msgid "Source IP address" msgstr "Sursă adresă IP" diff --git a/applications/luci-app-firewall/po/ru/firewall.po b/applications/luci-app-firewall/po/ru/firewall.po index b8611af78..528756d7e 100644 --- a/applications/luci-app-firewall/po/ru/firewall.po +++ b/applications/luci-app-firewall/po/ru/firewall.po @@ -130,6 +130,9 @@ msgstr "Включить защиту<br />от SYN-flood атак" msgid "Enable logging on this zone" msgstr "Включить журналирование в Ñтой зоне" +msgid "Experimental feature. Not fully compatible with QoS/SQM." +msgstr "" + msgid "External IP address" msgstr "Внешний IP-адреÑ" @@ -181,6 +184,9 @@ msgstr "Из %s в %s Ñ Ð¸Ñточниками %s и %s" msgid "General Settings" msgstr "ОÑновные наÑтройки" +msgid "Hardware flow offloading" +msgstr "" + msgid "IP" msgstr "IP-адреÑ" @@ -346,6 +352,9 @@ msgstr "СбраÑывать перенаправление" msgid "Refuse input" msgstr "СбраÑывать входÑщий трафик" +msgid "Requires hardware NAT support. Implemented at least for mt7621" +msgstr "" + msgid "Restart Firewall" msgstr "ПерезапуÑтить межÑетевой Ñкран" @@ -374,6 +383,9 @@ msgstr "ПеренаправлÑÑ‚ÑŒ к иÑточнику %s" msgid "Rewrite to source %s, %s" msgstr "ПеренаправлÑÑ‚ÑŒ к иÑточнику %s, %s" +msgid "Routing/NAT Offloading" +msgstr "" + msgid "Rule is disabled" msgstr "Правило отключено" @@ -389,6 +401,12 @@ msgstr "Порт SNAT" msgid "Saturday" msgstr "Суббота" +msgid "Software based offloading for routing/NAT" +msgstr "" + +msgid "Software flow offloading" +msgstr "" + msgid "Source IP address" msgstr "IP-Ð°Ð´Ñ€ÐµÑ Ð¸Ñточника" diff --git a/applications/luci-app-firewall/po/sk/firewall.po b/applications/luci-app-firewall/po/sk/firewall.po index a185625a0..a382bde7d 100644 --- a/applications/luci-app-firewall/po/sk/firewall.po +++ b/applications/luci-app-firewall/po/sk/firewall.po @@ -119,6 +119,9 @@ msgstr "" msgid "Enable logging on this zone" msgstr "" +msgid "Experimental feature. Not fully compatible with QoS/SQM." +msgstr "" + msgid "External IP address" msgstr "" @@ -170,6 +173,9 @@ msgstr "" msgid "General Settings" msgstr "" +msgid "Hardware flow offloading" +msgstr "" + msgid "IP" msgstr "" @@ -317,6 +323,9 @@ msgstr "" msgid "Refuse input" msgstr "" +msgid "Requires hardware NAT support. Implemented at least for mt7621" +msgstr "" + msgid "Restart Firewall" msgstr "" @@ -343,6 +352,9 @@ msgstr "" msgid "Rewrite to source %s, %s" msgstr "" +msgid "Routing/NAT Offloading" +msgstr "" + msgid "Rule is disabled" msgstr "" @@ -358,6 +370,12 @@ msgstr "" msgid "Saturday" msgstr "" +msgid "Software based offloading for routing/NAT" +msgstr "" + +msgid "Software flow offloading" +msgstr "" + msgid "Source IP address" msgstr "" diff --git a/applications/luci-app-firewall/po/sv/firewall.po b/applications/luci-app-firewall/po/sv/firewall.po index c98eafa09..d5f6a2d8a 100644 --- a/applications/luci-app-firewall/po/sv/firewall.po +++ b/applications/luci-app-firewall/po/sv/firewall.po @@ -120,6 +120,9 @@ msgstr "" msgid "Enable logging on this zone" msgstr "Aktivera loggning i den här zonen" +msgid "Experimental feature. Not fully compatible with QoS/SQM." +msgstr "" + msgid "External IP address" msgstr "Extern IP-adress" @@ -171,6 +174,9 @@ msgstr "FrÃ¥n %s i %s med källa %s och %s" msgid "General Settings" msgstr "Generella inställningar" +msgid "Hardware flow offloading" +msgstr "" + msgid "IP" msgstr "" @@ -323,6 +329,9 @@ msgstr "" msgid "Refuse input" msgstr "" +msgid "Requires hardware NAT support. Implemented at least for mt7621" +msgstr "" + msgid "Restart Firewall" msgstr "Starta om brandvägg" @@ -349,6 +358,9 @@ msgstr "Skriv om igen till källan %s" msgid "Rewrite to source %s, %s" msgstr "" +msgid "Routing/NAT Offloading" +msgstr "" + msgid "Rule is disabled" msgstr "" @@ -364,6 +376,12 @@ msgstr "SNAT-port" msgid "Saturday" msgstr "Lördag" +msgid "Software based offloading for routing/NAT" +msgstr "" + +msgid "Software flow offloading" +msgstr "" + msgid "Source IP address" msgstr "IP-adress för källa" diff --git a/applications/luci-app-firewall/po/templates/firewall.pot b/applications/luci-app-firewall/po/templates/firewall.pot index 62c4a2e84..6ff4c3ca0 100644 --- a/applications/luci-app-firewall/po/templates/firewall.pot +++ b/applications/luci-app-firewall/po/templates/firewall.pot @@ -112,6 +112,9 @@ msgstr "" msgid "Enable logging on this zone" msgstr "" +msgid "Experimental feature. Not fully compatible with QoS/SQM." +msgstr "" + msgid "External IP address" msgstr "" @@ -163,6 +166,9 @@ msgstr "" msgid "General Settings" msgstr "" +msgid "Hardware flow offloading" +msgstr "" + msgid "IP" msgstr "" @@ -310,6 +316,9 @@ msgstr "" msgid "Refuse input" msgstr "" +msgid "Requires hardware NAT support. Implemented at least for mt7621" +msgstr "" + msgid "Restart Firewall" msgstr "" @@ -336,6 +345,9 @@ msgstr "" msgid "Rewrite to source %s, %s" msgstr "" +msgid "Routing/NAT Offloading" +msgstr "" + msgid "Rule is disabled" msgstr "" @@ -351,6 +363,12 @@ msgstr "" msgid "Saturday" msgstr "" +msgid "Software based offloading for routing/NAT" +msgstr "" + +msgid "Software flow offloading" +msgstr "" + msgid "Source IP address" msgstr "" diff --git a/applications/luci-app-firewall/po/tr/firewall.po b/applications/luci-app-firewall/po/tr/firewall.po index f23d10aaf..1dd1e6f9c 100644 --- a/applications/luci-app-firewall/po/tr/firewall.po +++ b/applications/luci-app-firewall/po/tr/firewall.po @@ -119,6 +119,9 @@ msgstr "" msgid "Enable logging on this zone" msgstr "" +msgid "Experimental feature. Not fully compatible with QoS/SQM." +msgstr "" + msgid "External IP address" msgstr "" @@ -170,6 +173,9 @@ msgstr "" msgid "General Settings" msgstr "" +msgid "Hardware flow offloading" +msgstr "" + msgid "IP" msgstr "" @@ -317,6 +323,9 @@ msgstr "" msgid "Refuse input" msgstr "" +msgid "Requires hardware NAT support. Implemented at least for mt7621" +msgstr "" + msgid "Restart Firewall" msgstr "" @@ -343,6 +352,9 @@ msgstr "" msgid "Rewrite to source %s, %s" msgstr "" +msgid "Routing/NAT Offloading" +msgstr "" + msgid "Rule is disabled" msgstr "" @@ -358,6 +370,12 @@ msgstr "" msgid "Saturday" msgstr "" +msgid "Software based offloading for routing/NAT" +msgstr "" + +msgid "Software flow offloading" +msgstr "" + msgid "Source IP address" msgstr "" diff --git a/applications/luci-app-firewall/po/uk/firewall.po b/applications/luci-app-firewall/po/uk/firewall.po index de72ec6e0..86ff65edf 100644 --- a/applications/luci-app-firewall/po/uk/firewall.po +++ b/applications/luci-app-firewall/po/uk/firewall.po @@ -127,6 +127,9 @@ msgstr "Увімкнути захиÑÑ‚ від SYN-flood" msgid "Enable logging on this zone" msgstr "Увімкнути реєÑÑ‚Ñ€ÑƒÐ²Ð°Ð½Ð½Ñ Ñƒ цій зоні" +msgid "Experimental feature. Not fully compatible with QoS/SQM." +msgstr "" + msgid "External IP address" msgstr "Ð—Ð¾Ð²Ð½Ñ–ÑˆÐ½Ñ IP-адреÑа" @@ -178,6 +181,9 @@ msgstr "%s у %s з вихідним %s та %s" msgid "General Settings" msgstr "Загальні наÑтройки" +msgid "Hardware flow offloading" +msgstr "" + msgid "IP" msgstr "" @@ -337,6 +343,9 @@ msgstr "" msgid "Refuse input" msgstr "" +msgid "Requires hardware NAT support. Implemented at least for mt7621" +msgstr "" + msgid "Restart Firewall" msgstr "" @@ -365,6 +374,9 @@ msgstr "Ð¿ÐµÑ€ÐµÐ·Ð°Ð¿Ð¸Ñ Ð½Ð° вихідний %s" msgid "Rewrite to source %s, %s" msgstr "Ð¿ÐµÑ€ÐµÐ·Ð°Ð¿Ð¸Ñ Ð½Ð° вихідний %s, %s" +msgid "Routing/NAT Offloading" +msgstr "" + msgid "Rule is disabled" msgstr "" @@ -380,6 +392,12 @@ msgstr "Порт SNAT" msgid "Saturday" msgstr "" +msgid "Software based offloading for routing/NAT" +msgstr "" + +msgid "Software flow offloading" +msgstr "" + msgid "Source IP address" msgstr "IP-адреÑа джерела" diff --git a/applications/luci-app-firewall/po/vi/firewall.po b/applications/luci-app-firewall/po/vi/firewall.po index 24452ff1c..bd33afcd0 100644 --- a/applications/luci-app-firewall/po/vi/firewall.po +++ b/applications/luci-app-firewall/po/vi/firewall.po @@ -126,6 +126,9 @@ msgstr "SYN-flood bảo vệ " msgid "Enable logging on this zone" msgstr "" +msgid "Experimental feature. Not fully compatible with QoS/SQM." +msgstr "" + msgid "External IP address" msgstr "" @@ -177,6 +180,9 @@ msgstr "" msgid "General Settings" msgstr "" +msgid "Hardware flow offloading" +msgstr "" + msgid "IP" msgstr "" @@ -327,6 +333,9 @@ msgstr "" msgid "Refuse input" msgstr "" +msgid "Requires hardware NAT support. Implemented at least for mt7621" +msgstr "" + msgid "Restart Firewall" msgstr "" @@ -353,6 +362,9 @@ msgstr "" msgid "Rewrite to source %s, %s" msgstr "" +msgid "Routing/NAT Offloading" +msgstr "" + msgid "Rule is disabled" msgstr "" @@ -368,6 +380,12 @@ msgstr "" msgid "Saturday" msgstr "" +msgid "Software based offloading for routing/NAT" +msgstr "" + +msgid "Software flow offloading" +msgstr "" + #, fuzzy msgid "Source IP address" msgstr "Äỉa chỉ MAC nguồn" diff --git a/applications/luci-app-firewall/po/zh-cn/firewall.po b/applications/luci-app-firewall/po/zh-cn/firewall.po index 9e9c64d67..46da547c0 100644 --- a/applications/luci-app-firewall/po/zh-cn/firewall.po +++ b/applications/luci-app-firewall/po/zh-cn/firewall.po @@ -124,6 +124,9 @@ msgstr "å¯ç”¨ SYN-flood 防御" msgid "Enable logging on this zone" msgstr "å¯ç”¨æ¤åŒºåŸŸçš„日志记录" +msgid "Experimental feature. Not fully compatible with QoS/SQM." +msgstr "实验特性。与 QoS/SQM ä¸å®Œå…¨å…¼å®¹ã€‚" + msgid "External IP address" msgstr "外部 IP 地å€" @@ -175,6 +178,9 @@ msgstr "æ¥è‡ª %s ä½äºŽ %s æºç«¯å£ %s æº MAC %s" msgid "General Settings" msgstr "基本设置" +msgid "Hardware flow offloading" +msgstr "硬件æµé‡å¸è½½" + msgid "IP" msgstr "IP" @@ -323,6 +329,9 @@ msgstr "æ‹’ç»è½¬å‘" msgid "Refuse input" msgstr "æ‹’ç»å…¥ç«™" +msgid "Requires hardware NAT support. Implemented at least for mt7621" +msgstr "需è¦ç¡¬ä»¶ NAT 支æŒã€‚ç›®å‰ mt7621 已实现" + msgid "Restart Firewall" msgstr "é‡å¯é˜²ç«å¢™" @@ -349,6 +358,9 @@ msgstr "æºåœ°å€æ”¹å†™æˆ %s" msgid "Rewrite to source %s, %s" msgstr "æºåœ°å€æ”¹å†™æˆ %s, %s" +msgid "Routing/NAT Offloading" +msgstr "Routing/NAT å¸è½½" + msgid "Rule is disabled" msgstr "规则已ç¦ç”¨" @@ -364,6 +376,12 @@ msgstr "SNAT 端å£" msgid "Saturday" msgstr "星期å…" +msgid "Software based offloading for routing/NAT" +msgstr "基于软件的 Routing/NAT å¸è½½" + +msgid "Software flow offloading" +msgstr "软件æµé‡å¸è½½" + msgid "Source IP address" msgstr "æº IP 地å€" diff --git a/applications/luci-app-firewall/po/zh-tw/firewall.po b/applications/luci-app-firewall/po/zh-tw/firewall.po index afc9c4e33..1fbe970dd 100644 --- a/applications/luci-app-firewall/po/zh-tw/firewall.po +++ b/applications/luci-app-firewall/po/zh-tw/firewall.po @@ -124,6 +124,9 @@ msgstr "啟用 SYN-flood 防禦" msgid "Enable logging on this zone" msgstr "啟用æ¤å€åŸŸçš„日誌記錄" +msgid "Experimental feature. Not fully compatible with QoS/SQM." +msgstr "" + msgid "External IP address" msgstr "外部 IP ä½å€" @@ -175,6 +178,9 @@ msgstr "來自 %s ä½æ–¼ %s æºåŸ %s æº MAC %s" msgid "General Settings" msgstr "基本è¨å®š" +msgid "Hardware flow offloading" +msgstr "" + msgid "IP" msgstr "" @@ -322,6 +328,9 @@ msgstr "" msgid "Refuse input" msgstr "" +msgid "Requires hardware NAT support. Implemented at least for mt7621" +msgstr "" + msgid "Restart Firewall" msgstr "é‡å•Ÿé˜²ç«ç‰†" @@ -348,6 +357,9 @@ msgstr "æºä½å€æ”¹å¯«æˆ %s" msgid "Rewrite to source %s, %s" msgstr "æºä½å€æ”¹å¯«æˆ %s, %s" +msgid "Routing/NAT Offloading" +msgstr "" + msgid "Rule is disabled" msgstr "" @@ -363,6 +375,12 @@ msgstr "SNAT åŸ " msgid "Saturday" msgstr "星期å…" +msgid "Software based offloading for routing/NAT" +msgstr "" + +msgid "Software flow offloading" +msgstr "" + msgid "Source IP address" msgstr "æº IP ä½å€" diff --git a/applications/luci-app-ltqtapi/luasrc/view/telephony_status.htm b/applications/luci-app-ltqtapi/luasrc/view/telephony_status.htm index d861ef9fc..2fd7168bd 100644 --- a/applications/luci-app-ltqtapi/luasrc/view/telephony_status.htm +++ b/applications/luci-app-ltqtapi/luasrc/view/telephony_status.htm @@ -5,13 +5,12 @@ XHR.poll(5, '<%=url('admin/telephony/status')%>', null, var tb = document.getElementById('telephony_status_table'); if (st && tb) { - tb.deleteRow(1); - var tr = tb.insertRow(-1); - tr.className = 'cbi-section-table-row cbi-rowstyle-1'; - - tr.insertCell(-1).innerHTML = st.status; - tr.insertCell(-1).innerHTML = st.line1; - tr.insertCell(-1).innerHTML = st.line2; + tb.removeChild(tb.firstChild); + tb.appendChild(E('<div class="tr cbi-section-table-row cbi-rowstyle-1">', [ + E('<div class="td">', st.status), + E('<div class="td">', st.line1), + E('<div class="td">', st.line2) + ])); } } ); @@ -19,14 +18,14 @@ XHR.poll(5, '<%=url('admin/telephony/status')%>', null, <fieldset class="cbi-section"> <legend><%:Current Telephony State%></legend> - <table class="cbi-section-table" id="telephony_status_table"> - <tr class="cbi-section-table-titles"> - <th class="cbi-section-table-cell"><%:Uplink%></th> - <th class="cbi-section-table-cell"><%:Port1%></th> - <th class="cbi-section-table-cell"><%:Port2%></th> - </tr> - <tr class="cbi-section-table-row"> - <td colspan="5"><em><br /><%:Collecting data...%></em></td> - </tr> - </table> + <div class="table cbi-section-table" id="telephony_status_table"> + <div class="tr cbi-section-table-titles"> + <div class="th cbi-section-table-cell"><%:Uplink%></div> + <div class="th cbi-section-table-cell"><%:Port1%></div> + <div class="th cbi-section-table-cell"><%:Port2%></div> + </div> + <div class="tr cbi-section-table-row"> + <div class="td" colspan="5"><em><br /><%:Collecting data...%></em></div> + </div> + </div> </fieldset> diff --git a/applications/luci-app-lxc/Makefile b/applications/luci-app-lxc/Makefile index 85cae5c40..379cccbfc 100644 --- a/applications/luci-app-lxc/Makefile +++ b/applications/luci-app-lxc/Makefile @@ -7,7 +7,7 @@ include $(TOPDIR)/rules.mk LUCI_TITLE:=LXC management Web UI -LUCI_DEPENDS:=+luci-mod-admin-full +lxc +lxc-attach +lxc-console +lxc-create +liblxc +rpcd-mod-lxc +getopt +LUCI_DEPENDS:=+luci-mod-admin-full +lxc +lxc-attach +lxc-console +lxc-create +liblxc +rpcd-mod-lxc +getopt +!LXC_BUSYBOX_OPTIONS:tar LUCI_PKGARCH:=all PKG_MAINTAINER:=Petar Koretic <petar.koretic@sartura.hr> diff --git a/applications/luci-app-lxc/luasrc/controller/lxc.lua b/applications/luci-app-lxc/luasrc/controller/lxc.lua index cc490f0b8..c7fe63f87 100644 --- a/applications/luci-app-lxc/luasrc/controller/lxc.lua +++ b/applications/luci-app-lxc/luasrc/controller/lxc.lua @@ -14,74 +14,43 @@ Author: Petar Koretic <petar.koretic@sartura.hr> ]]-- -local uci = require "luci.model.uci" -local util = require "luci.util" -local nixio = require "nixio" - module("luci.controller.lxc", package.seeall) -function fork_exec(command) - local pid = nixio.fork() - if pid > 0 then - return - elseif pid == 0 then - -- change to root dir - nixio.chdir("/") - - -- patch stdin, out, err to /dev/null - local null = nixio.open("/dev/null", "w+") - if null then - nixio.dup(null, nixio.stderr) - nixio.dup(null, nixio.stdout) - nixio.dup(null, nixio.stdin) - if null:fileno() > 2 then - null:close() - end - end +local uci = require "luci.model.uci".cursor() +local util = require "luci.util" +local fs = require "nixio" - -- replace with target command - nixio.exec("/bin/sh", "-c", command) +function index() + if not nixio.fs.access("/etc/config/lxc") then + return end -end -function index() page = node("admin", "services", "lxc") page.target = cbi("lxc") page.title = _("LXC Containers") page.order = 70 - page = entry({"admin", "services", "lxc_create"}, call("lxc_create"), nil) - page.leaf = true - - page = entry({"admin", "services", "lxc_action"}, call("lxc_action"), nil) - page.leaf = true - - page = entry({"admin", "services", "lxc_get_downloadable"}, call("lxc_get_downloadable"), nil) - page.leaf = true - - page = entry({"admin", "services", "lxc_configuration_get"}, call("lxc_configuration_get"), nil) - page.leaf = true - - page = entry({"admin", "services", "lxc_configuration_set"}, call("lxc_configuration_set"), nil) - page.leaf = true - + entry({"admin", "services", "lxc_create"}, call("lxc_create"), nil).leaf = true + entry({"admin", "services", "lxc_action"}, call("lxc_action"), nil).leaf = true + entry({"admin", "services", "lxc_get_downloadable"}, call("lxc_get_downloadable"), nil).leaf = true + entry({"admin", "services", "lxc_configuration_get"}, call("lxc_configuration_get"), nil).leaf = true + entry({"admin", "services", "lxc_configuration_set"}, call("lxc_configuration_set"), nil).leaf = true end function lxc_get_downloadable() local target = lxc_get_arch_target() local templates = {} + local ssl_status = lxc_get_ssl_status() - local f = io.popen('sh /usr/share/lxc/templates/lxc-download --list --no-validate --server %s' - % util.shellquote(uci.cursor():get("lxc", "lxc", "url")), 'r') - + local f = io.popen('sh /usr/share/lxc/templates/lxc-download --list %s --server %s 2>/dev/null' + %{ ssl_status, util.shellquote(uci:get("lxc", "lxc", "url")) }, 'r') local line for line in f:lines() do local dist, version, dist_target = line:match("^(%S+)%s+(%S+)%s+(%S+)%s+default%s+%S+$") - if dist and version and dist_target == target then + if dist and version and dist_target and dist_target == target then templates[#templates+1] = "%s:%s" %{ dist, version } end end - f:close() luci.http.prepare_content("application/json") @@ -91,23 +60,26 @@ end function lxc_create(lxc_name, lxc_template) luci.http.prepare_content("text/plain") - if not pcall(dofile, "/etc/openwrt_release") then - return luci.http.write("1") + local check = lxc_get_config_path() + if not check then + return end - local lxc_dist, lxc_release = lxc_template:match("^(.+):(.+)$") + local ssl_status = lxc_get_ssl_status() + local src_err + local lxc_dist, lxc_release = lxc_template:match("^(.+):(.+)$") luci.http.write(util.ubus("lxc", "create", { name = lxc_name, template = "download", args = { - "--server", uci.cursor():get("lxc", "lxc", "url"), - "--no-validate", + "--server", uci:get("lxc", "lxc", "url"), "--dist", lxc_dist, "--release", lxc_release, - "--arch", lxc_get_arch_target() + "--arch", lxc_get_arch_target(), + ssl_status } - })) + }), src_err) end function lxc_action(lxc_action, lxc_name) @@ -121,11 +93,28 @@ function lxc_get_config_path() local f = io.open("/etc/lxc/lxc.conf", "r") local content = f:read("*all") f:close() + local ret = content:match('^%s*lxc.lxcpath%s*=%s*([^%s]*)') if ret then - return ret .. "/" + if nixio.fs.access(ret) then + local min_space = tonumber(uci:get("lxc", "lxc", "min_space")) or 100000 + local free_space = tonumber(util.exec("df " ..ret.. " | awk '{if(NR==2)print $4}'")) + if free_space and free_space >= min_space then + local min_temp = tonumber(uci:get("lxc", "lxc", "min_temp")) or 100000 + local free_temp = tonumber(util.exec("df /tmp | awk '{if(NR==2)print $4}'")) + if free_temp and free_temp >= min_temp then + return ret .. "/" + else + util.perror("lxc error: not enough temporary space (< " ..min_temp.. " KB)") + end + else + util.perror("lxc error: not enough space (< " ..min_space.. " KB)") + end + else + util.perror("lxc error: directory not found") + end else - return "/srv/lxc/" + util.perror("lxc error: config path is empty") end end @@ -142,15 +131,16 @@ end function lxc_configuration_set(lxc_name) luci.http.prepare_content("text/plain") - local lxc_configuration = luci.http.formvalue("lxc_configuration") - + local lxc_configuration = luci.http.formvalue("lxc_conf") if lxc_configuration == nil then - return luci.http.write("1") + util.perror("lxc error: config formvalue is empty") + return end local f, err = io.open(lxc_get_config_path() .. lxc_name .. "/config","w+") if not f then - return luci.http.write("2") + util.perror("lxc error: config file not found") + return end f:write(lxc_configuration) @@ -160,7 +150,7 @@ function lxc_configuration_set(lxc_name) end function lxc_get_arch_target() - local target = nixio.uname().machine + local target = fs.uname().machine local target_map = { armv5 = "armel", armv6 = "armel", @@ -168,13 +158,21 @@ function lxc_get_arch_target() armv8 = "arm64", x86_64 = "amd64" } - local k, v for k, v in pairs(target_map) do - if target:find(k) then + if target:find("^" ..k.. "$") then return v end end - return target end + +function lxc_get_ssl_status() + local ssl_enabled = uci:get("lxc", "lxc", "ssl_enabled") + local ssl_status = "--no-validate" + + if ssl_enabled and ssl_enabled == "1" then + ssl_status = "" + end + return ssl_status +end diff --git a/applications/luci-app-lxc/luasrc/model/cbi/lxc.lua b/applications/luci-app-lxc/luasrc/model/cbi/lxc.lua index ac0fdff33..8a8fc2be0 100644 --- a/applications/luci-app-lxc/luasrc/model/cbi/lxc.lua +++ b/applications/luci-app-lxc/luasrc/model/cbi/lxc.lua @@ -14,18 +14,35 @@ Author: Petar Koretic <petar.koretic@sartura.hr> ]]-- -local fs = require "nixio.fs" - -m = Map("lxc", translate("LXC Containers")) - -if fs.access("/etc/config/lxc") then - m:section(SimpleSection).template = "lxc" - - s = m:section(TypedSection, "lxc", translate("Options")) - s.anonymous = true - s.addremove = false - - s:option(Value, "url", translate("Containers URL")) -end +m = Map("lxc", translate("LXC Containers"), + translate("<b>Please note:</b> For LXC Containers you need a custom OpenWrt image.<br />") + .. translate("The image should include at least support for 'kernel cgroups', 'kernel namespaces' and 'miscellaneous LXC related options'.")) +m:section(SimpleSection).template = "lxc" + +s = m:section(TypedSection, "lxc", translate("Options")) +s.anonymous = true + +o1 = s:option(Value, "url", translate("Containers URL")) +o1:value("images.linuxcontainers.org") +o1:value("repo.turris.cz/lxc", "repo.turris.cz/lxc (SSL req.)") +o1.default = "images.linuxcontainers.org" +o1.rmempty = false + +o2 = s:option(Flag, "ssl_enabled", translate("Enable SSL"), + translate("Enable optional SSL encryption support. This requires additional packages like 'wget', 'ca-certificates', 'gnupg' and 'gnupg-utils'.")) +o2.default = o2.disabled +o2.rmempty = false + +o3 = s:option(Value, "min_space", translate("Free Space Threshold"), + translate("Minimum required free space for LXC Container creation in KB")) +o3.default = "100000" +o3.datatype = "min(50000)" +o3.rmempty = false + +o4 = s:option(Value, "min_temp", translate("Free Temp Threshold"), + translate("Minimum required free temp space for LXC Container creation in KB")) +o4.default = "100000" +o4.datatype = "min(50000)" +o4.rmempty = false return m diff --git a/applications/luci-app-lxc/luasrc/view/lxc.htm b/applications/luci-app-lxc/luasrc/view/lxc.htm index edfff8e06..e703d6c88 100644 --- a/applications/luci-app-lxc/luasrc/view/lxc.htm +++ b/applications/luci-app-lxc/luasrc/view/lxc.htm @@ -14,16 +14,21 @@ Author: Petar Koretic <petar.koretic@sartura.hr> -%> +<%- +local fs = require "nixio" +local target = fs.uname().machine +-%> + <fieldset class="cbi-section"> <legend><%:Available Containers%></legend> <div class="cbi-section-node"> - <table id="t_lxc_list" class="cbi-section-table"> - <tr class="cbi-section-table-titles"> - <th class="cbi-section-table-cell"><%:Name%></th> - <th class="cbi-section-table-cell"><%:Status%></th> - <th class="cbi-section-table-cell"><%:Actions%></th> - </tr> - </table> + <div class="table cbi-section-table" id="t_lxc_list"> + <div class="tr cbi-section-table-titles"> + <div class="th cbi-section-table-cell"><%:Name%></div> + <div class="th cbi-section-table-cell"><%:Status%></div> + <div class="th cbi-section-table-cell"><%:Actions%></div> + </div> + </div> </div> </fieldset> @@ -31,30 +36,25 @@ Author: Petar Koretic <petar.koretic@sartura.hr> <span id="lxc-list-output"></span> </fieldset> -<hr/> +<hr /> <fieldset class="cbi-section"> <legend><%:Create New Container%></legend> <div class="cbi-section-node"> - <table id="t_lxc_create" class="cbi-section-table"> - <tr class="cbi-section-table-titles"> - <th class="cbi-section-table-cell"><%:Name%></th> - <th class="cbi-section-table-cell"><%:Template%></th> - <th class="cbi-section-table-cell"><%:Actions%></th> - </tr> - <tr id="tr_holder"> - <td> - <input type="text" id="tx_name" placeholder="<%:Enter new name%>" value='' /> - </td> - <td> - <select id="s_template" class="cbi-input-select cbi-button"> - </select> - </td> - <td> - <input type="button" id="bt_create" value="<%:Create%>" onclick="lxc_create(tr_holder)" class="cbi-button cbi-button-add" /> + <div class="table cbi-section-table" id="t_lxc_create"> + <div class="tr cbi-section-table-titles"> + <div class="th cbi-section-table-cell"><%:Name%></div> + <div class="th cbi-section-table-cell"><%:Template%></div> + <div class="th cbi-section-table-cell"><%:Actions%></div> + </div> + <div class="tr cbi-section-table-row" id="div_create"> + <div class="td"><input class="cbi-input-text" type="text" id="tx_name" placeholder="<%:Enter new name%>" value='' /></div> + <div class="td"><select id="s_template" class="cbi-input-select cbi-button"></select></div> + <div class="td"> + <input type="button" id="bt_create" value="<%:Create%>" onclick="lxc_create()" class="cbi-button cbi-button-add" /> <span id="lxc-add-loader" style="display:inline-block; width:16px; height:16px; margin:0 5px"></span> - </td> - </tr> - </table> + </div> + </div> + </div> </div> </fieldset> @@ -62,298 +62,324 @@ Author: Petar Koretic <petar.koretic@sartura.hr> <span id="lxc-add-output"></span> </fieldset> -<hr/> +<hr /> <script type="text/javascript" src="<%=resource%>/cbi.js"></script> -<script type="text/javascript">//<![CDATA[ - - window.img = { "red" : "<%=resource%>/cbi/red.gif", "green" : "<%=resource%>/cbi/green.gif", "purple" : "<%=resource%>/cbi/purple.gif" } - window.states = { "STOPPED" : "red", "RUNNING" : "green", "FROZEN" : "purple"} - - var t_lxc_list = document.getElementById('t_lxc_list'); - var loader_html = '<img src="<%=resource%>/icons/loading.gif" alt="<%:Loading%>" width="16" height="16" style="vertical-align:middle" /> '; - var timeout_msg = 0 - var output_list = document.getElementById("lxc-list-output") - var output_add = document.getElementById("lxc-add-output") - var loader_add = document.getElementById("lxc-add-loader") - - function lxc_create(tr) +<script type="text/javascript"> +//<![CDATA[ + window.img = { "red" : "<%=resource%>/cbi/red.gif", "green" : "<%=resource%>/cbi/green.gif", "purple" : "<%=resource%>/cbi/purple.gif" }; + window.states = { "STOPPED" : "red", "RUNNING" : "green", "FROZEN" : "purple" }; + + var t_lxc_list = document.getElementById('t_lxc_list'); + var loader_html = '<img src="<%=resource%>/icons/loading.gif" alt="<%:Loading%>" width="16" height="16" style="vertical-align:middle" />'; + var output_list = document.getElementById("lxc-list-output"); + var output_add = document.getElementById("lxc-add-output"); + var loader_add = document.getElementById("lxc-add-loader"); + var div_create = document.getElementById("div_create"); + var bt_create = div_create.querySelector("#bt_create"); + + bt_create.disabled = true; + info_message(output_add, "Template download in progress, please be patient!"); + + function lxc_create() { - var lxc_name = tr.querySelector("#tx_name").value.trim() - var lxc_template = tr.querySelector("#s_template").value - var bt_create = tr.querySelector("#bt_create") + var lxc_name = div_create.querySelector("#tx_name").value.replace(/[\s!@#$%^&*()+=\[\]{};':"\\|,<>\/?]/g,''); + var lxc_template = div_create.querySelector("#s_template").value; if (t_lxc_list.querySelector("[data-id='" + lxc_name + "']") != null) - return info_message(output_add, "Container with that name already exists!", 4000) + { + return info_message(output_add, "Container with that name already exists!", 2000); + } - bt_create.disabled = true - output_add.innerHTML = '' + bt_create.disabled = true; + output_add.innerHTML = ''; + + if (!lxc_template) + { + return set_no_template(); + } if (!lxc_name || !lxc_name.length) { - bt_create.disabled = false - return info_message(output_add, "Name cannot be empty!", 4000) + bt_create.disabled = false; + return info_message(output_add, "The 'Name' field must not be empty!", 2000); } - loading(loader_add) + loading(loader_add); new XHR().get('<%=luci.dispatcher.build_url("admin", "services")%>/lxc_create/' + '%h/%h'.format(lxc_name, lxc_template) , null, function(x) { - bt_create.disabled = false - loading(loader_add, 0) + bt_create.disabled = false; + loading(loader_add, 0); if (!x) - info_message(output_add, "Container creation failed!") + { + info_message(output_add, "Container creation failed!", 2000); + } }) } function lxc_create_template(lxc_name, lxc_state) { - var info_row = t_lxc_list.querySelector("#empty") - if (info_row) - t_lxc_list.deleteRow(1) - - var actions = '' - actions += '<input type="button" onclick="action_handler(this)" data-action="start" value="<%:Start%>" class="cbi-button cbi-button-apply" />' - actions+= '<input type="button" onclick="action_handler(this)" data-action="stop" value="<%:Stop%>" class="cbi-button cbi-button-reset" />' - actions+= '<input type="button" onclick="action_handler(this)" data-action="destroy" value="<%:Delete%>" class="cbi-button cbi-button-remove" />' - actions+= ' <select class="cbi-input-select cbi-button" onchange="action_more_handler(this)">\ - <option selected disabled>more</option>\ + if (document.getElementById(lxc_name)) + { + return; + } + + info_message(output_list, ""); + var actions = ''; + actions += '<input type="button" onclick="action_handler(this)" data-action="start" value="<%:Start%>" class="cbi-button cbi-button-apply" />'; + actions += ' <input type="button" onclick="action_handler(this)" data-action="stop" value="<%:Stop%>" class="cbi-button cbi-button-reset" />'; + actions += ' <input type="button" onclick="action_handler(this)" data-action="destroy" value="<%:Delete%>" class="cbi-button cbi-button-remove" />'; + actions += ' <select class="cbi-input-select cbi-button" style="width:10em" onchange="action_more_handler(this)">\ + <option selected="selected" disabled="disabled">more</option>\ <option>configure</option>\ <option>freeze</option>\ <option>unfreeze</option>\ <option>reboot</option>\ - </select>' - actions+= '<span data-loader style="display:inline-block; width:16px; height:16px; margin:0 5px"></span>' - - var row = t_lxc_list.insertRow(-1) - var cell = row.insertCell(-1) - cell.innerHTML = '%q%h%q'.format("<strong>", lxc_name, "</strong>") - cell.width = "30%" - cell.setAttribute("data-id", lxc_name) - - cell = row.insertCell(-1) - cell.width = "20%" - cell.innerHTML = "<img src='"+window.img[lxc_state]+"'/>" - - cell = row.insertCell(-1) - cell.width = "50%" - cell.innerHTML = actions + </select>'; + actions += '<span data-loader="" style="display:inline-block; width:16px; height:16px; margin:0 5px"></span>'; + + var div0 = document.createElement("div"); + div0.className = "tr cbi-section-table-row"; + div0.id = lxc_name; + div0.setAttribute("data-id", lxc_name); + + var div1 = document.createElement("div"); + div1.className = "td"; + div1.style.width = "30%"; + div1.innerHTML = '%q%h%q'.format("<strong>", lxc_name, "</strong>"); + + var div2 = document.createElement("div"); + div2.className = "td"; + div2.style.width = "20%"; + div2.innerHTML = "<img src='"+window.img[lxc_state]+"'/>"; + + var div3 = document.createElement("div"); + div3.className = "td"; + div3.style.width = "50%"; + div3.innerHTML = actions + + document.getElementById("t_lxc_list").appendChild(div0); + div0.appendChild(div1); + div0.appendChild(div2); + div0.appendChild(div3); } function action_handler(self) { - var action = self.getAttribute("data-action"); + var bt_action = self; + var action = self.dataset['action']; + var lxc_name = self.parentNode.parentNode.dataset['id']; + var status_img = self.parentNode.parentNode.querySelector('img'); + var loader = self.parentNode.querySelector('[data-loader]'); - var bt_action = self - var lxc_name = self.parentNode.parentNode.children[0].getAttribute('data-id') - var status_img = self.parentNode.parentNode.querySelector('img') - var loader = self.parentNode.querySelector('[data-loader]') - - bt_action.disabled = true + bt_action.disabled = true; if (action == "stop") { - loading(loader) + loading(loader); new XHR().get('<%=luci.dispatcher.build_url("admin", "services")%>/lxc_action/' + '%h/%h'.format(action, lxc_name), null, function(x, ec) { - loading(loader, 0) - bt_action.disabled = false + loading(loader, 0); + bt_action.disabled = false; if (!x || ec) - return info_message(output_list,"Action failed!") - - set_status(status_img, "red") - + { + return info_message(output_list,"Action failed!", 2000); + } + set_status(status_img, "red"); }); } - else if (action == "start") { - loading(loader) + loading(loader); new XHR().get('<%=luci.dispatcher.build_url("admin", "services")%>/lxc_action/' + '%h/%h'.format(action, lxc_name), null, function(x, data) { - loading(loader, 0) - bt_action.disabled = false - - //FIXME: uncomment after fixing 'lxc-start' - if (!x /*|| ec */) - return info_message(output_list,"Action failed!") + loading(loader, 0); + bt_action.disabled = false; - //FIXME: uncomment after fixing 'lxc-start' - //set_status(status_img, "green") + if (!x || data) + { + return info_message(output_list,"Action failed!", 2000); + } + set_status(status_img, "green"); }); } - else if (action == "destroy") { - if (!confirm("This will completely remove LXC container from the disk. Are you sure? (container will be stopped if running)")) - return + var div = self.parentNode.parentNode + var img = div.querySelector('img') + + if (img.getAttribute('src') != window.img["red"]) + { + bt_action.disabled = false; + return info_message(output_list,"Container is still running!", 2000); + } - loading(loader) + if (!confirm("This will completely remove a stopped LXC container from disk. Are you sure?")) + { + bt_action.disabled = false; + return; + } + loading(loader); new XHR().get('<%=luci.dispatcher.build_url("admin", "services")%>/lxc_action/' + '%h/%h'.format(action, lxc_name), null, function(x, ec) { - loading(loader, 0) - bt_action.disabled = false + loading(loader, 0); + bt_action.disabled = false; if (!x || ec) - return info_message(output_list,"Action failed!") - - var row = self.parentNode.parentNode - row.parentNode.removeChild(row) - + { + return info_message(output_list,"Action failed!", 2000); + } + var div = self.parentNode.parentNode; + div.parentNode.removeChild(div); }); } } function lxc_configure_handler(self) { - var td = self.parentNode - var textarea = td.querySelector('[data-id]') - var lxc_name = textarea.getAttribute('data-id') - var lxc_configuration = textarea.value + var div = self.parentNode; + var textarea = div.querySelector('[data-id]'); + var lxc_name = textarea.dataset['id']; + var lxc_conf = textarea.value; - new XHR().post('<%=luci.dispatcher.build_url("admin", "services")%>/lxc_configuration_set/' + lxc_name, "lxc_configuration=" + encodeURIComponent(lxc_configuration) , + new XHR().post('<%=luci.dispatcher.build_url("admin", "services")%>/lxc_configuration_set/' + lxc_name, "lxc_conf=" + encodeURIComponent(lxc_conf), function(x) { if (!x || x.responseText != "0") - return info_message(output_list,"Action failed!") - - info_message(output_list,"LXC configuration updated") - var row = td.parentNode - row.parentNode.removeChild(row) + { + return info_message(output_list,"Action failed!", 2000); + } + info_message(output_list,"LXC configuration updated", 2000); + var rmdiv = div.parentNode; + rmdiv.parentNode.removeChild(rmdiv); }) } - function lxc_rename_template(lxc_name) - { - var h = '\ - <input data-id="'+ lxc_name + '" type="text" placeholder="Enter new name" /> \ - <input data-id="bt_confirm" onclick="lxc_rename_handler(this)" type="button" class="cbi-button" value="Confirm" />' - - return h - } - - function lxc_configure_template(lxc_name, lxc_configuration) + function lxc_configure_template(lxc_name, lxc_conf) { var h = '\ - <textarea data-id="'+ lxc_name + '" rows="20" style="width:100%">'+ lxc_configuration +'</textarea> \ - <input data-id="bt_confirm" onclick="lxc_configure_handler(this)" type="button" class="cbi-button" value="Confirm" />' - - return h + <textarea data-id="' + lxc_name + '" rows="20" style="width:600px;font-family:monospace;white-space:pre;overflow-wrap:normal;overflow-x:scroll;">'+ lxc_conf +'</textarea> \ + <input data-id="bt_confirm" onclick="lxc_configure_handler(this)" type="button" class="cbi-button" value="Confirm" />'; + return h; } function action_more_handler(self) { - var lxc_name = self.parentNode.parentNode.querySelector('[data-id]').getAttribute('data-id') - var loader = self.parentNode.parentNode.querySelector('[data-loader]') + var lxc_name = self.parentNode.parentNode.dataset['id']; + var loader = self.parentNode.querySelector('[data-loader]'); + var option = self.options[self.selectedIndex].text; + self.value = "more"; - var option = self.options[self.selectedIndex].text - - self.value = "more" - - switch (option) + switch(option) { case "configure": - var tr = document.createElement('tr') - var row = self.parentNode.parentNode - var next_row = row.nextSibling - if (next_row && next_row.getAttribute('data-action') !== null) - row.parentNode.removeChild(next_row) + var div0 = document.createElement('div'); + var div1 = self.parentNode.parentNode; + var next_div = div1.nextSibling; + + if (next_div && next_div.dataset['action'] !== null) + { + div1.parentNode.removeChild(next_div); + } new XHR().get('<%=luci.dispatcher.build_url("admin", "services")%>/lxc_configuration_get/' + lxc_name, null, function(x) { - tr.innerHTML="<td colspan='" + row.cells.length + "'>" + lxc_configure_template(lxc_name, x.responseText) + "</td>" - tr.setAttribute('data-action','') - row.parentNode.insertBefore(tr, row.nextSibling) + div0.innerHTML="<div>" + lxc_configure_template(lxc_name, x.responseText) + "</div>"; + div0.setAttribute('data-action',''); + div1.parentNode.insertBefore(div0, div1.nextSibling); }) - - break + break; case "freeze": - var tr = self.parentNode.parentNode - var img = tr.querySelector('img') + var img = self.parentNode.parentNode.querySelector('img'); if(img.getAttribute('src') != window.img["green"]) - return info_message(output_list,"Container is not running!") + { + return info_message(output_list,"Container is not running!", 2000); + } + + loading(loader); - loading(loader) new XHR().get('<%=luci.dispatcher.build_url("admin", "services")%>/lxc_action/' + '%h/%h'.format(option, lxc_name), null, function(x, ec) { loading(loader, 0) if (!x || ec) - return info_message(output_list,"Action failed!") - - set_status(img, "purple") + { + return info_message(output_list,"Action failed!", 2000); + } + set_status(img, "purple"); }) - - break + break; case "unfreeze": - var tr = self.parentNode.parentNode - var img = tr.querySelector('img') - + var img = self.parentNode.parentNode.querySelector('img'); if(img.getAttribute('src') != window.img["purple"]) - return info_message(output_list,"Container is not frozen!") + { + return info_message(output_list,"Container is not frozen!", 2000); + } + + loading(loader); - loading(loader) new XHR().get('<%=luci.dispatcher.build_url("admin", "services")%>/lxc_action/' + '%h/%h'.format(option, lxc_name), null, function(x, ec) { - loading(loader, 0) + loading(loader, 0); if (!x || ec) - return info_message(output_list,"Action failed!") - - set_status(img, "green") + { + return info_message(output_list,"Action failed!", 2000); + } + set_status(img, "green"); }) - - break + break; case "reboot": - var tr = self.parentNode.parentNode - var img = tr.querySelector('img') + var img = self.parentNode.parentNode.querySelector('img'); if(img.getAttribute('src') != window.img["green"]) - return info_message(output_list,"Container is not running!") + { + return info_message(output_list,"Container is not running!", 2000); + } if (!confirm("Are you sure?")) - return + { + return; + } + + loading(loader); - loading(loader) new XHR().get('<%=luci.dispatcher.build_url("admin", "services")%>/lxc_action/' + '%h/%h'.format(option, lxc_name), null, function(x, ec) { loading(loader, 0) if (!x || ec) - return info_message(output_list,"Action failed!") - - info_message(output_list,"LXC rebooted") + { + return info_message(output_list,"Action failed!", 2000); + } + info_message(output_list,"LXC container rebooted", 2000); }) - break + break; } - } - function set_empty(t_lxc_list) + function set_no_container() { - if (document.getElementById('empty') !== null) - return - - var row_count = t_lxc_list.rows.length; - while(--row_count) t_lxc_list.deleteRow(row_count); + info_message(output_list, "There are no containers available yet."); + } - var row = t_lxc_list.insertRow(-1); - row.id = 'empty' - var cell = row.insertCell(0); - cell.colSpan = 4; - cell.innerHTML = '<em><br />There are no containers available yet.</em>'; + function set_no_template() + { + bt_create.disabled = true; + info_message(output_add, "There are no templates for your architecture (<%=target%>) available, please select another containers URL."); } function lxc_list_update() @@ -361,90 +387,108 @@ Author: Petar Koretic <petar.koretic@sartura.hr> XHR.poll(4, '<%=luci.dispatcher.build_url("admin", "services")%>/lxc_action/list', null, function(x, data) { - if (!x) return; - - var lxc_count = Object.keys(data).length - if (!data || !lxc_count) - return set_empty(t_lxc_list) + if (!x || !data) + { + return; + } - if (document.getElementById('empty') !== null) - t_lxc_list.deleteRow(1); + var lxc_count = Object.keys(data).length; + if (!lxc_count) + { + return set_no_container(); + } - var lxcs = t_lxc_list.querySelectorAll('td[data-id]') - var lxc_name_table = {} + var lxcs = t_lxc_list.querySelectorAll('td[data-id]'); + var lxc_name_div = {}; for (var i = 0, len = lxcs.length; i < len; i++) { - var lxc_name = lxcs[i].getAttribute('data-id') + var lxc_name = lxcs[i].dataset['id']; if (!(lxc_name in data)) { - var row = t_lxc_list.querySelector("[data-id='" + lxc_name + "']").parentNode - row.parentNode.removeChild(row) - continue + var div = t_lxc_list.querySelector("[data-id='" + lxc_name + "']").parentNode; + div.parentNode.removeChild(div); + continue; } - - lxc_name_table[lxc_name] = lxcs[i].parentNode.querySelector('img') + lxc_name_div[lxc_name] = lxcs[i].parentNode.querySelector('img'); } for(var key in data) { - var lxc_name = key - var state = window.states[data[key]] - - if (!(lxc_name in lxc_name_table)) - lxc_create_template(lxc_name, state) + var lxc_name = key; + var state = window.states[data[key]]; - else if (state != get_status(lxc_name_table[lxc_name])) - set_status(lxc_name_table[lxc_name], state) + if (!(lxc_name in lxc_name_div)) + { + lxc_create_template(lxc_name, state); + } + else if (state != get_status(lxc_name_div[lxc_name])) + { + set_status(lxc_name_div[lxc_name], state); + } } - }) } function loading(elem, state) { - state = (typeof state === 'undefined') ? 1 : state - + state = (typeof state === 'undefined') ? 1 : state; if (state === 1) - elem.innerHTML = loader_html + { + elem.innerHTML = loader_html; + } else - setTimeout(function() { elem.innerHTML = ''}, 1000) + { + setTimeout(function() { elem.innerHTML = ''}, 2000); + } } function set_status(elem, state) { - state = (typeof state === 'undefined') ? 1 : state - - setTimeout(function() { elem.setAttribute('src', window.img[state])}, 300) + state = (typeof state === 'undefined') ? 1 : state; + setTimeout(function() { elem.setAttribute('src', window.img[state])}, 300); } function get_status(elem) { - var src = elem.getAttribute('src') - + var src = elem.getAttribute('src'); for (var i in img) { if (img[i] == src) - return i + { + return i; + } } } function info_message(output, msg, timeout) { - timeout = timeout || 3000 - output.innerHTML = msg - clearTimeout(timeout_msg) - timeout_msg = setTimeout(function(){ output.innerHTML=""}, timeout); + timeout = timeout || 0; + output.innerHTML = '<em>' + msg + '</em>'; + if (timeout > 0) + { + setTimeout(function(){ output.innerHTML=""}, timeout); + } } - lxc_list_update() - new XHR().get('<%=luci.dispatcher.build_url("admin", "services")%>/lxc_get_downloadable', null, function(x, data) { - if (!x) return; + if (!x) + { + return; + } + + if (!data) + { + return set_no_template(); + } + + var lxc_count = Object.keys(data).length; + if (!lxc_count) + { + return set_no_template(); + } - var lxc_count = Object.keys(data).length - if (!data || !lxc_count) return; var select = document.getElementById("s_template"); for(var key in data) { @@ -453,6 +497,11 @@ Author: Petar Koretic <petar.koretic@sartura.hr> option.text = data[key].replace(/[_:]/g, ' '); select.add(option, -1); } + + info_message(output_add, ""); + bt_create.disabled = false; }) -//]]></script> + lxc_list_update(); +//]]> +</script> diff --git a/applications/luci-app-mwan3/po/ja/mwan3.po b/applications/luci-app-mwan3/po/ja/mwan3.po index cfbf5ac46..a5826926d 100644 --- a/applications/luci-app-mwan3/po/ja/mwan3.po +++ b/applications/luci-app-mwan3/po/ja/mwan3.po @@ -7,7 +7,7 @@ msgstr "" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 2.0.3\n" +"X-Generator: Poedit 2.0.7\n" "Last-Translator: INAGAKI Hiroshi <musashino.open@gmail.com>\n" "Plural-Forms: nplurals=1; plural=0;\n" "Language: ja\n" @@ -44,7 +44,7 @@ msgid "Check IP rules" msgstr "IP ルールã®ãƒã‚§ãƒƒã‚¯" msgid "Check link quality" -msgstr "" +msgstr "リンクå“質ã®ãƒã‚§ãƒƒã‚¯" msgid "Check routing table" msgstr "ルーティング テーブルã®ãƒã‚§ãƒƒã‚¯" @@ -59,7 +59,7 @@ msgid "Destination port" msgstr "宛先ãƒãƒ¼ãƒˆ" msgid "Detail" -msgstr "" +msgstr "詳細" msgid "Diagnostics" msgstr "診æ–機能" @@ -80,7 +80,7 @@ msgid "Enter value in hex, starting with <code>0x</code>" msgstr "<code>0x</code> ã§å§‹ã¾ã‚‹16進数ã®å€¤ã‚’入力ã—ã¦ãã ã•ã„。" msgid "Execute" -msgstr "" +msgstr "実行" msgid "Expect interface state on up event" msgstr "Up イベント時ã«äºˆæƒ³ã•ã‚Œã‚‹ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ãƒ¼ã‚¹ã®çŠ¶æ…‹ã§ã™ã€‚" @@ -92,10 +92,12 @@ msgid "Firewall mask" msgstr "ファイアウォール マスク" msgid "Flush conntrack table" -msgstr "" +msgstr "conntrack テーブルã®ã‚¯ãƒªã‚¢" msgid "Flush global firewall conntrack table on interface events" msgstr "" +"インターフェース イベント時ã«ã‚°ãƒãƒ¼ãƒãƒ« ファイアウォール conntrack テーブルを" +"クリアã—ã¾ã™ã€‚" msgid "Globals" msgstr "全般" @@ -107,7 +109,7 @@ msgid "Hotplug ifup" msgstr "ホットプラグ ifup" msgid "INFO: MWAN not running" -msgstr "" +msgstr "æƒ…å ±: MWAN ã¯å®Ÿè¡Œã•ã‚Œã¦ã„ã¾ã›ã‚“" msgid "IPset" msgstr "IPset" @@ -160,28 +162,28 @@ msgid "Local source interface" msgstr "" msgid "MWAN - Globals" -msgstr "" +msgstr "MWAN - ã‚°ãƒãƒ¼ãƒãƒ«" msgid "MWAN - Interfaces" -msgstr "" +msgstr "MWAN - インターフェース" msgid "MWAN - Members" -msgstr "" +msgstr "MWAN - メンãƒãƒ¼" msgid "MWAN - Notification" -msgstr "" +msgstr "MWAN - 通知" msgid "MWAN - Policies" -msgstr "" +msgstr "MWAN - ãƒãƒªã‚·ãƒ¼" msgid "MWAN - Rules" -msgstr "" +msgstr "MWAN - ルール" msgid "MWAN Interface Configuration - %s" msgstr "MWAN インターフェースè¨å®š - %s" msgid "MWAN Interfaces" -msgstr "" +msgstr "MWAN インターフェース" msgid "MWAN Member Configuration - %s" msgstr "MWAN メンãƒãƒ¼è¨å®š - %s" @@ -193,13 +195,13 @@ msgid "MWAN Rule Configuration - %s" msgstr "MWAN ルールè¨å®š - %s" msgid "MWAN Status - Detail" -msgstr "" +msgstr "MWAN ステータス - 詳細" msgid "MWAN Status - Diagnostics" -msgstr "" +msgstr "MWAN ステータス - 診æ–" msgid "MWAN Status - Troubleshooting" -msgstr "" +msgstr "MWAN ステータス - トラブルシューティング" msgid "" "MWAN supports up to 252 physical and/or logical interfaces<br />MWAN " @@ -218,10 +220,10 @@ msgstr "" "シーã€ãƒ«ãƒ¼ãƒ«ã¨åŒã˜åå‰ã‚’使用ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。" msgid "Max packet latency [ms]" -msgstr "" +msgstr "最大パケットレイテンシ [ms]" msgid "Max packet loss [%]" -msgstr "" +msgstr "最大パケットãƒã‚¹ [%]" msgid "" "May be entered as a single or multiple port(s) (eg \"22\" or \"80,443\") or " @@ -256,10 +258,10 @@ msgid "Metric" msgstr "メトリック" msgid "Min packet latency [ms]" -msgstr "" +msgstr "最å°ãƒ‘ケットレイテンシ [ms]" msgid "Min packet loss [%]" -msgstr "" +msgstr "最å°ãƒ‘ケットãƒã‚¹ [%]" msgid "" "Name of IPset rule. Requires IPset rule in /etc/dnsmasq.conf (eg \"ipset=/" @@ -275,7 +277,7 @@ msgid "No MWAN interfaces found" msgstr "MWAN インターフェースãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“" msgid "Notification" -msgstr "" +msgstr "通知" msgid "Offline" msgstr "オフライン" @@ -357,6 +359,16 @@ msgid "" "z, 0-9, _ and no spaces<br />Rules may not share the same name as configured " "interfaces, members or policies" msgstr "" +"ルールã¯ã€ã©ã®ãƒˆãƒ©ãƒ•ã‚£ãƒƒã‚¯ãŒç‰¹å®šã® MWAN ãƒãƒªã‚·ãƒ¼ã‚’使用ã™ã‚‹ã‹ã‚’指定ã—ã¾ã™<br /" +">ルール㯠IP アドレスやãƒãƒ¼ãƒˆã€ãƒ—ãƒãƒˆã‚³ãƒ«ã«åŸºã¥ã„ã¦ã„ã¾ã™<br />ルールã¯ä¸Šã‹ã‚‰" +"下ã¸ãƒžãƒƒãƒãƒ³ã‚°ãŒè¡Œã‚ã‚Œã¾ã™<br />åˆè‡´ã—ãŸãƒ«ãƒ¼ãƒ«ã‚ˆã‚Šä¸‹ã®ãƒ«ãƒ¼ãƒ«ã¯ç„¡è¦–ã•ã‚Œã¾ã™" +"<br />ã„ãšã‚Œã®ãƒ«ãƒ¼ãƒ«ã«ã‚‚マッãƒã—ãªã„トラフィックã¯ã€ãƒ¡ã‚¤ãƒ³ã®ãƒ«ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ãƒ†ãƒ¼" +"ブルを使用ã—ã¦ãƒ«ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ã•ã‚Œã¾ã™<br />既知(デフォルト以外)ã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯" +"ã¸ã®ãƒˆãƒ©ãƒ•ã‚£ãƒƒã‚¯ã¯ã€ãƒ¡ã‚¤ãƒ³ã®ãƒ«ãƒ¼ãƒ†ã‚£ãƒ³ã‚°ãƒ†ãƒ¼ãƒ–ルã«ã‚ˆã£ã¦åˆ¶å¾¡ã•ã‚Œã¾ã™<br />ト" +"ラフィックãŒãƒ«ãƒ¼ãƒ«ã«åˆè‡´ã—ã¦ã‚‚ã€å…¨ WAN インターフェース㌠down ã®å ´åˆã¯ " +"blackhole 状態ã¨ãªã‚Šã¾ã™<br />åå‰ã¯ A-Z, a-z, 0-9, _ ã‚’å«ã‚€ã“ã¨ãŒã§ãã¾ã™" +"ãŒã€ã‚¹ãƒšãƒ¼ã‚¹ã¯ä½¿ç”¨ã§ãã¾ã›ã‚“<br />ルールã¯ã€è¨å®šæ¸ˆã¿ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ãƒ¼ã‚¹ã‚„メン" +"ãƒãƒ¼ã€ãƒãƒªã‚·ãƒ¼ã¨åŒã˜åå‰ã‚’使用ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。" msgid "Seconds. Acceptable values: 1-1000000. Defaults to 600 if not set" msgstr "秒。利用å¯èƒ½ãªå€¤: 1-1000000。空欄ã®å ´åˆã®ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆå€¤ã¯600ã§ã™ã€‚" @@ -377,7 +389,7 @@ msgid "Supports CIDR notation (eg \"192.168.100.0/24\") without quotes" msgstr "CIDR 表記ã®ã‚µãƒãƒ¼ãƒˆï¼ˆä¾‹: \"192.168.100.0/24\")" msgid "Task" -msgstr "" +msgstr "タスク" msgid "There are currently %d of %d supported interfaces configured" msgstr "ç¾åœ¨ã€%d å€‹ä¸ %d 個ã®ã‚µãƒãƒ¼ãƒˆã•ã‚ŒãŸã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ãƒ¼ã‚¹ãŒè¨å®šæ¸ˆã¿ã§ã™ã€‚" @@ -412,6 +424,21 @@ msgid "" "Physical device name which interface went up or down (e.g. \"eth0\" or " "\"wwan0\")<br /><br />" msgstr "" +"ã“ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã§ã¯ã€ \"/etc/mwan3.user\" ã®å†…容を変更ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" +"<br />ã“ã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚‚ sysupgrade ã®éš›ã«ä¿æŒã•ã‚Œã¾ã™ã€‚<br /><br />注æ„: <br />" +"ã“ã®ãƒ•ã‚¡ã‚¤ãƒ«ã¯ã‚·ã‚§ãƒ«ã‚¹ã‚¯ãƒªãƒ—トã¨ã—ã¦è§£é‡ˆã•ã‚Œã¾ã™ã€‚<br />最åˆã®è¡Œã¯ "#!/" +"bin/sh" ã§ã‚ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ï¼ˆã‚¯ã‚©ãƒ¼ãƒ†ãƒ¼ã‚·ãƒ§ãƒ³ä¸è¦ï¼‰ã€‚<br /># ã§å§‹ã¾ã‚‹è¡Œ" +"ã¯ã‚³ãƒ¡ãƒ³ãƒˆã§ã‚ã‚Šã€å®Ÿè¡Œã•ã‚Œã¾ã›ã‚“。<br />mwan3 ã®ã‚«ã‚¹ã‚¿ãƒ 動作をã“ã“ã«å…¥åŠ›ã—ã¦" +"ãã ã•ã„。<br />ã“れらã¯ã€mwan3 ã§æœ‰åŠ¹ãªã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ãƒ¼ã‚¹ã®<br /> netifd " +"hotplug インターフェース イベント毎ã«å®Ÿè¡Œã•ã‚Œã¾ã™ã€‚<br /><br />ã“ã®ã‚¹ã‚¯ãƒªãƒ—ト" +"ã«å—ã‘渡ã•ã‚Œã‚‹ä¸»ã«ï¼“ã¤ã®ç’°å¢ƒå¤‰æ•°ãŒåˆ©ç”¨ã§ãã¾ã™ã€‚<br /><br />$ACTION<br />* " +"\"ifup\" 㯠netifd 㨠mwan3track ã«ã‚ˆã‚Šå‘¼ã³å‡ºã•ã‚Œã¾ã™<br />* \"ifdown\" 㯠" +"netifd 㨠mwan3track ã«ã‚ˆã‚Šå‘¼ã³å‡ºã•ã‚Œã¾ã™<br />* \"connected\" ã¯ãƒˆãƒ©ãƒƒã‚ング" +"ãŒæˆåŠŸã—ãŸéš›ã« mwan3track ã«ã®ã¿ã«ã‚ˆã‚Šå‘¼ã³å‡ºã•ã‚Œã¾ã™<br />* \"disconnected\" " +"㯠トラッã‚ングãŒå¤±æ•—ã—ãŸéš›ã« mwan3track ã®ã¿ã«ã‚ˆã‚Šå‘¼ã³å‡ºã•ã‚Œã¾ã™<br />" +"$INTERFACE up ã¾ãŸã¯ down ã—ãŸã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ãƒ¼ã‚¹å(例: \"wan\" ã‚„ \"wwan\")" +"<br />$DEVICE up ã¾ãŸã¯ down ã—ãŸã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ãƒ¼ã‚¹ã®ç‰©ç†ãƒ‡ãƒã‚¤ã‚¹å(例: " +"\"eth0\" ã‚„ \"wwan0\")<br /><br />" msgid "Tracking hostname or IP address" msgstr "追跡ホストåã¾ãŸã¯ IP アドレス" @@ -441,36 +468,42 @@ msgstr "" "インターフェース㮠IP アドレスãŒä½¿ç”¨ã•ã‚Œã¾ã™ã€‚" msgid "View the content of /etc/protocols for protocol description" -msgstr "" +msgstr "プãƒãƒˆã‚³ãƒ«ã®èª¬æ˜Žã«ã¤ã„ã¦ã¯ã€ /etc/protocols ã®å†…容を確èªã—ã¦ãã ã•ã„" msgid "WARNING: %d interfaces are configured exceeding the maximum of %d!" msgstr "" "è¦å‘Š: %d 個ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ãƒ¼ã‚¹ãŒã€æœ€å¤§å€‹æ•°ã® %d 個 を超ãˆã¦è¨å®šã•ã‚Œã¦ã„ã¾ã™ï¼" msgid "WARNING: Interface %s are not found in /etc/config/network" -msgstr "" +msgstr "è¦å‘Š: インターフェース %s ㌠/etc/config/network ã«è¦‹ã¤ã‹ã‚Šã¾ã›ã‚“" msgid "WARNING: Interface %s has a duplicate metric %s configured" -msgstr "" +msgstr "è¦å‘Š: インターフェース %s ã«é‡è¤‡ã™ã‚‹ãƒ¡ãƒˆãƒªãƒƒã‚¯ %s ãŒè¨å®šã•ã‚Œã¦ã„ã¾ã™" msgid "" "WARNING: Interface %s has a higher reliability requirement than tracking " "hosts (%d)" msgstr "" +"è¦å‘Š: インターフェース %s ã¯è¿½è·¡ãƒ›ã‚¹ãƒˆæ•° (%d) よりも高ã„è¿½è·¡ä¿¡é ¼æ€§ã®å€¤ãŒè¨å®š" +"ã•ã‚Œã¦ã„ã¾ã™" msgid "WARNING: Interface %s has no default route in the main routing table" msgstr "" +"è¦å‘Š: インターフェース %s ã¯ãƒ¡ã‚¤ãƒ³ã®ãƒ«ãƒ¼ãƒ†ã‚£ãƒ³ã‚° テーブル内ã§ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆãƒ«ãƒ¼ãƒˆ" +"ãŒã‚ã‚Šã¾ã›ã‚“" msgid "WARNING: Policy %s has exceeding the maximum name of 15 characters" -msgstr "" +msgstr "è¦å‘Š: ãƒãƒªã‚·ãƒ¼ %s ã®åå‰ã¯15æ–‡å—ã®æœ€å¤§æ–‡å—数を超ãˆã¦ã„ã¾ã™" msgid "" "WARNING: Rule %s have a port configured with no or improper protocol " "specified!" msgstr "" +"è¦å‘Š: ルール %s ã¯ãƒ—ãƒãƒˆã‚³ãƒ«æŒ‡å®šãŒä¸é©åˆ‡ã€ã¾ãŸã¯ç„¡ã„ãƒãƒ¼ãƒˆãŒè¨å®šã•ã‚Œã¦ã„ã¾" +"ã™ï¼" msgid "Waiting for command to complete..." -msgstr "" +msgstr "コマンドを実行ä¸ã§ã™..." msgid "Weight" msgstr "ウエイト" @@ -504,289 +537,3 @@ msgstr "never" msgid "unreachable (reject)" msgstr "unreachable (reject)" - -#~ msgid "Online (tracking active)" -#~ msgstr "オンライン(追跡実行ä¸ï¼‰" - -#~ msgid "MWAN Interface Live Status" -#~ msgstr "MWAN インターフェース Live ステータス" - -#~ msgid "Online (tracking off)" -#~ msgstr "オンライン(追跡オフ)" - -#~ msgid "" -#~ "This section allows you to modify the content of \"/etc/mwan3.user\".<br /" -#~ ">The file is also preserved during sysupgrade.<br /><br />Notes:<br /" -#~ ">This file is interpreted as a shell script.<br />The first line of the " -#~ "script must be "#!/bin/sh" without quotes.<br />Lines beginning " -#~ "with # are comments and are not executed.<br />Put your custom mwan3 " -#~ "action here, they will<br />be executed with each netifd hotplug " -#~ "interface event<br />on interfaces for which mwan3 is enabled.<br /><br /" -#~ ">There are three main environment variables that are passed to this " -#~ "script.<br /><br />$ACTION Either \"ifup\" or \"ifdown\"<br />$INTERFACE " -#~ "Name of the interface which went up or down (e.g. \"wan\" or \"wwan" -#~ "\")<br />$DEVICE Physical device name which interface went up or down (e." -#~ "g. \"eth0\" or \"wwan0\")<br /><br />" -#~ msgstr "" -#~ "ã“ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã§ã¯ã€ \"/etc/mwan3.user\" ã®å†…容を変更ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" -#~ "<br />ã“ã®ãƒ•ã‚¡ã‚¤ãƒ«ã¯ã€ sysupgrade 時ã«ä¿æŒã•ã‚Œã¾ã™ã€‚<br /><br />注æ„: " -#~ "<br />ã“ã®ãƒ•ã‚¡ã‚¤ãƒ«ã¯ã€ã‚·ã‚§ãƒ«ã‚¹ã‚¯ãƒªãƒ—トã¨ã—ã¦è§£é‡ˆã•ã‚Œã¾ã™ã€‚<br />スクリプト" -#~ "ã®1行目ã¯ã€"#!bin/sh" ã§ã‚ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ï¼ˆã‚¯ã‚©ãƒ¼ãƒ†ãƒ¼ã‚·ãƒ§ãƒ³ä¸" -#~ "è¦ï¼‰ã€‚<br /># ã§å§‹ã¾ã‚‹è¡Œã¯ã‚³ãƒ¡ãƒ³ãƒˆã§ã‚ã‚Šã€å®Ÿè¡Œã•ã‚Œã¾ã›ã‚“。<br />mwan3 ã®ã‚«" -#~ "スタム動作をã“ã“ã«å…¥åŠ›ã—ã¦ãã ã•ã„。ã“れらã¯ã€ mwan3 ãŒæœ‰åŠ¹ãªã‚¤ãƒ³ã‚¿ãƒ¼" -#~ "フェースã®<br />netifd ホットプラグ インターフェース イベント毎ã«å®Ÿè¡Œã•ã‚Œ" -#~ "ã¾ã™ã€‚<br /><br />主ã«3ã¤ã®ç’°å¢ƒå¤‰æ•°ãŒåˆ©ç”¨å¯èƒ½ã§ã™ã€‚<br /><br />$ACTION - " -#~ "\"ifup\" ãŠã‚ˆã³ \"ifdown\"<br />$INTERFACE - Up ã¾ãŸã¯ Down ãŒè¡Œã‚ã‚ŒãŸã‚¤ãƒ³" -#~ "ターフェースå(例: \"wan\" ã‚„ \"wwan\")<br />$DEVICE - Up ã¾ãŸã¯ Down ãŒ" -#~ "è¡Œã‚ã‚ŒãŸç‰©ç†ãƒ‡ãƒã‚¤ã‚¹å(例: \"eth0\" ã‚„ \"wwan0\")<br /><br />" - -#~ msgid "Currently Configured Interfaces" -#~ msgstr "è¨å®šæ¸ˆã¿ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ãƒ¼ã‚¹" - -#~ msgid "Currently Configured Members" -#~ msgstr "è¨å®šæ¸ˆã¿ãƒ¡ãƒ³ãƒãƒ¼" - -#~ msgid "Currently Configured Policies" -#~ msgstr "è¨å®šæ¸ˆã¿ãƒãƒªã‚·ãƒ¼" - -#~ msgid "Detailed Status" -#~ msgstr "詳細ステータス" - -#~ msgid "Diagnostic Results" -#~ msgstr "診æ–çµæžœ" - -#~ msgid "Error collecting troubleshooting information" -#~ msgstr "ãƒˆãƒ©ãƒ–ãƒ«ã‚·ãƒ¥ãƒ¼ãƒ†ã‚£ãƒ³ã‚°æƒ…å ±ã®åŽé›†ã‚¨ãƒ©ãƒ¼" - -#~ msgid "Errors" -#~ msgstr "エラー" - -#~ msgid "Globals mwan3 options" -#~ msgstr "MWAN3 全般オプション" - -#~ msgid "Interface Status" -#~ msgstr "インターフェース ステータス" - -#~ msgid "Last 50 MWAN systemlog entries. Newest entries sorted at the top :" -#~ msgstr "ç›´è¿‘ã® MWAN システムãƒã‚°ï¼ˆ50行)ã§ã™ã€‚一番上ãŒæœ€æ–°ã®è¡Œã§ã™:" - -#~ msgid "MWAN Detailed Status" -#~ msgstr "MWAN 詳細ステータス" - -#~ msgid "MWAN Interface Configuration" -#~ msgstr "MWAN インターフェースè¨å®š" - -#~ msgid "MWAN Interface Diagnostics" -#~ msgstr "MWAN インターフェース診æ–" - -#~ msgid "MWAN Interface Systemlog" -#~ msgstr "MWAN インターフェース システムãƒã‚°" - -#~ msgid "MWAN Member Configuration" -#~ msgstr "MWAN メンãƒãƒ¼è¨å®š" - -#~ msgid "MWAN Policy Configuration" -#~ msgstr "MWAN ãƒãƒªã‚·ãƒ¼è¨å®š" - -#~ msgid "MWAN Rule Configuration" -#~ msgstr "MWAN ルールè¨å®š" - -#~ msgid "MWAN Service Control" -#~ msgstr "MWAN サービス コントãƒãƒ¼ãƒ«" - -#~ msgid "No MWAN systemlog history found" -#~ msgstr "MWAN システムãƒã‚°ã®å±¥æ´ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“" - -#~ msgid "No detailed status information available" -#~ msgstr "è©³ç´°ã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹æƒ…å ±ã¯åˆ©ç”¨ã§ãã¾ã›ã‚“" - -#~ msgid "No diagnostic results returned" -#~ msgstr "診æ–çµæžœãŒã‚ã‚Šã¾ã›ã‚“" - -#~ msgid "No protocol specified" -#~ msgstr "プãƒãƒˆã‚³ãƒ«ãŒè¨å®šã•ã‚Œã¦ã„ã¾ã›ã‚“" - -#~ msgid "Restart MWAN" -#~ msgstr "MWAN ã®å†èµ·å‹•" - -#~ msgid "" -#~ "Rules specify which traffic will use a particular MWAN policy based on IP " -#~ "address, port or protocol<br />Rules are matched from top to bottom. " -#~ "Rules below a matching rule are ignored. Traffic not matching any rule is " -#~ "routed using the main routing table<br />Traffic destined for known " -#~ "(other than default) networks is handled by the main routing table. " -#~ "Traffic matching a rule, but all WAN interfaces for that policy are down " -#~ "will be blackholed<br />Names may contain characters A-Z, a-z, 0-9, _ and " -#~ "no spaces<br />Rules may not share the same name as configured " -#~ "interfaces, members or policies" -#~ msgstr "" -#~ "ルール㯠IP アドレスやãƒãƒ¼ãƒˆã€ãƒ—ãƒãƒˆã‚³ãƒ«ã‚’基ã«ã€ãƒˆãƒ©ãƒ•ã‚£ãƒƒã‚¯ãŒã©ã® MWAN ãƒ" -#~ "リシーを使用ã™ã‚‹ã‹ã‚’è¨å®šã—ã¾ã™ã€‚<br />ルールã¯ä¸Šã‹ã‚‰ä¸‹ã¸ãƒžãƒƒãƒãƒ³ã‚°ãŒè¡Œã‚" -#~ "ã‚Œã€åˆè‡´ã—ãŸãƒ«ãƒ¼ãƒ«ã‚ˆã‚Šä¸‹ã®ãƒ«ãƒ¼ãƒ«ã¯ç„¡è¦–ã•ã‚Œã¾ã™ã€‚å…¨ã¦ã®ãƒ«ãƒ¼ãƒ«ã«åˆè‡´ã—ãªã„ト" -#~ "ラフィックã¯ã€ãƒ¡ã‚¤ãƒ³ã®ãƒ«ãƒ¼ãƒ†ã‚£ãƒ³ã‚° テーブルを使用ã—ã¦ãƒ«ãƒ¼ãƒˆãŒæ±ºå®šã•ã‚Œã¾" -#~ "ã™ã€‚<br />既知(デフォルト以外)ã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã¸ã®ãƒˆãƒ©ãƒ•ã‚£ãƒƒã‚¯ã¯ã€ãƒ¡ã‚¤ãƒ³ã®" -#~ "ルーティング テーブルã«ã‚ˆã£ã¦åˆ¶å¾¡ã•ã‚Œã¾ã™ã€‚ルールã«åˆè‡´ã—ãŸãƒˆãƒ©ãƒ•ã‚£ãƒƒã‚¯ã§" -#~ "ã‚‚ã€å½“該ãƒãƒªã‚·ãƒ¼ã®å…¨ WAN インターフェース㌠Down 状態ã®å ´åˆã¯ blackhole 状" -#~ "æ…‹ã¨ãªã‚Šã¾ã™ã€‚<br />åå‰ã¯ A-Z, a-z, 0-9, _ ã‚’å«ã‚€ã“ã¨ãŒã§ãã¾ã™ãŒã€ã‚¹ãƒšãƒ¼" -#~ "スã¯ä½¿ç”¨ã§ãã¾ã›ã‚“。<br />ルールã¯ã€è¨å®šæ¸ˆã¿ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ãƒ¼ã‚¹ã‚„メンãƒãƒ¼ã€" -#~ "ãƒãƒªã‚·ãƒ¼ã¨åŒã˜åå‰ã‚’使用ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。" - -#~ msgid "Start MWAN" -#~ msgstr "MWAN ã®èµ·å‹•" - -#~ msgid "Stop MWAN" -#~ msgstr "MWAN ã®åœæ¢" - -#~ msgid "Tracking IP" -#~ msgstr "追跡 IP" - -#~ msgid "Traffic Rules" -#~ msgstr "トラフィック ルール" - -#~ msgid "Troubleshooting Data" -#~ msgstr "トラブルシューティング データ" - -#~ msgid "View the contents of /etc/protocols for protocol descriptions" -#~ msgstr "" -#~ "プãƒãƒˆã‚³ãƒ«ã®èª¬æ˜Žã«ã¤ã„ã¦ã¯ã€ /etc/protocols ã®å†…容を確èªã—ã¦ãã ã•ã„。" - -#~ msgid "" -#~ "WARNING: Some interfaces are configured incorrectly or not at all in /etc/" -#~ "config/network!" -#~ msgstr "" -#~ "è¦å‘Š: è¨å®šã‚’誤ã£ã¦ã„ã‚‹ã‹ã€ã‚‚ã—ãã¯å®Œå…¨ã«è¨å®šã•ã‚Œã¦ã„ãªã„インターフェースãŒ" -#~ "ã‚ã‚Šã¾ã™ï¼" - -#~ msgid "" -#~ "WARNING: Some interfaces have a higher reliability requirement than there " -#~ "are tracking IP addresses!" -#~ msgstr "" -#~ "è¦å‘Š: 追跡 IP アドレスã®å€‹æ•°ã‚ˆã‚Šå¤§ãã„è¿½è·¡ä¿¡é ¼æ€§ã®å€¤ãŒè¨å®šã•ã‚ŒãŸã‚¤ãƒ³ã‚¿ãƒ¼" -#~ "フェースãŒã‚ã‚Šã¾ã™ï¼" - -#~ msgid "" -#~ "WARNING: Some interfaces have duplicate metrics configured in /etc/config/" -#~ "network!" -#~ msgstr "" -#~ "è¦å‘Š: /etc/config/network ã§ã€é‡è¤‡ã™ã‚‹ãƒ¡ãƒˆãƒªãƒƒã‚¯ã‚’è¨å®šã•ã‚Œã¦ã„るインター" -#~ "フェースãŒã‚ã‚Šã¾ã™ï¼" - -#~ msgid "" -#~ "WARNING: Some interfaces have no default route in the main routing table!" -#~ msgstr "" -#~ "è¦å‘Š: メインã®ãƒ«ãƒ¼ãƒ†ã‚£ãƒ³ã‚° テーブルã§ã€ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆ ルートをè¨å®šã•ã‚Œã¦ã„ãªã„" -#~ "インターフェースãŒã‚ã‚Šã¾ã™ï¼" - -#~ msgid "" -#~ "WARNING: Some interfaces have no metric configured in /etc/config/network!" -#~ msgstr "" -#~ "è¦å‘Š: /etc/config/network ã§ã€ãƒ¡ãƒˆãƒªãƒƒã‚¯ã‚’è¨å®šã•ã‚Œã¦ã„ãªã„インターフェース" -#~ "ãŒã‚ã‚Šã¾ã™ï¼" - -#~ msgid "" -#~ "WARNING: Some policies have names exceeding the maximum of 15 characters!" -#~ msgstr "" -#~ "è¦å‘Š: 最大文å—æ•°ã® 15 æ–‡å—を超ãˆã‚‹åå‰ãŒè¨å®šã•ã‚Œã¦ã„ã‚‹ãƒãƒªã‚·ãƒ¼ãŒã‚ã‚Šã¾ã™ï¼" - -#~ msgid "" -#~ "WARNING: Some rules have a port configured with no or improper protocol " -#~ "specified! Please configure a specific protocol!" -#~ msgstr "" -#~ "è¦å‘Š: ä¸é©åˆ‡ãªãƒ—ãƒãƒˆã‚³ãƒ«ãŒæŒ‡å®šã•ã‚Œã¦ã„ã‚‹ã€ã¾ãŸã¯ä½•ã‚‚指定ã•ã‚Œã¦ã„ãªã„ãƒãƒ¼ãƒˆ" -#~ "ã‚’è¨å®šã•ã‚ŒãŸãƒ«ãƒ¼ãƒ«ãŒã‚ã‚Šã¾ã™ï¼ãƒ—ãƒãƒˆã‚³ãƒ«ã‚’指定ã—ç›´ã—ã¦ãã ã•ã„ï¼" - -#~ msgid "" -#~ "WARNING: This and other interfaces have duplicate metrics configured in /" -#~ "etc/config/network!" -#~ msgstr "" -#~ "è¦å‘Š: ã“ã‚Œã¨ä»–ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ãƒ¼ã‚¹ã§é‡è¤‡ã™ã‚‹ãƒ¡ãƒˆãƒªãƒƒã‚¯ãŒ /etc/config/" -#~ "network ã«è¨å®šã•ã‚Œã¦ã„ã¾ã™ï¼" - -#~ msgid "" -#~ "WARNING: This interface has a higher reliability requirement than there " -#~ "are tracking IP addresses!" -#~ msgstr "" -#~ "è¦å‘Š: ã“ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ãƒ¼ã‚¹ã¯ã€è¿½è·¡ IP アドレスã®å€‹æ•°ã‚ˆã‚Šå¤§ãã„è¿½è·¡ä¿¡é ¼æ€§ã®" -#~ "値をè¨å®šã•ã‚Œã¦ã„ã¾ã™ï¼" - -#~ msgid "" -#~ "WARNING: This interface has no default route in the main routing table!" -#~ msgstr "" -#~ "è¦å‘Š: ã“ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ãƒ¼ã‚¹ã¯ã€ãƒ¡ã‚¤ãƒ³ã®ãƒ«ãƒ¼ãƒ†ã‚£ãƒ³ã‚° テーブルã«ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆ " -#~ "ルートãŒè¨å®šã•ã‚Œã¦ã„ã¾ã›ã‚“ï¼" - -#~ msgid "" -#~ "WARNING: This interface has no metric configured in /etc/config/network!" -#~ msgstr "" -#~ "è¦å‘Š: ã“ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ãƒ¼ã‚¹ã¯ã€ /etc/config/network ã§ãƒ¡ãƒˆãƒªãƒƒã‚¯ãŒè¨å®šã•ã‚Œ" -#~ "ã¦ã„ã¾ã›ã‚“ï¼" - -#~ msgid "" -#~ "WARNING: This interface is configured incorrectly or not at all in /etc/" -#~ "config/network!" -#~ msgstr "" -#~ "è¦å‘Š: ã“ã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ãƒ¼ã‚¹ã¯ /etc/config/network ã§è¨å®šãŒèª¤ã£ã¦ã„ã‚‹ã‹ã€ã‚‚" -#~ "ã—ãã¯å®Œå…¨ã«è¨å®šã•ã‚Œã¦ã„ã¾ã›ã‚“ï¼" - -#~ msgid "" -#~ "WARNING: This policy's name is %d characters exceeding the maximum of 15!" -#~ msgstr "" -#~ "è¦å‘Š: ã“ã®ãƒãƒªã‚·ãƒ¼ã®åå‰ã¯ã€æœ€å¤§æ–‡å—æ•° 15 æ–‡å—を超ãˆã‚‹ %d æ–‡å—ãŒè¨å®šã•ã‚Œã¦" -#~ "ã„ã¾ã™ï¼" - -#~ msgid "" -#~ "WARNING: This rule is incorrectly configured with no or improper protocol " -#~ "specified! Please configure a specific protocol!" -#~ msgstr "" -#~ "è¦å‘Š: ã“ã®ãƒ«ãƒ¼ãƒ«ã¯ä¸é©åˆ‡ãªãƒ—ãƒãƒˆã‚³ãƒ«ãŒæŒ‡å®šã•ã‚Œã¦ã„ã‚‹ã‹ã€ã¾ãŸã¯ä½•ã‚‚指定ã•ã‚Œ" -#~ "ã¦ã„ã¾ã›ã‚“ï¼ãƒ—ãƒãƒˆã‚³ãƒ«ã‚’指定ã—ç›´ã—ã¦ãã ã•ã„ï¼" - -#~ msgid "Waiting for MWAN to %s..." -#~ msgstr "MWAN ã® %s ã‚’å¾…ã£ã¦ã„ã¾ã™..." - -#~ msgid "Waiting for diagnostic results..." -#~ msgstr "診æ–çµæžœã‚’å¾…ã£ã¦ã„ã¾ã™..." - -#~ msgid "restart" -#~ msgstr "å†èµ·å‹•" - -#~ msgid "start" -#~ msgstr "èµ·å‹•" - -#~ msgid "stop" -#~ msgstr "åœæ¢" - -#~ msgid "Advanced" -#~ msgstr "詳細è¨å®š" - -#~ msgid "Configuration" -#~ msgstr "è¨å®š" - -#~ msgid "Hotplug Script" -#~ msgstr "ホットプラグ スクリプト" - -#~ msgid "MWAN Config" -#~ msgstr "MWAN è¨å®š" - -#~ msgid "Network Config" -#~ msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯è¨å®š" - -#~ msgid "Overview" -#~ msgstr "概è¦" - -#~ msgid "This section allows you to modify the contents of /etc/config/mwan3" -#~ msgstr "" -#~ "ã“ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã§ã¯ã€ /etc/config/mwan3 ã®å†…容を変更ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" - -#~ msgid "" -#~ "This section allows you to modify the contents of /etc/config/network" -#~ msgstr "" -#~ "ã“ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã§ã¯ã€ /etc/config/network ã®å†…容を変更ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" - -#~ msgid "" -#~ "This section allows you to modify the contents of /etc/config/wireless" -#~ msgstr "" -#~ "ã“ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã§ã¯ã€ /etc/config/wireless ã®å†…容を変更ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚" - -#~ msgid "Wireless Config" -#~ msgstr "ç„¡ç·šè¨å®š" diff --git a/applications/luci-app-noddos/luasrc/view/noddos/clients.htm b/applications/luci-app-noddos/luasrc/view/noddos/clients.htm index f2fb9312a..4caf3e04e 100644 --- a/applications/luci-app-noddos/luasrc/view/noddos/clients.htm +++ b/applications/luci-app-noddos/luasrc/view/noddos/clients.htm @@ -38,70 +38,70 @@ <fieldset class="cbi-section"> <legend><%:Recognized Clients%></legend> <div class="cbi-section-node"> - <table class="cbi-section-table"> - <tr class="cbi-section-table-titles"> - <th class="cbi-section-table-cell"><%:Hostname%></th> - <th class="cbi-section-table-cell"><%:IPv4%></th> - <th class="cbi-section-table-cell"><%:MAC%></th> - <th class="cbi-section-table-cell"><%:Manufacturer%></th> - <th class="cbi-section-table-cell"><%:Model%></th> - <th class="cbi-section-table-cell"><%:Class%></th> - </tr> + <div class="table cbi-section-table"> + <div class="tr cbi-section-table-titles"> + <div class="th cbi-section-table-cell"><%:Hostname%></div> + <div class="th cbi-section-table-cell"><%:IPv4%></div> + <div class="th cbi-section-table-cell"><%:MAC%></div> + <div class="th cbi-section-table-cell"><%:Manufacturer%></div> + <div class="th cbi-section-table-cell"><%:Model%></div> + <div class="th cbi-section-table-cell"><%:Class%></div> + </div> <% for i,v in ipairs(devdump) do if v.DeviceProfileUuid ~= "" then %> - <tr class="cbi-section-table-row cbi-rowstyle-<%=(style and 1 or 2)%>"> - <td class="cbi-value-field"><%=v.Hostname%></td> - <td class="cbi-value-field"><%=v.Ipv4Address%></td> - <td class="cbi-value-field"><a href="/cgi-bin/clientdetails?mac=<%=v.MacAddress%>"><%=v.MacAddress%></a></td> - <td class="cbi-value-field"><%=devicevalues[v.DeviceProfileUuid].Manufacturer%></td> - <td class="cbi-value-field"><%=devicevalues[v.DeviceProfileUuid].Model%></td> - <td class="cbi-value-field"><%=devicevalues[v.DeviceProfileUuid].ThingClass%></td> - </tr> + <div class="tr cbi-section-table-row cbi-rowstyle-<%=(style and 1 or 2)%>"> + <div class="td cbi-value-field"><%=v.Hostname%></div> + <div class="td cbi-value-field"><%=v.Ipv4Address%></div> + <div class="td cbi-value-field"><a href="/cgi-bin/clientdetails?mac=<%=v.MacAddress%>"><%=v.MacAddress%></a></div> + <div class="td cbi-value-field"><%=devicevalues[v.DeviceProfileUuid].Manufacturer%></div> + <div class="td cbi-value-field"><%=devicevalues[v.DeviceProfileUuid].Model%></div> + <div class="td cbi-value-field"><%=devicevalues[v.DeviceProfileUuid].ThingClass%></div> + </div> <% style=false end end %> - </table> + </div> </div> </fieldset> <br /> <fieldset class="cbi-section"> <legend><%:Unrecognized Clients%></legend> <div class="cbi-section-node"> - <table class="cbi-section-table"> - <tr class="cbi-section-table-titles"> - <th class="cbi-section-table-cell"><%:Hostname%></th> - <th class="cbi-section-table-cell"><%:IPv4%></th> - <th class="cbi-section-table-cell"><%:MAC%></th> - <th class="cbi-section-table-cell"><%:Manufacturer%></th> - <th class="cbi-section-table-cell"><%:Model%></th> - <th class="cbi-section-table-cell"><%:DhcpVendor%></th> - <th class="cbi-section-table-cell"><%:DhcpHostname%></th> - </tr> + <div class="table cbi-section-table"> + <div class="tr cbi-section-table-titles"> + <div class="th cbi-section-table-cell"><%:Hostname%></div> + <div class="th cbi-section-table-cell"><%:IPv4%></div> + <div class="th cbi-section-table-cell"><%:MAC%></div> + <div class="th cbi-section-table-cell"><%:Manufacturer%></div> + <div class="th cbi-section-table-cell"><%:Model%></div> + <div class="th cbi-section-table-cell"><%:DhcpVendor%></div> + <div class="th cbi-section-table-cell"><%:DhcpHostname%></div> + </div> <% for i,v in ipairs(devdump) do if v.DeviceProfileUuid == "" then %> - <tr class="cbi-section-table-row cbi-rowstyle-<%=(style and 1 or 2)%>"> - <td class="cbi-value-field"><%=v.Hostname%></td> - <td class="cbi-value-field"><%=v.Ipv4Address%></td> - <td class="cbi-value-field"><a href="/cgi-bin/clientdetails?mac=<%=v.MacAddress%>"><%=v.MacAddress%></a></td> - <td class="cbi-value-field"><%=v.SsdpManufacturer%></td> - <td class="cbi-value-field"><%=v.SsdpModelName%></td> - <td class="cbi-value-field"><%=v.DhcpVendor1%></td> - <td class="cbi-value-field"><%=v.DhcpHostname%></td> - </tr> + <div class="tr cbi-section-table-row cbi-rowstyle-<%=(style and 1 or 2)%>"> + <div class="td cbi-value-field"><%=v.Hostname%></div> + <div class="td cbi-value-field"><%=v.Ipv4Address%></div> + <div class="td cbi-value-field"><a href="/cgi-bin/clientdetails?mac=<%=v.MacAddress%>"><%=v.MacAddress%></a></div> + <div class="td cbi-value-field"><%=v.SsdpManufacturer%></div> + <div class="td cbi-value-field"><%=v.SsdpModelName%></div> + <div class="td cbi-value-field"><%=v.DhcpVendor1%></div> + <div class="td cbi-value-field"><%=v.DhcpHostname%></div> + </div> <% style=false end end %> - </table> + </div> </div> </fieldset> diff --git a/applications/luci-app-ocserv/luasrc/view/ocserv_status.htm b/applications/luci-app-ocserv/luasrc/view/ocserv_status.htm index 03a9ed70e..66e44e967 100644 --- a/applications/luci-app-ocserv/luasrc/view/ocserv_status.htm +++ b/applications/luci-app-ocserv/luasrc/view/ocserv_status.htm @@ -5,8 +5,8 @@ function(x) { var tb = document.getElementById('ocserv_status_table'); - if (tb && (idx < tb.rows.length)) - tb.rows[0].parentNode.removeChild(tb.rows[idx]); + if (tb && (idx + 1 < tb.childNodes.length)) + tb.removeChild(tb.childNodes[idx + 1]); } ); } @@ -18,38 +18,28 @@ if (st && tb) { /* clear all rows */ - while( tb.rows.length > 1 ) - tb.deleteRow(1); + while (tb.firstElementChild !== tb.lastElementChild) + tb.removeChild(tb.lastElementChild); - for( var i = 0; i < st.length; i++ ) + for (var i = 0; i < st.length; i++) { - var tr = tb.insertRow(-1); - tr.className = 'cbi-section-table-row cbi-rowstyle-' + ((i % 2) + 1); - - tr.insertCell(-1).innerHTML = st[i].user; - tr.insertCell(-1).innerHTML = st[i].group; - tr.insertCell(-1).innerHTML = st[i].vpn_ip; - tr.insertCell(-1).innerHTML = st[i].ip; - tr.insertCell(-1).innerHTML = st[i].device; - tr.insertCell(-1).innerHTML = st[i].time; - tr.insertCell(-1).innerHTML = st[i].cipher; - tr.insertCell(-1).innerHTML = st[i].status; - - tr.insertCell(-1).innerHTML = String.format( - '<input class="cbi-button cbi-input-remove" type="button" value="<%:Disconnect%>" onclick="ocserv_disconnect(%d)" />', - st[i].id - ); + tb.appendChild(E('<div class="tr cbi-section-table-row cbi-rowstyle-%d">'.format((i % 2) + 1), [ + E('<div class="td">', st[i].user), + E('<div class="td">', st[i].group), + E('<div class="td">', st[i].vpn_ip), + E('<div class="td">', st[i].ip), + E('<div class="td">', st[i].device), + E('<div class="td">', st[i].time), + E('<div class="td">', st[i].cipher), + E('<div class="td">', st[i].status), + E('<div class="td">', + E('<input class="cbi-button cbi-input-remove" type="button" value="<%:Disconnect%>" onclick="ocserv_disconnect(%d)" />' + .format(st[i].id))) + ])); } - if( tb.rows.length == 1 ) - { - var tr = tb.insertRow(-1); - tr.className = 'cbi-section-table-row'; - - var td = tr.insertCell(-1); - td.colSpan = 5; - td.innerHTML = '<em><br /><%:There are no active users.%></em>'; - } + if (tb.firstElementChild === tb.lastElementChild) + tb.appendChild(E('<div class="tr cbi-section-table-row"><div class="td"><em><br /><%:There are no active users.%></em></div></div>')); } } ); @@ -57,20 +47,21 @@ <fieldset class="cbi-section"> <legend><%:Active OpenConnect Users%></legend> - <table class="cbi-section-table" id="ocserv_status_table"> - <tr class="cbi-section-table-titles"> - <th class="cbi-section-table-cell"><%:User%></th> - <th class="cbi-section-table-cell"><%:Group%></th> - <th class="cbi-section-table-cell"><%:IP Address%></th> - <th class="cbi-section-table-cell"><%:VPN IP Address%></th> - <th class="cbi-section-table-cell"><%:Device%></th> - <th class="cbi-section-table-cell"><%:Time%></th> - <th class="cbi-section-table-cell"><%:Cipher%></th> - <th class="cbi-section-table-cell"><%:Status%></th> - <th class="cbi-section-table-cell"> </th> - </tr> - <tr class="cbi-section-table-row"> - <td colspan="5"><em><br /><%:Collecting data...%></em></td> - </tr> - </table> + <div class="table cbi-section-table" id="ocserv_status_table"> + <div class="tr cbi-section-table-titles"> + <div class="th cbi-section-table-cell"><%:User%></div> + <div class="th cbi-section-table-cell"><%:Group%></div> + <div class="th cbi-section-table-cell"><%:IP Address%></div> + <div class="th cbi-section-table-cell"><%:VPN IP Address%></div> + <div class="th cbi-section-table-cell"><%:Device%></div> + <div class="th cbi-section-table-cell"><%:Time%></div> + <div class="th cbi-section-table-cell"><%:Cipher%></div> + <div class="th cbi-section-table-cell"><%:Status%></div> + <div class="th cbi-section-table-cell"> </div> + </div> + <div class="tr cbi-section-table-row"> + <div class="td" colspan="5"><em><br /><%:Collecting data...%></em></div> + </div> + </div> </fieldset> + diff --git a/applications/luci-app-olsr-services/luasrc/view/freifunk-services/services.htm b/applications/luci-app-olsr-services/luasrc/view/freifunk-services/services.htm index 476150dd2..150ed87da 100644 --- a/applications/luci-app-olsr-services/luasrc/view/freifunk-services/services.htm +++ b/applications/luci-app-olsr-services/luasrc/view/freifunk-services/services.htm @@ -132,11 +132,11 @@ end { var service = info[idx]; s += String.format( - '<tr class="cbi-section-table-row cbi-rowstyle-'+(1 + (idx % 2))+'">' + - '<td class="cbi-section-table-titles"><a href="%s">%s</a></td>' + - '<td class="cbi-section-table-titles">%s</td>' + - '<td class="cbi-section-table-titles"><a href="http://%s/cgi-bin-status.html">%s</a></td>' + - '</tr>', + '<div class="tr cbi-section-table-row cbi-rowstyle-'+(1 + (idx % 2))+'">' + + '<div class="td cbi-section-table-titles"><a href="%s">%s</a></div>' + + '<div class="td cbi-section-table-titles">%s</div>' + + '<div class="td cbi-section-table-titles"><a href="http://%s/cgi-bin-status.html">%s</a></div>' + + '</div>', service.url, service.descr, service.proto, service.origin_link, service.origin || '?' ); } @@ -153,16 +153,16 @@ end <fieldset class="cbi-section"> <legend><%:Internal services%></legend> - <table class="cbi-section-table"> - <thead> - <tr class="cbi-section-table-titles"> - <th class="cbi-section-table-cell"><%:Url%></th> - <th class="cbi-section-table-cell"><%:Protocol%></th> - <th class="cbi-section-table-cell"><%:Source%></th> - </tr> - </thead> - - <tbody id="olsr_services"> + <div class="table cbi-section-table"> + <div class="thead"> + <div class="tr cbi-section-table-titles"> + <div class="th cbi-section-table-cell"><%:Url%></div> + <div class="th cbi-section-table-cell"><%:Protocol%></div> + <div class="th cbi-section-table-cell"><%:Source%></div> + </div> + </div> + + <div class="tbody" id="olsr_services"> <% for k, line in ipairs(services) do local field = {} @@ -178,15 +178,15 @@ end local url, proto, descr, origin = pcdata(field[1]), pcdata(field[2]), utl.trim(pcdata(field[3])), pcdata(field[4]) %> - <tr class="cbi-section-table-row cbi-rowstyle-<%=i%>"> - <td class="cbi-section-table-titles"><a href="<%=url%>"><%=descr%></a></td> - <td class="cbi-section-table-titles"><%=proto%></td> - <td class="cbi-section-table-titles"><a href="http://<%=origin_link%>/cgi-bin-status.html"><%=origin%></a></td> - </tr> + <div class="tr cbi-section-table-row cbi-rowstyle-<%=i%>"> + <div class="td cbi-section-table-titles"><a href="<%=url%>"><%=descr%></a></div> + <div class="td cbi-section-table-titles"><%=proto%></div> + <div class="td cbi-section-table-titles"><a href="http://<%=origin_link%>/cgi-bin-status.html"><%=origin%></a></div> + </div> <% i = ((i % 2) + 1) end %> - </tbody> - </table> + </div> + </div> <br /> <%=last_update%> </fieldset> diff --git a/applications/luci-app-olsr/luasrc/view/status-olsr/hna.htm b/applications/luci-app-olsr/luasrc/view/status-olsr/hna.htm index 5ea7b74e4..2dc4ce173 100644 --- a/applications/luci-app-olsr/luasrc/view/status-olsr/hna.htm +++ b/applications/luci-app-olsr/luasrc/view/status-olsr/hna.htm @@ -41,7 +41,7 @@ XHR.poll(10, '<%=REQUEST_URI%>', { status: 1 }, { var hna = info[idx]; var linkgw = '' - s += '<tr class="cbi-section-table-row cbi-rowstyle-'+(1 + (idx % 2))+' proto-' + hna.proto + '">' + s += '<div class="tr cbi-section-table-row cbi-rowstyle-'+(1 + (idx % 2))+' proto-' + hna.proto + '">' if (hna.proto == '6') { linkgw = '<a href="http://[' + hna.gateway + ']/cgi-bin-status.html">' + hna.gateway + '</a>' } else { @@ -61,11 +61,11 @@ XHR.poll(10, '<%=REQUEST_URI%>', { status: 1 }, } s += String.format( - '<td class="cbi-section-table-cell">%s</td>' + - '<td class="cbi-section-table-cell">%s</td>' + - '<td class="cbi-section-table-cell">%s</td>', hna.destination + '/' + hna.genmask, linkgw + hostname, validity + '<div class="td cbi-section-table-cell">%s</div>' + + '<div class="td cbi-section-table-cell">%s</div>' + + '<div class="td cbi-section-table-cell">%s</div>', hna.destination + '/' + hna.genmask, linkgw + hostname, validity ) - s += '</tr>' + s += '</div>' } hnadiv.innerHTML = s; } @@ -79,21 +79,21 @@ XHR.poll(10, '<%=REQUEST_URI%>', { status: 1 }, <fieldset class="cbi-section"> <legend><%:Overview of currently active OLSR host net announcements%></legend> - <table class="cbi-section-table"> - <thead> - <tr class="cbi-section-table-titles"> - <th class="cbi-section-table-cell"><%:Announced network%></th> - <th class="cbi-section-table-cell"><%:OLSR gateway%></th> - <th class="cbi-section-table-cell"><%:Validity Time%></th> - </tr> + <div class="table cbi-section-table"> + <div class="thead"> + <div class="tr cbi-section-table-titles"> + <div class="th cbi-section-table-cell"><%:Announced network%></div> + <div class="th cbi-section-table-cell"><%:OLSR gateway%></div> + <div class="th cbi-section-table-cell"><%:Validity Time%></div> + </div> - </thead> - <tbody id="olsrd_hna"> + </div> + <div class="tbody" id="olsrd_hna"> <% for k, route in ipairs(hna) do %> - <tr class="cbi-section-table-row cbi-rowstyle-<%=i%> proto-<%=hna[k].proto%>"> - <td class="cbi-section-table-cell"><%=hna[k].destination%>/<%=hna[k].genmask%> </td> - <td class="cbi-section-table-cell"> + <div class="tr cbi-section-table-row cbi-rowstyle-<%=i%> proto-<%=hna[k].proto%>"> + <div class="td cbi-section-table-cell"><%=hna[k].destination%>/<%=hna[k].genmask%> </div> + <div class="td cbi-section-table-cell"> <% if hna[k].proto == '6' then %> <a href="http://[<%=hna[k].gateway%>]/cgi-bin-status.html"><%=hna[k].gateway%></a> <% else %> @@ -102,20 +102,20 @@ XHR.poll(10, '<%=REQUEST_URI%>', { status: 1 }, <% if hna[k].hostname then %> / <a href="http://<%=hna[k].hostname%>/cgi-bin-status.html"><%=hna[k].hostname%></a> <% end %> - </td> + </div> <% if hna[k].validityTime then validity = hna[k].validityTime .. 's' else validity = '-' end %> - <td class="cbi-section-table-cell"><%=validity%></td> - </tr> + <div class="td cbi-section-table-cell"><%=validity%></div> + </div> <% i = ((i % 2) + 1) end %> - </tbody> - </table> + </div> + </div> </fieldset> <%+status-olsr/common_js%> 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 81d0a3dd3..e3ccd0c23 100644 --- a/applications/luci-app-olsr/luasrc/view/status-olsr/interfaces.htm +++ b/applications/luci-app-olsr/luasrc/view/status-olsr/interfaces.htm @@ -18,31 +18,31 @@ local i = 1 <fieldset class="cbi-section"> <legend><%:Overview of interfaces where OLSR is running%></legend> - <table class="cbi-section-table"> - <tr> - <th class="cbi-section-table-cell"><%:Interface%></th> - <th class="cbi-section-table-cell"><%:State%></th> - <th class="cbi-section-table-cell"><%:MTU%></th> - <th class="cbi-section-table-cell"><%:WLAN%></th> - <th class="cbi-section-table-cell"><%:Source address%></th> - <th class="cbi-section-table-cell"><%:Netmask%></th> - <th class="cbi-section-table-cell"><%:Broadcast address%></th> - </tr> + <div class="table cbi-section-table"> + <div class="tr"> + <div class="th cbi-section-table-cell"><%:Interface%></div> + <div class="th cbi-section-table-cell"><%:State%></div> + <div class="th cbi-section-table-cell"><%:MTU%></div> + <div class="th cbi-section-table-cell"><%:WLAN%></div> + <div class="th cbi-section-table-cell"><%:Source address%></div> + <div class="th cbi-section-table-cell"><%:Netmask%></div> + <div class="th cbi-section-table-cell"><%:Broadcast address%></div> + </div> <% for k, iface in ipairs(iface) do %> - <tr class="cbi-section-table-row cbi-rowstyle-<%=i%> proto-<%=iface.proto%>"> - <td class="cbi-section-table-cell"><%=iface.name%></td> - <td class="cbi-section-table-cell"><%=iface.state%></td> - <td class="cbi-section-table-cell"><%=iface.olsrMTU%></td> - <td class="cbi-section-table-cell"><%=iface.wireless and luci.i18n.translate('yes') or luci.i18n.translate('no')%></td> - <td class="cbi-section-table-cell"><%=iface.ipv4Address or iface.ipv6Address%></td> - <td class="cbi-section-table-cell"><%=iface.netmask%></td> - <td class="cbi-section-table-cell"><%=iface.broadcast or iface.multicast%></td> - </tr> + <div class="tr cbi-section-table-row cbi-rowstyle-<%=i%> proto-<%=iface.proto%>"> + <div class="td cbi-section-table-cell"><%=iface.name%></div> + <div class="td cbi-section-table-cell"><%=iface.state%></div> + <div class="td cbi-section-table-cell"><%=iface.olsrMTU%></div> + <div class="td cbi-section-table-cell"><%=iface.wireless and luci.i18n.translate('yes') or luci.i18n.translate('no')%></div> + <div class="td cbi-section-table-cell"><%=iface.ipv4Address or iface.ipv6Address%></div> + <div class="td cbi-section-table-cell"><%=iface.netmask%></div> + <div class="td cbi-section-table-cell"><%=iface.broadcast or iface.multicast%></div> + </div> <% i = ((i % 2) + 1) end %> - </table> + </div> </fieldset> <%+status-olsr/common_js%> <%+footer%> 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 f658288fc..8c9f63af0 100644 --- a/applications/luci-app-olsr/luasrc/view/status-olsr/mid.htm +++ b/applications/luci-app-olsr/luasrc/view/status-olsr/mid.htm @@ -15,11 +15,11 @@ local i = 1 <div id="togglebuttons"></div> <fieldset class="cbi-section"> <legend><%:Overview of known multiple interface announcements%></legend> - <table class="cbi-section-table"> - <tr class="cbi-section-table-titles"> - <th class="cbi-section-table-cell"><%:OLSR node%></th> - <th class="cbi-section-table-cell" ><%:Secondary OLSR interfaces%></th> - </tr> + <div class="table cbi-section-table"> + <div class="tr cbi-section-table-titles"> + <div class="th cbi-section-table-cell"><%:OLSR node%></div> + <div class="th cbi-section-table-cell" ><%:Secondary OLSR interfaces%></div> + </div> <% for k, mid in ipairs(mids) do local aliases = '' @@ -37,14 +37,14 @@ local i = 1 end %> - <tr class="cbi-section-table-row cbi-rowstyle-<%=i%> proto-<%=mid.proto%>"> - <td class="cbi-section-table-cell"><a href="http://<%=host%>/cgi-bin-status.html"><%=mid.ipAddress%></a></td> - <td class="cbi-section-table-cell"><%=aliases%></td> - </tr> + <div class="tr cbi-section-table-row cbi-rowstyle-<%=i%> proto-<%=mid.proto%>"> + <div class="td cbi-section-table-cell"><a href="http://<%=host%>/cgi-bin-status.html"><%=mid.ipAddress%></a></div> + <div class="td cbi-section-table-cell"><%=aliases%></div> + </div> <% i = ((i % 2) + 1) end %> - </table> + </div> </fieldset> <%+status-olsr/common_js%> <%+footer%> 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 c077c2048..ab0986586 100644 --- a/applications/luci-app-olsr/luasrc/view/status-olsr/neighbors.htm +++ b/applications/luci-app-olsr/luasrc/view/status-olsr/neighbors.htm @@ -64,36 +64,36 @@ end if (neigh.proto == '6') { s += String.format( - '<tr class="cbi-section-table-row cbi-rowstyle-'+(1 + (idx % 2))+' proto-%s">' + - '<td class="cbi-section-table-titles" style="background-color:%s"><a href="http://[%s]/cgi-bin-status.html">%s</a></td>', + '<div class="tr cbi-section-table-row cbi-rowstyle-'+(1 + (idx % 2))+' proto-%s">' + + '<div class="td cbi-section-table-titles" style="background-color:%s"><a href="http://[%s]/cgi-bin-status.html">%s</a></div>', neigh.proto, neigh.dfgcolor, neigh.rip, neigh.rip ); } else { s += String.format( - '<tr class="cbi-section-table-row cbi-rowstyle-'+(1 + (idx % 2))+' proto-%s">' + - '<td class="cbi-section-table-titles" style="background-color:%s"><a href="http://%s/cgi-bin-status.html">%s</a></td>', + '<div class="tr cbi-section-table-row cbi-rowstyle-'+(1 + (idx % 2))+' proto-%s">' + + '<div class="td cbi-section-table-titles" style="background-color:%s"><a href="http://%s/cgi-bin-status.html">%s</a></div>', neigh.proto, neigh.dfgcolor, neigh.rip, neigh.rip ); } if (neigh.hn) { s += String.format( - '<td class="cbi-section-table-titles" style="background-color:%s"><a href="http://%s/cgi-bin-status.html">%s</a></td>', + '<div class="td cbi-section-table-titles" style="background-color:%s"><a href="http://%s/cgi-bin-status.html">%s</a></div>', neigh.dfgcolor, neigh.hn, neigh.hn ); } else { s += String.format( - '<td class="cbi-section-table-titles" style="background-color:%s">?</td>', + '<div class="td cbi-section-table-titles" style="background-color:%s">?</div>', neigh.dfgcolor ); } s += String.format( - '<td class="cbi-section-table-titles" style="background-color:%s">%s</td>' + - '<td class="cbi-section-table-titles" style="background-color:%s">%s</td>' + - '<td class="cbi-section-table-titles" style="background-color:%s">%s</td>' + - '<td class="cbi-section-table-titles" style="background-color:%s">%s</td>' + - '<td class="cbi-section-table-titles" style="background-color:%s">%s</td>' + - '<td class="cbi-section-table-titles" style="background-color:%s" title="Signal: %s Noise: %s">%s</td>' + - '</tr>', + '<div class="td cbi-section-table-titles" style="background-color:%s">%s</div>' + + '<div class="td cbi-section-table-titles" style="background-color:%s">%s</div>' + + '<div class="td cbi-section-table-titles" style="background-color:%s">%s</div>' + + '<div class="td cbi-section-table-titles" style="background-color:%s">%s</div>' + + '<div class="td cbi-section-table-titles" style="background-color:%s">%s</div>' + + '<div class="td cbi-section-table-titles" style="background-color:%s" title="Signal: %s Noise: %s">%s</div>' + + '</div>', neigh.dfgcolor, neigh.ifn, neigh.dfgcolor, neigh.lip, neigh.dfgcolor, neigh.lq, neigh.dfgcolor, neigh.nlq, neigh.color, neigh.cost, neigh.snr_color, neigh.signal, neigh.noise, neigh.snr || '?' ); } @@ -112,21 +112,21 @@ end <fieldset class="cbi-section"> <legend><%:Overview of currently established OLSR connections%></legend> - <table class="cbi-section-table"> - <thead> - <tr class="cbi-section-table-titles"> - <th class="cbi-section-table-cell"><%:Neighbour IP%></th> - <th class="cbi-section-table-cell"><%:Hostname%></th> - <th class="cbi-section-table-cell"><%:Interface%></th> - <th class="cbi-section-table-cell"><%:Local interface IP%></th> - <th class="cbi-section-table-cell">LQ</th> - <th class="cbi-section-table-cell">NLQ</th> - <th class="cbi-section-table-cell">ETX</th> - <th class="cbi-section-table-cell">SNR</th> - </tr> - </thead> + <div class="table cbi-section-table"> + <div class="thead"> + <div class="tr cbi-section-table-titles"> + <div class="th cbi-section-table-cell"><%:Neighbour IP%></div> + <div class="th cbi-section-table-cell"><%:Hostname%></div> + <div class="th cbi-section-table-cell"><%:Interface%></div> + <div class="th cbi-section-table-cell"><%:Local interface IP%></div> + <div class="th cbi-section-table-cell">LQ</div> + <div class="th cbi-section-table-cell">NLQ</div> + <div class="th cbi-section-table-cell">ETX</div> + <div class="th cbi-section-table-cell">SNR</div> + </div> + </div> - <tbody id="olsr_neigh_table"> + <div class="tbody" id="olsr_neigh_table"> <% local i = 1 for k, link in ipairs(links) do link.linkCost = tonumber(link.linkCost) or 0 @@ -147,25 +147,25 @@ end end %> - <tr class="cbi-section-table-row cbi-rowstyle-<%=i%> proto-<%=link.proto%>"> + <div class="tr cbi-section-table-row cbi-rowstyle-<%=i%> proto-<%=link.proto%>"> <% if link.proto == "6" then %> - <td class="cbi-section-table-titles" style="background-color:<%=defaultgw_color%>"><a href="http://[<%=link.remoteIP%>]/cgi-bin-status.html"><%=link.remoteIP%></a></td> + <div class="td cbi-section-table-titles" style="background-color:<%=defaultgw_color%>"><a href="http://[<%=link.remoteIP%>]/cgi-bin-status.html"><%=link.remoteIP%></a></div> <% else %> - <td class="cbi-section-table-titles" style="background-color:<%=defaultgw_color%>"><a href="http://<%=link.remoteIP%>/cgi-bin-status.html"><%=link.remoteIP%></a></td> + <div class="td cbi-section-table-titles" style="background-color:<%=defaultgw_color%>"><a href="http://<%=link.remoteIP%>/cgi-bin-status.html"><%=link.remoteIP%></a></div> <% end %> - <td class="cbi-section-table-titles" style="background-color:<%=defaultgw_color%>"><a href="http://<%=link.hostname%>/cgi-bin-status.html"><%=link.hostname%></a></td> - <td class="cbi-section-table-titles" style="background-color:<%=defaultgw_color%>"><%=link.interface%></td> - <td class="cbi-section-table-titles" style="background-color:<%=defaultgw_color%>"><%=link.localIP%></td> - <td class="cbi-section-table-titles" style="background-color:<%=defaultgw_color%>"><%=string.format("%.3f", link.linkQuality)%></td> - <td class="cbi-section-table-titles" style="background-color:<%=defaultgw_color%>"><%=string.format("%.3f", link.neighborLinkQuality)%></td> - <td class="cbi-section-table-titles" style="background-color:<%=color%>"><%=string.format("%.3f", link.linkCost)%></td> - <td class="cbi-section-table-titles" style="background-color:<%=snr_color%>" title="Signal: <%=link.signal%> Noise: <%=link.noise%>"><%=link.snr%></td> - </tr> + <div class="td cbi-section-table-titles" style="background-color:<%=defaultgw_color%>"><a href="http://<%=link.hostname%>/cgi-bin-status.html"><%=link.hostname%></a></div> + <div class="td cbi-section-table-titles" style="background-color:<%=defaultgw_color%>"><%=link.interface%></div> + <div class="td cbi-section-table-titles" style="background-color:<%=defaultgw_color%>"><%=link.localIP%></div> + <div class="td cbi-section-table-titles" style="background-color:<%=defaultgw_color%>"><%=string.format("%.3f", link.linkQuality)%></div> + <div class="td cbi-section-table-titles" style="background-color:<%=defaultgw_color%>"><%=string.format("%.3f", link.neighborLinkQuality)%></div> + <div class="td cbi-section-table-titles" style="background-color:<%=color%>"><%=string.format("%.3f", link.linkCost)%></div> + <div class="td cbi-section-table-titles" style="background-color:<%=snr_color%>" title="Signal: <%=link.signal%> Noise: <%=link.noise%>"><%=link.snr%></div> + </div> <% i = ((i % 2) + 1) end %> - </tbody> - </table> + </div> + </div> <br /> <%+status-olsr/legend%> 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 61e17b3b2..832a27aed 100644 --- a/applications/luci-app-olsr/luasrc/view/status-olsr/overview.htm +++ b/applications/luci-app-olsr/luasrc/view/status-olsr/overview.htm @@ -160,48 +160,48 @@ XHR.poll(10, '<%=REQUEST_URI%>/json', { }, <fieldset class="cbi-section"> <legend><%:Network%></legend> - <table width="100%" cellspacing="10"> - <tr><td width="33%"><%:Interfaces%></td><td> + <div class="table" width="100%" cellspacing="10"> + <div class="tr"><div class="td" width="33%"><%:Interfaces%></div><div class="td"> <a href="<%=REQUEST_URI%>/interfaces"> <span id="nr_ifaces">-<span> </a> - </td></tr> - <tr><td width="33%"><%:Neighbors%></td><td> + </div></div> + <div class="tr"><div class="td" width="33%"><%:Neighbors%></div><div class="td"> <a href="<%=REQUEST_URI%>/neighbors"> <span id="nr_neigh">-</span> </a> - </td></tr> - <tr><td width="33%"><%:Nodes%></td><td> + </div></div> + <div class="tr"><div class="td" width="33%"><%:Nodes%></div><div class="td"> <a href="<%=REQUEST_URI%>/topology"> <span id="nr_nodes">-</span> </a> - </td></tr> - <tr><td width="33%"><%:HNA%></td><td> + </div></div> + <div class="tr"><div class="td" width="33%"><%:HNA%></div><div class="td"> <a href="<%=REQUEST_URI%>/hna"> <span id="nr_hna">-</span> </a> - </td></tr> - <tr><td width="33%"><%:Links total%></td><td> + </div></div> + <div class="tr"><div class="td" width="33%"><%:Links total%></div><div class="td"> <a href="<%=REQUEST_URI%>/topology"> <span id="nr_topo">-</span> </a> - </td></tr> - <tr><td width="33%"><%:Links per node (average)%></td><td> + </div></div> + <div class="tr"><div class="td" width="33%"><%:Links per node (average)%></div><div class="td"> <span id="meshfactor">-</span> - </td></tr> + </div></div> - </table> + </div> </fieldset> <fieldset class="cbi-section"> <legend>OLSR <%:Configuration%></legend> - <table width="100%" cellspacing="10"> - <tr><td width="33%"><%:Version%></td><td> + <div class="table" width="100%" cellspacing="10"> + <div class="tr"><div class="td" width="33%"><%:Version%></div><div class="td"> <span id="version">-<span> - </td></tr> - <tr><td width="33%"><%:Download Config%></td><td> + </div></div> + <div class="tr"><div class="td" width="33%"><%:Download Config%></div><div class="td"> <% if has_ipv4_conf then %> <a href="<%=REQUEST_URI%>?openwrt_v4">OpenWrt (IPv4)</a>, <% end %> @@ -214,8 +214,8 @@ XHR.poll(10, '<%=REQUEST_URI%>/json', { }, <% if has_ipv6_conf then %> <a href="<%=REQUEST_URI%>?conf_v6">OLSRD (IPv6)</a> <% end %> - </td></tr> - </table> + </div></div> + </div> </fieldset> <%+footer%> 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 8e46daa02..c75b94fce 100644 --- a/applications/luci-app-olsr/luasrc/view/status-olsr/routes.htm +++ b/applications/luci-app-olsr/luasrc/view/status-olsr/routes.htm @@ -50,9 +50,9 @@ XHR.poll(20, '<%=REQUEST_URI%>', { status: 1 }, var route = info[idx]; s += String.format( - '<tr class="cbi-section-table-row cbi-rowstyle-'+(1 + (idx % 2))+' proto-%s">' + - '<td class="cbi-section-table-cell">%s/%s</td>' + - '<td class="cbi-section-table-cell">' + + '<div class="tr cbi-section-table-row cbi-rowstyle-'+(1 + (idx % 2))+' proto-%s">' + + '<div class="td cbi-section-table-cell">%s/%s</div>' + + '<div class="td cbi-section-table-cell">' + '<a href="http://%s/cgi-bin-status.html">%s</a>', route.proto, route.dest, route.genmask, route.gw, route.gw ) @@ -72,11 +72,11 @@ XHR.poll(20, '<%=REQUEST_URI%>', { status: 1 }, } s += String.format( - '</td>' + - '<td class="cbi-section-table-cell">%s</td>' + - '<td class="cbi-section-table-cell">%s</td>' + - '<td class="cbi-section-table-cell" style="background-color:%s">%s</td>' + - '</tr>', + '</div>' + + '<div class="td cbi-section-table-cell">%s</div>' + + '<div class="td cbi-section-table-cell">%s</div>' + + '<div class="td cbi-section-table-cell" style="background-color:%s">%s</div>' + + '</div>', route.interface, route.metric, route.color, route.etx || '?' ); } @@ -96,27 +96,27 @@ XHR.poll(20, '<%=REQUEST_URI%>', { status: 1 }, <fieldset class="cbi-section"> <legend><%:Overview of currently known routes to other OLSR nodes%></legend> -<table class="cbi-section-table"> - <thead> - <tr class="cbi-section-table-titles"> - <th class="cbi-section-table-cell"><%:Announced network%></th> - <th class="cbi-section-table-cell"><%:OLSR gateway%></th> - <th class="cbi-section-table-cell"><%:Interface%></th> - <th class="cbi-section-table-cell"><%:Metric%></th> - <th class="cbi-section-table-cell">ETX</th> - </tr> - </thead> +<div class="table cbi-section-table"> + <div class="thead"> + <div class="tr cbi-section-table-titles"> + <div class="th cbi-section-table-cell"><%:Announced network%></div> + <div class="th cbi-section-table-cell"><%:OLSR gateway%></div> + <div class="th cbi-section-table-cell"><%:Interface%></div> + <div class="th cbi-section-table-cell"><%:Metric%></div> + <div class="th cbi-section-table-cell">ETX</div> + </div> + </div> - <tbody id="olsrd_routes"> + <div class="tbody" id="olsrd_routes"> <% for k, route in ipairs(routes) do ETX = tonumber(route.rtpMetricCost)/1024 or '0' color = olsrtools.etx_color(ETX) %> - <tr class="cbi-section-table-row cbi-rowstyle-<%=i%> proto-<%=route.proto%>"> - <td class="cbi-section-table-cell"><%=route.destination%>/<%=route.genmask%></td> - <td class="cbi-section-table-cell"> + <div class="tr cbi-section-table-row cbi-rowstyle-<%=i%> proto-<%=route.proto%>"> + <div class="td cbi-section-table-cell"><%=route.destination%>/<%=route.genmask%></div> + <div class="td cbi-section-table-cell"> <% if route.proto == '6' then %> <a href="http://[<%=route.gateway%>]/cgi-bin-status.html"><%=route.gateway%></a> <% else %> @@ -125,16 +125,16 @@ XHR.poll(20, '<%=REQUEST_URI%>', { status: 1 }, <% if route.hostname then %> / <a href="http://<%=route.Hostname%>/cgi-bin-status.html"><%=route.hostname%></a> <% end %> - </td> - <td class="cbi-section-table-cell"><%=route.networkInterface%></td> - <td class="cbi-section-table-cell"><%=route.metric%></td> - <td class="cbi-section-table-cell" style="background-color:<%=color%>"><%=string.format("%.3f", ETX)%></td> - </tr> + </div> + <div class="td cbi-section-table-cell"><%=route.networkInterface%></div> + <div class="td cbi-section-table-cell"><%=route.metric%></div> + <div class="td cbi-section-table-cell" style="background-color:<%=color%>"><%=string.format("%.3f", ETX)%></div> + </div> <% i = ((i % 2) + 1) end %> - </tbody> -</table> + </div> +</div> <%+status-olsr/legend%> </fieldset> 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 6aa7a7546..7ca66816a 100644 --- a/applications/luci-app-olsr/luasrc/view/status-olsr/smartgw.htm +++ b/applications/luci-app-olsr/luasrc/view/status-olsr/smartgw.htm @@ -56,7 +56,7 @@ XHR.poll(10, '<%=REQUEST_URI%>', { status: 1 }, for (var idx = 0; idx < info.length; idx++) { var smartgw = info[idx]; - s += '<tr class="cbi-section-table-row cbi-rowstyle-'+(1 + (idx % 2))+' proto-' + smartgw.proto + '">' + s += '<div class="tr cbi-section-table-row cbi-rowstyle-'+(1 + (idx % 2))+' proto-' + smartgw.proto + '">' if (smartgw.proto == '6') { linkgw = '<a href="http://[' + smartgw.ipAddress + ']/cgi-bin-status.html">' + smartgw.ipAddress + '</a>' } else { @@ -64,18 +64,18 @@ XHR.poll(10, '<%=REQUEST_URI%>', { status: 1 }, } s += String.format( - '<td class="cbi-section-table-cell">%s</td>' + - '<td class="cbi-section-table-cell">%s</td>' + - '<td class="cbi-section-table-cell">%s</td>' + - '<td class="cbi-section-table-cell">%s</td>' + - '<td class="cbi-section-table-cell">%s</td>' + - '<td class="cbi-section-table-cell">%s</td>' + - '<td class="cbi-section-table-cell">%s</td>' + - '<td class="cbi-section-table-cell">%s</td>' + - '<td class="cbi-section-table-cell">%s</td>', + '<div class="td cbi-section-table-cell">%s</div>' + + '<div class="td cbi-section-table-cell">%s</div>' + + '<div class="td cbi-section-table-cell">%s</div>' + + '<div class="td cbi-section-table-cell">%s</div>' + + '<div class="td cbi-section-table-cell">%s</div>' + + '<div class="td cbi-section-table-cell">%s</div>' + + '<div class="td cbi-section-table-cell">%s</div>' + + '<div class="td cbi-section-table-cell">%s</div>' + + '<div class="td cbi-section-table-cell">%s</div>', linkgw, smartgw.status, smartgw.tcPathCost, smartgw.hopCount, smartgw.uplinkSpeed, smartgw.downlinkSpeed, smartgw.v4, smartgw.v6, smartgw.externalPrefix ) - s += '</tr>' + s += '</div>' } smartgwdiv.innerHTML = s; } @@ -94,23 +94,23 @@ XHR.poll(10, '<%=REQUEST_URI%>', { status: 1 }, <fieldset class="cbi-section"> <legend><%:Overview of smart gateways in this network%></legend> - <table class="cbi-section-table"> - <thead> - <tr class="cbi-section-table-titles"> - <th class="cbi-section-table-cell"><%:Gateway%></th> - <th class="cbi-section-table-cell"><%:Status%></th> - <th class="cbi-section-table-cell"><%:ETX%></th> - <th class="cbi-section-table-cell"><%:Hops%></th> - <th class="cbi-section-table-cell"><%:Uplink%></th> - <th class="cbi-section-table-cell"><%:Downlink%></th> - <th class="cbi-section-table-cell"><%:IPv4%></th> - <th class="cbi-section-table-cell"><%:IPv6%></th> - <th class="cbi-section-table-cell"><%:Prefix%></th> - - </tr> - </thead> - - <tbody id="olsrd_smartgw"> + <div class="table cbi-section-table"> + <div class="thead"> + <div class="tr cbi-section-table-titles"> + <div class="th cbi-section-table-cell"><%:Gateway%></div> + <div class="th cbi-section-table-cell"><%:Status%></div> + <div class="th cbi-section-table-cell"><%:ETX%></div> + <div class="th cbi-section-table-cell"><%:Hops%></div> + <div class="th cbi-section-table-cell"><%:Uplink%></div> + <div class="th cbi-section-table-cell"><%:Downlink%></div> + <div class="th cbi-section-table-cell"><%:IPv4%></div> + <div class="th cbi-section-table-cell"><%:IPv6%></div> + <div class="th cbi-section-table-cell"><%:Prefix%></div> + + </div> + </div> + + <div class="tbody" id="olsrd_smartgw"> <% for k, gw in ipairs(gws) do gw.tcPathCost = tonumber(gw.tcPathCost)/1024 or 0 @@ -119,27 +119,27 @@ XHR.poll(10, '<%=REQUEST_URI%>', { status: 1 }, end %> - <tr class="cbi-section-table-row cbi-rowstyle-<%=i%> proto-<%=proto%>"> + <div class="tr cbi-section-table-row cbi-rowstyle-<%=i%> proto-<%=proto%>"> <% if gw.proto == '6' then %> - <td class="cbi-section-table-cell"><a href="http://[<%=gw.ipAddress%>]/cgi-bin-status.html"><%=gw.ipAddress%></a></td> + <div class="td cbi-section-table-cell"><a href="http://[<%=gw.ipAddress%>]/cgi-bin-status.html"><%=gw.ipAddress%></a></div> <% else %> - <td class="cbi-section-table-cell"><a href="http://<%=gw.ipAddress%>/cgi-bin-status.html"><%=gw.ipAddress%></a></td> + <div class="td cbi-section-table-cell"><a href="http://<%=gw.ipAddress%>/cgi-bin-status.html"><%=gw.ipAddress%></a></div> <% end %> - <td class="cbi-section-table-cell"><%=gw.ipv4Status or gw.ipv6Status or '-' %></td> - <td class="cbi-section-table-cell"><%=string.format("%.3f", gw.tcPathCost)%></td> - <td class="cbi-section-table-cell"><%=gw.hopCount%></td> - <td class="cbi-section-table-cell"><%=gw.uplinkSpeed%></td> - <td class="cbi-section-table-cell"><%=gw.downlinkSpeed%></td> - <td class="cbi-section-table-cell"><%=gw.ipv4 and luci.i18n.translate('yes') or luci.i18n.translate('no')%></td> - <td class="cbi-section-table-cell"><%=gw.ipv6 and luci.i18n.translate('yes') or luci.i18n.translate('no')%></td> - <td class="cbi-section-table-cell"><%=gw.externalPrefix%></td> - </tr> + <div class="td cbi-section-table-cell"><%=gw.ipv4Status or gw.ipv6Status or '-' %></div> + <div class="td cbi-section-table-cell"><%=string.format("%.3f", gw.tcPathCost)%></div> + <div class="td cbi-section-table-cell"><%=gw.hopCount%></div> + <div class="td cbi-section-table-cell"><%=gw.uplinkSpeed%></div> + <div class="td cbi-section-table-cell"><%=gw.downlinkSpeed%></div> + <div class="td cbi-section-table-cell"><%=gw.ipv4 and luci.i18n.translate('yes') or luci.i18n.translate('no')%></div> + <div class="td cbi-section-table-cell"><%=gw.ipv6 and luci.i18n.translate('yes') or luci.i18n.translate('no')%></div> + <div class="td cbi-section-table-cell"><%=gw.externalPrefix%></div> + </div> <% i = ((i % 2) + 1) end %> - </tbody> - </table> + </div> + </div> </fieldset> <% else %> 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 b3abeaecb..02fdfddac 100644 --- a/applications/luci-app-olsr/luasrc/view/status-olsr/topology.htm +++ b/applications/luci-app-olsr/luasrc/view/status-olsr/topology.htm @@ -17,14 +17,14 @@ local olsrtools = require "luci.tools.olsr" <fieldset class="cbi-section"> <legend><%:Overview of currently known OLSR nodes%></legend> - <table class="cbi-section-table"> - <tr class="cbi-section-table-titles"> - <th class="cbi-section-table-cell"><%:OLSR node%></th> - <th class="cbi-section-table-cell"><%:Last hop%></th> - <th class="cbi-section-table-cell"><%:LQ%></th> - <th class="cbi-section-table-cell"><%:NLQ%></th> - <th class="cbi-section-table-cell"><%:ETX%></th> - </tr> + <div class="table cbi-section-table"> + <div class="tr cbi-section-table-titles"> + <div class="th cbi-section-table-cell"><%:OLSR node%></div> + <div class="th cbi-section-table-cell"><%:Last hop%></div> + <div class="th cbi-section-table-cell"><%:LQ%></div> + <div class="th cbi-section-table-cell"><%:NLQ%></div> + <div class="th cbi-section-table-cell"><%:ETX%></div> + </div> <% for k, route in ipairs(routes) do local cost = string.format("%.3f", tonumber(route.tcEdgeCost/1024) or 0) @@ -33,28 +33,28 @@ local olsrtools = require "luci.tools.olsr" local nlq = string.format("%.3f", tonumber(route.neighborLinkQuality) or 0) %> - <tr class="cbi-section-table-row cbi-rowstyle-<%=i%> proto-<%=route.proto%>"> + <div class="tr cbi-section-table-row cbi-rowstyle-<%=i%> proto-<%=route.proto%>"> <% if route.proto == "6" then %> - <td class="cbi-section-table-cell"><a href="http://[<%=route.destinationIP%>]/cgi-bin-status.html"><%=route.destinationIP%></a></td> - <td class="cbi-section-table-cell"><a href="http://[<%=route.lastHopIP%>]/cgi-bin-status.html"><%=route.lastHopIP%></a></td> + <div class="td cbi-section-table-cell"><a href="http://[<%=route.destinationIP%>]/cgi-bin-status.html"><%=route.destinationIP%></a></div> + <div class="td cbi-section-table-cell"><a href="http://[<%=route.lastHopIP%>]/cgi-bin-status.html"><%=route.lastHopIP%></a></div> <% else %> - <td class="cbi-section-table-cell"><a href="http://<%=route.destinationIP%>/cgi-bin-status.html"><%=route.destinationIP%></a></td> - <td class="cbi-section-table-cell"><a href="http://<%=route.lastHopIP%>/cgi-bin-status.html"><%=route.lastHopIP%></a></td> + <div class="td cbi-section-table-cell"><a href="http://<%=route.destinationIP%>/cgi-bin-status.html"><%=route.destinationIP%></a></div> + <div class="td cbi-section-table-cell"><a href="http://<%=route.lastHopIP%>/cgi-bin-status.html"><%=route.lastHopIP%></a></div> <%end%> - <td class="cbi-section-table-cell"><%=lq%></td> - <td class="cbi-section-table-cell"><%=nlq%></td> - <td class="cbi-section-table-cell" style="background-color:<%=color%>"><%=cost%></td> - </tr> + <div class="td cbi-section-table-cell"><%=lq%></div> + <div class="td cbi-section-table-cell"><%=nlq%></div> + <div class="td cbi-section-table-cell" style="background-color:<%=color%>"><%=cost%></div> + </div> <% i = ((i % 2) + 1) end %> - </table> + </div> <%+status-olsr/legend%> </fieldset> diff --git a/applications/luci-app-openvpn/luasrc/model/cbi/openvpn.lua b/applications/luci-app-openvpn/luasrc/model/cbi/openvpn.lua index d2b5d32c0..a6b0e1dd9 100644 --- a/applications/luci-app-openvpn/luasrc/model/cbi/openvpn.lua +++ b/applications/luci-app-openvpn/luasrc/model/cbi/openvpn.lua @@ -56,7 +56,7 @@ function s.create(self, name) luci.cbi.CREATE_PREFIX .. self.config .. "." .. self.sectiontype .. ".text" ) - if string.len(name)>3 and not name:match("[^a-zA-Z0-9_]") then + if #name > 3 and not name:match("[^a-zA-Z0-9_]") then uci:section( "openvpn", "openvpn", name, uci:get_all( "openvpn_recipes", recipe ) @@ -67,9 +67,11 @@ function s.create(self, name) uci:save("openvpn") luci.http.redirect( self.extedit:format(name) ) - else + elseif #name > 0 then self.invalid_cts = true end + + return 0 end @@ -103,10 +105,7 @@ function updown.cfgvalue(self, section) end function updown.write(self, section, value) if self.option == "stop" then - local pid = s.getPID(section) - if pid ~= nil then - sys.process.signal(pid,15) - end + luci.sys.call("/etc/init.d/openvpn stop %s" % section) else luci.sys.call("/etc/init.d/openvpn start %s" % section) end @@ -126,5 +125,8 @@ function proto.cfgvalue(self, section) return val or "udp" end +function m.on_after_commit(self,map) + require("luci.sys").call('/etc/init.d/openvpn reload') +end return m diff --git a/applications/luci-app-shadowsocks-libev/luasrc/model/shadowsocks-libev.lua b/applications/luci-app-shadowsocks-libev/luasrc/model/shadowsocks-libev.lua index af1a75b6f..5fc20c52b 100644 --- a/applications/luci-app-shadowsocks-libev/luasrc/model/shadowsocks-libev.lua +++ b/applications/luci-app-shadowsocks-libev/luasrc/model/shadowsocks-libev.lua @@ -23,7 +23,7 @@ function values_actions(o) end function values_redir(o, xmode) - o.map.uci.foreach("shadowsocks-libev", "ss_redir", function(sdata) + o.map.uci:foreach("shadowsocks-libev", "ss_redir", function(sdata) local disabled = ucival_to_bool(sdata["disabled"]) local sname = sdata[".name"] local mode = sdata["mode"] or "tcp_only" @@ -37,7 +37,7 @@ function values_redir(o, xmode) end function values_serverlist(o) - o.map.uci.foreach("shadowsocks-libev", "server", function(sdata) + o.map.uci:foreach("shadowsocks-libev", "server", function(sdata) local sname = sdata[".name"] local server = sdata["server"] local server_port = sdata["server_port"] diff --git a/applications/luci-app-shadowsocks-libev/luasrc/view/shadowsocks-libev/add_instance.htm b/applications/luci-app-shadowsocks-libev/luasrc/view/shadowsocks-libev/add_instance.htm index 219d89b07..80b95564d 100644 --- a/applications/luci-app-shadowsocks-libev/luasrc/view/shadowsocks-libev/add_instance.htm +++ b/applications/luci-app-shadowsocks-libev/luasrc/view/shadowsocks-libev/add_instance.htm @@ -1,8 +1,8 @@ <div class="cbi-section-create cbi-tblsection-create"> <br /> - <table class="cbi-section-table"> - <tr class="cbi-section-table-row"> - <td class="cbi-section-table-cell" style="width:140px"> + <div class="table cbi-section-table"> + <div class="tr cbi-section-table-row"> + <div class="td cbi-section-table-cell" style="width:140px"> <select class="cbi-input-select" id="_newinst.type" name="_newinst.type"> <option value="_dummy">-- instance type --</option> <option value="ss_local">ss-local</option> @@ -10,15 +10,15 @@ <option value="ss_redir">ss-redir</option> <option value="ss_server">ss-server</option> </select> - </td> - <td class="cbi-section-table-cell" style="width:110px"> + </div> + <div class="td cbi-section-table-cell" style="width:110px"> <input type="text" class="cbi-input-text" id="_newinst.name" name="_newinst.name" placeholder="<%:Name%>"/> - </td> - <td class="cbi-section-table-cell left"> + </div> + <div class="td cbi-section-table-cell left"> <input type="submit" class="cbi-button cbi-button-add" name="cbi.cts.<%=self.config%>" value="<%:Add%>" /> - </td> - </tr> - </table> + </div> + </div> + </div> </div> <script type="text/javascript">//<![CDATA[ XHR.poll(5, '<%=url('admin/services/shadowsocks-libev/status')%>', null, 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 37f67776a..aad330791 100644 --- a/applications/luci-app-splash/luasrc/view/admin_status/splash.htm +++ b/applications/luci-app-splash/luasrc/view/admin_status/splash.htm @@ -145,19 +145,19 @@ end { var s = ''; if (info.length == undefined) { - s += '<tr class="cbi-section-table-row"><td colspan="7" class="cbi-section-table-cell"><br /><em><%:No clients connected%></em><br /></td></tr>' + s += '<div class="tr cbi-section-table-row"><div colspan="7" class="td cbi-section-table-cell"><br /><em><%:No clients connected%></em><br /></div></div>' }; for (var idx = 0; idx < info.length; idx++) { var splash = info[idx]; s += String.format( - '<tr class="cbi-section-table-row cbi-rowstyle-'+(1 + (idx % 2))+'">' + - '<td class="cbi-section-table-cell">%s</td>' + - '<td class="cbi-section-table-cell">%s</td>' + - '<td class="cbi-section-table-cell">%s</td>' + - '<td class="cbi-section-table-cell">%s</td>' + - '<td class="cbi-section-table-cell">%s/%s</td>' + - '<td class="cbi-section-table-cell">', + '<div class="tr cbi-section-table-row cbi-rowstyle-'+(1 + (idx % 2))+'">' + + '<div class="td cbi-section-table-cell">%s</div>' + + '<div class="td cbi-section-table-cell">%s</div>' + + '<div class="td cbi-section-table-cell">%s</div>' + + '<div class="td cbi-section-table-cell">%s</div>' + + '<div class="td cbi-section-table-cell">%s/%s</div>' + + '<div class="td cbi-section-table-cell">', splash.hostname, splash.ip, splash.mac, splash.timeleft, splash.trafficin, splash.trafficout); <% if is_admin then %> @@ -185,7 +185,7 @@ end <% else %> s += String.format('%s', splash.policy); <% end %> - s += '</td></tr>' + s += '</div></div>' } tbody.innerHTML = s; } @@ -200,18 +200,18 @@ end <legend><%:Active Clients%></legend> <div class="cbi-section-node"> <% if is_admin then %><form action="<%=REQUEST_URI%>" method="post"><input type="hidden" name="token" value="<%=token%>" /><% end %> - <table class="cbi-section-table"> - <thead> - <tr class="cbi-section-table-titles"> - <th class="cbi-section-table-cell"><%:Hostname%></th> - <th class="cbi-section-table-cell"><%:IP Address%></th> - <th class="cbi-section-table-cell"><%:MAC Address%></th> - <th class="cbi-section-table-cell"><%:Time remaining%></th> - <th class="cbi-section-table-cell"><%:Traffic in/out%></th> - <th class="cbi-section-table-cell"><%:Policy%></th> - </tr> - </thead> - <tbody id="splash_table"> + <div class="table cbi-section-table"> + <div class="thead"> + <div class="tr cbi-section-table-titles"> + <div class="th cbi-section-table-cell"><%:Hostname%></div> + <div class="th cbi-section-table-cell"><%:IP Address%></div> + <div class="th cbi-section-table-cell"><%:MAC Address%></div> + <div class="th cbi-section-table-cell"><%:Time remaining%></div> + <div class="th cbi-section-table-cell"><%:Traffic in/out%></div> + <div class="th cbi-section-table-cell"><%:Policy%></div> + </div> + </div> + <div class="tbody" id="splash_table"> <%- local count = 0 @@ -227,16 +227,16 @@ end if c.ip then count = count + 1 -%> - <tr class="cbi-section-table-row cbi-rowstyle-<%=2-(count%2)%>"> - <td class="cbi-section-table-cell"><%=c.hostname or "<em>" .. translate("unknown") .. "</em>"%></td> - <td class="cbi-section-table-cell"><%=c.ip or "<em>" .. translate("unknown") .. "</em>"%></td> - <td class="cbi-section-table-cell"><%=showmac(c.mac)%></td> - <td class="cbi-section-table-cell"><%= + <div class="tr cbi-section-table-row cbi-rowstyle-<%=2-(count%2)%>"> + <div class="td cbi-section-table-cell"><%=c.hostname or "<em>" .. translate("unknown") .. "</em>"%></div> + <div class="td cbi-section-table-cell"><%=c.ip or "<em>" .. translate("unknown") .. "</em>"%></div> + <div class="td cbi-section-table-cell"><%=showmac(c.mac)%></div> + <div class="td cbi-section-table-cell"><%= (c.limit >= os.time()) and wat.date_format(c.limit-os.time()) or (c.policy ~= "normal") and "-" or "<em>" .. translate("expired") .. "</em>" - %></td> - <td class="cbi-section-table-cell"><%=wat.byte_format(c.bytes_in)%> / <%=wat.byte_format(c.bytes_out)%></td> - <td class="cbi-section-table-cell"> + %></div> + <div class="td cbi-section-table-cell"><%=wat.byte_format(c.bytes_in)%> / <%=wat.byte_format(c.bytes_out)%></div> + <div class="td cbi-section-table-cell"> <% if is_admin then %> <select name="policy.<%=c.mac:lower()%>" style="width:200px"> <option value="whitelist"<%=c.policy=="whitelist" and ' selected="selected"'%>><%:whitelisted%></option> @@ -250,21 +250,21 @@ end <% else %> <%=c.policy%> <% end %> - </td> - </tr> + </div> + </div> <%- end end if count == 0 then -%> - <tr class="cbi-section-table-row"> - <td colspan="7" class="cbi-section-table-cell"> + <div class="tr cbi-section-table-row"> + <div colspan="7" class="td cbi-section-table-cell"> <br /><em><%:No clients connected%></em><br /> - </td> - </tr> + </div> + </div> <%- end -%> - </tbody> - </table> + </div> + </div> <% if is_admin then %></form><% end %> </div> </fieldset> diff --git a/applications/luci-app-travelmate/luasrc/view/travelmate/stations.htm b/applications/luci-app-travelmate/luasrc/view/travelmate/stations.htm index f76b52e9c..bee6fcb36 100644 --- a/applications/luci-app-travelmate/luasrc/view/travelmate/stations.htm +++ b/applications/luci-app-travelmate/luasrc/view/travelmate/stations.htm @@ -17,14 +17,14 @@ This is free software, licensed under the Apache License, Version 2.0 </div> <fieldset class="cbi-section"> - <table class="cbi-section-table" style="empty-cells:hide"> - <tr class="cbi-section-table-titles"> - <th class="cbi-section-table-cell" style="text-align:left"><%:Device%></th> - <th class="cbi-section-table-cell" style="text-align:left"><%:SSID%></th> - <th class="cbi-section-table-cell" style="text-align:left"><%:BSSID%></th> - <th class="cbi-section-table-cell" style="text-align:left"><%:Encryption%></th> - <th class="cbi-section-table-cell" style="text-align:center" colspan="2"><%:Actions%></th> - </tr> + <div class="table cbi-section-table" style="empty-cells:hide"> + <div class="tr cbi-section-table-titles"> + <div class="th cbi-section-table-cell" style="text-align:left"><%:Device%></div> + <div class="th cbi-section-table-cell" style="text-align:left"><%:SSID%></div> + <div class="th cbi-section-table-cell" style="text-align:left"><%:BSSID%></div> + <div class="th cbi-section-table-cell" style="text-align:left"><%:Encryption%></div> + <div class="th cbi-section-table-cell" style="text-align:center" colspan="2"><%:Actions%></div> + </div> <% uci:foreach("wireless", "wifi-iface", function(s) local iface = s.network or "" @@ -40,25 +40,25 @@ This is free software, licensed under the Apache License, Version 2.0 style = "text-align:left;color:#0069d6;font-weight:bold" end %> - <tr class="cbi-section-table-row cbi-rowstyle-1" style="<%=style%>"> - <td style="<%=style%>"><%=device%></td> - <td style="<%=style%>"><%=ssid%></td> - <td style="<%=style%>"><%=bssid%></td> - <td style="<%=style%>"><%=encryption%></td> - <td class="cbi-value-field" style="width:80px"> - <input class="cbi-button cbi-button-up" type="button" value="" onclick="location.href='<%=luci.dispatcher.build_url('admin/services/travelmate/wifiorder')%>?cfg=<%=section%>&dir=up'" alt="<%:Move up%>" title="<%:Move up%>"/> - <input class="cbi-button cbi-button-down" type="button" value="" onclick="location.href='<%=luci.dispatcher.build_url('admin/services/travelmate/wifiorder')%>?cfg=<%=section%>&dir=down'" alt="<%:Move down%>" title="<%:Move down%>"/> - </td> - <td class="cbi-value-field" style="width:150px"> + <div class="tr cbi-section-table-row cbi-rowstyle-1" style="<%=style%>"> + <div class="td" style="<%=style%>"><%=device%></div> + <div class="td" style="<%=style%>"><%=ssid%></div> + <div class="td" style="<%=style%>"><%=bssid%></div> + <div class="td" style="<%=style%>"><%=encryption%></div> + <div class="td cbi-value-field" style="width:80px"> + <input class="cbi-button cbi-button-up" type="button" value="" onclick="location.href='<%=luci.dispatcher.build_url('admin/services/travelmate/wifiorder')%>?cfg=<%=section%>&dir=up'" alt="<%:Move up%>" title="<%:Move up%>"/> + <input class="cbi-button cbi-button-down" type="button" value="" onclick="location.href='<%=luci.dispatcher.build_url('admin/services/travelmate/wifiorder')%>?cfg=<%=section%>&dir=down'" alt="<%:Move down%>" title="<%:Move down%>"/> + </div> + <div class="td cbi-value-field" style="width:150px"> <input type="button" class="cbi-button cbi-button-edit" onclick="location.href='<%=luci.dispatcher.build_url('admin/services/travelmate/wifiedit')%>?cfg=<%=section%>'" title="<%:Edit this Uplink%>" value="<%:Edit%>"/> <input type="button" class="cbi-button cbi-button-remove" onclick="location.href='<%=luci.dispatcher.build_url('admin/services/travelmate/wifidelete')%>?cfg=<%=section%>'" title="<%:Delete this Uplink%>" value="<%:Delete%>"/> - </td> - </tr> + </div> + </div> <% end end) %> - </table> + </div> </fieldset> <div class="cbi-page-actions right"> <% diff --git a/applications/luci-app-travelmate/luasrc/view/travelmate/wifi_scan.htm b/applications/luci-app-travelmate/luasrc/view/travelmate/wifi_scan.htm index a8f63a17e..81182b99b 100644 --- a/applications/luci-app-travelmate/luasrc/view/travelmate/wifi_scan.htm +++ b/applications/luci-app-travelmate/luasrc/view/travelmate/wifi_scan.htm @@ -42,28 +42,28 @@ This is free software, licensed under the Apache License, Version 2.0 <div class="cbi-map"> <h2 name="content"><%:Wireless Scan%></h2> <fieldset class="cbi-section"> - <table class="cbi-section-table" style="empty-cells:hide"> - <tr class="cbi-section-table-titles"> - <th class="cbi-section-table-cell" style="text-align:left"><%:Uplink SSID%></th> - <th class="cbi-section-table-cell" style="text-align:left"><%:Uplink BSSID%></th> - <th class="cbi-section-table-cell" style="text-align:left"><%:Encryption%></th> - <th class="cbi-section-table-cell" style="text-align:left" colspan="2"><%:Signal strength%></th> - </tr> + <div class="table cbi-section-table" style="empty-cells:hide"> + <div class="tr cbi-section-table-titles"> + <div class="th cbi-section-table-cell" style="text-align:left"><%:Uplink SSID%></div> + <div class="th cbi-section-table-cell" style="text-align:left"><%:Uplink BSSID%></div> + <div class="th cbi-section-table-cell" style="text-align:left"><%:Encryption%></div> + <div class="th cbi-section-table-cell" style="text-align:left" colspan="2"><%:Signal strength%></div> + </div> <% for i, net in ipairs(iw.scanlist or { }) do %> - <tr class="cbi-section-table-row cbi-rowstyle-1"> - <td class="cbi-value-field" style="text-align:left"> + <div class="tr cbi-section-table-row cbi-rowstyle-1"> + <div class="td cbi-value-field" style="text-align:left"> <%=net.ssid and utl.pcdata(net.ssid) or "<em>%s</em>" % translate("hidden")%> - </td> - <td class="cbi-value-field" style="text-align:left"> + </div> + <div class="td cbi-value-field" style="text-align:left"> <%=net.bssid and utl.pcdata(net.bssid)%> - </td> - <td class="cbi-value-field" style="text-align:left"> + </div> + <div class="td cbi-value-field" style="text-align:left"> <%=format_wifi_encryption(net.encryption)%> - </td> - <td class="cbi-value-field" style="text-align:left"> + </div> + <div class="td cbi-value-field" style="text-align:left"> <%=percent_wifi_signal(net)%> % - </td> - <td class="cbi-value-field" style="width:100px;text-align:right"> + </div> + <div class="td cbi-value-field" style="width:100px;text-align:right"> <form class="inline" action="<%=luci.dispatcher.build_url('admin/services/travelmate/wifiadd')%>" method="post"> <input type="hidden" name="token" value="<%=token%>"/> <input type="hidden" name="device" value="<%=utl.pcdata(dev)%>"/> @@ -76,10 +76,10 @@ This is free software, licensed under the Apache License, Version 2.0 <% end %> <input class="cbi-button cbi-button-apply" type="submit" value="<%:Add Uplink%>"/> </form> - </td> - </tr> + </div> + </div> <% end %> - </table> + </div> </fieldset> <div class="cbi-page-actions right"> <form class="inline" action="<%=luci.dispatcher.build_url('admin/services/travelmate/wifiscan')%>" method="post"> diff --git a/applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua b/applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua index bf2b65a0a..256bbb839 100644 --- a/applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua +++ b/applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua @@ -9,7 +9,7 @@ local rlh, rpv, vld, nvd, eds, prt, tlm local ctl, dlk, dom, dty, lfq, wfq, exa local dp6, d64, pfx, qry, qrs local pro, tgr, rsc, rsn, ag2, stt -local rpn, din, dfw +local rpn, din, dfw, ath local ucl = luci.model.uci.cursor() local valman = ucl:get_first("unbound", "unbound", "manual_conf") @@ -100,15 +100,6 @@ if valman ~= "1" then pfx.optional = true pfx:depends({ dns64 = true }) - qry = s1:taboption("basic", Flag, "query_minimize", translate("Query Minimize:"), - translate("Break down query components for limited added privacy")) - qry.rmempty = false - - qrs = s1:taboption("basic", Flag, "query_min_strict", translate("Strict Minimize:"), - translate("Strict version of 'query minimize' but it can break DNS")) - qrs.rmempty = false - qrs:depends({ query_minimize = true }) - prt = s1:taboption("basic", Value, "listen_port", translate("Listening Port:"), translate("Choose Unbounds listening port")) prt.datatype = "port" @@ -216,26 +207,43 @@ if valman ~= "1" then pro = s1:taboption("resource", ListValue, "protocol", translate("Recursion Protocol:"), translate("Chose the protocol recursion queries leave on")) - pro:value("mixed", translate("IP4 and IP6")) - pro:value("ip6_prefer", translate("IP6 Preferred")) + pro:value("default", translate("Default")) pro:value("ip4_only", translate("IP4 Only")) pro:value("ip6_only", translate("IP6 Only")) + pro:value("ip6_prefer", translate("IP6 Preferred")) + pro:value("mixed", translate("IP4 and IP6")) pro.rmempty = false + rsc = s1:taboption("resource", ListValue, "resource", translate("Memory Resource:"), + translate("Use menu System/Processes to observe any memory growth")) + rsc:value("default", translate("Default")) + rsc:value("tiny", translate("Tiny")) + rsc:value("small", translate("Small")) + rsc:value("medium", translate("Medium")) + rsc:value("large", translate("Large")) + rsc.rmempty = false + rsn = s1:taboption("resource", ListValue, "recursion", translate("Recursion Strength:"), translate("Recursion activity affects memory growth and CPU load")) - rsn:value("aggressive", translate("Aggressive")) rsn:value("default", translate("Default")) rsn:value("passive", translate("Passive")) + rsn:value("aggressive", translate("Aggressive")) rsn.rmempty = false - rsc = s1:taboption("resource", ListValue, "resource", translate("Memory Resource:"), - translate("Use menu System/Processes to observe any memory growth")) - rsc:value("large", translate("Large")) - rsc:value("medium", translate("Medium")) - rsc:value("small", translate("Small")) - rsc:value("tiny", translate("Tiny")) - rsc.rmempty = false + qry = s1:taboption("resource", Flag, "query_minimize", translate("Query Minimize:"), + translate("Break down query components for limited added privacy")) + qry.rmempty = false + qry:depends({ recursion = "passive" }) + qry:depends({ recursion = "aggressive" }) + + qrs = s1:taboption("resource", Flag, "query_min_strict", translate("Strict Minimize:"), + translate("Strict version of 'query minimize' but it can break DNS")) + qrs.rmempty = false + qrs:depends({ query_minimize = true }) + + ath = s1:taboption("resource", Flag, "prefetch_root", translate("Prefetch Root:"), + translate("Obtain complete root zone files and install in auth-zone: clause")) + ath.rmempty = false eds = s1:taboption("resource", Value, "edns_size", translate("EDNS Size:"), translate("Limit extended DNS packet size")) diff --git a/applications/luci-app-upnp/luasrc/view/upnp_status.htm b/applications/luci-app-upnp/luasrc/view/upnp_status.htm index 89fdb5e21..1e0922579 100644 --- a/applications/luci-app-upnp/luasrc/view/upnp_status.htm +++ b/applications/luci-app-upnp/luasrc/view/upnp_status.htm @@ -4,8 +4,8 @@ function(x) { var tb = document.getElementById('upnp_status_table'); - if (tb && (idx < tb.rows.length)) - tb.rows[0].parentNode.removeChild(tb.rows[idx]); + if (tb && (idx + 1 < tb.childNodes.length)) + tb.removeChild(tb.childNodes[idx + 1]); } ); } @@ -17,35 +17,21 @@ if (st && tb) { /* clear all rows */ - while( tb.rows.length > 1 ) - tb.deleteRow(1); + while (tb.firstElementChild !== tb.lastElementChild) + tb.removeChild(tb.lastElementChild); - for( var i = 0; i < st.length; i++ ) - { - var tr = tb.insertRow(-1); - tr.className = 'cbi-section-table-row cbi-rowstyle-' + ((i % 2) + 1); + for (var i = 0; i < st.length; i++) + tb.appendChild(E('<div class="tr cbi-section-table-row cbi-rowstyle-%d">'.format((i % 2) + 1), [ + E('<div class="td">', st[i].proto), + E('<div class="td">', st[i].extport), + E('<div class="td">', st[i].intaddr), + E('<div class="td">', st[i].intport), + E('<div class="td">', st[i].descr), + E('<input class="cbi-button cbi-input-remove" type="button" value="<%:Delete%>" onclick="upnp_delete_fwd(%d)" />'.format(st[i].num)) + ])); - tr.insertCell(-1).innerHTML = st[i].proto; - tr.insertCell(-1).innerHTML = st[i].extport; - tr.insertCell(-1).innerHTML = st[i].intaddr; - tr.insertCell(-1).innerHTML = st[i].intport; - tr.insertCell(-1).innerHTML = st[i].descr; - - tr.insertCell(-1).innerHTML = String.format( - '<input class="cbi-button cbi-input-remove" type="button" value="<%:Delete%>" onclick="upnp_delete_fwd(%d)" />', - st[i].num - ); - } - - if( tb.rows.length == 1 ) - { - var tr = tb.insertRow(-1); - tr.className = 'cbi-section-table-row'; - - var td = tr.insertCell(-1); - td.colSpan = 5; - td.innerHTML = '<em><br /><%:There are no active redirects.%></em>'; - } + if (tb.firstElementChild === tb.lastElementChild) + tb.appendChild(E('<div class="tr cbi-section-table-row"><div class="td"><em><br /><%:There are no active redirects.%></em></div></div>')); } } ); @@ -53,17 +39,17 @@ <fieldset class="cbi-section"> <legend><%:Active UPnP Redirects%></legend> - <table class="cbi-section-table" id="upnp_status_table"> - <tr class="cbi-section-table-titles"> - <th class="cbi-section-table-cell"><%:Protocol%></th> - <th class="cbi-section-table-cell"><%:External Port%></th> - <th class="cbi-section-table-cell"><%:Client Address%></th> - <th class="cbi-section-table-cell"><%:Client Port%></th> - <th class="cbi-section-table-cell"><%:Description%></th> - <th class="cbi-section-table-cell"> </th> - </tr> - <tr class="cbi-section-table-row"> - <td colspan="5"><em><br /><%:Collecting data...%></em></td> - </tr> - </table> + <div class="table cbi-section-table" id="upnp_status_table"> + <div class="tr cbi-section-table-titles"> + <div class="th cbi-section-table-cell"><%:Protocol%></div> + <div class="th cbi-section-table-cell"><%:External Port%></div> + <div class="th cbi-section-table-cell"><%:Client Address%></div> + <div class="th cbi-section-table-cell"><%:Client Port%></div> + <div class="th cbi-section-table-cell"><%:Description%></div> + <div class="th cbi-section-table-cell"> </div> + </div> + <div class="tr cbi-section-table-row"> + <div class="td" colspan="5"><em><br /><%:Collecting data...%></em></div> + </div> + </div> </fieldset> diff --git a/applications/luci-app-wireguard/luasrc/view/wireguard.htm b/applications/luci-app-wireguard/luasrc/view/wireguard.htm index 5af6232ae..64d995529 100644 --- a/applications/luci-app-wireguard/luasrc/view/wireguard.htm +++ b/applications/luci-app-wireguard/luasrc/view/wireguard.htm @@ -164,43 +164,43 @@ for ikey, iface in pairs(data) do -%> <legend><%:Interface%> <%=ikey%></legend> - <table width="100%" cellspacing="10"> - <tr> - <td width="33%" style="vertical-align:top"><%:Configuration%></td> - <td> - <table> - <tr> - <td id="<%=ikey%>_icon" style="width:16px; text-align:center; padding:3px"> + <div class="table" width="100%" cellspacing="10"> + <div class="tr"> + <div class="td" width="33%" style="vertical-align:top"><%:Configuration%></div> + <div class="td"> + <div class="table"> + <div class="tr"> + <div class="td" id="<%=ikey%>_icon" style="width:16px; text-align:center; padding:3px"> - </td> - <td id="<%=ikey%>_info" style="vertical-align:middle; padding: 3px"> + </div> + <div class="td" id="<%=ikey%>_info" style="vertical-align:middle; padding: 3px"> <em><%:Collecting data...%></em> - </td> - </tr></table> - </td> - </tr> + </div> + </div></div> + </div> + </div> <%- for pkey, peer in pairs(iface.peers) do -%> - <tr> - <td width="33%" style="vertical-align:top"><%:Peer%></td> - <td> - <table> - <tr> - <td id="<%=ikey%>_<%=peer.public_key%>_icon" style="width:16px; text-align:center; padding:3px"> + <div class="tr"> + <div class="td" width="33%" style="vertical-align:top"><%:Peer%></div> + <div class="td"> + <div class="table"> + <div class="tr"> + <div class="td" id="<%=ikey%>_<%=peer.public_key%>_icon" style="width:16px; text-align:center; padding:3px"> <img src="<%=resource%>/icons/tunnel_disabled.png" /><br /> <small>?</small> - </td> - <td id="<%=ikey%>_<%=peer.public_key%>_info" style="vertical-align:middle; padding: 3px"> + </div> + <div class="td" id="<%=ikey%>_<%=peer.public_key%>_info" style="vertical-align:middle; padding: 3px"> <em><%:Collecting data...%></em> - </td> - </tr></table> - </td> - </tr> + </div> + </div></div> + </div> + </div> <%- end -%> - </table> + </div> <%- end -%> diff --git a/modules/luci-base/htdocs/luci-static/resources/cbi.js b/modules/luci-base/htdocs/luci-static/resources/cbi.js index 6c35372cd..0a1961916 100644 --- a/modules/luci-base/htdocs/luci-static/resources/cbi.js +++ b/modules/luci-base/htdocs/luci-static/resources/cbi.js @@ -1244,44 +1244,44 @@ function cbi_validate_field(cbid, optional, type) function cbi_row_swap(elem, up, store) { var tr = elem.parentNode; - while (tr && tr.nodeName.toLowerCase() != 'tr') + + while (tr && !tr.classList.contains('cbi-section-table-row')) tr = tr.parentNode; if (!tr) return false; - var table = tr.parentNode; - while (table && table.nodeName.toLowerCase() != 'table') - table = table.parentNode; - - if (!table) - return false; + if (up) { + var prev = tr.previousElementSibling; - var s = up ? 3 : 2; - var e = up ? table.rows.length : table.rows.length - 1; - - for (var idx = s; idx < e; idx++) - { - if (table.rows[idx] == tr) - { - if (up) - tr.parentNode.insertBefore(table.rows[idx], table.rows[idx-1]); - else - tr.parentNode.insertBefore(table.rows[idx+1], table.rows[idx]); + if (prev && prev.classList.contains('cbi-section-table-row')) + tr.parentNode.insertBefore(tr, prev); + else + return; + } + else { + var next = tr.nextElementSibling ? tr.nextElementSibling.nextElementSibling : null; - break; - } + if (next && next.classList.contains('cbi-section-table-row')) + tr.parentNode.insertBefore(tr, next); + else if (!next) + tr.parentNode.appendChild(tr); + else + return; } var ids = [ ]; - for (idx = 2; idx < table.rows.length; idx++) - { - table.rows[idx].className = table.rows[idx].className.replace( - /cbi-rowstyle-[12]/, 'cbi-rowstyle-' + (1 + (idx % 2)) - ); - if (table.rows[idx].id && table.rows[idx].id.match(/-([^\-]+)$/) ) - ids.push(RegExp.$1); + for (var i = 0, n = 0; i < tr.parentNode.childNodes.length; i++) { + var node = tr.parentNode.childNodes[i]; + if (node.classList && node.classList.contains('cbi-section-table-row')) { + node.classList.remove('cbi-rowstyle-1'); + node.classList.remove('cbi-rowstyle-2'); + node.classList.add((n++ % 2) ? 'cbi-rowstyle-2' : 'cbi-rowstyle-1'); + + if (/-([^\-]+)$/.test(node.id)) + ids.push(RegExp.$1); + } } var input = document.getElementById(store); @@ -1311,58 +1311,6 @@ function cbi_tag_last(container) } } -String.prototype.serialize = function() -{ - var o = this; - switch(typeof(o)) - { - case 'object': - // null - if( o == null ) - { - return 'null'; - } - - // array - else if( o.length ) - { - var i, s = ''; - - for( var i = 0; i < o.length; i++ ) - s += (s ? ', ' : '') + String.serialize(o[i]); - - return '[ ' + s + ' ]'; - } - - // object - else - { - var k, s = ''; - - for( k in o ) - s += (s ? ', ' : '') + k + ': ' + String.serialize(o[k]); - - return '{ ' + s + ' }'; - } - - break; - - case 'string': - // complex string - if( o.match(/[^a-zA-Z0-9_,.: -]/) ) - return 'decodeURIComponent("' + encodeURIComponent(o) + '")'; - - // simple string - else - return '"' + o + '"'; - - break; - - default: - return o.toString(); - } -} - String.prototype.format = function() { if (!RegExp) @@ -1473,10 +1421,6 @@ String.prototype.format = function() subst = esc(param, quot_esc); break; - case 'j': - subst = String.serialize(param); - break; - case 't': var td = 0; var th = 0; @@ -1543,14 +1487,6 @@ String.prototype.nobr = function() return this.replace(/[\s\n]+/g, ' '); } -String.serialize = function() -{ - var a = [ ]; - for (var i = 1; i < arguments.length; i++) - a.push(arguments[i]); - return ''.serialize.apply(arguments[0], a); -} - String.format = function() { var a = [ ]; @@ -1566,3 +1502,75 @@ String.nobr = function() a.push(arguments[i]); return ''.nobr.apply(arguments[0], a); } + + +var dummyElem, domParser; + +function isElem(e) +{ + return (typeof(e) === 'object' && e !== null && 'nodeType' in e); +} + +function toElem(s) +{ + var elem; + + try { + domParser = domParser || new DOMParser(); + elem = domParser.parseFromString(s, 'text/html').body.firstChild; + } + catch(e) {} + + if (!elem) { + try { + dummyElem = dummyElem || document.createElement('div'); + dummyElem.innerHTML = s; + elem = dummyElem.firstChild; + } + catch (e) {} + } + + return elem || null; +} + +function E() +{ + var html = arguments[0], + attr = (arguments[1] instanceof Object && !Array.isArray(arguments[1])) ? arguments[1] : null, + data = attr ? arguments[2] : arguments[1], + elem; + + if (isElem(html)) + elem = html; + else if (html.charCodeAt(0) === 60) + elem = toElem(html); + else + elem = document.createElement(html); + + if (!elem) + return null; + + if (attr) + for (var key in attr) + if (attr.hasOwnProperty(key)) + elem.setAttribute(key, attr[key]); + + if (typeof(data) === 'function') + data = data(elem); + + if (isElem(data)) { + elem.appendChild(data); + } + else if (Array.isArray(data)) { + for (var i = 0; i < data.length; i++) + if (isElem(data[i])) + elem.appendChild(data[i]); + else + elem.appendChild(document.createTextNode('' + data[i])); + } + else if (data !== null && data !== undefined) { + elem.innerHTML = '' + data; + } + + return elem; +} diff --git a/modules/luci-base/luasrc/dispatcher.lua b/modules/luci-base/luasrc/dispatcher.lua index 2c58b0ab3..6850d7e3a 100644 --- a/modules/luci-base/luasrc/dispatcher.lua +++ b/modules/luci-base/luasrc/dispatcher.lua @@ -358,7 +358,7 @@ function dispatch(request) elseif key == "REQUEST_URI" then return build_url(unpack(ctx.requestpath)) elseif key == "FULL_REQUEST_URI" then - local url = { http.getenv("SCRIPT_NAME") or "" , http.getenv("PATH_INFO") } + local url = { http.getenv("SCRIPT_NAME") or "", http.getenv("PATH_INFO") } local query = http.getenv("QUERY_STRING") if query and #query > 0 then url[#url+1] = "?" @@ -507,10 +507,11 @@ function dispatch(request) else ok, err = util.copcall(target, unpack(args)) end - assert(ok, - "Failed to execute " .. (type(c.target) == "function" and "function" or c.target.type or "unknown") .. - " dispatcher target for entry '/" .. table.concat(request, "/") .. "'.\n" .. - "The called action terminated with an exception:\n" .. tostring(err or "(unknown)")) + if not ok then + error500("Failed to execute " .. (type(c.target) == "function" and "function" or c.target.type or "unknown") .. + " dispatcher target for entry '/" .. table.concat(request, "/") .. "'.\n" .. + "The called action terminated with an exception:\n" .. tostring(err or "(unknown)")) + end else local root = node() if not root or not root.target then diff --git a/modules/luci-base/luasrc/util.lua b/modules/luci-base/luasrc/util.lua index ce42af2fb..10428b0b3 100644 --- a/modules/luci-base/luasrc/util.lua +++ b/modules/luci-base/luasrc/util.lua @@ -100,6 +100,8 @@ end -- Scope manipulation routines -- +coxpt = setmetatable({}, { __mode = "kv" }) + local tl_meta = { __mode = "k", @@ -697,73 +699,69 @@ function checklib(fullpathexe, wantedlib) return false end +------------------------------------------------------------------------------- +-- Coroutine safe xpcall and pcall versions -- --- Coroutine safe xpcall and pcall versions modified for Luci --- original version: --- coxpcall 1.13 - Copyright 2005 - Kepler Project (www.keplerproject.org) +-- Encapsulates the protected calls with a coroutine based loop, so errors can +-- be dealed without the usual Lua 5.x pcall/xpcall issues with coroutines +-- yielding inside the call to pcall or xpcall. -- --- Copyright © 2005 Kepler Project. --- Permission is hereby granted, free of charge, to any person obtaining a --- copy of this software and associated documentation files (the "Software"), --- to deal in the Software without restriction, including without limitation --- the rights to use, copy, modify, merge, publish, distribute, sublicense, --- and/or sell copies of the Software, and to permit persons to whom the --- Software is furnished to do so, subject to the following conditions: +-- Authors: Roberto Ierusalimschy and Andre Carregal +-- Contributors: Thomas Harning Jr., Ignacio Burgueño, Fabio Mascarenhas -- --- The above copyright notice and this permission notice shall be --- included in all copies or substantial portions of the Software. +-- Copyright 2005 - Kepler Project -- --- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, --- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES --- OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. --- IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, --- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, --- TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE --- OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -local performResume, handleReturnValue -local oldpcall, oldxpcall = pcall, xpcall -coxpt = {} -setmetatable(coxpt, {__mode = "kv"}) - --- Identity function for copcall -local function copcall_id(trace, ...) - return ... -end - --- values of either the function or the error handler -function coxpcall(f, err, ...) - local res, co = oldpcall(coroutine.create, f) - if not res then - local params = {...} - local newf = function() return f(unpack(params)) end - co = coroutine.create(newf) - end - local c = coroutine.running() - coxpt[co] = coxpt[c] or c or 0 +-- $Id: coxpcall.lua,v 1.13 2008/05/19 19:20:02 mascarenhas Exp $ +------------------------------------------------------------------------------- - return performResume(err, co, ...) -end - --- values of the function or the error object -function copcall(f, ...) - return coxpcall(f, copcall_id, ...) -end +------------------------------------------------------------------------------- +-- Implements xpcall with coroutines +------------------------------------------------------------------------------- +local coromap = setmetatable({}, { __mode = "k" }) --- Handle return value of protected call -function handleReturnValue(err, co, status, ...) +local function handleReturnValue(err, co, status, ...) if not status then return false, err(debug.traceback(co, (...)), ...) end - - if coroutine.status(co) ~= 'suspended' then + if coroutine.status(co) == 'suspended' then + return performResume(err, co, coroutine.yield(...)) + else return true, ... end - - return performResume(err, co, coroutine.yield(...)) end --- Resume execution of protected function call function performResume(err, co, ...) return handleReturnValue(err, co, coroutine.resume(co, ...)) end + +local function id(trace, ...) + return trace +end + +function coxpcall(f, err, ...) + local current = coroutine.running() + if not current then + if err == id then + return pcall(f, ...) + else + if select("#", ...) > 0 then + local oldf, params = f, { ... } + f = function() return oldf(unpack(params)) end + end + return xpcall(f, err) + end + else + local res, co = pcall(coroutine.create, f) + if not res then + local newf = function(...) return f(...) end + co = coroutine.create(newf) + end + coromap[co] = current + coxpt[co] = coxpt[current] or current or 0 + return performResume(err, co, ...) + end +end + +function copcall(f, ...) + return coxpcall(f, id, ...) +end diff --git a/modules/luci-base/luasrc/view/cbi/apply_widget.htm b/modules/luci-base/luasrc/view/cbi/apply_widget.htm index 543ef0b80..702512f49 100644 --- a/modules/luci-base/luasrc/view/cbi/apply_widget.htm +++ b/modules/luci-base/luasrc/view/cbi/apply_widget.htm @@ -1,59 +1,98 @@ <% export("cbi_apply_widget", function(redirect_ok) -%> <style type="text/css"> - #cbi_apply_status { + .alert-message.notice { + background: linear-gradient(#fff 0%, #eee 100%); + } + + #cbi_apply_overlay { + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + background: rgba(0, 0, 0, 0.7); + display: none; + z-index: 20000; + } + + #cbi_apply_overlay .alert-message { + position: relative; + top: 10%; + width: 60%; + margin: auto; display: flex; flex-wrap: wrap; min-height: 32px; align-items: center; - margin: 1.5em 0 1.5em 0; } - #cbi_apply_status > h4, - #cbi_apply_status > p, - #cbi_apply_status > div { + #cbi_apply_overlay .alert-message > h4, + #cbi_apply_overlay .alert-message > p, + #cbi_apply_overlay .alert-message > div { flex-basis: 100%; } - #cbi_apply_status > img { + #cbi_apply_overlay .alert-message > img { margin-right: 1em; flex-basis: 32px; } - #cbi_apply_status + script + .cbi-section { - margin-top: -1em; + body.apply-overlay-active { + overflow: hidden; + height: 100vh; } - .alert-message.notice { - background: linear-gradient(#fff 0%, #eee 100%); + body.apply-overlay-active #cbi_apply_overlay { + display: block; } </style> -<script type="text/javascript" src="<%=resource%>/cbi.js"></script> +<script type="text/javascript" src="<%=resource%>/cbi.js?v=git-18.138.59467-72fe5dd"></script> <script type="text/javascript">//<![CDATA[ var xhr = new XHR(), - stat, indicator, uci_apply_auth = { sid: '<%=luci.dispatcher.context.authsession%>', token: '<%=token%>' }, uci_apply_rollback = <%=math.max(luci.config and luci.config.apply and luci.config.apply.rollback or 30, 30)%>, uci_apply_holdoff = <%=math.max(luci.config and luci.config.apply and luci.config.apply.holdoff or 4, 1)%>, uci_apply_timeout = <%=math.max(luci.config and luci.config.apply and luci.config.apply.timeout or 5, 1)%>, uci_apply_display = <%=math.max(luci.config and luci.config.apply and luci.config.apply.display or 1.5, 1)%>; + function uci_status_message(type, content) { + var overlay = document.getElementById('cbi_apply_overlay') || document.body.appendChild(E('<div id="cbi_apply_overlay"><div class="alert-message"></div></div>')), + message = overlay.querySelector('.alert-message'); + + if (message && type) { + if (!message.classList.contains(type)) { + message.classList.remove('notice'); + message.classList.remove('warning'); + message.classList.add(type); + } + + if (content) + message.innerHTML = content; + + document.body.classList.add('apply-overlay-active'); + } + else { + document.body.classList.remove('apply-overlay-active'); + } + } + function uci_rollback(checked) { if (checked) { - stat.classList.remove('notice'); - stat.classList.add('warning'); - stat.innerHTML = '<img src="<%=resource%>/icons/loading.gif" alt="" style="vertical-align:middle" /> ' + - '<%:Failed to confirm apply within %ds, waiting for rollback…%>'.format(uci_apply_rollback); + uci_status_message('warning', + '<img src="<%=resource%>/icons/loading.gif" alt="" style="vertical-align:middle" /> ' + + '<%:Failed to confirm apply within %ds, waiting for rollback…%>'.format(uci_apply_rollback)); var call = function(r) { if (r.status === 204) { - stat.innerHTML = '<h4><%:Configuration has been rolled back!%></h4>' + + uci_status_message('warning', + '<h4><%:Configuration has been rolled back!%></h4>' + '<p><%:The device could not be reached within %d seconds after applying the pending changes, which caused the configuration to be rolled back for safety reasons. If you believe that the configuration changes are correct nonetheless, perform an unchecked configuration apply. Alternatively, you can dismiss this warning and edit changes before attempting to apply again, or revert all pending changes to keep the currently working configuration state.%></p>'.format(uci_apply_rollback) + '<div class="right">' + - '<input type="button" class="btn" onclick="this.parentNode.parentNode.style.display=\'none\'" value="<%:Dismiss%>" /> ' + + '<input type="button" class="btn" onclick="uci_status_message(false)" value="<%:Dismiss%>" /> ' + '<input type="button" class="btn" onclick="uci_revert()" value="<%:Revert changes%>" /> ' + '<input type="button" class="btn danger" onclick="uci_apply(false)" value="<%:Apply unchecked%>" />' + - '</div>'; + '</div>'); return; } @@ -64,10 +103,9 @@ call({ status: 0 }); } else { - stat.classList.remove('notice'); - stat.classList.add('warning'); - stat.innerHTML = '<h4><%:Device unreachable!%></h4>' + - '<p><%:Could not regain access to the device after applying the configuration changes. You might need to reconnect if you modified network related settings such as the IP address or wireless security credentials.%></p>'; + uci_status_message('warning', + '<h4><%:Device unreachable!%></h4>' + + '<p><%:Could not regain access to the device after applying the configuration changes. You might need to reconnect if you modified network related settings such as the IP address or wireless security credentials.%></p>'); } } @@ -75,12 +113,7 @@ var tt; var ts = Date.now(); - stat = document.getElementById('cbi_apply_status'); - stat.style.display = ''; - stat.classList.remove('warning'); - stat.classList.add('notice'); - - indicator = document.querySelector('.uci_change_indicator'); + uci_status_message('notice'); var call = function(r) { if (Date.now() >= deadline) { @@ -88,15 +121,18 @@ return; } else if (r && (r.status === 200 || r.status === 204)) { - if (indicator) - indicator.style.display = 'none'; + var indicator = document.querySelector('.uci_change_indicator'); + if (indicator) indicator.style.display = 'none'; - stat.innerHTML = '<%:Configuration has been applied.%>'; + uci_status_message('notice', '<%:Configuration has been applied.%>'); window.clearTimeout(tt); window.setTimeout(function() { - stat.style.display = 'none'; - <% if redirect_ok then %>location.href = decodeURIComponent('<%=luci.util.urlencode(redirect_ok)%>');<% end %> + <% if redirect_ok then -%> + location.href = decodeURIComponent('<%=luci.util.urlencode(redirect_ok)%>'); + <%- else -%> + window.location = window.location.href.split('#')[0]; + <% end %> }, uci_apply_display * 1000); return; @@ -108,8 +144,9 @@ var tick = function() { var now = Date.now(); - stat.innerHTML = '<img src="<%=resource%>/icons/loading.gif" alt="" style="vertical-align:middle" /> ' + - '<%:Waiting for configuration to get applied… %ds%>'.format(Math.max(Math.floor((deadline - Date.now()) / 1000), 0)); + uci_status_message('notice', + '<img src="<%=resource%>/icons/loading.gif" alt="" style="vertical-align:middle" /> ' + + '<%:Waiting for configuration to get applied… %ds%>'.format(Math.max(Math.floor((deadline - Date.now()) / 1000), 0))); if (now >= deadline) return; @@ -125,43 +162,39 @@ } function uci_apply(checked) { - stat = document.getElementById('cbi_apply_status'); - stat.style.display = ''; - stat.classList.remove('warning'); - stat.classList.add('notice'); - stat.innerHTML = '<img src="<%=resource%>/icons/loading.gif" alt="" style="vertical-align:middle" /> ' + - '<%:Starting configuration apply…%>'; + uci_status_message('notice', + '<img src="<%=resource%>/icons/loading.gif" alt="" style="vertical-align:middle" /> ' + + '<%:Starting configuration apply…%>'); xhr.post('<%=url("admin/uci")%>/' + (checked ? 'apply_rollback' : 'apply_unchecked'), uci_apply_auth, function(r) { if (r.status === (checked ? 200 : 204)) { uci_confirm(checked, Date.now() + uci_apply_rollback * 1000); } else if (checked && r.status === 204) { - stat.innerHTML = '<%:There are no changes to apply.%>'; + uci_status_message('notice', '<%:There are no changes to apply.%>'); window.setTimeout(function() { - stat.style.display = 'none'; - <% if redirect_ok then %>location.href = decodeURIComponent('<%=luci.util.urlencode(redirect_ok)%>');<% end %> + <% if redirect_ok then -%> + location.href = decodeURIComponent('<%=luci.util.urlencode(redirect_ok)%>'); + <%- else -%> + uci_status_message(false); + <%- end %> }, uci_apply_display * 1000); } else { - stat.classList.add('warning'); - stat.classList.remove('notice'); - stat.innerHTML = '<%_Apply request failed with status <code>%h</code>%>'.format(r.responseText || r.statusText || r.status); + uci_status_message('warning', '<%_Apply request failed with status <code>%h</code>%>'.format(r.responseText || r.statusText || r.status)); + window.setTimeout(function() { uci_status_message(false); }, uci_apply_display * 1000); } }); } function uci_revert() { - stat = document.getElementById('cbi_apply_status'); - stat.style.display = ''; - stat.classList.remove('warning'); - stat.classList.add('notice'); - stat.innerHTML = '<img src="<%=resource%>/icons/loading.gif" alt="" style="vertical-align:middle" /> ' + - '<%:Reverting configuration…%>'; + uci_status_message('notice', + '<img src="<%=resource%>/icons/loading.gif" alt="" style="vertical-align:middle" /> ' + + '<%:Reverting configuration…%>'); xhr.post('<%=url("admin/uci/revert")%>', uci_apply_auth, function(r) { if (r.status === 200) { - stat.innerHTML = '<%:Changes have been reverted.%>'; + uci_status_message('notice', '<%:Changes have been reverted.%>'); window.setTimeout(function() { <% if redirect_ok then -%> location.href = decodeURIComponent('<%=luci.util.urlencode(redirect_ok)%>'); @@ -171,9 +204,8 @@ }, uci_apply_display * 1000); } else { - stat.classList.add('warning'); - stat.classList.remove('notice'); - stat.innerHTML = '<%_Revert request failed with status <code>%h</code>%>'.format(r.statusText || r.status); + uci_status_message('warning', '<%_Revert request failed with status <code>%h</code>%>'.format(r.statusText || r.status)); + window.setTimeout(function() { uci_status_message(false); }, uci_apply_display * 1000); } }); } diff --git a/modules/luci-base/luasrc/view/cbi/cell_valuefooter.htm b/modules/luci-base/luasrc/view/cbi/cell_valuefooter.htm index 786ee43d1..bdd6bc968 100644 --- a/modules/luci-base/luasrc/view/cbi/cell_valuefooter.htm +++ b/modules/luci-base/luasrc/view/cbi/cell_valuefooter.htm @@ -1,2 +1,2 @@ </div> -</td> +</div> diff --git a/modules/luci-base/luasrc/view/cbi/cell_valueheader.htm b/modules/luci-base/luasrc/view/cbi/cell_valueheader.htm index 9c9c21814..a4b68cda7 100644 --- a/modules/luci-base/luasrc/view/cbi/cell_valueheader.htm +++ b/modules/luci-base/luasrc/view/cbi/cell_valueheader.htm @@ -1,2 +1,2 @@ -<td class="cbi-value-field<% if self.error and self.error[section] then %> cbi-value-error<% end %>"> +<div class="td cbi-value-field<% if self.error and self.error[section] then %> cbi-value-error<% end %>"> <div id="cbi-<%=self.config.."-"..section.."-"..self.option%>" data-index="<%=self.index%>" data-depends="<%=pcdata(self:deplist2json(section))%>"> diff --git a/modules/luci-base/luasrc/view/cbi/map.htm b/modules/luci-base/luasrc/view/cbi/map.htm index 69ef3615a..02b47f545 100644 --- a/modules/luci-base/luasrc/view/cbi/map.htm +++ b/modules/luci-base/luasrc/view/cbi/map.htm @@ -1,5 +1,5 @@ <%- if firstmap and messages then local msg; for _, msg in ipairs(messages) do -%> - <div class="errorbox"><%=pcdata(msg)%></div> + <div class="alert-message warning"><%=pcdata(msg)%></div> <%- end end -%> <div class="cbi-map" id="cbi-<%=self.config%>"> diff --git a/modules/luci-base/luasrc/view/cbi/tblsection.htm b/modules/luci-base/luasrc/view/cbi/tblsection.htm index 3cb87563f..bb11cf1c0 100644 --- a/modules/luci-base/luasrc/view/cbi/tblsection.htm +++ b/modules/luci-base/luasrc/view/cbi/tblsection.htm @@ -27,52 +27,52 @@ end <div class="cbi-section-descr"><%=self.description%></div> <div class="cbi-section-node"> <%- local count = 0 -%> - <table class="cbi-section-table"> - <tr class="cbi-section-table-titles"> + <div class="table cbi-section-table"> + <div class="tr cbi-section-table-titles"> <%- if not self.anonymous then -%> <%- if self.sectionhead then -%> - <th class="cbi-section-table-cell"><%=self.sectionhead%></th> + <div class="th cbi-section-table-cell"><%=self.sectionhead%></div> <%- else -%> - <th> </th> + <div class="th"> </div> <%- end -%> <%- count = count +1; end -%> <%- for i, k in pairs(self.children) do if not k.optional then -%> - <th class="cbi-section-table-cell"<%=width(k)%>> + <div class="th cbi-section-table-cell"<%=width(k)%>> <%- if k.titleref then -%><a title="<%=self.titledesc or translate('Go to relevant configuration page')%>" class="cbi-title-ref" href="<%=k.titleref%>"><%- end -%> <%-=k.title-%> <%- if k.titleref then -%></a><%- end -%> - </th> + </div> <%- count = count + 1; end; end; if self.sortable then -%> - <th class="cbi-section-table-cell"><%:Sort%></th> + <div class="th cbi-section-table-cell"><%:Sort%></div> <%- count = count + 1; end; if self.extedit or self.addremove then -%> - <th class="cbi-section-table-cell"> </th> + <div class="th cbi-section-table-cell"> </div> <%- count = count + 1; end -%> - </tr> - <tr class="cbi-section-table-descr"> + </div> + <div class="tr cbi-section-table-descr"> <%- if not self.anonymous then -%> <%- if self.sectiondesc then -%> - <th class="cbi-section-table-cell"><%=self.sectiondesc%></th> + <div class="th cbi-section-table-cell"><%=self.sectiondesc%></div> <%- else -%> - <th></th> + <div class="th"></div> <%- end -%> <%- end -%> <%- for i, k in pairs(self.children) do if not k.optional then -%> - <th class="cbi-section-table-cell"<%=width(k)%>><%=k.description%></th> + <div class="th cbi-section-table-cell"<%=width(k)%>><%=k.description%></div> <%- end; end; if self.sortable then -%> - <th class="cbi-section-table-cell"></th> + <div class="th cbi-section-table-cell"></div> <%- end; if self.extedit or self.addremove then -%> - <th class="cbi-section-table-cell"></th> + <div class="th cbi-section-table-cell"></div> <%- end -%> - </tr> + </div> <%- local isempty = true for i, k in ipairs(self:cfgsections()) do section = k isempty = false scope = { valueheader = "cbi/cell_valueheader", valuefooter = "cbi/cell_valuefooter" } -%> - <tr class="cbi-section-table-row<% if self.extedit or self.rowcolors then %> cbi-rowstyle-<%=rowstyle()%><% end %>" id="cbi-<%=self.config%>-<%=section%>"> + <div class="tr cbi-section-table-row<% if self.extedit or self.rowcolors then %> cbi-rowstyle-<%=rowstyle()%><% end %>" id="cbi-<%=self.config%>-<%=section%>"> <% if not self.anonymous then -%> - <th><h3><%=(type(self.sectiontitle) == "function") and self:sectiontitle(section) or k%></h3></th> + <div class="th"><h3><%=(type(self.sectiontitle) == "function") and self:sectiontitle(section) or k%></h3></div> <%- end %> @@ -85,14 +85,14 @@ end -%> <%- if self.sortable then -%> - <td class="cbi-section-table-cell"> + <div class="td cbi-section-table-cell"> <input class="cbi-button cbi-button-up" type="button" value="" onclick="return cbi_row_swap(this, true, 'cbi.sts.<%=self.config%>.<%=self.sectiontype%>')" alt="<%:Move up%>" title="<%:Move up%>" /> <input class="cbi-button cbi-button-down" type="button" value="" onclick="return cbi_row_swap(this, false, 'cbi.sts.<%=self.config%>.<%=self.sectiontype%>')" alt="<%:Move down%>" title="<%:Move down%>" /> - </td> + </div> <%- end -%> <%- if self.extedit or self.addremove then -%> - <td class="cbi-section-table-cell"> + <div class="td cbi-section-table-cell"> <%- if self.extedit then -%> <input class="cbi-button cbi-button-edit" type="button" value="<%:Edit%>" <%- if type(self.extedit) == "string" then @@ -104,17 +104,17 @@ end <%- end; if self.addremove then %> <input class="cbi-button cbi-button-remove" type="submit" value="<%:Delete%>" onclick="this.form.cbi_state='del-section'; return true" name="cbi.rts.<%=self.config%>.<%=k%>" alt="<%:Delete%>" title="<%:Delete%>" /> <%- end -%> - </td> + </div> <%- end -%> - </tr> + </div> <%- end -%> <%- if isempty then -%> - <tr class="cbi-section-table-row"> - <td colspan="<%=count%>"><em><br /><%:This section contains no values yet%></em></td> - </tr> + <div class="tr cbi-section-table-row"> + <div class="td" colspan="<%=count%>"><em><br /><%:This section contains no values yet%></em></div> + </div> <%- end -%> - </table> + </div> <% if self.error then %> <div class="cbi-section-error"> diff --git a/modules/luci-base/luasrc/view/sysauth.htm b/modules/luci-base/luasrc/view/sysauth.htm index b3ec9b761..e7a741aaa 100644 --- a/modules/luci-base/luasrc/view/sysauth.htm +++ b/modules/luci-base/luasrc/view/sysauth.htm @@ -8,7 +8,9 @@ <form method="post" action="<%=pcdata(FULL_REQUEST_URI)%>"> <%- if fuser then %> - <div class="errorbox"><%:Invalid username and/or password! Please try again.%></div> + <div class="alert-message warning"> + <p><%:Invalid username and/or password! Please try again.%></p> + </div> <% end -%> <div class="cbi-map"> diff --git a/modules/luci-base/po/ca/base.po b/modules/luci-base/po/ca/base.po index 22889f5db..740795ec9 100644 --- a/modules/luci-base/po/ca/base.po +++ b/modules/luci-base/po/ca/base.po @@ -174,9 +174,6 @@ msgstr "" msgid "ADSL" msgstr "" -msgid "AICCU (SIXXS)" -msgstr "" - msgid "ANSI T1.413" msgstr "" @@ -213,9 +210,6 @@ msgstr "Número de dispositiu ATM" msgid "ATU-C System Vendor ID" msgstr "" -msgid "AYIYA" -msgstr "" - msgid "Access Concentrator" msgstr "Concentrador d'accés" @@ -323,11 +317,6 @@ msgstr "Permet respostes del rang 127.0.0.0/8, p.e. per serveis RBL" msgid "Allowed IPs" msgstr "" -msgid "" -"Also see <a href=\"https://www.sixxs.net/faq/connectivity/?faq=comparison" -"\">Tunneling Comparison</a> on SIXXS" -msgstr "" - msgid "Always announce default router" msgstr "" @@ -412,6 +401,9 @@ msgstr "" msgid "Apply unchecked" msgstr "" +msgid "Architecture" +msgstr "" + msgid "" "Assign a part of given length of every public IPv6-prefix to this interface" msgstr "" @@ -426,6 +418,9 @@ msgstr "" msgid "Associated Stations" msgstr "Estacions associades" +msgid "Associations" +msgstr "" + msgid "Auth Group" msgstr "" @@ -517,9 +512,6 @@ msgstr "Adreça mal especificada!" msgid "Band" msgstr "" -msgid "Behind NAT" -msgstr "" - msgid "" "Below is the determined list of files to backup. It consists of changed " "configuration files marked by opkg, essential base files and the user " @@ -707,9 +699,6 @@ msgstr "Connectat" msgid "Connection Limit" msgstr "LÃmit de connexió" -msgid "Connection to server fails when TLS cannot be used" -msgstr "" - msgid "Connections" msgstr "Connexions" @@ -847,9 +836,6 @@ msgstr "Passarel·la per defecte" msgid "Default is stateless + stateful" msgstr "" -msgid "Default route" -msgstr "" - msgid "Default state" msgstr "Estat per defecte" @@ -1381,9 +1367,6 @@ msgstr "Penja" msgid "Header Error Code Errors (HEC)" msgstr "" -msgid "Heartbeat" -msgstr "" - msgid "" "Here you can configure the basic aspects of your device like its hostname or " "the timezone." @@ -1444,8 +1427,8 @@ msgstr "IPv4" msgid "IPv4 Firewall" msgstr "Tallafocs IPv4" -msgid "IPv4 WAN Status" -msgstr "Estat WAN IPv4" +msgid "IPv4 Upstream" +msgstr "" msgid "IPv4 address" msgstr "Adreça IPv4" @@ -1495,15 +1478,12 @@ msgstr "" msgid "IPv6 ULA-Prefix" msgstr "" -msgid "IPv6 WAN Status" -msgstr "Estat WAN IPv6" +msgid "IPv6 Upstream" +msgstr "" msgid "IPv6 address" msgstr "Adreça IPv6" -msgid "IPv6 address delegated to the local tunnel endpoint (optional)" -msgstr "" - msgid "IPv6 assignment hint" msgstr "" @@ -2082,9 +2062,6 @@ msgstr "" msgid "NTP server candidates" msgstr "Candidats de servidor NTP" -msgid "NTP sync time-out" -msgstr "" - msgid "Name" msgstr "Nom" @@ -2262,12 +2239,6 @@ msgstr "Opció treta" msgid "Optional" msgstr "" -msgid "Optional, specify to override default server (tic.sixxs.net)" -msgstr "" - -msgid "Optional, use when the SIXXS account has more than one tunnel" -msgstr "" - msgid "" "Optional. 32-bit mark for outgoing encrypted packets. Enter value in hex, " "starting with <code>0x</code>." @@ -2728,9 +2699,6 @@ msgstr "" msgid "Request IPv6-prefix of length" msgstr "" -msgid "Require TLS" -msgstr "" - msgid "Required" msgstr "" @@ -2813,9 +2781,6 @@ msgstr "" msgid "Route type" msgstr "" -msgid "Routed IPv6 prefix for downstream interfaces" -msgstr "" - msgid "Router Advertisement-Service" msgstr "" @@ -2841,14 +2806,6 @@ msgstr "" msgid "SHA256" msgstr "" -msgid "" -"SIXXS supports TIC only, for static tunnels using IP protocol 41 (RFC4213) " -"use 6in4 instead" -msgstr "" - -msgid "SIXXS-handle[/Tunnel-ID]" -msgstr "" - msgid "SNR" msgstr "" @@ -2902,17 +2859,6 @@ msgstr "Clients separats" msgid "Server Settings" msgstr "Ajusts de servidor" -msgid "Server password" -msgstr "" - -msgid "" -"Server password, enter the specific password of the tunnel when the username " -"contains the tunnel ID" -msgstr "" - -msgid "Server username" -msgstr "" - msgid "Service Name" msgstr "Nom de servei" @@ -3006,9 +2952,6 @@ msgstr "Ordena" msgid "Source" msgstr "Origen" -msgid "Source routing" -msgstr "" - msgid "Specifies the directory the device is attached to" msgstr "Especifica el directori a que el dispositiu està adjuntat" @@ -3304,11 +3247,6 @@ msgstr "" "tinguis." msgid "" -"The tunnel end-point is behind NAT, defaults to disabled and only applies to " -"AYIYA" -msgstr "" - -msgid "" "The uploaded image file does not contain a supported format. Make sure that " "you choose the generic image format for your platform." msgstr "" @@ -3468,15 +3406,6 @@ msgstr "InterfÃcie del túnel" msgid "Tunnel Link" msgstr "" -msgid "Tunnel broker protocol" -msgstr "" - -msgid "Tunnel setup server" -msgstr "" - -msgid "Tunnel type" -msgstr "" - msgid "Tx-Power" msgstr "Potència Tx" @@ -3652,12 +3581,6 @@ msgstr "" msgid "Vendor Class to send when requesting DHCP" msgstr "Classe de venidor per enviar al sol·licitar DHCP" -msgid "Verbose" -msgstr "" - -msgid "Verbose logging by aiccu daemon" -msgstr "" - msgid "Verify" msgstr "Verifica" @@ -3689,10 +3612,6 @@ msgstr "" "La xifratge WPA requereix que sigui instal·lat el wpa_supplicant (pel mode " "client) o el hostapd (pels modes AP i ad hoc)." -msgid "" -"Wait for NTP sync that many seconds, seting to 0 disables waiting (optional)" -msgstr "" - msgid "Waiting for changes to be applied..." msgstr "Esperant que s'apliquin els canvis..." @@ -3716,12 +3635,6 @@ msgid "" "communications" msgstr "" -msgid "Whether to create an IPv6 default route over the tunnel" -msgstr "" - -msgid "Whether to route only packets from delegated prefixes" -msgstr "" - msgid "Width" msgstr "" @@ -3865,9 +3778,6 @@ msgstr "kbit/s" msgid "local <abbr title=\"Domain Name System\">DNS</abbr> file" msgstr "fitxer <abbr title=\"Domain Name System\">DNS</abbr> local" -msgid "minimum 1280, maximum 1480" -msgstr "" - msgid "minutes" msgstr "" @@ -3943,6 +3853,12 @@ msgstr "sÃ" msgid "« Back" msgstr "« Enrere" +#~ msgid "IPv4 WAN Status" +#~ msgstr "Estat WAN IPv4" + +#~ msgid "IPv6 WAN Status" +#~ msgstr "Estat WAN IPv6" + #~ msgid "Apply" #~ msgstr "Aplica" diff --git a/modules/luci-base/po/cs/base.po b/modules/luci-base/po/cs/base.po index 924d0e676..b9523193e 100644 --- a/modules/luci-base/po/cs/base.po +++ b/modules/luci-base/po/cs/base.po @@ -169,9 +169,6 @@ msgstr "" msgid "ADSL" msgstr "" -msgid "AICCU (SIXXS)" -msgstr "" - msgid "ANSI T1.413" msgstr "" @@ -208,9 +205,6 @@ msgstr "ÄÃslo ATM zaÅ™ÃzenÃ" msgid "ATU-C System Vendor ID" msgstr "" -msgid "AYIYA" -msgstr "" - msgid "Access Concentrator" msgstr "PÅ™Ãstupový koncentrátor" @@ -319,11 +313,6 @@ msgstr "Povolit upstream odpovÄ›di na 127.0.0.0/8 rozsah, napÅ™. pro RBL služby msgid "Allowed IPs" msgstr "" -msgid "" -"Also see <a href=\"https://www.sixxs.net/faq/connectivity/?faq=comparison" -"\">Tunneling Comparison</a> on SIXXS" -msgstr "" - msgid "Always announce default router" msgstr "" @@ -408,6 +397,9 @@ msgstr "" msgid "Apply unchecked" msgstr "" +msgid "Architecture" +msgstr "" + msgid "" "Assign a part of given length of every public IPv6-prefix to this interface" msgstr "" @@ -422,6 +414,9 @@ msgstr "" msgid "Associated Stations" msgstr "PÅ™ipojenà klienti" +msgid "Associations" +msgstr "" + msgid "Auth Group" msgstr "" @@ -512,9 +507,6 @@ msgstr "Zadána neplatná adresa!" msgid "Band" msgstr "" -msgid "Behind NAT" -msgstr "" - msgid "" "Below is the determined list of files to backup. It consists of changed " "configuration files marked by opkg, essential base files and the user " @@ -701,9 +693,6 @@ msgstr "PÅ™ipojeno" msgid "Connection Limit" msgstr "Omezenà poÄtu pÅ™ipojenÃ" -msgid "Connection to server fails when TLS cannot be used" -msgstr "" - msgid "Connections" msgstr "PÅ™ipojenÃ" @@ -841,9 +830,6 @@ msgstr "Výchozà brána" msgid "Default is stateless + stateful" msgstr "" -msgid "Default route" -msgstr "" - msgid "Default state" msgstr "Výchozà stav" @@ -1381,9 +1367,6 @@ msgstr "ZavÄ›sit" msgid "Header Error Code Errors (HEC)" msgstr "" -msgid "Heartbeat" -msgstr "" - msgid "" "Here you can configure the basic aspects of your device like its hostname or " "the timezone." @@ -1443,8 +1426,8 @@ msgstr "IPv4" msgid "IPv4 Firewall" msgstr "IPv4 firewall" -msgid "IPv4 WAN Status" -msgstr "Stav IPv4 WAN" +msgid "IPv4 Upstream" +msgstr "" msgid "IPv4 address" msgstr "IPv4 adresa" @@ -1494,15 +1477,12 @@ msgstr "" msgid "IPv6 ULA-Prefix" msgstr "" -msgid "IPv6 WAN Status" -msgstr "Stav IPv6 WAN" +msgid "IPv6 Upstream" +msgstr "" msgid "IPv6 address" msgstr "IPv6 adresa" -msgid "IPv6 address delegated to the local tunnel endpoint (optional)" -msgstr "" - msgid "IPv6 assignment hint" msgstr "" @@ -2090,9 +2070,6 @@ msgstr "" msgid "NTP server candidates" msgstr "Kandidáti NTP serveru" -msgid "NTP sync time-out" -msgstr "" - msgid "Name" msgstr "Název" @@ -2269,12 +2246,6 @@ msgstr "Volba odstranÄ›na" msgid "Optional" msgstr "" -msgid "Optional, specify to override default server (tic.sixxs.net)" -msgstr "" - -msgid "Optional, use when the SIXXS account has more than one tunnel" -msgstr "" - msgid "" "Optional. 32-bit mark for outgoing encrypted packets. Enter value in hex, " "starting with <code>0x</code>." @@ -2752,9 +2723,6 @@ msgstr "" msgid "Request IPv6-prefix of length" msgstr "" -msgid "Require TLS" -msgstr "" - msgid "Required" msgstr "" @@ -2838,9 +2806,6 @@ msgstr "" msgid "Route type" msgstr "" -msgid "Routed IPv6 prefix for downstream interfaces" -msgstr "" - msgid "Router Advertisement-Service" msgstr "" @@ -2865,14 +2830,6 @@ msgstr "Spustit kontrolu souborového systému" msgid "SHA256" msgstr "" -msgid "" -"SIXXS supports TIC only, for static tunnels using IP protocol 41 (RFC4213) " -"use 6in4 instead" -msgstr "" - -msgid "SIXXS-handle[/Tunnel-ID]" -msgstr "" - msgid "SNR" msgstr "" @@ -2928,17 +2885,6 @@ msgstr "OddÄ›lovat klienty" msgid "Server Settings" msgstr "Nastavenà serveru" -msgid "Server password" -msgstr "" - -msgid "" -"Server password, enter the specific password of the tunnel when the username " -"contains the tunnel ID" -msgstr "" - -msgid "Server username" -msgstr "" - msgid "Service Name" msgstr "Název služby" @@ -3035,9 +2981,6 @@ msgstr "SeÅ™adit" msgid "Source" msgstr "Zdroj" -msgid "Source routing" -msgstr "" - msgid "Specifies the directory the device is attached to" msgstr "" @@ -3347,11 +3290,6 @@ msgstr "" "mohli znovu pÅ™ipojit." msgid "" -"The tunnel end-point is behind NAT, defaults to disabled and only applies to " -"AYIYA" -msgstr "" - -msgid "" "The uploaded image file does not contain a supported format. Make sure that " "you choose the generic image format for your platform." msgstr "" @@ -3508,15 +3446,6 @@ msgstr "Rozhranà tunelu" msgid "Tunnel Link" msgstr "" -msgid "Tunnel broker protocol" -msgstr "" - -msgid "Tunnel setup server" -msgstr "" - -msgid "Tunnel type" -msgstr "" - msgid "Tx-Power" msgstr "Tx-Power" @@ -3695,12 +3624,6 @@ msgstr "" msgid "Vendor Class to send when requesting DHCP" msgstr "" -msgid "Verbose" -msgstr "" - -msgid "Verbose logging by aiccu daemon" -msgstr "" - msgid "Verify" msgstr "Ověřit" @@ -3732,10 +3655,6 @@ msgstr "" "Å ifrovánà WPA vyžaduje nainstalovaný wpa_supplicant (pro klientský režim) " "nebo hostapd (pro AP a ad-hoc režim)." -msgid "" -"Wait for NTP sync that many seconds, seting to 0 disables waiting (optional)" -msgstr "" - msgid "Waiting for changes to be applied..." msgstr "ÄŒekánà na realizaci zmÄ›n..." @@ -3759,12 +3678,6 @@ msgid "" "communications" msgstr "" -msgid "Whether to create an IPv6 default route over the tunnel" -msgstr "" - -msgid "Whether to route only packets from delegated prefixes" -msgstr "" - msgid "Width" msgstr "" @@ -3906,9 +3819,6 @@ msgstr "kbit/s" msgid "local <abbr title=\"Domain Name System\">DNS</abbr> file" msgstr "mÃstnà <abbr title=\"Domain Name System\">DNS</abbr> soubor" -msgid "minimum 1280, maximum 1480" -msgstr "" - msgid "minutes" msgstr "" @@ -3984,6 +3894,12 @@ msgstr "ano" msgid "« Back" msgstr "« ZpÄ›t" +#~ msgid "IPv4 WAN Status" +#~ msgstr "Stav IPv4 WAN" + +#~ msgid "IPv6 WAN Status" +#~ msgstr "Stav IPv6 WAN" + #~ msgid "Apply" #~ msgstr "PoužÃt" diff --git a/modules/luci-base/po/de/base.po b/modules/luci-base/po/de/base.po index 4271d8e90..63cfaeaff 100644 --- a/modules/luci-base/po/de/base.po +++ b/modules/luci-base/po/de/base.po @@ -172,9 +172,6 @@ msgstr "" msgid "ADSL" msgstr "" -msgid "AICCU (SIXXS)" -msgstr "" - msgid "ANSI T1.413" msgstr "" @@ -211,9 +208,6 @@ msgstr "ATM Geräteindex" msgid "ATU-C System Vendor ID" msgstr "" -msgid "AYIYA" -msgstr "" - msgid "Access Concentrator" msgstr "Access Concentrator" @@ -322,13 +316,6 @@ msgstr "" msgid "Allowed IPs" msgstr "Erlaubte IP-Adressen" -msgid "" -"Also see <a href=\"https://www.sixxs.net/faq/connectivity/?faq=comparison" -"\">Tunneling Comparison</a> on SIXXS" -msgstr "" -"Siehe auch <a href=\"https://www.sixxs.net/faq/connectivity/?faq=comparison" -"\">Tunneling Comparison</a> bei SIXXS." - msgid "Always announce default router" msgstr "Immer Defaultrouter ankündigen" @@ -415,6 +402,9 @@ msgstr "" msgid "Apply unchecked" msgstr "" +msgid "Architecture" +msgstr "" + msgid "" "Assign a part of given length of every public IPv6-prefix to this interface" msgstr "" @@ -433,6 +423,9 @@ msgstr "" msgid "Associated Stations" msgstr "Assoziierte Clients" +msgid "Associations" +msgstr "" + msgid "Auth Group" msgstr "Berechtigungsgruppe" @@ -523,9 +516,6 @@ msgstr "Ungültige Adresse angegeben!" msgid "Band" msgstr "Frequenztyp" -msgid "Behind NAT" -msgstr "NAT" - msgid "" "Below is the determined list of files to backup. It consists of changed " "configuration files marked by opkg, essential base files and the user " @@ -725,9 +715,6 @@ msgstr "Verbunden" msgid "Connection Limit" msgstr "Verbindungslimit" -msgid "Connection to server fails when TLS cannot be used" -msgstr "TLS zwingend vorraussetzen und abbrechen wenn TLS fehlschlägt." - msgid "Connections" msgstr "Verbindungen" @@ -865,9 +852,6 @@ msgstr "Default Gateway" msgid "Default is stateless + stateful" msgstr "Der Standardwert ist zustandslos und zustandsorientiert" -msgid "Default route" -msgstr "Default Route" - msgid "Default state" msgstr "Ausgangszustand" @@ -1420,9 +1404,6 @@ msgstr "Auflegen" msgid "Header Error Code Errors (HEC)" msgstr "Anzahl Header-Error-Code-Fehler (HEC)" -msgid "Heartbeat" -msgstr "" - msgid "" "Here you can configure the basic aspects of your device like its hostname or " "the timezone." @@ -1481,8 +1462,8 @@ msgstr "IPv4" msgid "IPv4 Firewall" msgstr "IPv4 Firewall" -msgid "IPv4 WAN Status" -msgstr "IPv4 WAN Status" +msgid "IPv4 Upstream" +msgstr "" msgid "IPv4 address" msgstr "IPv4 Adresse" @@ -1532,15 +1513,12 @@ msgstr "IPv6 Einstellungen" msgid "IPv6 ULA-Prefix" msgstr "IPv6 ULA-Präfix" -msgid "IPv6 WAN Status" -msgstr "IPv6 WAN Status" +msgid "IPv6 Upstream" +msgstr "" msgid "IPv6 address" msgstr "IPv6 Adresse" -msgid "IPv6 address delegated to the local tunnel endpoint (optional)" -msgstr "Zum lokalen Tunnelendpunkt delegierte IPv6-Adresse (optional)" - msgid "IPv6 assignment hint" msgstr "IPv6 Zuweisungshinweis" @@ -2155,9 +2133,6 @@ msgstr "" msgid "NTP server candidates" msgstr "NTP Server Kandidaten" -msgid "NTP sync time-out" -msgstr "NTP Synchronisierungstimeout" - msgid "Name" msgstr "Name" @@ -2336,14 +2311,6 @@ msgstr "Option entfernt" msgid "Optional" msgstr "Optional" -msgid "Optional, specify to override default server (tic.sixxs.net)" -msgstr "" -"Optional, angeben um den Standardserver (tic.sixxs.net) zu überschreiben" - -msgid "Optional, use when the SIXXS account has more than one tunnel" -msgstr "" -"Optional, angeben wenn das SIXSS Konto mehr als einen Tunnel beinhaltet" - msgid "" "Optional. 32-bit mark for outgoing encrypted packets. Enter value in hex, " "starting with <code>0x</code>." @@ -2838,9 +2805,6 @@ msgstr "IPv6-Adresse anfordern" msgid "Request IPv6-prefix of length" msgstr "IPv6-Präfix dieser Länge anfordern" -msgid "Require TLS" -msgstr "TLS erfordern" - msgid "Required" msgstr "Benötigt" @@ -2932,9 +2896,6 @@ msgstr "Erlaubte IP-Addressen routen" msgid "Route type" msgstr "Routen-Typ" -msgid "Routed IPv6 prefix for downstream interfaces" -msgstr "Geroutetes IPv6-Präfix für nachgelagerte Schnittstellen" - msgid "Router Advertisement-Service" msgstr "Router-Advertisement-Dienst" @@ -2960,14 +2921,6 @@ msgstr "Dateisystemprüfung durchführen" msgid "SHA256" msgstr "" -msgid "" -"SIXXS supports TIC only, for static tunnels using IP protocol 41 (RFC4213) " -"use 6in4 instead" -msgstr "" - -msgid "SIXXS-handle[/Tunnel-ID]" -msgstr "" - msgid "SNR" msgstr "" @@ -3023,19 +2976,6 @@ msgstr "Clients isolieren" msgid "Server Settings" msgstr "Servereinstellungen" -msgid "Server password" -msgstr "Server Passwort" - -msgid "" -"Server password, enter the specific password of the tunnel when the username " -"contains the tunnel ID" -msgstr "" -"Server Passwort bzw. das tunnelspezifische Passwort wenn der Benutzername " -"eine Tunnel-ID beinhaltet." - -msgid "Server username" -msgstr "Server Benutzername" - msgid "Service Name" msgstr "Service-Name" @@ -3136,9 +3076,6 @@ msgstr "Sortieren" msgid "Source" msgstr "Quelle" -msgid "Source routing" -msgstr "Quell-Routing" - msgid "Specifies the directory the device is attached to" msgstr "Nennt das Verzeichnis, an welches das Gerät angebunden ist" @@ -3467,13 +3404,6 @@ msgstr "" "Adresse beziehen müssen um auf das Gerät zugreifen zu können." msgid "" -"The tunnel end-point is behind NAT, defaults to disabled and only applies to " -"AYIYA" -msgstr "" -"Der lokale Tunnel-Endpunkt ist hinter einem NAT. Standard ist deaktiviert, " -"nur auf AYIYA anwendbar." - -msgid "" "The uploaded image file does not contain a supported format. Make sure that " "you choose the generic image format for your platform." msgstr "" @@ -3645,15 +3575,6 @@ msgstr "Tunnelschnittstelle" msgid "Tunnel Link" msgstr "Basisschnittstelle" -msgid "Tunnel broker protocol" -msgstr "Tunnel-Boker-Protokoll" - -msgid "Tunnel setup server" -msgstr "Tunnel-Setup-Server" - -msgid "Tunnel type" -msgstr "Tunneltyp" - msgid "Tx-Power" msgstr "Sendestärke" @@ -3835,12 +3756,6 @@ msgstr "Hersteller" msgid "Vendor Class to send when requesting DHCP" msgstr "Bei DHCP-Anfragen gesendete Vendor-Klasse" -msgid "Verbose" -msgstr "Umfangreiche Ausgaben" - -msgid "Verbose logging by aiccu daemon" -msgstr "Aktiviert erweiterte Protokollierung durch den AICCU-Prozess" - msgid "Verify" msgstr "Verifizieren" @@ -3872,12 +3787,6 @@ msgstr "" "WPA-Verschlüsselung benötigt wpa_supplicant (für Client-Modus) oder hostapd " "(für AP oder Ad-Hoc Modus)." -msgid "" -"Wait for NTP sync that many seconds, seting to 0 disables waiting (optional)" -msgstr "" -"Warte die angegebene Anzahl an Sekunden auf NTP-Synchronisierung, der Wert 0 " -"deaktiviert das Warten (optional)" - msgid "Waiting for changes to be applied..." msgstr "Änderungen werden angewandt..." @@ -3905,13 +3814,6 @@ msgstr "" "Wenn PSK in Verwendung ist, können PMK-Schlüssel lokal ohne Inter-Access-" "Point-Kommunikation erzeugt werden." -msgid "Whether to create an IPv6 default route over the tunnel" -msgstr "" -"Gibt an, ob eine IPv6-Default-Route durch den Tunnel etabliert werden soll" - -msgid "Whether to route only packets from delegated prefixes" -msgstr "Gibt an, ob nur Pakete von delegierten Präfixen geroutet werden sollen" - msgid "Width" msgstr "Breite" @@ -4053,9 +3955,6 @@ msgstr "kbit/s" msgid "local <abbr title=\"Domain Name System\">DNS</abbr> file" msgstr "Lokale DNS-Datei" -msgid "minimum 1280, maximum 1480" -msgstr "Minimum 1280, Maximum 1480" - msgid "minutes" msgstr "Minuten" @@ -4131,125 +4030,8 @@ msgstr "ja" msgid "« Back" msgstr "« Zurück" -#~ msgid "Apply" -#~ msgstr "Anwenden" - -#~ msgid "Applying changes" -#~ msgstr "Änderungen werden angewandt" - -#~ msgid "Configuration applied." -#~ msgstr "Konfiguration angewendet." - -#~ msgid "Save & Apply" -#~ msgstr "Speichern & Anwenden" - -#~ msgid "The following changes have been committed" -#~ msgstr "Die folgenden Änderungen wurden angewendet" - -#~ msgid "There are no pending changes to apply!" -#~ msgstr "Es gibt keine ausstehenen Änderungen anzuwenden!" - -#~ msgid "Action" -#~ msgstr "Aktion" - -#~ msgid "Buttons" -#~ msgstr "Knöpfe" - -#~ msgid "Handler" -#~ msgstr "Handler" - -#~ msgid "Maximum hold time" -#~ msgstr "Maximalzeit zum Halten der Verbindung" - -#~ msgid "Minimum hold time" -#~ msgstr "Minimalzeit zum Halten der Verbindung" - -#~ msgid "Path to executable which handles the button event" -#~ msgstr "Ausführbare Datei welche das Schalter-Ereignis verarbeitet" - -#~ msgid "Specifies the button state to handle" -#~ msgstr "Gibt den zu behandelnden Tastenstatus an" - -#~ msgid "This page allows the configuration of custom button actions" -#~ msgstr "" -#~ "Diese Seite ermöglicht die Konfiguration benutzerdefinierter " -#~ "Tastenaktionen" - -#~ msgid "Leasetime" -#~ msgstr "Laufzeit" - -#~ msgid "Optional." -#~ msgstr "Optional" - -#~ msgid "AuthGroup" -#~ msgstr "Berechtigungsgruppe" - -#~ msgid "automatic" -#~ msgstr "automatisch" - -#~ msgid "AR Support" -#~ msgstr "AR-Unterstützung" - -#~ msgid "Atheros 802.11%s Wireless Controller" -#~ msgstr "Atheros 802.11%s W-LAN Adapter" - -#~ msgid "Background Scan" -#~ msgstr "Hintergrundscan" - -#~ msgid "Compression" -#~ msgstr "Kompression" - -#~ msgid "Disable HW-Beacon timer" -#~ msgstr "Deaktiviere Hardware-Beacon Zeitgeber" - -#~ msgid "Do not send probe responses" -#~ msgstr "Scan-Anforderungen nicht beantworten" - -#~ msgid "Fast Frames" -#~ msgstr "Schnelle Frames" - -#~ msgid "Maximum Rate" -#~ msgstr "Höchstübertragungsrate" - -#~ msgid "Minimum Rate" -#~ msgstr "Mindestübertragungsrate" - -#~ msgid "Multicast Rate" -#~ msgstr "Multicastrate" - -#~ msgid "Outdoor Channels" -#~ msgstr "Funkkanal für den Ausseneinsatz" - -#~ msgid "Regulatory Domain" -#~ msgstr "Geltungsbereich (Regulatory Domain)" - -#~ msgid "Separate WDS" -#~ msgstr "Separates WDS" - -#~ msgid "Static WDS" -#~ msgstr "Statisches WDS" - -#~ msgid "Turbo Mode" -#~ msgstr "Turbo Modus" - -#~ msgid "XR Support" -#~ msgstr "XR-Unterstützung" - -#~ msgid "An additional network will be created if you leave this unchecked." -#~ msgstr "" -#~ "Erzeugt ein zusätzliches Netzwerk wenn diese Option nicht ausgewählt ist" - -#~ msgid "Join Network: Settings" -#~ msgstr "Netzwerk beitreten: Einstellungen" - -#~ msgid "CPU" -#~ msgstr "Prozessor" - -#~ msgid "Port %d" -#~ msgstr "Port %d" - -#~ msgid "Port %d is untagged in multiple VLANs!" -#~ msgstr "Port %d ist untagged in mehreren VLANs!" +#~ msgid "IPv4 WAN Status" +#~ msgstr "IPv4 WAN Status" -#~ msgid "VLAN Interface" -#~ msgstr "VLAN Schnittstelle" +#~ msgid "IPv6 WAN Status" +#~ msgstr "IPv6 WAN Status" diff --git a/modules/luci-base/po/el/base.po b/modules/luci-base/po/el/base.po index 60d62f3dd..16008ddc9 100644 --- a/modules/luci-base/po/el/base.po +++ b/modules/luci-base/po/el/base.po @@ -172,9 +172,6 @@ msgstr "" msgid "ADSL" msgstr "" -msgid "AICCU (SIXXS)" -msgstr "" - msgid "ANSI T1.413" msgstr "" @@ -211,9 +208,6 @@ msgstr "ΑÏιθμός συσκευής ATM" msgid "ATU-C System Vendor ID" msgstr "" -msgid "AYIYA" -msgstr "" - msgid "Access Concentrator" msgstr "ΣυγκεντÏωτής Î Ïόσβασης " @@ -326,11 +320,6 @@ msgstr "" msgid "Allowed IPs" msgstr "" -msgid "" -"Also see <a href=\"https://www.sixxs.net/faq/connectivity/?faq=comparison" -"\">Tunneling Comparison</a> on SIXXS" -msgstr "" - msgid "Always announce default router" msgstr "" @@ -415,6 +404,9 @@ msgstr "" msgid "Apply unchecked" msgstr "" +msgid "Architecture" +msgstr "" + msgid "" "Assign a part of given length of every public IPv6-prefix to this interface" msgstr "" @@ -429,6 +421,9 @@ msgstr "" msgid "Associated Stations" msgstr "ΣυνδεδεμÎνοι Σταθμοί" +msgid "Associations" +msgstr "" + msgid "Auth Group" msgstr "" @@ -520,9 +515,6 @@ msgstr "Μη ÎγκυÏη διεÏθυνση!" msgid "Band" msgstr "" -msgid "Behind NAT" -msgstr "" - msgid "" "Below is the determined list of files to backup. It consists of changed " "configuration files marked by opkg, essential base files and the user " @@ -710,9 +702,6 @@ msgstr "ΣυνδεδεμÎνος" msgid "Connection Limit" msgstr "ÎŒÏιο ΣυνδÎσεων" -msgid "Connection to server fails when TLS cannot be used" -msgstr "" - msgid "Connections" msgstr "ΣυνδÎσεις" @@ -850,9 +839,6 @@ msgstr "Î ÏοεπιλεγμÎνη Ï€Ïλη" msgid "Default is stateless + stateful" msgstr "" -msgid "Default route" -msgstr "" - msgid "Default state" msgstr "Î ÏοεπιλεγμÎνη κατάσταση" @@ -1395,9 +1381,6 @@ msgstr "ΚÏÎμασμα" msgid "Header Error Code Errors (HEC)" msgstr "" -msgid "Heartbeat" -msgstr "" - msgid "" "Here you can configure the basic aspects of your device like its hostname or " "the timezone." @@ -1456,7 +1439,7 @@ msgstr "IPv4" msgid "IPv4 Firewall" msgstr "IPv4 Τείχος Î Ïοστασίας" -msgid "IPv4 WAN Status" +msgid "IPv4 Upstream" msgstr "" msgid "IPv4 address" @@ -1507,15 +1490,12 @@ msgstr "" msgid "IPv6 ULA-Prefix" msgstr "" -msgid "IPv6 WAN Status" -msgstr "Κατάσταση IPv6 WAN" +msgid "IPv6 Upstream" +msgstr "" msgid "IPv6 address" msgstr "ΔιεÏθυνση IPv6" -msgid "IPv6 address delegated to the local tunnel endpoint (optional)" -msgstr "" - msgid "IPv6 assignment hint" msgstr "" @@ -2098,9 +2078,6 @@ msgstr "" msgid "NTP server candidates" msgstr "" -msgid "NTP sync time-out" -msgstr "" - msgid "Name" msgstr "Όνομα" @@ -2278,12 +2255,6 @@ msgstr "Η επιλογή αφαιÏÎθηκε" msgid "Optional" msgstr "" -msgid "Optional, specify to override default server (tic.sixxs.net)" -msgstr "" - -msgid "Optional, use when the SIXXS account has more than one tunnel" -msgstr "" - msgid "" "Optional. 32-bit mark for outgoing encrypted packets. Enter value in hex, " "starting with <code>0x</code>." @@ -2745,9 +2716,6 @@ msgstr "" msgid "Request IPv6-prefix of length" msgstr "" -msgid "Require TLS" -msgstr "" - msgid "Required" msgstr "" @@ -2830,9 +2798,6 @@ msgstr "" msgid "Route type" msgstr "" -msgid "Routed IPv6 prefix for downstream interfaces" -msgstr "" - msgid "Router Advertisement-Service" msgstr "" @@ -2859,14 +2824,6 @@ msgstr "ΕκτÎλεση ελÎγχου συστήματος αÏχείων" msgid "SHA256" msgstr "" -msgid "" -"SIXXS supports TIC only, for static tunnels using IP protocol 41 (RFC4213) " -"use 6in4 instead" -msgstr "" - -msgid "SIXXS-handle[/Tunnel-ID]" -msgstr "" - msgid "SNR" msgstr "" @@ -2921,17 +2878,6 @@ msgstr "Απομόνωση Πελατών" msgid "Server Settings" msgstr "Ρυθμίσεις ΕξυπηÏετητή" -msgid "Server password" -msgstr "" - -msgid "" -"Server password, enter the specific password of the tunnel when the username " -"contains the tunnel ID" -msgstr "" - -msgid "Server username" -msgstr "" - msgid "Service Name" msgstr "Όνομα ΥπηÏεσίας" @@ -3024,9 +2970,6 @@ msgstr "Ταξινόμηση" msgid "Source" msgstr "Πηγή" -msgid "Source routing" -msgstr "" - msgid "Specifies the directory the device is attached to" msgstr "" @@ -3311,11 +3254,6 @@ msgstr "" "να αποκτήσετε ξανά Ï€Ïόσβαση στη συσκευή." msgid "" -"The tunnel end-point is behind NAT, defaults to disabled and only applies to " -"AYIYA" -msgstr "" - -msgid "" "The uploaded image file does not contain a supported format. Make sure that " "you choose the generic image format for your platform." msgstr "" @@ -3467,15 +3405,6 @@ msgstr "Διεπαφή ΤοÏνελ" msgid "Tunnel Link" msgstr "" -msgid "Tunnel broker protocol" -msgstr "" - -msgid "Tunnel setup server" -msgstr "" - -msgid "Tunnel type" -msgstr "" - msgid "Tx-Power" msgstr "ΙσχÏÏ‚ Εκπομπής" @@ -3648,12 +3577,6 @@ msgstr "" msgid "Vendor Class to send when requesting DHCP" msgstr "" -msgid "Verbose" -msgstr "" - -msgid "Verbose logging by aiccu daemon" -msgstr "" - msgid "Verify" msgstr "" @@ -3683,10 +3606,6 @@ msgid "" "and ad-hoc mode) to be installed." msgstr "" -msgid "" -"Wait for NTP sync that many seconds, seting to 0 disables waiting (optional)" -msgstr "" - msgid "Waiting for changes to be applied..." msgstr "" @@ -3710,12 +3629,6 @@ msgid "" "communications" msgstr "" -msgid "Whether to create an IPv6 default route over the tunnel" -msgstr "" - -msgid "Whether to route only packets from delegated prefixes" -msgstr "" - msgid "Width" msgstr "" @@ -3858,9 +3771,6 @@ msgstr "" msgid "local <abbr title=\"Domain Name System\">DNS</abbr> file" msgstr "τοπικό αÏχείο <abbr title=\"Domain Name System\">DNS</abbr>" -msgid "minimum 1280, maximum 1480" -msgstr "" - msgid "minutes" msgstr "" @@ -3936,6 +3846,9 @@ msgstr "ναι" msgid "« Back" msgstr "« Πίσω" +#~ msgid "IPv6 WAN Status" +#~ msgstr "Κατάσταση IPv6 WAN" + #~ msgid "Apply" #~ msgstr "ΕφαÏμογή" diff --git a/modules/luci-base/po/en/base.po b/modules/luci-base/po/en/base.po index 5340e83eb..7c5f56d83 100644 --- a/modules/luci-base/po/en/base.po +++ b/modules/luci-base/po/en/base.po @@ -172,9 +172,6 @@ msgstr "" msgid "ADSL" msgstr "" -msgid "AICCU (SIXXS)" -msgstr "" - msgid "ANSI T1.413" msgstr "" @@ -211,9 +208,6 @@ msgstr "ATM device number" msgid "ATU-C System Vendor ID" msgstr "" -msgid "AYIYA" -msgstr "" - msgid "Access Concentrator" msgstr "Access Concentrator" @@ -317,11 +311,6 @@ msgstr "" msgid "Allowed IPs" msgstr "" -msgid "" -"Also see <a href=\"https://www.sixxs.net/faq/connectivity/?faq=comparison" -"\">Tunneling Comparison</a> on SIXXS" -msgstr "" - msgid "Always announce default router" msgstr "" @@ -406,6 +395,9 @@ msgstr "" msgid "Apply unchecked" msgstr "" +msgid "Architecture" +msgstr "" + msgid "" "Assign a part of given length of every public IPv6-prefix to this interface" msgstr "" @@ -420,6 +412,9 @@ msgstr "" msgid "Associated Stations" msgstr "Associated Stations" +msgid "Associations" +msgstr "" + msgid "Auth Group" msgstr "" @@ -510,9 +505,6 @@ msgstr "Bad address specified!" msgid "Band" msgstr "" -msgid "Behind NAT" -msgstr "" - msgid "" "Below is the determined list of files to backup. It consists of changed " "configuration files marked by opkg, essential base files and the user " @@ -697,9 +689,6 @@ msgstr "Connected" msgid "Connection Limit" msgstr "Connection Limit" -msgid "Connection to server fails when TLS cannot be used" -msgstr "" - msgid "Connections" msgstr "Connections" @@ -837,9 +826,6 @@ msgstr "Default gateway" msgid "Default is stateless + stateful" msgstr "" -msgid "Default route" -msgstr "" - msgid "Default state" msgstr "Default state" @@ -1370,9 +1356,6 @@ msgstr "Hang Up" msgid "Header Error Code Errors (HEC)" msgstr "" -msgid "Heartbeat" -msgstr "" - msgid "" "Here you can configure the basic aspects of your device like its hostname or " "the timezone." @@ -1430,7 +1413,7 @@ msgstr "" msgid "IPv4 Firewall" msgstr "" -msgid "IPv4 WAN Status" +msgid "IPv4 Upstream" msgstr "" msgid "IPv4 address" @@ -1481,15 +1464,12 @@ msgstr "" msgid "IPv6 ULA-Prefix" msgstr "" -msgid "IPv6 WAN Status" +msgid "IPv6 Upstream" msgstr "" msgid "IPv6 address" msgstr "" -msgid "IPv6 address delegated to the local tunnel endpoint (optional)" -msgstr "" - msgid "IPv6 assignment hint" msgstr "" @@ -2065,9 +2045,6 @@ msgstr "" msgid "NTP server candidates" msgstr "" -msgid "NTP sync time-out" -msgstr "" - msgid "Name" msgstr "Name" @@ -2245,12 +2222,6 @@ msgstr "" msgid "Optional" msgstr "" -msgid "Optional, specify to override default server (tic.sixxs.net)" -msgstr "" - -msgid "Optional, use when the SIXXS account has more than one tunnel" -msgstr "" - msgid "" "Optional. 32-bit mark for outgoing encrypted packets. Enter value in hex, " "starting with <code>0x</code>." @@ -2711,9 +2682,6 @@ msgstr "" msgid "Request IPv6-prefix of length" msgstr "" -msgid "Require TLS" -msgstr "" - msgid "Required" msgstr "" @@ -2796,9 +2764,6 @@ msgstr "" msgid "Route type" msgstr "" -msgid "Routed IPv6 prefix for downstream interfaces" -msgstr "" - msgid "Router Advertisement-Service" msgstr "" @@ -2824,14 +2789,6 @@ msgstr "" msgid "SHA256" msgstr "" -msgid "" -"SIXXS supports TIC only, for static tunnels using IP protocol 41 (RFC4213) " -"use 6in4 instead" -msgstr "" - -msgid "SIXXS-handle[/Tunnel-ID]" -msgstr "" - msgid "SNR" msgstr "" @@ -2885,17 +2842,6 @@ msgstr "Separate Clients" msgid "Server Settings" msgstr "" -msgid "Server password" -msgstr "" - -msgid "" -"Server password, enter the specific password of the tunnel when the username " -"contains the tunnel ID" -msgstr "" - -msgid "Server username" -msgstr "" - msgid "Service Name" msgstr "" @@ -2988,9 +2934,6 @@ msgstr "" msgid "Source" msgstr "Source" -msgid "Source routing" -msgstr "" - msgid "Specifies the directory the device is attached to" msgstr "" @@ -3271,11 +3214,6 @@ msgstr "" "settings." msgid "" -"The tunnel end-point is behind NAT, defaults to disabled and only applies to " -"AYIYA" -msgstr "" - -msgid "" "The uploaded image file does not contain a supported format. Make sure that " "you choose the generic image format for your platform." msgstr "" @@ -3424,15 +3362,6 @@ msgstr "" msgid "Tunnel Link" msgstr "" -msgid "Tunnel broker protocol" -msgstr "" - -msgid "Tunnel setup server" -msgstr "" - -msgid "Tunnel type" -msgstr "" - msgid "Tx-Power" msgstr "" @@ -3605,12 +3534,6 @@ msgstr "" msgid "Vendor Class to send when requesting DHCP" msgstr "" -msgid "Verbose" -msgstr "" - -msgid "Verbose logging by aiccu daemon" -msgstr "" - msgid "Verify" msgstr "" @@ -3642,10 +3565,6 @@ msgstr "" "WPA-Encryption requires wpa_supplicant (for client mode) or hostapd (for AP " "and ad-hoc mode) to be installed." -msgid "" -"Wait for NTP sync that many seconds, seting to 0 disables waiting (optional)" -msgstr "" - msgid "Waiting for changes to be applied..." msgstr "" @@ -3669,12 +3588,6 @@ msgid "" "communications" msgstr "" -msgid "Whether to create an IPv6 default route over the tunnel" -msgstr "" - -msgid "Whether to route only packets from delegated prefixes" -msgstr "" - msgid "Width" msgstr "" @@ -3815,9 +3728,6 @@ msgstr "" msgid "local <abbr title=\"Domain Name System\">DNS</abbr> file" msgstr "local <abbr title=\"Domain Name System\">DNS</abbr> file" -msgid "minimum 1280, maximum 1480" -msgstr "" - msgid "minutes" msgstr "" diff --git a/modules/luci-base/po/es/base.po b/modules/luci-base/po/es/base.po index 66811e74c..fabfded2c 100644 --- a/modules/luci-base/po/es/base.po +++ b/modules/luci-base/po/es/base.po @@ -174,9 +174,6 @@ msgstr "" msgid "ADSL" msgstr "" -msgid "AICCU (SIXXS)" -msgstr "" - msgid "ANSI T1.413" msgstr "" @@ -213,9 +210,6 @@ msgstr "Número de dispositivo ATM" msgid "ATU-C System Vendor ID" msgstr "" -msgid "AYIYA" -msgstr "" - msgid "Access Concentrator" msgstr "Concentrador de acceso" @@ -323,11 +317,6 @@ msgstr "" msgid "Allowed IPs" msgstr "" -msgid "" -"Also see <a href=\"https://www.sixxs.net/faq/connectivity/?faq=comparison" -"\">Tunneling Comparison</a> on SIXXS" -msgstr "" - msgid "Always announce default router" msgstr "" @@ -412,6 +401,9 @@ msgstr "" msgid "Apply unchecked" msgstr "" +msgid "Architecture" +msgstr "" + msgid "" "Assign a part of given length of every public IPv6-prefix to this interface" msgstr "" @@ -426,6 +418,9 @@ msgstr "" msgid "Associated Stations" msgstr "Estaciones asociadas" +msgid "Associations" +msgstr "" + msgid "Auth Group" msgstr "" @@ -516,9 +511,6 @@ msgstr "¡Dirección no válida!" msgid "Band" msgstr "" -msgid "Behind NAT" -msgstr "" - msgid "" "Below is the determined list of files to backup. It consists of changed " "configuration files marked by opkg, essential base files and the user " @@ -706,9 +698,6 @@ msgstr "Conectado" msgid "Connection Limit" msgstr "LÃmite de conexión" -msgid "Connection to server fails when TLS cannot be used" -msgstr "" - msgid "Connections" msgstr "Conexiones" @@ -846,9 +835,6 @@ msgstr "Gateway por defecto" msgid "Default is stateless + stateful" msgstr "" -msgid "Default route" -msgstr "" - msgid "Default state" msgstr "Estado por defecto" @@ -1391,9 +1377,6 @@ msgstr "Suspender" msgid "Header Error Code Errors (HEC)" msgstr "" -msgid "Heartbeat" -msgstr "" - msgid "" "Here you can configure the basic aspects of your device like its hostname or " "the timezone." @@ -1452,8 +1435,8 @@ msgstr "IPv4" msgid "IPv4 Firewall" msgstr "Cortafuegos IPv4" -msgid "IPv4 WAN Status" -msgstr "Estado de la WAN IPv4" +msgid "IPv4 Upstream" +msgstr "" msgid "IPv4 address" msgstr "Dirección IPv4" @@ -1503,15 +1486,12 @@ msgstr "" msgid "IPv6 ULA-Prefix" msgstr "" -msgid "IPv6 WAN Status" -msgstr "Estado de la WAN IPv6" +msgid "IPv6 Upstream" +msgstr "" msgid "IPv6 address" msgstr "Dirección IPv6" -msgid "IPv6 address delegated to the local tunnel endpoint (optional)" -msgstr "" - msgid "IPv6 assignment hint" msgstr "" @@ -2104,9 +2084,6 @@ msgstr "" msgid "NTP server candidates" msgstr "Servidores NTP a consultar" -msgid "NTP sync time-out" -msgstr "" - msgid "Name" msgstr "Nombre" @@ -2283,12 +2260,6 @@ msgstr "Opción eliminada" msgid "Optional" msgstr "" -msgid "Optional, specify to override default server (tic.sixxs.net)" -msgstr "" - -msgid "Optional, use when the SIXXS account has more than one tunnel" -msgstr "" - msgid "" "Optional. 32-bit mark for outgoing encrypted packets. Enter value in hex, " "starting with <code>0x</code>." @@ -2765,9 +2736,6 @@ msgstr "" msgid "Request IPv6-prefix of length" msgstr "" -msgid "Require TLS" -msgstr "" - msgid "Required" msgstr "" @@ -2850,9 +2818,6 @@ msgstr "" msgid "Route type" msgstr "" -msgid "Routed IPv6 prefix for downstream interfaces" -msgstr "" - msgid "Router Advertisement-Service" msgstr "" @@ -2878,14 +2843,6 @@ msgstr "Comprobar el sistema de ficheros" msgid "SHA256" msgstr "" -msgid "" -"SIXXS supports TIC only, for static tunnels using IP protocol 41 (RFC4213) " -"use 6in4 instead" -msgstr "" - -msgid "SIXXS-handle[/Tunnel-ID]" -msgstr "" - msgid "SNR" msgstr "" @@ -2941,17 +2898,6 @@ msgstr "Aislar clientes" msgid "Server Settings" msgstr "Configuración del servidor" -msgid "Server password" -msgstr "" - -msgid "" -"Server password, enter the specific password of the tunnel when the username " -"contains the tunnel ID" -msgstr "" - -msgid "Server username" -msgstr "" - msgid "Service Name" msgstr "Nombre de servicio" @@ -3048,9 +2994,6 @@ msgstr "Ordenar" msgid "Source" msgstr "Origen" -msgid "Source routing" -msgstr "" - msgid "Specifies the directory the device is attached to" msgstr "Especifica el directorio al que está enlazado el dispositivo" @@ -3367,11 +3310,6 @@ msgstr "" "conexión de su ordenador para poder acceder de nuevo al dispositivo." msgid "" -"The tunnel end-point is behind NAT, defaults to disabled and only applies to " -"AYIYA" -msgstr "" - -msgid "" "The uploaded image file does not contain a supported format. Make sure that " "you choose the generic image format for your platform." msgstr "" @@ -3533,15 +3471,6 @@ msgstr "Interfaz de túnel" msgid "Tunnel Link" msgstr "" -msgid "Tunnel broker protocol" -msgstr "" - -msgid "Tunnel setup server" -msgstr "" - -msgid "Tunnel type" -msgstr "" - msgid "Tx-Power" msgstr "Potencia-TX" @@ -3721,12 +3650,6 @@ msgstr "" msgid "Vendor Class to send when requesting DHCP" msgstr "Clase de vendedor a enviar cuando solicite DHCP" -msgid "Verbose" -msgstr "" - -msgid "Verbose logging by aiccu daemon" -msgstr "" - msgid "Verify" msgstr "Verificar" @@ -3758,10 +3681,6 @@ msgstr "" "WPA-Encryption necesita que estén instalados wpa_supplicant (para el modo " "cliente o hostapd (para los modos AP y ad-hoc)." -msgid "" -"Wait for NTP sync that many seconds, seting to 0 disables waiting (optional)" -msgstr "" - msgid "Waiting for changes to be applied..." msgstr "Esperando a que se realicen los cambios..." @@ -3785,12 +3704,6 @@ msgid "" "communications" msgstr "" -msgid "Whether to create an IPv6 default route over the tunnel" -msgstr "" - -msgid "Whether to route only packets from delegated prefixes" -msgstr "" - msgid "Width" msgstr "" @@ -3933,9 +3846,6 @@ msgstr "Kbit/s" msgid "local <abbr title=\"Domain Name System\">DNS</abbr> file" msgstr "Archvo <abbr title=\"Domain Name System\">DNS</abbr> local" -msgid "minimum 1280, maximum 1480" -msgstr "" - msgid "minutes" msgstr "" @@ -4011,6 +3921,12 @@ msgstr "sÃ" msgid "« Back" msgstr "« Volver" +#~ msgid "IPv4 WAN Status" +#~ msgstr "Estado de la WAN IPv4" + +#~ msgid "IPv6 WAN Status" +#~ msgstr "Estado de la WAN IPv6" + #~ msgid "Apply" #~ msgstr "Aplicar" diff --git a/modules/luci-base/po/fr/base.po b/modules/luci-base/po/fr/base.po index 17d124851..148b39e01 100644 --- a/modules/luci-base/po/fr/base.po +++ b/modules/luci-base/po/fr/base.po @@ -173,9 +173,6 @@ msgstr "" msgid "ADSL" msgstr "" -msgid "AICCU (SIXXS)" -msgstr "" - msgid "ANSI T1.413" msgstr "" @@ -216,9 +213,6 @@ msgstr "Numéro de périphérique ATM" msgid "ATU-C System Vendor ID" msgstr "" -msgid "AYIYA" -msgstr "" - msgid "Access Concentrator" msgstr "Concentrateur d'accès" @@ -329,11 +323,6 @@ msgstr "" msgid "Allowed IPs" msgstr "" -msgid "" -"Also see <a href=\"https://www.sixxs.net/faq/connectivity/?faq=comparison" -"\">Tunneling Comparison</a> on SIXXS" -msgstr "" - msgid "Always announce default router" msgstr "" @@ -418,6 +407,9 @@ msgstr "" msgid "Apply unchecked" msgstr "" +msgid "Architecture" +msgstr "" + msgid "" "Assign a part of given length of every public IPv6-prefix to this interface" msgstr "" @@ -432,6 +424,9 @@ msgstr "" msgid "Associated Stations" msgstr "Équipements associés" +msgid "Associations" +msgstr "" + msgid "Auth Group" msgstr "" @@ -522,9 +517,6 @@ msgstr "Adresse spécifiée incorrecte!" msgid "Band" msgstr "" -msgid "Behind NAT" -msgstr "" - msgid "" "Below is the determined list of files to backup. It consists of changed " "configuration files marked by opkg, essential base files and the user " @@ -713,9 +705,6 @@ msgstr "Connecté" msgid "Connection Limit" msgstr "Limite de connexion" -msgid "Connection to server fails when TLS cannot be used" -msgstr "" - msgid "Connections" msgstr "Connexions" @@ -853,9 +842,6 @@ msgstr "Passerelle par défaut" msgid "Default is stateless + stateful" msgstr "" -msgid "Default route" -msgstr "" - msgid "Default state" msgstr "État par défaut" @@ -1402,9 +1388,6 @@ msgstr "Signal (HUP)" msgid "Header Error Code Errors (HEC)" msgstr "" -msgid "Heartbeat" -msgstr "" - msgid "" "Here you can configure the basic aspects of your device like its hostname or " "the timezone." @@ -1464,8 +1447,8 @@ msgstr "IPv4" msgid "IPv4 Firewall" msgstr "Pare-feu IPv4" -msgid "IPv4 WAN Status" -msgstr "État IPv4 du WAN" +msgid "IPv4 Upstream" +msgstr "" msgid "IPv4 address" msgstr "Adresse IPv4" @@ -1515,15 +1498,12 @@ msgstr "" msgid "IPv6 ULA-Prefix" msgstr "" -msgid "IPv6 WAN Status" -msgstr "État IPv6 du WAN" +msgid "IPv6 Upstream" +msgstr "" msgid "IPv6 address" msgstr "Adresse IPv6" -msgid "IPv6 address delegated to the local tunnel endpoint (optional)" -msgstr "" - msgid "IPv6 assignment hint" msgstr "" @@ -2118,9 +2098,6 @@ msgstr "" msgid "NTP server candidates" msgstr "Serveurs NTP candidats" -msgid "NTP sync time-out" -msgstr "" - msgid "Name" msgstr "Nom" @@ -2296,12 +2273,6 @@ msgstr "Option retirée" msgid "Optional" msgstr "" -msgid "Optional, specify to override default server (tic.sixxs.net)" -msgstr "" - -msgid "Optional, use when the SIXXS account has more than one tunnel" -msgstr "" - msgid "" "Optional. 32-bit mark for outgoing encrypted packets. Enter value in hex, " "starting with <code>0x</code>." @@ -2778,9 +2749,6 @@ msgstr "" msgid "Request IPv6-prefix of length" msgstr "" -msgid "Require TLS" -msgstr "" - msgid "Required" msgstr "" @@ -2863,9 +2831,6 @@ msgstr "" msgid "Route type" msgstr "" -msgid "Routed IPv6 prefix for downstream interfaces" -msgstr "" - msgid "Router Advertisement-Service" msgstr "" @@ -2892,14 +2857,6 @@ msgstr "Faire une vérification du système de fichiers" msgid "SHA256" msgstr "" -msgid "" -"SIXXS supports TIC only, for static tunnels using IP protocol 41 (RFC4213) " -"use 6in4 instead" -msgstr "" - -msgid "SIXXS-handle[/Tunnel-ID]" -msgstr "" - msgid "SNR" msgstr "" @@ -2955,17 +2912,6 @@ msgstr "Isoler les clients" msgid "Server Settings" msgstr "Paramètres du serveur" -msgid "Server password" -msgstr "" - -msgid "" -"Server password, enter the specific password of the tunnel when the username " -"contains the tunnel ID" -msgstr "" - -msgid "Server username" -msgstr "" - msgid "Service Name" msgstr "Nom du service" @@ -3063,9 +3009,6 @@ msgstr "Trier" msgid "Source" msgstr "Source" -msgid "Source routing" -msgstr "" - msgid "Specifies the directory the device is attached to" msgstr "Indique le répertoire auquel le périphérique est rattaché" @@ -3380,11 +3323,6 @@ msgstr "" "settings." msgid "" -"The tunnel end-point is behind NAT, defaults to disabled and only applies to " -"AYIYA" -msgstr "" - -msgid "" "The uploaded image file does not contain a supported format. Make sure that " "you choose the generic image format for your platform." msgstr "" @@ -3551,15 +3489,6 @@ msgstr "Interface du tunnel" msgid "Tunnel Link" msgstr "" -msgid "Tunnel broker protocol" -msgstr "" - -msgid "Tunnel setup server" -msgstr "" - -msgid "Tunnel type" -msgstr "" - msgid "Tx-Power" msgstr "Puissance d'émission" @@ -3740,12 +3669,6 @@ msgstr "" msgid "Vendor Class to send when requesting DHCP" msgstr "Classe de fournisseur à envoyer dans les requêtes DHCP" -msgid "Verbose" -msgstr "" - -msgid "Verbose logging by aiccu daemon" -msgstr "" - msgid "Verify" msgstr "Vérifier" @@ -3777,10 +3700,6 @@ msgstr "" "Le chiffrage WPA nécessite l'installation du paquet wpa_supplicant (en mode " "client) ou hostapd (en mode Point d'accès ou Ad-hoc)." -msgid "" -"Wait for NTP sync that many seconds, seting to 0 disables waiting (optional)" -msgstr "" - msgid "Waiting for changes to be applied..." msgstr "En attente de l'application des changements..." @@ -3804,12 +3723,6 @@ msgid "" "communications" msgstr "" -msgid "Whether to create an IPv6 default route over the tunnel" -msgstr "" - -msgid "Whether to route only packets from delegated prefixes" -msgstr "" - msgid "Width" msgstr "" @@ -3951,9 +3864,6 @@ msgstr "kbit/s" msgid "local <abbr title=\"Domain Name System\">DNS</abbr> file" msgstr "fichier de résolution local" -msgid "minimum 1280, maximum 1480" -msgstr "" - msgid "minutes" msgstr "" @@ -4029,6 +3939,12 @@ msgstr "oui" msgid "« Back" msgstr "« Retour" +#~ msgid "IPv4 WAN Status" +#~ msgstr "État IPv4 du WAN" + +#~ msgid "IPv6 WAN Status" +#~ msgstr "État IPv6 du WAN" + #~ msgid "Apply" #~ msgstr "Appliquer" diff --git a/modules/luci-base/po/he/base.po b/modules/luci-base/po/he/base.po index 793dc8071..9ac8e7416 100644 --- a/modules/luci-base/po/he/base.po +++ b/modules/luci-base/po/he/base.po @@ -163,9 +163,6 @@ msgstr "" msgid "ADSL" msgstr "" -msgid "AICCU (SIXXS)" -msgstr "" - msgid "ANSI T1.413" msgstr "" @@ -203,9 +200,6 @@ msgstr "מס' התקן של ATM" msgid "ATU-C System Vendor ID" msgstr "" -msgid "AYIYA" -msgstr "" - #, fuzzy msgid "Access Concentrator" msgstr "מרכז גישות" @@ -316,11 +310,6 @@ msgstr "" msgid "Allowed IPs" msgstr "" -msgid "" -"Also see <a href=\"https://www.sixxs.net/faq/connectivity/?faq=comparison" -"\">Tunneling Comparison</a> on SIXXS" -msgstr "" - msgid "Always announce default router" msgstr "" @@ -407,6 +396,9 @@ msgstr "" msgid "Apply unchecked" msgstr "" +msgid "Architecture" +msgstr "" + msgid "" "Assign a part of given length of every public IPv6-prefix to this interface" msgstr "" @@ -421,6 +413,9 @@ msgstr "" msgid "Associated Stations" msgstr "×ª×—× ×•×ª קשורות" +msgid "Associations" +msgstr "" + msgid "Auth Group" msgstr "" @@ -511,9 +506,6 @@ msgstr "פורטה כתובת ×œ× ×ª×§×™× ×”" msgid "Band" msgstr "" -msgid "Behind NAT" -msgstr "" - msgid "" "Below is the determined list of files to backup. It consists of changed " "configuration files marked by opkg, essential base files and the user " @@ -690,9 +682,6 @@ msgstr "מחובר" msgid "Connection Limit" msgstr "מגבלת חיבורי×" -msgid "Connection to server fails when TLS cannot be used" -msgstr "" - msgid "Connections" msgstr "חיבורי×" @@ -830,9 +819,6 @@ msgstr "" msgid "Default is stateless + stateful" msgstr "" -msgid "Default route" -msgstr "" - msgid "Default state" msgstr "" @@ -1355,9 +1341,6 @@ msgstr "" msgid "Header Error Code Errors (HEC)" msgstr "" -msgid "Heartbeat" -msgstr "" - msgid "" "Here you can configure the basic aspects of your device like its hostname or " "the timezone." @@ -1413,7 +1396,7 @@ msgstr "" msgid "IPv4 Firewall" msgstr "" -msgid "IPv4 WAN Status" +msgid "IPv4 Upstream" msgstr "" msgid "IPv4 address" @@ -1464,15 +1447,12 @@ msgstr "" msgid "IPv6 ULA-Prefix" msgstr "" -msgid "IPv6 WAN Status" +msgid "IPv6 Upstream" msgstr "" msgid "IPv6 address" msgstr "" -msgid "IPv6 address delegated to the local tunnel endpoint (optional)" -msgstr "" - msgid "IPv6 assignment hint" msgstr "" @@ -2038,9 +2018,6 @@ msgstr "" msgid "NTP server candidates" msgstr "" -msgid "NTP sync time-out" -msgstr "" - msgid "Name" msgstr "ש×" @@ -2212,12 +2189,6 @@ msgstr "" msgid "Optional" msgstr "" -msgid "Optional, specify to override default server (tic.sixxs.net)" -msgstr "" - -msgid "Optional, use when the SIXXS account has more than one tunnel" -msgstr "" - msgid "" "Optional. 32-bit mark for outgoing encrypted packets. Enter value in hex, " "starting with <code>0x</code>." @@ -2679,9 +2650,6 @@ msgstr "" msgid "Request IPv6-prefix of length" msgstr "" -msgid "Require TLS" -msgstr "" - msgid "Required" msgstr "" @@ -2764,9 +2732,6 @@ msgstr "" msgid "Route type" msgstr "" -msgid "Routed IPv6 prefix for downstream interfaces" -msgstr "" - msgid "Router Advertisement-Service" msgstr "" @@ -2790,14 +2755,6 @@ msgstr "הרץ בדיקת מערכת קבצי×" msgid "SHA256" msgstr "" -msgid "" -"SIXXS supports TIC only, for static tunnels using IP protocol 41 (RFC4213) " -"use 6in4 instead" -msgstr "" - -msgid "SIXXS-handle[/Tunnel-ID]" -msgstr "" - msgid "SNR" msgstr "" @@ -2851,17 +2808,6 @@ msgstr "" msgid "Server Settings" msgstr "" -msgid "Server password" -msgstr "" - -msgid "" -"Server password, enter the specific password of the tunnel when the username " -"contains the tunnel ID" -msgstr "" - -msgid "Server username" -msgstr "" - msgid "Service Name" msgstr "" @@ -2957,9 +2903,6 @@ msgstr "מיין" msgid "Source" msgstr "מקור" -msgid "Source routing" -msgstr "" - msgid "Specifies the directory the device is attached to" msgstr "" @@ -3234,11 +3177,6 @@ msgid "" msgstr "" msgid "" -"The tunnel end-point is behind NAT, defaults to disabled and only applies to " -"AYIYA" -msgstr "" - -msgid "" "The uploaded image file does not contain a supported format. Make sure that " "you choose the generic image format for your platform." msgstr "" @@ -3382,15 +3320,6 @@ msgstr "" msgid "Tunnel Link" msgstr "" -msgid "Tunnel broker protocol" -msgstr "" - -msgid "Tunnel setup server" -msgstr "" - -msgid "Tunnel type" -msgstr "" - msgid "Tx-Power" msgstr "עוצמת שידור" @@ -3563,12 +3492,6 @@ msgstr "" msgid "Vendor Class to send when requesting DHCP" msgstr "" -msgid "Verbose" -msgstr "" - -msgid "Verbose logging by aiccu daemon" -msgstr "" - msgid "Verify" msgstr "" @@ -3598,10 +3521,6 @@ msgid "" "and ad-hoc mode) to be installed." msgstr "" -msgid "" -"Wait for NTP sync that many seconds, seting to 0 disables waiting (optional)" -msgstr "" - msgid "Waiting for changes to be applied..." msgstr "" @@ -3625,12 +3544,6 @@ msgid "" "communications" msgstr "" -msgid "Whether to create an IPv6 default route over the tunnel" -msgstr "" - -msgid "Whether to route only packets from delegated prefixes" -msgstr "" - msgid "Width" msgstr "" @@ -3766,9 +3679,6 @@ msgstr "" msgid "local <abbr title=\"Domain Name System\">DNS</abbr> file" msgstr "" -msgid "minimum 1280, maximum 1480" -msgstr "" - msgid "minutes" msgstr "" diff --git a/modules/luci-base/po/hu/base.po b/modules/luci-base/po/hu/base.po index a900733ae..42eb6bc90 100644 --- a/modules/luci-base/po/hu/base.po +++ b/modules/luci-base/po/hu/base.po @@ -170,9 +170,6 @@ msgstr "" msgid "ADSL" msgstr "" -msgid "AICCU (SIXXS)" -msgstr "" - msgid "ANSI T1.413" msgstr "" @@ -209,9 +206,6 @@ msgstr "ATM eszközszám" msgid "ATU-C System Vendor ID" msgstr "" -msgid "AYIYA" -msgstr "" - msgid "Access Concentrator" msgstr "Elérési központ" @@ -322,11 +316,6 @@ msgstr "" msgid "Allowed IPs" msgstr "" -msgid "" -"Also see <a href=\"https://www.sixxs.net/faq/connectivity/?faq=comparison" -"\">Tunneling Comparison</a> on SIXXS" -msgstr "" - msgid "Always announce default router" msgstr "" @@ -411,6 +400,9 @@ msgstr "" msgid "Apply unchecked" msgstr "" +msgid "Architecture" +msgstr "" + msgid "" "Assign a part of given length of every public IPv6-prefix to this interface" msgstr "" @@ -425,6 +417,9 @@ msgstr "" msgid "Associated Stations" msgstr "Kapcsolódó kliensek" +msgid "Associations" +msgstr "" + msgid "Auth Group" msgstr "" @@ -515,9 +510,6 @@ msgstr "Hibás cÃmet adott meg!" msgid "Band" msgstr "" -msgid "Behind NAT" -msgstr "" - msgid "" "Below is the determined list of files to backup. It consists of changed " "configuration files marked by opkg, essential base files and the user " @@ -708,9 +700,6 @@ msgstr "Kapcsolódva" msgid "Connection Limit" msgstr "Kapcsolati korlát" -msgid "Connection to server fails when TLS cannot be used" -msgstr "" - msgid "Connections" msgstr "Kapcsolatok" @@ -848,9 +837,6 @@ msgstr "Alapértelmezett átjáró" msgid "Default is stateless + stateful" msgstr "" -msgid "Default route" -msgstr "" - msgid "Default state" msgstr "Alapértelmezett állapot" @@ -1391,9 +1377,6 @@ msgstr "Befejezés" msgid "Header Error Code Errors (HEC)" msgstr "" -msgid "Heartbeat" -msgstr "" - msgid "" "Here you can configure the basic aspects of your device like its hostname or " "the timezone." @@ -1453,8 +1436,8 @@ msgstr "IPv4" msgid "IPv4 Firewall" msgstr "IPv4 tűzfal" -msgid "IPv4 WAN Status" -msgstr "IPv4 WAN állapot" +msgid "IPv4 Upstream" +msgstr "" msgid "IPv4 address" msgstr "IPv4 cÃm" @@ -1504,15 +1487,12 @@ msgstr "" msgid "IPv6 ULA-Prefix" msgstr "" -msgid "IPv6 WAN Status" -msgstr "IPv6 WAN állapot" +msgid "IPv6 Upstream" +msgstr "" msgid "IPv6 address" msgstr "IPv6 cÃm" -msgid "IPv6 address delegated to the local tunnel endpoint (optional)" -msgstr "" - msgid "IPv6 assignment hint" msgstr "" @@ -2107,9 +2087,6 @@ msgstr "" msgid "NTP server candidates" msgstr "Kijelölt NTP kiszolgálók" -msgid "NTP sync time-out" -msgstr "" - msgid "Name" msgstr "Név" @@ -2286,12 +2263,6 @@ msgstr "BeállÃtás eltávolÃtva" msgid "Optional" msgstr "" -msgid "Optional, specify to override default server (tic.sixxs.net)" -msgstr "" - -msgid "Optional, use when the SIXXS account has more than one tunnel" -msgstr "" - msgid "" "Optional. 32-bit mark for outgoing encrypted packets. Enter value in hex, " "starting with <code>0x</code>." @@ -2769,9 +2740,6 @@ msgstr "" msgid "Request IPv6-prefix of length" msgstr "" -msgid "Require TLS" -msgstr "" - msgid "Required" msgstr "" @@ -2855,9 +2823,6 @@ msgstr "" msgid "Route type" msgstr "" -msgid "Routed IPv6 prefix for downstream interfaces" -msgstr "" - msgid "Router Advertisement-Service" msgstr "" @@ -2883,14 +2848,6 @@ msgstr "Fájlrendszer ellenÅ‘rzés futtatása" msgid "SHA256" msgstr "" -msgid "" -"SIXXS supports TIC only, for static tunnels using IP protocol 41 (RFC4213) " -"use 6in4 instead" -msgstr "" - -msgid "SIXXS-handle[/Tunnel-ID]" -msgstr "" - msgid "SNR" msgstr "" @@ -2946,17 +2903,6 @@ msgstr "Kliensek szétválasztása" msgid "Server Settings" msgstr "Kiszolgáló beállÃtásai" -msgid "Server password" -msgstr "" - -msgid "" -"Server password, enter the specific password of the tunnel when the username " -"contains the tunnel ID" -msgstr "" - -msgid "Server username" -msgstr "" - msgid "Service Name" msgstr "Szolgáltatás neve" @@ -3053,9 +2999,6 @@ msgstr "Sorbarendezés" msgid "Source" msgstr "Forrás" -msgid "Source routing" -msgstr "" - msgid "Specifies the directory the device is attached to" msgstr "Megadja az eszköz csatlakozási könyvtárát." @@ -3369,11 +3312,6 @@ msgstr "" "megújÃtása." msgid "" -"The tunnel end-point is behind NAT, defaults to disabled and only applies to " -"AYIYA" -msgstr "" - -msgid "" "The uploaded image file does not contain a supported format. Make sure that " "you choose the generic image format for your platform." msgstr "" @@ -3539,15 +3477,6 @@ msgstr "Tunnel interfész" msgid "Tunnel Link" msgstr "" -msgid "Tunnel broker protocol" -msgstr "" - -msgid "Tunnel setup server" -msgstr "" - -msgid "Tunnel type" -msgstr "" - msgid "Tx-Power" msgstr "AdóteljesÃtmény" @@ -3727,12 +3656,6 @@ msgstr "" msgid "Vendor Class to send when requesting DHCP" msgstr "DHCP kérés során küldendÅ‘ 'Vendor Class'" -msgid "Verbose" -msgstr "" - -msgid "Verbose logging by aiccu daemon" -msgstr "" - msgid "Verify" msgstr "EllenÅ‘rzés" @@ -3764,10 +3687,6 @@ msgstr "" "WPA titkosÃtáshoz kliens módnál 'wpa_supplicant', hozzáférési pont illetve " "ad-hoc módnál 'hostapd' telepÃtése szükséges." -msgid "" -"Wait for NTP sync that many seconds, seting to 0 disables waiting (optional)" -msgstr "" - msgid "Waiting for changes to be applied..." msgstr "Várakozás a változtatások alkalmazására..." @@ -3791,12 +3710,6 @@ msgid "" "communications" msgstr "" -msgid "Whether to create an IPv6 default route over the tunnel" -msgstr "" - -msgid "Whether to route only packets from delegated prefixes" -msgstr "" - msgid "Width" msgstr "" @@ -3940,9 +3853,6 @@ msgstr "kbit/s" msgid "local <abbr title=\"Domain Name System\">DNS</abbr> file" msgstr "helyi <abbr title=\"Domain Name System\">DNS</abbr> fájl" -msgid "minimum 1280, maximum 1480" -msgstr "" - msgid "minutes" msgstr "" @@ -4018,6 +3928,12 @@ msgstr "igen" msgid "« Back" msgstr "« Vissza" +#~ msgid "IPv4 WAN Status" +#~ msgstr "IPv4 WAN állapot" + +#~ msgid "IPv6 WAN Status" +#~ msgstr "IPv6 WAN állapot" + #~ msgid "Apply" #~ msgstr "Alkalmaz" diff --git a/modules/luci-base/po/it/base.po b/modules/luci-base/po/it/base.po index b90d9cf7b..3f687f097 100644 --- a/modules/luci-base/po/it/base.po +++ b/modules/luci-base/po/it/base.po @@ -177,9 +177,6 @@ msgstr "" msgid "ADSL" msgstr "" -msgid "AICCU (SIXXS)" -msgstr "" - msgid "ANSI T1.413" msgstr "" @@ -216,9 +213,6 @@ msgstr "Numero dispositivo ATM " msgid "ATU-C System Vendor ID" msgstr "" -msgid "AYIYA" -msgstr "" - msgid "Access Concentrator" msgstr "Accesso Concentratore" @@ -331,11 +325,6 @@ msgstr "" msgid "Allowed IPs" msgstr "" -msgid "" -"Also see <a href=\"https://www.sixxs.net/faq/connectivity/?faq=comparison" -"\">Tunneling Comparison</a> on SIXXS" -msgstr "" - msgid "Always announce default router" msgstr "" @@ -420,6 +409,9 @@ msgstr "" msgid "Apply unchecked" msgstr "" +msgid "Architecture" +msgstr "" + msgid "" "Assign a part of given length of every public IPv6-prefix to this interface" msgstr "" @@ -434,6 +426,9 @@ msgstr "" msgid "Associated Stations" msgstr "Dispositivi Wi-Fi connessi" +msgid "Associations" +msgstr "" + msgid "Auth Group" msgstr "" @@ -524,9 +519,6 @@ msgstr "E' stato specificato un indirizzo errato!" msgid "Band" msgstr "" -msgid "Behind NAT" -msgstr "" - msgid "" "Below is the determined list of files to backup. It consists of changed " "configuration files marked by opkg, essential base files and the user " @@ -713,9 +705,6 @@ msgstr "Connesso" msgid "Connection Limit" msgstr "Limite connessioni" -msgid "Connection to server fails when TLS cannot be used" -msgstr "" - msgid "Connections" msgstr "Connessioni" @@ -853,9 +842,6 @@ msgstr "Gateway predefinito" msgid "Default is stateless + stateful" msgstr "" -msgid "Default route" -msgstr "" - msgid "Default state" msgstr "Stato Predefinito" @@ -1395,9 +1381,6 @@ msgstr "Hangup" msgid "Header Error Code Errors (HEC)" msgstr "" -msgid "Heartbeat" -msgstr "" - msgid "" "Here you can configure the basic aspects of your device like its hostname or " "the timezone." @@ -1458,8 +1441,8 @@ msgstr "IPv4" msgid "IPv4 Firewall" msgstr "IPv4 Firewall" -msgid "IPv4 WAN Status" -msgstr "Stato WAN IPv4" +msgid "IPv4 Upstream" +msgstr "" msgid "IPv4 address" msgstr "Indirizzi IPv4" @@ -1509,15 +1492,12 @@ msgstr "Impostazioni IPv6" msgid "IPv6 ULA-Prefix" msgstr "" -msgid "IPv6 WAN Status" -msgstr "Stato WAN IPv6" +msgid "IPv6 Upstream" +msgstr "" msgid "IPv6 address" msgstr "Indirizzi IPv6" -msgid "IPv6 address delegated to the local tunnel endpoint (optional)" -msgstr "" - msgid "IPv6 assignment hint" msgstr "" @@ -2107,9 +2087,6 @@ msgstr "" msgid "NTP server candidates" msgstr "Candidati server NTP" -msgid "NTP sync time-out" -msgstr "Sincronizzazione NTP scaduta" - msgid "Name" msgstr "Nome" @@ -2286,12 +2263,6 @@ msgstr "Opzione cancellata" msgid "Optional" msgstr "" -msgid "Optional, specify to override default server (tic.sixxs.net)" -msgstr "" - -msgid "Optional, use when the SIXXS account has more than one tunnel" -msgstr "" - msgid "" "Optional. 32-bit mark for outgoing encrypted packets. Enter value in hex, " "starting with <code>0x</code>." @@ -2662,13 +2633,15 @@ msgid "" "Really shut down network?\\nYou might lose access to this device if you are " "connected via this interface." msgstr "" -"Vuoi davvero spegnere questa interfaccia \"%s\" ?\\nPotresti perdere " -"l'accesso a questo router se stai usando questa interfaccia." +"Vuoi davvero spegnere questa interfaccia?\\nPotresti perdere l'accesso a " +"questo router se sei connesso usando questa interfaccia." msgid "" "Really shutdown interface \"%s\" ?\\nYou might lose access to this device if " "you are connected via this interface." msgstr "" +"Vuoi davvero spegnere questa interfaccia \"%s\" ?\\nPotresti perdere " +"l'accesso a questo router se stai usando questa interfaccia." msgid "Really switch protocol?" msgstr "Cambiare veramente il protocollo?" @@ -2757,9 +2730,6 @@ msgstr "Richiede indirizzo-IPv6" msgid "Request IPv6-prefix of length" msgstr "Richiede prefisso-IPv6 di lunghezza" -msgid "Require TLS" -msgstr "Richiede TLS" - msgid "Required" msgstr "Richiesto" @@ -2842,9 +2812,6 @@ msgstr "" msgid "Route type" msgstr "" -msgid "Routed IPv6 prefix for downstream interfaces" -msgstr "" - msgid "Router Advertisement-Service" msgstr "" @@ -2870,14 +2837,6 @@ msgstr "Esegui controllo del filesystem" msgid "SHA256" msgstr "" -msgid "" -"SIXXS supports TIC only, for static tunnels using IP protocol 41 (RFC4213) " -"use 6in4 instead" -msgstr "" - -msgid "SIXXS-handle[/Tunnel-ID]" -msgstr "" - msgid "SNR" msgstr "" @@ -2931,17 +2890,6 @@ msgstr "Isola utenti" msgid "Server Settings" msgstr "Impostazioni Server" -msgid "Server password" -msgstr "" - -msgid "" -"Server password, enter the specific password of the tunnel when the username " -"contains the tunnel ID" -msgstr "" - -msgid "Server username" -msgstr "" - msgid "Service Name" msgstr "" @@ -3038,9 +2986,6 @@ msgstr "Ordina" msgid "Source" msgstr "Origine" -msgid "Source routing" -msgstr "" - msgid "Specifies the directory the device is attached to" msgstr "Specifica la cartella a cui è collegato il dispositivo in" @@ -3339,11 +3284,6 @@ msgstr "" "settings." msgid "" -"The tunnel end-point is behind NAT, defaults to disabled and only applies to " -"AYIYA" -msgstr "" - -msgid "" "The uploaded image file does not contain a supported format. Make sure that " "you choose the generic image format for your platform." msgstr "" @@ -3496,15 +3436,6 @@ msgstr "" msgid "Tunnel Link" msgstr "" -msgid "Tunnel broker protocol" -msgstr "" - -msgid "Tunnel setup server" -msgstr "" - -msgid "Tunnel type" -msgstr "" - msgid "Tx-Power" msgstr "" @@ -3686,12 +3617,6 @@ msgstr "" msgid "Vendor Class to send when requesting DHCP" msgstr "Classe del Produttore da 'inviare al momento della richiesta DHCP" -msgid "Verbose" -msgstr "" - -msgid "Verbose logging by aiccu daemon" -msgstr "" - msgid "Verify" msgstr "Verifica" @@ -3723,12 +3648,6 @@ msgstr "" "La crittografia WPA richiede wpa_supplicant (per la modalità client) o " "hostapd (per AP e modalità ad hoc) per essere installato." -msgid "" -"Wait for NTP sync that many seconds, seting to 0 disables waiting (optional)" -msgstr "" -"Attendi sincro NTP quei dati secondi, immetti 0 per disabilitare l'attesa " -"(opzionale)" - msgid "Waiting for changes to be applied..." msgstr "In attesa delle modifiche da applicare ..." @@ -3752,12 +3671,6 @@ msgid "" "communications" msgstr "" -msgid "Whether to create an IPv6 default route over the tunnel" -msgstr "" - -msgid "Whether to route only packets from delegated prefixes" -msgstr "" - msgid "Width" msgstr "" @@ -3902,9 +3815,6 @@ msgstr "kbit/s" msgid "local <abbr title=\"Domain Name System\">DNS</abbr> file" msgstr "File <abbr title=\"Sistema Nome Dominio\">DNS</abbr> locale" -msgid "minimum 1280, maximum 1480" -msgstr "" - msgid "minutes" msgstr "" @@ -3980,99 +3890,8 @@ msgstr "Sì" msgid "« Back" msgstr "« Indietro" -#~ msgid "Apply" -#~ msgstr "Applica" - -#~ msgid "Applying changes" -#~ msgstr "Applica modifiche" - -#~ msgid "Configuration applied." -#~ msgstr "Configurazione salvata." - -#~ msgid "Save & Apply" -#~ msgstr "Salva & Applica" - -#~ msgid "There are no pending changes to apply!" -#~ msgstr "Non ci sono cambiamenti pendenti da applicare!" - -#~ msgid "Action" -#~ msgstr "Azione" - -#~ msgid "Buttons" -#~ msgstr "Pulsanti" - -#~ msgid "Handler" -#~ msgstr "Gestore" - -#~ msgid "Maximum hold time" -#~ msgstr "Tempo massimo di attesa" - -#~ msgid "Minimum hold time" -#~ msgstr "Velocità minima" - -#~ msgid "Specifies the button state to handle" -#~ msgstr "Specifica lo stato del pulsante da gestire" - -#~ msgid "Leasetime" -#~ msgstr "Tempo di contratto" - -#, fuzzy -#~ msgid "automatic" -#~ msgstr "statico" - -#~ msgid "AR Support" -#~ msgstr "Supporto AR" - -#~ msgid "Atheros 802.11%s Wireless Controller" -#~ msgstr "Dispositivo Wireless Atheros 802.11%s" - -#~ msgid "Background Scan" -#~ msgstr "Scansione in background" - -#~ msgid "Compression" -#~ msgstr "Compressione" - -#~ msgid "Disable HW-Beacon timer" -#~ msgstr "Disabilita Timer Beacon HW" - -#~ msgid "Do not send probe responses" -#~ msgstr "Disabilita Probe-Responses" - -#~ msgid "Fast Frames" -#~ msgstr "Frame veloci" - -#~ msgid "Maximum Rate" -#~ msgstr "Velocità massima" - -#~ msgid "Minimum Rate" -#~ msgstr "Velocità minima" - -#~ msgid "Multicast Rate" -#~ msgstr "Velocità multicast" - -#~ msgid "Separate WDS" -#~ msgstr "WDS separati" - -#~ msgid "Static WDS" -#~ msgstr "WDS statico" - -#~ msgid "Turbo Mode" -#~ msgstr "Modalità turbo" - -#~ msgid "XR Support" -#~ msgstr "Supporto XR" - -#~ msgid "An additional network will be created if you leave this unchecked." -#~ msgstr "Sarà creata una rete aggiuntiva se lasci questo senza spunta." - -#~ msgid "Join Network: Settings" -#~ msgstr "Aggiunta Rete: Impostazioni" - -#~ msgid "CPU" -#~ msgstr "CPU" - -#~ msgid "Port %d" -#~ msgstr "Porta %d" +#~ msgid "IPv4 WAN Status" +#~ msgstr "Stato WAN IPv4" -#~ msgid "VLAN Interface" -#~ msgstr "Interfaccia VLAN" +#~ msgid "IPv6 WAN Status" +#~ msgstr "Stato WAN IPv6" diff --git a/modules/luci-base/po/ja/base.po b/modules/luci-base/po/ja/base.po index c0cbb6b6d..20c244959 100644 --- a/modules/luci-base/po/ja/base.po +++ b/modules/luci-base/po/ja/base.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2009-06-10 03:40+0200\n" -"PO-Revision-Date: 2018-05-21 00:47+0900\n" +"PO-Revision-Date: 2018-06-01 02:42+0900\n" "Last-Translator: INAGAKI Hiroshi <musashino.open@gmail.com>\n" "Language: ja\n" "MIME-Version: 1.0\n" @@ -175,9 +175,6 @@ msgstr "A43C + J43 + A43 + V43" msgid "ADSL" msgstr "ADSL" -msgid "AICCU (SIXXS)" -msgstr "AICCU (SIXXS)" - msgid "ANSI T1.413" msgstr "ANSI T1.413" @@ -211,9 +208,6 @@ msgstr "ATMデãƒã‚¤ã‚¹ç•ªå·" msgid "ATU-C System Vendor ID" msgstr "" -msgid "AYIYA" -msgstr "" - msgid "Access Concentrator" msgstr "Access Concentrator" @@ -321,11 +315,6 @@ msgstr "" msgid "Allowed IPs" msgstr "許å¯ã•ã‚Œã‚‹IP" -msgid "" -"Also see <a href=\"https://www.sixxs.net/faq/connectivity/?faq=comparison" -"\">Tunneling Comparison</a> on SIXXS" -msgstr "" - msgid "Always announce default router" msgstr "常ã«ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆ ルーターã¨ã—ã¦é€šçŸ¥ã™ã‚‹" @@ -412,6 +401,9 @@ msgstr "é©ç”¨ãƒªã‚¯ã‚¨ã‚¹ãƒˆã¯ã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹ <code>%h</code> ã«ã‚ˆã‚Šå¤±æ•—ã msgid "Apply unchecked" msgstr "ãƒã‚§ãƒƒã‚¯ãªã—ã®é©ç”¨" +msgid "Architecture" +msgstr "アーã‚テクãƒãƒ£" + msgid "" "Assign a part of given length of every public IPv6-prefix to this interface" msgstr "" @@ -426,6 +418,9 @@ msgstr "" msgid "Associated Stations" msgstr "èªè¨¼æ¸ˆã¿ç«¯æœ«" +msgid "Associations" +msgstr "アソシエーション数" + msgid "Auth Group" msgstr "èªè¨¼ã‚°ãƒ«ãƒ¼ãƒ—" @@ -516,9 +511,6 @@ msgstr "無効ãªã‚¢ãƒ‰ãƒ¬ã‚¹ã§ã™!" msgid "Band" msgstr "" -msgid "Behind NAT" -msgstr "" - msgid "" "Below is the determined list of files to backup. It consists of changed " "configuration files marked by opkg, essential base files and the user " @@ -594,7 +586,7 @@ msgid "Changes applied." msgstr "変更ãŒé©ç”¨ã•ã‚Œã¾ã—ãŸã€‚" msgid "Changes have been reverted." -msgstr "" +msgstr "変更ã¯å–り消ã•ã‚Œã¾ã—ãŸã€‚" msgid "Changes the administrator password for accessing the device" msgstr "デãƒã‚¤ã‚¹ã®ç®¡ç†è€…パスワードを変更ã—ã¾ã™" @@ -716,9 +708,6 @@ msgstr "接続ä¸" msgid "Connection Limit" msgstr "接続制é™" -msgid "Connection to server fails when TLS cannot be used" -msgstr "TLSãŒä½¿ç”¨ã§ããªã„ã¨ãã€ã‚µãƒ¼ãƒãƒ¼ã¸ã®æŽ¥ç¶šã¯å¤±æ•—ã—ã¾ã™ã€‚" - msgid "Connections" msgstr "ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯æŽ¥ç¶š" @@ -727,8 +716,8 @@ msgid "" "changes. You might need to reconnect if you modified network related " "settings such as the IP address or wireless security credentials." msgstr "" -"è¨å®šã®å¤‰æ›´ã‚’é©ç”¨å¾Œã€ãƒ‡ãƒã‚¤ã‚¹ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’回復ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚ã‚‚ã— IP アドレスや" -"ç„¡ç·šã®ã‚»ã‚ュリティèªè¨¼æƒ…å ±ãªã©ã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯é–¢é€£ã®è¨å®šã‚’変更ã—ãŸå ´åˆã€" +"è¨å®šã®å¤‰æ›´ã‚’é©ç”¨å¾Œã€ãƒ‡ãƒã‚¤ã‚¹ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’回復ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚ã‚‚ã— IP アド" +"レスや無線ã®ã‚»ã‚ュリティèªè¨¼æƒ…å ±ãªã©ã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯é–¢é€£ã®è¨å®šã‚’変更ã—ãŸå ´åˆã€" "å†æŽ¥ç¶šãŒå¿…è¦ã‹ã‚‚ã—ã‚Œã¾ã›ã‚“。" msgid "Country" @@ -863,9 +852,6 @@ msgstr "デフォルト ゲートウェイ" msgid "Default is stateless + stateful" msgstr "デフォルト㯠ステートレス + ステートフル ã§ã™ã€‚" -msgid "Default route" -msgstr "デフォルト ルート" - msgid "Default state" msgstr "標準状態" @@ -1409,9 +1395,6 @@ msgstr "å†èµ·å‹•" msgid "Header Error Code Errors (HEC)" msgstr "" -msgid "Heartbeat" -msgstr "ãƒãƒ¼ãƒˆãƒ“ート" - msgid "" "Here you can configure the basic aspects of your device like its hostname or " "the timezone." @@ -1469,8 +1452,8 @@ msgstr "IPv4" msgid "IPv4 Firewall" msgstr "IPv4 ファイアウォール" -msgid "IPv4 WAN Status" -msgstr "IPv4 WAN ステータス" +msgid "IPv4 Upstream" +msgstr "IPv4 アップストリーム" msgid "IPv4 address" msgstr "IPv4 アドレス" @@ -1520,15 +1503,12 @@ msgstr "IPv6 è¨å®š" msgid "IPv6 ULA-Prefix" msgstr "IPv6 ULA-プレフィクス" -msgid "IPv6 WAN Status" -msgstr "IPv6 WAN ステータス" +msgid "IPv6 Upstream" +msgstr "IPv6 アップストリーム" msgid "IPv6 address" msgstr "IPv6 アドレス" -msgid "IPv6 address delegated to the local tunnel endpoint (optional)" -msgstr "" - msgid "IPv6 assignment hint" msgstr "" @@ -2123,9 +2103,6 @@ msgstr "NT ドメイン" msgid "NTP server candidates" msgstr "NTPサーãƒãƒ¼å€™è£œ" -msgid "NTP sync time-out" -msgstr "NTP åŒæœŸã‚¿ã‚¤ãƒ アウト" - msgid "Name" msgstr "åå‰" @@ -2305,12 +2282,6 @@ msgstr "削除ã•ã‚Œã‚‹ã‚ªãƒ—ション" msgid "Optional" msgstr "オプション" -msgid "Optional, specify to override default server (tic.sixxs.net)" -msgstr "" - -msgid "Optional, use when the SIXXS account has more than one tunnel" -msgstr "" - msgid "" "Optional. 32-bit mark for outgoing encrypted packets. Enter value in hex, " "starting with <code>0x</code>." @@ -2793,9 +2764,6 @@ msgstr "IPv6-アドレスã®ãƒªã‚¯ã‚¨ã‚¹ãƒˆ" msgid "Request IPv6-prefix of length" msgstr "リクエストã™ã‚‹IPv6-プレフィクス長" -msgid "Require TLS" -msgstr "TLSãŒå¿…è¦" - msgid "Required" msgstr "å¿…é ˆ" @@ -2880,9 +2848,6 @@ msgstr "" msgid "Route type" msgstr "ルート タイプ" -msgid "Routed IPv6 prefix for downstream interfaces" -msgstr "" - msgid "Router Advertisement-Service" msgstr "ルーター アドãƒã‚¿ã‚¤ã‚ºãƒ¡ãƒ³ãƒˆ-サービス" @@ -2908,14 +2873,6 @@ msgstr "ファイルシステムãƒã‚§ãƒƒã‚¯ã‚’è¡Œã†" msgid "SHA256" msgstr "SHA256" -msgid "" -"SIXXS supports TIC only, for static tunnels using IP protocol 41 (RFC4213) " -"use 6in4 instead" -msgstr "" - -msgid "SIXXS-handle[/Tunnel-ID]" -msgstr "" - msgid "SNR" msgstr "SNR" @@ -2971,17 +2928,6 @@ msgstr "クライアントã®åˆ†é›¢" msgid "Server Settings" msgstr "サーãƒãƒ¼è¨å®š" -msgid "Server password" -msgstr "サーãƒãƒ¼ パスワード" - -msgid "" -"Server password, enter the specific password of the tunnel when the username " -"contains the tunnel ID" -msgstr "" - -msgid "Server username" -msgstr "サーãƒãƒ¼ ユーザーå" - msgid "Service Name" msgstr "サービスå" @@ -3077,9 +3023,6 @@ msgstr "ソート" msgid "Source" msgstr "é€ä¿¡å…ƒ" -msgid "Source routing" -msgstr "" - msgid "Specifies the directory the device is attached to" msgstr "デãƒã‚¤ã‚¹ãŒæŽ¥ç¶šã™ã‚‹ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã‚’è¨å®šã—ã¾ã™" @@ -3295,8 +3238,8 @@ msgstr "" "ã™ã€‚ã“ã‚Œã¯ã€å®‰å…¨ä¸Šã®ç†ç”±ã«ã‚ˆã‚Šãƒãƒ¼ãƒ«ãƒãƒƒã‚¯ã•ã‚Œã‚‹è¨å®šã«èµ·å› ã™ã‚‹ã‚‚ã®ã§ã™ã€‚ãã‚Œ" "ã§ã‚‚è¨å®šã®å¤‰æ›´ãŒæ£ã—ã„ã¨æ€ã†å ´åˆã¯ã€ãƒã‚§ãƒƒã‚¯ãªã—ã®å¤‰æ›´ã®é©ç”¨ã‚’è¡Œã£ã¦ãã ã•" "ã„。もã—ãã¯ã€å†åº¦é©ç”¨ã‚’試行ã™ã‚‹å‰ã«ã“ã®è¦å‘Šã‚’除去ã—ã¦è¨å®šå†…容ã®ç·¨é›†ã‚’è¡Œã†" -"ã‹ã€ç¾åœ¨å‹•ä½œã—ã¦ã„ã‚‹è¨å®šçŠ¶æ³ã‚’ç¶æŒã™ã‚‹ãŸã‚ã«æœªé©ç”¨ã®å¤‰æ›´ã‚’å–り消ã—ã¦ãã " -"ã•ã„。" +"ã‹ã€ç¾åœ¨å‹•ä½œã—ã¦ã„ã‚‹è¨å®šçŠ¶æ³ã‚’ç¶æŒã™ã‚‹ãŸã‚ã«æœªé©ç”¨ã®å¤‰æ›´ã‚’å–り消ã—ã¦ãã ã•" +"ã„。" msgid "" "The device file of the memory or partition (<abbr title=\"for example\">e.g." @@ -3388,11 +3331,6 @@ msgstr "" "ã‚Œã°ãªã‚‰ãªã„å ´åˆãŒã‚ã‚Šã¾ã™ã€‚" msgid "" -"The tunnel end-point is behind NAT, defaults to disabled and only applies to " -"AYIYA" -msgstr "" - -msgid "" "The uploaded image file does not contain a supported format. Make sure that " "you choose the generic image format for your platform." msgstr "" @@ -3560,15 +3498,6 @@ msgstr "トンãƒãƒ«ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ãƒ¼ã‚¹" msgid "Tunnel Link" msgstr "トンãƒãƒ«ãƒªãƒ³ã‚¯" -msgid "Tunnel broker protocol" -msgstr "トンãƒãƒ«ãƒ–ãƒãƒ¼ã‚«ãƒ¼ プãƒãƒˆã‚³ãƒ«" - -msgid "Tunnel setup server" -msgstr "トンãƒãƒ«ã‚»ãƒƒãƒˆã‚¢ãƒƒãƒ— サーãƒãƒ¼" - -msgid "Tunnel type" -msgstr "トンãƒãƒ«ã‚¿ã‚¤ãƒ—" - msgid "Tx-Power" msgstr "é€ä¿¡é›»åŠ›" @@ -3749,12 +3678,6 @@ msgstr "ベンダー" msgid "Vendor Class to send when requesting DHCP" msgstr "DHCPリクエストé€ä¿¡æ™‚ã®ãƒ™ãƒ³ãƒ€ãƒ¼ã‚¯ãƒ©ã‚¹ã‚’è¨å®š" -msgid "Verbose" -msgstr "詳細" - -msgid "Verbose logging by aiccu daemon" -msgstr "" - msgid "Verify" msgstr "確èª" @@ -3787,10 +3710,6 @@ msgstr "" "hostapd (アクセスãƒã‚¤ãƒ³ãƒˆåŠã³ã‚¢ãƒ‰ãƒ›ãƒƒã‚¯) ãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•ã‚Œã¦ã„ã‚‹å¿…è¦ãŒã‚ã‚Šã¾" "ã™ã€‚" -msgid "" -"Wait for NTP sync that many seconds, seting to 0 disables waiting (optional)" -msgstr "" - msgid "Waiting for changes to be applied..." msgstr "変更をé©ç”¨ä¸ã§ã™..." @@ -3814,12 +3733,6 @@ msgid "" "communications" msgstr "" -msgid "Whether to create an IPv6 default route over the tunnel" -msgstr "" - -msgid "Whether to route only packets from delegated prefixes" -msgstr "" - msgid "Width" msgstr "帯域幅" @@ -3964,9 +3877,6 @@ msgstr "kbit/s" msgid "local <abbr title=\"Domain Name System\">DNS</abbr> file" msgstr "ãƒãƒ¼ã‚«ãƒ« <abbr title=\"Domain Name System\">DNS</abbr>ファイル" -msgid "minimum 1280, maximum 1480" -msgstr "最å°å€¤ 1280ã€æœ€å¤§å€¤ 1480" - msgid "minutes" msgstr "分" diff --git a/modules/luci-base/po/ko/base.po b/modules/luci-base/po/ko/base.po index 7f1bf22e0..d7b33cf0d 100644 --- a/modules/luci-base/po/ko/base.po +++ b/modules/luci-base/po/ko/base.po @@ -168,9 +168,6 @@ msgstr "" msgid "ADSL" msgstr "" -msgid "AICCU (SIXXS)" -msgstr "" - msgid "ANSI T1.413" msgstr "" @@ -204,9 +201,6 @@ msgstr "" msgid "ATU-C System Vendor ID" msgstr "" -msgid "AYIYA" -msgstr "" - msgid "Access Concentrator" msgstr "" @@ -311,11 +305,6 @@ msgstr "" msgid "Allowed IPs" msgstr "" -msgid "" -"Also see <a href=\"https://www.sixxs.net/faq/connectivity/?faq=comparison" -"\">Tunneling Comparison</a> on SIXXS" -msgstr "" - msgid "Always announce default router" msgstr "" @@ -400,6 +389,9 @@ msgstr "" msgid "Apply unchecked" msgstr "" +msgid "Architecture" +msgstr "" + msgid "" "Assign a part of given length of every public IPv6-prefix to this interface" msgstr "" @@ -414,6 +406,9 @@ msgstr "" msgid "Associated Stations" msgstr "ì—°ê²°ëœ station 들" +msgid "Associations" +msgstr "" + msgid "Auth Group" msgstr "" @@ -504,9 +499,6 @@ msgstr "" msgid "Band" msgstr "" -msgid "Behind NAT" -msgstr "" - msgid "" "Below is the determined list of files to backup. It consists of changed " "configuration files marked by opkg, essential base files and the user " @@ -693,9 +685,6 @@ msgstr "ì—°ê²° 시간" msgid "Connection Limit" msgstr "" -msgid "Connection to server fails when TLS cannot be used" -msgstr "" - msgid "Connections" msgstr "ì—°ê²°" @@ -835,9 +824,6 @@ msgstr "" msgid "Default is stateless + stateful" msgstr "" -msgid "Default route" -msgstr "" - msgid "Default state" msgstr "기본 ìƒíƒœ" @@ -1368,9 +1354,6 @@ msgstr "" msgid "Header Error Code Errors (HEC)" msgstr "" -msgid "Heartbeat" -msgstr "" - msgid "" "Here you can configure the basic aspects of your device like its hostname or " "the timezone." @@ -1429,8 +1412,8 @@ msgstr "" msgid "IPv4 Firewall" msgstr "IPv4 방화벽" -msgid "IPv4 WAN Status" -msgstr "IPv4 WAN ìƒíƒœ" +msgid "IPv4 Upstream" +msgstr "" msgid "IPv4 address" msgstr "IPv4 주소" @@ -1480,13 +1463,10 @@ msgstr "IPv6 ì„¤ì •" msgid "IPv6 ULA-Prefix" msgstr "" -msgid "IPv6 WAN Status" -msgstr "IPv6 WAN ìƒíƒœ" - -msgid "IPv6 address" +msgid "IPv6 Upstream" msgstr "" -msgid "IPv6 address delegated to the local tunnel endpoint (optional)" +msgid "IPv6 address" msgstr "" msgid "IPv6 assignment hint" @@ -2056,9 +2036,6 @@ msgstr "" msgid "NTP server candidates" msgstr "NTP 서버 목ë¡" -msgid "NTP sync time-out" -msgstr "" - msgid "Name" msgstr "ì´ë¦„" @@ -2236,12 +2213,6 @@ msgstr "ì‚ì œëœ option" msgid "Optional" msgstr "" -msgid "Optional, specify to override default server (tic.sixxs.net)" -msgstr "" - -msgid "Optional, use when the SIXXS account has more than one tunnel" -msgstr "" - msgid "" "Optional. 32-bit mark for outgoing encrypted packets. Enter value in hex, " "starting with <code>0x</code>." @@ -2706,9 +2677,6 @@ msgstr "" msgid "Request IPv6-prefix of length" msgstr "" -msgid "Require TLS" -msgstr "" - msgid "Required" msgstr "" @@ -2791,9 +2759,6 @@ msgstr "" msgid "Route type" msgstr "" -msgid "Routed IPv6 prefix for downstream interfaces" -msgstr "" - msgid "Router Advertisement-Service" msgstr "" @@ -2819,14 +2784,6 @@ msgstr "" msgid "SHA256" msgstr "" -msgid "" -"SIXXS supports TIC only, for static tunnels using IP protocol 41 (RFC4213) " -"use 6in4 instead" -msgstr "" - -msgid "SIXXS-handle[/Tunnel-ID]" -msgstr "" - msgid "SNR" msgstr "" @@ -2880,17 +2837,6 @@ msgstr "" msgid "Server Settings" msgstr "서버 ì„¤ì •" -msgid "Server password" -msgstr "" - -msgid "" -"Server password, enter the specific password of the tunnel when the username " -"contains the tunnel ID" -msgstr "" - -msgid "Server username" -msgstr "" - msgid "Service Name" msgstr "" @@ -2983,9 +2929,6 @@ msgstr "순서" msgid "Source" msgstr "" -msgid "Source routing" -msgstr "" - msgid "Specifies the directory the device is attached to" msgstr "" @@ -3269,11 +3212,6 @@ msgid "" msgstr "" msgid "" -"The tunnel end-point is behind NAT, defaults to disabled and only applies to " -"AYIYA" -msgstr "" - -msgid "" "The uploaded image file does not contain a supported format. Make sure that " "you choose the generic image format for your platform." msgstr "" @@ -3426,15 +3364,6 @@ msgstr "" msgid "Tunnel Link" msgstr "" -msgid "Tunnel broker protocol" -msgstr "" - -msgid "Tunnel setup server" -msgstr "" - -msgid "Tunnel type" -msgstr "" - msgid "Tx-Power" msgstr "" @@ -3615,12 +3544,6 @@ msgstr "" msgid "Vendor Class to send when requesting DHCP" msgstr "DHCP ìš”ì²ì‹œ ì „ì†¡í• Vendor Class" -msgid "Verbose" -msgstr "" - -msgid "Verbose logging by aiccu daemon" -msgstr "" - msgid "Verify" msgstr "" @@ -3650,10 +3573,6 @@ msgid "" "and ad-hoc mode) to be installed." msgstr "" -msgid "" -"Wait for NTP sync that many seconds, seting to 0 disables waiting (optional)" -msgstr "" - msgid "Waiting for changes to be applied..." msgstr "변경 사í•ì´ ì ìš©ë˜ê¸°ë¥¼ 기다리는 중입니다..." @@ -3677,12 +3596,6 @@ msgid "" "communications" msgstr "" -msgid "Whether to create an IPv6 default route over the tunnel" -msgstr "" - -msgid "Whether to route only packets from delegated prefixes" -msgstr "" - msgid "Width" msgstr "" @@ -3824,9 +3737,6 @@ msgstr "" msgid "local <abbr title=\"Domain Name System\">DNS</abbr> file" msgstr "local <abbr title=\"Domain Name System\">DNS</abbr> 파ì¼" -msgid "minimum 1280, maximum 1480" -msgstr "" - msgid "minutes" msgstr "" @@ -3902,6 +3812,12 @@ msgstr "" msgid "« Back" msgstr "" +#~ msgid "IPv4 WAN Status" +#~ msgstr "IPv4 WAN ìƒíƒœ" + +#~ msgid "IPv6 WAN Status" +#~ msgstr "IPv6 WAN ìƒíƒœ" + #~ msgid "Apply" #~ msgstr "ì ìš©" diff --git a/modules/luci-base/po/ms/base.po b/modules/luci-base/po/ms/base.po index cadaf9b3b..be6d70727 100644 --- a/modules/luci-base/po/ms/base.po +++ b/modules/luci-base/po/ms/base.po @@ -165,9 +165,6 @@ msgstr "" msgid "ADSL" msgstr "" -msgid "AICCU (SIXXS)" -msgstr "" - msgid "ANSI T1.413" msgstr "" @@ -201,9 +198,6 @@ msgstr "" msgid "ATU-C System Vendor ID" msgstr "" -msgid "AYIYA" -msgstr "" - msgid "Access Concentrator" msgstr "" @@ -306,11 +300,6 @@ msgstr "" msgid "Allowed IPs" msgstr "" -msgid "" -"Also see <a href=\"https://www.sixxs.net/faq/connectivity/?faq=comparison" -"\">Tunneling Comparison</a> on SIXXS" -msgstr "" - msgid "Always announce default router" msgstr "" @@ -395,6 +384,9 @@ msgstr "" msgid "Apply unchecked" msgstr "" +msgid "Architecture" +msgstr "" + msgid "" "Assign a part of given length of every public IPv6-prefix to this interface" msgstr "" @@ -409,6 +401,9 @@ msgstr "" msgid "Associated Stations" msgstr "Associated Stesen" +msgid "Associations" +msgstr "" + msgid "Auth Group" msgstr "" @@ -499,9 +494,6 @@ msgstr "" msgid "Band" msgstr "" -msgid "Behind NAT" -msgstr "" - msgid "" "Below is the determined list of files to backup. It consists of changed " "configuration files marked by opkg, essential base files and the user " @@ -675,9 +667,6 @@ msgstr "" msgid "Connection Limit" msgstr "Sambungan Batas" -msgid "Connection to server fails when TLS cannot be used" -msgstr "" - msgid "Connections" msgstr "" @@ -813,9 +802,6 @@ msgstr "" msgid "Default is stateless + stateful" msgstr "" -msgid "Default route" -msgstr "" - msgid "Default state" msgstr "" @@ -1340,9 +1326,6 @@ msgstr "Menutup" msgid "Header Error Code Errors (HEC)" msgstr "" -msgid "Heartbeat" -msgstr "" - msgid "" "Here you can configure the basic aspects of your device like its hostname or " "the timezone." @@ -1400,7 +1383,7 @@ msgstr "" msgid "IPv4 Firewall" msgstr "" -msgid "IPv4 WAN Status" +msgid "IPv4 Upstream" msgstr "" msgid "IPv4 address" @@ -1451,15 +1434,12 @@ msgstr "" msgid "IPv6 ULA-Prefix" msgstr "" -msgid "IPv6 WAN Status" +msgid "IPv6 Upstream" msgstr "" msgid "IPv6 address" msgstr "" -msgid "IPv6 address delegated to the local tunnel endpoint (optional)" -msgstr "" - msgid "IPv6 assignment hint" msgstr "" @@ -2036,9 +2016,6 @@ msgstr "" msgid "NTP server candidates" msgstr "" -msgid "NTP sync time-out" -msgstr "" - msgid "Name" msgstr "Nama" @@ -2215,12 +2192,6 @@ msgstr "" msgid "Optional" msgstr "" -msgid "Optional, specify to override default server (tic.sixxs.net)" -msgstr "" - -msgid "Optional, use when the SIXXS account has more than one tunnel" -msgstr "" - msgid "" "Optional. 32-bit mark for outgoing encrypted packets. Enter value in hex, " "starting with <code>0x</code>." @@ -2680,9 +2651,6 @@ msgstr "" msgid "Request IPv6-prefix of length" msgstr "" -msgid "Require TLS" -msgstr "" - msgid "Required" msgstr "" @@ -2765,9 +2733,6 @@ msgstr "" msgid "Route type" msgstr "" -msgid "Routed IPv6 prefix for downstream interfaces" -msgstr "" - msgid "Router Advertisement-Service" msgstr "" @@ -2793,14 +2758,6 @@ msgstr "" msgid "SHA256" msgstr "" -msgid "" -"SIXXS supports TIC only, for static tunnels using IP protocol 41 (RFC4213) " -"use 6in4 instead" -msgstr "" - -msgid "SIXXS-handle[/Tunnel-ID]" -msgstr "" - msgid "SNR" msgstr "" @@ -2854,17 +2811,6 @@ msgstr "Pisahkan Pelanggan" msgid "Server Settings" msgstr "" -msgid "Server password" -msgstr "" - -msgid "" -"Server password, enter the specific password of the tunnel when the username " -"contains the tunnel ID" -msgstr "" - -msgid "Server username" -msgstr "" - msgid "Service Name" msgstr "" @@ -2957,9 +2903,6 @@ msgstr "" msgid "Source" msgstr "Sumber" -msgid "Source routing" -msgstr "" - msgid "Specifies the directory the device is attached to" msgstr "" @@ -3242,11 +3185,6 @@ msgstr "" "bergantung pada tetapan anda." msgid "" -"The tunnel end-point is behind NAT, defaults to disabled and only applies to " -"AYIYA" -msgstr "" - -msgid "" "The uploaded image file does not contain a supported format. Make sure that " "you choose the generic image format for your platform." msgstr "" @@ -3397,15 +3335,6 @@ msgstr "" msgid "Tunnel Link" msgstr "" -msgid "Tunnel broker protocol" -msgstr "" - -msgid "Tunnel setup server" -msgstr "" - -msgid "Tunnel type" -msgstr "" - msgid "Tx-Power" msgstr "" @@ -3578,12 +3507,6 @@ msgstr "" msgid "Vendor Class to send when requesting DHCP" msgstr "" -msgid "Verbose" -msgstr "" - -msgid "Verbose logging by aiccu daemon" -msgstr "" - msgid "Verify" msgstr "" @@ -3615,10 +3538,6 @@ msgstr "" "WPA-Enkripsi memerlukan pemohan wpa (untuk mod pelanggan) atau hostapd " "(untuk AP dan mod ad-hoc) yang akan dipasangkan." -msgid "" -"Wait for NTP sync that many seconds, seting to 0 disables waiting (optional)" -msgstr "" - msgid "Waiting for changes to be applied..." msgstr "" @@ -3642,12 +3561,6 @@ msgid "" "communications" msgstr "" -msgid "Whether to create an IPv6 default route over the tunnel" -msgstr "" - -msgid "Whether to route only packets from delegated prefixes" -msgstr "" - msgid "Width" msgstr "" @@ -3783,9 +3696,6 @@ msgstr "" msgid "local <abbr title=\"Domain Name System\">DNS</abbr> file" msgstr "Fail DNS tempatan" -msgid "minimum 1280, maximum 1480" -msgstr "" - msgid "minutes" msgstr "" diff --git a/modules/luci-base/po/no/base.po b/modules/luci-base/po/no/base.po index 600d00724..7212e4b80 100644 --- a/modules/luci-base/po/no/base.po +++ b/modules/luci-base/po/no/base.po @@ -167,9 +167,6 @@ msgstr "" msgid "ADSL" msgstr "" -msgid "AICCU (SIXXS)" -msgstr "" - msgid "ANSI T1.413" msgstr "" @@ -210,9 +207,6 @@ msgstr "<abbr title=\"Asynchronous Transfer Mode\">ATM</abbr> enhetsnummer" msgid "ATU-C System Vendor ID" msgstr "" -msgid "AYIYA" -msgstr "" - msgid "Access Concentrator" msgstr "Tilgangskonsentrator" @@ -315,11 +309,6 @@ msgstr "Tillat oppstrøms svar i 127.0.0.0/8 nettet, f.eks for RBL tjenester" msgid "Allowed IPs" msgstr "" -msgid "" -"Also see <a href=\"https://www.sixxs.net/faq/connectivity/?faq=comparison" -"\">Tunneling Comparison</a> on SIXXS" -msgstr "" - msgid "Always announce default router" msgstr "" @@ -404,6 +393,9 @@ msgstr "" msgid "Apply unchecked" msgstr "" +msgid "Architecture" +msgstr "" + msgid "" "Assign a part of given length of every public IPv6-prefix to this interface" msgstr "" @@ -418,6 +410,9 @@ msgstr "" msgid "Associated Stations" msgstr "Tilkoblede Klienter" +msgid "Associations" +msgstr "" + msgid "Auth Group" msgstr "" @@ -508,9 +503,6 @@ msgstr "Ugyldig adresse oppgitt!" msgid "Band" msgstr "" -msgid "Behind NAT" -msgstr "" - msgid "" "Below is the determined list of files to backup. It consists of changed " "configuration files marked by opkg, essential base files and the user " @@ -697,9 +689,6 @@ msgstr "Tilkoblet" msgid "Connection Limit" msgstr "Tilkoblingsgrense (antall)" -msgid "Connection to server fails when TLS cannot be used" -msgstr "" - msgid "Connections" msgstr "Tilkoblinger" @@ -837,9 +826,6 @@ msgstr "Standard gateway" msgid "Default is stateless + stateful" msgstr "" -msgid "Default route" -msgstr "" - msgid "Default state" msgstr "Standard tilstand" @@ -1377,9 +1363,6 @@ msgstr "SlÃ¥ av" msgid "Header Error Code Errors (HEC)" msgstr "" -msgid "Heartbeat" -msgstr "" - msgid "" "Here you can configure the basic aspects of your device like its hostname or " "the timezone." @@ -1439,8 +1422,8 @@ msgstr "IPv4" msgid "IPv4 Firewall" msgstr "IPv4 Brannmur" -msgid "IPv4 WAN Status" -msgstr "IPv4 WAN Status" +msgid "IPv4 Upstream" +msgstr "" msgid "IPv4 address" msgstr "IPv4 adresse" @@ -1490,15 +1473,12 @@ msgstr "" msgid "IPv6 ULA-Prefix" msgstr "" -msgid "IPv6 WAN Status" -msgstr "IPv6 WAN Status" +msgid "IPv6 Upstream" +msgstr "" msgid "IPv6 address" msgstr "IPv6 adresse" -msgid "IPv6 address delegated to the local tunnel endpoint (optional)" -msgstr "" - msgid "IPv6 assignment hint" msgstr "" @@ -2081,9 +2061,6 @@ msgstr "" msgid "NTP server candidates" msgstr "NTP server kandidater" -msgid "NTP sync time-out" -msgstr "" - msgid "Name" msgstr "Navn" @@ -2261,12 +2238,6 @@ msgstr "Innstilling fjernet" msgid "Optional" msgstr "" -msgid "Optional, specify to override default server (tic.sixxs.net)" -msgstr "" - -msgid "Optional, use when the SIXXS account has more than one tunnel" -msgstr "" - msgid "" "Optional. 32-bit mark for outgoing encrypted packets. Enter value in hex, " "starting with <code>0x</code>." @@ -2743,9 +2714,6 @@ msgstr "" msgid "Request IPv6-prefix of length" msgstr "" -msgid "Require TLS" -msgstr "" - msgid "Required" msgstr "" @@ -2828,9 +2796,6 @@ msgstr "" msgid "Route type" msgstr "" -msgid "Routed IPv6 prefix for downstream interfaces" -msgstr "" - msgid "Router Advertisement-Service" msgstr "" @@ -2856,14 +2821,6 @@ msgstr "Kjør filsystem sjekk" msgid "SHA256" msgstr "" -msgid "" -"SIXXS supports TIC only, for static tunnels using IP protocol 41 (RFC4213) " -"use 6in4 instead" -msgstr "" - -msgid "SIXXS-handle[/Tunnel-ID]" -msgstr "" - msgid "SNR" msgstr "" @@ -2919,17 +2876,6 @@ msgstr "Separerte Klienter" msgid "Server Settings" msgstr "Server Innstillinger" -msgid "Server password" -msgstr "" - -msgid "" -"Server password, enter the specific password of the tunnel when the username " -"contains the tunnel ID" -msgstr "" - -msgid "Server username" -msgstr "" - msgid "Service Name" msgstr "Tjeneste navn" @@ -3026,9 +2972,6 @@ msgstr "Sortering" msgid "Source" msgstr "Kilde" -msgid "Source routing" -msgstr "" - msgid "Specifies the directory the device is attached to" msgstr "Hvor lagrings enheten blir tilsluttet filsystemet (f.eks. /mnt/sda1)" @@ -3338,11 +3281,6 @@ msgstr "" "datamaskinen din for Ã¥ nÃ¥ enheten pÃ¥ nytt. (avhengig av innstillingene dine)" msgid "" -"The tunnel end-point is behind NAT, defaults to disabled and only applies to " -"AYIYA" -msgstr "" - -msgid "" "The uploaded image file does not contain a supported format. Make sure that " "you choose the generic image format for your platform." msgstr "" @@ -3504,15 +3442,6 @@ msgstr "Tunnel grensesnitt" msgid "Tunnel Link" msgstr "" -msgid "Tunnel broker protocol" -msgstr "" - -msgid "Tunnel setup server" -msgstr "" - -msgid "Tunnel type" -msgstr "" - msgid "Tx-Power" msgstr "Tx-Styrke" @@ -3692,12 +3621,6 @@ msgstr "" msgid "Vendor Class to send when requesting DHCP" msgstr "Leverandør klasse som sendes ved DHCP spørring" -msgid "Verbose" -msgstr "" - -msgid "Verbose logging by aiccu daemon" -msgstr "" - msgid "Verify" msgstr "Bekreft" @@ -3729,10 +3652,6 @@ msgstr "" "WPA-Kryptering krever at wpa_supplicant (for klient-modus) eller hostapd " "(for AP og ad-hoc-modus) er installert." -msgid "" -"Wait for NTP sync that many seconds, seting to 0 disables waiting (optional)" -msgstr "" - msgid "Waiting for changes to be applied..." msgstr "Venter pÃ¥ at endringer utføres..." @@ -3756,12 +3675,6 @@ msgid "" "communications" msgstr "" -msgid "Whether to create an IPv6 default route over the tunnel" -msgstr "" - -msgid "Whether to route only packets from delegated prefixes" -msgstr "" - msgid "Width" msgstr "" @@ -3905,9 +3818,6 @@ msgstr "kbit/s" msgid "local <abbr title=\"Domain Name System\">DNS</abbr> file" msgstr "lokal <abbr title=\"Domain Navn System\">DNS</abbr>-fil" -msgid "minimum 1280, maximum 1480" -msgstr "" - msgid "minutes" msgstr "" @@ -3983,6 +3893,12 @@ msgstr "ja" msgid "« Back" msgstr "« Tilbake" +#~ msgid "IPv4 WAN Status" +#~ msgstr "IPv4 WAN Status" + +#~ msgid "IPv6 WAN Status" +#~ msgstr "IPv6 WAN Status" + #~ msgid "Apply" #~ msgstr "Bruk" diff --git a/modules/luci-base/po/pl/base.po b/modules/luci-base/po/pl/base.po index 390e489e2..bc5734bd8 100644 --- a/modules/luci-base/po/pl/base.po +++ b/modules/luci-base/po/pl/base.po @@ -162,8 +162,8 @@ msgid "" "<br/>Note: you need to manually restart the cron service if the crontab file " "was empty before editing." msgstr "" -"<br/>Uwaga: musisz rÄ™cznie zrestartować usÅ‚ugÄ™ cron, jeÅ›li plik crontab " -"byÅ‚ pusty przed edycjÄ…." +"<br/>Uwaga: musisz rÄ™cznie zrestartować usÅ‚ugÄ™ cron, jeÅ›li plik crontab byÅ‚ " +"pusty przed edycjÄ…." msgid "A43C + J43 + A43" msgstr "" @@ -174,9 +174,6 @@ msgstr "" msgid "ADSL" msgstr "ADSL" -msgid "AICCU (SIXXS)" -msgstr "" - msgid "ANSI T1.413" msgstr "" @@ -205,9 +202,9 @@ msgid "" "Linux network interfaces which can be used in conjunction with DHCP or PPP " "to dial into the provider network." msgstr "" -"Mosty ATM eksponujÄ… enkapsulowanÄ… sieć Ethernet w poÅ‚Ä…czeniach AAL5 jako wirtualne " -"interfejsy sieciowe systemu Linux, które mogÄ… być używane w poÅ‚Ä…czeniu z protokoÅ‚em " -"DHCP lub PPP w celu polÄ…czenia siÄ™ z sieciÄ… dostawcy." +"Mosty ATM eksponujÄ… enkapsulowanÄ… sieć Ethernet w poÅ‚Ä…czeniach AAL5 jako " +"wirtualne interfejsy sieciowe systemu Linux, które mogÄ… być używane w " +"poÅ‚Ä…czeniu z protokoÅ‚em DHCP lub PPP w celu polÄ…czenia siÄ™ z sieciÄ… dostawcy." msgid "ATM device number" msgstr "Numer urzÄ…dzenia ATM" @@ -215,9 +212,6 @@ msgstr "Numer urzÄ…dzenia ATM" msgid "ATU-C System Vendor ID" msgstr "" -msgid "AYIYA" -msgstr "" - # co to takiego? msgid "Access Concentrator" msgstr "Koncentrator dostÄ™powy ATM" @@ -290,7 +284,8 @@ msgstr "Alarm" msgid "" "Allocate IP addresses sequentially, starting from the lowest available " "address" -msgstr "Przydziel sekwencyjnie adresy IP, zaczynajÄ…c od najmniejszego dostÄ™pnego" +msgstr "" +"Przydziel sekwencyjnie adresy IP, zaczynajÄ…c od najmniejszego dostÄ™pnego" msgid "Allocate IP sequentially" msgstr "Przydzielaj adresy IP po kolei" @@ -311,7 +306,8 @@ msgid "Allow localhost" msgstr "Pozwól tylko sobie (localhost)" msgid "Allow remote hosts to connect to local SSH forwarded ports" -msgstr "Zezwalaj zdalnym hostom na Å‚Ä…czenie siÄ™ z lokalnie przekazywanymi portami SSH" +msgstr "" +"Zezwalaj zdalnym hostom na Å‚Ä…czenie siÄ™ z lokalnie przekazywanymi portami SSH" msgid "Allow root logins with password" msgstr "Zezwól na logowanie roota przy pomocy hasÅ‚a" @@ -327,11 +323,6 @@ msgstr "" msgid "Allowed IPs" msgstr "Dozwolone adresy IP" -msgid "" -"Also see <a href=\"https://www.sixxs.net/faq/connectivity/?faq=comparison" -"\">Tunneling Comparison</a> on SIXXS" -msgstr "" - msgid "Always announce default router" msgstr "Zawsze rozgÅ‚aszaj domyÅ›lny router" @@ -410,11 +401,14 @@ msgstr "Ustawienia anteny" msgid "Any zone" msgstr "Dowolna strefa" -msgid "Apply" -msgstr "Zatwierdź" +msgid "Apply request failed with status <code>%h</code>" +msgstr "" -msgid "Applying changes" -msgstr "Wprowadzam zmiany" +msgid "Apply unchecked" +msgstr "" + +msgid "Architecture" +msgstr "" msgid "" "Assign a part of given length of every public IPv6-prefix to this interface" @@ -430,6 +424,9 @@ msgstr "" msgid "Associated Stations" msgstr "PoÅ‚Ä…czone stacje" +msgid "Associations" +msgstr "" + msgid "Auth Group" msgstr "" @@ -521,9 +518,6 @@ msgstr "Wprowadzono zÅ‚y adres" msgid "Band" msgstr "" -msgid "Behind NAT" -msgstr "" - msgid "" "Below is the determined list of files to backup. It consists of changed " "configuration files marked by opkg, essential base files and the user " @@ -596,12 +590,20 @@ msgstr "Zmiany" msgid "Changes applied." msgstr "Zmiany zostaÅ‚y zastosowane." +msgid "Changes have been reverted." +msgstr "" + msgid "Changes the administrator password for accessing the device" msgstr "Zmienia hasÅ‚o administratora" msgid "Channel" msgstr "KanaÅ‚" +msgid "" +"Channel %d is not available in the %s regulatory domain and has been auto-" +"adjusted to %d." +msgstr "" + msgid "Check" msgstr "Sprawdź" @@ -678,17 +680,24 @@ msgid "" "workaround might cause interoperability issues and reduced robustness of key " "negotiation especially in environments with heavy traffic load." msgstr "" -"Komplikuje atak ponownej instalacji klucza po stronie klienta, wyÅ‚Ä…czajÄ…c retransmisjÄ™ ramek klucza EAPOL, które sÄ… używane do instalowania kluczy. To obejÅ›cie może powodować problemy z interoperacyjnoÅ›ciÄ… i zmniejszonÄ… odporność kluczowych negocjacji, szczególnie w Å›rodowiskach o dużym natężeniu ruchu." +"Komplikuje atak ponownej instalacji klucza po stronie klienta, wyÅ‚Ä…czajÄ…c " +"retransmisjÄ™ ramek klucza EAPOL, które sÄ… używane do instalowania kluczy. To " +"obejÅ›cie może powodować problemy z interoperacyjnoÅ›ciÄ… i zmniejszonÄ… " +"odporność kluczowych negocjacji, szczególnie w Å›rodowiskach o dużym " +"natężeniu ruchu." msgid "Configuration" msgstr "Konfiguracja" -msgid "Configuration applied." -msgstr "Konfiguracja zostaÅ‚a zastosowana." - msgid "Configuration files will be kept." msgstr "Pliki konfiguracyjne zostanÄ… zachowane." +msgid "Configuration has been applied." +msgstr "" + +msgid "Configuration has been rolled back!" +msgstr "" + msgid "Confirmation" msgstr "Potwierdzenie" @@ -701,12 +710,15 @@ msgstr "PoÅ‚Ä…czony" msgid "Connection Limit" msgstr "Limit poÅ‚Ä…czeÅ„" -msgid "Connection to server fails when TLS cannot be used" -msgstr "" - msgid "Connections" msgstr "PoÅ‚Ä…czenia" +msgid "" +"Could not regain access to the device after applying the configuration " +"changes. You might need to reconnect if you modified network related " +"settings such as the IP address or wireless security credentials." +msgstr "" + msgid "Country" msgstr "Kraj" @@ -836,9 +848,6 @@ msgstr "Brama domyÅ›lna" msgid "Default is stateless + stateful" msgstr "" -msgid "Default route" -msgstr "" - msgid "Default state" msgstr "Stan domyÅ›lny" @@ -881,6 +890,9 @@ msgstr "UrzÄ…dzenie jest uruchamiane ponownie ..." msgid "Device unreachable" msgstr "UrzÄ…dzenie nieosiÄ…galne" +msgid "Device unreachable!" +msgstr "" + msgid "Diagnostics" msgstr "Diagnostyka" @@ -915,6 +927,9 @@ msgstr "WyÅ‚Ä…czone (domyÅ›lnie)" msgid "Discard upstream RFC1918 responses" msgstr "Odrzuć wychodzÄ…ce odpowiedzi RFC1918" +msgid "Dismiss" +msgstr "" + msgid "Displaying only packages containing" msgstr "PokazujÄ™ tylko paczki zawierajÄ…ce" @@ -1037,7 +1052,9 @@ msgstr "WÅ‚Ä…cz" msgid "" "Enable <abbr title=\"Internet Group Management Protocol\">IGMP</abbr> " "snooping" -msgstr "WÅ‚Ä…cz nasÅ‚uchiwanie <abbr title=\"Internet Group Management Protocol\">IGMP</abbr>" +msgstr "" +"WÅ‚Ä…cz nasÅ‚uchiwanie <abbr title=\"Internet Group Management Protocol\">IGMP</" +"abbr>" msgid "Enable <abbr title=\"Spanning Tree Protocol\">STP</abbr>" msgstr "WÅ‚Ä…cz <abbr title=\"Spanning Tree Protocol\">STP</abbr>" @@ -1102,8 +1119,9 @@ msgstr "WÅ‚Ä…cz nasÅ‚uchiwanie IGMP na tym moÅ›cie" msgid "" "Enables fast roaming among access points that belong to the same Mobility " "Domain" -msgstr "Aktywuje szybki roaming pomiÄ™dzy punktami dostÄ™powymi, które należą " -"do tej samej domeny" +msgstr "" +"Aktywuje szybki roaming pomiÄ™dzy punktami dostÄ™powymi, które należą do tej " +"samej domeny" msgid "Enables the Spanning Tree Protocol on this bridge" msgstr "" @@ -1182,6 +1200,9 @@ msgstr "" msgid "FT protocol" msgstr "" +msgid "Failed to confirm apply within %ds, waiting for rollback…" +msgstr "" + msgid "File" msgstr "Plik" @@ -1378,9 +1399,6 @@ msgstr "RozÅ‚Ä…cz" msgid "Header Error Code Errors (HEC)" msgstr "" -msgid "Heartbeat" -msgstr "" - msgid "" "Here you can configure the basic aspects of your device like its hostname or " "the timezone." @@ -1443,8 +1461,8 @@ msgstr "IPv4" msgid "IPv4 Firewall" msgstr "Firewall IPv4" -msgid "IPv4 WAN Status" -msgstr "Status IPv4 WAN" +msgid "IPv4 Upstream" +msgstr "" msgid "IPv4 address" msgstr "Adres IPv4" @@ -1494,15 +1512,12 @@ msgstr "" msgid "IPv6 ULA-Prefix" msgstr "" -msgid "IPv6 WAN Status" -msgstr "Status WAN IPv6" +msgid "IPv6 Upstream" +msgstr "" msgid "IPv6 address" msgstr "Adres IPv6" -msgid "IPv6 address delegated to the local tunnel endpoint (optional)" -msgstr "" - msgid "IPv6 assignment hint" msgstr "" @@ -1623,7 +1638,8 @@ msgid "Install" msgstr "Instaluj" msgid "Install iputils-traceroute6 for IPv6 traceroute" -msgstr "Zainstaluj iputils-traceroute6 w celu skorzystania z traceroute dla iPv6" +msgstr "" +"Zainstaluj iputils-traceroute6 w celu skorzystania z traceroute dla iPv6" msgid "Install package %q" msgstr "Instaluj pakiet %q" @@ -1958,8 +1974,8 @@ msgid "" "Make sure to clone the root filesystem using something like the commands " "below:" msgstr "" -"Upewnij siÄ™, że klonujesz główny system plików, używajÄ…c czegoÅ› podobnego " -"do poleceÅ„ poniżej:" +"Upewnij siÄ™, że klonujesz główny system plików, używajÄ…c czegoÅ› podobnego do " +"poleceÅ„ poniżej:" msgid "Manual" msgstr "" @@ -2096,9 +2112,6 @@ msgstr "" msgid "NTP server candidates" msgstr "Lista serwerów NTP" -msgid "NTP sync time-out" -msgstr "" - msgid "Name" msgstr "Nazwa" @@ -2222,6 +2235,9 @@ msgstr "" msgid "Obfuscated Password" msgstr "" +msgid "Obtain IPv6-Address" +msgstr "" + msgid "Off-State Delay" msgstr "ZwÅ‚oka wyÅ‚Ä…czenia" @@ -2272,12 +2288,6 @@ msgstr "UsuniÄ™to wartość" msgid "Optional" msgstr "Opcjonalny" -msgid "Optional, specify to override default server (tic.sixxs.net)" -msgstr "" - -msgid "Optional, use when the SIXXS account has more than one tunnel" -msgstr "" - msgid "" "Optional. 32-bit mark for outgoing encrypted packets. Enter value in hex, " "starting with <code>0x</code>." @@ -2755,9 +2765,6 @@ msgstr "Zażądaj adresu IPv6" msgid "Request IPv6-prefix of length" msgstr "" -msgid "Require TLS" -msgstr "Wymagaj TLS" - msgid "Required" msgstr "Wymagany" @@ -2816,6 +2823,15 @@ msgstr "OdsÅ‚oÅ„/Ukryj hasÅ‚o" msgid "Revert" msgstr "Przywróć" +msgid "Revert changes" +msgstr "" + +msgid "Revert request failed with status <code>%h</code>" +msgstr "" + +msgid "Reverting configuration…" +msgstr "" + msgid "Root" msgstr "Root" @@ -2831,9 +2847,6 @@ msgstr "" msgid "Route type" msgstr "" -msgid "Routed IPv6 prefix for downstream interfaces" -msgstr "" - msgid "Router Advertisement-Service" msgstr "" @@ -2860,14 +2873,6 @@ msgstr "Sprawdź czy system plików nie zawiera bÅ‚Ä™dów" msgid "SHA256" msgstr "" -msgid "" -"SIXXS supports TIC only, for static tunnels using IP protocol 41 (RFC4213) " -"use 6in4 instead" -msgstr "" - -msgid "SIXXS-handle[/Tunnel-ID]" -msgstr "" - msgid "SNR" msgstr "SNR" @@ -2895,9 +2900,6 @@ msgstr "Zapisz" msgid "Save & Apply" msgstr "Zapisz i zastosuj" -msgid "Save & Apply" -msgstr "Zapisz i zastosuj" - msgid "Scan" msgstr "Skanuj" @@ -2927,17 +2929,6 @@ msgstr "Rozdziel klientów" msgid "Server Settings" msgstr "Ustawienia serwera" -msgid "Server password" -msgstr "" - -msgid "" -"Server password, enter the specific password of the tunnel when the username " -"contains the tunnel ID" -msgstr "" - -msgid "Server username" -msgstr "" - msgid "Service Name" msgstr "Nazwa serwisu" @@ -2951,8 +2942,8 @@ msgid "" "Set interface properties regardless of the link carrier (If set, carrier " "sense events do not invoke hotplug handlers)." msgstr "" -"Ustaw wÅ‚aÅ›ciwoÅ›ci interfejsu, niezależnie od operatora Å‚Ä…cza (nie wpÅ‚ywa" -" na programy operatora które ustanawiajÄ… poÅ‚Ä…czenie)." +"Ustaw wÅ‚aÅ›ciwoÅ›ci interfejsu, niezależnie od operatora Å‚Ä…cza (nie wpÅ‚ywa na " +"programy operatora które ustanawiajÄ… poÅ‚Ä…czenie)." #, fuzzy msgid "Set up Time Synchronization" @@ -3036,9 +3027,6 @@ msgstr "Posortuj" msgid "Source" msgstr "ŹródÅ‚o" -msgid "Source routing" -msgstr "" - msgid "Specifies the directory the device is attached to" msgstr "Podaje katalog do którego jest podÅ‚Ä…czone urzÄ…dzenie" @@ -3080,6 +3068,9 @@ msgstr "Uruchomienie" msgid "Start priority" msgstr "Priorytet uruchomienia" +msgid "Starting configuration apply…" +msgstr "" + msgid "Startup" msgstr "Autostart" @@ -3247,6 +3238,16 @@ msgid "The configuration file could not be loaded due to the following error:" msgstr "" msgid "" +"The device could not be reached within %d seconds after applying the pending " +"changes, which caused the configuration to be rolled back for safety " +"reasons. If you believe that the configuration changes are correct " +"nonetheless, perform an unchecked configuration apply. Alternatively, you " +"can dismiss this warning and edit changes before attempting to apply again, " +"or revert all pending changes to keep the currently working configuration " +"state." +msgstr "" + +msgid "" "The device file of the memory or partition (<abbr title=\"for example\">e.g." "</abbr> <code>/dev/sda1</code>)" msgstr "" @@ -3273,9 +3274,6 @@ msgstr "" "upewnić siÄ™, że zostaÅ‚ przesÅ‚any poprawnie.<br /> WciÅ›nij \"Wykonaj\" aby " "kontynuować aktualizacjÄ™." -msgid "The following changes have been committed" -msgstr "NastÄ™pujÄ…ce zmiany zostaÅ‚y zatwierdzone" - msgid "The following changes have been reverted" msgstr "NastÄ™pujÄ…ce zmiany zostaÅ‚y odrzucone" @@ -3346,11 +3344,6 @@ msgstr "" "siÄ™ do urzÄ…dzenia." msgid "" -"The tunnel end-point is behind NAT, defaults to disabled and only applies to " -"AYIYA" -msgstr "" - -msgid "" "The uploaded image file does not contain a supported format. Make sure that " "you choose the generic image format for your platform." msgstr "" @@ -3360,8 +3353,8 @@ msgstr "" msgid "There are no active leases." msgstr "Brak aktywnych dzierżaw." -msgid "There are no pending changes to apply!" -msgstr "Brak oczekujÄ…cych zmian do zastosowania!" +msgid "There are no changes to apply." +msgstr "" msgid "There are no pending changes to revert!" msgstr "Brak oczekujÄ…cych zmian do przywrócenia!" @@ -3471,8 +3464,8 @@ msgid "" "To restore configuration files, you can upload a previously generated backup " "archive here." msgstr "" -"Aby przywrócić pliki konfiguracyjne, możesz tutaj przesÅ‚ać wczeÅ›niej utworzonÄ… " -"kopiÄ™ zapasowÄ…." +"Aby przywrócić pliki konfiguracyjne, możesz tutaj przesÅ‚ać wczeÅ›niej " +"utworzonÄ… kopiÄ™ zapasowÄ…." msgid "Tone" msgstr "" @@ -3516,15 +3509,6 @@ msgstr "Interfejs tunelu" msgid "Tunnel Link" msgstr "" -msgid "Tunnel broker protocol" -msgstr "" - -msgid "Tunnel setup server" -msgstr "" - -msgid "Tunnel type" -msgstr "Typ tunelu" - msgid "Tx-Power" msgstr "Moc nadawania" @@ -3582,8 +3566,9 @@ msgid "" "compatible firmware image)." msgstr "" "PrzeÅ›lij tutaj obraz zgodny z funkcjÄ… sysupgrade, aby zastÄ…pić aktualnie " -"dziaÅ‚ajÄ…ce opragramowanie. Zaznacz opcjÄ™ \"Zachowaj ustawienia\", aby zachować " -"bieżącÄ… konfiguracjÄ™ (wymagany obraz zgodny z bieżącym opragramowaniem)." +"dziaÅ‚ajÄ…ce opragramowanie. Zaznacz opcjÄ™ \"Zachowaj ustawienia\", aby " +"zachować bieżącÄ… konfiguracjÄ™ (wymagany obraz zgodny z bieżącym " +"opragramowaniem)." msgid "Upload archive..." msgstr "ZaÅ‚aduj archiwum..." @@ -3705,12 +3690,6 @@ msgstr "Producent" msgid "Vendor Class to send when requesting DHCP" msgstr "Klasa producenta do wysÅ‚ania podczas żądania DHCP" -msgid "Verbose" -msgstr "" - -msgid "Verbose logging by aiccu daemon" -msgstr "" - msgid "Verify" msgstr "Zweryfikuj" @@ -3739,12 +3718,8 @@ msgid "" "WPA-Encryption requires wpa_supplicant (for client mode) or hostapd (for AP " "and ad-hoc mode) to be installed." msgstr "" -"Kodowanie WPA wymaga zainstalowanych modułów wpa_supplicant (tryb " -"klienta) lub hostapd (tryb AP lub ad-hoc)" - -msgid "" -"Wait for NTP sync that many seconds, seting to 0 disables waiting (optional)" -msgstr "" +"Kodowanie WPA wymaga zainstalowanych modułów wpa_supplicant (tryb klienta) " +"lub hostapd (tryb AP lub ad-hoc)" msgid "Waiting for changes to be applied..." msgstr "Trwa wprowadzenie zmian..." @@ -3752,6 +3727,9 @@ msgstr "Trwa wprowadzenie zmian..." msgid "Waiting for command to complete..." msgstr "Trwa wykonanie polecenia..." +msgid "Waiting for configuration to get applied… %ds" +msgstr "" + msgid "Waiting for device..." msgstr "Oczekiwanie na urzÄ…dzenie..." @@ -3759,20 +3737,15 @@ msgid "Warning" msgstr "Ostrzeżenie" msgid "Warning: There are unsaved changes that will get lost on reboot!" -msgstr "Ostrzeżenie: IstniejÄ… niezapisane zmiany, które zostanÄ… utracone " -"po ponownym uruchomieniu urzÄ…dzenia!" +msgstr "" +"Ostrzeżenie: IstniejÄ… niezapisane zmiany, które zostanÄ… utracone po ponownym " +"uruchomieniu urzÄ…dzenia!" msgid "" "When using a PSK, the PMK can be generated locally without inter AP " "communications" msgstr "" -msgid "Whether to create an IPv6 default route over the tunnel" -msgstr "" - -msgid "Whether to route only packets from delegated prefixes" -msgstr "" - msgid "Width" msgstr "Szerokość" @@ -3839,9 +3812,9 @@ msgid "" "upgrade it to at least version 7 or use another browser like Firefox, Opera " "or Safari." msgstr "" -"Twój Internet Explorer jest za stary, aby poprawnie wyÅ›wietlić tÄ™ stronÄ™" +"Twój Internet Explorer jest za stary, aby poprawnie wyÅ›wietlić tÄ™ stronÄ™ " "zaktualizuj go do wersji co najmniej 7 lub użyj innej przeglÄ…darki, takiej " -"jak Firefox, Opera czy Safari". +"jak Firefox, Opera czy Safari." msgid "any" msgstr "dowolny" @@ -3919,9 +3892,6 @@ msgstr "kbit/s" msgid "local <abbr title=\"Domain Name System\">DNS</abbr> file" msgstr "lokalny plik <abbr title=\"Domain Name System\">DNS</abbr>" -msgid "minimum 1280, maximum 1480" -msgstr "minimum 1280, maksimum 1480" - msgid "minutes" msgstr "minuty" @@ -3998,101 +3968,8 @@ msgstr "tak" msgid "« Back" msgstr "« Wróć" -#~ msgid "Action" -#~ msgstr "Akcja" - -#~ msgid "Buttons" -#~ msgstr "Przyciski" - -#~ msgid "Handler" -#~ msgstr "Uchwyt" - -#~ msgid "Maximum hold time" -#~ msgstr "Maksymalny czas podtrzymania" - -#~ msgid "Minimum hold time" -#~ msgstr "Minimalny czas podtrzymania" - -#~ msgid "Path to executable which handles the button event" -#~ msgstr "" -#~ "Åšcieżka do pliku wykonywalnego, który obsÅ‚uguje zdarzenie dla danego " -#~ "przycisku" - -#~ msgid "Specifies the button state to handle" -#~ msgstr "OkreÅ›la zachowanie w zależnoÅ›ci od stanu przycisku" - -#~ msgid "This page allows the configuration of custom button actions" -#~ msgstr "" -#~ "Poniższa strona umożliwia konfiguracjÄ™ dziaÅ‚ania niestandardowych " -#~ "przycisków" - -#~ msgid "Leasetime" -#~ msgstr "Czas dzierżawy" - -# Wydaje mi siÄ™ że brakuje litery R... -#~ msgid "AR Support" -#~ msgstr "Wsparcie dla ARP" - -#~ msgid "Atheros 802.11%s Wireless Controller" -#~ msgstr "Bezprzewodowy kontroler Atheros 802.11%s" - -#~ msgid "Background Scan" -#~ msgstr "Skanowanie w tle" - -#~ msgid "Compression" -#~ msgstr "Kompresja" - -#~ msgid "Disable HW-Beacon timer" -#~ msgstr "WyÅ‚Ä…cz zegar HW-Beacon" - -#~ msgid "Do not send probe responses" -#~ msgstr "Nie wysyÅ‚aj ramek probe response" - -#~ msgid "Fast Frames" -#~ msgstr "Szybkie ramki (Fast Frames)" - -#~ msgid "Maximum Rate" -#~ msgstr "Maksymalna Szybkość" - -#~ msgid "Minimum Rate" -#~ msgstr "Minimalna Szybkość" - -#~ msgid "Multicast Rate" -#~ msgstr "Szybkość Multicast`u" - -#~ msgid "Outdoor Channels" -#~ msgstr "KanaÅ‚y zewnÄ™trzne" - -#~ msgid "Regulatory Domain" -#~ msgstr "Domena regulacji" - -#~ msgid "Separate WDS" -#~ msgstr "Rozdziel WDS" - -#~ msgid "Static WDS" -#~ msgstr "Statyczny WDS" - -#~ msgid "Turbo Mode" -#~ msgstr "Tryb Turbo" - -#~ msgid "XR Support" -#~ msgstr "Wsparcie XR" - -#~ msgid "An additional network will be created if you leave this unchecked." -#~ msgstr "" -#~ "Zostanie utworzona dodatkowa sieć jeÅ›li zostawisz tÄ… opcjÄ™ niezaznaczonÄ…." - -#~ msgid "Join Network: Settings" -#~ msgstr "PrzyÅ‚Ä…cz do sieci: Ustawienia" - -#~ msgid "CPU" -#~ msgstr "CPU" - -#~ msgid "Port %d" -#~ msgstr "Port %d" - -#~ msgid "Port %d is untagged in multiple VLANs!" -#~ msgstr "Port %d jest nietagowany w wielu VLAN`ach!" +#~ msgid "IPv4 WAN Status" +#~ msgstr "Status IPv4 WAN" -#~ msgid "VLAN Interface" -#~ msgstr "Interfejs VLAN" +#~ msgid "IPv6 WAN Status" +#~ msgstr "Status WAN IPv6" diff --git a/modules/luci-base/po/pt-br/base.po b/modules/luci-base/po/pt-br/base.po index bbfb8cf8d..eeb7208c0 100644 --- a/modules/luci-base/po/pt-br/base.po +++ b/modules/luci-base/po/pt-br/base.po @@ -185,11 +185,6 @@ msgstr "" "<abbr title=\"Assymetrical Digital Subscriber Line/Linha Digital Assimétrica " "para Assinante\">ADSL</abbr>" -msgid "AICCU (SIXXS)" -msgstr "" -"<abbr title=\"Automatic IPv6 Connectivity Client Utility/Utilitário Cliente " -"de Conectividade IPv6 Automática\">AICCU (SIXXS)</abbr>" - msgid "ANSI T1.413" msgstr "ANSI T1.413" @@ -232,9 +227,6 @@ msgstr "Número do dispositivo ATM" msgid "ATU-C System Vendor ID" msgstr "Identificador de" -msgid "AYIYA" -msgstr "AYIYA" - msgid "Access Concentrator" msgstr "Concentrador de Acesso" @@ -348,13 +340,6 @@ msgstr "" msgid "Allowed IPs" msgstr "Endereços IP autorizados" -msgid "" -"Also see <a href=\"https://www.sixxs.net/faq/connectivity/?faq=comparison" -"\">Tunneling Comparison</a> on SIXXS" -msgstr "" -"Veja também a <a href=\"https://www.sixxs.net/faq/connectivity/?" -"faq=comparison\">Comparação de Tunelamentos</a> em SIXXS" - msgid "Always announce default router" msgstr "Sempre anuncie o roteador padrão" @@ -440,6 +425,9 @@ msgstr "" msgid "Apply unchecked" msgstr "" +msgid "Architecture" +msgstr "" + msgid "" "Assign a part of given length of every public IPv6-prefix to this interface" msgstr "" @@ -458,6 +446,9 @@ msgstr "" msgid "Associated Stations" msgstr "Estações associadas" +msgid "Associations" +msgstr "" + msgid "Auth Group" msgstr "Grupo de Autenticação" @@ -552,9 +543,6 @@ msgstr "Endereço especificado está incorreto!" msgid "Band" msgstr "Banda" -msgid "Behind NAT" -msgstr "Atrás da NAT" - msgid "" "Below is the determined list of files to backup. It consists of changed " "configuration files marked by opkg, essential base files and the user " @@ -748,9 +736,6 @@ msgstr "Conectado" msgid "Connection Limit" msgstr "Limite de conexão" -msgid "Connection to server fails when TLS cannot be used" -msgstr "A conexão para este servidor falhará quando o TLS não puder ser usado" - msgid "Connections" msgstr "Conexões" @@ -890,9 +875,6 @@ msgstr "Roteador Padrão" msgid "Default is stateless + stateful" msgstr "O padrão é sem estado + com estado" -msgid "Default route" -msgstr "Rota padrão" - msgid "Default state" msgstr "Estado padrão" @@ -1452,9 +1434,6 @@ msgstr "" "Erros de Código de Erro de Cabeçalho (<abbr title=\"Header Error Code\">HEC</" "abbr>)" -msgid "Heartbeat" -msgstr "Pulso de vida" - msgid "" "Here you can configure the basic aspects of your device like its hostname or " "the timezone." @@ -1520,8 +1499,8 @@ msgstr "IPv4" msgid "IPv4 Firewall" msgstr "Firewall para IPv4" -msgid "IPv4 WAN Status" -msgstr "Estado IPv4 da WAN" +msgid "IPv4 Upstream" +msgstr "" msgid "IPv4 address" msgstr "Endereço IPv4" @@ -1573,15 +1552,12 @@ msgstr "" "Prefixo <abbr title=\"Unique Local Address/Endereço Local Único\">ULA</abbr> " "IPv6" -msgid "IPv6 WAN Status" -msgstr "Estado IPv6 da WAN" +msgid "IPv6 Upstream" +msgstr "" msgid "IPv6 address" msgstr "Endereço IPv6" -msgid "IPv6 address delegated to the local tunnel endpoint (optional)" -msgstr "Endereços IPv6 delegados para o ponta local do túnel (opcional)" - msgid "IPv6 assignment hint" msgstr "Sugestão de atribuição IPv6" @@ -2205,9 +2181,6 @@ msgstr "DomÃnio NT" msgid "NTP server candidates" msgstr "Candidatos a servidor NTP" -msgid "NTP sync time-out" -msgstr "Tempo limite da sincronia do NTP" - msgid "Name" msgstr "Nome" @@ -2388,13 +2361,6 @@ msgstr "Opção removida" msgid "Optional" msgstr "Opcional" -msgid "Optional, specify to override default server (tic.sixxs.net)" -msgstr "" -"Opcional, especifique para sobrescrever o servidor padrão (tic.sixxs.net)" - -msgid "Optional, use when the SIXXS account has more than one tunnel" -msgstr "Opcional, para usar quando a conta SIXXS tem mais de um túnel" - msgid "" "Optional. 32-bit mark for outgoing encrypted packets. Enter value in hex, " "starting with <code>0x</code>." @@ -2885,9 +2851,6 @@ msgstr "Solicita endereço IPv6" msgid "Request IPv6-prefix of length" msgstr "Solicita prefixo IPv6 de tamanho" -msgid "Require TLS" -msgstr "Requer TLS" - msgid "Required" msgstr "Necessário" @@ -2976,9 +2939,6 @@ msgstr "Roteie Andereços IP Autorizados" msgid "Route type" msgstr "Tipo de rota" -msgid "Routed IPv6 prefix for downstream interfaces" -msgstr "Prefixo roteável IPv6 para interfaces internas" - msgid "Router Advertisement-Service" msgstr "Serviço de Anúncio de Roteador" @@ -3005,16 +2965,6 @@ msgstr "Execute a verificação do sistema de arquivos " msgid "SHA256" msgstr "SHA256" -msgid "" -"SIXXS supports TIC only, for static tunnels using IP protocol 41 (RFC4213) " -"use 6in4 instead" -msgstr "" -"O SIXXS suporta somente TIC. Use o 6in4 para túneis estáticos usando o " -"protocolo IP 41 (RFC4213)" - -msgid "SIXXS-handle[/Tunnel-ID]" -msgstr "Identificador do SIXXS[/Identificador do Túnel]" - msgid "SNR" msgstr "SNR" @@ -3070,19 +3020,6 @@ msgstr "Isolar Clientes" msgid "Server Settings" msgstr "Configurações do Servidor" -msgid "Server password" -msgstr "Senha do servidor" - -msgid "" -"Server password, enter the specific password of the tunnel when the username " -"contains the tunnel ID" -msgstr "" -"Senha do servidor. Informe a senha para este túnel quando o nome do usuário " -"contiver o identificador do túnel" - -msgid "Server username" -msgstr "Usuário do servidor" - msgid "Service Name" msgstr "Nome do Serviço" @@ -3180,9 +3117,6 @@ msgstr "Ordenar" msgid "Source" msgstr "Origem" -msgid "Source routing" -msgstr "Roteamento pela origem" - msgid "Specifies the directory the device is attached to" msgstr "Especifica o diretório que o dispositivo está conectado" @@ -3506,13 +3440,6 @@ msgstr "" "computador para poder conectar novamente ao roteador." msgid "" -"The tunnel end-point is behind NAT, defaults to disabled and only applies to " -"AYIYA" -msgstr "" -"O final do túnel está atrás de um NAT. Por padrão será desabilitado e " -"somente se aplica a AYIYA" - -msgid "" "The uploaded image file does not contain a supported format. Make sure that " "you choose the generic image format for your platform." msgstr "" @@ -3683,15 +3610,6 @@ msgstr "Interface de Tunelamento" msgid "Tunnel Link" msgstr "Enlace do túnel" -msgid "Tunnel broker protocol" -msgstr "Protocolo do agente do túnel" - -msgid "Tunnel setup server" -msgstr "Servidor de configuração do túnel" - -msgid "Tunnel type" -msgstr "Tipo de túnel" - msgid "Tx-Power" msgstr "Potência de transmissão" @@ -3878,12 +3796,6 @@ msgstr "Fabricante" msgid "Vendor Class to send when requesting DHCP" msgstr "Classe do fabricante para enviar quando requisitar o DHCP" -msgid "Verbose" -msgstr "Detalhado" - -msgid "Verbose logging by aiccu daemon" -msgstr "Habilite registros detalhados do serviço AICCU" - msgid "Verify" msgstr "Verificar" @@ -3915,12 +3827,6 @@ msgstr "" "A cifragem WPA requer a instalação do wpa_supplicant (para modo cliente) ou " "do hostapd (para modo AP ou ad-hoc)." -msgid "" -"Wait for NTP sync that many seconds, seting to 0 disables waiting (optional)" -msgstr "" -"Espere esta quantidade de segundos pela sincronia do NTP. Definindo como 0 " -"desabilita a espera (opcional)" - msgid "Waiting for changes to be applied..." msgstr "Esperando a aplicação das mudanças..." @@ -3944,12 +3850,6 @@ msgid "" "communications" msgstr "" -msgid "Whether to create an IPv6 default route over the tunnel" -msgstr "Se deve criar uma rota padrão IPv6 sobre o túnel" - -msgid "Whether to route only packets from delegated prefixes" -msgstr "Se deve rotear somente pacotes de prefixos delegados" - msgid "Width" msgstr "Largura" @@ -4098,9 +3998,6 @@ msgid "local <abbr title=\"Domain Name System\">DNS</abbr> file" msgstr "" "Arquivo local de <abbr title=\"Sistema de Nomes de DomÃnios\">DNS</abbr>" -msgid "minimum 1280, maximum 1480" -msgstr "mÃnimo 1280, máximo 1480" - msgid "minutes" msgstr "minutos" @@ -4177,134 +4074,8 @@ msgstr "sim" msgid "« Back" msgstr "« Voltar" -#~ msgid "Apply" -#~ msgstr "Aplicar" - -#~ msgid "Applying changes" -#~ msgstr "Aplicar as alterações" - -#~ msgid "Configuration applied." -#~ msgstr "Configuração aplicada." - -#~ msgid "Save & Apply" -#~ msgstr "Save & Aplicar" - -#~ msgid "The following changes have been committed" -#~ msgstr "As seguintes mudanças foram aplicadas" - -#~ msgid "There are no pending changes to apply!" -#~ msgstr "Não existem modificações pendentes para aplicar!" - -#~ msgid "Action" -#~ msgstr "Ação" - -#~ msgid "Buttons" -#~ msgstr "Botões" - -# Não sei que contexto isto está sendo usado -#~ msgid "Handler" -#~ msgstr "Responsável" - -# Desconheço o uso -#~ msgid "Maximum hold time" -#~ msgstr "Tempo máximo de espera" - -#~ msgid "Minimum hold time" -#~ msgstr "Tempo mÃnimo de espera" - -#~ msgid "Path to executable which handles the button event" -#~ msgstr "Caminho para o executável que trata o evento do botão" - -#~ msgid "Specifies the button state to handle" -#~ msgstr "Especifica o estado do botão para ser tratado" - -#~ msgid "This page allows the configuration of custom button actions" -#~ msgstr "" -#~ "Esta página permite a configuração de ações personalizadas para os botões" - -#~ msgid "Leasetime" -#~ msgstr "Tempo de atribuição do DHCP" - -#~ msgid "Optional." -#~ msgstr "Opcional." - -#~ msgid "navigation Navigation" -#~ msgstr "navegação Navegação" - -#~ msgid "skiplink1 Skip to navigation" -#~ msgstr "skiplink1 Pular para a navegação" - -#~ msgid "skiplink2 Skip to content" -#~ msgstr "skiplink2 Pular para o conteúdo" - -#~ msgid "AuthGroup" -#~ msgstr "Grupo de Autenticação" - -#~ msgid "automatic" -#~ msgstr "automático" - -#~ msgid "AR Support" -#~ msgstr "Suporte AR" - -#~ msgid "Atheros 802.11%s Wireless Controller" -#~ msgstr "Controlador Wireless Atheros 802.11%s" - -#~ msgid "Background Scan" -#~ msgstr "Busca em Segundo Plano" - -#~ msgid "Compression" -#~ msgstr "Compressão" - -#~ msgid "Disable HW-Beacon timer" -#~ msgstr "Desativar temporizador de Beacon de Hardware" - -#~ msgid "Do not send probe responses" -#~ msgstr "Não enviar respostas de exames" - -#~ msgid "Fast Frames" -#~ msgstr "Quadros Rápidos" - -#~ msgid "Maximum Rate" -#~ msgstr "Taxa Máxima" - -#~ msgid "Minimum Rate" -#~ msgstr "Taxa MÃnima" - -#~ msgid "Multicast Rate" -#~ msgstr "Taxa de Multicast" - -#~ msgid "Outdoor Channels" -#~ msgstr "Canais para externo" - -#~ msgid "Regulatory Domain" -#~ msgstr "DomÃnio Regulatório" - -#~ msgid "Separate WDS" -#~ msgstr "Separar WDS" - -#~ msgid "Static WDS" -#~ msgstr "WDS Estático" - -#~ msgid "Turbo Mode" -#~ msgstr "Modo Turbo" - -#~ msgid "XR Support" -#~ msgstr "Suporte a XR" - -#~ msgid "An additional network will be created if you leave this unchecked." -#~ msgstr "Uma rede adicional será criada se você deixar isto desmarcado." - -#~ msgid "Join Network: Settings" -#~ msgstr "Conectar à Rede: Configurações" - -#~ msgid "CPU" -#~ msgstr "CPU" - -#~ msgid "Port %d" -#~ msgstr "Porta %d" - -#~ msgid "Port %d is untagged in multiple VLANs!" -#~ msgstr "Porta %d está sem etiqueta para mútliplas VLANs!" +#~ msgid "IPv4 WAN Status" +#~ msgstr "Estado IPv4 da WAN" -#~ msgid "VLAN Interface" -#~ msgstr "Interface VLAN" +#~ msgid "IPv6 WAN Status" +#~ msgstr "Estado IPv6 da WAN" diff --git a/modules/luci-base/po/pt/base.po b/modules/luci-base/po/pt/base.po index 7e191809b..96efbe272 100644 --- a/modules/luci-base/po/pt/base.po +++ b/modules/luci-base/po/pt/base.po @@ -177,9 +177,6 @@ msgstr "" msgid "ADSL" msgstr "" -msgid "AICCU (SIXXS)" -msgstr "" - msgid "ANSI T1.413" msgstr "" @@ -216,9 +213,6 @@ msgstr "Número de Dispositivo ATM" msgid "ATU-C System Vendor ID" msgstr "" -msgid "AYIYA" -msgstr "" - msgid "Access Concentrator" msgstr "Concentrador de Acesso" @@ -328,11 +322,6 @@ msgstr "" msgid "Allowed IPs" msgstr "" -msgid "" -"Also see <a href=\"https://www.sixxs.net/faq/connectivity/?faq=comparison" -"\">Tunneling Comparison</a> on SIXXS" -msgstr "" - msgid "Always announce default router" msgstr "" @@ -417,6 +406,9 @@ msgstr "" msgid "Apply unchecked" msgstr "" +msgid "Architecture" +msgstr "" + msgid "" "Assign a part of given length of every public IPv6-prefix to this interface" msgstr "" @@ -431,6 +423,9 @@ msgstr "" msgid "Associated Stations" msgstr "Estações Associadas" +msgid "Associations" +msgstr "" + msgid "Auth Group" msgstr "" @@ -521,9 +516,6 @@ msgstr "Endereço mal especificado!" msgid "Band" msgstr "" -msgid "Behind NAT" -msgstr "" - msgid "" "Below is the determined list of files to backup. It consists of changed " "configuration files marked by opkg, essential base files and the user " @@ -710,9 +702,6 @@ msgstr "Ligado" msgid "Connection Limit" msgstr "Limite de Ligações" -msgid "Connection to server fails when TLS cannot be used" -msgstr "" - msgid "Connections" msgstr "Ligações" @@ -850,9 +839,6 @@ msgstr "Gateway predefinido" msgid "Default is stateless + stateful" msgstr "" -msgid "Default route" -msgstr "" - msgid "Default state" msgstr "Estado predefinido" @@ -1395,9 +1381,6 @@ msgstr "Suspender" msgid "Header Error Code Errors (HEC)" msgstr "" -msgid "Heartbeat" -msgstr "" - msgid "" "Here you can configure the basic aspects of your device like its hostname or " "the timezone." @@ -1460,8 +1443,8 @@ msgstr "IPv4" msgid "IPv4 Firewall" msgstr "Firewall IPv4" -msgid "IPv4 WAN Status" -msgstr "Estado WAN IPv4" +msgid "IPv4 Upstream" +msgstr "" msgid "IPv4 address" msgstr "Endereço IPv4" @@ -1511,15 +1494,12 @@ msgstr "" msgid "IPv6 ULA-Prefix" msgstr "" -msgid "IPv6 WAN Status" -msgstr "Estado WAN IPv6" +msgid "IPv6 Upstream" +msgstr "" msgid "IPv6 address" msgstr "Endereço IPv6" -msgid "IPv6 address delegated to the local tunnel endpoint (optional)" -msgstr "" - msgid "IPv6 assignment hint" msgstr "" @@ -2105,9 +2085,6 @@ msgstr "" msgid "NTP server candidates" msgstr "Candidatos a servidor NTP" -msgid "NTP sync time-out" -msgstr "" - msgid "Name" msgstr "Nome" @@ -2285,12 +2262,6 @@ msgstr "Opção removida" msgid "Optional" msgstr "" -msgid "Optional, specify to override default server (tic.sixxs.net)" -msgstr "" - -msgid "Optional, use when the SIXXS account has more than one tunnel" -msgstr "" - msgid "" "Optional. 32-bit mark for outgoing encrypted packets. Enter value in hex, " "starting with <code>0x</code>." @@ -2762,9 +2733,6 @@ msgstr "" msgid "Request IPv6-prefix of length" msgstr "" -msgid "Require TLS" -msgstr "" - msgid "Required" msgstr "" @@ -2847,9 +2815,6 @@ msgstr "" msgid "Route type" msgstr "" -msgid "Routed IPv6 prefix for downstream interfaces" -msgstr "" - msgid "Router Advertisement-Service" msgstr "" @@ -2876,14 +2841,6 @@ msgstr "Correr uma verificação do sistema de ficheiros" msgid "SHA256" msgstr "" -msgid "" -"SIXXS supports TIC only, for static tunnels using IP protocol 41 (RFC4213) " -"use 6in4 instead" -msgstr "" - -msgid "SIXXS-handle[/Tunnel-ID]" -msgstr "" - msgid "SNR" msgstr "" @@ -2937,17 +2894,6 @@ msgstr "Isolar Clientes" msgid "Server Settings" msgstr "" -msgid "Server password" -msgstr "" - -msgid "" -"Server password, enter the specific password of the tunnel when the username " -"contains the tunnel ID" -msgstr "" - -msgid "Server username" -msgstr "" - msgid "Service Name" msgstr "Nome do Serviço" @@ -3041,9 +2987,6 @@ msgstr "Ordenar" msgid "Source" msgstr "Origem" -msgid "Source routing" -msgstr "" - msgid "Specifies the directory the device is attached to" msgstr "" @@ -3345,11 +3288,6 @@ msgstr "" "para poder ligar novamente ao router." msgid "" -"The tunnel end-point is behind NAT, defaults to disabled and only applies to " -"AYIYA" -msgstr "" - -msgid "" "The uploaded image file does not contain a supported format. Make sure that " "you choose the generic image format for your platform." msgstr "" @@ -3505,15 +3443,6 @@ msgstr "Interface de Túnel" msgid "Tunnel Link" msgstr "" -msgid "Tunnel broker protocol" -msgstr "" - -msgid "Tunnel setup server" -msgstr "" - -msgid "Tunnel type" -msgstr "" - msgid "Tx-Power" msgstr "Potência de Tx" @@ -3686,12 +3615,6 @@ msgstr "" msgid "Vendor Class to send when requesting DHCP" msgstr "" -msgid "Verbose" -msgstr "" - -msgid "Verbose logging by aiccu daemon" -msgstr "" - msgid "Verify" msgstr "Verificar" @@ -3723,10 +3646,6 @@ msgstr "" "A encriptação-WPA necessita do wpa_supplicant (para modo cliente) ou do " "hostapd (para modo AP ou ah-hoc) esteja instalado." -msgid "" -"Wait for NTP sync that many seconds, seting to 0 disables waiting (optional)" -msgstr "" - msgid "Waiting for changes to be applied..." msgstr "A aguardar que as mudanças sejam aplicadas..." @@ -3750,12 +3669,6 @@ msgid "" "communications" msgstr "" -msgid "Whether to create an IPv6 default route over the tunnel" -msgstr "" - -msgid "Whether to route only packets from delegated prefixes" -msgstr "" - msgid "Width" msgstr "" @@ -3901,9 +3814,6 @@ msgid "local <abbr title=\"Domain Name System\">DNS</abbr> file" msgstr "" "Ficheiro local de <abbr title=\"Sistema de Nomes de DomÃnios\">DNS</abbr>" -msgid "minimum 1280, maximum 1480" -msgstr "" - msgid "minutes" msgstr "" @@ -3979,6 +3889,12 @@ msgstr "sim" msgid "« Back" msgstr "« Voltar" +#~ msgid "IPv4 WAN Status" +#~ msgstr "Estado WAN IPv4" + +#~ msgid "IPv6 WAN Status" +#~ msgstr "Estado WAN IPv6" + #~ msgid "Apply" #~ msgstr "Aplicar" diff --git a/modules/luci-base/po/ro/base.po b/modules/luci-base/po/ro/base.po index a7d45e6f6..058c3e8db 100644 --- a/modules/luci-base/po/ro/base.po +++ b/modules/luci-base/po/ro/base.po @@ -168,9 +168,6 @@ msgstr "" msgid "ADSL" msgstr "" -msgid "AICCU (SIXXS)" -msgstr "" - msgid "ANSI T1.413" msgstr "" @@ -207,9 +204,6 @@ msgstr "ATM numar echipament" msgid "ATU-C System Vendor ID" msgstr "" -msgid "AYIYA" -msgstr "" - msgid "Access Concentrator" msgstr "Concentrator de Access " @@ -314,11 +308,6 @@ msgstr "" msgid "Allowed IPs" msgstr "" -msgid "" -"Also see <a href=\"https://www.sixxs.net/faq/connectivity/?faq=comparison" -"\">Tunneling Comparison</a> on SIXXS" -msgstr "" - msgid "Always announce default router" msgstr "" @@ -403,6 +392,9 @@ msgstr "" msgid "Apply unchecked" msgstr "" +msgid "Architecture" +msgstr "" + msgid "" "Assign a part of given length of every public IPv6-prefix to this interface" msgstr "" @@ -417,6 +409,9 @@ msgstr "" msgid "Associated Stations" msgstr "Statiile asociate" +msgid "Associations" +msgstr "" + msgid "Auth Group" msgstr "" @@ -507,9 +502,6 @@ msgstr "Adresa specificata gresit !" msgid "Band" msgstr "" -msgid "Behind NAT" -msgstr "" - msgid "" "Below is the determined list of files to backup. It consists of changed " "configuration files marked by opkg, essential base files and the user " @@ -685,9 +677,6 @@ msgstr "Conectat" msgid "Connection Limit" msgstr "Limita de conexiune" -msgid "Connection to server fails when TLS cannot be used" -msgstr "" - msgid "Connections" msgstr "Conexiuni" @@ -823,9 +812,6 @@ msgstr "" msgid "Default is stateless + stateful" msgstr "" -msgid "Default route" -msgstr "" - msgid "Default state" msgstr "Stare implicita" @@ -1347,9 +1333,6 @@ msgstr "" msgid "Header Error Code Errors (HEC)" msgstr "" -msgid "Heartbeat" -msgstr "" - msgid "" "Here you can configure the basic aspects of your device like its hostname or " "the timezone." @@ -1407,8 +1390,8 @@ msgstr "IPv4" msgid "IPv4 Firewall" msgstr "Firewall IPv4" -msgid "IPv4 WAN Status" -msgstr "Statusul IPv4 pe WAN" +msgid "IPv4 Upstream" +msgstr "" msgid "IPv4 address" msgstr "Adresa IPv4" @@ -1458,15 +1441,12 @@ msgstr "" msgid "IPv6 ULA-Prefix" msgstr "" -msgid "IPv6 WAN Status" -msgstr "Statusul IPv6 pe WAN" +msgid "IPv6 Upstream" +msgstr "" msgid "IPv6 address" msgstr "Adresa IPv6" -msgid "IPv6 address delegated to the local tunnel endpoint (optional)" -msgstr "" - msgid "IPv6 assignment hint" msgstr "" @@ -2035,9 +2015,6 @@ msgstr "" msgid "NTP server candidates" msgstr "" -msgid "NTP sync time-out" -msgstr "" - msgid "Name" msgstr "Nume" @@ -2209,12 +2186,6 @@ msgstr "Optiunea eliminata" msgid "Optional" msgstr "" -msgid "Optional, specify to override default server (tic.sixxs.net)" -msgstr "" - -msgid "Optional, use when the SIXXS account has more than one tunnel" -msgstr "" - msgid "" "Optional. 32-bit mark for outgoing encrypted packets. Enter value in hex, " "starting with <code>0x</code>." @@ -2675,9 +2646,6 @@ msgstr "" msgid "Request IPv6-prefix of length" msgstr "" -msgid "Require TLS" -msgstr "" - msgid "Required" msgstr "" @@ -2760,9 +2728,6 @@ msgstr "" msgid "Route type" msgstr "" -msgid "Routed IPv6 prefix for downstream interfaces" -msgstr "" - msgid "Router Advertisement-Service" msgstr "" @@ -2786,14 +2751,6 @@ msgstr "" msgid "SHA256" msgstr "" -msgid "" -"SIXXS supports TIC only, for static tunnels using IP protocol 41 (RFC4213) " -"use 6in4 instead" -msgstr "" - -msgid "SIXXS-handle[/Tunnel-ID]" -msgstr "" - msgid "SNR" msgstr "" @@ -2847,17 +2804,6 @@ msgstr "" msgid "Server Settings" msgstr "Setarile serverului" -msgid "Server password" -msgstr "" - -msgid "" -"Server password, enter the specific password of the tunnel when the username " -"contains the tunnel ID" -msgstr "" - -msgid "Server username" -msgstr "" - msgid "Service Name" msgstr "Nume serviciu" @@ -2951,9 +2897,6 @@ msgstr "" msgid "Source" msgstr "Sursa" -msgid "Source routing" -msgstr "" - msgid "Specifies the directory the device is attached to" msgstr "" @@ -3224,11 +3167,6 @@ msgid "" msgstr "" msgid "" -"The tunnel end-point is behind NAT, defaults to disabled and only applies to " -"AYIYA" -msgstr "" - -msgid "" "The uploaded image file does not contain a supported format. Make sure that " "you choose the generic image format for your platform." msgstr "" @@ -3373,15 +3311,6 @@ msgstr "Interfata de tunel" msgid "Tunnel Link" msgstr "" -msgid "Tunnel broker protocol" -msgstr "" - -msgid "Tunnel setup server" -msgstr "" - -msgid "Tunnel type" -msgstr "" - msgid "Tx-Power" msgstr "Puterea TX" @@ -3554,12 +3483,6 @@ msgstr "" msgid "Vendor Class to send when requesting DHCP" msgstr "" -msgid "Verbose" -msgstr "" - -msgid "Verbose logging by aiccu daemon" -msgstr "" - msgid "Verify" msgstr "" @@ -3591,10 +3514,6 @@ msgstr "" "Criptarea WPA necesita wpa_supplicant (pentru modul client) sau hostapd " "(pentru modul AP sau ad-hoc) instalate." -msgid "" -"Wait for NTP sync that many seconds, seting to 0 disables waiting (optional)" -msgstr "" - msgid "Waiting for changes to be applied..." msgstr "" @@ -3618,12 +3537,6 @@ msgid "" "communications" msgstr "" -msgid "Whether to create an IPv6 default route over the tunnel" -msgstr "" - -msgid "Whether to route only packets from delegated prefixes" -msgstr "" - msgid "Width" msgstr "" @@ -3759,9 +3672,6 @@ msgstr "" msgid "local <abbr title=\"Domain Name System\">DNS</abbr> file" msgstr "" -msgid "minimum 1280, maximum 1480" -msgstr "" - msgid "minutes" msgstr "" @@ -3837,6 +3747,12 @@ msgstr "da" msgid "« Back" msgstr "« Inapoi" +#~ msgid "IPv4 WAN Status" +#~ msgstr "Statusul IPv4 pe WAN" + +#~ msgid "IPv6 WAN Status" +#~ msgstr "Statusul IPv6 pe WAN" + #~ msgid "Apply" #~ msgstr "Aplica" diff --git a/modules/luci-base/po/ru/base.po b/modules/luci-base/po/ru/base.po index 91aacdeb4..d43cc266c 100644 --- a/modules/luci-base/po/ru/base.po +++ b/modules/luci-base/po/ru/base.po @@ -177,9 +177,6 @@ msgstr "A43C + J43 + A43 + V43" msgid "ADSL" msgstr "ADSL" -msgid "AICCU (SIXXS)" -msgstr "AICCU (SIXXS)" - msgid "ANSI T1.413" msgstr "ANSI T1.413" @@ -216,9 +213,6 @@ msgstr "ATM номер уÑтройÑтва" msgid "ATU-C System Vendor ID" msgstr "ATU-C System Vendor ID" -msgid "AYIYA" -msgstr "AYIYA" - msgid "Access Concentrator" msgstr "Концентратор доÑтупа" @@ -330,13 +324,6 @@ msgstr "" msgid "Allowed IPs" msgstr "Разрешенные IP-адреÑа" -msgid "" -"Also see <a href=\"https://www.sixxs.net/faq/connectivity/?faq=comparison" -"\">Tunneling Comparison</a> on SIXXS" -msgstr "" -"Также Ñмотрите <a href=\"https://www.sixxs.net/faq/connectivity/?" -"faq=comparison\">Tunneling Comparison</a> on SIXXS" - msgid "Always announce default router" msgstr "ОбъÑвлÑÑ‚ÑŒ вÑегда, как дефолтный маршрутизатор" @@ -423,6 +410,9 @@ msgstr "" msgid "Apply unchecked" msgstr "" +msgid "Architecture" +msgstr "" + msgid "" "Assign a part of given length of every public IPv6-prefix to this interface" msgstr "" @@ -441,6 +431,9 @@ msgstr "" msgid "Associated Stations" msgstr "Подключенные клиенты" +msgid "Associations" +msgstr "" + msgid "Auth Group" msgstr "Группа аутентификации" @@ -537,9 +530,6 @@ msgstr "Указан неправильный адреÑ!" msgid "Band" msgstr "Диапазон" -msgid "Behind NAT" -msgstr "За NAT-ом" - msgid "" "Below is the determined list of files to backup. It consists of changed " "configuration files marked by opkg, essential base files and the user " @@ -739,9 +729,6 @@ msgstr "Подключен" msgid "Connection Limit" msgstr "Ограничение Ñоединений" -msgid "Connection to server fails when TLS cannot be used" -msgstr "СвÑзь Ñ Ñервером прерываетÑÑ, когда TLS не может быть иÑпользован" - msgid "Connections" msgstr "СоединениÑ" @@ -881,9 +868,6 @@ msgstr "Шлюз по умолчанию" msgid "Default is stateless + stateful" msgstr "Значение по умолчанию - 'stateless + stateful'." -msgid "Default route" -msgstr "Маршрут по умолчанию" - msgid "Default state" msgstr "Ðачальное ÑоÑтоÑние" @@ -1431,9 +1415,6 @@ msgstr "ПерезапуÑтить" msgid "Header Error Code Errors (HEC)" msgstr "Ошибки кода ошибки заголовка (HEC)" -msgid "Heartbeat" -msgstr "Heartbeat" - msgid "" "Here you can configure the basic aspects of your device like its hostname or " "the timezone." @@ -1493,8 +1474,8 @@ msgstr "IPv4" msgid "IPv4 Firewall" msgstr "МежÑетевой Ñкран IPv4" -msgid "IPv4 WAN Status" -msgstr "СоÑтоÑние IPv4 WAN" +msgid "IPv4 Upstream" +msgstr "" msgid "IPv4 address" msgstr "IPv4-адреÑ" @@ -1544,16 +1525,12 @@ msgstr "IPv6 ÐаÑтройки" msgid "IPv6 ULA-Prefix" msgstr "IPv6 ULA-Prefix" -msgid "IPv6 WAN Status" -msgstr "СоÑтоÑние IPv6 WAN" +msgid "IPv6 Upstream" +msgstr "" msgid "IPv6 address" msgstr "IPv6-адреÑ" -msgid "IPv6 address delegated to the local tunnel endpoint (optional)" -msgstr "" -"IPv6-адреÑ, делегированный локальной конечной точке Ñ‚ÑƒÐ½Ð½ÐµÐ»Ñ (необÑзательно)." - msgid "IPv6 assignment hint" msgstr "IPv6 подÑказка приÑвоениÑ" @@ -2163,9 +2140,6 @@ msgstr "NT домен" msgid "NTP server candidates" msgstr "СпиÑок NTP-Ñерверов" -msgid "NTP sync time-out" -msgstr "NTP ÑÐ¸Ð½Ñ…Ñ€Ð¾Ð½Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð²Ñ€ÐµÐ¼ÐµÐ½Ð¸ ожиданиÑ" - msgid "Name" msgstr "ИмÑ" @@ -2343,16 +2317,6 @@ msgstr "ÐžÐ¿Ñ†Ð¸Ñ ÑƒÐ´Ð°Ð»ÐµÐ½Ð°" msgid "Optional" msgstr "ÐеобÑзательно" -msgid "Optional, specify to override default server (tic.sixxs.net)" -msgstr "" -"ÐеобÑзательно. Укажите, чтобы переопределить дефолтный Ñервер (tic.sixxs." -"net)." - -msgid "Optional, use when the SIXXS account has more than one tunnel" -msgstr "" -"ÐеобÑзательно. ИÑпользуетÑÑ, когда ÑƒÑ‡ÐµÑ‚Ð½Ð°Ñ Ð·Ð°Ð¿Ð¸ÑÑŒ SIXXS имеет более одного " -"туннелÑ." - msgid "" "Optional. 32-bit mark for outgoing encrypted packets. Enter value in hex, " "starting with <code>0x</code>." @@ -2844,9 +2808,6 @@ msgstr "Ð—Ð°Ð¿Ñ€Ð¾Ñ IPv6 адреÑа" msgid "Request IPv6-prefix of length" msgstr "Ð—Ð°Ð¿Ñ€Ð¾Ñ IPv6 Ð¿Ñ€ÐµÑ„Ð¸ÐºÑ Ð´Ð»Ð¸Ð½Ñ‹" -msgid "Require TLS" -msgstr "Требовать TLS" - msgid "Required" msgstr "Требовать" @@ -2937,9 +2898,6 @@ msgstr "Маршрут разрешенный Ð´Ð»Ñ IP адреÑов" msgid "Route type" msgstr "Тип маршрута" -msgid "Routed IPv6 prefix for downstream interfaces" -msgstr "ÐŸÑ€ÐµÑ„Ð¸ÐºÑ Ð¼Ð°Ñ€ÑˆÑ€ÑƒÑ‚Ð¸Ð·Ð°Ñ†Ð¸Ð¸ IPv6 Ð´Ð»Ñ Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñов внутренней Ñети" - msgid "Router Advertisement-Service" msgstr "ДоÑтупные<br />режимы работы" @@ -2965,16 +2923,6 @@ msgstr "Проверить" msgid "SHA256" msgstr "SHA256" -msgid "" -"SIXXS supports TIC only, for static tunnels using IP protocol 41 (RFC4213) " -"use 6in4 instead" -msgstr "" -"SIXXS поддерживает только TIC, Ð´Ð»Ñ ÑтатичеÑких туннелей Ñ Ð¸Ñпользованием IP-" -"протокола 41 (RFC4213) иÑпользуетÑÑ Ð²Ð¼ÐµÑто 6in4." - -msgid "SIXXS-handle[/Tunnel-ID]" -msgstr "SIXXS-управление[/Туннель-ID]" - msgid "SNR" msgstr "SNR" @@ -3030,19 +2978,6 @@ msgstr "РазделÑÑ‚ÑŒ клиентов" msgid "Server Settings" msgstr "ÐаÑтройки Ñервера" -msgid "Server password" -msgstr "Пароль доÑтупа к Ñерверу" - -msgid "" -"Server password, enter the specific password of the tunnel when the username " -"contains the tunnel ID" -msgstr "" -"Пароль Ñервера. Введите пароль из тоннелÑ, когда Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ñодержит " -"ID туннелÑ." - -msgid "Server username" -msgstr "Логин доÑтупа к Ñерверу" - msgid "Service Name" msgstr "Ð˜Ð¼Ñ Ñлужбы" @@ -3139,9 +3074,6 @@ msgstr "Сортировка" msgid "Source" msgstr "ИÑточник" -msgid "Source routing" -msgstr "Ð¼Ð°Ñ€ÑˆÑ€ÑƒÑ‚Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð¾Ñ‚ иÑточника" - msgid "Specifies the directory the device is attached to" msgstr "Папка, к которой монтируетÑÑ Ñ€Ð°Ð·Ð´ÐµÐ» уÑтройÑтва." @@ -3458,13 +3390,6 @@ msgstr "" "в завиÑимоÑти от наÑтроек." msgid "" -"The tunnel end-point is behind NAT, defaults to disabled and only applies to " -"AYIYA" -msgstr "" -"ÐšÐ¾Ð½ÐµÑ‡Ð½Ð°Ñ Ñ‚Ð¾Ñ‡ÐºÐ° Ñ‚ÑƒÐ½Ð½ÐµÐ»Ñ Ð½Ð°Ñ…Ð¾Ð´Ð¸Ñ‚ÑÑ Ð·Ð° NAT, по умолчанию отключена и " -"применÑетÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ к AYIYA." - -msgid "" "The uploaded image file does not contain a supported format. Make sure that " "you choose the generic image format for your platform." msgstr "" @@ -3634,15 +3559,6 @@ msgstr "Ð˜Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ Ñ‚ÑƒÐ½Ð½ÐµÐ»Ñ" msgid "Tunnel Link" msgstr "СÑылка на туннель" -msgid "Tunnel broker protocol" -msgstr "Протокол поÑредника туннелÑ" - -msgid "Tunnel setup server" -msgstr "Сервер наÑтройки туннелÑ" - -msgid "Tunnel type" -msgstr "Тип туннелÑ" - msgid "Tx-Power" msgstr "МощноÑÑ‚ÑŒ передатчика" @@ -3828,12 +3744,6 @@ msgid "Vendor Class to send when requesting DHCP" msgstr "" "КлаÑÑ Ð¿Ñ€Ð¾Ð¸Ð·Ð²Ð¾Ð´Ð¸Ñ‚ÐµÐ»Ñ (Vendor class), который отправлÑÑ‚ÑŒ при DHCP-запроÑах" -msgid "Verbose" -msgstr "Verbose" - -msgid "Verbose logging by aiccu daemon" -msgstr "Verbose ведение журнала демоном aiccu" - msgid "Verify" msgstr "Проверить" @@ -3865,12 +3775,6 @@ msgstr "" "Ðеобходимо уÑтановить wpa_supplicant (режим клиента) или hostapd (режим " "точки доÑтупа или ad-hoc) Ð´Ð»Ñ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶ÐºÐ¸ ÑˆÐ¸Ñ„Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ WPA." -msgid "" -"Wait for NTP sync that many seconds, seting to 0 disables waiting (optional)" -msgstr "" -"Задать Ð²Ñ€ÐµÐ¼Ñ Ð¾Ð¶Ð¸Ð´Ð°Ð½Ð¸Ñ Ñинхронизации NTP, уÑтановка Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ - '0', отключает " -"ожидание (необÑзательно)." - msgid "Waiting for changes to be applied..." msgstr "Ожидание Ð¿Ñ€Ð¸Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ð¹..." @@ -3896,12 +3800,6 @@ msgid "" "communications" msgstr "При иÑпользовании PSK, PMK может быть Ñоздан локально, без AP в ÑвÑзи." -msgid "Whether to create an IPv6 default route over the tunnel" -msgstr "Создание маршрута по умолчанию IPv6 через туннель." - -msgid "Whether to route only packets from delegated prefixes" -msgstr "ÐœÐ°Ñ€ÑˆÑ€ÑƒÑ‚Ð¸Ð·Ð°Ñ†Ð¸Ñ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ пакетов из делегированных префикÑов." - msgid "Width" msgstr "Ширина" @@ -4048,9 +3946,6 @@ msgstr "kbit/s" msgid "local <abbr title=\"Domain Name System\">DNS</abbr> file" msgstr "Локальный <abbr title=\"Служба доменных имён\">DNS</abbr>-файл." -msgid "minimum 1280, maximum 1480" -msgstr "минимум 1280, макÑимум 1480" - msgid "minutes" msgstr "минут(Ñ‹)" @@ -4126,20 +4021,8 @@ msgstr "да" msgid "« Back" msgstr "« Ðазад" -#~ msgid "Apply" -#~ msgstr "ПринÑÑ‚ÑŒ" - -#~ msgid "Applying changes" -#~ msgstr "Применение изменений" - -#~ msgid "Configuration applied." -#~ msgstr "Изменение наÑтроек config файлов." - -#~ msgid "Save & Apply" -#~ msgstr "Сохранить и применить" - -#~ msgid "The following changes have been committed" -#~ msgstr "Ваши наÑтройки были применены." +#~ msgid "IPv4 WAN Status" +#~ msgstr "СоÑтоÑние IPv4 WAN" -#~ msgid "There are no pending changes to apply!" -#~ msgstr "Ðет изменений, которые можно применить!" +#~ msgid "IPv6 WAN Status" +#~ msgstr "СоÑтоÑние IPv6 WAN" diff --git a/modules/luci-base/po/sk/base.po b/modules/luci-base/po/sk/base.po index 7f3d249e1..36d7bd632 100644 --- a/modules/luci-base/po/sk/base.po +++ b/modules/luci-base/po/sk/base.po @@ -159,9 +159,6 @@ msgstr "" msgid "ADSL" msgstr "" -msgid "AICCU (SIXXS)" -msgstr "" - msgid "ANSI T1.413" msgstr "" @@ -195,9 +192,6 @@ msgstr "" msgid "ATU-C System Vendor ID" msgstr "" -msgid "AYIYA" -msgstr "" - msgid "Access Concentrator" msgstr "" @@ -300,11 +294,6 @@ msgstr "" msgid "Allowed IPs" msgstr "" -msgid "" -"Also see <a href=\"https://www.sixxs.net/faq/connectivity/?faq=comparison" -"\">Tunneling Comparison</a> on SIXXS" -msgstr "" - msgid "Always announce default router" msgstr "" @@ -389,6 +378,9 @@ msgstr "" msgid "Apply unchecked" msgstr "" +msgid "Architecture" +msgstr "" + msgid "" "Assign a part of given length of every public IPv6-prefix to this interface" msgstr "" @@ -403,6 +395,9 @@ msgstr "" msgid "Associated Stations" msgstr "" +msgid "Associations" +msgstr "" + msgid "Auth Group" msgstr "" @@ -493,9 +488,6 @@ msgstr "" msgid "Band" msgstr "" -msgid "Behind NAT" -msgstr "" - msgid "" "Below is the determined list of files to backup. It consists of changed " "configuration files marked by opkg, essential base files and the user " @@ -668,9 +660,6 @@ msgstr "" msgid "Connection Limit" msgstr "" -msgid "Connection to server fails when TLS cannot be used" -msgstr "" - msgid "Connections" msgstr "" @@ -806,9 +795,6 @@ msgstr "" msgid "Default is stateless + stateful" msgstr "" -msgid "Default route" -msgstr "" - msgid "Default state" msgstr "" @@ -1327,9 +1313,6 @@ msgstr "" msgid "Header Error Code Errors (HEC)" msgstr "" -msgid "Heartbeat" -msgstr "" - msgid "" "Here you can configure the basic aspects of your device like its hostname or " "the timezone." @@ -1385,7 +1368,7 @@ msgstr "" msgid "IPv4 Firewall" msgstr "" -msgid "IPv4 WAN Status" +msgid "IPv4 Upstream" msgstr "" msgid "IPv4 address" @@ -1436,15 +1419,12 @@ msgstr "" msgid "IPv6 ULA-Prefix" msgstr "" -msgid "IPv6 WAN Status" +msgid "IPv6 Upstream" msgstr "" msgid "IPv6 address" msgstr "" -msgid "IPv6 address delegated to the local tunnel endpoint (optional)" -msgstr "" - msgid "IPv6 assignment hint" msgstr "" @@ -2010,9 +1990,6 @@ msgstr "" msgid "NTP server candidates" msgstr "" -msgid "NTP sync time-out" -msgstr "" - msgid "Name" msgstr "" @@ -2184,12 +2161,6 @@ msgstr "" msgid "Optional" msgstr "" -msgid "Optional, specify to override default server (tic.sixxs.net)" -msgstr "" - -msgid "Optional, use when the SIXXS account has more than one tunnel" -msgstr "" - msgid "" "Optional. 32-bit mark for outgoing encrypted packets. Enter value in hex, " "starting with <code>0x</code>." @@ -2648,9 +2619,6 @@ msgstr "" msgid "Request IPv6-prefix of length" msgstr "" -msgid "Require TLS" -msgstr "" - msgid "Required" msgstr "" @@ -2733,9 +2701,6 @@ msgstr "" msgid "Route type" msgstr "" -msgid "Routed IPv6 prefix for downstream interfaces" -msgstr "" - msgid "Router Advertisement-Service" msgstr "" @@ -2759,14 +2724,6 @@ msgstr "" msgid "SHA256" msgstr "" -msgid "" -"SIXXS supports TIC only, for static tunnels using IP protocol 41 (RFC4213) " -"use 6in4 instead" -msgstr "" - -msgid "SIXXS-handle[/Tunnel-ID]" -msgstr "" - msgid "SNR" msgstr "" @@ -2820,17 +2777,6 @@ msgstr "" msgid "Server Settings" msgstr "" -msgid "Server password" -msgstr "" - -msgid "" -"Server password, enter the specific password of the tunnel when the username " -"contains the tunnel ID" -msgstr "" - -msgid "Server username" -msgstr "" - msgid "Service Name" msgstr "" @@ -2923,9 +2869,6 @@ msgstr "" msgid "Source" msgstr "" -msgid "Source routing" -msgstr "" - msgid "Specifies the directory the device is attached to" msgstr "" @@ -3196,11 +3139,6 @@ msgid "" msgstr "" msgid "" -"The tunnel end-point is behind NAT, defaults to disabled and only applies to " -"AYIYA" -msgstr "" - -msgid "" "The uploaded image file does not contain a supported format. Make sure that " "you choose the generic image format for your platform." msgstr "" @@ -3343,15 +3281,6 @@ msgstr "" msgid "Tunnel Link" msgstr "" -msgid "Tunnel broker protocol" -msgstr "" - -msgid "Tunnel setup server" -msgstr "" - -msgid "Tunnel type" -msgstr "" - msgid "Tx-Power" msgstr "" @@ -3524,12 +3453,6 @@ msgstr "" msgid "Vendor Class to send when requesting DHCP" msgstr "" -msgid "Verbose" -msgstr "" - -msgid "Verbose logging by aiccu daemon" -msgstr "" - msgid "Verify" msgstr "" @@ -3559,10 +3482,6 @@ msgid "" "and ad-hoc mode) to be installed." msgstr "" -msgid "" -"Wait for NTP sync that many seconds, seting to 0 disables waiting (optional)" -msgstr "" - msgid "Waiting for changes to be applied..." msgstr "" @@ -3586,12 +3505,6 @@ msgid "" "communications" msgstr "" -msgid "Whether to create an IPv6 default route over the tunnel" -msgstr "" - -msgid "Whether to route only packets from delegated prefixes" -msgstr "" - msgid "Width" msgstr "" @@ -3727,9 +3640,6 @@ msgstr "" msgid "local <abbr title=\"Domain Name System\">DNS</abbr> file" msgstr "" -msgid "minimum 1280, maximum 1480" -msgstr "" - msgid "minutes" msgstr "" diff --git a/modules/luci-base/po/sv/base.po b/modules/luci-base/po/sv/base.po index 770fca2e5..be886c1df 100644 --- a/modules/luci-base/po/sv/base.po +++ b/modules/luci-base/po/sv/base.po @@ -167,9 +167,6 @@ msgstr "A43C + J43 + A43 + V43" msgid "ADSL" msgstr "ADSL" -msgid "AICCU (SIXXS)" -msgstr "AICCU (SIXXS)" - msgid "ANSI T1.413" msgstr "ANSI T1.413" @@ -203,9 +200,6 @@ msgstr "" msgid "ATU-C System Vendor ID" msgstr "" -msgid "AYIYA" -msgstr "AYIYA" - msgid "Access Concentrator" msgstr "" @@ -311,11 +305,6 @@ msgstr "" msgid "Allowed IPs" msgstr "TillÃ¥tna IP-adresser" -msgid "" -"Also see <a href=\"https://www.sixxs.net/faq/connectivity/?faq=comparison" -"\">Tunneling Comparison</a> on SIXXS" -msgstr "" - msgid "Always announce default router" msgstr "" @@ -400,6 +389,9 @@ msgstr "" msgid "Apply unchecked" msgstr "" +msgid "Architecture" +msgstr "" + msgid "" "Assign a part of given length of every public IPv6-prefix to this interface" msgstr "" @@ -414,6 +406,9 @@ msgstr "" msgid "Associated Stations" msgstr "Associerade stationer" +msgid "Associations" +msgstr "" + msgid "Auth Group" msgstr "Autentiseringsgrupp" @@ -504,9 +499,6 @@ msgstr "Fel adress angiven!" msgid "Band" msgstr "Band" -msgid "Behind NAT" -msgstr "Bakom NAT" - msgid "" "Below is the determined list of files to backup. It consists of changed " "configuration files marked by opkg, essential base files and the user " @@ -682,9 +674,6 @@ msgstr "Ansluten" msgid "Connection Limit" msgstr "Anslutningsgräns" -msgid "Connection to server fails when TLS cannot be used" -msgstr "" - msgid "Connections" msgstr "Anslutningar" @@ -820,9 +809,6 @@ msgstr "Standard gateway" msgid "Default is stateless + stateful" msgstr "" -msgid "Default route" -msgstr "Standardrutt" - msgid "Default state" msgstr "" @@ -1347,9 +1333,6 @@ msgstr "Lägg pÃ¥" msgid "Header Error Code Errors (HEC)" msgstr "" -msgid "Heartbeat" -msgstr "Hjärtslag" - msgid "" "Here you can configure the basic aspects of your device like its hostname or " "the timezone." @@ -1405,7 +1388,7 @@ msgstr "IPv4" msgid "IPv4 Firewall" msgstr "IPv4-brandvägg" -msgid "IPv4 WAN Status" +msgid "IPv4 Upstream" msgstr "" msgid "IPv4 address" @@ -1456,15 +1439,12 @@ msgstr "IPv6-inställningar" msgid "IPv6 ULA-Prefix" msgstr "" -msgid "IPv6 WAN Status" +msgid "IPv6 Upstream" msgstr "" msgid "IPv6 address" msgstr "IPv6-adress" -msgid "IPv6 address delegated to the local tunnel endpoint (optional)" -msgstr "" - msgid "IPv6 assignment hint" msgstr "" @@ -2031,9 +2011,6 @@ msgstr "NT-domän" msgid "NTP server candidates" msgstr "NTP-serverkandidater" -msgid "NTP sync time-out" -msgstr "" - msgid "Name" msgstr "Namn" @@ -2205,12 +2182,6 @@ msgstr "Alternativet togs bort" msgid "Optional" msgstr "Valfri" -msgid "Optional, specify to override default server (tic.sixxs.net)" -msgstr "" - -msgid "Optional, use when the SIXXS account has more than one tunnel" -msgstr "" - msgid "" "Optional. 32-bit mark for outgoing encrypted packets. Enter value in hex, " "starting with <code>0x</code>." @@ -2671,9 +2642,6 @@ msgstr "" msgid "Request IPv6-prefix of length" msgstr "" -msgid "Require TLS" -msgstr "Kräv TLS" - msgid "Required" msgstr "Krävs!" @@ -2756,9 +2724,6 @@ msgstr "" msgid "Route type" msgstr "Typ av rutt" -msgid "Routed IPv6 prefix for downstream interfaces" -msgstr "" - msgid "Router Advertisement-Service" msgstr "" @@ -2782,14 +2747,6 @@ msgstr "Kör filsystemskontrollen" msgid "SHA256" msgstr "SHA256" -msgid "" -"SIXXS supports TIC only, for static tunnels using IP protocol 41 (RFC4213) " -"use 6in4 instead" -msgstr "" - -msgid "SIXXS-handle[/Tunnel-ID]" -msgstr "" - msgid "SNR" msgstr "SNR" @@ -2843,17 +2800,6 @@ msgstr "Separera klienter" msgid "Server Settings" msgstr "Inställningar för server" -msgid "Server password" -msgstr "Lösenordet för servern" - -msgid "" -"Server password, enter the specific password of the tunnel when the username " -"contains the tunnel ID" -msgstr "" - -msgid "Server username" -msgstr "Användarnamnet för servern" - msgid "Service Name" msgstr "Namn pÃ¥ tjänst" @@ -2946,9 +2892,6 @@ msgstr "Sortera" msgid "Source" msgstr "Källa" -msgid "Source routing" -msgstr "" - msgid "Specifies the directory the device is attached to" msgstr "" @@ -3219,11 +3162,6 @@ msgid "" msgstr "" msgid "" -"The tunnel end-point is behind NAT, defaults to disabled and only applies to " -"AYIYA" -msgstr "" - -msgid "" "The uploaded image file does not contain a supported format. Make sure that " "you choose the generic image format for your platform." msgstr "" @@ -3370,15 +3308,6 @@ msgstr "Tunnelgränssnitt" msgid "Tunnel Link" msgstr "Tunnel-länk" -msgid "Tunnel broker protocol" -msgstr "" - -msgid "Tunnel setup server" -msgstr "" - -msgid "Tunnel type" -msgstr "Tunnel-typ" - msgid "Tx-Power" msgstr "" @@ -3551,12 +3480,6 @@ msgstr "Tillverkare" msgid "Vendor Class to send when requesting DHCP" msgstr "" -msgid "Verbose" -msgstr "Utförlig" - -msgid "Verbose logging by aiccu daemon" -msgstr "" - msgid "Verify" msgstr "Verkställ" @@ -3586,10 +3509,6 @@ msgid "" "and ad-hoc mode) to be installed." msgstr "" -msgid "" -"Wait for NTP sync that many seconds, seting to 0 disables waiting (optional)" -msgstr "" - msgid "Waiting for changes to be applied..." msgstr "Väntar pÃ¥ att ändringarna ska tillämpas..." @@ -3614,12 +3533,6 @@ msgid "" "communications" msgstr "" -msgid "Whether to create an IPv6 default route over the tunnel" -msgstr "" - -msgid "Whether to route only packets from delegated prefixes" -msgstr "" - msgid "Width" msgstr "Bredd" @@ -3760,9 +3673,6 @@ msgstr "kbit/s" msgid "local <abbr title=\"Domain Name System\">DNS</abbr> file" msgstr "lokal <abbr title=\"Domain Name System\">DNS</abbr>-fil" -msgid "minimum 1280, maximum 1480" -msgstr "" - msgid "minutes" msgstr "minuter" @@ -3837,27 +3747,3 @@ msgstr "ja" msgid "« Back" msgstr "« BakÃ¥t" - -#~ msgid "Apply" -#~ msgstr "Verkställ" - -#~ msgid "Applying changes" -#~ msgstr "Verkställer ändringar" - -#~ msgid "Configuration applied." -#~ msgstr "Konfigurationen tillämpades" - -#~ msgid "Save & Apply" -#~ msgstr "Spara & Verkställ" - -#~ msgid "The following changes have been committed" -#~ msgstr "Följande ändringar har skickats in" - -#~ msgid "There are no pending changes to apply!" -#~ msgstr "Det finns inga pendlande ändringar att verkställa!" - -#~ msgid "Action" -#~ msgstr "Ã…tgärd" - -#~ msgid "Buttons" -#~ msgstr "Knappar" diff --git a/modules/luci-base/po/templates/base.pot b/modules/luci-base/po/templates/base.pot index ebbe6c6dc..e39fd962e 100644 --- a/modules/luci-base/po/templates/base.pot +++ b/modules/luci-base/po/templates/base.pot @@ -152,9 +152,6 @@ msgstr "" msgid "ADSL" msgstr "" -msgid "AICCU (SIXXS)" -msgstr "" - msgid "ANSI T1.413" msgstr "" @@ -188,9 +185,6 @@ msgstr "" msgid "ATU-C System Vendor ID" msgstr "" -msgid "AYIYA" -msgstr "" - msgid "Access Concentrator" msgstr "" @@ -293,11 +287,6 @@ msgstr "" msgid "Allowed IPs" msgstr "" -msgid "" -"Also see <a href=\"https://www.sixxs.net/faq/connectivity/?faq=comparison" -"\">Tunneling Comparison</a> on SIXXS" -msgstr "" - msgid "Always announce default router" msgstr "" @@ -382,6 +371,9 @@ msgstr "" msgid "Apply unchecked" msgstr "" +msgid "Architecture" +msgstr "" + msgid "" "Assign a part of given length of every public IPv6-prefix to this interface" msgstr "" @@ -396,6 +388,9 @@ msgstr "" msgid "Associated Stations" msgstr "" +msgid "Associations" +msgstr "" + msgid "Auth Group" msgstr "" @@ -486,9 +481,6 @@ msgstr "" msgid "Band" msgstr "" -msgid "Behind NAT" -msgstr "" - msgid "" "Below is the determined list of files to backup. It consists of changed " "configuration files marked by opkg, essential base files and the user " @@ -661,9 +653,6 @@ msgstr "" msgid "Connection Limit" msgstr "" -msgid "Connection to server fails when TLS cannot be used" -msgstr "" - msgid "Connections" msgstr "" @@ -799,9 +788,6 @@ msgstr "" msgid "Default is stateless + stateful" msgstr "" -msgid "Default route" -msgstr "" - msgid "Default state" msgstr "" @@ -1320,9 +1306,6 @@ msgstr "" msgid "Header Error Code Errors (HEC)" msgstr "" -msgid "Heartbeat" -msgstr "" - msgid "" "Here you can configure the basic aspects of your device like its hostname or " "the timezone." @@ -1378,7 +1361,7 @@ msgstr "" msgid "IPv4 Firewall" msgstr "" -msgid "IPv4 WAN Status" +msgid "IPv4 Upstream" msgstr "" msgid "IPv4 address" @@ -1429,15 +1412,12 @@ msgstr "" msgid "IPv6 ULA-Prefix" msgstr "" -msgid "IPv6 WAN Status" +msgid "IPv6 Upstream" msgstr "" msgid "IPv6 address" msgstr "" -msgid "IPv6 address delegated to the local tunnel endpoint (optional)" -msgstr "" - msgid "IPv6 assignment hint" msgstr "" @@ -2003,9 +1983,6 @@ msgstr "" msgid "NTP server candidates" msgstr "" -msgid "NTP sync time-out" -msgstr "" - msgid "Name" msgstr "" @@ -2177,12 +2154,6 @@ msgstr "" msgid "Optional" msgstr "" -msgid "Optional, specify to override default server (tic.sixxs.net)" -msgstr "" - -msgid "Optional, use when the SIXXS account has more than one tunnel" -msgstr "" - msgid "" "Optional. 32-bit mark for outgoing encrypted packets. Enter value in hex, " "starting with <code>0x</code>." @@ -2641,9 +2612,6 @@ msgstr "" msgid "Request IPv6-prefix of length" msgstr "" -msgid "Require TLS" -msgstr "" - msgid "Required" msgstr "" @@ -2726,9 +2694,6 @@ msgstr "" msgid "Route type" msgstr "" -msgid "Routed IPv6 prefix for downstream interfaces" -msgstr "" - msgid "Router Advertisement-Service" msgstr "" @@ -2752,14 +2717,6 @@ msgstr "" msgid "SHA256" msgstr "" -msgid "" -"SIXXS supports TIC only, for static tunnels using IP protocol 41 (RFC4213) " -"use 6in4 instead" -msgstr "" - -msgid "SIXXS-handle[/Tunnel-ID]" -msgstr "" - msgid "SNR" msgstr "" @@ -2813,17 +2770,6 @@ msgstr "" msgid "Server Settings" msgstr "" -msgid "Server password" -msgstr "" - -msgid "" -"Server password, enter the specific password of the tunnel when the username " -"contains the tunnel ID" -msgstr "" - -msgid "Server username" -msgstr "" - msgid "Service Name" msgstr "" @@ -2916,9 +2862,6 @@ msgstr "" msgid "Source" msgstr "" -msgid "Source routing" -msgstr "" - msgid "Specifies the directory the device is attached to" msgstr "" @@ -3189,11 +3132,6 @@ msgid "" msgstr "" msgid "" -"The tunnel end-point is behind NAT, defaults to disabled and only applies to " -"AYIYA" -msgstr "" - -msgid "" "The uploaded image file does not contain a supported format. Make sure that " "you choose the generic image format for your platform." msgstr "" @@ -3336,15 +3274,6 @@ msgstr "" msgid "Tunnel Link" msgstr "" -msgid "Tunnel broker protocol" -msgstr "" - -msgid "Tunnel setup server" -msgstr "" - -msgid "Tunnel type" -msgstr "" - msgid "Tx-Power" msgstr "" @@ -3517,12 +3446,6 @@ msgstr "" msgid "Vendor Class to send when requesting DHCP" msgstr "" -msgid "Verbose" -msgstr "" - -msgid "Verbose logging by aiccu daemon" -msgstr "" - msgid "Verify" msgstr "" @@ -3552,10 +3475,6 @@ msgid "" "and ad-hoc mode) to be installed." msgstr "" -msgid "" -"Wait for NTP sync that many seconds, seting to 0 disables waiting (optional)" -msgstr "" - msgid "Waiting for changes to be applied..." msgstr "" @@ -3579,12 +3498,6 @@ msgid "" "communications" msgstr "" -msgid "Whether to create an IPv6 default route over the tunnel" -msgstr "" - -msgid "Whether to route only packets from delegated prefixes" -msgstr "" - msgid "Width" msgstr "" @@ -3720,9 +3633,6 @@ msgstr "" msgid "local <abbr title=\"Domain Name System\">DNS</abbr> file" msgstr "" -msgid "minimum 1280, maximum 1480" -msgstr "" - msgid "minutes" msgstr "" diff --git a/modules/luci-base/po/tr/base.po b/modules/luci-base/po/tr/base.po index aba91126d..5f8fb29c5 100644 --- a/modules/luci-base/po/tr/base.po +++ b/modules/luci-base/po/tr/base.po @@ -39,13 +39,13 @@ msgid "-- custom --" msgstr "-- özel --" msgid "-- match by device --" -msgstr "" +msgstr "-- cihaza göre eÅŸleÅŸtir --" msgid "-- match by label --" -msgstr "" +msgstr "-- etikete göre eÅŸleÅŸtir --" msgid "-- match by uuid --" -msgstr "" +msgstr "-- uuid'e göre eÅŸleÅŸtir --" msgid "1 Minute Load:" msgstr "1 Dakikalık Yük:" @@ -54,7 +54,7 @@ msgid "15 Minute Load:" msgstr "15 Dakikalık Yük:" msgid "4-character hexadecimal ID" -msgstr "" +msgstr "4 karakterli HEX ID" msgid "464XLAT (CLAT)" msgstr "" @@ -168,9 +168,6 @@ msgstr "" msgid "ADSL" msgstr "" -msgid "AICCU (SIXXS)" -msgstr "" - msgid "ANSI T1.413" msgstr "" @@ -204,9 +201,6 @@ msgstr "" msgid "ATU-C System Vendor ID" msgstr "" -msgid "AYIYA" -msgstr "" - msgid "Access Concentrator" msgstr "" @@ -313,11 +307,6 @@ msgstr "" msgid "Allowed IPs" msgstr "" -msgid "" -"Also see <a href=\"https://www.sixxs.net/faq/connectivity/?faq=comparison" -"\">Tunneling Comparison</a> on SIXXS" -msgstr "" - msgid "Always announce default router" msgstr "" @@ -402,6 +391,9 @@ msgstr "" msgid "Apply unchecked" msgstr "" +msgid "Architecture" +msgstr "" + msgid "" "Assign a part of given length of every public IPv6-prefix to this interface" msgstr "" @@ -416,6 +408,9 @@ msgstr "" msgid "Associated Stations" msgstr "" +msgid "Associations" +msgstr "" + msgid "Auth Group" msgstr "" @@ -435,7 +430,7 @@ msgid "Auto Refresh" msgstr "Otomatik Yenileme" msgid "Automatic" -msgstr "" +msgstr "Otomatik" msgid "Automatic Homenet (HNCP)" msgstr "" @@ -474,7 +469,7 @@ msgid "BR / DMR / AFTR" msgstr "" msgid "BSSID" -msgstr "" +msgstr "BSSID" msgid "Back" msgstr "Geri" @@ -506,9 +501,6 @@ msgstr "" msgid "Band" msgstr "" -msgid "Behind NAT" -msgstr "" - msgid "" "Below is the determined list of files to backup. It consists of changed " "configuration files marked by opkg, essential base files and the user " @@ -560,19 +552,19 @@ msgid "CA certificate; if empty it will be saved after the first connection." msgstr "" msgid "CPU usage (%)" -msgstr "" +msgstr "CPU kullanımı (%)" msgid "Cancel" -msgstr "" +msgstr "Vazgeç" msgid "Category" -msgstr "" +msgstr "Kategori" msgid "Chain" -msgstr "" +msgstr "Zincir" msgid "Changes" -msgstr "" +msgstr "DeÄŸiÅŸiklikler" msgid "Changes applied." msgstr "" @@ -584,7 +576,7 @@ msgid "Changes the administrator password for accessing the device" msgstr "" msgid "Channel" -msgstr "" +msgstr "Kanal" msgid "" "Channel %d is not available in the %s regulatory domain and has been auto-" @@ -681,9 +673,6 @@ msgstr "" msgid "Connection Limit" msgstr "" -msgid "Connection to server fails when TLS cannot be used" -msgstr "" - msgid "Connections" msgstr "" @@ -819,9 +808,6 @@ msgstr "" msgid "Default is stateless + stateful" msgstr "" -msgid "Default route" -msgstr "" - msgid "Default state" msgstr "" @@ -1340,9 +1326,6 @@ msgstr "" msgid "Header Error Code Errors (HEC)" msgstr "" -msgid "Heartbeat" -msgstr "" - msgid "" "Here you can configure the basic aspects of your device like its hostname or " "the timezone." @@ -1398,7 +1381,7 @@ msgstr "" msgid "IPv4 Firewall" msgstr "" -msgid "IPv4 WAN Status" +msgid "IPv4 Upstream" msgstr "" msgid "IPv4 address" @@ -1449,15 +1432,12 @@ msgstr "" msgid "IPv6 ULA-Prefix" msgstr "" -msgid "IPv6 WAN Status" +msgid "IPv6 Upstream" msgstr "" msgid "IPv6 address" msgstr "" -msgid "IPv6 address delegated to the local tunnel endpoint (optional)" -msgstr "" - msgid "IPv6 assignment hint" msgstr "" @@ -1847,10 +1827,10 @@ msgid "Logging" msgstr "" msgid "Login" -msgstr "" +msgstr "Oturum Aç" msgid "Logout" -msgstr "" +msgstr "Oturumu Kapat" msgid "Loss of Signal Seconds (LOSS)" msgstr "" @@ -2023,9 +2003,6 @@ msgstr "" msgid "NTP server candidates" msgstr "" -msgid "NTP sync time-out" -msgstr "" - msgid "Name" msgstr "" @@ -2197,12 +2174,6 @@ msgstr "" msgid "Optional" msgstr "" -msgid "Optional, specify to override default server (tic.sixxs.net)" -msgstr "" - -msgid "Optional, use when the SIXXS account has more than one tunnel" -msgstr "" - msgid "" "Optional. 32-bit mark for outgoing encrypted packets. Enter value in hex, " "starting with <code>0x</code>." @@ -2661,9 +2632,6 @@ msgstr "" msgid "Request IPv6-prefix of length" msgstr "" -msgid "Require TLS" -msgstr "" - msgid "Required" msgstr "" @@ -2693,13 +2661,13 @@ msgid "" msgstr "" msgid "Reset" -msgstr "" +msgstr "Sıfırla" msgid "Reset Counters" -msgstr "" +msgstr "Sayaçları Sıfırla" msgid "Reset to defaults" -msgstr "" +msgstr "Varsayılanlara dön" msgid "Resolv and Hosts Files" msgstr "" @@ -2708,22 +2676,22 @@ msgid "Resolve file" msgstr "" msgid "Restart" -msgstr "" +msgstr "Tekrar baÅŸlat" msgid "Restart Firewall" msgstr "" msgid "Restore backup" -msgstr "" +msgstr "Yedeklemeyi geri yükle" msgid "Reveal/hide password" msgstr "" msgid "Revert" -msgstr "" +msgstr "Dönmek" msgid "Revert changes" -msgstr "" +msgstr "DeÄŸiÅŸiklikleri geri al" msgid "Revert request failed with status <code>%h</code>" msgstr "" @@ -2732,7 +2700,7 @@ msgid "Reverting configuration…" msgstr "" msgid "Root" -msgstr "" +msgstr "Kök" msgid "Root directory for files served via TFTP" msgstr "" @@ -2744,19 +2712,16 @@ msgid "Route Allowed IPs" msgstr "" msgid "Route type" -msgstr "" - -msgid "Routed IPv6 prefix for downstream interfaces" -msgstr "" +msgstr "Yönlendirme Tipi" msgid "Router Advertisement-Service" msgstr "" msgid "Router Password" -msgstr "" +msgstr "Yönlendirici Parolası" msgid "Routes" -msgstr "" +msgstr "Yönlendirmeler" msgid "" "Routes specify over which interface and gateway a certain host or network " @@ -2764,60 +2729,52 @@ msgid "" msgstr "" msgid "Run a filesystem check before mounting the device" -msgstr "" +msgstr "Cihazı baÄŸlamadan önce bir dosya sistemi kontrolü yapın" msgid "Run filesystem check" -msgstr "" +msgstr "Dosya sistemi kontrolünü çalıştır" msgid "SHA256" -msgstr "" - -msgid "" -"SIXXS supports TIC only, for static tunnels using IP protocol 41 (RFC4213) " -"use 6in4 instead" -msgstr "" - -msgid "SIXXS-handle[/Tunnel-ID]" -msgstr "" +msgstr "SHA256" msgid "SNR" -msgstr "" +msgstr "SNR" msgid "SSH Access" -msgstr "" +msgstr "SSH EriÅŸimi" msgid "SSH server address" -msgstr "" +msgstr "SSH sunucu adresi" msgid "SSH server port" -msgstr "" +msgstr "SSH sunucu portu" msgid "SSH username" -msgstr "" +msgstr "SSH kullanıcı adı" msgid "SSH-Keys" msgstr "" msgid "SSID" -msgstr "" +msgstr "SSID" msgid "Save" -msgstr "" +msgstr "Kaydet" msgid "Save & Apply" -msgstr "" +msgstr "Kaydet & Uygula" msgid "Scan" -msgstr "" +msgstr "Tara" msgid "Scheduled Tasks" -msgstr "" +msgstr "Zamanlanmış Görevler" msgid "Section added" -msgstr "" +msgstr "Bölüm eklendi" msgid "Section removed" -msgstr "" +msgstr "Bölüm kaldırıldı" msgid "See \"mount\" manpage for details" msgstr "" @@ -2833,17 +2790,6 @@ msgstr "" msgid "Server Settings" msgstr "" -msgid "Server password" -msgstr "" - -msgid "" -"Server password, enter the specific password of the tunnel when the username " -"contains the tunnel ID" -msgstr "" - -msgid "Server username" -msgstr "" - msgid "Service Name" msgstr "" @@ -2851,7 +2797,7 @@ msgid "Service Type" msgstr "" msgid "Services" -msgstr "" +msgstr "Servisler" msgid "" "Set interface properties regardless of the link carrier (If set, carrier " @@ -2880,25 +2826,25 @@ msgid "Shutdown this network" msgstr "" msgid "Signal" -msgstr "" +msgstr "Sinyal" msgid "Signal Attenuation (SATN)" -msgstr "" +msgstr "Sinyal Zayıflama (SATN)" msgid "Signal:" -msgstr "" +msgstr "Sinyal:" msgid "Size" -msgstr "" +msgstr "Boyut" msgid "Size (.ipk)" -msgstr "" +msgstr "Boyut (.ipk)" msgid "Size of DNS query cache" msgstr "" msgid "Skip" -msgstr "" +msgstr "Atla" msgid "Skip to content" msgstr "" @@ -2910,7 +2856,7 @@ msgid "Slot time" msgstr "" msgid "Software" -msgstr "" +msgstr "Yazılım" msgid "Software VLAN" msgstr "" @@ -2931,13 +2877,10 @@ msgid "" msgstr "" msgid "Sort" -msgstr "" +msgstr "Sıralama" msgid "Source" -msgstr "" - -msgid "Source routing" -msgstr "" +msgstr "Kaynak" msgid "Specifies the directory the device is attached to" msgstr "" @@ -2972,7 +2915,7 @@ msgid "Specify the secret encryption key here." msgstr "" msgid "Start" -msgstr "" +msgstr "BaÅŸlat" msgid "Start priority" msgstr "" @@ -3005,16 +2948,16 @@ msgid "" msgstr "" msgid "Status" -msgstr "" +msgstr "Durum" msgid "Stop" -msgstr "" +msgstr "Durdur" msgid "Strict order" msgstr "" msgid "Submit" -msgstr "" +msgstr "Gönder" msgid "Suppress logging" msgstr "" @@ -3057,7 +3000,7 @@ msgid "Synchronizing..." msgstr "" msgid "System" -msgstr "" +msgstr "Sistem" msgid "System Log" msgstr "" @@ -3209,11 +3152,6 @@ msgid "" msgstr "" msgid "" -"The tunnel end-point is behind NAT, defaults to disabled and only applies to " -"AYIYA" -msgstr "" - -msgid "" "The uploaded image file does not contain a supported format. Make sure that " "you choose the generic image format for your platform." msgstr "" @@ -3356,15 +3294,6 @@ msgstr "" msgid "Tunnel Link" msgstr "" -msgid "Tunnel broker protocol" -msgstr "" - -msgid "Tunnel setup server" -msgstr "" - -msgid "Tunnel type" -msgstr "" - msgid "Tx-Power" msgstr "" @@ -3426,10 +3355,10 @@ msgid "Upload archive..." msgstr "" msgid "Uploaded File" -msgstr "" +msgstr "Yüklenen Dosya" msgid "Uptime" -msgstr "" +msgstr "Açılma süresi" msgid "Use <code>/etc/ethers</code>" msgstr "" @@ -3462,16 +3391,16 @@ msgid "Use builtin IPv6-management" msgstr "" msgid "Use custom DNS servers" -msgstr "" +msgstr "Özel DNS sunucularını kullan" msgid "Use default gateway" -msgstr "" +msgstr "Varsayılan aÄŸ geçidini kullan" msgid "Use gateway metric" -msgstr "" +msgstr "AÄŸ geçidi metriÄŸini kullan" msgid "Use routing table" -msgstr "" +msgstr "Yönlendirme tablosunu kullan" msgid "" "Use the <em>Add</em> Button to add a new lease entry. The <em>MAC-Address</" @@ -3482,7 +3411,7 @@ msgid "" msgstr "" msgid "Used" -msgstr "" +msgstr "Kullanılmış" msgid "Used Key Slot" msgstr "" @@ -3499,7 +3428,7 @@ msgid "User key (PEM encoded)" msgstr "" msgid "Username" -msgstr "" +msgstr "Kullanıcı adı" msgid "VC-Mux" msgstr "" @@ -3532,22 +3461,16 @@ msgid "VPNC (CISCO 3000 (and others) VPN)" msgstr "" msgid "Vendor" -msgstr "" +msgstr "Satıcı" msgid "Vendor Class to send when requesting DHCP" msgstr "" -msgid "Verbose" -msgstr "" - -msgid "Verbose logging by aiccu daemon" -msgstr "" - msgid "Verify" -msgstr "" +msgstr "Kontrol" msgid "Version" -msgstr "" +msgstr "Versiyon" msgid "WDS" msgstr "" @@ -3572,10 +3495,6 @@ msgid "" "and ad-hoc mode) to be installed." msgstr "" -msgid "" -"Wait for NTP sync that many seconds, seting to 0 disables waiting (optional)" -msgstr "" - msgid "Waiting for changes to be applied..." msgstr "" @@ -3589,7 +3508,7 @@ msgid "Waiting for device..." msgstr "" msgid "Warning" -msgstr "" +msgstr "Uyarı" msgid "Warning: There are unsaved changes that will get lost on reboot!" msgstr "" @@ -3599,20 +3518,14 @@ msgid "" "communications" msgstr "" -msgid "Whether to create an IPv6 default route over the tunnel" -msgstr "" - -msgid "Whether to route only packets from delegated prefixes" -msgstr "" - msgid "Width" -msgstr "" +msgstr "GeniÅŸlik" msgid "WireGuard VPN" msgstr "" msgid "Wireless" -msgstr "" +msgstr "Kablosuz" msgid "Wireless Adapter" msgstr "" @@ -3675,28 +3588,28 @@ msgid "auto" msgstr "otomatik" msgid "baseT" -msgstr "" +msgstr "baseT" msgid "bridged" msgstr "köprülü" msgid "create:" -msgstr "" +msgstr "oluÅŸturma:" msgid "creates a bridge over specified interface(s)" msgstr "" msgid "dB" -msgstr "" +msgstr "dB" msgid "dBm" -msgstr "" +msgstr "dBm" msgid "disable" msgstr "etkin deÄŸil" msgid "disabled" -msgstr "" +msgstr "devre dışı" msgid "expired" msgstr "sona ermiÅŸ" @@ -3710,19 +3623,19 @@ msgid "forward" msgstr "ileri" msgid "full-duplex" -msgstr "" +msgstr "tam çift yönlü" msgid "half-duplex" -msgstr "" +msgstr "yarı çift yönlü" msgid "help" msgstr "yardım" msgid "hidden" -msgstr "" +msgstr "gizli" msgid "hybrid mode" -msgstr "" +msgstr "hibrit mod" msgid "if target is a network" msgstr "eÄŸer hedef aÄŸsa" @@ -3731,34 +3644,31 @@ msgid "input" msgstr "giriÅŸ" msgid "kB" -msgstr "" +msgstr "kB" msgid "kB/s" -msgstr "" +msgstr "kB/s" msgid "kbit/s" -msgstr "" +msgstr "kbit/s" msgid "local <abbr title=\"Domain Name System\">DNS</abbr> file" msgstr "yerel <abbr title=\"Domain Name System\">DNS</abbr> dosyası" -msgid "minimum 1280, maximum 1480" -msgstr "" - msgid "minutes" -msgstr "" +msgstr "dakika" msgid "no" msgstr "hayır" msgid "no link" -msgstr "" +msgstr "baÄŸlantı yok" msgid "none" msgstr "hiçbiri" msgid "not present" -msgstr "" +msgstr "mevcut deÄŸil" msgid "off" msgstr "kapalı" @@ -3767,31 +3677,31 @@ msgid "on" msgstr "açık" msgid "open" -msgstr "" +msgstr "açık" msgid "overlay" -msgstr "" +msgstr "bindirilmiÅŸ" msgid "random" -msgstr "" +msgstr "rastgele" msgid "relay mode" -msgstr "" +msgstr "anahtarlama modu" msgid "routed" msgstr "yönlendirildi" msgid "server mode" -msgstr "" +msgstr "sunucu modu" msgid "stateful-only" msgstr "" msgid "stateless" -msgstr "" +msgstr "durumsuz" msgid "stateless + stateful" -msgstr "" +msgstr "durumsuz + durumlu" msgid "tagged" msgstr "etiketlendi" @@ -3800,7 +3710,7 @@ msgid "time units (TUs / 1.024 ms) [1000-65535]" msgstr "" msgid "unknown" -msgstr "" +msgstr "bilinmeyen" msgid "unlimited" msgstr "sınırsız" diff --git a/modules/luci-base/po/uk/base.po b/modules/luci-base/po/uk/base.po index e86bd81a8..ce7767500 100644 --- a/modules/luci-base/po/uk/base.po +++ b/modules/luci-base/po/uk/base.po @@ -183,9 +183,6 @@ msgstr "" msgid "ADSL" msgstr "" -msgid "AICCU (SIXXS)" -msgstr "" - msgid "ANSI T1.413" msgstr "" @@ -227,9 +224,6 @@ msgstr "Ðомер ATM-приÑтрою" msgid "ATU-C System Vendor ID" msgstr "" -msgid "AYIYA" -msgstr "" - msgid "Access Concentrator" msgstr "Концентратор доÑтупу" @@ -337,11 +331,6 @@ msgstr "" msgid "Allowed IPs" msgstr "" -msgid "" -"Also see <a href=\"https://www.sixxs.net/faq/connectivity/?faq=comparison" -"\">Tunneling Comparison</a> on SIXXS" -msgstr "" - msgid "Always announce default router" msgstr "" @@ -426,6 +415,9 @@ msgstr "" msgid "Apply unchecked" msgstr "" +msgid "Architecture" +msgstr "" + msgid "" "Assign a part of given length of every public IPv6-prefix to this interface" msgstr "" @@ -440,6 +432,9 @@ msgstr "" msgid "Associated Stations" msgstr "Приєднані Ñтанції" +msgid "Associations" +msgstr "" + msgid "Auth Group" msgstr "" @@ -530,9 +525,6 @@ msgstr "Вказана неправильна адреÑа!" msgid "Band" msgstr "" -msgid "Behind NAT" -msgstr "" - msgid "" "Below is the determined list of files to backup. It consists of changed " "configuration files marked by opkg, essential base files and the user " @@ -719,9 +711,6 @@ msgstr "Підключений" msgid "Connection Limit" msgstr "Гранична кількіÑÑ‚ÑŒ підключень" -msgid "Connection to server fails when TLS cannot be used" -msgstr "" - msgid "Connections" msgstr "ПідключеннÑ" @@ -859,9 +848,6 @@ msgstr "Типовий шлюз" msgid "Default is stateless + stateful" msgstr "" -msgid "Default route" -msgstr "" - msgid "Default state" msgstr "Типовий Ñтан" @@ -1403,9 +1389,6 @@ msgstr "Призупинити" msgid "Header Error Code Errors (HEC)" msgstr "" -msgid "Heartbeat" -msgstr "" - msgid "" "Here you can configure the basic aspects of your device like its hostname or " "the timezone." @@ -1467,8 +1450,8 @@ msgstr "IPv4" msgid "IPv4 Firewall" msgstr "Брандмауер IPv4" -msgid "IPv4 WAN Status" -msgstr "Ð¡Ñ‚Ð°Ñ‚ÑƒÑ IPv4 WAN" +msgid "IPv4 Upstream" +msgstr "" msgid "IPv4 address" msgstr "ÐдреÑа IPv4" @@ -1518,15 +1501,12 @@ msgstr "" msgid "IPv6 ULA-Prefix" msgstr "" -msgid "IPv6 WAN Status" -msgstr "Ð¡Ñ‚Ð°Ñ‚ÑƒÑ IPv6 WAN" +msgid "IPv6 Upstream" +msgstr "" msgid "IPv6 address" msgstr "ÐдреÑа IPv6" -msgid "IPv6 address delegated to the local tunnel endpoint (optional)" -msgstr "" - msgid "IPv6 assignment hint" msgstr "" @@ -2119,9 +2099,6 @@ msgstr "" msgid "NTP server candidates" msgstr "Кандидати Ð´Ð»Ñ Ñинхронізації NTP-Ñервера" -msgid "NTP sync time-out" -msgstr "" - msgid "Name" msgstr "Ім'Ñ" @@ -2299,12 +2276,6 @@ msgstr "ÐžÐ¿Ñ†Ñ–Ñ Ð²Ð¸Ð´Ð°Ð»ÐµÐ½Ð°" msgid "Optional" msgstr "" -msgid "Optional, specify to override default server (tic.sixxs.net)" -msgstr "" - -msgid "Optional, use when the SIXXS account has more than one tunnel" -msgstr "" - msgid "" "Optional. 32-bit mark for outgoing encrypted packets. Enter value in hex, " "starting with <code>0x</code>." @@ -2786,9 +2757,6 @@ msgstr "" msgid "Request IPv6-prefix of length" msgstr "" -msgid "Require TLS" -msgstr "" - msgid "Required" msgstr "" @@ -2871,9 +2839,6 @@ msgstr "" msgid "Route type" msgstr "" -msgid "Routed IPv6 prefix for downstream interfaces" -msgstr "" - msgid "Router Advertisement-Service" msgstr "" @@ -2899,14 +2864,6 @@ msgstr "Виконати перевірку файлової ÑиÑтеми" msgid "SHA256" msgstr "" -msgid "" -"SIXXS supports TIC only, for static tunnels using IP protocol 41 (RFC4213) " -"use 6in4 instead" -msgstr "" - -msgid "SIXXS-handle[/Tunnel-ID]" -msgstr "" - msgid "SNR" msgstr "" @@ -2962,17 +2919,6 @@ msgstr "РозділÑти клієнтів" msgid "Server Settings" msgstr "ÐаÑтройки Ñервера" -msgid "Server password" -msgstr "" - -msgid "" -"Server password, enter the specific password of the tunnel when the username " -"contains the tunnel ID" -msgstr "" - -msgid "Server username" -msgstr "" - msgid "Service Name" msgstr "Ðазва (ім'Ñ) ÑервіÑу" @@ -3069,9 +3015,6 @@ msgstr "СортуваннÑ" msgid "Source" msgstr "Джерело" -msgid "Source routing" -msgstr "" - msgid "Specifies the directory the device is attached to" msgstr "Визначає каталог, до Ñкого приєднаний приÑтрій" @@ -3386,11 +3329,6 @@ msgstr "" "адреÑу вашого комп'ютера, щоб знову отримати доÑтуп до приÑтрою." msgid "" -"The tunnel end-point is behind NAT, defaults to disabled and only applies to " -"AYIYA" -msgstr "" - -msgid "" "The uploaded image file does not contain a supported format. Make sure that " "you choose the generic image format for your platform." msgstr "" @@ -3556,15 +3494,6 @@ msgstr "Ð†Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ Ñ‚ÑƒÐ½ÐµÐ»ÑŽ" msgid "Tunnel Link" msgstr "" -msgid "Tunnel broker protocol" -msgstr "" - -msgid "Tunnel setup server" -msgstr "" - -msgid "Tunnel type" -msgstr "" - msgid "Tx-Power" msgstr "ПотужніÑÑ‚ÑŒ передавача" @@ -3744,12 +3673,6 @@ msgstr "" msgid "Vendor Class to send when requesting DHCP" msgstr "ÐšÐ»Ð°Ñ Ð¿Ð¾Ñтачальника Ð´Ð»Ñ Ð²Ñ–Ð´Ð¿Ñ€Ð°Ð²ÐºÐ¸ при запиті DHCP" -msgid "Verbose" -msgstr "" - -msgid "Verbose logging by aiccu daemon" -msgstr "" - msgid "Verify" msgstr "Перевірте" @@ -3781,10 +3704,6 @@ msgstr "" "WPA-ÑˆÐ¸Ñ„Ñ€ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ð¾Ñ‚Ñ€ÐµÐ±ÑƒÑ” інÑталÑції <em>wpa_supplicant</em> (Ð´Ð»Ñ Ñ€ÐµÐ¶Ð¸Ð¼Ñƒ " "клієнта) або <em>hostapd</em> (Ð´Ð»Ñ Ð¢Ð¾Ñ‡ÐºÐ¸ доÑтупу та режиму ad-hoc)." -msgid "" -"Wait for NTP sync that many seconds, seting to 0 disables waiting (optional)" -msgstr "" - msgid "Waiting for changes to be applied..." msgstr "Очікуємо, доки зміни наберуть чинноÑÑ‚Ñ–..." @@ -3808,12 +3727,6 @@ msgid "" "communications" msgstr "" -msgid "Whether to create an IPv6 default route over the tunnel" -msgstr "" - -msgid "Whether to route only packets from delegated prefixes" -msgstr "" - msgid "Width" msgstr "" @@ -3959,9 +3872,6 @@ msgstr "" "Локальний <abbr title=\"Domain Name System — ÑиÑтема доменних імен\">DNS</" "abbr>-файл" -msgid "minimum 1280, maximum 1480" -msgstr "" - msgid "minutes" msgstr "" @@ -4037,6 +3947,12 @@ msgstr "так" msgid "« Back" msgstr "« Ðазад" +#~ msgid "IPv4 WAN Status" +#~ msgstr "Ð¡Ñ‚Ð°Ñ‚ÑƒÑ IPv4 WAN" + +#~ msgid "IPv6 WAN Status" +#~ msgstr "Ð¡Ñ‚Ð°Ñ‚ÑƒÑ IPv6 WAN" + #~ msgid "Apply" #~ msgstr "ЗаÑтоÑувати" diff --git a/modules/luci-base/po/vi/base.po b/modules/luci-base/po/vi/base.po index 8dacc12e6..c70b740dd 100644 --- a/modules/luci-base/po/vi/base.po +++ b/modules/luci-base/po/vi/base.po @@ -166,9 +166,6 @@ msgstr "" msgid "ADSL" msgstr "" -msgid "AICCU (SIXXS)" -msgstr "" - msgid "ANSI T1.413" msgstr "" @@ -202,9 +199,6 @@ msgstr "" msgid "ATU-C System Vendor ID" msgstr "" -msgid "AYIYA" -msgstr "" - msgid "Access Concentrator" msgstr "" @@ -307,11 +301,6 @@ msgstr "" msgid "Allowed IPs" msgstr "" -msgid "" -"Also see <a href=\"https://www.sixxs.net/faq/connectivity/?faq=comparison" -"\">Tunneling Comparison</a> on SIXXS" -msgstr "" - msgid "Always announce default router" msgstr "" @@ -396,6 +385,9 @@ msgstr "" msgid "Apply unchecked" msgstr "" +msgid "Architecture" +msgstr "" + msgid "" "Assign a part of given length of every public IPv6-prefix to this interface" msgstr "" @@ -410,6 +402,9 @@ msgstr "" msgid "Associated Stations" msgstr "" +msgid "Associations" +msgstr "" + msgid "Auth Group" msgstr "" @@ -500,9 +495,6 @@ msgstr "" msgid "Band" msgstr "" -msgid "Behind NAT" -msgstr "" - msgid "" "Below is the determined list of files to backup. It consists of changed " "configuration files marked by opkg, essential base files and the user " @@ -675,9 +667,6 @@ msgstr "" msgid "Connection Limit" msgstr "Giá»›i hạn kết nối" -msgid "Connection to server fails when TLS cannot be used" -msgstr "" - msgid "Connections" msgstr "" @@ -815,9 +804,6 @@ msgstr "" msgid "Default is stateless + stateful" msgstr "" -msgid "Default route" -msgstr "" - msgid "Default state" msgstr "" @@ -1345,9 +1331,6 @@ msgstr "Hang Up" msgid "Header Error Code Errors (HEC)" msgstr "" -msgid "Heartbeat" -msgstr "" - msgid "" "Here you can configure the basic aspects of your device like its hostname or " "the timezone." @@ -1405,7 +1388,7 @@ msgstr "" msgid "IPv4 Firewall" msgstr "" -msgid "IPv4 WAN Status" +msgid "IPv4 Upstream" msgstr "" msgid "IPv4 address" @@ -1456,15 +1439,12 @@ msgstr "" msgid "IPv6 ULA-Prefix" msgstr "" -msgid "IPv6 WAN Status" +msgid "IPv6 Upstream" msgstr "" msgid "IPv6 address" msgstr "" -msgid "IPv6 address delegated to the local tunnel endpoint (optional)" -msgstr "" - msgid "IPv6 assignment hint" msgstr "" @@ -2040,9 +2020,6 @@ msgstr "" msgid "NTP server candidates" msgstr "" -msgid "NTP sync time-out" -msgstr "" - msgid "Name" msgstr "Tên" @@ -2220,12 +2197,6 @@ msgstr "" msgid "Optional" msgstr "" -msgid "Optional, specify to override default server (tic.sixxs.net)" -msgstr "" - -msgid "Optional, use when the SIXXS account has more than one tunnel" -msgstr "" - msgid "" "Optional. 32-bit mark for outgoing encrypted packets. Enter value in hex, " "starting with <code>0x</code>." @@ -2686,9 +2657,6 @@ msgstr "" msgid "Request IPv6-prefix of length" msgstr "" -msgid "Require TLS" -msgstr "" - msgid "Required" msgstr "" @@ -2771,9 +2739,6 @@ msgstr "" msgid "Route type" msgstr "" -msgid "Routed IPv6 prefix for downstream interfaces" -msgstr "" - msgid "Router Advertisement-Service" msgstr "" @@ -2799,14 +2764,6 @@ msgstr "" msgid "SHA256" msgstr "" -msgid "" -"SIXXS supports TIC only, for static tunnels using IP protocol 41 (RFC4213) " -"use 6in4 instead" -msgstr "" - -msgid "SIXXS-handle[/Tunnel-ID]" -msgstr "" - msgid "SNR" msgstr "" @@ -2860,17 +2817,6 @@ msgstr "Cô láºp đối tượng" msgid "Server Settings" msgstr "" -msgid "Server password" -msgstr "" - -msgid "" -"Server password, enter the specific password of the tunnel when the username " -"contains the tunnel ID" -msgstr "" - -msgid "Server username" -msgstr "" - msgid "Service Name" msgstr "" @@ -2963,9 +2909,6 @@ msgstr "" msgid "Source" msgstr "Nguồn" -msgid "Source routing" -msgstr "" - msgid "Specifies the directory the device is attached to" msgstr "" @@ -3244,11 +3187,6 @@ msgstr "" "máy tÃnh để tiếp cáºn thiết bị má»™t lần nữa, phụ thuá»™c và o cà i đặt của bạn. " msgid "" -"The tunnel end-point is behind NAT, defaults to disabled and only applies to " -"AYIYA" -msgstr "" - -msgid "" "The uploaded image file does not contain a supported format. Make sure that " "you choose the generic image format for your platform." msgstr "" @@ -3398,15 +3336,6 @@ msgstr "" msgid "Tunnel Link" msgstr "" -msgid "Tunnel broker protocol" -msgstr "" - -msgid "Tunnel setup server" -msgstr "" - -msgid "Tunnel type" -msgstr "" - msgid "Tx-Power" msgstr "" @@ -3579,12 +3508,6 @@ msgstr "" msgid "Vendor Class to send when requesting DHCP" msgstr "" -msgid "Verbose" -msgstr "" - -msgid "Verbose logging by aiccu daemon" -msgstr "" - msgid "Verify" msgstr "" @@ -3614,10 +3537,6 @@ msgid "" "and ad-hoc mode) to be installed." msgstr "" -msgid "" -"Wait for NTP sync that many seconds, seting to 0 disables waiting (optional)" -msgstr "" - msgid "Waiting for changes to be applied..." msgstr "" @@ -3641,12 +3560,6 @@ msgid "" "communications" msgstr "" -msgid "Whether to create an IPv6 default route over the tunnel" -msgstr "" - -msgid "Whether to route only packets from delegated prefixes" -msgstr "" - msgid "Width" msgstr "" @@ -3788,9 +3701,6 @@ msgstr "" msgid "local <abbr title=\"Domain Name System\">DNS</abbr> file" msgstr "Táºp tin <abbr title=\"Domain Name System\">DNS</abbr> địa phÆ°Æ¡ng" -msgid "minimum 1280, maximum 1480" -msgstr "" - msgid "minutes" msgstr "" diff --git a/modules/luci-base/po/zh-cn/base.po b/modules/luci-base/po/zh-cn/base.po index 8399e947b..f588adcfa 100644 --- a/modules/luci-base/po/zh-cn/base.po +++ b/modules/luci-base/po/zh-cn/base.po @@ -162,9 +162,6 @@ msgstr "A43C + J43 + A43 + V43" msgid "ADSL" msgstr "ADSL" -msgid "AICCU (SIXXS)" -msgstr "AICCU (SIXXS)" - msgid "ANSI T1.413" msgstr "ANSI T1.413" @@ -200,9 +197,6 @@ msgstr "ATM 设备å·ç " msgid "ATU-C System Vendor ID" msgstr "ATU-C 系统供应商 ID" -msgid "AYIYA" -msgstr "AYIYA" - msgid "Access Concentrator" msgstr "接入集ä¸å™¨" @@ -305,13 +299,6 @@ msgstr "å…许 127.0.0.0/8 回环范围内的上行å“应,例如:RBL æœåŠ¡" msgid "Allowed IPs" msgstr "å…许的 IP" -msgid "" -"Also see <a href=\"https://www.sixxs.net/faq/connectivity/?faq=comparison" -"\">Tunneling Comparison</a> on SIXXS" -msgstr "" -"也请查看 SIXXS 上的<a href=\"https://www.sixxs.net/faq/connectivity/?" -"faq=comparison\">隧é“对比</a>" - msgid "Always announce default router" msgstr "总是通告默认路由" @@ -396,6 +383,9 @@ msgstr "" msgid "Apply unchecked" msgstr "" +msgid "Architecture" +msgstr "" + msgid "" "Assign a part of given length of every public IPv6-prefix to this interface" msgstr "å°†æ¯ä¸ªå…¬å…± IPv6 å‰ç¼€çš„给定长度部分分é…ç»™æ¤æŽ¥å£" @@ -410,6 +400,9 @@ msgstr "å°†æ¤åå…进制å ID å‰ç¼€åˆ†é…ç»™æ¤æŽ¥å£" msgid "Associated Stations" msgstr "已连接站点" +msgid "Associations" +msgstr "" + msgid "Auth Group" msgstr "认è¯ç»„" @@ -500,9 +493,6 @@ msgstr "指定了错误的地å€ï¼" msgid "Band" msgstr "频宽" -msgid "Behind NAT" -msgstr "在 NAT 网络内" - msgid "" "Below is the determined list of files to backup. It consists of changed " "configuration files marked by opkg, essential base files and the user " @@ -684,9 +674,6 @@ msgstr "已连接" msgid "Connection Limit" msgstr "连接数é™åˆ¶" -msgid "Connection to server fails when TLS cannot be used" -msgstr "当 TLS ä¸å¯ç”¨æ—¶ï¼Œä¸ŽæœåŠ¡å™¨è¿žæŽ¥å¤±è´¥" - msgid "Connections" msgstr "连接" @@ -823,9 +810,6 @@ msgstr "默认网关" msgid "Default is stateless + stateful" msgstr "é»˜è®¤æ˜¯æ— çŠ¶æ€çš„ + 有状æ€çš„" -msgid "Default route" -msgstr "默认路由" - msgid "Default state" msgstr "默认状æ€" @@ -1357,9 +1341,6 @@ msgstr "挂起" msgid "Header Error Code Errors (HEC)" msgstr "请求头错误代ç 错误(HEC)" -msgid "Heartbeat" -msgstr "心跳" - msgid "" "Here you can configure the basic aspects of your device like its hostname or " "the timezone." @@ -1415,8 +1396,8 @@ msgstr "IPv4" msgid "IPv4 Firewall" msgstr "IPv4 防ç«å¢™" -msgid "IPv4 WAN Status" -msgstr "IPv4 WAN 状æ€" +msgid "IPv4 Upstream" +msgstr "" msgid "IPv4 address" msgstr "IPv4 地å€" @@ -1466,15 +1447,12 @@ msgstr "IPv6 设置" msgid "IPv6 ULA-Prefix" msgstr "IPv6 ULA å‰ç¼€" -msgid "IPv6 WAN Status" -msgstr "IPv6 WAN 状æ€" +msgid "IPv6 Upstream" +msgstr "" msgid "IPv6 address" msgstr "IPv6 地å€" -msgid "IPv6 address delegated to the local tunnel endpoint (optional)" -msgstr "绑定到隧é“本端的 IPv6 地å€ï¼ˆå¯é€‰ï¼‰" - msgid "IPv6 assignment hint" msgstr "IPv6 分é…æ示" @@ -2056,9 +2034,6 @@ msgstr "NT 域" msgid "NTP server candidates" msgstr "候选 NTP æœåŠ¡å™¨" -msgid "NTP sync time-out" -msgstr "NTP åŒæ¥è¶…æ—¶" - msgid "Name" msgstr "å称" @@ -2234,12 +2209,6 @@ msgstr "移除的选项" msgid "Optional" msgstr "å¯é€‰" -msgid "Optional, specify to override default server (tic.sixxs.net)" -msgstr "å¯é€‰ï¼Œè®¾ç½®è¿™ä¸ªé€‰é¡¹ä¼šè¦†ç›–默认æœåŠ¡å™¨ï¼ˆtic.sixxs.net)" - -msgid "Optional, use when the SIXXS account has more than one tunnel" -msgstr "å¯é€‰ï¼Œå¦‚果您的 SIXXS è´¦å·æ‹¥æœ‰ä¸€ä¸ªä»¥ä¸Šçš„隧é“请设置æ¤é¡¹" - msgid "" "Optional. 32-bit mark for outgoing encrypted packets. Enter value in hex, " "starting with <code>0x</code>." @@ -2713,9 +2682,6 @@ msgstr "请求 IPv6 地å€" msgid "Request IPv6-prefix of length" msgstr "请求指定长度的 IPv6 å‰ç¼€" -msgid "Require TLS" -msgstr "必须使用 TLS" - msgid "Required" msgstr "å¿…é¡»" @@ -2802,9 +2768,6 @@ msgstr "路由å…许的 IP" msgid "Route type" msgstr "路由类型" -msgid "Routed IPv6 prefix for downstream interfaces" -msgstr "下行接å£çš„路由 IPv6 å‰ç¼€" - msgid "Router Advertisement-Service" msgstr "路由通告æœåŠ¡" @@ -2828,14 +2791,6 @@ msgstr "文件系统检查" msgid "SHA256" msgstr "SHA256" -msgid "" -"SIXXS supports TIC only, for static tunnels using IP protocol 41 (RFC4213) " -"use 6in4 instead" -msgstr "SIXXS ä»…æ”¯æŒ TIC,对于使用 IP åè®® 41(RFC4213)的é™æ€éš§é“,使用 6in4" - -msgid "SIXXS-handle[/Tunnel-ID]" -msgstr "SIXXS-handle[/Tunnel-ID]" - msgid "SNR" msgstr "SNR" @@ -2889,17 +2844,6 @@ msgstr "隔离客户端" msgid "Server Settings" msgstr "æœåŠ¡å™¨è®¾ç½®" -msgid "Server password" -msgstr "æœåŠ¡å™¨å¯†ç " - -msgid "" -"Server password, enter the specific password of the tunnel when the username " -"contains the tunnel ID" -msgstr "æœåŠ¡å™¨å¯†ç ,如果用户å包å«éš§é“ ID 则在æ¤å¡«å†™éš§é“自己的密ç " - -msgid "Server username" -msgstr "æœåŠ¡å™¨ç”¨æˆ·å" - msgid "Service Name" msgstr "æœåŠ¡å" @@ -2996,9 +2940,6 @@ msgstr "排åº" msgid "Source" msgstr "æºåœ°å€" -msgid "Source routing" -msgstr "æºè·¯ç”±" - msgid "Specifies the directory the device is attached to" msgstr "指定设备的挂载目录" @@ -3286,11 +3227,6 @@ msgstr "" "é’ŸåŽå³å¯å°è¯•é‡æ–°è¿žæŽ¥åˆ°è·¯ç”±ã€‚您å¯èƒ½éœ€è¦æ›´æ”¹è®¡ç®—机的 IP 地å€ä»¥é‡æ–°è¿žæŽ¥ã€‚" msgid "" -"The tunnel end-point is behind NAT, defaults to disabled and only applies to " -"AYIYA" -msgstr "隧é“端点在 NAT 之åŽï¼Œé»˜è®¤ä¸ºç¦ç”¨ï¼Œä»…适用于 AYIYA" - -msgid "" "The uploaded image file does not contain a supported format. Make sure that " "you choose the generic image format for your platform." msgstr "ä¸æ”¯æŒæ‰€ä¸Šä¼ çš„æ˜ åƒæ–‡ä»¶æ ¼å¼ï¼Œè¯·é€‰æ‹©é€‚åˆå½“å‰å¹³å°çš„é€šç”¨æ˜ åƒæ–‡ä»¶ã€‚" @@ -3439,15 +3375,6 @@ msgstr "隧é“接å£" msgid "Tunnel Link" msgstr "隧é“链接" -msgid "Tunnel broker protocol" -msgstr "隧é“åè®®" - -msgid "Tunnel setup server" -msgstr "隧é“é…ç½®æœåŠ¡å™¨" - -msgid "Tunnel type" -msgstr "隧é“类型" - msgid "Tx-Power" msgstr "ä¼ è¾“åŠŸçŽ‡" @@ -3627,12 +3554,6 @@ msgstr "Vendor" msgid "Vendor Class to send when requesting DHCP" msgstr "请求 DHCP æ—¶å‘é€çš„ Vendor Class 选项" -msgid "Verbose" -msgstr "详细" - -msgid "Verbose logging by aiccu daemon" -msgstr "Aiccu 守护程åºè¯¦ç»†æ—¥å¿—" - msgid "Verify" msgstr "验è¯" @@ -3664,10 +3585,6 @@ msgstr "" "WPA åŠ å¯†éœ€è¦å®‰è£… wpa_supplicant(客户端模å¼ï¼‰æˆ–安装 hostapd(接入点 APã€ç‚¹å¯¹" "点 Ad-Hoc 模å¼ï¼‰ã€‚" -msgid "" -"Wait for NTP sync that many seconds, seting to 0 disables waiting (optional)" -msgstr "NTP åŒæ¥å‰çš„ç‰å¾…时间,设置为 0 表示ä¸ç‰å¾…(å¯é€‰ï¼‰" - msgid "Waiting for changes to be applied..." msgstr "æ£åœ¨åº”用更改..." @@ -3691,12 +3608,6 @@ msgid "" "communications" msgstr "当使用 PSK 时,PMK å¯ä»¥åœ¨æ²¡æœ‰ AP 间通信的情况下在本地生æˆ" -msgid "Whether to create an IPv6 default route over the tunnel" -msgstr "是å¦æ·»åŠ 一æ¡é€šå‘隧é“çš„ IPv6 默认路由" - -msgid "Whether to route only packets from delegated prefixes" -msgstr "是å¦ä»…路由æ¥è‡ªåˆ†å‘å‰ç¼€çš„æ•°æ®åŒ…" - msgid "Width" msgstr "频宽" @@ -3838,9 +3749,6 @@ msgstr "kbit/s" msgid "local <abbr title=\"Domain Name System\">DNS</abbr> file" msgstr "本地 <abbr title=\"Domain Name Syste\">DNS</abbr> 解æžæ–‡ä»¶" -msgid "minimum 1280, maximum 1480" -msgstr "最å°å€¼ 1280,最大值 1480" - msgid "minutes" msgstr "分钟" @@ -3916,137 +3824,8 @@ msgstr "是" msgid "« Back" msgstr "« åŽé€€" -#~ msgid "Apply" -#~ msgstr "应用" - -#~ msgid "Applying changes" -#~ msgstr "æ£åœ¨åº”用更改" - -#~ msgid "Configuration applied." -#~ msgstr "é…置已应用。" - -#~ msgid "Save & Apply" -#~ msgstr "ä¿å˜&应用" - -#~ msgid "The following changes have been committed" -#~ msgstr "以下更改已æ交" - -#~ msgid "There are no pending changes to apply!" -#~ msgstr "没有待生效的更改ï¼" - -#~ msgid "Action" -#~ msgstr "动作" - -#~ msgid "Buttons" -#~ msgstr "按键" - -#~ msgid "Handler" -#~ msgstr "处ç†ç¨‹åº" - -#~ msgid "Maximum hold time" -#~ msgstr "最大æŒç»æ—¶é—´" - -#~ msgid "Minimum hold time" -#~ msgstr "最低æŒç»æ—¶é—´" - -#~ msgid "Path to executable which handles the button event" -#~ msgstr "处ç†æŒ‰é”®åŠ¨ä½œçš„å¯æ‰§è¡Œæ–‡ä»¶è·¯å¾„" - -#~ msgid "Specifies the button state to handle" -#~ msgstr "指定è¦å¤„ç†çš„按键状æ€" - -#~ msgid "This page allows the configuration of custom button actions" -#~ msgstr "自定义按键动作。" - -#~ msgid "Leasetime" -#~ msgstr "租用时间" - -#~ msgid "Optional." -#~ msgstr "å¯é€‰ã€‚" - -#~ msgid "navigation Navigation" -#~ msgstr "导航" - -#~ msgid "skiplink1 Skip to navigation" -#~ msgstr "skiplink1 跳转到导航" - -#~ msgid "skiplink2 Skip to content" -#~ msgstr "skiplink2 跳到内容" - -#~ msgid "AuthGroup" -#~ msgstr "认è¯ç»„" - -#~ msgid "automatic" -#~ msgstr "自动" - -#~ msgid "AR Support" -#~ msgstr "AR 支æŒ" - -#~ msgid "Atheros 802.11%s Wireless Controller" -#~ msgstr "Qualcomm/Atheros 802.11%s æ— çº¿æŽ§åˆ¶å™¨" - -#~ msgid "Background Scan" -#~ msgstr "åŽå°æœç´¢" - -#~ msgid "Compression" -#~ msgstr "压缩" - -#~ msgid "Disable HW-Beacon timer" -#~ msgstr "åœç”¨ HW-Beacon 计时器" - -#~ msgid "Do not send probe responses" -#~ msgstr "ä¸å›žé€æŽ¢æµ‹å“应" - -#~ msgid "Fast Frames" -#~ msgstr "快速帧" - -#~ msgid "Maximum Rate" -#~ msgstr "最高速率" - -#~ msgid "Minimum Rate" -#~ msgstr "最低速率" - -#~ msgid "Multicast Rate" -#~ msgstr "多æ’速率" - -#~ msgid "Outdoor Channels" -#~ msgstr "户外频é“" - -#~ msgid "Regulatory Domain" -#~ msgstr "æ— çº¿ç½‘ç»œå›½å®¶åŒºåŸŸ" - -#~ msgid "Separate WDS" -#~ msgstr "隔离 WDS" - -#~ msgid "Static WDS" -#~ msgstr "é™æ€ WDS" - -#~ msgid "Turbo Mode" -#~ msgstr "Turbo 模å¼" - -#~ msgid "XR Support" -#~ msgstr "XR 支æŒ" - -#~ msgid "Required. Public key of peer." -#~ msgstr "必须,Peer 的公钥。" - -#~ msgid "An additional network will be created if you leave this checked." -#~ msgstr "如果选ä¸æ¤å¤é€‰æ¡†ï¼Œåˆ™ä¼šåˆ›å»ºä¸€ä¸ªé™„åŠ ç½‘ç»œã€‚" - -#~ msgid "An additional network will be created if you leave this unchecked." -#~ msgstr "å–消选ä¸å°†ä¼šå¦å¤–创建一个新网络,而ä¸ä¼šè¦†ç›–当å‰ç½‘络设置" - -#~ msgid "Join Network: Settings" -#~ msgstr "åŠ å…¥ç½‘ç»œï¼šè®¾ç½®" - -#~ msgid "CPU" -#~ msgstr "CPU" - -#~ msgid "Port %d" -#~ msgstr "ç«¯å£ %d" - -#~ msgid "Port %d is untagged in multiple VLANs!" -#~ msgstr "ç«¯å£ %d 在多个 VLAN ä¸å‡æœªæ ‡è®°ï¼" +#~ msgid "IPv4 WAN Status" +#~ msgstr "IPv4 WAN 状æ€" -#~ msgid "VLAN Interface" -#~ msgstr "VLAN 接å£" +#~ msgid "IPv6 WAN Status" +#~ msgstr "IPv6 WAN 状æ€" diff --git a/modules/luci-base/po/zh-tw/base.po b/modules/luci-base/po/zh-tw/base.po index c62fd0d9b..c1b7cac6f 100644 --- a/modules/luci-base/po/zh-tw/base.po +++ b/modules/luci-base/po/zh-tw/base.po @@ -167,9 +167,6 @@ msgstr "" msgid "ADSL" msgstr "" -msgid "AICCU (SIXXS)" -msgstr "" - msgid "ANSI T1.413" msgstr "" @@ -205,9 +202,6 @@ msgstr "ATMè£ç½®è™Ÿç¢¼" msgid "ATU-C System Vendor ID" msgstr "" -msgid "AYIYA" -msgstr "" - msgid "Access Concentrator" msgstr "接入集線器" @@ -310,11 +304,6 @@ msgstr "å…許127.0.0.0/8範åœå…§çš„上游回應,例如:RBLæœå‹™" msgid "Allowed IPs" msgstr "" -msgid "" -"Also see <a href=\"https://www.sixxs.net/faq/connectivity/?faq=comparison" -"\">Tunneling Comparison</a> on SIXXS" -msgstr "" - msgid "Always announce default router" msgstr "" @@ -399,6 +388,9 @@ msgstr "" msgid "Apply unchecked" msgstr "" +msgid "Architecture" +msgstr "" + msgid "" "Assign a part of given length of every public IPv6-prefix to this interface" msgstr "" @@ -413,6 +405,9 @@ msgstr "" msgid "Associated Stations" msgstr "已連接站點" +msgid "Associations" +msgstr "" + msgid "Auth Group" msgstr "" @@ -503,9 +498,6 @@ msgstr "指定了錯誤的ä½ç½®ï¼" msgid "Band" msgstr "" -msgid "Behind NAT" -msgstr "" - msgid "" "Below is the determined list of files to backup. It consists of changed " "configuration files marked by opkg, essential base files and the user " @@ -686,9 +678,6 @@ msgstr "已連線" msgid "Connection Limit" msgstr "連線é™åˆ¶" -msgid "Connection to server fails when TLS cannot be used" -msgstr "" - msgid "Connections" msgstr "連線數" @@ -826,9 +815,6 @@ msgstr "é è¨åŒé“器" msgid "Default is stateless + stateful" msgstr "" -msgid "Default route" -msgstr "" - msgid "Default state" msgstr "é è¨ç‹€æ…‹" @@ -1358,9 +1344,6 @@ msgstr "æ–·ç·š" msgid "Header Error Code Errors (HEC)" msgstr "" -msgid "Heartbeat" -msgstr "" - msgid "" "Here you can configure the basic aspects of your device like its hostname or " "the timezone." @@ -1416,8 +1399,8 @@ msgstr "IPv4版" msgid "IPv4 Firewall" msgstr "IPv4防ç«ç‰†" -msgid "IPv4 WAN Status" -msgstr "IPv4å¯¬é »é€£ç·šç‹€æ…‹" +msgid "IPv4 Upstream" +msgstr "" msgid "IPv4 address" msgstr "IPv4ä½å€" @@ -1467,15 +1450,12 @@ msgstr "" msgid "IPv6 ULA-Prefix" msgstr "" -msgid "IPv6 WAN Status" -msgstr "IPv6å¯¬é »é€£ç·šç‹€æ…‹" +msgid "IPv6 Upstream" +msgstr "" msgid "IPv6 address" msgstr "IPv6ä½å€" -msgid "IPv6 address delegated to the local tunnel endpoint (optional)" -msgstr "" - msgid "IPv6 assignment hint" msgstr "" @@ -2047,9 +2027,6 @@ msgstr "" msgid "NTP server candidates" msgstr "NTP伺æœå™¨å‚™é¸" -msgid "NTP sync time-out" -msgstr "" - msgid "Name" msgstr "å稱" @@ -2225,12 +2202,6 @@ msgstr "é¸é …已移除" msgid "Optional" msgstr "" -msgid "Optional, specify to override default server (tic.sixxs.net)" -msgstr "" - -msgid "Optional, use when the SIXXS account has more than one tunnel" -msgstr "" - msgid "" "Optional. 32-bit mark for outgoing encrypted packets. Enter value in hex, " "starting with <code>0x</code>." @@ -2700,9 +2671,6 @@ msgstr "" msgid "Request IPv6-prefix of length" msgstr "" -msgid "Require TLS" -msgstr "" - msgid "Required" msgstr "" @@ -2785,9 +2753,6 @@ msgstr "" msgid "Route type" msgstr "" -msgid "Routed IPv6 prefix for downstream interfaces" -msgstr "" - msgid "Router Advertisement-Service" msgstr "" @@ -2811,14 +2776,6 @@ msgstr "執行系統檢查" msgid "SHA256" msgstr "" -msgid "" -"SIXXS supports TIC only, for static tunnels using IP protocol 41 (RFC4213) " -"use 6in4 instead" -msgstr "" - -msgid "SIXXS-handle[/Tunnel-ID]" -msgstr "" - msgid "SNR" msgstr "" @@ -2872,17 +2829,6 @@ msgstr "分隔用戶端" msgid "Server Settings" msgstr "伺æœå™¨è¨å®šå€¼" -msgid "Server password" -msgstr "" - -msgid "" -"Server password, enter the specific password of the tunnel when the username " -"contains the tunnel ID" -msgstr "" - -msgid "Server username" -msgstr "" - msgid "Service Name" msgstr "æœå‹™å稱" @@ -2978,9 +2924,6 @@ msgstr "分類" msgid "Source" msgstr "來æº" -msgid "Source routing" -msgstr "" - msgid "Specifies the directory the device is attached to" msgstr "指定這個è¨å‚™è¢«é™„掛到那個目錄" @@ -3276,11 +3219,6 @@ msgstr "" "è¦æ›´æ–°æ‚¨é›»è…¦çš„ä½å€ä»¥ä¾¿å†é€£è¨å‚™, 端看您的è¨å®š. " msgid "" -"The tunnel end-point is behind NAT, defaults to disabled and only applies to " -"AYIYA" -msgstr "" - -msgid "" "The uploaded image file does not contain a supported format. Make sure that " "you choose the generic image format for your platform." msgstr "" @@ -3430,15 +3368,6 @@ msgstr "通é“介é¢" msgid "Tunnel Link" msgstr "" -msgid "Tunnel broker protocol" -msgstr "" - -msgid "Tunnel setup server" -msgstr "" - -msgid "Tunnel type" -msgstr "" - msgid "Tx-Power" msgstr "傳é€-功率" @@ -3616,12 +3545,6 @@ msgstr "" msgid "Vendor Class to send when requesting DHCP" msgstr "當請求DHCPå°åŒ…時è¦å‚³é€çš„è£½é€ å•†é¡žåˆ¥ç¢¼" -msgid "Verbose" -msgstr "" - -msgid "Verbose logging by aiccu daemon" -msgstr "" - msgid "Verify" msgstr "確èª" @@ -3653,10 +3576,6 @@ msgstr "" "WPA-åŠ å¯†éœ€è¦ wpa_supplican(終端模å¼)或者hostapd熱點(å°AP或者是 ad-hoc模å¼)å·²" "被安è£." -msgid "" -"Wait for NTP sync that many seconds, seting to 0 disables waiting (optional)" -msgstr "" - msgid "Waiting for changes to be applied..." msgstr "ç‰å¾…修改被啟用..." @@ -3680,12 +3599,6 @@ msgid "" "communications" msgstr "" -msgid "Whether to create an IPv6 default route over the tunnel" -msgstr "" - -msgid "Whether to route only packets from delegated prefixes" -msgstr "" - msgid "Width" msgstr "" @@ -3825,9 +3738,6 @@ msgstr "kbit/s" msgid "local <abbr title=\"Domain Name System\">DNS</abbr> file" msgstr "本地<abbr title=\"Domain Name System\">DNS</abbr> 檔案" -msgid "minimum 1280, maximum 1480" -msgstr "" - msgid "minutes" msgstr "" @@ -3903,6 +3813,12 @@ msgstr "是的" msgid "« Back" msgstr "« 倒退" +#~ msgid "IPv4 WAN Status" +#~ msgstr "IPv4å¯¬é »é€£ç·šç‹€æ…‹" + +#~ msgid "IPv6 WAN Status" +#~ msgstr "IPv6å¯¬é »é€£ç·šç‹€æ…‹" + #~ msgid "Apply" #~ msgstr "套用" 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 2512a35b3..14be40169 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 @@ -164,7 +164,7 @@ ifc.ip6addrs[i] ); } - + if (ifc.ip6prefix) { html += String.format('<strong><%:IPv6-PD%>:</strong> %s<br />', ifc.ip6prefix); @@ -212,20 +212,20 @@ <fieldset class="cbi-section"> <legend><%:Interface Overview%></legend> - <table class="cbi-section-table" style="margin:10px; empty-cells:hide"> - <tr class="cbi-section-table-titles"> - <th class="cbi-section-table-cell"><%:Network%></th> - <th class="cbi-section-table-cell" style="text-align:left"><%:Status%></th> - <th class="cbi-section-table-cell"><%:Actions%></th> - </tr> + <div class="table cbi-section-table" style="margin:10px; empty-cells:hide"> + <div class="tr cbi-section-table-titles"> + <div class="th"><%:Network%></div> + <div class="th left"><%:Status%></div> + <div class="th"><%:Actions%></div> + </div> <% for i, net in ipairs(netlist) do local z = net[3] local c = z and z:get_color() or "#EEEEEE" local t = z and translate("Part of zone %q" % z:name()) or translate("No zone assigned") %> - <tr class="cbi-section-table-row cbi-rowstyle-<%=i % 2 + 1%>"> - <td class="cbi-value-field" style="padding:3px"> + <div class="tr cbi-section-table-row cbi-rowstyle-<%=i % 2 + 1%>"> + <div class="td"> <div class="ifacebox"> <div class="ifacebox-head" style="background-color:<%=c%>" title="<%=pcdata(t)%>"> <strong><%=net[1]:upper()%></strong> @@ -235,19 +235,19 @@ <small>?</small> </div> </div> - </td> - <td class="cbi-value-field" style="vertical-align:middle; text-align:left; padding:3px" id="<%=net[1]%>-ifc-description"> + </div> + <div class="td left" id="<%=net[1]%>-ifc-description"> <em><%:Collecting data...%></em> - </td> - <td style="width:420px"> + </div> + <div class="td"> <input type="button" class="cbi-button cbi-button-reload" style="width:100px" onclick="iface_shutdown('<%=net[1]%>', true)" title="<%:Reconnect this interface%>" value="<%:Connect%>" /> <input type="button" class="cbi-button cbi-button-reset" style="width:100px" onclick="iface_shutdown('<%=net[1]%>', false)" title="<%:Shutdown this interface%>" value="<%:Stop%>" /> <input type="button" class="cbi-button cbi-button-edit" style="width:100px" onclick="location.href='<%=url("admin/network/network", net[1])%>'" title="<%:Edit this interface%>" value="<%:Edit%>" id="<%=net[1]%>-ifc-edit" /> <input type="button" class="cbi-button cbi-button-remove" style="width:100px" onclick="iface_delete('<%=net[1]%>')" value="<%:Delete%>" /> - </td> - </tr> + </div> + </div> <% end %> - </table> + </div> <input type="button" class="cbi-button cbi-button-add" value="<%:Add new interface...%>" onclick="location.href='<%=url("admin/network/iface_add")%>'" /> </fieldset> 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 b15dd13f3..58f5400da 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 @@ -71,17 +71,17 @@ ); //]]></script> -<table> - <tr class="cbi-section-table"> - <td></td> - <td class="cbi-value-field" style="min-width:16px; padding:3px; text-align:center" id="<%=self.option%>-ifc-signal"> +<div class="table"> + <div class="tr cbi-section-table"> + <div class="td"></div> + <div class="td cbi-value-field" style="min-width:16px; padding:3px; text-align:center" id="<%=self.option%>-ifc-signal"> <img src="<%=resource%>/icons/ethernet_disabled.png" style="width:16px; height:16px" /><br /> <small>?</small> - </td> - <td class="cbi-value-field" style="vertical-align:middle; text-align:left; padding:3px" id="<%=self.option%>-ifc-description"> + </div> + <div class="td cbi-value-field" style="vertical-align:middle; text-align:left; padding:3px" id="<%=self.option%>-ifc-description"> <em><%:Collecting data...%></em> - </td> - </tr> -</table> + </div> + </div> +</div> <%+cbi/valuefooter%> diff --git a/modules/luci-mod-admin-full/luasrc/view/admin_network/lease_status.htm b/modules/luci-mod-admin-full/luasrc/view/admin_network/lease_status.htm index 28a37dcd9..9005279a4 100644 --- a/modules/luci-mod-admin-full/luasrc/view/admin_network/lease_status.htm +++ b/modules/luci-mod-admin-full/luasrc/view/admin_network/lease_status.htm @@ -20,10 +20,10 @@ if (st && st[0] && tb) { /* clear all rows */ - while( tb.rows.length > 1 ) - tb.deleteRow(1); + while (tb.firstElementChild !== tb.lastElementChild) + tb.removeChild(tb.lastElementChild); - for( var i = 0; i < st[0].length; i++ ) + for (var i = 0; i < st[0].length; i++) { var timestr; @@ -34,24 +34,16 @@ else timestr = String.format('%t', st[0][i].expires); - var tr = tb.insertRow(-1); - tr.className = 'cbi-section-table-row cbi-rowstyle-' + ((i % 2) + 1); - - tr.insertCell(-1).innerHTML = st[0][i].hostname ? st[0][i].hostname : '?'; - tr.insertCell(-1).innerHTML = st[0][i].ipaddr; - tr.insertCell(-1).innerHTML = st[0][i].macaddr; - tr.insertCell(-1).innerHTML = timestr; + tb.appendChild(E('<div class="tr cbi-section-table-row cbi-rowstyle-%d">'.format((i % 2) + 1), [ + E('<div class="td">', st[0][i].hostname || '?'), + E('<div class="td">', st[0][i].ipaddr), + E('<div class="td">', st[0][i].macaddr), + E('<div class="td">', timestr) + ])); } - if( tb.rows.length == 1 ) - { - var tr = tb.insertRow(-1); - tr.className = 'cbi-section-table-row'; - - var td = tr.insertCell(-1); - td.colSpan = 4; - td.innerHTML = '<em><br /><%:There are no active leases.%></em>'; - } + if (tb.firstElementChild === tb.lastElementChild) + tb.appendChild(E('<div class="tr cbi-section-table-row"><div class="td"><em><br /><%:There are no active leases.%></em></div></div>')); } var tb6 = document.getElementById('lease6_status_table'); @@ -60,10 +52,10 @@ tb6.parentNode.style.display = 'block'; /* clear all rows */ - while( tb6.rows.length > 1 ) - tb6.deleteRow(1); + while (tb6.firstElementChild !== tb6.lastElementChild) + tb6.removeChild(tb6.lastElementChild); - for( var i = 0; i < st[1].length; i++ ) + for (var i = 0; i < st[1].length; i++) { var timestr; @@ -74,35 +66,29 @@ else timestr = String.format('%t', st[1][i].expires); - var tr = tb6.insertRow(-1); - tr.className = 'cbi-section-table-row cbi-rowstyle-' + ((i % 2) + 1); - - var host = hosts[duid2mac(st[1][i].duid)]; - if (!st[1][i].hostname) - tr.insertCell(-1).innerHTML = - (host && (host.name || host.ipv4 || host.ipv6)) - ? '<div style="max-width:200px;overflow:hidden;text-overflow:ellipsis;white-space: nowrap">? (%h)</div>'.format(host.name || host.ipv4 || host.ipv6) - : '?'; - else - tr.insertCell(-1).innerHTML = - (host && host.name && st[1][i].hostname != host.name) - ? '<div style="max-width:200px;overflow:hidden;text-overflow:ellipsis;white-space: nowrap">%h (%h)</div>'.format(st[1][i].hostname, host.name) - : st[1][i].hostname; - - tr.insertCell(-1).innerHTML = st[1][i].ip6addr; - tr.insertCell(-1).innerHTML = st[1][i].duid; - tr.insertCell(-1).innerHTML = timestr; + var host = hosts[duid2mac(st[1][i].duid)], + name = st[1][i].hostname, + hint = null; + + if (!name) { + if (host) + hint = host.name || host.ipv4 || host.ipv6; + } + else { + if (host && host.name && st[1][i].hostname != host.name) + hint = host.name; + } + + tb6.appendChild(E('<div class="tr cbi-section-table-row cbi-rowstyle-%d" style="max-width:200px;overflow:hidden;text-overflow:ellipsis;white-space: nowrap">'.format((i % 2) + 1), [ + E('<div class="td">', hint ? '<div style="max-width:200px;overflow:hidden;text-overflow:ellipsis;white-space: nowrap">%h (%h)</div>'.format(name || '?', hint) : (name || '?')), + E('<div class="td">', st[1][i].ip6addr), + E('<div class="td">', st[1][i].duid), + E('<div class="td">', timestr) + ])); } - if( tb6.rows.length == 1 ) - { - var tr = tb6.insertRow(-1); - tr.className = 'cbi-section-table-row'; - - var td = tr.insertCell(-1); - td.colSpan = 4; - td.innerHTML = '<em><br /><%:There are no active leases.%></em>'; - } + if (tb6.firstElementChild === tb6.lastElementChild) + tb6.appendChild(E('<div class="tr cbi-section-table-row"><div class="td"><em><br /><%:There are no active leases.%></em></div></div>')); } } ); @@ -110,30 +96,30 @@ <fieldset class="cbi-section"> <legend><%:Active DHCP Leases%></legend> - <table class="cbi-section-table" id="lease_status_table"> - <tr class="cbi-section-table-titles"> - <th class="cbi-section-table-cell"><%:Hostname%></th> - <th class="cbi-section-table-cell"><%:IPv4-Address%></th> - <th class="cbi-section-table-cell"><%:MAC-Address%></th> - <th class="cbi-section-table-cell"><%:Leasetime remaining%></th> - </tr> - <tr class="cbi-section-table-row"> - <td colspan="4"><em><br /><%:Collecting data...%></em></td> - </tr> - </table> + <div class="table cbi-section-table" id="lease_status_table"> + <div class="tr cbi-section-table-titles"> + <div class="th cbi-section-table-cell"><%:Hostname%></div> + <div class="th cbi-section-table-cell"><%:IPv4-Address%></div> + <div class="th cbi-section-table-cell"><%:MAC-Address%></div> + <div class="th cbi-section-table-cell"><%:Leasetime remaining%></div> + </div> + <div class="tr cbi-section-table-row"> + <div class="td" colspan="4"><em><br /><%:Collecting data...%></em></div> + </div> + </div> </fieldset> <fieldset class="cbi-section" style="display:none"> <legend><%:Active DHCPv6 Leases%></legend> - <table class="cbi-section-table" id="lease6_status_table"> - <tr class="cbi-section-table-titles"> - <th class="cbi-section-table-cell"><%:Host%></th> - <th class="cbi-section-table-cell"><%:IPv6-Address%></th> - <th class="cbi-section-table-cell"><%:DUID%></th> - <th class="cbi-section-table-cell"><%:Leasetime remaining%></th> - </tr> - <tr class="cbi-section-table-row"> - <td colspan="4"><em><br /><%:Collecting data...%></em></td> - </tr> - </table> + <div class="table cbi-section-table" id="lease6_status_table"> + <div class="tr cbi-section-table-titles"> + <div class="th cbi-section-table-cell"><%:Host%></div> + <div class="th cbi-section-table-cell"><%:IPv6-Address%></div> + <div class="th cbi-section-table-cell"><%:DUID%></div> + <div class="th cbi-section-table-cell"><%:Leasetime remaining%></div> + </div> + <div class="tr cbi-section-table-row"> + <div class="td" colspan="4"><em><br /><%:Collecting data...%></em></div> + </div> + </div> </fieldset> diff --git a/modules/luci-mod-admin-full/luasrc/view/admin_network/wifi_join.htm b/modules/luci-mod-admin-full/luasrc/view/admin_network/wifi_join.htm index 3533c6fa4..e9cfb3e85 100644 --- a/modules/luci-mod-admin-full/luasrc/view/admin_network/wifi_join.htm +++ b/modules/luci-mod-admin-full/luasrc/view/admin_network/wifi_join.htm @@ -91,24 +91,24 @@ <div class="cbi-map"> <fieldset class="cbi-section"> - <table class="cbi-section-table" style="empty-cells:hide"> + <div class="table cbi-section-table" style="empty-cells:hide"> <!-- scan list --> <% for i, net in ipairs(scanlist(3)) do net.encryption = net.encryption or { } %> - <tr class="cbi-section-table-row cbi-rowstyle-<%=1 + ((i-1) % 2)%>"> - <td class="cbi-value-field" style="width:16px; padding:3px"> + <div class="tr cbi-section-table-row cbi-rowstyle-<%=1 + ((i-1) % 2)%>"> + <div class="td cbi-value-field" style="width:16px; padding:3px"> <abbr title="<%:Signal%>: <%=net.signal%> <%:dB%> / <%:Quality%>: <%=net.quality%>/<%=net.quality_max%>"> <img src="<%=guess_wifi_signal(net)%>" /><br /> <small><%=percent_wifi_signal(net)%>%</small> </abbr> - </td> - <td class="cbi-value-field" style="vertical-align:middle; text-align:left; padding:3px"> + </div> + <div class="td cbi-value-field" style="vertical-align:middle; text-align:left; padding:3px"> <big><strong><%=net.ssid and utl.pcdata(net.ssid) or "<em>%s</em>" % translate("hidden")%></strong></big><br /> <strong>Channel:</strong> <%=net.channel%> | <strong>Mode:</strong> <%=net.mode%> | <strong>BSSID:</strong> <%=net.bssid%> | <strong>Encryption:</strong> <%=format_wifi_encryption(net.encryption)%> - </td> - <td class="cbi-value-field" style="width:40px"> + </div> + <div class="td cbi-value-field" style="width:40px"> <form action="<%=url('admin/network/wireless_join')%>" method="post"> <input type="hidden" name="token" value="<%=token%>" /> <input type="hidden" name="device" value="<%=utl.pcdata(dev)%>" /> @@ -128,11 +128,11 @@ <input class="cbi-button cbi-button-apply" type="submit" value="<%:Join Network%>" /> </form> - </td> - </tr> + </div> + </div> <% end %> <!-- /scan list --> - </table> + </div> </fieldset> </div> <div class="cbi-page-actions right"> diff --git a/modules/luci-mod-admin-full/luasrc/view/admin_network/wifi_overview.htm b/modules/luci-mod-admin-full/luasrc/view/admin_network/wifi_overview.htm index 4465095ff..d6140c81f 100644 --- a/modules/luci-mod-admin-full/luasrc/view/admin_network/wifi_overview.htm +++ b/modules/luci-mod-admin-full/luasrc/view/admin_network/wifi_overview.htm @@ -101,9 +101,9 @@ <%+header%> <% if not has_iwinfo then %> - <div class="errorbox"> - <strong><%:Package libiwinfo required!%></strong><br /> - <%_The <em>libiwinfo-lua</em> package is not installed. You must install this component for working wireless configuration!%> + <div class="alert-message warning"> + <h4><%:Package libiwinfo required!%></h4> + <p><%_The <em>libiwinfo-lua</em> package is not installed. You must install this component for working wireless configuration!%></p> </div> <% end %> @@ -195,8 +195,8 @@ { var assoctable = document.getElementById('iw-assoclist'); if (assoctable) - while (assoctable.rows.length > 1) - assoctable.rows[1].parentNode.removeChild(assoctable.rows[1]); + while (assoctable.firstElementChild !== assoctable.lastElementChild) + assoctable.removeChild(assoctable.lastElementChild); var devup = { }; var rowstyle = 1; @@ -293,7 +293,7 @@ if (assoctable) { var assoclist = [ ]; - for( var bssid in iw.assoclist ) + for (var bssid in iw.assoclist) { assoclist.push(iw.assoclist[bssid]); assoclist[assoclist.length-1].bssid = bssid; @@ -301,11 +301,8 @@ assoclist.sort(function(a, b) { a.bssid < b.bssid }); - for( var j = 0; j < assoclist.length; j++ ) + for (var j = 0; j < assoclist.length; j++) { - var tr = assoctable.insertRow(-1); - tr.className = 'cbi-section-table-row cbi-rowstyle-' + rowstyle; - var icon; var q = (-1 * (assoclist[j].noise - assoclist[j].signal)) / 5; if (q < 1) @@ -319,48 +316,35 @@ else icon = "<%=resource%>/icons/signal-75-100.png"; - tr.insertCell(-1).innerHTML = String.format( - '<span class="ifacebadge" title="%q"><img src="<%=resource%>/icons/wifi.png" /> %h</span>', - iw.device.name, iw.ifname - ); - - tr.insertCell(-1).innerHTML = nowrap(String.format('%h', iw.ssid ? iw.ssid : '?')); - tr.insertCell(-1).innerHTML = assoclist[j].bssid; - - var host = hosts[assoclist[j].bssid]; - if (host) - tr.insertCell(-1).innerHTML = String.format( - '<div style="max-width:200px;overflow:hidden;text-overflow:ellipsis">%s</div>', - ((host.name && (host.ipv4 || host.ipv6)) - ? '%h (%s)'.format(host.name, host.ipv4 || host.ipv6) - : '%h'.format(host.name || host.ipv4 || host.ipv6)).nobr() - ); - else - tr.insertCell(-1).innerHTML = '?'; - - tr.insertCell(-1).innerHTML = String.format( - '<span class="ifacebadge" title="<%:Signal%>: %d <%:dBm%> / <%:Noise%>: %d <%:dBm%> / <%:SNR%>: %d"><img src="%s" /> %d / %d <%:dBm%></span>', - assoclist[j].signal, assoclist[j].noise, assoclist[j].signal - assoclist[j].noise, - icon, - assoclist[j].signal, assoclist[j].noise - ); - - tr.insertCell(-1).innerHTML = nowrap(wifirate(assoclist[j], true)) + '<br />' + nowrap(wifirate(assoclist[j], false)); + var host = hosts[assoclist[j].bssid], + name = host ? (host.name || host.ipv4 || host.ipv6) : null, + hint = (host && host.name && (host.ipv4 || host.ipv6)) ? (host.ipv4 || host.ipv6) : null; + + assoctable.appendChild(E('<div class="tr cbi-section-table-row cbi-rowstyle-%d">'.format(rowstyle), [ + E('<div class="td"><span class="ifacebadge" title="%q"><img src="<%=resource%>/icons/wifi.png" /> %h</span></div>' + .format(iw.device.name, iw.ifname)), + E('<div class="td" style="white-space:nowrap">%h</div>' + .format(iw.ssid || '?')), + E('<div class="td">%h</div>' + .format(assoclist[j].bssid)), + E('<div class="td">', hint ? '<div style="max-width:200px;overflow:hidden;text-overflow:ellipsis">%h (%h)</div>' + .format(name || '?', hint) : (name || '?')), + E('<div class="td"><span class="ifacebadge" title="<%:Signal%>: %d <%:dBm%> / <%:Noise%>: %d <%:dBm%> / <%:SNR%>: %d"><img src="%s" /> %d / %d <%:dBm%></span></div>' + .format(assoclist[j].signal, assoclist[j].noise, assoclist[j].signal - assoclist[j].noise, icon, assoclist[j].signal, assoclist[j].noise)), + E('<div class="td">', [ + E('<span style="white-space:nowrap">', wifirate(assoclist[j], true)), + E('<br />'), + E('<span style="white-space:nowrap">', wifirate(assoclist[j], false)) + ]) + ])); rowstyle = (rowstyle == 1) ? 2 : 1; } } } - if (assoctable && assoctable.rows.length == 1) - { - var tr = assoctable.insertRow(-1); - tr.className = 'cbi-section-table-row'; - - var td = tr.insertCell(-1); - td.colSpan = 8; - td.innerHTML = '<br /><em><%:No information available%></em>'; - } + if (assoctable && assoctable.firstElementChild === assoctable.lastElementChild) + assoctable.appendChild(E('<div class="tr cbi-section-table-row"><div class="td"><em><br /><%:No information available%></em></div></div>')); for (var dev in devup) { @@ -386,15 +370,17 @@ <% for _, dev in ipairs(devices) do local nets = dev:get_wifinets() %> <!-- device <%=dev:name()%> --> <fieldset class="cbi-section"> - <table class="cbi-section-table" style="margin:10px; empty-cells:hide"> + <div class="table cbi-section-table" style="margin:10px; empty-cells:hide"> <!-- physical device --> - <tr> - <td style="width:34px"><img src="<%=resource%>/icons/wifi_big_disabled.png" style="float:left; margin-right:10px" id="<%=dev:name()%>-iw-upstate" /></td> - <td colspan="2" style="text-align:left"> + <div class="tr"> + <div class="td"> + <img src="<%=resource%>/icons/wifi_big_disabled.png" id="<%=dev:name()%>-iw-upstate" /> + </div> + <div class="td left"> <big><strong><%=guess_wifi_hw(dev)%> (<%=dev:name()%>)</strong></big><br /> <span id="<%=dev:name()%>-iw-devinfo"></span> - </td> - <td style="width:310px;text-align:right"> + </div> + <div class="td right"> <form action="<%=url('admin/network/wireless_join')%>" method="post" class="inline"> <input type="hidden" name="device" value="<%=dev:name()%>" /> <input type="hidden" name="token" value="<%=token%>" /> @@ -405,38 +391,36 @@ <input type="hidden" name="token" value="<%=token%>" /> <input type="submit" class="cbi-button cbi-button-add" style="width:100px" title="<%:Provide new network%>" value="<%:Add%>" /> </form> - </td> - </tr> + </div> + </div> <!-- /physical device --> <!-- network list --> <% if #nets > 0 then %> <% for i, net in ipairs(nets) do %> - <tr class="cbi-section-table-row cbi-rowstyle-<%=1 + ((i-1) % 2)%>"> - <td></td> - <td class="cbi-value-field" style="vertical-align:middle; padding:3px" id="<%=net:id()%>-iw-signal"> + <div class="tr cbi-section-table-row cbi-rowstyle-<%=1 + ((i-1) % 2)%>"> + <div class="td" id="<%=net:id()%>-iw-signal"> <span class="ifacebadge" title="<%:Not associated%>"><img src="<%=resource%>/icons/signal-none.png" /> 0%</span> - </td> - <td class="cbi-value-field" style="vertical-align:middle; text-align:left; padding:3px" id="<%=net:id()%>-iw-status"> + </div> + <div class="td left" id="<%=net:id()%>-iw-status"> <em><%:Collecting data...%></em> - </td> - <td class="cbi-value-field" style="width:310px;text-align:right"> + </div> + <div class="td right"> <input id="<%=net:id()%>-iw-toggle" type="button" class="cbi-button cbi-button-reload" style="width:100px" onclick="wifi_shutdown('<%=net:id()%>', this)" title="<%:Delete this network%>" value="<%:Enable%>" /> <input type="button" class="cbi-button cbi-button-edit" style="width:100px" onclick="location.href='<%=net:adminlink()%>'" title="<%:Edit this network%>" value="<%:Edit%>" /> <input type="button" class="cbi-button cbi-button-remove" style="width:100px" onclick="wifi_delete('<%=net:id()%>')" title="<%:Delete this network%>" value="<%:Remove%>" /> - </td> - </tr> + </div> + </div> <% end %> <% else %> - <tr class="cbi-section-table-row cbi-rowstyle-2"> - <td></td> - <td colspan="3" class="cbi-value-field" style="vertical-align:middle; text-align:left; padding:3px"> + <div class="tr cbi-section-table-row cbi-rowstyle-2"> + <div class="td left"> <em><%:No network configured on this device%></em> - </td> - </tr> + </div> + </div> <% end %> <!-- /network list --> - </table> + </div> </fieldset> <!-- /device <%=dev:name()%> --> <% end %> @@ -445,21 +429,21 @@ <h2><%:Associated Stations%></h2> <fieldset class="cbi-section"> - <table class="cbi-section-table valign-middle" style="margin:10px" id="iw-assoclist"> - <tr class="cbi-section-table-titles"> - <th class="cbi-section-table-cell"></th> - <th class="cbi-section-table-cell"><%:SSID%></th> - <th class="cbi-section-table-cell"><%:MAC-Address%></th> - <th class="cbi-section-table-cell"><%:Host%></th> - <th class="cbi-section-table-cell"><%:Signal%> / <%:Noise%></th> - <th class="cbi-section-table-cell"><%:RX Rate%> / <%:TX Rate%></th> - </tr> - <tr class="cbi-section-table-row cbi-rowstyle-2"> - <td class="cbi-value-field" colspan="6"> + <div class="table cbi-section-table valign-middle" style="margin:10px" id="iw-assoclist"> + <div class="tr cbi-section-table-titles"> + <div class="th cbi-section-table-cell"></div> + <div class="th cbi-section-table-cell"><%:SSID%></div> + <div class="th cbi-section-table-cell"><%:MAC-Address%></div> + <div class="th cbi-section-table-cell"><%:Host%></div> + <div class="th cbi-section-table-cell"><%:Signal%> / <%:Noise%></div> + <div class="th cbi-section-table-cell"><%:RX Rate%> / <%:TX Rate%></div> + </div> + <div class="tr cbi-section-table-row cbi-rowstyle-2"> + <div class="td"> <em><%:Collecting data...%></em> - </td> - </tr> - </table> + </div> + </div> + </div> </fieldset> </div> diff --git a/modules/luci-mod-admin-full/luasrc/view/admin_network/wifi_status.htm b/modules/luci-mod-admin-full/luasrc/view/admin_network/wifi_status.htm index 04687f38e..85468252e 100644 --- a/modules/luci-mod-admin-full/luasrc/view/admin_network/wifi_status.htm +++ b/modules/luci-mod-admin-full/luasrc/view/admin_network/wifi_status.htm @@ -62,17 +62,17 @@ ); //]]></script> -<table> - <tr class="cbi-section-table"> - <td></td> - <td class="cbi-value-field" style="width:16px; padding:3px" id="<%=self.option%>-iw-signal"> +<div class="table"> + <div class="tr cbi-section-table"> + <div class="td"></div> + <div class="td cbi-value-field" style="width:16px; padding:3px" id="<%=self.option%>-iw-signal"> <img src="<%=resource%>/icons/signal-none.png" title="<%:Not associated%>" /><br /> <small>0%</small> - </td> - <td class="cbi-value-field" style="vertical-align:middle; text-align:left; padding:3px" id="<%=self.option%>-iw-description"> + </div> + <div class="td cbi-value-field" style="vertical-align:middle; text-align:left; padding:3px" id="<%=self.option%>-iw-description"> <em><%:Collecting data...%></em> - </td> - </tr> -</table> + </div> + </div> +</div> <%+cbi/valuefooter%> diff --git a/modules/luci-mod-admin-full/luasrc/view/admin_status/bandwidth.htm b/modules/luci-mod-admin-full/luasrc/view/admin_status/bandwidth.htm index 33bbee784..db1d0b888 100644 --- a/modules/luci-mod-admin-full/luasrc/view/admin_status/bandwidth.htm +++ b/modules/luci-mod-admin-full/luasrc/view/admin_status/bandwidth.htm @@ -275,27 +275,27 @@ <div style="text-align:right"><small id="scale">-</small></div> <br /> -<table style="width:100%; table-layout:fixed" cellspacing="5"> - <tr> - <td style="text-align:right; vertical-align:top"><strong style="border-bottom:2px solid blue"><%:Inbound:%></strong></td> - <td id="rx_bw_cur">0 <%:kbit/s%><br />(0 <%:kB/s%>)</td> - - <td style="text-align:right; vertical-align:top"><strong><%:Average:%></strong></td> - <td id="rx_bw_avg">0 <%:kbit/s%><br />(0 <%:kB/s%>)</td> - - <td style="text-align:right; vertical-align:top"><strong><%:Peak:%></strong></td> - <td id="rx_bw_peak">0 <%:kbit/s%><br />(0 <%:kB/s%>)</td> - </tr> - <tr> - <td style="text-align:right; vertical-align:top"><strong style="border-bottom:2px solid green"><%:Outbound:%></strong></td> - <td id="tx_bw_cur">0 <%:kbit/s%><br />(0 <%:kB/s%>)</td> - - <td style="text-align:right; vertical-align:top"><strong><%:Average:%></strong></td> - <td id="tx_bw_avg">0 <%:kbit/s%><br />(0 <%:kB/s%>)</td> - - <td style="text-align:right; vertical-align:top"><strong><%:Peak:%></strong></td> - <td id="tx_bw_peak">0 <%:kbit/s%><br />(0 <%:kB/s%>)</td> - </tr> -</table> +<div class="table" style="width:100%; table-layout:fixed" cellspacing="5"> + <div class="tr"> + <div class="td" style="text-align:right; vertical-align:top"><strong style="border-bottom:2px solid blue"><%:Inbound:%></strong></div> + <div class="td" id="rx_bw_cur">0 <%:kbit/s%><br />(0 <%:kB/s%>)</div> + + <div class="td" style="text-align:right; vertical-align:top"><strong><%:Average:%></strong></div> + <div class="td" id="rx_bw_avg">0 <%:kbit/s%><br />(0 <%:kB/s%>)</div> + + <div class="td" style="text-align:right; vertical-align:top"><strong><%:Peak:%></strong></div> + <div class="td" id="rx_bw_peak">0 <%:kbit/s%><br />(0 <%:kB/s%>)</div> + </div> + <div class="tr"> + <div class="td" style="text-align:right; vertical-align:top"><strong style="border-bottom:2px solid green"><%:Outbound:%></strong></div> + <div class="td" id="tx_bw_cur">0 <%:kbit/s%><br />(0 <%:kB/s%>)</div> + + <div class="td" style="text-align:right; vertical-align:top"><strong><%:Average:%></strong></div> + <div class="td" id="tx_bw_avg">0 <%:kbit/s%><br />(0 <%:kB/s%>)</div> + + <div class="td" style="text-align:right; vertical-align:top"><strong><%:Peak:%></strong></div> + <div class="td" id="tx_bw_peak">0 <%:kbit/s%><br />(0 <%:kB/s%>)</div> + </div> +</div> <%+footer%> diff --git a/modules/luci-mod-admin-full/luasrc/view/admin_status/connections.htm b/modules/luci-mod-admin-full/luasrc/view/admin_status/connections.htm index b7ebc4145..30d93f78b 100644 --- a/modules/luci-mod-admin-full/luasrc/view/admin_status/connections.htm +++ b/modules/luci-mod-admin-full/luasrc/view/admin_status/connections.htm @@ -139,8 +139,8 @@ { var conn = json.connections; - while (conn_table.rows.length > 1) - conn_table.rows[0].parentNode.deleteRow(-1); + while (conn_table.firstElementChild !== conn_table.lastElementChild) + conn_table.removeChild(conn_table.lastElementChild); var lookup_queue = [ ]; @@ -153,13 +153,10 @@ { var c = conn[i]; - if ((c.src == '127.0.0.1' && c.dst == '127.0.0.1') - || (c.src == '::1' && c.dst == '::1')) + if ((c.src == '127.0.0.1' && c.dst == '127.0.0.1') || + (c.src == '::1' && c.dst == '::1')) continue; - var tr = conn_table.rows[0].parentNode.insertRow(-1); - tr.className = 'cbi-section-table-row cbi-rowstyle-' + (1 + (i % 2)); - if (!dns_cache[c.src]) lookup_queue.push(c.src); @@ -169,14 +166,13 @@ var src = dns_cache[c.src] || (c.layer3 == 'ipv6' ? '[' + c.src + ']' : c.src); var dst = dns_cache[c.dst] || (c.layer3 == 'ipv6' ? '[' + c.dst + ']' : c.dst); - tr.insertCell(-1).innerHTML = c.layer3.toUpperCase(); - tr.insertCell(-1).innerHTML = c.layer4.toUpperCase(); - tr.insertCell(-1).innerHTML = String.format('%s:%d', src, c.sport); - tr.insertCell(-1).innerHTML = String.format('%s:%d', dst, c.dport); - - var traf = tr.insertCell(-1); - traf.style.whiteSpace = 'nowrap'; - traf.innerHTML = String.format('%1024.2mB (%d <%:Pkts.%>)', c.bytes, c.packets); + conn_table.appendChild(E('<div class="tr cbi-section-table-row cbi-rowstyle-%d">'.format(1 + (i % 2)), [ + E('<div class="td">', c.layer3.toUpperCase()), + E('<div class="td">', c.layer4.toUpperCase()), + E('<div class="td">', [ src, ':', c.sport ]), + E('<div class="td">', [ dst, ':', c.dport ]), + E('<div class="td" style="white-space:nowrap">', '%1024.2mB (%d <%:Pkts.%>)'.format(c.bytes, c.packets)), + ])); } if (lookup_queue.length > 0) @@ -324,52 +320,52 @@ <div style="text-align:right"><small id="scale">-</small></div> <br /> - <table style="width:100%; table-layout:fixed" cellspacing="5"> - <tr> - <td style="text-align:right; vertical-align:top"><strong style="border-bottom:2px solid blue"><%:UDP:%></strong></td> - <td id="lb_udp_cur">0</td> - - <td style="text-align:right; vertical-align:top"><strong><%:Average:%></strong></td> - <td id="lb_udp_avg">0</td> - - <td style="text-align:right; vertical-align:top"><strong><%:Peak:%></strong></td> - <td id="lb_udp_peak">0</td> - </tr> - <tr> - <td style="text-align:right; vertical-align:top"><strong style="border-bottom:2px solid green"><%:TCP:%></strong></td> - <td id="lb_tcp_cur">0</td> - - <td style="text-align:right; vertical-align:top"><strong><%:Average:%></strong></td> - <td id="lb_tcp_avg">0</td> - - <td style="text-align:right; vertical-align:top"><strong><%:Peak:%></strong></td> - <td id="lb_tcp_peak">0</td> - </tr> - <tr> - <td style="text-align:right; vertical-align:top"><strong style="border-bottom:2px solid red"><%:Other:%></strong></td> - <td id="lb_otr_cur">0</td> - - <td style="text-align:right; vertical-align:top"><strong><%:Average:%></strong></td> - <td id="lb_otr_avg">0</td> - - <td style="text-align:right; vertical-align:top"><strong><%:Peak:%></strong></td> - <td id="lb_otr_peak">0</td> - </tr> - </table> + <div class="table" style="width:100%; table-layout:fixed" cellspacing="5"> + <div class="tr"> + <div class="td" style="text-align:right; vertical-align:top"><strong style="border-bottom:2px solid blue"><%:UDP:%></strong></div> + <div class="td" id="lb_udp_cur">0</div> + + <div class="td" style="text-align:right; vertical-align:top"><strong><%:Average:%></strong></div> + <div class="td" id="lb_udp_avg">0</div> + + <div class="td" style="text-align:right; vertical-align:top"><strong><%:Peak:%></strong></div> + <div class="td" id="lb_udp_peak">0</div> + </div> + <div class="tr"> + <div class="td" style="text-align:right; vertical-align:top"><strong style="border-bottom:2px solid green"><%:TCP:%></strong></div> + <div class="td" id="lb_tcp_cur">0</div> + + <div class="td" style="text-align:right; vertical-align:top"><strong><%:Average:%></strong></div> + <div class="td" id="lb_tcp_avg">0</div> + + <div class="td" style="text-align:right; vertical-align:top"><strong><%:Peak:%></strong></div> + <div class="td" id="lb_tcp_peak">0</div> + </div> + <div class="tr"> + <div class="td" style="text-align:right; vertical-align:top"><strong style="border-bottom:2px solid red"><%:Other:%></strong></div> + <div class="td" id="lb_otr_cur">0</div> + + <div class="td" style="text-align:right; vertical-align:top"><strong><%:Average:%></strong></div> + <div class="td" id="lb_otr_avg">0</div> + + <div class="td" style="text-align:right; vertical-align:top"><strong><%:Peak:%></strong></div> + <div class="td" id="lb_otr_peak">0</div> + </div> + </div> <br /> <div class="cbi-section-node"> - <table class="cbi-section-table" id="connections"> - <tr class="cbi-section-table-titles"> - <th class="cbi-section-table-cell"><%:Network%></th> - <th class="cbi-section-table-cell"><%:Protocol%></th> - <th class="cbi-section-table-cell"><%:Source%></th> - <th class="cbi-section-table-cell"><%:Destination%></th> - <th class="cbi-section-table-cell"><%:Transfer%></th> - </tr> - - <tr><td colspan="5"><em><%:Collecting data...%></em></td></tr> - </table> + <div class="table cbi-section-table" id="connections"> + <div class="tr cbi-section-table-titles"> + <div class="th cbi-section-table-cell"><%:Network%></div> + <div class="th cbi-section-table-cell"><%:Protocol%></div> + <div class="th cbi-section-table-cell"><%:Source%></div> + <div class="th cbi-section-table-cell"><%:Destination%></div> + <div class="th cbi-section-table-cell"><%:Transfer%></div> + </div> + + <div class="tr"><div class="td" colspan="5"><em><%:Collecting data...%></em></div></div> + </div> </div> </fieldset> diff --git a/modules/luci-mod-admin-full/luasrc/view/admin_status/index.htm b/modules/luci-mod-admin-full/luasrc/view/admin_status/index.htm index 5e6e494ad..c5952064a 100644 --- a/modules/luci-mod-admin-full/luasrc/view/admin_status/index.htm +++ b/modules/luci-mod-admin-full/luasrc/view/admin_status/index.htm @@ -6,6 +6,7 @@ <% local fs = require "nixio.fs" + local ipc = require "luci.ip" local util = require "luci.util" local stat = require "luci.tools.status" local ver = require "luci.version" @@ -58,6 +59,8 @@ } if wan then + local dev = wan:get_interface() + local link = dev and ipc.link(dev:name()) rv.wan = { ipaddr = wan:ipaddr(), gwaddr = wan:gwaddr(), @@ -66,12 +69,19 @@ expires = wan:expires(), uptime = wan:uptime(), proto = wan:proto(), + i18n = wan:get_i18n(), ifname = wan:ifname(), - link = wan:adminlink() + link = wan:adminlink(), + mac = dev and dev:mac(), + type = dev and dev:type(), + name = dev and dev:get_i18n(), + ether = link and link.type == 1 } end if wan6 then + local dev = wan6:get_interface() + local link = dev and ipc.link(dev:name()) rv.wan6 = { ip6addr = wan6:ip6addr(), gw6addr = wan6:gw6addr(), @@ -79,8 +89,13 @@ ip6prefix = wan6:ip6prefix(), uptime = wan6:uptime(), proto = wan6:proto(), + i18n = wan6:get_i18n(), ifname = wan6:ifname(), - link = wan6:adminlink() + link = wan6:adminlink(), + mac = dev and dev:mac(), + type = dev and dev:type(), + name = dev and dev:get_i18n(), + ether = link and link.type == 1 } end @@ -164,133 +179,95 @@ }); } - XHR.poll(5, '<%=REQUEST_URI%>', { status: 1 }, - function(x, info) - { - if (!(npoll++ % 5)) - updateHosts(); - - var si = document.getElementById('wan4_i'); - var ss = document.getElementById('wan4_s'); - var ifc = info.wan; + function labelList(items, offset) { + var rv = [ ]; - if (ifc && ifc.ifname && ifc.proto != 'none') - { - var s = String.format( - '<strong><%:Type%>: </strong>%s<br />' + - '<strong><%:Address%>: </strong>%s<br />' + - '<strong><%:Netmask%>: </strong>%s<br />' + - '<strong><%:Gateway%>: </strong>%s<br />', - ifc.proto, - (ifc.ipaddr) ? ifc.ipaddr : '0.0.0.0', - (ifc.netmask && ifc.netmask != ifc.ipaddr) ? ifc.netmask : '255.255.255.255', - (ifc.gwaddr) ? ifc.gwaddr : '0.0.0.0' - ); + for (var i = offset || 0; i < items.length; i += 2) { + var label = items[i], + value = items[i+1]; - for (var i = 0; i < ifc.dns.length; i++) - { - s += String.format( - '<strong><%:DNS%> %d: </strong>%s<br />', - i + 1, ifc.dns[i] - ); - } + if (value === undefined || value === null) + continue; - if (ifc.expires > -1) - { - s += String.format( - '<strong><%:Expires%>: </strong>%t<br />', - ifc.expires - ); - } + if (label) + rv.push(E('strong', [label, ': '])); - if (ifc.uptime > 0) - { - s += String.format( - '<strong><%:Connected%>: </strong>%t<br />', - ifc.uptime - ); - } + rv.push(value, E('br')); + } - ss.innerHTML = String.format('<small>%s</small>', s); - si.innerHTML = String.format( - '<img src="<%=resource%>/icons/ethernet.png" />' + - '<br /><small><a href="%s">%s</a></small>', - ifc.link, ifc.ifname - ); - } - else - { - si.innerHTML = '<img src="<%=resource%>/icons/ethernet_disabled.png" /><br /><small>?</small>'; - ss.innerHTML = '<em><%:Not connected%></em>'; - } + return rv; + } - <% if has_ipv6 then %> - var si6 = document.getElementById('wan6_i'); - var ss6 = document.getElementById('wan6_s'); - var ifc6 = info.wan6; + function renderBox(title, active, childs) { + childs = childs || []; + childs.unshift(E('span', labelList(arguments, 3))); - if (ifc6 && ifc6.ifname && ifc6.proto != 'none') - { - var s = String.format( - '<strong><%:Type%>: </strong>%s%s<br />', - ifc6.proto, (ifc6.ip6prefix) ? '-pd' : '' - ); - - if (!ifc6.ip6prefix) - { - s += String.format( - '<strong><%:Address%>: </strong>%s<br />', - (ifc6.ip6addr) ? ifc6.ip6addr : '::' - ); - } - else - { - s += String.format( - '<strong><%:Prefix Delegated%>: </strong>%s<br />', - ifc6.ip6prefix - ); - if (ifc6.ip6addr) - { - s += String.format( - '<strong><%:Address%>: </strong>%s<br />', - ifc6.ip6addr - ); - } - } + return E('div', { class: 'ifacebox' }, [ + E('div', { class: 'ifacebox-head center ' + (active ? 'active' : '') }, + E('strong', title)), + E('div', { class: 'ifacebox-body' }, childs) + ]); + } - s += String.format( - '<strong><%:Gateway%>: </strong>%s<br />', - (ifc6.gw6addr) ? ifc6.gw6addr : '::' - ); + function renderBadge(icon, title) { + return E('span', { class: 'ifacebadge' }, [ + E('img', { src: icon, title: title || '' }), + E('span', labelList(arguments, 2)) + ]); + } - for (var i = 0; i < ifc6.dns.length; i++) - { - s += String.format( - '<strong><%:DNS%> %d: </strong>%s<br />', - i + 1, ifc6.dns[i] - ); - } + XHR.poll(5, '<%=REQUEST_URI%>', { status: 1 }, + function(x, info) + { + if (!(npoll++ % 5)) + updateHosts(); - if (ifc6.uptime > 0) - { - s += String.format( - '<strong><%:Connected%>: </strong>%t<br />', - ifc6.uptime - ); - } + var us = document.getElementById('upstream_status_table'); + + while (us.lastElementChild) + us.removeChild(us.lastElementChild); + + var ifc = info.wan || {}; + + us.appendChild(renderBox( + '<%:IPv4 Upstream%>', + (ifc.ifname && ifc.proto != 'none'), + [ E('div', {}, renderBadge( + '<%=resource%>/icons/%s.png'.format((ifc && ifc.type) ? ifc.type : 'ethernet_disabled'), null, + '<%:Device%>', ifc ? (ifc.name || ifc.ifname || '-') : '-', + '<%:MAC-Address%>', (ifc && ifc.ether) ? ifc.mac : null)) ], + '<%:Protocol%>', ifc.i18n || E('em', '<%:Not connected%>'), + '<%:Address%>', (ifc.ipaddr) ? ifc.ipaddr : '0.0.0.0', + '<%:Netmask%>', (ifc.netmask && ifc.netmask != ifc.ipaddr) ? ifc.netmask : '255.255.255.255', + '<%:Gateway%>', (ifc.gwaddr) ? ifc.gwaddr : '0.0.0.0', + '<%:DNS%> 1', (ifc.dns) ? ifc.dns[0] : null, + '<%:DNS%> 2', (ifc.dns) ? ifc.dns[1] : null, + '<%:DNS%> 3', (ifc.dns) ? ifc.dns[2] : null, + '<%:DNS%> 4', (ifc.dns) ? ifc.dns[3] : null, + '<%:DNS%> 5', (ifc.dns) ? ifc.dns[4] : null, + '<%:Expires%>', (ifc.expires > -1) ? '%t'.format(ifc.expires) : null, + '<%:Connected%>', (ifc.uptime > 0) ? '%t'.format(ifc.uptime) : null)); - ss6.innerHTML = String.format('<small>%s</small>', s); - si6.innerHTML = String.format( - '<img src="<%=resource%>/icons/ethernet.png" />' + - '<br /><small><a href="%s">%s</a></small>', - ifc6.link, ifc6.ifname - ); - } - else - { - si6.innerHTML = '<img src="<%=resource%>/icons/ethernet_disabled.png" /><br /><small>?</small>'; - ss6.innerHTML = '<em><%:Not connected%></em>'; - } + <% if has_ipv6 then %> + var ifc6 = info.wan6 || {}; + + us.appendChild(renderBox( + '<%:IPv6 Upstream%>', + (ifc6.ifname && ifc6.proto != 'none'), + [ E('div', {}, renderBadge( + '<%=resource%>/icons/%s.png'.format(ifc6.type || 'ethernet_disabled'), null, + '<%:Device%>', ifc6 ? (ifc6.name || ifc6.ifname || '-') : '-', + '<%:MAC-Address%>', (ifc6 && ifc6.ether) ? ifc6.mac : null)) ], + '<%:Protocol%>', ifc6.i18n ? (ifc6.i18n + (ifc6.proto === 'dhcp' && ifc6.ip6prefix ? '-PD' : '')) : E('em', '<%:Not connected%>'), + '<%:Prefix Delegated%>', ifc6.ip6prefix, + '<%:Address%>', (ifc6.ip6prefix) ? (ifc6.ip6addr || null) : (ifc6.ipaddr || '::'), + '<%:Gateway%>', (ifc6.gw6addr) ? ifc6.gw6addr : '::', + '<%:DNS%> 1', (ifc6.dns) ? ifc6.dns[0] : null, + '<%:DNS%> 2', (ifc6.dns) ? ifc6.dns[1] : null, + '<%:DNS%> 3', (ifc6.dns) ? ifc6.dns[2] : null, + '<%:DNS%> 4', (ifc6.dns) ? ifc6.dns[3] : null, + '<%:DNS%> 5', (ifc6.dns) ? ifc6.dns[4] : null, + '<%:Connected%>', (ifc6.uptime > 0) ? '%t'.format(ifc6.uptime) : null)); <% end %> <% if has_dsl then %> @@ -358,10 +335,10 @@ if (ls) { /* clear all rows */ - while( ls.rows.length > 1 ) - ls.rows[0].parentNode.deleteRow(1); + while (ls.firstElementChild !== ls.lastElementChild) + ls.removeChild(ls.lastElementChild); - for( var i = 0; i < info.leases.length; i++ ) + for (var i = 0; i < info.leases.length; i++) { var timestr; @@ -372,24 +349,16 @@ else timestr = String.format('%t', info.leases[i].expires); - var tr = ls.rows[0].parentNode.insertRow(-1); - tr.className = 'cbi-section-table-row cbi-rowstyle-' + ((i % 2) + 1); - - tr.insertCell(-1).innerHTML = info.leases[i].hostname ? info.leases[i].hostname : '?'; - tr.insertCell(-1).innerHTML = info.leases[i].ipaddr; - tr.insertCell(-1).innerHTML = info.leases[i].macaddr; - tr.insertCell(-1).innerHTML = timestr; + ls.appendChild(E('<div class="tr cbi-section-table-row cbi-rowstyle-%d">'.format((i % 2) + 1), [ + E('<div class="td">', info.leases[i].hostname ? info.leases[i].hostname : '?'), + E('<div class="td">', info.leases[i].ipaddr), + E('<div class="td">', info.leases[i].macaddr), + E('<div class="td">', timestr) + ])); } - if( ls.rows.length == 1 ) - { - var tr = ls.rows[0].parentNode.insertRow(-1); - tr.className = 'cbi-section-table-row'; - - var td = tr.insertCell(-1); - td.colSpan = 4; - td.innerHTML = '<em><br /><%:There are no active leases.%></em>'; - } + if (ls.firstElementChild === ls.lastElementChild) + ls.appendChild(E('<div class="tr cbi-section-table-row"><div class="td"><em><br /><%:There are no active leases.%></em></div></div>')); } var ls6 = document.getElementById('lease6_status_table'); @@ -398,10 +367,10 @@ ls6.parentNode.style.display = 'block'; /* clear all rows */ - while( ls6.rows.length > 1 ) - ls6.rows[0].parentNode.deleteRow(1); + while (ls6.firstElementChild !== ls6.lastElementChild) + ls6.removeChild(ls6.lastElementChild); - for( var i = 0; i < info.leases6.length; i++ ) + for (var i = 0; i < info.leases6.length; i++) { var timestr; @@ -412,35 +381,29 @@ else timestr = String.format('%t', info.leases6[i].expires); - var tr = ls6.rows[0].parentNode.insertRow(-1); - tr.className = 'cbi-section-table-row cbi-rowstyle-' + ((i % 2) + 1); + var host = hosts[duid2mac(info.leases6[i].duid)], + name = info.leases6[i].hostname, + hint = null; - var host = hosts[duid2mac(info.leases6[i].duid)]; - if (!info.leases6[i].hostname) - tr.insertCell(-1).innerHTML = - (host && (host.name || host.ipv4 || host.ipv6)) - ? '<div style="max-width:200px;overflow:hidden;text-overflow:ellipsis;white-space: nowrap">? (%h)</div>'.format(host.name || host.ipv4 || host.ipv6) - : '?'; - else - tr.insertCell(-1).innerHTML = - (host && host.name && info.leases6[i].hostname != host.name) - ? '<div style="max-width:200px;overflow:hidden;text-overflow:ellipsis;white-space: nowrap">%h (%h)</div>'.format(info.leases6[i].hostname, host.name) - : info.leases6[i].hostname; - - tr.insertCell(-1).innerHTML = info.leases6[i].ip6addr; - tr.insertCell(-1).innerHTML = info.leases6[i].duid; - tr.insertCell(-1).innerHTML = timestr; - } - - if( ls6.rows.length == 1 ) - { - var tr = ls6.rows[0].parentNode.insertRow(-1); - tr.className = 'cbi-section-table-row'; + if (!name) { + if (host) + hint = host.name || host.ipv4 || host.ipv6; + } + else { + if (host && host.name && info.leases6[i].hostname != host.name) + hint = host.name; + } - var td = tr.insertCell(-1); - td.colSpan = 4; - td.innerHTML = '<em><br /><%:There are no active leases.%></em>'; + ls6.appendChild(E('<div class="tr cbi-section-table-row cbi-rowstyle-%d">'.format((i % 2) + 1), [ + E('<div class="td nowrap">', hint ? '<div>%h (%h)</div>'.format(name || '?', hint) : (name || '?')), + E('<div class="td nowrap">', info.leases6[i].ip6addr), + E('<div class="td nowrap">', info.leases6[i].duid), + E('<div class="td nowrap">', timestr) + ])); } + + if (ls6.firstElementChild === ls6.lastElementChild) + ls6.appendChild(E('<div class="tr cbi-section-table-row"><div class="td"><em><br /><%:There are no active leases.%></em></div></div>')); } <% end %> @@ -450,30 +413,34 @@ var ws = document.getElementById('wifi_status_table'); if (ws) { - var wsbody = ws.rows[0].parentNode; - while (ws.rows.length > 0) - wsbody.deleteRow(0); + while (ws.lastElementChild) + ws.removeChild(ws.lastElementChild); for (var didx = 0; didx < info.wifinets.length; didx++) { var dev = info.wifinets[didx]; - - var tr = wsbody.insertRow(-1); - var td; - - td = tr.insertCell(-1); - td.width = "33%"; - td.innerHTML = dev.name; - td.style.verticalAlign = "top"; - - td = tr.insertCell(-1); - - var s = ''; + var net0 = (dev.networks && dev.networks[0]) ? dev.networks[0] : {}; + var vifs = []; for (var nidx = 0; nidx < dev.networks.length; nidx++) { var net = dev.networks[nidx]; var is_assoc = (net.bssid != '00:00:00:00:00:00' && net.channel && !net.disabled); + var num_assoc = 0; + + for (var bssid in net.assoclist) + { + var bss = net.assoclist[bssid]; + + bss.bssid = bssid; + bss.link = net.link; + bss.name = net.name; + bss.ifname = net.ifname; + bss.radio = dev.name; + + assoclist.push(bss); + num_assoc++; + } var icon; if (!is_assoc) @@ -489,66 +456,35 @@ else icon = "<%=resource%>/icons/signal-75-100.png"; - s += String.format( - '<table><tr><td style="text-align:center; width:32px; padding:3px">' + - '<img src="%s" title="<%:Signal%>: %d dBm / <%:Noise%>: %d dBm" />' + - '<br /><small>%d%%</small>' + - '</td><td style="text-align:left; padding:3px"><small>' + - '<strong><%:SSID%>:</strong> <a href="%s">%h</a><br />' + - '<strong><%:Mode%>:</strong> %s<br />' + - '<strong><%:Channel%>:</strong> %d (%.3f <%:GHz%>)<br />' + - '<strong><%:Bitrate%>:</strong> %s <%:Mbit/s%><br />', - icon, net.signal, net.noise, - net.quality, - net.link, net.ssid || '?', - net.mode, - net.channel, net.frequency, - net.bitrate || '?' - ); - - if (is_assoc) - { - s += String.format( - '<strong><%:BSSID%>:</strong> %s<br />' + - '<strong><%:Encryption%>:</strong> %s', - net.bssid || '?', - net.encryption - ); - } - else - { - s += '<em><%:Wireless is disabled or not associated%></em>'; - } - - s += '</small></td></tr></table>'; - - for (var bssid in net.assoclist) - { - var bss = net.assoclist[bssid]; - - bss.bssid = bssid; - bss.link = net.link; - bss.name = net.name; - bss.ifname = net.ifname; - bss.radio = dev.name; - - assoclist.push(bss); - } + vifs.push(renderBadge( + icon, + '<%:Signal%>: %d dBm / <%:Quality%>: %d%%'.format(net.signal, net.quality), + '<%:SSID%>', E('a', { href: net.link }, [ net.ssid || '?' ]), + '<%:Mode%>', net.mode, + '<%:BSSID%>', is_assoc ? (net.bssid || '-') : null, + '<%:Encryption%>', is_assoc ? net.encryption : null, + '<%:Associations%>', is_assoc ? (num_assoc || '-') : null, + null, is_assoc ? null : E('em', '<%:Wireless is disabled or not associated%>'))); } - if (!s) - s = '<em><%:No information available%></em>'; - - td.innerHTML = s; + ws.appendChild(renderBox( + dev.device, dev.up || net0.up, + [ E('div', vifs) ], + '<%:Type%>', dev.name.replace(/^Generic | Wireless Controller .+$/g, ''), + '<%:Channel%>', net0.channel ? '%d (%.3f <%:GHz%>)'.format(net0.channel, net0.frequency) : '-', + '<%:Bitrate%>', net0.bitrate ? '%d <%:Mbit/s%>'.format(net0.bitrate) : '-')); } + + if (!ws.lastElementChild) + ws.appendChild(E('<em><%:No information available%></em>')); } var ac = document.getElementById('wifi_assoc_table'); if (ac) { /* clear all rows */ - while( ac.rows.length > 1 ) - ac.rows[0].parentNode.deleteRow(1); + while (ac.firstElementChild !== ac.lastElementChild) + ac.removeChild(ac.lastElementChild); assoclist.sort(function(a, b) { return (a.name == b.name) @@ -557,11 +493,8 @@ ; }); - for( var i = 0; i < assoclist.length; i++ ) + for (var i = 0; i < assoclist.length; i++) { - var tr = ac.rows[0].parentNode.insertRow(-1); - tr.className = 'cbi-section-table-row cbi-rowstyle-' + (1 + (i % 2)); - var icon; var q = (-1 * (assoclist[i].noise - assoclist[i].signal)) / 5; if (q < 1) @@ -575,49 +508,31 @@ else icon = "<%=resource%>/icons/signal-75-100.png"; - tr.insertCell(-1).innerHTML = String.format( - '<span class="ifacebadge" title="%q"><img src="<%=resource%>/icons/wifi.png" /> %h</span>', - assoclist[i].radio, assoclist[i].ifname - ); - - tr.insertCell(-1).innerHTML = String.format( - '<a href="%s">%s</a>', - assoclist[i].link, - '%h'.format(assoclist[i].name).nobr() - ); - - tr.insertCell(-1).innerHTML = assoclist[i].bssid; - - var host = hosts[assoclist[i].bssid]; - if (host) - tr.insertCell(-1).innerHTML = String.format( - '<div style="max-width:200px;overflow:hidden;text-overflow:ellipsis">%s</div>', - ((host.name && (host.ipv4 || host.ipv6)) - ? '%h (%s)'.format(host.name, host.ipv4 || host.ipv6) - : '%h'.format(host.name || host.ipv4 || host.ipv6)).nobr() - ); - else - tr.insertCell(-1).innerHTML = '?'; - - tr.insertCell(-1).innerHTML = String.format( - '<span class="ifacebadge" title="<%:Signal%>: %d <%:dBm%> / <%:Noise%>: %d <%:dBm%> / <%:SNR%>: %d"><img src="%s" /> %d / %d <%:dBm%></span>', - assoclist[i].signal, assoclist[i].noise, assoclist[i].signal - assoclist[i].noise, - icon, - assoclist[i].signal, assoclist[i].noise - ); - - tr.insertCell(-1).innerHTML = wifirate(assoclist[i], true).nobr() + '<br />' + wifirate(assoclist[i], false).nobr(); + var host = hosts[assoclist[i].bssid], + name = host ? (host.name || host.ipv4 || host.ipv6) : null, + hint = (host && host.name && (host.ipv4 || host.ipv6)) ? (host.ipv4 || host.ipv6) : null; + + ac.appendChild(E('<div class="tr cbi-section-table-row cbi-rowstyle-%d">'.format(1 + (i % 2)), [ + E('<div class="td"><span class="ifacebadge" title="%q"><img src="<%=resource%>/icons/wifi.png" /> %h</span></div>' + .format(assoclist[i].radio, assoclist[i].ifname)), + E('<div class="td"><a href="%s" style="white-space:nowrap">%h</a></div>' + .format(assoclist[i].link, assoclist[i].name)), + E('<div class="td">', + assoclist[i].bssid), + E('<div class="td nowrap">', + hint ? '<div>%h (%h)</div>'.format(name || '?', hint) : (name || '?')), + E('<div class="td"><span class="ifacebadge" title="<%:Signal%>: %d <%:dBm%> / <%:Noise%>: %d <%:dBm%> / <%:SNR%>: %d"><img src="%s" /> %d / %d <%:dBm%></span></div>' + .format(assoclist[i].signal, assoclist[i].noise, assoclist[i].signal - assoclist[i].noise, icon, assoclist[i].signal, assoclist[i].noise)), + E('<div class="td nowrap">', [ + E('<span style="white-space:nowrap">', wifirate(assoclist[i], true)), + E('<br />'), + E('<span style="white-space:nowrap">', wifirate(assoclist[i], false)) + ]) + ])); } - if (ac.rows.length == 1) - { - var tr = ac.rows[0].parentNode.insertRow(-1); - tr.className = 'cbi-section-table-row'; - - var td = tr.insertCell(-1); - td.colSpan = 7; - td.innerHTML = '<br /><em><%:No information available%></em>'; - } + if (ac.firstElementChild === ac.lastElementChild) + ac.appendChild(E('<div class="tr cbi-section-table-row"><div class="td"><em><br /><%:No information available%></em></div></div>')); } <% end %> @@ -679,108 +594,104 @@ <fieldset class="cbi-section"> <legend><%:System%></legend> - <table width="100%" cellspacing="10"> - <tr><td width="33%"><%:Hostname%></td><td><%=luci.sys.hostname() or "?"%></td></tr> - <tr><td width="33%"><%:Model%></td><td><%=pcdata(boardinfo.model or boardinfo.system or "?")%></td></tr> - <tr><td width="33%"><%:Firmware Version%></td><td> + <div class="table" width="100%"> + <div class="tr"><div class="td left" width="33%"><%:Hostname%></div><div class="td left"><%=luci.sys.hostname() or "?"%></div></div> + <div class="tr"><div class="td left" width="33%"><%:Model%></div><div class="td left"><%=pcdata(boardinfo.model or "?")%></div></div> + <div class="tr"><div class="td left" width="33%"><%:Architecture%></div><div class="td left"><%=pcdata(boardinfo.system or "?")%></div></div> + <div class="tr"><div class="td left" width="33%"><%:Firmware Version%></div><div class="td left"> <%=pcdata(ver.distname)%> <%=pcdata(ver.distversion)%> / <%=pcdata(ver.luciname)%> (<%=pcdata(ver.luciversion)%>) - </td></tr> - <tr><td width="33%"><%:Kernel Version%></td><td><%=unameinfo.release or "?"%></td></tr> - <tr><td width="33%"><%:Local Time%></td><td id="localtime">-</td></tr> - <tr><td width="33%"><%:Uptime%></td><td id="uptime">-</td></tr> - <tr><td width="33%"><%:Load Average%></td><td id="loadavg">-</td></tr> - </table> + </div></div> + <div class="tr"><div class="td left" width="33%"><%:Kernel Version%></div><div class="td left"><%=unameinfo.release or "?"%></div></div> + <div class="tr"><div class="td left" width="33%"><%:Local Time%></div><div class="td left" id="localtime">-</div></div> + <div class="tr"><div class="td left" width="33%"><%:Uptime%></div><div class="td left" id="uptime">-</div></div> + <div class="tr"><div class="td left" width="33%"><%:Load Average%></div><div class="td left" id="loadavg">-</div></div> + </div> </fieldset> <fieldset class="cbi-section"> <legend><%:Memory%></legend> - <table width="100%" cellspacing="10"> - <tr><td width="33%"><%:Total Available%></td><td id="memtotal">-</td></tr> - <tr><td width="33%"><%:Free%></td><td id="memfree">-</td></tr> - <tr><td width="33%"><%:Buffered%></td><td id="membuff">-</td></tr> - </table> + <div class="table" width="100%"> + <div class="tr"><div class="td left" width="33%"><%:Total Available%></div><div class="td left" id="memtotal">-</div></div> + <div class="tr"><div class="td left" width="33%"><%:Free%></div><div class="td left" id="memfree">-</div></div> + <div class="tr"><div class="td left" width="33%"><%:Buffered%></div><div class="td left" id="membuff">-</div></div> + </div> </fieldset> <% if swapinfo.total > 0 then %> <fieldset class="cbi-section"> <legend><%:Swap%></legend> - <table width="100%" cellspacing="10"> - <tr><td width="33%"><%:Total Available%></td><td id="swaptotal">-</td></tr> - <tr><td width="33%"><%:Free%></td><td id="swapfree">-</td></tr> - </table> + <div class="table" width="100%"> + <div class="tr"><div class="td left" width="33%"><%:Total Available%></div><div class="td left" id="swaptotal">-</div></div> + <div class="tr"><div class="td left" width="33%"><%:Free%></div><div class="td left" id="swapfree">-</div></div> + </div> </fieldset> <% end %> <fieldset class="cbi-section"> <legend><%:Network%></legend> - <table width="100%" cellspacing="10"> - <tr><td width="33%" style="vertical-align:top"><%:IPv4 WAN Status%></td><td> - <table><tr> - <td id="wan4_i" style="width:16px; text-align:center; padding:3px"><img src="<%=resource%>/icons/ethernet_disabled.png" /><br /><small>?</small></td> - <td id="wan4_s" style="vertical-align:middle; padding: 3px"><em><%:Collecting data...%></em></td> - </tr></table> - </td></tr> - <% if has_ipv6 then %> - <tr><td width="33%" style="vertical-align:top"><%:IPv6 WAN Status%></td><td> - <table><tr> - <td id="wan6_i" style="width:16px; text-align:center; padding:3px"><img src="<%=resource%>/icons/ethernet_disabled.png" /><br /><small>?</small></td> - <td id="wan6_s" style="vertical-align:middle; padding: 3px"><em><%:Collecting data...%></em></td> - </tr></table> - </td></tr> - <% end %> - <tr><td width="33%"><%:Active Connections%></td><td id="conns">-</td></tr> - </table> + <div id="upstream_status_table" class="network-status-table"> + <em><%:Collecting data...%></em> + </div> + + <div class="table" width="100%"> + <div class="tr"><div class="td left" width="33%"><%:Active Connections%></div><div class="td left" id="conns">-</div></div> + </div> </fieldset> <% if has_dhcp then %> <fieldset class="cbi-section"> <legend><%:DHCP Leases%></legend> - <table class="cbi-section-table" id="lease_status_table"> - <tr class="cbi-section-table-titles"> - <th class="cbi-section-table-cell"><%:Hostname%></th> - <th class="cbi-section-table-cell"><%:IPv4-Address%></th> - <th class="cbi-section-table-cell"><%:MAC-Address%></th> - <th class="cbi-section-table-cell"><%:Leasetime remaining%></th> - </tr> - <tr class="cbi-section-table-row"> - <td colspan="4"><em><br /><%:Collecting data...%></em></td> - </tr> - </table> + <div class="table cbi-section-table" id="lease_status_table"> + <div class="tr cbi-section-table-titles"> + <div class="th"><%:Hostname%></div> + <div class="th"><%:IPv4-Address%></div> + <div class="th"><%:MAC-Address%></div> + <div class="th"><%:Leasetime remaining%></div> + </div> + <div class="tr cbi-section-table-row"> + <div class="td" colspan="4"><em><br /><%:Collecting data...%></em></div> + </div> + </div> </fieldset> <fieldset class="cbi-section" style="display:none"> <legend><%:DHCPv6 Leases%></legend> - <table class="cbi-section-table" id="lease6_status_table"> - <tr class="cbi-section-table-titles"> - <th class="cbi-section-table-cell"><%:Host%></th> - <th class="cbi-section-table-cell"><%:IPv6-Address%></th> - <th class="cbi-section-table-cell"><%:DUID%></th> - <th class="cbi-section-table-cell"><%:Leasetime remaining%></th> - </tr> - <tr class="cbi-section-table-row"> - <td colspan="4"><em><br /><%:Collecting data...%></em></td> - </tr> - </table> + <div class="table cbi-section-table" id="lease6_status_table"> + <div class="tr cbi-section-table-titles"> + <div class="th"><%:Host%></div> + <div class="th"><%:IPv6-Address%></div> + <div class="th"><%:DUID%></div> + <div class="th"><%:Leasetime remaining%></div> + </div> + <div class="tr cbi-section-table-row"> + <div class="td" colspan="4"><em><br /><%:Collecting data...%></em></div> + </div> + </div> </fieldset> <% end %> <% if has_dsl then %> <fieldset class="cbi-section"> - <legend><%:DSL%></legend> - <table width="100%" cellspacing="10"> - <tr><td width="33%" style="vertical-align:top"><%:DSL Status%></td><td> - <table><tr> - <td id="dsl_i" style="width:16px; text-align:center; padding:3px"><img src="<%=resource%>/icons/ethernet_disabled.png" /><br /><small>?</small></td> - <td id="dsl_s" style="vertical-align:middle; padding: 3px"><em><%:Collecting data...%></em></td> - </tr></table> - </td></tr> - </table> + <legend><%:DSL%></legend> + <div class="table" width="100%"> + <div class="tr"> + <div class="td left" width="33%" style="vertical-align:top"><%:DSL Status%></div> + <div class="td"> + <div class="table"> + <div class="tr"> + <div class="td" id="dsl_i" style="width:16px; text-align:center; padding:3px"><img src="<%=resource%>/icons/ethernet_disabled.png" /><br /><small>?</small></div> + <div class="td left" id="dsl_s" style="vertical-align:middle; padding: 3px"><em><%:Collecting data...%></em></div> + </div> + </div> + </div> + </div> + </div> </fieldset> <% end %> @@ -788,27 +699,27 @@ <fieldset class="cbi-section"> <legend><%:Wireless%></legend> - <table id="wifi_status_table" width="100%" cellspacing="10"> - <tr><td><em><%:Collecting data...%></em></td></tr> - </table> + <div id="wifi_status_table" class="network-status-table"> + <em><%:Collecting data...%></em> + </div> </fieldset> <fieldset class="cbi-section"> <legend><%:Associated Stations%></legend> - <table class="cbi-section-table valign-middle" id="wifi_assoc_table"> - <tr class="cbi-section-table-titles"> - <th class="cbi-section-table-cell"> </th> - <th class="cbi-section-table-cell"><%:Network%></th> - <th class="cbi-section-table-cell"><%:MAC-Address%></th> - <th class="cbi-section-table-cell"><%:Host%></th> - <th class="cbi-section-table-cell"><%:Signal%> / <%:Noise%></th> - <th class="cbi-section-table-cell"><%:RX Rate%> / <%:TX Rate%></th> - </tr> - <tr class="cbi-section-table-row"> - <td colspan="6"><em><br /><%:Collecting data...%></em></td> - </tr> - </table> + <div class="table cbi-section-table valign-middle" id="wifi_assoc_table"> + <div class="tr cbi-section-table-titles"> + <div class="th"> </div> + <div class="th"><%:Network%></div> + <div class="th"><%:MAC-Address%></div> + <div class="th"><%:Host%></div> + <div class="th"><%:Signal%> / <%:Noise%></div> + <div class="th"><%:RX Rate%> / <%:TX Rate%></div> + </div> + <div class="tr cbi-section-table-row"> + <div class="td" colspan="6"><em><br /><%:Collecting data...%></em></div> + </div> + </div> </fieldset> <% end %> diff --git a/modules/luci-mod-admin-full/luasrc/view/admin_status/iptables.htm b/modules/luci-mod-admin-full/luasrc/view/admin_status/iptables.htm index 3f4b83b80..ced4d5f77 100644 --- a/modules/luci-mod-admin-full/luasrc/view/admin_status/iptables.htm +++ b/modules/luci-mod-admin-full/luasrc/view/admin_status/iptables.htm @@ -92,14 +92,14 @@ <% for _, tbl in ipairs(tables) do chaincnt = 0 %> <h3><%:Table%>: <%=tbl%></h3> - <table class="cbi-section-table" style="font-size:90%"> + <div class="table cbi-section-table" style="font-size:90%"> <% for _, chain in ipairs(ipt:chains(tbl)) do rowcnt = 0 chaincnt = chaincnt + 1 chaininfo = ipt:chain(tbl, chain) %> - <tr class="cbi-section-table-titles cbi-rowstyle-<%=rowstyle()%>"> - <th class="cbi-section-table-cell" style="text-align:left" colspan="11"> + <div class="tr cbi-section-table-titles cbi-rowstyle-<%=rowstyle()%>"> + <div class="th cbi-section-table-cell" style="text-align:left" colspan="11"> <br /><span id="rule_<%=tbl:lower()%>_<%=chain%>"> <%:Chain%> <em><%=chain%></em> (<%- if chaininfo.policy then -%> @@ -107,47 +107,47 @@ <%- else -%> <%:References%>: <%=chaininfo.references-%> <%- end -%>)</span> - </th> - </tr> - <tr class="cbi-section-table-descr"> - <th class="cbi-section-table-cell"><%:Pkts.%></th> - <th class="cbi-section-table-cell"><%:Traffic%></th> - <th class="cbi-section-table-cell"><%:Target%></th> - <th class="cbi-section-table-cell"><%:Prot.%></th> - <th class="cbi-section-table-cell"><%:In%></th> - <th class="cbi-section-table-cell"><%:Out%></th> - <th class="cbi-section-table-cell"><%:Source%></th> - <th class="cbi-section-table-cell"><%:Destination%></th> - <th class="cbi-section-table-cell" style="width:30%"><%:Options%></th> - </tr> + </div> + </div> + <div class="tr cbi-section-table-descr"> + <div class="th cbi-section-table-cell"><%:Pkts.%></div> + <div class="th cbi-section-table-cell"><%:Traffic%></div> + <div class="th cbi-section-table-cell"><%:Target%></div> + <div class="th cbi-section-table-cell"><%:Prot.%></div> + <div class="th cbi-section-table-cell"><%:In%></div> + <div class="th cbi-section-table-cell"><%:Out%></div> + <div class="th cbi-section-table-cell"><%:Source%></div> + <div class="th cbi-section-table-cell"><%:Destination%></div> + <div class="th cbi-section-table-cell" style="width:30%"><%:Options%></div> + </div> <% for _, rule in ipairs(ipt:find({table=tbl, chain=chain})) do %> - <tr class="cbi-section-table-row cbi-rowstyle-<%=rowstyle()%>"> - <td><%=rule.packets%></td> - <td style="white-space: nowrap"><%=wba.byte_format(rule.bytes)%></td> - <td><%=rule.target and link_target(tbl, rule.target) or "-"%></td> - <td><%=rule.protocol%></td> - <td><%=link_iface(rule.inputif)%></td> - <td><%=link_iface(rule.outputif)%></td> - <td><%=rule.source%></td> - <td><%=rule.destination%></td> - <td style="width:30%"><small><%=#rule.options > 0 and luci.util.pcdata(table.concat(rule.options, " ")) or "-"%></small></td> - </tr> + <div class="tr cbi-section-table-row cbi-rowstyle-<%=rowstyle()%>"> + <div class="td"><%=rule.packets%></div> + <div class="td" style="white-space: nowrap"><%=wba.byte_format(rule.bytes)%></div> + <div class="td"><%=rule.target and link_target(tbl, rule.target) or "-"%></div> + <div class="td"><%=rule.protocol%></div> + <div class="td"><%=link_iface(rule.inputif)%></div> + <div class="td"><%=link_iface(rule.outputif)%></div> + <div class="td"><%=rule.source%></div> + <div class="td"><%=rule.destination%></div> + <div class="td" style="width:30%"><small><%=#rule.options > 0 and luci.util.pcdata(table.concat(rule.options, " ")) or "-"%></small></div> + </div> <% end %> <% if rowcnt == 1 then %> - <tr class="cbi-section-table-titles cbi-rowstyle-<%=rowstyle()%>"> - <td colspan="9"><em><%:No rules in this chain%></em></td> - </tr> + <div class="tr cbi-section-table-titles cbi-rowstyle-<%=rowstyle()%>"> + <div class="td" colspan="9"><em><%:No rules in this chain%></em></div> + </div> <% end %> <% end %> <% if chaincnt == 0 then %> - <tr class="cbi-section-table-titles cbi-rowstyle-<%=rowstyle()%>"> - <td colspan="9"><em><%:No chains in this table%></em></td> - </tr> + <div class="tr cbi-section-table-titles cbi-rowstyle-<%=rowstyle()%>"> + <div class="td" colspan="9"><em><%:No chains in this table%></em></div> + </div> <% end %> - </table> + </div> <br /><br /> <% end %> </fieldset> 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 97a2f5ed5..c8ada7156 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 @@ -248,37 +248,37 @@ <div style="text-align:right"><small id="scale">-</small></div> <br /> -<table style="width:100%; table-layout:fixed" cellspacing="5"> - <tr> - <td style="text-align:right; vertical-align:top"><strong style="border-bottom:2px solid #ff0000; white-space:nowrap"><%:1 Minute Load:%></strong></td> - <td id="lb_load01_cur">0</td> - - <td style="text-align:right; vertical-align:top"><strong><%:Average:%></strong></td> - <td id="lb_load01_avg">0</td> - - <td style="text-align:right; vertical-align:top"><strong><%:Peak:%></strong></td> - <td id="lb_load01_peak">0</td> - </tr> - <tr> - <td style="text-align:right; vertical-align:top"><strong style="border-bottom:2px solid #ff6600; white-space:nowrap"><%:5 Minute Load:%></strong></td> - <td id="lb_load05_cur">0</td> - - <td style="text-align:right; vertical-align:top"><strong><%:Average:%></strong></td> - <td id="lb_load05_avg">0</td> - - <td style="text-align:right; vertical-align:top"><strong><%:Peak:%></strong></td> - <td id="lb_load05_peak">0</td> - </tr> - <tr> - <td style="text-align:right; vertical-align:top"><strong style="border-bottom:2px solid #ffaa00; white-space:nowrap"><%:15 Minute Load:%></strong></td> - <td id="lb_load15_cur">0</td> - - <td style="text-align:right; vertical-align:top"><strong><%:Average:%></strong></td> - <td id="lb_load15_avg">0</td> - - <td style="text-align:right; vertical-align:top"><strong><%:Peak:%></strong></td> - <td id="lb_load15_peak">0</td> - </tr> -</table> +<div class="table" style="width:100%; table-layout:fixed" cellspacing="5"> + <div class="tr"> + <div class="td" style="text-align:right; vertical-align:top"><strong style="border-bottom:2px solid #ff0000; white-space:nowrap"><%:1 Minute Load:%></strong></div> + <div class="td" id="lb_load01_cur">0</div> + + <div class="td" style="text-align:right; vertical-align:top"><strong><%:Average:%></strong></div> + <div class="td" id="lb_load01_avg">0</div> + + <div class="td" style="text-align:right; vertical-align:top"><strong><%:Peak:%></strong></div> + <div class="td" id="lb_load01_peak">0</div> + </div> + <div class="tr"> + <div class="td" style="text-align:right; vertical-align:top"><strong style="border-bottom:2px solid #ff6600; white-space:nowrap"><%:5 Minute Load:%></strong></div> + <div class="td" id="lb_load05_cur">0</div> + + <div class="td" style="text-align:right; vertical-align:top"><strong><%:Average:%></strong></div> + <div class="td" id="lb_load05_avg">0</div> + + <div class="td" style="text-align:right; vertical-align:top"><strong><%:Peak:%></strong></div> + <div class="td" id="lb_load05_peak">0</div> + </div> + <div class="tr"> + <div class="td" style="text-align:right; vertical-align:top"><strong style="border-bottom:2px solid #ffaa00; white-space:nowrap"><%:15 Minute Load:%></strong></div> + <div class="td" id="lb_load15_cur">0</div> + + <div class="td" style="text-align:right; vertical-align:top"><strong><%:Average:%></strong></div> + <div class="td" id="lb_load15_avg">0</div> + + <div class="td" style="text-align:right; vertical-align:top"><strong><%:Peak:%></strong></div> + <div class="td" id="lb_load15_peak">0</div> + </div> +</div> <%+footer%> 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 f474c7156..af8037135 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 @@ -39,28 +39,28 @@ <fieldset class="cbi-section"> <legend>ARP</legend> <div class="cbi-section-node"> - <table class="cbi-section-table"> - <tr class="cbi-section-table-titles"> - <th class="cbi-section-table-cell"><%_<abbr title="Internet Protocol Version 4">IPv4</abbr>-Address%></th> - <th class="cbi-section-table-cell"><%_<abbr title="Media Access Control">MAC</abbr>-Address%></th> - <th class="cbi-section-table-cell"><%:Interface%></th> - </tr> + <div class="table cbi-section-table"> + <div class="tr cbi-section-table-titles"> + <div class="th cbi-section-table-cell"><%_<abbr title="Internet Protocol Version 4">IPv4</abbr>-Address%></div> + <div class="th cbi-section-table-cell"><%_<abbr title="Media Access Control">MAC</abbr>-Address%></div> + <div class="th cbi-section-table-cell"><%:Interface%></div> + </div> <% for _, v in ipairs(ip.neighbors({ family = 4 })) do if v.mac then %> - <tr class="cbi-section-table-row cbi-rowstyle-<%=(style and 1 or 2)%>"> - <td class="cbi-value-field"><%=v.dest%></td> - <td class="cbi-value-field"><%=v.mac%></td> - <td class="cbi-value-field"><%=luci.tools.webadmin.iface_get_network(v.dev) or '(' .. v.dev .. ')'%></td> - </tr> + <div class="tr cbi-section-table-row cbi-rowstyle-<%=(style and 1 or 2)%>"> + <div class="td cbi-value-field"><%=v.dest%></div> + <div class="td cbi-value-field"><%=v.mac%></div> + <div class="td cbi-value-field"><%=luci.tools.webadmin.iface_get_network(v.dev) or '(' .. v.dev .. ')'%></div> + </div> <% style = not style end end %> - </table> + </div> </div> </fieldset> <br /> @@ -69,24 +69,24 @@ <legend><%_Active <abbr title="Internet Protocol Version 4">IPv4</abbr>-Routes%></legend> <div class="cbi-section-node"> - <table class="cbi-section-table"> - <tr class="cbi-section-table-titles"> - <th class="cbi-section-table-cell"><%:Network%></th> - <th class="cbi-section-table-cell"><%:Target%></th> - <th class="cbi-section-table-cell"><%_<abbr title="Internet Protocol Version 4">IPv4</abbr>-Gateway%></th> - <th class="cbi-section-table-cell"><%:Metric%></th> - <th class="cbi-section-table-cell"><%:Table%></th> - </tr> + <div class="table cbi-section-table"> + <div class="tr cbi-section-table-titles"> + <div class="th cbi-section-table-cell"><%:Network%></div> + <div class="th cbi-section-table-cell"><%:Target%></div> + <div class="th cbi-section-table-cell"><%_<abbr title="Internet Protocol Version 4">IPv4</abbr>-Gateway%></div> + <div class="th cbi-section-table-cell"><%:Metric%></div> + <div class="th cbi-section-table-cell"><%:Table%></div> + </div> <% for _, v in ipairs(ip.routes({ family = 4, type = 1 })) do %> - <tr class="cbi-section-table-row cbi-rowstyle-<%=(style and 1 or 2)%>"> - <td class="cbi-value-field"><%=luci.tools.webadmin.iface_get_network(v.dev) or v.dev%></td> - <td class="cbi-value-field"><%=v.dest%></td> - <td class="cbi-value-field"><%=v.gw%></td> - <td class="cbi-value-field"><%=v.metric or 0%></td> - <td class="cbi-value-field"><%=rtn[v.table] or v.table%></td> - </tr> + <div class="tr cbi-section-table-row cbi-rowstyle-<%=(style and 1 or 2)%>"> + <div class="td cbi-value-field"><%=luci.tools.webadmin.iface_get_network(v.dev) or v.dev%></div> + <div class="td cbi-value-field"><%=v.dest%></div> + <div class="td cbi-value-field"><%=v.gw%></div> + <div class="td cbi-value-field"><%=v.metric or 0%></div> + <div class="td cbi-value-field"><%=rtn[v.table] or v.table%></div> + </div> <% style = not style end %> - </table> + </div> </div> </fieldset> <br /> @@ -99,31 +99,31 @@ <legend><%_Active <abbr title="Internet Protocol Version 6">IPv6</abbr>-Routes%></legend> <div class="cbi-section-node"> - <table class="cbi-section-table"> - <tr class="cbi-section-table-titles"> - <th class="cbi-section-table-cell"><%:Network%></th> - <th class="cbi-section-table-cell"><%:Target%></th> - <th class="cbi-section-table-cell"><%:Source%></th> - <th class="cbi-section-table-cell"><%:Metric%></th> - <th class="cbi-section-table-cell"><%:Table%></th> - </tr> + <div class="table cbi-section-table"> + <div class="tr cbi-section-table-titles"> + <div class="th cbi-section-table-cell"><%:Network%></div> + <div class="th cbi-section-table-cell"><%:Target%></div> + <div class="th cbi-section-table-cell"><%:Source%></div> + <div class="th cbi-section-table-cell"><%:Metric%></div> + <div class="th cbi-section-table-cell"><%:Table%></div> + </div> <% for _, v in ipairs(ip.routes({ family = 6, type = 1 })) do if v.dest and not v.dest:is6linklocal() then %> - <tr class="cbi-section-table-row cbi-rowstyle-<%=(style and 1 or 2)%>"> - <td class="cbi-value-field"><%=luci.tools.webadmin.iface_get_network(v.dev) or '(' .. v.dev .. ')'%></td> - <td class="cbi-value-field"><%=v.dest%></td> - <td class="cbi-value-field"><%=v.from%></td> - <td class="cbi-value-field"><%=v.metric or 0%></td> - <td class="cbi-value-field"><%=rtn[v.table] or v.table%></td> - </tr> + <div class="tr cbi-section-table-row cbi-rowstyle-<%=(style and 1 or 2)%>"> + <div class="td cbi-value-field"><%=luci.tools.webadmin.iface_get_network(v.dev) or '(' .. v.dev .. ')'%></div> + <div class="td cbi-value-field"><%=v.dest%></div> + <div class="td cbi-value-field"><%=v.from%></div> + <div class="td cbi-value-field"><%=v.metric or 0%></div> + <div class="td cbi-value-field"><%=rtn[v.table] or v.table%></div> + </div> <% style = not style end end %> - </table> + </div> </div> </fieldset> <br /> @@ -132,27 +132,27 @@ <legend><%:IPv6 Neighbours%></legend> <div class="cbi-section-node"> - <table class="cbi-section-table"> - <tr class="cbi-section-table-titles"> - <th class="cbi-section-table-cell"><%:IPv6-Address%></th> - <th class="cbi-section-table-cell"><%:MAC-Address%></th> - <th class="cbi-section-table-cell"><%:Interface%></th> - </tr> + <div class="table cbi-section-table"> + <div class="tr cbi-section-table-titles"> + <div class="th cbi-section-table-cell"><%:IPv6-Address%></div> + <div class="th cbi-section-table-cell"><%:MAC-Address%></div> + <div class="th cbi-section-table-cell"><%:Interface%></div> + </div> <% for _, v in ipairs(ip.neighbors({ family = 6 })) do if v.dest and not v.dest:is6linklocal() and v.mac then %> - <tr class="cbi-section-table-row cbi-rowstyle-<%=(style and 1 or 2)%>"> - <td class="cbi-value-field"><%=v.dest%></td> - <td class="cbi-value-field"><%=v.mac%></td> - <td class="cbi-value-field"><%=luci.tools.webadmin.iface_get_network(v.dev) or '(' .. v.dev .. ')'%></td> - </tr> + <div class="tr cbi-section-table-row cbi-rowstyle-<%=(style and 1 or 2)%>"> + <div class="td cbi-value-field"><%=v.dest%></div> + <div class="td cbi-value-field"><%=v.mac%></div> + <div class="td cbi-value-field"><%=luci.tools.webadmin.iface_get_network(v.dev) or '(' .. v.dev .. ')'%></div> + </div> <% style = not style end end %> - </table> + </div> </div> </fieldset> <br /> 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 aa658ff0c..4211b2647 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 @@ -325,28 +325,28 @@ <div style="text-align:right"><small id="scale">-</small></div> <br /> -<table style="width:100%; table-layout:fixed" cellspacing="5"> - <tr> - <td style="text-align:right; vertical-align:top"><strong style="border-bottom:2px solid blue"><%:Signal:%></strong></td> - <td id="rssi_bw_cur">0 <%:dBm%></td> +<div class="table" style="width:100%; table-layout:fixed" cellspacing="5"> + <div class="tr"> + <div class="td" style="text-align:right; vertical-align:top"><strong style="border-bottom:2px solid blue"><%:Signal:%></strong></div> + <div class="td" id="rssi_bw_cur">0 <%:dBm%></div> - <td style="text-align:right; vertical-align:top"><strong><%:Average:%></strong></td> - <td id="rssi_bw_avg">0 <%:dBm%></td> + <div class="td" style="text-align:right; vertical-align:top"><strong><%:Average:%></strong></div> + <div class="td" id="rssi_bw_avg">0 <%:dBm%></div> - <td style="text-align:right; vertical-align:top"><strong><%:Peak:%></strong></td> - <td id="rssi_bw_peak">0 <%:dBm%></td> - </tr> - <tr> - <td style="text-align:right; vertical-align:top"><strong style="border-bottom:2px solid red"><%:Noise:%></strong></td> - <td id="noise_bw_cur">0 <%:dBm%></td> + <div class="td" style="text-align:right; vertical-align:top"><strong><%:Peak:%></strong></div> + <div class="td" id="rssi_bw_peak">0 <%:dBm%></div> + </div> + <div class="tr"> + <div class="td" style="text-align:right; vertical-align:top"><strong style="border-bottom:2px solid red"><%:Noise:%></strong></div> + <div class="td" id="noise_bw_cur">0 <%:dBm%></div> - <td style="text-align:right; vertical-align:top"><strong><%:Average:%></strong></td> - <td id="noise_bw_avg">0 <%:dBm%></td> + <div class="td" style="text-align:right; vertical-align:top"><strong><%:Average:%></strong></div> + <div class="td" id="noise_bw_avg">0 <%:dBm%></div> - <td style="text-align:right; vertical-align:top"><strong><%:Peak:%></strong></td> - <td id="noise_bw_peak">0 <%:dBm%></td> - </tr> -</table> + <div class="td" style="text-align:right; vertical-align:top"><strong><%:Peak:%></strong></div> + <div class="td" id="noise_bw_peak">0 <%:dBm%></div> + </div> +</div> <br /> @@ -354,17 +354,17 @@ <div style="text-align:right"><small id="scale2">-</small></div> <br /> -<table style="width:100%; table-layout:fixed" cellspacing="5"> - <tr> - <td style="text-align:right; vertical-align:top"><strong style="border-bottom:2px solid green"><%:Phy Rate:%></strong></td> - <td id="rate_bw_cur">0 MBit/s</td> +<div class="table" style="width:100%; table-layout:fixed" cellspacing="5"> + <div class="tr"> + <div class="td" style="text-align:right; vertical-align:top"><strong style="border-bottom:2px solid green"><%:Phy Rate:%></strong></div> + <div class="td" id="rate_bw_cur">0 MBit/s</div> - <td style="text-align:right; vertical-align:top"><strong><%:Average:%></strong></td> - <td id="rate_bw_avg">0 MBit/s</td> + <div class="td" style="text-align:right; vertical-align:top"><strong><%:Average:%></strong></div> + <div class="td" id="rate_bw_avg">0 MBit/s</div> - <td style="text-align:right; vertical-align:top"><strong><%:Peak:%></strong></td> - <td id="rate_bw_peak">0 MBit/s</td> - </tr> -</table> + <div class="td" style="text-align:right; vertical-align:top"><strong><%:Peak:%></strong></div> + <div class="td" id="rate_bw_peak">0 MBit/s</div> + </div> +</div> <%+footer%> diff --git a/modules/luci-mod-admin-full/luasrc/view/admin_system/packages.htm b/modules/luci-mod-admin-full/luasrc/view/admin_system/packages.htm index 88e0fffd9..4944a232b 100644 --- a/modules/luci-mod-admin-full/luasrc/view/admin_system/packages.htm +++ b/modules/luci-mod-admin-full/luasrc/view/admin_system/packages.htm @@ -128,34 +128,34 @@ end <% if display ~= "available" then %> <fieldset class="cbi-section"> - <table class="cbi-section-table" style="width:100%"> - <tr class="cbi-section-table-titles"> - <th class="cbi-section-table-cell" style="text-align:left"> </th> - <th class="cbi-section-table-cell" style="text-align:left"><%:Package name%></th> - <th class="cbi-section-table-cell" style="text-align:left"><%:Version%></th> - </tr> + <div class="table cbi-section-table" style="width:100%"> + <div class="tr cbi-section-table-titles"> + <div class="th cbi-section-table-cell" style="text-align:left"> </div> + <div class="th cbi-section-table-cell" style="text-align:left"><%:Package name%></div> + <div class="th cbi-section-table-cell" style="text-align:left"><%:Version%></div> + </div> <% local empty = true; luci.model.ipkg.list_installed(querypat, function(n, v, s, d) empty = false; filter[n] = true %> - <tr class="cbi-section-table-row cbi-rowstyle-<%=rowstyle()%>"> - <td style="text-align:left; width:10%"> + <div class="tr cbi-section-table-row cbi-rowstyle-<%=rowstyle()%>"> + <div class="td" style="text-align:left; width:10%"> <form method="post" class="inline" action="<%=REQUEST_URI%>"> <input type="hidden" name="exec" value="1" /> <input type="hidden" name="token" value="<%=token%>" /> <input type="hidden" name="remove" value="<%=pcdata(n)%>" /> <a onclick="window.confirm('<%:Remove%> "<%=luci.util.pcdata(n)%>" ?') && this.parentNode.submit(); return false" href="#"><%:Remove%></a> </form> - </td> - <td style="text-align:left"><%=luci.util.pcdata(n)%></td> - <td style="text-align:left"><%=luci.util.pcdata(v)%></td> - </tr> + </div> + <div class="td" style="text-align:left"><%=luci.util.pcdata(n)%></div> + <div class="td" style="text-align:left"><%=luci.util.pcdata(v)%></div> + </div> <% end) %> <% if empty then %> - <tr class="cbi-section-table-row"> - <td style="text-align:left"> </td> - <td style="text-align:left"><em><%:none%></em></td> - <td style="text-align:left"><em><%:none%></em></td> - </tr> + <div class="tr cbi-section-table-row"> + <div class="td" style="text-align:left"> </div> + <div class="td" style="text-align:left"><em><%:none%></em></div> + <div class="td" style="text-align:left"><em><%:none%></em></div> + </div> <% end %> - </table> + </div> </fieldset> <% else %> <fieldset class="cbi-section"> @@ -168,40 +168,40 @@ end </ul> <div class="cbi-section-node"> <% end %> - <table class="cbi-section-table" style="width:100%"> - <tr class="cbi-section-table-titles"> - <th class="cbi-section-table-cell" style="text-align:left"> </th> - <th class="cbi-section-table-cell" style="text-align:left"><%:Package name%></th> - <th class="cbi-section-table-cell" style="text-align:left"><%:Version%></th> - <th class="cbi-section-table-cell" style="text-align:right"><%:Size (.ipk)%></th> - <th class="cbi-section-table-cell" style="text-align:left"><%:Description%></th> - </tr> + <div class="table cbi-section-table" style="width:100%"> + <div class="tr cbi-section-table-titles"> + <div class="th cbi-section-table-cell" style="text-align:left"> </div> + <div class="th cbi-section-table-cell" style="text-align:left"><%:Package name%></div> + <div class="th cbi-section-table-cell" style="text-align:left"><%:Version%></div> + <div class="th cbi-section-table-cell" style="text-align:right"><%:Size (.ipk)%></div> + <div class="th cbi-section-table-cell" style="text-align:left"><%:Description%></div> + </div> <% local empty = true; opkg_list(querypat or letterpat, function(n, v, s, d) if filter[n] then return end; empty = false %> - <tr class="cbi-section-table-row cbi-rowstyle-<%=rowstyle()%>"> - <td style="text-align:left; width:10%"> + <div class="tr cbi-section-table-row cbi-rowstyle-<%=rowstyle()%>"> + <div class="td" style="text-align:left; width:10%"> <form method="post" class="inline" action="<%=REQUEST_URI%>"> <input type="hidden" name="exec" value="1" /> <input type="hidden" name="token" value="<%=token%>" /> <input type="hidden" name="install" value="<%=pcdata(n)%>" /> <a onclick="window.confirm('<%:Install%> "<%=luci.util.pcdata(n)%>" ?') && this.parentNode.submit(); return false" href="#"><%:Install%></a> </form> - </td> - <td style="text-align:left"><%=luci.util.pcdata(n)%></td> - <td style="text-align:left"><%=luci.util.pcdata(v)%></td> - <td style="text-align:right"><%=luci.util.pcdata(s)%></td> - <td style="text-align:left"><%=luci.util.pcdata(d)%></td> - </tr> + </div> + <div class="td" style="text-align:left"><%=luci.util.pcdata(n)%></div> + <div class="td" style="text-align:left"><%=luci.util.pcdata(v)%></div> + <div class="td" style="text-align:right"><%=luci.util.pcdata(s)%></div> + <div class="td" style="text-align:left"><%=luci.util.pcdata(d)%></div> + </div> <% end) %> <% if empty then %> - <tr class="cbi-section-table-row"> - <td style="text-align:left"> </td> - <td style="text-align:left"><em><%:none%></em></td> - <td style="text-align:left"><em><%:none%></em></td> - <td style="text-align:right"><em><%:none%></em></td> - <td style="text-align:left"><em><%:none%></em></td> - </tr> + <div class="tr cbi-section-table-row"> + <div class="td" style="text-align:left"> </div> + <div class="td" style="text-align:left"><em><%:none%></em></div> + <div class="td" style="text-align:left"><em><%:none%></em></div> + <div class="td" style="text-align:right"><em><%:none%></em></div> + <div class="td" style="text-align:left"><em><%:none%></em></div> + </div> <% end %> - </table> + </div> <% if not querypat then %> </div> <% end %> 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 9e9ce2be2..c69ec1215 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 @@ -36,7 +36,7 @@ <div style="text-align:right"> <input class="cbi-button cbi-button-save" type="button" id="apply_button" value="<%:Save & Apply%>" onclick="uci_apply(true); this.blur()" /> - <form class="inline" method="post" action="<%=controller%>/admin/uci/revert"> + <form class="inline" method="post" action="<%=url("admin/uci/revert")%>"> <input type="hidden" name="token" value="<%=token%>" /> <input type="hidden" name="redir" value="<%=pcdata(luci.http.formvalue("redir"))%>" /> <input class="cbi-button cbi-button-reset" type="submit" value="<%:Revert%>" /> diff --git a/modules/luci-mod-freifunk/luasrc/view/freifunk/contact.htm b/modules/luci-mod-freifunk/luasrc/view/freifunk/contact.htm index 1add595c6..dca35376c 100644 --- a/modules/luci-mod-freifunk/luasrc/view/freifunk/contact.htm +++ b/modules/luci-mod-freifunk/luasrc/view/freifunk/contact.htm @@ -31,33 +31,33 @@ end <fieldset xmlns="http://www.w3.org/1999/xhtml" class="cbi-section"> <legend><%:Operator%></legend> - <table cellspacing="10" width="100%" style="text-align:left"> - <tr><th width="33%"><%:Nickname%>:</th><td><%=nickname%></td></tr> - <tr><th width="33%"><%:Realname%>:</th><td><%=name%></td></tr> - <tr><th width="33%"><%:Homepage%>:</th><td> + <div class="table" cellspacing="10" width="100%" style="text-align:left"> + <div class="tr"><div class="th" width="33%"><%:Nickname%>:</div><div class="td"><%=nickname%></div></div> + <div class="tr"><div class="th" width="33%"><%:Realname%>:</div><div class="td"><%=name%></div></div> + <div class="tr"><div class="th" width="33%"><%:Homepage%>:</div><div class="td"> <% for k, v in ipairs(homepage) do %> <a href="<%=v%>"><%=v%></a><br /> <% end %> - </td></tr> - <tr><th width="33%"><%:E-Mail%>:</th><td><a href="mailto:<%=mail%>"><%=mail%></a></td></tr> - <tr><th width="33%"><%:Phone%>:</th><td><%=phone%></td></tr> - </table> + </div></div> + <div class="tr"><div class="th" width="33%"><%:E-Mail%>:</div><div class="td"><a href="mailto:<%=mail%>"><%=mail%></a></div></div> + <div class="tr"><div class="th" width="33%"><%:Phone%>:</div><div class="td"><%=phone%></div></div> + </div> </fieldset> <fieldset xmlns="http://www.w3.org/1999/xhtml" class="cbi-section"> <legend><%:Location%></legend> - <table cellspacing="10" width="100%" style="text-align:left"> - <tr><th width="33%"><%:Location%>:</th><td><%=location%></td></tr> - <tr><th width="33%"><%:Coordinates%>:</th><td><%=lat%> <%=lon%> (<a href="<%=pcdata(luci.dispatcher.build_url("freifunk/map"))%>"><%:Show on map%>)</a></td></tr> - </table> + <div class="table" cellspacing="10" width="100%" style="text-align:left"> + <div class="tr"><div class="th" width="33%"><%:Location%>:</div><div class="td"><%=location%></div></div> + <div class="tr"><div class="th" width="33%"><%:Coordinates%>:</div><div class="td"><%=lat%> <%=lon%> (<a href="<%=pcdata(luci.dispatcher.build_url("freifunk/map"))%>"><%:Show on map%>)</a></div></div> + </div> </fieldset> <% if note then %> <fieldset xmlns="http://www.w3.org/1999/xhtml" class="cbi-section"> <legend><%:Notice%></legend> - <table cellspacing="10" width="100%" style="text-align:left"> - <tr><td><%=note%></td></tr> - </table> + <div class="table" cellspacing="10" width="100%" style="text-align:left"> + <div class="tr"><div class="td"><%=note%></div></div> + </div> </fieldset> <%end%> 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 1dc1d8b0d..a56e4826a 100644 --- a/modules/luci-mod-freifunk/luasrc/view/freifunk/public_status.htm +++ b/modules/luci-mod-freifunk/luasrc/view/freifunk/public_status.htm @@ -238,25 +238,25 @@ end <h2><%:Wireless Overview%></h2> <% if not has_iwinfo then %> - <div class="errorbox"> - <strong><%:Package libiwinfo required!%></strong><br /> - <%_The <em>libiwinfo</em> package is not installed. You must install this component for working wireless configuration!%> + <div class="alert-message warning"> + <h4><%:Package libiwinfo required!%></h4> + <p><%_The <em>libiwinfo</em> package is not installed. You must install this component for working wireless configuration!%></p> </div> <% end %> <div class="cbi-section"> <div class="cbi-section-node"> - <table class="cbi-section-table"> - <tr class="cbi-section-table-titles"> - <th class="cbi-section-table-cell"><%:Signal%></th> - <th class="cbi-section-table-cell"><%:Bitrate%></th> - <th class="cbi-section-table-cell"><%:SSID%></th> - <th class="cbi-section-table-cell"><%:BSSID%></th> - <th class="cbi-section-table-cell"><%:Channel%></th> - <th class="cbi-section-table-cell"><%:Mode%></th> - <th class="cbi-section-table-cell"><%:TX%>-<%:Power%></th> - <th class="cbi-section-table-cell"><%:Interface%></th> - </tr> + <div class="table cbi-section-table"> + <div class="tr cbi-section-table-titles"> + <div class="th cbi-section-table-cell"><%:Signal%></div> + <div class="th cbi-section-table-cell"><%:Bitrate%></div> + <div class="th cbi-section-table-cell"><%:SSID%></div> + <div class="th cbi-section-table-cell"><%:BSSID%></div> + <div class="th cbi-section-table-cell"><%:Channel%></div> + <div class="th cbi-section-table-cell"><%:Mode%></div> + <div class="th cbi-section-table-cell"><%:TX%>-<%:Power%></div> + <div class="th cbi-section-table-cell"><%:Interface%></div> + </div> <% for _, dev in ipairs(devices) do local net @@ -301,20 +301,20 @@ end end local interface = net.iwinfo.ifname or "N/A" %> - <tr class="cbi-section-table-row cbi-rowstyle-1"> - <td class="cbi-value-field" id="<%=net:ifname()%>-signal"><%=signal_string%></td> - <td class="cbi-value-field" id="<%=net:ifname()%>-bitrate"><%=bitrate%></td> - <td class="cbi-value-field" id="<%=net:ifname()%>-ssid"><%=ssid%></td> - <td class="cbi-value-field" id="<%=net:ifname()%>-bssid"><%=bssid%></td> - <td class="cbi-value-field" id="<%=net:ifname()%>-channel"><%=chan%></td> - <td class="cbi-value-field" id="<%=net:ifname()%>-mode"><%=mode%></td> - <td class="cbi-value-field" id="<%=net:ifname()%>-txpower"><%=txpwr%></td> - <td class="cbi-value-field"><%=interface%></td> - </tr> + <div class="tr cbi-section-table-row cbi-rowstyle-1"> + <div class="td cbi-value-field" id="<%=net:ifname()%>-signal"><%=signal_string%></div> + <div class="td cbi-value-field" id="<%=net:ifname()%>-bitrate"><%=bitrate%></div> + <div class="td cbi-value-field" id="<%=net:ifname()%>-ssid"><%=ssid%></div> + <div class="td cbi-value-field" id="<%=net:ifname()%>-bssid"><%=bssid%></div> + <div class="td cbi-value-field" id="<%=net:ifname()%>-channel"><%=chan%></div> + <div class="td cbi-value-field" id="<%=net:ifname()%>-mode"><%=mode%></div> + <div class="td cbi-value-field" id="<%=net:ifname()%>-txpower"><%=txpwr%></div> + <div class="td cbi-value-field"><%=interface%></div> + </div> <% end end end %> - </table> + </div> </div> </div> </div> @@ -328,35 +328,35 @@ end <% if not def4 and not def6 then %> <%:No default routes known.%> <%else%> - <table class="cbi-section-table"> - <tr class="cbi-section-table-titles"> - <th class="cbi-section-table-cell"><%:Network%></th> - <th class="cbi-section-table-cell"><%:Interface%></th> - <th class="cbi-section-table-cell"><%:Gateway%></th> - <th class="cbi-section-table-cell"><%:Metric%></th> - </tr> + <div class="table cbi-section-table"> + <div class="tr cbi-section-table-titles"> + <div class="th cbi-section-table-cell"><%:Network%></div> + <div class="th cbi-section-table-cell"><%:Interface%></div> + <div class="th cbi-section-table-cell"><%:Gateway%></div> + <div class="th cbi-section-table-cell"><%:Metric%></div> + </div> <% if def4 then %> - <tr class="cbi-section-table-row cbi-rowstyle-1"> - <td class="cbi-value-field" id="v4dst"><%=def4.dest%></td> - <td class="cbi-value-field" id="v4dev"><%=def4.dev%></td> - <td class="cbi-value-field" id="v4gw"><%=def4.gateway%></td> - <td class="cbi-value-field" id="v4metr"><%=def4.metr%></td> - </tr> + <div class="tr cbi-section-table-row cbi-rowstyle-1"> + <div class="td cbi-value-field" id="v4dst"><%=def4.dest%></div> + <div class="td cbi-value-field" id="v4dev"><%=def4.dev%></div> + <div class="td cbi-value-field" id="v4gw"><%=def4.gateway%></div> + <div class="td cbi-value-field" id="v4metr"><%=def4.metr%></div> + </div> <% end if def6 then %> - <tr class="cbi-section-table-row cbi-rowstyle-2"> - <td class="cbi-value-field" id="v6dst"><%=def6.dest%></td> - <td class="cbi-value-field" id="v6dev"><%=def6.dev%></td> - <td class="cbi-value-field" id="v6gw"><%=def6.gateway%></td> - <td class="cbi-value-field" id="v6metr"><%=def6.metr%></td> - </tr> + <div class="tr cbi-section-table-row cbi-rowstyle-2"> + <div class="td cbi-value-field" id="v6dst"><%=def6.dest%></div> + <div class="td cbi-value-field" id="v6dev"><%=def6.dev%></div> + <div class="td cbi-value-field" id="v6gw"><%=def6.gateway%></div> + <div class="td cbi-value-field" id="v6metr"><%=def6.metr%></div> + </div> <% end %> - </table> + </div> <% end %> </div> </div> diff --git a/protocols/luci-proto-ipv6/luasrc/model/network/proto_aiccu.lua b/protocols/luci-proto-3g/luasrc/model/network/proto_3g.lua index e0d7fd3e2..b2454838f 100644 --- a/protocols/luci-proto-ipv6/luasrc/model/network/proto_aiccu.lua +++ b/protocols/luci-proto-3g/luasrc/model/network/proto_3g.lua @@ -1,17 +1,17 @@ --- Copyright 2015 Paul Oranje <por@xs4all.nl> --- Licensed to the public under GPLv2 +-- Copyright 2018 Florian Eckert <fe@dev.tdt.de> +-- Licensed to the public under the Apache License 2.0. local netmod = luci.model.network local interface = luci.model.network.interface -local proto = netmod:register_protocol("aiccu") +local proto = netmod:register_protocol("3g") function proto.get_i18n(self) - return luci.i18n.translate("AICCU (SIXXS)") + return luci.i18n.translate("UMTS/GPRS/EV-DO") end function proto.ifname(self) - return "aiccu-" .. self.sid + return "3g-" .. self.sid end function proto.get_interface(self) @@ -19,11 +19,11 @@ function proto.get_interface(self) end function proto.is_installed(self) - return nixio.fs.access("/lib/netifd/proto/aiccu.sh") + return nixio.fs.access("/lib/netifd/proto/3g.sh") end function proto.opkg_package(self) - return "aiccu" + return "comgt" end function proto.is_floating(self) @@ -46,4 +46,4 @@ function proto.contains_interface(self, ifname) end end -netmod:register_pattern_virtual("^aiccu%-%w") +netmod:register_pattern_virtual("^3g%-%w") diff --git a/protocols/luci-proto-ipv6/Makefile b/protocols/luci-proto-ipv6/Makefile index 761ee2f9f..b28c8d589 100644 --- a/protocols/luci-proto-ipv6/Makefile +++ b/protocols/luci-proto-ipv6/Makefile @@ -6,7 +6,7 @@ include $(TOPDIR)/rules.mk -LUCI_TITLE:=Support for DHCPv6/6in4/6to4/6rd/DS-Lite/aiccu +LUCI_TITLE:=Support for DHCPv6/6in4/6to4/6rd/DS-Lite LUCI_DEPENDS:= PKG_LICENSE:=Apache-2.0 diff --git a/protocols/luci-proto-ipv6/luasrc/model/cbi/admin_network/proto_aiccu.lua b/protocols/luci-proto-ipv6/luasrc/model/cbi/admin_network/proto_aiccu.lua deleted file mode 100644 index 7b5e6043c..000000000 --- a/protocols/luci-proto-ipv6/luasrc/model/cbi/admin_network/proto_aiccu.lua +++ /dev/null @@ -1,136 +0,0 @@ --- Copyright 2015 Paul Oranje <por@xs4all.nl> --- Licensed to the public under the Apache License 2.0. - -local map, section, net = ... - --- config read by /lib/netifd/proto/aiccu.sh -local username, password, protocol, server, tunnelid, ip6prefix, requiretls, nat, heartbeat, - verbose, ntpsynctimeout, ip6addr, sourcerouting, defaultroute - --- generic parameters -local metric, ttl, mtu - - -username = section:taboption("general", Value, "username", - translate("Server username"), - translate("SIXXS-handle[/Tunnel-ID]")) -username.datatype = "string" - -password = section:taboption("general", Value, "password", - translate("Server password"), - translate("Server password, enter the specific password of the tunnel when the username contains the tunnel ID")) -password.datatype = "string" -password.password = true - - ---[[ SIXXS supports only TIC as tunnel broker protocol, no use setting it. -protocol = section:taboption("general", ListValue, "protocol", - translate("Tunnel broker protocol"), - translate("SIXXS supports TIC only, for static tunnels using IP protocol 41 (RFC4213) use 6in4 instead")) - -protocol:value("tic", "TIC") -protocol:value("tsp", "TSP") -protocol:value("l2tp", "L2TP") -protocol.default = "tic" -protocol.optional = true ---]] - - -server = section:taboption("general", Value, "server", - translate("Tunnel setup server"), - translate("Optional, specify to override default server (tic.sixxs.net)")) -server.datatype = "host(0)" -server.optional = true - - -tunnelid = section:taboption("general", Value, "tunnelid", - translate("Tunnel ID"), - translate("Optional, use when the SIXXS account has more than one tunnel")) -tunnelid.datatype = "string" -tunnelid.optional = true - - -local ip6prefix = section:taboption("general", Value, "ip6prefix", - translate("IPv6 prefix"), - translate("Routed IPv6 prefix for downstream interfaces")) -ip6prefix.datatype = "ip6addr" -ip6prefix.optional = true - - -heartbeat = s:taboption("general", ListValue, "heartbeat", - translate("Tunnel type"), - translate("Also see <a href=\"https://www.sixxs.net/faq/connectivity/?faq=comparison\">Tunneling Comparison</a> on SIXXS")) -heartbeat:value("0", translate("AYIYA")) -heartbeat:value("1", translate("Heartbeat")) -heartbeat.default = "0" - - -nat = section:taboption("general", Flag, "nat", - translate("Behind NAT"), - translate("The tunnel end-point is behind NAT, defaults to disabled and only applies to AYIYA")) -nat.optional = true -nat.default = nat.disabled - - -requiretls = section:taboption("general", Flag, "requiretls", - translate("Require TLS"), - translate("Connection to server fails when TLS cannot be used")) -requiretls.optional = true -requiretls.default = requiretls.disabled - - -verbose = section:taboption("advanced", Flag, "verbose", - translate("Verbose"), - translate("Verbose logging by aiccu daemon")) -verbose.optional = true -verbose.default = verbose.disabled - - -ntpsynctimeout = section:taboption("advanced", Value, "ntpsynctimeout", - translate("NTP sync time-out"), - translate("Wait for NTP sync that many seconds, seting to 0 disables waiting (optional)")) -ntpsynctimeout.datatype = "uinteger" -ntpsynctimeout.placeholder = "90" -ntpsynctimeout.optional = true - - -ip6addr = section:taboption("advanced", Value, "ip6addr", - translate("Local IPv6 address"), - translate("IPv6 address delegated to the local tunnel endpoint (optional)")) -ip6addr.datatype = "ip6addr" -ip6addr.optional = true - - -defaultroute = section:taboption("advanced", Flag, "defaultroute", - translate("Default route"), - translate("Whether to create an IPv6 default route over the tunnel")) -defaultroute.default = defaultroute.enabled -defaultroute.optional = true - - -sourcerouting = section:taboption("advanced", Flag, "sourcerouting", - translate("Source routing"), - translate("Whether to route only packets from delegated prefixes")) -sourcerouting.default = sourcerouting.enabled -sourcerouting.optional = true - - -metric = section:taboption("advanced", Value, "metric", - translate("Use gateway metric")) -metric.datatype = "uinteger" -metric.placeholder = "0" -metric:depends("defaultroute", defaultroute.enabled) - - -ttl = section:taboption("advanced", Value, "ttl", - translate("Use TTL on tunnel interface")) -ttl.datatype = "range(1,255)" -ttl.placeholder = "64" - - -mtu = section:taboption("advanced", Value, "mtu", - translate("Use MTU on tunnel interface"), - translate("minimum 1280, maximum 1480")) -mtu.datatype = "range(1280,1480)" -mtu.placeholder = "1280" - diff --git a/protocols/luci-proto-ppp/luasrc/model/network/proto_ppp.lua b/protocols/luci-proto-ppp/luasrc/model/network/proto_ppp.lua index 1bcbd4808..3afb7de4f 100644 --- a/protocols/luci-proto-ppp/luasrc/model/network/proto_ppp.lua +++ b/protocols/luci-proto-ppp/luasrc/model/network/proto_ppp.lua @@ -4,7 +4,7 @@ local netmod = luci.model.network local _, p -for _, p in ipairs({"ppp", "pptp", "pppoe", "pppoa", "3g", "l2tp", "pppossh"}) do +for _, p in ipairs({"ppp", "pptp", "pppoe", "pppoa", "l2tp", "pppossh"}) do local proto = netmod:register_protocol(p) @@ -13,8 +13,6 @@ for _, p in ipairs({"ppp", "pptp", "pppoe", "pppoa", "3g", "l2tp", "pppossh"}) d return luci.i18n.translate("PPP") elseif p == "pptp" then return luci.i18n.translate("PPtP") - elseif p == "3g" then - return luci.i18n.translate("UMTS/GPRS/EV-DO") elseif p == "pppoe" then return luci.i18n.translate("PPPoE") elseif p == "pppoa" then @@ -33,8 +31,6 @@ for _, p in ipairs({"ppp", "pptp", "pppoe", "pppoa", "3g", "l2tp", "pppossh"}) d function proto.opkg_package(self) if p == "ppp" then return p - elseif p == "3g" then - return "comgt" elseif p == "pptp" then return "ppp-mod-pptp" elseif p == "pppoe" then @@ -55,8 +51,6 @@ for _, p in ipairs({"ppp", "pptp", "pppoe", "pppoa", "3g", "l2tp", "pppossh"}) d return (nixio.fs.glob("/usr/lib/pppd/*/rp-pppoe.so")() ~= nil) elseif p == "pptp" then return (nixio.fs.glob("/usr/lib/pppd/*/pptp.so")() ~= nil) - elseif p == "3g" then - return nixio.fs.access("/lib/netifd/proto/3g.sh") elseif p == "l2tp" then return nixio.fs.access("/lib/netifd/proto/l2tp.sh") elseif p == "pppossh" then diff --git a/themes/luci-theme-bootstrap/htdocs/luci-static/bootstrap/cascade.css b/themes/luci-theme-bootstrap/htdocs/luci-static/bootstrap/cascade.css index 8d0c434a9..5aff09148 100644 --- a/themes/luci-theme-bootstrap/htdocs/luci-static/bootstrap/cascade.css +++ b/themes/luci-theme-bootstrap/htdocs/luci-static/bootstrap/cascade.css @@ -25,7 +25,8 @@ body { h1, h2, h3, h4, h5, h6, p, pre, a, abbr, acronym, code, del, em, img, q, s, small, strike, strong, sub, sup, tt, var, dd, dl, dt, li, ol, ul, fieldset, -form, label, legend, button, table, caption, tbody, tfoot, thead, tr, th, td { +form, label, legend, button, table, caption, tbody, tfoot, thead, tr, th, td, +.table, .tbody, .tfoot, .thead, .tr, .th, .td { margin: 0; padding: 0; border: 0; @@ -112,8 +113,6 @@ option, textarea { font-size: 100%; margin: 0; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; box-sizing: border-box; vertical-align: baseline; *vertical-align: middle; @@ -146,8 +145,6 @@ input[type="submit"][disabled] { input[type="search"] { -webkit-appearance: textfield; - -webkit-box-sizing: content-box; - -moz-box-sizing: content-box; box-sizing: content-box; } @@ -375,8 +372,6 @@ code, pre { padding: 0 3px 2px; font-family: Monaco, Andale Mono, Courier New, monospace; font-size: 12px; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; border-radius: 3px; } @@ -395,8 +390,6 @@ pre { font-size: 12px; border: 1px solid #ccc; border: 1px solid rgba(0, 0, 0, 0.15); - -webkit-border-radius: 3px; - -moz-border-radius: 3px; border-radius: 3px; white-space: pre; white-space: pre-wrap; @@ -493,8 +486,6 @@ select, line-height: 18px; color: #808080; border: 1px solid #ccc; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; border-radius: 3px; } @@ -521,8 +512,6 @@ input[type=file] { padding: initial; border: initial; line-height: initial; - -webkit-box-shadow: none; - -moz-box-shadow: none; box-shadow: none; width: auto !important; } @@ -551,8 +540,6 @@ textarea { background-color: #ffffff; display: block; border-color: #eee; - -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); - -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); cursor: not-allowed; } @@ -566,27 +553,17 @@ textarea { } input, textarea { - -webkit-transition: border linear 0.2s, box-shadow linear 0.2s; - -moz-transition: border linear 0.2s, box-shadow linear 0.2s; - -ms-transition: border linear 0.2s, box-shadow linear 0.2s; - -o-transition: border linear 0.2s, box-shadow linear 0.2s; transition: border linear 0.2s, box-shadow linear 0.2s; - -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1); - -moz-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1); box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1); } input:focus, textarea:focus { outline: 0; border-color: rgba(82, 168, 236, 0.8); - -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1), 0 0 8px rgba(82, 168, 236, 0.6); - -moz-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1), 0 0 8px rgba(82, 168, 236, 0.6); box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1), 0 0 8px rgba(82, 168, 236, 0.6); } input[type=file]:focus, input[type=checkbox]:focus, select:focus { - -webkit-box-shadow: none; - -moz-box-shadow: none; box-shadow: none; outline: 1px dotted #666; } @@ -602,8 +579,6 @@ form .clearfix.error input, form .clearfix.error textarea { form .clearfix.error input:focus, form .clearfix.error textarea:focus { border-color: #e9322d; - -webkit-box-shadow: 0 0 6px #f8b9b7; - -moz-box-shadow: 0 0 6px #f8b9b7; box-shadow: 0 0 6px #f8b9b7; } @@ -624,8 +599,6 @@ form .clearfix.warning input, form .clearfix.warning textarea { form .clearfix.warning input:focus, form .clearfix.warning textarea:focus { border-color: #be9a3f; - -webkit-box-shadow: 0 0 6px #e5d6b1; - -moz-box-shadow: 0 0 6px #e5d6b1; box-shadow: 0 0 6px #e5d6b1; } @@ -646,8 +619,6 @@ form .clearfix.success input, form .clearfix.success textarea { form .clearfix.success input:focus, form .clearfix.success textarea:focus { border-color: #458845; - -webkit-box-shadow: 0 0 6px #9acc9a; - -moz-box-shadow: 0 0 6px #9acc9a; box-shadow: 0 0 6px #9acc9a; } @@ -671,10 +642,8 @@ textarea[readonly] { .cbi-page-actions { background: #f5f5f5; margin-bottom: 18px; - padding: 17px 20px 18px 150px; + padding: 17px 20px 18px 17px; border-top: 1px solid #ddd; - -webkit-border-radius: 0 0 3px 3px; - -moz-border-radius: 0 0 3px 3px; border-radius: 0 0 3px 3px; text-align: right; } @@ -719,7 +688,12 @@ textarea[readonly] { * Tables.less * Tables for, you guessed it, tabular data * ---------------------------------------- */ -table { +.tr { display: table-row; } +.table[width="33%"], .th[width="33%"], .td[width="33%"] { width: 33%; } +.table[width="100%"], .th[width="100%"], .td[width="100%"] { width: 100%; } + +.table { + display: table; width: 100%; margin-bottom: 18px; padding: 0; @@ -727,24 +701,26 @@ table { border-collapse: collapse; } -table th, table td { +.table .th, .table .td { + display: table-cell; + vertical-align: middle; /* Fixme */ padding: 10px 10px 9px; line-height: 18px; text-align: left; } -table th { +.table .th { padding-top: 9px; font-weight: bold; vertical-align: middle; } -table td { +.table .td { vertical-align: top; border-top: 1px solid #ddd; } -table tbody th { +.table .tbody .th { border-top: 1px solid #ddd; vertical-align: top; } @@ -797,18 +773,8 @@ header p { header .fill { background-color: #222; - background-color: #222222; background-repeat: repeat-x; - background-image: -khtml-gradient(linear, left top, left bottom, from(#333333), to(#222222)); - background-image: -moz-linear-gradient(top, #333333, #222222); - background-image: -ms-linear-gradient(top, #333333, #222222); - background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #333333), color-stop(100%, #222222)); - background-image: -webkit-linear-gradient(top, #333333, #222222); - background-image: -o-linear-gradient(top, #333333, #222222); background-image: linear-gradient(to bottom, #333333, #222222); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#333333', endColorstr='#222222', GradientType=0); - -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1); - -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1); box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1); padding: 0 5px; } @@ -914,14 +880,7 @@ header div > ul .dropdown-menu li a:hover, .nav .dropdown-menu li a:hover { background-color: #191919; background-repeat: repeat-x; - background-image: -khtml-gradient(linear, left top, left bottom, from(#292929), to(#191919)); - background-image: -moz-linear-gradient(top, #292929, #191919); - background-image: -ms-linear-gradient(top, #292929, #191919); - background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #292929), color-stop(100%, #191919)); - background-image: -webkit-linear-gradient(top, #292929, #191919); - background-image: -o-linear-gradient(top, #292929, #191919); background-image: linear-gradient(to bottom, #292929, #191919); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#292929', endColorstr='#191919', GradientType=0); color: #ffffff; } @@ -960,9 +919,6 @@ a.menu:after, .dropdown-toggle:after { border-left: 4px solid transparent; border-right: 4px solid transparent; border-top: 4px solid #ffffff; - filter: alpha(opacity=50); - -khtml-opacity: 0.5; - -moz-opacity: 0.5; opacity: 0.5; } @@ -984,14 +940,8 @@ a.menu:after, .dropdown-toggle:after { border-color: rgba(0, 0, 0, 0.2); border-style: solid; border-width: 0 1px 1px; - -webkit-border-radius: 0 0 6px 6px; - -moz-border-radius: 0 0 6px 6px; border-radius: 0 0 6px 6px; - -webkit-box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); - -moz-box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); - -webkit-background-clip: padding-box; - -moz-background-clip: padding-box; background-clip: padding-box; } @@ -1025,18 +975,9 @@ header .dropdown-menu a.hover, .dropdown-menu a.hover { background-color: #dddddd; background-repeat: repeat-x; - background-image: -khtml-gradient(linear, left top, left bottom, from(#eeeeee), to(#dddddd)); - background-image: -moz-linear-gradient(top, #eeeeee, #dddddd); - background-image: -ms-linear-gradient(top, #eeeeee, #dddddd); - background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #eeeeee), color-stop(100%, #dddddd)); - background-image: -webkit-linear-gradient(top, #eeeeee, #dddddd); - background-image: -o-linear-gradient(top, #eeeeee, #dddddd); background-image: linear-gradient(to bottom, #eeeeee, #dddddd); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee', endColorstr='#dddddd', GradientType=0); color: #404040; text-decoration: none; - -webkit-box-shadow: inset 0 1px 0 rgba(0, 0, 0, 0.025), inset 0 -1px rgba(0, 0, 0, 0.025); - -moz-box-shadow: inset 0 1px 0 rgba(0, 0, 0, 0.025), inset 0 -1px rgba(0, 0, 0, 0.025); box-shadow: inset 0 1px 0 rgba(0, 0, 0, 0.025), inset 0 -1px rgba(0, 0, 0, 0.025); } @@ -1129,8 +1070,6 @@ header .dropdown-menu a.hover, margin-right: 2px; line-height: 34px; border: 1px solid transparent; - -webkit-border-radius: 4px 4px 0 0; - -moz-border-radius: 4px 4px 0 0; border-radius: 4px 4px 0 0; } @@ -1155,8 +1094,6 @@ header .dropdown-menu a.hover, .cbi-tabmenu .menu-dropdown, .cbi-tabmenu .dropdown-menu { top: 35px; border-width: 1px; - -webkit-border-radius: 0 6px 6px 6px; - -moz-border-radius: 0 6px 6px 6px; border-radius: 0 6px 6px 6px; } @@ -1191,20 +1128,9 @@ header .dropdown-menu a.hover, margin: 0 0 18px; background-color: #f5f5f5; background-repeat: repeat-x; - background-image: -khtml-gradient(linear, left top, left bottom, from(#ffffff), to(#f5f5f5)); - background-image: -moz-linear-gradient(top, #ffffff, #f5f5f5); - background-image: -ms-linear-gradient(top, #ffffff, #f5f5f5); - background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #ffffff), color-stop(100%, #f5f5f5)); - background-image: -webkit-linear-gradient(top, #ffffff, #f5f5f5); - background-image: -o-linear-gradient(top, #ffffff, #f5f5f5); background-image: linear-gradient(to bottom, #ffffff, #f5f5f5); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#f5f5f5', GradientType=0); border: 1px solid #ddd; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; border-radius: 3px; - -webkit-box-shadow: inset 0 1px 0 #ffffff; - -moz-box-shadow: inset 0 1px 0 #ffffff; box-shadow: inset 0 1px 0 #ffffff; } @@ -1258,14 +1184,7 @@ footer { .alert-message.error { background-color: #c43c35; background-repeat: repeat-x; - background-image: -khtml-gradient(linear, left top, left bottom, from(#ee5f5b), to(#c43c35)); - background-image: -moz-linear-gradient(top, #ee5f5b, #c43c35); - background-image: -ms-linear-gradient(top, #ee5f5b, #c43c35); - background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #ee5f5b), color-stop(100%, #c43c35)); - background-image: -webkit-linear-gradient(top, #ee5f5b, #c43c35); - background-image: -o-linear-gradient(top, #ee5f5b, #c43c35); background-image: linear-gradient(to bottom, #ee5f5b, #c43c35); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b', endColorstr='#c43c35', GradientType=0); text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); border-color: #c43c35 #c43c35 #882a25; border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); @@ -1274,14 +1193,7 @@ footer { .btn.success, .alert-message.success { background-color: #57a957; background-repeat: repeat-x; - background-image: -khtml-gradient(linear, left top, left bottom, from(#62c462), to(#57a957)); - background-image: -moz-linear-gradient(top, #62c462, #57a957); - background-image: -ms-linear-gradient(top, #62c462, #57a957); - background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #62c462), color-stop(100%, #57a957)); - background-image: -webkit-linear-gradient(top, #62c462, #57a957); - background-image: -o-linear-gradient(top, #62c462, #57a957); background-image: linear-gradient(to bottom, #62c462, #57a957); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#62c462', endColorstr='#57a957', GradientType=0); text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); border-color: #57a957 #57a957 #3d773d; border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); @@ -1290,14 +1202,7 @@ footer { .btn.info, .alert-message.info { background-color: #339bb9; background-repeat: repeat-x; - background-image: -khtml-gradient(linear, left top, left bottom, from(#5bc0de), to(#339bb9)); - background-image: -moz-linear-gradient(top, #5bc0de, #339bb9); - background-image: -ms-linear-gradient(top, #5bc0de, #339bb9); - background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #5bc0de), color-stop(100%, #339bb9)); - background-image: -webkit-linear-gradient(top, #5bc0de, #339bb9); - background-image: -o-linear-gradient(top, #5bc0de, #339bb9); background-image: linear-gradient(to bottom, #5bc0de, #339bb9); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#5bc0de', endColorstr='#339bb9', GradientType=0); text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); border-color: #339bb9 #339bb9 #22697d; border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); @@ -1309,13 +1214,7 @@ footer { display: inline-block; background-color: #e6e6e6; background-repeat: no-repeat; - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), color-stop(25%, #ffffff), to(#e6e6e6)); - background-image: -webkit-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); - background-image: -moz-linear-gradient(top, #ffffff, #ffffff 25%, #e6e6e6); - background-image: -ms-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); - background-image: -o-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); background-image: linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0); padding: 5px 14px 6px; text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75); color: #333; @@ -1323,11 +1222,7 @@ footer { line-height: normal; border: 1px solid #ccc; border-bottom-color: #bbb; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; border-radius: 4px; - -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); } @@ -1350,14 +1245,7 @@ footer { padding: 5px 14px 6px; background-color: #0064cd; background-repeat: repeat-x; - background-image: -khtml-gradient(linear, left top, left bottom, from(#049cdb), to(#0064cd)); - background-image: -moz-linear-gradient(top, #049cdb, #0064cd); - background-image: -ms-linear-gradient(top, #049cdb, #0064cd); - background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #049cdb), color-stop(100%, #0064cd)); - background-image: -webkit-linear-gradient(top, #049cdb, #0064cd); - background-image: -o-linear-gradient(top, #049cdb, #0064cd); background-image: linear-gradient(to bottom, #049cdb, #0064cd); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#049cdb', endColorstr='#0064cd', GradientType=0); text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); border-color: #0064cd #0064cd #003f81; border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); @@ -1372,22 +1260,12 @@ footer { .cbi-button-up, .cbi-input-up { background-position: center center; - background-image: url('../resources/cbi/up.gif'), -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), color-stop(25%, #ffffff), to(#e6e6e6)); - background-image: url('../resources/cbi/up.gif'), -webkit-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); - background-image: url('../resources/cbi/up.gif'), -moz-linear-gradient(top, #ffffff, #ffffff 25%, #e6e6e6); - background-image: url('../resources/cbi/up.gif'), -ms-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); - background-image: url('../resources/cbi/up.gif'), -o-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); background-image: url('../resources/cbi/up.gif'), linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); } .cbi-button-down, .cbi-input-down { background-position: center center; - background-image: url('../resources/cbi/down.gif'), -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), color-stop(25%, #ffffff), to(#e6e6e6)); - background-image: url('../resources/cbi/down.gif'), -webkit-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); - background-image: url('../resources/cbi/down.gif'), -moz-linear-gradient(top, #ffffff, #ffffff 25%, #e6e6e6); - background-image: url('../resources/cbi/down.gif'), -ms-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); - background-image: url('../resources/cbi/down.gif'), -o-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); background-image: url('../resources/cbi/down.gif'), linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); } @@ -1395,11 +1273,6 @@ footer { .cbi-input-find { background-position: 6px center, left top; padding-left: 28px; - background-image: url('../resources/cbi/find.gif'), -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), color-stop(25%, #ffffff), to(#e6e6e6)); - background-image: url('../resources/cbi/find.gif'), -webkit-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); - background-image: url('../resources/cbi/find.gif'), -moz-linear-gradient(top, #ffffff, #ffffff 25%, #e6e6e6); - background-image: url('../resources/cbi/find.gif'), -ms-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); - background-image: url('../resources/cbi/find.gif'), -o-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); background-image: url('../resources/cbi/find.gif'), linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); } @@ -1407,11 +1280,6 @@ footer { .cbi-input-add { background-position: 6px center, left top; padding-left: 28px; - background-image: url('../resources/cbi/add.gif'), -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), color-stop(25%, #ffffff), to(#e6e6e6)); - background-image: url('../resources/cbi/add.gif'), -webkit-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); - background-image: url('../resources/cbi/add.gif'), -moz-linear-gradient(top, #ffffff, #ffffff 25%, #e6e6e6); - background-image: url('../resources/cbi/add.gif'), -ms-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); - background-image: url('../resources/cbi/add.gif'), -o-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); background-image: url('../resources/cbi/add.gif'), linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); } @@ -1419,11 +1287,6 @@ footer { .cbi-input-apply { background-position: 6px center, left top; padding-left: 28px; - background-image: url('../resources/cbi/apply.gif'), -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), color-stop(25%, #ffffff), to(#e6e6e6)); - background-image: url('../resources/cbi/apply.gif'), -webkit-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); - background-image: url('../resources/cbi/apply.gif'), -moz-linear-gradient(top, #ffffff, #ffffff 25%, #e6e6e6); - background-image: url('../resources/cbi/apply.gif'), -ms-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); - background-image: url('../resources/cbi/apply.gif'), -o-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); background-image: url('../resources/cbi/apply.gif'), linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); } @@ -1431,11 +1294,6 @@ footer { .cbi-input-reset { background-position: 6px center, left top; padding-left: 28px; - background-image: url('../resources/cbi/reset.gif'), -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), color-stop(25%, #ffffff), to(#e6e6e6)); - background-image: url('../resources/cbi/reset.gif'), -webkit-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); - background-image: url('../resources/cbi/reset.gif'), -moz-linear-gradient(top, #ffffff, #ffffff 25%, #e6e6e6); - background-image: url('../resources/cbi/reset.gif'), -ms-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); - background-image: url('../resources/cbi/reset.gif'), -o-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); background-image: url('../resources/cbi/reset.gif'), linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); } @@ -1443,11 +1301,6 @@ footer { .cbi-input-edit { background-position: 6px center, left top; padding-left: 28px; - background-image: url('../resources/cbi/edit.gif'), -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), color-stop(25%, #ffffff), to(#e6e6e6)); - background-image: url('../resources/cbi/edit.gif'), -webkit-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); - background-image: url('../resources/cbi/edit.gif'), -moz-linear-gradient(top, #ffffff, #ffffff 25%, #e6e6e6); - background-image: url('../resources/cbi/edit.gif'), -ms-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); - background-image: url('../resources/cbi/edit.gif'), -o-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); background-image: url('../resources/cbi/edit.gif'), linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); } @@ -1455,11 +1308,6 @@ footer { .cbi-input-remove { background-position: 6px center, left top; padding-left: 28px; - background-image: url('../resources/cbi/remove.gif'), -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), color-stop(25%, #ffffff), to(#e6e6e6)); - background-image: url('../resources/cbi/remove.gif'), -webkit-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); - background-image: url('../resources/cbi/remove.gif'), -moz-linear-gradient(top, #ffffff, #ffffff 25%, #e6e6e6); - background-image: url('../resources/cbi/remove.gif'), -ms-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); - background-image: url('../resources/cbi/remove.gif'), -o-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); background-image: url('../resources/cbi/remove.gif'), linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); } @@ -1467,11 +1315,6 @@ footer { .cbi-input-reload { background-position: 6px center, left top; padding-left: 28px; - background-image: url('../resources/cbi/reload.gif'), -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), color-stop(25%, #ffffff), to(#e6e6e6)); - background-image: url('../resources/cbi/reload.gif'), -webkit-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); - background-image: url('../resources/cbi/reload.gif'), -moz-linear-gradient(top, #ffffff, #ffffff 25%, #e6e6e6); - background-image: url('../resources/cbi/reload.gif'), -ms-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); - background-image: url('../resources/cbi/reload.gif'), -o-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); background-image: url('../resources/cbi/reload.gif'), linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); } @@ -1479,11 +1322,6 @@ footer { .cbi-input-link { background-position: 6px center, left top; padding-left: 28px; - background-image: url('../resources/cbi/link.gif'), -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), color-stop(25%, #ffffff), to(#e6e6e6)); - background-image: url('../resources/cbi/link.gif'), -webkit-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); - background-image: url('../resources/cbi/link.gif'), -moz-linear-gradient(top, #ffffff, #ffffff 25%, #e6e6e6); - background-image: url('../resources/cbi/link.gif'), -ms-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); - background-image: url('../resources/cbi/link.gif'), -o-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); background-image: url('../resources/cbi/link.gif'), linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); } @@ -1491,43 +1329,24 @@ footer { .cbi-input-download { background-position: 6px center, left top; padding-left: 28px; - background-image: url('../resources/cbi/download.gif'), -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), color-stop(25%, #ffffff), to(#e6e6e6)); - background-image: url('../resources/cbi/download.gif'), -webkit-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); - background-image: url('../resources/cbi/download.gif'), -moz-linear-gradient(top, #ffffff, #ffffff 25%, #e6e6e6); - background-image: url('../resources/cbi/download.gif'), -ms-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); - background-image: url('../resources/cbi/download.gif'), -o-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); background-image: url('../resources/cbi/download.gif'), linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); } .btn.active, .btn:active { - -webkit-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05); - -moz-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05); box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05); } .btn.disabled { cursor: default; background-image: none; - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); - filter: alpha(opacity=65); - -khtml-opacity: 0.65; - -moz-opacity: 0.65; opacity: 0.65; - -webkit-box-shadow: none; - -moz-box-shadow: none; box-shadow: none; } .btn[disabled] { cursor: default; background-image: none; - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); - filter: alpha(opacity=65); - -khtml-opacity: 0.65; - -moz-opacity: 0.65; opacity: 0.65; - -webkit-box-shadow: none; - -moz-box-shadow: none; box-shadow: none; } @@ -1535,8 +1354,6 @@ footer { font-size: 15px; line-height: normal; padding: 9px 14px 9px; - -webkit-border-radius: 6px; - -moz-border-radius: 6px; border-radius: 6px; } @@ -1585,10 +1402,6 @@ footer { padding: 3px 9px 3px 27px; } -:root .alert-message, :root .btn { - border-radius: 0 0; -} - button.btn::-moz-focus-inner, input[type=submit].btn::-moz-focus-inner { padding: 0; border: 0; @@ -1601,18 +1414,12 @@ button.btn::-moz-focus-inner, input[type=submit].btn::-moz-focus-inner { font-weight: bold; line-height: 13.5px; text-shadow: 0 1px 0 #ffffff; - filter: alpha(opacity=25); - -khtml-opacity: 0.25; - -moz-opacity: 0.25; opacity: 0.25; } .close:hover { color: #000000; text-decoration: none; - filter: alpha(opacity=40); - -khtml-opacity: 0.4; - -moz-opacity: 0.4; opacity: 0.4; } @@ -1623,25 +1430,14 @@ button.btn::-moz-focus-inner, input[type=submit].btn::-moz-focus-inner { color: #404040; background-color: #eedc94; background-repeat: repeat-x; - background-image: -khtml-gradient(linear, left top, left bottom, from(#fceec1), to(#eedc94)); - background-image: -moz-linear-gradient(top, #fceec1, #eedc94); - background-image: -ms-linear-gradient(top, #fceec1, #eedc94); - background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fceec1), color-stop(100%, #eedc94)); - background-image: -webkit-linear-gradient(top, #fceec1, #eedc94); - background-image: -o-linear-gradient(top, #fceec1, #eedc94); background-image: linear-gradient(to bottom, #fceec1, #eedc94); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fceec1', endColorstr='#eedc94', GradientType=0); text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); border-color: #eedc94 #eedc94 #e4c652; border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); border-width: 1px; border-style: solid; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; border-radius: 4px; - -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25); - -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25); box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25); } @@ -1677,8 +1473,6 @@ button.btn::-moz-focus-inner, input[type=submit].btn::-moz-focus-inner { } .alert-message .btn { - -webkit-box-shadow: 0 1px 0 rgba(255, 255, 255, 0.25); - -moz-box-shadow: 0 1px 0 rgba(255, 255, 255, 0.25); box-shadow: 0 1px 0 rgba(255, 255, 255, 0.25); } @@ -1690,8 +1484,6 @@ button.btn::-moz-focus-inner, input[type=submit].btn::-moz-focus-inner { text-transform: uppercase; white-space: nowrap; background-color: #bfbfbf; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; border-radius: 3px; text-shadow: none; } @@ -1765,6 +1557,8 @@ header .pull-right { padding-top: 8px; } .right { text-align: right !important; } +.center { text-align: center !important; } + .cbi-value-field { line-height: 1.5em; } .cbi-value-field input[type=checkbox], @@ -1778,22 +1572,22 @@ table table td, border: none; } -table.cbi-section-table input, -table.cbi-section-table textarea, -table.cbi-section-table select { +.table.cbi-section-table input, +.table.cbi-section-table textarea, +.table.cbi-section-table select { width: auto; } -table.cbi-section-table td.cbi-section-table-cell { +.table.cbi-section-table .td.cbi-section-table-cell { white-space: nowrap; text-align: right; } -table.cbi-section-table td.cbi-section-table-cell select { +.table.cbi-section-table .td.cbi-section-table-cell select { width: inherit; } -table.valign-middle td { +.table.valign-middle .td { vertical-align: middle; } @@ -1821,25 +1615,24 @@ table.valign-middle td { margin: 0 10px; text-align: center; white-space: nowrap; - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), color-stop(25%, #ffffff), to(#e6e6e6)); - background-image: -webkit-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); - background-image: -moz-linear-gradient(top, #ffffff, #ffffff 25%, #e6e6e6); - background-image: -ms-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); - background-image: -o-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); background-image: linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0); text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75); - -webkit-border-radius: 4px; - -moz-border-radius: 4px; border-radius: 4px; - -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); + display: inline-flex; + flex-direction: column; + line-height: 1.2em; + min-width: 100px; } .ifacebox .ifacebox-head { border-bottom: 1px solid #CCCCCC; padding: 2px; + background: #eee; +} + +.ifacebox .ifacebox-head.active { + background: #90c0e0; } .ifacebox .ifacebox-body { @@ -1847,33 +1640,26 @@ table.valign-middle td { } .ifacebadge { - display: inline-block; + display: inline-flex; + flex-direction: row; white-space: nowrap; background-color: #FFFFFF; border: 1px solid #CCCCCC; padding: 2px; margin-left: 2px; - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), color-stop(25%, #ffffff), to(#e6e6e6)); - background-image: -webkit-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); - background-image: -moz-linear-gradient(top, #ffffff, #ffffff 25%, #e6e6e6); - background-image: -ms-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); - background-image: -o-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); background-image: linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0); text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75); - -webkit-border-radius: 4px; - -moz-border-radius: 4px; border-radius: 4px; - -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); cursor: default; + line-height: 1.2em; } .ifacebadge img { width: 16px; height: 16px; vertical-align: middle; + margin-right: .25em; } .ifacebadge-active { @@ -1881,6 +1667,39 @@ table.valign-middle td { font-weight: bold; } +.network-status-table { + display: flex; + flex-wrap: wrap; +} + +.network-status-table .ifacebox { + margin: .5em; + flex-grow: 1; +} + +.network-status-table .ifacebox-body { + display: flex; + flex-direction: column; + height: 100%; + text-align: left; +} + +.network-status-table .ifacebox-body > span { + flex: 10; +} + +.network-status-table .ifacebox-body > div { + display: flex; + flex-wrap: wrap; +} + +.network-status-table .ifacebox-body .ifacebadge { + flex: 1; + margin: .5em .25em 0 .25em; + padding: .5em; + min-width: 220px; +} + .zonebadge { padding: 2px; border-radius: 4px; @@ -1909,7 +1728,7 @@ table.valign-middle td { } div.cbi-value var, -td.cbi-value-field var { +.td.cbi-value-field var { font-style: italic; color: #0069D6; } @@ -1945,12 +1764,14 @@ td.cbi-value-field var { display: block; font-style: normal; padding: 2px; + line-height: 19px; + white-space: pre; } .uci-change-list var ins, .uci-change-list var del { - /*display: inline;*/ - border: none; + display: inline; + /*border: none;*/ white-space: pre; font-style: normal; padding: 0px; @@ -1980,3 +1801,7 @@ td.cbi-value-field var { line-height: 6px; border: none; } + +html body.apply-overlay-active { + height: calc(100vh - 63px); +} diff --git a/themes/luci-theme-bootstrap/htdocs/luci-static/bootstrap/html5.js b/themes/luci-theme-bootstrap/htdocs/luci-static/bootstrap/html5.js deleted file mode 100644 index 1ec510f2a..000000000 --- a/themes/luci-theme-bootstrap/htdocs/luci-static/bootstrap/html5.js +++ /dev/null @@ -1,3 +0,0 @@ -// HTML5 Shiv v3 | @jon_neal @afarkas @rem | MIT/GPL2 Licensed -// Uncompressed source: https://github.com/aFarkas/html5shiv -(function(a,b){function f(a){var c,d,e,f;b.documentMode>7?(c=b.createElement("font"),c.setAttribute("data-html5shiv",a.nodeName.toLowerCase())):c=b.createElement("shiv:"+a.nodeName);while(a.firstChild)c.appendChild(a.childNodes[0]);for(d=a.attributes,e=d.length,f=0;f<e;++f)d[f].specified&&c.setAttribute(d[f].nodeName,d[f].nodeValue);c.style.cssText=a.style.cssText,a.parentNode.replaceChild(c,a),c.originalElement=a}function g(a){var b=a.originalElement;while(a.childNodes.length)b.appendChild(a.childNodes[0]);a.parentNode.replaceChild(b,a)}function h(a,b){b=b||"all";var c=-1,d=[],e=a.length,f,g;while(++c<e){f=a[c],g=f.media||b;if(f.disabled||!/print|all/.test(g))continue;d.push(h(f.imports,g),f.cssText)}return d.join("")}function i(c){var d=new RegExp("(^|[\\s,{}])("+a.html5.elements.join("|")+")","gi"),e=c.split("{"),f=e.length,g=-1;while(++g<f)e[g]=e[g].split("}"),b.documentMode>7?e[g][e[g].length-1]=e[g][e[g].length-1].replace(d,'$1font[data-html5shiv="$2"]'):e[g][e[g].length-1]=e[g][e[g].length-1].replace(d,"$1shiv\\:$2"),e[g]=e[g].join("}");return e.join("{")}var c=function(a){return a.innerHTML="<x-element></x-element>",a.childNodes.length===1}(b.createElement("a")),d=function(a,b,c){return b.appendChild(a),(c=(c?c(a):a.currentStyle).display)&&b.removeChild(a)&&c==="block"}(b.createElement("nav"),b.documentElement,a.getComputedStyle),e={elements:"abbr article aside audio bdi canvas data datalist details figcaption figure footer header hgroup mark meter nav output progress section summary time video".split(" "),shivDocument:function(a){a=a||b;if(a.documentShived)return;a.documentShived=!0;var f=a.createElement,g=a.createDocumentFragment,h=a.getElementsByTagName("head")[0],i=function(a){f(a)};c||(e.elements.join(" ").replace(/\w+/g,i),a.createElement=function(a){var b=f(a);return b.canHaveChildren&&e.shivDocument(b.document),b},a.createDocumentFragment=function(){return e.shivDocument(g())});if(!d&&h){var j=f("div");j.innerHTML=["x<style>","article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block}","audio{display:none}","canvas,video{display:inline-block;*display:inline;*zoom:1}","[hidden]{display:none}audio[controls]{display:inline-block;*display:inline;*zoom:1}","mark{background:#FF0;color:#000}","</style>"].join(""),h.insertBefore(j.lastChild,h.firstChild)}return a}};e.shivDocument(b),a.html5=e;if(c||!a.attachEvent)return;a.attachEvent("onbeforeprint",function(){if(a.html5.supportsXElement||!b.namespaces)return;b.namespaces.shiv||b.namespaces.add("shiv");var c=-1,d=new RegExp("^("+a.html5.elements.join("|")+")$","i"),e=b.getElementsByTagName("*"),g=e.length,j,k=i(h(function(a,b){var c=[],d=a.length;while(d)c.unshift(a[--d]);d=b.length;while(d)c.unshift(b[--d]);c.sort(function(a,b){return a.sourceIndex-b.sourceIndex}),d=c.length;while(d)c[--d]=c[d].styleSheet;return c}(b.getElementsByTagName("style"),b.getElementsByTagName("link"))));while(++c<g)j=e[c],d.test(j.nodeName)&&f(j);b.appendChild(b._shivedStyleSheet=b.createElement("style")).styleSheet.cssText=k}),a.attachEvent("onafterprint",function(){if(a.html5.supportsXElement||!b.namespaces)return;var c=-1,d=b.getElementsByTagName("*"),e=d.length,f;while(++c<e)f=d[c],f.originalElement&&g(f);b._shivedStyleSheet&&b._shivedStyleSheet.parentNode.removeChild(b._shivedStyleSheet)})})(this,document)
\ No newline at end of file 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 4881535ac..aaacf56b8 100644 --- a/themes/luci-theme-bootstrap/luasrc/view/themes/bootstrap/header.htm +++ b/themes/luci-theme-bootstrap/luasrc/view/themes/bootstrap/header.htm @@ -160,7 +160,6 @@ <head> <meta charset="utf-8"> <title><%=striptags( (boardinfo.hostname or "?") .. ( (node and node.title) and ' - ' .. translate(node.title) or '')) %> - LuCI</title> - <!--[if lt IE 9]><script src="<%=media%>/html5.js"></script><![endif]--> <meta name="viewport" content="initial-scale=1.0"> <link rel="stylesheet" href="<%=media%>/cascade.css"> <link rel="stylesheet" media="only screen and (max-device-width: 854px)" href="<%=media%>/mobile.css" type="text/css" /> @@ -191,22 +190,20 @@ </div> </header> - <%- if luci.sys.process.info("uid") == 0 and luci.sys.user.getuser("root") and not luci.sys.user.getpasswd("root") then -%> - <div class="container"> + <div id="maincontent" class="container"> + <%- if luci.sys.process.info("uid") == 0 and luci.sys.user.getuser("root") and not luci.sys.user.getpasswd("root") then -%> <div class="alert-message warning"> <h4><%:No password set!%></h4> - <%:There is no password set on this router. Please configure a root password to protect the web interface and enable SSH.%><br> - <a href="<%=pcdata(luci.dispatcher.build_url("admin/system/admin"))%>"><%:Go to password configuration...%></a> + <p><%:There is no password set on this router. Please configure a root password to protect the web interface and enable SSH.%></p> + <div class="right"><a class="btn" href="<%=url("admin/system/admin")%>"><%:Go to password configuration...%></a></div> </div> - </div> - <%- end -%> + <%- end -%> - <noscript> - <div class="alert-message warning"> - <strong><%:JavaScript required!%></strong><br /> - <%:You must enable JavaScript in your browser or LuCI will not work properly.%> - </div> - </noscript> + <noscript> + <div class="alert-message warning"> + <h4><%:JavaScript required!%></h4> + <p><%:You must enable JavaScript in your browser or LuCI will not work properly.%></p> + </div> + </noscript> - <div id="maincontent" class="container"> <% if category then render_tabmenu(category, cattree) end %> 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 index 57bbaf6af..a3b22ccf8 100755 --- a/themes/luci-theme-material/htdocs/luci-static/material/css/style.css +++ b/themes/luci-theme-material/htdocs/luci-static/material/css/style.css @@ -32,6 +32,25 @@ font-style: normal; } +.table { display: table; } +.tr { display: table-row; } +.thead { display: table-header-group; } +.tbody { display: table-row-group; } +.tfoot { display: table-footer-group; } +.td, .th { + vertical-align: middle; + text-align: center; + display: table-cell; + padding: .5em; +} + +.th { + font-weight: bold; +} + +.table[width="33%"], .th[width="33%"], .td[width="33%"] { width: 33%; } +.table[width="100%"], .th[width="100%"], .td[width="100%"] { width: 100%; } + .cbi-button-up, .cbi-button-down, .cbi-value-helpicon, @@ -268,10 +287,9 @@ header > .container > .brand { color: black; } -.errorbox, .alert-message { margin: 2rem 0 0 0; - padding: 2rem; + padding: 1rem; border: 0; font-weight: normal; font-style: normal; @@ -284,16 +302,19 @@ header > .container > .brand { 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; } +.alert-message > h4 { + font-weight: bold; + font-size: 110%; +} + +.alert-message > * { + margin: .5rem 0; +} + #maincontent > .container > div:nth-child(1).alert-message.warning > a { font: inherit; overflow: visible; @@ -468,14 +489,16 @@ fieldset > fieldset { border-bottom: 1px solid #eee; } -table { +table, +.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 { +table > tbody > tr > td, table > tbody > tr > th, table > tfoot > tr > td, table > tfoot > tr > th, table > thead > tr > td, table > thead > tr > th, +.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: .5rem; border-top: 1px solid #ddd; white-space: nowrap; @@ -489,7 +512,13 @@ table > tbody > tr > td, table > tbody > tr > th, table > tfoot > tr > td, table text-align: center; } -fieldset > table > tbody > tr:nth-of-type(2n) { +fieldset > table > tbody > tr:nth-of-type(2n), +fieldset > .table > .tbody > .tr:nth-of-type(2n) { + background-color: #f9f9f9; +} + +fieldset > table > tbody > tr:nth-of-type(2n), +fieldset > .table > .tbody > .tr:nth-of-type(2n) { background-color: #f9f9f9; } @@ -516,25 +545,29 @@ fieldset > table > tbody > tr:nth-of-type(2n) { /* fix multiple table */ -table table { +table table, +.table .table { border: none; } -.cbi-value-field table { +.cbi-value-field table, +.cbi-value-field .table { border: none; } -td > table > tbody > tr > td { +td > table > tbody > tr > td, +.td > .table > .tbody > .tr > .td { border: none; } -.cbi-value-field > table > tbody > tr > td { +.cbi-value-field > table > tbody > tr > td, +.cbi-value-field > .table > .tbody > .tr > .td { border: none; } /* button style */ -.cbi-button { +.btn, .cbi-button { -webkit-appearance: none; text-transform: uppercase; color: rgba(0, 0, 0, 0.87); @@ -557,8 +590,13 @@ td > table > tbody > tr > td { user-select: none; font-size: 0.8rem; width: auto !important; + display: inline-block; + text-decoration: none; } +.btn:hover, +.btn:focus, +.btn:active, .cbi-button:hover, .cbi-button:focus, .cbi-button:active { @@ -568,15 +606,19 @@ td > table > tbody > tr > td { color: rgba(0, 0, 0, 0.87); } +.btn:hover, +.btn:focus, .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); } +.btn:active, .cbi-button:active { box-shadow: 0 10px 20px rgba(0, 0, 0, 0.19), 0 6px 6px rgba(0, 0, 0, 0.23); } +.btn:disabled, .cbi-button:disabled { cursor: not-allowed; pointer-events: none; @@ -776,6 +818,10 @@ form.inline + form.inline, text-align: right !important; } +.center { + text-align: center !important; +} + .inline { display: inline; } @@ -806,7 +852,8 @@ form.inline + form.inline, box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); } -td > .ifacebadge { +td > .ifacebadge, +.td > .ifacebadge { background-color: #F0F0F0; font-size: 0.9rem; } @@ -814,6 +861,41 @@ td > .ifacebadge { .ifacebadge > img { float: right; margin: 0 0.3rem; + align-self: start; +} + +.network-status-table { + display: flex; + flex-wrap: wrap; +} + +.network-status-table .ifacebox { + margin: .5em; + flex-grow: 1; +} + +.network-status-table .ifacebox-body { + display: flex; + flex-direction: column; + height: 100%; +} + +.network-status-table .ifacebox-body > span { + flex: 10; +} + +.network-status-table .ifacebox-body > div { + display: flex; + flex-wrap: wrap; +} + +.network-status-table .ifacebox-body .ifacebadge { + flex: 1; + margin: .5em .25em 0 .25em; + padding: .5em; + min-width: 220px; + background-color: #fff; + align-items: center; } /*textarea*/ @@ -926,6 +1008,23 @@ td > .ifacebadge { .ifacebox { border: 1px solid #999; background-color: #f9f9f9; + display: inline-flex; + flex-direction: column; + line-height: 1.2em; + min-width: 100px; +} + +.ifacebox-head { + padding: .25em; + background: #eee; +} + +.ifacebox-head.active { + background: #90c0e0; +} + +.ifacebox-body { + padding: .25em; } .cbi-image-button { @@ -986,7 +1085,7 @@ td > .ifacebadge { padding: 0.5rem; } -div.cbi-value var, td.cbi-value-field var { +div.cbi-value var, td.cbi-value-field var, .td.cbi-value-field var { font-style: italic; color: #0069D6; } @@ -1134,13 +1233,13 @@ header > .container > .pull-right > * { /* fix status overview */ -.node-status-overview > .main fieldset:nth-child(4) td:nth-child(2) { +.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) { +.node-status-processes > .main .table .tr .td:nth-child(3) { white-space: normal; } @@ -1248,6 +1347,7 @@ body.lang_pl.node-main-login .cbi-value-title { width: calc(100% - 13rem); } + .btn, .cbi-button { padding: 0.3rem 0.6rem; font-size: 0.8rem; 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 index f3644431e..4d9b3a258 100755 --- 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 @@ -1,6 +1,2 @@ -/*! 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 id='"+u+"'></a><select id='"+u+"-\f]' msallowcapture=''><option selected=''></option></select>",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;++d<b;)a.push(d);return a})}},d.pseudos.nth=d.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})d.pseudos[b]=ma(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=na(b);function qa(){}qa.prototype=d.filters=d.pseudos,d.setFilters=new qa,g=ga.tokenize=function(a,b){var c,e,f,g,h,i,j,k=z[a+" "];if(k)return b?0:k.slice(0);h=a,i=[],j=d.preFilter;while(h){(!c||(e=S.exec(h)))&&(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=T.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(R," ")}),h=h.slice(c.length));for(g in d.filter)!(e=X[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));if(!c)break}return b?h.length:h?ga.error(a):z(a,i).slice(0)};function ra(a){for(var b=0,c=a.length,d="";c>b;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 href='#'></a>","#"===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="<input/>",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.length<c?m.queue(this[0],a):void 0===b?this:this.each(function(){var c=m.queue(this,a,b);m._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&m.dequeue(this,a)})},dequeue:function(a){return this.each(function(){m.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=m.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};"string"!=typeof a&&(b=a,a=void 0),a=a||"fx";while(g--)c=m._data(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}});var S=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,T=["Top","Right","Bottom","Left"],U=function(a,b){return a=b||a,"none"===m.css(a,"display")||!m.contains(a.ownerDocument,a)},V=m.access=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===m.type(c)){e=!0;for(h in c)m.access(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,m.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(m(a),c)})),b))for(;i>h;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=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",k.leadingWhitespace=3===b.firstChild.nodeType,k.tbody=!b.getElementsByTagName("tbody").length,k.htmlSerialize=!!b.getElementsByTagName("link").length,k.html5Clone="<:nav></:nav>"!==y.createElement("nav").cloneNode(!0).outerHTML,a.type="checkbox",a.checked=!0,c.appendChild(a),k.appendChecked=a.checked,b.innerHTML="<textarea>x</textarea>",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue,c.appendChild(b),b.innerHTML="<input type='radio' checked='checked' name='t'/>",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<b.length&&g.push({elem:this,handlers:b.slice(h)}),g},fix:function(a){if(a[m.expando])return a;var b,c,d,e=a.type,f=a,g=this.fixHooks[e];g||(this.fixHooks[e]=g=Z.test(e)?this.mouseHooks:Y.test(e)?this.keyHooks:{}),d=g.props?this.props.concat(g.props):this.props,a=new m.Event(f),b=d.length;while(b--)c=d[b],a[c]=f[c];return a.target||(a.target=f.srcElement||y),3===a.target.nodeType&&(a.target=a.target.parentNode),a.metaKey=!!a.metaKey,g.filter?g.filter(a,f):a},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){return null==a.which&&(a.which=null!=b.charCode?b.charCode:b.keyCode),a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,b){var c,d,e,f=b.button,g=b.fromElement;return null==a.pageX&&null!=b.clientX&&(d=a.target.ownerDocument||y,e=d.documentElement,c=d.body,a.pageX=b.clientX+(e&&e.scrollLeft||c&&c.scrollLeft||0)-(e&&e.clientLeft||c&&c.clientLeft||0),a.pageY=b.clientY+(e&&e.scrollTop||c&&c.scrollTop||0)-(e&&e.clientTop||c&&c.clientTop||0)),!a.relatedTarget&&g&&(a.relatedTarget=g===a.target?b.toElement:g),a.which||void 0===f||(a.which=1&f?1:2&f?3:4&f?2:0),a}},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==ca()&&this.focus)try{return this.focus(),!1}catch(a){}},delegateType:"focusin"},blur:{trigger:function(){return this===ca()&&this.blur?(this.blur(),!1):void 0},delegateType:"focusout"},click:{trigger:function(){return m.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):void 0},_default:function(a){return m.nodeName(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&a.originalEvent&&(a.originalEvent.returnValue=a.result)}}},simulate:function(a,b,c,d){var e=m.extend(new m.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?m.event.trigger(e,null,b):m.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},m.removeEvent=y.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){var d="on"+b;a.detachEvent&&(typeof a[d]===K&&(a[d]=null),a.detachEvent(d,c))},m.Event=function(a,b){return this instanceof m.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&a.returnValue===!1?aa:ba):this.type=a,b&&m.extend(this,b),this.timeStamp=a&&a.timeStamp||m.now(),void(this[m.expando]=!0)):new m.Event(a,b)},m.Event.prototype={isDefaultPrevented:ba,isPropagationStopped:ba,isImmediatePropagationStopped:ba,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=aa,a&&(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=aa,a&&(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){var a=this.originalEvent;this.isImmediatePropagationStopped=aa,a&&a.stopImmediatePropagation&&a.stopImmediatePropagation(),this.stopPropagation()}},m.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(a,b){m.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return(!e||e!==d&&!m.contains(d,e))&&(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),k.submitBubbles||(m.event.special.submit={setup:function(){return m.nodeName(this,"form")?!1:void m.event.add(this,"click._submit keypress._submit",function(a){var b=a.target,c=m.nodeName(b,"input")||m.nodeName(b,"button")?b.form:void 0;c&&!m._data(c,"submitBubbles")&&(m.event.add(c,"submit._submit",function(a){a._submit_bubble=!0}),m._data(c,"submitBubbles",!0))})},postDispatch:function(a){a._submit_bubble&&(delete a._submit_bubble,this.parentNode&&!a.isTrigger&&m.event.simulate("submit",this.parentNode,a,!0))},teardown:function(){return m.nodeName(this,"form")?!1:void m.event.remove(this,"._submit")}}),k.changeBubbles||(m.event.special.change={setup:function(){return X.test(this.nodeName)?(("checkbox"===this.type||"radio"===this.type)&&(m.event.add(this,"propertychange._change",function(a){"checked"===a.originalEvent.propertyName&&(this._just_changed=!0)}),m.event.add(this,"click._change",function(a){this._just_changed&&!a.isTrigger&&(this._just_changed=!1),m.event.simulate("change",this,a,!0)})),!1):void m.event.add(this,"beforeactivate._change",function(a){var b=a.target;X.test(b.nodeName)&&!m._data(b,"changeBubbles")&&(m.event.add(b,"change._change",function(a){!this.parentNode||a.isSimulated||a.isTrigger||m.event.simulate("change",this.parentNode,a,!0)}),m._data(b,"changeBubbles",!0))})},handle:function(a){var b=a.target;return this!==b||a.isSimulated||a.isTrigger||"radio"!==b.type&&"checkbox"!==b.type?a.handleObj.handler.apply(this,arguments):void 0},teardown:function(){return m.event.remove(this,"._change"),!X.test(this.nodeName)}}),k.focusinBubbles||m.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){m.event.simulate(b,a.target,m.event.fix(a),!0)};m.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=m._data(d,b);e||d.addEventListener(a,c,!0),m._data(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=m._data(d,b)-1;e?m._data(d,b,e):(d.removeEventListener(a,c,!0),m._removeData(d,b))}}}),m.fn.extend({on:function(a,b,c,d,e){var f,g;if("object"==typeof a){"string"!=typeof b&&(c=c||b,b=void 0);for(f in a)this.on(f,b,c,a[f],e);return this}if(null==c&&null==d?(d=b,c=b=void 0):null==d&&("string"==typeof b?(d=c,c=void 0):(d=c,c=b,b=void 0)),d===!1)d=ba;else if(!d)return this;return 1===e&&(g=d,d=function(a){return m().off(a),g.apply(this,arguments)},d.guid=g.guid||(g.guid=m.guid++)),this.each(function(){m.event.add(this,a,d,c,b)})},one:function(a,b,c,d){return this.on(a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,m(a.delegateTarget).off(d.namespace?d.origType+"."+d.namespace:d.origType,d.selector,d.handler),this;if("object"==typeof a){for(e in a)this.off(e,b,a[e]);return this}return(b===!1||"function"==typeof b)&&(c=b,b=void 0),c===!1&&(c=ba),this.each(function(){m.event.remove(this,a,c,b)})},trigger:function(a,b){return this.each(function(){m.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];return c?m.event.trigger(a,b,c,!0):void 0}});function da(a){var b=ea.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}var ea="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",fa=/ jQuery\d+="(?:null|\d+)"/g,ga=new RegExp("<(?:"+ea+")[\\s/>]","i"),ha=/^\s+/,ia=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,ja=/<([\w:]+)/,ka=/<tbody/i,la=/<|&#?\w+;/,ma=/<(?:script|style|link)/i,na=/checked\s*(?:[^=]|=\s*.checked.)/i,oa=/^$|\/(?:java|ecma)script/i,pa=/^true\/(.*)/,qa=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,ra={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],area:[1,"<map>","</map>"],param:[1,"<object>","</object>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:k.htmlSerialize?[0,"",""]:[1,"X<div>","</div>"]},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></$2>")+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)?"<table>"!==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></$2>");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("<iframe frameborder='0' width='0' height='0'/>")).appendTo(b.documentElement),b=(Ca[0].contentWindow||Ca[0].contentDocument).document,b.write(),b.close(),c=Ea(a,b),Ca.detach()),Da[a]=c),c}!function(){var a;k.shrinkWrapBlocks=function(){if(null!=a)return a;a=!1;var b,c,d;return 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="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:1px;width:1px;zoom:1",b.appendChild(y.createElement("div")).style.width="5px",a=3!==b.offsetWidth),c.removeChild(d),a):void 0}}();var Ga=/^margin/,Ha=new RegExp("^("+S+")(?!px)[a-z%]+$","i"),Ia,Ja,Ka=/^(top|right|bottom|left)$/;a.getComputedStyle?(Ia=function(b){return b.ownerDocument.defaultView.opener?b.ownerDocument.defaultView.getComputedStyle(b,null):a.getComputedStyle(b,null)},Ja=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Ia(a),g=c?c.getPropertyValue(b)||c[b]:void 0,c&&(""!==g||m.contains(a.ownerDocument,a)||(g=m.style(a,b)),Ha.test(g)&&Ga.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f)),void 0===g?g:g+""}):y.documentElement.currentStyle&&(Ia=function(a){return a.currentStyle},Ja=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Ia(a),g=c?c[b]:void 0,null==g&&h&&h[b]&&(g=h[b]),Ha.test(g)&&!Ka.test(b)&&(d=h.left,e=a.runtimeStyle,f=e&&e.left,f&&(e.left=a.currentStyle.left),h.left="fontSize"===b?"1em":g,g=h.pixelLeft+"px",h.left=d,f&&(e.left=f)),void 0===g?g:g+""||"auto"});function La(a,b){return{get:function(){var c=a();if(null!=c)return c?void delete this.get:(this.get=b).apply(this,arguments)}}}!function(){var b,c,d,e,f,g,h;if(b=y.createElement("div"),b.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",d=b.getElementsByTagName("a")[0],c=d&&d.style){c.cssText="float:left;opacity:.5",k.opacity="0.5"===c.opacity,k.cssFloat=!!c.cssFloat,b.style.backgroundClip="content-box",b.cloneNode(!0).style.backgroundClip="",k.clearCloneStyle="content-box"===b.style.backgroundClip,k.boxSizing=""===c.boxSizing||""===c.MozBoxSizing||""===c.WebkitBoxSizing,m.extend(k,{reliableHiddenOffsets:function(){return null==g&&i(),g},boxSizingReliable:function(){return null==f&&i(),f},pixelPosition:function(){return null==e&&i(),e},reliableMarginRight:function(){return null==h&&i(),h}});function i(){var b,c,d,i;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),b.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:block;margin-top:1%;top:1%;border:1px;padding:1px;width:4px;position:absolute",e=f=!1,h=!0,a.getComputedStyle&&(e="1%"!==(a.getComputedStyle(b,null)||{}).top,f="4px"===(a.getComputedStyle(b,null)||{width:"4px"}).width,i=b.appendChild(y.createElement("div")),i.style.cssText=b.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0",i.style.marginRight=i.style.width="0",b.style.width="1px",h=!parseFloat((a.getComputedStyle(i,null)||{}).marginRight),b.removeChild(i)),b.innerHTML="<table><tr><td></td><td>t</td></tr></table>",i=b.getElementsByTagName("td"),i[0].style.cssText="margin:0;border:0;padding:0;display:none",g=0===i[0].offsetHeight,g&&(i[0].style.display="",i[1].style.display="none",g=0===i[0].offsetHeight),c.removeChild(d))}}}(),m.swap=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e};var Ma=/alpha\([^)]*\)/i,Na=/opacity\s*=\s*([^)]*)/,Oa=/^(none|table(?!-c[ea]).+)/,Pa=new RegExp("^("+S+")(.*)$","i"),Qa=new RegExp("^([+-])=("+S+")","i"),Ra={position:"absolute",visibility:"hidden",display:"block"},Sa={letterSpacing:"0",fontWeight:"400"},Ta=["Webkit","O","Moz","ms"];function Ua(a,b){if(b in a)return b;var c=b.charAt(0).toUpperCase()+b.slice(1),d=b,e=Ta.length;while(e--)if(b=Ta[e]+c,b in a)return b;return d}function Va(a,b){for(var c,d,e,f=[],g=0,h=a.length;h>g;g++)d=a[g],d.style&&(f[g]=m._data(d,"olddisplay"),c=d.style.display,b?(f[g]||"none"!==c||(d.style.display=""),""===d.style.display&&U(d)&&(f[g]=m._data(d,"olddisplay",Fa(d.nodeName)))):(e=U(d),(c&&"none"!==c||!e)&&m._data(d,"olddisplay",e?c:m.css(d,"display"))));for(g=0;h>g;g++)d=a[g],d.style&&(b&&"none"!==d.style.display&&""!==d.style.display||(d.style.display=b?f[g]||"":"none"));return a}function Wa(a,b,c){var d=Pa.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function Xa(a,b,c,d,e){for(var f=c===(d?"border":"content")?4:"width"===b?1:0,g=0;4>f;f+=2)"margin"===c&&(g+=m.css(a,c+T[f],!0,e)),d?("content"===c&&(g-=m.css(a,"padding"+T[f],!0,e)),"margin"!==c&&(g-=m.css(a,"border"+T[f]+"Width",!0,e))):(g+=m.css(a,"padding"+T[f],!0,e),"padding"!==c&&(g+=m.css(a,"border"+T[f]+"Width",!0,e)));return g}function Ya(a,b,c){var d=!0,e="width"===b?a.offsetWidth:a.offsetHeight,f=Ia(a),g=k.boxSizing&&"border-box"===m.css(a,"boxSizing",!1,f);if(0>=e||null==e){if(e=Ja(a,b,f),(0>e||null==e)&&(e=a.style[b]),Ha.test(e))return e;d=g&&(k.boxSizingReliable()||e===a.style[b]),e=parseFloat(e)||0}return e+Xa(a,b,c||(g?"border":"content"),d,f)+"px"}m.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=Ja(a,"opacity");return""===c?"1":c}}}},cssNumber:{columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":k.cssFloat?"cssFloat":"styleFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=m.camelCase(b),i=a.style;if(b=m.cssProps[h]||(m.cssProps[h]=Ua(i,h)),g=m.cssHooks[b]||m.cssHooks[h],void 0===c)return g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:i[b];if(f=typeof c,"string"===f&&(e=Qa.exec(c))&&(c=(e[1]+1)*e[2]+parseFloat(m.css(a,b)),f="number"),null!=c&&c===c&&("number"!==f||m.cssNumber[h]||(c+="px"),k.clearCloneStyle||""!==c||0!==b.indexOf("background")||(i[b]="inherit"),!(g&&"set"in g&&void 0===(c=g.set(a,c,d)))))try{i[b]=c}catch(j){}}},css:function(a,b,c,d){var e,f,g,h=m.camelCase(b);return b=m.cssProps[h]||(m.cssProps[h]=Ua(a.style,h)),g=m.cssHooks[b]||m.cssHooks[h],g&&"get"in g&&(f=g.get(a,!0,c)),void 0===f&&(f=Ja(a,b,d)),"normal"===f&&b in Sa&&(f=Sa[b]),""===c||c?(e=parseFloat(f),c===!0||m.isNumeric(e)?e||0:f):f}}),m.each(["height","width"],function(a,b){m.cssHooks[b]={get:function(a,c,d){return c?Oa.test(m.css(a,"display"))&&0===a.offsetWidth?m.swap(a,Ra,function(){return Ya(a,b,d)}):Ya(a,b,d):void 0},set:function(a,c,d){var e=d&&Ia(a);return Wa(a,c,d?Xa(a,b,d,k.boxSizing&&"border-box"===m.css(a,"boxSizing",!1,e),e):0)}}}),k.opacity||(m.cssHooks.opacity={get:function(a,b){return Na.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=m.isNumeric(b)?"alpha(opacity="+100*b+")":"",f=d&&d.filter||c.filter||"";c.zoom=1,(b>=1||""===b)&&""===m.trim(f.replace(Ma,""))&&c.removeAttribute&&(c.removeAttribute("filter"),""===b||d&&!d.filter)||(c.filter=Ma.test(f)?f.replace(Ma,e):f+" "+e)}}),m.cssHooks.marginRight=La(k.reliableMarginRight,function(a,b){return b?m.swap(a,{display:"inline-block"},Ja,[a,"marginRight"]):void 0}),m.each({margin:"",padding:"",border:"Width"},function(a,b){m.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];4>d;d++)e[a+T[d]+b]=f[d]||f[d-2]||f[0];return e}},Ga.test(a)||(m.cssHooks[a+b].set=Wa)}),m.fn.extend({css:function(a,b){return V(this,function(a,b,c){var d,e,f={},g=0;if(m.isArray(b)){for(d=Ia(a),e=b.length;e>g;g++)f[b[g]]=m.css(a,b[g],!1,d);return f}return void 0!==c?m.style(a,b,c):m.css(a,b)},a,b,arguments.length>1)},show:function(){return Va(this,!0)},hide:function(){return Va(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){U(this)?m(this).show():m(this).hide()})}});function Za(a,b,c,d,e){ -return new Za.prototype.init(a,b,c,d,e)}m.Tween=Za,Za.prototype={constructor:Za,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||"swing",this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(m.cssNumber[c]?"":"px")},cur:function(){var a=Za.propHooks[this.prop];return a&&a.get?a.get(this):Za.propHooks._default.get(this)},run:function(a){var b,c=Za.propHooks[this.prop];return this.options.duration?this.pos=b=m.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):this.pos=b=a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):Za.propHooks._default.set(this),this}},Za.prototype.init.prototype=Za.prototype,Za.propHooks={_default:{get:function(a){var b;return null==a.elem[a.prop]||a.elem.style&&null!=a.elem.style[a.prop]?(b=m.css(a.elem,a.prop,""),b&&"auto"!==b?b:0):a.elem[a.prop]},set:function(a){m.fx.step[a.prop]?m.fx.step[a.prop](a):a.elem.style&&(null!=a.elem.style[m.cssProps[a.prop]]||m.cssHooks[a.prop])?m.style(a.elem,a.prop,a.now+a.unit):a.elem[a.prop]=a.now}}},Za.propHooks.scrollTop=Za.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},m.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2}},m.fx=Za.prototype.init,m.fx.step={};var $a,_a,ab=/^(?:toggle|show|hide)$/,bb=new RegExp("^(?:([+-])=|)("+S+")([a-z%]*)$","i"),cb=/queueHooks$/,db=[ib],eb={"*":[function(a,b){var c=this.createTween(a,b),d=c.cur(),e=bb.exec(b),f=e&&e[3]||(m.cssNumber[a]?"":"px"),g=(m.cssNumber[a]||"px"!==f&&+d)&&bb.exec(m.css(c.elem,a)),h=1,i=20;if(g&&g[3]!==f){f=f||g[3],e=e||[],g=+d||1;do h=h||".5",g/=h,m.style(c.elem,a,g+f);while(h!==(h=c.cur()/d)&&1!==h&&--i)}return e&&(g=c.start=+g||+d||0,c.unit=f,c.end=e[1]?g+(e[1]+1)*e[2]:+e[2]),c}]};function fb(){return setTimeout(function(){$a=void 0}),$a=m.now()}function gb(a,b){var c,d={height:a},e=0;for(b=b?1:0;4>e;e+=2-b)c=T[e],d["margin"+c]=d["padding"+c]=a;return b&&(d.opacity=d.width=a),d}function hb(a,b,c){for(var d,e=(eb[b]||[]).concat(eb["*"]),f=0,g=e.length;g>f;f++)if(d=e[f].call(c,b,a))return d}function ib(a,b,c){var d,e,f,g,h,i,j,l,n=this,o={},p=a.style,q=a.nodeType&&U(a),r=m._data(a,"fxshow");c.queue||(h=m._queueHooks(a,"fx"),null==h.unqueued&&(h.unqueued=0,i=h.empty.fire,h.empty.fire=function(){h.unqueued||i()}),h.unqueued++,n.always(function(){n.always(function(){h.unqueued--,m.queue(a,"fx").length||h.empty.fire()})})),1===a.nodeType&&("height"in b||"width"in b)&&(c.overflow=[p.overflow,p.overflowX,p.overflowY],j=m.css(a,"display"),l="none"===j?m._data(a,"olddisplay")||Fa(a.nodeName):j,"inline"===l&&"none"===m.css(a,"float")&&(k.inlineBlockNeedsLayout&&"inline"!==Fa(a.nodeName)?p.zoom=1:p.display="inline-block")),c.overflow&&(p.overflow="hidden",k.shrinkWrapBlocks()||n.always(function(){p.overflow=c.overflow[0],p.overflowX=c.overflow[1],p.overflowY=c.overflow[2]}));for(d in b)if(e=b[d],ab.exec(e)){if(delete b[d],f=f||"toggle"===e,e===(q?"hide":"show")){if("show"!==e||!r||void 0===r[d])continue;q=!0}o[d]=r&&r[d]||m.style(a,d)}else j=void 0;if(m.isEmptyObject(o))"inline"===("none"===j?Fa(a.nodeName):j)&&(p.display=j);else{r?"hidden"in r&&(q=r.hidden):r=m._data(a,"fxshow",{}),f&&(r.hidden=!q),q?m(a).show():n.done(function(){m(a).hide()}),n.done(function(){var b;m._removeData(a,"fxshow");for(b in o)m.style(a,b,o[b])});for(d in o)g=hb(q?r[d]:0,d,n),d in r||(r[d]=g.start,q&&(g.end=g.start,g.start="width"===d||"height"===d?1:0))}}function jb(a,b){var c,d,e,f,g;for(c in a)if(d=m.camelCase(c),e=b[d],f=a[c],m.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=m.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function kb(a,b,c){var d,e,f=0,g=db.length,h=m.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=$a||fb(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;i>g;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),1>f&&i?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:m.extend({},b),opts:m.extend(!0,{specialEasing:{}},c),originalProperties:b,originalOptions:c,startTime:$a||fb(),duration:c.duration,tweens:[],createTween:function(b,c){var d=m.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;d>c;c++)j.tweens[c].run(1);return b?h.resolveWith(a,[j,b]):h.rejectWith(a,[j,b]),this}}),k=j.props;for(jb(k,j.opts.specialEasing);g>f;f++)if(d=db[f].call(j,a,k,j.opts))return d;return m.map(k,hb,j),m.isFunction(j.opts.start)&&j.opts.start.call(a,j),m.fx.timer(m.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}m.Animation=m.extend(kb,{tweener:function(a,b){m.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");for(var c,d=0,e=a.length;e>d;d++)c=a[d],eb[c]=eb[c]||[],eb[c].unshift(b)},prefilter:function(a,b){b?db.unshift(a):db.push(a)}}),m.speed=function(a,b,c){var d=a&&"object"==typeof a?m.extend({},a):{complete:c||!c&&b||m.isFunction(a)&&a,duration:a,easing:c&&b||b&&!m.isFunction(b)&&b};return d.duration=m.fx.off?0:"number"==typeof d.duration?d.duration:d.duration in m.fx.speeds?m.fx.speeds[d.duration]:m.fx.speeds._default,(null==d.queue||d.queue===!0)&&(d.queue="fx"),d.old=d.complete,d.complete=function(){m.isFunction(d.old)&&d.old.call(this),d.queue&&m.dequeue(this,d.queue)},d},m.fn.extend({fadeTo:function(a,b,c,d){return this.filter(U).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=m.isEmptyObject(a),f=m.speed(b,c,d),g=function(){var b=kb(this,m.extend({},a),f);(e||m._data(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=m.timers,g=m._data(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&cb.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));(b||!c)&&m.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=m._data(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=m.timers,g=d?d.length:0;for(c.finish=!0,m.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;g>b;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),m.each(["toggle","show","hide"],function(a,b){var c=m.fn[b];m.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(gb(b,!0),a,d,e)}}),m.each({slideDown:gb("show"),slideUp:gb("hide"),slideToggle:gb("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){m.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),m.timers=[],m.fx.tick=function(){var a,b=m.timers,c=0;for($a=m.now();c<b.length;c++)a=b[c],a()||b[c]!==a||b.splice(c--,1);b.length||m.fx.stop(),$a=void 0},m.fx.timer=function(a){m.timers.push(a),a()?m.fx.start():m.timers.pop()},m.fx.interval=13,m.fx.start=function(){_a||(_a=setInterval(m.fx.tick,m.fx.interval))},m.fx.stop=function(){clearInterval(_a),_a=null},m.fx.speeds={slow:600,fast:200,_default:400},m.fn.delay=function(a,b){return a=m.fx?m.fx.speeds[a]||a:a,b=b||"fx",this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},function(){var a,b,c,d,e;b=y.createElement("div"),b.setAttribute("className","t"),b.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",d=b.getElementsByTagName("a")[0],c=y.createElement("select"),e=c.appendChild(y.createElement("option")),a=b.getElementsByTagName("input")[0],d.style.cssText="top:1px",k.getSetAttribute="t"!==b.className,k.style=/top/.test(d.getAttribute("style")),k.hrefNormalized="/a"===d.getAttribute("href"),k.checkOn=!!a.value,k.optSelected=e.selected,k.enctype=!!y.createElement("form").enctype,c.disabled=!0,k.optDisabled=!e.disabled,a=y.createElement("input"),a.setAttribute("value",""),k.input=""===a.getAttribute("value"),a.value="t",a.setAttribute("type","radio"),k.radioValue="t"===a.value}();var lb=/\r/g;m.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=m.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,m(this).val()):a,null==e?e="":"number"==typeof e?e+="":m.isArray(e)&&(e=m.map(e,function(a){return null==a?"":a+""})),b=m.valHooks[this.type]||m.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=m.valHooks[e.type]||m.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(lb,""):null==c?"":c)}}}),m.extend({valHooks:{option:{get:function(a){var b=m.find.attr(a,"value");return null!=b?b:m.trim(m.text(a))}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f="select-one"===a.type||0>e,g=f?null:[],h=f?e+1:d.length,i=0>e?h:f?e:0;h>i;i++)if(c=d[i],!(!c.selected&&i!==e||(k.optDisabled?c.disabled:null!==c.getAttribute("disabled"))||c.parentNode.disabled&&m.nodeName(c.parentNode,"optgroup"))){if(b=m(c).val(),f)return b;g.push(b)}return g},set:function(a,b){var c,d,e=a.options,f=m.makeArray(b),g=e.length;while(g--)if(d=e[g],m.inArray(m.valHooks.option.get(d),f)>=0)try{d.selected=c=!0}catch(h){d.scrollHeight}else d.selected=!1;return c||(a.selectedIndex=-1),e}}}}),m.each(["radio","checkbox"],function(){m.valHooks[this]={set:function(a,b){return m.isArray(b)?a.checked=m.inArray(m(a).val(),b)>=0:void 0}},k.checkOn||(m.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var mb,nb,ob=m.expr.attrHandle,pb=/^(?:checked|selected)$/i,qb=k.getSetAttribute,rb=k.input;m.fn.extend({attr:function(a,b){return V(this,m.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){m.removeAttr(this,a)})}}),m.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(a&&3!==f&&8!==f&&2!==f)return typeof a.getAttribute===K?m.prop(a,b,c):(1===f&&m.isXMLDoc(a)||(b=b.toLowerCase(),d=m.attrHooks[b]||(m.expr.match.bool.test(b)?nb:mb)),void 0===c?d&&"get"in d&&null!==(e=d.get(a,b))?e:(e=m.find.attr(a,b),null==e?void 0:e):null!==c?d&&"set"in d&&void 0!==(e=d.set(a,c,b))?e:(a.setAttribute(b,c+""),c):void m.removeAttr(a,b))},removeAttr:function(a,b){var c,d,e=0,f=b&&b.match(E);if(f&&1===a.nodeType)while(c=f[e++])d=m.propFix[c]||c,m.expr.match.bool.test(c)?rb&&qb||!pb.test(c)?a[d]=!1:a[m.camelCase("default-"+c)]=a[d]=!1:m.attr(a,c,""),a.removeAttribute(qb?c:d)},attrHooks:{type:{set:function(a,b){if(!k.radioValue&&"radio"===b&&m.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}}}),nb={set:function(a,b,c){return b===!1?m.removeAttr(a,c):rb&&qb||!pb.test(c)?a.setAttribute(!qb&&m.propFix[c]||c,c):a[m.camelCase("default-"+c)]=a[c]=!0,c}},m.each(m.expr.match.bool.source.match(/\w+/g),function(a,b){var c=ob[b]||m.find.attr;ob[b]=rb&&qb||!pb.test(b)?function(a,b,d){var e,f;return d||(f=ob[b],ob[b]=e,e=null!=c(a,b,d)?b.toLowerCase():null,ob[b]=f),e}:function(a,b,c){return c?void 0:a[m.camelCase("default-"+b)]?b.toLowerCase():null}}),rb&&qb||(m.attrHooks.value={set:function(a,b,c){return m.nodeName(a,"input")?void(a.defaultValue=b):mb&&mb.set(a,b,c)}}),qb||(mb={set:function(a,b,c){var d=a.getAttributeNode(c);return d||a.setAttributeNode(d=a.ownerDocument.createAttribute(c)),d.value=b+="","value"===c||b===a.getAttribute(c)?b:void 0}},ob.id=ob.name=ob.coords=function(a,b,c){var d;return c?void 0:(d=a.getAttributeNode(b))&&""!==d.value?d.value:null},m.valHooks.button={get:function(a,b){var c=a.getAttributeNode(b);return c&&c.specified?c.value:void 0},set:mb.set},m.attrHooks.contenteditable={set:function(a,b,c){mb.set(a,""===b?!1:b,c)}},m.each(["width","height"],function(a,b){m.attrHooks[b]={set:function(a,c){return""===c?(a.setAttribute(b,"auto"),c):void 0}}})),k.style||(m.attrHooks.style={get:function(a){return a.style.cssText||void 0},set:function(a,b){return a.style.cssText=b+""}});var sb=/^(?:input|select|textarea|button|object)$/i,tb=/^(?:a|area)$/i;m.fn.extend({prop:function(a,b){return V(this,m.prop,a,b,arguments.length>1)},removeProp:function(a){return a=m.propFix[a]||a,this.each(function(){try{this[a]=void 0,delete this[a]}catch(b){}})}}),m.extend({propFix:{"for":"htmlFor","class":"className"},prop:function(a,b,c){var d,e,f,g=a.nodeType;if(a&&3!==g&&8!==g&&2!==g)return f=1!==g||!m.isXMLDoc(a),f&&(b=m.propFix[b]||b,e=m.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){var b=m.find.attr(a,"tabindex");return b?parseInt(b,10):sb.test(a.nodeName)||tb.test(a.nodeName)&&a.href?0:-1}}}}),k.hrefNormalized||m.each(["href","src"],function(a,b){m.propHooks[b]={get:function(a){return a.getAttribute(b,4)}}}),k.optSelected||(m.propHooks.selected={get:function(a){var b=a.parentNode;return b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex),null}}),m.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){m.propFix[this.toLowerCase()]=this}),k.enctype||(m.propFix.enctype="encoding");var ub=/[\t\r\n\f]/g;m.fn.extend({addClass:function(a){var b,c,d,e,f,g,h=0,i=this.length,j="string"==typeof a&&a;if(m.isFunction(a))return this.each(function(b){m(this).addClass(a.call(this,b,this.className))});if(j)for(b=(a||"").match(E)||[];i>h;h++)if(c=this[h],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(ub," "):" ")){f=0;while(e=b[f++])d.indexOf(" "+e+" ")<0&&(d+=e+" ");g=m.trim(d),c.className!==g&&(c.className=g)}return this},removeClass:function(a){var b,c,d,e,f,g,h=0,i=this.length,j=0===arguments.length||"string"==typeof a&&a;if(m.isFunction(a))return this.each(function(b){m(this).removeClass(a.call(this,b,this.className))});if(j)for(b=(a||"").match(E)||[];i>h;h++)if(c=this[h],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(ub," "):"")){f=0;while(e=b[f++])while(d.indexOf(" "+e+" ")>=0)d=d.replace(" "+e+" "," ");g=a?m.trim(d):"",c.className!==g&&(c.className=g)}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):this.each(m.isFunction(a)?function(c){m(this).toggleClass(a.call(this,c,this.className,b),b)}:function(){if("string"===c){var b,d=0,e=m(this),f=a.match(E)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else(c===K||"boolean"===c)&&(this.className&&m._data(this,"__className__",this.className),this.className=this.className||a===!1?"":m._data(this,"__className__")||"")})},hasClass:function(a){for(var b=" "+a+" ",c=0,d=this.length;d>c;c++)if(1===this[c].nodeType&&(" "+this[c].className+" ").replace(ub," ").indexOf(b)>=0)return!0;return!1}}),m.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){m.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),m.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)}});var vb=m.now(),wb=/\?/,xb=/(,)|(\[|{)|(}|])|"(?:[^"\\\r\n]|\\["\\\/bfnrt]|\\u[\da-fA-F]{4})*"\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g;m.parseJSON=function(b){if(a.JSON&&a.JSON.parse)return a.JSON.parse(b+"");var c,d=null,e=m.trim(b+"");return e&&!m.trim(e.replace(xb,function(a,b,e,f){return c&&b&&(d=0),0===d?a:(c=e||b,d+=!f-!e,"")}))?Function("return "+e)():m.error("Invalid JSON: "+b)},m.parseXML=function(b){var c,d;if(!b||"string"!=typeof b)return null;try{a.DOMParser?(d=new DOMParser,c=d.parseFromString(b,"text/xml")):(c=new ActiveXObject("Microsoft.XMLDOM"),c.async="false",c.loadXML(b))}catch(e){c=void 0}return c&&c.documentElement&&!c.getElementsByTagName("parsererror").length||m.error("Invalid XML: "+b),c};var yb,zb,Ab=/#.*$/,Bb=/([?&])_=[^&]*/,Cb=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Db=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Eb=/^(?:GET|HEAD)$/,Fb=/^\/\//,Gb=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,Hb={},Ib={},Jb="*/".concat("*");try{zb=location.href}catch(Kb){zb=y.createElement("a"),zb.href="",zb=zb.href}yb=Gb.exec(zb.toLowerCase())||[];function Lb(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(E)||[];if(m.isFunction(c))while(d=f[e++])"+"===d.charAt(0)?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function Mb(a,b,c,d){var e={},f=a===Ib;function g(h){var i;return e[h]=!0,m.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function Nb(a,b){var c,d,e=m.ajaxSettings.flatOptions||{};for(d in b)void 0!==b[d]&&((e[d]?a:c||(c={}))[d]=b[d]);return c&&m.extend(!0,a,c),a}function Ob(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===e&&(e=a.mimeType||b.getResponseHeader("Content-Type"));if(e)for(g in h)if(h[g]&&h[g].test(e)){i.unshift(g);break}if(i[0]in c)f=i[0];else{for(g in c){if(!i[0]||a.converters[g+" "+i[0]]){f=g;break}d||(d=g)}f=f||d}return f?(f!==i[0]&&i.unshift(f),c[f]):void 0}function Pb(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}m.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:zb,type:"GET",isLocal:Db.test(yb[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Jb,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":m.parseJSON,"text xml":m.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?Nb(Nb(a,m.ajaxSettings),b):Nb(m.ajaxSettings,a)},ajaxPrefilter:Lb(Hb),ajaxTransport:Lb(Ib),ajax:function(a,b){"object"==typeof a&&(b=a,a=void 0),b=b||{};var c,d,e,f,g,h,i,j,k=m.ajaxSetup({},b),l=k.context||k,n=k.context&&(l.nodeType||l.jquery)?m(l):m.event,o=m.Deferred(),p=m.Callbacks("once memory"),q=k.statusCode||{},r={},s={},t=0,u="canceled",v={readyState:0,getResponseHeader:function(a){var b;if(2===t){if(!j){j={};while(b=Cb.exec(f))j[b[1].toLowerCase()]=b[2]}b=j[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return 2===t?f:null},setRequestHeader:function(a,b){var c=a.toLowerCase();return t||(a=s[c]=s[c]||a,r[a]=b),this},overrideMimeType:function(a){return t||(k.mimeType=a),this},statusCode:function(a){var b;if(a)if(2>t)for(b in a)q[b]=[q[b],a[b]];else v.always(a[v.status]);return this},abort:function(a){var b=a||u;return i&&i.abort(b),x(0,b),this}};if(o.promise(v).complete=p.add,v.success=v.done,v.error=v.fail,k.url=((a||k.url||zb)+"").replace(Ab,"").replace(Fb,yb[1]+"//"),k.type=b.method||b.type||k.method||k.type,k.dataTypes=m.trim(k.dataType||"*").toLowerCase().match(E)||[""],null==k.crossDomain&&(c=Gb.exec(k.url.toLowerCase()),k.crossDomain=!(!c||c[1]===yb[1]&&c[2]===yb[2]&&(c[3]||("http:"===c[1]?"80":"443"))===(yb[3]||("http:"===yb[1]?"80":"443")))),k.data&&k.processData&&"string"!=typeof k.data&&(k.data=m.param(k.data,k.traditional)),Mb(Hb,k,b,v),2===t)return v;h=m.event&&k.global,h&&0===m.active++&&m.event.trigger("ajaxStart"),k.type=k.type.toUpperCase(),k.hasContent=!Eb.test(k.type),e=k.url,k.hasContent||(k.data&&(e=k.url+=(wb.test(e)?"&":"?")+k.data,delete k.data),k.cache===!1&&(k.url=Bb.test(e)?e.replace(Bb,"$1_="+vb++):e+(wb.test(e)?"&":"?")+"_="+vb++)),k.ifModified&&(m.lastModified[e]&&v.setRequestHeader("If-Modified-Since",m.lastModified[e]),m.etag[e]&&v.setRequestHeader("If-None-Match",m.etag[e])),(k.data&&k.hasContent&&k.contentType!==!1||b.contentType)&&v.setRequestHeader("Content-Type",k.contentType),v.setRequestHeader("Accept",k.dataTypes[0]&&k.accepts[k.dataTypes[0]]?k.accepts[k.dataTypes[0]]+("*"!==k.dataTypes[0]?", "+Jb+"; q=0.01":""):k.accepts["*"]);for(d in k.headers)v.setRequestHeader(d,k.headers[d]);if(k.beforeSend&&(k.beforeSend.call(l,v,k)===!1||2===t))return v.abort();u="abort";for(d in{success:1,error:1,complete:1})v[d](k[d]);if(i=Mb(Ib,k,b,v)){v.readyState=1,h&&n.trigger("ajaxSend",[v,k]),k.async&&k.timeout>0&&(g=setTimeout(function(){v.abort("timeout")},k.timeout));try{t=1,i.send(r,x)}catch(w){if(!(2>t))throw w;x(-1,w)}}else x(-1,"No Transport");function x(a,b,c,d){var j,r,s,u,w,x=b;2!==t&&(t=2,g&&clearTimeout(g),i=void 0,f=d||"",v.readyState=a>0?4:0,j=a>=200&&300>a||304===a,c&&(u=Ob(k,v,c)),u=Pb(k,u,v,j),j?(k.ifModified&&(w=v.getResponseHeader("Last-Modified"),w&&(m.lastModified[e]=w),w=v.getResponseHeader("etag"),w&&(m.etag[e]=w)),204===a||"HEAD"===k.type?x="nocontent":304===a?x="notmodified":(x=u.state,r=u.data,s=u.error,j=!s)):(s=x,(a||!x)&&(x="error",0>a&&(a=0))),v.status=a,v.statusText=(b||x)+"",j?o.resolveWith(l,[r,x,v]):o.rejectWith(l,[v,x,s]),v.statusCode(q),q=void 0,h&&n.trigger(j?"ajaxSuccess":"ajaxError",[v,k,j?r:s]),p.fireWith(l,[v,x]),h&&(n.trigger("ajaxComplete",[v,k]),--m.active||m.event.trigger("ajaxStop")))}return v},getJSON:function(a,b,c){return m.get(a,b,c,"json")},getScript:function(a,b){return m.get(a,void 0,b,"script")}}),m.each(["get","post"],function(a,b){m[b]=function(a,c,d,e){return m.isFunction(c)&&(e=e||d,d=c,c=void 0),m.ajax({url:a,type:b,dataType:e,data:c,success:d})}}),m._evalUrl=function(a){return m.ajax({url:a,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})},m.fn.extend({wrapAll:function(a){if(m.isFunction(a))return this.each(function(b){m(this).wrapAll(a.call(this,b))});if(this[0]){var b=m(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&1===a.firstChild.nodeType)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){return this.each(m.isFunction(a)?function(b){m(this).wrapInner(a.call(this,b))}:function(){var b=m(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=m.isFunction(a);return this.each(function(c){m(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){m.nodeName(this,"body")||m(this).replaceWith(this.childNodes)}).end()}}),m.expr.filters.hidden=function(a){return a.offsetWidth<=0&&a.offsetHeight<=0||!k.reliableHiddenOffsets()&&"none"===(a.style&&a.style.display||m.css(a,"display"))},m.expr.filters.visible=function(a){return!m.expr.filters.hidden(a)};var Qb=/%20/g,Rb=/\[\]$/,Sb=/\r?\n/g,Tb=/^(?:submit|button|image|reset|file)$/i,Ub=/^(?:input|select|textarea|keygen)/i;function Vb(a,b,c,d){var e;if(m.isArray(b))m.each(b,function(b,e){c||Rb.test(a)?d(a,e):Vb(a+"["+("object"==typeof e?b:"")+"]",e,c,d)});else if(c||"object"!==m.type(b))d(a,b);else for(e in b)Vb(a+"["+e+"]",b[e],c,d)}m.param=function(a,b){var c,d=[],e=function(a,b){b=m.isFunction(b)?b():null==b?"":b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};if(void 0===b&&(b=m.ajaxSettings&&m.ajaxSettings.traditional),m.isArray(a)||a.jquery&&!m.isPlainObject(a))m.each(a,function(){e(this.name,this.value)});else for(c in a)Vb(c,a[c],b,e);return d.join("&").replace(Qb,"+")},m.fn.extend({serialize:function(){return m.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=m.prop(this,"elements");return a?m.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!m(this).is(":disabled")&&Ub.test(this.nodeName)&&!Tb.test(a)&&(this.checked||!W.test(a))}).map(function(a,b){var c=m(this).val();return null==c?null:m.isArray(c)?m.map(c,function(a){return{name:b.name,value:a.replace(Sb,"\r\n")}}):{name:b.name,value:c.replace(Sb,"\r\n")}}).get()}}),m.ajaxSettings.xhr=void 0!==a.ActiveXObject?function(){return!this.isLocal&&/^(get|post|head|put|delete|options)$/i.test(this.type)&&Zb()||$b()}:Zb;var Wb=0,Xb={},Yb=m.ajaxSettings.xhr();a.attachEvent&&a.attachEvent("onunload",function(){for(var a in Xb)Xb[a](void 0,!0)}),k.cors=!!Yb&&"withCredentials"in Yb,Yb=k.ajax=!!Yb,Yb&&m.ajaxTransport(function(a){if(!a.crossDomain||k.cors){var b;return{send:function(c,d){var e,f=a.xhr(),g=++Wb;if(f.open(a.type,a.url,a.async,a.username,a.password),a.xhrFields)for(e in a.xhrFields)f[e]=a.xhrFields[e];a.mimeType&&f.overrideMimeType&&f.overrideMimeType(a.mimeType),a.crossDomain||c["X-Requested-With"]||(c["X-Requested-With"]="XMLHttpRequest");for(e in c)void 0!==c[e]&&f.setRequestHeader(e,c[e]+"");f.send(a.hasContent&&a.data||null),b=function(c,e){var h,i,j;if(b&&(e||4===f.readyState))if(delete Xb[g],b=void 0,f.onreadystatechange=m.noop,e)4!==f.readyState&&f.abort();else{j={},h=f.status,"string"==typeof f.responseText&&(j.text=f.responseText);try{i=f.statusText}catch(k){i=""}h||!a.isLocal||a.crossDomain?1223===h&&(h=204):h=j.text?200:404}j&&d(h,i,j,f.getAllResponseHeaders())},a.async?4===f.readyState?setTimeout(b):f.onreadystatechange=Xb[g]=b:b()},abort:function(){b&&b(void 0,!0)}}}});function Zb(){try{return new a.XMLHttpRequest}catch(b){}}function $b(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}m.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(a){return m.globalEval(a),a}}}),m.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),m.ajaxTransport("script",function(a){if(a.crossDomain){var b,c=y.head||m("head")[0]||y.documentElement;return{send:function(d,e){b=y.createElement("script"),b.async=!0,a.scriptCharset&&(b.charset=a.scriptCharset),b.src=a.url,b.onload=b.onreadystatechange=function(a,c){(c||!b.readyState||/loaded|complete/.test(b.readyState))&&(b.onload=b.onreadystatechange=null,b.parentNode&&b.parentNode.removeChild(b),b=null,c||e(200,"success"))},c.insertBefore(b,c.firstChild)},abort:function(){b&&b.onload(void 0,!0)}}}});var _b=[],ac=/(=)\?(?=&|$)|\?\?/;m.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=_b.pop()||m.expando+"_"+vb++;return this[a]=!0,a}}),m.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(ac.test(b.url)?"url":"string"==typeof b.data&&!(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&ac.test(b.data)&&"data");return h||"jsonp"===b.dataTypes[0]?(e=b.jsonpCallback=m.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(ac,"$1"+e):b.jsonp!==!1&&(b.url+=(wb.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||m.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,_b.push(e)),g&&m.isFunction(f)&&f(g[0]),g=f=void 0}),"script"):void 0}),m.parseHTML=function(a,b,c){if(!a||"string"!=typeof a)return null;"boolean"==typeof b&&(c=b,b=!1),b=b||y;var d=u.exec(a),e=!c&&[];return d?[b.createElement(d[1])]:(d=m.buildFragment([a],b,e),e&&e.length&&m(e).remove(),m.merge([],d.childNodes))};var bc=m.fn.load;m.fn.load=function(a,b,c){if("string"!=typeof a&&bc)return bc.apply(this,arguments);var d,e,f,g=this,h=a.indexOf(" ");return h>=0&&(d=m.trim(a.slice(h,a.length)),a=a.slice(0,h)),m.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(f="POST"),g.length>0&&m.ajax({url:a,type:f,dataType:"html",data:b}).done(function(a){e=arguments,g.html(d?m("<div>").append(m.parseHTML(a)).find(d):a)}).complete(c&&function(a,b){g.each(c,e||[a.responseText,b,a])}),this},m.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){m.fn[b]=function(a){return this.on(b,a)}}),m.expr.filters.animated=function(a){return m.grep(m.timers,function(b){return a===b.elem}).length};var cc=a.document.documentElement;function dc(a){return m.isWindow(a)?a:9===a.nodeType?a.defaultView||a.parentWindow:!1}m.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=m.css(a,"position"),l=m(a),n={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=m.css(a,"top"),i=m.css(a,"left"),j=("absolute"===k||"fixed"===k)&&m.inArray("auto",[f,i])>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),m.isFunction(b)&&(b=b.call(a,c,h)),null!=b.top&&(n.top=b.top-h.top+g),null!=b.left&&(n.left=b.left-h.left+e),"using"in b?b.using.call(a,n):l.css(n)}},m.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){m.offset.setOffset(this,a,b)});var b,c,d={top:0,left:0},e=this[0],f=e&&e.ownerDocument;if(f)return b=f.documentElement,m.contains(b,e)?(typeof e.getBoundingClientRect!==K&&(d=e.getBoundingClientRect()),c=dc(f),{top:d.top+(c.pageYOffset||b.scrollTop)-(b.clientTop||0),left:d.left+(c.pageXOffset||b.scrollLeft)-(b.clientLeft||0)}):d},position:function(){if(this[0]){var a,b,c={top:0,left:0},d=this[0];return"fixed"===m.css(d,"position")?b=d.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),m.nodeName(a[0],"html")||(c=a.offset()),c.top+=m.css(a[0],"borderTopWidth",!0),c.left+=m.css(a[0],"borderLeftWidth",!0)),{top:b.top-c.top-m.css(d,"marginTop",!0),left:b.left-c.left-m.css(d,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||cc;while(a&&!m.nodeName(a,"html")&&"static"===m.css(a,"position"))a=a.offsetParent;return a||cc})}}),m.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,b){var c=/Y/.test(b);m.fn[a]=function(d){return V(this,function(a,d,e){var f=dc(a);return void 0===e?f?b in f?f[b]:f.document.documentElement[d]:a[d]:void(f?f.scrollTo(c?m(f).scrollLeft():e,c?e:m(f).scrollTop()):a[d]=e)},a,d,arguments.length,null)}}),m.each(["top","left"],function(a,b){m.cssHooks[b]=La(k.pixelPosition,function(a,c){return c?(c=Ja(a,b),Ha.test(c)?m(a).position()[b]+"px":c):void 0})}),m.each({Height:"height",Width:"width"},function(a,b){m.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,d){m.fn[d]=function(d,e){var f=arguments.length&&(c||"boolean"!=typeof d),g=c||(d===!0||e===!0?"margin":"border");return V(this,function(b,c,d){var e;return m.isWindow(b)?b.document.documentElement["client"+a]:9===b.nodeType?(e=b.documentElement,Math.max(b.body["scroll"+a],e["scroll"+a],b.body["offset"+a],e["offset"+a],e["client"+a])):void 0===d?m.css(b,c,g):m.style(b,c,d,g)},b,f?d:void 0,f,null)}})}),m.fn.size=function(){return this.length},m.fn.andSelf=m.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return m});var ec=a.jQuery,fc=a.$;return m.noConflict=function(b){return a.$===m&&(a.$=fc),b&&a.jQuery===m&&(a.jQuery=ec),m},typeof b===K&&(a.jQuery=a.$=m),m}); -//# sourceMappingURL=jquery.min.map
\ No newline at end of file +/*! jQuery v3.3.1 | (c) JS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(e,t){"use strict";var n=[],r=e.document,i=Object.getPrototypeOf,o=n.slice,a=n.concat,s=n.push,u=n.indexOf,l={},c=l.toString,f=l.hasOwnProperty,p=f.toString,d=p.call(Object),h={},g=function e(t){return"function"==typeof t&&"number"!=typeof t.nodeType},y=function e(t){return null!=t&&t===t.window},v={type:!0,src:!0,noModule:!0};function m(e,t,n){var i,o=(t=t||r).createElement("script");if(o.text=e,n)for(i in v)n[i]&&(o[i]=n[i]);t.head.appendChild(o).parentNode.removeChild(o)}function x(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?l[c.call(e)]||"object":typeof e}var b="3.3.1",w=function(e,t){return new w.fn.init(e,t)},T=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;w.fn=w.prototype={jquery:"3.3.1",constructor:w,length:0,toArray:function(){return o.call(this)},get:function(e){return null==e?o.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=w.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return w.each(this,e)},map:function(e){return this.pushStack(w.map(this,function(t,n){return e.call(t,n,t)}))},slice:function(){return this.pushStack(o.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(n>=0&&n<t?[this[n]]:[])},end:function(){return this.prevObject||this.constructor()},push:s,sort:n.sort,splice:n.splice},w.extend=w.fn.extend=function(){var e,t,n,r,i,o,a=arguments[0]||{},s=1,u=arguments.length,l=!1;for("boolean"==typeof a&&(l=a,a=arguments[s]||{},s++),"object"==typeof a||g(a)||(a={}),s===u&&(a=this,s--);s<u;s++)if(null!=(e=arguments[s]))for(t in e)n=a[t],a!==(r=e[t])&&(l&&r&&(w.isPlainObject(r)||(i=Array.isArray(r)))?(i?(i=!1,o=n&&Array.isArray(n)?n:[]):o=n&&w.isPlainObject(n)?n:{},a[t]=w.extend(l,o,r)):void 0!==r&&(a[t]=r));return a},w.extend({expando:"jQuery"+("3.3.1"+Math.random()).replace(/\D/g,""),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isPlainObject:function(e){var t,n;return!(!e||"[object Object]"!==c.call(e))&&(!(t=i(e))||"function"==typeof(n=f.call(t,"constructor")&&t.constructor)&&p.call(n)===d)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},globalEval:function(e){m(e)},each:function(e,t){var n,r=0;if(C(e)){for(n=e.length;r<n;r++)if(!1===t.call(e[r],r,e[r]))break}else for(r in e)if(!1===t.call(e[r],r,e[r]))break;return e},trim:function(e){return null==e?"":(e+"").replace(T,"")},makeArray:function(e,t){var n=t||[];return null!=e&&(C(Object(e))?w.merge(n,"string"==typeof e?[e]:e):s.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:u.call(t,e,n)},merge:function(e,t){for(var n=+t.length,r=0,i=e.length;r<n;r++)e[i++]=t[r];return e.length=i,e},grep:function(e,t,n){for(var r,i=[],o=0,a=e.length,s=!n;o<a;o++)(r=!t(e[o],o))!==s&&i.push(e[o]);return i},map:function(e,t,n){var r,i,o=0,s=[];if(C(e))for(r=e.length;o<r;o++)null!=(i=t(e[o],o,n))&&s.push(i);else for(o in e)null!=(i=t(e[o],o,n))&&s.push(i);return a.apply([],s)},guid:1,support:h}),"function"==typeof Symbol&&(w.fn[Symbol.iterator]=n[Symbol.iterator]),w.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(e,t){l["[object "+t+"]"]=t.toLowerCase()});function C(e){var t=!!e&&"length"in e&&e.length,n=x(e);return!g(e)&&!y(e)&&("array"===n||0===t||"number"==typeof t&&t>0&&t-1 in e)}var E=function(e){var t,n,r,i,o,a,s,u,l,c,f,p,d,h,g,y,v,m,x,b="sizzle"+1*new Date,w=e.document,T=0,C=0,E=ae(),k=ae(),S=ae(),D=function(e,t){return e===t&&(f=!0),0},N={}.hasOwnProperty,A=[],j=A.pop,q=A.push,L=A.push,H=A.slice,O=function(e,t){for(var n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1},P="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",R="(?:\\\\.|[\\w-]|[^\0-\\xa0])+",I="\\["+M+"*("+R+")(?:"+M+"*([*^$|!~]?=)"+M+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+R+"))|)"+M+"*\\]",W=":("+R+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+I+")*)|.*)\\)|)",$=new RegExp(M+"+","g"),B=new RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),F=new RegExp("^"+M+"*,"+M+"*"),_=new RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),z=new RegExp("="+M+"*([^\\]'\"]*?)"+M+"*\\]","g"),X=new RegExp(W),U=new RegExp("^"+R+"$"),V={ID:new RegExp("^#("+R+")"),CLASS:new RegExp("^\\.("+R+")"),TAG:new RegExp("^("+R+"|[*])"),ATTR:new RegExp("^"+I),PSEUDO:new RegExp("^"+W),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+P+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},G=/^(?:input|select|textarea|button)$/i,Y=/^h\d$/i,Q=/^[^{]+\{\s*\[native \w/,J=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,K=/[+~]/,Z=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),ee=function(e,t,n){var r="0x"+t-65536;return r!==r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},te=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ne=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},re=function(){p()},ie=me(function(e){return!0===e.disabled&&("form"in e||"label"in e)},{dir:"parentNode",next:"legend"});try{L.apply(A=H.call(w.childNodes),w.childNodes),A[w.childNodes.length].nodeType}catch(e){L={apply:A.length?function(e,t){q.apply(e,H.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function oe(e,t,r,i){var o,s,l,c,f,h,v,m=t&&t.ownerDocument,T=t?t.nodeType:9;if(r=r||[],"string"!=typeof e||!e||1!==T&&9!==T&&11!==T)return r;if(!i&&((t?t.ownerDocument||t:w)!==d&&p(t),t=t||d,g)){if(11!==T&&(f=J.exec(e)))if(o=f[1]){if(9===T){if(!(l=t.getElementById(o)))return r;if(l.id===o)return r.push(l),r}else if(m&&(l=m.getElementById(o))&&x(t,l)&&l.id===o)return r.push(l),r}else{if(f[2])return L.apply(r,t.getElementsByTagName(e)),r;if((o=f[3])&&n.getElementsByClassName&&t.getElementsByClassName)return L.apply(r,t.getElementsByClassName(o)),r}if(n.qsa&&!S[e+" "]&&(!y||!y.test(e))){if(1!==T)m=t,v=e;else if("object"!==t.nodeName.toLowerCase()){(c=t.getAttribute("id"))?c=c.replace(te,ne):t.setAttribute("id",c=b),s=(h=a(e)).length;while(s--)h[s]="#"+c+" "+ve(h[s]);v=h.join(","),m=K.test(e)&&ge(t.parentNode)||t}if(v)try{return L.apply(r,m.querySelectorAll(v)),r}catch(e){}finally{c===b&&t.removeAttribute("id")}}}return u(e.replace(B,"$1"),t,r,i)}function ae(){var e=[];function t(n,i){return e.push(n+" ")>r.cacheLength&&delete t[e.shift()],t[n+" "]=i}return t}function se(e){return e[b]=!0,e}function ue(e){var t=d.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function le(e,t){var n=e.split("|"),i=n.length;while(i--)r.attrHandle[n[i]]=t}function ce(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function fe(e){return function(t){return"input"===t.nodeName.toLowerCase()&&t.type===e}}function pe(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function de(e){return function(t){return"form"in t?t.parentNode&&!1===t.disabled?"label"in t?"label"in t.parentNode?t.parentNode.disabled===e:t.disabled===e:t.isDisabled===e||t.isDisabled!==!e&&ie(t)===e:t.disabled===e:"label"in t&&t.disabled===e}}function he(e){return se(function(t){return t=+t,se(function(n,r){var i,o=e([],n.length,t),a=o.length;while(a--)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}function ge(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}n=oe.support={},o=oe.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return!!t&&"HTML"!==t.nodeName},p=oe.setDocument=function(e){var t,i,a=e?e.ownerDocument||e:w;return a!==d&&9===a.nodeType&&a.documentElement?(d=a,h=d.documentElement,g=!o(d),w!==d&&(i=d.defaultView)&&i.top!==i&&(i.addEventListener?i.addEventListener("unload",re,!1):i.attachEvent&&i.attachEvent("onunload",re)),n.attributes=ue(function(e){return e.className="i",!e.getAttribute("className")}),n.getElementsByTagName=ue(function(e){return e.appendChild(d.createComment("")),!e.getElementsByTagName("*").length}),n.getElementsByClassName=Q.test(d.getElementsByClassName),n.getById=ue(function(e){return h.appendChild(e).id=b,!d.getElementsByName||!d.getElementsByName(b).length}),n.getById?(r.filter.ID=function(e){var t=e.replace(Z,ee);return function(e){return e.getAttribute("id")===t}},r.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&g){var n=t.getElementById(e);return n?[n]:[]}}):(r.filter.ID=function(e){var t=e.replace(Z,ee);return function(e){var n="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return n&&n.value===t}},r.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&g){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),r.find.TAG=n.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):n.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},r.find.CLASS=n.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&g)return t.getElementsByClassName(e)},v=[],y=[],(n.qsa=Q.test(d.querySelectorAll))&&(ue(function(e){h.appendChild(e).innerHTML="<a id='"+b+"'></a><select id='"+b+"-\r\\' msallowcapture=''><option selected=''></option></select>",e.querySelectorAll("[msallowcapture^='']").length&&y.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||y.push("\\["+M+"*(?:value|"+P+")"),e.querySelectorAll("[id~="+b+"-]").length||y.push("~="),e.querySelectorAll(":checked").length||y.push(":checked"),e.querySelectorAll("a#"+b+"+*").length||y.push(".#.+[+~]")}),ue(function(e){e.innerHTML="<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>";var t=d.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&y.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&y.push(":enabled",":disabled"),h.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&y.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),y.push(",.*:")})),(n.matchesSelector=Q.test(m=h.matches||h.webkitMatchesSelector||h.mozMatchesSelector||h.oMatchesSelector||h.msMatchesSelector))&&ue(function(e){n.disconnectedMatch=m.call(e,"*"),m.call(e,"[s!='']:x"),v.push("!=",W)}),y=y.length&&new RegExp(y.join("|")),v=v.length&&new RegExp(v.join("|")),t=Q.test(h.compareDocumentPosition),x=t||Q.test(h.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return f=!0,0;var r=!e.compareDocumentPosition-!t.compareDocumentPosition;return r||(1&(r=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!n.sortDetached&&t.compareDocumentPosition(e)===r?e===d||e.ownerDocument===w&&x(w,e)?-1:t===d||t.ownerDocument===w&&x(w,t)?1:c?O(c,e)-O(c,t):0:4&r?-1:1)}:function(e,t){if(e===t)return f=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e===d?-1:t===d?1:i?-1:o?1:c?O(c,e)-O(c,t):0;if(i===o)return ce(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?ce(a[r],s[r]):a[r]===w?-1:s[r]===w?1:0},d):d},oe.matches=function(e,t){return oe(e,null,null,t)},oe.matchesSelector=function(e,t){if((e.ownerDocument||e)!==d&&p(e),t=t.replace(z,"='$1']"),n.matchesSelector&&g&&!S[t+" "]&&(!v||!v.test(t))&&(!y||!y.test(t)))try{var r=m.call(e,t);if(r||n.disconnectedMatch||e.document&&11!==e.document.nodeType)return r}catch(e){}return oe(t,d,null,[e]).length>0},oe.contains=function(e,t){return(e.ownerDocument||e)!==d&&p(e),x(e,t)},oe.attr=function(e,t){(e.ownerDocument||e)!==d&&p(e);var i=r.attrHandle[t.toLowerCase()],o=i&&N.call(r.attrHandle,t.toLowerCase())?i(e,t,!g):void 0;return void 0!==o?o:n.attributes||!g?e.getAttribute(t):(o=e.getAttributeNode(t))&&o.specified?o.value:null},oe.escape=function(e){return(e+"").replace(te,ne)},oe.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},oe.uniqueSort=function(e){var t,r=[],i=0,o=0;if(f=!n.detectDuplicates,c=!n.sortStable&&e.slice(0),e.sort(D),f){while(t=e[o++])t===e[o]&&(i=r.push(o));while(i--)e.splice(r[i],1)}return c=null,e},i=oe.getText=function(e){var t,n="",r=0,o=e.nodeType;if(o){if(1===o||9===o||11===o){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=i(e)}else if(3===o||4===o)return e.nodeValue}else while(t=e[r++])n+=i(t);return n},(r=oe.selectors={cacheLength:50,createPseudo:se,match:V,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(Z,ee),e[3]=(e[3]||e[4]||e[5]||"").replace(Z,ee),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||oe.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&oe.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return V.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=a(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(Z,ee).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=E[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&E(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var i=oe.attr(r,e);return null==i?"!="===t:!t||(i+="","="===t?i===n:"!="===t?i!==n:"^="===t?n&&0===i.indexOf(n):"*="===t?n&&i.indexOf(n)>-1:"$="===t?n&&i.slice(-n.length)===n:"~="===t?(" "+i.replace($," ")+" ").indexOf(n)>-1:"|="===t&&(i===n||i.slice(0,n.length+1)===n+"-"))}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,u){var l,c,f,p,d,h,g=o!==a?"nextSibling":"previousSibling",y=t.parentNode,v=s&&t.nodeName.toLowerCase(),m=!u&&!s,x=!1;if(y){if(o){while(g){p=t;while(p=p[g])if(s?p.nodeName.toLowerCase()===v:1===p.nodeType)return!1;h=g="only"===e&&!h&&"nextSibling"}return!0}if(h=[a?y.firstChild:y.lastChild],a&&m){x=(d=(l=(c=(f=(p=y)[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]||[])[0]===T&&l[1])&&l[2],p=d&&y.childNodes[d];while(p=++d&&p&&p[g]||(x=d=0)||h.pop())if(1===p.nodeType&&++x&&p===t){c[e]=[T,d,x];break}}else if(m&&(x=d=(l=(c=(f=(p=t)[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]||[])[0]===T&&l[1]),!1===x)while(p=++d&&p&&p[g]||(x=d=0)||h.pop())if((s?p.nodeName.toLowerCase()===v:1===p.nodeType)&&++x&&(m&&((c=(f=p[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]=[T,x]),p===t))break;return(x-=i)===r||x%r==0&&x/r>=0}}},PSEUDO:function(e,t){var n,i=r.pseudos[e]||r.setFilters[e.toLowerCase()]||oe.error("unsupported pseudo: "+e);return i[b]?i(t):i.length>1?(n=[e,e,"",t],r.setFilters.hasOwnProperty(e.toLowerCase())?se(function(e,n){var r,o=i(e,t),a=o.length;while(a--)e[r=O(e,o[a])]=!(n[r]=o[a])}):function(e){return i(e,0,n)}):i}},pseudos:{not:se(function(e){var t=[],n=[],r=s(e.replace(B,"$1"));return r[b]?se(function(e,t,n,i){var o,a=r(e,null,i,[]),s=e.length;while(s--)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),t[0]=null,!n.pop()}}),has:se(function(e){return function(t){return oe(e,t).length>0}}),contains:se(function(e){return e=e.replace(Z,ee),function(t){return(t.textContent||t.innerText||i(t)).indexOf(e)>-1}}),lang:se(function(e){return U.test(e||"")||oe.error("unsupported lang: "+e),e=e.replace(Z,ee).toLowerCase(),function(t){var n;do{if(n=g?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return(n=n.toLowerCase())===e||0===n.indexOf(e+"-")}while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===h},focus:function(e){return e===d.activeElement&&(!d.hasFocus||d.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:de(!1),disabled:de(!0),checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!r.pseudos.empty(e)},header:function(e){return Y.test(e.nodeName)},input:function(e){return G.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:he(function(){return[0]}),last:he(function(e,t){return[t-1]}),eq:he(function(e,t,n){return[n<0?n+t:n]}),even:he(function(e,t){for(var n=0;n<t;n+=2)e.push(n);return e}),odd:he(function(e,t){for(var n=1;n<t;n+=2)e.push(n);return e}),lt:he(function(e,t,n){for(var r=n<0?n+t:n;--r>=0;)e.push(r);return e}),gt:he(function(e,t,n){for(var r=n<0?n+t:n;++r<t;)e.push(r);return e})}}).pseudos.nth=r.pseudos.eq;for(t in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})r.pseudos[t]=fe(t);for(t in{submit:!0,reset:!0})r.pseudos[t]=pe(t);function ye(){}ye.prototype=r.filters=r.pseudos,r.setFilters=new ye,a=oe.tokenize=function(e,t){var n,i,o,a,s,u,l,c=k[e+" "];if(c)return t?0:c.slice(0);s=e,u=[],l=r.preFilter;while(s){n&&!(i=F.exec(s))||(i&&(s=s.slice(i[0].length)||s),u.push(o=[])),n=!1,(i=_.exec(s))&&(n=i.shift(),o.push({value:n,type:i[0].replace(B," ")}),s=s.slice(n.length));for(a in r.filter)!(i=V[a].exec(s))||l[a]&&!(i=l[a](i))||(n=i.shift(),o.push({value:n,type:a,matches:i}),s=s.slice(n.length));if(!n)break}return t?s.length:s?oe.error(e):k(e,u).slice(0)};function ve(e){for(var t=0,n=e.length,r="";t<n;t++)r+=e[t].value;return r}function me(e,t,n){var r=t.dir,i=t.next,o=i||r,a=n&&"parentNode"===o,s=C++;return t.first?function(t,n,i){while(t=t[r])if(1===t.nodeType||a)return e(t,n,i);return!1}:function(t,n,u){var l,c,f,p=[T,s];if(u){while(t=t[r])if((1===t.nodeType||a)&&e(t,n,u))return!0}else while(t=t[r])if(1===t.nodeType||a)if(f=t[b]||(t[b]={}),c=f[t.uniqueID]||(f[t.uniqueID]={}),i&&i===t.nodeName.toLowerCase())t=t[r]||t;else{if((l=c[o])&&l[0]===T&&l[1]===s)return p[2]=l[2];if(c[o]=p,p[2]=e(t,n,u))return!0}return!1}}function xe(e){return e.length>1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function be(e,t,n){for(var r=0,i=t.length;r<i;r++)oe(e,t[r],n);return n}function we(e,t,n,r,i){for(var o,a=[],s=0,u=e.length,l=null!=t;s<u;s++)(o=e[s])&&(n&&!n(o,r,i)||(a.push(o),l&&t.push(s)));return a}function Te(e,t,n,r,i,o){return r&&!r[b]&&(r=Te(r)),i&&!i[b]&&(i=Te(i,o)),se(function(o,a,s,u){var l,c,f,p=[],d=[],h=a.length,g=o||be(t||"*",s.nodeType?[s]:s,[]),y=!e||!o&&t?g:we(g,p,e,s,u),v=n?i||(o?e:h||r)?[]:a:y;if(n&&n(y,v,s,u),r){l=we(v,d),r(l,[],s,u),c=l.length;while(c--)(f=l[c])&&(v[d[c]]=!(y[d[c]]=f))}if(o){if(i||e){if(i){l=[],c=v.length;while(c--)(f=v[c])&&l.push(y[c]=f);i(null,v=[],l,u)}c=v.length;while(c--)(f=v[c])&&(l=i?O(o,f):p[c])>-1&&(o[l]=!(a[l]=f))}}else v=we(v===a?v.splice(h,v.length):v),i?i(null,a,v,u):L.apply(a,v)})}function Ce(e){for(var t,n,i,o=e.length,a=r.relative[e[0].type],s=a||r.relative[" "],u=a?1:0,c=me(function(e){return e===t},s,!0),f=me(function(e){return O(t,e)>-1},s,!0),p=[function(e,n,r){var i=!a&&(r||n!==l)||((t=n).nodeType?c(e,n,r):f(e,n,r));return t=null,i}];u<o;u++)if(n=r.relative[e[u].type])p=[me(xe(p),n)];else{if((n=r.filter[e[u].type].apply(null,e[u].matches))[b]){for(i=++u;i<o;i++)if(r.relative[e[i].type])break;return Te(u>1&&xe(p),u>1&&ve(e.slice(0,u-1).concat({value:" "===e[u-2].type?"*":""})).replace(B,"$1"),n,u<i&&Ce(e.slice(u,i)),i<o&&Ce(e=e.slice(i)),i<o&&ve(e))}p.push(n)}return xe(p)}function Ee(e,t){var n=t.length>0,i=e.length>0,o=function(o,a,s,u,c){var f,h,y,v=0,m="0",x=o&&[],b=[],w=l,C=o||i&&r.find.TAG("*",c),E=T+=null==w?1:Math.random()||.1,k=C.length;for(c&&(l=a===d||a||c);m!==k&&null!=(f=C[m]);m++){if(i&&f){h=0,a||f.ownerDocument===d||(p(f),s=!g);while(y=e[h++])if(y(f,a||d,s)){u.push(f);break}c&&(T=E)}n&&((f=!y&&f)&&v--,o&&x.push(f))}if(v+=m,n&&m!==v){h=0;while(y=t[h++])y(x,b,a,s);if(o){if(v>0)while(m--)x[m]||b[m]||(b[m]=j.call(u));b=we(b)}L.apply(u,b),c&&!o&&b.length>0&&v+t.length>1&&oe.uniqueSort(u)}return c&&(T=E,l=w),x};return n?se(o):o}return s=oe.compile=function(e,t){var n,r=[],i=[],o=S[e+" "];if(!o){t||(t=a(e)),n=t.length;while(n--)(o=Ce(t[n]))[b]?r.push(o):i.push(o);(o=S(e,Ee(i,r))).selector=e}return o},u=oe.select=function(e,t,n,i){var o,u,l,c,f,p="function"==typeof e&&e,d=!i&&a(e=p.selector||e);if(n=n||[],1===d.length){if((u=d[0]=d[0].slice(0)).length>2&&"ID"===(l=u[0]).type&&9===t.nodeType&&g&&r.relative[u[1].type]){if(!(t=(r.find.ID(l.matches[0].replace(Z,ee),t)||[])[0]))return n;p&&(t=t.parentNode),e=e.slice(u.shift().value.length)}o=V.needsContext.test(e)?0:u.length;while(o--){if(l=u[o],r.relative[c=l.type])break;if((f=r.find[c])&&(i=f(l.matches[0].replace(Z,ee),K.test(u[0].type)&&ge(t.parentNode)||t))){if(u.splice(o,1),!(e=i.length&&ve(u)))return L.apply(n,i),n;break}}}return(p||s(e,d))(i,t,!g,n,!t||K.test(e)&&ge(t.parentNode)||t),n},n.sortStable=b.split("").sort(D).join("")===b,n.detectDuplicates=!!f,p(),n.sortDetached=ue(function(e){return 1&e.compareDocumentPosition(d.createElement("fieldset"))}),ue(function(e){return e.innerHTML="<a href='#'></a>","#"===e.firstChild.getAttribute("href")})||le("type|href|height|width",function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),n.attributes&&ue(function(e){return e.innerHTML="<input/>",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||le("value",function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue}),ue(function(e){return null==e.getAttribute("disabled")})||le(P,function(e,t,n){var r;if(!n)return!0===e[t]?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),oe}(e);w.find=E,w.expr=E.selectors,w.expr[":"]=w.expr.pseudos,w.uniqueSort=w.unique=E.uniqueSort,w.text=E.getText,w.isXMLDoc=E.isXML,w.contains=E.contains,w.escapeSelector=E.escape;var k=function(e,t,n){var r=[],i=void 0!==n;while((e=e[t])&&9!==e.nodeType)if(1===e.nodeType){if(i&&w(e).is(n))break;r.push(e)}return r},S=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},D=w.expr.match.needsContext;function N(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}var A=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,t,n){return g(t)?w.grep(e,function(e,r){return!!t.call(e,r,e)!==n}):t.nodeType?w.grep(e,function(e){return e===t!==n}):"string"!=typeof t?w.grep(e,function(e){return u.call(t,e)>-1!==n}):w.filter(t,e,n)}w.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?w.find.matchesSelector(r,e)?[r]:[]:w.find.matches(e,w.grep(t,function(e){return 1===e.nodeType}))},w.fn.extend({find:function(e){var t,n,r=this.length,i=this;if("string"!=typeof e)return this.pushStack(w(e).filter(function(){for(t=0;t<r;t++)if(w.contains(i[t],this))return!0}));for(n=this.pushStack([]),t=0;t<r;t++)w.find(e,i[t],n);return r>1?w.uniqueSort(n):n},filter:function(e){return this.pushStack(j(this,e||[],!1))},not:function(e){return this.pushStack(j(this,e||[],!0))},is:function(e){return!!j(this,"string"==typeof e&&D.test(e)?w(e):e||[],!1).length}});var q,L=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(w.fn.init=function(e,t,n){var i,o;if(!e)return this;if(n=n||q,"string"==typeof e){if(!(i="<"===e[0]&&">"===e[e.length-1]&&e.length>=3?[null,e,null]:L.exec(e))||!i[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(i[1]){if(t=t instanceof w?t[0]:t,w.merge(this,w.parseHTML(i[1],t&&t.nodeType?t.ownerDocument||t:r,!0)),A.test(i[1])&&w.isPlainObject(t))for(i in t)g(this[i])?this[i](t[i]):this.attr(i,t[i]);return this}return(o=r.getElementById(i[2]))&&(this[0]=o,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):g(e)?void 0!==n.ready?n.ready(e):e(w):w.makeArray(e,this)}).prototype=w.fn,q=w(r);var H=/^(?:parents|prev(?:Until|All))/,O={children:!0,contents:!0,next:!0,prev:!0};w.fn.extend({has:function(e){var t=w(e,this),n=t.length;return this.filter(function(){for(var e=0;e<n;e++)if(w.contains(this,t[e]))return!0})},closest:function(e,t){var n,r=0,i=this.length,o=[],a="string"!=typeof e&&w(e);if(!D.test(e))for(;r<i;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(n.nodeType<11&&(a?a.index(n)>-1:1===n.nodeType&&w.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(o.length>1?w.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?u.call(w(e),this[0]):u.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(w.uniqueSort(w.merge(this.get(),w(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}});function P(e,t){while((e=e[t])&&1!==e.nodeType);return e}w.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return k(e,"parentNode")},parentsUntil:function(e,t,n){return k(e,"parentNode",n)},next:function(e){return P(e,"nextSibling")},prev:function(e){return P(e,"previousSibling")},nextAll:function(e){return k(e,"nextSibling")},prevAll:function(e){return k(e,"previousSibling")},nextUntil:function(e,t,n){return k(e,"nextSibling",n)},prevUntil:function(e,t,n){return k(e,"previousSibling",n)},siblings:function(e){return S((e.parentNode||{}).firstChild,e)},children:function(e){return S(e.firstChild)},contents:function(e){return N(e,"iframe")?e.contentDocument:(N(e,"template")&&(e=e.content||e),w.merge([],e.childNodes))}},function(e,t){w.fn[e]=function(n,r){var i=w.map(this,t,n);return"Until"!==e.slice(-5)&&(r=n),r&&"string"==typeof r&&(i=w.filter(r,i)),this.length>1&&(O[e]||w.uniqueSort(i),H.test(e)&&i.reverse()),this.pushStack(i)}});var M=/[^\x20\t\r\n\f]+/g;function R(e){var t={};return w.each(e.match(M)||[],function(e,n){t[n]=!0}),t}w.Callbacks=function(e){e="string"==typeof e?R(e):w.extend({},e);var t,n,r,i,o=[],a=[],s=-1,u=function(){for(i=i||e.once,r=t=!0;a.length;s=-1){n=a.shift();while(++s<o.length)!1===o[s].apply(n[0],n[1])&&e.stopOnFalse&&(s=o.length,n=!1)}e.memory||(n=!1),t=!1,i&&(o=n?[]:"")},l={add:function(){return o&&(n&&!t&&(s=o.length-1,a.push(n)),function t(n){w.each(n,function(n,r){g(r)?e.unique&&l.has(r)||o.push(r):r&&r.length&&"string"!==x(r)&&t(r)})}(arguments),n&&!t&&u()),this},remove:function(){return w.each(arguments,function(e,t){var n;while((n=w.inArray(t,o,n))>-1)o.splice(n,1),n<=s&&s--}),this},has:function(e){return e?w.inArray(e,o)>-1:o.length>0},empty:function(){return o&&(o=[]),this},disable:function(){return i=a=[],o=n="",this},disabled:function(){return!o},lock:function(){return i=a=[],n||t||(o=n=""),this},locked:function(){return!!i},fireWith:function(e,n){return i||(n=[e,(n=n||[]).slice?n.slice():n],a.push(n),t||u()),this},fire:function(){return l.fireWith(this,arguments),this},fired:function(){return!!r}};return l};function I(e){return e}function W(e){throw e}function $(e,t,n,r){var i;try{e&&g(i=e.promise)?i.call(e).done(t).fail(n):e&&g(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}w.extend({Deferred:function(t){var n=[["notify","progress",w.Callbacks("memory"),w.Callbacks("memory"),2],["resolve","done",w.Callbacks("once memory"),w.Callbacks("once memory"),0,"resolved"],["reject","fail",w.Callbacks("once memory"),w.Callbacks("once memory"),1,"rejected"]],r="pending",i={state:function(){return r},always:function(){return o.done(arguments).fail(arguments),this},"catch":function(e){return i.then(null,e)},pipe:function(){var e=arguments;return w.Deferred(function(t){w.each(n,function(n,r){var i=g(e[r[4]])&&e[r[4]];o[r[1]](function(){var e=i&&i.apply(this,arguments);e&&g(e.promise)?e.promise().progress(t.notify).done(t.resolve).fail(t.reject):t[r[0]+"With"](this,i?[e]:arguments)})}),e=null}).promise()},then:function(t,r,i){var o=0;function a(t,n,r,i){return function(){var s=this,u=arguments,l=function(){var e,l;if(!(t<o)){if((e=r.apply(s,u))===n.promise())throw new TypeError("Thenable self-resolution");l=e&&("object"==typeof e||"function"==typeof e)&&e.then,g(l)?i?l.call(e,a(o,n,I,i),a(o,n,W,i)):(o++,l.call(e,a(o,n,I,i),a(o,n,W,i),a(o,n,I,n.notifyWith))):(r!==I&&(s=void 0,u=[e]),(i||n.resolveWith)(s,u))}},c=i?l:function(){try{l()}catch(e){w.Deferred.exceptionHook&&w.Deferred.exceptionHook(e,c.stackTrace),t+1>=o&&(r!==W&&(s=void 0,u=[e]),n.rejectWith(s,u))}};t?c():(w.Deferred.getStackHook&&(c.stackTrace=w.Deferred.getStackHook()),e.setTimeout(c))}}return w.Deferred(function(e){n[0][3].add(a(0,e,g(i)?i:I,e.notifyWith)),n[1][3].add(a(0,e,g(t)?t:I)),n[2][3].add(a(0,e,g(r)?r:W))}).promise()},promise:function(e){return null!=e?w.extend(e,i):i}},o={};return w.each(n,function(e,t){var a=t[2],s=t[5];i[t[1]]=a.add,s&&a.add(function(){r=s},n[3-e][2].disable,n[3-e][3].disable,n[0][2].lock,n[0][3].lock),a.add(t[3].fire),o[t[0]]=function(){return o[t[0]+"With"](this===o?void 0:this,arguments),this},o[t[0]+"With"]=a.fireWith}),i.promise(o),t&&t.call(o,o),o},when:function(e){var t=arguments.length,n=t,r=Array(n),i=o.call(arguments),a=w.Deferred(),s=function(e){return function(n){r[e]=this,i[e]=arguments.length>1?o.call(arguments):n,--t||a.resolveWith(r,i)}};if(t<=1&&($(e,a.done(s(n)).resolve,a.reject,!t),"pending"===a.state()||g(i[n]&&i[n].then)))return a.then();while(n--)$(i[n],s(n),a.reject);return a.promise()}});var B=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;w.Deferred.exceptionHook=function(t,n){e.console&&e.console.warn&&t&&B.test(t.name)&&e.console.warn("jQuery.Deferred exception: "+t.message,t.stack,n)},w.readyException=function(t){e.setTimeout(function(){throw t})};var F=w.Deferred();w.fn.ready=function(e){return F.then(e)["catch"](function(e){w.readyException(e)}),this},w.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--w.readyWait:w.isReady)||(w.isReady=!0,!0!==e&&--w.readyWait>0||F.resolveWith(r,[w]))}}),w.ready.then=F.then;function _(){r.removeEventListener("DOMContentLoaded",_),e.removeEventListener("load",_),w.ready()}"complete"===r.readyState||"loading"!==r.readyState&&!r.documentElement.doScroll?e.setTimeout(w.ready):(r.addEventListener("DOMContentLoaded",_),e.addEventListener("load",_));var z=function(e,t,n,r,i,o,a){var s=0,u=e.length,l=null==n;if("object"===x(n)){i=!0;for(s in n)z(e,t,s,n[s],!0,o,a)}else if(void 0!==r&&(i=!0,g(r)||(a=!0),l&&(a?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(w(e),n)})),t))for(;s<u;s++)t(e[s],n,a?r:r.call(e[s],s,t(e[s],n)));return i?e:l?t.call(e):u?t(e[0],n):o},X=/^-ms-/,U=/-([a-z])/g;function V(e,t){return t.toUpperCase()}function G(e){return e.replace(X,"ms-").replace(U,V)}var Y=function(e){return 1===e.nodeType||9===e.nodeType||!+e.nodeType};function Q(){this.expando=w.expando+Q.uid++}Q.uid=1,Q.prototype={cache:function(e){var t=e[this.expando];return t||(t={},Y(e)&&(e.nodeType?e[this.expando]=t:Object.defineProperty(e,this.expando,{value:t,configurable:!0}))),t},set:function(e,t,n){var r,i=this.cache(e);if("string"==typeof t)i[G(t)]=n;else for(r in t)i[G(r)]=t[r];return i},get:function(e,t){return void 0===t?this.cache(e):e[this.expando]&&e[this.expando][G(t)]},access:function(e,t,n){return void 0===t||t&&"string"==typeof t&&void 0===n?this.get(e,t):(this.set(e,t,n),void 0!==n?n:t)},remove:function(e,t){var n,r=e[this.expando];if(void 0!==r){if(void 0!==t){n=(t=Array.isArray(t)?t.map(G):(t=G(t))in r?[t]:t.match(M)||[]).length;while(n--)delete r[t[n]]}(void 0===t||w.isEmptyObject(r))&&(e.nodeType?e[this.expando]=void 0:delete e[this.expando])}},hasData:function(e){var t=e[this.expando];return void 0!==t&&!w.isEmptyObject(t)}};var J=new Q,K=new Q,Z=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,ee=/[A-Z]/g;function te(e){return"true"===e||"false"!==e&&("null"===e?null:e===+e+""?+e:Z.test(e)?JSON.parse(e):e)}function ne(e,t,n){var r;if(void 0===n&&1===e.nodeType)if(r="data-"+t.replace(ee,"-$&").toLowerCase(),"string"==typeof(n=e.getAttribute(r))){try{n=te(n)}catch(e){}K.set(e,t,n)}else n=void 0;return n}w.extend({hasData:function(e){return K.hasData(e)||J.hasData(e)},data:function(e,t,n){return K.access(e,t,n)},removeData:function(e,t){K.remove(e,t)},_data:function(e,t,n){return J.access(e,t,n)},_removeData:function(e,t){J.remove(e,t)}}),w.fn.extend({data:function(e,t){var n,r,i,o=this[0],a=o&&o.attributes;if(void 0===e){if(this.length&&(i=K.get(o),1===o.nodeType&&!J.get(o,"hasDataAttrs"))){n=a.length;while(n--)a[n]&&0===(r=a[n].name).indexOf("data-")&&(r=G(r.slice(5)),ne(o,r,i[r]));J.set(o,"hasDataAttrs",!0)}return i}return"object"==typeof e?this.each(function(){K.set(this,e)}):z(this,function(t){var n;if(o&&void 0===t){if(void 0!==(n=K.get(o,e)))return n;if(void 0!==(n=ne(o,e)))return n}else this.each(function(){K.set(this,e,t)})},null,t,arguments.length>1,null,!0)},removeData:function(e){return this.each(function(){K.remove(this,e)})}}),w.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=J.get(e,t),n&&(!r||Array.isArray(n)?r=J.access(e,t,w.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=w.queue(e,t),r=n.length,i=n.shift(),o=w._queueHooks(e,t),a=function(){w.dequeue(e,t)};"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,a,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return J.get(e,n)||J.access(e,n,{empty:w.Callbacks("once memory").add(function(){J.remove(e,[t+"queue",n])})})}}),w.fn.extend({queue:function(e,t){var n=2;return"string"!=typeof e&&(t=e,e="fx",n--),arguments.length<n?w.queue(this[0],e):void 0===t?this:this.each(function(){var n=w.queue(this,e,t);w._queueHooks(this,e),"fx"===e&&"inprogress"!==n[0]&&w.dequeue(this,e)})},dequeue:function(e){return this.each(function(){w.dequeue(this,e)})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,t){var n,r=1,i=w.Deferred(),o=this,a=this.length,s=function(){--r||i.resolveWith(o,[o])};"string"!=typeof e&&(t=e,e=void 0),e=e||"fx";while(a--)(n=J.get(o[a],e+"queueHooks"))&&n.empty&&(r++,n.empty.add(s));return s(),i.promise(t)}});var re=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,ie=new RegExp("^(?:([+-])=|)("+re+")([a-z%]*)$","i"),oe=["Top","Right","Bottom","Left"],ae=function(e,t){return"none"===(e=t||e).style.display||""===e.style.display&&w.contains(e.ownerDocument,e)&&"none"===w.css(e,"display")},se=function(e,t,n,r){var i,o,a={};for(o in t)a[o]=e.style[o],e.style[o]=t[o];i=n.apply(e,r||[]);for(o in t)e.style[o]=a[o];return i};function ue(e,t,n,r){var i,o,a=20,s=r?function(){return r.cur()}:function(){return w.css(e,t,"")},u=s(),l=n&&n[3]||(w.cssNumber[t]?"":"px"),c=(w.cssNumber[t]||"px"!==l&&+u)&&ie.exec(w.css(e,t));if(c&&c[3]!==l){u/=2,l=l||c[3],c=+u||1;while(a--)w.style(e,t,c+l),(1-o)*(1-(o=s()/u||.5))<=0&&(a=0),c/=o;c*=2,w.style(e,t,c+l),n=n||[]}return n&&(c=+c||+u||0,i=n[1]?c+(n[1]+1)*n[2]:+n[2],r&&(r.unit=l,r.start=c,r.end=i)),i}var le={};function ce(e){var t,n=e.ownerDocument,r=e.nodeName,i=le[r];return i||(t=n.body.appendChild(n.createElement(r)),i=w.css(t,"display"),t.parentNode.removeChild(t),"none"===i&&(i="block"),le[r]=i,i)}function fe(e,t){for(var n,r,i=[],o=0,a=e.length;o<a;o++)(r=e[o]).style&&(n=r.style.display,t?("none"===n&&(i[o]=J.get(r,"display")||null,i[o]||(r.style.display="")),""===r.style.display&&ae(r)&&(i[o]=ce(r))):"none"!==n&&(i[o]="none",J.set(r,"display",n)));for(o=0;o<a;o++)null!=i[o]&&(e[o].style.display=i[o]);return e}w.fn.extend({show:function(){return fe(this,!0)},hide:function(){return fe(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each(function(){ae(this)?w(this).show():w(this).hide()})}});var pe=/^(?:checkbox|radio)$/i,de=/<([a-z][^\/\0>\x20\t\r\n\f]+)/i,he=/^$|^module$|\/(?:java|ecma)script/i,ge={option:[1,"<select multiple='multiple'>","</select>"],thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};ge.optgroup=ge.option,ge.tbody=ge.tfoot=ge.colgroup=ge.caption=ge.thead,ge.th=ge.td;function ye(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&N(e,t)?w.merge([e],n):n}function ve(e,t){for(var n=0,r=e.length;n<r;n++)J.set(e[n],"globalEval",!t||J.get(t[n],"globalEval"))}var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d<h;d++)if((o=e[d])||0===o)if("object"===x(o))w.merge(p,o.nodeType?[o]:o);else if(me.test(o)){a=a||f.appendChild(t.createElement("div")),s=(de.exec(o)||["",""])[1].toLowerCase(),u=ge[s]||ge._default,a.innerHTML=u[1]+w.htmlPrefilter(o)+u[2],c=u[0];while(c--)a=a.lastChild;w.merge(p,a.childNodes),(a=f.firstChild).textContent=""}else p.push(t.createTextNode(o));f.textContent="",d=0;while(o=p[d++])if(r&&w.inArray(o,r)>-1)i&&i.push(o);else if(l=w.contains(o.ownerDocument,o),a=ye(f.appendChild(o),"script"),l&&ve(a),n){c=0;while(o=a[c++])he.test(o.type||"")&&n.push(o)}return f}!function(){var e=r.createDocumentFragment().appendChild(r.createElement("div")),t=r.createElement("input");t.setAttribute("type","radio"),t.setAttribute("checked","checked"),t.setAttribute("name","t"),e.appendChild(t),h.checkClone=e.cloneNode(!0).cloneNode(!0).lastChild.checked,e.innerHTML="<textarea>x</textarea>",h.noCloneChecked=!!e.cloneNode(!0).lastChild.defaultValue}();var be=r.documentElement,we=/^key/,Te=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ce=/^([^.]*)(?:\.(.+)|)/;function Ee(){return!0}function ke(){return!1}function Se(){try{return r.activeElement}catch(e){}}function De(e,t,n,r,i,o){var a,s;if("object"==typeof t){"string"!=typeof n&&(r=r||n,n=void 0);for(s in t)De(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=ke;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return w().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=w.guid++)),e.each(function(){w.event.add(this,t,i,r,n)})}w.event={global:{},add:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,y=J.get(e);if(y){n.handler&&(n=(o=n).handler,i=o.selector),i&&w.find.matchesSelector(be,i),n.guid||(n.guid=w.guid++),(u=y.events)||(u=y.events={}),(a=y.handle)||(a=y.handle=function(t){return"undefined"!=typeof w&&w.event.triggered!==t.type?w.event.dispatch.apply(e,arguments):void 0}),l=(t=(t||"").match(M)||[""]).length;while(l--)d=g=(s=Ce.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=w.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=w.event.special[d]||{},c=w.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&w.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(e,r,h,a)||e.addEventListener&&e.addEventListener(d,a)),f.add&&(f.add.call(e,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),w.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,y=J.hasData(e)&&J.get(e);if(y&&(u=y.events)){l=(t=(t||"").match(M)||[""]).length;while(l--)if(s=Ce.exec(t[l])||[],d=g=s[1],h=(s[2]||"").split(".").sort(),d){f=w.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,y.handle)||w.removeEvent(e,d,y.handle),delete u[d])}else for(d in u)w.event.remove(e,d+t[l],n,r,!0);w.isEmptyObject(u)&&J.remove(e,"handle events")}},dispatch:function(e){var t=w.event.fix(e),n,r,i,o,a,s,u=new Array(arguments.length),l=(J.get(this,"events")||{})[t.type]||[],c=w.event.special[t.type]||{};for(u[0]=t,n=1;n<arguments.length;n++)u[n]=arguments[n];if(t.delegateTarget=this,!c.preDispatch||!1!==c.preDispatch.call(this,t)){s=w.event.handlers.call(this,t,l),n=0;while((o=s[n++])&&!t.isPropagationStopped()){t.currentTarget=o.elem,r=0;while((a=o.handlers[r++])&&!t.isImmediatePropagationStopped())t.rnamespace&&!t.rnamespace.test(a.namespace)||(t.handleObj=a,t.data=a.data,void 0!==(i=((w.event.special[a.origType]||{}).handle||a.handler).apply(o.elem,u))&&!1===(t.result=i)&&(t.preventDefault(),t.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,t),t.result}},handlers:function(e,t){var n,r,i,o,a,s=[],u=t.delegateCount,l=e.target;if(u&&l.nodeType&&!("click"===e.type&&e.button>=1))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&("click"!==e.type||!0!==l.disabled)){for(o=[],a={},n=0;n<u;n++)void 0===a[i=(r=t[n]).selector+" "]&&(a[i]=r.needsContext?w(i,this).index(l)>-1:w.find(i,this,null,[l]).length),a[i]&&o.push(r);o.length&&s.push({elem:l,handlers:o})}return l=this,u<t.length&&s.push({elem:l,handlers:t.slice(u)}),s},addProp:function(e,t){Object.defineProperty(w.Event.prototype,e,{enumerable:!0,configurable:!0,get:g(t)?function(){if(this.originalEvent)return t(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[e]},set:function(t){Object.defineProperty(this,e,{enumerable:!0,configurable:!0,writable:!0,value:t})}})},fix:function(e){return e[w.expando]?e:new w.Event(e)},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==Se()&&this.focus)return this.focus(),!1},delegateType:"focusin"},blur:{trigger:function(){if(this===Se()&&this.blur)return this.blur(),!1},delegateType:"focusout"},click:{trigger:function(){if("checkbox"===this.type&&this.click&&N(this,"input"))return this.click(),!1},_default:function(e){return N(e.target,"a")}},beforeunload:{postDispatch:function(e){void 0!==e.result&&e.originalEvent&&(e.originalEvent.returnValue=e.result)}}}},w.removeEvent=function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n)},w.Event=function(e,t){if(!(this instanceof w.Event))return new w.Event(e,t);e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||void 0===e.defaultPrevented&&!1===e.returnValue?Ee:ke,this.target=e.target&&3===e.target.nodeType?e.target.parentNode:e.target,this.currentTarget=e.currentTarget,this.relatedTarget=e.relatedTarget):this.type=e,t&&w.extend(this,t),this.timeStamp=e&&e.timeStamp||Date.now(),this[w.expando]=!0},w.Event.prototype={constructor:w.Event,isDefaultPrevented:ke,isPropagationStopped:ke,isImmediatePropagationStopped:ke,isSimulated:!1,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=Ee,e&&!this.isSimulated&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=Ee,e&&!this.isSimulated&&e.stopPropagation()},stopImmediatePropagation:function(){var e=this.originalEvent;this.isImmediatePropagationStopped=Ee,e&&!this.isSimulated&&e.stopImmediatePropagation(),this.stopPropagation()}},w.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,"char":!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:function(e){var t=e.button;return null==e.which&&we.test(e.type)?null!=e.charCode?e.charCode:e.keyCode:!e.which&&void 0!==t&&Te.test(e.type)?1&t?1:2&t?3:4&t?2:0:e.which}},w.event.addProp),w.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(e,t){w.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=this,i=e.relatedTarget,o=e.handleObj;return i&&(i===r||w.contains(r,i))||(e.type=o.origType,n=o.handler.apply(this,arguments),e.type=t),n}}}),w.fn.extend({on:function(e,t,n,r){return De(this,e,t,n,r)},one:function(e,t,n,r){return De(this,e,t,n,r,1)},off:function(e,t,n){var r,i;if(e&&e.preventDefault&&e.handleObj)return r=e.handleObj,w(e.delegateTarget).off(r.namespace?r.origType+"."+r.namespace:r.origType,r.selector,r.handler),this;if("object"==typeof e){for(i in e)this.off(i,t,e[i]);return this}return!1!==t&&"function"!=typeof t||(n=t,t=void 0),!1===n&&(n=ke),this.each(function(){w.event.remove(this,e,n,t)})}});var Ne=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi,Ae=/<script|<style|<link/i,je=/checked\s*(?:[^=]|=\s*.checked.)/i,qe=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;function Le(e,t){return N(e,"table")&&N(11!==t.nodeType?t:t.firstChild,"tr")?w(e).children("tbody")[0]||e:e}function He(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function Oe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Pe(e,t){var n,r,i,o,a,s,u,l;if(1===t.nodeType){if(J.hasData(e)&&(o=J.access(e),a=J.set(t,o),l=o.events)){delete a.handle,a.events={};for(i in l)for(n=0,r=l[i].length;n<r;n++)w.event.add(t,i,l[i][n])}K.hasData(e)&&(s=K.access(e),u=w.extend({},s),K.set(t,u))}}function Me(e,t){var n=t.nodeName.toLowerCase();"input"===n&&pe.test(e.type)?t.checked=e.checked:"input"!==n&&"textarea"!==n||(t.defaultValue=e.defaultValue)}function Re(e,t,n,r){t=a.apply([],t);var i,o,s,u,l,c,f=0,p=e.length,d=p-1,y=t[0],v=g(y);if(v||p>1&&"string"==typeof y&&!h.checkClone&&je.test(y))return e.each(function(i){var o=e.eq(i);v&&(t[0]=y.call(this,i,o.html())),Re(o,t,n,r)});if(p&&(i=xe(t,e[0].ownerDocument,!1,e,r),o=i.firstChild,1===i.childNodes.length&&(i=o),o||r)){for(u=(s=w.map(ye(i,"script"),He)).length;f<p;f++)l=i,f!==d&&(l=w.clone(l,!0,!0),u&&w.merge(s,ye(l,"script"))),n.call(e[f],l,f);if(u)for(c=s[s.length-1].ownerDocument,w.map(s,Oe),f=0;f<u;f++)l=s[f],he.test(l.type||"")&&!J.access(l,"globalEval")&&w.contains(c,l)&&(l.src&&"module"!==(l.type||"").toLowerCase()?w._evalUrl&&w._evalUrl(l.src):m(l.textContent.replace(qe,""),c,l))}return e}function Ie(e,t,n){for(var r,i=t?w.filter(t,e):e,o=0;null!=(r=i[o]);o++)n||1!==r.nodeType||w.cleanData(ye(r)),r.parentNode&&(n&&w.contains(r.ownerDocument,r)&&ve(ye(r,"script")),r.parentNode.removeChild(r));return e}w.extend({htmlPrefilter:function(e){return e.replace(Ne,"<$1></$2>")},clone:function(e,t,n){var r,i,o,a,s=e.cloneNode(!0),u=w.contains(e.ownerDocument,e);if(!(h.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||w.isXMLDoc(e)))for(a=ye(s),r=0,i=(o=ye(e)).length;r<i;r++)Me(o[r],a[r]);if(t)if(n)for(o=o||ye(e),a=a||ye(s),r=0,i=o.length;r<i;r++)Pe(o[r],a[r]);else Pe(e,s);return(a=ye(s,"script")).length>0&&ve(a,!u&&ye(e,"script")),s},cleanData:function(e){for(var t,n,r,i=w.event.special,o=0;void 0!==(n=e[o]);o++)if(Y(n)){if(t=n[J.expando]){if(t.events)for(r in t.events)i[r]?w.event.remove(n,r):w.removeEvent(n,r,t.handle);n[J.expando]=void 0}n[K.expando]&&(n[K.expando]=void 0)}}}),w.fn.extend({detach:function(e){return Ie(this,e,!0)},remove:function(e){return Ie(this,e)},text:function(e){return z(this,function(e){return void 0===e?w.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return Re(this,arguments,function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||Le(this,e).appendChild(e)})},prepend:function(){return Re(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Le(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return Re(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return Re(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(w.cleanData(ye(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return w.clone(this,e,t)})},html:function(e){return z(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!Ae.test(e)&&!ge[(de.exec(e)||["",""])[1].toLowerCase()]){e=w.htmlPrefilter(e);try{for(;n<r;n++)1===(t=this[n]||{}).nodeType&&(w.cleanData(ye(t,!1)),t.innerHTML=e);t=0}catch(e){}}t&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var e=[];return Re(this,arguments,function(t){var n=this.parentNode;w.inArray(this,e)<0&&(w.cleanData(ye(this)),n&&n.replaceChild(t,this))},e)}}),w.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,t){w.fn[e]=function(e){for(var n,r=[],i=w(e),o=i.length-1,a=0;a<=o;a++)n=a===o?this:this.clone(!0),w(i[a])[t](n),s.apply(r,n.get());return this.pushStack(r)}});var We=new RegExp("^("+re+")(?!px)[a-z%]+$","i"),$e=function(t){var n=t.ownerDocument.defaultView;return n&&n.opener||(n=e),n.getComputedStyle(t)},Be=new RegExp(oe.join("|"),"i");!function(){function t(){if(c){l.style.cssText="position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0",c.style.cssText="position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%",be.appendChild(l).appendChild(c);var t=e.getComputedStyle(c);i="1%"!==t.top,u=12===n(t.marginLeft),c.style.right="60%",s=36===n(t.right),o=36===n(t.width),c.style.position="absolute",a=36===c.offsetWidth||"absolute",be.removeChild(l),c=null}}function n(e){return Math.round(parseFloat(e))}var i,o,a,s,u,l=r.createElement("div"),c=r.createElement("div");c.style&&(c.style.backgroundClip="content-box",c.cloneNode(!0).style.backgroundClip="",h.clearCloneStyle="content-box"===c.style.backgroundClip,w.extend(h,{boxSizingReliable:function(){return t(),o},pixelBoxStyles:function(){return t(),s},pixelPosition:function(){return t(),i},reliableMarginLeft:function(){return t(),u},scrollboxSize:function(){return t(),a}}))}();function Fe(e,t,n){var r,i,o,a,s=e.style;return(n=n||$e(e))&&(""!==(a=n.getPropertyValue(t)||n[t])||w.contains(e.ownerDocument,e)||(a=w.style(e,t)),!h.pixelBoxStyles()&&We.test(a)&&Be.test(t)&&(r=s.width,i=s.minWidth,o=s.maxWidth,s.minWidth=s.maxWidth=s.width=a,a=n.width,s.width=r,s.minWidth=i,s.maxWidth=o)),void 0!==a?a+"":a}function _e(e,t){return{get:function(){if(!e())return(this.get=t).apply(this,arguments);delete this.get}}}var ze=/^(none|table(?!-c[ea]).+)/,Xe=/^--/,Ue={position:"absolute",visibility:"hidden",display:"block"},Ve={letterSpacing:"0",fontWeight:"400"},Ge=["Webkit","Moz","ms"],Ye=r.createElement("div").style;function Qe(e){if(e in Ye)return e;var t=e[0].toUpperCase()+e.slice(1),n=Ge.length;while(n--)if((e=Ge[n]+t)in Ye)return e}function Je(e){var t=w.cssProps[e];return t||(t=w.cssProps[e]=Qe(e)||e),t}function Ke(e,t,n){var r=ie.exec(t);return r?Math.max(0,r[2]-(n||0))+(r[3]||"px"):t}function Ze(e,t,n,r,i,o){var a="width"===t?1:0,s=0,u=0;if(n===(r?"border":"content"))return 0;for(;a<4;a+=2)"margin"===n&&(u+=w.css(e,n+oe[a],!0,i)),r?("content"===n&&(u-=w.css(e,"padding"+oe[a],!0,i)),"margin"!==n&&(u-=w.css(e,"border"+oe[a]+"Width",!0,i))):(u+=w.css(e,"padding"+oe[a],!0,i),"padding"!==n?u+=w.css(e,"border"+oe[a]+"Width",!0,i):s+=w.css(e,"border"+oe[a]+"Width",!0,i));return!r&&o>=0&&(u+=Math.max(0,Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-o-u-s-.5))),u}function et(e,t,n){var r=$e(e),i=Fe(e,t,r),o="border-box"===w.css(e,"boxSizing",!1,r),a=o;if(We.test(i)){if(!n)return i;i="auto"}return a=a&&(h.boxSizingReliable()||i===e.style[t]),("auto"===i||!parseFloat(i)&&"inline"===w.css(e,"display",!1,r))&&(i=e["offset"+t[0].toUpperCase()+t.slice(1)],a=!0),(i=parseFloat(i)||0)+Ze(e,t,n||(o?"border":"content"),a,r,i)+"px"}w.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Fe(e,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,a,s=G(t),u=Xe.test(t),l=e.style;if(u||(t=Je(s)),a=w.cssHooks[t]||w.cssHooks[s],void 0===n)return a&&"get"in a&&void 0!==(i=a.get(e,!1,r))?i:l[t];"string"==(o=typeof n)&&(i=ie.exec(n))&&i[1]&&(n=ue(e,t,i),o="number"),null!=n&&n===n&&("number"===o&&(n+=i&&i[3]||(w.cssNumber[s]?"":"px")),h.clearCloneStyle||""!==n||0!==t.indexOf("background")||(l[t]="inherit"),a&&"set"in a&&void 0===(n=a.set(e,n,r))||(u?l.setProperty(t,n):l[t]=n))}},css:function(e,t,n,r){var i,o,a,s=G(t);return Xe.test(t)||(t=Je(s)),(a=w.cssHooks[t]||w.cssHooks[s])&&"get"in a&&(i=a.get(e,!0,n)),void 0===i&&(i=Fe(e,t,r)),"normal"===i&&t in Ve&&(i=Ve[t]),""===n||n?(o=parseFloat(i),!0===n||isFinite(o)?o||0:i):i}}),w.each(["height","width"],function(e,t){w.cssHooks[t]={get:function(e,n,r){if(n)return!ze.test(w.css(e,"display"))||e.getClientRects().length&&e.getBoundingClientRect().width?et(e,t,r):se(e,Ue,function(){return et(e,t,r)})},set:function(e,n,r){var i,o=$e(e),a="border-box"===w.css(e,"boxSizing",!1,o),s=r&&Ze(e,t,r,a,o);return a&&h.scrollboxSize()===o.position&&(s-=Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-parseFloat(o[t])-Ze(e,t,"border",!1,o)-.5)),s&&(i=ie.exec(n))&&"px"!==(i[3]||"px")&&(e.style[t]=n,n=w.css(e,t)),Ke(e,n,s)}}}),w.cssHooks.marginLeft=_e(h.reliableMarginLeft,function(e,t){if(t)return(parseFloat(Fe(e,"marginLeft"))||e.getBoundingClientRect().left-se(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+"px"}),w.each({margin:"",padding:"",border:"Width"},function(e,t){w.cssHooks[e+t]={expand:function(n){for(var r=0,i={},o="string"==typeof n?n.split(" "):[n];r<4;r++)i[e+oe[r]+t]=o[r]||o[r-2]||o[0];return i}},"margin"!==e&&(w.cssHooks[e+t].set=Ke)}),w.fn.extend({css:function(e,t){return z(this,function(e,t,n){var r,i,o={},a=0;if(Array.isArray(t)){for(r=$e(e),i=t.length;a<i;a++)o[t[a]]=w.css(e,t[a],!1,r);return o}return void 0!==n?w.style(e,t,n):w.css(e,t)},e,t,arguments.length>1)}});function tt(e,t,n,r,i){return new tt.prototype.init(e,t,n,r,i)}w.Tween=tt,tt.prototype={constructor:tt,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||w.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(w.cssNumber[n]?"":"px")},cur:function(){var e=tt.propHooks[this.prop];return e&&e.get?e.get(this):tt.propHooks._default.get(this)},run:function(e){var t,n=tt.propHooks[this.prop];return this.options.duration?this.pos=t=w.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):tt.propHooks._default.set(this),this}},tt.prototype.init.prototype=tt.prototype,tt.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=w.css(e.elem,e.prop,""))&&"auto"!==t?t:0},set:function(e){w.fx.step[e.prop]?w.fx.step[e.prop](e):1!==e.elem.nodeType||null==e.elem.style[w.cssProps[e.prop]]&&!w.cssHooks[e.prop]?e.elem[e.prop]=e.now:w.style(e.elem,e.prop,e.now+e.unit)}}},tt.propHooks.scrollTop=tt.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},w.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},w.fx=tt.prototype.init,w.fx.step={};var nt,rt,it=/^(?:toggle|show|hide)$/,ot=/queueHooks$/;function at(){rt&&(!1===r.hidden&&e.requestAnimationFrame?e.requestAnimationFrame(at):e.setTimeout(at,w.fx.interval),w.fx.tick())}function st(){return e.setTimeout(function(){nt=void 0}),nt=Date.now()}function ut(e,t){var n,r=0,i={height:e};for(t=t?1:0;r<4;r+=2-t)i["margin"+(n=oe[r])]=i["padding"+n]=e;return t&&(i.opacity=i.width=e),i}function lt(e,t,n){for(var r,i=(pt.tweeners[t]||[]).concat(pt.tweeners["*"]),o=0,a=i.length;o<a;o++)if(r=i[o].call(n,t,e))return r}function ct(e,t,n){var r,i,o,a,s,u,l,c,f="width"in t||"height"in t,p=this,d={},h=e.style,g=e.nodeType&&ae(e),y=J.get(e,"fxshow");n.queue||(null==(a=w._queueHooks(e,"fx")).unqueued&&(a.unqueued=0,s=a.empty.fire,a.empty.fire=function(){a.unqueued||s()}),a.unqueued++,p.always(function(){p.always(function(){a.unqueued--,w.queue(e,"fx").length||a.empty.fire()})}));for(r in t)if(i=t[r],it.test(i)){if(delete t[r],o=o||"toggle"===i,i===(g?"hide":"show")){if("show"!==i||!y||void 0===y[r])continue;g=!0}d[r]=y&&y[r]||w.style(e,r)}if((u=!w.isEmptyObject(t))||!w.isEmptyObject(d)){f&&1===e.nodeType&&(n.overflow=[h.overflow,h.overflowX,h.overflowY],null==(l=y&&y.display)&&(l=J.get(e,"display")),"none"===(c=w.css(e,"display"))&&(l?c=l:(fe([e],!0),l=e.style.display||l,c=w.css(e,"display"),fe([e]))),("inline"===c||"inline-block"===c&&null!=l)&&"none"===w.css(e,"float")&&(u||(p.done(function(){h.display=l}),null==l&&(c=h.display,l="none"===c?"":c)),h.display="inline-block")),n.overflow&&(h.overflow="hidden",p.always(function(){h.overflow=n.overflow[0],h.overflowX=n.overflow[1],h.overflowY=n.overflow[2]})),u=!1;for(r in d)u||(y?"hidden"in y&&(g=y.hidden):y=J.access(e,"fxshow",{display:l}),o&&(y.hidden=!g),g&&fe([e],!0),p.done(function(){g||fe([e]),J.remove(e,"fxshow");for(r in d)w.style(e,r,d[r])})),u=lt(g?y[r]:0,r,p),r in y||(y[r]=u.start,g&&(u.end=u.start,u.start=0))}}function ft(e,t){var n,r,i,o,a;for(n in e)if(r=G(n),i=t[r],o=e[n],Array.isArray(o)&&(i=o[1],o=e[n]=o[0]),n!==r&&(e[r]=o,delete e[n]),(a=w.cssHooks[r])&&"expand"in a){o=a.expand(o),delete e[r];for(n in o)n in e||(e[n]=o[n],t[n]=i)}else t[r]=i}function pt(e,t,n){var r,i,o=0,a=pt.prefilters.length,s=w.Deferred().always(function(){delete u.elem}),u=function(){if(i)return!1;for(var t=nt||st(),n=Math.max(0,l.startTime+l.duration-t),r=1-(n/l.duration||0),o=0,a=l.tweens.length;o<a;o++)l.tweens[o].run(r);return s.notifyWith(e,[l,r,n]),r<1&&a?n:(a||s.notifyWith(e,[l,1,0]),s.resolveWith(e,[l]),!1)},l=s.promise({elem:e,props:w.extend({},t),opts:w.extend(!0,{specialEasing:{},easing:w.easing._default},n),originalProperties:t,originalOptions:n,startTime:nt||st(),duration:n.duration,tweens:[],createTween:function(t,n){var r=w.Tween(e,l.opts,t,n,l.opts.specialEasing[t]||l.opts.easing);return l.tweens.push(r),r},stop:function(t){var n=0,r=t?l.tweens.length:0;if(i)return this;for(i=!0;n<r;n++)l.tweens[n].run(1);return t?(s.notifyWith(e,[l,1,0]),s.resolveWith(e,[l,t])):s.rejectWith(e,[l,t]),this}}),c=l.props;for(ft(c,l.opts.specialEasing);o<a;o++)if(r=pt.prefilters[o].call(l,e,c,l.opts))return g(r.stop)&&(w._queueHooks(l.elem,l.opts.queue).stop=r.stop.bind(r)),r;return w.map(c,lt,l),g(l.opts.start)&&l.opts.start.call(e,l),l.progress(l.opts.progress).done(l.opts.done,l.opts.complete).fail(l.opts.fail).always(l.opts.always),w.fx.timer(w.extend(u,{elem:e,anim:l,queue:l.opts.queue})),l}w.Animation=w.extend(pt,{tweeners:{"*":[function(e,t){var n=this.createTween(e,t);return ue(n.elem,e,ie.exec(t),n),n}]},tweener:function(e,t){g(e)?(t=e,e=["*"]):e=e.match(M);for(var n,r=0,i=e.length;r<i;r++)n=e[r],pt.tweeners[n]=pt.tweeners[n]||[],pt.tweeners[n].unshift(t)},prefilters:[ct],prefilter:function(e,t){t?pt.prefilters.unshift(e):pt.prefilters.push(e)}}),w.speed=function(e,t,n){var r=e&&"object"==typeof e?w.extend({},e):{complete:n||!n&&t||g(e)&&e,duration:e,easing:n&&t||t&&!g(t)&&t};return w.fx.off?r.duration=0:"number"!=typeof r.duration&&(r.duration in w.fx.speeds?r.duration=w.fx.speeds[r.duration]:r.duration=w.fx.speeds._default),null!=r.queue&&!0!==r.queue||(r.queue="fx"),r.old=r.complete,r.complete=function(){g(r.old)&&r.old.call(this),r.queue&&w.dequeue(this,r.queue)},r},w.fn.extend({fadeTo:function(e,t,n,r){return this.filter(ae).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(e,t,n,r){var i=w.isEmptyObject(e),o=w.speed(t,n,r),a=function(){var t=pt(this,w.extend({},e),o);(i||J.get(this,"finish"))&&t.stop(!0)};return a.finish=a,i||!1===o.queue?this.each(a):this.queue(o.queue,a)},stop:function(e,t,n){var r=function(e){var t=e.stop;delete e.stop,t(n)};return"string"!=typeof e&&(n=t,t=e,e=void 0),t&&!1!==e&&this.queue(e||"fx",[]),this.each(function(){var t=!0,i=null!=e&&e+"queueHooks",o=w.timers,a=J.get(this);if(i)a[i]&&a[i].stop&&r(a[i]);else for(i in a)a[i]&&a[i].stop&&ot.test(i)&&r(a[i]);for(i=o.length;i--;)o[i].elem!==this||null!=e&&o[i].queue!==e||(o[i].anim.stop(n),t=!1,o.splice(i,1));!t&&n||w.dequeue(this,e)})},finish:function(e){return!1!==e&&(e=e||"fx"),this.each(function(){var t,n=J.get(this),r=n[e+"queue"],i=n[e+"queueHooks"],o=w.timers,a=r?r.length:0;for(n.finish=!0,w.queue(this,e,[]),i&&i.stop&&i.stop.call(this,!0),t=o.length;t--;)o[t].elem===this&&o[t].queue===e&&(o[t].anim.stop(!0),o.splice(t,1));for(t=0;t<a;t++)r[t]&&r[t].finish&&r[t].finish.call(this);delete n.finish})}}),w.each(["toggle","show","hide"],function(e,t){var n=w.fn[t];w.fn[t]=function(e,r,i){return null==e||"boolean"==typeof e?n.apply(this,arguments):this.animate(ut(t,!0),e,r,i)}}),w.each({slideDown:ut("show"),slideUp:ut("hide"),slideToggle:ut("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,t){w.fn[e]=function(e,n,r){return this.animate(t,e,n,r)}}),w.timers=[],w.fx.tick=function(){var e,t=0,n=w.timers;for(nt=Date.now();t<n.length;t++)(e=n[t])()||n[t]!==e||n.splice(t--,1);n.length||w.fx.stop(),nt=void 0},w.fx.timer=function(e){w.timers.push(e),w.fx.start()},w.fx.interval=13,w.fx.start=function(){rt||(rt=!0,at())},w.fx.stop=function(){rt=null},w.fx.speeds={slow:600,fast:200,_default:400},w.fn.delay=function(t,n){return t=w.fx?w.fx.speeds[t]||t:t,n=n||"fx",this.queue(n,function(n,r){var i=e.setTimeout(n,t);r.stop=function(){e.clearTimeout(i)}})},function(){var e=r.createElement("input"),t=r.createElement("select").appendChild(r.createElement("option"));e.type="checkbox",h.checkOn=""!==e.value,h.optSelected=t.selected,(e=r.createElement("input")).value="t",e.type="radio",h.radioValue="t"===e.value}();var dt,ht=w.expr.attrHandle;w.fn.extend({attr:function(e,t){return z(this,w.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){w.removeAttr(this,e)})}}),w.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return"undefined"==typeof e.getAttribute?w.prop(e,t,n):(1===o&&w.isXMLDoc(e)||(i=w.attrHooks[t.toLowerCase()]||(w.expr.match.bool.test(t)?dt:void 0)),void 0!==n?null===n?void w.removeAttr(e,t):i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+""),n):i&&"get"in i&&null!==(r=i.get(e,t))?r:null==(r=w.find.attr(e,t))?void 0:r)},attrHooks:{type:{set:function(e,t){if(!h.radioValue&&"radio"===t&&N(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,i=t&&t.match(M);if(i&&1===e.nodeType)while(n=i[r++])e.removeAttribute(n)}}),dt={set:function(e,t,n){return!1===t?w.removeAttr(e,n):e.setAttribute(n,n),n}},w.each(w.expr.match.bool.source.match(/\w+/g),function(e,t){var n=ht[t]||w.find.attr;ht[t]=function(e,t,r){var i,o,a=t.toLowerCase();return r||(o=ht[a],ht[a]=i,i=null!=n(e,t,r)?a:null,ht[a]=o),i}});var gt=/^(?:input|select|textarea|button)$/i,yt=/^(?:a|area)$/i;w.fn.extend({prop:function(e,t){return z(this,w.prop,e,t,arguments.length>1)},removeProp:function(e){return this.each(function(){delete this[w.propFix[e]||e]})}}),w.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&w.isXMLDoc(e)||(t=w.propFix[t]||t,i=w.propHooks[t]),void 0!==n?i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&"get"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=w.find.attr(e,"tabindex");return t?parseInt(t,10):gt.test(e.nodeName)||yt.test(e.nodeName)&&e.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),h.optSelected||(w.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),w.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){w.propFix[this.toLowerCase()]=this});function vt(e){return(e.match(M)||[]).join(" ")}function mt(e){return e.getAttribute&&e.getAttribute("class")||""}function xt(e){return Array.isArray(e)?e:"string"==typeof e?e.match(M)||[]:[]}w.fn.extend({addClass:function(e){var t,n,r,i,o,a,s,u=0;if(g(e))return this.each(function(t){w(this).addClass(e.call(this,t,mt(this)))});if((t=xt(e)).length)while(n=this[u++])if(i=mt(n),r=1===n.nodeType&&" "+vt(i)+" "){a=0;while(o=t[a++])r.indexOf(" "+o+" ")<0&&(r+=o+" ");i!==(s=vt(r))&&n.setAttribute("class",s)}return this},removeClass:function(e){var t,n,r,i,o,a,s,u=0;if(g(e))return this.each(function(t){w(this).removeClass(e.call(this,t,mt(this)))});if(!arguments.length)return this.attr("class","");if((t=xt(e)).length)while(n=this[u++])if(i=mt(n),r=1===n.nodeType&&" "+vt(i)+" "){a=0;while(o=t[a++])while(r.indexOf(" "+o+" ")>-1)r=r.replace(" "+o+" "," ");i!==(s=vt(r))&&n.setAttribute("class",s)}return this},toggleClass:function(e,t){var n=typeof e,r="string"===n||Array.isArray(e);return"boolean"==typeof t&&r?t?this.addClass(e):this.removeClass(e):g(e)?this.each(function(n){w(this).toggleClass(e.call(this,n,mt(this),t),t)}):this.each(function(){var t,i,o,a;if(r){i=0,o=w(this),a=xt(e);while(t=a[i++])o.hasClass(t)?o.removeClass(t):o.addClass(t)}else void 0!==e&&"boolean"!==n||((t=mt(this))&&J.set(this,"__className__",t),this.setAttribute&&this.setAttribute("class",t||!1===e?"":J.get(this,"__className__")||""))})},hasClass:function(e){var t,n,r=0;t=" "+e+" ";while(n=this[r++])if(1===n.nodeType&&(" "+vt(mt(n))+" ").indexOf(t)>-1)return!0;return!1}});var bt=/\r/g;w.fn.extend({val:function(e){var t,n,r,i=this[0];{if(arguments.length)return r=g(e),this.each(function(n){var i;1===this.nodeType&&(null==(i=r?e.call(this,n,w(this).val()):e)?i="":"number"==typeof i?i+="":Array.isArray(i)&&(i=w.map(i,function(e){return null==e?"":e+""})),(t=w.valHooks[this.type]||w.valHooks[this.nodeName.toLowerCase()])&&"set"in t&&void 0!==t.set(this,i,"value")||(this.value=i))});if(i)return(t=w.valHooks[i.type]||w.valHooks[i.nodeName.toLowerCase()])&&"get"in t&&void 0!==(n=t.get(i,"value"))?n:"string"==typeof(n=i.value)?n.replace(bt,""):null==n?"":n}}}),w.extend({valHooks:{option:{get:function(e){var t=w.find.attr(e,"value");return null!=t?t:vt(w.text(e))}},select:{get:function(e){var t,n,r,i=e.options,o=e.selectedIndex,a="select-one"===e.type,s=a?null:[],u=a?o+1:i.length;for(r=o<0?u:a?o:0;r<u;r++)if(((n=i[r]).selected||r===o)&&!n.disabled&&(!n.parentNode.disabled||!N(n.parentNode,"optgroup"))){if(t=w(n).val(),a)return t;s.push(t)}return s},set:function(e,t){var n,r,i=e.options,o=w.makeArray(t),a=i.length;while(a--)((r=i[a]).selected=w.inArray(w.valHooks.option.get(r),o)>-1)&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),w.each(["radio","checkbox"],function(){w.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=w.inArray(w(e).val(),t)>-1}},h.checkOn||(w.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})}),h.focusin="onfocusin"in e;var wt=/^(?:focusinfocus|focusoutblur)$/,Tt=function(e){e.stopPropagation()};w.extend(w.event,{trigger:function(t,n,i,o){var a,s,u,l,c,p,d,h,v=[i||r],m=f.call(t,"type")?t.type:t,x=f.call(t,"namespace")?t.namespace.split("."):[];if(s=h=u=i=i||r,3!==i.nodeType&&8!==i.nodeType&&!wt.test(m+w.event.triggered)&&(m.indexOf(".")>-1&&(m=(x=m.split(".")).shift(),x.sort()),c=m.indexOf(":")<0&&"on"+m,t=t[w.expando]?t:new w.Event(m,"object"==typeof t&&t),t.isTrigger=o?2:3,t.namespace=x.join("."),t.rnamespace=t.namespace?new RegExp("(^|\\.)"+x.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,t.result=void 0,t.target||(t.target=i),n=null==n?[t]:w.makeArray(n,[t]),d=w.event.special[m]||{},o||!d.trigger||!1!==d.trigger.apply(i,n))){if(!o&&!d.noBubble&&!y(i)){for(l=d.delegateType||m,wt.test(l+m)||(s=s.parentNode);s;s=s.parentNode)v.push(s),u=s;u===(i.ownerDocument||r)&&v.push(u.defaultView||u.parentWindow||e)}a=0;while((s=v[a++])&&!t.isPropagationStopped())h=s,t.type=a>1?l:d.bindType||m,(p=(J.get(s,"events")||{})[t.type]&&J.get(s,"handle"))&&p.apply(s,n),(p=c&&s[c])&&p.apply&&Y(s)&&(t.result=p.apply(s,n),!1===t.result&&t.preventDefault());return t.type=m,o||t.isDefaultPrevented()||d._default&&!1!==d._default.apply(v.pop(),n)||!Y(i)||c&&g(i[m])&&!y(i)&&((u=i[c])&&(i[c]=null),w.event.triggered=m,t.isPropagationStopped()&&h.addEventListener(m,Tt),i[m](),t.isPropagationStopped()&&h.removeEventListener(m,Tt),w.event.triggered=void 0,u&&(i[c]=u)),t.result}},simulate:function(e,t,n){var r=w.extend(new w.Event,n,{type:e,isSimulated:!0});w.event.trigger(r,null,t)}}),w.fn.extend({trigger:function(e,t){return this.each(function(){w.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return w.event.trigger(e,t,n,!0)}}),h.focusin||w.each({focus:"focusin",blur:"focusout"},function(e,t){var n=function(e){w.event.simulate(t,e.target,w.event.fix(e))};w.event.special[t]={setup:function(){var r=this.ownerDocument||this,i=J.access(r,t);i||r.addEventListener(e,n,!0),J.access(r,t,(i||0)+1)},teardown:function(){var r=this.ownerDocument||this,i=J.access(r,t)-1;i?J.access(r,t,i):(r.removeEventListener(e,n,!0),J.remove(r,t))}}});var Ct=e.location,Et=Date.now(),kt=/\?/;w.parseXML=function(t){var n;if(!t||"string"!=typeof t)return null;try{n=(new e.DOMParser).parseFromString(t,"text/xml")}catch(e){n=void 0}return n&&!n.getElementsByTagName("parsererror").length||w.error("Invalid XML: "+t),n};var St=/\[\]$/,Dt=/\r?\n/g,Nt=/^(?:submit|button|image|reset|file)$/i,At=/^(?:input|select|textarea|keygen)/i;function jt(e,t,n,r){var i;if(Array.isArray(t))w.each(t,function(t,i){n||St.test(e)?r(e,i):jt(e+"["+("object"==typeof i&&null!=i?t:"")+"]",i,n,r)});else if(n||"object"!==x(t))r(e,t);else for(i in t)jt(e+"["+i+"]",t[i],n,r)}w.param=function(e,t){var n,r=[],i=function(e,t){var n=g(t)?t():t;r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(Array.isArray(e)||e.jquery&&!w.isPlainObject(e))w.each(e,function(){i(this.name,this.value)});else for(n in e)jt(n,e[n],t,i);return r.join("&")},w.fn.extend({serialize:function(){return w.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=w.prop(this,"elements");return e?w.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!w(this).is(":disabled")&&At.test(this.nodeName)&&!Nt.test(e)&&(this.checked||!pe.test(e))}).map(function(e,t){var n=w(this).val();return null==n?null:Array.isArray(n)?w.map(n,function(e){return{name:t.name,value:e.replace(Dt,"\r\n")}}):{name:t.name,value:n.replace(Dt,"\r\n")}}).get()}});var qt=/%20/g,Lt=/#.*$/,Ht=/([?&])_=[^&]*/,Ot=/^(.*?):[ \t]*([^\r\n]*)$/gm,Pt=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Mt=/^(?:GET|HEAD)$/,Rt=/^\/\//,It={},Wt={},$t="*/".concat("*"),Bt=r.createElement("a");Bt.href=Ct.href;function Ft(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var r,i=0,o=t.toLowerCase().match(M)||[];if(g(n))while(r=o[i++])"+"===r[0]?(r=r.slice(1)||"*",(e[r]=e[r]||[]).unshift(n)):(e[r]=e[r]||[]).push(n)}}function _t(e,t,n,r){var i={},o=e===Wt;function a(s){var u;return i[s]=!0,w.each(e[s]||[],function(e,s){var l=s(t,n,r);return"string"!=typeof l||o||i[l]?o?!(u=l):void 0:(t.dataTypes.unshift(l),a(l),!1)}),u}return a(t.dataTypes[0])||!i["*"]&&a("*")}function zt(e,t){var n,r,i=w.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((i[n]?e:r||(r={}))[n]=t[n]);return r&&w.extend(!0,e,r),e}function Xt(e,t,n){var r,i,o,a,s=e.contents,u=e.dataTypes;while("*"===u[0])u.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader("Content-Type"));if(r)for(i in s)if(s[i]&&s[i].test(r)){u.unshift(i);break}if(u[0]in n)o=u[0];else{for(i in n){if(!u[0]||e.converters[i+" "+u[0]]){o=i;break}a||(a=i)}o=o||a}if(o)return o!==u[0]&&u.unshift(o),n[o]}function Ut(e,t,n,r){var i,o,a,s,u,l={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)l[a.toLowerCase()]=e.converters[a];o=c.shift();while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=o,o=c.shift())if("*"===o)o=u;else if("*"!==u&&u!==o){if(!(a=l[u+" "+o]||l["* "+o]))for(i in l)if((s=i.split(" "))[1]===o&&(a=l[u+" "+s[0]]||l["* "+s[0]])){!0===a?a=l[i]:!0!==l[i]&&(o=s[0],c.unshift(s[1]));break}if(!0!==a)if(a&&e["throws"])t=a(t);else try{t=a(t)}catch(e){return{state:"parsererror",error:a?e:"No conversion from "+u+" to "+o}}}return{state:"success",data:t}}w.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Ct.href,type:"GET",isLocal:Pt.test(Ct.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":$t,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":w.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?zt(zt(e,w.ajaxSettings),t):zt(w.ajaxSettings,e)},ajaxPrefilter:Ft(It),ajaxTransport:Ft(Wt),ajax:function(t,n){"object"==typeof t&&(n=t,t=void 0),n=n||{};var i,o,a,s,u,l,c,f,p,d,h=w.ajaxSetup({},n),g=h.context||h,y=h.context&&(g.nodeType||g.jquery)?w(g):w.event,v=w.Deferred(),m=w.Callbacks("once memory"),x=h.statusCode||{},b={},T={},C="canceled",E={readyState:0,getResponseHeader:function(e){var t;if(c){if(!s){s={};while(t=Ot.exec(a))s[t[1].toLowerCase()]=t[2]}t=s[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return c?a:null},setRequestHeader:function(e,t){return null==c&&(e=T[e.toLowerCase()]=T[e.toLowerCase()]||e,b[e]=t),this},overrideMimeType:function(e){return null==c&&(h.mimeType=e),this},statusCode:function(e){var t;if(e)if(c)E.always(e[E.status]);else for(t in e)x[t]=[x[t],e[t]];return this},abort:function(e){var t=e||C;return i&&i.abort(t),k(0,t),this}};if(v.promise(E),h.url=((t||h.url||Ct.href)+"").replace(Rt,Ct.protocol+"//"),h.type=n.method||n.type||h.method||h.type,h.dataTypes=(h.dataType||"*").toLowerCase().match(M)||[""],null==h.crossDomain){l=r.createElement("a");try{l.href=h.url,l.href=l.href,h.crossDomain=Bt.protocol+"//"+Bt.host!=l.protocol+"//"+l.host}catch(e){h.crossDomain=!0}}if(h.data&&h.processData&&"string"!=typeof h.data&&(h.data=w.param(h.data,h.traditional)),_t(It,h,n,E),c)return E;(f=w.event&&h.global)&&0==w.active++&&w.event.trigger("ajaxStart"),h.type=h.type.toUpperCase(),h.hasContent=!Mt.test(h.type),o=h.url.replace(Lt,""),h.hasContent?h.data&&h.processData&&0===(h.contentType||"").indexOf("application/x-www-form-urlencoded")&&(h.data=h.data.replace(qt,"+")):(d=h.url.slice(o.length),h.data&&(h.processData||"string"==typeof h.data)&&(o+=(kt.test(o)?"&":"?")+h.data,delete h.data),!1===h.cache&&(o=o.replace(Ht,"$1"),d=(kt.test(o)?"&":"?")+"_="+Et+++d),h.url=o+d),h.ifModified&&(w.lastModified[o]&&E.setRequestHeader("If-Modified-Since",w.lastModified[o]),w.etag[o]&&E.setRequestHeader("If-None-Match",w.etag[o])),(h.data&&h.hasContent&&!1!==h.contentType||n.contentType)&&E.setRequestHeader("Content-Type",h.contentType),E.setRequestHeader("Accept",h.dataTypes[0]&&h.accepts[h.dataTypes[0]]?h.accepts[h.dataTypes[0]]+("*"!==h.dataTypes[0]?", "+$t+"; q=0.01":""):h.accepts["*"]);for(p in h.headers)E.setRequestHeader(p,h.headers[p]);if(h.beforeSend&&(!1===h.beforeSend.call(g,E,h)||c))return E.abort();if(C="abort",m.add(h.complete),E.done(h.success),E.fail(h.error),i=_t(Wt,h,n,E)){if(E.readyState=1,f&&y.trigger("ajaxSend",[E,h]),c)return E;h.async&&h.timeout>0&&(u=e.setTimeout(function(){E.abort("timeout")},h.timeout));try{c=!1,i.send(b,k)}catch(e){if(c)throw e;k(-1,e)}}else k(-1,"No Transport");function k(t,n,r,s){var l,p,d,b,T,C=n;c||(c=!0,u&&e.clearTimeout(u),i=void 0,a=s||"",E.readyState=t>0?4:0,l=t>=200&&t<300||304===t,r&&(b=Xt(h,E,r)),b=Ut(h,b,E,l),l?(h.ifModified&&((T=E.getResponseHeader("Last-Modified"))&&(w.lastModified[o]=T),(T=E.getResponseHeader("etag"))&&(w.etag[o]=T)),204===t||"HEAD"===h.type?C="nocontent":304===t?C="notmodified":(C=b.state,p=b.data,l=!(d=b.error))):(d=C,!t&&C||(C="error",t<0&&(t=0))),E.status=t,E.statusText=(n||C)+"",l?v.resolveWith(g,[p,C,E]):v.rejectWith(g,[E,C,d]),E.statusCode(x),x=void 0,f&&y.trigger(l?"ajaxSuccess":"ajaxError",[E,h,l?p:d]),m.fireWith(g,[E,C]),f&&(y.trigger("ajaxComplete",[E,h]),--w.active||w.event.trigger("ajaxStop")))}return E},getJSON:function(e,t,n){return w.get(e,t,n,"json")},getScript:function(e,t){return w.get(e,void 0,t,"script")}}),w.each(["get","post"],function(e,t){w[t]=function(e,n,r,i){return g(n)&&(i=i||r,r=n,n=void 0),w.ajax(w.extend({url:e,type:t,dataType:i,data:n,success:r},w.isPlainObject(e)&&e))}}),w._evalUrl=function(e){return w.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,"throws":!0})},w.fn.extend({wrapAll:function(e){var t;return this[0]&&(g(e)&&(e=e.call(this[0])),t=w(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstElementChild)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(e){return g(e)?this.each(function(t){w(this).wrapInner(e.call(this,t))}):this.each(function(){var t=w(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=g(e);return this.each(function(n){w(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(e){return this.parent(e).not("body").each(function(){w(this).replaceWith(this.childNodes)}),this}}),w.expr.pseudos.hidden=function(e){return!w.expr.pseudos.visible(e)},w.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},w.ajaxSettings.xhr=function(){try{return new e.XMLHttpRequest}catch(e){}};var Vt={0:200,1223:204},Gt=w.ajaxSettings.xhr();h.cors=!!Gt&&"withCredentials"in Gt,h.ajax=Gt=!!Gt,w.ajaxTransport(function(t){var n,r;if(h.cors||Gt&&!t.crossDomain)return{send:function(i,o){var a,s=t.xhr();if(s.open(t.type,t.url,t.async,t.username,t.password),t.xhrFields)for(a in t.xhrFields)s[a]=t.xhrFields[a];t.mimeType&&s.overrideMimeType&&s.overrideMimeType(t.mimeType),t.crossDomain||i["X-Requested-With"]||(i["X-Requested-With"]="XMLHttpRequest");for(a in i)s.setRequestHeader(a,i[a]);n=function(e){return function(){n&&(n=r=s.onload=s.onerror=s.onabort=s.ontimeout=s.onreadystatechange=null,"abort"===e?s.abort():"error"===e?"number"!=typeof s.status?o(0,"error"):o(s.status,s.statusText):o(Vt[s.status]||s.status,s.statusText,"text"!==(s.responseType||"text")||"string"!=typeof s.responseText?{binary:s.response}:{text:s.responseText},s.getAllResponseHeaders()))}},s.onload=n(),r=s.onerror=s.ontimeout=n("error"),void 0!==s.onabort?s.onabort=r:s.onreadystatechange=function(){4===s.readyState&&e.setTimeout(function(){n&&r()})},n=n("abort");try{s.send(t.hasContent&&t.data||null)}catch(e){if(n)throw e}},abort:function(){n&&n()}}}),w.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),w.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return w.globalEval(e),e}}}),w.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),w.ajaxTransport("script",function(e){if(e.crossDomain){var t,n;return{send:function(i,o){t=w("<script>").prop({charset:e.scriptCharset,src:e.url}).on("load error",n=function(e){t.remove(),n=null,e&&o("error"===e.type?404:200,e.type)}),r.head.appendChild(t[0])},abort:function(){n&&n()}}}});var Yt=[],Qt=/(=)\?(?=&|$)|\?\?/;w.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Yt.pop()||w.expando+"_"+Et++;return this[e]=!0,e}}),w.ajaxPrefilter("json jsonp",function(t,n,r){var i,o,a,s=!1!==t.jsonp&&(Qt.test(t.url)?"url":"string"==typeof t.data&&0===(t.contentType||"").indexOf("application/x-www-form-urlencoded")&&Qt.test(t.data)&&"data");if(s||"jsonp"===t.dataTypes[0])return i=t.jsonpCallback=g(t.jsonpCallback)?t.jsonpCallback():t.jsonpCallback,s?t[s]=t[s].replace(Qt,"$1"+i):!1!==t.jsonp&&(t.url+=(kt.test(t.url)?"&":"?")+t.jsonp+"="+i),t.converters["script json"]=function(){return a||w.error(i+" was not called"),a[0]},t.dataTypes[0]="json",o=e[i],e[i]=function(){a=arguments},r.always(function(){void 0===o?w(e).removeProp(i):e[i]=o,t[i]&&(t.jsonpCallback=n.jsonpCallback,Yt.push(i)),a&&g(o)&&o(a[0]),a=o=void 0}),"script"}),h.createHTMLDocument=function(){var e=r.implementation.createHTMLDocument("").body;return e.innerHTML="<form></form><form></form>",2===e.childNodes.length}(),w.parseHTML=function(e,t,n){if("string"!=typeof e)return[];"boolean"==typeof t&&(n=t,t=!1);var i,o,a;return t||(h.createHTMLDocument?((i=(t=r.implementation.createHTMLDocument("")).createElement("base")).href=r.location.href,t.head.appendChild(i)):t=r),o=A.exec(e),a=!n&&[],o?[t.createElement(o[1])]:(o=xe([e],t,a),a&&a.length&&w(a).remove(),w.merge([],o.childNodes))},w.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return s>-1&&(r=vt(e.slice(s)),e=e.slice(0,s)),g(t)?(n=t,t=void 0):t&&"object"==typeof t&&(i="POST"),a.length>0&&w.ajax({url:e,type:i||"GET",dataType:"html",data:t}).done(function(e){o=arguments,a.html(r?w("<div>").append(w.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},w.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){w.fn[t]=function(e){return this.on(t,e)}}),w.expr.pseudos.animated=function(e){return w.grep(w.timers,function(t){return e===t.elem}).length},w.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l,c=w.css(e,"position"),f=w(e),p={};"static"===c&&(e.style.position="relative"),s=f.offset(),o=w.css(e,"top"),u=w.css(e,"left"),(l=("absolute"===c||"fixed"===c)&&(o+u).indexOf("auto")>-1)?(a=(r=f.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),g(t)&&(t=t.call(e,n,w.extend({},s))),null!=t.top&&(p.top=t.top-s.top+a),null!=t.left&&(p.left=t.left-s.left+i),"using"in t?t.using.call(e,p):f.css(p)}},w.fn.extend({offset:function(e){if(arguments.length)return void 0===e?this:this.each(function(t){w.offset.setOffset(this,e,t)});var t,n,r=this[0];if(r)return r.getClientRects().length?(t=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:t.top+n.pageYOffset,left:t.left+n.pageXOffset}):{top:0,left:0}},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===w.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===w.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=w(e).offset()).top+=w.css(e,"borderTopWidth",!0),i.left+=w.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-w.css(r,"marginTop",!0),left:t.left-i.left-w.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===w.css(e,"position"))e=e.offsetParent;return e||be})}}),w.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(e,t){var n="pageYOffset"===t;w.fn[e]=function(r){return z(this,function(e,r,i){var o;if(y(e)?o=e:9===e.nodeType&&(o=e.defaultView),void 0===i)return o?o[t]:e[r];o?o.scrollTo(n?o.pageXOffset:i,n?i:o.pageYOffset):e[r]=i},e,r,arguments.length)}}),w.each(["top","left"],function(e,t){w.cssHooks[t]=_e(h.pixelPosition,function(e,n){if(n)return n=Fe(e,t),We.test(n)?w(e).position()[t]+"px":n})}),w.each({Height:"height",Width:"width"},function(e,t){w.each({padding:"inner"+e,content:t,"":"outer"+e},function(n,r){w.fn[r]=function(i,o){var a=arguments.length&&(n||"boolean"!=typeof i),s=n||(!0===i||!0===o?"margin":"border");return z(this,function(t,n,i){var o;return y(t)?0===r.indexOf("outer")?t["inner"+e]:t.document.documentElement["client"+e]:9===t.nodeType?(o=t.documentElement,Math.max(t.body["scroll"+e],o["scroll"+e],t.body["offset"+e],o["offset"+e],o["client"+e])):void 0===i?w.css(t,n,s):w.style(t,n,i,s)},t,a?i:void 0,a)}})}),w.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,t){w.fn[t]=function(e,n){return arguments.length>0?this.on(t,null,e,n):this.trigger(t)}}),w.fn.extend({hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),w.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)}}),w.proxy=function(e,t){var n,r,i;if("string"==typeof t&&(n=e[t],t=e,e=n),g(e))return r=o.call(arguments,2),i=function(){return e.apply(t||this,r.concat(o.call(arguments)))},i.guid=e.guid=e.guid||w.guid++,i},w.holdReady=function(e){e?w.readyWait++:w.ready(!0)},w.isArray=Array.isArray,w.parseJSON=JSON.parse,w.nodeName=N,w.isFunction=g,w.isWindow=y,w.camelCase=G,w.type=x,w.now=Date.now,w.isNumeric=function(e){var t=w.type(e);return("number"===t||"string"===t)&&!isNaN(e-parseFloat(e))},"function"==typeof define&&define.amd&&define("jquery",[],function(){return w});var Jt=e.jQuery,Kt=e.$;return w.noConflict=function(t){return e.$===w&&(e.$=Kt),t&&e.jQuery===w&&(e.jQuery=Jt),w},t||(e.jQuery=e.$=w),w}); diff --git a/themes/luci-theme-material/luasrc/view/themes/material/header.htm b/themes/luci-theme-material/luasrc/view/themes/material/header.htm index 0aca882c0..b6341a2c3 100644 --- a/themes/luci-theme-material/luasrc/view/themes/material/header.htm +++ b/themes/luci-theme-material/luasrc/view/themes/material/header.htm @@ -183,35 +183,35 @@ <!DOCTYPE html> <html lang="<%=luci.i18n.context.lang%>"> <head> - <meta charset="utf-8"> - <title><%=striptags( (boardinfo.hostname or "?") .. ( (node and node.title) and ' - ' .. translate(node.title) or '')) %> - LuCI</title> - <meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" name="viewport"/> - <meta name="format-detection" content="telephone=no, email=no"/> - <meta name="apple-mobile-web-app-capable" content="yes"> - <meta name="mobile-web-app-capable" content="yes"> - <meta name="x5-fullscreen" content="true"> - <meta name="full-screen" content="yes"> - <meta name="x5-page-mode" content="app"> - <meta name="browsermode" content="application"> - <meta name="theme-color" content="#0099CC"> - <meta name="msapplication-tap-highlight" content="no"> - <meta name="msapplication-TileColor" content="#0099CC"> - - <meta name="application-name" content="<%=striptags( (boardinfo.hostname or "?") ) %> - LuCI"> - <meta name="apple-mobile-web-app-title" content="<%=striptags( (boardinfo.hostname or "?") ) %> - LuCI"> - <meta name="msapplication-TileImage" content="<%=media%>/logo.png"/> - <link rel="icon" href="<%=media%>/logo.png" sizes="144x144"> - <link rel="apple-touch-icon-precomposed" href="<%=media%>/logo.png" sizes="144x144"> - - <link rel="stylesheet" href="<%=media%>/css/style.css"> - <link rel="shortcut icon" href="<%=media%>/favicon.ico"> - <% if node and node.css then %> - <link rel="stylesheet" href="<%=resource%>/<%=node.css%>"> - <% end -%> - <% if css then %> - <style title="text/css"><%= css %></style> - <% end -%> - <script src="<%=resource%>/xhr.js"></script> + <meta charset="utf-8"> + <title><%=striptags( (boardinfo.hostname or "?") .. ( (node and node.title) and ' - ' .. translate(node.title) or '')) %> - LuCI</title> + <meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" name="viewport"/> + <meta name="format-detection" content="telephone=no, email=no"/> + <meta name="apple-mobile-web-app-capable" content="yes"> + <meta name="mobile-web-app-capable" content="yes"> + <meta name="x5-fullscreen" content="true"> + <meta name="full-screen" content="yes"> + <meta name="x5-page-mode" content="app"> + <meta name="browsermode" content="application"> + <meta name="theme-color" content="#0099CC"> + <meta name="msapplication-tap-highlight" content="no"> + <meta name="msapplication-TileColor" content="#0099CC"> + + <meta name="application-name" content="<%=striptags( (boardinfo.hostname or "?") ) %> - LuCI"> + <meta name="apple-mobile-web-app-title" content="<%=striptags( (boardinfo.hostname or "?") ) %> - LuCI"> + <meta name="msapplication-TileImage" content="<%=media%>/logo.png"/> + <link rel="icon" href="<%=media%>/logo.png" sizes="144x144"> + <link rel="apple-touch-icon-precomposed" href="<%=media%>/logo.png" sizes="144x144"> + + <link rel="stylesheet" href="<%=media%>/css/style.css"> + <link rel="shortcut icon" href="<%=media%>/favicon.ico"> + <% if node and node.css then %> + <link rel="stylesheet" href="<%=resource%>/<%=node.css%>"> + <% end -%> + <% if css then %> + <style title="text/css"><%= css %></style> + <% end -%> + <script src="<%=resource%>/xhr.js"></script> </head> <body class="lang_<%=luci.i18n.context.lang%> <%- if node then %><%= striptags( node.title ) %><%- end %> <% if luci.dispatcher.context.authsession then %>logged-in<% end %>"> <header> @@ -228,26 +228,27 @@ </div> </header> <div class="main"> - <div style="" class="loading"><span><div class="loading-img"></div>Loading...</span></div> - <div class="main-left"> + <div style="" class="loading"><span><div class="loading-img"></div>Loading...</span></div> + <div class="main-left"> <% render_topmenu() %> - </div> + </div> <div class="main-right"> - <div class="darkMask"></div> - <div id="maincontent"> - <div class="container"> - <%- if luci.sys.process.info("uid") == 0 and luci.sys.user.getuser("root") and not luci.sys.user.getpasswd("root") then -%> - <div class="alert-message warning"> - <h4><%:No password set!%></h4> - <%:There is no password set on this router. Please configure a root password to protect the web interface and enable SSH.%><br> - <a href="<%=pcdata(luci.dispatcher.build_url("admin/system/admin"))%>"><%:Go to password configuration...%></a> - </div> - <%- end -%> - <% if category then render_tabmenu(category, cattree) end %> + <div class="darkMask"></div> + <div id="maincontent"> + <div class="container"> + <%- if luci.sys.process.info("uid") == 0 and luci.sys.user.getuser("root") and not luci.sys.user.getpasswd("root") then -%> + <div class="alert-message warning"> + <h4><%:No password set!%></h4> + <p><%:There is no password set on this router. Please configure a root password to protect the web interface and enable SSH.%></p> + <div class="right"><a class="btn" href="<%=url("admin/system/admin")%>"><%:Go to password configuration...%></a></div> + </div> + <%- end -%> <noscript> <div class="alert-message warning"> - <strong><%:JavaScript required!%></strong><br /> - <%:You must enable JavaScript in your browser or LuCI will not work properly.%> + <h4><%:JavaScript required!%></h4> + <p><%:You must enable JavaScript in your browser or LuCI will not work properly.%></p> </div> - </noscript> + </noscript> + + <% if category then render_tabmenu(category, cattree) end %> diff --git a/themes/luci-theme-openwrt/htdocs/luci-static/openwrt.org/cascade.css b/themes/luci-theme-openwrt/htdocs/luci-static/openwrt.org/cascade.css index c5ee58fff..8b359d475 100644 --- a/themes/luci-theme-openwrt/htdocs/luci-static/openwrt.org/cascade.css +++ b/themes/luci-theme-openwrt/htdocs/luci-static/openwrt.org/cascade.css @@ -29,6 +29,21 @@ body { padding: 0; } +.table { display: table; } +.tr { display: table-row; } +.thead { display: table-header-group; } +.tbody { display: table-row-group; } +.tfoot { display: table-footer-group; } +.td, .th { display: table-cell; } +.th { font-weight: bold; } + +.table[width="33%"], .th[width="33%"], .td[width="33%"] { width: 33%; } +.table[width="100%"], .th[width="100%"], .td[width="100%"] { width: 100%; } + +.nowrap { + white-space: nowrap; +} + a img { border: none; text-decoration: none; @@ -166,6 +181,33 @@ code { background-color: white; } +.alert-message { + font-size: 9pt; + font-weight: normal; + padding: .5em; + border-radius: 3px; + color: #000; +} + +.alert-message.notice { + background: linear-gradient(#ccc 0%, #eee 100%); + color: #4a6b7c; +} + +.alert-message.warning { + background: linear-gradient(#dda 0%, #dd8 100%); + color: #c00; +} + +.alert-message > * { + margin: .5em; +} + +.alert-message > h4 { + font-weight: bold; + font-size: 10pt; +} + div.hostinfo { float: left; margin: 0; @@ -420,9 +462,9 @@ input[type=password] { width: 20em; } -td select, -td input[type=text], -td input[type=password] { +.td select, +.td input[type=text], +.td input[type=password] { width: 99%; } @@ -432,24 +474,29 @@ img.cbi-image-button { vertical-align: middle; } -input.cbi-button { - background-color: #EEEEEE; - background-repeat: no-repeat; - background-position: 1px center; - border: 1px solid #CCCCCC; +.btn, .cbi-button { + padding: 2px; border-radius: 3px; + border: 1px solid #aaa; + background: #eee 1px center no-repeat; + text-decoration: none; + color: #000; + display: inline-block; } -input.cbi-button:hover { - border-color: #4A6B7C; - background-color: #FFFFFF; +.btn:hover, .cbi-button:hover { + border-color: #4a6b7c; + background-color: #fff; } -input.cbi-button[disabled] { - color: #CCCCCC; - border-color: #CCCCCC; - background-color: #EEEEEE; +.btn[disabled], +.btn[disabled]:hover, +.cbi-button[disabled], +.cbi-button[disabled]:hover { + opacity: .6; cursor: default; + border-color: inherit; + background-color: inherit; } input.cbi-input-user { @@ -494,7 +541,6 @@ input.cbi-button-fieldadd { background-image: url(../resources/cbi/fieldadd.gif); color: #000000; padding-left: 17px; - padding-right: 1px; } input.cbi-input-reset, @@ -513,6 +559,7 @@ input.cbi-button-save { padding-right: 1px; } +/* input.cbi-input-apply, input.cbi-button-apply { background-image: url('../resources/cbi/apply.gif'); @@ -520,6 +567,18 @@ input.cbi-button-apply { padding-left: 17px; padding-right: 1px; } +*/ + +input.cbi-input-apply:before, +input.cbi-button-apply:before { + background-image: url('../resources/cbi/apply.gif'); + border: 2px solid red; + width: 100px; + height: 100px; + content: "."; + display: block; + position: absolute; +} input.cbi-input-link, input.cbi-button-link { @@ -608,12 +667,18 @@ form > div > input[type=reset] { margin-left: 0.5em; } -table td, -table th { +table td, table th { + color: #000000; +} + +.table .td, .table .th { color: #000000; + padding: .25em 0; + text-align: center; + vertical-align: middle; } -table.smalltext { +.table.smalltext { background: #f5f5f5; color: #000000; border-top: 1px solid #666666; @@ -626,35 +691,35 @@ table.smalltext { border-collapse: collapse; } -table.smalltext tr:hover td { +.table.smalltext .tr:hover .td { background-color: #bbddee; color: #000000; } -table.smalltext tr th { +.table.smalltext .tr .th { padding: 0 0.25em; border-left: 1px solid #666666; text-align: left; } -table.smalltext tr td { +.table.smalltext .tr .td { padding: 0 0.25em; border-top: 1px solid #666666; border-left: 1px solid #666666; } -table.cbi-section-table .cbi-rowstyle-1 { +.table.cbi-section-table .cbi-rowstyle-1 { background-color: #eeeeff; color: #000000; } -table.cbi-section-table .cbi-rowstyle-1:hover, -table.cbi-section-table .cbi-rowstyle-2:hover { +.table.cbi-section-table .cbi-rowstyle-1:hover, +.table.cbi-section-table .cbi-rowstyle-2:hover { background-color: #b2c8d4; color: #000000; } -table.cbi-section-table .cbi-section-table-cell { +.table.cbi-section-table .cbi-section-table-cell { padding: 3px; white-space: nowrap; } @@ -692,6 +757,11 @@ div.cbi-value-field { padding: 0.25em 0; } +div.td.cbi-value-field { + width: auto; + vertical-align: middle; +} + div.cbi-value-description { font-size: 90%; display: inline; @@ -740,7 +810,7 @@ div.cbi-section-remove { border-bottom: none; } -.cbi-section-node table div { +.cbi-section-node .table div { padding-bottom: 0; border-bottom: none; } @@ -749,23 +819,23 @@ div.cbi-section-remove { margin: 0.25em; } -table.cbi-section-table { +.table.cbi-section-table { width: 100%; font-size: 95%; } -table.cbi-section-table th, -table.cbi-section-table td { +.table.cbi-section-table .th, +.table.cbi-section-table .td { text-align: center; } -tr.cbi-section-table-descr th { +.tr.cbi-section-table-descr .th { font-weight: normal; font-size: 90%; vertical-align: top; } -td.cbi-section-table-optionals { +.td.cbi-section-table-optionals { text-align: left !important; padding-top: 1em; } @@ -781,7 +851,7 @@ div.cbi-error { background-color: #ffffff; } -td.cbi-value-error { +.td.cbi-value-error { border-color: red; } @@ -864,6 +934,10 @@ div.cbi-tab-descr { text-align: right !important; } +.center { + text-align: center !important; +} + .luci { position: absolute; bottom: 0; @@ -892,57 +966,79 @@ div.cbi-tab-descr { padding: 0.5em; } -.errorbox { - border: 1px solid #FF0000; - background-color: #FFCCCC; - padding: 5px; - margin-bottom: 5px; + +.ifacebadge, .ifacebox { + display: inline-flex; + align-content: center; + border: 1px solid #ccc; + border-radius: 3px; + padding: 2px; + background: #fff; + margin: .25em .5em; +} + +.ifacebox-head { + background: #eee; +} + +.ifacebox-head.active { + background: #90c0e0; } -.errorbox a { - color: #000000 !important; +.ifacebadge > img { + margin-right: 5px; + align-self: start; } +.ifacebadge-active { + border-color: #000000; + font-weight: bold; +} .ifacebox { - background-color: #FFFFFF; - border: 1px solid #CCCCCC; + flex-direction: column; margin: 0 10px; - text-align: center; - white-space: nowrap; + padding: 0; + min-width: 100px; } -.ifacebox .ifacebox-head { - border-bottom: 1px solid #CCCCCC; +.ifacebox > * { padding: 2px; } -.ifacebox .ifacebox-body { - padding: 2px; + +.network-status-table { + display: flex; + flex-wrap: wrap; } +.network-status-table .ifacebox { + margin: .5em; + font-size: 90%; + flex-grow: 1; +} -.ifacebadge { - background-color: #FFFFFF; - border: 1px solid #CCCCCC; - padding: 1px 2px; - margin-left: 2px; - display: inline-block; - cursor: default; - white-space: nowrap; - font-size: 11px; - border-radius: 3px; +.network-status-table .ifacebox-body { + display: flex; + flex-direction: column; + height: 100%; } -.ifacebadge img { - width: 16px; - height: 16px; - vertical-align: middle; +.network-status-table .ifacebox-body > span { + flex: 10; } -.ifacebadge-active { - border-color: #000000; - font-weight: bold; +.network-status-table .ifacebox-body > div { + display: flex; + flex-wrap: wrap; +} + +.network-status-table .ifacebox-body .ifacebadge { + flex: 1; + margin: .5em .25em .25em .25em; + padding: .5em; + min-width: 220px; + white-space: nowrap; } diff --git a/themes/luci-theme-openwrt/htdocs/luci-static/openwrt.org/ie6.css b/themes/luci-theme-openwrt/htdocs/luci-static/openwrt.org/ie6.css deleted file mode 100644 index 14db3f86e..000000000 --- a/themes/luci-theme-openwrt/htdocs/luci-static/openwrt.org/ie6.css +++ /dev/null @@ -1,77 +0,0 @@ -/* obligatory IE6 Voodoo Code */ - -* html body { - padding-left: 5% !important; -} - -* html div#header { - margin-left: 100% !important; -} - -* html div#menubar { - margin-left: -5% !important; - width: 105% !important; -} - -* html ul.dropdowns li ul { - width: 10em; -} - -* html ul.dropdowns li li { - clear: both; - float: left; -} - -* html ul.dropdowns li li { - width: 100%; -} - -* html ul.dropdowns li li a { - height: 10%; -} - -* html div#maincontent { - margin-left: 0% !important; - width: 100% !important; -} - -* html div.cbi-value-description { - width: auto !important; -} - -* html div.cbi-value-field { - margin-left: 0 !important; - width: 100% !important; -} - -* html .cbi-input-text, -* html .cbi-input-user, -* html .cbi-input-select, -* html .cbi-input-password { - width: 50% !important; -} - -* html .cbi-input-user, -* html .cbi-input-password { - text-indent: 0 !important; - padding-left: 1.5em !important; -} - -* html .cbi-section legend { - background-color: #ffffff; - color: #555555; -} - -* html table.cbi-section-table td .cbi-input-text, -* html table.cbi-section-table td .cbi-input-select { - width: 100% !important; -} - -* html div.cbi-page-actions { - text-align: right !important; -} - -* html div.cbi-value-field input, -* html div.cbi-value-field select { - font-size: 90% !important; -} diff --git a/themes/luci-theme-openwrt/htdocs/luci-static/openwrt.org/ie7.css b/themes/luci-theme-openwrt/htdocs/luci-static/openwrt.org/ie7.css deleted file mode 100644 index 9e569b28b..000000000 --- a/themes/luci-theme-openwrt/htdocs/luci-static/openwrt.org/ie7.css +++ /dev/null @@ -1,59 +0,0 @@ -#tabmenu { - line-height: 0; -} - -ul.tabmenu { - zoom: 1; -} - -ul.l1 { - position: relative; -} - - -table.cbi-section-table td .cbi-input-text, -table.cbi-section-table td .cbi-input-select { - width: 95% !important; -} - - -.cbi-input-user, -.cbi-input-password { - text-indent: 0 !important; - padding-left: 1.5em !important; - width: 18.5em !important; -} - - -fieldset.cbi-section { - position: relative; - margin-top: 1em; - padding-top: 0.75em; - border: 1px solid #CCCCCC; - zoom: 1; -} - -fieldset.cbi-section legend { - position: absolute; - top: -0.75em; - left: 0.5em; -} - - -ul.cbi-tabmenu { - margin-bottom: 0; -} - -ul.cbi-tabmenu li.cbi-tab a { - position: static; /* fixes misplaced tab after page load */ - border-bottom: 1px solid white; -} - - -div.cbi-value { - zoom: 1; /* fixes hanging float */ -} - -div.cbi-value-field { - margin-left: 0 !important; -} diff --git a/themes/luci-theme-openwrt/htdocs/luci-static/openwrt.org/ie8.css b/themes/luci-theme-openwrt/htdocs/luci-static/openwrt.org/ie8.css deleted file mode 100644 index 890988c41..000000000 --- a/themes/luci-theme-openwrt/htdocs/luci-static/openwrt.org/ie8.css +++ /dev/null @@ -1,12 +0,0 @@ -fieldset.cbi-section { - position: relative; - margin-top: 1em; - padding-top: 0.75em; - border: 1px solid #CCCCCC; -} - -fieldset.cbi-section legend { - position: absolute; - top: -0.75em; - left: 0.5em; -} diff --git a/themes/luci-theme-openwrt/luasrc/view/themes/openwrt.org/header.htm b/themes/luci-theme-openwrt/luasrc/view/themes/openwrt.org/header.htm index a560014d3..cbf02a76c 100644 --- a/themes/luci-theme-openwrt/luasrc/view/themes/openwrt.org/header.htm +++ b/themes/luci-theme-openwrt/luasrc/view/themes/openwrt.org/header.htm @@ -118,9 +118,6 @@ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta http-equiv="Content-Script-Type" content="text/javascript" /> <link rel="stylesheet" type="text/css" media="screen" href="<%=media%>/cascade.css" /> -<!--[if IE 6]><link rel="stylesheet" type="text/css" media="screen" href="<%=media%>/ie6.css" /><![endif]--> -<!--[if IE 7]><link rel="stylesheet" type="text/css" media="screen" href="<%=media%>/ie7.css" /><![endif]--> -<!--[if IE 8]><link rel="stylesheet" type="text/css" media="screen" href="<%=media%>/ie8.css" /><![endif]--> <% if node and node.css then %><link rel="stylesheet" type="text/css" media="screen" href="<%=resource%>/<%=node.css%>" /> <% end -%> <% if css then %><style title="text/css"> @@ -170,16 +167,16 @@ <div id="maincontent"> <noscript> - <div class="errorbox"> - <strong><%:JavaScript required!%></strong><br /> - <%:You must enable JavaScript in your browser or LuCI will not work properly.%> + <div class="alert-message warning"> + <h4><%:JavaScript required!%></h4> + <p><%:You must enable JavaScript in your browser or LuCI will not work properly.%></p> </div> </noscript> <%- if luci.sys.process.info("uid") == 0 and luci.sys.user.getuser("root") and not luci.sys.user.getpasswd("root") and category ~= "failsafe" then -%> - <div class="errorbox"> - <strong><%:No password set!%></strong><br /> - <%:There is no password set on this router. Please configure a root password to protect the web interface and enable SSH.%><br /> - <a href="<%=pcdata(luci.dispatcher.build_url("admin/system/admin"))%>"><%:Go to password configuration...%></a> + <div class="alert-message warning"> + <h4><%:No password set!%></h4> + <p><%:There is no password set on this router. Please configure a root password to protect the web interface and enable SSH.%></p> + <div class="right"><a class="btn" href="<%=url("admin/system/admin")%>"><%:Go to password configuration...%></a></div> </div> <%- end -%> |