X-Git-Url: http://git.archive.openwrt.org/?p=project%2Fluci2%2Fui.git;a=blobdiff_plain;f=luci2%2Fhtdocs%2Fluci2%2Fluci2.js;h=52ea2e7a035600270e911853a59ed7edcf9839c5;hp=02b0015a4f432ac6c966aaf67a589ae8a1f294ae;hb=bb111090d399e5d4eb9513187f410eb3428da07a;hpb=4cf17c7d48b91ef90b3f369e9179199c1bd94d02
diff --git a/luci2/htdocs/luci2/luci2.js b/luci2/htdocs/luci2/luci2.js
index 02b0015..52ea2e7 100644
--- a/luci2/htdocs/luci2/luci2.js
+++ b/luci2/htdocs/luci2/luci2.js
@@ -584,13 +584,44 @@ function LuCI2()
},
- changes: _luci2.rpc.declare({
+ configs: _luci2.rpc.declare({
+ object: 'uci',
+ method: 'configs',
+ expect: { configs: [ ] }
+ }),
+
+ _changes: _luci2.rpc.declare({
object: 'uci',
method: 'changes',
params: [ 'config' ],
expect: { changes: [ ] }
}),
+ changes: function(config)
+ {
+ if (typeof(config) == 'string')
+ return this._changes(config);
+
+ var configlist;
+ return this.configs().then(function(configs) {
+ _luci2.rpc.batch();
+ configlist = configs;
+
+ for (var i = 0; i < configs.length; i++)
+ _luci2.uci._changes(configs[i]);
+
+ return _luci2.rpc.flush();
+ }).then(function(changes) {
+ var rv = { };
+
+ for (var i = 0; i < configlist.length; i++)
+ if (changes[i].length)
+ rv[configlist[i]] = changes[i];
+
+ return rv;
+ });
+ },
+
commit: _luci2.rpc.declare({
object: 'uci',
method: 'commit',
@@ -2053,12 +2084,90 @@ function LuCI2()
});
},
+ updateChanges: function()
+ {
+ return _luci2.uci.changes().then(function(changes) {
+ var n = 0;
+ var html = '';
+
+ for (var config in changes)
+ {
+ var log = [ ];
+
+ for (var i = 0; i < changes[config].length; i++)
+ {
+ var c = changes[config][i];
+
+ switch (c[0])
+ {
+ case 'order':
+ break;
+
+ case 'remove':
+ if (c.length < 3)
+ log.push('uci delete %s.%s'.format(config, c[1]));
+ else
+ log.push('uci delete %s.%s.%s'.format(config, c[1], c[2]));
+ break;
+
+ case 'rename':
+ if (c.length < 4)
+ log.push('uci rename %s.%s=%s'.format(config, c[1], c[2], c[3]));
+ else
+ log.push('uci rename %s.%s.%s=%s'.format(config, c[1], c[2], c[3], c[4]));
+ break;
+
+ case 'add':
+ log.push('uci add %s (= %s)'.format(config, c[1]));
+ break;
+
+ case 'list-add':
+ log.push('uci add_list %s.%s.%s=%s'.format(config, c[1], c[2], c[3], c[4]));
+ break;
+
+ case 'list-del':
+ log.push('uci del_list %s.%s.%s=%s'.format(config, c[1], c[2], c[3], c[4]));
+ break;
+
+ case 'set':
+ if (c.length < 4)
+ log.push('uci set %s.%s=%s'.format(config, c[1], c[2]));
+ else
+ log.push('uci set %s.%s.%s=%s'.format(config, c[1], c[2], c[3], c[4]));
+ break;
+ }
+ }
+
+ html += '/etc/config/%s
%s'.format(config, log.join('\n')); + n += changes[config].length; + } + + if (n > 0) + $('#changes') + .empty() + .show() + .append($('') + .attr('href', '#') + .addClass('label') + .addClass('notice') + .text(_luci2.trcp('Pending configuration changes', '1 change', '%d changes', n).format(n)) + .click(function(ev) { + _luci2.ui.dialog(_luci2.tr('Staged configuration changes'), html, { style: 'close' }); + ev.preventDefault(); + })); + else + $('#changes') + .hide(); + }); + }, + init: function() { _luci2.ui.loading(true); $.when( _luci2.ui.updateHostname(), + _luci2.ui.updateChanges(), _luci2.ui.renderMainMenu() ).then(function() { _luci2.ui.renderView(_luci2.globals.defaultNode).then(function() { @@ -5396,7 +5505,9 @@ function LuCI2() _luci2.uci['delete'](c, s, (o === true) ? undefined : o); } - return _luci2.rpc.flush(); + return _luci2.rpc.flush().then(function() { + return _luci2.ui.updateChanges(); + }); }, this)); var self = this;