Merge branch 'master' into storageareas

This commit is contained in:
Isaac Connor 2019-01-21 13:52:38 -05:00
commit 7260f823cb
65 changed files with 5051 additions and 5300 deletions

View File

@ -2,7 +2,7 @@
# libraries
web/api/lib
web/includes/csrf/csrf-magic.js
web/includes/csrf/
web/js/videojs.zoomrotate.js
web/skins/classic/js/bootstrap.js
web/skins/classic/js/chosen
@ -13,3 +13,7 @@ web/skins/classic/js/jquery.js
web/skins/classic/js/moment.js
web/skins/classic/js/video.js
web/tools/mootools
# Cannot be parsed as JS
web/skins/classic/includes/export_functions.php
web/skins/classic/views/events.php

View File

@ -5,26 +5,46 @@ module.exports = {
"browser": true,
},
"extends": ["google"],
"overrides": [{
// eslint-plugin-html handles eol-last slightly different - it applies to
// each set of script tags, so we turn it off here.
"files": "**/*.*php",
"rules": {
"eol-last": "off",
"indent": "off",
},
}],
"plugins": [
"html",
"php-markup",
],
"rules": {
"brace-style": "off",
"camelcase": "off",
"comma-dangle": "off",
"guard-for-in": "off",
"key-spacing": "off",
"max-len": "off",
"new-cap": ["error", {
capIsNewExceptions: ["Error", "Warning", "Debug", "Polygon_calcArea", "Play", "Stop"],
newIsCapExceptionPattern: "^Asset\.."
}],
"no-array-constructor": "off",
"no-caller": "off",
"no-new-object": "off",
"no-unused-vars": "off",
"no-unused-vars": ["error", {
"vars": "local",
"args": "none",
"ignoreRestSiblings": false
}],
"no-var": "off",
"object-curly-spacing": "off",
"prefer-rest-params": "off",
"quotes": "off",
"require-jsdoc": "off",
"spaced-comment": "off",
},
"settings": {
"php/php-extensions": [".php"],
"php/markup-replacement": {"php": "", "=": "0"},
"php/keep-eol": false,
"php/remove-whitespace": false,
"php/remove-empty-line": false,
"php/remove-php-lint": false
},
};

4
.github/support.yml vendored
View File

@ -11,8 +11,10 @@ supportComment: >
attempts to ask a question.
Please use our support channels to get help with or discuss this project:
- The [ZoneMinder-Chat Slack channel](https://zoneminder-chat.herokuapp.com/)
- The [ZoneMinder Forum](https://forums.zoneminder.com/)
- The [ZoneMinder USer Forum](https://forums.zoneminder.com/)
# Close issues marked as support requests
close: true

View File

@ -32,24 +32,28 @@ install:
- update-binfmts --enable qemu-arm
env:
global:
- SMPFLAGS=-j4
matrix:
- OS=el DIST=7
- OS=fedora DIST=27 DOCKER_REPO=knnniggett/packpack
- OS=fedora DIST=28 DOCKER_REPO=knnniggett/packpack
- OS=fedora DIST=29 DOCKER_REPO=knnniggett/packpack
- OS=ubuntu DIST=trusty
- OS=ubuntu DIST=xenial
- OS=ubuntu DIST=trusty ARCH=i386
- OS=ubuntu DIST=xenial ARCH=i386
- OS=raspbian DIST=stretch ARCH=armhf DOCKER_REPO=knnniggett/packpack
- SMPFLAGS=-j4 OS=el DIST=7
- SMPFLAGS=-j4 OS=fedora DIST=27 DOCKER_REPO=knnniggett/packpack
- SMPFLAGS=-j4 OS=fedora DIST=28 DOCKER_REPO=knnniggett/packpack
- SMPFLAGS=-j4 OS=fedora DIST=29 DOCKER_REPO=knnniggett/packpack
- SMPFLAGS=-j4 OS=ubuntu DIST=trusty
- SMPFLAGS=-j4 OS=ubuntu DIST=xenial
- SMPFLAGS=-j4 OS=ubuntu DIST=trusty ARCH=i386
- SMPFLAGS=-j4 OS=ubuntu DIST=xenial ARCH=i386
- SMPFLAGS=-j4 OS=raspbian DIST=stretch ARCH=armhf DOCKER_REPO=knnniggett/packpack
compiler:
- gcc
services:
- mysql
- docker
jobs:
include:
- name: eslint
install: npm install -g eslint@5.12.0 eslint-config-google@0.11.0 eslint-plugin-html@5.0.0 eslint-plugin-php-markup@0.2.5
script: eslint --ext .php,.js .
script:
- utils/packpack/startpackpack.sh
@ -65,4 +69,3 @@ deploy:
script: utils/packpack/rsync_xfer.sh
on:
branch: master

View File

@ -770,7 +770,9 @@ void EventStream::runStream() {
send_frame = false;
// commands may set send_frame to true
while(checkCommandQueue());
while ( checkCommandQueue() && !zm_terminate ) {
// The idea is to loop here processing all commands before proceeding.
}
// Update modified time of the socket .lock file so that we can tell which ones are stale.
if ( now.tv_sec - last_comm_update.tv_sec > 3600 ) {

View File

@ -869,6 +869,10 @@ double Monitor::GetFPS() const {
struct timeval time2 = *snap2->timestamp;
double time_diff = tvDiffSec( time2, time1 );
if ( ! time_diff ) {
Error( "No diff between time_diff = %lf (%d:%ld.%ld - %d:%ld.%ld), ibc: %d", time_diff, index2, time2.tv_sec, time2.tv_usec, index1, time1.tv_sec, time1.tv_usec, image_buffer_count );
return 0.0;
}
double curr_fps = image_count/time_diff;
if ( curr_fps < 0.0 ) {

View File

@ -527,7 +527,8 @@ void MonitorStream::runStream() {
bool was_paused = paused;
if ( connkey ) {
while(checkCommandQueue()) {
while ( checkCommandQueue() && !zm_terminate ) {
// Loop in here until all commands are processed.
Debug(2, "Have checking command Queue for connkey: %d", connkey);
got_command = true;
}
@ -536,8 +537,7 @@ Debug(2, "Have checking command Queue for connkey: %d", connkey );
touch(sock_path_lock);
last_comm_update = now;
}
}
} // end if connkey
if ( paused ) {
if ( !was_paused ) {

View File

@ -62,8 +62,13 @@ bool StreamBase::checkInitialised() {
void StreamBase::updateFrameRate(double fps) {
base_fps = fps;
effective_fps = (base_fps*abs(replay_rate))/ZM_RATE_BASE;
frame_mod = 1;
if ( !fps ) {
Debug(1, "Zero fps in updateFrameRate. Setting frame_mod=1 and effective_fps=0.0");
effective_fps = 0.0;
return;
}
effective_fps = (base_fps*abs(replay_rate))/ZM_RATE_BASE;
Debug(3, "FPS:%.2f, MXFPS:%.2f, BFPS:%.2f, EFPS:%.2f, FM:%d", fps, maxfps, base_fps, effective_fps, frame_mod);
// Min frame repeat?
while( effective_fps > maxfps ) {

View File

@ -13,7 +13,7 @@ switch ( $_REQUEST['task'] ) {
$string = $_POST['message'];
$file = !empty($_POST['file']) ? preg_replace( '/\w+:\/\/\w+\//', '', $_POST['file'] ) : '';
$file = !empty($_POST['file']) ? preg_replace( '/\w+:\/\/[\w.:]+\//', '', $_POST['file'] ) : '';
if ( !empty( $_POST['line'] ) )
$line = $_POST['line'];
else

View File

@ -259,13 +259,14 @@ function collectData() {
$index = 0;
$where = array();
$values = array();
foreach( $entitySpec['selector'] as $selector ) {
foreach( $entitySpec['selector'] as $selIndex => $selector ) {
$selectorParamName = ':selector' . $selIndex;
if ( is_array( $selector ) ) {
$where[] = $selector['selector'].' = ?';
$values[] = validInt($id[$index]);
$where[] = $selector['selector'].' = '.$selectorParamName;
$values[$selectorParamName] = validInt($id[$index]);
} else {
$where[] = $selector.' = ?';
$values[] = validInt($id[$index]);
$where[] = $selector.' = '.$selectorParamName;
$values[$selectorParamName] = validInt($id[$index]);
}
$index++;
}
@ -273,8 +274,10 @@ function collectData() {
}
if ( $groupSql )
$sql .= ' GROUP BY '.join( ',', array_unique( $groupSql ) );
if ( !empty($_REQUEST['sort']) )
$sql .= ' order by '.$_REQUEST['sort'];
if ( !empty($_REQUEST['sort']) ) {
$sql .= ' order by :sort';
$values[':sort'] = $_REQUEST['sort'];
}
if ( !empty($entitySpec['limit']) )
$limit = $entitySpec['limit'];
elseif ( !empty($_REQUEST['count']) )

View File

@ -28,7 +28,7 @@ if ( $action == 'login' && isset($_REQUEST['username']) && ( ZM_AUTH_TYPE == 're
if ( !$user ) {
$view = 'login';
} else {
$view = 'console';
$view = 'postlogin';
$redirect = ZM_BASE_URL.$_SERVER['PHP_SELF'].'?view=console';
}
}

View File

@ -36,25 +36,37 @@ function noCacheHeaders() {
}
function CSPHeaders($view, $nonce) {
$additionalScriptSrc = "";
switch ($view) {
case 'login': {
if (defined('ZM_OPT_USE_GOOG_RECAPTCHA')
&& defined('ZM_OPT_GOOG_RECAPTCHA_SITEKEY')
&& defined('ZM_OPT_GOOG_RECAPTCHA_SECRETKEY')
&& ZM_OPT_USE_GOOG_RECAPTCHA && ZM_OPT_GOOG_RECAPTCHA_SITEKEY && ZM_OPT_GOOG_RECAPTCHA_SECRETKEY) {
$additionalScriptSrc = "https://www.google.com";
}
// fall through
}
case 'bandwidth':
case 'blank':
case 'console':
case 'controlcap':
case 'function':
case 'log':
case 'login':
case 'logout':
case 'options':
case 'privacy':
case 'storage':
case 'version': {
// Enforce script-src on pages where inline scripts and event handlers have been fixed.
// 'unsafe-inline' is only for backwards compatibility with browsers which
// only support CSP 1 (with no nonce-* support).
header("Content-Security-Policy: script-src 'unsafe-inline' 'self' 'nonce-$nonce'");
header("Content-Security-Policy: script-src 'unsafe-inline' 'self' 'nonce-$nonce' $additionalScriptSrc");
break;
}
default: {
// Use Report-Only mode on all other pages.
header("Content-Security-Policy-Report-Only: script-src 'unsafe-inline' 'self' 'nonce-$nonce'");
header("Content-Security-Policy-Report-Only: script-src 'unsafe-inline' 'self' 'nonce-$nonce' $additionalScriptSrc");
break;
}
}
@ -462,7 +474,7 @@ function makePopupButton( $url, $winName, $winSize, $buttonValue, $condition=1,
} else {
$string .= ' data-window-tag="' . htmlspecialchars($winSize) . '"';
}
if ($condition) {
if (!$condition) {
$string .= ' disabled="disabled"';
}
$string .= ($options ? (' ' . $options) : '') . '/>';
@ -2434,4 +2446,8 @@ function getAffectedIds( $name ) {
return $ids;
}
function format_duration($time, $separator=':') {
return sprintf('%02d%s%02d%s%02d', floor($time/3600), $separator, ($time/60)%60, $separator, $time%60);
}
?>

View File

@ -1,8 +1,20 @@
'use strict';
var _createClass = function() { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function(Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
var _createClass = function() {
function defineProperties(target, props) {
for (var i = 0; i < props.length; i++) {
var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor);
}
} return function(Constructor, protoProps, staticProps) {
if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor;
};
}();
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _classCallCheck(instance, Constructor) {
if (!(instance instanceof Constructor)) {
throw new TypeError("Cannot call a class as a function");
}
}
var Server = function() {
function Server(json) {

View File

@ -17,8 +17,7 @@
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
//
if ( !window.console )
{
if ( !window.console ) {
window.console =
{
init: function() {},
@ -29,93 +28,101 @@ if ( !window.console )
error: function() {}
};
}
if ( !console.debug )//IE8 has console but doesn't have console.debug so lets alias it.
if ( !console.debug ) {
// IE8 has console but doesn't have console.debug so lets alias it.
console.debug = console.log;
}
var reportLogs = true;
var debugParms;
var debugReq;
function logReport( level, message, file, line )
{
if ( !reportLogs )
function logReport( level, message, file, line ) {
if ( !reportLogs ) {
return;
}
if ( typeof(MooTools) == "undefined" )
if ( typeof(MooTools) == "undefined" ) {
return;
if ( arguments && arguments.callee && arguments.callee.caller && arguments.callee.caller.name )
}
/* eslint-disable no-caller */
if ( arguments && arguments.callee && arguments.callee.caller && arguments.callee.caller.caller && arguments.callee.caller.caller.name ) {
message += ' - '+arguments.callee.caller.caller.name+'()';
}
/* eslint-enable no-caller */
if ( !debugReq )
{
if ( Browser )
if ( !debugReq ) {
if ( Browser ) {
debugParms = "view=request&request=log&task=create&browser[name]="+Browser.name+"&browser[version]="+Browser.version+"&browser[platform]="+(Browser.Platform?Browser.Platform.name:'unknown');
else
} else {
debugParms = "view=request&request=log&task=create&browser[name]=unknown&browser[version]=unknown&browser[platform]=unknown";
}
debugReq = new Request.JSON( {url: thisUrl, method: 'post', timeout: AJAX_TIMEOUT, link: 'chain'} );
}
var requestParms = debugParms;
requestParms += "&level="+level+"&message="+encodeURIComponent(message);
if ( file )
if ( file ) {
requestParms += "&file="+file;
else if ( location.search ) {
} else if ( location.search ) {
//location.search is the querystring part, so ?blah=blah but there is almost never any value to this
requestParms += "&file="+location.search;
}
if ( line )
if ( line ) {
requestParms += "&line="+line;
}
debugReq.send( requestParms );
}
function Panic( message )
{
function Panic( message ) {
console.error( message );
logReport( "PNC", message );
alert( "PANIC: "+message );
}
function Fatal( message )
{
function Fatal( message ) {
console.error( message );
logReport( "FAT", message );
alert( "FATAL: "+message );
}
function Error( message )
{
function Error( message ) {
console.error( message );
logReport( "ERR", message );
}
function Warning( message )
{
function Warning( message ) {
console.warn( message );
logReport( "WAR", message );
}
function Info( message )
{
function Info( message ) {
console.info( message );
logReport( "INF", message );
}
function Debug( message )
{
function Debug( message ) {
console.debug( message );
//logReport( "DBG", message );
}
function Dump( value, label )
{
if ( label )
function Dump( value, label ) {
if ( label ) {
console.debug( label+" => " );
}
console.debug( value );
}
window.onerror =
function( message, url, line )
{
function( message, url, line ) {
logReport( "ERR", message, url, line );
};
window.addEventListener("securitypolicyviolation", function logCSP(evt) {
var level = evt.disposition == "enforce" ? "ERR" : "DBG";
var message = evt.blockedURI + " violated CSP " + evt.violatedDirective;
if (evt.sample) {
message += " (Sample: " + evt.sample + ")";
}
logReport(level, message, evt.sourceFile, evt.lineNumber);
});

View File

@ -6,15 +6,11 @@ var zmMooToolsVersion = '1.3.2';
/*
* Firstly, lets check that mootools has been included and thus is present
*/
if ( typeof(MooTools) == "undefined" )
{
if ( typeof(MooTools) == "undefined" ) {
alert( "MooTools not found! Please check that it was installed correctly in ZoneMinder web root." );
}
else
{
} else {
/* Version check */
if ( MooTools.version < zmMooToolsVersion )
{
if ( MooTools.version < zmMooToolsVersion ) {
alert( "MooTools version "+MooTools.version+" found.\nVersion "+zmMooToolsVersion+" required, please check that it was installed correctly in ZoneMinder web root." );
}
}

View File

@ -1,44 +1,38 @@
var Overlay = new Class({
Implements: [Options, Events],
initialize: function( id, options )
{
initialize: function( id, options ) {
this.setOptions( options );
this.mask = new Mask( document.body, {'maskMargins': false, 'class': 'overlayMask'} );
this.id = id?id:'overlay';
if ( typeOf(this.id) == 'string' )
{
if ( $(this.id) )
if ( typeOf(this.id) == 'string' ) {
if ( $(this.id) ) {
this.element = $(this.id);
}
else
{
} else {
this.element = this.id;
this.id = this.element.get('id');
}
if ( !this.element )
{
if ( !this.element ) {
this.element = new Element( 'div', {'id': this.id, 'class': 'overlay', 'styles': {'display': 'none'}} );
if ( this.options.title || this.options.buttons )
{
if ( this.options.title || this.options.buttons ) {
var overlayHeader = new Element( 'div', {'class': 'overlayHeader'} );
if ( this.options.title )
{
if ( this.options.title ) {
var overlayTitle = new Element( 'div', {'class': 'overlayTitle', 'text': this.options.title} );
overlayHeader.grab( overlayTitle );
}
if ( this.options.buttons )
{
if ( this.options.buttons ) {
var overlayToolbar = new Element( 'div', {'class': 'overlayToolbar'} );
this.options.buttons.each(
function( button )
{
function( button ) {
var overlayButton = new Element( 'button', {'text': button.text} );
if ( button.id )
if ( button.id ) {
overlayButton.setProperty( 'id', button.id );
if ( button.events )
}
if ( button.events ) {
overlayButton.set( 'events', events );
}
overlayToolbar.grab( overlayButton );
}
);
@ -55,79 +49,70 @@ var Overlay = new Class({
this.element.inject( this.target );
}
},
show: function()
{
show: function() {
this.mask.show();
$(window).addEvent( 'resize', this.update.bind(this) );
$(window).addEvent( 'scroll', this.update.bind(this) );
window.addEventListener( 'resize', this.update.bind(this) );
window.addEventListener( 'scroll', this.update.bind(this) );
this.element.tween( 'opacity', [0, 1.0] );
this.element.show();
this.element.position();
this.mask.position();
},
hideComplete: function()
{
$(window).removeEvent( 'resize', this.update.bind(this) );
$(window).removeEvent( 'scroll', this.update.bind(this) );
hideComplete: function() {
this.element.hide();
this.mask.hide();
},
hide: function()
{
hide: function() {
new Fx.Tween( this.element, {duration: 400, transition: Fx.Transitions.Sine, onComplete: this.hideComplete.bind(this)} ).start( 'opacity', 1.0, 0 );
},
update: function()
{
update: function() {
this.element.position();
this.mask.position();
},
showAnimation:function()
{
showAnimation: function() {
showOverlay();
//console.log( "Showing overlay loading" );
if ( !this.loading )
{
if ( !this.loading ) {
this.loading = new Element( 'div', {'id': 'loading'+this.key, 'styles': {'display': 'none'}} );
this.loading.grab( this.loadingImage );
document.body.grab( this.loading );
}
updateOverlayLoading();
this.loading.setStyle( 'display', 'block' );
$(window).addEvent( 'resize', this.update.bind(this) );
$(window).addEvent( 'scroll', this.update.bind(this) );
window.addEventListener( 'resize', this.update.bind(this) );
window.addEventListener( 'scroll', this.update.bind(this) );
},
hideAnimation:function()
{
$(window).removeEvent( 'resize', this.update.bind(this) );
$(window).removeEvent( 'scroll', this.update.bind(this) );
if ( this.loading )
hideAnimation: function() {
if ( this.loading ) {
this.loading.setStyle( 'display', 'none' );
}
}
});
function setupOverlays()
{
function setupOverlays() {
try {
$$('.overlay').each(
function( overlay )
{
function( overlay ) {
overlay.element = new Overlay( overlay.get('id') );
overlay.getElements('.overlayCloser').each(
function( closer )
{
closer.addEvent( 'click', function() { overlay.element.hide(); } );
function( closer ) {
closer.addEvent( 'click', function() {
overlay.element.hide();
} );
}
);
overlay.overlayShow = function() { overlay.element.show(); };
overlay.overlayHide = function() { overlay.element.hide(); };
overlay.overlayShow = function() {
overlay.element.show();
};
overlay.overlayHide = function() {
overlay.element.hide();
};
}
);
}
catch ( e )
{
} catch ( e ) {
alert( e );
}
}
window.addEvent( 'domready', setupOverlays );
window.addEventListener( 'DOMContentLoaded', setupOverlays );

View File

@ -293,9 +293,9 @@ function exportEventImages($event, $exportDetail, $exportFrames, $myfilelist) {
* Visit http://www.dynamicdrive.com/ for full source code
***********************************************/
var eventWidth = <?php echo $event->Width()?>;
var eventHeight = <?php echo $event->Height()?>;
var variableslide=[<?php echo $slides?>];
var eventWidth = <?php echo $event->Width(); ?>;
var eventHeight = <?php echo $event->Height(); ?>;
var variableslide=[<?php echo $slides; ?>];
//configure the below 3 variables to set the dimension/background color of the slideshow

View File

@ -23,6 +23,7 @@
//
// Javascript window sizes
/* eslint-disable key-spacing */
var popupSizes = {
'bandwidth': {'width': 300, 'height': 200},
'console': {'width': 750, 'height': 312},
@ -71,3 +72,4 @@ var popupSizes = {
'zone': {'addWidth': 520, 'addHeight': 260, 'minHeight': 600},
'zones': {'addWidth': 72, 'addHeight': 232}
};
/* eslint-enable key-spacing */

View File

@ -23,6 +23,7 @@
//
// Javascript window sizes
/* eslint-disable key-spacing */
var popupSizes = {
'bandwidth': {'width': 300, 'height': 220},
'console': {'width': 750, 'height': 312},
@ -72,3 +73,4 @@ var popupSizes = {
'zone': {'addWidth': 450, 'addHeight': 200, 'minHeight': 450},
'zones': {'addWidth': 72, 'addHeight': 232}
};
/* eslint-enable key-spacing */

View File

@ -1 +1 @@
jquery-1.11.3.js
jquery-2.2.4.js

View File

@ -1 +1 @@
http://code.jquery.com/jquery-1.11.3.js
https://code.jquery.com/jquery-2.2.4.js

View File

@ -31,19 +31,22 @@ function checkSize() {
var prevW = w;
var h = window.outerHeight;
var prevH = h;
if (h > screen.availHeight)
if (h > screen.availHeight) {
h = screen.availHeight;
if (w > screen.availWidth)
}
if (w > screen.availWidth) {
w = screen.availWidth;
if (w != prevW || h != prevH)
}
if (w != prevW || h != prevH) {
window.resizeTo(w, h);
}
}
}
}
// Deprecated
function newWindow( url, name, width, height ) {
var windowId = window.open( url, name, popupOptions+",width="+width+",height="+height );
window.open( url, name, popupOptions+",width="+width+",height="+height );
}
function getPopupSize( tag, width, height ) {
@ -57,16 +60,18 @@ function getPopupSize( tag, width, height ) {
return ( {'width': 0, 'height': 0} );
}
if ( popupSize.width && popupSize.height ) {
if ( width || height )
if ( width || height ) {
Warning( "Ignoring passed dimensions "+width+"x"+height+" when getting popup size for tag '"+tag+"'" );
}
return ( popupSize );
}
if ( popupSize.addWidth ) {
popupSize.width = popupSize.addWidth;
if ( !width )
if ( !width ) {
Error( "Got addWidth but no passed width when getting popup size for tag '"+tag+"'" );
else
} else {
popupSize.width += parseInt(width);
}
} else if ( width ) {
popupSize.width = width;
Error( "Got passed width but no addWidth when getting popup size for tag '"+tag+"'" );
@ -77,10 +82,11 @@ function getPopupSize( tag, width, height ) {
}
if ( popupSize.addHeight ) {
popupSize.height = popupSize.addHeight;
if ( !height )
if ( !height ) {
Error( "Got addHeight but no passed height when getting popup size for tag '"+tag+"'" );
else
} else {
popupSize.height += parseInt(height);
}
} else if ( height ) {
popupSize.height = height;
Error( "Got passed height but no addHeight when getting popup size for tag '"+tag+"'" );
@ -105,10 +111,12 @@ function zmWindow() {
function createPopup( url, name, tag, width, height ) {
var popupSize = getPopupSize( tag, width, height );
var popupDimensions = "";
if ( popupSize.width > 0 )
if ( popupSize.width > 0 ) {
popupDimensions += ",width="+popupSize.width;
if ( popupSize.height > 0 )
}
if ( popupSize.height > 0 ) {
popupDimensions += ",height="+popupSize.height;
}
var popup = window.open( url+"&popup=1", name, popupOptions+popupDimensions );
if ( ! popup ) {
// if popup blocking is enabled, the popup won't be defined.
@ -119,6 +127,12 @@ function createPopup( url, name, tag, width, height ) {
}
$j(document).ready(function() {
$j("form.validateFormOnSubmit").submit(function onSubmit(evt) {
if (!validateForm(this)) {
evt.preventDefault();
}
});
$j(".popup-link").click(function onClick(evt) {
var el = this;
var url;
@ -137,6 +151,8 @@ $j(document).ready(function() {
evt.preventDefault();
});
$j(".tabList a").click(submitTab);
// 'data-on-click-this' calls the global function in the attribute value with the element when a click happens.
document.querySelectorAll("a[data-on-click-this], button[data-on-click-this], input[data-on-click-this]").forEach(function attachOnClick(el) {
var fnName = el.getAttribute("data-on-click-this");
@ -166,8 +182,9 @@ $j(document).ready(function() {
function createEventPopup( eventId, eventFilter, width, height ) {
var url = '?view=event&eid='+eventId;
if ( eventFilter )
if ( eventFilter ) {
url += eventFilter;
}
var name = 'zmEvent';
var popupSize = getPopupSize( 'event', width, height );
var popup = window.open( url, name, popupOptions+",width="+popupSize.width+",height="+popupSize.height );
@ -220,13 +237,14 @@ function refreshWindow() {
function refreshParentWindow() {
if ( refreshParent ) {
if ( window.opener ) {
if ( refreshParent == true )
if ( refreshParent == true ) {
window.opener.location.reload( true );
else
} else {
window.opener.location.href = refreshParent;
}
}
}
}
if ( currentView != 'none' && currentView != 'login' ) {
$j.ajaxSetup({timeout: AJAX_TIMEOUT}); //sets timeout for all getJSON.
@ -281,46 +299,59 @@ function secsToTime( seconds ) {
} else if ( seconds < 60*60 ) {
var timeMins = parseInt(seconds/60);
var timeSecs = seconds%60;
if ( timeSecs < 10 )
if ( timeSecs < 10 ) {
timeSecs = '0'+timeSecs.toString().substr( 0, 4 );
else
} else {
timeSecs = timeSecs.toString().substr( 0, 5 );
}
timeString = timeMins+":"+timeSecs;
} else {
var timeHours = parseInt(seconds/3600);
var timeMins = (seconds%3600)/60;
var timeSecs = seconds%60;
if ( timeMins < 10 )
if ( timeMins < 10 ) {
timeMins = '0'+timeMins.toString().substr( 0, 4 );
else
} else {
timeMins = timeMins.toString().substr( 0, 5 );
if ( timeSecs < 10 )
}
if ( timeSecs < 10 ) {
timeSecs = '0'+timeSecs.toString().substr( 0, 4 );
else
} else {
timeSecs = timeSecs.toString().substr( 0, 5 );
}
timeString = timeHours+":"+timeMins+":"+timeSecs;
}
return ( timeString );
}
function submitTab( tab ) {
function submitTab(evt) {
var tab = this.getAttribute("data-tab-name");
var form = $('contentForm');
form.action.value = "";
form.tab.value = tab;
form.submit();
evt.preventDefault();
}
function submitThisForm() {
this.form.submit();
}
function toggleCheckbox( element, name ) {
var form = element.form;
var checked = element.checked;
for (var i = 0; i < form.elements.length; i++)
if (form.elements[i].name.indexOf(name) == 0)
/**
* @param {Element} headerCheckbox The select all/none checkbox that was just toggled.
* @param {DOMString} name The name of the checkboxes to toggle.
*/
function updateFormCheckboxesByName( headerCheckbox ) {
var name = headerCheckbox.getAttribute("data-checkbox-name");
var form = headerCheckbox.form;
var checked = headerCheckbox.checked;
for (var i = 0; i < form.elements.length; i++) {
if (form.elements[i].name.indexOf(name) == 0) {
form.elements[i].checked = checked;
}
}
setButtonStates(headerCheckbox);
}
function configureDeleteButton( element ) {
var form = element.form;
@ -353,7 +384,7 @@ if ( closePopup ) {
closeWindow();
}
window.addEvent( 'domready', checkSize );
window.addEventListener( 'DOMContentLoaded', checkSize );
function convertLabelFormat(LabelFormat, monitorName) {
//convert label format from strftime to moment's format (modified from
@ -374,7 +405,7 @@ function addVideoTimingTrack(video, LabelFormat, monitorName, duration, startTim
startTime = moment(startTime);
for (var i = 0; i <= duration; i++) {
cues[i] = {id: i, index: i, startTime: i, Ca: i+1, text: startTime.format(labelFormat)};
cues[i] = {id: i, index: i, startTime: i, endTime: i+1, text: startTime.format(labelFormat)};
startTime.add(1, 's');
}
}
@ -423,7 +454,9 @@ function scaleToFit(baseWidth, baseHeight, scaleEl, bottomEl) {
newHeight = newWidth / ratio;
}
var autoScale = Math.round(newWidth / baseWidth * SCALE_BASE);
var scales = $j('#scale option').map(function() {return parseInt($j(this).val());}).get();
var scales = $j('#scale option').map(function() {
return parseInt($j(this).val());
}).get();
scales.shift();
var closest;
$j(scales).each(function() { //Set zms scale to nearest regular scale. Zoom does not like arbitrary scale values.

View File

@ -46,6 +46,8 @@ foreach ( $storage_areas as $S ) {
$html =
'
<div class="controlHeader">
<!-- Used to submit the form with the enter key -->
<input type="submit" class="hide"/>
<input type="hidden" name="filtering" value=""/>
';
@ -93,7 +95,7 @@ if ( ! empty($user['MonitorIds']) ) {
}
$html .= '<span class="MonitorNameFilter"><label>'.translate('Name').'</label>';
$html .= '<input type="text" name="MonitorName" value="'.(isset($_SESSION['MonitorName'])?$_SESSION['MonitorName']:'').'" onkeydown="if(event&&event.keyCode==13){this.form.submit();}" placeholder="text or regular expression"/>';
$html .= '<input type="text" name="MonitorName" value="'.(isset($_SESSION['MonitorName'])?$_SESSION['MonitorName']:'').'" placeholder="text or regular expression"/>';
$html .= '</span>';
$Functions = array();
@ -158,7 +160,7 @@ $html .= htmlSelect( 'Status[]', $status_options,
$html .= '</span>';
$html .= '<span class="SourceFilter"><label>'.translate('Source').'</label>';
$html .= '<input type="text" name="Source" value="'.(isset($_SESSION['Source'])?$_SESSION['Source']:'').'" onkeydown="if(event&&event.keyCode==13){this.form.submit();}" placeholder="text or regular expression"/>';
$html .= '<input type="text" name="Source" value="'.(isset($_SESSION['Source'])?$_SESSION['Source']:'').'" placeholder="text or regular expression"/>';
$html .= '</span>';
$sql = 'SELECT *,S.Status AS Status, S.CaptureFPS AS CaptureFPS, S.AnalysisFPS AS AnalysisFPS, S.CaptureBandwidth AS CaptureBandwidth

View File

@ -219,7 +219,7 @@ ob_start();
?>
<th class="colZones"><?php echo translate('Zones') ?></th>
<?php if ( canEdit('Monitors') ) { ?>
<th class="colMark"><input type="checkbox" name="toggleCheck" value="1" onclick="toggleCheckbox(this, 'markMids[]');setButtonStates(this);"/> <?php echo translate('All') ?></th>
<th class="colMark"><input type="checkbox" name="toggleCheck" value="1" data-checkbox-name="markMids[]" data-on-click-this="updateFormCheckboxesByName"/> <?php echo translate('All') ?></th>
<?php } ?>
</tr>
</thead>

View File

@ -23,17 +23,18 @@ if ( !canView( 'Control' ) ) {
return;
}
$params = array();
$groupSql = '';
if ( !empty($_REQUEST['group']) ) {
$row = dbFetchOne( 'SELECT * FROM Groups WHERE Id = ?', NULL, array($_REQUEST['group']) );
$groupSql = " and find_in_set( Id, '".$row['MonitorIds']."' )";
$groupSql = " AND gm.GroupId = :groupid";
$params[":groupid"] = $_REQUEST['group'];
}
$mid = !empty($_REQUEST['mid']) ? validInt($_REQUEST['mid']) : 0;
$sql = "SELECT * FROM Monitors WHERE Function != 'None' AND Controllable = 1$groupSql ORDER BY Sequence";
$sql = "SELECT m.* FROM Monitors m INNER JOIN Groups_Monitors AS gm ON m.Id = gm.MonitorId WHERE m.Function != 'None' AND m.Controllable = 1$groupSql ORDER BY Sequence";
$mids = array();
foreach( dbFetchAll( $sql ) as $row ) {
foreach( dbFetchAll( $sql, false, $params ) as $row ) {
if ( !visibleMonitor( $row['Id'] ) ) {
continue;
}

View File

@ -160,7 +160,7 @@ xhtmlHeaders(__FILE__, translate('ControlCap')." - ".$newControl['Name'] );
<body>
<div id="page">
<div id="header">
<h2><?php echo translate('ControlCap') ?> - <?php echo $newControl['Name'] ?></h2>
<h2><?php echo translate('ControlCap') ?> - <?php echo validHtmlStr($newControl['Name']) ?></h2>
</div>
<div id="content">
<ul class="tabList">
@ -176,14 +176,14 @@ foreach ( $tabs as $name=>$value )
else
{
?>
<li><a href="#" onclick="submitTab( '<?php echo $name ?>' ); return( false );"><?php echo $value ?></a></li>
<li><a href="#" data-tab-name="<?php echo $name ?>"><?php echo $value ?></a></li>
<?php
}
}
?>
</ul>
<div class="clear"></div>
<form name="contentForm" id="contentForm" method="post" action="<?php echo $_SERVER['PHP_SELF'] ?>" onsubmit="return validateForm( this )">
<form name="contentForm" id="contentForm" method="post" action="<?php echo $_SERVER['PHP_SELF'] ?>" class="validateFormOnSubmit">
<input type="hidden" name="view" value="<?php echo $view ?>"/>
<input type="hidden" name="tab" value="<?php echo $tab ?>"/>
<input type="hidden" name="action" value="controlcap"/>
@ -215,30 +215,30 @@ if ( $tab != 'pan' )
{
?>
<input type="hidden" name="newControl[CanPan]" value="<?php echo !empty($newControl['CanPan']) ?>"/>
<input type="hidden" name="newControl[MinPanRange]" value="<?php echo $newControl['MinPanRange'] ?>"/>
<input type="hidden" name="newControl[MaxPanRange]" value="<?php echo $newControl['MaxPanRange'] ?>"/>
<input type="hidden" name="newControl[MinPanStep]" value="<?php echo $newControl['MinPanStep'] ?>"/>
<input type="hidden" name="newControl[MaxPanStep]" value="<?php echo $newControl['MaxPanStep'] ?>"/>
<input type="hidden" name="newControl[MinPanRange]" value="<?php echo validHtmlStr($newControl['MinPanRange']) ?>"/>
<input type="hidden" name="newControl[MaxPanRange]" value="<?php echo validHtmlStr($newControl['MaxPanRange']) ?>"/>
<input type="hidden" name="newControl[MinPanStep]" value="<?php echo validHtmlStr($newControl['MinPanStep']) ?>"/>
<input type="hidden" name="newControl[MaxPanStep]" value="<?php echo validHtmlStr($newControl['MaxPanStep']) ?>"/>
<input type="hidden" name="newControl[HasPanSpeed]" value="<?php echo !empty($newControl['HasPanSpeed']) ?>"/>
<input type="hidden" name="newControl[MinPanSpeed]" value="<?php echo $newControl['MinPanSpeed'] ?>"/>
<input type="hidden" name="newControl[MaxPanSpeed]" value="<?php echo $newControl['MaxPanSpeed'] ?>"/>
<input type="hidden" name="newControl[MinPanSpeed]" value="<?php echo validHtmlStr($newControl['MinPanSpeed']) ?>"/>
<input type="hidden" name="newControl[MaxPanSpeed]" value="<?php echo validHtmlStr($newControl['MaxPanSpeed']) ?>"/>
<input type="hidden" name="newControl[HasTurboPan]" value="<?php echo !empty($newControl['HasTurboPan']) ?>"/>
<input type="hidden" name="newControl[TurboPanSpeed]" value="<?php echo $newControl['TurboPanSpeed'] ?>"/>
<input type="hidden" name="newControl[TurboPanSpeed]" value="<?php echo validHtmlStr($newControl['TurboPanSpeed']) ?>"/>
<?php
}
if ( $tab != 'tilt' )
{
?>
<input type="hidden" name="newControl[CanTilt]" value="<?php echo !empty($newControl['CanTilt']) ?>"/>
<input type="hidden" name="newControl[MinTiltRange]" value="<?php echo $newControl['MinTiltRange'] ?>"/>
<input type="hidden" name="newControl[MaxTiltRange]" value="<?php echo $newControl['MaxTiltRange'] ?>"/>
<input type="hidden" name="newControl[MinTiltStep]" value="<?php echo $newControl['MinTiltStep'] ?>"/>
<input type="hidden" name="newControl[MaxTiltStep]" value="<?php echo $newControl['MaxTiltStep'] ?>"/>
<input type="hidden" name="newControl[MinTiltRange]" value="<?php echo validHtmlStr($newControl['MinTiltRange']) ?>"/>
<input type="hidden" name="newControl[MaxTiltRange]" value="<?php echo validHtmlStr($newControl['MaxTiltRange']) ?>"/>
<input type="hidden" name="newControl[MinTiltStep]" value="<?php echo validHtmlStr($newControl['MinTiltStep']) ?>"/>
<input type="hidden" name="newControl[MaxTiltStep]" value="<?php echo validHtmlStr($newControl['MaxTiltStep']) ?>"/>
<input type="hidden" name="newControl[HasTiltSpeed]" value="<?php echo !empty($newControl['HasTiltSpeed']) ?>"/>
<input type="hidden" name="newControl[MinTiltSpeed]" value="<?php echo $newControl['MinTiltSpeed'] ?>"/>
<input type="hidden" name="newControl[MaxTiltSpeed]" value="<?php echo $newControl['MaxTiltSpeed'] ?>"/>
<input type="hidden" name="newControl[MinTiltSpeed]" value="<?php echo validHtmlStr($newControl['MinTiltSpeed']) ?>"/>
<input type="hidden" name="newControl[MaxTiltSpeed]" value="<?php echo validHtmlStr($newControl['MaxTiltSpeed']) ?>"/>
<input type="hidden" name="newControl[HasTurboTilt]" value="<?php echo !empty($newControl['HasTurboTilt']) ?>"/>
<input type="hidden" name="newControl[TurboTiltSpeed]" value="<?php echo $newControl['TurboTiltSpeed'] ?>"/>
<input type="hidden" name="newControl[TurboTiltSpeed]" value="<?php echo validHtmlStr($newControl['TurboTiltSpeed']) ?>"/>
<?php
}
if ( $tab != 'zoom' )
@ -248,13 +248,13 @@ if ( $tab != 'zoom' )
<input type="hidden" name="newControl[CanZoomAbs]" value="<?php echo !empty($newControl['CanZoomAbs']) ?>"/>
<input type="hidden" name="newControl[CanZoomRel]" value="<?php echo !empty($newControl['CanZoomRel']) ?>"/>
<input type="hidden" name="newControl[CanZoomCon]" value="<?php echo !empty($newControl['CanZoomCon']) ?>"/>
<input type="hidden" name="newControl[MinZoomRange]" value="<?php echo $newControl['MinZoomRange'] ?>"/>
<input type="hidden" name="newControl[MaxZoomRange]" value="<?php echo $newControl['MaxZoomRange'] ?>"/>
<input type="hidden" name="newControl[MinZoomStep]" value="<?php echo $newControl['MinZoomStep'] ?>"/>
<input type="hidden" name="newControl[MaxZoomStep]" value="<?php echo $newControl['MaxZoomStep'] ?>"/>
<input type="hidden" name="newControl[MinZoomRange]" value="<?php echo validHtmlStr($newControl['MinZoomRange']) ?>"/>
<input type="hidden" name="newControl[MaxZoomRange]" value="<?php echo validHtmlStr($newControl['MaxZoomRange']) ?>"/>
<input type="hidden" name="newControl[MinZoomStep]" value="<?php echo validHtmlStr($newControl['MinZoomStep']) ?>"/>
<input type="hidden" name="newControl[MaxZoomStep]" value="<?php echo validHtmlStr($newControl['MaxZoomStep']) ?>"/>
<input type="hidden" name="newControl[HasZoomSpeed]" value="<?php echo !empty($newControl['HasZoomSpeed']) ?>"/>
<input type="hidden" name="newControl[MinZoomSpeed]" value="<?php echo $newControl['MinZoomSpeed'] ?>"/>
<input type="hidden" name="newControl[MaxZoomSpeed]" value="<?php echo $newControl['MaxZoomSpeed'] ?>"/>
<input type="hidden" name="newControl[MinZoomSpeed]" value="<?php echo validHtmlStr($newControl['MinZoomSpeed']) ?>"/>
<input type="hidden" name="newControl[MaxZoomSpeed]" value="<?php echo validHtmlStr($newControl['MaxZoomSpeed']) ?>"/>
<?php
}
if ( $tab != 'focus' )
@ -265,13 +265,13 @@ if ( $tab != 'focus' )
<input type="hidden" name="newControl[CanFocusAbs]" value="<?php echo !empty($newControl['CanFocusAbs']) ?>"/>
<input type="hidden" name="newControl[CanFocusRel]" value="<?php echo !empty($newControl['CanFocusRel']) ?>"/>
<input type="hidden" name="newControl[CanFocusCon]" value="<?php echo !empty($newControl['CanFocusCon']) ?>"/>
<input type="hidden" name="newControl[MinFocusRange]" value="<?php echo $newControl['MinFocusRange'] ?>"/>
<input type="hidden" name="newControl[MaxFocusRange]" value="<?php echo $newControl['MaxFocusRange'] ?>"/>
<input type="hidden" name="newControl[MinFocusStep]" value="<?php echo $newControl['MinFocusStep'] ?>"/>
<input type="hidden" name="newControl[MaxFocusStep]" value="<?php echo $newControl['MaxFocusStep'] ?>"/>
<input type="hidden" name="newControl[MinFocusRange]" value="<?php echo validHtmlStr($newControl['MinFocusRange']) ?>"/>
<input type="hidden" name="newControl[MaxFocusRange]" value="<?php echo validHtmlStr($newControl['MaxFocusRange']) ?>"/>
<input type="hidden" name="newControl[MinFocusStep]" value="<?php echo validHtmlStr($newControl['MinFocusStep']) ?>"/>
<input type="hidden" name="newControl[MaxFocusStep]" value="<?php echo validHtmlStr($newControl['MaxFocusStep']) ?>"/>
<input type="hidden" name="newControl[HasFocusSpeed]" value="<?php echo !empty($newControl['HasFocusSpeed']) ?>"/>
<input type="hidden" name="newControl[MinFocusSpeed]" value="<?php echo $newControl['MinFocusSpeed'] ?>"/>
<input type="hidden" name="newControl[MaxFocusSpeed]" value="<?php echo $newControl['MaxFocusSpeed'] ?>"/>
<input type="hidden" name="newControl[MinFocusSpeed]" value="<?php echo validHtmlStr($newControl['MinFocusSpeed']) ?>"/>
<input type="hidden" name="newControl[MaxFocusSpeed]" value="<?php echo validHtmlStr($newControl['MaxFocusSpeed']) ?>"/>
<?php
}
if ( $tab != 'iris' )
@ -282,13 +282,13 @@ if ( $tab != 'iris' )
<input type="hidden" name="newControl[CanIrisAbs]" value="<?php echo !empty($newControl['CanIrisAbs']) ?>"/>
<input type="hidden" name="newControl[CanIrisRel]" value="<?php echo !empty($newControl['CanIrisRel']) ?>"/>
<input type="hidden" name="newControl[CanIrisCon]" value="<?php echo !empty($newControl['CanIrisCon']) ?>"/>
<input type="hidden" name="newControl[MinIrisRange]" value="<?php echo $newControl['MinIrisRange'] ?>"/>
<input type="hidden" name="newControl[MaxIrisRange]" value="<?php echo $newControl['MaxIrisRange'] ?>"/>
<input type="hidden" name="newControl[MinIrisStep]" value="<?php echo $newControl['MinIrisStep'] ?>"/>
<input type="hidden" name="newControl[MaxIrisStep]" value="<?php echo $newControl['MaxIrisStep'] ?>"/>
<input type="hidden" name="newControl[MinIrisRange]" value="<?php echo validHtmlStr($newControl['MinIrisRange']) ?>"/>
<input type="hidden" name="newControl[MaxIrisRange]" value="<?php echo validHtmlStr($newControl['MaxIrisRange']) ?>"/>
<input type="hidden" name="newControl[MinIrisStep]" value="<?php echo validHtmlStr($newControl['MinIrisStep']) ?>"/>
<input type="hidden" name="newControl[MaxIrisStep]" value="<?php echo validHtmlStr($newControl['MaxIrisStep']) ?>"/>
<input type="hidden" name="newControl[HasIrisSpeed]" value="<?php echo !empty($newControl['HasIrisSpeed']) ?>"/>
<input type="hidden" name="newControl[MinIrisSpeed]" value="<?php echo $newControl['MinIrisSpeed'] ?>"/>
<input type="hidden" name="newControl[MaxIrisSpeed]" value="<?php echo $newControl['MaxIrisSpeed'] ?>"/>
<input type="hidden" name="newControl[MinIrisSpeed]" value="<?php echo validHtmlStr($newControl['MinIrisSpeed']) ?>"/>
<input type="hidden" name="newControl[MaxIrisSpeed]" value="<?php echo validHtmlStr($newControl['MaxIrisSpeed']) ?>"/>
<?php
}
if ( $tab != 'gain' )
@ -299,13 +299,13 @@ if ( $tab != 'gain' )
<input type="hidden" name="newControl[CanGainAbs]" value="<?php echo !empty($newControl['CanGainAbs']) ?>"/>
<input type="hidden" name="newControl[CanGainRel]" value="<?php echo !empty($newControl['CanGainRel']) ?>"/>
<input type="hidden" name="newControl[CanGainCon]" value="<?php echo !empty($newControl['CanGainCon']) ?>"/>
<input type="hidden" name="newControl[MinGainRange]" value="<?php echo $newControl['MinGainRange'] ?>"/>
<input type="hidden" name="newControl[MaxGainRange]" value="<?php echo $newControl['MaxGainRange'] ?>"/>
<input type="hidden" name="newControl[MinGainStep]" value="<?php echo $newControl['MinGainStep'] ?>"/>
<input type="hidden" name="newControl[MaxGainStep]" value="<?php echo $newControl['MaxGainStep'] ?>"/>
<input type="hidden" name="newControl[MinGainRange]" value="<?php echo validHtmlStr($newControl['MinGainRange']) ?>"/>
<input type="hidden" name="newControl[MaxGainRange]" value="<?php echo validHtmlStr($newControl['MaxGainRange']) ?>"/>
<input type="hidden" name="newControl[MinGainStep]" value="<?php echo validHtmlStr($newControl['MinGainStep']) ?>"/>
<input type="hidden" name="newControl[MaxGainStep]" value="<?php echo validHtmlStr($newControl['MaxGainStep']) ?>"/>
<input type="hidden" name="newControl[HasGainSpeed]" value="<?php echo !empty($newControl['HasGainSpeed']) ?>"/>
<input type="hidden" name="newControl[MinGainSpeed]" value="<?php echo $newControl['MinGainSpeed'] ?>"/>
<input type="hidden" name="newControl[MaxGainSpeed]" value="<?php echo $newControl['MaxGainSpeed'] ?>"/>
<input type="hidden" name="newControl[MinGainSpeed]" value="<?php echo validHtmlStr($newControl['MinGainSpeed']) ?>"/>
<input type="hidden" name="newControl[MaxGainSpeed]" value="<?php echo validHtmlStr($newControl['MaxGainSpeed']) ?>"/>
<?php
}
if ( $tab != 'white' )
@ -316,20 +316,20 @@ if ( $tab != 'white' )
<input type="hidden" name="newControl[CanWhiteAbs]" value="<?php echo !empty($newControl['CanWhiteAbs']) ?>"/>
<input type="hidden" name="newControl[CanWhiteRel]" value="<?php echo !empty($newControl['CanWhiteRel']) ?>"/>
<input type="hidden" name="newControl[CanWhiteCon]" value="<?php echo !empty($newControl['CanWhiteCon']) ?>"/>
<input type="hidden" name="newControl[MinWhiteRange]" value="<?php echo $newControl['MinWhiteRange'] ?>"/>
<input type="hidden" name="newControl[MaxWhiteRange]" value="<?php echo $newControl['MaxWhiteRange'] ?>"/>
<input type="hidden" name="newControl[MinWhiteStep]" value="<?php echo $newControl['MinWhiteStep'] ?>"/>
<input type="hidden" name="newControl[MaxWhiteStep]" value="<?php echo $newControl['MaxWhiteStep'] ?>"/>
<input type="hidden" name="newControl[MinWhiteRange]" value="<?php echo validHtmlStr($newControl['MinWhiteRange']) ?>"/>
<input type="hidden" name="newControl[MaxWhiteRange]" value="<?php echo validHtmlStr($newControl['MaxWhiteRange']) ?>"/>
<input type="hidden" name="newControl[MinWhiteStep]" value="<?php echo validHtmlStr($newControl['MinWhiteStep']) ?>"/>
<input type="hidden" name="newControl[MaxWhiteStep]" value="<?php echo validHtmlStr($newControl['MaxWhiteStep']) ?>"/>
<input type="hidden" name="newControl[HasWhiteSpeed]" value="<?php echo !empty($newControl['HasWhiteSpeed']) ?>"/>
<input type="hidden" name="newControl[MinWhiteSpeed]" value="<?php echo $newControl['MinWhiteSpeed'] ?>"/>
<input type="hidden" name="newControl[MaxWhiteSpeed]" value="<?php echo $newControl['MaxWhiteSpeed'] ?>"/>
<input type="hidden" name="newControl[MinWhiteSpeed]" value="<?php echo validHtmlStr($newControl['MinWhiteSpeed']) ?>"/>
<input type="hidden" name="newControl[MaxWhiteSpeed]" value="<?php echo validHtmlStr($newControl['MaxWhiteSpeed']) ?>"/>
<?php
}
if ( $tab != 'presets' )
{
?>
<input type="hidden" name="newControl[HasPresets]" value="<?php echo !empty($newControl['HasPresets']) ?>"/>
<input type="hidden" name="newControl[NumPresets]" value="<?php echo $newControl['NumPresets'] ?>"/>
<input type="hidden" name="newControl[NumPresets]" value="<?php echo validHtmlStr($newControl['NumPresets']) ?>"/>
<input type="hidden" name="newControl[HasHomePreset]" value="<?php echo !empty($newControl['HasHomePreset']) ?>"/>
<input type="hidden" name="newControl[CanSetPresets]" value="<?php echo !empty($newControl['CanSetPresets']) ?>"/>
<?php
@ -371,15 +371,15 @@ switch ( $tab )
{
?>
<tr><th scope="row"><?php echo translate('CanPan') ?></th><td><input type="checkbox" name="newControl[CanPan]" value="1"<?php if ( !empty($newControl['CanPan']) ) { ?> checked="checked"<?php } ?>></td></tr>
<tr><th scope="row"><?php echo translate('MinPanRange') ?></th><td><input type="text" name="newControl[MinPanRange]" value="<?php echo $newControl['MinPanRange'] ?>" size="8"/></td></tr>
<tr><th scope="row"><?php echo translate('MaxPanRange') ?></th><td><input type="text" name="newControl[MaxPanRange]" value="<?php echo $newControl['MaxPanRange'] ?>" size="8"/></td></tr>
<tr><th scope="row"><?php echo translate('MinPanStep') ?></th><td><input type="text" name="newControl[MinPanStep]" value="<?php echo $newControl['MinPanStep'] ?>" size="8"/></td></tr>
<tr><th scope="row"><?php echo translate('MaxPanStep') ?></th><td><input type="text" name="newControl[MaxPanStep]" value="<?php echo $newControl['MaxPanStep'] ?>" size="8"/></td></tr>
<tr><th scope="row"><?php echo translate('MinPanRange') ?></th><td><input type="text" name="newControl[MinPanRange]" value="<?php echo validHtmlStr($newControl['MinPanRange']) ?>" size="8"/></td></tr>
<tr><th scope="row"><?php echo translate('MaxPanRange') ?></th><td><input type="text" name="newControl[MaxPanRange]" value="<?php echo validHtmlStr($newControl['MaxPanRange']) ?>" size="8"/></td></tr>
<tr><th scope="row"><?php echo translate('MinPanStep') ?></th><td><input type="text" name="newControl[MinPanStep]" value="<?php echo validHtmlStr($newControl['MinPanStep']) ?>" size="8"/></td></tr>
<tr><th scope="row"><?php echo translate('MaxPanStep') ?></th><td><input type="text" name="newControl[MaxPanStep]" value="<?php echo validHtmlStr($newControl['MaxPanStep']) ?>" size="8"/></td></tr>
<tr><th scope="row"><?php echo translate('HasPanSpeed') ?></th><td><input type="checkbox" name="newControl[HasPanSpeed]" value="1"<?php if ( !empty($newControl['HasPanSpeed']) ) { ?> checked="checked"<?php } ?>/></td></tr>
<tr><th scope="row"><?php echo translate('MinPanSpeed') ?></th><td><input type="text" name="newControl[MinPanSpeed]" value="<?php echo $newControl['MinPanSpeed'] ?>" size="8"/></td></tr>
<tr><th scope="row"><?php echo translate('MaxPanSpeed') ?></th><td><input type="text" name="newControl[MaxPanSpeed]" value="<?php echo $newControl['MaxPanSpeed'] ?>" size="8"/></td></tr>
<tr><th scope="row"><?php echo translate('MinPanSpeed') ?></th><td><input type="text" name="newControl[MinPanSpeed]" value="<?php echo validHtmlStr($newControl['MinPanSpeed']) ?>" size="8"/></td></tr>
<tr><th scope="row"><?php echo translate('MaxPanSpeed') ?></th><td><input type="text" name="newControl[MaxPanSpeed]" value="<?php echo validHtmlStr($newControl['MaxPanSpeed']) ?>" size="8"/></td></tr>
<tr><th scope="row"><?php echo translate('HasTurboPan') ?></th><td><input type="checkbox" name="newControl[HasTurboPan]" value="1"<?php if ( !empty($newControl['HasTurboPan']) ) { ?> checked="checked"<?php } ?>/></td></tr>
<tr><th scope="row"><?php echo translate('TurboPanSpeed') ?></th><td><input type="text" name="newControl[TurboPanSpeed]" value="<?php echo $newControl['TurboPanSpeed'] ?>" size="8"/></td></tr>
<tr><th scope="row"><?php echo translate('TurboPanSpeed') ?></th><td><input type="text" name="newControl[TurboPanSpeed]" value="<?php echo validHtmlStr($newControl['TurboPanSpeed']) ?>" size="8"/></td></tr>
<?php
break;
}
@ -387,15 +387,15 @@ switch ( $tab )
{
?>
<tr><th scope="row"><?php echo translate('CanTilt') ?></th><td><input type="checkbox" name="newControl[CanTilt]" value="1"<?php if ( !empty($newControl['CanTilt']) ) { ?> checked="checked"<?php } ?>></td></tr>
<tr><th scope="row"><?php echo translate('MinTiltRange') ?></th><td><input type="text" name="newControl[MinTiltRange]" value="<?php echo $newControl['MinTiltRange'] ?>" size="8"/></td></tr>
<tr><th scope="row"><?php echo translate('MaxTiltRange') ?></th><td><input type="text" name="newControl[MaxTiltRange]" value="<?php echo $newControl['MaxTiltRange'] ?>" size="8"/></td></tr>
<tr><th scope="row"><?php echo translate('MinTiltStep') ?></th><td><input type="text" name="newControl[MinTiltStep]" value="<?php echo $newControl['MinTiltStep'] ?>" size="8"/></td></tr>
<tr><th scope="row"><?php echo translate('MaxTiltStep') ?></th><td><input type="text" name="newControl[MaxTiltStep]" value="<?php echo $newControl['MaxTiltStep'] ?>" size="8"/></td></tr>
<tr><th scope="row"><?php echo translate('MinTiltRange') ?></th><td><input type="text" name="newControl[MinTiltRange]" value="<?php echo validHtmlStr($newControl['MinTiltRange']) ?>" size="8"/></td></tr>
<tr><th scope="row"><?php echo translate('MaxTiltRange') ?></th><td><input type="text" name="newControl[MaxTiltRange]" value="<?php echo validHtmlStr($newControl['MaxTiltRange']) ?>" size="8"/></td></tr>
<tr><th scope="row"><?php echo translate('MinTiltStep') ?></th><td><input type="text" name="newControl[MinTiltStep]" value="<?php echo validHtmlStr($newControl['MinTiltStep']) ?>" size="8"/></td></tr>
<tr><th scope="row"><?php echo translate('MaxTiltStep') ?></th><td><input type="text" name="newControl[MaxTiltStep]" value="<?php echo validHtmlStr($newControl['MaxTiltStep']) ?>" size="8"/></td></tr>
<tr><th scope="row"><?php echo translate('HasTiltSpeed') ?></th><td><input type="checkbox" name="newControl[HasTiltSpeed]" value="1"<?php if ( !empty($newControl['HasTiltSpeed']) ) { ?> checked="checked"<?php } ?>/></td></tr>
<tr><th scope="row"><?php echo translate('MinTiltSpeed') ?></th><td><input type="text" name="newControl[MinTiltSpeed]" value="<?php echo $newControl['MinTiltSpeed'] ?>" size="8"/></td></tr>
<tr><th scope="row"><?php echo translate('MaxTiltSpeed') ?></th><td><input type="text" name="newControl[MaxTiltSpeed]" value="<?php echo $newControl['MaxTiltSpeed'] ?>" size="8"/></td></tr>
<tr><th scope="row"><?php echo translate('MinTiltSpeed') ?></th><td><input type="text" name="newControl[MinTiltSpeed]" value="<?php echo validHtmlStr($newControl['MinTiltSpeed']) ?>" size="8"/></td></tr>
<tr><th scope="row"><?php echo translate('MaxTiltSpeed') ?></th><td><input type="text" name="newControl[MaxTiltSpeed]" value="<?php echo validHtmlStr($newControl['MaxTiltSpeed']) ?>" size="8"/></td></tr>
<tr><th scope="row"><?php echo translate('HasTurboTilt') ?></th><td><input type="checkbox" name="newControl[HasTurboTilt]" value="1"<?php if ( !empty($newControl['HasTurboTilt']) ) { ?> checked="checked"<?php } ?>/></td></tr>
<tr><th scope="row"><?php echo translate('TurboTiltSpeed') ?></th><td><input type="text" name="newControl[TurboTiltSpeed]" value="<?php echo $newControl['TurboTiltSpeed'] ?>" size="8"/></td></tr>
<tr><th scope="row"><?php echo translate('TurboTiltSpeed') ?></th><td><input type="text" name="newControl[TurboTiltSpeed]" value="<?php echo validHtmlStr($newControl['TurboTiltSpeed']) ?>" size="8"/></td></tr>
<?php
break;
}
@ -406,13 +406,13 @@ switch ( $tab )
<tr><th scope="row"><?php echo translate('CanZoomAbs') ?></th><td><input type="checkbox" name="newControl[CanZoomAbs]" value="1"<?php if ( !empty($newControl['CanZoomAbs']) ) { ?> checked="checked"<?php } ?>/></td></tr>
<tr><th scope="row"><?php echo translate('CanZoomRel') ?></th><td><input type="checkbox" name="newControl[CanZoomRel]" value="1"<?php if ( !empty($newControl['CanZoomRel']) ) { ?> checked="checked"<?php } ?>/></td></tr>
<tr><th scope="row"><?php echo translate('CanZoomCon') ?></th><td><input type="checkbox" name="newControl[CanZoomCon]" value="1"<?php if ( !empty($newControl['CanZoomCon']) ) { ?> checked="checked"<?php } ?>/></td></tr>
<tr><th scope="row"><?php echo translate('MinZoomRange') ?></th><td><input type="text" name="newControl[MinZoomRange]" value="<?php echo $newControl['MinZoomRange'] ?>" size="8"/></td></tr>
<tr><th scope="row"><?php echo translate('MaxZoomRange') ?></th><td><input type="text" name="newControl[MaxZoomRange]" value="<?php echo $newControl['MaxZoomRange'] ?>" size="8"/></td></tr>
<tr><th scope="row"><?php echo translate('MinZoomStep') ?></th><td><input type="text" name="newControl[MinZoomStep]" value="<?php echo $newControl['MinZoomStep'] ?>" size="8"/></td></tr>
<tr><th scope="row"><?php echo translate('MaxZoomStep') ?></th><td><input type="text" name="newControl[MaxZoomStep]" value="<?php echo $newControl['MaxZoomStep'] ?>" size="8"/></td></tr>
<tr><th scope="row"><?php echo translate('MinZoomRange') ?></th><td><input type="text" name="newControl[MinZoomRange]" value="<?php echo validHtmlStr($newControl['MinZoomRange']) ?>" size="8"/></td></tr>
<tr><th scope="row"><?php echo translate('MaxZoomRange') ?></th><td><input type="text" name="newControl[MaxZoomRange]" value="<?php echo validHtmlStr($newControl['MaxZoomRange']) ?>" size="8"/></td></tr>
<tr><th scope="row"><?php echo translate('MinZoomStep') ?></th><td><input type="text" name="newControl[MinZoomStep]" value="<?php echo validHtmlStr($newControl['MinZoomStep']) ?>" size="8"/></td></tr>
<tr><th scope="row"><?php echo translate('MaxZoomStep') ?></th><td><input type="text" name="newControl[MaxZoomStep]" value="<?php echo validHtmlStr($newControl['MaxZoomStep']) ?>" size="8"/></td></tr>
<tr><th scope="row"><?php echo translate('HasZoomSpeed') ?></th><td><input type="checkbox" name="newControl[HasZoomSpeed]" value="1"<?php if ( !empty($newControl['HasZoomSpeed']) ) { ?> checked="checked"<?php } ?>/></td></tr>
<tr><th scope="row"><?php echo translate('MinZoomSpeed') ?></th><td><input type="text" name="newControl[MinZoomSpeed]" value="<?php echo $newControl['MinZoomSpeed'] ?>" size="8"/></td></tr>
<tr><th scope="row"><?php echo translate('MaxZoomSpeed') ?></th><td><input type="text" name="newControl[MaxZoomSpeed]" value="<?php echo $newControl['MaxZoomSpeed'] ?>" size="8"/></td></tr>
<tr><th scope="row"><?php echo translate('MinZoomSpeed') ?></th><td><input type="text" name="newControl[MinZoomSpeed]" value="<?php echo validHtmlStr($newControl['MinZoomSpeed']) ?>" size="8"/></td></tr>
<tr><th scope="row"><?php echo translate('MaxZoomSpeed') ?></th><td><input type="text" name="newControl[MaxZoomSpeed]" value="<?php echo validHtmlStr($newControl['MaxZoomSpeed']) ?>" size="8"/></td></tr>
<?php
break;
}
@ -424,13 +424,13 @@ switch ( $tab )
<tr><th scope="row"><?php echo translate('CanFocusAbs') ?></th><td><input type="checkbox" name="newControl[CanFocusAbs]" value="1"<?php if ( !empty($newControl['CanFocusAbs']) ) { ?> checked="checked"<?php } ?>/></td></tr>
<tr><th scope="row"><?php echo translate('CanFocusRel') ?></th><td><input type="checkbox" name="newControl[CanFocusRel]" value="1"<?php if ( !empty($newControl['CanFocusRel']) ) { ?> checked="checked"<?php } ?>/></td></tr>
<tr><th scope="row"><?php echo translate('CanFocusCon') ?></th><td><input type="checkbox" name="newControl[CanFocusCon]" value="1"<?php if ( !empty($newControl['CanFocusCon']) ) { ?> checked="checked"<?php } ?>/></td></tr>
<tr><th scope="row"><?php echo translate('MinFocusRange') ?></th><td><input type="text" name="newControl[MinFocusRange]" value="<?php echo $newControl['MinFocusRange'] ?>" size="8"/></td></tr>
<tr><th scope="row"><?php echo translate('MaxFocusRange') ?></th><td><input type="text" name="newControl[MaxFocusRange]" value="<?php echo $newControl['MaxFocusRange'] ?>" size="8"/></td></tr>
<tr><th scope="row"><?php echo translate('MinFocusStep') ?></th><td><input type="text" name="newControl[MinFocusStep]" value="<?php echo $newControl['MinFocusStep'] ?>" size="8"/></td></tr>
<tr><th scope="row"><?php echo translate('MaxFocusStep') ?></th><td><input type="text" name="newControl[MaxFocusStep]" value="<?php echo $newControl['MaxFocusStep'] ?>" size="8"/></td></tr>
<tr><th scope="row"><?php echo translate('MinFocusRange') ?></th><td><input type="text" name="newControl[MinFocusRange]" value="<?php echo validHtmlStr($newControl['MinFocusRange']) ?>" size="8"/></td></tr>
<tr><th scope="row"><?php echo translate('MaxFocusRange') ?></th><td><input type="text" name="newControl[MaxFocusRange]" value="<?php echo validHtmlStr($newControl['MaxFocusRange']) ?>" size="8"/></td></tr>
<tr><th scope="row"><?php echo translate('MinFocusStep') ?></th><td><input type="text" name="newControl[MinFocusStep]" value="<?php echo validHtmlStr($newControl['MinFocusStep']) ?>" size="8"/></td></tr>
<tr><th scope="row"><?php echo translate('MaxFocusStep') ?></th><td><input type="text" name="newControl[MaxFocusStep]" value="<?php echo validHtmlStr($newControl['MaxFocusStep']) ?>" size="8"/></td></tr>
<tr><th scope="row"><?php echo translate('HasFocusSpeed') ?></th><td><input type="checkbox" name="newControl[HasFocusSpeed]" value="1"<?php if ( !empty($newControl['HasFocusSpeed']) ) { ?> checked="checked"<?php } ?>/></td></tr>
<tr><th scope="row"><?php echo translate('MinFocusSpeed') ?></th><td><input type="text" name="newControl[MinFocusSpeed]" value="<?php echo $newControl['MinFocusSpeed'] ?>" size="8"/></td></tr>
<tr><th scope="row"><?php echo translate('MaxFocusSpeed') ?></th><td><input type="text" name="newControl[MaxFocusSpeed]" value="<?php echo $newControl['MaxFocusSpeed'] ?>" size="8"/></td></tr>
<tr><th scope="row"><?php echo translate('MinFocusSpeed') ?></th><td><input type="text" name="newControl[MinFocusSpeed]" value="<?php echo validHtmlStr($newControl['MinFocusSpeed']) ?>" size="8"/></td></tr>
<tr><th scope="row"><?php echo translate('MaxFocusSpeed') ?></th><td><input type="text" name="newControl[MaxFocusSpeed]" value="<?php echo validHtmlStr($newControl['MaxFocusSpeed']) ?>" size="8"/></td></tr>
<?php
break;
}
@ -442,13 +442,13 @@ switch ( $tab )
<tr><th scope="row"><?php echo translate('CanIrisAbs') ?></th><td><input type="checkbox" name="newControl[CanIrisAbs]" value="1"<?php if ( !empty($newControl['CanIrisAbs']) ) { ?> checked="checked"<?php } ?>/></td></tr>
<tr><th scope="row"><?php echo translate('CanIrisRel') ?></th><td><input type="checkbox" name="newControl[CanIrisRel]" value="1"<?php if ( !empty($newControl['CanIrisRel']) ) { ?> checked="checked"<?php } ?>/></td></tr>
<tr><th scope="row"><?php echo translate('CanIrisCon') ?></th><td><input type="checkbox" name="newControl[CanIrisCon]" value="1"<?php if ( !empty($newControl['CanIrisCon']) ) { ?> checked="checked"<?php } ?>/></td></tr>
<tr><th scope="row"><?php echo translate('MinIrisRange') ?></th><td><input type="text" name="newControl[MinIrisRange]" value="<?php echo $newControl['MinIrisRange'] ?>" size="8"/></td></tr>
<tr><th scope="row"><?php echo translate('MaxIrisRange') ?></th><td><input type="text" name="newControl[MaxIrisRange]" value="<?php echo $newControl['MaxIrisRange'] ?>" size="8"/></td></tr>
<tr><th scope="row"><?php echo translate('MinIrisStep') ?></th><td><input type="text" name="newControl[MinIrisStep]" value="<?php echo $newControl['MinIrisStep'] ?>" size="8"/></td></tr>
<tr><th scope="row"><?php echo translate('MaxIrisStep') ?></th><td><input type="text" name="newControl[MaxIrisStep]" value="<?php echo $newControl['MaxIrisStep'] ?>" size="8"/></td></tr>
<tr><th scope="row"><?php echo translate('MinIrisRange') ?></th><td><input type="text" name="newControl[MinIrisRange]" value="<?php echo validHtmlStr($newControl['MinIrisRange']) ?>" size="8"/></td></tr>
<tr><th scope="row"><?php echo translate('MaxIrisRange') ?></th><td><input type="text" name="newControl[MaxIrisRange]" value="<?php echo validHtmlStr($newControl['MaxIrisRange']) ?>" size="8"/></td></tr>
<tr><th scope="row"><?php echo translate('MinIrisStep') ?></th><td><input type="text" name="newControl[MinIrisStep]" value="<?php echo validHtmlStr($newControl['MinIrisStep']) ?>" size="8"/></td></tr>
<tr><th scope="row"><?php echo translate('MaxIrisStep') ?></th><td><input type="text" name="newControl[MaxIrisStep]" value="<?php echo validHtmlStr($newControl['MaxIrisStep']) ?>" size="8"/></td></tr>
<tr><th scope="row"><?php echo translate('HasIrisSpeed') ?></th><td><input type="checkbox" name="newControl[HasIrisSpeed]" value="1"<?php if ( !empty($newControl['HasIrisSpeed']) ) { ?> checked="checked"<?php } ?>/></td></tr>
<tr><th scope="row"><?php echo translate('MinIrisSpeed') ?></th><td><input type="text" name="newControl[MinIrisSpeed]" value="<?php echo $newControl['MinIrisSpeed'] ?>" size="8"/></td></tr>
<tr><th scope="row"><?php echo translate('MaxIrisSpeed') ?></th><td><input type="text" name="newControl[MaxIrisSpeed]" value="<?php echo $newControl['MaxIrisSpeed'] ?>" size="8"/></td></tr>
<tr><th scope="row"><?php echo translate('MinIrisSpeed') ?></th><td><input type="text" name="newControl[MinIrisSpeed]" value="<?php echo validHtmlStr($newControl['MinIrisSpeed']) ?>" size="8"/></td></tr>
<tr><th scope="row"><?php echo translate('MaxIrisSpeed') ?></th><td><input type="text" name="newControl[MaxIrisSpeed]" value="<?php echo validHtmlStr($newControl['MaxIrisSpeed']) ?>" size="8"/></td></tr>
<?php
break;
}
@ -460,13 +460,13 @@ switch ( $tab )
<tr><th scope="row"><?php echo translate('CanGainAbs') ?></th><td><input type="checkbox" name="newControl[CanGainAbs]" value="1"<?php if ( !empty($newControl['CanGainAbs']) ) { ?> checked="checked"<?php } ?>/></td></tr>
<tr><th scope="row"><?php echo translate('CanGainRel') ?></th><td><input type="checkbox" name="newControl[CanGainRel]" value="1"<?php if ( !empty($newControl['CanGainRel']) ) { ?> checked="checked"<?php } ?>/></td></tr>
<tr><th scope="row"><?php echo translate('CanGainCon') ?></th><td><input type="checkbox" name="newControl[CanGainCon]" value="1"<?php if ( !empty($newControl['CanGainCon']) ) { ?> checked="checked"<?php } ?>/></td></tr>
<tr><th scope="row"><?php echo translate('MinGainRange') ?></th><td><input type="text" name="newControl[MinGainRange]" value="<?php echo $newControl['MinGainRange'] ?>" size="8"/></td></tr>
<tr><th scope="row"><?php echo translate('MaxGainRange') ?></th><td><input type="text" name="newControl[MaxGainRange]" value="<?php echo $newControl['MaxGainRange'] ?>" size="8"/></td></tr>
<tr><th scope="row"><?php echo translate('MinGainStep') ?></th><td><input type="text" name="newControl[MinGainStep]" value="<?php echo $newControl['MinGainStep'] ?>" size="8"/></td></tr>
<tr><th scope="row"><?php echo translate('MaxGainStep') ?></th><td><input type="text" name="newControl[MaxGainStep]" value="<?php echo $newControl['MaxGainStep'] ?>" size="8"/></td></tr>
<tr><th scope="row"><?php echo translate('MinGainRange') ?></th><td><input type="text" name="newControl[MinGainRange]" value="<?php echo validHtmlStr($newControl['MinGainRange']) ?>" size="8"/></td></tr>
<tr><th scope="row"><?php echo translate('MaxGainRange') ?></th><td><input type="text" name="newControl[MaxGainRange]" value="<?php echo validHtmlStr($newControl['MaxGainRange']) ?>" size="8"/></td></tr>
<tr><th scope="row"><?php echo translate('MinGainStep') ?></th><td><input type="text" name="newControl[MinGainStep]" value="<?php echo validHtmlStr($newControl['MinGainStep']) ?>" size="8"/></td></tr>
<tr><th scope="row"><?php echo translate('MaxGainStep') ?></th><td><input type="text" name="newControl[MaxGainStep]" value="<?php echo validHtmlStr($newControl['MaxGainStep']) ?>" size="8"/></td></tr>
<tr><th scope="row"><?php echo translate('HasGainSpeed') ?></th><td><input type="checkbox" name="newControl[HasGainSpeed]" value="1"<?php if ( !empty($newControl['HasGainSpeed']) ) { ?> checked="checked"<?php } ?>/></td></tr>
<tr><th scope="row"><?php echo translate('MinGainSpeed') ?></th><td><input type="text" name="newControl[MinGainSpeed]" value="<?php echo $newControl['MinGainSpeed'] ?>" size="8"/></td></tr>
<tr><th scope="row"><?php echo translate('MaxGainSpeed') ?></th><td><input type="text" name="newControl[MaxGainSpeed]" value="<?php echo $newControl['MaxGainSpeed'] ?>" size="8"/></td></tr>
<tr><th scope="row"><?php echo translate('MinGainSpeed') ?></th><td><input type="text" name="newControl[MinGainSpeed]" value="<?php echo validHtmlStr($newControl['MinGainSpeed']) ?>" size="8"/></td></tr>
<tr><th scope="row"><?php echo translate('MaxGainSpeed') ?></th><td><input type="text" name="newControl[MaxGainSpeed]" value="<?php echo validHtmlStr($newControl['MaxGainSpeed']) ?>" size="8"/></td></tr>
<?php
break;
}
@ -478,13 +478,13 @@ switch ( $tab )
<tr><th scope="row"><?php echo translate('CanWhiteAbs') ?></th><td><input type="checkbox" name="newControl[CanWhiteAbs]" value="1"<?php if ( !empty($newControl['CanWhiteAbs']) ) { ?> checked="checked"<?php } ?>/></td></tr>
<tr><th scope="row"><?php echo translate('CanWhiteRel') ?></th><td><input type="checkbox" name="newControl[CanWhiteRel]" value="1"<?php if ( !empty($newControl['CanWhiteRel']) ) { ?> checked="checked"<?php } ?>/></td></tr>
<tr><th scope="row"><?php echo translate('CanWhiteCon') ?></th><td><input type="checkbox" name="newControl[CanWhiteCon]" value="1"<?php if ( !empty($newControl['CanWhiteCon']) ) { ?> checked="checked"<?php } ?>/></td></tr>
<tr><th scope="row"><?php echo translate('MinWhiteRange') ?></th><td><input type="text" name="newControl[MinWhiteRange]" value="<?php echo $newControl['MinWhiteRange'] ?>" size="8"/></td></tr>
<tr><th scope="row"><?php echo translate('MaxWhiteRange') ?></th><td><input type="text" name="newControl[MaxWhiteRange]" value="<?php echo $newControl['MaxWhiteRange'] ?>" size="8"/></td></tr>
<tr><th scope="row"><?php echo translate('MinWhiteStep') ?></th><td><input type="text" name="newControl[MinWhiteStep]" value="<?php echo $newControl['MinWhiteStep'] ?>" size="8"/></td></tr>
<tr><th scope="row"><?php echo translate('MaxWhiteStep') ?></th><td><input type="text" name="newControl[MaxWhiteStep]" value="<?php echo $newControl['MaxWhiteStep'] ?>" size="8"/></td></tr>
<tr><th scope="row"><?php echo translate('MinWhiteRange') ?></th><td><input type="text" name="newControl[MinWhiteRange]" value="<?php echo validHtmlStr($newControl['MinWhiteRange']) ?>" size="8"/></td></tr>
<tr><th scope="row"><?php echo translate('MaxWhiteRange') ?></th><td><input type="text" name="newControl[MaxWhiteRange]" value="<?php echo validHtmlStr($newControl['MaxWhiteRange']) ?>" size="8"/></td></tr>
<tr><th scope="row"><?php echo translate('MinWhiteStep') ?></th><td><input type="text" name="newControl[MinWhiteStep]" value="<?php echo validHtmlStr($newControl['MinWhiteStep']) ?>" size="8"/></td></tr>
<tr><th scope="row"><?php echo translate('MaxWhiteStep') ?></th><td><input type="text" name="newControl[MaxWhiteStep]" value="<?php echo validHtmlStr($newControl['MaxWhiteStep']) ?>" size="8"/></td></tr>
<tr><th scope="row"><?php echo translate('HasWhiteSpeed') ?></th><td><input type="checkbox" name="newControl[HasWhiteSpeed]" value="1"<?php if ( !empty($newControl['HasWhiteSpeed']) ) { ?> checked="checked"<?php } ?>/></td></tr>
<tr><th scope="row"><?php echo translate('MinWhiteSpeed') ?></th><td><input type="text" name="newControl[MinWhiteSpeed]" value="<?php echo $newControl['MinWhiteSpeed'] ?>" size="8"/></td></tr>
<tr><th scope="row"><?php echo translate('MaxWhiteSpeed') ?></th><td><input type="text" name="newControl[MaxWhiteSpeed]" value="<?php echo $newControl['MaxWhiteSpeed'] ?>" size="8"/></td></tr>
<tr><th scope="row"><?php echo translate('MinWhiteSpeed') ?></th><td><input type="text" name="newControl[MinWhiteSpeed]" value="<?php echo validHtmlStr($newControl['MinWhiteSpeed']) ?>" size="8"/></td></tr>
<tr><th scope="row"><?php echo translate('MaxWhiteSpeed') ?></th><td><input type="text" name="newControl[MaxWhiteSpeed]" value="<?php echo validHtmlStr($newControl['MaxWhiteSpeed']) ?>" size="8"/></td></tr>
<?php
break;
}
@ -492,7 +492,7 @@ switch ( $tab )
{
?>
<tr><th scope="row"><?php echo translate('HasPresets') ?></th><td><input type="checkbox" name="newControl[HasPresets]" value="1"<?php if ( !empty($newControl['HasPresets']) ) { ?> checked="checked"<?php } ?>/></td></tr>
<tr><th scope="row"><?php echo translate('NumPresets') ?></th><td><input type="text" name="newControl[NumPresets]" value="<?php echo $newControl['NumPresets'] ?>" size="8"/></td></tr>
<tr><th scope="row"><?php echo translate('NumPresets') ?></th><td><input type="text" name="newControl[NumPresets]" value="<?php echo validHtmlStr($newControl['NumPresets']) ?>" size="8"/></td></tr>
<tr><th scope="row"><?php echo translate('HasHomePreset') ?></th><td><input type="checkbox" name="newControl[HasHomePreset]" value="1"<?php if ( !empty($newControl['HasHomePreset']) ) { ?> checked="checked"<?php } ?>/></td></tr>
<tr><th scope="row"><?php echo translate('CanSetPresets') ?></th><td><input type="checkbox" name="newControl[CanSetPresets]" value="1"<?php if ( !empty($newControl['CanSetPresets']) ) { ?> checked="checked"<?php } ?>/></td></tr>
<?php

View File

@ -181,7 +181,7 @@ while ( $event_row = dbFetchNext($results) ) {
<?php
}
?>
<th class="colMark"><input type="checkbox" name="toggleCheck" value="1" onclick="toggleCheckbox(this, 'eids[]');"/></th>
<th class="colMark"><input type="checkbox" name="toggleCheck" value="1" data-checkbox-name="eids[]" data-on-click-this="updateFormCheckboxesByName"/></th>
</tr>
<?php
}

View File

@ -180,7 +180,7 @@ if ( (null !== $filter->Concurrent()) and $filter->Concurrent() )
?>
</div>
</form>
<form name="contentForm" id="contentForm" method="post" onsubmit="return validateForm(this);">
<form name="contentForm" id="contentForm" method="post" class="validateFormOnSubmit">
<input type="hidden" name="Id" value="<?php echo $filter->Id() ?>"/>
<input type="hidden" name="action" value=""/>
<input type="hidden" name="object" value="filter"/>

View File

@ -69,10 +69,12 @@ function addMonitor(url) {
popup_url = '?view=monitor&mid='+mid+'&newMonitor[Path]='+url;
keys = Object.keys( Monitor );
for ( i in Monitor ) {
if ( ! Monitor[i] )
if ( ! Monitor[i] ) {
continue;
if ( Monitor[i] == 'null' )
}
if ( Monitor[i] == 'null' ) {
Monitor[i]='';
}
popup_url += '&newMonitor['+i+']='+Monitor[i];
}
createPopup( popup_url, 'zmMonitor'+mid, 'monitor' );
@ -101,4 +103,4 @@ function initPage() {
probe(url);
}
}
window.addEvent( 'domready', initPage );
window.addEventListener( 'DOMContentLoaded', initPage );

View File

@ -40,7 +40,6 @@ function addMonitor(element) {
function cloneMonitor(element) {
var form = element.form;
var dupParam;
var monitorId=-1;
// get the value of the first checkbox
for ( var i = 0; i < form.elements.length; i++ ) {
@ -79,10 +78,13 @@ function editMonitor( element ) {
//break;
}
} // end foreach checkboxes
if ( monitorIds.length == 1 )
if ( monitorIds.length == 1 ) {
createPopup( '?view=monitor&mid='+monitorIds[0], 'zmMonitor'+monitorIds[0], 'monitor' );
else if ( monitorIds.length > 1 )
createPopup( '?view=monitors&'+(monitorIds.map(function(mid) {return 'mids[]='+mid;}).join('&')), 'zmMonitors', 'monitors' );
} else if ( monitorIds.length > 1 ) {
createPopup( '?view=monitors&'+(monitorIds.map(function(mid) {
return 'mids[]='+mid;
}).join('&')), 'zmMonitors', 'monitors' );
}
}
function deleteMonitor( element ) {
@ -116,10 +118,12 @@ function reloadWindow() {
function initPage() {
reloadWindow.periodical( consoleRefreshTimeout );
if ( showVersionPopup )
if ( showVersionPopup ) {
createPopup( '?view=version', 'zmVersion', 'version' );
if ( showDonatePopup )
}
if ( showDonatePopup ) {
createPopup( '?view=donate', 'zmDonate', 'donate' );
}
// Makes table sortable
$j( function() {
@ -142,4 +146,4 @@ function applySort(event, ui) {
ajax.send();
} // end function applySort(event,ui)
window.addEvent( 'domready', initPage );
window.addEventListener( 'DOMContentLoaded', initPage );

View File

@ -2,8 +2,9 @@ var controlParms = "view=request&request=control";
var controlReq = new Request.JSON( {url: thisUrl, method: 'post', timeout: AJAX_TIMEOUT, onSuccess: getControlResponse} );
function getControlResponse( respObj, respText ) {
if ( !respObj )
if ( !respObj ) {
return;
}
//console.log( respText );
if ( respObj.result != 'Ok' ) {
alert( "Control response was status = "+respObj.status+"\nmessage = "+respObj.message );
@ -21,18 +22,20 @@ function controlCmd( control, event, xtell, ytell ) {
if ( xtell ) {
var xge = parseInt( (x*100)/coords.width );
if ( xtell == -1 )
if ( xtell == -1 ) {
xge = 100 - xge;
else if ( xtell == 2 )
} else if ( xtell == 2 ) {
xge = 2*(50 - xge);
}
locParms += "&xge="+xge;
}
if ( ytell ) {
var yge = parseInt( (y*100)/coords.height );
if ( ytell == -1 )
if ( ytell == -1 ) {
yge = 100 - yge;
else if ( ytell == 2 )
} else if ( ytell == 2 ) {
yge = 2*(50 - yge);
}
locParms += "&yge="+yge;
}
}

View File

@ -9,4 +9,4 @@ function updateLabel() {
form.newLabel.value = '';
}
}
window.addEvent('domready', updateLabel);
window.addEventListener('DOMContentLoaded', updateLabel);

View File

@ -6,4 +6,4 @@ function initCycle() {
nextCycleView.periodical(cycleRefreshTimeout);
}
window.addEvent('domready', initCycle);
window.addEventListener('DOMContentLoaded', initCycle);

View File

@ -1,9 +1,10 @@
function submitForm( element ) {
var form = element.form;
if ( form.option.selectedIndex == 0 )
if ( form.option.selectedIndex == 0 ) {
form.view.value = currentView;
else
} else {
form.view.value = 'none';
}
form.submit();
}

View File

@ -21,11 +21,12 @@ var exportTimer = null;
function exportProgress() {
var tickerText = $('exportProgressTicker').get('text');
if ( tickerText.length < 1 || tickerText.length > 4 )
if ( tickerText.length < 1 || tickerText.length > 4 ) {
$('exportProgressTicker').set( 'text', '.' );
else
} else {
$('exportProgressTicker').appendText( '.' );
}
}
function exportResponse( respObj, respText ) {
window.location.replace( thisUrl+'?view='+currentView+'&'+eidParm+'&exportFile='+respObj.exportFile+'&generated='+((respObj.result=='Ok')?1:0) );
@ -49,4 +50,4 @@ function initPage() {
}
}
window.addEvent( 'domready', initPage );
window.addEventListener( 'DOMContentLoaded', initPage );

View File

@ -1,7 +1,7 @@
var vid = null;
// Function called when video.js hits the end of the video
function vjsReplay() {
var endTime = (Date.parse(eventData.EndTime)).getTime();
switch ( replayMode.value ) {
case 'none':
break;
@ -13,6 +13,7 @@ function vjsReplay() {
var overLaid = $j("#videoobj");
overLaid.append('<p class="vjsMessage" style="height: '+overLaid.height()+'px; line-height: '+overLaid.height()+'px;">No more events</p>');
} else {
var endTime = (Date.parse(eventData.EndTime)).getTime();
var nextStartTime = nextEventStartTime.getTime(); //nextEventStartTime.getTime() is a mootools workaround, highjacks Date.parse
if ( nextStartTime <= endTime ) {
streamNext(true);
@ -22,7 +23,7 @@ function vjsReplay() {
vid.pause();
overLaid.append('<p class="vjsMessage" style="height: '+overLaid.height()+'px; line-height: '+overLaid.height()+'px;"></p>');
var gapDuration = (new Date().getTime()) + (nextStartTime - endTime);
var messageP = $j(".vjsMessage");
var messageP = $j('.vjsMessage');
var x = setInterval(function() {
var now = new Date().getTime();
var remainder = new Date(Math.round(gapDuration - now)).toISOString().substr(11, 8);
@ -165,8 +166,9 @@ function changeScale() {
newWidth = eventData.Width * scale / SCALE_BASE;
newHeight = eventData.Height * scale / SCALE_BASE;
}
if ( !(streamMode == 'stills') )
eventViewer.width(newWidth); //stills handles its own width
if ( !(streamMode == 'stills') ) {
eventViewer.width(newWidth);
} //stills handles its own width
eventViewer.height(newHeight);
if ( !vid ) { // zms needs extra sizing
streamScale(scale == "auto" ? autoScale : scale);
@ -212,12 +214,14 @@ function getCmdResponse( respObj, respText ) {
zmsBroke = false;
if ( streamCmdTimer )
if ( streamCmdTimer ) {
streamCmdTimer = clearTimeout(streamCmdTimer);
}
streamStatus = respObj.status;
if ( streamStatus.progress >= Math.round(parseFloat(eventData.Length)) )
streamStatus.progress = parseFloat(eventData.Length); //Limit progress to reality
if ( streamStatus.progress >= Math.round(parseFloat(eventData.Length)) ) {
streamStatus.progress = parseFloat(eventData.Length);
} //Limit progress to reality
var eventId = streamStatus.event;
if ( lastEventId ) {
@ -240,18 +244,20 @@ function getCmdResponse( respObj, respText ) {
}
$j('#progressValue').html(secsToTime(parseInt(streamStatus.progress)));
$j('#zoomValue').html(streamStatus.zoom);
if ( streamStatus.zoom == "1.0" )
if ( streamStatus.zoom == "1.0" ) {
setButtonState( $('zoomOutBtn'), 'unavail' );
else
} else {
setButtonState( $('zoomOutBtn'), 'inactive' );
}
updateProgressBar();
if ( streamStatus.auth ) {
// Try to reload the image stream.
var streamImg = $j('#evtStream');
if ( streamImg )
if ( streamImg ) {
streamImg.src = streamImg.src.replace( /auth=\w+/i, 'auth='+streamStatus.auth );
}
} // end if haev a new auth hash
streamCmdTimer = streamQuery.delay( streamTimeout ); //Timeout is refresh rate for progressBox and time display
@ -275,8 +281,9 @@ function pauseClicked() {
}
function vjsPause() {
if ( intervalRewind )
if ( intervalRewind ) {
stopFastRev();
}
streamPause();
}
@ -305,8 +312,9 @@ function playClicked( ) {
}
function vjsPlay() { //catches if we change mode programatically
if ( intervalRewind )
if ( intervalRewind ) {
stopFastRev();
}
$j('#rateValue').html(vid.playbackRate());
Cookie.write('zmEventRate', vid.playbackRate()*100, {duration: 10*365});
streamPlay();
@ -332,8 +340,9 @@ function streamFastFwd( action ) {
if ( vid ) {
if ( revSpeed != .5 ) stopFastRev();
vid.playbackRate(rates[rates.indexOf(vid.playbackRate()*100)-1]/100);
if ( rates.indexOf(vid.playbackRate()*100)-1 == -1 )
if ( rates.indexOf(vid.playbackRate()*100)-1 == -1 ) {
setButtonState($('fastFwdBtn'), 'unavail');
}
$j('#rateValue').html(vid.playbackRate());
Cookie.write('zmEventRate', vid.playbackRate()*100, {duration: 10*365});
} else {
@ -534,8 +543,9 @@ function getEventResponse( respObj, respText ) {
eventData = respObj.event;
var eventStills = $('eventStills');
if ( eventStills && !$('eventStills').hasClass( 'hidden' ) && currEventId != eventData.Id )
if ( eventStills && !$('eventStills').hasClass( 'hidden' ) && currEventId != eventData.Id ) {
resetEventStills();
}
currEventId = eventData.Id;
$('dataId').set( 'text', eventData.Id );
@ -565,6 +575,7 @@ function getEventResponse( respObj, respText ) {
//eventImg.setStyles( { 'width': eventData.width, 'height': eventData.height } );
if ( vid && CurEventDefVideoPath ) {
vid.src({type: 'video/mp4', src: CurEventDefVideoPath}); //Currently mp4 is all we use
console.log("getEventResponse");
initialAlarmCues(eventData.Id);//ajax and render, new event
addVideoTimingTrack(vid, LabelFormat, eventData.MonitorName, eventData.Length, eventData.StartTime);
CurEventDefVideoPath = null;
@ -593,8 +604,9 @@ var PrevEventDefVideoPath = "";
var NextEventDefVideoPath = "";
function getNearEventsResponse( respObj, respText ) {
if ( checkStreamForErrors( "getNearEventsResponse", respObj ) )
if ( checkStreamForErrors( "getNearEventsResponse", respObj ) ) {
return;
}
prevEventId = respObj.nearevents.PrevEventId;
nextEventId = respObj.nearevents.NextEventId;
prevEventStartTime = Date.parse(respObj.nearevents.PrevEventStartTime);
@ -633,9 +645,12 @@ function loadEventThumb( event, frame, loadImage ) {
thumbImg.setProperty( 'class', frame.Type=='Alarm'?'alarm':'normal' );
thumbImg.setProperty( 'title', frame.FrameId+' / '+((frame.Type=='Alarm')?frame.Score:0) );
thumbImg.removeEvents( 'click' );
thumbImg.addEvent( 'click', function() { locateImage( frame.FrameId, true ); } );
if ( loadImage )
thumbImg.addEvent( 'click', function() {
locateImage( frame.FrameId, true );
} );
if ( loadImage ) {
loadEventImage( event, frame );
}
} ).pass( loadImage )
}
);
@ -655,10 +670,11 @@ function loadEventImage( event, frame ) {
}
$('eventImageBar').setStyle( 'width', event.Width );
if ( frame.Type=='Alarm' )
if ( frame.Type=='Alarm' ) {
$('eventImageStats').removeClass( 'hidden' );
else
} else {
$('eventImageStats').addClass( 'hidden' );
}
thumbImg.addClass( 'selected' );
thumbImg.setOpacity( 0.5 );
@ -683,7 +699,6 @@ function loadEventImage( event, frame ) {
}
function hideEventImageComplete() {
var eventImg = $('eventImage');
var thumbImg = $('eventThumb'+$('eventImage').getProperty( 'alt' ));
if ( thumbImg ) {
thumbImg.removeClass('selected');
@ -698,9 +713,10 @@ function hideEventImageComplete() {
}
function hideEventImage() {
if ( $('eventImagePanel').getStyle( 'display' ) != 'none' )
if ( $('eventImagePanel').getStyle( 'display' ) != 'none' ) {
new Fx.Tween( $('eventImagePanel'), {duration: 500, transition: Fx.Transitions.Sine, onComplete: hideEventImageComplete} ).start( 'opacity', 1, 0 );
}
}
function resetEventStills() {
hideEventImage();
@ -709,13 +725,15 @@ function resetEventStills() {
slider = new Slider( $('thumbsSlider'), $('thumbsKnob'), {
/*steps: eventData.Frames,*/
onChange: function( step ) {
if ( !step )
if ( !step ) {
step = 0;
}
var fid = parseInt((step * eventData.Frames)/this.options.steps);
if ( fid < 1 )
if ( fid < 1 ) {
fid = 1;
else if ( fid > eventData.Frames )
} else if ( fid > eventData.Frames ) {
fid = eventData.Frames;
}
checkFrames( eventData.Id, fid, ($j('#eventImagePanel').css('display')=='none'?'':'true'));
scroll.toElement( 'eventThumb'+fid );
}
@ -724,8 +742,9 @@ function resetEventStills() {
}
function getFrameResponse( respObj, respText ) {
if ( checkStreamForErrors( "getFrameResponse", respObj ) )
if ( checkStreamForErrors( "getFrameResponse", respObj ) ) {
return;
}
var frame = respObj.frameimage;
@ -734,8 +753,9 @@ function getFrameResponse( respObj, respText ) {
return;
}
if ( !eventData['frames'] )
eventData['frames'] = new Object();
if ( !eventData['frames'] ) {
eventData['frames'] = {};
}
eventData['frames'][frame.FrameId] = frame;
@ -757,22 +777,27 @@ function checkFrames( eventId, frameId, loadImage ) {
return;
}
if ( !eventData['frames'] )
eventData['frames'] = new Object();
if ( !eventData['frames'] ) {
eventData['frames'] = {};
}
currFrameId = frameId;
var loFid = frameId - frameBatch/2;
if ( loFid < 1 )
if ( loFid < 1 ) {
loFid = 1;
}
var hiFid = loFid + (frameBatch-1);
if ( hiFid > eventData.Frames )
if ( hiFid > eventData.Frames ) {
hiFid = eventData.Frames;
}
for ( var fid = loFid; fid <= hiFid; fid++ ) {
if ( !$('eventThumb'+fid) ) {
var img = new Element( 'img', {'id': 'eventThumb'+fid, 'src': 'graphics/transparent.png', 'alt': fid, 'class': 'placeholder'} );
img.addEvent( 'click', function() { eventData['frames'][fid] = null; checkFrames( eventId, fid ); } );
img.addEvent( 'click', function() {
eventData['frames'][fid] = null; checkFrames( eventId, fid );
} );
frameQuery( eventId, fid, loadImage && (fid == frameId) );
var imgs = $('eventThumbs').getElements( 'img' );
var injected = false;
@ -809,31 +834,36 @@ function checkFrames( eventId, frameId, loadImage ) {
}
function locateImage( frameId, loadImage ) {
if ( slider )
if ( slider ) {
slider.fireEvent( 'tick', slider.toPosition( parseInt((frameId-1)*slider.options.steps/eventData.Frames) ));
}
checkFrames( eventData.Id, frameId, loadImage );
scroll.toElement( 'eventThumb'+frameId );
}
function prevImage() {
if ( currFrameId > 1 )
if ( currFrameId > 1 ) {
locateImage( parseInt(currFrameId)-1, true );
}
}
function nextImage() {
if ( currFrameId < eventData.Frames )
if ( currFrameId < eventData.Frames ) {
locateImage( parseInt(currFrameId)+1, true );
}
}
function prevThumbs() {
if ( currFrameId > 1 )
if ( currFrameId > 1 ) {
locateImage( parseInt(currFrameId)>10?(parseInt(currFrameId)-10):1, $('eventImagePanel').getStyle('display')!="none" );
}
}
function nextThumbs() {
if ( currFrameId < eventData.Frames )
if ( currFrameId < eventData.Frames ) {
locateImage( parseInt(currFrameId)<(eventData.Frames-10)?(parseInt(currFrameId)+10):eventData.Frames, $('eventImagePanel').getStyle('display')!="none" );
}
}
function prevEvent() {
if ( prevEventId ) {
@ -850,19 +880,22 @@ function nextEvent() {
}
function getActResponse( respObj, respText ) {
if ( checkStreamForErrors( "getActResponse", respObj ) )
if ( checkStreamForErrors( "getActResponse", respObj ) ) {
return;
}
if ( respObj.refreshEvent )
if ( respObj.refreshEvent ) {
eventQuery( eventData.Id );
}
}
var actReq = new Request.JSON( {url: thisUrl, method: 'get', timeout: AJAX_TIMEOUT, link: 'cancel', onSuccess: getActResponse} );
function actQuery( action, parms ) {
var actParms = "view=request&request=event&id="+eventData.Id+"&action="+action;
if ( parms != null )
if ( parms != null ) {
actParms += "&"+Object.toQueryString( parms );
}
actReq.send( actParms );
}
@ -1002,8 +1035,12 @@ function initPage() {
vid.on('ended', vjsReplay);
vid.on('play', vjsPlay);
vid.on('pause', vjsPause);
vid.on('click', function(event) {handleClick(event);});
vid.on('timeupdate', function() {$j('#progressValue').html(secsToTime(Math.floor(vid.currentTime())));});
vid.on('click', function(event) {
handleClick(event);
});
vid.on('timeupdate', function() {
$j('#progressValue').html(secsToTime(Math.floor(vid.currentTime())));
});
if ( rate > 1 ) {
// rate should be 100 = 1x, etc.
@ -1018,9 +1055,12 @@ function initPage() {
console.log('No element with id tag imageFeed found.');
} else {
var streamImg = imageFeed.getElement('img');
if ( !streamImg )
if ( !streamImg ) {
streamImg = imageFeed.getElement('object');
$(streamImg).addEvent( 'click', function( event ) { handleClick( event ); } );
}
$(streamImg).addEvent( 'click', function( event ) {
handleClick( event );
} );
}
}
}
@ -1030,4 +1070,4 @@ function initPage() {
}
// Kick everything off
window.addEvent( 'domready', initPage );
window.addEventListener( 'DOMContentLoaded', initPage );

View File

@ -5,12 +5,9 @@ function closeWindows() {
filterWindow.close();
}
function toggleCheckbox( element, name ) {
function setButtonStates( element ) {
var form = element.form;
var checked = element.checked;
for (var i = 0; i < form.elements.length; i++)
if (form.elements[i].name.indexOf(name) == 0)
form.elements[i].checked = checked;
form.viewBtn.disabled = !(canViewEvents && checked);
form.editBtn.disabled = !(canEditEvents && checked);
form.archiveBtn.disabled = unarchivedEvents?!checked:true;
@ -33,8 +30,9 @@ function configureButton( element, name ) {
}
}
}
if ( !element.checked )
if ( !element.checked ) {
form.toggleCheck.checked = false;
}
form.viewBtn.disabled = !(canViewEvents && checked);
form.editBtn.disabled = !(canEditEvents && checked);
form.archiveBtn.disabled = (!checked)||(!unarchivedEvents);

View File

@ -4,11 +4,12 @@ function configureExportButton( element ) {
var checkCount = 0;
var radioCount = 0;
for ( var i = 0; i < form.elements.length; i++ ) {
if ( form.elements[i].type == "checkbox" && form.elements[i].checked )
if ( form.elements[i].type == "checkbox" && form.elements[i].checked ) {
checkCount++;
else if ( form.elements[i].type == "radio" && form.elements[i].checked )
} else if ( form.elements[i].type == "radio" && form.elements[i].checked ) {
radioCount++;
}
}
form.elements['exportButton'].disabled = (checkCount == 0 || radioCount == 0);
}
@ -20,11 +21,12 @@ var exportTimer = null;
function exportProgress() {
var tickerText = $('exportProgressTicker').get('text');
if ( tickerText.length < 1 || tickerText.length > 4 )
if ( tickerText.length < 1 || tickerText.length > 4 ) {
$('exportProgressTicker').set( 'text', '.' );
else
} else {
$('exportProgressTicker').appendText( '.' );
}
}
function exportResponse( respObj, respText ) {
console.log(respObj);
@ -59,4 +61,4 @@ function initPage() {
}
}
window.addEvent( 'domready', initPage );
window.addEventListener( 'DOMContentLoaded', initPage );

View File

@ -31,22 +31,23 @@ function updateButtons(element) {
form.elements['executeButton'].disabled = false;
} else {
var canExecute = false;
if ( form.elements['filter[AutoArchive]'] && form.elements['filter[AutoArchive]'].checked )
if ( form.elements['filter[AutoArchive]'] && form.elements['filter[AutoArchive]'].checked ) {
canExecute = true;
else if ( form.elements['filter[AutoVideo]'] && form.elements['filter[AutoVideo]'].checked )
} else if ( form.elements['filter[AutoVideo]'] && form.elements['filter[AutoVideo]'].checked ) {
canExecute = true;
else if ( form.elements['filter[AutoUpload]'] && form.elements['filter[AutoUpload]'].checked )
} else if ( form.elements['filter[AutoUpload]'] && form.elements['filter[AutoUpload]'].checked ) {
canExecute = true;
else if ( form.elements['filter[AutoEmail]'] && form.elements['filter[AutoEmail]'].checked )
} else if ( form.elements['filter[AutoEmail]'] && form.elements['filter[AutoEmail]'].checked ) {
canExecute = true;
else if ( form.elements['filter[AutoMessage]'] && form.elements['filter[AutoMessage]'].checked )
} else if ( form.elements['filter[AutoMessage]'] && form.elements['filter[AutoMessage]'].checked ) {
canExecute = true;
else if ( form.elements['filter[AutoExecute]'].checked && form.elements['filter[AutoExecuteCmd]'].value != '' )
} else if ( form.elements['filter[AutoExecute]'].checked && form.elements['filter[AutoExecuteCmd]'].value != '' ) {
canExecute = true;
else if ( form.elements['filter[AutoDelete]'].checked )
} else if ( form.elements['filter[AutoDelete]'].checked ) {
canExecute = true;
else if ( form.elements['filter[UpdateDiskSpace]'].checked )
} else if ( form.elements['filter[UpdateDiskSpace]'].checked ) {
canExecute = true;
}
form.elements['executeButton'].disabled = !canExecute;
}
if ( form.elements['filter[Name]'].value ) {
@ -260,4 +261,4 @@ function init() {
$j("#sortTable [name$='sort_field\\]']").chosen();
}
window.addEvent( 'domready', init );
window.addEventListener( 'DOMContentLoaded', init );

View File

@ -3,13 +3,13 @@ var logReq = new Request.JSON( { url: thisUrl, method: 'post', timeout: AJAX_TIM
var logTimer = undefined;
var logTable = undefined;
var logCodes = new Object({
var logCodes = {
'0': 'INF',
'-1': 'WAR',
'-2': 'ERR',
'-3': 'FAT',
'-4': 'PNC',
});
};
var minSampleTime = 2000;
var maxSampleTime = 16000;
@ -27,8 +27,9 @@ var options = {};
function buildFetchParms( parms ) {
var fetchParms = logParms+'&limit='+maxLogFetch;
if ( parms )
if ( parms ) {
fetchParms += '&'+parms;
}
Object.each(filter,
function( value, key ) {
fetchParms += '&filter['+key+']='+value;
@ -46,8 +47,9 @@ function fetchPrevLogs() {
}
function logResponse( respObj ) {
if ( logTimer )
if ( logTimer ) {
logTimer = clearTimeout( logTimer );
}
if ( respObj.result == 'Ok' ) {
if ( respObj.logs.length > 0 ) {
@ -56,22 +58,25 @@ function logResponse( respObj ) {
try {
respObj.logs.each(
function( log ) {
if ( ( !maxLogTime ) || ( log.TimeKey > maxLogTime ) )
if ( ( !maxLogTime ) || ( log.TimeKey > maxLogTime ) ) {
maxLogTime = log.TimeKey;
if ( ( !minLogTime ) || ( log.TimeKey < minLogTime ) )
}
if ( ( !minLogTime ) || ( log.TimeKey < minLogTime ) ) {
minLogTime = log.TimeKey;
}
var row = logTable.push( [{content: log.DateTime, properties: {style: 'white-space: nowrap'}}, log.Component, log.Server, log.Pid, log.Code, log.Message, log.File, log.Line] );
delete log.Message;
row.tr.store( 'log', log );
if ( log.Level <= -3 )
if ( log.Level <= -3 ) {
row.tr.addClass( 'log-fat' );
else if ( log.Level <= -2 )
} else if ( log.Level <= -2 ) {
row.tr.addClass( 'log-err' );
else if ( log.Level <= -1 )
} else if ( log.Level <= -1 ) {
row.tr.addClass( 'log-war' );
else if ( log.Level > 0 )
} else if ( log.Level > 0 ) {
row.tr.addClass( 'log-dbg' );
}
if ( !firstLoad ) {
var color = document.defaultView.getComputedStyle(row.tr, null).getPropertyValue('color');
var colorParts = color.match(/^rgb.*\((\d+),\s*(\d+),\s*(\d+)/);
@ -83,11 +88,12 @@ function logResponse( respObj ) {
if ( typeof(respObj.options) == 'object' ) {
$j.each( respObj.options,
function( field ) {
if ( options[field] )
if ( options[field] ) {
options[field] = Object.assign(options[field], respObj.options[field]);
else
} else {
options[field] = respObj.options[field];
}
}
);
}
updateFilterSelectors();
@ -101,21 +107,24 @@ function logResponse( respObj ) {
$('availLogs').set('text', respObj.available);
$('displayLogs').set('text', logCount);
if ( firstLoad ) {
if ( logCount < displayLimit )
if ( logCount < displayLimit ) {
fetchPrevLogs();
}
}
logTable.reSort();
} catch ( e ) {
console.error( e );
}
logTimeout /= 2;
if ( logTimeout < minSampleTime )
if ( logTimeout < minSampleTime ) {
logTimeout = minSampleTime;
}
} else {
firstLoad = false;
logTimeout *= 2;
if ( logTimeout > maxSampleTime )
if ( logTimeout > maxSampleTime ) {
logTimeout = maxSampleTime;
}
} // end logs.length > 0
} // end if result == Ok
logTimer = fetchNextLogs.delay( logTimeout );
@ -161,9 +170,10 @@ function filterLog() {
return;
}
var value = selector.get('value');
if ( value )
if ( value ) {
filter[field] = value;
}
}
);
refreshLog();
}
@ -254,16 +264,18 @@ function updateFilterSelectors() {
}
);
}
if ( filter[key] )
if ( filter[key] ) {
selector.set('value', filter[key]);
}
}
);
}
function initPage() {
displayLimit = initialDisplayLimit;
for ( var i = 1; i <= 9; i++ )
for ( var i = 1; i <= 9; i++ ) {
logCodes[''+i] = 'DB'+i;
}
logTable = new HtmlTable( $('logTable'),
{
zebra: true,
@ -279,10 +291,11 @@ function initPage() {
if ( logCount > displayLimit ) {
var rows = tbody.getElements( 'tr' );
var startIndex;
if ( sortReversed )
if ( sortReversed ) {
startIndex = displayLimit;
else
} else {
startIndex = 0;
}
for ( var i = startIndex; logCount > displayLimit; i++ ) {
rows[i].destroy();
logCount--;
@ -301,4 +314,4 @@ function initPage() {
}
// Kick everything off
window.addEvent( 'domready', initPage );
window.addEventListener( 'DOMContentLoaded', initPage );

View File

@ -1,4 +1,4 @@
window.addEvent( 'domready', function() {
window.addEventListener( 'DOMContentLoaded', function() {
if ( failed == true ) {
$('loginError').removeClass( 'hidden' );
}

View File

@ -8,16 +8,18 @@ function updateMonitorDimensions( element ) {
var monitorHeight = parseInt(form.elements['newMonitor[Height]'].value);
switch ( element.name ) {
case 'newMonitor[Width]':
if ( monitorWidth >= 0 )
if ( monitorWidth >= 0 ) {
form.elements['newMonitor[Height]'].value = Math.round((monitorWidth * heightFactor) / widthFactor);
else
} else {
form.elements['newMonitor[Height]'].value = '';
}
break;
case 'newMonitor[Height]':
if ( monitorHeight >= 0 )
if ( monitorHeight >= 0 ) {
form.elements['newMonitor[Width]'].value = Math.round((monitorHeight * widthFactor) / heightFactor);
else
} else {
form.elements['newMonitor[Width]'].value = '';
}
break;
}
}
@ -46,4 +48,4 @@ function initPage() {
//updateMethods( $(protocolSelector) );
}
window.addEvent( 'domready', initPage );
window.addEventListener( 'DOMContentLoaded', initPage );

View File

@ -12,16 +12,18 @@ function Monitor(monitorData) {
this.lastAlarmState = STATE_IDLE;
this.streamCmdParms = 'view=request&request=stream&connkey='+this.connKey;
this.onclick = monitorData.onclick;
if ( auth_hash )
if ( auth_hash ) {
this.streamCmdParms += '&auth='+auth_hash;
}
this.streamCmdTimer = null;
this.type = monitorData.type;
this.refresh = monitorData.refresh;
this.start = function(delay) {
if ( this.streamCmdQuery )
if ( this.streamCmdQuery ) {
this.streamCmdTimer = this.streamCmdQuery.delay(delay, this);
else
} else {
console.log("No streamCmdQuery");
}
};
this.setStateClass = function(element, stateClass) {
@ -51,8 +53,9 @@ function Monitor(monitorData) {
}
if ( 0 ) {
// Requeue, but want to wait a while.
if ( this.streamCmdTimer )
if ( this.streamCmdTimer ) {
this.streamCmdTimer = clearTimeout( this.streamCmdTimer );
}
var streamCmdTimeout = 1000*statusRefreshTimeout;
this.streamCmdTimer = this.streamCmdQuery.delay( streamCmdTimeout, this, true );
requestQueue.resume();
@ -61,8 +64,9 @@ function Monitor(monitorData) {
};
this.getStreamCmdResponse = function(respObj, respText) {
if ( this.streamCmdTimer )
if ( this.streamCmdTimer ) {
this.streamCmdTimer = clearTimeout( this.streamCmdTimer );
}
var stream = $j('#liveStream'+this.id)[0];
@ -72,12 +76,13 @@ function Monitor(monitorData) {
this.alarmState = this.status.state;
var stateClass = "";
if ( this.alarmState == STATE_ALARM )
if ( this.alarmState == STATE_ALARM ) {
stateClass = "alarm";
else if ( this.alarmState == STATE_ALERT )
} else if ( this.alarmState == STATE_ALERT ) {
stateClass = "alert";
else
} else {
stateClass = "idle";
}
if ( (!COMPACT_MONTAGE) && (this.type != 'WebSite') ) {
$('fpsValue'+this.id).set('text', this.status.fps);
@ -113,8 +118,9 @@ function Monitor(monitorData) {
if ( this.status.auth ) {
if ( this.status.auth != auth_hash ) {
// Try to reload the image stream.
if ( stream )
if ( stream ) {
stream.src = stream.src.replace(/auth=\w+/i, 'auth='+this.status.auth);
}
console.log("Changed auth from " + auth_hash + " to " + this.status.auth);
auth_hash = this.status.auth;
}
@ -254,10 +260,12 @@ function changeSize() {
console.log("Error finding frame for " + monitor.id);
continue;
}
if ( width )
if ( width ) {
monitor_frame.css('width', width+'px');
if ( height )
}
if ( height ) {
monitor_frame.css('height', height+'px');
}
/*Stream could be an applet so can't use moo tools*/
var streamImg = $('liveStream'+monitor.id);
@ -309,10 +317,12 @@ function changeScale() {
console.log("Error finding frame for " + monitor.id);
continue;
}
if ( width )
if ( width ) {
monitor_frame.css('width', width+'px');
if ( height )
}
if ( height ) {
monitor_frame.css('height', height+'px');
}
/*Stream could be an applet so can't use moo tools*/
var streamImg = $j('#liveStream'+monitor.id)[0];
if ( streamImg ) {
@ -427,4 +437,4 @@ function initPage() {
selectLayout('#zmMontageLayout');
}
// Kick everything off
window.addEvent('domready', initPage);
window.addEventListener( 'DOMContentLoaded', initPage );

View File

@ -21,8 +21,9 @@ function evaluateLoadTimes() {
freeTimeLastIntervals[imageLoadTimesEvaluated++] = 1 - ((end - start)/currentDisplayInterval);
if ( imageLoadTimesEvaluated < imageLoadTimesNeeded ) return;
var avgFrac=0;
for ( var i=0; i < imageLoadTimesEvaluated; i++ )
for ( var i=0; i < imageLoadTimesEvaluated; i++ ) {
avgFrac += freeTimeLastIntervals[i];
}
avgFrac = avgFrac / imageLoadTimesEvaluated;
// The larger this is(positive) the faster we can go
if (avgFrac >= 0.9) currentDisplayInterval = (currentDisplayInterval * 0.50).toFixed(1); // we can go much faster
@ -49,8 +50,9 @@ function getFrame( monId, time ) {
for ( var event_id in events ) {
// Search for the event matching this time. Would be more efficient if we had events indexed by monitor
Event = events[event_id];
if ( Event.MonitorId != monId || Event.StartTimeSecs > time || Event.EndTimeSecs < time )
if ( Event.MonitorId != monId || Event.StartTimeSecs > time || Event.EndTimeSecs < time ) {
continue;
}
var duration = Event.EndTimeSecs - Event.StartTimeSecs;
if ( ! Event.FramesById ) {
@ -110,7 +112,6 @@ function getImageSource( monId, time ) {
var Frame = getFrame(monId, time);
if ( Frame ) {
// Adjust for bulk frames
var frame_id;
if ( Frame.NextFrameId ) {
var duration = Frame.NextTimeStampSecs - Frame.TimeStampSecs;
frame_id = Frame.FrameId + parseInt( (Frame.NextFrameId-Frame.FrameId) * ( time-Frame.TimeStampSecs )/duration );
@ -263,8 +264,9 @@ function drawSliderOnGraph(val) {
// if we have no data to display don't do the slider itself
var sliderX = parseInt( (val - minTimeSecs) / rangeTimeSecs * cWidth - sliderWidth/2); // position left side of slider
if ( sliderX < 0 ) sliderX = 0;
if ( sliderX+sliderWidth > cWidth )
if ( sliderX+sliderWidth > cWidth ) {
sliderX=cWidth-sliderWidth-1;
}
// If we have data already saved first restore it from LAST time
@ -297,10 +299,11 @@ function drawSliderOnGraph(val) {
// try to get length and then when we get too close to the right switch to the left
var len = o.offsetWidth;
var x;
if(sliderX > cWidth/2)
if (sliderX > cWidth/2) {
x=sliderX - len - 10;
else
} else {
x=sliderX + 10;
}
o.style.left=x.toString() + "px";
}
@ -314,8 +317,9 @@ function drawSliderOnGraph(val) {
o.style.bottom=labbottom;
o.style.font=labfont;
o.style.left="5px";
if ( numMonitors == 0 ) // we need a len calculation if we skipped the slider
if ( numMonitors == 0 ) { // we need a len calculation if we skipped the slider
len = o.offsetWidth;
}
// If the slider will overlay part of this suppress (this is the left side)
if ( len + 10 > sliderX || cWidth < len * 4 ) {
// that last check is for very narrow browsers
@ -377,8 +381,9 @@ function drawGraph() {
for ( var frame_id in Event.FramesById ) {
var Frame = Event.FramesById[frame_id];
if ( ! Frame.Score )
if ( ! Frame.Score ) {
continue;
}
// Now put in scored frames (if any)
var x1=parseInt( (Frame.TimeStampSecs - minTimeSecs) / rangeTimeSecs * cWidth); // round low end down
@ -439,17 +444,18 @@ function redrawScreen() {
$('ScaleDiv').style.display="none";
$('fit').innerHTML="Scale";
var vh=window.innerHeight;
var vw=window.innerWidth;
var pos=$('monitors').getPosition();
var mh=(vh - pos.y - $('fps').getSize().y);
$('monitors').setStyle('height', mh.toString() + "px"); // leave a small gap at bottom
if(maxfit2($('monitors').getSize().x, $('monitors').getSize().y) == 0) /// if we fail to fix we back out of fit mode -- ??? This may need some better handling
if (maxfit2($('monitors').getSize().x, $('monitors').getSize().y) == 0) { /// if we fail to fix we back out of fit mode -- ??? This may need some better handling
fitMode=1-fitMode;
}
} else {
// switch out of fit mode
// if we fit, then monitors were absolutely positioned already (or will be) otherwise release them to float
for( var i=0; i<numMonitors; i++ )
for ( var i=0; i<numMonitors; i++ ) {
monitorCanvasObj[monitorPtr[i]].style.position="";
}
$('monitors').setStyle('height', "auto");
$('ScaleDiv').style.display="inline";
$('ScaleDiv').style.display="inline-flex";
@ -493,10 +499,18 @@ HTMLCanvasElement.prototype.relMouseCoords = relMouseCoords;
// These are the functions for mouse movement in the timeline. Note that touch is treated as a mouse move with mouse down
var mouseisdown=false;
function mdown(event) {mouseisdown=true; mmove(event);}
function mup(event) {mouseisdown=false;}
function mout(event) {mouseisdown=false;} // if we go outside treat it as release
function tmove(event) {mouseisdown=true; mmove(event);}
function mdown(event) {
mouseisdown=true; mmove(event);
}
function mup(event) {
mouseisdown=false;
}
function mout(event) {
mouseisdown=false;
} // if we go outside treat it as release
function tmove(event) {
mouseisdown=true; mmove(event);
}
function mmove(event) {
if ( mouseisdown ) {
@ -590,8 +604,9 @@ function clicknav(minSecs, maxSecs, live) {// we use the current time if we can
var maxStr = "";
var currentStr = "";
if ( minSecs > 0 ) {
if ( maxSecs > now )
if ( maxSecs > now ) {
maxSecs = parseInt(now);
}
maxStr="&maxTime=" + secs2inputstr(maxSecs);
$('maxTime').value = secs2inputstr(maxSecs);
}
@ -605,18 +620,22 @@ function clicknav(minSecs, maxSecs, live) {// we use the current time if we can
}
var intervalStr="&displayinterval=" + currentDisplayInterval.toString();
if ( minSecs && maxSecs ) {
if ( currentTimeSecs > minSecs && currentTimeSecs < maxSecs ) // make sure time is in the new range
if ( currentTimeSecs > minSecs && currentTimeSecs < maxSecs ) { // make sure time is in the new range
currentStr="&current=" + secs2dbstr(currentTimeSecs);
}
}
var liveStr="&live=0";
if ( live == 1 )
if ( live == 1 ) {
liveStr="&live=1";
}
var zoomStr="";
for ( var i=0; i < numMonitors; i++ )
if ( monitorZoomScale[monitorPtr[i]] < 0.99 || monitorZoomScale[monitorPtr[i]] > 1.01 ) // allow for some up/down changes and just treat as 1 of almost 1
for ( var i=0; i < numMonitors; i++ ) {
if ( monitorZoomScale[monitorPtr[i]] < 0.99 || monitorZoomScale[monitorPtr[i]] > 1.01 ) { // allow for some up/down changes and just treat as 1 of almost 1
zoomStr += "&z" + monitorPtr[i].toString() + "=" + monitorZoomScale[monitorPtr[i]].toFixed(2);
}
}
var uri = "?view=" + currentView + '&fit='+(fitMode==1?'1':'0') + minStr + maxStr + currentStr + intervalStr + liveStr + zoomStr + "&scale=" + $j("#scaleslider")[0].value + "&speed=" + speeds[$j("#speedslider")[0].value];
window.location = uri;
@ -684,7 +703,6 @@ function maxfit2(divW, divH) {
var bestFitX2=[];
var bestFitY=[];
var bestFitY2=[];
var bestFitScale;
var minScale=0.05;
var maxScale=5.00;
@ -711,13 +729,15 @@ function maxfit2(divW, divH) {
function doesItFit(x, y, w, h, d) { // does block (w,h) fit at position (x,y) relative to edge and other nodes already done (0..d)
if (x+w>=divW) return 0;
if (y+h>=divH) return 0;
for(var i=0; i<=d; i++)
for (var i=0; i<=d; i++) {
if ( !( thisX[i]>x+w-1 || thisX2[i] < x || thisY[i] > y+h-1 || thisY2[i] < y ) ) return 0;
}
return 1; // it's OK
}
if ( borders <= 0 )
borders=$("Monitor"+monId).getStyle("border").toInt() * 2; // assume fixed size border, and added to both sides and top/bottom
if ( borders <= 0 ) {
borders=$("Monitor"+monId).getStyle("border").toInt() * 2;
} // assume fixed size border, and added to both sides and top/bottom
// try fitting over first, then down. Each new one must land at either upper right or lower left corner of last (try in that order)
// Pick the one with the smallest Y, then smallest X if Y equal
var fitX = 999999999;
@ -819,12 +839,13 @@ function clickMonitor(event, monId) {
var monitor_element = $("Monitor"+monId.toString());
var pos_x = event.offsetX ? (event.offsetX) : event.pageX - monitor_element.offsetLeft;
var pos_y = event.offsetY ? (event.offsetY) : event.pageY - monitor_element.offsetTop;
if ( pos_x < monitor_element.width/4 && pos_y < monitor_element.height/4 )
if ( pos_x < monitor_element.width/4 && pos_y < monitor_element.height/4 ) {
zoom(monId, 1.15);
else if ( pos_x > monitor_element.width * 3/4 && pos_y < monitor_element.height/4 )
} else if ( pos_x > monitor_element.width * 3/4 && pos_y < monitor_element.height/4 ) {
zoom(monId, 1/1.15);
else
} else {
showOneMonitor(monId);
}
return;
}
@ -848,9 +869,11 @@ function changeDateTime(e) {
var fitStr ="&fit="+(fitMode?"1":"0");
var zoomStr="";
for ( var i=0; i < numMonitors; i++ )
if ( monitorZoomScale[monitorPtr[i]] < 0.99 || monitorZoomScale[monitorPtr[i]] > 1.01 ) // allow for some up/down changes and just treat as 1 of almost 1
for ( var i=0; i < numMonitors; i++ ) {
if ( monitorZoomScale[monitorPtr[i]] < 0.99 || monitorZoomScale[monitorPtr[i]] > 1.01 ) { // allow for some up/down changes and just treat as 1 of almost 1
zoomStr += "&z" + monitorPtr[i].toString() + "=" + monitorZoomScale[monitorPtr[i]].toFixed(2);
}
}
var uri = "?view=" + currentView + fitStr + minStr + maxStr + liveStr + zoomStr + "&scale=" + $j("#scaleslider")[0].value + "&speed=" + speeds[$j("#speedslider")[0].value];
window.location = uri;
@ -876,8 +899,12 @@ function initPage() {
monitorCanvasCtx[monId] = monitorCanvasObj[monId].getContext('2d');
var imageObject = monitorImageObject[monId] = new Image();
imageObject.monId = monId;
imageObject.onload = function() {imagedone(this, this.monId, true );};
imageObject.onerror = function() {imagedone(this, this.monId, false );};
imageObject.onload = function() {
imagedone(this, this.monId, true );
};
imageObject.onerror = function() {
imagedone(this, this.monId, false );
};
loadImage2Monitor( monId, monitorImageURL[monId] );
}
}
@ -916,4 +943,4 @@ function initPage() {
}
window.addEventListener("resize", redrawScreen, {passive: true});
// Kick everything off
window.addEvent( 'domready', initPage );
window.addEventListener( 'DOMContentLoaded', initPage );

View File

@ -19,4 +19,4 @@ function initPage() {
return ( true );
}
window.addEvent( 'domready', initPage );
window.addEventListener( 'DOMContentLoaded', initPage );

View File

@ -1,9 +1,10 @@
function submitForm( element ) {
var form = element.form;
if ( form.option.selectedIndex == 0 )
if ( form.option.selectedIndex == 0 ) {
form.view.value = currentView;
else
} else {
form.view.value = 'none';
}
form.submit();
}

View File

@ -20,9 +20,11 @@ return;
var fitStr ="&fit="+(fitMode?"1":"0");
var zoomStr="";
for ( var i=0; i < numMonitors; i++ )
if ( monitorZoomScale[monitorPtr[i]] < 0.99 || monitorZoomScale[monitorPtr[i]] > 1.01 ) // allow for some up/down changes and just treat as 1 of almost 1
for ( var i=0; i < numMonitors; i++ ) {
if ( monitorZoomScale[monitorPtr[i]] < 0.99 || monitorZoomScale[monitorPtr[i]] > 1.01 ) { // allow for some up/down changes and just treat as 1 of almost 1
zoomStr += "&z" + monitorPtr[i].toString() + "=" + monitorZoomScale[monitorPtr[i]].toFixed(2);
}
}
var uri = "?view=" + currentView + fitStr + minStr + maxStr + liveStr + zoomStr + "&scale=" + $j("#scaleslider")[0].value + "&speed=" + speeds[$j("#speedslider")[0].value];
window.location = uri;
@ -54,4 +56,4 @@ function initPage() {
});
}
// Kick everything off
window.addEvent( 'domready', initPage );
window.addEventListener( 'DOMContentLoaded', initPage );

View File

@ -1,5 +1,5 @@
function validateForm( form, newServer ) {
var errors = new Array();
function validateForm(form) {
var errors = [];
if ( !form.elements['newServer[Name]'].value ) {
errors[errors.length] = "You must supply a name";
}

View File

@ -1,14 +1,15 @@
function validateForm( form, newStorage ) {
var errors = new Array();
function validateForm(form) {
var errors = [];
if ( !form.elements['newStorage[Name]'].value ) {
errors[errors.length] = "You must supply a name";
errors[errors.length] = 'You must supply a name';
}
if ( !form.elements['newStorage[Path]'].value ) {
errors[errors.length] = "You must supply a path";
errors[errors.length] = 'You must supply a path';
}
if ( errors.length ) {
alert(errors.join("\n"));
return( false );
return false;
}
return( true );
return true;
}

View File

@ -16,17 +16,20 @@ function showEvent( eid, fid, width, height ) {
function createEventHtml( event, frame ) {
var eventHtml = new Element( 'div' );
if ( event.Archived > 0 )
if ( event.Archived > 0 ) {
eventHtml.addClass( 'archived' );
}
new Element( 'p' ).inject( eventHtml ).set( 'text', monitors[event.MonitorId].Name );
new Element( 'p' ).inject( eventHtml ).set( 'text', event.Name+(frame?("("+frame.FrameId+")"):"") );
new Element( 'p' ).inject( eventHtml ).set( 'text', event.StartTime+" - "+event.Length+"s" );
new Element( 'p' ).inject( eventHtml ).set( 'text', event.Cause );
if ( event.Notes )
if ( event.Notes ) {
new Element( 'p' ).inject( eventHtml ).set( 'text', event.Notes );
if ( event.Archived > 0 )
}
if ( event.Archived > 0 ) {
new Element( 'p' ).inject( eventHtml ).set( 'text', archivedString );
}
return ( eventHtml );
}
@ -66,7 +69,7 @@ function frameDataResponse( respObj, respText ) {
if ( !event['frames'] ) {
console.log("No frames data in event response");
event['frames'] = new Object();
event['frames'] = {};
}
event['frames'][frame.FrameId] = frame;
@ -126,9 +129,10 @@ function loadEventImage( imagePath, eid, fid, width, height, fps, videoName, dur
addVideoTimingTrack(vid, Monitor.LabelFormat, Monitor.Name, duration, startTime);
vid.currentTime = fid/fps;
} else {
if ( ! vid.seeking )
if ( ! vid.seeking ) {
vid.currentTime=fid/fps;
}
}
} else {
if ( vid ) vid.hide();
imageSrc.show();

View File

@ -14,9 +14,10 @@ function validateForm( form, newUser ) {
}
var monitorIds = new Array();
for ( var i = 0; i < form.elements['monitorIds'].options.length; i++ ) {
if ( form.elements['monitorIds'].options[i].selected )
if ( form.elements['monitorIds'].options[i].selected ) {
monitorIds[monitorIds.length] = form.elements['monitorIds'].options[i].value;
}
}
form.elements['newUser[MonitorIds]'].value = monitorIds.join( ',' );
if ( errors.length ) {
alert( errors.join( "\n" ) );

View File

@ -10,11 +10,12 @@ var generateVideoTimer = null;
function generateVideoProgress() {
var tickerText = $('videoProgressTicker').get('text');
if ( tickerText.length < 1 || tickerText.length > 4 )
if ( tickerText.length < 1 || tickerText.length > 4 ) {
$('videoProgressTicker').set( 'text', '.' );
else
} else {
$('videoProgressTicker').appendText( '.' );
}
}
function generateVideoResponse( respObj, respText ) {
window.location.replace( thisUrl+'?view='+currentView+'&eid='+eventId+'&generated='+((respObj.result=='Ok')?1:0) );

View File

@ -8,20 +8,24 @@ function setButtonState(element, butClass) {
function showEvents() {
$('ptzControls').addClass( 'hidden' );
$('events').removeClass( 'hidden' );
if ( $('eventsControl') )
if ( $('eventsControl') ) {
$('eventsControl').addClass('hidden');
if ( $('controlControl') )
}
if ( $('controlControl') ) {
$('controlControl').removeClass('hidden');
}
showMode = "events";
}
function showPtzControls() {
$('events').addClass( 'hidden' );
$('ptzControls').removeClass( 'hidden' );
if ( $('eventsControl') )
if ( $('eventsControl') ) {
$('eventsControl').removeClass('hidden');
if ( $('controlControl') )
}
if ( $('controlControl') ) {
$('controlControl').addClass('hidden');
}
showMode = "control";
}
@ -60,17 +64,18 @@ var lastAlarmState = STATE_IDLE;
function setAlarmState( currentAlarmState ) {
alarmState = currentAlarmState;
var stateString = "Unknown";
var stateClass = "";
if ( alarmState == STATE_ALARM )
if ( alarmState == STATE_ALARM ) {
stateClass = "alarm";
else if ( alarmState == STATE_ALERT )
} else if ( alarmState == STATE_ALERT ) {
stateClass = "alert";
}
$('stateValue').set( 'text', stateStrings[alarmState] );
if ( stateClass )
if ( stateClass ) {
$('stateValue').setProperty( 'class', stateClass );
else
} else {
$('stateValue').removeProperty( 'class' );
}
var isAlarmed = ( alarmState == STATE_ALARM || alarmState == STATE_ALERT );
var wasAlarmed = ( lastAlarmState == STATE_ALARM || lastAlarmState == STATE_ALERT );
@ -81,11 +86,12 @@ function setAlarmState( currentAlarmState ) {
if ( newAlarm ) {
if ( SOUND_ON_ALARM ) {
// Enable the alarm sound
if ( !canPlayPauseAudio )
if ( !canPlayPauseAudio ) {
$('alarmSound').removeClass( 'hidden' );
else
} else {
$('MediaPlayer').Play();
}
}
if ( POPUP_ON_ALARM ) {
window.focus();
}
@ -93,22 +99,25 @@ function setAlarmState( currentAlarmState ) {
if ( SOUND_ON_ALARM ) {
if ( oldAlarm ) {
// Disable alarm sound
if ( !canPlayPauseAudio )
if ( !canPlayPauseAudio ) {
$('alarmSound').addClass( 'hidden' );
else
} else {
$('MediaPlayer').Stop();
}
}
if ( oldAlarm) //done with an event do a refresh
}
if (oldAlarm) { // done with an event do a refresh
eventCmdQuery();
}
lastAlarmState = alarmState;
}
if ( monitorType != 'WebSite' ) {
var streamCmdParms = "view=request&request=stream&connkey="+connKey;
if ( auth_hash )
if ( auth_hash ) {
streamCmdParms += '&auth='+auth_hash;
}
var streamCmdReq = new Request.JSON( {
url: monitorUrl,
method: 'get',
@ -133,8 +142,9 @@ function getStreamCmdFailure(xhr) {
}
function getStreamCmdResponse(respObj, respText) {
watchdogOk("stream");
if ( streamCmdTimer )
if ( streamCmdTimer ) {
streamCmdTimer = clearTimeout(streamCmdTimer);
}
if ( respObj.result == 'Ok' ) {
// The get status command can get backed up, in which case we won't be able to get the semaphore and will exit.
if ( respObj.status ) {
@ -144,12 +154,13 @@ function getStreamCmdResponse(respObj, respText) {
setAlarmState(streamStatus.state);
$('levelValue').set('text', streamStatus.level);
if ( streamStatus.level > 95 )
if ( streamStatus.level > 95 ) {
$('levelValue').className = "alarm";
else if ( streamStatus.level > 80 )
} else if ( streamStatus.level > 80 ) {
$('levelValue').className = "alert";
else
} else {
$('levelValue').className = "ok";
}
var delayString = secsToTime(streamStatus.delay);
@ -170,15 +181,17 @@ function getStreamCmdResponse(respObj, respText) {
if ( streamStatus.rate == 1 ) {
streamCmdPlay(false);
} else if ( streamStatus.rate > 0 ) {
if ( streamStatus.rate < 1 )
if ( streamStatus.rate < 1 ) {
streamCmdSlowFwd(false);
else
streamCmdFastFwd(false);
} else {
if ( streamStatus.rate > -1 )
streamCmdFastFwd(false);
}
} else {
if ( streamStatus.rate > -1 ) {
streamCmdSlowRev(false);
else
} else {
streamCmdFastRev(false);
}
} // rate
} else {
$('modeValue').set( 'text', "Live" );
@ -189,10 +202,11 @@ function getStreamCmdResponse(respObj, respText) {
} // end if paused or delayed
$('zoomValue').set( 'text', streamStatus.zoom );
if ( streamStatus.zoom == "1.0" )
if ( streamStatus.zoom == "1.0" ) {
setButtonState( $('zoomOutBtn'), 'unavail' );
else
} else {
setButtonState( $('zoomOutBtn'), 'inactive' );
}
if ( canEditMonitors ) {
if ( streamStatus.enabled ) {
@ -218,8 +232,9 @@ function getStreamCmdResponse(respObj, respText) {
console.log("Have a new auth hash" + streamStatus.auth);
// Try to reload the image stream.
var streamImg = $('liveStream');
if ( streamImg )
if ( streamImg ) {
streamImg.src = streamImg.src.replace(/auth=\w+/i, 'auth='+streamStatus.auth);
}
} // end if have a new auth hash
} // end if respObj.status
} else {
@ -239,8 +254,9 @@ function getStreamCmdResponse(respObj, respText) {
}
var streamCmdTimeout = statusRefreshTimeout;
if ( alarmState == STATE_ALARM || alarmState == STATE_ALERT )
if ( alarmState == STATE_ALARM || alarmState == STATE_ALERT ) {
streamCmdTimeout = streamCmdTimeout/5;
}
streamCmdTimer = streamCmdQuery.delay( streamCmdTimeout );
}
@ -252,9 +268,10 @@ function streamCmdPause( action ) {
setButtonState( $('slowFwdBtn'), 'inactive' );
setButtonState( $('slowRevBtn'), 'inactive' );
setButtonState( $('fastRevBtn'), 'inactive' );
if ( action )
if ( action ) {
streamCmdReq.send( streamCmdParms+"&command="+CMD_PAUSE );
}
}
function streamCmdPlay( action ) {
setButtonState( $('pauseBtn'), 'inactive' );
@ -272,9 +289,10 @@ function streamCmdPlay( action ) {
setButtonState( $('slowRevBtn'), 'unavail' );
setButtonState( $('fastRevBtn'), 'unavail' );
}
if ( action )
if ( action ) {
streamCmdReq.send( streamCmdParms+"&command="+CMD_PLAY );
}
}
function streamCmdStop( action ) {
setButtonState( $('pauseBtn'), 'inactive' );
@ -284,8 +302,9 @@ function streamCmdStop( action ) {
setButtonState( $('slowFwdBtn'), 'unavail' );
setButtonState( $('slowRevBtn'), 'unavail' );
setButtonState( $('fastRevBtn'), 'unavail' );
if ( action )
if ( action ) {
streamCmdReq.send( streamCmdParms+"&command="+CMD_STOP );
}
setButtonState( $('stopBtn'), 'unavail' );
setButtonState( $('playBtn'), 'active' );
}
@ -298,9 +317,10 @@ function streamCmdFastFwd( action ) {
setButtonState( $('slowFwdBtn'), 'inactive' );
setButtonState( $('slowRevBtn'), 'inactive' );
setButtonState( $('fastRevBtn'), 'inactive' );
if ( action )
if ( action ) {
streamCmdReq.send( streamCmdParms+"&command="+CMD_FASTFWD );
}
}
function streamCmdSlowFwd( action ) {
setButtonState( $('pauseBtn'), 'inactive' );
@ -310,8 +330,9 @@ function streamCmdSlowFwd( action ) {
setButtonState( $('slowFwdBtn'), 'active' );
setButtonState( $('slowRevBtn'), 'inactive' );
setButtonState( $('fastRevBtn'), 'inactive' );
if ( action )
if ( action ) {
streamCmdReq.send( streamCmdParms+"&command="+CMD_SLOWFWD );
}
setButtonState( $('pauseBtn'), 'active' );
setButtonState( $('slowFwdBtn'), 'inactive' );
}
@ -324,8 +345,9 @@ function streamCmdSlowRev( action ) {
setButtonState( $('slowFwdBtn'), 'inactive' );
setButtonState( $('slowRevBtn'), 'active' );
setButtonState( $('fastRevBtn'), 'inactive' );
if ( action )
if ( action ) {
streamCmdReq.send( streamCmdParms+"&command="+CMD_SLOWREV );
}
setButtonState( $('pauseBtn'), 'active' );
setButtonState( $('slowRevBtn'), 'inactive' );
}
@ -338,9 +360,10 @@ function streamCmdFastRev( action ) {
setButtonState( $('slowFwdBtn'), 'inactive' );
setButtonState( $('slowRevBtn'), 'inactive' );
setButtonState( $('fastRevBtn'), 'inactive' );
if ( action )
if ( action ) {
streamCmdReq.send( streamCmdParms+"&command="+CMD_FASTREV );
}
}
function streamCmdZoomIn( x, y ) {
streamCmdReq.send( streamCmdParms+"&command="+CMD_ZOOMIN+"&x="+x+"&y="+y );
@ -364,26 +387,30 @@ function streamCmdQuery() {
if ( monitorType != 'WebSite' ) {
var statusCmdParms = "view=request&request=status&entity=monitor&id="+monitorId+"&element[]=Status&element[]=FrameRate";
if ( auth_hash )
if ( auth_hash ) {
statusCmdParms += '&auth='+auth_hash;
}
var statusCmdReq = new Request.JSON( {url: monitorUrl, method: 'get', data: statusCmdParms, timeout: AJAX_TIMEOUT, link: 'cancel', onSuccess: getStatusCmdResponse} );
var statusCmdTimer = null;
}
function getStatusCmdResponse(respObj, respText) {
watchdogOk("status");
if ( statusCmdTimer )
if ( statusCmdTimer ) {
statusCmdTimer = clearTimeout(statusCmdTimer);
}
if ( respObj.result == 'Ok' ) {
$('fpsValue').set('text', respObj.monitor.FrameRate);
setAlarmState(respObj.monitor.Status);
} else
} else {
checkStreamForErrors("getStatusCmdResponse", respObj);
}
var statusCmdTimeout = statusRefreshTimeout;
if ( alarmState == STATE_ALARM || alarmState == STATE_ALERT )
if ( alarmState == STATE_ALARM || alarmState == STATE_ALERT ) {
statusCmdTimeout = statusCmdTimeout/5;
}
statusCmdTimer = statusCmdQuery.delay( statusCmdTimeout );
}
@ -393,8 +420,9 @@ function statusCmdQuery() {
if ( monitorType != 'WebSite' ) {
var alarmCmdParms = "view=request&request=alarm&id="+monitorId;
if ( auth_hash )
if ( auth_hash ) {
alarmCmdParms += '&auth='+auth_hash;
}
var alarmCmdReq = new Request.JSON( {
url: monitorUrl,
method: 'get',
@ -452,8 +480,9 @@ function deleteEvent( event, eventId ) {
if ( monitorType != 'WebSite' ) {
var eventCmdParms = "view=request&request=status&entity=events&id="+monitorId+"&count="+maxDisplayEvents+"&sort=Id%20desc";
if ( auth_hash )
if ( auth_hash ) {
eventCmdParms += '&auth='+auth_hash;
}
var eventCmdReq = new Request.JSON( {
url: monitorUrl,
method: 'get',
@ -473,8 +502,9 @@ function highlightRow( row ) {
function getEventCmdResponse( respObj, respText ) {
watchdogOk("event");
if ( eventCmdTimer )
if ( eventCmdTimer ) {
eventCmdTimer = clearTimeout( eventCmdTimer );
}
if ( respObj.result == 'Ok' ) {
var dbEvents = respObj.events.reverse();
@ -482,7 +512,9 @@ function getEventCmdResponse( respObj, respText ) {
var eventListBody = $(eventList).getElement( 'tbody' );
var eventListRows = $(eventListBody).getElements( 'tr' );
eventListRows.each( function( row ) { row.removeClass( 'updated' ); } );
eventListRows.each( function( row ) {
row.removeClass( 'updated' );
} );
for ( var i = 0; i < dbEvents.length; i++ ) {
var event = dbEvents[i];
@ -498,8 +530,6 @@ function getEventCmdResponse( respObj, respText ) {
new Element( 'td', {'class': 'colScore'} ).inject( row );
new Element( 'td', {'class': 'colDelete'} ).inject( row );
var cells = row.getElements( 'td' );
var link = new Element( 'a', {'href': '#', 'events': {'click': createEventPopup.pass( [event.Id, '&filter[Query][terms][0][attr]=MonitorId&filter[Query][terms][0][op]=%3d&filter[Query][terms][0][val]='+monitorId+'&page=1&popup=1', event.Width, event.Height] )}});
link.set( 'text', event.Id );
link.inject( row.getElement( 'td.colId' ) );
@ -519,17 +549,20 @@ function getEventCmdResponse( respObj, respText ) {
link.set( 'text', event.AvgScore+'/'+event.MaxScore );
link.inject( row.getElement( 'td.colScore' ) );
link = new Element( 'a', { 'href': '#', 'title': deleteString, 'events': { 'click': function( e ) { deleteEvent( e, event.Id ); }, 'mouseover': highlightRow.pass( row ), 'mouseout': highlightRow.pass( row ) } });
link = new Element( 'a', {'href': '#', 'title': deleteString, 'events': {'click': function( e ) {
deleteEvent( e, event.Id );
}, 'mouseover': highlightRow.pass( row ), 'mouseout': highlightRow.pass( row )}});
link.set( 'text', 'X' );
link.inject( row.getElement( 'td.colDelete' ) );
if ( i == 0 )
if ( i == 0 ) {
row.inject( $(eventListBody) );
else {
} else {
row.inject( $(eventListBody), 'top' );
if ( !eventCmdFirst )
if ( !eventCmdFirst ) {
row.addClass( 'recent' );
}
}
} else {
row.getElement( 'td.colName a' ).set( 'text', event.Name );
row.getElement( 'td.colSecs' ).set( 'text', event.Length );
@ -552,32 +585,37 @@ function getEventCmdResponse( respObj, respText ) {
rows[rows.length-1].destroy();
rows.length--;
}
} else
} else {
checkStreamForErrors("getEventCmdResponse", respObj);
}
var eventCmdTimeout = eventsRefreshTimeout;
if ( alarmState == STATE_ALARM || alarmState == STATE_ALERT )
if ( alarmState == STATE_ALARM || alarmState == STATE_ALERT ) {
eventCmdTimeout = eventCmdTimeout/5;
}
eventCmdTimer = eventCmdQuery.delay( eventCmdTimeout );
eventCmdFirst = false;
}
function eventCmdQuery() {
if ( eventCmdTimer ) //avoid firing another if we are firing one
if ( eventCmdTimer ) { // avoid firing another if we are firing one
eventCmdTimer = clearTimeout( eventCmdTimer );
}
eventCmdReq.send();
}
if ( monitorType != 'WebSite' ) {
var controlParms = "view=request&request=control&id="+monitorId;
if ( auth_hash )
if ( auth_hash ) {
controlParms += '&auth='+auth_hash;
}
var controlReq = new Request.JSON( {url: monitorUrl, method: 'post', timeout: AJAX_TIMEOUT, link: 'cancel', onSuccess: getControlResponse} );
}
function getControlResponse( respObj, respText ) {
if ( !respObj )
if ( !respObj ) {
return;
}
//console.log( respText );
if ( respObj.result != 'Ok' ) {
alert( "Control response was status = "+respObj.status+"\nmessage = "+respObj.message );
@ -596,25 +634,28 @@ function controlCmd( control, event, xtell, ytell ) {
if ( xtell ) {
var xge = parseInt( (x*100)/coords.width );
if ( xtell == -1 )
if ( xtell == -1 ) {
xge = 100 - xge;
else if ( xtell == 2 )
} else if ( xtell == 2 ) {
xge = 2*(50 - xge);
}
locParms += "&xge="+xge;
}
if ( ytell ) {
var yge = parseInt( (y*100)/coords.height );
if ( ytell == -1 )
if ( ytell == -1 ) {
yge = 100 - yge;
else if ( ytell == 2 )
} else if ( ytell == 2 ) {
yge = 2*(50 - yge);
}
locParms += "&yge="+yge;
}
}
controlReq.send( controlParms+"&control="+control+locParms );
if ( streamMode == "single" )
if ( streamMode == "single" ) {
fetchImage.pass( $('imageFeed').getElement('img') ).delay( 1000 );
}
}
function controlCmdImage( x, y ) {
var imageControlParms = controlParms;
@ -622,9 +663,10 @@ function controlCmdImage( x, y ) {
imageControlParms += "&control="+imageControlMode;
controlReq.send( imageControlParms+"&x="+x+"&y="+y );
if ( streamMode == "single" )
if ( streamMode == "single" ) {
fetchImage.pass( $('imageFeed').getElement('img') ).delay( 1000 );
}
}
function fetchImage( streamImage ) {
streamImage.src = streamImage.src.replace(/rand=\d+/i, 'rand='+Math.floor((Math.random() * 1000000) ));
@ -636,10 +678,11 @@ function handleClick( event ) {
var y = event.page.y - $(target).getTop();
if ( showMode == "events" || !imageControlMode ) {
if ( event.shift )
if ( event.shift ) {
streamCmdPan( x, y );
else
} else {
streamCmdZoomIn( x, y );
}
} else {
controlCmdImage( x, y );
}
@ -651,8 +694,9 @@ function appletRefresh() {
var parent = streamImg.getParent();
streamImg.dispose();
streamImg.inject( parent );
if ( appletRefreshTime )
if ( appletRefreshTime ) {
appletRefresh.delay( appletRefreshTime*1000 );
}
} else {
appletRefresh.delay( 15*1000 ); //if we are paused or delayed check every 15 seconds if we are live yet...
}
@ -704,25 +748,30 @@ function initPage() {
if ( canStreamNative || streamMode == "single" ) {
var streamImg = $('imageFeed').getElement('img');
if ( !streamImg )
if ( !streamImg ) {
streamImg = $('imageFeed').getElement('object');
}
if ( streamMode == "single" ) {
streamImg.addEvent('click', fetchImage.pass(streamImg));
fetchImage.pass(streamImg).periodical(imageRefreshTimeout);
} else
streamImg.addEvent('click', function(event) { handleClick(event); });
} else {
streamImg.addEvent('click', function(event) {
handleClick(event);
});
}
}
if ( refreshApplet && appletRefreshTime )
if ( refreshApplet && appletRefreshTime ) {
appletRefresh.delay(appletRefreshTime*1000);
}
if ( scale == "auto" ) changeScale();
if ( window.history.length == 1 ) {
$j('#closeControl').html('');
}
} else if ( monitorRefresh > 0 ) {
var myReload = setInterval(reloadWebSite, monitorRefresh*1000);
setInterval(reloadWebSite, monitorRefresh*1000);
}
}
// Kick everything off
window.addEvent('domready', initPage);
window.addEventListener('DOMContentLoaded', initPage);

View File

@ -176,14 +176,16 @@ function applyPreset() {
}
function toPixels( field, maxValue ) {
if ( field.value != '' )
if ( field.value != '' ) {
field.value = Math.round((field.value*maxValue)/100);
}
}
function toPercent( field, maxValue ) {
if ( field.value != '' )
if ( field.value != '' ) {
field.value = Math.round((100*100*field.value)/maxValue)/100;
}
}
function applyZoneUnits() {
var area = zone.Area;
@ -209,9 +211,10 @@ function applyZoneUnits() {
}
function limitRange( field, minValue, maxValue ) {
if ( field.value != '' )
if ( field.value != '' ) {
field.value = constrainValue( parseInt(field.value), parseInt(minValue), parseInt(maxValue) );
}
}
function limitFilter( field ) {
field.value = (Math.floor((field.value-1)/2)*2) + 1;
@ -250,8 +253,9 @@ function unsetActivePoint( index ) {
function getCoordString() {
var coords = new Array();
for ( var i = 0; i < zone['Points'].length; i++ )
for ( var i = 0; i < zone['Points'].length; i++ ) {
coords[coords.length] = zone['Points'][i].x+','+zone['Points'][i].y;
}
return ( coords.join( " " ) );
}
@ -300,14 +304,16 @@ function updateActivePoint( index ) {
function addPoint( index ) {
var nextIndex = index+1;
if ( index >= (zone['Points'].length-1) )
if ( index >= (zone['Points'].length-1) ) {
nextIndex = 0;
}
var newX = parseInt(Math.round((zone['Points'][index]['x']+zone['Points'][nextIndex]['x'])/2));
var newY = parseInt(Math.round((zone['Points'][index]['y']+zone['Points'][nextIndex]['y'])/2));
if ( nextIndex == 0 )
if ( nextIndex == 0 ) {
zone['Points'][zone['Points'].length] = {'x': newX, 'y': newY};
else
} else {
zone['Points'].splice( nextIndex, 0, {'x': newX, 'y': newY} );
}
drawZonePoints();
// drawZonePoints calls updateZoneImage
//updateZoneImage();
@ -376,7 +382,9 @@ function saveChanges( element ) {
}
function drawZonePoints() {
$('imageFrame').getElements( 'div.zonePoint' ).each( function( element ) { element.destroy(); } );
$('imageFrame').getElements( 'div.zonePoint' ).each( function( element ) {
element.destroy();
} );
for ( var i = 0; i < zone['Points'].length; i++ ) {
var div = new Element( 'div', {
'id': 'point'+i,
@ -399,7 +407,9 @@ function drawZonePoints() {
}
var tables = $('zonePoints').getElements( 'table' );
tables.each( function( table ) { table.getElement( 'tbody' ).empty(); } );
tables.each( function( table ) {
table.getElement( 'tbody' ).empty();
} );
for ( var i = 0; i < zone['Points'].length; i++ ) {
var row = new Element( 'tr', {'id': 'row'+i} );
row.addEvents( {'mouseover': highlightOn.pass( i ), 'mouseout': highlightOff.pass( i )} );
@ -443,17 +453,18 @@ var lastAlarmState = STATE_IDLE;
function setAlarmState( currentAlarmState ) {
alarmState = currentAlarmState;
var stateString = "Unknown";
var stateClass = "";
if ( alarmState == STATE_ALARM )
if ( alarmState == STATE_ALARM ) {
stateClass = "alarm";
else if ( alarmState == STATE_ALERT )
} else if ( alarmState == STATE_ALERT ) {
stateClass = "alert";
}
$('stateValue').set( 'text', stateStrings[alarmState] );
if ( stateClass )
if ( stateClass ) {
$('stateValue').setProperty( 'class', stateClass );
else
} else {
$('stateValue').removeProperty( 'class' );
}
var isAlarmed = ( alarmState == STATE_ALARM || alarmState == STATE_ALERT );
var wasAlarmed = ( lastAlarmState == STATE_ALARM || lastAlarmState == STATE_ALERT );
@ -464,27 +475,30 @@ function setAlarmState( currentAlarmState ) {
if ( newAlarm ) {
if ( SOUND_ON_ALARM ) {
// Enable the alarm sound
if ( !canPlayPauseAudio )
if ( !canPlayPauseAudio ) {
$('alarmSound').removeClass( 'hidden' );
else
} else {
$('MediaPlayer').Play();
}
}
}
if ( SOUND_ON_ALARM ) {
if ( oldAlarm ) {
// Disable alarm sound
if ( !canPlayPauseAudio )
if ( !canPlayPauseAudio ) {
$('alarmSound').addClass( 'hidden' );
else
} else {
$('MediaPlayer').Stop();
}
}
}
lastAlarmState = alarmState;
}
var streamCmdParms = "view=request&request=stream&connkey="+connKey;
if ( auth_hash )
if ( auth_hash ) {
streamCmdParms += '&auth='+auth_hash;
}
var streamCmdReq = new Request.JSON( {
url: monitorUrl,
method: 'get',
@ -498,8 +512,9 @@ var streamStatus;
function getStreamCmdResponse( respObj, respText ) {
watchdogOk("stream");
if ( streamCmdTimer )
if ( streamCmdTimer ) {
streamCmdTimer = clearTimeout( streamCmdTimer );
}
if ( respObj.result == 'Ok' ) {
streamStatus = respObj.status;
@ -507,8 +522,6 @@ function getStreamCmdResponse( respObj, respText ) {
setAlarmState( streamStatus.state );
var delayString = secsToTime( streamStatus.delay );
if ( streamStatus.paused == true ) {
streamCmdPause( false );
} else if ( streamStatus.delayed == true && streamStatus.rate == 1 ) {
@ -519,15 +532,17 @@ function getStreamCmdResponse( respObj, respText ) {
if ( ! streamPause ) {
// Try to reload the image stream.
var streamImg = $('liveStream'+monitorId);
if ( streamImg )
if ( streamImg ) {
streamImg.src = streamImg.src.replace(/rand=\d+/i, 'rand='+Math.floor((Math.random() * 1000000) ));
}
}
}
if ( ! streamPause ) {
var streamCmdTimeout = statusRefreshTimeout;
if ( alarmState == STATE_ALARM || alarmState == STATE_ALERT )
if ( alarmState == STATE_ALARM || alarmState == STATE_ALERT ) {
streamCmdTimeout = streamCmdTimeout/5;
}
streamCmdTimer = streamCmdQuery.delay( streamCmdTimeout );
}
}
@ -547,27 +562,31 @@ function streamCmdPauseToggle() {
}
function streamCmdPause( action ) {
if ( action )
if ( action ) {
streamCmdReq.send( streamCmdParms+"&command="+CMD_PAUSE );
}
}
function streamCmdPlay( action ) {
if ( action )
if ( action ) {
streamCmdReq.send( streamCmdParms+"&command="+CMD_PLAY );
}
}
function streamCmdStop( action ) {
if ( action )
if ( action ) {
streamCmdReq.send( streamCmdParms+"&command="+CMD_STOP );
}
}
function streamCmdQuery() {
streamCmdReq.send( streamCmdParms+"&command="+CMD_QUERY );
}
var statusCmdParms = "view=request&request=status&entity=monitor&id="+monitorId+"&element[]=Status&element[]=FrameRate";
if ( auth_hash )
if ( auth_hash ) {
statusCmdParms += '&auth='+auth_hash;
}
var statusCmdReq = new Request.JSON( {
url: monitorUrl,
method: 'get',
@ -580,19 +599,22 @@ var statusCmdTimer = null;
function getStatusCmdResponse( respObj, respText ) {
watchdogOk("status");
if ( statusCmdTimer )
if ( statusCmdTimer ) {
statusCmdTimer = clearTimeout( statusCmdTimer );
}
if ( respObj.result == 'Ok' ) {
$('fpsValue').set( 'text', respObj.monitor.FrameRate );
setAlarmState( respObj.monitor.Status );
} else
} else {
checkStreamForErrors("getStatusCmdResponse", respObj);
}
if ( ! streamPause ) {
var statusCmdTimeout = statusRefreshTimeout;
if ( alarmState == STATE_ALARM || alarmState == STATE_ALERT )
if ( alarmState == STATE_ALARM || alarmState == STATE_ALERT ) {
statusCmdTimeout = statusCmdTimeout/5;
}
statusCmdTimer = statusCmdQuery.delay( statusCmdTimeout );
}
}
@ -611,8 +633,9 @@ function appletRefresh() {
var parent = streamImg.getParent();
streamImg.dispose();
streamImg.inject( parent );
if ( appletRefreshTime )
if ( appletRefreshTime ) {
appletRefresh.delay( appletRefreshTime*1000 );
}
} else {
appletRefresh.delay( 15*1000 ); //if we are paused or delayed check every 15 seconds if we are live yet...
}
@ -693,17 +716,19 @@ function initPage() {
if ( canStreamNative || streamMode == "single" ) {
var streamImg = $('imageFrame').getElement('img');
if ( !streamImg )
if ( !streamImg ) {
streamImg = $('imageFrame').getElement('object');
}
if ( streamMode == "single" ) {
streamImg.addEvent( 'click', fetchImage.pass( streamImg ) );
fetchImage.pass( streamImg ).periodical( imageRefreshTimeout );
}
}
if ( refreshApplet && appletRefreshTime )
if ( refreshApplet && appletRefreshTime ) {
appletRefresh.delay( appletRefreshTime*1000 );
}
}
function Polygon_calcArea( coords ) {
var n_coords = coords.length;
@ -717,4 +742,4 @@ function Polygon_calcArea( coords ) {
return Math.round( Math.abs( float_area ) );
}
window.addEvent( 'domready', initPage );
window.addEventListener( 'DOMContentLoaded', initPage );

View File

@ -2,7 +2,8 @@ var streamCmdParms = "view=request&request=stream&connkey="+connKey;
var streamCmdReq = new Request.JSON( {url: monitorUrl, method: 'post', timeout: AJAX_TIMEOUT, link: 'cancel'} );
function streamCmdQuit( action ) {
if ( action )
if ( action ) {
streamCmdReq.send( streamCmdParms+"&command="+CMD_QUIT );
}
}

View File

@ -6,7 +6,7 @@ xhtmlHeaders(__FILE__, translate('Login') );
<div class="container">
<form class="center-block" name="loginForm" id="loginForm" method="post" action="<?php echo $_SERVER['PHP_SELF'] ?>">
<input type="hidden" name="action" value="login"/>
<input type="hidden" name="view" value="postlogin"/>
<input type="hidden" name="view" value="login"/>
<input type="hidden" name="postLoginQuery" value="<?php echo htmlspecialchars($_SERVER['QUERY_STRING']) ?>">
<div id="loginError" class="hidden alarm" role="alert">

View File

@ -510,7 +510,7 @@ foreach ( $tabs as $name=>$value ) {
<?php
} else {
?>
<li><a href="#" onclick="submitTab( '<?php echo $name ?>' ); return( false );"><?php echo $value ?></a></li>
<li><a href="#" data-tab-name="<?php echo $name ?>"><?php echo $value ?></a></li>
<?php
}
}

View File

@ -39,7 +39,7 @@ xhtmlHeaders(__FILE__, translate('Server').' - '.$Server->Name());
<h2><?php echo translate('Server').' - '.$Server->Name() ?></h2>
</div>
<div id="content">
<form name="contentForm" method="post" action="<?php echo $_SERVER['PHP_SELF'] ?>" onsubmit="return validateForm(this, <?php echo empty($Server->Name())?'true':'false' ?>)">
<form name="contentForm" method="post" action="<?php echo $_SERVER['PHP_SELF'] ?>" class="validateFormOnSubmit">
<input type="hidden" name="view" value="<?php echo $view ?>"/>
<input type="hidden" name="object" value="server"/>
<input type="hidden" name="id" value="<?php echo validHtmlStr($_REQUEST['id']) ?>"/>

View File

@ -63,7 +63,7 @@ xhtmlHeaders(__FILE__, translate('Storage')." - ".$newStorage['Name'] );
<h2><?php echo translate('Storage')." - ".$newStorage['Name'] ?></h2>
</div>
<div id="content">
<form name="contentForm" method="post" action="<?php echo $_SERVER['PHP_SELF'] ?>" onsubmit="return validateForm( this, <?php echo empty($newStorage['Name'])?'true':'false' ?> )">
<form name="contentForm" method="post" action="<?php echo $_SERVER['PHP_SELF'] ?>" class="validateFormOnSubmit">
<input type="hidden" name="view" value="<?php echo $view ?>"/>
<input type="hidden" name="object" value="storage"/>
<input type="hidden" name="id" value="<?php echo validHtmlStr($_REQUEST['id']) ?>"/>