X-Git-Url: http://git.archive.openwrt.org/?p=project%2Fluci2%2Fui.git;a=blobdiff_plain;f=luci2%2Fhtdocs%2Fluci2%2Fluci2.js;h=81fc01dc65385b8402c58d37abdea5d16b60d6f3;hp=43cd54e842c835c2290017ba1ea75eaba11226dd;hb=529fe1dc23dc886428fe90b679bd30bc9648a651;hpb=d897f47ac6edd9fa4ac33d5b67adc236bbba8df2
diff --git a/luci2/htdocs/luci2/luci2.js b/luci2/htdocs/luci2/luci2.js
index 43cd54e..81fc01d 100644
--- a/luci2/htdocs/luci2/luci2.js
+++ b/luci2/htdocs/luci2/luci2.js
@@ -387,7 +387,7 @@ function LuCI2()
};
this.globals = {
- timeout: 3000,
+ timeout: 15000,
resource: '/luci2',
sid: '00000000000000000000000000000000'
};
@@ -946,6 +946,73 @@ function LuCI2()
object: 'luci2.network',
method: 'conntrack_count',
expect: { '': { count: 0, limit: 0 } }
+ }),
+
+ listSwitchNames: _luci2.rpc.declare({
+ object: 'luci2.network',
+ method: 'switch_list',
+ expect: { switches: [ ] }
+ }),
+
+ getSwitchInfo: _luci2.rpc.declare({
+ object: 'luci2.network',
+ method: 'switch_info',
+ params: [ 'switch' ],
+ expect: { info: { } },
+ filter: function(data, params) {
+ data['attrs'] = data['switch'];
+ data['vlan_attrs'] = data['vlan'];
+ data['port_attrs'] = data['port'];
+ data['switch'] = params['switch'];
+
+ delete data.vlan;
+ delete data.port;
+
+ return data;
+ }
+ }),
+
+ getSwitchStatus: _luci2.rpc.declare({
+ object: 'luci2.network',
+ method: 'switch_status',
+ params: [ 'switch' ],
+ expect: { ports: [ ] }
+ }),
+
+
+ runPing: _luci2.rpc.declare({
+ object: 'luci2.network',
+ method: 'ping',
+ params: [ 'data' ],
+ expect: { '': { code: -1 } }
+ }),
+
+ runPing6: _luci2.rpc.declare({
+ object: 'luci2.network',
+ method: 'ping6',
+ params: [ 'data' ],
+ expect: { '': { code: -1 } }
+ }),
+
+ runTraceroute: _luci2.rpc.declare({
+ object: 'luci2.network',
+ method: 'traceroute',
+ params: [ 'data' ],
+ expect: { '': { code: -1 } }
+ }),
+
+ runTraceroute6: _luci2.rpc.declare({
+ object: 'luci2.network',
+ method: 'traceroute6',
+ params: [ 'data' ],
+ expect: { '': { code: -1 } }
+ }),
+
+ runNslookup: _luci2.rpc.declare({
+ object: 'luci2.network',
+ method: 'nslookup',
+ params: [ 'data' ],
+ expect: { '': { code: -1 } }
})
};
@@ -2037,6 +2104,9 @@ function LuCI2()
{
var name = node.view.split(/\//).join('.');
+ if (_luci2.globals.currentView)
+ _luci2.globals.currentView.finish();
+
_luci2.ui.renderViewMenu();
if (!_luci2._views)
@@ -2045,7 +2115,10 @@ function LuCI2()
_luci2.setHash('view', node.view);
if (_luci2._views[name] instanceof _luci2.ui.view)
+ {
+ _luci2.globals.currentView = _luci2._views[name];
return _luci2._views[name].render();
+ }
var url = _luci2.globals.resource + '/view/' + name + '.js';
@@ -2069,6 +2142,7 @@ function LuCI2()
acls: node.write || { }
});
+ _luci2.globals.currentView = _luci2._views[name];
return _luci2._views[name].render();
}
catch(e) {
@@ -2121,7 +2195,7 @@ function LuCI2()
break;
case 'add':
- log.push('uci add %s (= %s)'.format(config, c[1]));
+ log.push('uci add %s %s (= %s)'.format(config, c[2], c[1]));
break;
case 'list-add':
@@ -2249,6 +2323,42 @@ function LuCI2()
return this._fetch_template().then(function() {
return _luci2.deferrable(self.execute());
});
+ },
+
+ repeat: function(func, interval)
+ {
+ var self = this;
+
+ if (!self._timeouts)
+ self._timeouts = [ ];
+
+ var index = self._timeouts.length;
+
+ if (typeof(interval) != 'number')
+ interval = 5000;
+
+ var setTimer, runTimer;
+
+ setTimer = function() {
+ self._timeouts[index] = window.setTimeout(runTimer, interval);
+ };
+
+ runTimer = function() {
+ _luci2.deferrable(func.call(self)).then(setTimer);
+ };
+
+ runTimer();
+ },
+
+ finish: function()
+ {
+ if ($.isArray(this._timeouts))
+ {
+ for (var i = 0; i < this._timeouts.length; i++)
+ window.clearTimeout(this._timeouts[i]);
+
+ delete this._timeouts;
+ }
}
});
@@ -2302,7 +2412,10 @@ function LuCI2()
var child = this.firstChildView(nodes[i]);
if (child)
{
- $.extend(node, child);
+ for (var key in child)
+ if (!node.hasOwnProperty(key) && child.hasOwnProperty(key))
+ node[key] = child[key];
+
return node;
}
}
@@ -3581,12 +3694,10 @@ function LuCI2()
if (chg)
{
- val = val ? this.options.enabled : this.options.disabled;
-
if (this.options.optional && val == this.options.initial)
this.map.set(uci.config, uci.section, uci.option, undefined);
else
- this.map.set(uci.config, uci.section, uci.option, val);
+ this.map.set(uci.config, uci.section, uci.option, val ? this.options.enabled : this.options.disabled);
}
return chg;