Vorlage:SH
Aus BogenWiki
(Unterschied zwischen Versionen)
Nugman (Diskussion | Beiträge) |
Nugman (Diskussion | Beiträge) |
||
| (Der Versionsvergleich bezieht 10 dazwischenliegende Versionen mit ein.) | |||
| Zeile 26: | Zeile 26: | ||
function CountSHBD(sSHID) | function CountSHBD(sSHID) | ||
{ | { | ||
| + | // Count the rows in a BD table: | ||
| + | // - Amount of rows that are shown (visible in UI, display=table-row and and Bg!=-) | ||
| + | // - Amount of rows that contain an abject (Bg!=. and Bg!=-) | ||
| + | // - Total amount of rows (Bg!=-) | ||
console.log('CountSHBD('+sSHID+')'); | console.log('CountSHBD('+sSHID+')'); | ||
let nRowsShown = 0; | let nRowsShown = 0; | ||
| - | let | + | let nRowsAvail = 0; |
| + | let nRowsTotal = 0; | ||
// count display state of rows with objects | // count display state of rows with objects | ||
let sNodeSel = 'tr[id^=SH-objrow-'+sSHID+']'; | let sNodeSel = 'tr[id^=SH-objrow-'+sSHID+']'; | ||
| - | |||
let aNodes = document.querySelectorAll(sNodeSel); | let aNodes = document.querySelectorAll(sNodeSel); | ||
| - | + | nRowsAvail = aNodes.length; | |
| - | for (var i = 0; i < aNodes.length; i++) | + | nRowsTotal = aNodes.length; |
| + | for (var i = 0; i < aNodes.length; i++) | ||
nRowsShown = (aNodes[i].style.display=='table-row' ? nRowsShown+1 : nRowsShown); | nRowsShown = (aNodes[i].style.display=='table-row' ? nRowsShown+1 : nRowsShown); | ||
| - | |||
| - | |||
| - | |||
// count display state of empty rows | // count display state of empty rows | ||
sNodeSel = 'tr[id^=SH-emptyrow-'+sSHID+']'; | sNodeSel = 'tr[id^=SH-emptyrow-'+sSHID+']'; | ||
| - | |||
aNodes = document.querySelectorAll(sNodeSel); | aNodes = document.querySelectorAll(sNodeSel); | ||
| - | + | nRowsTotal += aNodes.length; | |
| - | for (var i = 0; i < aNodes.length; i++) | + | for (var i = 0; i < aNodes.length; i++) |
nRowsShown = (aNodes[i].style.display=='table-row' ? nRowsShown+1 : nRowsShown); | nRowsShown = (aNodes[i].style.display=='table-row' ? nRowsShown+1 : nRowsShown); | ||
| - | + | console.log('[CountSHBD()]: Shown='+nRowsShown+', Avail='+nRowsAvail+', Total='+nRowsTotal); | |
| - | + | return [nRowsShown,nRowsAvail,nRowsTotal]; | |
| - | console.log('[CountSHBD()]: | + | |
| - | return [nRowsShown, | + | |
} | } | ||
function AddNodesSHBD(sSel,aNodes=[]) | function AddNodesSHBD(sSel,aNodes=[]) | ||
| Zeile 65: | Zeile 64: | ||
let sNewTitle = '???'; | let sNewTitle = '???'; | ||
switch (sState) { | switch (sState) { | ||
| - | case ' | + | case 'hideall': sNewImage = 'HideT'; sNewTitle = 'Alle verbergen'; break; |
| - | case ' | + | case 'showall': sNewImage = 'ShowT'; sNewTitle = 'Alle anzeigen'; break; |
| - | case ' | + | case 'showavail': sNewImage = 'ShowMixedTa'; sNewTitle = 'Alle vorhandenen anzeigen'; break; |
} | } | ||
console.log('[SetBtnStateSHBD()]: sNewImage='+sNewImage+', sNewTitle="'+sNewTitle+'"'); | console.log('[SetBtnStateSHBD()]: sNewImage='+sNewImage+', sNewTitle="'+sNewTitle+'"'); | ||
| Zeile 79: | Zeile 78: | ||
sNewDisplayState = '???'; | sNewDisplayState = '???'; | ||
switch (sState) { | switch (sState) { | ||
| - | case 'showall': | + | case 'showall': sNewDisplayState = 'table-row'; break; |
| - | case ' | + | case 'showavail': sNewDisplayState = (sRowID.split('-')[1] == 'objrow' ? 'table-row' : 'none'); break; |
| - | case 'hideall': | + | case 'hideall': sNewDisplayState = 'none'; break; |
} | } | ||
eRow = document.getElementById(sRowID); | eRow = document.getElementById(sRowID); | ||
| Zeile 87: | Zeile 86: | ||
eRow.style.display = sNewDisplayState; | eRow.style.display = sNewDisplayState; | ||
} | } | ||
| - | function GetActAndNewStateSHBD( | + | function GetActAndNewStateSHBD(sSHID) |
{ | { | ||
| - | console.log('GetActAndNewStateSHBD(): | + | console.log('GetActAndNewStateSHBD(): sSHID="'+sSHID+'"'); |
| - | // | + | // count shown rows, rows with available objects and total rows |
| - | // nRowsShown == 0, | + | let [nRowsShown,nRowsAvail,nRowsTotal] = CountSHBD(sSHID); |
| - | // nRowsShown | + | // State-/display-order: hideall => showavail => showall |
| - | // nRowsShown > | + | // State showavail is skipped if all rows contain available objects |
| + | // ActState NewState | ||
| + | // nRowsShown == 0, nRowsAvail > 0 && < nRowsTotal: hideall => showavail | ||
| + | // nRowsShown == 0, nRowsAvail == nRowsTotal: hideall => showall | ||
| + | // nRowsShown == nRowsAvail > 0 && < nRowsTotal: showavail => showall | ||
| + | // nRowsShown == nRowsAvail == nRowsTotal: showall => hideall | ||
let sActState = ''; | let sActState = ''; | ||
let sNewState = ''; | let sNewState = ''; | ||
| - | + | if (nRowsShown == 0) { | |
| - | + | sActState = 'hideall'; | |
| - | + | sNewState = (nRowsAvail > 0 ? (nRowsAvail < nRowsTotal ? 'showavail' : 'showall') : 'showall'); | |
| - | + | } else { | |
| + | sActState = (nRowsAvail > 0 ? (nRowsAvail < nRowsTotal ? 'showavail' : 'showall') : 'showall'); | ||
| + | sNewState = (nRowsShown < nRowsTotal ? 'showall' : 'hideall'); | ||
} | } | ||
console.log('[GetActAndNewStateSHBD()]: sActState='+sActState+', sNewState="'+sNewState+'"'); | console.log('[GetActAndNewStateSHBD()]: sActState='+sActState+', sNewState="'+sNewState+'"'); | ||
| Zeile 107: | Zeile 113: | ||
{ | { | ||
console.log('ShowHideBD('+sSHID+','+sCmd+')'); | console.log('ShowHideBD('+sSHID+','+sCmd+')'); | ||
| - | let | + | let aNodesAll = []; |
| - | let | + | let aNodesGroup = []; |
let sActState = ''; | let sActState = ''; | ||
| - | let sNewState | + | let sNewState = ''; |
switch (sCmd) { | switch (sCmd) { | ||
case 'init': | case 'init': | ||
break; | break; | ||
case 'showall': | case 'showall': | ||
| - | + | case 'showavail': | |
| - | case ' | + | |
| - | + | ||
case 'hideall': | case 'hideall': | ||
| + | // update rows to the desired state | ||
| + | aNodesAll = AddNodesSHBD('tr[id^=SH-objrow-'+sSHID+']') | ||
| + | aNodesAll = AddNodesSHBD('tr[id^=SH-emptyrow-'+sSHID+']',aNodesAll) | ||
| + | // update display state of the rows | ||
| + | for (let i = 0; i < aNodesAll.length; i++) | ||
| + | SetRowStateSHBD(aNodesAll[i].id,sCmd); | ||
| + | // update header button | ||
| + | [sActState,sNewState] = GetActAndNewStateSHBD(sSHID) | ||
| + | SetBtnStateSHBD('SH-headbtn-'+sSHID,sNewState); | ||
| + | // update group buttons | ||
| + | aNodesGroup = AddNodesSHBD('tr[id^=SH-divrow-'+sSHID+']'); | ||
| + | for (var i = 0; i < aNodesGroup.length; i++) { | ||
| + | let sSHGroupID = aNodesGroup[i].id.split('-')[2]; | ||
| + | let [sGroupActState,sGroupNewState] = GetActAndNewStateSHBD(sSHGroupID) | ||
| + | SetBtnStateSHBD('SH-divbtn-'+sSHGroupID,sGroupNewState); | ||
| + | } | ||
break; | break; | ||
case 'showgroup': | case 'showgroup': | ||
| - | |||
case 'showgroupavail': | case 'showgroupavail': | ||
| - | |||
case 'hidegroup': | case 'hidegroup': | ||
| + | // update rows to the desired state | ||
| + | aNodesAll = AddNodesSHBD('tr[id^=SH-objrow-'+sSHID+']') | ||
| + | aNodesAll = AddNodesSHBD('tr[id^=SH-emptyrow-'+sSHID+']',aNodesAll) | ||
| + | // update display state of the rows | ||
| + | for (let i = 0; i < aNodesAll.length; i++) { | ||
| + | SetRowStateSHBD(aNodesAll[i].id,(sCmd=='showgroup' ? 'show' : (sCmd=='showgroupavail' ? 'showavail' : 'hide'))); | ||
| + | } | ||
| + | [sActState,sNewState] = GetActAndNewStateSHBD(sSHID) | ||
| + | SetBtnStateSHBD('SH-divbtn-'+sSHID,sNewState); | ||
break; | break; | ||
case 'toggleall': | case 'toggleall': | ||
// determine current state and new state | // determine current state and new state | ||
| - | + | [sActState,sNewState] = GetActAndNewStateSHBD(sSHID) | |
| - | [sActState,sNewState] = GetActAndNewStateSHBD( | + | |
// show/hide rows | // show/hide rows | ||
| - | + | aNodesAll = AddNodesSHBD('tr[id^=SH-objrow-'+sSHID+']') | |
aNodesAll = AddNodesSHBD('tr[id^=SH-emptyrow-'+sSHID+']',aNodesAll) | aNodesAll = AddNodesSHBD('tr[id^=SH-emptyrow-'+sSHID+']',aNodesAll) | ||
// update display state of the rows | // update display state of the rows | ||
| - | for (let i = 0; i < aNodesAll.length; i++) | + | for (let i = 0; i < aNodesAll.length; i++) |
SetRowStateSHBD(aNodesAll[i].id,sNewState); | SetRowStateSHBD(aNodesAll[i].id,sNewState); | ||
| - | |||
// update header button | // update header button | ||
| + | [sActState,sNewState] = GetActAndNewStateSHBD(sSHID) | ||
SetBtnStateSHBD('SH-headbtn-'+sSHID,sNewState); | SetBtnStateSHBD('SH-headbtn-'+sSHID,sNewState); | ||
// update group buttons | // update group buttons | ||
| - | + | aNodesGroup = AddNodesSHBD('tr[id^=SH-divrow-'+sSHID+']'); | |
for (var i = 0; i < aNodesGroup.length; i++) { | for (var i = 0; i < aNodesGroup.length; i++) { | ||
let sSHGroupID = aNodesGroup[i].id.split('-')[2]; | let sSHGroupID = aNodesGroup[i].id.split('-')[2]; | ||
| - | + | let [sGroupActState,sGroupNewState] = GetActAndNewStateSHBD(sSHGroupID) | |
| - | let [sGroupActState,sGroupNewState] = GetActAndNewStateSHBD( | + | |
SetBtnStateSHBD('SH-divbtn-'+sSHGroupID,sGroupNewState); | SetBtnStateSHBD('SH-divbtn-'+sSHGroupID,sGroupNewState); | ||
} | } | ||
break; | break; | ||
case 'togglegroup': | case 'togglegroup': | ||
| - | + | [sActState,sNewState] = GetActAndNewStateSHBD(sSHID) | |
| - | [sActState,sNewState] = GetActAndNewStateSHBD( | + | |
// show/hide rows | // show/hide rows | ||
| - | + | aNodesAll = AddNodesSHBD('tr[id^=SH-objrow-'+sSHID+']') | |
aNodesAll = AddNodesSHBD('tr[id^=SH-emptyrow-'+sSHID+']',aNodesAll) | aNodesAll = AddNodesSHBD('tr[id^=SH-emptyrow-'+sSHID+']',aNodesAll) | ||
// update display state of the rows | // update display state of the rows | ||
| Zeile 158: | Zeile 182: | ||
SetRowStateSHBD(aNodesAll[i].id,sNewState); | SetRowStateSHBD(aNodesAll[i].id,sNewState); | ||
} | } | ||
| + | [sActState,sNewState] = GetActAndNewStateSHBD(sSHID) | ||
SetBtnStateSHBD('SH-divbtn-'+sSHID,sNewState); | SetBtnStateSHBD('SH-divbtn-'+sSHID,sNewState); | ||
| - | |||
break; | break; | ||
} | } | ||
Aktuelle Version vom 10:39, 5. Okt. 2026
Zeigen/Verbergen:
dies ist ein Test ...
dies ist ein Test ...
dies ist ein Test ...
dies ist ein Test ...
