small-package/luci-app-3ginfo-lite/htdocs/luci-static/resources/view/modem/3gdetail.js

1039 lines
28 KiB
JavaScript

'use strict';
'require baseclass';
'require form';
'require fs';
'require view';
'require ui';
'require uci';
'require poll';
'require dom';
'require tools.widgets as widgets';
/*
Copyright 2021-2023 Rafał Wabik - IceG - From eko.one.pl forum
Licensed to the GNU General Public License v3.0.
Thanks to https://github.com/koshev-msk for the initial progress bar calculation for rssi/rsrp/rsrq/sinnr.
*/
function csq_bar(v, m) {
var pg = document.querySelector('#csq')
var vn = parseInt(v) || 0;
var mn = parseInt(m) || 100;
var pc = Math.floor((100 / mn) * vn);
if (vn >= 20 && vn <= 31) {
pg.firstElementChild.style.background = 'lime';
var tip = _('Very good');
};
if (vn >= 14 && vn <= 19) {
pg.firstElementChild.style.background = 'yellow';
var tip = _('Good');
};
if (vn >= 10 && vn <= 13) {
pg.firstElementChild.style.background = 'darkorange';
var tip = _('Weak');
};
if (vn <= 9 && vn >= 1) {
pg.firstElementChild.style.background = 'red';
var tip = _('Very weak');
};
pg.firstElementChild.style.width = pc + '%';
pg.style.width = '33%';
pg.setAttribute('title', '%s'.format(v) + ' | ' + tip + ' ');
}
function rssi_bar(v, m) {
var pg = document.querySelector('#rssi')
var vn = parseInt(v) || 0;
var mn = parseInt(m) || 100;
if (vn > -50) {
vn = -50
};
if (vn < -110) {
vn = -110
};
var pc = Math.floor(100 * (1 - (-50 - vn) / (-50 - mn)));
if (vn > -70) {
pg.firstElementChild.style.background = 'lime';
var tip = _('Very good');
};
if (vn >= -85 && vn <= -70) {
pg.firstElementChild.style.background = 'yellow';
var tip = _('Good');
};
if (vn >= -100 && vn <= -86) {
pg.firstElementChild.style.background = 'darkorange';
var tip = _('Weak');
};
if (vn < -100) {
pg.firstElementChild.style.background = 'red';
var tip = _('Very weak');
};
pg.firstElementChild.style.width = pc + '%';
pg.style.width = '33%';
pg.firstElementChild.style.animationDirection = "reverse";
pg.setAttribute('title', '%s'.format(v) + ' | ' + tip + ' ');
}
function rsrp_bar(v, m) {
var pg = document.querySelector('#rsrp')
var vn = parseInt(v) || 0;
var mn = parseInt(m) || 100;
if (vn > -50) {
vn = -50
};
if (vn < -140) {
vn = -140
};
var pc = Math.floor(120 * (1 - (-50 - vn) / (-70 - mn)));
if (vn >= -80) {
pg.firstElementChild.style.background = 'lime';
var tip = _('Very good');
};
if (vn >= -90 && vn <= -79) {
pg.firstElementChild.style.background = 'yellow';
var tip = _('Good');
};
if (vn >= -100 && vn <= -89) {
pg.firstElementChild.style.background = 'darkorange';
var tip = _('Weak');
};
if (vn < -100) {
pg.firstElementChild.style.background = 'red';
var tip = _('Very weak');
};
pg.firstElementChild.style.width = pc + '%';
pg.style.width = '33%';
pg.firstElementChild.style.animationDirection = "reverse";
pg.setAttribute('title', '%s'.format(v) + ' | ' + tip + ' ');
}
function sinr_bar(v, m) {
var pg = document.querySelector('#sinr')
var vn = parseInt(v) || 0;
var mn = parseInt(m) || 100;
var pc = Math.floor(100 - (100 * (1 - ((mn - vn) / (mn - 40)))));
if (vn > 20) {
pg.firstElementChild.style.background = 'lime';
var tip = _('Excellent');
};
if (vn >= 13 && vn <= 20) {
pg.firstElementChild.style.background = 'yellow';
var tip = _('Good');
};
if (vn > 0 && vn <= 12) {
pg.firstElementChild.style.background = 'darkorange';
var tip = _('Mid cell');
};
if (vn <= 0) {
pg.firstElementChild.style.background = 'red';
var tip = _('Cell edge');
};
pg.firstElementChild.style.width = pc + '%';
pg.style.width = '33%';
pg.firstElementChild.style.animationDirection = "reverse";
pg.setAttribute('title', '%s'.format(v) + ' | ' + tip + ' ');
}
function rsrq_bar(v, m) {
var pg = document.querySelector('#rsrq')
var vn = parseInt(v) || 0;
var mn = parseInt(m) || 100;
var pc = Math.floor(115 - (100 / mn) * vn);
if (vn > 0) {
vn = 0;
};
if (vn >= -10) {
pg.firstElementChild.style.background = 'lime';
var tip = _('Excellent');
};
if (vn >= -15 && vn <= -9) {
pg.firstElementChild.style.background = 'yellow';
var tip = _('Good');
};
if (vn >= -20 && vn <= -14) {
pg.firstElementChild.style.background = 'darkorange';
var tip = _('Mid cell');
};
if (vn < -20) {
pg.firstElementChild.style.background = 'red';
var tip = _('Cell edge');
};
pg.firstElementChild.style.width = pc + '%';
pg.style.width = '33%';
pg.firstElementChild.style.animationDirection = "reverse";
pg.setAttribute('title', '%s'.format(v) + ' | ' + tip + ' ');
}
function SIMdata(data) {
var sdata = JSON.parse(data);
if (sdata && sdata.simslot && sdata.simslot.length > 0) {
return ui.itemlist(E('span'), [
_('SIM Slot'), sdata.simslot,
_('SIM IMSI'), sdata.imsi,
_('SIM ICCID'), sdata.iccid,
_('Modem IMEI'), sdata.imei
]);
} else {
return ui.itemlist(E('span'), [
_('SIM IMSI'), sdata.imsi,
_('SIM ICCID'), sdata.iccid,
_('Modem IMEI'), sdata.imei
]);
}
}
return view.extend({
formdata: {
threeginfo: {}
},
load: function() {
return L.resolveDefault(fs.exec_direct('/usr/share/3ginfo-lite/3ginfo.sh', ['0']));
},
render: function(data) {
var m, s, o;
if (data != null) {
try {
var json = JSON.parse(data);
if (!json.hasOwnProperty('error')) {
if (json.registration == 'SIM not inserted' || json.registration == '-') {
ui.addNotification(null, E('p', _('Problem with registering to the network, check the SIM card.')), 'info');
}
if (json.registration == 'SIM PIN required') {
ui.addNotification(null, E('p', _('SIM PIN required')), 'info');
}
if (json.registration == 'SIM PUK required') {
ui.addNotification(null, E('p', _('SIM PUK required')), 'info');
}
if (json.registration == 'SIM failure') {
ui.addNotification(null, E('p', _('SIM failure')), 'info');
}
if (json.registration == 'SIM busy') {
ui.addNotification(null, E('p', _('SIM busy')), 'info');
}
if (json.registration == 'SIM wrong') {
ui.addNotification(null, E('p', _('SIM wrong')), 'info');
}
if (json.registration == 'SIM PIN2 required') {
ui.addNotification(null, E('p', _('SIM PIN2 required')), 'info');
}
if (json.registration == 'SIM PUK2 required') {
ui.addNotification(null, E('p', _('SIM PUK2 required')), 'info');
}
if (json.signal == '0' || json.signal == '' || json.signal == '-') {
ui.addNotification(null, E('p', _('There is a problem reading data from the modem. \
<br /><br /><b>Please check:</b> \
<ul><li>1. Modem availability in the system.</li><li>2. The correct installation of the SIM card in the modem.</li><li> \
3. Port for communication with the modem.</li><li><ul>')), 'info');
} else {
if (json.connt == '' || json.connt == '-') {
ui.addNotification(null, E('p', _('There is a problem reading connection data. \
<br /><br /><b>Please check:</b> \
<ul><li>1. Connection of the modem to the internet, the correctness of the entered APN. Some modems need to force the APN on the modem using at commands to connect to internet.</li><li> \
2. Check that the correct interface assigned to the modem is selected. The default name of the interface in the package is wan.</li><li><ul>')), 'info');
}
pollData: poll.add(function() {
return L.resolveDefault(fs.exec_direct('/usr/share/3ginfo-lite/3ginfo.sh', ['0']))
.then(function(res) {
var json = JSON.parse(res);
if (json.signal == '0' || json.signal == '') {
fs.exec('sleep 1');
if (json.signal == '0' || json.signal == '' || json.signal == '-') {
L.ui.showModal(_('3ginfo-lite'), [
E('p', {
'class': 'spinning'
}, _('Waiting to read data from the modem...'))
]);
window.setTimeout(function() {
location.reload();
}, 5000).finally();
}
} else {
L.hideModal();
}
var icon, wicon, ticon, t;
var wicon = L.resource('icons/loading.gif');
var ticon = L.resource('icons/ctime.png');
var p = (json.signal);
if (p < 0)
icon = L.resource('icons/3ginfo-0.png');
else if (p == 0)
icon = L.resource('icons/3ginfo-0.png');
else if (p < 20)
icon = L.resource('icons/3ginfo-0-20.png');
else if (p < 40)
icon = L.resource('icons/3ginfo-20-40.png');
else if (p < 60)
icon = L.resource('icons/3ginfo-40-60.png');
else if (p < 80)
icon = L.resource('icons/3ginfo-60-80.png');
else
icon = L.resource('icons/3ginfo-80-100.png');
if (document.getElementById('signal')) {
var view = document.getElementById("signal");
if (json.signal == 0 || json.signal == '') {
view.textContent = '-';
} else {
view.innerHTML = String.format('<medium>%d%%</medium><br/>' + '<img style="padding-left: 10px;" src="%s"/>', p, icon);
}
}
if (document.getElementById('connst')) {
var view = document.getElementById("connst");
if (json.signal == 0 || json.signal == '') {
view.textContent = '-';
} else {
if (json.connt == '' || json.connt == '-') {
view.innerHTML = String.format('<img style="width: 16px; height: 16px; vertical-align: middle;" src="%s"/>' + ' ' + _('Waiting for connection data...'), wicon, p);
} else {
view.innerHTML = String.format('<img style="width: 16px; height: 16px; vertical-align: middle;" src="%s"/>' + ' ' + json.connt + ' ' + ' | \u25bc\u202f' + json.connrx + ' \u25b2\u202f' + json.conntx, ticon, t);
}
}
}
if (document.getElementById('operator')) {
var view = document.getElementById("operator");
if (json.signal == 0 || json.signal == '') {
view.textContent = '-';
} else {
if (json.operator_name == '') {
view.textContent = '-';
} else {
view.textContent = json.operator_name;
}
}
}
if (document.getElementById('sim')) {
var view = document.getElementById("sim");
var sv = document.getElementById("simv");
if (json.registration == '') {
view.textContent = '-';
} else {
sv.style.visibility = "visible";
view.textContent = json.registration;
if (json.registration == '0') {
view.textContent = _('Not registered');
}
if (json.registration == '1' || json.registration == '6') {
view.textContent = _('Registered');
}
if (json.registration == '2') {
view.textContent = _('Searching..');
}
if (json.registration == '3') {
view.textContent = _('Registering denied');
}
if (json.registration == '5' || json.registration == '7') {
view.textContent = _('Registered (roaming)');
}
}
}
if (document.getElementById('mode')) {
var view = document.getElementById("mode");
if (json.signal == 0 || json.signal == '') {
view.textContent = '-';
} else {
if (json.mode == '') {
view.textContent = '-';
} else {
view.textContent = json.mode;
}
}
}
if (document.getElementById('modem')) {
var view = document.getElementById("modem");
if (json.signal == 0 || json.signal == '') {
view.textContent = '-';
} else {
if (json.modem == '') {
view.textContent = '-';
} else {
view.textContent = json.modem;
}
}
}
if (document.getElementById('fw')) {
var view = document.getElementById("fw");
if (json.signal == 0 || json.signal == '') {
view.textContent = '-';
} else {
if (json.firmware == '') {
view.textContent = '-';
} else {
view.textContent = json.firmware;
}
}
}
if (document.getElementById('cport')) {
var view = document.getElementById("cport");
if (json.signal == 0 || json.signal == '') {
view.textContent = '-';
} else {
if (json.cport == '') {
view.textContent = '-';
} else {
view.textContent = json.cport;
}
}
}
if (document.getElementById('protocol')) {
var view = document.getElementById("protocol");
if (json.signal == 0 || json.signal == '') {
view.textContent = '-';
} else {
if (json.protocol == '') {
view.textContent = '-';
} else {
view.textContent = json.protocol;
}
}
}
if (document.getElementById('temp')) {
var view = document.getElementById("temp");
var viewn = document.getElementById("tempn");
var t = json.mtemp;
if (t == '') {
viewn.style.display = "none";
} else {
view.textContent = t.replace('&deg;', '°');
}
}
if (document.getElementById('csq')) {
var view = document.getElementById("csq");
var viewn = document.getElementById("csqn");
if (json.signal == 0 || json.signal == '') {
viewn.style.display = "none";
} else {
if (json.csq == '') {
view.textContent = '-';
} else {
csq_bar(json.csq, 31);
}
}
}
if (document.getElementById('rssi')) {
var view = document.getElementById("rssi");
var viewn = document.getElementById("rssin");
if (json.rssi == '') {
viewn.style.display = "none";
} else {
var z = json.rssi;
if (z.includes('dBm')) {
var rssi_min = -110;
rssi_bar(json.rssi, rssi_min);
} else {
var rssi_min = -110;
rssi_bar(json.rssi + " dBm", rssi_min);
}
}
}
if (document.getElementById('rsrp')) {
var view = document.getElementById('rsrp');
var viewn = document.getElementById("rsrpn");
if (json.rsrp == '') {
viewn.style.display = "none";
} else {
var z = json.rsrp;
if (z.includes('dBm')) {
var rsrp_min = -140;
rsrp_bar(json.rsrp, rsrp_min);
} else {
var rsrp_min = -140;
rsrp_bar(json.rsrp + " dBm", rsrp_min);
}
}
}
if (document.getElementById('sinr')) {
var view = document.getElementById("sinr");
var viewn = document.getElementById("sinrn");
if (json.sinr == '') {
viewn.style.display = "none";
} else {
var z = json.sinr;
if (z.includes('dB')) {
view.textContent = json.sinr;
} else {
var sinr_min = -21;
sinr_bar(json.sinr + " dB", sinr_min);
}
}
}
if (document.getElementById('rsrq')) {
var view = document.getElementById("rsrq");
var viewn = document.getElementById("rsrqn");
if (json.rsrq == '') {
viewn.style.display = "none";
} else {
var z = json.rsrq;
if (z.includes('dB')) {
view.textContent = json.rsrq;
} else {
var rsrq_min = -20;
rsrq_bar(json.rsrq + " dB", rsrq_min);
}
}
}
if (document.getElementById('mccmnc')) {
var view = document.getElementById("mccmnc");
if (json.operator_mcc == '' & json.operator_mnc == '') {
view.textContent = '-';
} else {
view.textContent = json.operator_mcc + " " + json.operator_mnc;
}
}
if (document.getElementById('lac')) {
var view = document.getElementById("lac");
if (json.lac_dec == 0 || json.lac_hex == 0) {
view.textContent = '-';
}
if (json.lac_dec == '' || json.lac_hex == '') {
var lc = json.lac_dec + ' ' + json.lac_hex;
var ld = lc.split(' ').join('');
view.textContent = ld;
} else {
view.innerHTML = json.lac_dec + ' (' + json.lac_hex + ')';
}
}
if (document.getElementById('tac')) {
var view = document.getElementById("tac");
var tac_dh, tac_dec_hex, lac_dec_hex;
if (json.signal == 0 || json.signal == '') {
view.textContent = '-';
} else {
if (json.tac_d.length > 1 || json.tac_h.length > 1) {
var tac_dh = json.tac_d + ' (' + json.tac_h + ')';
view.textContent = tac_dh;
} else {
if (json.tac_dec.length > 1 || json.tac_hex.length > 1) {
var tac_dh = json.tac_dec + ' (' + json.tac_hex + ')';
view.textContent = tac_dh;
} else {
view.textContent = '-';
}
}
}
}
if (document.getElementById('cid')) {
var view = document.getElementById("cid");
if (json.cid_dec == '' || json.cid_hex == '') {
var cc = json.cid_hex + ' ' + json.cid_dec;
var cd = cc.split(' ').join('');
view.textContent = cd;
} else {
view.innerHTML = json.cid_dec + ' (' + '' + json.cid_hex + ')';
}
}
if (document.getElementById('pband')) {
var view = document.getElementById("pband");
if (json.pband == '') {
view.textContent = '-';
} else {
if (json.pci.length > 0 && json.earfcn.length > 0) {
view.textContent = json.pband + ' | ' + json.pci + ' ' + json.earfcn;
} else {
view.textContent = json.pband;
}
}
}
if (document.getElementById('s1band')) {
var view = document.getElementById("s1band");
if (json.s1band == '') {
view.textContent = '-';
} else {
if (json.s1pci.length > 0 && json.s1earfcn.length > 0) {
view.textContent = json.s1band + ' | ' + json.s1pci + ' ' + json.s1earfcn;
} else {
view.textContent = json.s1band;
}
}
}
if (document.getElementById('s2band')) {
var view = document.getElementById("s2band");
if (json.s2band == '') {
view.textContent = '-';
} else {
if (json.s2pci.length > 0 && json.s2earfcn.length > 0) {
view.textContent = json.s2band + ' | ' + json.s2pci + ' ' + json.s2earfcn;
} else {
view.textContent = json.s2band;
}
}
}
if (document.getElementById('s3band')) {
var view = document.getElementById("s3band");
if (json.s3band == '') {
view.textContent = '-';
} else {
if (json.s3pci.length > 0 && json.s3earfcn.length > 0) {
view.textContent = json.s3band + ' | ' + json.s3pci + ' ' + json.s3earfcn;
} else {
view.textContent = json.s3band;
}
}
}
if (document.getElementById('s4band')) {
var view = document.getElementById("s4band");
if (json.s4band == '') {
view.textContent = '-';
} else {
if (json.s4pci.length > 0 && json.s4earfcn.length > 0) {
view.textContent = json.s4band + ' | ' + json.s4pci + ' ' + json.s4earfcn;
} else {
view.textContent = json.s4band;
}
}
}
});
});
}
}
} catch (err) {
ui.addNotification(null, E('p', _('Error: ') + err.message), 'error');
}
}
m = new form.JSONMap(this.formdata, _('Modem1 Details'));
s = m.section(form.TypedSection, '3ginfo', '', null);
s.anonymous = true;
s.render = L.bind(function(view, section_id) {
return E('div', {
'class': 'cbi-section'
}, [
E('h4', {}, [_('General Information')]),
E('table', {
'class': 'table'
}, [
E('tr', {
'class': 'tr'
}, [
E('td', {
'class': 'td left',
'width': '33%'
}, [_('Signal strength')]),
E('td', {
'class': 'td left',
'id': 'signal'
}, ['-']),
]),
E('tr', {
'class': 'tr'
}, [
E('td', {
'class': 'td left',
'width': '33%'
}, [_('Operator')]),
E('td', {
'class': 'td left',
'id': 'operator'
}, ['-']),
]),
E('tr', {
'class': 'tr'
}, [
E('td', {
'class': 'td left',
'width': '33%'
}, [_('SIM status')]),
E('td', {
'class': 'td left'
}, [
E('span', {
'class': 'ifacebadge',
'title': null,
'id': 'simv',
'style': 'visibility: hidden; max-width:3em; display: inline-block;',
}, [
E('div', {
'class': 'ifacebox-body'
}, [
E('div', {
'class': 'cbi-tooltip-container'
}, [
E('img', {
'src': L.resource('icons/sim1m.png'),
'style': 'width:24px; height:auto; padding: 0px',
'title': _(''),
'class': 'middle',
}),
E('span', {
'class': 'cbi-tooltip',
'style': 'text-align:left;font-size:80%'
}, SIMdata(data)),
]),
]),
]),
E('normal', {
'id': 'sim',
'style': 'margin-left: 0.5em;'
}, ['-']),
]),
]),
E('tr', {
'class': 'tr'
}, [
E('td', {
'class': 'td left',
'width': '33%'
}, [_('Connection statistics')]),
E('td', {
'class': 'td left',
'id': 'connst'
}, ['-']),
]),
E('tr', {
'class': 'tr'
}, [
E('td', {
'class': 'td left',
'width': '33%'
}, [_('Technology')]),
E('td', {
'class': 'td left',
'id': 'mode'
}, ['-']),
]),
]),
E('h4', {}, [_('Modem Information')]),
E('table', {
'class': 'table'
}, [
E('tr', {
'class': 'tr'
}, [
E('td', {
'class': 'td left',
'width': '33%'
}, [_('Modem type')]),
E('td', {
'class': 'td left',
'id': 'modem'
}, ['-']),
]),
E('tr', {
'class': 'tr'
}, [
E('td', {
'class': 'td left',
'width': '33%'
}, [_('Revision / Firmware')]),
E('td', {
'class': 'td left',
'id': 'fw'
}, ['-']),
]),
E('tr', {
'class': 'tr'
}, [
E('td', {
'class': 'td left',
'width': '33%'
}, [_('IP adress / Communication Port')]),
E('td', {
'class': 'td left',
'id': 'cport'
}, ['-']),
]),
E('tr', {
'class': 'tr'
}, [
E('td', {
'class': 'td left',
'width': '33%'
}, [_('Protocol')]),
E('td', {
'class': 'td left',
'id': 'protocol'
}, ['-']),
]),
E('tr', {
'id': 'tempn',
'class': 'tr'
}, [
E('td', {
'class': 'td left',
'width': '33%'
}, [_('Chip Temperature')]),
E('td', {
'class': 'td left',
'id': 'temp'
}, ['-']),
]),
]),
E('h4', {}, [_('Cell / Signal Information')]),
E('table', {
'class': 'table'
}, [
E('tr', {
'class': 'tr'
}, [
E('td', {
'class': 'td left',
'width': '33%'
}, [_('MCC MNC')]),
E('td', {
'class': 'td left',
'id': 'mccmnc'
}, ['-']),
]),
E('tr', {
'class': 'tr'
}, [
E('td', {
'class': 'td left',
'width': '33%'
}, [_('Cell ID')]),
E('td', {
'class': 'td left',
'id': 'cid'
}, ['-']),
]),
E('tr', {
'class': 'tr'
}, [
E('td', {
'class': 'td left',
'width': '33%'
}, [_('TAC')]),
E('td', {
'class': 'td left',
'id': 'tac'
}, ['-']),
]),
E('tr', {
'class': 'tr'
}, [
E('td', {
'class': 'td left',
'width': '33%'
}, [_('LAC')]),
E('td', {
'class': 'td left',
'id': 'lac'
}, ['-']),
]),
E('tr', {
'id': 'csqn',
'class': 'tr'
}, [
E('td', {
'class': 'td left',
'width': '33%'
}, [
_('CSQ'),
E('div', {
'style': 'text-align:left;font-size:66%'
}, [_('(Signal Strength)')]),
]),
E('td', {
'class': 'td'
}, E('div', {
'id': 'csq',
'class': 'cbi-progressbar',
'title': '-'
}, E('div')))
]),
E('tr', {
'id': 'rssin',
'class': 'tr'
}, [
E('td', {
'class': 'td left',
'width': '33%'
}, [
_('RSSI'),
E('div', {
'style': 'text-align:left;font-size:66%'
}, [_('(Received Signal Strength Indicator)')]),
]),
E('td', {
'class': 'td'
}, E('div', {
'id': 'rssi',
'class': 'cbi-progressbar',
'title': '-'
}, E('div')))
]),
E('tr', {
'id': 'rsrpn',
'class': 'tr'
}, [
E('td', {
'class': 'td left',
'width': '33%'
}, [
_('RSRP'),
E('div', {
'style': 'text-align:left;font-size:66%'
}, [_('(Reference Signal Receive Power)')]),
]),
E('td', {
'class': 'td'
}, E('div', {
'id': 'rsrp',
'class': 'cbi-progressbar',
'title': '-'
}, E('div')))
]),
E('tr', {
'id': 'sinrn',
'class': 'tr'
}, [
E('td', {
'class': 'td left',
'width': '33%'
}, [
_('SINR'),
E('div', {
'style': 'text-align:left;font-size:66%'
}, [_('(Signal to Interference plus Noise Ratio)')]),
]),
E('td', {
'class': 'td'
}, E('div', {
'id': 'sinr',
'class': 'cbi-progressbar',
'title': '-'
}, E('div')))
]),
E('tr', {
'id': 'rsrqn',
'class': 'tr'
}, [
E('td', {
'class': 'td left',
'width': '33%'
}, [
_('RSRQ'),
E('div', {
'style': 'text-align:left;font-size:66%'
}, [_('(Reference Signal Received Quality)')]),
]),
E('td', {
'class': 'td'
}, E('div', {
'id': 'rsrq',
'class': 'cbi-progressbar',
'title': '-'
}, E('div')))
]),
E('tr', {
'class': 'tr'
}, [
E('td', {
'class': 'td left',
'width': '33%'
}, [_('Primary band | PCI & EARFCN')]),
E('td', {
'class': 'td left',
'id': 'pband'
}, ['-']),
]),
E('tr', {
'class': 'tr'
}, [
E('td', {
'class': 'td left',
'width': '33%'
}, [_('CA band (S1)')]),
E('td', {
'class': 'td left',
'id': 's1band'
}, ['-']),
]),
E('tr', {
'class': 'tr'
}, [
E('td', {
'class': 'td left',
'width': '33%'
}, [_('CA band (S2)')]),
E('td', {
'class': 'td left',
'id': 's2band'
}, ['-']),
]),
E('tr', {
'class': 'tr'
}, [
E('td', {
'class': 'td left',
'width': '33%'
}, [_('CA band (S3)')]),
E('td', {
'class': 'td left',
'id': 's3band'
}, ['-']),
]),
E('tr', {
'class': 'tr'
}, [
E('td', {
'class': 'td left',
'width': '33%'
}, [_('CA band (S4)')]),
E('td', {
'class': 'td left',
'id': 's4band'
}, ['-']),
]),
])
]);
}, o, this);
return m.render();
},
handleSaveApply: null,
handleSave: null,
handleReset: null
});