mirror of
https://gitlab.com/Shinobi-Systems/ShinobiCE.git
synced 2025-03-09 15:40:15 +00:00
Support Shinobi at https://licenses.shinobi.video/subscribe
This commit is contained in:
parent
ef40f3f231
commit
167603dfb0
118 changed files with 16152 additions and 5441 deletions
|
@ -15,34 +15,4 @@
|
|||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script>
|
||||
//confirmwindow
|
||||
$.confirm={e:$('#confirm_window')};
|
||||
$.confirm.title=$.confirm.e.find('.modal-title span')
|
||||
$.confirm.body=$.confirm.e.find('.modal-body')
|
||||
$.confirm.footer=$.confirm.e.find('.modal-footer')
|
||||
$.confirm.click=function(x,e){
|
||||
$.confirm.footer.find('.confirmaction').remove()
|
||||
var createButton = function(x,place,callback){
|
||||
$.confirm.footer.prepend('<button type="button" class="btn '+x.class+' confirmaction confirmaction'+place+'">'+x.title+'</button>')
|
||||
if(!x.class){x.class='btn-success'}
|
||||
if(!x.title){x.title='Save changes'}
|
||||
$.confirm.footer.find('.confirmaction'+place).click(function(){
|
||||
$.confirm.e.modal('hide')
|
||||
callback();
|
||||
})
|
||||
}
|
||||
if(x instanceof Array){
|
||||
$.each(x,function(place,x){
|
||||
createButton(x,place,x.callback)
|
||||
})
|
||||
}else{
|
||||
createButton(x,0,e)
|
||||
}
|
||||
}
|
||||
$(document).ready(function(){
|
||||
$.confirm.e.on('hidden.bs.modal', function () {
|
||||
$.confirm.footer.find('.confirmaction').remove()
|
||||
})
|
||||
})
|
||||
</script>
|
||||
<script src="<%-window.libURL%>libs/js/dash2.confirm.js"></script>
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
<%
|
||||
if(!window.libURL)window.libURL = originalURL
|
||||
%>
|
||||
<link rel="icon" href="<%-window.libURL%>libs/img/icon/favicon.ico" type="image/x-icon" />
|
||||
<link rel="shortcut icon" href="<%-window.libURL%>libs/img/icon/favicon.ico" type="image/x-icon" />
|
||||
<link rel="icon" href="<%-window.libURL%><%-config.webFavicon%>" type="image/x-icon" />
|
||||
<link rel="shortcut icon" href="<%-window.libURL%><%-config.webFavicon%>" type="image/x-icon" />
|
||||
<meta name="apple-mobile-web-app-capable" content="yes">
|
||||
<meta name="apple-mobile-web-app-status-bar-style" content="black">
|
||||
<meta name="apple-mobile-web-app-title" content="Shinobi">
|
||||
<meta name="apple-mobile-web-app-title" content="<%-config.webPageTitle%>">
|
||||
<link rel="apple-touch-icon" href="<%-window.libURL%>libs/img/icon/apple-touch-icon.png" />
|
||||
<link rel="apple-touch-icon" sizes="57x57" href="<%-window.libURL%>libs/img/icon/apple-touch-icon-57x57.png" />
|
||||
<link rel="apple-touch-icon" sizes="72x72" href="<%-window.libURL%>libs/img/icon/apple-touch-icon-72x72.png" />
|
||||
|
|
|
@ -2,4 +2,4 @@
|
|||
<meta name="ROBOTS" content="NOINDEX, NOFOLLOW">
|
||||
<meta name="viewport" content="width=device-width, maximum-scale=1, user-scalable=no" />
|
||||
<meta name="description" content="Shinobi, Open Source CCTV Technology">
|
||||
<meta name="author" content="Moe Alam, moeiscool on GitHub">
|
||||
<meta name="author" content="Moe Alam of Shinobi Systems">
|
||||
|
|
1
web/pages/blocks/header-title.ejs
Normal file
1
web/pages/blocks/header-title.ejs
Normal file
|
@ -0,0 +1 @@
|
|||
<title><%- config.webPageTitle %></title>
|
|
@ -1,5 +1,6 @@
|
|||
<head>
|
||||
<title><%-lang.Shinobi%></title>
|
||||
<!-- Powered by Shinobi, http://shinobi.video -->
|
||||
<% include header-title.ejs %>
|
||||
<% if(!window.libURL)window.libURL = originalURL + global.s.checkCorrectPathEnding(config.webPaths.home) %>
|
||||
<% include header-meta.ejs %>
|
||||
<meta http-equiv="content-type" content="text/html;charset=UTF-8">
|
||||
|
@ -8,6 +9,7 @@
|
|||
<link rel="stylesheet" href="<%-window.libURL%>libs/css/login.css">
|
||||
<link rel="stylesheet" href="<%-window.libURL%>libs/css/material.min.css">
|
||||
<link rel="stylesheet" href="<%-window.libURL%>libs/css/material.style.css">
|
||||
<link rel="stylesheet" href="<%-window.libURL%>libs/css/roboto.css" type="text/css" />
|
||||
<meta name="mobile-web-app-capable" content="yes">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0">
|
||||
<% include header-favicon.ejs %>
|
||||
|
|
|
@ -1,45 +1,64 @@
|
|||
<!--Help Window-->
|
||||
<!--
|
||||
<div class="modal fade" id="help_window" tabindex="-1" role="dialog" aria-labelledby="help_windowLabel" aria-hidden="true">
|
||||
<div class="modal-dialog" role="document">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
||||
<span aria-hidden="true">×</span>
|
||||
</button>
|
||||
<h4 class="modal-title" id="help_windowLabel"><i class="fa fa-question-circle"></i> <span><%-lang.Help%></span></h4>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<a href="http://shinobi.video/docs/donate"><img src="<%-window.libURL%>libs/img/icon/apple-touch-icon-152x152.png" class="pull-right" style="border-radius:50%;margin-left:20px;border: 1px solid #c3996b;"></a>
|
||||
<p>For information about how to use Shinobi you can check out the <a target="_blank" href="http://shinobi.video/docs">Docs</a>.</p>
|
||||
<p>If you would like to get professional support please consider ordering a <a href="http://shinobi.video/support">support package</a>. You can find <b>Moe Alam, The Author</b>, on the <a target="_blank" href="https://discord.gg/ehRd8Zz">Discord</a> Community Chat. For general questions and community support you can also try <a href="https://www.reddit.com/r/ShinobiCCTV">Reddit</a>.</p>
|
||||
<p><strong>Support </strong> <a href="http://shinobi.video/support">from @moeiscool</a></p>
|
||||
<p><b>Like Shinobi?</b> Please consider donating!</p>
|
||||
<div><p><strong>Paypal Address :</strong> <a href="https://www.paypal.me/ShinobiCCTV" target="_blank">paypal@m03.ca</a></p>
|
||||
<% if(!config.userHasSubscribed){ %>
|
||||
<div class="modal fade" id="help_window" tabindex="-1" role="dialog" aria-labelledby="help_windowLabel" aria-hidden="true">
|
||||
<div class="modal-dialog" role="document">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
||||
<span aria-hidden="true">×</span>
|
||||
</button>
|
||||
<h4 class="modal-title" id="help_windowLabel"><i class="fa fa-question-circle"></i> <span><%-lang.Help%></span></h4>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<blockquote class="blockquoteInHelp">
|
||||
<a href="https://licenses.shinobi.video/subscribe" target="_blank"><img src="<%-window.libURL%>libs/img/icon/apple-touch-icon-152x152.png" class="pull-right" style="border-radius:50%;margin-left:20px;border: 1px solid #c3996b;"></a>
|
||||
<p>For information about how to use Shinobi you can check out the <a target="_blank" href="http://shinobi.video/docs">Docs</a>.</p>
|
||||
<p><a target="_blank" href="https://discord.gg/ehRd8Zz">Discord</a> Community Chat is great for meeting people and asking questions. For general questions and community support you can also try the <a href="https://www.reddit.com/r/ShinobiCCTV">Reddit forum</a>.</p>
|
||||
</blockquote>
|
||||
<blockquote class="blockquoteInHelp" style="margin-bottom:10px">
|
||||
<b>Support the development by subscribing</b> to any of the following and put your subscription key in the configuration file (conf.json), then restart Shinobi and this annoying popup window won't appear anymore, thanks! <i class="fa fa-smile-o"></i>
|
||||
<br><br>
|
||||
<code>"subscriptionId":"sub_XXXXXXXXXXXX",</code>
|
||||
<br><br>
|
||||
<p>If you already are supporting the development in a different way, please contact us and we can get this popup to go away for you :) Cheers!</p>
|
||||
</blockquote>
|
||||
<div style="margin-bottom:10px;text-align:center">
|
||||
<a href="https://licenses.shinobi.video/subscribe?planSubscribe=plan_G31AZ9mknNCa6z" target="_blank" class="btn btn-default"><i class="fa fa-share-square-o" aria-hidden="true"></i> Shinobi Mobile License ($5/m)</a>
|
||||
<a href="https://licenses.shinobi.video/subscribe?planSubscribe=plan_G3LGdNwA8lSmQy" target="_blank" class="btn btn-default"><i class="fa fa-share-square-o" aria-hidden="true"></i> Shinobi Pro License ($75/m)</a>
|
||||
</div>
|
||||
<div style="margin-bottom:5px;text-align:center">
|
||||
<a href="https://licenses.shinobi.video/subscribe?planSubscribe=plan_G42jNgIqXaWmIC" target="_blank" class="btn btn-default"><i class="fa fa-share-square-o" aria-hidden="true"></i> Tiny Support Subscription ($10/m)</a>
|
||||
</div>
|
||||
<div>
|
||||
<!-- <iframe src="https://shinobi.video/ads" style="width:100%;height:250px;border:none;"></iframe> -->
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-danger pull-left hide_donate"><%-lang['Close']%></button>
|
||||
<a target="_blank" href="http://discordapp.com/invite/mdhmvuH/" class="btn btn-primary"><%-lang['Chat on Discord']%></a>
|
||||
<a target="_blank" href="http://shinobi.video/docs" class="btn btn-success"><%-lang.Documentation%></a>
|
||||
</div>
|
||||
</div>
|
||||
<p><strong>Bitcoin Address :</strong> 1FvC7M8P9wVT1hXwHj8ugxpZj8JGfGyUDu</p>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-danger pull-left hide_donate"><%-lang['Don\'t show this anymore']%></button>
|
||||
<a target="_blank" href="http://discordapp.com/invite/mdhmvuH/" class="btn btn-primary"><%-lang['Chat on Discord']%></a>
|
||||
<a target="_blank" href="http://shinobi.video/docs" class="btn btn-success"><%-lang.Documentation%></a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script>
|
||||
$(document).ready(function(){
|
||||
$.help={hide:$('#help_window .hide_donate'),e:$('#help_window')}
|
||||
if($.ccio.op().hide_donate!==1){
|
||||
setTimeout(function(){
|
||||
$.help.e.modal('show')
|
||||
},1000*60*5)
|
||||
$.help.hide.click(function(){
|
||||
$.ccio.op('hide_donate',1);
|
||||
$.help.e.modal('hide');
|
||||
})
|
||||
}else{
|
||||
$.help.hide.hide()
|
||||
}
|
||||
})
|
||||
</script>-->
|
||||
<style>
|
||||
.blockquoteInHelp:before,.blockquoteInHelp:after{
|
||||
display:none;
|
||||
}
|
||||
</style>
|
||||
<script>
|
||||
$(document).ready(function(){
|
||||
$.help={hide:$('#help_window .hide_donate'),e:$('#help_window')}
|
||||
// if($.ccio.op().hide_donate !== 1){
|
||||
setTimeout(function(){
|
||||
$.help.e.modal('show')
|
||||
},1000*60*0.2)
|
||||
$.help.hide.click(function(){
|
||||
// $.ccio.op('hide_donate',1);
|
||||
$.help.e.modal('hide');
|
||||
})
|
||||
// }else{
|
||||
// $.help.hide.hide()
|
||||
// }
|
||||
})
|
||||
</script>
|
||||
<% } %>
|
||||
|
|
|
@ -31,11 +31,10 @@
|
|||
<div class="form-group-group blue">
|
||||
<h4><%- lang['Monitors'] %>
|
||||
<div class="pull-right">
|
||||
<a class="btn btn-default btn-xs add"> <i class="fa fa-plus"></i> </a>
|
||||
<a class="btn btn-success btn-xs add-monitor"> <i class="fa fa-plus"></i> </a>
|
||||
</div>
|
||||
</h4>
|
||||
<div id="monitorStatesMonitors">
|
||||
</div>
|
||||
<div id="monitorStatesMonitors"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
|
@ -46,137 +45,4 @@
|
|||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<script>
|
||||
$(document).ready(function(){
|
||||
$.monitorStates = {
|
||||
e: $('#monitorStates'),
|
||||
selector: $('#monitorStatesSelector'),
|
||||
monitors: $('#monitorStatesMonitors'),
|
||||
loaded: {}
|
||||
}
|
||||
$.monitorStates.f = $.monitorStates.e.find('form')
|
||||
$.monitorStates.loadPresets = function(callback){
|
||||
$.get($.ccio.init('location',$user) + $user.auth_token + '/monitorStates/' + $user.ke,function(d){
|
||||
var html = ''
|
||||
$.each(d.presets,function(n,v){
|
||||
$.monitorStates.loaded[v.name] = v
|
||||
html += '<option value="' + v.name + '">' + v.name + '</option>'
|
||||
})
|
||||
$.monitorStates.selector.find('optgroup').html(html)
|
||||
if(callback)callback()
|
||||
})
|
||||
}
|
||||
$.monitorStates.e.on('shown.bs.modal', function (e) {
|
||||
if($.monitorStates.selector.val() === '')$.monitorStates.loadPresets()
|
||||
})
|
||||
$.monitorStates.add = function(loaded,doAppend){
|
||||
if(!loaded){
|
||||
json = ''
|
||||
}else{
|
||||
json = JSON.stringify(loaded,null,3)
|
||||
}
|
||||
var html = '<div class="state-monitor-row"><h4 style="margin-top:7.5px;margin-bottom:7.5px"><small> </small><div class="pull-right"><a class="btn btn-danger btn-xs delete-monitor"><i class="fa fa-trash-o"></i></a></div></h4><textarea class="json form-control" style="width:100%;height:300px">' + json +'</textarea></div>'
|
||||
if(doAppend)$.monitorStates.monitors.append(html)
|
||||
return html
|
||||
}
|
||||
$.monitorStates.e.find('.add').click(function(e){
|
||||
$.monitorStates.add(null,true)
|
||||
})
|
||||
$.monitorStates.e.on('change','.json',function(e){
|
||||
var el = $(this)
|
||||
var val = el.val()
|
||||
try{
|
||||
el.css('border-color','green')
|
||||
var parsed = JSON.parse(val)
|
||||
el.val(JSON.stringify(parsed,null,3))
|
||||
}catch(err){
|
||||
el.css('border-color','red')
|
||||
return $.ccio.init('note',{title:lang['Invalid JSON'],text:lang.InvalidJSONText,type:'error'})
|
||||
}
|
||||
})
|
||||
$.monitorStates.e.on('click','.delete',function(e){
|
||||
$.confirm.e.modal('show');
|
||||
$.confirm.title.text(lang['Delete Monitor States Preset']);
|
||||
$.confirm.body.html(lang.deleteMonitorStateText1);
|
||||
$.confirm.click({title:'Delete',class:'btn-danger'},function(){
|
||||
var form = $.monitorStates.f.serializeObject()
|
||||
$.post($.ccio.init('location',$user) + $user.auth_token + '/monitorStates/' + $user.ke + '/' + form.name + '/delete',function(d){
|
||||
$.ccio.log(d)
|
||||
if(d.ok === true){
|
||||
$.monitorStates.loadPresets()
|
||||
$.ccio.init('note',{title:lang.Success,text:d.msg,type:'success'})
|
||||
}
|
||||
})
|
||||
})
|
||||
})
|
||||
$.monitorStates.e.on('click','.delete-monitor',function(e){
|
||||
var el = $(this).parents('.state-monitor-row')
|
||||
$.confirm.e.modal('show');
|
||||
$.confirm.title.text(lang['Delete Monitor State']);
|
||||
$.confirm.body.html(lang.deleteMonitorStateText2)
|
||||
$.confirm.click({title:'Delete',class:'btn-danger'},function(){
|
||||
el.remove()
|
||||
})
|
||||
})
|
||||
$.monitorStates.selector.change(function(e){
|
||||
var selected = $(this).val()
|
||||
var loaded = $.monitorStates.loaded[selected]
|
||||
var namespace = $.monitorStates.e.find('[name="name"]')
|
||||
var deleteButton = $.monitorStates.e.find('.delete')
|
||||
if(loaded){
|
||||
namespace.val(loaded.name)
|
||||
var html = ''
|
||||
$.each(loaded.details.monitors,function(n,v){
|
||||
html += $.monitorStates.add(v)
|
||||
})
|
||||
$.monitorStates.monitors.html(html)
|
||||
deleteButton.show()
|
||||
}else{
|
||||
namespace.val('')
|
||||
$.monitorStates.monitors.empty()
|
||||
deleteButton.hide()
|
||||
}
|
||||
})
|
||||
$.monitorStates.f.submit(function(e){
|
||||
e.preventDefault()
|
||||
var el = $(this)
|
||||
var form = el.serializeObject()
|
||||
var monitors = []
|
||||
var failedToParseAJson = false
|
||||
var rows = $.monitorStates.monitors.find('.state-monitor-row')
|
||||
if(form.name === ''){
|
||||
return $.ccio.init('note',{title:lang['Invalid Data'],text:lang['Name cannot be empty.'],type:'error'})
|
||||
}
|
||||
if(rows.length === 0){
|
||||
return $.ccio.init('note',{title:lang['Invalid Data'],text:lang['Must be atleast one row'],type:'error'})
|
||||
}
|
||||
rows.each(function(n,v){
|
||||
var el = $(v)
|
||||
try{
|
||||
console.log(el.find('.json').val())
|
||||
var json = JSON.parse(el.find('.json').val())
|
||||
if(json.mid)monitors.push(json)
|
||||
}catch(err){
|
||||
console.log(err)
|
||||
failedToParseAJson = true
|
||||
}
|
||||
})
|
||||
if(failedToParseAJson === true){
|
||||
return $.ccio.init('note',{title:lang['Invalid JSON'],text:lang.InvalidJSONText,type:'error'})
|
||||
}
|
||||
var data = {
|
||||
monitors: monitors
|
||||
}
|
||||
$.post($.ccio.init('location',$user) + $user.auth_token + '/monitorStates/' + $user.ke + '/' + form.name + '/insert',{data:data},function(d){
|
||||
$.ccio.log(d)
|
||||
if(d.ok === true){
|
||||
$.monitorStates.loadPresets(function(){
|
||||
$.monitorStates.selector.val(form.name)
|
||||
})
|
||||
$.ccio.init('note',{title:lang.Success,text:d.msg,type:'success'})
|
||||
}
|
||||
})
|
||||
return false;
|
||||
})
|
||||
})
|
||||
</script>
|
||||
<script src="<%-window.libURL%>libs/js/dash2.monitorStates.js"></script>
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -13,10 +13,10 @@
|
|||
<thead>
|
||||
<tr>
|
||||
<th><div class="checkbox"><input id="multimon_select_all" type="checkbox"><label for="multimon_select_all"></label></div></th>
|
||||
<th> </th>
|
||||
<th><%-lang['Name']%></th>
|
||||
<th><%-lang['Mode']%></th>
|
||||
<th> </th>
|
||||
<th> </th>
|
||||
<th><%-lang['Stream']%></th>
|
||||
<th> </th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
@ -25,7 +25,7 @@
|
|||
</table>
|
||||
</form>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-default pull-left" data-dismiss="modal">Close</button>
|
||||
<button type="button" class="btn btn-default pull-left" data-dismiss="modal"><%-lang.Close%></button>
|
||||
<div>
|
||||
<a class="btn btn-danger delete"><%-lang['Delete']%></a>
|
||||
<a class="btn btn-primary save_config"><%-lang['Export']%></a>
|
||||
|
|
85
web/pages/blocks/powerVideo2.ejs
Normal file
85
web/pages/blocks/powerVideo2.ejs
Normal file
|
@ -0,0 +1,85 @@
|
|||
<!--Video File Window-->
|
||||
<div class="modal full fade dark" id="powerVideo" role="dialog" aria-labelledby="powerVideoLabel" aria-hidden="true">
|
||||
<div class="modal-dialog" role="document">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
||||
<span aria-hidden="true">×</span>
|
||||
</button>
|
||||
<h4 class="modal-title" id="powerVideoLabel"><i class="fa fa-map-marker"></i> <%-lang['Power Video Viewer']%><span style="display:none" class="_loading"> <i class="fa fa-pulse fa-spinner"></i></span></h4>
|
||||
</div>
|
||||
<div class="modal-body" style="overflow:inherit">
|
||||
<div class="row">
|
||||
<div class="col-md-4" id="powerVideoTabs" tab-chooser-parent>
|
||||
<div class="form-group-group grey text-center">
|
||||
<h4></h4>
|
||||
<div class="btn-group" id="powerVideoTabButtons">
|
||||
<button type="button" class="btn btn-primary btn-sm" tab-chooser="monitors"><%- lang.Monitors %></button>
|
||||
<button type="button" class="btn btn-primary btn-sm" tab-chooser="settings"><%- lang['Search Settings'] %></button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group-group grey" tab-section="monitors" style="max-height:265px;overflow:auto;">
|
||||
<h4><%-lang.Monitors%></h4>
|
||||
<div id="powerVideoMonitorsList" class="list-group"></div>
|
||||
</div>
|
||||
<div class="form-group-group grey" tab-section="settings" style="display:none">
|
||||
<h4><%- lang['Search Settings'] %></h4>
|
||||
<div class="form-group">
|
||||
<label><%- lang['Date Range'] %></label>
|
||||
<input id="powerVideoDateRange" class="form-control"></input>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-md-6">
|
||||
<div class="form-group">
|
||||
<label><%- lang['Video Limit'] %> <small>(<%- lang['Per Monitor'] %>)</small></label>
|
||||
<input id="powerVideoVideoLimit" class="form-control" placeholder="0"></input>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<div class="form-group">
|
||||
<label><%- lang['Event Limit'] %> <small>(<%- lang['Per Monitor'] %>)</small></label>
|
||||
<input id="powerVideoEventLimit" class="form-control" placeholder="500"></input>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-8">
|
||||
<div id="powerVideoMonitorViews"></div>
|
||||
<div id="powerVideoMonitorControls" class="text-center">
|
||||
<div class="btn-group">
|
||||
<button type="button" powerVideo-control="toggleZoom" class="btn btn-sm btn-default" title="<%- lang['Zoom In'] %>"> <i class="fa fa-search-plus"></i> </button>
|
||||
</div>
|
||||
<div class="btn-group">
|
||||
<button type="button" powerVideo-control="previousVideoAll" class="btn btn-sm btn-default" title="<%- lang['Previous Video'] %>"> <i class="fa fa-arrow-circle-left"></i> </button>
|
||||
<button type="button" powerVideo-control="playAll" class="btn btn-sm btn-danger" title="<%- lang.Play %>"> <i class="fa fa-play"></i> </button>
|
||||
<button type="button" powerVideo-control="pauseAll" class="btn btn-sm btn-default" title="<%- lang.Pause %>"> <i class="fa fa-pause"></i> </button>
|
||||
<button type="button" powerVideo-control="nextVideoAll" class="btn btn-sm btn-default" title="<%- lang['Next Video'] %>"> <i class="fa fa-arrow-circle-right"></i> </button>
|
||||
</div>
|
||||
<div class="btn-group" style="font-family: monospace;">
|
||||
<button type="button" powerVideo-control="playSpeedAll" data-speed="1" class="btn btn-sm btn-default">1</button>
|
||||
<button type="button" powerVideo-control="playSpeedAll" data-speed="5" class="btn btn-sm btn-default">5</button>
|
||||
<button type="button" powerVideo-control="playSpeedAll" data-speed="10" class="btn btn-sm btn-default">10</button>
|
||||
<button type="button" powerVideo-control="playSpeedAll" data-speed="15" class="btn btn-sm btn-default">15</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-md-12" style="margin-top:10px;">
|
||||
<div id="powerVideoTimelineStrips">
|
||||
<div class="loading"><i class="fa fa-hand-pointer-o"></i><div class="epic-text"><%- lang['Select a Monitor'] %></div></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-default" data-dismiss="modal"><%-lang['Close']%></button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<link rel="stylesheet" href="<%-window.libURL%>libs/css/vis.min.css">
|
||||
<link rel="stylesheet" href="<%-window.libURL%>libs/css/dash2.powerVideo2.css">
|
||||
<script src="<%-window.libURL%>libs/js/vis.min.js" async></script>
|
||||
<script src="<%-window.libURL%>libs/js/dash2.powerVideo2.js" async></script>
|
|
@ -69,7 +69,7 @@
|
|||
</div>
|
||||
<div class="form-group">
|
||||
<label><div><span><%-lang['Camera Password']%></span></div>
|
||||
<div><input class="form-control" name="pass"></div>
|
||||
<div><input class="form-control" type="password" name="pass"></div>
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-group text-right">
|
||||
|
|
|
@ -35,16 +35,195 @@
|
|||
</select></div>
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label><div><span><%-lang['Timezone Offset']%></span></div>
|
||||
<div><select class="form-control" name="timezone">
|
||||
<% [
|
||||
{
|
||||
"text": "UTC−12:00, Y",
|
||||
"value": -720
|
||||
},
|
||||
{
|
||||
"text": "UTC−11:00, X",
|
||||
"value": -660
|
||||
},
|
||||
{
|
||||
"text": "UTC−10:00, W",
|
||||
"value": -600
|
||||
},
|
||||
{
|
||||
"text": "UTC−09:30, V†",
|
||||
"value": -570
|
||||
},
|
||||
{
|
||||
"text": "UTC−09:00, V",
|
||||
"value": -540
|
||||
},
|
||||
{
|
||||
"text": "UTC−08:00, U",
|
||||
"value": -480
|
||||
},
|
||||
{
|
||||
"text": "UTC−07:00, T",
|
||||
"value": -420
|
||||
},
|
||||
{
|
||||
"text": "UTC−06:00, S",
|
||||
"value": -360
|
||||
},
|
||||
{
|
||||
"text": "UTC−05:00, R",
|
||||
"value": -300
|
||||
},
|
||||
{
|
||||
"text": "UTC−04:00, Q",
|
||||
"value": -240
|
||||
},
|
||||
{
|
||||
"text": "UTC−03:30, P†",
|
||||
"value": -210
|
||||
},
|
||||
{
|
||||
"text": "UTC−03:00, P",
|
||||
"value": -180
|
||||
},
|
||||
{
|
||||
"text": "UTC−02:00, O",
|
||||
"value": -120
|
||||
},
|
||||
{
|
||||
"text": "UTC−01:00, N",
|
||||
"value": -60
|
||||
},
|
||||
{
|
||||
"text": "UTC±00:00, Z",
|
||||
"value": 0,
|
||||
"selected": true
|
||||
},
|
||||
{
|
||||
"text": "UTC+01:00, A",
|
||||
"value": 60
|
||||
},
|
||||
{
|
||||
"text": "UTC+02:00, B",
|
||||
"value": 120
|
||||
},
|
||||
{
|
||||
"text": "UTC+03:00, C",
|
||||
"value": 180
|
||||
},
|
||||
{
|
||||
"text": "UTC+03:30, C†",
|
||||
"value": 210
|
||||
},
|
||||
{
|
||||
"text": "UTC+04:00, D",
|
||||
"value": 240
|
||||
},
|
||||
{
|
||||
"text": "UTC+04:30, D†",
|
||||
"value": 270
|
||||
},
|
||||
{
|
||||
"text": "UTC+05:00, E",
|
||||
"value": 300
|
||||
},
|
||||
{
|
||||
"text": "UTC+05:30, E†",
|
||||
"value": 330
|
||||
},
|
||||
{
|
||||
"text": "UTC+05:45, E*",
|
||||
"value": 345
|
||||
},
|
||||
{
|
||||
"text": "UTC+06:00, F",
|
||||
"value": 360
|
||||
},
|
||||
{
|
||||
"text": "UTC+06:30, F†",
|
||||
"value": 390
|
||||
},
|
||||
{
|
||||
"text": "UTC+07:00, G",
|
||||
"value": 420
|
||||
},
|
||||
{
|
||||
"text": "UTC+08:00, H",
|
||||
"value": 480
|
||||
},
|
||||
{
|
||||
"text": "UTC+08:45, H*",
|
||||
"value": 525
|
||||
},
|
||||
{
|
||||
"text": "UTC+09:00, I",
|
||||
"value": 540
|
||||
},
|
||||
{
|
||||
"text": "UTC+09:30, I†",
|
||||
"value": 570
|
||||
},
|
||||
{
|
||||
"text": "UTC+10:00, K",
|
||||
"value": 600
|
||||
},
|
||||
{
|
||||
"text": "UTC+10:30, K†",
|
||||
"value": 630
|
||||
},
|
||||
{
|
||||
"text": "UTC+11:00, L",
|
||||
"value": 660
|
||||
},
|
||||
{
|
||||
"text": "UTC+12:00, M",
|
||||
"value": 720
|
||||
},
|
||||
{
|
||||
"text": "UTC+12:45, M*",
|
||||
"value": 765
|
||||
},
|
||||
{
|
||||
"text": "UTC+13:00, M†",
|
||||
"value": 780
|
||||
},
|
||||
{
|
||||
"text": "UTC+14:00, M†",
|
||||
"value": 840
|
||||
}
|
||||
].forEach(function(option){
|
||||
var selected = ''
|
||||
if(option.selected)selected = 'selected'
|
||||
%>
|
||||
<option value="<%- option.value %>" <%- selected %>><%- option.text %></option>
|
||||
<% }) %>
|
||||
</select></div>
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label><div><span><%-lang['Start']%></span></div>
|
||||
<div><input class="form-control" name="start" placeholder="HH:ss"></div>
|
||||
<div><input class="form-control" name="start" placeholder="HH:mm"></div>
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label><div><span><%-lang['End']%></span></div>
|
||||
<div><input class="form-control" name="end" placeholder="HH:ss"></div>
|
||||
<div><input class="form-control" name="end" placeholder="HH:mm"></div>
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label><div><span><%-lang['Days']%></span></div>
|
||||
<div><select class="form-control" style="min-height:100px" multiple name="days">
|
||||
<option value="0"><%- lang.Sunday %></option>
|
||||
<option value="1"><%- lang.Monday %></option>
|
||||
<option value="2"><%- lang.Tuesday %></option>
|
||||
<option value="3"><%- lang.Wednesday %></option>
|
||||
<option value="4"><%- lang.Thursday %></option>
|
||||
<option value="5"><%- lang.Friday %></option>
|
||||
<option value="6"><%- lang.Saturday %></option>
|
||||
</select></div>
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label><div><span><%-lang['Monitor States']%></span></div>
|
||||
<div><select class="form-control" style="min-height:100px" multiple name="monitorStates">
|
||||
|
@ -60,120 +239,4 @@
|
|||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<script>
|
||||
$(document).ready(function(){
|
||||
$.schedules = {
|
||||
e: $('#schedules'),
|
||||
selector: $('#schedulesSelector'),
|
||||
loadedMonitorStates: {},
|
||||
loadedSchedules: {}
|
||||
}
|
||||
$.schedules.f = $.schedules.e.find('form')
|
||||
$.schedules.selectedStates = $.schedules.e.find('[name="monitorStates"]')
|
||||
$.schedules.loadSchedules = function(callback){
|
||||
$.get($.ccio.init('location',$user) + $user.auth_token + '/schedule/' + $user.ke,function(d){
|
||||
console.log(d)
|
||||
var html = ''
|
||||
$.each(d.schedules,function(n,v){
|
||||
$.schedules.loadedSchedules[v.name] = v
|
||||
html += $.ccio.tm('option',{
|
||||
id: v.name,
|
||||
name: v.name
|
||||
})
|
||||
})
|
||||
$.schedules.selector.find('optgroup').html(html)
|
||||
if(callback)callback()
|
||||
})
|
||||
}
|
||||
$.schedules.loadMonitorStates = function(){
|
||||
$.get($.ccio.init('location',$user) + $user.auth_token + '/monitorStates/' + $user.ke,function(d){
|
||||
var html = ''
|
||||
$.each(d.presets,function(n,v){
|
||||
$.schedules.loadedMonitorStates[v.name] = v
|
||||
html += $.ccio.tm('option',{
|
||||
id: v.name,
|
||||
name: v.name
|
||||
})
|
||||
})
|
||||
$.schedules.selectedStates.html(html)
|
||||
})
|
||||
}
|
||||
$.schedules.e.on('shown.bs.modal', function (e) {
|
||||
$.schedules.loadMonitorStates()
|
||||
$.schedules.loadSchedules()
|
||||
})
|
||||
$.schedules.e.on('click','.delete',function(e){
|
||||
$.confirm.e.modal('show');
|
||||
$.confirm.title.text(lang['Delete Monitor States Preset']);
|
||||
$.confirm.body.html(lang.deleteMonitorStateText1);
|
||||
$.confirm.click({title:'Delete',class:'btn-danger'},function(){
|
||||
var form = $.schedules.f.serializeObject()
|
||||
$.post($.ccio.init('location',$user) + $user.auth_token + '/schedule/' + $user.ke + '/' + form.name + '/delete',function(d){
|
||||
$.ccio.log(d)
|
||||
if(d.ok === true){
|
||||
$.schedules.loadSchedules()
|
||||
$.ccio.init('note',{title:lang.Success,text:d.msg,type:'success'})
|
||||
}
|
||||
})
|
||||
})
|
||||
})
|
||||
$.schedules.selector.change(function(e){
|
||||
var selected = $(this).val()
|
||||
var loaded = $.schedules.loadedSchedules[selected]
|
||||
var namespace = $.schedules.e.find('[name="name"]')
|
||||
var deleteButton = $.schedules.e.find('.delete')
|
||||
$.schedules.selectedStates.find('option:selected').removeAttr('selected')
|
||||
if(loaded){
|
||||
namespace.val(loaded.name)
|
||||
var html = ''
|
||||
$.each(loaded,function(n,v){
|
||||
$.schedules.f.find('[name="' + n + '"]').val(v)
|
||||
})
|
||||
$.each(loaded.details.monitorStates,function(n,v){
|
||||
$.schedules.selectedStates.find('option[value="' + v + '"]').prop('selected',true)
|
||||
})
|
||||
deleteButton.show()
|
||||
}else{
|
||||
namespace.val('')
|
||||
deleteButton.hide()
|
||||
}
|
||||
})
|
||||
$.schedules.f.submit(function(e){
|
||||
e.preventDefault()
|
||||
var el = $(this)
|
||||
var form = el.serializeObject()
|
||||
var monitors = []
|
||||
var failedToParseAJson = false
|
||||
var rows = $.monitorStates.monitors.find('.state-monitor-row')
|
||||
if(form.name === ''){
|
||||
return $.ccio.init('note',{title:lang['Invalid Data'],text:lang['Name cannot be empty.'],type:'error'})
|
||||
}
|
||||
if(form.start === ''){
|
||||
return $.ccio.init('note',{title:lang['Invalid Data'],text:lang['Start Time cannot be empty.'],type:'error'})
|
||||
}
|
||||
if(form.monitorStates instanceof Array === false){
|
||||
form.monitorStates = [form.monitorStates]
|
||||
}
|
||||
console.log(form.monitorStates)
|
||||
|
||||
var data = {
|
||||
start: form.start,
|
||||
end: form.end,
|
||||
enabled: form.enabled,
|
||||
details:{
|
||||
monitorStates: form.monitorStates
|
||||
}
|
||||
}
|
||||
$.post($.ccio.init('location',$user) + $user.auth_token + '/schedule/' + $user.ke + '/' + form.name + '/insert',{data:data},function(d){
|
||||
$.ccio.log(d)
|
||||
if(d.ok === true){
|
||||
$.schedules.loadSchedules(function(){
|
||||
$.schedules.selector.val(form.name)
|
||||
})
|
||||
$.ccio.init('note',{title:lang.Success,text:d.msg,type:'success'})
|
||||
}
|
||||
})
|
||||
return false;
|
||||
})
|
||||
})
|
||||
</script>
|
||||
<script src="<%-window.libURL%>libs/js/dash2.schedules.js"></script>
|
||||
|
|
|
@ -10,6 +10,11 @@
|
|||
<h4 class="modal-title" id="settingsLabel"><i class="fa fa-gears"></i> <%-lang.Settings%></h4>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<div class="row">
|
||||
<div class="col-md-2 hidden-xs follow-list">
|
||||
<ul class="affix"></ul>
|
||||
</div>
|
||||
<div class="col-md-10">
|
||||
<div class="text-center msg"></div>
|
||||
<div class="form-group-group green">
|
||||
<h4><%-lang['Account Info']%></h4>
|
||||
|
@ -24,597 +29,251 @@
|
|||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group-group grey">
|
||||
<h4><%-lang['2-Factor Authentication']%></h4>
|
||||
<div class="form-group">
|
||||
<label><div><span><%-lang['Enabled']%></span></div>
|
||||
<div><select class="form-control" detail="factorAuth">
|
||||
<option value="0" selected><%-lang.No%></option>
|
||||
<option value="1"><%-lang.Yes%></option>
|
||||
</select></div>
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label><div><span><%-lang.Email%></span></div>
|
||||
<div><select class="form-control" detail="factor_mail">
|
||||
<option value="1" selected><%-lang.Yes%></option>
|
||||
<option value="0"><%-lang.No%></option>
|
||||
</select></div>
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-group u_discord_bot_input u_discord_bot_1">
|
||||
<label><div><span><%-lang.Discord%></span></div>
|
||||
<div><select class="form-control" detail="factor_discord">
|
||||
<option value="0" selected><%-lang.No%></option>
|
||||
<option value="1"><%-lang.Yes%></option>
|
||||
</select></div>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group-group grey">
|
||||
<h4><%-lang.Profile%></h4>
|
||||
<div class="form-group">
|
||||
<label><div><span><%-lang.Email%></span></div>
|
||||
<div><input class="form-control" type="email" name="mail"></div>
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label><div><span><%-lang.Password%> <small><%-lang.blankPassword%></small></span></div>
|
||||
<div><input class="form-control" type="password" name="pass"></div>
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label><div><span><%-lang.Password%> <%-lang.Again%></span></div>
|
||||
<div><input class="form-control" type="password" name="password_again"></div>
|
||||
</label>
|
||||
</div>
|
||||
<% if(!details.sub){ %>
|
||||
<% if(details.edit_size!=='0'){ %>
|
||||
<div class="form-group">
|
||||
<label><div><span><%-lang['Max Storage Amount']%></span></div>
|
||||
<div><input class="form-control" detail="size" placeholder="10000"></div>
|
||||
</label>
|
||||
</div>
|
||||
<% } %>
|
||||
<% if(details.edit_days!=='0'){ %>
|
||||
<div class="form-group">
|
||||
<label><div><span><%-lang['Number of Days to keep']%> <%-lang.Videos%></span></div>
|
||||
<div><input class="form-control" detail="days" placeholder="5"></div>
|
||||
</label>
|
||||
</div>
|
||||
<% } %>
|
||||
<% if(details.edit_event_days!=='0'){ %>
|
||||
<div class="form-group">
|
||||
<label><div><span><%-lang['Number of Days to keep']%> <%-lang.Events%></span></div>
|
||||
<div><input class="form-control" detail="event_days" placeholder="10"></div>
|
||||
</label>
|
||||
</div>
|
||||
<% } %>
|
||||
<% if(details.edit_log_days!=='0'){ %>
|
||||
<div class="form-group">
|
||||
<label><div><span><%-lang['Number of Days to keep']%> <%-lang.Logs%></span></div>
|
||||
<div><input class="form-control" detail="log_days" placeholder="10"></div>
|
||||
</label>
|
||||
</div>
|
||||
<% } %>
|
||||
<% } %>
|
||||
<div class="form-group">
|
||||
<label><div><span><%-lang['Dashboard Language']%></span></div>
|
||||
<div>
|
||||
<select class="form-control" detail="lang">
|
||||
<option value="" selected>Default</option>
|
||||
<% fs.readdirSync('./languages').forEach(function(v,n){
|
||||
v=v.replace('.json','') %>
|
||||
<option value="<%-v%>"><%-v%></option>
|
||||
<% }) %>
|
||||
</select>
|
||||
</div>
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label><div><span><%-lang['Notification Sound']%></span></div>
|
||||
<div>
|
||||
<select class="form-control" detail="audio_note">
|
||||
<option value="" selected>No Sound</option>
|
||||
<% audioFiles.forEach(function(v,n){ %>
|
||||
<option value="<%-v%>"><%-v%></option>
|
||||
<%
|
||||
var 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
|
||||
}
|
||||
var drawBlock = function(userSettings){
|
||||
if(userSettings.evaluation && !eval(userSettings.evaluation)){
|
||||
return
|
||||
}
|
||||
var attributes = []
|
||||
var styles = []
|
||||
var sectionClass = []
|
||||
var headerTitle = userSettings.headerTitle || lang[userSettings.name] || userSettings.name
|
||||
if(userSettings.hidden === true){
|
||||
styles.push('display:none')
|
||||
}
|
||||
if(userSettings.style){
|
||||
styles.push(userSettings.style)
|
||||
}
|
||||
if(userSettings.isSection === true){
|
||||
attributes.push('section')
|
||||
}
|
||||
if(userSettings.attribute){
|
||||
attributes.push(userSettings.attribute)
|
||||
}
|
||||
if(userSettings.id){
|
||||
attributes.push(`id="${userSettings.id}"`)
|
||||
}else{
|
||||
var userSettingsId
|
||||
if(userSettings.name){
|
||||
userSettingsId = userSettings.name.replace(/[^a-zA-Z ]/g, '').replace(/[^a-zA-Z ]/g, '').replace(/ /g, '')
|
||||
}else{
|
||||
userSettingsId = "NO NAME"
|
||||
}
|
||||
userSettings.id = userSettingsId
|
||||
attributes.push(`id="${userSettingsId}"`)
|
||||
}
|
||||
if(userSettings.color){
|
||||
sectionClass.push(userSettings.color)
|
||||
}
|
||||
if(userSettings['section-class']){
|
||||
sectionClass.push(userSettings['section-class'])
|
||||
}
|
||||
if(userSettings.isAdvanced){ %>
|
||||
<div class="h_us_input h_us_advanced">
|
||||
<% }
|
||||
if(userSettings['section-pre-pre-class']){ %>
|
||||
<div class="<%- userSettings['section-pre-pre-class'] %>">
|
||||
<% }
|
||||
if(userSettings['section-pre-class']){ %>
|
||||
<div class="<%- userSettings['section-pre-class'] %>">
|
||||
<% }
|
||||
%>
|
||||
<div <%- attributes.join(' ') %> style="<%- styles.join(';') %>" class="form-group-group <%- sectionClass.join(' ') %>">
|
||||
<h4 class="<%- userSettings.headerClass %>"><%- headerTitle %>
|
||||
<% if(userSettings.headerButtons){ %>
|
||||
<div class="pull-right">
|
||||
<% userSettings.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>
|
||||
<% }) %>
|
||||
</select>
|
||||
</div>
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label><div><span><%-lang['Alert Sound']%></span></div>
|
||||
<div>
|
||||
<select class="form-control" detail="audio_alert">
|
||||
<option value="" selected>No Sound</option>
|
||||
<% audioFiles.forEach(function(v,n){ %>
|
||||
<option value="<%-v%>"><%-v%></option>
|
||||
<% }) %>
|
||||
</select>
|
||||
</div>
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label><div><span><%-lang['Alert Sound Delay']%></span></div>
|
||||
<div><input class="form-control" detail="audio_delay" placeholder="1"></div>
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label><div><span><%-lang['Popout Monitor on Event']%></span></div>
|
||||
<div><select class="form-control" detail="event_mon_pop">
|
||||
<option value="0" selected><%-lang.No%></option>
|
||||
<option value="1"><%-lang.Yes%></option>
|
||||
</select></div>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<% } %>
|
||||
</h4>
|
||||
<% if(userSettings['input-mapping']){ %>
|
||||
<div class="form-group-group forestgreen" style="display:none" input-mapping="<%- userSettings['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(userSettings.blockquote){ %>
|
||||
<blockquote class="<%- userSettings.blockquoteClass || '' %>">
|
||||
<%- userSettings.blockquote %>
|
||||
</blockquote>
|
||||
<% } %>
|
||||
|
||||
<%
|
||||
if(userSettings.blocks){
|
||||
userSettings.blocks.forEach(function(settingsBlock){
|
||||
drawBlock(settingsBlock)
|
||||
})
|
||||
}
|
||||
if(userSettings.info){
|
||||
userSettings.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.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':
|
||||
|
||||
fieldElement = `<a class="btn btn-block ${fieldClass.join(' ')}" ${attributes.join(' ')}>${field.btnContent}</a>`
|
||||
break;
|
||||
case'ul':
|
||||
fieldElement = `<ul ${attributes.join(' ')} class="${fieldClass.join(' ')}" ></ul>`
|
||||
break;
|
||||
case'div':
|
||||
fieldElement = `<div ${attributes.join(' ')} class="${fieldClass.join(' ')}" ></div>`
|
||||
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.isAdvanced){ %>
|
||||
<div class="h_us_input h_us_advanced">
|
||||
<% }
|
||||
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'){ %>
|
||||
<%- 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>
|
||||
<% }
|
||||
if(field.isAdvanced){ %>
|
||||
</div>
|
||||
<% }
|
||||
})
|
||||
}
|
||||
%>
|
||||
</div>
|
||||
<% if(!details.sub){ %>
|
||||
<div class="form-group-group blue">
|
||||
<h4 class="mon_groups">
|
||||
<%-lang['Monitor Groups']%>
|
||||
<div class="pull-right">
|
||||
<a class="btn btn-success btn-xs add"><i class="fa fa-plus"></i></a>
|
||||
<a class="btn btn-danger btn-xs delete"><i class="fa fa-trash-o"></i></a>
|
||||
</div>
|
||||
</h4>
|
||||
<div class="form-group">
|
||||
<label><div><span><%-lang['Monitor Groups']%></span></div>
|
||||
<div><select class="form-control" id="settings_mon_groups"></select></div>
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label><div><span><%-lang['Group Name']%></span></div>
|
||||
<div><input type="hidden" group="id">
|
||||
<input class="form-control" group="name"></div>
|
||||
</label>
|
||||
</div>
|
||||
<input type="hidden" detail="mon_groups">
|
||||
<%
|
||||
if(userSettings['section-pre-class']){ %>
|
||||
</div>
|
||||
<% if(details.use_webdav!=='0'){ %>
|
||||
<div class="form-group-group forestgreen">
|
||||
<h4><%-lang.WebDAV%></h4>
|
||||
<div class="form-group">
|
||||
<label><div><span><%-lang.Autosave%></span></div>
|
||||
<div><select class="form-control" detail="webdav_save" selector="autosave_webdav">
|
||||
<option value="0"><%-lang.No%></option>
|
||||
<option value="1"><%-lang.Yes%></option>
|
||||
</select></div>
|
||||
</label>
|
||||
</div>
|
||||
<div class="autosave_webdav_input autosave_webdav_1">
|
||||
<div class="form-group">
|
||||
<label><div><span><%-lang.URL%></span></div>
|
||||
<div><input class="form-control" detail="webdav_url"></div>
|
||||
</label>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="form-group col-md-12">
|
||||
<label><div><span><%-lang.Username%></span></div>
|
||||
<div><input class="form-control" detail="webdav_user"></div>
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-group col-md-12">
|
||||
<label><div><span><%-lang.Password%></span></div>
|
||||
<div><input class="form-control" type="password" detail="webdav_pass"></div>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label><div><span><%-lang['Save Links to Database']%></span></div>
|
||||
<div><select class="form-control" detail="webdav_log" selector="h_webdavsld">
|
||||
<option value="0"><%-lang.No%></option>
|
||||
<option value="1" selected><%-lang.Yes%></option>
|
||||
</select></div>
|
||||
</label>
|
||||
</div>
|
||||
<div class="h_webdavsld_input h_webdavsld_1">
|
||||
<div class="form-group">
|
||||
<label><div><span><%-lang['Use Max Storage Amount']%></span></div>
|
||||
<div><select class="form-control" detail="use_webdav_size_limit" selector="h_webdavzl">
|
||||
<option value="0" selected><%-lang.No%></option>
|
||||
<option value="1"><%-lang.Yes%></option>
|
||||
</select></div>
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-group h_webdavzl_input h_webdavzl_1">
|
||||
<label><div><span><%-lang['Max Storage Amount']%></span></div>
|
||||
<div><input class="form-control" placeholder="10000" detail="webdav_size_limit"></div>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label><div><span><%-lang['Save Directory']%></span></div>
|
||||
<div><input class="form-control" placeholder="/" detail="webdav_dir"></div>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<% } %>
|
||||
<% if(details.use_aws_s3!=='0'){ %>
|
||||
<div class="form-group-group forestgreen">
|
||||
<h4><%-lang['Amazon S3']%></h4>
|
||||
<div class="form-group">
|
||||
<label><div><span><%-lang.Autosave%></span></div>
|
||||
<div><select class="form-control" detail="aws_s3_save" selector="autosave_aws_s3">
|
||||
<option value="0" selected><%-lang.No%></option>
|
||||
<option value="1"><%-lang.Yes%></option>
|
||||
</select></div>
|
||||
</label>
|
||||
</div>
|
||||
<div class="autosave_aws_s3_input autosave_aws_s3_1">
|
||||
<div class="form-group">
|
||||
<label><div><span><%-lang.Bucket%></span></div>
|
||||
<div><input class="form-control" detail="aws_s3_bucket" placeholder="Example : slippery-seal"></div>
|
||||
</label>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="form-group col-md-12">
|
||||
<label><div><span><%-lang.aws_accessKeyId%></span></div>
|
||||
<div><input class="form-control" detail="aws_accessKeyId"></div>
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-group col-md-12">
|
||||
<label><div><span><%-lang.aws_secretAccessKey%></span></div>
|
||||
<div><input class="form-control" type="password" detail="aws_secretAccessKey"></div>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label><div><span><%-lang.Region%></span></div>
|
||||
<div><select class="form-control" detail="aws_region">
|
||||
<option value="us-west-1" selected>US West (N. California)</option>
|
||||
<option value="us-west-2">US West (Oregon)</option>
|
||||
<option value="us-east-2">US East (Ohio)</option>
|
||||
<option value="us-east-1">US East (N. Virginia)</option>
|
||||
<option value="ap-south-1">Asia Pacific (Mumbai)</option>
|
||||
<option value="ap-northeast-2">Asia Pacific (Seoul)</option>
|
||||
<option value="ap-northeast-3">Asia Pacific (Osaka-Local)**</option>
|
||||
<option value="ap-southeast-1">Asia Pacific (Singapore)</option>
|
||||
<option value="ap-southeast-2">Asia Pacific (Sydney)</option>
|
||||
<option value="ap-northeast-1">Asia Pacific (Tokyo)</option>
|
||||
<option value="ca-central-1">Canada (Central)</option>
|
||||
<option value="cn-north-1">China (Beijing)</option>
|
||||
<option value="cn-northwest-1">China (Ningxia)</option>
|
||||
<option value="eu-central-1">EU (Frankfurt)</option>
|
||||
<option value="eu-west-1">EU (Ireland)</option>
|
||||
<option value="eu-west-2">EU (London)</option>
|
||||
<option value="eu-west-3">EU (Paris)</option>
|
||||
<option value="sa-east-1">South America (São Paulo)</option>
|
||||
</select></div>
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label><div><span><%-lang['Save Links to Database']%></span></div>
|
||||
<div><select class="form-control" detail="aws_s3_log" selector="h_s3sld">
|
||||
<option value="0"><%-lang.No%></option>
|
||||
<option value="1" selected><%-lang.Yes%></option>
|
||||
</select></div>
|
||||
</label>
|
||||
</div>
|
||||
<div class="h_s3sld_input h_s3sld_1">
|
||||
<div class="form-group">
|
||||
<label><div><span><%-lang['Use Max Storage Amount']%></span></div>
|
||||
<div><select class="form-control" detail="use_aws_s3_size_limit" selector="h_s3zl">
|
||||
<option value="0" selected><%-lang.No%></option>
|
||||
<option value="1"><%-lang.Yes%></option>
|
||||
</select></div>
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-group h_s3zl_input h_s3zl_1">
|
||||
<label><div><span><%-lang['Max Storage Amount']%></span></div>
|
||||
<div><input class="form-control" placeholder="10000" detail="aws_s3_size_limit"></div>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label><div><span><%-lang['Save Directory']%></span></div>
|
||||
<div><input class="form-control" placeholder="" detail="aws_s3_dir"></div>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<% } %>
|
||||
<% if(details.use_bb_b2!=='0'){ %>
|
||||
<div class="form-group-group forestgreen">
|
||||
<h4><%-lang['Backblaze B2']%></h4>
|
||||
<div class="form-group">
|
||||
<label><div><span><%-lang.Autosave%></span></div>
|
||||
<div><select class="form-control" detail="bb_b2_save" selector="autosave_bb_b2">
|
||||
<option value="0" selected><%-lang.No%></option>
|
||||
<option value="1"><%-lang.Yes%></option>
|
||||
</select></div>
|
||||
</label>
|
||||
</div>
|
||||
<div class="autosave_bb_b2_input autosave_bb_b2_1">
|
||||
<div class="form-group">
|
||||
<label><div><span><%-lang.Bucket%></span></div>
|
||||
<div><input class="form-control" detail="bb_b2_bucket" placeholder="Example : slippery-seal"></div>
|
||||
</label>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="form-group col-md-12">
|
||||
<label><div><span><%-lang.accountId%></span></div>
|
||||
<div><input class="form-control" detail="bb_b2_accountId"></div>
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-group col-md-12">
|
||||
<label><div><span><%-lang.applicationKey%></span></div>
|
||||
<div><input class="form-control" type="password" detail="bb_b2_applicationKey"></div>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label><div><span><%-lang['Save Links to Database']%></span></div>
|
||||
<div><select class="form-control" detail="bb_b2_log" selector="h_b2sld">
|
||||
<option value="0"><%-lang.No%></option>
|
||||
<option value="1" selected><%-lang.Yes%></option>
|
||||
</select></div>
|
||||
</label>
|
||||
</div>
|
||||
<div class="h_b2sld_input h_b2sld_1">
|
||||
<div class="form-group">
|
||||
<label><div><span><%-lang['Use Max Storage Amount']%></span></div>
|
||||
<div><select class="form-control" detail="use_bb_b2_size_limit" selector="h_b2zl">
|
||||
<option value="0" selected><%-lang.No%></option>
|
||||
<option value="1"><%-lang.Yes%></option>
|
||||
</select></div>
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-group h_b2zl_input h_b2zl_1">
|
||||
<label><div><span><%-lang['Max Storage Amount']%></span></div>
|
||||
<div><input class="form-control" placeholder="10000" detail="bb_b2_size_limit"></div>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label><div><span><%-lang['Save Directory']%></span></div>
|
||||
<div><input class="form-control" placeholder="" detail="bb_b2_dir"></div>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<% } %>
|
||||
<% if(details.use_whcs!=='0'){ %>
|
||||
<div class="form-group-group forestgreen">
|
||||
<h4><%-lang['Wasabi Hot Cloud Storage']%></h4>
|
||||
<div class="form-group">
|
||||
<label><div><span><%-lang.Autosave%></span></div>
|
||||
<div><select class="form-control" detail="whcs_save" selector="autosave_whcs">
|
||||
<option value="0" selected><%-lang.No%></option>
|
||||
<option value="1"><%-lang.Yes%></option>
|
||||
</select></div>
|
||||
</label>
|
||||
</div>
|
||||
<div class="autosave_whcs_input autosave_whcs_1">
|
||||
<div class="form-group">
|
||||
<label><div><span><%-lang.Bucket%></span></div>
|
||||
<div><input class="form-control" detail="whcs_bucket" placeholder="Example : slippery-seal"></div>
|
||||
</label>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="form-group col-md-12">
|
||||
<label><div><span><%-lang.aws_accessKeyId%></span></div>
|
||||
<div><input class="form-control" detail="whcs_accessKeyId"></div>
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-group col-md-12">
|
||||
<label><div><span><%-lang.aws_secretAccessKey%></span></div>
|
||||
<div><input class="form-control" type="password" detail="whcs_secretAccessKey"></div>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label><div><span><%-lang.Region%></span></div>
|
||||
<div><select class="form-control" detail="whcs_region">
|
||||
<option value="us-west-1" selected>US West</option>
|
||||
<option value="us-east-1">US East</option>
|
||||
</select></div>
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label><div><span><%-lang['Save Links to Database']%></span></div>
|
||||
<div><select class="form-control" detail="whcs_log" selector="h_whcssld">
|
||||
<option value="0"><%-lang.No%></option>
|
||||
<option value="1" selected><%-lang.Yes%></option>
|
||||
</select></div>
|
||||
</label>
|
||||
</div>
|
||||
<div class="h_whcssld_input h_whcssld_1">
|
||||
<div class="form-group">
|
||||
<label><div><span><%-lang['Use Max Storage Amount']%></span></div>
|
||||
<div><select class="form-control" detail="use_whcs_size_limit" selector="h_whcszl">
|
||||
<option value="0" selected><%-lang.No%></option>
|
||||
<option value="1"><%-lang.Yes%></option>
|
||||
</select></div>
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-group h_whcszl_input h_whcszl_1">
|
||||
<label><div><span><%-lang['Max Storage Amount']%></span></div>
|
||||
<div><input class="form-control" placeholder="10000" detail="whcs_size_limit"></div>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label><div><span><%-lang['Save Directory']%></span></div>
|
||||
<div><input class="form-control" placeholder="" detail="whcs_dir"></div>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<% } %>
|
||||
<% if(details.use_sftp!=='0'){ %>
|
||||
<div class="form-group-group forestgreen">
|
||||
<h4><%-lang['SFTP (SSH File Transfer)']%></h4>
|
||||
<div class="form-group">
|
||||
<label><div><span><%-lang.Autosave%></span></div>
|
||||
<div><select class="form-control" detail="sftp_save" selector="autosave_sftp">
|
||||
<option value="0" selected><%-lang.No%></option>
|
||||
<option value="1"><%-lang.Yes%></option>
|
||||
</select></div>
|
||||
</label>
|
||||
</div>
|
||||
<div class="autosave_sftp_input autosave_sftp_1">
|
||||
<div class="form-group">
|
||||
<label><div><span><%-lang.Host%></span></div>
|
||||
<div><input class="form-control" detail="sftp_host"></div>
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label><div><span><%-lang.Port%></span></div>
|
||||
<div><input class="form-control" type="text" detail="sftp_port"></div>
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label><div><span><%-lang.Username%></span></div>
|
||||
<div><input class="form-control" type="text" detail="sftp_username"></div>
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label><div><span><%-lang.Password%></span></div>
|
||||
<div><input class="form-control" type="password" detail="sftp_password"></div>
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label><div><span><%-lang.privateKey%></span></div>
|
||||
<div><textarea class="form-control" type="password" detail="sftp_privateKey"></textarea></div>
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label><div><span><%-lang['Save Directory']%></span></div>
|
||||
<div><input class="form-control" placeholder="" detail="sftp_dir"></div>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<% } %>
|
||||
<% if(details.use_discordbot!=='0'){ %>
|
||||
<div class="form-group-group forestgreen">
|
||||
<h4><%-lang['Discord Bot']%></h4>
|
||||
<div class="form-group">
|
||||
<label><div><span><%-lang.Enabled%></span></div>
|
||||
<div><select class="form-control" detail="discordbot" selector="u_discord_bot">
|
||||
<option value="0" selected><%-lang.No%></option>
|
||||
<option value="1"><%-lang.Yes%></option>
|
||||
</select></div>
|
||||
</label>
|
||||
</div>
|
||||
<div class="u_discord_bot_input u_discord_bot_1">
|
||||
<div class="form-group">
|
||||
<label><div><span><%-lang.Token%></span></div>
|
||||
<div><input type="password" class="form-control" placeholder="XXXXXXXXXXXXXXXXXXXXXXXX.XXXXXXXXXXXXXXX_XXXXXXXXXXXXXXXXXX" detail="discordbot_token"></div>
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label><div><span><%-lang['Channel ID']%></span></div>
|
||||
<div><input class="form-control" placeholder="xxxxxxxxxxxxxxxxxx" detail="discordbot_channel"></div>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<% } %>
|
||||
<% if(details.use_ldap!=='0'){ %>
|
||||
<div class="form-group-group forestgreen">
|
||||
<h4><%-lang.LDAP%></h4>
|
||||
<div class="form-group">
|
||||
<label><div><span><%-lang.Enable%></span></div>
|
||||
<div><select class="form-control" detail="ldap_enable" selector="ldap_i">
|
||||
<option value="0"><%-lang.No%></option>
|
||||
<option value="1"><%-lang.Yes%></option>
|
||||
</select></div>
|
||||
</label>
|
||||
</div>
|
||||
<div class="ldap_i_input ldap_i_1" style="display:none">
|
||||
<div class="form-group">
|
||||
<label><div><span><%-lang.URL%></span></div>
|
||||
<div><input class="form-control" detail="ldap_url"></div>
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label><div><span><%-lang['bindDN']%></span></div>
|
||||
<div><input class="form-control" detail="ldap_bindDN" placeholder="<%-lang.Example%> : cn=admin,dc=test,dc=com"></div>
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label><div><span><%-lang['Bind Credentials']%></span></div>
|
||||
<div><input class="form-control" detail="ldap_bindCredentials"></div>
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label><div><span><%-lang['Search Filter']%></span></div>
|
||||
<div><input class="form-control" detail="ldap_searchFilter" placeholder="cn={{username}}"></div>
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label><div><span><%-lang['Search Base']%></span></div>
|
||||
<div><input class="form-control" detail="ldap_searchBase" placeholder="dc=test,dc=com"></div>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<% } %>
|
||||
<% } %>
|
||||
<div class="form-group-group navy">
|
||||
<h4><%-lang.Preferences%></h4>
|
||||
<div class="form-group">
|
||||
<label><div><span><%-lang.CSS%></span></div>
|
||||
<div><textarea class="form-control" placeholder="#main_header{background:#b59f00}" detail="css"></textarea></div>
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label><div><span><%-lang['Force Monitors Per Row']%></span></div>
|
||||
<div><select class="form-control" localStorage="montage_use" selector="st_force_mon_rows">
|
||||
<option value="1"><%-lang.Yes%></option>
|
||||
<option value="0" selected><%-lang.No%></option>
|
||||
</select></div>
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-group st_force_mon_rows_input st_force_mon_rows_1">
|
||||
<label><div><span><%-lang['Monitors per row']%></span></div>
|
||||
<div><input class="form-control" placeholder="3" localStorage="montage"></div>
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label><div><span><%-lang['Browser Console Log']%></span></div>
|
||||
<div><select class="form-control" localStorage="browserLog">
|
||||
<option value="0" selected><%-lang.No%></option>
|
||||
<option value="1"><%-lang.Yes%></option>
|
||||
</select></div>
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label><div><span><%-lang['Get Logs to Client']%></span></div>
|
||||
<div><select class="form-control" detail="get_server_log">
|
||||
<option value="1" selected><%-lang.Yes%></option>
|
||||
<option value="0"><%-lang.No%></option>
|
||||
</select></div>
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label><div><span><%-lang['Show Thumbnails in Video List']%></span></div>
|
||||
<div><select class="form-control" localStorage="showThumbnail">
|
||||
<option value="1"><%-lang.Yes%></option>
|
||||
<option value="0" selected><%-lang.No%></option>
|
||||
</select></div>
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label><div><span><%-lang['Themes']%></span></div>
|
||||
<div><select class="form-control" detail="theme">
|
||||
<option value="" selected>Default</option>
|
||||
<% fs.readdirSync(__dirname+'/web/libs/themes').forEach(function(v){ %>
|
||||
<option value="<%-v%>"><%-v%></option>
|
||||
<% }) %>
|
||||
</select></div>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<% }
|
||||
if(userSettings['section-pre-pre-class']){ %>
|
||||
</div>
|
||||
<% }
|
||||
if(userSettings.isAdvanced){ %>
|
||||
</div>
|
||||
<% }
|
||||
}
|
||||
%>
|
||||
<% Object.keys(define['Account Settings'].blocks).forEach(function(blockKey){
|
||||
var accountSettings = define['Account Settings'].blocks[blockKey]
|
||||
drawBlock(accountSettings)
|
||||
}) %>
|
||||
<div class="form-group-group green linkShinobi">
|
||||
<h4><%-lang['Link Shinobi']%><div class="pull-right"><a class="btn btn-success btn-xs add"><i class="fa fa-plus"></i></a></div></h4>
|
||||
<div id="linkShinobi"></div>
|
||||
</div>
|
||||
<input type="hidden" name="details">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-default pull-left" data-dismiss="modal"><i class="fa fa-times"></i> <%-lang.Close%></button>
|
||||
<button type="submit" class="btn btn-success"><i class="fa fa-check"></i> <%-lang.Save%></button>
|
||||
|
|
|
@ -15,32 +15,40 @@
|
|||
<div class="form-group">
|
||||
<label><div><span><%-lang['All Monitors and Privileges']%></span></div>
|
||||
<div><select class="form-control" detail="allmonitors">
|
||||
<option value="0" selected><%-lang.No%></option>
|
||||
<option value="1"><%-lang.Yes%></option>
|
||||
<option value="0" selected><%-lang.No%></option>
|
||||
<option value="1"><%-lang.Yes%></option>
|
||||
</select></div>
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-group permission-view">
|
||||
<label><div><span><%-lang['Can Create and Delete Monitors']%></span></div>
|
||||
<div><select class="form-control" detail="monitor_create">
|
||||
<option value="0" selected><%-lang.No%></option>
|
||||
<option value="1"><%-lang.Yes%></option>
|
||||
<option value="0" selected><%-lang.No%></option>
|
||||
<option value="1"><%-lang.Yes%></option>
|
||||
</select></div>
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-group permission-view">
|
||||
<label><div><span><%-lang['Can Change User Settings']%></span></div>
|
||||
<div><select class="form-control" detail="user_change">
|
||||
<option value="0" selected><%-lang.No%></option>
|
||||
<option value="1"><%-lang.Yes%></option>
|
||||
<option value="0" selected><%-lang.No%></option>
|
||||
<option value="1"><%-lang.Yes%></option>
|
||||
</select></div>
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label><div><span><%-lang['Can View Logs']%></span></div>
|
||||
<div><select class="form-control" detail="view_logs">
|
||||
<option value="0" selected><%-lang.No%></option>
|
||||
<option value="1"><%-lang.Yes%></option>
|
||||
<option value="0" selected><%-lang.No%></option>
|
||||
<option value="1"><%-lang.Yes%></option>
|
||||
</select></div>
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label><div><span><%-lang['Landing Page']%></span></div>
|
||||
<div><select class="form-control" detail="landing_page">
|
||||
<option value="" selected><%-lang.Default%></option>
|
||||
<option value="timelapse"><%-lang.Timelapse %></option>
|
||||
</select></div>
|
||||
</label>
|
||||
</div>
|
||||
|
@ -57,8 +65,8 @@
|
|||
<div class="form-group">
|
||||
<label><div><span><%- v.name %></span></div>
|
||||
<div><select class="form-control" monitor="monitors" mid="<%- v.mid %>">
|
||||
<option value="0" selected><%-lang.No%></option>
|
||||
<option value="1"><%-lang.Yes%></option>
|
||||
<option value="0" selected><%-lang.No%></option>
|
||||
<option value="1"><%-lang.Yes%></option>
|
||||
</select></div>
|
||||
</label>
|
||||
</div>
|
||||
|
@ -76,8 +84,8 @@
|
|||
<div class="form-group">
|
||||
<label><div><span><%- v.name %></span></div>
|
||||
<div><select class="form-control" monitor="monitor_edit" mid="<%- v.mid %>">
|
||||
<option value="0" selected><%-lang.No%></option>
|
||||
<option value="1"><%-lang.Yes%></option>
|
||||
<option value="0" selected><%-lang.No%></option>
|
||||
<option value="1"><%-lang.Yes%></option>
|
||||
</select></div>
|
||||
</label>
|
||||
</div>
|
||||
|
@ -95,8 +103,8 @@
|
|||
<div class="form-group">
|
||||
<label><div><span><%- v.name %></span></div>
|
||||
<div><select class="form-control" monitor="video_view" mid="<%- v.mid %>">
|
||||
<option value="0" selected><%-lang.No%></option>
|
||||
<option value="1"><%-lang.Yes%></option>
|
||||
<option value="0" selected><%-lang.No%></option>
|
||||
<option value="1"><%-lang.Yes%></option>
|
||||
</select></div>
|
||||
</label>
|
||||
</div>
|
||||
|
@ -114,8 +122,8 @@
|
|||
<div class="form-group">
|
||||
<label><div><span><%- v.name %></span></div>
|
||||
<div><select class="form-control" monitor="video_delete" mid="<%- v.mid %>">
|
||||
<option value="0" selected><%-lang.No%></option>
|
||||
<option value="1"><%-lang.Yes%></option>
|
||||
<option value="0" selected><%-lang.No%></option>
|
||||
<option value="1"><%-lang.Yes%></option>
|
||||
</select></div>
|
||||
</label>
|
||||
</div>
|
||||
|
@ -129,4 +137,4 @@
|
|||
<input type="hidden" name="details">
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -1,81 +1,66 @@
|
|||
<!--Timelapse Window-->
|
||||
<div class="modal full fade dark" id="timelapse" role="dialog" aria-labelledby="timelapseLabel" aria-hidden="true">
|
||||
<div class="modal full fade dark" id="timelapsejpeg" role="dialog" aria-labelledby="timelapsejpegLabel" aria-hidden="true">
|
||||
<div class="modal-dialog" role="document">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
||||
<span aria-hidden="true">×</span>
|
||||
</button>
|
||||
<h4 class="modal-title" id="timelapseLabel"><i class="fa fa-angle-double-right"></i> <span><%-lang['Time-lapse Tool']%></span></h4>
|
||||
</div>
|
||||
<div class="modal-header">
|
||||
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
||||
<span aria-hidden="true">×</span>
|
||||
</button>
|
||||
<h4 class="modal-title" id="timelapsejpegLabel"><i class="fa fa-angle-double-right"></i> <span><%-lang['Timelapse']%></span></h4>
|
||||
</div>
|
||||
<div class="modal-body text-center">
|
||||
<div class="row">
|
||||
<div class="col-md-8">
|
||||
<div class="timelapse_hud">
|
||||
<div class="timelapse_playRate hover-hide"></div>
|
||||
<div class="controlBar hover-hide">
|
||||
<div class="form-group">
|
||||
<div class="progress" id="timelapse_seekBar">
|
||||
<div class="progress-bar progress-bar-warning" role="progressbar" style="width:0%"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<div class="form-group monospace">
|
||||
<div class="btn-group timelapseSpeedUseBasicSwitch">
|
||||
<a timelapse="stepBackBack" class="active btn btn-primary"> <i class="fa fa-backward"></i> </a>
|
||||
<a timelapse="stepBack" class="btn btn-primary"> <i class="fa fa-arrow-circle-o-left"></i> </a>
|
||||
</div>
|
||||
<div class="btn-group">
|
||||
<a timelapse="play" class="btn btn-default"> <i class="fa fa-play"></i> </a>
|
||||
<a timelapse="mute" class="btn btn-default"> <i class="fa fa-volume-up"></i> </a>
|
||||
</div>
|
||||
<div class="btn-group">
|
||||
<a timelapse="stepFront" class="btn btn-primary"> <i class="fa fa-arrow-circle-o-right"></i> </a>
|
||||
<a timelapse="stepFrontFront" class="active btn btn-primary"> <i class="fa fa-forward"></i> </a>
|
||||
</div>
|
||||
<a timelapse="download" class="btn btn-info"> <i class="fa fa-download"></i> </a>
|
||||
<div class="btn-group">
|
||||
<a timelapse="setPlayBackRate" playRate="1" class="btn btn-default">1</a>
|
||||
<a timelapse="setPlayBackRate" playRate="5" class="btn btn-default">5</a>
|
||||
<a timelapse="setPlayBackRate" playRate="15" class="btn btn-default">15</a>
|
||||
</div>
|
||||
<div class="btn-group timelapseSpeedUseBasicSwitch">
|
||||
<a timelapse="setPlayBackRate" playRate="30" class="btn btn-default">30</a>
|
||||
<a timelapse="setPlayBackRate" playRate="60" class="btn btn-default">60</a>
|
||||
<a timelapse="setPlayBackRate" playRate="120" class="btn btn-default">120</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="marc-toggle abs-bot-left">
|
||||
<input title="<%-lang['Use HTML5 Play Method']%>" type="checkbox" id="timelapseSpeedUseBasic"/><label for="timelapseSpeedUseBasic"><%-lang['Use HTML5 Play Method']%></label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-4">
|
||||
<div class="fieldHolder text-left">
|
||||
<div class="form-group text-center">
|
||||
<%
|
||||
var logoImageLink
|
||||
if(config.logoLocation76x76.indexOf('//') === -1){
|
||||
logoImageLink = window.libURL + config.logoLocation76x76
|
||||
}else{
|
||||
logoImageLink = config.logoLocation76x76
|
||||
}
|
||||
%>
|
||||
<img src="<%- logoImageLink %>" style="<%- config.logoLocation76x76Style %>">
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label><div><span><%-lang['Monitor']%></span></div>
|
||||
<div><select class="form-control dark monitors_list"></select></div>
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label><div><span><%-lang['Date']%></span></div>
|
||||
<div><input type="text" id="timelapsejpeg_date" class="form-control" value="" /></div>
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<input id="timelapseJpegFps" data-slider-id='timelapseJpegFps' type="text"
|
||||
data-slider-min="1" data-slider-max="30" data-slider-step="1" data-slider-value="30" value="30"/>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<!-- <div class="btn-group"> -->
|
||||
<!-- <a class="btn btn-primary download_mp4"><%-lang['Build']%></a> -->
|
||||
<a class="btn btn-danger btn-block download_mp4"><%-lang['Download']%></a>
|
||||
<!-- </div> -->
|
||||
</div>
|
||||
<div id="timelapse_video_display"></div>
|
||||
</div>
|
||||
<div class="">
|
||||
</div>
|
||||
<div class="frameIcons row scroll-style-6"></div>
|
||||
</div>
|
||||
<div class="col-md-8 frameStripContainer contained">
|
||||
<div class="playBackView"><img></div>
|
||||
<div class="liveStreamView"></div>
|
||||
</div>
|
||||
<form class="col-md-4">
|
||||
<div class="form-group">
|
||||
<label><div><span><%-lang.Monitor%></span></div>
|
||||
<div><select class="form-control monitors_list"></select></div>
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label><div><span><%-lang['Date Range']%></span></div>
|
||||
<div><input type="text" id="timelapse_daterange" class="form-control" value="" /></div>
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<ul id="timelapse_video_line" class="list-group"></ul>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<div class="btn-group">
|
||||
<button type="button" class="btn btn-default" data-dismiss="modal"><%-lang.Close%></button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<div class="btn-group">
|
||||
<button type="button" class="btn btn-default" data-dismiss="modal"><%-lang.Close%></button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script src="<%-window.libURL%>libs/js/dash2.timelapse.js"></script>
|
||||
<link rel="stylesheet" href="<%-window.libURL%>libs/css/dash2.timelapse.jpeg.css">
|
||||
<script src="<%-window.libURL%>libs/js/dash2.timelapse.jpeg.js"></script>
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue