1
0
Fork 0
mirror of https://gitlab.com/Shinobi-Systems/ShinobiCE.git synced 2025-03-09 15:40:15 +00:00
This commit is contained in:
Moe 2019-10-26 13:34:02 -07:00
parent ef40f3f231
commit 167603dfb0
118 changed files with 16152 additions and 5441 deletions

View file

@ -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>

View file

@ -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" />

View file

@ -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">

View file

@ -0,0 +1 @@
<title><%- config.webPageTitle %></title>

View file

@ -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 %>

View file

@ -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">&times;</span>
</button>
<h4 class="modal-title" id="help_windowLabel"><i class="fa fa-question-circle"></i> &nbsp; <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">&times;</span>
</button>
<h4 class="modal-title" id="help_windowLabel"><i class="fa fa-question-circle"></i> &nbsp; <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> &nbsp;
</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> &nbsp;
</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>
<% } %>

View file

@ -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">&nbsp;<i class="fa fa-plus"></i>&nbsp;</a>
<a class="btn btn-success btn-xs add-monitor">&nbsp;<i class="fa fa-plus"></i>&nbsp;</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>&nbsp;</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

View file

@ -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>&nbsp;</th>
<th><%-lang['Name']%></th>
<th><%-lang['Mode']%></th>
<th>&nbsp;</th>
<th>&nbsp;</th>
<th><%-lang['Stream']%></th>
<th>&nbsp;</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>

View 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">&times;</span>
</button>
<h4 class="modal-title" id="powerVideoLabel"><i class="fa fa-map-marker"></i> &nbsp; <%-lang['Power Video Viewer']%><span style="display:none" class="_loading"> &nbsp; <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'] %>">&nbsp;<i class="fa fa-search-plus"></i>&nbsp;</button>
</div>
<div class="btn-group">
<button type="button" powerVideo-control="previousVideoAll" class="btn btn-sm btn-default" title="<%- lang['Previous Video'] %>">&nbsp;<i class="fa fa-arrow-circle-left"></i>&nbsp;</button>
<button type="button" powerVideo-control="playAll" class="btn btn-sm btn-danger" title="<%- lang.Play %>">&nbsp;<i class="fa fa-play"></i>&nbsp;</button>
<button type="button" powerVideo-control="pauseAll" class="btn btn-sm btn-default" title="<%- lang.Pause %>">&nbsp;<i class="fa fa-pause"></i>&nbsp;</button>
<button type="button" powerVideo-control="nextVideoAll" class="btn btn-sm btn-default" title="<%- lang['Next Video'] %>">&nbsp;<i class="fa fa-arrow-circle-right"></i>&nbsp;</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>

View file

@ -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">

View file

@ -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": "UTC12:00, Y",
"value": -720
},
{
"text": "UTC11:00, X",
"value": -660
},
{
"text": "UTC10:00, W",
"value": -600
},
{
"text": "UTC09:30, V†",
"value": -570
},
{
"text": "UTC09:00, V",
"value": -540
},
{
"text": "UTC08:00, U",
"value": -480
},
{
"text": "UTC07:00, T",
"value": -420
},
{
"text": "UTC06:00, S",
"value": -360
},
{
"text": "UTC05:00, R",
"value": -300
},
{
"text": "UTC04:00, Q",
"value": -240
},
{
"text": "UTC03:30, P†",
"value": -210
},
{
"text": "UTC03:00, P",
"value": -180
},
{
"text": "UTC02:00, O",
"value": -120
},
{
"text": "UTC01: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>

View file

@ -10,6 +10,11 @@
<h4 class="modal-title" id="settingsLabel"><i class="fa fa-gears"></i> &nbsp; <%-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>

View file

@ -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>

View file

@ -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">&times;</span>
</button>
<h4 class="modal-title" id="timelapseLabel"><i class="fa fa-angle-double-right"></i> &nbsp; <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">&times;</span>
</button>
<h4 class="modal-title" id="timelapsejpegLabel"><i class="fa fa-angle-double-right"></i> &nbsp; <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">&nbsp;<i class="fa fa-backward"></i>&nbsp;</a>
<a timelapse="stepBack" class="btn btn-primary">&nbsp;<i class="fa fa-arrow-circle-o-left"></i>&nbsp;</a>
</div>
<div class="btn-group">
<a timelapse="play" class="btn btn-default">&nbsp;<i class="fa fa-play"></i>&nbsp;</a>
<a timelapse="mute" class="btn btn-default">&nbsp;<i class="fa fa-volume-up"></i>&nbsp;</a>
</div>
<div class="btn-group">
<a timelapse="stepFront" class="btn btn-primary">&nbsp;<i class="fa fa-arrow-circle-o-right"></i>&nbsp;</a>
<a timelapse="stepFrontFront" class="active btn btn-primary">&nbsp;<i class="fa fa-forward"></i>&nbsp;</a>
</div>
<a timelapse="download" class="btn btn-info">&nbsp;<i class="fa fa-download"></i>&nbsp;</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>