Merge pull request #5540 from jow-/wireguard-peer-gridsection
[project/luci.git] / modules / luci-base / htdocs / luci-static / resources / cbi.js
index d962a1d1af49fe10f62efc04d1d63ace50153b5e..9200954d1e791f088f9bf66bab9a10637e1435f1 100644 (file)
@@ -101,7 +101,8 @@ function trimws(s) {
 }
 
 function _(s, c) {
-       return (window.TR && TR[sfh(trimws(s))]) || s;
+       var k = (c != null ? trimws(c) + '\u0001' : '') + trimws(s);
+       return (window.TR && TR[sfh(k)]) || s;
 }
 
 function N_(n, s, p, c) {
@@ -366,6 +367,17 @@ function cbi_validate_form(form, errmsg)
        return true;
 }
 
+function cbi_validate_named_section_add(input)
+{
+       var button = input.parentNode.parentNode.querySelector('.cbi-button-add');
+       if (input.value !== '') {
+               button.disabled = false;
+       }
+       else {
+               button.disabled = true;
+       }
+}
+
 function cbi_validate_reset(form)
 {
        window.setTimeout(
@@ -613,17 +625,17 @@ String.prototype.format = function()
                                                var tm = 0;
                                                var ts = (param || 0);
 
-                                               if (ts > 60) {
+                                               if (ts > 59) {
                                                        tm = Math.floor(ts / 60);
                                                        ts = (ts % 60);
                                                }
 
-                                               if (tm > 60) {
+                                               if (tm > 59) {
                                                        th = Math.floor(tm / 60);
                                                        tm = (tm % 60);
                                                }
 
-                                               if (th > 24) {
+                                               if (th > 23) {
                                                        td = Math.floor(th / 24);
                                                        th = (th % 24);
                                                }
@@ -645,7 +657,11 @@ String.prototype.format = function()
                                                for (i = 0; (i < units.length) && (val > mf); i++)
                                                        val /= mf;
 
-                                               subst = (i ? val.toFixed(pr) : val) + units[i];
+                                               if (i)
+                                                       subst = val.toFixed(pr) + units[i] + (mf == 1024 ? 'i' : '');
+                                               else
+                                                       subst = val + ' ';
+
                                                pMinLength = null;
                                                break;
                                }
@@ -730,6 +746,9 @@ if (typeof(window.CustomEvent) !== 'function') {
 }
 
 function cbi_dropdown_init(sb) {
+       if (sb && L.dom.findClassInstance(sb) instanceof L.ui.Dropdown)
+               return;
+
        var dl = new L.ui.Dropdown(sb, null, { name: sb.getAttribute('name') });
        return dl.bind(sb);
 }
@@ -740,25 +759,25 @@ function cbi_update_table(table, data, placeholder) {
        if (!isElem(target))
                return;
 
-       target.querySelectorAll('.tr.table-titles, .cbi-section-table-titles').forEach(function(thead) {
+       target.querySelectorAll('tr.table-titles, .tr.table-titles, .cbi-section-table-titles').forEach(function(thead) {
                var titles = [];
 
-               thead.querySelectorAll('.th').forEach(function(th) {
+               thead.querySelectorAll('th, .th').forEach(function(th) {
                        titles.push(th);
                });
 
                if (Array.isArray(data)) {
-                       var n = 0, rows = target.querySelectorAll('.tr');
+                       var n = 0, rows = target.querySelectorAll('tr, .tr'), trows = [];
 
                        data.forEach(function(row) {
-                               var trow = E('div', { 'class': 'tr' });
+                               var trow = E('tr', { 'class': 'tr' });
 
                                for (var i = 0; i < titles.length; i++) {
                                        var text = (titles[i].innerText || '').trim();
-                                       var td = trow.appendChild(E('div', {
+                                       var td = trow.appendChild(E('td', {
                                                'class': titles[i].className,
                                                'data-title': (text !== '') ? text : null
-                                       }, row[i] || ''));
+                                       }, (row[i] != null) ? row[i] : ''));
 
                                        td.classList.remove('th');
                                        td.classList.add('td');
@@ -766,18 +785,22 @@ function cbi_update_table(table, data, placeholder) {
 
                                trow.classList.add('cbi-rowstyle-%d'.format((n++ % 2) ? 2 : 1));
 
-                               if (rows[n])
-                                       target.replaceChild(trow, rows[n]);
-                               else
-                                       target.appendChild(trow);
+                               trows[n] = trow;
                        });
 
+                       for (var i = 1; i <= n; i++) {
+                               if (rows[i])
+                                       target.replaceChild(trows[i], rows[i]);
+                               else
+                                       target.appendChild(trows[i]);
+                       }
+
                        while (rows[++n])
                                target.removeChild(rows[n]);
 
                        if (placeholder && target.firstElementChild === target.lastElementChild) {
-                               var trow = target.appendChild(E('div', { 'class': 'tr placeholder' }));
-                               var td = trow.appendChild(E('div', { 'class': titles[0].className }, placeholder));
+                               var trow = target.appendChild(E('tr', { 'class': 'tr placeholder' }));
+                               var td = trow.appendChild(E('td', { 'class': titles[0].className }, placeholder));
 
                                td.classList.remove('th');
                                td.classList.add('td');
@@ -786,10 +809,10 @@ function cbi_update_table(table, data, placeholder) {
                else {
                        thead.parentNode.style.display = 'none';
 
-                       thead.parentNode.querySelectorAll('.tr, .cbi-section-table-row').forEach(function(trow) {
+                       thead.parentNode.querySelectorAll('tr, .tr, .cbi-section-table-row').forEach(function(trow) {
                                if (trow !== thead) {
                                        var n = 0;
-                                       trow.querySelectorAll('.th, .td').forEach(function(td) {
+                                       trow.querySelectorAll('th, td, .th, .td').forEach(function(td) {
                                                if (n < titles.length) {
                                                        var text = (titles[n++].innerText || '').trim();
                                                        if (text !== '')