'use strict';
'require rpc';
'require uci';
'require view';
function etx_color(etx) {
let color = '#bb3333';
if (etx === 0) {
color = '#bb3333';
} else if (etx < 2) {
color = '#00cc00';
} else if (etx < 4) {
color = '#ffcb05';
} else if (etx < 10) {
color = '#ff6600';
}
return color;
}
function snr_colors(snr) {
let color = '#bb3333';
if (snr === 0) {
color = '#bb3333';
} else if (snr > 30) {
color = '#00cc00';
} else if (snr > 20) {
color = '#ffcb05';
} else if (snr > 5) {
color = '#ff6600';
}
return color;
}
function css(selector, property, value) {
for (let i = 0; i < document.styleSheets.length; i++) {
try {
document.styleSheets[i].insertRule(selector + ' {' + property + ':' + value + '}', document.styleSheets[i].cssRules.length);
} catch (err) {
try {
document.styleSheets[i].addRule(selector, property + ':' + value);
} catch (err) {}
} //IE
}
}
window.onload = function () {
let buttons = '';
buttons += '';
document.getElementById('togglebuttons').innerHTML = buttons;
let visible = true;
document.getElementById('show-proto-4').onclick = function () {
visible = !visible;
document.getElementById('show-proto-4').value = visible ? '<%:Hide IPv4%>' : '<%:Show IPv4%>';
document.getElementById('show-proto-4').className = visible ? 'cbi-button cbi-button-apply' : 'cbi-button cbi-button-reset';
css('.proto-4', 'display', visible ? 'table-row' : 'none');
};
let visible6 = true;
document.getElementById('show-proto-6').onclick = function () {
visible6 = !visible6;
document.getElementById('show-proto-6').value = visible6 ? '<%:Hide IPv6%>' : '<%:Show IPv6%>';
document.getElementById('show-proto-6').className = visible6 ? 'cbi-button cbi-button-apply' : 'cbi-button cbi-button-reset';
css('.proto-6', 'display', visible6 ? 'table-row' : 'none');
};
};
const olsrview = view.extend({
callGetJsonStatus: rpc.declare({
object: 'olsrinfo',
method: 'getjsondata',
params: ['otable', 'v4_port', 'v6_port'],
}),
callGetHosts: rpc.declare({
object: 'olsrinfo',
method: 'hosts',
}),
fetch_jsoninfo(otable) {
let jsonreq4 = '';
let jsonreq6 = '';
const v4_port = parseInt(uci.get('olsrd', 'olsrd_jsoninfo', 'port') || '') || 9090;
const v6_port = parseInt(uci.get('olsrd6', 'olsrd_jsoninfo', 'port') || '') || 9090;
let json;
let self = this;
return new Promise(function (resolve, reject) {
L.resolveDefault(self.callGetJsonStatus(otable, v4_port, v6_port), {})
.then(function (res) {
json = res;
if (json.jsonreq4 === '' && json.jsonreq6 === '') {
window.location.href = 'error_olsr';
reject([null, 0, 0, true]);
return;
}
jsonreq4 = JSON.parse(json.jsonreq4);
jsonreq6 = json.jsonreq6 !== '' ? JSON.parse(json.jsonreq6) : [];
let jsondata4 = {};
let jsondata6 = {};
let data4 = [];
let data6 = [];
let has_v4 = false;
let has_v6 = false;
if (jsonreq4 !== '') {
has_v4 = true;
jsondata4 = jsonreq4 || {};
if (otable === 'status') {
data4 = jsondata4;
} else {
data4 = jsondata4[otable] || [];
}
for (var i = 0; i < data4.length; i++) {
data4[i]['proto'] = '4';
}
}
if (jsonreq6 !== '') {
has_v6 = true;
jsondata6 = jsonreq6 || {};
if (otable === 'status') {
data6 = jsondata6;
} else {
data6 = jsondata6[otable] || [];
}
for (var j = 0; j < data6.length; j++) {
data6[j]['proto'] = '6';
}
}
for (let d6 of data6) {
data4.push(d6);
}
resolve([data4, has_v4, has_v6, false]);
})
.catch(function (err) {
console.error(err);
reject([null, 0, 0, true]);
});
});
},
});
return L.Class.extend({
olsrview: olsrview,
etx_color: etx_color,
snr_colors: snr_colors,
});