Cycling View for Live Grid
parent
369917b875
commit
b2fc57175c
|
|
@ -4869,6 +4869,32 @@ module.exports = function(s,config,lang){
|
||||||
"color": "forestgreen",
|
"color": "forestgreen",
|
||||||
"info": []
|
"info": []
|
||||||
},
|
},
|
||||||
|
"Live Grid": {
|
||||||
|
"name": lang['Live Grid'],
|
||||||
|
"color": "navy",
|
||||||
|
"info": [
|
||||||
|
{
|
||||||
|
"field": lang['Monitors per row'],
|
||||||
|
"placeholder": "3",
|
||||||
|
attribute:'localStorage="montage"',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"field": lang['Cycle Monitors per row'],
|
||||||
|
"placeholder": "2",
|
||||||
|
attribute:'localStorage="cycleLivePerRow"',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"field": lang['Number of Cycle Monitors'],
|
||||||
|
"placeholder": "4",
|
||||||
|
attribute:'localStorage="cycleLiveNumberOfMonitors"',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"field": lang['Cycle Monitor Height'],
|
||||||
|
"placeholder": "4",
|
||||||
|
attribute:'localStorage="cycleLiveMonitorHeight"',
|
||||||
|
},
|
||||||
|
]
|
||||||
|
},
|
||||||
"Preferences": {
|
"Preferences": {
|
||||||
"name": lang.Preferences,
|
"name": lang.Preferences,
|
||||||
"color": "navy",
|
"color": "navy",
|
||||||
|
|
@ -4914,15 +4940,6 @@ module.exports = function(s,config,lang){
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"field": lang['Monitors per row'],
|
|
||||||
"placeholder": "3",
|
|
||||||
attribute:'localStorage="montage"',
|
|
||||||
"description": "",
|
|
||||||
"default": "",
|
|
||||||
"example": "",
|
|
||||||
"possible": ""
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"field": lang['Browser Console Log'],
|
"field": lang['Browser Console Log'],
|
||||||
attribute:'localStorage="browserLog"',
|
attribute:'localStorage="browserLog"',
|
||||||
|
|
@ -4969,7 +4986,7 @@ module.exports = function(s,config,lang){
|
||||||
"possible": s.listOfThemes
|
"possible": s.listOfThemes
|
||||||
},
|
},
|
||||||
]
|
]
|
||||||
}
|
},
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"ONVIF Device Manager": {
|
"ONVIF Device Manager": {
|
||||||
|
|
@ -7637,6 +7654,12 @@ module.exports = function(s,config,lang){
|
||||||
attributes: 'shinobi-switch="monitorMuteAudio" ui-change-target=".dot" on-class="dot-green" off-class="dot-grey"',
|
attributes: 'shinobi-switch="monitorMuteAudio" ui-change-target=".dot" on-class="dot-green" off-class="dot-grey"',
|
||||||
color: 'grey',
|
color: 'grey',
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
label: lang['Cycle Monitors'],
|
||||||
|
class: 'cursor-pointer',
|
||||||
|
attributes: 'shinobi-switch="cycleLiveGrid" ui-change-target=".dot" on-class="dot-green" off-class="dot-grey"',
|
||||||
|
color: 'grey',
|
||||||
|
},
|
||||||
{
|
{
|
||||||
label: lang['JPEG Mode'],
|
label: lang['JPEG Mode'],
|
||||||
class: 'cursor-pointer',
|
class: 'cursor-pointer',
|
||||||
|
|
|
||||||
|
|
@ -40,6 +40,11 @@
|
||||||
"Use Raw Snapshot": "Use Raw Snapshot",
|
"Use Raw Snapshot": "Use Raw Snapshot",
|
||||||
"Failed to Edit Account": "Failed to Edit Account",
|
"Failed to Edit Account": "Failed to Edit Account",
|
||||||
"How to Connect": "How to Connect",
|
"How to Connect": "How to Connect",
|
||||||
|
"Cycle": "Cycle",
|
||||||
|
"Cycle Monitor Height": "Cycle Monitor Height",
|
||||||
|
"Number of Cycle Monitors": "Number of Cycle Monitors",
|
||||||
|
"Cycle Monitors": "Cycle Monitors",
|
||||||
|
"Cycle Monitors per row": "Cycle Monitors per row",
|
||||||
"Login": "Login",
|
"Login": "Login",
|
||||||
"Room ID": "Room ID",
|
"Room ID": "Room ID",
|
||||||
"Substream": "Substream",
|
"Substream": "Substream",
|
||||||
|
|
|
||||||
|
|
@ -464,8 +464,10 @@ module.exports = (s,config,lang) => {
|
||||||
}
|
}
|
||||||
|
|
||||||
if(
|
if(
|
||||||
filter.command ||
|
filter.command || (
|
||||||
(monitorDetails.detector_command_enable === '1' && !s.group[d.ke].activeMonitors[monitorId].detector_command)
|
monitorDetails.detector_command_enable === '1' &&
|
||||||
|
!s.group[d.ke].activeMonitors[monitorId].detector_command
|
||||||
|
)
|
||||||
){
|
){
|
||||||
s.group[d.ke].activeMonitors[monitorId].detector_command = s.createTimeout('detector_command',s.group[d.ke].activeMonitors[monitorId],monitorDetails.detector_command_timeout,10)
|
s.group[d.ke].activeMonitors[monitorId].detector_command = s.createTimeout('detector_command',s.group[d.ke].activeMonitors[monitorId],monitorDetails.detector_command_timeout,10)
|
||||||
var detector_command = addEventDetailsToString(d,monitorDetails.detector_command)
|
var detector_command = addEventDetailsToString(d,monitorDetails.detector_command)
|
||||||
|
|
|
||||||
|
|
@ -21,6 +21,7 @@ var chartColors = {
|
||||||
var isAppleDevice = navigator.userAgent.match(/(iPod|iPhone|iPad)/)||(navigator.userAgent.match(/(Safari)/)&&!navigator.userAgent.match('Chrome'));
|
var isAppleDevice = navigator.userAgent.match(/(iPod|iPhone|iPad)/)||(navigator.userAgent.match(/(Safari)/)&&!navigator.userAgent.match('Chrome'));
|
||||||
var isMobile = /(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|ipad|iris|kindle|Android|Silk|lge |maemo|midp|mmp|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i.test(navigator.userAgent)
|
var isMobile = /(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|ipad|iris|kindle|Android|Silk|lge |maemo|midp|mmp|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i.test(navigator.userAgent)
|
||||||
|| /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(navigator.userAgent.substr(0,4))
|
|| /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(navigator.userAgent.substr(0,4))
|
||||||
|
var keyShortcuts = {}
|
||||||
function base64ArrayBuffer(arrayBuffer) {
|
function base64ArrayBuffer(arrayBuffer) {
|
||||||
var base64 = ''
|
var base64 = ''
|
||||||
var encodings = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
|
var encodings = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
|
||||||
|
|
@ -1000,6 +1001,9 @@ function convertJsonToAccordionHtml(theJson){
|
||||||
finalHtml = recurseJson(theJson,false)
|
finalHtml = recurseJson(theJson,false)
|
||||||
return finalHtml
|
return finalHtml
|
||||||
}
|
}
|
||||||
|
function findCommonElements(array1, array2) {
|
||||||
|
return array2.filter(item => array1.includes(item));
|
||||||
|
}
|
||||||
// on page load
|
// on page load
|
||||||
var readyFunctions = []
|
var readyFunctions = []
|
||||||
function onDashboardReady(theAction){
|
function onDashboardReady(theAction){
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,163 @@
|
||||||
|
var liveGridCycleTimer = null;
|
||||||
|
var cycleLiveOptionsBefore = null;
|
||||||
|
var cycleLiveOptions = null;
|
||||||
|
var cycleLiveMoveNext = function(){}
|
||||||
|
var cycleLiveMovePrev = function(){}
|
||||||
|
var cycleLiveFullList = null
|
||||||
|
var cycleLiveCurrentPart = null
|
||||||
|
function getListOfMonitorsToCycleLive(chosenTags,useMonitorIds){
|
||||||
|
var monitors = []
|
||||||
|
if(useMonitorIds){
|
||||||
|
monitors = getMonitorsFromIds(chosenTags)
|
||||||
|
}else if(chosenTags){
|
||||||
|
var tags = sanitizeTagList(chosenTags)
|
||||||
|
monitors = getMonitorsFromTags(tags)
|
||||||
|
}else{
|
||||||
|
monitors = getRunningMonitors(true)
|
||||||
|
}
|
||||||
|
return monitors;
|
||||||
|
}
|
||||||
|
function getPartForCycleLive(fullList, afterMonitorId, numberOfMonitors) {
|
||||||
|
const startIndex = afterMonitorId ? fullList.findIndex(monitor => monitor.mid === afterMonitorId) : -1;
|
||||||
|
const result = [];
|
||||||
|
for (let i = 1; i <= numberOfMonitors; i++) {
|
||||||
|
const index = (startIndex + i) % fullList.length;
|
||||||
|
result.push(fullList[index]);
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
function displayCycleSetOnLiveGrid(monitorsList){
|
||||||
|
cycleLiveCurrentPart = [].concat(monitorsList)
|
||||||
|
closeAllLiveGridPlayers()
|
||||||
|
monitorsWatchOnLiveGrid(monitorsList.map(monitor => monitor.mid))
|
||||||
|
}
|
||||||
|
// rotator
|
||||||
|
function stopCycleLive(){
|
||||||
|
console.error('STOP!!!!!',new Error)
|
||||||
|
clearTimeout(liveGridCycleTimer)
|
||||||
|
liveGridCycleTimer = null
|
||||||
|
}
|
||||||
|
function resumeCycleLive(fullList,partForCycle,numberOfMonitors){
|
||||||
|
console.error('RESUME!!!!!',new Error)
|
||||||
|
function next(){
|
||||||
|
var afterMonitorId = partForCycle.slice(-1)[0].mid;
|
||||||
|
partForCycle = getPartForCycleLive(fullList,afterMonitorId,numberOfMonitors)
|
||||||
|
displayCycleSetOnLiveGrid(partForCycle)
|
||||||
|
reset()
|
||||||
|
}
|
||||||
|
function prev(){
|
||||||
|
var firstInPart = partForCycle[0].mid;
|
||||||
|
var firstPartIndex = fullList.findIndex(monitor => monitor.mid === firstInPart)
|
||||||
|
var backedToIndex = (firstPartIndex - (numberOfMonitors + 1) + fullList.length) % fullList.length;
|
||||||
|
var beforeMonitorId = fullList[backedToIndex].mid
|
||||||
|
partForCycle = getPartForCycleLive(fullList,beforeMonitorId,numberOfMonitors, true)
|
||||||
|
displayCycleSetOnLiveGrid(partForCycle)
|
||||||
|
reset()
|
||||||
|
}
|
||||||
|
function reset(){
|
||||||
|
clearTimeout(liveGridCycleTimer)
|
||||||
|
liveGridCycleTimer = setTimeout(function(){
|
||||||
|
next()
|
||||||
|
},30000)
|
||||||
|
}
|
||||||
|
reset()
|
||||||
|
cycleLiveMoveNext = next
|
||||||
|
cycleLiveMovePrev = prev
|
||||||
|
}
|
||||||
|
function beginCycleLive({
|
||||||
|
chosenTags,
|
||||||
|
useMonitorIds,
|
||||||
|
numberOfMonitors,
|
||||||
|
monitorHeight,
|
||||||
|
}){
|
||||||
|
var fullList = getListOfMonitorsToCycleLive(chosenTags,useMonitorIds)
|
||||||
|
var partForCycle = getPartForCycleLive(fullList,null,numberOfMonitors)
|
||||||
|
cycleLiveFullList = [].concat(fullList)
|
||||||
|
displayCycleSetOnLiveGrid(partForCycle)
|
||||||
|
stopCycleLive()
|
||||||
|
resumeCycleLive(fullList,partForCycle,numberOfMonitors)
|
||||||
|
}
|
||||||
|
dashboardSwitchCallbacks.cycleLiveGrid = function(toggleState){
|
||||||
|
if(toggleState !== 1){
|
||||||
|
cycleLiveOptions = null
|
||||||
|
cycleLiveOptionsBefore = null
|
||||||
|
stopCycleLive()
|
||||||
|
}else{
|
||||||
|
openTab('liveGrid')
|
||||||
|
cycleLiveOptionsBefore = cycleLiveOptions ? Object.assign({},cycleLiveOptions) : null
|
||||||
|
const theLocalStorage = dashboardOptions()
|
||||||
|
const cycleLivePerRow = parseInt(theLocalStorage.cycleLivePerRow) || 2
|
||||||
|
const cycleLiveNumberOfMonitors = parseInt(theLocalStorage.cycleLiveNumberOfMonitors) || 4
|
||||||
|
const cycleLiveMonitorHeight = parseInt(theLocalStorage.cycleLiveMonitorHeight) || 4
|
||||||
|
cycleLiveOptions = {
|
||||||
|
chosenTags: null,
|
||||||
|
useMonitorIds: null,
|
||||||
|
monitorsPerRow: cycleLivePerRow,
|
||||||
|
numberOfMonitors: cycleLiveNumberOfMonitors,
|
||||||
|
monitorHeight: cycleLiveMonitorHeight,
|
||||||
|
}
|
||||||
|
beginCycleLive(cycleLiveOptions)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function keyShortcutsForCycleLive(enable) {
|
||||||
|
function cleanup(){
|
||||||
|
document.removeEventListener('keydown', keyShortcuts['cycleLive'].keydown);
|
||||||
|
document.removeEventListener('keyup', keyShortcuts['cycleLive'].keyup);
|
||||||
|
delete(keyShortcuts['cycleLive'])
|
||||||
|
}
|
||||||
|
if(enable){
|
||||||
|
let isKeyPressed = false;
|
||||||
|
function handleKeyboard(event){
|
||||||
|
if (isKeyPressed) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
event.preventDefault();
|
||||||
|
switch(event.code){
|
||||||
|
case 'Space':
|
||||||
|
isKeyPressed = true;
|
||||||
|
if(liveGridCycleTimer){
|
||||||
|
stopCycleLive()
|
||||||
|
}else{
|
||||||
|
resumeCycleLive(
|
||||||
|
cycleLiveFullList,
|
||||||
|
cycleLiveCurrentPart,
|
||||||
|
cycleLiveOptions.numberOfMonitors
|
||||||
|
)
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 'ArrowLeft':
|
||||||
|
isKeyPressed = true;
|
||||||
|
cycleLiveMovePrev();
|
||||||
|
break;
|
||||||
|
case 'ArrowRight':
|
||||||
|
isKeyPressed = true;
|
||||||
|
cycleLiveMoveNext();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function handleKeyup(event) {
|
||||||
|
isKeyPressed = false;
|
||||||
|
}
|
||||||
|
keyShortcuts['cycleLive'] = {
|
||||||
|
keydown: handleKeyboard,
|
||||||
|
keyup: handleKeyup,
|
||||||
|
}
|
||||||
|
document.addEventListener('keydown', keyShortcuts['cycleLive'].keydown);
|
||||||
|
document.addEventListener('keyup', keyShortcuts['cycleLive'].keyup);
|
||||||
|
}else{
|
||||||
|
cleanup()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
addOnTabOpen('liveGrid', function () {
|
||||||
|
keyShortcutsForCycleLive(true)
|
||||||
|
})
|
||||||
|
addOnTabReopen('liveGrid', function () {
|
||||||
|
if(cycleLiveOptions){
|
||||||
|
beginCycleLive(cycleLiveOptions)
|
||||||
|
}
|
||||||
|
keyShortcutsForCycleLive(true)
|
||||||
|
})
|
||||||
|
addOnTabAway('liveGrid', function () {
|
||||||
|
stopCycleLive()
|
||||||
|
keyShortcutsForCycleLive(false)
|
||||||
|
})
|
||||||
|
|
@ -280,7 +280,7 @@ function isLiveGridLogStreamOpenBefore(monitorId){
|
||||||
var liveGridLogStreams = dashboardOptions().liveGridLogStreams || {}
|
var liveGridLogStreams = dashboardOptions().liveGridLogStreams || {}
|
||||||
return liveGridLogStreams[monitorId]
|
return liveGridLogStreams[monitorId]
|
||||||
}
|
}
|
||||||
function drawLiveGridBlock(monitorConfig,subStreamChannel){
|
function drawLiveGridBlock(monitorConfig,subStreamChannel,forcedMonitorsPerRow,monitorHeight){
|
||||||
var monitorId = monitorConfig.mid
|
var monitorId = monitorConfig.mid
|
||||||
if($('#monitor_live_' + monitorId).length === 0){
|
if($('#monitor_live_' + monitorId).length === 0){
|
||||||
var x = null;
|
var x = null;
|
||||||
|
|
@ -292,7 +292,19 @@ function drawLiveGridBlock(monitorConfig,subStreamChannel){
|
||||||
var html = buildLiveGridBlock(monitorConfig)
|
var html = buildLiveGridBlock(monitorConfig)
|
||||||
var monitorOrderEngaged = dashboardOptions().switches.monitorOrder === 1;
|
var monitorOrderEngaged = dashboardOptions().switches.monitorOrder === 1;
|
||||||
var wasLiveGridLogStreamOpenBefore = isLiveGridLogStreamOpenBefore(monitorId)
|
var wasLiveGridLogStreamOpenBefore = isLiveGridLogStreamOpenBefore(monitorId)
|
||||||
if(monitorOrderEngaged && $user.details.monitorOrder && $user.details.monitorOrder[monitorConfig.ke+''+monitorId]){
|
if(forcedMonitorsPerRow){
|
||||||
|
var windowHeight = $(window).height()
|
||||||
|
var legend = {
|
||||||
|
"1": 12,
|
||||||
|
"2": {w: 6, h: 4},
|
||||||
|
"3": 4,
|
||||||
|
"4": 3,
|
||||||
|
"6": 2,
|
||||||
|
}
|
||||||
|
var dimensionsConverted = legend[`${forcedMonitorsPerRow}`] || legend["2"];
|
||||||
|
width = dimensionsConverted.w ? dimensionsConverted.w : dimensionsConverted;
|
||||||
|
height = monitorHeight ? monitorHeight : dimensionsConverted.h ? dimensionsConverted.h : dimensionsConverted;
|
||||||
|
}else if(monitorOrderEngaged && $user.details.monitorOrder && $user.details.monitorOrder[monitorConfig.ke+''+monitorId]){
|
||||||
var saved = $user.details.monitorOrder[monitorConfig.ke+''+monitorId];
|
var saved = $user.details.monitorOrder[monitorConfig.ke+''+monitorId];
|
||||||
x = saved.x;
|
x = saved.x;
|
||||||
y = saved.y;
|
y = saved.y;
|
||||||
|
|
@ -303,7 +315,7 @@ function drawLiveGridBlock(monitorConfig,subStreamChannel){
|
||||||
x,
|
x,
|
||||||
y,
|
y,
|
||||||
h: isSmallMobile ? 1 : height,
|
h: isSmallMobile ? 1 : height,
|
||||||
w: isSmallMobile ? 4 : width,// !monitorOrderEngaged
|
w: isSmallMobile ? 4 : width,
|
||||||
content: html
|
content: html
|
||||||
});
|
});
|
||||||
if(isMobile)liveGridData.disable();
|
if(isMobile)liveGridData.disable();
|
||||||
|
|
@ -642,6 +654,14 @@ function closeLiveGridPlayer(monitorId,killElement){
|
||||||
console.log(err)
|
console.log(err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
function monitorWatchOnLiveGrid(monitorId, watchOff){
|
||||||
|
return mainSocket.f({f:'monitor',ff:watchOff ? 'watch_off' : 'watch_on',id: monitorId})
|
||||||
|
}
|
||||||
|
function monitorsWatchOnLiveGrid(monitorIds, watchOff){
|
||||||
|
monitorIds.forEach((monitorId) => {
|
||||||
|
monitorWatchOnLiveGrid(monitorId, watchOff)
|
||||||
|
})
|
||||||
|
}
|
||||||
function callMonitorToLiveGrid(v){
|
function callMonitorToLiveGrid(v){
|
||||||
var watchedOn = dashboardOptions().watch_on || {}
|
var watchedOn = dashboardOptions().watch_on || {}
|
||||||
if(watchedOn[v.ke] && watchedOn[v.ke][v.mid] === 1 && loadedMonitors[v.mid] && loadedMonitors[v.mid].mode !== 'stop'){
|
if(watchedOn[v.ke] && watchedOn[v.ke][v.mid] === 1 && loadedMonitors[v.mid] && loadedMonitors[v.mid].mode !== 'stop'){
|
||||||
|
|
@ -668,14 +688,16 @@ function loadPreviouslyOpenedLiveGridBlocks(){
|
||||||
}
|
}
|
||||||
function closeAllLiveGridPlayers(rememberClose){
|
function closeAllLiveGridPlayers(rememberClose){
|
||||||
$.each(loadedMonitors,function(monitorId,monitor){
|
$.each(loadedMonitors,function(monitorId,monitor){
|
||||||
mainSocket.f({
|
if(loadedLiveGrids[monitorId]){
|
||||||
f: 'monitor',
|
mainSocket.f({
|
||||||
ff: 'watch_off',
|
f: 'monitor',
|
||||||
id: monitor.mid
|
ff: 'watch_off',
|
||||||
})
|
id: monitor.mid
|
||||||
setTimeout(function(){
|
})
|
||||||
saveLiveGridBlockOpenState(monitorId,$user.ke,0)
|
setTimeout(function(){
|
||||||
},1000)
|
saveLiveGridBlockOpenState(monitorId,$user.ke,0)
|
||||||
|
},1000)
|
||||||
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
function saveLiveGridBlockOpenState(monitorId,groupKey,state){
|
function saveLiveGridBlockOpenState(monitorId,groupKey,state){
|
||||||
|
|
@ -1155,13 +1177,15 @@ $(document).ready(function(e){
|
||||||
var monitorId = d.mid || d.id
|
var monitorId = d.mid || d.id
|
||||||
var loadedMonitor = loadedMonitors[monitorId]
|
var loadedMonitor = loadedMonitors[monitorId]
|
||||||
var subStreamChannel = d.subStreamChannel
|
var subStreamChannel = d.subStreamChannel
|
||||||
|
var monitorsPerRow = cycleLiveOptions ? cycleLiveOptions.monitorsPerRow : null;
|
||||||
|
var monitorHeight = cycleLiveOptions ? cycleLiveOptions.monitorHeight : null;
|
||||||
if(!loadedMonitor.subStreamChannel && loadedMonitor.details.stream_type === 'useSubstream'){
|
if(!loadedMonitor.subStreamChannel && loadedMonitor.details.stream_type === 'useSubstream'){
|
||||||
toggleSubStream(monitorId,function(){
|
toggleSubStream(monitorId,function(){
|
||||||
drawLiveGridBlock(loadedMonitors[monitorId],subStreamChannel)
|
drawLiveGridBlock(loadedMonitors[monitorId],subStreamChannel,monitorsPerRow,monitorHeight)
|
||||||
saveLiveGridBlockOpenState(monitorId,$user.ke,1)
|
saveLiveGridBlockOpenState(monitorId,$user.ke,1)
|
||||||
})
|
})
|
||||||
}else{
|
}else{
|
||||||
drawLiveGridBlock(loadedMonitors[monitorId],subStreamChannel)
|
drawLiveGridBlock(loadedMonitors[monitorId],subStreamChannel,monitorsPerRow,monitorHeight)
|
||||||
saveLiveGridBlockOpenState(monitorId,$user.ke,1)
|
saveLiveGridBlockOpenState(monitorId,$user.ke,1)
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
|
||||||
|
|
@ -679,6 +679,13 @@ function muteMonitorAudio(monitorId,buttonEl){
|
||||||
var volumeIcon = monitorMutes[monitorId] !== 1 ? 'volume-up' : 'volume-off'
|
var volumeIcon = monitorMutes[monitorId] !== 1 ? 'volume-up' : 'volume-off'
|
||||||
if(buttonEl)buttonEl.find('i').removeClass('fa-volume-up fa-volume-off').addClass('fa-' + volumeIcon)
|
if(buttonEl)buttonEl.find('i').removeClass('fa-volume-up fa-volume-off').addClass('fa-' + volumeIcon)
|
||||||
}
|
}
|
||||||
|
function getMonitorsFromIds(monitorIds){
|
||||||
|
var foundMonitors = []
|
||||||
|
monitorIds.forEach((monitorId) => {
|
||||||
|
foundMonitors.push(loadedMonitors[monitorId])
|
||||||
|
})
|
||||||
|
return foundMonitors
|
||||||
|
}
|
||||||
function getListOfTagsFromMonitors(){
|
function getListOfTagsFromMonitors(){
|
||||||
var listOftags = {}
|
var listOftags = {}
|
||||||
$.each(loadedMonitors,function(monitorId,monitor){
|
$.each(loadedMonitors,function(monitorId,monitor){
|
||||||
|
|
@ -691,6 +698,24 @@ function getListOfTagsFromMonitors(){
|
||||||
})
|
})
|
||||||
return listOftags
|
return listOftags
|
||||||
}
|
}
|
||||||
|
function sanitizeTagList(tags){
|
||||||
|
var allTags = getListOfTagsFromMonitors()
|
||||||
|
return findCommonElements(allTags,tags)
|
||||||
|
}
|
||||||
|
function getMonitorsFromTags(tags){
|
||||||
|
var foundMonitors = {}
|
||||||
|
$.each(loadedMonitors,function(monitorId,monitor){
|
||||||
|
if(monitor.tags){
|
||||||
|
tags.forEach((tag) => {
|
||||||
|
if(monitor.tags.includes(tag)){
|
||||||
|
if(!foundMonitors[monitorId])foundMonitors[monitorId] = monitor
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
}
|
||||||
|
})
|
||||||
|
return Object.values(foundMonitors)
|
||||||
|
}
|
||||||
function buildMonitorGroupListFromTags(){
|
function buildMonitorGroupListFromTags(){
|
||||||
var html = ``
|
var html = ``
|
||||||
var listOftags = getListOfTagsFromMonitors()
|
var listOftags = getListOfTagsFromMonitors()
|
||||||
|
|
@ -997,6 +1022,18 @@ function getRowsMonitorId(rowEl){
|
||||||
function getMonitorEmbedLink(monitorConfig){
|
function getMonitorEmbedLink(monitorConfig){
|
||||||
return `${getApiPrefix('embed')}/${monitorConfig.mid}/fullscreen|jquery|relative`
|
return `${getApiPrefix('embed')}/${monitorConfig.mid}/fullscreen|jquery|relative`
|
||||||
}
|
}
|
||||||
|
function getRunningMonitors(asArray){
|
||||||
|
const foundMonitors = {}
|
||||||
|
$.each(loadedMonitors,function(monitorId,monitor){
|
||||||
|
if(
|
||||||
|
monitor.mode === 'start' ||
|
||||||
|
monitor.mode === 'record'
|
||||||
|
){
|
||||||
|
foundMonitors[monitorId] = monitor
|
||||||
|
}
|
||||||
|
})
|
||||||
|
return asArray ? Object.values(foundMonitors) : foundMonitors
|
||||||
|
}
|
||||||
$(document).ready(function(){
|
$(document).ready(function(){
|
||||||
$('body')
|
$('body')
|
||||||
.on('click','[system]',function(){
|
.on('click','[system]',function(){
|
||||||
|
|
|
||||||
|
|
@ -229,7 +229,6 @@ onWebSocketEvent(function (d){
|
||||||
})
|
})
|
||||||
$(document).ready(function(){
|
$(document).ready(function(){
|
||||||
loadHiddenSectionsInForms()
|
loadHiddenSectionsInForms()
|
||||||
loadSwitchStates()
|
|
||||||
loadClassToggleStates()
|
loadClassToggleStates()
|
||||||
loadDropdownToggleStates()
|
loadDropdownToggleStates()
|
||||||
loadLocalStorageInputValues()
|
loadLocalStorageInputValues()
|
||||||
|
|
@ -249,3 +248,6 @@ $(window).focus(function() {
|
||||||
}).blur(function() {
|
}).blur(function() {
|
||||||
windowFocus = false
|
windowFocus = false
|
||||||
})
|
})
|
||||||
|
onDashboardReady(function(){
|
||||||
|
loadSwitchStates()
|
||||||
|
})
|
||||||
|
|
|
||||||
|
|
@ -32,6 +32,7 @@
|
||||||
<script src="<%-window.libURL%>assets/js/bs5.monitorStates.js"></script>
|
<script src="<%-window.libURL%>assets/js/bs5.monitorStates.js"></script>
|
||||||
<script src="<%-window.libURL%>assets/js/bs5.schedules.js"></script>
|
<script src="<%-window.libURL%>assets/js/bs5.schedules.js"></script>
|
||||||
<script src="<%-window.libURL%>assets/js/bs5.liveGrid.js"></script>
|
<script src="<%-window.libURL%>assets/js/bs5.liveGrid.js"></script>
|
||||||
|
<script src="<%-window.libURL%>assets/js/bs5.liveGrid.cycle.js"></script>
|
||||||
<script src="<%-window.libURL%>assets/js/bs5.regionEditor.js"></script>
|
<script src="<%-window.libURL%>assets/js/bs5.regionEditor.js"></script>
|
||||||
<script src="<%-window.libURL%>assets/js/bs5.timelapseViewer.js"></script>
|
<script src="<%-window.libURL%>assets/js/bs5.timelapseViewer.js"></script>
|
||||||
<script src="<%-window.libURL%>assets/js/bs5.eventFilters.js"></script>
|
<script src="<%-window.libURL%>assets/js/bs5.eventFilters.js"></script>
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue