summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorJo-Philipp Wich <jow@openwrt.org>2011-01-20 00:01:55 +0000
committerJo-Philipp Wich <jow@openwrt.org>2011-01-20 00:01:55 +0000
commit80e1900b03b2a5315c791f9240f9d7641ae67562 (patch)
tree15a05c8a7cfc6f251cf58589f4aa243260979807
parentc176c70d5bfec1061f894c31dd6f2fd826c2d8cf (diff)
libs/web: implement sortable rows for uci reordering
-rw-r--r--libs/web/htdocs/luci-static/resources/cbi.js44
-rw-r--r--libs/web/luasrc/cbi.lua15
-rw-r--r--libs/web/luasrc/view/cbi/tblsection.htm10
3 files changed, 69 insertions, 0 deletions
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 -%>
<legend><%=self.title%></legend>
<%- end %>
+ <%- if self.sortable then -%>
+ <input type="hidden" id="cbi.sts.<%=self.config%>.<%=self.sectiontype%>" name="cbi.sts.<%=self.config%>.<%=self.sectiontype%>" value="" />
+ <%- end -%>
<div class="cbi-section-descr"><%=self.description%></div>
<div class="cbi-section-node">
<%- local count = 0 -%>
@@ -91,6 +94,13 @@ end
end
-%>
+ <%- if self.sortable then -%>
+ <td class="cbi-section-table-cell" style="width:50px">
+ <a href="#" onclick="return cbi_row_swap(this, true, 'cbi.sts.<%=self.config%>.<%=self.sectiontype%>')" title="<%:Move up%>"><img src="<%=resource%>/cbi/up.gif" alt="<%:Move up%>" /></a>
+ <a href="#" onclick="return cbi_row_swap(this, false, 'cbi.sts.<%=self.config%>.<%=self.sectiontype%>')" title="<%:Move down%>"><img src="<%=resource%>/cbi/down.gif" alt="<%:Move down%>" /></a>
+ </td>
+ <%- end -%>
+
<%- if self.extedit or self.addremove then -%>
<td class="cbi-section-table-cell" style="width:50px">
<%- if self.extedit then -%>