';
+ $tr .= '| ';
+ $tr .= '';
+ $tr .= '' . $i . '';
+ $tr .= '';
+ $tr .= ' | ';
for ($j = 1; $j <= $getDisplayDasboardNbColumn; $j++) {
$tr .= '';
$string_cmd = ' ';
@@ -661,6 +669,33 @@
setTableLayoutSortable: function() {
let containers = document.querySelectorAll('#md_eqLogicConfigure #tableCmdLayoutConfiguration tbody td .cmdLayoutContainer')
containers.forEach(_container => {
+ new Sortable(document.querySelector('#tableCmdLayoutConfiguration tbody'), {
+ delay: 50,
+ delayOnTouchOnly: true,
+ draggable: 'tr',
+ filter: 'input, a',
+ preventOnFilter: false,
+ direction: 'vertical',
+ chosenClass: 'dragSelected',
+ onUpdate: function(evt) {
+ let tableLayout = document.getElementById('tableCmdLayoutConfiguration')
+ let row = 1
+ tableLayout.querySelectorAll('tr').forEach(_cLay => {
+ let col = 1
+ _cLay.querySelectorAll('td').forEach(_td => {
+ _td.setAttribute('data-line', row)
+ if (is_object(_td.querySelector('.counterReorder'))) {
+ _td.querySelector('span').innerHTML = row
+ } else {
+ _td.querySelectorAll('input')[0]?.setAttribute('data-l3key', 'text::td::' + row + '::' + col)
+ _td.querySelectorAll('input')[1]?.setAttribute('data-l3key', 'style::td::' + row + '::' + col)
+ col++
+ }
+ })
+ row++
+ })
+ }
+ }),
new Sortable(_container, {
delay: 100,
delayOnTouchOnly: true,
@@ -679,14 +714,13 @@
newTd += ' | '
return newTd
},
- applyTableLayout: function() {
+ applyTableLayout: function(_action = '', _row = '') {
var nbColumn = document.querySelector('#md_eqLogicConfigure input[data-l2key="layout::dashboard::table::nbColumn"]').value
var nbRow = document.querySelector('#md_eqLogicConfigure input[data-l2key="layout::dashboard::table::nbLine"]').value
-
var tableLayout = document.getElementById('tableCmdLayoutConfiguration')
var tableRowCount = tableLayout.querySelectorAll('tr').length
- var tableColumnCount = tableLayout.querySelector('tr').querySelectorAll('td').length
-
+ var tableColumnCount = tableLayout.querySelector('tr').querySelectorAll('td:not(:first-child)').length
+
if (nbColumn != tableColumnCount || nbRow != tableRowCount) {
//build new table:
var newTableLayout = document.createElement('table')
@@ -696,20 +730,38 @@
for (i = 1; i <= nbRow; i++) {
var newTr = document.createElement('tr')
+ let newFirstCol = ''
+ newFirstCol += ''
+ newFirstCol += '' + i + ''
+ newFirstCol += ''
+ newFirstCol += ' | '
+ newTr.insertAdjacentHTML('beforeend', newFirstCol)
+
for (j = 1; j <= nbColumn; j++) {
newTd = jeeFrontEnd.md_eqLogicConfigure.getNewLayoutTd(i, j)
newTr.insertAdjacentHTML('beforeend', newTd)
}
newTableLayout.tBodies[0].appendChild(newTr)
- }
+
+ }
//distribute back cmds into new table
var firstTdLayout = newTableLayout.querySelector('tr').querySelector('td > .cmdLayoutContainer')
var row, col, newTd, text, style
tableLayout.querySelectorAll('.cmdLayout').forEach(_cLay => {
row = _cLay.closest('td').getAttribute('data-line')
+ row = parseInt(row)
+
+ if (_action == 'add' && row >= _row) {
+ row++
+ }
+ if (_action == 'remove' && row >= _row) {
+ row--
+ }
+
col = _cLay.closest('td').getAttribute('data-column')
newTd = newTableLayout.querySelector('td[data-line="' + row + '"][data-column="' + col + '"]')
+
if (newTd) {
newTd.querySelector('.cmdLayoutContainer').appendChild(_cLay)
} else {
@@ -720,21 +772,30 @@
//get back tds texts and styles
tableLayout.querySelectorAll('td').forEach(_td => {
row = _td.getAttribute('data-line')
+ row = parseInt(row)
col = _td.getAttribute('data-column')
- text = _td.querySelector('input[data-l3key="text::td::' + row + '::' + col + '"]').value
- style = _td.querySelector('input[data-l3key="style::td::' + row + '::' + col + '"]').value
+
+ if (col != 0) {
+ text = _td.querySelector('input[data-l3key="text::td::' + row + '::' + col + '"]').value
+ style = _td.querySelector('input[data-l3key="style::td::' + row + '::' + col + '"]').value
+ }
+ if (_action == 'add' && row >= _row) {
+ row++
+ }
+ if (_action == 'remove' && row > _row) {
+ row--
+ }
+
newTd = newTableLayout.querySelector('td[data-line="' + row + '"][data-column="' + col + '"]')
- if (newTd) {
+ if (newTd && col != 0) {
newTableLayout.querySelector('input[data-l3key="text::td::' + row + '::' + col + '"]').value = text
newTableLayout.querySelector('input[data-l3key="style::td::' + row + '::' + col + '"]').value = style
}
})
//replace by new table:
- tableLayout.replaceWith(newTableLayout)
- document.querySelectorAll('#tableCmdLayoutConfiguration td').forEach(td => {
- td.style.width = 100 / nbColumn + '%'
- })
+ jeedomUtils.initTooltips(newTableLayout)
+ tableLayout.replaceWith(newTableLayout)
jeeFrontEnd.md_eqLogicConfigure.setTableLayoutSortable()
}
},
@@ -746,6 +807,7 @@
document.querySelectorAll('#table_widgetParameters tbody tr').forEach(_tr => {
eqLogic.display.parameters[_tr.querySelector('.key').jeeValue()] = _tr.querySelector('.value').jeeValue()
})
+
jeedom.eqLogic.save({
eqLogics: [eqLogic],
@@ -969,7 +1031,44 @@
}
})
- //eqLogic layout tab
+ //eqLogic layout tab
+ function handleDynamicLine(_action) {
+ if (_action !== 'add' && _action !== 'remove') {
+ throw new Error(`Invalid action value : only "add" or "remove" allowed, "${_action}" given`);
+ }
+
+ row = event.target.closest('td').getAttribute('data-line')
+ var nbRow = document.querySelector('#md_eqLogicConfigure input[data-l2key="layout::dashboard::table::nbLine"]').value
+ var tableLayout = document.getElementById('tableCmdLayoutConfiguration')
+ var tableRowCount = tableLayout.querySelectorAll('tr').length
+
+ if (_action === 'remove' && tableRowCount === 1) {
+ return
+ }
+
+ if (_action === 'add' && nbRow <= tableRowCount) {
+ tableRowCount++
+ }
+ if (_action === 'remove' && nbRow >= tableRowCount) {
+ tableRowCount--
+ }
+
+ document.querySelector('input[data-l2key="layout::dashboard::table::nbLine"]').value = tableRowCount
+ jeeFrontEnd.md_eqLogicConfigure.applyTableLayout(_action, row)
+ }
+
+ document.getElementById('divCmdLayoutConfiguration')?.addEventListener('click', function(event) {
+ if (event.target.closest('.bt_addRow')) {
+ handleDynamicLine('add');
+ return;
+ }
+
+ if (event.target.closest('.bt_removeRow')) {
+ handleDynamicLine('remove');
+ return;
+ }
+ })
+
document.getElementById('eqLogic_layout')?.addEventListener('click', function(event) {
var _target = null
if (_target = event.target.closest('#bt_eqLogicLayoutApply')) {
@@ -978,6 +1077,7 @@
}
})
+
document.getElementById('eqLogic_layout')?.addEventListener('change', function(event) {
var _target = null
if (_target = event.target.closest('.sel_layout')) {