From 80e1900b03b2a5315c791f9240f9d7641ae67562 Mon Sep 17 00:00:00 2001 From: Jo-Philipp Wich Date: Thu, 20 Jan 2011 00:01:55 +0000 Subject: [PATCH] libs/web: implement sortable rows for uci reordering --- libs/web/htdocs/luci-static/resources/cbi.js | 44 ++++++++++++++++++++++++++++ libs/web/luasrc/cbi.lua | 15 ++++++++++ libs/web/luasrc/view/cbi/tblsection.htm | 10 +++++++ 3 files changed, 69 insertions(+) diff --git a/libs/web/htdocs/luci-static/resources/cbi.js b/libs/web/htdocs/luci-static/resources/cbi.js index 992b5588e..ac4eaa9b2 100644 --- a/libs/web/htdocs/luci-static/resources/cbi.js +++ b/libs/web/htdocs/luci-static/resources/cbi.js @@ -718,6 +718,50 @@ function cbi_validate_field(cbid, optional, type) } } +function cbi_row_swap(elem, up, store) +{ + var tr = elem.parentNode; + while (tr && tr.nodeName != 'tr') + tr = tr.parentNode; + + var table = tr.parentNode; + while (table && table.nodeName != 'table') + table = table.parentNode; + + 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]); + + break; + } + } + + 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(/-(cfg[0-9a-f]+)$/) ) + ids.push(RegExp.$1); + } + + var input = document.getElementById(store); + if (input) + input.value = ids.join(' '); + + return false; +} + if( ! String.serialize ) String.serialize = function(o) { diff --git a/libs/web/luasrc/cbi.lua b/libs/web/luasrc/cbi.lua index f4bf18d1e..8bb3488a7 100644 --- a/libs/web/luasrc/cbi.lua +++ b/libs/web/luasrc/cbi.lua @@ -50,6 +50,7 @@ AUTO = true CREATE_PREFIX = "cbi.cts." REMOVE_PREFIX = "cbi.rts." +RESORT_PREFIX = "cbi.sts." -- Loads a CBI map from given file, creating an environment and returns it function load(cbimap, ...) @@ -1121,6 +1122,20 @@ function TypedSection.parse(self, novld) end end + if self.sortable then + local stval = RESORT_PREFIX .. self.config .. "." .. self.sectiontype + local order = self.map:formvalue(stval) + if order and #order > 0 then + local sid + local num = 0 + for sid in util.imatch(order) do + self.map.uci:reorder(self.config, sid, num) + num = num + 1 + end + self.changed = (num > 0) + end + end + if created or self.changed then self:push_events() end diff --git a/libs/web/luasrc/view/cbi/tblsection.htm b/libs/web/luasrc/view/cbi/tblsection.htm index 742817583..c79d5a8c8 100644 --- a/libs/web/luasrc/view/cbi/tblsection.htm +++ b/libs/web/luasrc/view/cbi/tblsection.htm @@ -35,6 +35,9 @@ end <% if self.title and #self.title > 0 then -%> <%=self.title%> <%- end %> + <%- if self.sortable then -%> + + <%- end -%>
<%=self.description%>
<%- local count = 0 -%> @@ -91,6 +94,13 @@ end end -%> + <%- if self.sortable then -%> + + <%:Move up%> + <%:Move down%> + + <%- end -%> + <%- if self.extedit or self.addremove then -%> <%- if self.extedit then -%> -- 2.11.0