minor touch up

email-send-options-from-account
Moe 2021-10-15 13:42:19 -07:00
parent 5a73d4aecb
commit be632614c3
6 changed files with 8 additions and 291 deletions

View File

@ -34,11 +34,6 @@ if [ "$ffmpeginstall" = "y" ]; then
sudo chmod +x /usr/local/bin/ffserver
fi
echo "============="
if [ ! -e "./shinobi.sqlite" ]; then
sudo npm install jsonfile
sudo cp sql/shinobi.sample.sqlite shinobi.sqlite
sudo node tools/modifyConfiguration.js databaseType=sqlite3
fi
echo "Shinobi - Install NPM Libraries"
sudo npm i npm -g
sudo npm install --unsafe-perm

View File

@ -7405,44 +7405,6 @@ module.exports = function(s,config,lang){
}
}
},
"Camera Wizard": {
"section": "Camera Wizard",
"blocks": {
"Search Settings": {
"name": lang["FFprobe"],
"color": "blue",
"blockquote": `<i>"${lang['FFmpegTip']}"</i> - FFmpegTips`,
"section-pre-class": "col-md-12",
"info": [
{
"name": "url",
"field": lang['Complete Stream URL'],
"example": "http://192.168.88.126/videostream.cgi or /dev/video0",
},
{
"fieldType": "btn-group",
"btns": [
{
"fieldType": "btn",
"forForm": true,
"class": `btn-block btn-success`,
"btnContent": `${lang['Check']}`,
},
{
"fieldType": "btn",
"class": `btn-default fill`,
"btnContent": `${lang['Save']}`,
},
],
},
{
"fieldType": "div",
"class": "output_data",
}
]
},
}
},
"Monitor Stream Window": {
"section": "Monitor Stream Window",
// gridBlockClass: "",
@ -7757,9 +7719,11 @@ module.exports = function(s,config,lang){
{
"fieldType": "indicatorBar",
"percent": 0,
"color": 'warning',
"indicatorPercentClass": 'activeCameraCount',
"icon": "video-camera",
"name": "activeCameraCount",
"label": `<span class="activeCameraCount"><i class="fa fa-spinner fa-pulse"></i></span> ${lang['Active Monitors']}`,
"label": lang['Active Monitors'],
},
]
}

View File

@ -89,7 +89,7 @@ function createVideoRow(row,classOverride){
<div>
<a href="#" class="badge btn btn-primary open-video mr-1" title="${lang['Watch']}"><i class="fa fa-play-circle"></i></a>
<a class="badge btn btn-success" download href="${videoEndpoint}" title="${lang['Download']}"><i class="fa fa-download"></i></a>
<a class="badge btn btn-danger delete-video" title="${lang['Delete']}"><i class="fa fa-trash-o"></i></a>
<a href="#" class="badge btn btn-danger delete-video" title="${lang['Delete']}"><i class="fa fa-trash-o"></i></a>
</div>
</div>
<div class="card-body">

View File

@ -1,245 +0,0 @@
<%
buildOptions = function(field,possiblities){
if(!field)console.error('field',field)
var fieldElement = ''
possiblities.forEach(function(option){
if(option.optgroup){
fieldElement += '<optgroup label="' + option.name + '">'
fieldElement += buildOptions(field,option.optgroup)
fieldElement += '</optgroup>'
}else{
var selected = ''
if(option.value === field.default){
selected = 'selected'
}
fieldElement += '<option value="' + option.value + '" ' + selected + '>' + option.name + '</option>'
}
})
return fieldElement
}
drawBlock = function(monitorSettings){
if(monitorSettings.evaluation && !eval(monitorSettings.evaluation)){
return
}
var attributes = []
var styles = []
var sectionClass = []
var headerTitle = monitorSettings.headerTitle || lang[monitorSettings.name] || monitorSettings.name
if(monitorSettings.hidden === true){
styles.push('display:none')
}
if(monitorSettings.style){
styles.push(monitorSettings.style)
}
if(monitorSettings.isSection === true){
attributes.push('section')
}
if(monitorSettings.attribute){
attributes.push(monitorSettings.attribute)
}
if(!monitorSettings.id){
var userSettingsId = monitorSettings.name.replace(/[^a-zA-Z ]/g, '').replace(/[^a-zA-Z ]/g, '').replace(/ /g, '')
monitorSettings.id = userSettingsId
}
attributes.push(`id="${monitorSettings.id}"`)
if(monitorSettings.color){
sectionClass.push(monitorSettings.color)
}
if(monitorSettings['section-class']){
sectionClass.push(monitorSettings['section-class'])
}
if(monitorSettings.isAdvanced){ %>
<div class="h_us_input h_us_advanced" style="display:none">
<% }
if(monitorSettings['section-pre-pre-class']){ %>
<div class="<%- monitorSettings['section-pre-pre-class'] %>">
<% }
if(monitorSettings['section-pre-class']){ %>
<div class="<%- monitorSettings['section-pre-class'] %>">
<% }
%>
<<%- monitorSettings.isForm ? 'form' : 'div' %> <%- attributes.join(' ') %> style="<%- styles.join(';') %>" class="form-group-group <%- sectionClass.join(' ') %>">
<h4 class="monitor-section-header <%- monitorSettings.headerClass %>"><%- headerTitle %>
<% if(monitorSettings.headerButtons){ %>
<div class="pull-right">
<% monitorSettings.headerButtons.forEach(function(button){ %>
<a class="btn btn-success btn-xs <%- button.class %>">
<% if(button.icon){ %><i class="fa fa-<%- button.icon %>"></i><% } %>
<% if(button.text){ %><%- button.text %><% } %>
</a>
<% }) %>
</div>
<% } %>
</h4>
<div class="box-wrapper">
<% if(monitorSettings['input-mapping']){ %>
<div class="form-group-group forestgreen" style="display:none" input-mapping="<%- monitorSettings['input-mapping'] %>">
<h4><%-lang['Input Feed']%>
<div class="pull-right">
<a class="btn btn-success btn-xs add_map_row"><i class="fa fa-plus-square-o"></i></a>
</div>
</h4>
<div class="choices"></div>
</div>
<% } %>
<% if(monitorSettings.blockquote){ %>
<blockquote class="<%- monitorSettings.blockquoteClass || '' %>">
<%- monitorSettings.blockquote %>
</blockquote>
<% } %>
<% if(monitorSettings.blocks){
monitorSettings.blocks.forEach(function(settingsBlock){
drawBlock(settingsBlock)
})
}
if(monitorSettings.info){
monitorSettings.info.forEach(function(field){
if(field.isFormGroupGroup === true){
drawBlock(field)
}else{
if(field.notForSubAccount === true){
var notForSubAccount = '!details.sub'
if(!field.evaluation){
field.evaluation = notForSubAccount
}else{
field.evaluation += ' && ' + notForSubAccount
}
}
if(field.evaluation && !eval(field.evaluation)){
return
}
var hidden = ''
if(field.hidden === true){
hidden = 'style="display:none"'
}
var fieldClass = []
var attributes = []
if(field.name && field.name.indexOf('detail=') > -1){
attributes.push(field.name)
}else if(field.name){
attributes.push("name=" + field.name)
}
if(field.placeholder || field.default){
attributes.push(`placeholder="${field.placeholder || field.default}"`)
}else if(field.example){
attributes.push(`placeholder="Example : ${field.example}"`)
}
if(field.default){
attributes.push(`data-default="${field.default}"`)
}
if(field.attribute){
attributes.push(field.attribute)
}
if(field.selector){
attributes.push(`selector="${field.selector}"`)
}
if(field.id){
attributes.push(`id="${field.id}"`)
}
if(field.class){
fieldClass.push(`${field.class}`)
}
var possiblities = field.possible || []
var fieldType = field.fieldType || 'text'
var fieldElement = ''
var preFill = field.preFill || ''
switch(fieldType){
case'btn-group':
let fieldBtnContent = ``
field.btns.forEach((btn) => {
let btnClass = []
let btnAttributes = []
const btnBaseElement = btn.forForm || field.forForm ? 'button' : 'a'
if(btn.class){
btnClass.push(`${btn.class}`)
}
if(btn.attribute){
btnAttributes.push(btn.attribute)
}
fieldBtnContent += `<${btnBaseElement} class="btn ${btnClass.join(' ')}" ${btnAttributes.join(' ')}>${btn.btnContent}</${btnBaseElement}>`
})
fieldElement = `<div class="btn-group btn-group-justified ${fieldClass.join(' ')}" ${attributes.join(' ')}>${fieldBtnContent}</div>`
break;
case'btn':
baseElement = field.forForm ? 'button' : 'a'
fieldElement = `<${baseElement} class="btn btn-block ${fieldClass.join(' ')}" ${attributes.join(' ')}>${field.btnContent}</${baseElement}>`
break;
case'ul':
fieldElement = `<ul ${attributes.join(' ')} class="${fieldClass.join(' ')}" ></ul>`
break;
case'div':
fieldElement = `<div ${attributes.join(' ')} class="${fieldClass.join(' ')}" ></div>`
break;
case'form':
fieldElement = `<form ${attributes.join(' ')} class="${fieldClass.join(' ')}" ></form>`
break;
case'table':
fieldElement = `<table ${attributes.join(' ')} class="${fieldClass.join(' ')}"><tbody></tbody></table>`
break;
case'number':
if(field.numberMin){
attributes.push(`min="${field.numberMin}"`)
}
if(field.numberMax){
attributes.push(`max="${field.numberMax}"`)
}
fieldElement = '<div><input type="number" class="form-control" ' + attributes.join(' ') + '></div>'
break;
case'password':
fieldElement = '<div><input type="password" class="form-control" ' + attributes.join(' ') + '></div>'
break;
case'text':
fieldElement = `<div><input class="form-control" ${attributes.join(' ')} value="${preFill}"></div>`
break;
case'textarea':
fieldElement = '<div><textarea class="form-control" ' + attributes.join(' ') + '></textarea></div>'
break;
case'select':
fieldElement = '<div><select class="form-control" ' + attributes.join(' ') + '>'
fieldElement += buildOptions(field,possiblities)
fieldElement += '</select></div>'
break;
}
if(field['form-group-class-pre-pre-layer']){ %>
<div class="<%- field['form-group-class-pre-pre-layer'] %>">
<% }
if(field['form-group-class-pre-layer']){ %>
<div class="<%- field['form-group-class-pre-layer'] %>">
<% }
if(fieldType === 'ul' || fieldType === 'div' || fieldType === 'btn' || fieldType === 'btn-group' || fieldType === 'table' || fieldType === 'form'){ %>
<%- fieldElement %>
<% }else{ %>
<div <%- hidden %> class="form-group <%- field['form-group-class'] %>">
<label><div><span><%- field.field %>
<% if(field.description){ %>
<small><%- field.description %></small>
<% } %>
</span></div>
<%- fieldElement %>
</label>
</div>
<% }
}
if(field['form-group-class-pre-layer']){ %>
</div>
<% }
if(field['form-group-class-pre-pre-layer']){ %>
</div>
<% }
})
}
%>
</div>
</<%- monitorSettings.isForm ? 'form' : 'div' %>>
<%
if(monitorSettings['section-pre-class']){ %>
</div>
<% }
if(monitorSettings['section-pre-pre-class']){ %>
</div>
<% }
if(monitorSettings.isAdvanced){ %>
</div>
<% }
}
%>

View File

@ -24,6 +24,9 @@
<% include home/eventListWithPics.ejs %>
<% include confirm.ejs %>
<% include help.ejs %>
<% customAutoLoad.PageBlocks.forEach(function(block){ %>
<%- include(block) %>
<% }) %>
</main>
</div>
</div>

View File

@ -203,7 +203,7 @@ drawBlock = function(monitorSettings){
<small>${field.label}</small>
</div>
<div>
<small class="indicator-percent"><i class="fa fa-spinner fa-pulse"></i></small>
<small class="indicator-percent ${field.indicatorPercentClass || ''}"><i class="fa fa-spinner fa-pulse"></i></small>
</div>
</div>
<div>