mirror of
https://gitlab.com/Shinobi-Systems/ShinobiCE.git
synced 2025-03-09 15:40:15 +00:00
Teenage Turtle
This commit is contained in:
parent
a80c1e4e97
commit
157bf6feb0
14 changed files with 1530 additions and 563 deletions
249
web/pages/blocks/detectorfilters.ejs
Normal file
249
web/pages/blocks/detectorfilters.ejs
Normal file
|
@ -0,0 +1,249 @@
|
|||
<!--Detector Filter Window-->
|
||||
<div class="modal full fade dark" id="detector_filter" tabindex="-1" role="dialog" aria-labelledby="detector_filterLabel" aria-hidden="true">
|
||||
<div class="modal-dialog" role="document">
|
||||
<form 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="detector_filterLabel"><i class="fa fa-grav"></i> <%-lang['Detector Filters']%></h4>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<div class="form-group-group green">
|
||||
<h4><%- lang['Saved Filters'] %> : <small class="filter_name"></small></h4>
|
||||
<div class="form-group">
|
||||
<label>
|
||||
<div><span><%-lang.Filters%></span></div>
|
||||
<div><select id="detector_filters" class="form-control">
|
||||
<option value=""><%-lang['Add New']%></option>
|
||||
<optgroup label="Saved"></optgroup>
|
||||
</select></div>
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label><div><span><%- lang['Filter Name'] %></span></div>
|
||||
<div><input class="form-control" name="id" type="hidden">
|
||||
<input class="form-control" name="filter_name"></div>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group-group blue where">
|
||||
<h4>Conditions
|
||||
<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 remove"> <i class="fa fa-trash-o"></i> </a>
|
||||
</div>
|
||||
</h4>
|
||||
<div id="detector_filters_where"></div>
|
||||
</div>
|
||||
<div class="form-group-group red actions">
|
||||
<h4><%- lang['Action for Selected'] %></h4>
|
||||
<%
|
||||
var possibleActions = [
|
||||
{
|
||||
"name": "halt",
|
||||
"field": "Drop Event",
|
||||
"description": "Make the event do nothing, as if it never happened.",
|
||||
"default": "No",
|
||||
"example": "",
|
||||
"possible": [
|
||||
{
|
||||
"name": "No",
|
||||
"value": "0",
|
||||
"info": "Allow other functions to continue.",
|
||||
selected:true
|
||||
},
|
||||
{
|
||||
"name": "Yes",
|
||||
"value": "1",
|
||||
"info": "Use Traditional Recording, Hotswap, or Delete Motionless with their currently set options in the Global Detection Settings section."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "save",
|
||||
"field": "Save Events to SQL",
|
||||
"description": "Save Motion Events in SQL. This will allow display of motion over video during the time motion events occured in the Power Viewer.",
|
||||
"default": "Yes",
|
||||
"example": "",
|
||||
"possible": [
|
||||
{
|
||||
"name": "Default",
|
||||
"value": "",
|
||||
"info": "Use values set in Global Detector Settings.",
|
||||
"selected": true
|
||||
},
|
||||
{
|
||||
"name": "No",
|
||||
"value": "0",
|
||||
"info": "Finish the current 10 minute order."
|
||||
},
|
||||
{
|
||||
"name": "Yes",
|
||||
"value": "1",
|
||||
"info": "Reset the timer"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "mail",
|
||||
"field": "Email on Trigger",
|
||||
"description": "Recieve an email of an image during a motion event to the master account for the camera group. You must setup SMTP details in conf.json.",
|
||||
"default": "No",
|
||||
"example": "1",
|
||||
"possible": [
|
||||
{
|
||||
"name": "Default",
|
||||
"value": "",
|
||||
"info": "Use values set in Global Detector Settings.",
|
||||
"selected": true
|
||||
},
|
||||
{
|
||||
"name": "No",
|
||||
"value": "0",
|
||||
"info": "No Email."
|
||||
},
|
||||
{
|
||||
"name": "Yes",
|
||||
"value": "1",
|
||||
"info": "Send Email."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "webhook",
|
||||
"field": "Webhook on Trigger",
|
||||
"description": "Send a GET request during an event to the URL specified. Webhook location can be specified in the Global Detector Settings for the Monitor.",
|
||||
"default": "No",
|
||||
"example": "1",
|
||||
"possible": [
|
||||
{
|
||||
"name": "Default",
|
||||
"value": "",
|
||||
"info": "Use values set in Global Detector Settings.",
|
||||
"selected": true
|
||||
},
|
||||
{
|
||||
"name": "No",
|
||||
"value": "0",
|
||||
"info": "No Webhook."
|
||||
},
|
||||
{
|
||||
"name": "Yes",
|
||||
"value": "1",
|
||||
"info": "Send Webhook."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "discord",
|
||||
"field": "Discord Alert on Trigger",
|
||||
"description": "Recieve a Discord Notification with an image or video during an event to the Discord channel specified. Discord Bot and Channel settings can be changed in your Account Settings.",
|
||||
"default": "No",
|
||||
"example": "1",
|
||||
"possible": [
|
||||
{
|
||||
"name": "Default",
|
||||
"value": "",
|
||||
"info": "Use values set in Global Detector Settings.",
|
||||
"selected": true
|
||||
},
|
||||
{
|
||||
"name": "No",
|
||||
"value": "0",
|
||||
"info": "No Alert."
|
||||
},
|
||||
{
|
||||
"name": "Yes",
|
||||
"value": "1",
|
||||
"info": "Get a Message to Discord."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "command",
|
||||
"field": "Detector Command",
|
||||
"description": "You may use this to trigger a script on command.",
|
||||
"default": "No",
|
||||
"example": "",
|
||||
"possible": [
|
||||
{
|
||||
"name": "Default",
|
||||
"value": "",
|
||||
"info": "Use values set in Global Detector Settings.",
|
||||
"selected": true
|
||||
},
|
||||
{
|
||||
"name": "No",
|
||||
"value": "0",
|
||||
"info": "No script will run."
|
||||
},
|
||||
{
|
||||
"name": "Yes",
|
||||
"value": "1",
|
||||
"info": "Trigger the script that is set in the <b>Command</b> option. <b>Command</b> is only visible when selecting this option."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "record",
|
||||
"field": "Use Record Method",
|
||||
"description": "Use Traditional Recording, Hotswap, or Delete Motionless with their currently set options in the Global Detection Settings section.",
|
||||
"default": "No",
|
||||
"example": "",
|
||||
"possible": [
|
||||
{
|
||||
"name": "Default",
|
||||
"value": "",
|
||||
"info": "Use values set in Global Detector Settings.",
|
||||
"selected": true
|
||||
},
|
||||
{
|
||||
"name": "No",
|
||||
"value": "0",
|
||||
"info": "No Traditional Recording, Hotswap, or Delete Motionless."
|
||||
},
|
||||
{
|
||||
"name": "Yes",
|
||||
"value": "1",
|
||||
"info": "Use Traditional Recording, Hotswap, or Delete Motionless with their currently set options in the Global Detection Settings section."
|
||||
}
|
||||
]
|
||||
},
|
||||
].forEach(function(item){ %>
|
||||
<%
|
||||
var name = 'actions='+item.name
|
||||
if(item.name.indexOf('=') > -1){
|
||||
name = item.name
|
||||
}
|
||||
%>
|
||||
<div class="form-group actions-row">
|
||||
<label>
|
||||
<div>
|
||||
<span>
|
||||
<%-item.field%>
|
||||
<small><%-item.description%></small>
|
||||
</span>
|
||||
</div>
|
||||
<div>
|
||||
<select <%- name %> class="form-control">
|
||||
<% item.possible.forEach(function(option){ %>
|
||||
<option value="<%-option.value%>"><%-option.name%></option>
|
||||
<% }) %>
|
||||
</select>
|
||||
</div>
|
||||
</label>
|
||||
</div>
|
||||
<% }) %>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<div class="pull-left">
|
||||
<button type="button" class="btn btn-default" data-dismiss="modal"><%- lang['Close'] %></button>
|
||||
<button type="button" class="btn btn-danger delete"><%- lang['Delete'] %></button>
|
||||
</div>
|
||||
<button type="submit" class="btn btn-success"><%- lang['Save'] %></button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
|
@ -26,7 +26,7 @@
|
|||
<%-lang.IdentityText2%>
|
||||
</blockquote>
|
||||
<div class="form-group">
|
||||
<label>
|
||||
<label>
|
||||
<div><span><%-lang.Mode%></span></div>
|
||||
<div><select class="form-control" name="mode" selector="h_m">
|
||||
<option value="stop"><%-lang.Disabled%></option>
|
||||
|
@ -124,26 +124,26 @@
|
|||
<div class="form-group h_p_input h_p_rtsp">
|
||||
<label><div><span><%-lang['RTSP Transport']%></span></div>
|
||||
<div><select class="form-control" detail="rtsp_transport">
|
||||
<option value="no" selected><%-lang['Auto']%></option>
|
||||
<option value="tcp"><%-lang['TCP']%></option>
|
||||
<option value="udp"><%-lang['UDP']%></option>
|
||||
<option value="http"><%-lang['HTTP']%></option>
|
||||
<option value="no" selected><%-lang['Auto']%></option>
|
||||
<option value="tcp"><%-lang['TCP']%></option>
|
||||
<option value="udp"><%-lang['UDP']%></option>
|
||||
<option value="http"><%-lang['HTTP']%></option>
|
||||
</select></div>
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label><div><span><%-lang['Username']%></span></div>
|
||||
<div><input class="form-control" detail="muser" placeholder=""></div>
|
||||
<div><input class="form-control" detail="muser"></div>
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label><div><span><%-lang['Password']%></span></div>
|
||||
<div><input class="form-control" type="password" detail="mpass" placeholder=""></div>
|
||||
<div><input class="form-control" type="password" detail="mpass"></div>
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label><div><span><%-lang['Host']%></span></div>
|
||||
<div><input class="form-control" name="host" placeholder=""></div>
|
||||
<div><input class="form-control" name="host"></div>
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
|
@ -208,7 +208,7 @@
|
|||
<div><input class="form-control" detail="probesize"></div>
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-group h_t_input h_t_mp4">
|
||||
<div class="form-group h_t_input h_t_mp4 h_t_local">
|
||||
<label><div><span><%-lang["Loop Stream"]%></span></div>
|
||||
<div><select class="form-control" detail="stream_loop">
|
||||
<option value="0" selected><%-lang.No%></option>
|
||||
|
@ -259,6 +259,11 @@
|
|||
<option value="hevc_qsv"><%-lang['hevc_qsv']%></option>
|
||||
<option value="mpeg2_qsv"><%-lang['mpeg2_qsv']%></option>
|
||||
</optgroup>
|
||||
<optgroup label="Raspberry Pi">
|
||||
<option value="h264_mmal"><%-lang['h264_mmal']%></option>
|
||||
<option value="mpeg2_mmal"><%-lang['mpeg2_mmal']%></option>
|
||||
<option value="mpeg4_mmal"><%-lang['mpeg4_mmal']%></option>
|
||||
</optgroup>
|
||||
</select></div>
|
||||
</label>
|
||||
</div>
|
||||
|
@ -289,9 +294,9 @@
|
|||
</div>
|
||||
<div class="form-group">
|
||||
<label><div><span><%-lang['Stream Type']%></span></div>
|
||||
<div><select class="form-control" detail="stream_type" selector="h_st" triggerChange="#add_monitor [detail=stream_vcodec]" triggerChangeIgnore="b64,mjpeg">
|
||||
<div><select class="form-control" detail="stream_type" selector="h_st" triggerChange="#add_monitor [detail=stream_vcodec]" triggerChangeIgnore="b64,mjpeg,jpeg,gif">
|
||||
<option value="mp4"><%-lang['Poseidon']%></option>
|
||||
<!-- <option value="pam">PAM</option>-->
|
||||
<option value="h265"><%-lang['HEVC (H.265)']%></option>
|
||||
<option value="b64" selected><%-lang['Base64 over Websocket']%></option>
|
||||
<option value="jpeg"><%-lang['JPEG (Auto Enables JPEG API)']%></option>
|
||||
<option value="mjpeg"><%-lang['MJPEG']%></option>
|
||||
|
@ -300,7 +305,7 @@
|
|||
</select></div>
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-group h_st_input h_st_flv h_st_mp4">
|
||||
<div class="form-group h_st_input h_st_flv h_st_mp4 h_st_h265">
|
||||
<label><div><span><%-lang['Connection Type']%></span></div>
|
||||
<div><select class="form-control" detail="stream_flv_type" selector="h_st_lat">
|
||||
<option value="http" selected><%-lang['HTTP']%></option>
|
||||
|
@ -318,7 +323,7 @@
|
|||
<div><input class="form-control" detail="stream_mjpeg_clients" placeholder="20"></div>
|
||||
</label>
|
||||
</div>
|
||||
<div class="h_st_input h_st_hls h_st_flv h_st_mp4">
|
||||
<div class="h_st_input h_st_hls h_st_flv h_st_mp4 h_st_h265">
|
||||
<div class="form-group">
|
||||
<label><div><span><%-lang['HLS Video Encoder']%></span></div>
|
||||
<div><select class="form-control" detail="stream_vcodec" selector="h_hls_v">
|
||||
|
@ -334,6 +339,7 @@
|
|||
<option value="h264_qsv"><%-lang['h264_qsv']%></option>
|
||||
<option value="hevc_qsv"><%-lang['hevc_qsv']%></option>
|
||||
<option value="mpeg2_qsv"><%-lang['mpeg2_qsv']%></option>
|
||||
<option value="h264_omx"><%-lang['h264_omx']%></option>
|
||||
</optgroup>
|
||||
</select></div>
|
||||
</label>
|
||||
|
@ -351,7 +357,7 @@
|
|||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="h_st_input h_st_mjpeg h_st_b64 h_st_hls h_st_flv h_st_mp4 h_hls_v_input h_hls_v_libx264 h_hls_v_libx265 h_hls_v_h264_nvenc h_hls_v_hevc_nvenc h_hls_v_no">
|
||||
<div class="h_st_input h_st_mjpeg h_st_b64 h_st_hls h_st_gif h_st_flv h_st_mp4 h_st_h265 h_hls_v_input h_hls_v_libx264 h_hls_v_libx265 h_hls_v_h264_nvenc h_hls_v_hevc_nvenc h_hls_v_no">
|
||||
<div class="h_st_input h_st_hls">
|
||||
<div class="form-group">
|
||||
<label><div><span><%-lang['HLS Segment Length']%></span></div>
|
||||
|
@ -364,7 +370,7 @@
|
|||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group h_st_input h_st_hls h_st_flv h_st_mp4">
|
||||
<div class="form-group h_st_input h_st_hls h_st_flv h_st_mp4 h_st_h265">
|
||||
<label><div><span><%-lang['HLS Preset']%></span></div>
|
||||
<div><input class="form-control" detail="preset_stream" placeholder="ultrafast"></div>
|
||||
</label>
|
||||
|
@ -447,8 +453,8 @@
|
|||
<div class="form-group">
|
||||
<label><div><span><%-lang['Enabled']%></span></div>
|
||||
<div><select class="form-control" detail="stream_timestamp" selector="h_tm">
|
||||
<option value="1"><%-lang.Yes%></option>
|
||||
<option value="0" selected><%-lang.No%></option>
|
||||
<option value="1"><%-lang.Yes%></option>
|
||||
<option value="0" selected><%-lang.No%></option>
|
||||
</select></div>
|
||||
</label>
|
||||
</div>
|
||||
|
@ -545,12 +551,12 @@
|
|||
</div>
|
||||
<div class="form-group">
|
||||
<label><div><span><%-lang['Image Width']%></span></div>
|
||||
<div><input class="form-control" detail="snap_scale_x" placeholder=""></div>
|
||||
<div><input class="form-control" detail="snap_scale_x"></div>
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label><div><span><%-lang['Image Height']%></span></div>
|
||||
<div><input class="form-control" detail="snap_scale_y" placeholder=""></div>
|
||||
<div><input class="form-control" detail="snap_scale_y"></div>
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
|
@ -578,8 +584,8 @@
|
|||
<div class="form-group">
|
||||
<label><div><span><%-lang['Record File Type']%></span></div>
|
||||
<div><select class="form-control" name="ext" selector="h_f">
|
||||
<option value="webm"><%-lang['WebM (libvpx)']%></option>
|
||||
<option value="mp4"><%-lang['MP4 (copy, libx264, libx265)']%></option>
|
||||
<option value="webm"><%-lang['WebM (libvpx)']%></option>
|
||||
<option value="mp4"><%-lang['MP4 (copy, libx264, libx265)']%></option>
|
||||
<!-- <option value="mkv">MKV</option> -->
|
||||
</select></div>
|
||||
</label>
|
||||
|
@ -606,6 +612,7 @@
|
|||
<option value="h264_qsv"><%-lang['h264_qsv']%></option>
|
||||
<option value="hevc_qsv"><%-lang['hevc_qsv']%></option>
|
||||
<option value="mpeg2_qsv"><%-lang['mpeg2_qsv']%></option>
|
||||
<option value="h264_omx"><%-lang['h264_omx']%></option>
|
||||
</optgroup>
|
||||
<optgroup label="WebM <%-lang['Hardware Accelerated']%>">
|
||||
<option value="vp8_cuvid"><%-lang['vp8_cuvid']%></option>
|
||||
|
@ -618,12 +625,12 @@
|
|||
<div class="h_vc_input h_vc_libvpx h_vc_libvpx-vp9 h_vc_libx264 h_vc_libx265 h_vc_hevc_nvenc h_vc_h264_nvenc h_vc_h264_vaapi h_vc_hevc_vaapi h_vc_h264_qsv h_vc_hevc_qsv h_vc_mpeg2_qsv h_vc_default h_vc_none">
|
||||
<div class="form-group">
|
||||
<label><div><span><%-lang['Quality']%></span></div>
|
||||
<div><input class="form-control" detail="crf" placeholder=""></div>
|
||||
<div><input class="form-control" detail="crf"></div>
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label><div><span><%-lang['Preset']%></span></div>
|
||||
<div><input class="form-control" detail="preset_record" placeholder=""></div>
|
||||
<div><input class="form-control" detail="preset_record"></div>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -705,8 +712,8 @@
|
|||
<div class="form-group">
|
||||
<label><div><span><%-lang['Enabled']%></span></div>
|
||||
<div><select class="form-control" detail="timestamp" selector="h_tm">
|
||||
<option value="1"><%-lang.Yes%></option>
|
||||
<option value="0" selected><%-lang.No%></option>
|
||||
<option value="1"><%-lang.Yes%></option>
|
||||
<option value="0" selected><%-lang.No%></option>
|
||||
</select></div>
|
||||
</label>
|
||||
</div>
|
||||
|
@ -785,7 +792,7 @@
|
|||
<h4><%-lang['Custom']%></h4>
|
||||
<div class="form-group">
|
||||
<label><div><span><%-lang['Input Flags']%></span></div>
|
||||
<div><input class="form-control" detail="cust_input" placeholder=""></div>
|
||||
<div><input class="form-control" detail="cust_input"></div>
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-group h_sn_input h_sn_1" style="display:none">
|
||||
|
@ -820,7 +827,7 @@
|
|||
</div>
|
||||
<div class="form-group h_m_input h_m_record">
|
||||
<label><div><span><%-lang['Recording Flags']%></span></div>
|
||||
<div><input class="form-control" detail="cust_record" placeholder=""></div>
|
||||
<div><input class="form-control" detail="cust_record"></div>
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
|
@ -1005,13 +1012,30 @@
|
|||
</select></div>
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label><div><span><%-lang['Detector Filters']%></span></div>
|
||||
<div><select class="form-control" detail="use_detector_filters" selector="h_det_fil">
|
||||
<option value="0" selected><%-lang.No%></option>
|
||||
<option value="1"><%-lang.Yes%></option>
|
||||
</select></div>
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-group h_det_fil_input h_det_fil_1">
|
||||
<label><div><span><%-lang['Filter for Objects only']%></span></div>
|
||||
<div><select class="form-control" detail="use_detector_filters_object">
|
||||
<option value="0" selected><%-lang.No%></option>
|
||||
<option value="1"><%-lang.Yes%></option>
|
||||
</select></div>
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-group h_det_discord_input h_det_discord_1">
|
||||
<label><div><span><%-lang['Allow Next Discord Alert']%></span></div>
|
||||
<div><input class="form-control" detail="detector_discordbot_timeout" placeholder="10"></div>
|
||||
</label>
|
||||
</div>
|
||||
<div class="hidden">
|
||||
<div><input detail="cords" placeholder=""></div>
|
||||
<input detail="cords">
|
||||
<input detail="detector_filters">
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<a class="btn btn-danger btn-block" monitor="region"><i class="fa fa-grav"></i> <%-lang['Region Editor']%></a>
|
||||
|
@ -1090,7 +1114,7 @@
|
|||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group-group orange shinobi-detector-opencv shinobi-detector-openalpr shinobi-detector_plug" section id="monSectionDetectorObject">
|
||||
<div class="form-group-group orange shinobi-detector-opencv shinobi-detector-openalpr shinobi-detector-pythonyolo shinobi-detector_plug" section id="monSectionDetectorObject">
|
||||
<h4><%-lang['Object Detection']%> <small><%-lang['Plugin']%> : <b class="shinobi-detector_name"></b> <b class="shinobi-detector-invert"><%-lang['Not Connected']%></b><b class="shinobi-detector" style="display:none"><%-lang['Connected']%></b></small></h4>
|
||||
<div class="form-group">
|
||||
<label><div><span><%-lang['Detect Objects']%></span></div>
|
||||
|
@ -1102,12 +1126,31 @@
|
|||
</div>
|
||||
<div class="form-group">
|
||||
<label><div><span><%-lang['Check for Motion First']%></span></div>
|
||||
<div><select class="form-control" detail="detector_use_motion">
|
||||
<div><select class="form-control" detail="detector_use_motion" selector="h_det_mot_fir">
|
||||
<option value="0" selected><%-lang.No%></option>
|
||||
<option value="1"><%-lang.Yes%></option>
|
||||
</select></div>
|
||||
</label>
|
||||
</div>
|
||||
<div class="h_det_pam_input h_det_pam_1">
|
||||
<div class="h_det_mot_fir_input h_det_mot_fir_1">
|
||||
<div class="form-group">
|
||||
<label><div><span><%-lang['Frame Rate']%></span></div>
|
||||
<div><input class="form-control" type="number" min="1" detail="detector_fps_object" placeholder="2"></div>
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label><div><span><%-lang['Width']%></span></div>
|
||||
<div><input class="form-control" type="number" min="1" detail="detector_scale_x_object" placeholder="320"></div>
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label><div><span><%-lang['Height']%></span></div>
|
||||
<div><input class="form-control" type="number" min="1" detail="detector_scale_y_object" placeholder="240"></div>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class=" h_casc_input h_casc_1" style="display:none">
|
||||
<div class="form-group-group orange shinobi-detector-opencv shinobi-detector-openalpr shinobi-detector_plug" style="display:none" section id="monSectionLisencePlateDetector">
|
||||
<h4><%-lang['Lisence Plate Detector']%></h4>
|
||||
|
@ -1222,8 +1265,8 @@
|
|||
<div class="form-group">
|
||||
<label><div><span><%-lang['Controllable']%></span></div>
|
||||
<div><select class="form-control" detail="control" selector="h_c">
|
||||
<option value="0"><%-lang.No%></option>
|
||||
<option value="1"><%-lang.Yes%></option>
|
||||
<option value="0"><%-lang.No%></option>
|
||||
<option value="1"><%-lang.Yes%></option>
|
||||
</select></div>
|
||||
</label>
|
||||
</div>
|
||||
|
@ -1236,7 +1279,7 @@
|
|||
<div class="form-group">
|
||||
<label><div><span><%-lang['Call Method']%></span></div>
|
||||
<div><select class="form-control" detail="control_url_method" selector="h_control_call">
|
||||
<option value="GET">GET (<%-lang.Default%>)</option>
|
||||
<option value="GET">GET (<%-lang.Default%>)</option>
|
||||
<option value="PUT">PUT</option>
|
||||
<option value="POST">POST</option>
|
||||
<option value="ONVIF">ONVIF</option>
|
||||
|
@ -1246,7 +1289,7 @@
|
|||
<div class="form-group h_control_call_input h_control_call_GET h_control_call_PUT h_control_call_POST">
|
||||
<label><div><span><%-lang['Digest Authentication']%></span></div>
|
||||
<div><select class="form-control" detail="control_digest_auth">
|
||||
<option value="0"><%-lang.No%></option>
|
||||
<option value="0"><%-lang.No%></option>
|
||||
<option value="1"><%-lang.Yes%></option>
|
||||
</select></div>
|
||||
</label>
|
||||
|
@ -1254,7 +1297,7 @@
|
|||
<div class="form-group">
|
||||
<label><div><span><%-lang['Stop Command']%></span></div>
|
||||
<div><select class="form-control" detail="control_stop" selector="h_cs">
|
||||
<option value="0"><%-lang.No%></option>
|
||||
<option value="0"><%-lang.No%></option>
|
||||
<option value="1"><%-lang.Yes%></option>
|
||||
</select></div>
|
||||
</label>
|
||||
|
@ -1355,8 +1398,8 @@
|
|||
<div class="form-group">
|
||||
<label><div><span><%-lang['Copy to Settings']%></span></div>
|
||||
<div><select class="form-control" id="copy_settings" selector="h_copy_settings">
|
||||
<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>
|
||||
|
@ -1364,32 +1407,32 @@
|
|||
<div class="form-group">
|
||||
<label><div><span><%-lang['Copy Connection Settings']%></span></div>
|
||||
<div><select class="form-control" copy="#monSectionConnection">
|
||||
<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['Copy Input Settings']%></span></div>
|
||||
<div><select class="form-control" copy="#monSectionInput">
|
||||
<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['Copy Stream Settings']%></span></div>
|
||||
<div><select class="form-control" copy="#monSectionStream,#monSectionStreamTimestamp,#monSectionStreamWatermark">
|
||||
<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['Copy JPEG API Settings']%></span></div>
|
||||
<div><select class="form-control" copy="#monSectionJPEGAPI">
|
||||
<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>
|
||||
|
@ -1397,8 +1440,8 @@
|
|||
<div class="form-group">
|
||||
<label><div><span><%-lang['Copy Stream Channel Settings']%></span></div>
|
||||
<div><select class="form-control" copy="stream_channel">
|
||||
<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>
|
||||
|
@ -1406,40 +1449,40 @@
|
|||
<div class="form-group">
|
||||
<label><div><span><%-lang['Copy Recording Settings']%></span></div>
|
||||
<div><select class="form-control" copy="#monSectionRecording">
|
||||
<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['Copy Detector Settings']%></span></div>
|
||||
<div><select class="form-control" copy="#monSectionDetector,#monSectionDetectorBuffer,#monSectionLisencePlateDetector,#monSectionNoMotionDetector">
|
||||
<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['Copy Custom Settings']%></span></div>
|
||||
<div><select class="form-control" copy="#monSectionCustom">
|
||||
<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['Copy Group Settings']%></span></div>
|
||||
<div><select class="form-control" copy="#monSectionGrouping">
|
||||
<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['Copy Logging Settings']%></span></div>
|
||||
<div><select class="form-control" copy="#monSectionLogging">
|
||||
<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>
|
||||
|
@ -1462,15 +1505,14 @@
|
|||
<option value="fatal"><%-lang['Fatal']%></option>
|
||||
<option value="error" selected><%-lang['on Error']%></option>
|
||||
<option value="warning"><%-lang['All Warnings']%></option>
|
||||
<option value="debug"><%-lang['Debug']%></option>
|
||||
</select></div>
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label><div><span><%-lang['Save Log in SQL']%></span></div>
|
||||
<div><select class="form-control" detail="sqllog">
|
||||
<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>
|
||||
|
@ -1504,16 +1546,19 @@
|
|||
<li class="mdl-menu__item add_map"><i class="fa fa-rss"></i> <%-lang['Add Input Feed']%></li>
|
||||
<li class="mdl-menu__item add_channel"><i class="fa fa-puzzle-piece"></i> <%-lang['Add Channel']%></li>
|
||||
</ul>
|
||||
<span class="h_det_input h_det_1"><button type="button" style="display:none" class="btn btn-warning shinobi-detector-opencv shinobi-detector-openalpr shinobi-detector-motion shinobi-detector_plug" monitor="region"><i class="fa fa-grav"></i> <%-lang['Region Editor']%></button></span>
|
||||
<div class="h_det_input h_det_1" style="display:inline-block">
|
||||
<button type="button" class="btn btn-primary" monitor="region"><i class="fa fa-grav"></i> <%-lang['Region Editor']%></button>
|
||||
<button type="button" class="btn btn-primary" monitor="detector_filters"><i class="fa fa-grav"></i> <%-lang['Detector Filters']%></button>
|
||||
</div>
|
||||
</div>
|
||||
<div style="display:inline-block;margin-right:5px">
|
||||
<div><select class="form-control btn-default" dropdown_toggle="monedit_user_type" selector="h_us">
|
||||
<option value="simple" selected><%-lang['Simple']%></option>
|
||||
<option value="advanced"><%-lang['Advanced']%></option>
|
||||
<option value="simple" selected><%-lang['Simple']%></option>
|
||||
<option value="advanced"><%-lang['Advanced']%></option>
|
||||
</select></div>
|
||||
</div>
|
||||
<button type="submit" class="btn btn-success"><i class="fa fa-check"></i> <%-lang.Save%></button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -24,6 +24,33 @@
|
|||
</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">
|
||||
|
@ -41,14 +68,6 @@
|
|||
<div><input class="form-control" type="password" name="password_again"></div>
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label><div><span><%-lang['2-Factor Authentication']%> (<%-lang.Email%>)</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>
|
||||
<% if(!details.sub){ %>
|
||||
<% if(details.edit_size!=='0'){ %>
|
||||
<div class="form-group">
|
||||
|
@ -116,11 +135,19 @@
|
|||
</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['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>
|
||||
<% if(!details.sub){ %>
|
||||
<div class="form-group-group blue">
|
||||
|
|
|
@ -20,6 +20,7 @@ if(data.url.charAt(data.url.length - 1) !== '/'){
|
|||
<script src="<%=data.url%>libs/js/poseidon.js"></script>
|
||||
<script src="<%=data.url%>libs/js/hls.min.js"></script>
|
||||
<script src="<%=data.url%>libs/js/flv.min.js"></script>
|
||||
<script src="<%=data.url%>libs/js/libde265.min.js"></script>
|
||||
<% if(data.addon){
|
||||
var ar={}
|
||||
decodeURI(data.addon).split('|').forEach(function(v){
|
||||
|
@ -133,7 +134,7 @@ $(document).ready(function(){
|
|||
})
|
||||
</script>
|
||||
<div class="shinobi_stream" id="<%= data.name %>">
|
||||
|
||||
|
||||
<% switch(mon.details.stream_type){
|
||||
case'jpeg':
|
||||
%><img class="stream-element"><%
|
||||
|
@ -148,8 +149,8 @@ $(document).ready(function(){
|
|||
%><canvas class="stream-element"></canvas><%
|
||||
break;
|
||||
} %>
|
||||
|
||||
|
||||
|
||||
|
||||
<% if(data.addon&&data.addon.indexOf('gui')>-1){ %>
|
||||
<div class="shinobi_hud">
|
||||
<div class="shinobi_viewers" title="Current number of viewers"></div>
|
||||
|
@ -170,11 +171,30 @@ $(document).ready(function(){
|
|||
$.shinobi.mon={}
|
||||
};
|
||||
$.shinobi.init=function(d){
|
||||
if($.shinobi.mon[d.id].Base64 && $.shinobi.mon[d.id].Base64.connected){
|
||||
$.shinobi.mon[d.id].Base64.disconnect()
|
||||
}
|
||||
if($.shinobi.mon[d.id].Poseidon){
|
||||
$.shinobi.mon[d.id].Poseidon.destroy()
|
||||
}
|
||||
if ($.shinobi.mon[d.id].h265Player) {
|
||||
$.shinobi.mon[d.id].h265Player.stop()
|
||||
}
|
||||
if($.shinobi.mon[d.id].h265Socket && $.shinobi.mon[d.id].h265Socket.connected){
|
||||
$.shinobi.mon[d.id].h265Socket.disconnect()
|
||||
}
|
||||
if($.shinobi.mon[d.id].h265HttpStream && $.shinobi.mon[d.id].abort){
|
||||
$.shinobi.mon[d.id].h265HttpStream.abort()
|
||||
}
|
||||
if($.shinobi.mon[d.id].flv){
|
||||
$.shinobi.mon[d.id].flv.destroy()
|
||||
}
|
||||
if($.shinobi.mon[d.id].hls){
|
||||
$.shinobi.mon[d.id].hls.destroy()
|
||||
}
|
||||
clearInterval($.shinobi.mon[d.id].jpegInterval);
|
||||
switch($.shinobi.mon[d.id].details.stream_type){
|
||||
case'b64':
|
||||
if($.shinobi.mon[d.id].Base64 && $.shinobi.mon[d.id].Base64.connected){
|
||||
$.shinobi.mon[d.id].Base64.disconnect()
|
||||
}
|
||||
$.shinobi.mon[d.id].Base64 = io('<%=data.url%>',{transports: ['websocket'], forceNew: false})
|
||||
var ws = $.shinobi.mon[d.id].Base64
|
||||
ws.on('diconnect',function(){
|
||||
|
@ -209,7 +229,7 @@ $(document).ready(function(){
|
|||
// }
|
||||
// ctx.getContext("2d").drawImage(image,d.x,d.y,d.width,d.height)
|
||||
ctx.getContext("2d").drawImage(image,d.x,d.y,ctx.width,ctx.height)
|
||||
URL.revokeObjectURL($.ccio.mon[d.ke+d.id+user.auth_token].imageUrl)
|
||||
URL.revokeObjectURL($.shinobi.mon[d.id].imageUrl)
|
||||
}
|
||||
ws.on('data',function(imageData){
|
||||
try{
|
||||
|
@ -232,9 +252,6 @@ $(document).ready(function(){
|
|||
case'mp4':
|
||||
var stream = $('#SHINOBI_'+d.ke+'_'+d.id+' .stream-element');
|
||||
if($.shinobi.mon[d.id].details.stream_flv_type==='ws'){
|
||||
if($.shinobi.mon[d.id].Poseidon){
|
||||
$.shinobi.mon[d.id].Poseidon.destroy()
|
||||
}
|
||||
var createPoseidon = function(){
|
||||
$.shinobi.mon[d.id].Poseidon = new Poseidon({
|
||||
video: stream[0],
|
||||
|
@ -261,11 +278,38 @@ $(document).ready(function(){
|
|||
stream.attr('src','<%=data.url%><%=data.auth%>/mp4/'+d.ke+'/'+d.id+'/s.mp4')
|
||||
}
|
||||
break;
|
||||
case'h265':
|
||||
var player = $.shinobi.mon[d.id].h265Player
|
||||
var video = $('#SHINOBI_'+d.ke+'_'+d.id+' .stream-element')[0]
|
||||
player = new libde265.RawPlayer(video)
|
||||
player.set_status_callback(function(msg, fps) {
|
||||
})
|
||||
player.launch()
|
||||
if($.shinobi.mon[d.id].details.stream_flv_type==='ws'){
|
||||
$.shinobi.mon[d.id].h265Socket = io(url,{transports: ['websocket'], forceNew: false})
|
||||
var ws = $.shinobi.mon[d.id].h265Socket
|
||||
ws.on('diconnect',function(){
|
||||
console.log('h265Socket Stream Disconnected')
|
||||
})
|
||||
ws.on('connect',function(){
|
||||
ws.emit('h265',{
|
||||
auth:'<%=data.auth%>',
|
||||
ke:d.ke,
|
||||
uid:'<%=data.uid%>',
|
||||
id:d.id,
|
||||
url: '<%=data.url%>'
|
||||
// channel: channel
|
||||
})
|
||||
ws.on('data',function(imageData){
|
||||
player._handle_onChunk(imageData)
|
||||
})
|
||||
})
|
||||
}else{
|
||||
$.shinobi.mon[d.id].h265HttpStream = player.createHttpStream('<%=data.url%><%=data.auth%>/h265/'+d.ke+'/'+d.id+'/s.hevc')
|
||||
}
|
||||
break;
|
||||
case'flv':
|
||||
if (flvjs.isSupported()) {
|
||||
if($.shinobi.mon[d.id].flv){
|
||||
$.shinobi.mon[d.id].flv.destroy()
|
||||
}
|
||||
var options = {};
|
||||
// if($.shinobi.mon[d.id].details.stream_flv_type==='ws'){
|
||||
// if($.shinobi.mon[d.id].details.stream_flv_maxLatency&&$.shinobi.mon[d.id].details.stream_flv_maxLatency!==''){
|
||||
|
@ -307,9 +351,9 @@ $(document).ready(function(){
|
|||
k=d.mon.details;
|
||||
k.jpegInterval=parseFloat(k.jpegInterval);
|
||||
if(!k.jpegInterval||k.jpegInterval===''||isNaN(k.jpegInterval)){k.jpegInterval=1}
|
||||
if(!$.shinobi.mon[d.mon.mid].jpegInterval){
|
||||
clearInterval($.shinobi.mon[d.mon.mid].jpegInterval);
|
||||
$.shinobi.mon[d.mon.mid].jpegInterval=setInterval(function(){
|
||||
if(!$.shinobi.mon[d.id].jpegInterval){
|
||||
clearInterval($.shinobi.mon[d.id].jpegInterval);
|
||||
$.shinobi.mon[d.id].jpegInterval=setInterval(function(){
|
||||
$('#SHINOBI_'+d.ke+'_'+d.id+' .stream-element').attr('src','<%=data.url%><%=data.auth%>/jpeg/'+d.mon.ke+'/'+d.mon.mid+'/s.jpg?time='+(new Date()).getTime())
|
||||
},1000/k.jpegInterval);
|
||||
}
|
||||
|
@ -317,9 +361,6 @@ $(document).ready(function(){
|
|||
case'hls':
|
||||
var video = $('#SHINOBI_'+d.ke+'_'+d.id+' .stream-element')[0];
|
||||
d.url='<%=data.url%><%=data.auth%>/hls/'+d.ke+'/'+d.id+'/s.m3u8';
|
||||
if($.shinobi.mon[d.id].hls){
|
||||
$.shinobi.mon[d.id].hls.destroy()
|
||||
}
|
||||
if (navigator.userAgent.match(/(iPod|iPhone|iPad)/)||(navigator.userAgent.match(/(Safari)/)&&!navigator.userAgent.match('Chrome'))) {
|
||||
video.src=d.url;
|
||||
video.play();
|
||||
|
@ -386,7 +427,7 @@ $(document).ready(function(){
|
|||
$(window).resize();
|
||||
// d.mon.details=JSON.stringify(d.mon.details);
|
||||
d.mon.id = d.mon.mid
|
||||
$.shinobi.mon[d.mon.mid]=d.mon;
|
||||
$.shinobi.mon[d.id] = d.mon;
|
||||
$.shinobi.init(d.mon);
|
||||
break;
|
||||
}
|
||||
|
@ -413,4 +454,4 @@ $(document).ready(function(){
|
|||
$.shinobi.init(monitor);
|
||||
})
|
||||
$('.shinobi_ws_http_toggle').show()
|
||||
</script>
|
||||
</script>
|
||||
|
|
|
@ -163,6 +163,7 @@
|
|||
<% include blocks/monitoredit.ejs %>
|
||||
<% include blocks/probe.ejs %>
|
||||
<% include blocks/region.ejs %>
|
||||
<% include blocks/detectorfilters.ejs %>
|
||||
<% include blocks/confirm.ejs %>
|
||||
<% if(config.DropboxAppKey){ %>
|
||||
<!--Dropbox Library, Change data-app-key to your app key. -->
|
||||
|
@ -179,6 +180,7 @@
|
|||
<script src="<%-originalURL%>libs/js/socket.io.js"></script>
|
||||
<script src="<%-originalURL%>libs/js/fullcalendar.min.js"></script>
|
||||
<script src="<%-originalURL%>libs/js/hls.min.js"></script>
|
||||
<script src="<%-originalURL%>libs/js/libde265.min.js"></script>
|
||||
<script type="text/javascript" src="<%-originalURL%>libs/js/flv.shinobi.js">;</script>
|
||||
<script src="<%-originalURL%>libs/js/menu.js"></script>
|
||||
<script src="<%-originalURL%>libs/js/clock.js"></script>
|
||||
|
@ -193,4 +195,4 @@
|
|||
<script src="<%-originalURL%>libs/js/gridstack.min.js"></script>
|
||||
<script src="<%-originalURL%>libs/js/gridstack.jQueryUI.min.js"></script>
|
||||
<script><% include ../libs/js/main.dash2.js %></script>
|
||||
<% include blocks/help.ejs %>
|
||||
<% include blocks/help.ejs %>
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue