From 5cbbf20fc94c8fa6bc2bc76de02874f04b6daafd Mon Sep 17 00:00:00 2001 From: Moe Date: Fri, 3 Jan 2025 00:22:33 -0800 Subject: [PATCH] Easier multiselect in Wall Display, include Tag selection --- web/assets/css/bs5.wallview.css | 16 +++++++-- web/assets/js/bs5.wallview.js | 63 +++++++++++++++++++++++++++++---- web/pages/wallview.ejs | 8 ++--- 3 files changed, 73 insertions(+), 14 deletions(-) diff --git a/web/assets/css/bs5.wallview.css b/web/assets/css/bs5.wallview.css index f82647b2..fcf37b95 100644 --- a/web/assets/css/bs5.wallview.css +++ b/web/assets/css/bs5.wallview.css @@ -21,7 +21,7 @@ padding: 5px; opacity: 0; transition: 0.2s; - z-index: 11; + z-index: 12; border-radius: 0 0 5px 5px; } @@ -43,7 +43,7 @@ } #wallview-monitorList .active i{ - display: inlin-block; + display: inline-block; } #wallview-canvas .wallview-video { @@ -90,3 +90,15 @@ #wallview-canvas .wallview-video:hover .wallview-item-controls{ opacity: 0.5; } + +#wallview-monitorList { + position: absolute; + z-index: 11; + width: 300px; + height: 80vh; + background: rgba(0,0,0,0.6); + right: 0; + bottom: 10vh; + overflow: auto; + border-radius: 10px 0 0 10px;; +} diff --git a/web/assets/js/bs5.wallview.js b/web/assets/js/bs5.wallview.js index 09669a91..9dd5438d 100644 --- a/web/assets/js/bs5.wallview.js +++ b/web/assets/js/bs5.wallview.js @@ -40,18 +40,44 @@ function getWindowName(){ const theWindowChoice = urlParams.get('window'); return theWindowChoice || '1' } -function drawMonitorListItem(monitor){ - wallViewMonitorList.append(`
  • ${monitor.name}
  • `) -} function drawMonitorList(){ return new Promise((resolve) => { $.get(getApiPrefix('monitor'),function(monitors){ $.each(monitors, function(n,monitor){ if(monitor.mode !== 'stop' && monitor.mode !== 'idle'){ loadedMonitors[monitor.mid] = monitor; - drawMonitorListItem(monitor) } }) + var tags = getListOfTagsFromMonitors() + var monitorsOrdered = Object.values(loadedMonitors).sort((a, b) => a.name.localeCompare(b.name)); + var allFound = [ + { + attributes: `tag=""`, + class: `cursor-pointer wallview-open-monitor-group`, + color: 'forestgreen', + label: lang['All Monitors'], + } + ] + $.each(tags,function(tag,monitors){ + allFound.push({ + attributes: `tag="${tag}"`, + class: `cursor-pointer wallview-open-monitor-group`, + color: 'blue', + label: tag, + }) + }) + $.each(monitorsOrdered,function(monitorKey,monitor){ + var monitorId = monitor.mid + var label = monitor.name + allFound.push({ + attributes: `select-monitor="${monitorId}"`, + class: `cursor-pointer`, + color: 'grey', + label, + }) + }) + var html = allFound.map(item => `
    ${item.label}
    `).join('') + wallViewMonitorList.html(html) resolve(monitors) }) }) @@ -481,14 +507,14 @@ function selectMonitor(monitorId, css){ }); initiateLiveGridPlayer(loadedMonitor, subStreamChannel) attachVideoElementErrorHandler(monitorId) - getMonitorListItem(monitorId).addClass('active') + getMonitorListItem(monitorId).removeClass('btn-primary').addClass('btn-warning') } function deselectMonitor(monitorId){ delete(selectedMonitors[monitorId]) closeLiveGridPlayer(monitorId, true) var monitorItem = wallViewCanvas.find(`[live-stream="${monitorId}"]`); monitorItem.remove() - getMonitorListItem(monitorId).removeClass('active') + getMonitorListItem(monitorId).removeClass('btn-warning').addClass('btn-primary') } function getCurrentLayout(){ @@ -732,6 +758,31 @@ $(document).ready(function(){ .on('click', '.wallview-close-all', function(e){ e.preventDefault() closeAllMonitors() + }) + .on('click', '.wallview-toggle-monitor-list', function(e){ + e.preventDefault(); + wallViewMonitorList.toggleClass('d-none') + return false; + }) + .on('click', '.wallview-open-monitor-group', function(e){ + e.preventDefault(); + var el = $(this) + var tag = el.attr('tag') + if(!tag){ + for(monitorId of Object.keys(loadedMonitors)){ + selectMonitor(monitorId) + } + }else{ + var tags = getListOfTagsFromMonitors() + var monitorIds = tags[tag] + for(monitorId of monitorIds){ + selectMonitor(monitorId) + } + } + autoPlaceCurrentMonitorItems() + displayInfoScreen() + saveLayout() + return false; }); createWebsocket(location.origin,{ path: websocketPath diff --git a/web/pages/wallview.ejs b/web/pages/wallview.ejs index 837e4f2b..698057dc 100644 --- a/web/pages/wallview.ejs +++ b/web/pages/wallview.ejs @@ -80,13 +80,9 @@ <% }) %> - + <%- lang.Monitors %> +