Help
RSS
API
Feed
Maltego
Contact
Domain > c005.eagleeyenetworks.com
×
More information on this domain is in
AlienVault OTX
Is this malicious?
Yes
No
DNS Resolutions
Date
IP Address
2026-02-06
192.40.5.58
(
ClassC
)
Port 80
HTTP/1.1 308 Permanent RedirectDate: Fri, 06 Feb 2026 15:49:10 GMTContent-Type: text/htmlContent-Length: 164Connection: keep-aliveLocation: https://c005.eagleeyenetworks.com/ html>head>title>308 Permanent Redirect/title>/head>body>center>h1>308 Permanent Redirect/h1>/center>hr>center>nginx/center>/body>/html>
Port 443
HTTP/1.1 200 OKDate: Fri, 06 Feb 2026 15:49:10 GMTContent-Type: text/htmlContent-Length: 1126843Connection: keep-aliveVary: Accept-EncodingLast-Modified: Wed, 28 Jan 2026 10:14:04 GMTETag: 6979e16c-1131bbExpires: Fri, 06 Feb 2026 15:49:09 GMTCache-Control: no-cachex-ee-request-id: a021dde83a97064e181c1e7b91df7a8fP3P: policyref/w3c/p3p.xml, CPIDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNTAccept-Ranges: bytesStrict-Transport-Security: max-age15724800; includeSubDomains !DOCTYPE html>html classbase-html langen> head> !-- Global site tag (gtag.js) - Google Analytics --> script async srchttps://www.googletagmanager.com/gtag/js?idG-2CMYRYYFKT>/script> script> window.dataLayer window.dataLayer || ; function gtag(){dataLayer.push(arguments);} gtag(js, new Date()); gtag(config, G-2CMYRYYFKT); /script> script> (function() { var BLACKLISTED_BRANDS foo, jrlabs1234, a2bsecurity, aaci, ais, ajartec, alarmco, andreeapenciu, bavitech, bernagh, bis, brandingtest, buttner, cameron, clearcom, clisecure, codeblue, comm-works, convergint, datavox, ecipc, eentest, emeademo, ensecsolutions, entrustit, greatsecurity, gridsquared, hoppenbrouwers, incito, intellicom, itesolutions, jci, kibo, ksol, linear, lss, magnaite, mdc, millennium, mwg, mycloud, niefra, nsecure, pandynetworks, philandson, preventiaee, protection1, ptech, pvs, rei, remtech, rht, ri, rinkor, sageintegration, sandbox, sbd, secomnz, secomplc, securadyne, securitas-aus, sestech, spottersecurity, ss, ssoadmin, summitfire, thecctvcompany, top, unitedfp, usis, verge, vitn, wyn, compete, glovoapp, hkt, maldonado, jjfoods, nysscvms, omegaperipherals, graincorp ; // Parse domain var parts window.location.hostname.split(.); var subdomain parts0; var mainDomain parts.length > 2 ? parts.slice(-2).join(.) : ; var environment parts.length 4 ? parts1 : ; environment environment dev ? stage : environment; var isLoginOrCluster subdomain login || /^c\d{3}$/.test(subdomain); if (subdomain && !isLoginOrCluster) { const meta document.createElement(meta); meta.name robots; meta.content noindex,follow; document.head.appendChild(meta); } // Check conditions var isEENDomain mainDomain eagleeyenetworks.com; var isBlacklisted BLACKLISTED_BRANDS.indexOf(subdomain) ! -1; var ua navigator.userAgent; var isSafari ua.indexOf(Safari) ! -1 && ua.indexOf(Chrome) -1 && ua.indexOf(Android) -1; if (isSafari) { return; } if (!isEENDomain) { return; } if (isBlacklisted) { return; } const isSelfReferrer new RegExp( ^https:\\/\\/(?!webapp\\.)^.+\\.(?:(dev|stage)\\.)? + mainDomain.replace(/\./g, \\.)).test(document.referrer); if (document.referrer.includes(eenadmin) || document.referrer.includes(signup) || document.referrer.includes(user_terms) || isSelfReferrer ) { return; } var hash window.location.hash; var isFromNewLogin hash #/fromNewLogin; if (!isFromNewLogin) { // Store deeplink in cookie var hashIndex window.location.href.indexOf(#); if (hashIndex ! -1) { var deeplink `${window.location.href.substring(hashIndex)}`; document.cookie deepLink + encodeURIComponent(deeplink) + ; path/; domain.eagleeyenetworks.com; max-age600; } // Prepare redirect URL var urlEnvironment environment ? environment + . : ; var urlSubdomain isLoginOrCluster ? webapp : subdomain + .webapp; var redirectUrl https:// + urlSubdomain + . + urlEnvironment + eagleeyenetworks.com/#/authorizeForClassic; window.location.replace(redirectUrl); return; } // Restore deeplink from cookie var cookieMatch document.cookie.match(/(?:^|;\s*)deepLink(^;*)/); var savedDeeplink cookieMatch ? decodeURIComponent(cookieMatch1) : null; if (savedDeeplink) { window.history.replaceState({}, , window.location.origin + window.location.pathname + savedDeeplink); document.cookie deepLink; path/; domain.eagleeyenetworks.com; max-age0; } })(); var isStillFromNewLogin window.location.hash #/fromNewLogin; if (isStillFromNewLogin) { window.history.replaceState({}, , window.location.origin + window.location.pathname + #/); } /script> title>/title> meta http-equivX-UA-Compatible contentchrome1> meta charsetUTF-8 /> meta nameviewport contentwidthdevice-width, initial-scale1.0 /> meta nameapple-itunes-app content /> meta namegoogle-play-app content /> link relshortcut icon idfavicon-link href> link relstylesheet hrefcss/bootstrap.min_1582427b.css /> link relstylesheet hrefcss/bootstrap-responsive.min_02ca8cb3.css /> link relstylesheet hrefcss/bootstrap-formhelpers_4f4c6a6d.css /> link relstylesheet href_css/vendor/bootstrap-datepicker_c00195ac.css /> link relstylesheet href_css/vendor/bootstrap-timepicker_d4643724.css /> link relstylesheet hrefcss/font-awesome.min_ea8d6bd5.css /> link relstylesheet href_css/vendor/jquery-ui_3718f004.css /> link relstylesheet href_css/bootstrap-modal_8d63668e.css /> link relstylesheet href_css/vendor/imgareaselect/imgareaselect-default_95f9edf6.css /> link relstylesheet href_css/vendor/jquery.tagsinput_e4e15402.css /> link relstylesheet href_css/vendor/jQRangeSlider/classic-min_80bae634.css /> link relstylesheet href_css/vendor/jquery.fixedheadertable_5c7d4657.css /> link relstylesheet href_css/vendor/jquery.timepicker_78142e36.css /> link relstylesheet href_css/vendor/chosen/chosen.min_d7ca5ca9.css /> link relstylesheet hrefcss/eagle.base_28a2f6e7.css /> link relstylesheet hrefcss/eagle.custom_1ca80e2e.css /> link relstylesheet href_css/layout_style_096b515f.css /> link relstylesheet href_css/style_e4498782.css /> link relstylesheet href_css/fa_icons_33da5a81.css /> link relstylesheet href_css/fonts_763d6b56.css> link relstylesheet hrefcss/build/een_style_9444739d.css> link relstylesheet hrefstatic/notification/notifications.css typetext/css /> link relstylesheet idoverride-css-link href> link relstylesheet hrefnode_modules/smart-app-banner/dist/smart-app-banner.css typetext/css mediascreen /> link relstylesheet hrefnode_modules/fastselect/dist/fastselect.css typetext/css /> style> #preloader { position: fixed; left: 0; right: 0; top: 0; bottom: 0; z-index: 999999; background: url(../_images/spinning.gif) no-repeat center; background-size: 45px; } /style> /head> body> div classcontainer site-container site-wrapper styledisplay: none> div idsidebar> h1 idsite-name classlogo>a idwrapper-small-logo href# title>/a>/h1> div idsuperTagsFilter>/div> menu iddashboard-tools classsidebar> ul> li>a href#>i classicon icon-dashboard active>/i> span classtranslator-preload>Dashboard/span>/a> /li> li>a href#>i classicon icon-th-large>/i> span classtranslator-preload>Layouts/span>/a> /li> li>a href#>i classicon icon-facetime-video>/i> span classtranslator-preload>Cameras/span>/a> /li> /ul> /menu> /div> div classcontainer-fluid site-content idmain-content> header iddashboard-info classrow> div classpull-left btn-group layout-menu ideen-layout-actions> a classdropdown-toggle btn btn-info pull-left data-toggledropdown idlayout-manager-name> span classicon-caret-down>/span> /a> ul classdropdown-menu rolemenu aria-labelledbydLabel> li>a href# classlayout_new>New Layout/a> /li> li>a href# classlayout_edit>Edit/a> /li> li>a href# classlayout_add idshine>Add Cameras/a> /li> li>a href# classlayout_settings>Settings/a> /li> li>a href# classlayout_delete>Delete/a> /li> !--utils.t(Cameras On)--> li>a href# classlayout_all_on>Cameras On/a> /li> !--utils.t(Cameras Off)--> li>a href# classlayout_all_off>Cameras Off/a> /li> li classdropdown-submenu> a tabindex-1 href# classlayout_smart_options>Smart Layouts/a> ul classdropdown-menu layout_smart_options_dropdown> !-- li>--> !-- label classsmart_layouts_options_item_label>--> !-- input--> !-- classsmart_layouts_options_item--> !-- data-event-typeall--> !-- typecheckbox>--> !-- All--> !-- /label>--> !-- /li>--> li> label classsmart_layouts_options_item_label> input classsmart_layouts_options_item data-event-typemotion typecheckbox>Motion/label> /li> li> label classsmart_layouts_options_item_label> input classsmart_layouts_options_item data-event-typeperson typecheckbox>Person/label> /li> li> label classsmart_layouts_options_item_label> input classsmart_layouts_options_item data-event-typevehicle typecheckbox>Vehicle/label> /li> /ul> /li> /ul> /div> div classpull-left btn-group idCameraMap__map_actions> a classdropdown-toggle btn btn-info pull-left data-toggledropdown>span classtranslator-preload>Map/span> span classicon-caret-down>/span> /a> ul classdropdown-menu rolemenu aria-labelledbydLabel> li>a href# idCameraMap__map_edit>span classtranslator-preload>Edit/span>/a> /li> /ul> /div> div classrightbuttons pull-left> div idnew-interface-wrapper classpull-left hidden> button classnew-interface-btn idbtn__open-new-interface>i classicon-new-webapp>/i>span>Switch to Enhanced Interface/span> /button> /div> div idresponder-wrapper> img classhidden idactive-responder-img src_images/first_responder.png> p idresponder-tooltip classtooltip-text>Activated Responder Share/p> /div> nav idheader-navigation-btns classbtn-toolbar dark> div classbtn-group> a href# classbtn dropdown-toggle data-toggledropdown idusername_display>i classicon-user>/i> div styledisplay: inline;>/div> div styledisplay:inline; classicon-caret-down>/div>/a> ul classdropdown-menu pull-right rolemenu> li>a href# iduserSettings>My Profile/a> /li> li>a href# idaccountSettings>Account Settings/a> /li> li styledisplay:none>a href# idaccountPlugins>Plugin Settings/a> /li> !--li>a href# idappSearch>Search/a>/li>--> li classhide>a href# idbusinessPortal>Business Portal/a> /li> li>a styledisplay:none; href# idgoToRecordingPage>Go To Recording Page/a> /li> li>a href# idactivateResponderCams>Activate Responder Share/a> /li> li styledisplay:none>a href# idswitchToMaster>Back to Reseller Account/a> /li> li classedition-info--holder hidden> a> Edition span idedition-info--span classbadge badge-secondary>-/span> /a> /li> li>a href#/logout idlogout>Log Out/a> /li> /ul> /div> div classbtn-group idnotifications> a classbtn dropdown-toggle disabled data-toggledropdown>i classicon-flag>/i>span classnotification-count>0/span>/a> ul classdropdown-menu pull-right> li classnotification-template>a href#>img src/>span classnotification-title>Camera/span>span classnotification-time>2m/span>span classnotification-description>span>Motion/span>/span>i classicon-circle green notification-icon>/i>span classnotification-more>/span>/a> /li> /ul> /div> div classbtn idtimeclock>/div> div classbtn ideen-fullscreen> i classicon-resize-full>/i> /div> !-- div classbtn ideen-fullscreen-exit classicon-resize-small>/div> --> /nav> /div> /header> section classcontent primary-content> div idglobal-message>/div> div idcontent>/div> /section> /div> div idfooter> div classfooter_logo_small> dl classdl-horizontal idlogin_support styledisplay:none> dt>Support:/dt> dd>/dd> /dl> div idcopyright classcopyright-mention>Copyright © div idcopy_year>2015/div>, div idcopy_brand>/div>. br/>All rights reserved./div> /div> /div> div idinactive_session_modal styledisplay:none; position: absolute; z-index: 9999; left: 45%; top: 25%; width: 280px; height: 119px; background-color: whitesmoke;border: 1px darkgray solid;border-radius: 6px; padding: 15px;> p idinactive_session_modal__count>Your session will expire in 30 seconds.../p> button classbtn btn-success styleposition:absolute; left: 150px; top: 100px; idinactive_session_modal__close>Continue Session/button> /div> /div> !-- div iderrorNotification-component>/div>--> div idpreloader>/div> !-- end of base.html --> script src/_js/dictionaries_492c72a6.js>/script> !-- MODAL BEGIN :: Ractive Modal --> div classmodal hide fade data-backdropstatic keyboardfalse idractive-modal>/div> !-- MODAL END :: Ractive Modal --> div classmodal hide fade data-backdropstatic keyboardfalse idractive-location-modal>/div> !-- MODAL BEGIN :: accountSettings --> div idaccountSettingsModal classmodal hide fade> div classmodal-header> button typebutton classclose data-dismissmodal aria-hiddentrue>×/button> h3>Account Settings/h3> /div> div classmodal-body> ul classnav nav-tabs accountSettingsTab> li idacMainLabel classac_advanced ac_on_off> a href#acMain data-toggletab data-testidmodal-account-tab-label-control>Control/a> /li> li idacDaysLabel classac_advanced> a href#acDays data-toggletab data-testidmodal-account-tab-label-days>Days/a> /li> !--li>a href#acBilling data-toggletab>Billing/a>/li>--> li classac_advanced> a href#acClients data-toggletab data-testidmodal-account-tab-label-security>Security/a> /li> li idacCamerasLabel classac_advanced> a href#acCamera data-toggletab data-testidmodal-account-tab-label-camera>Camera/a> /li> li classac_advanced> a href#acAlerts data-toggletab data-testidmodal-account-tab-label-alerts>Alerts/a> /li> li classac_advanced> a href#acNotifications data-toggletab data-testidmodal-account-tab-label-notifications>Notifications/a> /li> li classac_advanced ac_master_video> a href#acMasterVideo data-toggletab data-testidmodal-account-tab-label-privacy>Privacy/a> /li> li idacSharingLabel classac_sharing> a href#acSharing data-toggletab data-testidmodal-account-tab-label-sharing>Sharing/a> /li> li> a href#acResponders classac_sharing data-toggletab data-testidmodal-account-tab-label-responders>Responders/a> /li> li> a href#acDefaults classac_advanced data-toggletab data-testidmodal-account-tab-label-defaults>Defaults/a> /li> li> a href#acEdition classac_edition data-toggletab data-testidmodal-account-tab-label-edition>Edition/a> /li> /ul> div classtab-content idaccountSettingsTabContent>/div> /div> div classmodal-footer> p classred idaccountSettings_msg>/p> button classbtn btn-warning data-dismissmodal data-testidmodal-account-button-cancel>Cancel/button> button classbtn btn-success idaccountSettings__save data-testidmodal-account-button-save>Save changes/button> /div> /div> !-- MODAL END :: accountSettings --> !-- MODAL BEGIN :: addAPIKey --> div idaddAPIKeyModal classmodal hide fade> div classmodal-header> button classclose data-dismissmodal>×/button> h3>Add Application/h3> /div> div classmodal-body> div classrow-fluid> div classspan12> div classspan11 offset1> form classform-horizontal> div classrow> p classhelp-block>Application Name/p> input classspan12 typetext maxlength60 idaddAppName placeholderName> /div> /form> /div> /div> /div> /div> div classmodal-footer> p idaddAPIKeyResponse classred>/p> button classbtn btn-warning data-dismissmodal>Cancel/button> button classbtn btn-success idconfirmAddAPIKeyButton>Get New API Key/button> /div> /div> !-- MODAL END :: addAPIKey --> !-- MODAL BEGIN :: addRecipient --> script typetext/ractive idaddLPRRecipientModal-template> div classmodal-body> form classform-horizontal> div classcontrol-group> div classrow-fluid> div classspan5>Available/div> div classspan5 offset1>Applied/div> /div> div classrow-fluid idlprRule__recipient_menu> /div> /div> /form> /div> /script> !-- MODAL END :: addRecipient --> !-- BEGIN :: AddUser --> div classhide idaddUser>/div> !-- END :: AddUser --> !-- MODAL BEGIN :: cameraAnalytics --> div idcameraAnalyticsModal classmodal hide fade> div classmodal-header> button typebutton classclose data-dismissmodal aria-hiddentrue>×/button> h3>Camera Analytics/h3> /div> div classmodal-body> ul classnav nav-tabs> li classactive>a href#cameraAnalyticsMotion data-toggletab>Activity/a> /li> li classanalyticsTab>a href#cameraAnalyticsCounting data-toggletab>Counting/a> /li> li classanalyticsTab>a href#cameraAnalyticsCrossing data-toggletab>Crossing/a> /li> li classanalyticsTab>a href#cameraAnalyticsIntrusion data-toggletab>Intrusion/a> /li> li classanalyticsTab>a href#cameraAnalyticsLoitering data-toggletab>Loitering/a> /li> li classanalyticsTab>a href#cameraAnalyticsTampering data-toggletab>Tampering/a> /li> /ul> div classtab-content idcameraAnalyticsModal__body>/div> /div> div classmodal-footer> p classred idcameraAnalyticsModal__msg>/p> button classbtn btn-success data-dismissmodal>OK/button> /div> /div> !-- MODAL END :: cameraAnalytics --> !-- MODAL BEGIN :: CameraVPN --> div idCameraVPNModal classmodal hide fade> div classmodal-header> button classclose data-dismissmodal>×/button> h3>Add Camera/h3> /div> div classmodal-body> div classrow-fluid> div classspan12> div classspan8 offset2> form classform-horizontal> p classhelp-block>Please wait while we establish a connection with this camera/p> /form> /div> /div> /div> /div> div classmodal-footer> p idcameraVPNResponse classred>/p> button classbtn btn-warning data-dismissmodal>Cancel/button> button classbtn btn-success data-dismissmodal>Close Modal/button> /div> /div> !-- MODAL END :: cameraVPN --> !-- MODAL BEGIN :: chooseCamerasForLayout --> div idchooseCamerasForLayoutModal classmodal hide fade> div classmodal-header> button classclose data-dismissmodal>×/button> h3>Add Cameras/h3> /div> div classmodal-body> form classform-horizontal> div classcontrol-group> label classcontrol-label translate-label forchooseCamerasForLayoutModal__filter>Filter:/label> div classcontrols> input typetext idchooseCamerasForLayoutModal__filter autocompleteoff maxlength100> /div> /div> div classcontrol-group> div classcontrols> label classcheckbox> input typecheckbox idchooseCamerasForLayoutModal__show_all_cameras value1>span classtranslate-label>Hide cameras already in layout/span> /label> /div> /div> /form> div idchooseCamerasForLayoutModal__body>/div> /div> div classmodal-footer> button typebutton classbtn btn-warning id data-dismissmodal>Cancel/button> button typebutton classbtn btn-success idchooseCamerasForLayoutModal__save data-dismissmodal>Add Cameras/button> /div> /div> !-- MODAL END :: chooseCamerasForLayout --> !-- MODAL BEGIN :: clearAlert --> script typetext/ractive idclearLPRAlertModal-template> div classmodal-body> form classform-horizontal> div classcontrol-group> label classcontrol-label for>Clear reason:/label> div classcontrols> select idclear_reason classform-control value{{ alertModel.clear_reason }}> {{#each reason_list: idx}} option value{{ . }}>{{ . }}/option> {{/each}} /select> /div> /div> /form> /div> /script> !-- MODAL END :: clearAlert --> !-- MODAL BEGIN :: deleteAPIKey --> div iddeleteAPIKeyModal classmodal hide fade> div classmodal-header> button classclose data-dismissmodal>×/button> h3>Delete Confirmation/h3> /div> div classmodal-body> div classrow-fluid> div classspan12> div classspan10 offset1 iddeleteAPIKeymsg>/div> /div> /div> /div> div classmodal-footer> p iddeleteAPIKeyModal_msg classred>/p> button classbtn btn-warning id data-dismissmodal>Cancel/button> button classbtn btn-danger idconfirmedDeleteAPIKeyButton>Delete/button> /div> /div> !-- MODAL END :: deleteAPIKey --> !-- MODAL BEGIN :: DeleteCameraComposite --> div iddeleteCameraCompositeModal classmodal hide fade small-modal>/div> !-- MODAL END :: DeleteCameraComposite --> !-- MODAL BEGIN :: DeleteCamera --> div iddeleteCameraModal classmodal hide fade small-modal>/div> !-- MODAL END :: DeleteCamera --> !-- MODAL BEGIN :: DeleteCameraShare --> div iddeleteCameraShareModal classmodal hide fade>/div> !-- MODAL END :: DeleteCameraShare --> !-- MODAL BEGIN :: deleteConfirmation --> div iddeleteConfirmationModal classmodal hide fade> div classmodal-header> button classclose data-dismissmodal>×/button> h3>Delete Confirmation/h3> /div> div classmodal-body> div classrow-fluid> div classspan12> div classspan8 offset2>Are you sure you want to delete this layout? It will be removed for yourself and everyone it is shared with./div> /div> /div> /div> div classmodal-footer> p classred idlayout-delete-confirm-error_message>/p> button classbtn btn-warning id data-dismissmodal>Cancel/button> button classbtn btn-danger idconfirmedDeleteLayoutButton data-dismissmodal>Delete/button> /div> /div> !-- MODAL END :: deleteConfirmation --> !-- MODAL BEGIN :: deleteLPRRule --> script typetext/ractive iddeleteLPRRuleModal-template> div classmodal-body> div classrow-fluid> div classspan12> div classspan10 offset1 iddeleteLPRRulemsg>Are you sure you want to delete this rule? This will remove them completely. There is no recovery from this./div> /div> /div> /div> /script> !-- MODAL END :: deleteUser --> !-- MODAL BEGIN :: DeleteSpeaker --> div iddeleteSpeakerModal classmodal hide fade small-modal>/div> !-- MODAL END :: DeleteSpeaker --> !-- MODAL BEGIN :: deleteUser --> div iddeleteUserModal classmodal hide fade> div classmodal-header> button classclose data-dismissmodal>×/button> h3>Delete Confirmation/h3> /div> div classmodal-body> div classrow-fluid> div classspan12> div classspan10 offset1 iddeleteUsermsg>/div> /div> /div> /div> div classmodal-footer> p iddeleteUserModal_msg classred>/p> button classbtn btn-warning id data-dismissmodal>Cancel/button> button classbtn btn-danger idconfirmedDeleteUserButton>Delete/button> /div> /div> !-- MODAL END :: deleteUser --> !-- MODAL BEGIN :: demoDisclaimer --> div iddemoDisclaimerModal classmodal hide fade tabindex-1 roledialog aria-labelledbymyModalLabel aria-hiddentrue> div classmodal-header> button typebutton classclose data-dismissmodal aria-hiddentrue>×/button> h3>Demo Information/h3> /div> div classmodal-body> p>You have logged into a Demo Account. This Demo Account will show you all the features and settings that a full Administrator would have on the Security Camera VMS. Any changes you attempt to make, however, will be quietly ignored so that the demo account does not get modified. Thank you./p> /div> div classmodal-footer> button classbtn btn-warning data-dismissmodal>OK/button> /div> /div> !-- MODAL END :: demoDisclaimer --> !-- MODAL BEGIN :: editBridge --> div ideditBridgeModal classmodal hide fade> div classmodal-header> button typebutton classclose modal-close data-dismissmodal aria-hiddentrue>×/button> h3>Bridge Settings/h3> /div> div classmodal-body> ul classnav nav-tabs> li classactive>a href#editBridge__bridge data-toggletab>Bridge/a> /li> li ideditBridge__locationTabLabel>a href#editBridge__location data-toggletab>Location/a> /li> li idmetrics_tab>a href#editBridge__metrics data-toggletab>Metrics/a> /li> li idlocal_disp_tab>a href#editBridge__local data-toggletab>Local Display/a> /li> li idanalog_ignored_tab>a href#editBridge__analog data-toggletab>Analog/a> /li> li styledisplay:none; idinterface_info>a href#editBridge__interfaces data-toggletab>Cam WiFi/a> /li> li idnotes_tab>a href#editBridge__notes data-toggletab>Notes/a> /li> /ul> div ideditBridge__communication-error classhide> span classred>We are currently unable to communicate with this bridge. Please try again later, or contact customer support./span> /div> div classtab-content ideditBridgeModal-body>/div> /div> div classmodal-footer> p classred ideditBridgeModal_msg>/p> button classbtn btn-warning modal-close data-dismissmodal>Cancel/button> a href# classbtn btn-success ideditBridge__save>Save Changes/a> /div> /div> !-- MODAL END :: editBridge --> !-- MODAL BEGIN :: editCamera --> div ideditCameraModal classmodal hide fade> div classmodal-header> button typebutton classclose modal-close data-dismissmodal aria-hiddentrue>×/button> h3>Camera Settings/h3> /div> div classmodal-body> ul classnav nav-tabs> li idcsCameraTabLabel classactive cs_advanced> a href#csCamera data-toggletab data-testidmodal-camera-settings-tab-label-camera>Camera/a> /li> li classcs_advanced cs_account_advanced> a href#csRetention data-toggletab data-testidmodal-camera-settings-tab-label-retention>Retention/a> /li> li classcs_advanced cs_account_advanced> a href#csResolution data-toggletab data-testidmodal-camera-settings-tab-label-resolution>Resolution/a> /li> li styledisplay: none> a href#csDewarping data-toggletab data-testidmodal-camera-settings-tab-label-fisheye-dewarp>Fisheye Dewarp/a> /li> li idcsIOTabLabel classhidden> a href#csIO idioTab data-toggletab data-testidmodal-camera-settings-tab-label-io>IO/a> /li> li idcsMotionTabLabel class> a href#csMotion idmotionTab data-toggletab data-testidmodal-camera-settings-tab-label-motion>Motion/a> /li> li idcsAnalyticsTabLabel classcs_advanced styledisplay: none;> a href#csAnalytics data-toggletab data-testidmodal-camera-settings-tab-label-analytics>Analytics/a> /li> li idcsDeviceAnalyticsTabLabel styledisplay: none;> a href#csDeviceAnalytics data-toggletab data-testidmodal-camera-settings-tab-label-device-features>Device Analytics/a> /li> li idcsPTZTabLabel> a href#csptz idptzTab data-toggletab data-testidmodal-camera-settings-tab-label-ptz>PTZ/a> /li> li idcsThermalLabel class styledisplay: none;> a href#csThermal data-toggletab data-testidmodal-camera-settings-tab-label-thermal>Thermal/a> /li> li idcsMobotixMotionLabel classhidden> a href#csMobotixMotion data-toggletab data-testidmodal-camera-settings-tab-label-mobotix-motion>MOBOTIX Motion/a> /li> li idcsMobotixMotionMessageLabel classhidden> a href#csMobotixMotionMessage data-toggletab data-testidmodal-camera-settings-tab-label-mobotix-messaging>MOBOTIX Messaging/a> /li> li classcs_advanced_hidden styledisplay:none> a href#csPrivacy data-toggletab data-testidmodal-camera-settings-tab-label-privacy>Privacy/a> /li> li classcs_advanced_hidden styledisplay:none> a href#csAudio data-toggletab data-testidmodal-camera-settings-tab-label-audio>Audio/a> /li> li classcs_advanced_hidden styledisplay:none> a href#csImage data-toggletab data-testidmodal-camera-settings-tab-label-image>Image/a> /li> li idcsLocationTabLabel classcs_advanced> a href#csLocation data-toggletab data-testidmodal-camera-settings-tab-label-location>Location/a> /li> li idmetricsTabLabel class> a href#editCamera__metrics data-toggletab data-testidmodal-camera-settings-tab-label-metrics>Metrics/a> /li> li idcsMaintTabLabel classcs_advanced styledisplay:none;> a href#csMaintenance data-toggletab data-testidmodal-camera-settings-tab-label-maintenance>Maintenance/a> /li> li idcsAIFilteringLabel classhidden> a href#csAIFiltering data-toggletab data-testidmodal-camera-settings-tab-label-ai-filtering>AI Filtering/a> /li> /ul> div ideditCamera__communication-error classhide> div classrow-fluid> div classspan12 text-center > div classred error-message data-testidmodal-camera-settings-tab-warning-unable-to-communicate>We are currently unable to communicate with this camera. Please try again later, or contact customer support./div> /div> /div> /div> div classtab-content ideditCameraModal-body>/div> /div> div classmodal-footer> p classred ideditCameraModal_msg>/p> button classbtn btn-warning modal-close ideditCamera__cancel data-dismissmodal data-testidmodal-camera-settings-footer-button-cancel>Cancel/button> button classbtn btn-info ideditCamera__apply_motion_settings data-testidmodal-camera-settings-footer-button-apply>Apply/button> button classbtn btn-success ideditCamera__save data-testidmodal-camera-settings-footer-button-save>Save Changes/button> /div> /div> !-- MODAL END :: editCamera --> !-- MODAL BEGIN :: editCameraShare --> div ideditCameraShareModal classmodal hide fade> div classmodal-header> button typebutton classclose data-dismissmodal aria-hiddentrue>×/button> h3>Camera Settings/h3> /div> div classmodal-body> ul classnav nav-tabs> li classactive>a href#csCameraShare data-toggletab>Camera/a> /li> li>a href#csCameraShareLocation data-toggletab>Location/a> /li> /ul> div ideditCameraShare__communication-error classhide> span classred>We are currently unable to communicate with this camera. Please try again later, or contact customer support./span> /div> div classtab-content ideditCameraShareModal-body>/div> /div> div classmodal-footer> p classred ideditCameraShareModal_msg>/p> button classbtn btn-warning data-dismissmodal>Cancel/button> a href# classbtn btn-success ideditCameraShareModal__save>Save Changes/a> /div> /div> !-- MODAL END :: editCameraShare --> !-- TEMPLATE BEGIN :: EditionUpgradeForm --> script typetext/ractive idEditionUpgradeForm-template> form classrow-horizontal> div classcontrol-group> label classcontrol-label data-testidmodal-account-tab-editions-label-current-edition > {{translateText(Current Edition:)}} /label> div classcontrol-text controls current-edition-holder>{{initial_edition_name}}/div> /div> {{#if editions.length ! 1}} div classcontrol-group> label classcontrol-label data-testidmodal-account-tab-editions-input-label-edition-to-upgrade > {{translateText(Edition To Upgrade)}} /label> div classcontrols> div classrow-fluid> select value{{selected_edition}}> {{#each editions}} option value{{.id}}>{{.name}}/option> {{/each}} /select> /div> /div> /div> {{/if}} {{#if initial_edition_id ! selected_edition}} p ideditionWarning classred new-line data-testidmodal-account-tab-editions-warning-upgrade-editions > {{translateText(WARNING: Changing the Edition will incur additional charges.Do you want to continue?)}} /p> {{/if}} {{#if is_reject true}} p classred new-line ideditionErrorWarning data-testidmodal-account-tab-editions-warning-error-during-fetching > {{translateText(An error occurred while fetching available Editions. Please try again or contact support.)}} /p> {{/if}} /form> /script> !-- TEMPLATE END :: EditionUpgradeForm --> !-- MODAL BEGIN :: editUser --> script typetext/ractive ideditLPRRuleModal-template> div classmodal-body> form classform-horizontal> div classcontrol-group {{#if ruleModel.plate }} error {{/if}}> label classcontrol-label for>License Plate:/label> div classcontrols> input typetext maxlength60 idlicense_plate classsettings span4 value{{ ruleModel.plate }}> {{#if ruleModel.plate }}div classhelp-block lpr-rule-help-text >License plate can not be empty./div>{{/if}} /div> /div> div classcontrol-group> label classcontrol-label for>Location:/label> div classcontrols> div classrow-fluid> div classspan12> select classspan6 idlocation value{{ location_index }}> {{#each locationList:index }} option value{{ index }} {{#if ruleModel.location_name name }} selected {{/if}} >{{ name }}/option> {{/each}} /select> /div> /div> /div> /div> div classcontrol-group> label classcontrol-label for>Type:/label> div classcontrols> div classrow-fluid> div classspan12> select classspan6 idtype value{{ ruleModel.event }}> option valuewhitelist>Allow/option> option valueblacklist>Deny/option> option valuewatchlist>Watch/option> /select> /div> /div> /div> /div> {{#if ruleModel.event watchlist }} div classcontrol-group idduration-row> label classcontrol-label for>Duration:/label> div classcontrols> div classrow-fluid> div classspan12> select classspan6 idtype value{{ ruleModel.duration }}> option value15>15 Minutes/option> option value30>30 Minutes/option> option value45>45 Minutes/option> option value60>60 Minutes/option> option value75>75 Minutes/option> option value90>90 Minutes/option> option value105>105 Minutes/option> option value120>120 Minutes/option> /select> /div> /div> /div> /div> {{/if}} div classrow-fluid> div classspan5>Available recipients/div> div classspan5 offset1>Applied recipients/div> /div> div classrow-fluid idlprRule__recipient_menu> /div> /form> /div> /script> !-- MODAL END :: editUser --> !-- MODAL BEGIN :: editMasterAccountSettings --> div ideditMasterAccountSettingsModal classmodal hide fade> div classmodal-header> button typebutton classclose data-dismissmodal aria-hiddentrue>×/button> h3>Reseller Account Settings/h3> /div> div classmodal-body> ul classnav nav-tabs> li classactive>a href#masterAccountSettingsBranding data-toggletab>Branding/a> /li> li>a href#masterAccountDefaults data-toggletab>Defaults/a> /li> li>a href#masterAccountDays data-toggletab>Days/a> /li> li>a idmasterAccountSettingsTOS-tab href#masterAccountSettingsTOS data-toggletab>Terms of Service/a> /li> li ideditMasterAccountSettingsModal__SecurityTabOption>a href#masterAccountSecurity data-toggletab>Security/a> /li> /ul> div classtab-content ideditMasterAccountSettingsModal-body>/div> /div> div classmodal-footer> p classred ideditMasterAccountSettingsModal__msg>/p> button classbtn btn-warning data-dismissmodal ideditMasterAccountSettingsModal__cancel>Cancel/button> button classbtn btn-success ideditMasterAccountSettingsModal__save>Save changes/button> /div> /div> !-- MODAL END :: editMasterAccountSettings --> !-- MODAL BEGIN :: editParentCamera --> div ideditParentCameraModal classmodal hide fade> div classmodal-header> button typebutton classclose data-dismissmodal aria-hiddentrue>×/button> h3 ideditParentCamera_title>/h3> /div> div classmodal-body> ul classnav nav-tabs> li classactive>a ideditParentCamera_main_tab href#csParentCamera data-toggletab>Camera/a> /li> li classactive>a ideditParentCamera_views_tab href#csParentCameraViews data-toggletab>Views/a> /li> /ul> div ideditParentCamera__communication-error classhide> span classred>We are currently unable to communicate with this camera. Please try again later, or contact customer support./span> /div> div classtab-content ideditParentCameraModal-body>/div> /div> div classmodal-footer> p classred ideditParentCameraModal_msg>/p> p classred ideditParentCameraModal_msg2>/p> button typebutton classbtn btn-warning data-dismissmodal>Cancel/button> button typebutton classbtn btn-success ideditParentCameraModal__save>Save Changes/button> /div> /div> !-- MODAL END :: editParentCamera --> !-- MODAL BEGIN :: editSpeaker --> div ideditSpeakerModal classmodal hide fade> div classmodal-header> button typebutton classclose data-dismissmodal aria-hiddentrue>×/button> h3>Speaker Settings/h3> /div> div classmodal-body> ul classnav nav-tabs> li classactive>a href#editSpeaker__speaker data-toggletab>Device/a> /li> li ideditSpeaker__camerasTabLabel>a href#editSpeaker__cameras data-toggletab>Audio/a> /li> /ul> div ideditSpeaker__communication-error classhide> span classred>We are currently unable to communicate with this speaker. Please try again later, or contact customer support./span> /div> div classtab-content ideditSpeakerModal-body>/div> /div> div classmodal-footer> p classred ideditSpeakerModal_msg>/p> button classbtn btn-warning data-dismissmodal>Cancel/button> a href# classbtn btn-success ideditSpeaker__save>Save Changes/a> /div> /div> !-- MODAL END :: editSpeaker --> !-- MODAL BEGIN :: editSubAccountSettings --> div ideditSubAccountSettingsModal classmodal hide fade> div classmodal-header> button typebutton classclose data-dismissmodal aria-hiddentrue>×/button> h3>Account Settings/h3> /div> div classmodal-body> ul classnav nav-tabs> li classactive>a href#subAccountSettingsStatus data-toggletab>Status/a> /li> li>a href#subAccountSettingsContact data-toggletab>Contact/a> /li> li>a href#subAccountSettingsAdmin data-toggletab>Access/a> /li> /ul> div classtab-content ideditSubAccountSettingsModal-body>/div> /div> div classmodal-footer> p classred ideditSubAccountSettingsModal__msg>/p> button classbtn btn-warning data-dismissmodal>Cancel/button> button classbtn btn-success ideditSubAccountSettingsModal__save>Save changes/button> /div> /div> !-- MODAL END :: editSubAccountSettings --> !-- MODAL BEGIN :: editUser --> div ideditUserModal classmodal hide fade> div classmodal-header> button typebutton classclose data-dismissmodal aria-hiddentrue>×/button> h3>User Settings/h3> /div> div classmodal-body> ul classnav nav-tabs accountSettingsTab> li classactive ideditUserModal__permissions_tab> a href#editUserModal__tab_permissions data-toggletab>Permissions/a> /li> li>a href#editUserModal__tab_user_settings data-toggletab>Access/a> /li> li ideditUserModal__accounts_tab>a href#editUserModal__tab_accounts data-toggletab>Accounts/a> /li> li ideditUserModal__locations_tab>a href#editUserModal__tab_locations data-toggletab>Locations/a> /li> li ideditUserModal__cameras_tab>a href#editUserModal__tab_cameras data-toggletab>Cameras/a> /li> li ideditUserModal__layouts_tab>a href#editUserModal__tab_layouts data-toggletab>Layouts/a> /li> /ul> div classtab-content>/div> /div> div classmodal-footer> p ideditUserModal_msg classred>/p> button classbtn btn-warning data-dismissmodal>Cancel/button> button classbtn btn-success ideditUserModal__save>Save Changes/button> /div> /div> !-- MODAL END :: editUser --> !-- MODAL BEGIN :: errorNotification --> script typetext/ractive iderrorNotification-template> {{#if message ! null}} div classerror-message-body> div classerror-message-title-row> div classicon icon-remove-circle red> /div> div classtitle> {{ header }} /div> div classclose-icon talkdown-close-icon on-click@this.close()> /div> /div> div classerror-message-content> div classmessage>{{ message }}/div> /div> /div> {{/if}} /script> !-- MODAL END :: speakerNotification --> !-- MODAL BEGIN :: cameraSupport--> div idFeedbackModal classmodal hide fade data-descnone data-idnone> div classmodal-header> button typebutton classclose data-dismissmodal aria-hiddentrue>×/button> h3>/h3> /div> div classmodal-body> div idFeedbackModal-body>/div> /div> div classmodal-footer> p idsupportSubmitInvalid classred>/p> button classbtn btn-warning data-dismissmodal>Cancel/button> button classbtn btn-success idsubmitRequest>Submit/button> /div> /div> !-- MODAL END :: cameraSupport --> !-- MODAL BEGIN :: Warning Modals --> div classmodal hide fade data-backdropstatic keyboardfalse idwarningModal>/div> !-- MODAL END :: Warning Modals --> !-- MODAL BEGIN :: Generic Modals --> div classmodal hide fade data-backdropstatic keyboardfalse idgenericModal>/div> !-- MODAL END :: Generic Modals --> !-- MODAL BEGIN :: addCamera --> div idaddCameraModal classmodal hide fade>/div> !-- MODAL END :: addCamera --> !-- MODAL BEGIN :: addSpeaker --> div idaddSpeakerModal classmodal hide fade>/div> !-- MODAL END :: addSpeaker --> !-- MODAL BEGIN :: layoutSettings --> div idlayoutSettingsModal classmodal hide fade> div classmodal-header> button classclose data-dismissmodal>×/button> h3>Layout Settings/h3> /div> div classmodal-body> div classrow-fluid> div classrow idlayoutSettingsModalRow>/div> /div> /div> div classmodal-footer> p classred idlayout-settings-error_message>/p> button classbtn btn-warning id data-dismissmodal>Cancel/button> button classbtn btn-success idlayoutSettings_saveButton>Save Changes/button> /div> /div> !-- MODAL END :: layoutSettings --> !-- MODAL BEGIN :: managedSwitch --> div classmodal hide fade idmanagedSwitchModal>/div> !-- MODAL END :: managedSwitch --> !-- MODAL BEGIN :: removeBridge --> div idremoveBridgeModal classmodal hide fade tabindex-1 roledialog aria-labelledbymyModalLabel aria-hiddentrue> div classmodal-header> button typebutton classclose data-dismissmodal aria-hiddentrue>×/button> h3>Delete Bridge/h3> /div> div classmodal-body> p>You are about to delete the Bridge/CMVR {{bridgeName}} and all the data that it has. This will delete all cloud information, all video recordings, and all the cameras connected to this Bridge/CMVR. Are you REALLY sure you want to do this?/p> /div> div classmodal-footer> button classbtn btn-warning data-dismissmodal>Cancel/button> button classbtn btn-danger idremoveBridgeButton>Delete Bridge/button> /div> /div> !-- MODAL END :: removeBridge --> !-- MODAL BEGIN :: replaceBridge --> div idreplaceBridgeModal classmodal hide fade tabindex-1 roledialog aria-labelledbymyModalLabel aria-hiddentrue> div classmodal-header> button typebutton classclose data-dismissmodal aria-hiddentrue>×/button> h3>Replace Bridge/h3> /div> div classmodal-body idreplaceBridge__body>/div> div classmodal-footer> p idreplaceBridge__msg classred>/p> button classbtn btn-warning data-dismissmodal>Cancel/button> button classbtn btn-danger idreplaceBridge__replace>Replace/button> button classbtn btn-danger idreplaceBridge__confirm_replace>Confirm Replace/button> /div> /div> !-- MODAL END :: replaceBridge --> !-- MODAL BEGIN :: requestDownload --> div idrequestDownload classmodal hide fade> div classmodal-header> button classclose data-dismissmodal>×/button> h3>Re-request Download/h3> /div> div classmodal-body> div classrow-fluid> div classspan12> form classform-horizontal> div classcontrol-group> label classcontrol-label for>Description:/label> div classcontrols> div classrow-fluid> input typetext idrequestDownloadDescription>/input> /div> /div> /div> div classcontrol-group> label classcontrol-label for>Show Timestamp:/label> div classcontrols> div classrow-fluid> div classspan1> input typecheckbox idrequestDownloadTimestamp>/input> /div> div classspan6> select idrequestDownloadTimezone classspan10> option valueUS/Alaska>US/Alaska/option> option valueUS/Hawaii>US/Hawaii/option> option valueUS/Pacific>US/Pacific/option> option valueUS/Arizona>US/Arizona/option> option valueUS/Mountain>US/Mountain/option> option valueUS/Central>US/Central/option> option valueUS/Eastern>US/Eastern/option> option valueCanada/Atlantic>Canada/Atlantic/option> option valueMexico/General>Mexico/General/option> option valueAmerica/Bogota>America/Bogota/option> option valueAmerica/Argentina/Buenos_Aires>America/Buenos Aires/option> option valueAmerica/Monterrey>America/Monterrey/option> option valueUTC>UTC/option> option valueEurope/London>Europe/London/option> option valueEurope/Amsterdam>Europe/Amsterdam/option> option valueEurope/Paris>Europe/Paris/option> option valueEurope/Berlin>Europe/Berlin/option> option valueEurope/Kaliningrad>Europe/Kaliningrad/option> option valueEurope/Istanbul>Europe/Istanbul/option> option valueEurope/Moscow>Europe/Moscow/option> option valueAsia/Riyadh>Asia/Riyadh/option> option valueAsia/Baku>Asia/Baku/option> option valueAsia/Dubai>Asia/Dubai/option> option valueAsia/Qatar>Asia/Qatar/option> option valueAsia/Karachi>Asia/Karachi/option> option valueAsia/Calcutta>Asia/Calcutta/option> option valueAsia/Dhaka>Asia/Dhaka/option> option valueAsia/Bangkok>Asia/Bangkok/option> option valueAsia/Hong_Kong>Asia/Hong Kong/option> option valueAsia/Tel_Aviv>Asia/Tel Aviv/option> option valueAsia/Tokyo>Asia/Tokyo/option> option valueAsia/Magadan>Asia/Magadan/option> option valueAsia/Yangon>Asia/Yangon/option> option valueAustralia/Lord_Howe>Australia/Lord Howe/option> option valueAustralia/Perth>Australia/Perth/option> option valueAustralia/Sydney>Australia/Sydney/option> option valueAustralia/West>Australia/West/option> option valuePacific/Guam>Pacific/Guam/option> option valuePacific/Auckland>Pacific/Auckland/option> option valuePacific/Kwajalein>Pacific/Kwajalein/option> option valuePacific/Midway>Pacific/Midway/option> /select> /div> /div> /div> /div> div classcontrol-group styledisplay:none;> label classcontrol-label for>Show Watermark:/label> div classcontrols> div classrow-fluid> div classspan1> input typecheckbox idrequestDownloadWatermark>/input> /div> /div> /div> /div> div classcontrol-group> label classcontrol-label for>Notes:/label> div classcontrols> div classrow-fluid> textarea idrequestDownloadNotes>/textarea> /div> /div> /div> /form> /div> /div> /div> div classmodal-footer> p idrequestDownloadResponse classred>/p> button classbtn btn-warning data-dismissmodal>Cancel/button> button classbtn btn-success idsubmitDownloadReq>Submit/button> /div> /div> !-- MODAL END :: RequestDownload --> !-- MODAL BEGIN :: restartBridge --> div idrestartBridgeModal classmodal hide fade small-modal roledialog> div classmodal-header> button classclose data-dismissmodal>×/button> h3>Restart Bridge/h3> /div> div classmodal-body> div classrow-fluid> div classspan12> div classspan8 offset2>Are you sure you want to restart this bridge? Brief data loss could occur./div> /div> /div> /div> div classmodal-footer> button classbtn btn-warning id data-dismissmodal>Cancel/button> button classbtn btn-danger idconfirm_restart_bridge data-dismissmodal>Restart/button> /div> /div> !-- MODAL END :: restartBridge --> !-- MODAL BEGIN :: speakerNotification --> script typetext/ractive idspeakerNotification-template> {{#if status ! null}} div classspeaker-message-body> div classspeaker-message-title-row> {{#if status connecting }} div classicon talkdown-connecting-icon> /div> div classtitle> {{ translateText(Speaker is connecting...) }} /div> {{elseif status connected}} div classicon talkdown-connected-icon> /div> div classtitle> {{ translateText(Speaker connected) }} /div> {{elseif status disconnected}} div classicon talkdown-disconnected-icon> /div> div classtitle> {{ translateText(Speaker disconnected) }} /div> {{elseif status talkdowning}} div classicon talkdown-disconnected-icon> /div> div classtitle> {{ translateText(There is another speaker working) }} /div> {{elseif status closed}} div classicon talkdown-disconnected-icon> /div> div classtitle> {{ translateText(Speaker disconnected) }} /div> {{elseif status busy}} div classicon talkdown-busy-icon> /div> div classtitle> {{ translateText(Speaker is busy) }} /div> {{/if}} div classclose-icon talkdown-close-icon on-click@this.close()> /div> /div> div classspeaker-message-content> {{#if status connected }} div classmessage>{{ translateText(You can use the speaker) }}/div> {{elseif status disconnected}} div classmessage>{{ translateText(Check internet connection and try again) }}/div> {{elseif status busy}} div classmessage>{{ translateText(Check speaker settings and try again) }}/div> {{/if}} /div> /div> {{/if}} /script> !-- MODAL END :: speakerNotification --> !-- MODAL BEGIN :: superSearch --> div classmodal hide fade idsuperSearchModal>/div> !-- MODAL END :: superSearch --> !-- MODAL BEGIN :: TunnelModal --> div idtunnelModal classmodal hide fade>/div> !-- MODAL END :: TunnelModal--> !-- MODAL BEGIN :: twoFactor --> div classmodal hide fade idtwoFactorModal>/div> !-- MODAL END :: twoFactor --> !-- MODAL BEGIN :: userSettings --> div iduserSettingsModal classmodal hide fade> div classmodal-header> button typebutton classclose data-dismissmodal aria-hiddentrue>×/button> h3>My Profile/h3> /div> div classmodal-body> ul classnav nav-tabs accountSettingsTab> li classactive> a href#usLogin data-toggletab data-testidmodal-my-profile-tab-label-login>Login/a> /li> li iduserSettings__notifications_tab> a href#usAlerts data-toggletab data-testidmodal-my-profile-tab-label-notifications>Notifications/a> /li> li iduserSettings__time_tab> a href#usTime data-toggletab data-testidmodal-my-profile-tab-label-time>Time/a> /li> li iduserSettings__layouts_tab> a href#usLayouts data-toggletab data-testidmodal-my-profile-tab-label-layouts>Layouts/a> /li> li iduserSettings__previews_tab> a href#usPreviews data-toggletab data-testidmodal-my-profile-tab-label-previews>Previews/a> /li> li iduserSettings__devices_tab> a href#usDevices data-toggletab data-testidmodal-my-profile-tab-label-trusted-devices>Trusted Devices/a> /li> li iduserSettings__reports_tab> a href#usReports data-toggletab data-testidmodal-my-profile-tab-label-reports>Reports/a> /li> /ul> div classtab-content idusTabContent>/div> /div> div classmodal-footer> p classred iduserSettings_msg>/p> button classbtn btn-warning data-dismissmodal data-testidmodal-my-profile-button-cancel>Cancel/button> button classbtn btn-success iduserSettingsModal_save data-testidmodal-my-profile-button-save>Save changes/button> /div> /div> !-- MODAL END :: userSettings --> script typetext/ractive idEEN-Modals-CompositeNaming-template> form classform-horizontal autocompleteoff> div classcontrol-group> label classcontrol-label forname>{{translateText(Viewport Name)}}:/label> div classcontrols> input typetext idname placeholder{{translateText(View 1)}} value{{name}} {{#disabled}}disabled{{/}} /> p classtext-error {{^error}}hidden{{/}}> {{ error }} /p> /div> /div> {{> extra-form-elements}} /form> /script> !-- TEMPLATE BEGIN :: AccountListItemView --> script typetext/template idAccountListItemView-template> % var account this.model; var currentUser userList.getCurrentUser(); var connectivityIssueCount account.get(connectivity_issue_camera_count) || 0; var cameraOfflineCount account.get(camera_offline_count) || 0; var cameraOfflineText cameraOfflineCount 1 ? this.t(Camera Offline) : this.t(Cameras Offline); var connectivityIssueTest connectivityIssueCount 1 ? this.t(Camera having Connectivity Issues) : this.t(Cameras having Connectivity Issues); var cameraOfflineTooltip connectivityIssueCount > 0 ? cameraOfflineCount + + cameraOfflineText + ( + connectivityIssueCount + + connectivityIssueTest + ) : this.t(Cameras Offline); %> tr> td>i title%(account.get(is_active) ? this.t(Account Enabled) : (account.get(is_inactive) ? this.t(Account Login Disabled) : this.t(Account Disabled)))%> class%(account.get(is_active) ? icon-ok-circle green big-icon : (account.get(is_inactive) ? icon-ban-circle orange big-icon : icon-remove-circle red big-icon))%>>/i>/td> td>% this.getAccountName(account) %>/td> td> % if (account.get(is_delegated_account)) { %> span classpull-right label>%this.t(Delegated)%>/span> % } %> /td> % if (currentUser.checkEditionsIsEnabled()) { %> td>% this.getEditionName(account.get(extras).account_edition_id) %>/td> % } %> td styletext-align:center>span classgreen title%this.t(Bridges Online)%> stylepadding-left:3px;padding-right:3px;%(account.get(bridge_online_count)?:display:none)%>>% account.get(bridge_online_count) %>/span>span classred title% this.t(Bridges Offline) %> stylepadding-left:3px;padding-right:3px;%(account.get(bridge_offline_count)?:display:none)%>>% account.get(bridge_offline_count)%>/span>/td> td styletext-align:center>span classgreen title% this.t(Cameras Online) %> stylepadding-left:3px;padding-right:3px;%(account.get(camera_online_count)?:display:none)%>>% account.get(camera_online_count) %>/span>span classred title% cameraOfflineTooltip %> stylepadding-left:3px;padding-right:3px;%(account.get(camera_offline_count)?:display:none)%>>% account.get(camera_offline_count)%>/span>span classorange title%this.t(Cameras Off) %> style%(account.get(camera_off_count)?:display:none)%>>% account.get(camera_off_count) %>/span>/td> td styletext-align:center>%(account.get(average_retention_days) ? account.get(average_retention_days) : )%>/td> td styletext-align:center>% account.get(user_count)%>/td> td>% deviceList.getDisplayTime(account.get(last_login), false, true)%>/td> td> button typebutton classaccount-login data-id% account.get(id) %> title%this.t(login to end user account)%>>i classicon-eye-open>/i>/button> % if (currentUser.checkAccountUpdateByID(account.get(id)) && !account.get(is_delegated_account)) { %> button typebutton classaccount-edit data-id% account.get(id) %> title%this.t(change end user account settings)%>>i classicon-cog>/i>/button> % } %> %if(currentUser.checkAccountAddDelete()){%> button typebutton classaccount-delete data-id% account.get(id) %> title%this.t(remove end user account)%>>i classicon-trash>/i>/button> %}%> /td> /tr> /script> !-- TEMPLATE END :: AccountListItemView --> !-- TEMPLATE BEGIN :: AccountNotificationView --> script typetext/template idAccountNotificationView-template> % if (notifications.length > 0) {%> % _.each(notifications, function(item) { %> % var notification_time itemstarttime, notification_types itemjsonnotification_types.join(|), notification_recent_states (itemjsonrecent_states && itemjsonrecent_statesitemtarget_deviceid) || null, notification_raw_status (itemjsonraw_status && itemjsonraw_statusitemtarget_deviceid) || null, notification_purge_info (itemjsondevice_purge_info && itemjsondevice_purge_infoitemtarget_deviceid) || null, notification_target_deviceid item.target_deviceid, is_camera_notification (notification_raw_status ? notification_raw_status.type camera : false); var notification_status_name notification_raw_status && notification_raw_statusname ? notification_raw_statusname : ; if(notification_types.indexOf(alert_notification_)>0){ // dont show motion alerts for now return; notification_type motion; notification_icon notification-icon-motion; notification_description itemjsonraw_statusdevice_name + camera motion detected; if(itemjsonraw_status && itemjsonraw_statustrigger_name){ notification_description+ in region +itemjsonraw_statustrigger_name+; } } else if (!notification_status_name) { return; }else if(notification_types.indexOf(off_notification_)>0){ notification_type off; notification_icon icon-ban-circle orange; notification_description notification_status_name + turned off; }else if(notification_types.indexOf(offline_notification_)>0){ notification_type offline; notification_icon icon-remove-circle red; notification_description notification_status_name + went offline; // Make sure we show the time that reflects the total offline time (disable for now) /* if(notification_recent_states && (notification_recent_statesinternet+offline_notification_email || notification_recent_statesoffline_notification_email)){ if(notification_recent_statesoffline_notification_email){ notification_time notification_recent_statesoffline_notification_email; if(notification_recent_statesinternet+offline_notification_email && notification_recent_statesinternet+offline_notification_email > notification_time){ notification_time notification_recent_statesinternet+offline_notification_email } }else{ notification_time notification_recent_statesinternet+offline_notification_email; } }*/ }else if(notification_types.indexOf(online_notification_)>0){ notification_type online; notification_icon icon-ok-circle green; notification_description notification_status_name + came online; }else if(notification_types.indexOf(cloud+disconnected_notification_)>0){ notification_type internetoffline; notification_icon icon-exclamation-sign red; notification_description notification_status_name + internet offline; }else if(notification_types.indexOf(camera_purge_notification_)>0){ notification_type camerapurge; notification_icon icon-warning-sign red; notification_description notification_status_name + data purged; }else{ return; } notification_account itemaccount_name; %> % if (is_camera_notification) {%> tr classnotification-clickable-row data-target-deviceid% notification_target_deviceid %> data-toggletooltip title%utils.t(Open selected device in the customer account)%>> td> i classnotification-icon % notification_icon %>>/i> /td> td> %deviceList.getDisplayTime(notification_time, false, true)%> - %-notification_account%>br/>%-notification_description%> /td> /tr> %} else {%> tr> td> i classnotification-icon % notification_icon %>>/i> /td> td> %deviceList.getDisplayTime(notification_time, false, true)%> - %-notification_account%>br/>%-notification_description%> /td> /tr> %}%> % }); %> %} else {%> div classtext-center text-dimmed>%utils.t(No new notifications)%>/p> %}%> /script> !-- TEMPLATE END :: AccountNotificationView --> !-- TEMPLATE BEGIN :: AccountSummaryView --> script typetext/template idAccountSummaryView-template> div idmaster_account_summary classpull-left span6> div classrow> div classspan10 text-right title% this.t(Total number of accounts) %>>% this.t(Accounts) %>:/div>div classspan2>% account_active_count + account_inactive_count %>/div> /div> div classrow> div classspan10 text-right title%this.t(Total number of bridges)%>>% this.t(Total Bridges/CMVRs) %>:/div>div classspan2>% bridge_count %>/div> /div> div classrow> div classspan10 text-right title%this.t(Online bridges with no cameras)%>>% this.t(Bridges/CMVRs Online without Cameras) %>:/div>div classspan2>% bridge_inactive_count %>/div> /div> div classrow> div classspan10 text-right title% this.t(Total number of cameras (does not include Available Cameras)) %>>% this.t(Total Cameras) %>:/div>div classspan2>% camera_active_count %>/div> /div> div classrow> div classspan10 text-right title% this.t(Cameras available to be added) %>>% this.t(Available Cameras) %>:/div>div classspan2>% camera_available_count > 0 ? this.t(Yes) : this.t(No) %>/div> /div> /div> div idmaster_bridge_summary classpull-left span3>/div> div idmaster_camera_summary classpull-left span3>/div> /script> !-- TEMPLATE END :: AccountSummaryView --> !-- TEMPLATE BEGIN :: AccountView --> script typetext/template idAccountView-template> % var currentUser userList.getCurrentUser(); %> header classwidget-title>i classicon-sitemap>/i> span>% this.t(Accounts) %>/span> (span idaccount-list-active>/span> % this.t(Active) %>, span idaccount-list-total>/span> % this.t(Total) %>) %if(currentUser.checkAccountAddDelete()){%> i idlaunchAddAccountModalSmall title% this.t(Add Account) %> classadd-icon icon-plus-sign pull-right launchAddAccountModal>/i> %}%> /header> div classwidget-content clearfix idaccount-list> table classtable table-striped> thead> tr> th idaccount-table-status stylecursor:pointer;width:7%>% this.t(Status) %>/th> th idaccount-table-name stylecursor:pointer;width:20%>% this.t(Account Name) %>/th> th>/th> % if (currentUser.checkEditionsIsEnabled()) { %> th idaccount-table-edition stylewidth:10%>% this.t(Edition) %>/th> % } %> th idaccount-table-bridges styletext-align:center;width:10%>% this.t(Bridges/CMVRs) %>/th> th idaccount-table-cameras stylecursor:pointer;text-align:center;width:10%>% this.t(Cameras) %>/th> th idaccount-table-retention styletext-align:center;width:8%>% this.t(Avg. Retention) %>/th> th idaccount-table-users styletext-align:center;width:8%>% this.t(Users) %>/th> th idaccount-table-login stylewidth:17%>% this.t(Last Login) %>/th> th stylewidth:20%>% this.t(Actions) %>/th> /tr> /thead> tbody idaccount-list-rows> /tbody> /table> /div> footer idaccounts-footer classwidget-title> div classpull-right> div idreseller-list--page-size classpull-left page-size> label forreseller-list--page-size-select classpage-size-select--label>% this.t(Page size)%>:/label> select idreseller-list--page-size-select classpage-size-select > option>10/option> option>25/option> option>50/option> option>100/option> option>250/option> option>500/option> /select> /div> %if(currentUser.checkAccountAddDelete()){%> button typebutton idlaunchAddAccountModal href# classbtn btn-success pull-right launchAddAccountModal>i classicon-plus-sign>/i> % this.t(Add Account) %>/button> %}%> /div> span idfooter-span>/span> /footer> /script> !-- TEMPLATE END :: AccountView --> !-- TEMPLATE BEGIN :: AddAccount --> script typetext/ractive idAddAccount-template> div classmodal-header> button classclose data-dismissmodal>×/button> h3>{{translateText(Add Account)}}/h3> /div> div classmodal-body add-new-account> form classform-horizontal> div classcontrol-group> label classcontrol-label for>{{translateText(Account Name)}}:/label> div classcontrols> div classcontrol-group> input typetext value{{account.name}} maxlength60 autocompleteoff placeholder{{translateText(Account Name)}}* required> /div> /div> /div> div classcontrol-group> label classcontrol-label for>{{translateText(Customer ID)}}:/label> div classcontrols> div classcontrol-group> input typetext placeholder{{translateText(Customer ID)}} maxlength100 value{{account.customer_id}}> /div> /div> /div> div classcontrol-group> label classcontrol-label for>{{translateText(Email)}} ({{translateText(optional)}}):/label> div classcontrols> div classrow-fluid> div classspan7> input classspan12 typeemail maxlength60 value{{account.contact_email}} placeholder{{translateText(Email)}} required> /div> div classspan2> label classadmin-label>{{translateText(Admin)}}/label> /div> div classspan1> input typecheckbox checked{{account.is_initial_user_admin}}> /div> /div> /div> /div> {{#if is_enabled_edition && is_edition_upgrade_enabled}} div classcontrol-group> label classcontrol-label for>{{translateText(Edition)}}:/label> div classcontrols> div classrow-fluid> div classspan7> select classspan12 typetext value{{account.edition_id}} required > {{#each available_editions}} option value{{.id}}>{{.name}}/option> {{/each}} /select> /div> /div> /div> /div> {{/if}} {{#if available_editions0.id ! account.edition_id}} p ideditionWarning class red new-line>{{translateText(WARNING: Changing the Edition will incur additional charges.Do you want to continue?)}}/p> {{/if}} {{#if is_reject}} p classred new-line ideditionErrorWarning> {{translateText(An error occurred while fetching available Editions. Please try again or contact support.)}} /p> {{/if}} {{! this section must be hidden with css or bootstrap form helpers wont init }} div classcontrol-group {{#unless ui.valid_email}}hidden{{/unless}}> label classcontrol-label for>{{translateText(User)}}:/label> div classcontrols> div classrow-fluid control-group> div classspan12> div classspan6> input typetext classspan12 maxlength60 value{{account.contact_first_name}} placeholder{{translateText(First Name)}}* required> /div> div classspan6> input typetext classspan12 maxlength60 value{{account.contact_last_name}} placeholder{{translateText(Last Name)}}* required> /div> /div> /div> div classrow-fluid control-group> div classspan12> input typetext classspan12 maxlength60 value{{ui.address1}} placeholder{{translateText(Address)}} 1> /div> /div> div classrow-fluid control-group> div classspan12> input typetext classspan12 maxlength60 value{{ui.address2}} placeholder{{translateText(Address)}} 2> /div> /div> div classrow-fluid control-group> div classspan12> div classspan6> input typetext classspan12 maxlength60 value{{account.contact_city}} placeholder{{translateText(City)}}> /div> div classspan6> div classspan12 bfh-selectbox bfh-states data-countryadd-account-country> input typehidden value idadd-account-state-value> a classbfh-selectbox-toggle span12 rolebutton data-togglebfh-selectbox href#> span classbfh-selectbox-option input-medium>/span> b classcaret>/b> /a> div classbfh-selectbox-options> div rolelistbox> ul roleoption> /ul> /div> /div> /div> /div> /div> /div> div classrow-fluid control-group> div classspan12> div classspan6> input typetext classspan12 value{{account.contact_postal_code}} maxlength60 placeholder{{translateText(ZIP / Postal Code)}}> /div> div classspan6> div idadd-account-country classspan12 bfh-selectbox bfh-countries data-countryUS> input typehidden value idadd-account-country-value> a classspan12 bfh-selectbox-toggle rolebutton data-togglebfh-selectbox href#> span classbfh-selectbox-option input-medium data-optionUS>/span> b classcaret>/b> /a> div classbfh-selectbox-options> div rolelistbox> ul roleoption> /ul> /div> /div> /div> /div> /div> /div> /div> /div> hr> h5>{{translateText(Camera Defaults)}}/h5> div classmodal-form-centered> DefaultCloudPreviewOnly user_value{{account.default_preview_only_cloud_retention}}>/DefaultCloudPreviewOnly> DefaultCloudRetention user_value{{account.default_camera_cloud_retention_days}} is_default_preview_only_cloud_retention{{account.default_preview_only_cloud_retention}} >/DefaultCloudRetention> DefaultMinLocalRetention user_value{{account.default_minimum_on_premise_retention_days}} max_value{{account.default_maximum_on_premise_retention_days}}>/DefaultMinLocalRetention> DefaultMaxLocalRetention user_value{{account.default_maximum_on_premise_retention_days }} min_value{{account.default_minimum_on_premise_retention_days}}>/DefaultMaxLocalRetention> DefaultPreviewResolution user_value{{account.default_camera_preview_resolution}}>/DefaultPreviewResolution> DefaultFullVideoResolution user_value{{account.default_camera_full_video_resolution}}>/DefaultFullVideoResolution> /div> /form> /div> div classmodal-footer> p classred>{{ui.error}}/p> button typebutton classbtn btn-warning data-dismissmodal>{{translateText(Cancel)}}/button> button typebutton classbtn btn-success on-click@this.save()>{{translateText(Add Account)}}/button> /div> /script> !-- TEMPLATE END :: AddAccount --> !-- TEMPLATE BEGIN :: AddBridge --> script typetext/ractive idAddBridgeComponent-template> div classmodal-content add-bridge-modal> div classrow-fluid> div classspan12> div classspan8 offset2> form classform-horizontal> div classcontrol-group> p classhelp-block>{{{translateText(Attach ID)}}}/p> input classspan10 value{{connect_id}} typetext maxlength60 idaddBridgeConnectID placeholder{{translateText(Attach ID)}} data-testidmodal-add-bridge-form-input-attach-id /> /div> div classcontrol-group> p classhelp-block>{{{translateText(Bridge Name)}}}/p> input classspan10 value{{bridge_name}} typetext maxlength60 idaddBridgeName placeholder{{translateText(Bridge Name)}} data-testidmodal-add-bridge-form-input-name /> /div> {{#if is_locations_feature_enabled && user.checkEditLocationGroup()}} div classlocation-section> p classhelp-block>{{{translateText(Location)}}}/p> div classflex-modal> div classspan10> LocationSelect onSelect{{onLocationSelect}} is_no_location_visibletrue should_select_default_locationtrue data_test_idmodal-add-bridge-form-select-location /> /div> div classlocation-add-button-center span2> LocationAddButton idbridgeAddButton beforeOpen{{hideBridgeModal}} onResult{{onAddNewLocation}}/> /div> /div> /div> {{/if}} /form> /div> /div> /div> /div> /script> !-- TEMPLATE END :: AddBridgeNew --> !-- TEMPLATE BEGIN :: AddCameraMessageView --> script typetext/template idAddCameraMessageView-template> header classwidget-title>i classicon-bullhorn>/i> span>% this.t(Add Cameras) %>/span>/header> div classwidget-content clearfix idAddCameraMessage> !-- no cameras attached and no cameras available --> div classrow-fluid> p>% this.t(No cameras detected by the Bridge.) %>/p> p>% this.t(Please connect your cameras to the CAMLAN port on the Bridge and make sure they have power.) %>/p> /div> div idquick-install-cameras-img classrow-fluid> /div> /div> /script> !-- TEMPLATE END :: AddCameraMessageView --> script typetext/template idAddCamerasWrapView-template> div classcontainer-fluid> article classrow-fluid> div idadd-view-recently-added>/div> div idavailable-cameras-component>/div> /article> /div> /script> !-- TEMPLATE BEGIN :: AddCameraViewComponent --> script typetext/ractive idAddCameraViewComponent-template> div classwidget> header classwidget-title> i classicon-facetime-video>/i> {{translateText(Available Devices)}} {{#if ui.show_toggle_upnp}} i classicon-plus-sign add-icon-gray pull-right {{#if ui.show_upnp}}icon-plus-sign {{else}} icon-minus-sign{{/if}} title{{translateText(Show/Hide UPNP devices)}} on-click@this.toggleUPNP() stylemargin-left:10px> /i> {{/if}} {{#if account.is_rtsp_cameras_enabled && user.checkAddDeleteDevices()}} i classicon-plus-sign add-icon pull-right orange on-click@this.addRtspCamera() title{{translateText(Add RTSP Camera by IP Address)}}>/i> {{/if}} {{#if search.enabled}} div classwidget-search pull-right no-pad> div classpull-left> input classpull-left value{{search.value}} maxlength100 placeholderSearch autocompleteoff typetext> /div> /div> {{/if}} {{#if pagination.enabled}} div classwidget-pagination pull-right> div classpull-right btn-group> button classbtn btn-info btn-mini on-click@this.paginationStart()> i class icon-step-backward>/i> /button> button classbtn btn-info btn-mini on-click@this.paginationPrevPage()> i class icon-chevron-left>/i> /button> button classbtn btn-info btn-mini on-click@this.paginationNextPage()> i class icon-chevron-right>/i> /button> button classbtn btn-info btn-mini on-click@this.paginationEnd()> i class icon-step-forward>/i> /button> /div> p classpag-num-text pull-right> {{! TODO: add helper function for translating strings with placeholders like this }} {{pagination.start}} - {{pagination.end}} {{translateText(of)}} {{pagination.total}} /p> /div> {{/if}} /header> div classwidget-content> {{#if user.checkAddDeleteDevices()}} table classtable table-striped> !-- The if statement below will cause the Available Cameras to shimmer if loading, then either show the cameras or an If you are adding... message --> {{#if isLoading}} thead> tr> th idavailable-camera-table-status stylewidth:7%>{{translateText(Status)}}/th> th idavailable-camera-table-name stylewidth:52%>{{translateText(Name)}}/th> th idavailable-camera-table-bridge stylewidth:21%>{{translateText(Bridge)}}/th> th stylewidth:20%>{{translateText(Actions)}}/th> /tr> /thead> tbody> tr> td> box classshine>/box> /td> td> longLines classshine>/longLines> /td> td> shortLines classshine>/shortLines> /td> td> boxTwo classshine>/boxTwo> boxTwo classshine>/boxTwo> /td> /tr> /tbody> {{elseif cameras}} thead> tr> th idavailable-camera-table-status stylewidth:7%>{{translateText(Status)}}/th> th idavailable-camera-table-name stylewidth:52%>{{translateText(Name)}}/th> th idavailable-camera-table-bridge stylewidth:21%>{{translateText(Bridge)}}/th> th stylewidth:20%>{{translateText(Actions)}}/th> /tr> /thead> tbody> {{#each cameras as camera}} {{#if camera.deviceStatus IGND && !(ui.show_upnp && camera.deviceUPNP)}} tr> td class{{#unless account.is_rtsp_cameras_enabled || camera.deviceSupported}}dim-row{{/unless}}> {{#if camera.deviceConnect.connect PASS}} i classicon-lock red big-icon>/i> {{else}} i classicon-question-sign orange big-icon>/i> {{/if}} /td> td classcamera-available-description {{#unless account.is_rtsp_cameras_enabled || camera.deviceSupported}}dim-row{{/unless}}> {{getDeviceDescription(camera)}} {{#if camera.deviceOwner}} div classcamera-available-description-more> {{getAttachedDescription(camera)}} /div> {{/if}} /td> td class{{#unless account.is_rtsp_cameras_enabled || camera.deviceSupported}}dim-row{{/unless}}> {{#each camera.deviceBridges}} {{#unless @index 0}}, {{/unless}}{{getBridgeName(this0)}} {{/each}} /td> td> {{! ACTIONS COLUMN }} {{#if !camera.deviceSupported}} {{! RTSP/SUPPORT BUTTON }} {{#if account.is_rtsp_cameras_enabled}} button typebutton on-click@this.addRtspCamera(camera) classorange title{{translateText(add camera to account using RTSP)}} data-testidadd-rtsp-camera-{{ camera.deviceGUID }} > i classicon-plus>/i> /button> {{/if}} button typebutton on-click@this.sendFeedback(camera) title{{translateText(request support for this camera)}} data-testidsend-feedback-{{ camera.deviceGUID }} > i classicon-envelope>/i> /button> {{else}} {{! ADD CAMERA BUTTON }} span classattach-available-camera> {{#if camera.deviceBridges.length > 1}} ul classdropdown-menu rolemenu> {{#each camera.deviceBridges}} li> a hrefjavascript:void(0); data-testidadd-device-{{ camera.deviceGUID }} {{#if camera.deviceType speaker}} on-click@this.addSpeaker(camera, this0) {{elseif camera.deviceOwner}} on-click@this.stealCameraModal(camera, this0) {{else}} on-click@this.addCameraModal(camera, null, this0) {{/if}}> {{getBridgeName(this0)}} /a> /li> {{/each}} /ul> button typebutton classdropdown-toggle green data-toggledropdown data-testidadd-dropdown-{{ camera.deviceGUID }} {{#if camera.deviceType speaker}} title{{translateText(add speaker to account)}} {{else}} title{{translateText(add camera to account)}} {{/if}}> i classicon-plus>/i> /button> {{else}} button typebutton classgreen data-testidadd-device-{{ camera.deviceGUID }} {{#if camera.deviceType speaker}} on-click@this.addSpeaker(camera, null) {{elseif camera.deviceOwner}} {{! Case where camera is attached to another account/bridge on the same network. Should be the same or similar to one for additional green text.}} on-click@this.stealCameraModal(camera, camera.deviceBridges00) {{else}} on-click@this.addCameraModal(camera, null, camera.deviceBridges00) {{/if}} {{#if camera.deviceType speaker}} title{{translateText(add speaker to account)}} {{else}} title{{translateText(add camera to account)}} {{/if}} > i classicon-plus>/i> /button> {{/if}} /span> {{/if}} {{! VPN TUNNEL BUTTON }} {{#if user.checkDeviceVPN(this) && !this.isCloudCamera() && !this.isAnalog() && !this.isChildCamera()}} button typebutton on-click@this.openVPN(camera) data-testidopen-vpn-{{ camera.deviceGUID }} {{#if camera.deviceType speaker}} title{{translateText(open VPN to speaker)}} {{else}} title{{translateText(open VPN to camera)}} {{/if}} > i classeen-icon-tunnel>/i> /button> {{/if}} {{! REPLACE CAMERA BUTTON }} {{#if camera.getReplaceableCameras().length && camera.deviceType ! speaker}} span classreplace-camera> ul classdropdown-menu rolemenu> {{#each getCameraReplacements(camera) as replacement}} li> a href# on-click@this.addCameraModal(camera, replacement.replace_id, camera.deviceBridges00)> {{replacement.replace_name}} /a> /li> {{/each}} /ul> button typebutton data-toggledropdown classdropdown-toggle replace data-testidreplace-camera-dropdown-{{ camera.deviceGUID }} title{{translateText(replace camera)}} > i classicon-exchange>/i> /button> /span> {{/if}} /td> /tr> {{/if}} {{/each}} /tbody> {{else}} thead> tr> th idavailable-camera-table-status stylewidth:7%>{{translateText(Status)}}/th> th idavailable-camera-table-name stylewidth:52%>{{translateText(Name)}}/th> th idavailable-camera-table-bridge stylewidth:21%>{{translateText(Bridge)}}/th> th stylewidth:20%>{{translateText(Actions)}}/th> /tr> /thead> tbody> tr> td colspan4> div classwell text-center> {{translateText(If you are adding a camera or speaker and do not see it displayed here, please check your device and ensure ONVIF is enabled with proper username and password.)}} /div> /td> /tr> /tbody> {{/if}} /table> {{else}} p classtext-center>{{translateText(You do not have permission to add cameras.)}}/p> {{/if}} /div> /div> /script> !-- TEMPLATE END :: AddCameraViewComponent --> !-- TEMPLATE BEGIN :: AddedRecentlyComponent --> script typetext/ractive idAddedRecentlyComponent-template> div classwidget> header classwidget-title> i classicon-time>/i> {{translateText(Recently Added Devices)}} /header> div classwidget-content> {{#if cameras.length > 0}} table classtable table-striped> thead> tr> th idavailable-camera-table-status stylewidth:7%>{{translateText(Status)}}/th> th idavailable-camera-table-name stylewidth:52%>{{translateText(Name)}}/th> th idavailable-camera-table-bridge stylewidth:21%>{{translateText(Bridge)}}/th> th stylewidth:20%>{{translateText(Actions)}}/th> /tr> /thead> tbody> {{#each cameras as camera}} {{#with ~/user}} tr> td> {{#if camera.deviceType mca_camera}} {{> partial-mca-camera-status}} {{else}} {{> partial-camera-status}} {{/if}} /td> td> {{camera.deviceName}} span classtext-dimmed>({{camera.deviceID}})/span> /td> td> {{getBridgeName(camera.deviceBridges00)}} /td> td> {{#if user.checkDeviceUpdate(camera) && user.checkPTZOnlyShowSettings(camera)}} button typebutton on-click@this.openCameraSettings(camera) title{{translateText(change camera settings)}}> i classicon-cog>/i> /button> {{/if}} {{#if user.checkDeviceVPN(camera) && !camera.isCloudCamera() && !camera.isParentCamera() && !camera.isAnalog() && !camera.isChildCamera()}} button typebutton on-click@this.openVPN(camera) title{{translateText(open VPN to camera) }}> i classeen-icon-tunnel>/i> /button> {{/if}} {{#if user.checkAddDeleteDevices()}} button typebutton on-click@this.deleteCamera(camera) title{{translateText(remove camera from account) }}> i classicon-trash>/i> /button> {{/if}} /td> /tr> {{/with}} {{/each}} /tbody> /table> {{else}} p classtext-center>{{translateText(No recently added devices.)}}/p> {{/if}} /div> /div> /script> !-- TEMPLATE END :: AddedRecentlyComponent --> !-- TEMPLATE BEGIN :: DirectCamera --> script typetext/ractive idDirectCamera-template> div classcontainer-fluid> div classwidget-content> div classrow-fluid> div classspan12> div classspan8 offset2> form classform-horizontal> p classhelp-block>{{translateText(Camera Name)}}/p> input typetext maxlength60 idcameraName placeholder{{translateText(Camera Name)}} value{{camera.name}}> p classhelp-block>{{translateText(MAC Address)}}/p> input typetext idmacAddress placeholder{{translateText(MAC Address)}} on-inputprocessHardwareId value{{camera.hardware_id}}> /form> /div> /div> /div> /div> /div> /script> !-- TEMPLATE END :: DirectCamera --> !-- TEMPLATE BEGIN :: AddDistributorUser --> script typetext/ractive idAddDistributorUser-template> form classform-horizontal> div classcontrol-group> label classcontrol-label>{{{translateText(Email)}}}:/label> div classcontrols> div classrow-fluid> div classspan10> input classspan12 value{{email}} typeemail maxlength60 idaddUserEmail placeholder{{{translateText(Email)}}}/> /div> /div> /div> /div> div classcontrol-group> label classcontrol-label>{{{translateText(Name)}}}:/label> div classcontrols> div classrow-fluid> div classspan5> input typetext classspan12 value{{first_name}} maxlength60 idaddUserFirstName placeholder{{{translateText(First Name)}}}/> /div> div classspan5> input typetext classspan12 value{{last_name}} maxlength60 idaddUserLastName placeholder{{{translateText(Last Name)}}}/> div> /div> /div> /div> /form> /script> !-- TEMPLATE END :: AddDistributorUser --> !-- TEMPLATE BEGIN :: AddMultiviewCameraView --> script typetext/template idAddMultiviewCameraView-template> span classmodal-heading-append>/span> div classmodal-header> button classclose data-dismissmodal>×/button> h3 idaddMultiviewCamera__title>/h3> /div> div classmodal-body> div classrow-fluid> div classspan12> div classcontrol-group> label classcontrol-label for>% this.t(Camera Name) %>:/label> div classcontrols> div classrow-fluid> input typetext classspan4 idaddMultiviewCamera__name value disabled/> /div> /div> /div> div classcontrol-group> label classcontrol-label for>% this.t(Tags) %>:/label> div classcontrols> div classrow-fluid> input nametags classspan8 idaddMultiviewCamera__tags value disabled/> /div> /div> /div> div classcontrol-group> label classcontrol-label idaddMultiviewCamera__views_label for >% this.t(Views) %>:/label> div classcontrols> input typecheckbox nameSelect All idaddMultiviewCamera__all_channels> p classaddMultiviewCamera__channel_label idaddMultiviewCamera__all_channels_label>% this.t(Select All) %>/p> hr idaddMultiviewCamera__channel_sep_line> div idaddMultiviewCamera__first_channel_col classaddMultiviewCamera__channel_column> /div> div idaddMultiviewCamera__second_channel_col classaddMultiviewCamera__channel_column> /div> /div> /div> /div> div classspan12 idaddMultiviewCamera__crendentials_prompt> p>% this.t(A Username and Password are needed to communicate with this camera.) %>/p> div classcontrols> div classrow-fluid> input idaddMultiviewCamera__username classspan6 typetext maxlength40 placeholder% this.t(Username) %> value> input idaddMultiviewCamera__password classspan6 typepassword maxlength40 placeholder% this.t(Password) %> value> /div> /div> button classbtn btn-info idaddMultiviewCamera__saveCredentials>% this.t(Save and Try Again) %>/button> /div> /div> /div> div classmodal-footer> p idaddMultiviewCamera__Response classred>/p> p idaddMultiviewCamera__Response2 classred>/p> button classbtn btn-success idaddMultiviewCamera__save>% this.t(Save) %>/button> /div> /script> !-- TEMPLATE END :: AddMultiviewCameraView --> !-- TEMPLATE BEGIN :: AddNewCamera --> script typetext/ractive idaddNewCamera-template> div classmodal-content add-new-camera-component> div classmodal-header> button typebutton classclose data-dismissmodal>×/button> h3> {{#if is_replace}} {{translateText(Replace Camera)}} {{else}} {{translateText(Add Camera)}} {{/if}} {{#if ui.description}} // {{ui.description}}{{/if}} /h3> /div> div classmodal-body> {{#if is_replace}} {{{ui.replace_message}}} {{else}} div classrow-fluid> div classspan6> div classcontrol-group> label classcontrol-label>{{translateText(Camera name)}}:/label> div classcontrols> input typetext value{{camera_input.name}}> /div> /div> SelectScene scene{{camera_input.scene}} is_mca{{ui.is_mca_camera}}>/SelectScene> /div> div classspan6> {{#if ui.is_cmvr}} div classcontrol-group title{{translateText(Cloud Preview Only (PR1))}}> label foradd_camera_preview_only_cloud_retention classcontrol-label>{{translateText(Cloud Preview Only (PR1))}}:/label> div classcontrols> input typecheckbox idadd_camera_preview_only_cloud_retention checked{{camera_input.preview_only_cloud_retention}}/> /div> /div> {{/if}} div classcontrol-group> label classcontrol-label>{{translateText(Cloud Retention)}}: /label> div classcontrols> select classform-input-auto-width value{{camera_input.cloud_retention}}> option value disabled selected hidden> -- /option> {{#if !!camera_input.preview_only_cloud_retention && ui.is_cmvr}} option value1>1 {{translateText(day)}} (M10)/option> {{else}} option value1>{{translateText(None)}} (M10)/option> {{/if}} option value2>2 {{translateText(days)}}/option> option value3>3 {{translateText(days)}}/option> option value5>5 {{translateText(days)}}/option> option value7>7 {{translateText(days)}}/option> option value14>14 {{translateText(days)}}/option> option value20>20 {{translateText(days)}}/option> option value28>28 {{translateText(days)}}/option> option value30>30 {{translateText(days)}}/option> option value31>31 {{translateText(days)}}/option> option value60>60 {{translateText(days)}}/option> option value90>90 {{translateText(days)}}/option> option value180>180 {{translateText(days)}}/option> option value365>1 {{translateText(Year)}}/option> option value730>2 {{translateText(Years)}}/option> option value1095>3 {{translateText(Years)}}/option> option value1825>5 {{translateText(Years)}}/option> /select> /div> /div> {{#if ui.is_cmvr}} div classcontrol-group> label classcontrol-label>{{translateText(Maximum On Premise Retention)}}: /label> div classcontrols> select classform-input-auto-width value{{camera_input.local_retention}} > option value disabled selected hidden> -- /option> option value0>{{translateText(None)}}/option> option value1>1 {{translateText(day)}}/option> option value2>2 {{translateText(days)}}/option> option value3>3 {{translateText(days)}}/option> option value5>5 {{translateText(days)}}/option> option value7>7 {{translateText(days)}}/option> option value14>14 {{translateText(days)}}/option> option value20>20 {{translateText(days)}}/option> option value28>28 {{translateText(days)}}/option> option value30>30 {{translateText(days)}}/option> option value31>31 {{translateText(days)}}/option> option value45>45 {{translateText(days)}}/option> option value60>60 {{translateText(days)}}/option> option value90>90 {{translateText(days)}}/option> option value180>180 {{translateText(days)}}/option> option value365>1 {{translateText(Year)}}/option> /select> /div> /div> {{/if}} /div> /div> div classcontrol-group> label classcontrol-label for>{{translateText(Tags)}}:/label> div classcontrols> input nametags classspan8 idadd-camera-tags value> /div> /div> p>{{translateText(Add username and password)}} span classtext-dimmed>({{translateText(optional)}})/span>/p> div classcontrols> div classrow> input classcol-auto typetext maxlength40 placeholder{{translateText(Username)}} value{{camera_input.username}} autocompleteoff> input idaddCamera__onvifp classcol-auto input-password typetext maxlength40 placeholder{{translateText(Password)}} value{{camera_input.password}} autocompleteoff> /div> /div> {{#if location_feature_status}} p>{{translateText(Location)}}/p> div classcontrols> div classrow-fluid> div classspan6> LocationSelect onSelect{{onLocationSelect}} is_no_location_visibletrue should_select_default_locationtrue data_test_idmodal-add-camera-form-select-location /> /div> div classspan2 location-add-button-center> LocationAddButton beforeOpen{{hideCameraModal}} onResult{{onAddNewLocation}}/> /div> /div> /div> {{/if}} {{/if}} /div> div classmodal-footer> p classred>{{ui.message}}/p> p classred>{{ui.message2}}/p> button typebutton classbtn btn-warning data-dismissmodal>{{translateText(Cancel)}}/button> button typebutton classbtn btn-success on-click@this.save()>{{translateText(Save)}}/button> /div> /div> /script> !-- TEMPLATE END :: AddNewCamera --> !-- TEMPLATE BEGIN :: AddRtspCameraView --> script typetext/template idAddRtspCameraView-template> span classmodal-heading-append>/span> div classmodal-header> button classclose data-dismissmodal>×/button> h3>% this.t(Add RTSP Camera) %>/h3> /div> div classmodal-body add-rtsp-camera-component> div classrow-fluid> div classspan12> div classspan10 offset1> !-- launches help window from help/ data_link attribute + .html --> span classpull-right idaddRtspCameraHelp data_linkcamera_add_rtsp> i classicon-question-sign een-help-link>/i> /span> form classform-horizontal> p classhelp-block>% this.t(Connect to Bridge) %>/p> select idaddRtspCameraToBridge classspan6> %if(model){%> % _.each(model.get(deviceBridges), function(item) { %> option value% item0 %>>%- bridgeList.findByDeviceID(item0).get(deviceName) %>/option> % }) %> %}else{%> % _.each(bridgeList.models, function(item) { %> option value% item.get(deviceID) %>>%- item.get(deviceName) %>/option> % }) %> % } %> /select> p classhelp-block>% this.t(Camera Name) %>/p> input typetext classspan6 maxlength60 idaddRtspCameraName placeholder% this.t(Camera Name) %>> span style%(model && model.isAnalog() ? display:none; : )%>> p stylemargin-top:10px; classhelp-block>% this.t(Login (optional)) %>/p> input typetext classspan5 maxlength40 idaddRtspCameraUsername placeholder% this.t(Username) %>> input typetext classspan5 maxlength40 idaddRtspCameraPassword placeholder% this.t(Password) %>> /span> %if(!model || !model.get(deviceSupported)){%> p stylemargin-top:10px; classhelp-block>RTSP/p> %if(!model){%> input typetext classspan6 maxlength15 idaddRtspCamera__rtsp_ip_address placeholder% this.t(IP Address) %> stylemargin-bottom:5px/> %}%> input typecheckbox nameDual Stream iddual-stream-checkbox> p iddual-stream-txt>% this.t(Dual Stream) %>/p>br> input typetext classspan6 maxlength200 idaddRtspCamera__rtsp_video_resource placeholder% this.t(Video Resource URL (H264)) %>/> input typetext classspan6 maxlength200 idaddRtspCamera__rtsp_preview_resource placeholder% this.t(Preview Resource URL (MJPEG)) %>/> div classspan6 help-block stylemargin-top:2px;margin-left:0px>em>% this.t(Examples:) %>/em>br/> snl/live/1/1/Ux/, live.sdp, h264/div> div idmjpeg-examples classspan6 help-block stylemargin-top:2px;margin-left:0px>em>% this.t(Examples:) %>/em>br/> snl/live/1/2/Ux/, live2.sdp, jpeg/div> % if(userList.getCurrentUser().checkFeatureFlag(location_groups) && userList.getCurrentUser().checkEditLocationGroup()) { %> p classhelp-block location>% this.t(Location) %>/p> div classrow flex-modal> div idaddRtspCamera__location_select classspan6>/div> div idaddRtspCamera__location_add_button>/div> /div> % } %> p iddual-stream-checkbox-warning classred hide stylemargin-top: 10px> % this.t(Please be aware that 1 single stream RTSP camera takes up the same amount of bridge resources as 4 dual stream cameras. Because of this it is very easy to overload the bridge.) %> /p> %}%> /form> /div> /div> /div> /div> div classmodal-footer> p idaddRtspCameraResponse classred>/p> p idaddRtspCameraResponse2 classred>/p> button classbtn btn-warning data-dismissmodal>% this.t(Cancel) %>/button> button classbtn btn-success idaddRtspCameraButton>% this.t(Add Camera) %>/button> /div> /script> !-- TEMPLATE END :: AddRtspCameraView --> !-- TEMPLATE BEGIN :: AddSpeakerView --> script typetext/template idAddSpeakerView-template> span classmodal-heading-append>/span> div classmodal-header> button classclose data-dismissmodal>×/button> h3>% this.t(Add Speaker) %>/h3> /div> div classmodal-body> div classrow-fluid> div classspan12> div classspan10 offset1> !-- launches help window from help/ data_link attribute + .html --> span classpull-right idaddSpeakerHelp data_linkspeaker_add> i classicon-question-sign een-help-link>/i> /span> form classform-horizontal> % if (false) {%> !-- {{! Hide below code at talkdown V1}} --> p classhelp-block>% this.t(Available Speakers) %>/p> select idaddSpeakerGUID classspan6 %(availableCamerasList.filterAvailableSpeakers().length 0 ? disabled : )%> > %if(availableCamerasList.filterAvailableSpeakers().length ! 0){%> % _.each(availableCamerasList.filterAvailableSpeakers(), function(item) { %> option value% item.get(deviceGUID) %>>%- item.get(deviceName) %>/option> % }) %> %}else{%> option value>%- this.t(No Available Speaker) %>/option> %}%> /select> input typecheckbox nameAdd IP Speaker idadd-ip-speaker-checkbox> p idadd-ip-speaker-txt>% this.t(Add IP Speaker) %>/p> p classhelp-block idaddSpeakerToBridge-text>% this.t(Connect to Bridge) %>/p> select idaddSpeakerToBridge classspan6> % _.each(bridgeList.models, function(item) { %> option value% item.get(deviceID) %>>%- item.get(deviceName) %>/option> % }) %> /select> p classhelp-block idaddSpeakerIpAddress-text>% this.t(IP Address) %>/p> input typetext classspan6 maxlength60 idaddSpeakerIpAddress placeholder% this.t(IP Address) %>> %}%> p classhelp-block>% this.t(Speaker Name) %>/p> input typetext classspan6 maxlength60 idaddSpeakerName value% this.getNewSpeakerName() %>> !-- Hide below input for now. These code will be used in the furture. EEPD-11923 --> !-- span> p stylemargin-top:10px; classhelp-block>% this.t(SIP Username/Password) %>/p> input typetext classspan5 maxlength40 idaddSpeakerSIPUsername placeholder% this.t(SIP Username) %>> input typetext classspan5 maxlength40 idaddSpeakerSIPPassword placeholder% this.t(SIP Password) %>> /span> --> span> p stylemargin-top:10px; classhelp-block>% this.t(Speaker Login (optional)) %>/p> input typetext classspan5 maxlength40 idaddSpeakerUsername placeholder% this.t(Username) %>> input typetext classspan5 maxlength40 idaddSpeakerPassword placeholder% this.t(Password) %>> /span> /form> /div> /div> /div> /div> div classmodal-footer> p idaddSpeakerResponse classred>/p> p idaddSpeakerResponse2 classred>/p> button classbtn btn-warning data-dismissmodal>% this.t(Cancel) %>/button> button classbtn btn-success idaddSpeakerButton>% this.t(Add Speaker) %>/button> /div> /script> !-- TEMPLATE END :: AddSpeakerView --> !-- TEMPLATE BEGIN :: AddUserModal --> script typetext/ractive idAddUser-template> div classtabbable> ul classnav nav-tabs> {{#each nav_tabs}} li class{{#if active_idid}}active{{/if}}> a href#{{id}} data-toggletab on-click@this.setActiveTab(id)> {{{label}}} /a> /li> {{/each}} /ul> div classtab-content> TabPane idaddUser-general-tab active_id{{active_id}}> form classform-horizontal> div classcontrol-group> label classcontrol-label>{{{translateText(Email)}}}:/label> div classcontrols> div classrow-fluid> div classspan10> input classspan12 value{{email}} typeemail maxlength60 idaddUserEmail placeholder{{{translateText(Email)}}}/> /div> /div> /div> /div> div classcontrol-group> label classcontrol-label>{{{translateText(Name)}}}:/label> div classcontrols> div classrow-fluid> div classspan5> input typetext classspan12 value{{first_name}} maxlength60 idaddUserFirstName placeholder{{{translateText(First Name)}}}/> /div> div classspan5> input typetext classspan12 value{{last_name}} maxlength60 idaddUserLastName placeholder{{{translateText(Last Name)}}}/> /div> /div> /div> /div> {{#if show_copy_permissions}} div classcontrol-group> label classcontrol-label foraddUser__permissions>{{translateText(Clone permissions from)}}:/label> div classcontrols> div classrow-fluid> div classspan10> select idaddUser__permissions classspan12 data-placeholder{{translateText(Select a user to clone)}}> option value>/option> {{#each userList}} option value{{ attributes.id }}>{{ attributes.first_name + + attributes.last_name}}/option> {{/each}} /select> /div> /div> {{#if copy_permission_error}} p classcopy-permissions__error red>{{translateText(Unable to copy permissions)}}!/p> {{/if}} /div> /div> {{/if}} /form> /TabPane> TabPane idaddUser-permissions-tab active_id{{active_id}}> {{#if reloadUserPermissions}} UserPermissionsComponent user_model{{final_permissions}}/> {{/if}} /TabPane> TabPane idaddUser-access-tab active_id{{active_id}}> GeneralAccessComponent user_model{{defaults}}/> /TabPane> {{#if is_master}} {{#if reloadUserPermissions}} TabPane idaddUser-accounts-tab active_id{{active_id}}> AccountAccessComponent user_model{{final_permissions}} available_account_models{{available_account_models}} is_new_usertrue is_copied_permissions{{is_copied_permissions}}/> /TabPane> {{/if}} {{/if}} {{#if reloadUserPermissions}} TabPane idaddUser-locations-tab active_id{{active_id}}> LocationAccessComponent user_model{{final_permissions}} is_new_usertrue is_copied_permissions{{is_copied_permissions}}/> /TabPane> TabPane idaddUser-cameras-tab active_id{{active_id}}> CameraAccessComponent user_model{{final_permissions}} available_camera_models{{available_camera_models}} is_new_usertrue is_copied_permissions{{is_copied_permissions}}/> /TabPane> TabPane idaddUser-layouts-tab active_id{{active_id}}> LayoutAccessComponent user_model{{final_permissions}} available_layout_models{{available_layout_models}} is_new_usertrue is_copied_permissions{{is_copied_permissions}}/> /TabPane> {{/if}} /div> /div> /script> !-- TEMPLATE END :: AddUserModal --> !-- TEMPLATE BEGIN :: AlertEditor --> script typetext/ractive idAlertEditor-template> tr> td colspan{{colspan}} class{{active ? focus-alert : not-active}}> i on-clickclose stylemargin-right: 20px; classpull-right icon-chevron-up>/i> div classspan7 alert-column> div classspan12 height-0> !-- Empty element to align items (old bootstrap)--> /div> div classspan12> label classspan5 control-label foreditCamera__motion_alert> {{ translateText(Enable Alerts) }}: /label> div classspan1 text-left> input typecheckbox classalert-active on-clicksave checked{{is_active}} twowayfalse/> /div> /div> div classspan12> label classspan5 control-label for> {{ translateText(When) }}: /label> div classrow-fluid control-group span7> select classspan12 when value{{*, work, nonwork.indexOf(when) > -1 ? when : custom}} twowayfalse disabled{{model.isCloudCamera()}}> option value*>{{ translateText(24 hours) }}/option> option valuework>{{ translateText(Work hours)}} ({{getWorkHours()}})/option> option valuenonwork>{{ translateText(Non-work hours) }}/option> option valuecustom>{{ translateText(Custom hours) }}/option> /select> /div> /div> {{#if *, work, nonwork.indexOf(when) -1}} TimeSlider start{{when_start}} end{{when_end}} on-changesave>/TimeSlider> {{/if}} div classspan12 shorten> label classspan5 control-label foreditCamera__motion_alert_throttle_none> {{ translateText(Re-arm) }}: /label> div classspan7> div classspan12> div classspan6> select classspan12 throttle_type value{{throttle_type}} twowaytrue> option value1> {{ translateText(Immediate) }} /option> option value2> {{ translateText(After) }} /option> option value3> {{ translateText(After quiet for) }} /option> /select> /div> div classspan6> div classspan6> input typenumber min1 styleheight: 25px; classspan12 throttle_seconds maxlength5 name{{throttle_type}} value{{parseInt(throttle_type) 1 ? : typeof throttle_seconds number ? throttle_seconds / 60 : 15 }} twowayfalse {{#if (parseInt(throttle_type) 1)}}disabled{{/if}}> /div> div classspan6 stylemargin-top:5px>{{ translateText(minutes) }}/div> /div> /div> /div> /div> div classspan12> label classspan5 control-label formotion_alert_throttle_hour_limit> {{ translateText(Max Per Hour) }}: /label> div classspan7 styletext-align: left> input typetext styleheight: 25px; classspan3 throttle_hour_limit maxlength3 twowayfalsenameeditCamera__motion_alert_throttle_hour_limit value{{typeof throttle_hour_limit number ? throttle_hour_limit: }}> /div> /div> /div> div classspan4 alert-column> div classspan12> !---Row to push this down and line up with other fields--> /div> div classspan12 css-motion-alert-who> label classspan4 control-label foreditCamera__motion_alert_who> {{ translateText(Who) }}: /label> div classspan8> select classspan12 motion_alert_who multiplemultiple> option valueselect-all-option>All/option> {{#each users}} option value{{ this.get(id) }}>{{this.getDisplayName(true)}}/option> {{/each}} /select> /div> /div> div classspan12 css-motion-alert-mode> label classspan4 control-label formotion_alert_mode> {{ translateText(Mode) }}: /label> div classspan8> select classspan12 motion_alert_mode multiplemultiple> option valueselect-all-option>All/option> {{#each account_alert_modes}} option value{{ this }}>{{ this }}/option> {{/each}} /select> /div> /div> div classspan12> label classspan4 control-label foreditCamera__motion_alert_level> {{ translateText(Level) }}: /label> div classspan4> select classspan12 level namemotion_alert_level value{{level}} twowayfalse> option value1>{{ translateText(High) }}/option> option value2>{{ translateText(Low) }}/option> /select> /div> /div> /div> {{#if @global.smart_alerts && @global.smart_alerts.isSmartAlertsAvailable(@this.get(smart_alerts_source_alert))}} div classspan7 alert-column> div classspan12 height-0> !-- Empty element to align items (old bootstrap)--> /div> div classspan12> label classspan5 control-label foreditCamera__motion_smart_alert> {{ translateText(Enable AI Filtering) }}: /label> div classspan1 text-left> input typecheckbox classsmart-alert-active on-clicksave checked{{ is_smart_alerts_active }} twowayfalse/> /div> /div> div classspan12 css-smart-alert-types> label classspan5 control-label> {{ translateText(Detect) }}: /label> div classspan5> div classspan12 smart-alert-types> {{#each available_smart_alerts_types}} label> input typecheckbox data-smart-alert-type{{this.property}} checked{{enabled_smart_alerts_types.indexOf(this.property) > -1}} on-clicksave /> {{ this.label }} /label> {{/each}} /div> /div> /div> {{#each available_smart_alerts_types}} div classrow-fluid advanced_options> div classspan12> label classspan5 control-label> {{ this.label}} {{translateText(Detection Confidence) }}: /label> div classspan7> SmartAlertSlider min0 max100 id{{ this.property }} roiid{{roiid}} step1>/SmartAlertSlider> /div> /div> /div> {{/each}} /div> {{/if}} /td> /tr> /script> !-- TEMPLATE END :: AlertEditor --> !-- TEMPLATE BEGIN :: AnalyticAlertEditor --> script typetext/ractive idAnalyticAlertEditor-template> tr> td colspan{{colspan}} class{{active ? focus-alert : not-active}}> i on-clickclose stylemargin-right: 20px; classpull-right icon-chevron-up>/i> div classspan7 alert-column> div classspan12 height-0> !-- Empty element to align items (old bootstrap)--> /div> div classspan12> label classspan5 control-label foreditCamera__analytic_alert> {{ translateText(Enable Alerts) }}: /label> div classspan1 text-left> input typecheckbox classalert-active on-clicksave checked{{is_active}} twowayfalse/> /div> /div> div classspan12> label classspan5 control-label for> {{ translateText(When) }}: /label> div classrow-fluid control-group span7> select classspan12 when value{{*, work, nonwork.indexOf(when) > -1 ? when : custom}} twowayfalse> option value*>{{ translateText(24 hours) }}/option> option valuework>{{ translateText(Work hours)}}({{getWorkHours()}})/option> option valuenonwork>{{ translateText(Non-work hours) }}/option> option valuecustom>{{ translateText(Custom hours) }}/option> /select> /div> /div> {{#if *, work, nonwork.indexOf(when) -1}} TimeSlider start{{when_start}} end{{when_end}} on-changesave>/TimeSlider> {{/if}} div classspan12> label classspan5 control-label foreditCamera__analytic_alert_throttle_none> {{ translateText(Re-arm) }}: /label> div classspan7> div classspan12> div classspan6> select classspan12 throttle_type value{{throttle_type}} twowaytrue> option value1> {{ translateText(Immediate) }} /option> option value2> {{ translateText(After) }} /option> option value3> {{ translateText(After quiet for) }} /option> /select> /div> div classspan6> div classspan6> input typenumber min1 styleheight:25px; classspan12 throttle_seconds maxlength5 name{{throttle_type}} value{{parseInt(throttle_type) 1 ? : typeof throttle_seconds number ? throttle_seconds / 60 : 15 }} twowayfalse {{#if (parseInt(throttle_type) 1)}}disabled{{/if}}> /div> div classspan6 stylemargin-top:5px>{{ translateText(minutes) }}/div> /div> /div> /div> /div> div classspan12> label classspan5 control-label foranalytic_alert_throttle_hour_limit> {{ translateText(Max Per Hour) }}: /label> div classspan7 styletext-align: left> input typetext styleheight: 25px; classspan3 throttle_hour_limit maxlength3 twowayfalsenameeditCamera__analytic_alert_throttle_hour_limit value{{typeof throttle_hour_limit number ? throttle_hour_limit: }}> /div> /div> {{#if is_counting}} div classspan12> label classspan3 control-label foreditCamera__alert_threshold> {{ translateText(Time Loiter) }}: /label> div classspan8> input typetext styleheight: 25px; classspan3 threshold_seconds maxlength5 value{{typeof threshold_seconds number? threshold_seconds / 60 : 15}} twowayfalse/> /div> /div> div classspan12> label classspan3 control-label foreditCamera__alert_count> {{ translateText(Min Count) }}: /label> div classspan8> input typetext styleheight: 29px; classspan3 count maxlength5 value{{typeof count number? count / 60 : 15}} twowayfalse/> /div> /div> {{/if}} {{#if @global.smart_alerts && @global.smart_alerts.isSmartAlertsAvailable(@this.get(smart_alerts_source_alert))}} div classspan12> label classspan5 control-label> {{ translateText(Enable AI Filtering) }}: /label> div classspan1 text-left> input typecheckbox classsmart-alert-active on-clicksave checked{{ is_smart_alerts_active }} twowayfalse/> /div> /div> div classspan12 css-smart-alert-types> label classspan5 control-label> {{ translateText(Detect) }}: /label> div classspan5> div classspan12 smart-alert-types> {{#each available_smart_alerts_types}} label> input typecheckbox data-smart-alert-type{{this.property}} checked{{enabled_smart_alerts_types.indexOf(this.property) > -1}} on-clicksave /> {{ this.label }} /label> {{/each}} /div> /div> /div> {{#each available_smart_alerts_types}} div classrow-fluid advanced_options> div classspan12> label classspan5 control-label> {{ this.label}} {{translateText(Detection Confidence) }}: /label> div classspan7> SmartAlertSlider min0 max100 id{{ this.property }} roiid{{roiid}} step1>/SmartAlertSlider> /div> /div> /div> {{/each}} {{/if}} /div> div classspan4 alert-column> div classspan12> !---Row to push this down and line up with other fields--> /div> div classspan12 css-motion-alert-who> label classspan4 control-label foreditCamera__analytic_alert_who> {{ translateText(Who) }}: /label> div classspan8> select classspan12 analytic_alert_who multiplemultiple> option valueselect-all-option>{{ translateText(All) }}/option> {{#each users}} option value{{ this.get(id) }}>{{this.getDisplayName(true)}}/option> {{/each}} /select> /div> /div> div classspan12 css-motion-alert-mode> label classspan4 control-label foranalytic_alert_mode> {{ translateText(Mode) }}: /label> div classspan8> select classspan12 analytic_alert_mode multiplemultiple> option valueselect-all-option>{{ translateText(All) }}/option> {{#each account_alert_modes}} option value{{ this }}>{{ this }}/option> {{/each}} /select> /div> /div> div classspan12> label classspan4 control-label foreditCamera__analytic_alert_level> {{ translateText(Level) }}: /label> div classspan4> select classspan12 level nameanalytic_alert_level value{{level}} twowayfalse> option value1>{{ translateText(High) }}/option> option value2>{{ translateText(Low) }}/option> /select> /div> /div> {{#if is_show_in_out}} div classspan12> label classspan4 control-label foreditCamera__alert_on> {{ translateText(On) }}: /label> div classspan8> div classspan2 dir-container on-clicktoggleAlertOnInOut data-directionin title{{translateText(on cross in)}}> i classalert-vector-toggle {{alert_on_in ? green: gray}} icon-circle-arrow-{{in_vector}}>/i> /div> div classspan2 dir-container on-clicktoggleAlertOnInOut data-directionout title{{translateText(on cross out)}}> i classalert-vector-toggle {{alert_on_out ? green: gray}} icon-circle-arrow-{{out_vector}}>/i> /div> /div> /div> {{/if}} /div> {{#if is_show_in_out}} {{#if noAlertVectorSet(alert_on_in, alert_on_out)}} p classred span12>{{translateText(You must set a direction for line crossing alerts to work.)}}/p> {{/if}} {{/if}} /td> /tr> /script> !-- TEMPLATE END :: AnalyticAlertEditor --> !-- TEMPLATE BEGIN :: EEN-AnnotationsBoxes --> script typetext/ractive idEEN-AnnotationsBoxes-template> {{#each annotations}} {{>box}} {{/each}} {{#partial box}} !-- Annotation box --> div classimage-annotation-overlay-wrapper style top: {{top}}%; left: {{left}}%; width: {{width}}%; height: {{height}}%; border: {{border_style}};> !-- Annotation label --> {{#label}} div classlabel-wrapper> {{#label_url}} a href{{label_url}} target_blank stylecolor: {{border_color}};>{{label}}/a> {{/label_url}} {{^label_url}} p stylecolor: {{border_color}};>{{label}}/p> {{/label_url}} /div> {{/label}} /div> {{/partial}} /script> !-- TEMPLATE END :: EEN-AnnotationsBoxes --> !-- TEMPLATE BEGIN :: APIView --> script typetext/template idAPIView-template> div classwidget> header classwidget-title> i classicon-wrench>/i> % this.t(API Keys) %> /header> div classwidget-content clearfix> div classspan12 idvideo_container> table classtable table-striped> thead> th>% this.t(Status) %>/th> th>% this.t(App Name) %>/th> th>% this.t(API Key) %>/th> th>% this.t(API Secret) %>/th> th>% this.t(Actions) %>/th> /thead> tbody> % var self this %> % _.each(collection, function(item) { %> tr> td>i classicon-ok-circle green big-icon>/i>/td> td> li>%- item.get(name) %>/li> /td> td> li>%- item.get(api_key) %>/li> /td> td> button classsecret title% self.t(show API secret) %>> i classicon-lock data-info% item.get(api_secret) %>>/i> /button> /td> td> button classremove data-id% item.get(api_key) %> title% self.t(remove this app) %>>i classicon-trash>/i>/button> /td> % }); %> /tbody> /table> button idlaunchAddAPIKeyModal href# classbtn btn-success pull-right title% this.t(add new app to your account) %>> i classicon-plus-sign>/i> % this.t(Get New API Key) %> /button> /div> /div> /div> /script> !-- TEMPLATE END :: APIView --> script typetext/template idAPIWrapView-template> div classcontainer-fluid> article classrow-fluid idcamera-list> /article> /div> /script> !-- TEMPLATE BEGIN :: Slider --> script typetext/ractive idBandwidthSlider-template> div classrow-fluid> div classspan6> select value{{curr_mode}} on-changesetBandwidthMode> {{#each modes}} option value{{value}}>{{translateText(text)}}/option> {{/each}} /select> /div> div styledisplay:{{displaySlider(curr_mode)}}classspan12> div classbw-slider-widget>/div> /div> /div> /script> !-- TEMPLATE END :: Slider --> !-- TEMPLATE BEGIN :: BridgeHealth --> script typetext/ractive idBridgeHealth-template> {{#if show_health && health.message}} hr classbridge-health> div classbridge-health> i classicon-exclamation-sign {{icon_class}} big-icon>/i> div>{{bridge.deviceName}}: {{health.message}}/div> HelpLink data_linkhealth_message/> /div> {{/if}} /script> !-- TEMPLATE END :: BridgeHealth --> !-- TEMPLATE BEGIN :: cameraAnalytics --> script typetext/template idcameraAnalytics-template> span classmodal-heading-append> // %-model.get(deviceName)%>/span> div classtab-pane active idcameraAnalyticsMotion> i classicon-question-sign help-icon help-icon-activity data-linkcamera_analytics_activity>/i> i classicon-refresh chart-refresh>/i> div idcameraAnalytics__chart_motion>/div> /div> div classtab-pane idcameraAnalyticsCounting> span classanalytics-legend-button count-in-minus-out title%utils.t(Difference)%> > i classicon-delta-analytics-button no-border>/i> /span> span classanalytics-legend-button count-in active title%utils.t(Count in)%>> i classicon-circle-arrow-right>/i> /span> span classanalytics-legend-button count-out title%utils.t(Count Out)%>> i classicon-circle-arrow-left>/i> /span> i classicon-question-sign help-icon help-icon-all data-linkcamera_analytics_counting>/i> div idcameraAnalytics__chart_counting>/div> /div> div classtab-pane idcameraAnalyticsCrossing> span classanalytics-legend-button count-in-minus-out title%utils.t(Difference)%> > i classicon-delta-analytics-button no-border>/i> /span> span classanalytics-legend-button count-in active title%utils.t(Count in)%>> i classicon-circle-arrow-right>/i> /span> span classanalytics-legend-button count-out title%utils.t(Count Out)%>> i classicon-circle-arrow-left>/i> /span> i classicon-question-sign help-icon help-icon-all data-linkcamera_analytics_crossing>/i> div idcameraAnalytics__chart_crossing>/div> /div> div classtab-pane idcameraAnalyticsIntrusion> i classicon-question-sign help-icon help-icon-all data-linkcamera_analytics_intrusion>/i> div idcameraAnalytics__chart_intrusion>/div> /div> div classtab-pane idcameraAnalyticsLoitering> i classicon-question-sign help-icon help-icon-all data-linkcamera_analytics_loitering>/i> div idcameraAnalytics__chart_loitering>/div> /div> div classtab-pane idcameraAnalyticsTampering> i classicon-question-sign help-icon help-icon-all data-linkcamera_analytics_tampering>/i> div idcameraAnalytics__chart_tampering>/div> /div> /script> !-- TEMPLATE END :: cameraAnalytics --> !-- TEMPLATE BEGIN :: CameraMapView --> script typetext/template idCameraMapView-template> div idCameraMap__map>/div> /script> !-- TEMPLATE END :: CameraMapView --> script typetext/template idCameraMapWrapView-template> div classcontainer-fluid> article classrow-fluid> div idcamera_map_content> /div> /article> span classpull-right idmap-help data_linkmap_page> i classicon-question-sign een-help-link>/i> /span> /div> /script> !-- TEMPLATE BEGIN :: CameraTalkdownUIComponent --> script typetext/ractive idCameraTalkdownUIComponent-template> audio id{{model.id}}-preview-talkdown-audio autoplay>/audio> div classicon-container preview-talkdown-icon-container preview-talkdown id{{model.id}}-preview-talkdown styledisplay: block; on-click@this._onTalkdownClick(event)> i classtalk-ready fas fa-fw icon-microphone styledisplay: none;>/i> i classtalk-connecting fas fa-fw icon-spinner fa-pulse styledisplay: none;>/i> i classtalk-connected fas fa-fw icon-microphone styledisplay: none;>/i> i classtalk-disconnected fas fa-fw icon-microphone-slash styledisplay: none;>/i> /div> div classicon-container preview-talkdown-icon-container preview-talkdown-busy id{{model.id}}-preview-talkdown-busy styledisplay: none; on-click@this._onTalkdownBusyClick(event)> i classtalk-disconnected fas fa-fw icon-microphone-slash>/i> /div> /script> !-- TEMPLATE END :: CameraTalkdownUIComponent --> !-- TEMPLATE BEGIN :: CameraVPNView --> script typetext/template idCameraVPNView-template> div classmodal-header> button classclose data-dismissmodal>×/button> h3> % if (model.get(deviceType) speaker) { %> % this.t(Launch Speaker Connection) %> % } else { %> % this.t(Launch Camera Connection) %> % } %> // %- model.get(deviceName) %> /h3> /div> div classmodal-body> div classrow-fluid> div classspan12> div classspan12> p classhelp-block> % if (model.get(deviceType) speaker) { %> % this.t(Please wait while we establish a connection with this speaker) %> % } else { %> % this.t(Please wait while we establish a connection with this camera) %> % } %> /p> div classvpn notes-wrapper> label>%this.t(Notes)%>:/label> div classvpn notes-container>/div> /div> % if(model.get(camera_info) && model.get(camera_info).admin_user ) { %> p> dl classvpn_inline_pairs>% this.t(Default Web Username) %>:/dl> dt classvpn_inline_pairs> %- (model.get(camera_info).admin_user ? model.get(camera_info).admin_user : this.t(not available)) %> /dt> br> dl classvpn_inline_pairs>% this.t(Default Web Password) %>:/dl> dt classvpn_inline_pairs> %- (model.get(camera_info).admin_password ? model.get(camera_info).admin_password : this.t(not available)) %> /dt> /p> % } %> % if(model.get(speaker_info) && model.get(speaker_info).admin_user ) { %> p> dl classvpn_inline_pairs>% this.t(Default Web Username) %>:/dl> dt classvpn_inline_pairs> %- (model.get(speaker_info).admin_user ? model.get(speaker_info).admin_user : this.t(not available)) %> /dt> br> dl classvpn_inline_pairs>% this.t(Default Web Password) %>:/dl> dt classvpn_inline_pairs> %- (model.get(speaker_info).admin_password ? model.get(speaker_info).admin_password : this.t(not available)) %> /dt> /p> % } %> /div> /div> /div> /div> div classmodal-footer> p idcameraVPNResponse classred>/p> button classbtn btn-warning data-dismissmodal>Cancel/button> button classbtn btn-success data-dismissmodal>Close/button> /div> /script> !-- TEMPLATE END :: CameraVPNView --> !-- TEMPLATE BEGIN :: CameraZoomUIComponent --> script typetext/ractive idCameraZoomUIComponent-template> i classzoom-control-toggle icon-resize-vertical {{#if controls_active}}zoom-active{{/if}} on-click@this.toggleControls()>/i> {{#if controls_active}} i classzoom-control icon-zoom-in on-click@this.handleZoomBtns(@event, true)>/i> div classzoom-slider>/div> i classzoom-control icon-zoom-out on-click@this.handleZoomBtns(@event, false)>/i> {{/if}} /script> !-- TEMPLATE END :: CameraZoomUIComponent --> !-- TEMPLATE BEGIN :: chooseCamerasForLayout --> script typetext/template idchooseCamerasForLayout-template> form classform-horizontal> div classcontrol-group idchooseCameras__list> % _.each(collection, function(item) { %> div classrow-fluid> div classspan1 choose-camera-select> input typecheckbox idcheckbox_% item.get(deviceID) %> %(!userList.getCurrentUser().checkDeviceRead(item) ? disabled : )%> /> /div> div classspan2 choose-camera-image> img src/asset/prev/image.jpeg?id% item.get(deviceID) %>×tampnow&asset_classall > /div> div classspan8 choose-camera-filtered data-is_in_layout%item.get(is_in_layout)%> data-esn% item.get(deviceID) %>> p>%- item.get(deviceName) %>/p> % _.each(item.getCustomTags().sort(), function(tag, index) { %> %(span classtag>a> + _.escape(tag.toLowerCase()) + /a>/span>)%> % }) %> /div> /div> % }); %> /div> /form> /script> !-- TEMPLATE END :: chooseCamerasForLayout --> !-- TEMPLATE BEGIN :: NewAddCameras --> script typetext/ractive idNewAddCameras-template> {{#partial entry}} {{#if !@this.isHidden(this)}} div classrow-fluid choose-camera class-choose-camera-in-layout@this.isHiddenMember(this) on-click@this.selectRow(entry_id)> div classspan1 choose-camera-select> input typecheckbox value{{entry_id}} checked{{~/selected_camerasentry_id}} {{#if !currentUser().checkDeviceRead(this)}}disabled{{/if}}> /div> div classspan2 choose-camera-image {{@this.getIconStateClass(~/brokenentry_id, ~/imagesentry_id)}} data-esn{{entry_id}}> img src{{~/imagesentry_id}} class{{#composite_id}}choose-camera-image-{{composite_id}}{{/}} {{#~/imagesentry_id}}active{{/}} /> div classindicator-icon text-warning title{{translateText(Unable to load image)}}> i classicon-exclamation-sign>/i> /div> /div> div classspan8 choose-camera-filtered> p>{{#entry_name}}{{entry_name}}{{else}}{{deviceName}}{{/}}/p> {{#each tags}} span classtag>a> {{this.toLowerCase()}} /a>/span> {{/each}} /div> /div> {{/if}} {{/partial}} form classform-horizontal> div classcontrol-group> label classcontrol-label>{{translateText(Filter:)}}/label> div classcontrols> input typetext autocompleteoff maxlength100 value{{filter_search}} {{^camera_list}}placeholderNo Cameras disabled{{/}}> /div> /div> div classcontrol-group class-hiddenhideHideCheckbox> div classcontrols> label classcheckbox> input typecheckbox checked{{hide}}>{{hide_label}} /label> /div> /div> div classcontrol-group> div classcontrols class-hiddenhideShowComposites> label classcheckbox> input typecheckbox checked{{show_composites}}>{{translateText(Show Viewports Only)}} /label> /div> /div> /form> div classchoose-camera-select-all> a href# on-clickselect-all>{{translateText(Select All)}}/a> a href# on-clickclear-all>{{translateText(Clear All)}}/a> /div> div classeen-scroll-box choose-camera-wrapper as-scrollContainer.choose-camera-image, @this.setVisibleCameras, update_sequence> {{#each lazy_loaded_cameras}} {{#if this.composite}} {{#with model.deviceID, composite.id.join(:) as entry_id, (model.deviceName + ( + ((composite.name) ? composite.name : composite.id) + )) as entry_name, composite.tags.sort() as tags, composite.id as composite_id}} {{>entry}} {{/with}} {{else}} {{#with deviceID as entry_id, deviceName as entry_name, this.getCustomTags().sort() as tags}} {{>entry}} {{/with}} {{/if}} {{/each}} {{#if cameras && cameras.length > 0 }} {{#if shouldShowFilteredSet()}} {{#if Object.values(filtered_set).length 0 && !hide }} div classempty-set>{{translateText(No Results)}}/div> {{elseif filtered_hidden true && uiCountValues(hidden_cameras, false) 0 && hide}} div classempty-set>{{translateText(All results hidden)}}/div> {{/if}} {{/if}} {{else}} div classempty-set>{{translateText(No cameras)}}/div> {{/if}} div classcomposite-loading {{^dsettings_cnt}}hidden{{/}}> img src/_images/spinning.gif /> {{translateText(Loading Cameras)}} /div> /div> div classchoose-camera-summary> div classentry>{{uiCountValues(selected_cameras, true)}} {{translateText(Selected)}}/div> div classentry>{{#hide}}{{uiCountValues(hidden_cameras, true)}}{{else}}0{{/}} {{translateText(Hidden)}}/div> div classentry>{{#shouldShowFilteredSet()}}{{Object.keys(filtered_set).length}}{{else}}{{cameras.length}}{{/}} {{translateText(Results)}}/div> div classentry>{{cameras.length}} Total/div> /div> /script> !-- TEMPLATE END :: NewAddCameras --> script typetext/template idDashWrapView-template> div classcontainer-fluid> article classrow-fluid> %if (userList.getCurrentUser().get(is_master)) {%> div iddashboard-container> div classwidget span7 idtranslate-accountSummary> header classwidget-title>i classicon-bar-chart>/i> span>%utils.t(Summary)%>/span>/header> div classwidget-content clearfix idaccount-summary styleoverflow:hidden> /div> /div> div classwidget span5 idtranslate-accountNotifications> header classwidget-title>i classicon-flag>/i> span> %utils.t(System Notifications (last 24 hours))%>/span>/header> div classwidget-content clearfix idaccount-notification> div classaccount-notification-loading>/div> table classtable table-striped> tbody idaccount-notification-rows> /tbody> /table> /div> /div> /div> div classwidget idtranslate-accounts>/div> %} else {%> div idsub-account-dash-container>/div> div iddashboard>/div> !-- Backbone view (AddCameraMessageView.js) - display controlled by DashWidgetsView --> div classwidget idtranslate-addcamera>/div> div idshared-cameras-component>/div> %if(userList.getCurrentUser().checkAddDeleteDevices()){%> div idavailable-cameras-component>/div> %}%> div idswitch-list-component>/div> %}%> /article> /div> /script> !-- TEMPLATE BEGIN :: DeleteCamera--> script idtemplate-DeleteCamera typetext/ractive> div classmodal-header> button typebutton classclose on-clickclose data-dismissmodal aria-hiddentrue>×/button> h3> {{translateText(Delete Camera)}}: {{static_name}} {{#if bridge_name}} {{translateText(on bridge)}} {{bridge_name}}{{/if}} /h3> /div> div classmodal-body> div classrow-fluid> div classspan12> {{#if !is_proxy}} p> {{translateText(WARNING: About to delete camera.)}} /p> p> {{translateText(This will delete the camera completely. No further recordings will be made and ALL video recorded in the cloud and on the local Bridge/CMVR will be deleted. There is NO RECOVERY from this. All the video will be deleted forever.)}} /p> p> {{translateText(Are you REALLY SURE you want to do this?)}} /p> {{else}} p>{{translateText(You can delete the shared camera)}} {{static_name}} {{translateText(from your account. You will no longer be able to access it.)}}/p> {{/if}} /div> /div> /div> div classmodal-footer> p classred>{{delete_camera_response_msg}}/p> button classbtn btn-warning on-clickclose>{{translateText(Cancel)}}/button> button classbtn btn-danger on-clickdelete>{{translateText(Delete)}}/button> /div> /script> !-- TEMPLATE END :: DeleteCamera --> !-- TEMPLATE BEGIN :: DeleteCameraComposite--> script idDeleteCameraWarningComposite-template typetext/ractive> div classrow-fluid> div classspan12> p>{{translateText(WARNING: About to delete camera viewport.)}}/p> p>{{translateText(You are about to delete a camera viewport. No data will be lost.)}}/p> /div> /div> /script> !-- TEMPLATE END :: DeleteCameraComposite --> !-- TEMPLATE BEGIN :: DeleteSpeaker--> script idtemplate-DeleteSpeaker typetext/ractive> div classmodal-header> button typebutton classclose on-clickclose data-dismissmodal aria-hiddentrue>×/button> h3> {{translateText(Delete Speaker)}}: {{static_name}} {{#if bridge_name}} {{translateText(on bridge)}} {{bridge_name}}{{/if}} /h3> /div> div classmodal-body> div classrow-fluid> div classspan12> {{#if !is_proxy}} p> {{translateText(WARNING: About to delete speaker.)}} /p> p> {{translateText(Are you REALLY SURE you want to do this?)}} /p> {{else}} p>{{translateText(You can delete the shared speaker)}} {{static_name}} {{translateText(from your account. You will no longer be able to access it.)}}/p> {{/if}} /div> /div> /div> div classmodal-footer> p classred>{{delete_speaker_response_msg}}/p> button classbtn btn-warning on-clickclose>{{translateText(Cancel)}}/button> button classbtn btn-danger on-clickdelete>{{translateText(Delete)}}/button> /div> /script> !-- TEMPLATE END :: DeleteSpeaker --> !-- TEMPLATE BEGIN :: DeviceWidgetComponent --> script typetext/ractive idDeviceWidgetComponent-template> div classwidget devices-list> header classwidget-title> i classicon-hdd>/i> {{translateText(Bridges)}} / i classicon-facetime-video>/i> {{translateText(Cameras)}} span>{{ui.count_message}}/span> {{#if add_device_dropdown.show_bridge_option || add_device_dropdown.show_camera_option || add_device_dropdown.show_camera_direct_option || add_device_dropdown.show_mass_edit_option }} span classpull-right> div classbtn-group device-dropdown-menu> a href# classdropdown-toggle data-toggledropdown data-testidpage-dashboard-header-dropdown-toggle-button-add-devices > i classfas fa-ellipsis-h>/i> /a> ul classdropdown-menu pull-right> {{#if add_device_dropdown.show_bridge_option}} li on-click@this.addBridge() data-testidpage-dashboard-header-dropdown-menu-add-bridge > a>{{translateText(Add Bridge)}}/a> /li> {{/if}} {{#if add_device_dropdown.show_camera_option && !ui.loading}} li on-click@this.addRtspCamera() data-testidpage-dashboard-header-dropdown-menu-add-rtsp-camera > a>{{translateText(Add Cameras)}}/a> /li> {{/if}} {{#if add_device_dropdown.show_camera_direct_option}} li on-click@this.openDirectCameraModal() data-testidpage-dashboard-header-dropdown-menu-add-direct-camera > a>{{translateText(Add Camera Direct)}}/a> /li> {{/if}} {{#if add_device_dropdown.show_mass_edit_option}} li on-click@this.goToMassEdit(bridge)>a>{{translateText(Mass Edit Bridges)}}/a>/li> li on-click@this.goToMassEdit(camera)>a>{{translateText(Mass Edit Cameras)}}/a>/li> {{/if}} /ul> /div> /span> {{elseif add_device_dropdown.show_bridge_option}} span classpull-right> i on-click@this.addBridge() classicon-plus-sign add-icon title{{translateText(Add Bridge)}} data-testidpage-dashboard-header-button-add-bridge >/i> /span> {{/if}} audio idtalkdown-audio autoplay>/audio> {{#if !ui.no_devices}} span classpull-right pagination-bar--wrapper> PaginationBar page{{ page }} size{{ size }} quantity{{ flat_devices.length }}/> /span> {{/if}} /header> {{#if ui.no_devices && !ui.loading }} div classwidget-content> div classrow-fluid> div classspan6> div stylemargin-left: 15px;> h3>{{translateText(Add Bridge)}}/h3> p>{{translateText(A Bridge is needed to connect your cameras to a cloud data center.)}}/p> p>{{translateText(Make sure the WAN port of your Bridge is connected to the internet and then press the Add Bridge button.)}}/p> /div> /div> div idwrapper-bridges-img classspan6> /div> /div> /div> {{else}} div classwidget-content> table classtable table-striped> thead> tr> th idcamera-table-status stylewidth:5%;>{{translateText(Status)}}/th> th idcamera-table-status-indent stylewidth:5%>/th> {{! ICON COL / CAMERA STATUS - no header text }} th idcamera-table-name stylewidth:25%>{{translateText(Name)}}/th> th idcamera-table-tags stylewidth:25%>{{translateText(Tags)}}/th> th idcamera-table-location stylewidth:20%;> span on-click@this.set(ui.show_location, false) classdevice-location-col {{#if !ui.show_location}}device-location-col-selected{{/if}}> {{translateText(Location)}} /span> / span on-click@this.set(ui.show_location, true) classdevice-location-col {{#if ui.show_location}}device-location-col-selected{{/if}}> {{translateText(Address)}} /span> /th> th stylewidth:20%; min-width: 200px;> {{translateText(Actions)}} /th> /tr> /thead> tbody> {{ #if ui.loading }} {{#each ui.loading_row_count}} tr> td>div classdashboard__skeleton-box>/div>/td> td>div classdashboard__skeleton-box>/div>/td> td>div classdashboard__skeleton-box>/div>/td> td>div classdashboard__skeleton-box>/div>/td> td>div classdashboard__skeleton-box>/div>/td> td>div classdashboard__skeleton-box>/div>/td> /tr> {{/each}} {{else}} {{#each current_devices}} {{> device_row}} {{/each}} {{/if}} /tbody> /table> /div> {{/if}} div idspeakerNotification-component>/div> footer classwidget-title > {{#if !ui.no_devices}} div classpull-right> select iddevices-list--page-size-select classpage-size-select pull-right value{{size}} > option>25/option> option>50/option> option>100/option> option>250/option> option>500/option> /select> label fordevices-list--page-size-select classpage-size-select--label pull-left>{{ translateText(Page size) }}:/label> /div> span classpull-right pagination-bar--wrapper> PaginationBar page{{ page }} size{{ size }} quantity{{ flat_devices.length }}/> /span> {{/if}} /footer> /div> {{#partial device_row}} {{#if this.type_view bridge}} {{#with bridge}} {{> bridge_row}} {{/with}} {{/if}} {{#if this.type_view camera || this.type_view child_view_cameras}} {{#with camera}} {{> camera_row}} {{/with}} {{/if}} {{#if this.type_view composite}} {{#with composite as composite}} {{#with camera as camera}} {{> composite_row}} {{/with}} {{/with}} {{/if}} {{/partial}} {{#partial composite_row}} {{#if (camera.filter_display || camera.hierarchy_display)}} tr data-esn{{camera.deviceID}} data-composite-id{{composite.id}}> td classoffset-cell offset-with-line>/td> td classoffset-cell>/td> td class{{^composite.name}}dim-row{{/}} offset-with-indentation>{{#composite.name}}{{composite.name}}{{else}}(Unnamed - {{composite.id}}){{/}} /td> td> {{#each composite.tags.sort()}} {{#unless excluded_tags.indexOf(this.toLowerCase()) ! -1}} span classtag>a href#/layout_tag/{{this.toLowerCase()}}>{{this.toLowerCase()}}/a>/span> {{/unless}} {{/each}} /td> td> {{! LOCATION COL}} {{#if ui.show_location}} {{#if location_grouping}} {{camera.deviceExtra.location_address}} {{else}} {{camera.deviceLocation4}} {{/if}} {{else}} {{#if location_grouping}} {{camera.deviceExtra.location_name}} {{else}} {{camera.deviceLocation6}} {{! Location name}} {{/if}} {{/if}} /td> td> {{#if user.checkDeviceRecordedVideoByID(camera.deviceID) && !camera.isLiveViewOnly()}} button typebutton classbtn on-click@this.openHistory(camera, composite.id) title{{translateText(view camera history)}}> i classicon-time>/i> /button> {{/if}} button typebutton classbtn on-click@this.openCameraCompositeSettings(camera, composite.id) title{{translateText(change viewport settings)}}> i classicon-cog>/i> /button> {{#if user.checkAddDeleteDevices()}} button typebutton classbtn on-click@this.deleteCameraComposite(camera, composite.id) title{{translateText(remove camera from account) }}> i classicon-trash>/i> /button> {{/if}} /td> /tr> {{/if}} {{/partial}} {{#partial camera_row}} {{#if (this.deviceStatus ATTD && !this.deviceShare) && (this.filter_display || this.hierarchy_display)}} tr data-esn{{this.deviceID}}> {{! TODO: Fix this stupid line logic/css}} {{#if ui.bridges_present || camera.isCloudCamera()}} {{! show connecting line from cameras to bridge }} td classoffset-cell offset-with-line>/td> {{/if}} td class{{#if this.deviceParent}}offset-cell{{/if}}> {{! STATUS COL }} {{#if !this.deviceParent}} {{! Parent/regular camera }} {{#with this as camera}} {{#if camera.isMCACamera() }} {{> partial-mca-camera-status}} {{elseif camera.isDeviceSpeaker() }} {{> partial-speaker-status}} {{elseif camera.isParentCamera() }} {{> partial-camera-status}} {{else}} div {{#if ui.show_preview_bubble}} classstatus-clickable on-click@this.showPreview(camera.deviceID, @node){{/if}}> {{> partial-camera-status}} /div> {{/if}} {{/with}} {{/if}} /td> {{#if !ui.bridges_present && !camera.isCloudCamera()}} {{! offset table cells when there are no bridges }} td>/td> {{/if}} td> {{! NAME COL }} {{#if this.deviceParent}} {{! child view camera }} {{#with this as camera}} span classtable-device-child-camera-status status-clickable on-click@this.showPreview(camera.deviceID, @node, true)> {{> partial-camera-status}} /span> {{/with}} {{this.deviceName}} ({{translateText(View)}}: {{this.deviceChildViewName}}) {{#if this.deviceExtra && this.deviceExtra.associated_speaker}} i classicon-volume icon-volume-device device-speaker-icon>/i> {{/if}} {{elseif this.deviceType multiview_camera}} strong>{{this.deviceName}}/strong> {{else}} {{this.deviceName}} {{#if this.deviceType camera && this.deviceExtra && this.deviceExtra.associated_speaker}} i classicon-volume icon-volume-device device-speaker-icon>/i> {{/if}} {{/if}} /td> td> {{! TAGS COL }} {{#each this.deviceTags.sort()}} {{#unless excluded_tags.indexOf(this.toLowerCase()) ! -1}} span classtag>a href#/layout_tag/{{this.toLowerCase()}}> {{this.toLowerCase()}}/a>/span> {{/unless}} {{/each}} /td> td> {{! LOCATION COL}} {{#if ui.show_location}} {{#if location_grouping}} {{camera.deviceExtra.location_address}} {{else}} {{camera.deviceLocation4}} {{/if}} {{else}} {{#if location_grouping}} {{camera.deviceExtra.location_name}} {{else}} {{camera.deviceLocation6}} {{/if}} {{/if}} /td> td> {{! ACTIONS COL }} {{#if user.checkDeviceRecordedVideoByID(this.deviceID) && this.deviceType ! multiview_camera && !this.isLiveViewOnly() && this.deviceType ! speaker}} button typebutton classbtn on-click@this.openHistory(this) title{{translateText(view camera history)}}> i classicon-time>/i> /button> {{/if}} {{#if this.hasEditPermissions() }} {{#if this.isAbleToTalkdown() }} button typebutton classbtn on-click@this.doTalkdown(this) title{{translateText(directly talk to speaker)}}> i classicon-microphone id{{this.deviceID}}-talkdown-icon styledisplay: block;>/i> /button> {{/if}} {{#if this.deviceType multiview_camera || !!composites && composites.length > 0}} button typebutton classbtn on-click@this.openCameraSettings(this) title{{translateText(change parent camera settings)}}> i classicon-cogs>/i> /button> {{#if available_child_views}} button classbtn btn-info btn-small new-child-view-btn title{{translateText(New View)}} on-click@this.openCameraSettings(camera, views)> i classicon-plus>/i> /button> {{/if}} {{elseif this.deviceType speaker && user.checkSpeakerOnlyShowSettingsByID(this.deviceID)}} button typebutton classbtn on-click@this.openCameraSettings(this) title{{translateText(change speaker settings)}}> i classicon-cog>/i> /button> {{elseif user.checkPTZOnlyShowSettingsByID(this.deviceID)}} button typebutton classbtn on-click@this.openCameraSettings(this) title{{translateText(change camera settings)}}> i classicon-cog>/i> /button> {{/if}} {{#if user.checkDeviceVPN(this) && !this.isCloudCamera() && !this.deviceParent && !this.isAnalog()}} button typebutton {{#unless this.is_status_cloud_registered}}disabled{{/unless}} on-click@this.openVPN(this) {{#if this.deviceType speaker}} title{{translateText(open VPN to speaker)}} {{else}} title{{translateText(open VPN to camera)}} {{/if}} > i classeen-icon-tunnel>/i> /button> {{/if}} {{/if}} {{#if user.checkShowCameraMetricsByID(this.deviceID) && !this.isCloudCamera() && this.deviceType ! speaker}} button typebutton classbtn on-click@this.openAnalytics(this) title{{translateText(open analytics graphs) }}> i classicon-bar-chart>/i> /button> {{/if}} {{#if user.checkAddDeleteDevices()}} {{#if this.deviceType speaker && user.checkAddDeleteSpeakers()}} button typebutton classbtn on-click@this.deleteSpeaker(this) title{{translateText(remove speaker from account) }}> i classicon-trash>/i> /button> {{else}} button typebutton classbtn on-click@this.deleteCamera(this) title{{translateText(remove camera from account) }}> i classicon-trash>/i> /button> {{/if}} {{/if}} /td> /tr> {{/if}} {{/partial}} {{#partial bridge_row}} {{#if this.filter_display || this.hierarchy_display}} tr data-esn{{this.deviceID}}> td classtable-device-status> {{! STATUS COL }} {{#if this.device_state}} {{#if this.is_status_cloud_registered}} i classicon-ok-circle green big-icon title{{translateText(bridge online)}}>/i> {{else}} i classicon-exclamation-sign red big-icon title{{translateText(internet offline)}}>/i> {{/if}} {{/if}} /td> td> {{! ICON COL }} {{#if this.health_summary}} i class{{ui.bridge_iconsthis.health_summary.status}} icon-large bridge-list-row-icon title{{this.health_summary.message}}>/i> {{else}} i classfar fa-hdd icon-large bridge-list-row-icon>/i> {{/if}} /td> td> {{! NAME COL }} strong>{{this.deviceName}}/strong> {{#if @this.checkIsNotFakeBridgeItem(this.deviceID)}} ({{this.attached_cameras_message}}{{this.available_cameras_message}}) {{/if}} div classred>{{this.new_bridge_warning}}/div> /td> td> {{! SERIAL COL }} {{this.deviceSerial}} /td> td> {{! LOCATION COL}} {{#if ui.show_location}} {{#if location_grouping}} {{this.deviceExtra.location_address}} {{else}} {{this.deviceLocation4}} {{/if}} {{else}} {{#if location_grouping}} {{this.deviceExtra.location_name}} {{else}} {{this.deviceLocation6}} {{! Location name}} {{/if}} {{/if}} /td> td> {{! ACTIONS COL }} {{#if @this.checkIsNotFakeBridgeItem(this.deviceID) && !this.deviceIsAdding}} {{#if user.checkBridgeUpdateByID(this.deviceID)}} button typebutton classbtn on-click@this.openBridgeSettings(this) title{{translateText(change bridge settings)}}> i classicon-cog>/i> /button> {{/if}} {{#if user.is_edit_all_and_add && this.isBridgeReplacementAvailable()}} {{! TODO: entire model check }} button typebutton classbtn on-click@this.replaceBridge(this) title{{translateText(replace bridge)}}> i classicon-exchange>/i> /button> {{/if}} {{#if user.checkAddDeleteDevices()}} button typebutton classbtn on-click@this.deleteBridge(this) title{{translateText(remove bridge from account)}}> i classicon-trash>/i> /button> {{/if}} {{/if}} /td> /tr> {{/if}} {{/partial}} /script> !-- TEMPLATE END :: DeviceWidgetComponent --> !-- TEMPLATE BEGIN :: RACTIVE PARTIALS --> script typetext/ractive idpartial-camera-status> {{#if camera.device_state}} {{#if camera.deviceType multiview_camera}} {{! TODO: We need to change this to access the Device and Camera constants instead of string}} {{#if camera.device_state off}} i classicon-ban-circle orange big-icon title{{translateText(camera off)}}> /i> {{elseif camera.device_state online}} i classicon-ok-circle green big-icon title{{translateText(camera online)}}> /i> {{elseif camera.device_state internet offline}} i classicon-exclamation-sign red big-icon title{{translateText(internet offline)}}> /i> {{/if}} {{elseif camera.deviceType cloud_camera}} {{#if camera.device_state online}} i classicon-ok-circle green big-icon title{{translateText(camera online)}}> /i> {{elseif camera.device_state off}} i classicon-ban-circle orange big-icon title{{translateText(camera off)}}> /i> {{else}} i classicon-remove-circle red big-icon title{{translateText(offline)}}> /i> {{/if}} {{else}} {{#if camera.is_status_streaming && camera.is_status_on}} i classicon-ok-circle green big-icon title{{translateText(camera online)}}> /i> {{elseif !camera.is_status_on}} {{#if camera.is_status_bad_analog}} i classicon-exclamation-sign orange big-icon title{{translateText(bad analog signal)}}> /i> {{else}} i classicon-ban-circle orange big-icon title{{translateText(camera off)}}> /i> {{/if}} {{elseif !camera.is_status_cloud_registered}} i classicon-exclamation-sign red big-icon title{{translateText(internet offline)}}> /i> {{elseif camera.is_status_password}} i classicon-lock red big-icon title{{translateText(camera password required)}}> /i> {{else}} i classicon-remove-circle red big-icon title{{translateText(camera offline)}}> /i> {{/if}} {{/if}} {{/if}} /script> script typetext/ractive idpartial-mca-camera-status> {{#if camera.device_state}} {{#if camera.is_mca_camera_mounted}} i classicon-bodycam icon-bodycam-orange big-icon title{{translateText(wearable camera volume is mounted)}}> /i> {{elseif camera.is_status_streaming}} i classicon-bodycam icon-bodycam-green big-icon title{{translateText(connected wearable camera)}}> /i> {{elseif !camera.is_status_on}} !-- this should be orange --> i classicon-bodycam icon-bodycam-black big-icon title{{translateText(disconnected wearable camera)}}> /i> {{elseif !camera.is_status_cloud_registered}} i classicon-bodycam icon-bodycam-black big-icon title{{translateText(disconnected wearable camera)}}> /i> {{elseif camera.is_status_password}} i classicon-lock red big-icon title{{translateText(camera password required)}}> /i> {{else}} i classicon-bodycam icon-bodycam-black big-icon title{{translateText(disconnected wearable camera)}}> /i> {{/if}} {{/if}} /script> script typetext/ractive idpartial-speaker-status> {{#if camera.deviceExtra && camera.speaker_status REDY}} i classicon-ok-circle green big-icon title{{translateText(speaker connected)}}> /i> {{elseif camera.deviceExtra && camera.speaker_status PASS}} i classicon-exclamation-sign orange big-icon title{{translateText(bad password)}}> /i> {{elseif camera.deviceExtra && camera.speaker_status BUSY}} i classicon-ban-circle orange big-icon title{{translateText(device is busy)}}> /i> {{else}} i classicon-remove-circle red big-icon title{{translateText(speaker disconnected)}}> /i> {{/if}} /script> !-- TEMPLATE END :: RACTIVE PARTIALS --> !-- TEMPLATE BEGIN :: editAccountSettings --> script typetext/template ideditAccountSettings-template> % var user userList.getCurrentUser(); %> span classmodal-heading-append> // %-this.model.get(name)%> (%-this.model.get(id)%>)/span> div classtab-pane idacMain> !-- launches help window from help/ data_link attribute + .html --> span idcsCamera-help data_linkaccount_settings_main classpull-right> i classicon-question-sign een-help-link>/i> /span> % if (user.checkTurnAllCamerasOnOff() || user.checkAccountUpdate(user.account)) { %> div classrow-fluid stylemargin-bottom:10px;> button typebutton classoffset2 span4 btn btn-danger idaccountSettings__turn_off_cameras_until data-testidmodal-account-tab-control-button-turn-off-all-cameras > % this.t(Turn off all cameras) %> /button> button typebutton classspan4 btn btn-success idaccountSettings__turn_on_cameras data-testidmodal-account-tab-control-button-turn-on-all-cameras > % this.t(Turn on all cameras) %> /button> /div> % } %> div classrow-fluid hide> button classoffset2 span4 btn btn-info idaccountSettings__disable_alerts_until data-testidmodal-account-tab-control-button-disable-notifications-until > % this.t(Disable Notifications until) %>: /button> div classspan4> div classinput-append bootstrap-timepicker> input idacTimepicker2 typetext maxlength60 classinput-small> span classadd-on>i classicon-time>/i>/span> /div> /div> /div> % if (user.checkAddAPIKey()) { %> div classrow-fluid> button typebutton classoffset2 span4 btn btn-info idjumpToAPIKeys data-testidmodal-account-tab-control-button-create-api-key > % this.t(Create API Keys) %> /button> /div> % } %> br/>br/>br/>br/>br/>br/> /div> div classtab-pane idacDays stylemin-height:260px;> !-- launches help window from help/ data_link attribute + .html --> span classpull-right idcsCamera-help data_linkaccount_settings_days> i classicon-question-sign een-help-link>/i> /span> form classform-horizontal> div classcontrol-group> label classcontrol-label for data-testidmodal-account-tab-days-input-label-time-zone > % this.t(Time Zone) %>: /label> div classcontrols> div classrow-fluid> select idaccountSettings__timezone classspan6> % var model this.model; var user_timezone model.get(timezone); var is_in_timezones_array false; _.each(TIME_ZONES, function(timezone){ var is_selected ; var timezone_name timezone.name; if(user_timezonetimezone_name) { is_in_timezones_array true; is_selected selected; } %> option value%timezone_name%> %is_selected%>>%timezone_name%>/option> %})%> % if(!is_in_timezones_array) { %> option value%user_timezone%> selected>%user_timezone%>/option> % } %> /select> /div> /div> /div> div classcontrol-group> label classcontrol-label for data-testidmodal-account-tab-days-input-label-work-days > % this.t(Work days) %>: /label> div classcontrols> select idaccountSettings__work_days> option value1111000 %(this.model.get(work_days)1111000 ? selected: )%> data-testidmodal-account-tab-days-option-label-monday-thursday >% this.t(Monday - Thursday) %>/option> option value1111100 %(this.model.get(work_days)1111100 ? selected: )%> data-testidmodal-account-tab-days-option-label-monday-friday >% this.t(Monday - Friday) %>/option> option value1111110 %(this.model.get(work_days)1111110 ? selected: )%> data-testidmodal-account-tab-days-option-label-monday-saturday >% this.t(Monday - Saturday) %>/option> option value1111111 %(this.model.get(work_days)1111111 ? selected: )%> data-testidmodal-account-tab-days-option-label-7-days >% this.t(7 days/week) %>/option> /select> /div> /div> div classcontrol-group> label classcontrol-label for data-testidmodal-account-tab-days-input-label-work-hours > % this.t(Work hours) %>: /label> div classcontrols> div classinput-append bootstrap-timepicker> input idaccountSettings__work_hours_from typetext maxlength60 classinput-small> span classadd-on>i classicon-time>/i>/span> /div> To div classinput-append bootstrap-timepicker> input idaccountSettings__work_hours_to typetext maxlength60 classinput-small> span classadd-on>i classicon-time>/i>/span> /div> /div> /div> div classcontrol-group stylemargin-bottom:245px !important;display:none> label classcontrol-label for data-testidmodal-account-tab-days-input-label-holiday-list > % this.t(Holiday list) %>: /label> div classcontrols> div classrow-fluid> table idaccountSettings__holidays classtable table-condensed table-bordered table-striped pull-left stylewidth:190px;margin-bottom:10px;> % _.each(this.model.get(holidays), function(item) { %> tr>td>%item%> button typebutton classclose>×/button>/td>/tr> % }); %> /table> div classpull-left stylemargin-left:10px;margin-top:5px;>(% this.t(Holidays will be excluded from \work days\) %>)/div> /div> div classrow-fluid> div classpull-left bfh-datepicker data-formaty-m-d data-date> div classinput-prepend bfh-datepicker-toggle data-togglebfh-datepicker> span classadd-on>i classicon-calendar>/i>/span> input idaccountSettings__holiday typetext classinput-medium readonly> /div> div classbfh-datepicker-calendar> table classcalendar table table-bordered> thead> tr classmonths-header> th classmonth colspan4> a classprevious href#>i classicon-chevron-left>/i>/a> span>/span> a classnext href#>i classicon-chevron-right>/i>/a> /th> th classyear colspan3> a classprevious href#>i classicon-chevron-left>/i>/a> span>/span> a classnext href#>i classicon-chevron-right>/i>/a> /th> /tr> tr classdays-header> /tr> /thead> tbody> /tbody> /table> /div> /div> button classpull-left btn btn-info idaccountSettings__add_holiday>% this.t(Add Holiday) %>/button> /div> /div> /div> /form> /div> div classtab-pane idacClients> ul classnav nav-tabs> li classactive>a href#acClients_general data-toggletab>%this.t(General)%>/a>/li> li classana-tab hide idacClients_password_management_tab>a href#acClients_password_management data-toggletab>%this.t(Password)%>/a>/li> li classana-tab hide idacClients_IdentityProvider_tab>a href#acClients_IdentityProvider data-toggletab>%this.t(Identity Provider)%>/a>/li> /ul> div classtab-content idacClients-panes> div classtab-pane active idacClients_general> !-- launches help window from help/ data_link attribute + .html --> span classpull-right idcsCamera-help data_linkaccount_settings_security> i classicon-question-sign een-help-link>/i> /span> form classform-horizontal> div classcontrol-group hide> label classcontrol-label for data-testidmodal-account-tab-security-input-label-allow-mobile-client-access > % this.t(Allow mobile client access) %>: /label> div classcontrols> input idaccountSettings__enable_mobile typecheckbox value1 %(this.model.get(enable_mobile)1 ? checked : )%>> /div> /div> div classcontrol-group> label classcontrol-label for data-testidmodal-account-tab-security-input-label-web-timeout > % this.t(Web Timeout) %>: /label> div classcontrols> select idaccountSettings__session_duration classspan2> option value15 %(this.model.get(session_duration)15 ? selected : )%>>15 % this.t(minutes) %>/option> option value60 %(this.model.get(session_duration)60 ? selected : )%>>1 % this.t(hour) %>/option> option value240 %(this.model.get(session_duration)240 ? selected : )%>>4 % this.t(hours) %>/option> option value480 %(this.model.get(session_duration)480 ? selected : )%>>8 % this.t(hours) %>/option> option value720 %(this.model.get(session_duration)720 ? selected : )%>>12 % this.t(hours) %>/option> option value1440 %(this.model.get(session_duration)1440 ? selected : )%>>24 % this.t(hours) %>/option> option value10080 %(this.model.get(session_duration)10080 ? selected : )%>>1 % this.t(week) %>/option> /select> /div> /div> div classcontrol-group> label classcontrol-label for data-testidmodal-account-tab-security-input-label-inactive-session-timeout > % this.t(Inactive Session Timeout) %>: /label> div classcontrols> select idaccountSettings__inactive_session_timeout classspan2> option value %(this.model.get(inactive_session_timeout)null ? selected : )%>>% this.t(None) %>/option> option value5 %(this.model.get(inactive_session_timeout)5 ? selected : )%>>5 % this.t(minutes) %>/option> option value15 %(this.model.get(inactive_session_timeout)15 ? selected : )%>>15 % this.t(minutes) %>/option> option value60 %(this.model.get(inactive_session_timeout)60 ? selected : )%>>1 % this.t(hour) %>/option> option value240 %(this.model.get(inactive_session_timeout)240 ? selected : )%>>4 % this.t(hours) %>/option> option value480 %(this.model.get(inactive_session_timeout)480 ? selected : )%>>8 % this.t(hours) %>/option> option value720 %(this.model.get(inactive_session_timeout)720 ? selected : )%>>12 % this.t(hours) %>/option> option value1440 %(this.model.get(inactive_session_timeout)1440 ? selected : )%>>24 % this.t(hours) %>/option> /select> /div> /div> div classcontrol-group> label classcontrol-label for data-testidmodal-account-tab-security-input-label-max-login-attempts > % this.t(Max Login Attempts) %>: /label> div classcontrols> input idaccountSettings__login_attempt_limit typetext maxlength2 classspan1 value%-(this.model.get(login_attempt_limit))%> /> /div> /div> div classcontrol-group> label classcontrol-label data-testidmodal-account-tab-security-input-label-include-picture-in-notifications > % this.t(Include Picture in System Notifications) %>: /label> div classcontrols> div classrow-fluid> div classspan1> input typecheckbox idaccountSettings__is_system_notification_images_enabled value1 %(this.model.get(is_system_notification_images_enabled) ? checked : )%> /> /div> /div> /div> /div> div classcontrol-group style% if (user.get(active_brand_subdomain) hkt) { %>display:none% } %>> label classcontrol-label data-testidmodal-account-tab-security-input-label-enable-two-factor-for-all-users > % this.t(Enable Two Factor Authentication for all users) %>: /label> div classcontrols> div classrow-fluid> div classspan1> input idaccountSettings__is_two_factor_authentication_forced typecheckbox value1 %this.model.get(is_two_factor_authentication_forced) ? checked : %>/> /div> /div> /div> /div> div classcontrol-group hide> label classcontrol-label for data-testidmodal-account-tab-security-input-label-white-list-ips > % this.t(Limit access to following IPs) %>: /label> div classcontrols> div classrow-fluid> div classspan1> input idaccountSettings__enable_ip_restrictions typecheckbox value1 %(this.model.get(enable_ip_restrictions)1 ? checked : )%>> /div> div classspan10> input idaccountSettings__ip_address typetext classspan5 placeholder192.168.123.0/24> button typebutton classbtn btn-info no-left-margin idaccountSettings__add_ip_address>% this.t(Add IP Range) %>/button> div classspan5 no-left-margin> table idaccountSettings__ip_addresses classtable table-condensed table-bordered table-striped> % _.each(this.model.get(allowable_ip_address_range), function(item) { %> tr>td>%-item%> button typebutton classclose>×/button>/td>/tr> % }); %> /table> /div> /div> /div> /div> /div> /form> /div> div classtab-pane idacClients_password_management> !-- launches help window from help/ data_link attribute + .html --> span classpull-right idcsCamera-help data_linkaccount_settings_security_password> i classicon-question-sign een-help-link>/i> /span> div idac-password-management>/div> /div> div classtab-pane idacClients_IdentityProvider> span classpull-right> a idcsCamera-help data_linksub_account_settings_security_idp> i classicon-question-sign icon-question-sign-font-size>/i> /a> /span> div idac-identity-provider>/div> /div> /div> /div> div classtab-pane idacCamera> !-- launches help window from help/ data_link attribute + .html --> span classpull-right idcsCamera-help data_linkaccount_settings_camera> i classicon-question-sign een-help-link>/i> /span> form classform-horizontal> div classcontrol-group> label classcontrol-label for data-testidmodal-account-tab-camera-input-label-enable-rtsp > % this.t(Enable RTSP cameras) %>: /label> div classcontrols> div classrow-fluid> div classspan2> input idaccountSettings__is_rtsp_cameras_enabled typecheckbox value1 %(this.model.get(is_rtsp_cameras_enabled)1 ? checked : )%>> /div> /div> /div> /div> div classcontrol-group> label classcontrol-label for data-testidmodal-account-tab-camera-input-label-standard-camera-logins >% this.t(Standard Camera Logins) %>: div stylemargin-top:10px;font-size:12px data-testidmodal-account-tab-camera-input-label-enable-rtsp-help-text > (% this.t(If you use a standard account username and password for your onvif login, you can enter it here and you will not have to enter it on each camera.) %>) /div> /label> div classcontrols> div classrow-fluid> div classspan12> input typetext idaccountSettings__new_username maxlength32 classspan5 placeholder% this.t(username) %>> input typetext idaccountSettings__new_password maxlength32 classspan5 placeholder% this.t(password) %>> button classbtn btn-info idaccountSettings__add_password>% this.t(Add) %>/button> div classspan10 no-left-margin small-right-padding> table idaccountSettings__default_camera_passwords classtable table-condensed table-bordered table-striped> %if(this.model.get(default_camera_passwords)){%> % _.each(this.model.get(default_camera_passwords).split(,), function(item) { %> tr>td stylewidth:50%>%-item.split( )0%>/td>td stylewidth:50%>%-item.split( )1%> button typebutton classclose>×/button>/td>/tr> % }); %> % } %> /table> /div> /div> /div> /div> /div> /form> /div> div classtab-pane idacAlerts> !-- launches help window from help/ data_link attribute + .html --> span classpull-right idcsCamera-help data_linkaccount_settings_alerts> i classicon-question-sign een-help-link>/i> /span> form classform-horizontal> label classcontrol-label for data-testidmodal-account-tab-alerts-input-label-active-alert-mode > % this.t(Active Alert Mode) %>: /label> div classcontrols> div classrow-fluid> select classspan6 idaccountSettings__active_alert_mode> % _.each(this.model.get(alert_modes), function(item) { %> option value%item.alert_mode%> %(item.is_active1 ? selected: )%>>%-item.alert_mode%>/option> % }); %> /select> div stylemargin-left:0px !important;margin-top:5px;> input typetext idaccountSettings__new_alert_mode maxlength32 classspan6 placeholder% this.t(New Alert Mode Name) %>> button classbtn btn-info idaccountSettings__add_alert_mode>% this.t(Add Alert Mode) %>/button> div classspan6 no-left-margin> table idaccountSettings__alert_modes classtable table-condensed table-bordered table-striped> % _.each(this.model.get(alert_modes), function(item) { %> tr>td>%-item.alert_mode%>button typebutton classclose>×/button>/td>/tr> % }); %> /table> /div> /div> /div> /div> %if(user.getAccount().get(is_sureview_enabled)){%> div classcontrol-group> label classcontrol-label for data-testidmodal-account-tab-alerts-input-label-immix-custom-ip >% this.t(Immix Custom IP) %>:/label> div classcontrols> input idaccountSettings__sureview_location_ip typetext maxlength63 classspan3 value%-(this.model.get(sureview_location_ip))%> /> /div> /div> div classcontrol-group> label classcontrol-label for data-testidmodal-account-tab-alerts-input-label-immix-custom-port > % this.t(Immix Custom Port) %>: /label> div classcontrols> input idaccountSettings__sureview_location_port typetext maxlength8 classspan3 value%-(this.model.get(sureview_location_port))%> /> /div> /div> %}%> /form> /div> div classtab-pane idacNotifications> !-- launches help window from help/ data_link attribute + .html --> span classpull-right idcsCamera-help data_linkaccount_settings_notifications> i classicon-question-sign een-help-link>/i> /span> form classform-horizontal> %if(user.checkIsAvailableShowHealthStatus() && !user.checkIsSwitchedReseller()){%> div classcontrol-group> label classcontrol-label stylewidth:180px data-testidmodal-account-tab-notifications-input-label-disable-bridge-health > % this.t(Disable Bridge Health Display) %>: /label> div classcontrols stylemargin-left:200px> div classrow-fluid> div classspan1> input typecheckbox idaccountSettings__is_bridge_health_enabled value1 %(!user.account.get(is_bridge_health_enabled) ? checked : )%> /> /div> /div> /div> /div> %}%> /form> /div> div classtab-pane idacMasterVideo> span classpull-right idcsCamera-help data_linkaccount_settings_privacy> i classicon-question-sign een-help-link>/i> /span> form classform-horizontal> div classcontrol-group title%this.t(Only check this box if you are very concerned about privacy.)%>> label classcontrol-label stylewidth:180px data-testidmodal-account-tab-privacy-input-label-video-privacy > % this.t(Video Privacy) %>: /label> div classcontrols stylemargin-left:200px> div classrow-fluid> div classspan1> input typecheckbox idaccountSettings__is_master_video_disabled value1 %((user.isOwnedByMasterAccount() || !this.model.get(is_master_video_disabled_allowed)) ? disableddisabled : )%> %(this.model.get(is_master_video_disabled) ? checked : )%> /> /div> /div> /div> /div> /form> /div> div classtab-pane idacSharing> !-- launches help window from help/ data_link attribute + .html --> span classpull-right idcsCamera-help data_linkaccount_settings_sharing> i classicon-question-sign een-help-link>/i> /span> form classform-horizontal> div classcontrol-group> div classrow-fluid> div classspan5 data-testidmodal-account-tab-sharing-input-label-available-cameras > % this.t(Available Cameras)%> /div> div classspan5 offset1 data-testidmodal-account-tab-sharing-input-label-cameras-to-share > % this.t(Cameras To Share)%> /div> /div> div classrow-fluid idaccountSettings__camera_share_menu> /div> /div> div classcontrol-group> label classcontrol-label for data-testidmodal-account-tab-sharing-input-label-permissions > % this.t( Permissions ) %>: /label> div classcontrols> div classrow-fluid> div classspan4> select multiplemultiple idaccountSettings__camera_share_permissions> % _.each(this.model.get(available_share_permissions), function(item) { %> option value% itemid %> title% itemtitle%>>% itemname %>/option> % }) %> /select> /div> /div> /div> /div> div classcontrol-group> label classcontrol-label for data-testidmodal-account-tab-sharing-input-share-email-addresses > % this.t(Share Email Addresses) %>: /label> div classcontrols> div classrow-fluid> div classspan12> div classspan9> textarea idaccountSettings__camera_share_emails classspan12 styleheight: 70px; maxlength2000>/textarea> /div> div classspan5> button stylemargin-top:40px classspan12 btn btn-info idaccountSettings__add_camera_share data-testidmodal-account-tab-sharing-button-save-share > % this.t(Save Share) %> /button> /div> /div> /div> /div> /div> div classrow-fluid> h5 data-testidmodal-account-tab-sharing-header-shared-cameras >% this.t(Shared Cameras) %>/h5> /div> div classrow-fluid stylewidth:99%> table classtable table-condensed table-bordered table-striped idaccountSettings__camera_shares> thead> tr> th stylewidth: 27% data-testidmodal-account-tab-sharing-table-header-account > % this.t(Account) %> /th> th stylewidth: 40% data-testidmodal-account-tab-sharing-table-header-cameras > % this.t(Cameras) %> /th> th stylewidth: 21% data-testidmodal-account-tab-sharing-table-header-permissions > % this.t(Permissions)%> /th> th stylewidth: 12% data-testidmodal-account-tab-sharing-table-header-actions > % this.t(Actions) %> /th> /tr> /thead> tfoot> tr> td> /td> td>/td> td>/td> td>/td> /tr> /tfoot> tbody> % _.each(this.model.get(shares_by_account), function(item) { %> tr idshare_%item.email.replace(@, _).replace(+,_).replace(., _)%> data-email%item.email%> data-perms%item.perms.join(,)%> data-cameras%item.cameras.join(,)%>> td> %-item.email + ( + item.name + )%> /td> td> %-item.camera_names.join(, )%> /td> td> %item.perms_readable.join(, )%> /td> td> button classedit-camera-share>i classicon-pencil>/i>/button>button classremove-camera-share>i classicon-trash>/i>/button> /td> /tr> % }) %> /tbody> /table> /div> /form> /div> div classtab-pane idacResponders> !-- launches help window from help/ data_link attribute + .html --> span classpull-right idcsCamera-help data_linkaccount_settings_responder> i classicon-question-sign een-help-link>/i> /span> div classrow-fluid> div classspan5 data-testidmodal-account-tab-responders-input-label-available-cameras > % this.t(Available Cameras)%> /div> div classspan5 offset1 data-testidmodal-account-tab-responders-input-label-video-responder-cameras > % this.t(Responder Cameras)%> /div> /div> div idaccounts_settings_responder_menu stylemargin-bottom: 5px;> /div> form classform-horizontal> div classcontrol-group> label classcontrol-label for data-testidmodal-account-tab-responders-input-label-email > % this.t(Email) %>: /label> div classcontrols> div classrow-fluid control-group> input typetext maxlength60 idaccountSettings__nominee_responder_email placeholder*% this.t(Responder Nominee Email)%>> /div> /div> label classcontrol-label for data-testidmodal-account-tab-responders-input-label-first-name > % this.t(First Name) %>: /label> div classcontrols> div classrow-fluid control-group> input typetext maxlength60 idaccountSettings__nominee_responder_f_name placeholder% this.t(First Name)%>> /div> /div> label classcontrol-label for data-testidmodal-account-tab-responders-input-label-last-name > % this.t(Last Name) %>: /label> div classcontrols> div classrow-fluid control-group> input typetext maxlength60 idaccountSettings__nominee_responder_l_name placeholder% this.t(Last Name)%>> /div> /div> label classcontrol-label for data-testidmodal-account-tab-responders-input-label-organization > % this.t(Organization) %>: /label> div classcontrols> div classrow-fluid control-group> input typetext maxlength60 idaccountSettings__nominee_responder_org placeholder% this.t(Organization)%>> button classbtn btn-info idaccountSettings__nominate_responder>% this.t(Nominate)%>/button> /div> /div> /div> label foraccountSettings__first_responder_list data-testidmodal-account-tab-responders-header-first-responder-list > % this.t(First Responders List) %>: /label > div classcontrol-group> div classrow-fluid> table classtable table-condensed table-bordered table-striped idaccountSettings__first_responder_list> tr> th stylewidth:21% data-testidmodal-account-tab-responders-table-header-email > % this.t(Email) %> /th> th stylewidth:21% data-testidmodal-account-tab-responders-table-header-first-name > % this.t(First Name) %> /th> th stylewidth:21% data-testidmodal-account-tab-responders-table-header-last-name > % this.t(Last Name) %> /th> th stylewidth:21% data-testidmodal-account-tab-responders-table-header-organization > % this.t(Organization) %> /th> th stylewidth:5% data-testidmodal-account-tab-responders-table-header-active > % this.t(Active) %> /th> th stylewidth:11% data-testidmodal-account-tab-responders-table-header-action > % this.t(Actions) %> /th> /tr> /table> /div> /div> /form> /div> div classtab-pane idacDefaults> !-- launches help window from help/ data_link attribute + .html --> span classpull-right idcsCamera-help data_linkaccount_settings_retention> i classicon-question-sign een-help-link>/i> /span> form classform-horizontal modal-form-centered> h5>% utils.t(Camera Defaults) %>/h5> div idac-default-cloud-preview-only>/div> div idac-default-cloud-retention>/div> div idac-default-min-local-retention>/div> div idac-default-max-local-retention>/div> div idac-default-preview-resolution>/div> div idac-default-full-video-resolution>/div> /form> /div> div classtab-pane idacEdition> form classform-horizontal> div idacEdition_container> /div> /form> /div> /script> !-- TEMPLATE END :: editAccountSettings --> !-- TEMPLATE BEGIN :: EditBridgeMetricsTab --> script typetext/template ideditBridgeMetricsTab-template> div classtab-pane %tab_active_class%> ideditBridge__metrics_%metric_id%>> i classchart-update icon-cloud-upload editBridge__metrics__chart_update_icon %upload_icon_custom_class%> titleupdate bandwidth metrics>/i> div ideditBridge__metrics_%metric_id%>_chart classeditBridge__metrics__chart>/div> div ideditBridge__metrics_%metric_id%>__big_text classeditBridge__metrics__big_text> h2 ideditBridge__metrics_%metric_id%>__big_text_content classeditBridge-metrics-big-text-content>/h2> i classicon-refresh chart-refresh-big icon-3x>/i> /div> /div> /script> !-- TEMPLATE BEGIN :: EditBridgeView --> script typetext/template ideditBridgeView-template> span classmodal-heading-append> // %-model.get(deviceName)%>/span> div classtab-pane active ideditBridge__bridge> div classpull-right> a classaccordion-toggle idtoggleAdvSettings> span data-testidmodal-edit-bridge-tab-bridge-advanced > % this.t(Advanced) %> /span> /a> span idcsCamera-help data_linkbridge_settings_main> i classicon-question-sign een-help-link>/i> /span> /div> form classform-horizontal> div classcontrol-group> label classcontrol-label for data-testidmodal-edit-bridge-tab-bridge-input-label-bridge-name > % this.t(Bridge Name) %>: /label> div classcontrols> div classrow-fluid> input ideditBridge__name classspan6 typetext maxlength45 value%- model.get(deviceName) %>/> /div> /div> /div> div classcontrol-group> label classcontrol-label for data-testidmodal-edit-bridge-tab-bridge-input-label-time-zone > % this.t(Time Zone) %>: /label> div classcontrols> div classrow-fluid> select ideditBridge__timezone classspan6> % var model this.model; var device_timezone model.get(deviceTZ); var is_in_timezones_array false; _.each(TIME_ZONES, function(timezone){ var is_selected ; var timezone_name timezone.name; if(device_timezonetimezone_name) { is_in_timezones_array true; is_selected selected; } %> option value%timezone_name%> %is_selected%>>%timezone_name%>/option> %})%> % if(!is_in_timezones_array) { %> option value%device_timezone%> selected>%device_timezone%>/option> % } %> /select> /div> /div> /div> %if(model.get(camera_settings).video_standard){%> div classcontrol-group ideditBridge__video_standard_row styledisplay: none;> label classcontrol-label for data-testidmodal-edit-bridge-tab-bridge-input-label-video-standard > % this.t(Video Standard) %>: /label> div classcontrols> div classrow-fluid> div classcamera-setting span4> select classspan11 ideditBridge__video_standard>/select> /div> /div> /div> /div> %}%> div classcontrol-group basic-setting> label classcontrol-label for data-testidmodal-edit-bridge-tab-bridge-input-label-upnp-enabled > % this.t(UPNP Enabled) %>: /label> div classcontrols> div classrow-fluid> div classspan1 camera-setting> input typecheckbox ideditBridge__upnp_enable value1/> /div> /div> /div> /div> % if(this.has_ignition_switch) { %> div classcontrol-group basic-setting> label classcontrol-label for data-testidmodal-edit-bridge-tab-bridge-input-label-delayed-shutdown > % this.t(Delayed shutdown) %>: /label> div classcontrols> div classrow-fluid> div classspan4 camera-setting> select classspan12 ideditBridge__delayed_shutdown__schedule> option value0>0/option> option value30>30/option> option value60>60/option> option value120>120/option> /select> /div> div classspan4 camera-setting>% this.t(minutes) %>/div> /div> /div> /div> % } %> div classcontrol-group> label classcontrol-label for data-testidmodal-edit-bridge-tab-bridge-input-label-default-transmit-mode > % this.t(Default Bandwidth) %>: /label> div classcontrols> div classrow-fluid> label classcontrol-label for stylewidth: 90px !important; > % this.t(Low data mode) %>: /label> div classcontrols stylemargin-left: 110px;> div classrow-fluid title%this.t(Low data mode)%>> div classcamera-setting span1> input typecheckbox ideditBridge__low_data_mode/> /div> /div> /div> /div> div classrow-fluid> div classspan6 camera-setting ideditBridge__bandwidth_background stylepadding-top: 5px;> /div> div classspan6 camera-setting stylepadding-left: 30px data-testidmodal-edit-bridge-tab-bridge-input-info-current-transmit-bandwidth > % if(this.bandwidth_currently_used_text) { %> div> % this.t(Measured) %>: % this.bandwidth_currently_used_text %> % if(this.is_bandwidth_limit_exceeded) { %> i classicon-question-sign een-help-link title% this.is_bandwidth_limit_exceeded_title %>>/i> % } %> /div> % } %> % if(this.bandwidth_allocated_text) { %> div>% this.t(Allocated) %>: % this.bandwidth_allocated_text %>/div> % } %> /div> /div> /div> /div> div classcontrol-group> label classcontrol-label for data-testidmodal-edit-bridge-tab-bridge-input-label-scheduled-transmit-mode > % this.t(Scheduled Bandwidth) %>: /label> div classcontrols> div classrow-fluid> div classspan4 camera-setting> select classspan12 ideditBridge__bandwidth_background__schedule> option value>%this.t(Off)%>/option> option valuework>% this.t(Work hours) %> (%model.get(camera_work_hours)%>)/option> option valuenonwork>% this.t(Non-working hours) %>/option> option valuecustom>% this.t(Custom) %>/option> /select> /div> div classspan4 camera-setting> div classspan11 ideditBridge__bandwidth_background__scheduled>/div> /div> /div> div classrow-fluid> div classspan4 camera-setting> div ideditBridge__bandwidth_background__schedule__custom>/div> /div> /div> /div> /div> div classcontrol-group basic-setting> label classcontrol-label for data-testidmodal-edit-bridge-tab-bridge-input-label-media-shortcut-enabled > % this.t(Media Shortcut Enabled) %>: /label> div classcontrols> div classrow-fluid shortcut-setting> div classspan1 camera-setting> input typecheckbox ideditBridge__shortcut_enable /> /div> /div> /div> /div> div classcontrol-group basic-setting> label classcontrol-label for data-testidmodal-edit-bridge-tab-bridge-input-label-media-shortcut-override > % this.t(Media Shortcut Override) %>: /label> div classcontrols> div classrow-fluid> div classspan1 camera-setting> input typetext ideditBridge__local_ipaddr_template value%model.get(camera_settings).local_ipaddr_template%> maxlength54/> /div> /div> /div> /div> div classcontrol-group> label classcontrol-label for data-testidmodal-edit-bridge-tab-bridge-input-label-bridge-information > % this.t(Bridge Information) %>: /label> div classcontrols> div ideditBridge__device_info classinfo-box> %if(model.get(camera_info)){%> div classrow-fluid tech-details> div classspan4 text-right data-testidmodal-edit-bridge-tab-bridge-information-firmware > % this.t(Firmware) %>: /div> div classspan7> %-model.get(camera_info).version%> /div> /div> div classrow-fluid> div classspan4 text-right data-testidmodal-edit-bridge-tab-bridge-information-ssn > % this.t(SSN) %>: /div> div classspan7> %-model.get(camera_info).ssn%> /div> /div> div classrow-fluid> div classspan4 text-right data-testidmodal-edit-bridge-tab-bridge-information-ip-address > % this.t(IP Address) %>: /div> div classspan7> %if(model.get(camera_info).ipaddr && model.get(camera_settings).http_local_enable){%> a hrefhttps://%-model.get(camera_info).ipaddr%> target_blank title%this.t(Open local display)%>>%-model.get(camera_info).ipaddr%>/a> %}else{%> %-(model.get(camera_info).ipaddr || not available)%> %}%> /div> /div> div classrow-fluid> div classspan4 text-right data-testidmodal-edit-bridge-tab-bridge-information-esn > % this.t(ESN) %>: /div> div classspan7> %- (model.get(deviceID) ? model.get(deviceID) : this.t(not available)) %> /div> /div> div classrow-fluid> div classspan4 text-right data-testidmodal-edit-bridge-tab-bridge-information-guid > % this.t(GUID) %>: /div> div classspan7> %- (model.get(deviceID) ? model.get(deviceGUID) : this.t(not available)) %> /div> /div> div classrow-fluid bridge-rtsp-row hide> div> div classspan4 text-right data-testidmodal-edit-bridge-tab-bridge-information-rtsp-stream > % this.t(QL Stream (RTSP)) %>: /div> div classspan7> img src/_images/spinning.gif classrtsp-loader alt> span classrtsp-data> span idrtsp-url-placeholder>/span> i classrtsp-copy-el icon icon-copy title% this.t(Copy to clipboard) %>>/i> /span> /div> /div> div classbridge-rtsp-auth-data hide > div classno-rtsp-auth-info hide row-fluid text-center data-testidmodal-edit-bridge-tab-bridge-information-stream-info-text > % this.t(QL Stream (RTSP) is secured, contact account user for stream credentials) %> /div> div classrtsp-auth-info> div> div classspan4 text-right data-testidmodal-edit-bridge-tab-bridge-information-rtsp-username > % this.t(QL Stream Username) %>: /div> div classspan7> img src/_images/spinning.gif classrtsp-loader alt> span classrtsp-data> span idrtsp-auth-username-placeholder>/span> i classrtsp-copy-el icon icon-copy title% this.t(Copy to clipboard) %>>/i> /span> /div> /div> div> div classspan4 text-right data-testidmodal-edit-bridge-tab-bridge-information-rtsp-password > % this.t(QL Stream Password) %>: /div> div classspan7> img src/_images/spinning.gif classrtsp-loader alt> span classrtsp-data> span idrtsp-auth-password-placeholder>/span> i classrtsp-copy-el icon icon-copy title% this.t(Copy to clipboard) %>>/i> /span> /div> /div> /div> /div> /div> %}else{%> div classrow-fluid> div classspan11 text-center data-testidmodal-edit-bridge-tab-bridge-information-not-available > % this.t(Not available at this time) %> /div> /div> %}%> %if(model.get(WAN)){%> div classrow-fluid> %var wan model.get(WAN) || {};%> div classspan4 text-right data-testidmodal-edit-bridge-tab-bridge-information-wan > % this.t(WAN) %>: /div> div classspan7> % this.getSpeedMessage(wan) %>br /> /div> /div> %}%> %if(model.get(CamLAN)){%> div classrow-fluid> %var cam_lan model.get(CamLAN) || {};%> div classspan4 text-right data-testidmodal-edit-bridge-tab-bridge-information-cam-lan > % this.t(CamLan) %>: /div> div classspan7> % this.getSpeedMessage(cam_lan) %>br /> /div> /div> %}%> %var can_see_restart_bridge can_restart_bridge && (userList.getCurrentUser().checkIsSwitchedReseller() || debug_mode_enabled || utils.isRestartBridgeButtonVisible());%> div classrow-fluid restart-bridge-row % can_see_restart_bridge ? : hidden %>> button ideditBridge__restart classbtn btn-mini btn-info span2 data-testidmodal-edit-bridge-tab-bridge-button-restart > %this.t(Restart)%> /button> /div> /div> /div> /div> /form> % if(userList.getCurrentUser().checkAddDeleteDevices()) { %> button classignore btn btn-inverse stylemargin-bottom: 8px; margin-left: 200px; data-id% model.get(deviceID) %> title% this.t(remove bridge from account) %> data-testidmodal-edit-bridge-tab-bridge-button-delete-bridge > %this.t(Delete Bridge)%> /button> % } %> % if(userList.getCurrentUser().checkTurnCameraOnOff(model)){%> button typebutton classbtn btn-danger stylemargin-bottom: 8px; ideditBridge__allOff title% this.t(Turn Off All Cameras) %> data-testidmodal-edit-bridge-tab-bridge-button-turn-off-cameras > %this.t(Turn Off Cameras)%> /button> button typebutton classbtn btn-success stylemargin-bottom: 8px; ideditBridge__allOn title% this.t(Turn On All Cameras) %> data-testidmodal-edit-bridge-tab-bridge-button-turn-on-cameras > %this.t(Turn On Cameras)%> /button> %}%> /div> div classtab-pane ideditBridge__location> span classpull-right idcsCamera-help data_linkbridge_location> i classicon-question-sign een-help-link>/i> /span> form classform-horizontal> div classcontrol-group camera-setting> label classcontrol-label for data-testidmodal-edit-bridge-tab-location-input-label-location-name > % this.t(Location Name) %>: /label> div classcontrols> div classrow-fluid> % if(this.is_location_feature_enabled) { %> div ideditBridgeModal_location_select classspan9>/div> % if(this.is_edit_location_permission) { %> div ideditBridgeModal_location_add_button>/div> % } %> % } else { %> input classspan9 typetext ideditBridge__site_name maxlength255 placeholder value%- model.get(site_name) %>/> % } %> /div> /div> /div> div classcontrol-group camera-setting> label classcontrol-label for data-testidmodal-edit-bridge-tab-location-input-label-street-address > % this.t(Street Address) %>: /label> div classcontrols> div classrow-fluid> input classspan9 input-xlarge typetext % if(this.is_location_feature_enabled) { %> disabled % } %> ideditBridge__street_address maxlength255 placeholder value%- model.get(street_address) %>/> % if(!userList.getCurrentUser().checkFeatureFlag(location_groups) || !userList.getCurrentUser().checkEditLocationGroup()) { %> (% this.t(street, city, state, zip) %>) % } %> /div> /div> /div> % if(this.is_location_feature_enabled) { %> div classcontrol-group camera-setting> div classcontrols> div classrow-fluid> input classspan9 input-xlarge typetext disabled ideditBridge__street_address_2 maxlength255 placeholder value%- model.get(street_address_2) %> /> /div> /div> /div> div classcontrol-group camera-setting> label classcontrol-label for data-testidmodal-edit-bridge-tab-location-input-label-city > % this.t(City) %>: /label> div classcontrols> div classrow-fluid> div classspan3> input classinput-mini span10 typetext disabled ideditBridge__city maxlength255 placeholder value%- model.get(city) %>/> /div> label classcontrol-label span4 for data-testidmodal-edit-bridge-tab-location-input-label-region > % this.t(State / Province / Region) %>: /label> div classspan2> input classinput-mini span12 typetext disabled ideditBridge__region maxlength255 placeholder value%- model.get(state) %>/> /div> /div> /div> /div> div classcontrol-group camera-setting> label classcontrol-label for data-testidmodal-edit-bridge-tab-location-input-label-country > % this.t(Country) %>: /label> div classcontrols> div classrow-fluid> div classspan3> input classinput-mini span10 typetext disabled ideditBridge__country maxlength255 placeholder value%- model.get(country) %>/> /div> label classcontrol-label span4 for data-testidmodal-edit-bridge-tab-location-input-label-postal-code > % this.t(ZIP / Postal Code) %>: /label> div classspan2> input classinput-mini span12 typetext disabled ideditBridge__zip_code maxlength255 placeholder value%- model.get(zip_code) %>/> /div> /div> /div> /div> % } %> div classcontrol-group camera-setting> label classcontrol-label for data-testidmodal-edit-bridge-tab-location-input-label-type > % this.t(Location Type) %>: /label> div classcontrols> div classrow-fluid> select classspan9 ideditBridge__location_type> option value disableddisabled selectedselected>% this.t(Please select location type of the bridge) %>/option> option valuebank>% this.t(Bank) %>/option> option valuebody_camera>% this.t(Body Camera) %>/option> option valuecar_repair>% this.t(Car Repair) %>/option> option valueclinic>% this.t(Clinic) %>/option> option valueconvenience_store>% this.t(Convenience Store) %>/option> option valuefreeway>% this.t(Freeway) %>/option> option valuegas_station>% this.t(Gas Station) %>/option> option valuehealth_club>% this.t(Health Club) %>/option> option valuehospital>% this.t(Hospital) %>/option> option valuehouse>% this.t(House) %>/option> option valuelibrary>% this.t(Library) %>/option> option valuemanufacturing>% this.t(Manufacturing) %>/option> option valuemulti-tenant_dwelling>% this.t(Multi-Tenant Dwelling) %>/option> option valueoffice>% this.t(Office) %>/option> option valueparking_garage>% this.t(Parking Garage) %>/option> option valuepolice_station>% this.t(Police Station) %>/option> option valuequick_serve_restaurant>% this.t(Quick Serve Restaurant) %>/option> option valuerestaurant>% this.t(Restaurant) %>/option> option valueretail>% this.t(Retail) %>/option> option valueservice_yard>% this.t(Service Yard) %>/option> option valuestreet>% this.t(Street) %>/option> option valuetoll_booth>% this.t(Toll Booth) %>/option> option valuetrain_station>% this.t(Train Station) %>/option> option valuevehicle>% this.t(Vehicle) %>/option> option valuewarehouse>% this.t(Warehouse) %>/option> /select> /div> /div> /div> div classcontrol-group camera-setting> label classcontrol-label for data-testidmodal-edit-bridge-tab-location-input-label-latitude > % this.t(Latitude) %>: /label> div classcontrols> div classrow-fluid> div classspan5> input classspan7 typetext ideditBridge__latitude maxlength13 placeholder value%- model.get(latitude) %>/> (-90.0—90.0) /div> label classcontrol-label stylewidth:80px data-testidmodal-edit-bridge-tab-location-input-label-longitude > % this.t(Longitude) %>: /label> div classspan5> input classspan7 typetext ideditBridge__longitude maxlength14 placeholder value%- model.get(longitude) %>/> (-180.0—180.0) /div> /div> /div> /div> div classcontrol-group camera-setting> label classcontrol-label for data-testidmodal-edit-bridge-tab-location-input-label-floor > % this.t(Floor) %>: /label> div classcontrols> div classrow-fluid> div classspan5> input classspan5 typetext ideditBridge__floor maxlength6 placeholder value%- model.get(floor) %>/> (% this.t(number) %>) /div> /div> /div> /div> % if(this.is_location_feature_enabled) { %> div classcontrol-group camera-setting> label classcontrol-label for data-testidmodal-edit-bridge-tab-location-input-label-notes > % this.t(Notes) %>: /label> div classcontrols> div classrow-fluid> input classspan9 typetext ideditBridge__location_notes_location maxlength255 placeholder value%- model.get(notes) %>/> /div> /div> /div> %}%> /form> /div> div classtab-pane ideditBridge__metrics> span classpull-right idcsCamera-help data_linkbridge_settings_metrics> i classicon-question-sign een-help-link>/i> /span> ul classnav nav-tabs> li classactive ideditBridge__tab__metrics_streamed> a href#editBridge__metrics_streamed data-toggletab data-testidmodal-edit-bridge-tab-metrics-tab-label-cloud-bw > % this.t(Cloud BW) %> /a> /li> li ideditBridge__tab__metrics_bandwidth> a href#editBridge__metrics_bandwidth data-toggletab data-testidmodal-edit-bridge-tab-metrics-tab-label-cloud-bw-measured > % this.t(Cloud BW Measured) %> /a> /li> li ideditBridge__tab__metrics_available> a href#editBridge__metrics_available data-toggletab data-testidmodal-edit-bridge-tab-metrics-tab-label-storage > % this.t(Storage) %> /a> /li> li ideditBridge__tab__metrics_delta_storage> a href#editBridge__metrics_delta_storage data-toggletab data-testidmodal-edit-bridge-tab-metrics-tab-label-storage-delta > span>i classicon-caret-up stylefont-size:1.5em;>/i>% this.t(Storage) %>/span>/a> /li> li ideditBridge__tab__metrics_camera_cloud_bw> a href#editBridge__metrics_camera_cloud_bw data-toggletab> % this.t(Cam Cloud BW) %> /a> /li> li ideditBridge__tab__metrics_camera_kbytesondisk> a href#editBridge__metrics_camera_kbytesondisk data-toggletab data-testidmodal-edit-bridge-tab-metrics-tab-label-cam-storage > % this.t(Cam Storage) %> /a> /li> li ideditBridge__tab__metrics_camera_delta> a href#editBridge__metrics_camera_delta data-toggletab data-testidmodal-edit-bridge-tab-metrics-tab-label-cam-storage-delta > span>i classicon-caret-up stylefont-size:1.5em;>/i>% this.t(Cam Storage) %>/span> /a> /li> li ideditBridge__tab__metrics_stored styledisplay:none> a href#editBridge__metrics_stored data-toggletab data-testidmodal-edit-bridge-tab-metrics-tab-label-stored > % this.t(Stored) %> /a> /li> li ideditBridge__tab__metrics_freed styledisplay:none> a href#editBridge__metrics_freed data-toggletab data-testidmodal-edit-bridge-tab-metrics-tab-label-freed > % this.t(Freed) %> /a> /li> /ul> i classicon-refresh chart-refresh ideditBridge__chart_refresh_small>/i> i classicon-caret-right legend-toggle data-toggletrue>/i> div classtab-content ideditBridge__tab_content> /div> /div> div classtab-pane ideditBridge__analog> div styleheight:250px;> span classpull-right idcsCamera-help data_linkbridge_settings_analog> i classicon-question-sign een-help-link>/i> /span> form classform-horizontal> div classcontrol-group camera-setting> div classrow-fluid> div classspan8> label classcontrol-label foreditBridgeModal__analog_inputs data-testidmodal-edit-bridge-tab-analog-input-label-available-inputs > % this.t(Available inputs) %>: /label> div classcontrols> div classrow-fluid> div classspan12 camera-setting> select classpull-right span10 multiplemultiple ideditBridgeModal__analog_inputs>/select> /div> /div> /div> /div> /div> /div> /div> /form> /div> /div> div classtab-pane ideditBridge__notes> form classform-horizontal editBridge__notes_form> div classcontrol-group> label for data-testidmodal-edit-bridge-tab-notes-input-label-available-notes > % this.t(Notes) %>: /label> div classrow-fluid> textarea ideditBridge__notes_textarea classspan10 editBridge__notes_textarea maxlength2000>%-model.get(notes)%>/textarea> /div> /div> /form> /div> div classtab-pane ideditBridge__local> span classpull-right idcsCamera-help data_linkbridge_settings_local_display> i classicon-question-sign een-help-link>/i> /span> form classform-horizontal> div classcontrol-group camera-setting rtsp-enable-checkbox hidden> label classcontrol-label for data-testidmodal-edit-bridge-tab-local-display-input-label-enable-bridge-rtsp > % this.t(Enable QL Stream (RTSP)) %>: /label> div classcontrols> div classrow-fluid title%this.t(RTSP Stream can only be enabled by account user)%>> div classcamera-setting span2> input typecheckbox ideditBridge__local_bridge_rtsp_enable/> /div> div classbridge-rtsp-download-csv camera-setting hidden> /div> /div> /div> /div> div classcontrol-group camera-setting rtsp-auth-checkbox hidden> label classcontrol-label for data-testidmodal-edit-bridge-tab-local-display-input-label-enable-bridge-rtsp-auth > % this.t(Enable QL Stream Auth) %>: /label> div classcontrols> div classrow-fluid title%this.t(RTSP Auth can only be enabled by account user)%>> div classcamera-setting span1> input typecheckbox ideditBridge__local_bridge_rtsp_auth/> /div> /div> /div> /div> div classcontrol-group camera-setting> label classcontrol-label for data-testidmodal-edit-bridge-tab-local-display-input-label-local-display-via-browser > % this.t(Local Display via Browser) %>: /label> div classcontrols> div classrow-fluid title%this.t(Enables live video over Local Area Network)%>> div classcamera-setting span1> input typecheckbox ideditBridge__http_local_enable value1/> /div> /div> /div> /div> div classcontrol-group camera-setting> label classcontrol-label for data-testidmodal-edit-bridge-tab-local-display-input-label-local-display-via-monitor > % this.t(Local Display via Monitor) %>: /label> div classcontrols> div classrow-fluid title%this.t(Enables live video on local monitor)%>> div classcamera-setting span1> input typecheckbox ideditBridge__local_display_enable value1/> /div> /div> /div> /div> div ideditBridge__loading_layouts> div styletext-align:center;>% this.t(Loading layout list... Please wait) %>/div> img src_images/spinning.gif stylewidth: 25px; margin-left: 49%;> /div> div classcontrol-group ideditBridge__local_layouts_container styledisplay:none;> div classrow-fluid> div classspan5 data-testidmodal-edit-bridge-tab-local-display-input-label-layouts-available > % this.t(Layouts Available) %>: /div> div classspan5 offset1 data-testidmodal-edit-bridge-tab-local-display-input-label-layouts-on-display > % this.t(Layouts on Display) %>: /div> /div> div ideditBridge__layouts_menu classrow-fluid> /div> /div> /form> /div> %var interfaces model.get(camera_settings).interface_info ? model.get(camera_settings).interface_info : {};%> %if(interfaces && Object.keys(interfaces).length > 0 && (interfaceswifi-dis-ap || interfaceswifi-sec-ap)){%> div classtab-pane ideditBridge__interfaces> form classform-horizontal> div classcontrol-group camera-settings> %var self this;%> div classcontrol-label data-testidmodal-edit-bridge-tab-interfaces-input-label-operating-modes > %self.t(Operating Modes)%>: /div> div classcontrols row-fluid> div classspan1 interface-check-container> div classspan1>input typecheckbox classinterfaceToggle pull-left data-idwifi-dis-ap %interfaceswifi-dis-ap && interfaceswifi-dis-ap.state 100 ? checked:%>>/div> /div> div classspan2 interface-check-container stylemargin-left: -20px; data-testidmodal-edit-bridge-tab-interfaces-input-label-discovery > %self.t(Discovery)%> /div> div classspan1 interface-check-container> input typecheckbox classinterfaceToggle pull-left data-idwifi-sec-ap %interfaceswifi-sec-ap && interfaceswifi-sec-ap.state 100 ? checked:%>> /div> div classspan2 interface-check-container stylemargin-left: -20px; data-testidmodal-edit-bridge-tab-interfaces-input-label-secure > %self.t(Secure)%> /div> /div> label classcontrol-label for data-testidmodal-edit-bridge-tab-interfaces-input-label-discovery-ssid > % self.t(Discovery SSID) %>: /label> div classcontrols> div classrow-fluid> p classspan5 stylepadding: 5px;>%-(interfaceswifi-dis-ap && interfaceswifi-dis-ap.settings ? atob(interfaceswifi-dis-ap.settings.ssid) : self.t(None))%>/p> /div> /div> label classcontrol-label stylemargin-top: 4px; for data-testidmodal-edit-bridge-tab-interfaces-input-label-secure-ssid > %self.t(Secure SSID) %>: /label> div classcontrols stylemargin-top: 4px; > div classrow-fluid> p classspan5 stylepadding: 5px;> %-(interfaceswifi-sec-ap && interfaceswifi-sec-ap.settings ? atob(interfaceswifi-sec-ap.settings.ssid) : self.t(None))%> /p> /div> /div> label classcontrol-label for data-testidmodal-edit-bridge-tab-interfaces-input-label-channel > % self.t(Channel) %>: /label> div classcontrols> div classrow-fluid> p classspan5 stylepadding: 5px;>1/p> /div> /div> label classcontrol-label for data-testidmodal-edit-bridge-tab-interfaces-input-label-password > % self.t(Password) %>: /label> div classcontrols> div classrow-fluid> p classspan5 stylepadding: 5px;>%- (interfaceswifi-sec-ap && interfaceswifi-sec-ap.settings && interfaceswifi-sec-ap.settings.security ? interfaceswifi-sec-ap.settings.security.psk : self.t(None))%>/p> /div> /div> label classcontrol-label for data-testidmodal-edit-bridge-tab-interfaces-input-label-protocol > % self.t(Protocol) %>: /label> div classcontrols> div classrow-fluid> p classspan5 stylepadding: 5px;>%self.t(WPA2)%>/p> /div> /div> /div> /form> /div> %}%> div idbridge-health>/div> /script> style> #small_input { display: inline; width: 10px; } .advanced_options { display: none; } .show_advanced_options .advanced_options { display: block; } /style> !-- TEMPLATE BEGIN :: editCameraModal --> script typetext/template ideditCameraModal-template> span classmodal-heading-append> // %-model.get(deviceName) ? model.get(deviceName) : %>% if (model.isAnalog() || model.get(is_status_bad_analog)) { %>, % this.t(Analog Input) + + this.model.getAnalogInputNumber() %>% } %>/span> div classtab-pane active idcsCamera> !-- launches help window from help/ data_link attribute + .html --> span classpull-right idcsCamera-help data_link% model.isMCACamera() ? camera_settings_mca_camera : camera_settings_camera %>> i classicon-question-sign een-help-link>/i> /span> form classform-horizontal> %if(!model.get(deviceShare) && !model.isMCACamera()){%> div classcontrol-group camera-setting data-camera-settingcamera_on stylemargin-top:20px;> label classcontrol-label for data-testidmodal-camera-settings-tab-camera-input-label-on > % this.t(On) %>: /label> div classcontrols> div classrow-fluid> div classspan1 camera-setting> div> input typecheckbox ideditCamera__camera_on value1/> /div> /div> %if(!model.isCloudCamera()){%> div classspan4> select classspan11 ideditCamera__operating_hours> option value*>% this.t(24 hours) %>/option> option valuework>% this.t(Work hours) %> (%model.get(camera_work_hours)%>)/option> option valuenonwork>% this.t(Non-work hours) %>/option> option valuecustom>% this.t(Custom hours) %>/option> /select> /div> div ideditCamera__operating_hours_custom classspan7 hide> div classinput-append bootstrap-timepicker> input ideditCamera__operating_hours_custom_start typetext maxlength60 classinput-small> span classadd-on>i classicon-time>/i>/span> /div> To div classinput-append bootstrap-timepicker> input ideditCamera__operating_hours_custom_end typetext maxlength60 classinput-small> span classadd-on>i classicon-time>/i>/span> /div> /div> %}%> /div> /div> /div> %}%> % if (model.isAnalog() || model.get(is_status_bad_analog)) { %> div classcontrol-group> label classcontrol-label data-testidmodal-camera-settings-tab-camera-input-label-bad-signal-protection > % this.t(Bad Signal Protection) %>: /label> div classcontrols> input typecheckbox classignore-analog % !model.get(ignore_bad_signal_schedule_set) ? checked : %> title% this.t(Protects against video loss on other inputs by watching for bad analog signal) %>> % if (model.get(is_status_bad_analog) && !model.get(ignore_bad_signal_schedule_set)) {%> button typebutton classreset-analog btn btn-danger title% this.t(Reset bad analog signal) %>> % this.t(Reset Bad Signal) %> /button> % } %> span idbad-analog-action-message>/span> /div> /div> % } %> div classcontrol-group cs_advanced_camera_info> label classcontrol-label for data-testidmodal-camera-settings-tab-camera-input-label-name > % this.t(Name) %>: /label> div classcontrols> div classrow-fluid> input ideditCamera__name classspan6 typetext maxlength45 value%- this.getFilteredDeviceName() %> pattern^* title%- this.t(Please do not use any special characters like quotes etc.) %>/> /div> /div> /div> %if(!model.isAnalog() && !model.isChildCamera() && !model.get(deviceShare) && !model.isCloudCamera()){%> div classcontrol-group cs_advanced_camera_info> label classcontrol-label for data-testidmodal-camera-settings-tab-camera-input-label-login > %(!model.isRtsp() ? this.t(ONVIF) : )%> % this.t(Login) %>: /label> div classcontrols> div classrow-fluid> %/* Safari is aggressive with autopopulating username/password fields, so these bogus fields are needed in order to fool Safari into using them instead of the real fields. */%> div styleposition: fixed;width: 1px;left: -100vw;> input typetext tabindex-1 idbogus_username stylewidth:1%/> input typepassword tabindex-1 idbogus_password stylewidth:1%/> /div> input ideditCamera__onvifu classspan6 typetext maxlength40 placeholder% this.t(Username) %> autocompleteoff value%- model.get(cameraUsername) %>/> input ideditCamera__onvifp classspan6 input-password typetext maxlength40 placeholder% this.t(Password) %> autocompleteoff value%- model.get(cameraPassword) %>/> /div> /div> /div> %}%> %if(model.get(accountImmixEnabled)){%> div classcontrol-group camera-setting> label classcontrol-label for data-testidmodal-camera-settings-tab-camera-input-label-immix-email > % this.t(Immix Email) %>: /label> div classcontrols> div classrow-fluid> input ideditCamera__sureview_email classspan6 typetext maxlength300 placeholder% this.t(Immix Email) %> autocompleteoff value%- model.get(cameraImmixEmail) %> /> input ideditCamera__sureview_checkbox typecheckbox classsureview-checkbox /> /div> /div> /div> %}%> %if(model.isRtsp()){%> %if(model.isRtspStatic()){%> div classcontrol-group cs_advanced_camera_info> label classcontrol-label for data-testidmodal-camera-settings-tab-camera-input-label-rtsp-ip-address > % this.t(RTSP IP Address) %>: /label> div classcontrols> div classrow-fluid> input typetext classspan4 maxlength15 ideditCamera__rtsp_ip_address placeholder% this.t(IP Address) %> value%-model.get(rtsp_ip_address)%>/> /div> /div> /div> %}%> div classcontrol-group cs_advanced_camera_info> label classcontrol-label for data-testidmodal-camera-settings-tab-camera-input-label-rtsp-video-resource > % this.t(RTSP Video Resource) %>: /label> div classcontrols> div classrow-fluid> div classspan4> input typetext classspan12 maxlength200 ideditCamera__rtsp_video_resource placeholder% this.t(Video Resource (H264)) %> value%-model.get(rtsp_video_resource)%>/> /div> label ideditCamera__rtsp_preview_resource_label classcontrol-label for>% this.t(RTSP Preview Resource) %>:/label> div classspan4> input typetext classspan12 maxlength200 ideditCamera__rtsp_preview_resource placeholder% this.t(Preview Resource (MJPEG)) %> value%-model.get(rtsp_preview_resource)%>/> /div> /div> /div> /div> %}%> %if(!model.get(deviceShare)){%> div classcontrol-group cs_advanced_camera_info> label classcontrol-label for data-testidmodal-camera-settings-tab-camera-input-label-time-zone > % this.t(Time Zone) %>: /label> div classcontrols> div classrow-fluid> select ideditCamera__timezone classspan6> % var model this.model; var device_timezone model.get(deviceTZ); var is_in_timezones_array false; _.each(TIME_ZONES, function(timezone){ var is_selected ; var timezone_name timezone.name; if(device_timezonetimezone_name) { is_in_timezones_array true; is_selected selected; } %> option value%timezone_name%> %is_selected%>>%timezone_name%>/option> %})%> % if(!is_in_timezones_array) { %> option value%device_timezone%> selected>%device_timezone%>/option> % } %> /select> /div> /div> /div> %}%> div classcontrol-group> label classcontrol-label for data-testidmodal-camera-settings-tab-camera-input-label-tags > % this.t(Tags) %>: /label> div classcontrols> div classrow-fluid> input nametags classspan8 ideditCamera__tags value%- model.getCustomTags().join(,) %> /> /div> /div> /div> !-- div classcontrol-group> label classcontrol-label for>Shortcut:/label> div classcontrols> div classrow-fluid> input ideditCamera__shortcut classspan6 typetext maxlength45 value placeholdershortcut/> /div> /div> /div> --> div classcontrol-group cs_advanced_camera_info> label classcontrol-label for data-testidmodal-camera-settings-tab-camera-input-label-notes > % this.t(Notes) %>: /label> div classcontrols> div classrow-fluid> textarea ideditCamera__notes classspan12 styleheight: 70px; maxlength2000>%-model.get(notes)%>/textarea> /div> /div> /div> % if(model.is911Visible()) { %> div classcontrol-group data-camera-settingcamera_911> label classcontrol-label for data-testidmodal-camera-settings-tab-camera-input-label-911 > % this.t(Emergency Camera Sharing) %>: /label> div classcontrols> div classrow-fluid> div classspan1 camera-setting> % var title this.model.is911Available() && !this.model.isLatAndLongSet() ? utils.t(WARNING: To use Emergency Camera Sharing, provide a valid Latitude and Longitude coordinates in the Location tab.) : ; var checked this.model.get(e911) ? checked : ; var enabled this.model.is911Available() && this.model.isLatAndLongSet() ? : disabled; %> input typecheckbox ideditCamera__e911 title%title%> %checked%> %enabled%> /> /div> /div> /div> /div> % } %> div classcontrol-group cs_advanced_camera_info> label classcontrol-label for data-testidmodal-camera-settings-tab-camera-input-label-info > % this.t(Information) %>: /label> div classcontrols> div ideditCamera__device_info classinfo-box> %if(model.get(camera_info)){%> % if(!model.isAnalog() && !model.isRtsp()) { %> div classrow-fluid> div classspan4 text-right data-testidmodal-camera-settings-tab-camera-label-info-manufacturer > % this.t(Manufacturer) %>: /div> div classspan7> %-model.get(camera_info).make%> /div> /div> div classrow-fluid> div classspan4 text-right data-testidmodal-camera-settings-tab-camera-label-info-model > % this.t(Model) %>: /div> div classspan7> %-model.get(camera_info).model%> /div> /div> div classrow-fluid> div classspan4 text-right data-testidmodal-camera-settings-tab-camera-label-info-firmware > % this.t(Firmware) %>: /div> div classspan7> %-model.get(camera_info).version%> /div> /div> % } %> % if(model.isAnalog()) { %> div classrow-fluid> div classspan4 text-right data-testidmodal-camera-settings-tab-camera-label-info-analog-input > % this.t(Analog Input) %>: /div> div classspan7> %-model.getAnalogInputNumber()%> /div> /div> % } else { %> % if(model.get(camera_info).mac){%> div classrow-fluid> div classspan4 text-right data-testidmodal-camera-settings-tab-camera-label-info-mac-address > % this.t(MAC Address) %>: /div> div classspan7> %-model.get(camera_info).mac%> /div> /div> % } %> % if(model.get(deviceIPAddress)) { %> div classrow-fluid> div classspan4 text-right data-testidmodal-camera-settings-tab-camera-label-info-ip-address > % this.t(IP Address) %>: /div> div classspan7> a ideditCamera__vpn hrefhttp://%model.get(deviceIPAddress)%>> /a> /div> /div> % } %> % } %> div classrow-fluid> div classspan4 text-right data-testidmodal-camera-settings-tab-camera-label-info-esn > % this.t(ESN) %>: /div> div classspan7> %- (model.get(deviceID) ? model.get(deviceID) : not available) %> /div> /div> % if(!model.isCloudCamera()) {%> div classrow-fluid tech-details> div classspan4 text-right data-testidmodal-camera-settings-tab-camera-label-info-guid > % this.t(GUID) %>: /div> div classspan7> %- (model.get(deviceID) ? model.get(deviceGUID) : not available) %> /div> /div> % } %> %if(model.get(mca_device_freespace) && !model.isCloudCamera()){%> div classrow-fluid> div classspan4 text-right data-testidmodal-camera-settings-tab-camera-label-info-free-space > % this.t(Free space) %>: /div> div classspan7> %- model.get(mca_device_freespace) %> /div> /div> % } %> %if(model.get(deviceBridge) && bridgeList.findByDeviceID(model.get(deviceBridge)) && !model.isCloudCamera()){%> div classrow-fluid> div classspan4 text-right data-testidmodal-camera-settings-tab-camera-label-info-bridge > % this.t(Bridge) %>: /div> div classspan7> %-bridgeList.findByDeviceID(model.get(deviceBridge)).get(deviceName) + (ESN: + model.get(deviceBridge) + )%> /div> /div> % } %> %if(model.get(camera_info).admin_user){%> div classrow-fluid> div classspan4 text-right data-testidmodal-camera-settings-tab-camera-label-info-default-web-username > % this.t(Default Web Username) %>: /div> div classspan7> %-model.get(camera_info).admin_user%> /div> /div> %}%> %if(model.get(camera_info).admin_password){%> div classrow-fluid> div classspan4 text-right data-testidmodal-camera-settings-tab-camera-label-info-default-web-password > % this.t(Default Web Password) %>: /div> div classspan7> %-model.get(camera_info).admin_password%> /div> /div> %}%> %if(model.get(camera_settings).driver_info && !model.isCloudCamera()){%> div classrow-fluid tech-details> div classrow-fluid> div classspan4 text-right data-testidmodal-camera-settings-tab-camera-label-info-driver-descriptor > % this.t(Driver Descriptor) %>: /div> div classspan7> %-model.get(camera_settings).driver_info.descriptor%> /div> /div> div classrow-fluid> div classspan4 text-right data-testidmodal-camera-settings-tab-camera-label-info-driver-descriptor-version > % this.t(Driver Descriptor Version) %>: /div> div classspan7> %-model.get(camera_settings).driver_info.descriptor_version%> /div> /div> div classrow-fluid> div classspan4 text-right data-testidmodal-camera-settings-tab-camera-label-info-driver-local > % this.t(Driver Local) %>: /div> div classspan7> %-model.get(camera_settings).driver_info.local%> /div> /div> div classrow-fluid> div classspan4 text-right data-testidmodal-camera-settings-tab-camera-label-info-driver-version > % this.t(Driver Version) %>: /div> div classspan7> %-(model.get(camera_settings).driver_info.version ? model.get(camera_settings).driver_info.version : not available)%> /div> /div> div classrow-fluid> button ideditCamera__getRTSPinfo classbtn-mini btn-info span2 data-testidmodal-camera-settings-tab-camera-button-get-rtsp-info > %this.t(Get RTSP Info)%> /button> /div> /div> %}%> %} else {%> div classrow-fluid> div classspan11 text-center data-testidmodal-camera-settings-tab-camera-info-not-available > % this.t(Not available at this time) %> /div> /div> %}%> /div> /div> /div> div classcontrols> % if(userList.getCurrentUser().checkAddDeleteDevices()) { %> button typebutton classignore btn btn-inverse data-id% model.get(deviceID) %> title% this.t(remove camera from account) %> data-testidmodal-camera-settings-tab-camera-button-delete-camera > %this.t(Delete Camera)%> /button> % } %> /div> /form> /div> div classtab-pane idcsRetention> !-- launches help window from help/ data_link attribute + .html --> span classpull-right idcsCamera-help data_linkcamera_settings_retention> i classicon-question-sign een-help-link>/i> /span> form classform-horizontal> div classcontrol-group camera-setting data-camera-settingcloud_retention_days> label classcontrol-label for data-testidmodal-camera-settings-tab-retention-input-label-cloud-retention > % this.t(Cloud Retention) %>: /label> div classcontrols> div classrow-fluid> div classspan5 camera-setting> % var cloud_retention_days model.get(camera_settings).cloud_retention_days %> select classspan11 billing ideditCamera__cloud_retention_days> option value1> % this._getM10LabelText() %> /option> option value2 %(cloud_retention_days 2 ? selected : )%>>2 % this.t(days) %>/option> option value3 %(cloud_retention_days 3 ? selected : )%>>3 % this.t(days) %>/option> option value5 %(cloud_retention_days 5 ? selected : )%>>5 % this.t(days) %>/option> option value7 %(cloud_retention_days undefined || cloud_retention_days 7 ? selected : )%>>7 % this.t(days) %>/option> option value14 %(cloud_retention_days 14 ? selected : )%>>14 % this.t(days) %>/option> option value20 %(cloud_retention_days 20 ? selected : )%>>20 % this.t(days) %>/option> option value28 %(cloud_retention_days 28 ? selected : )%>>28 % this.t(days) %>/option> option value30 %(cloud_retention_days 30 ? selected : )%>>30 % this.t(days) %>/option> option value31 %(cloud_retention_days 31 ? selected : )%>>31 % this.t(days) %>/option> option value60 %(cloud_retention_days 60 ? selected : )%>>60 % this.t(days) %>/option> option value90 %(cloud_retention_days 90 ? selected : )%>>90 % this.t(days) %>/option> option value180 %(cloud_retention_days 180 ? selected : )%>>180 % this.t(days) %>/option> option value365 %(cloud_retention_days 365 ? selected : )%>>1 % this.t(Year) %>/option> option value730 %(cloud_retention_days 730 ? selected : )%>>2 % this.t(Years) %>/option> option value1095 %(cloud_retention_days 1095 ? selected : )%>>3 % this.t(Years) %>/option> option value1825 %(cloud_retention_days 1825 ? selected : )%>>5 % this.t(Years) %>/option> /select> /div> % if(this.deviceBridge && this.deviceBridge.isCMVR && this.deviceBridge.isCMVR()) { %> div classcamera-setting span6 data-camera-settingpreview_only_cloud_retention> div classrow-fluid> div classspan2 camera-setting> input typecheckbox classbilling ideditCamera__preview_only_cloud_retention/> /div> label classspan6 stylepadding: 3px 0px 0px 0px; data-testidmodal-camera-settings-tab-retention-input-label-cloud-preview-only > % this.t(Cloud Preview Only (PR1)) %> /label> /div> /div> % } %> /div> /div> /div> % if(this.deviceBridge && this.deviceBridge.isCMVR && this.deviceBridge.isCMVR()) { %> div classcontrol-group> label classcontrol-label data-testidmodal-camera-settings-tab-retention-input-label-minimum-on-premise-retention > % this.t(Minimum On Premise Retention) %>: /label> div classcontrols> % var bridge_target_days model.get(camera_settings).bridge_target_days %> select ideditCamera__bridge_target_days> !-- Option value -1 as both default and disabled will not allow the red x reset button logic to work. The red x is hidden via css for now --> option value-1 %(!bridge_target_days || bridge_target_days -1 ? selected : )%>>%this.t(None) %>/option> option value1 %(bridge_target_days 1 ? selected : )%>>1 % this.t(day) %>/option> option value2 %(bridge_target_days 2 ? selected : )%>>2 % this.t(days) %>/option> option value3 %(bridge_target_days 3 ? selected : )%>>3 % this.t(days) %>/option> option value5 %(bridge_target_days 5 ? selected : )%>>5 % this.t(days) %>/option> option value7 %(bridge_target_days 7 ? selected : )%>>7 % this.t(days) %>/option> option value14 %(bridge_target_days 14 ? selected : )%>>14 % this.t(days) %>/option> option value20 %(bridge_target_days 20 ? selected : )%>>20 % this.t(days) %>/option> option value28 %(bridge_target_days 28 ? selected : )%>>28 % this.t(days) %>/option> option value30 %(bridge_target_days 30 ? selected : )%>>30 % this.t(days) %>/option> option value31 %(bridge_target_days 31 ? selected : )%>>31 % this.t(days) %>/option> option value45 %(bridge_target_days 45 ? selected : )%>>45 % this.t(days) %>/option> option value60 %(bridge_target_days 60 ? selected : )%>>60 % this.t(days) %>/option> option value90 %(bridge_target_days 90 ? selected : )%>>90 % this.t(days) %>/option> option value180 %(bridge_target_days 180 ? selected : )%>>180 % this.t(days) %>/option> /select> /div> /div> div classcontrol-group> label classcontrol-label data-testidmodal-camera-settings-tab-retention-input-label-maximum-on-premise-retention > % this.t(Maximum On Premise Retention) %>: /label> div classcontrols> % var local_retention_days model.get(camera_settings).local_retention_days %> select ideditCamera__local_retention_days> option value-1 %(local_retention_days -1 ? selected : )%>>% this.t(None) %>/option> option value1 %(local_retention_days 1 ? selected : )%>>1 % this.t(day) %>/option> option value2 %(local_retention_days 2 ? selected : )%>>2 % this.t(days) %>/option> option value3 %(local_retention_days 3 ? selected : )%>>3 % this.t(days) %>/option> option value5 %(local_retention_days 5 ? selected : )%>>5 % this.t(days) %>/option> option value7 %(local_retention_days 7 ? selected : )%>>7 % this.t(days) %>/option> option value14 %(local_retention_days 14 ? selected : )%>>14 % this.t(days) %>/option> option value20 %(local_retention_days 20 ? selected : )%>>20 % this.t(days) %>/option> option value28 %(local_retention_days 28 ? selected : )%>>28 % this.t(days) %>/option> option value30 %(local_retention_days 30 ? selected : )%>>30 % this.t(days) %>/option> option value31 %(local_retention_days 31 ? selected : )%>>31 % this.t(days) %>/option> option value45 %(local_retention_days 45 ? selected : )%>>45 % this.t(days) %>/option> option value60 %(!local_retention_days || local_retention_days 60 ? selected : )%>>60 % this.t(days) %>/option> option value90 %(local_retention_days 90 ? selected : )%>>90 % this.t(days) %>/option> option value180 %(local_retention_days 180 ? selected : )%>>180 % this.t(days) %>/option> option value365 %(local_retention_days 365 ? selected : )%>>1 % this.t(Year) %>/option> /select> /div> /div> % } %> p classred new-line ideditCamera_retention_msg> /p> /form> /div> div classtab-pane idcsResolution> !-- launches help window from help/ data_link attribute + .html --> span classpull-right move_down_ten idcsCamera-help data_link% model.isMCACamera() ? camera_settings_mca_resolution : camera_settings_resolution %>> i classicon-question-sign een-help-link>/i> /span> div classtab-pane-note style%(!model.isResolutionConfigurable()?display:block !important:)%> data-testidmodal-camera-settings-tab-resolution-note > %if(model.isRtsp()){%> *% this.t(*NOTE: Resolution/quality/bit-rate only editable via cameras own configuration interface) %> %} else {%> *% this.t(this setting only editable via cameras own configuration interface) %> %}%> /div> form classform-horizontal> %if(model.get(camera_settings).video_standard){%> div classcontrol-group> label classcontrol-label for data-testidmodal-camera-settings-tab-resolution-input-label-video-standard > % this.t(Video Standard) %>: /label> div classcontrols> div classrow-fluid> div stylemargin-left: 0px !important classspan3 camera-setting> select classspan11 ideditCamera__video_standard>/select> /div> /div> /div> /div> %}%> %if(!model.isCloudCamera()){%> div classrow-fluid> div classspan4> h5 data-testidmodal-camera-settings-tab-resolution-header-preview-video > % this.t(Preview Video) %> /h5> /div> div classspan7> % if (this.getPreviewBandwidthText()) {%> span classsmall_font move_down_ten stylefloat: right; data-testidmodal-camera-settings-tab-resolution-input-label-estimated-preview-video > % this.t(Estimated preview video for this camera)%> % this.getPreviewBandwidthText()%> /span> %}%> /div> /div> div classcontrol-group style%(model.isRtsp()?display:none:)%>> label classcontrol-label for data-testidmodal-camera-settings-tab-resolution-input-label-resolution > % this.t(Resolution) %>: /label> div classcontrols> div classrow-fluid> div classspan3 camera-setting> %(!model.isResolutionConfigurable()?em> + this.t(unknown) + */em>:)%> select classspan11 ideditCamera__preview_resolution style%(!model.isResolutionConfigurable()?display:none:)%>>/select> /div> label classcontrol-label for data-testidmodal-camera-settings-tab-resolution-input-label-quality > % this.t(Quality) %>: /label> div classspan2 camera-setting> %(!model.isResolutionConfigurable()?em> + this.t(unknown) + */em>:)%> select classspan10 ideditCamera__preview_quality style%(!model.isResolutionConfigurable()?display:none:)%>>/select> /div> label classcontrol-label for data-testidmodal-camera-settings-tab-resolution-input-label-update-rate > % this.t(Update Rate) %>: /label> div classspan2 camera-setting> select classspan10 ideditCamera__preview_interval_ms>/select> /div> /div> /div> /div> %}%> % if (!model.isMCACamera() && !model.isCloudCamera()) { %> div classcontrol-group> label classcontrol-label for data-testidmodal-camera-settings-tab-resolution-input-label-transmit-mode > % this.t(Transmit Mode) %>: /label> div classcontrols> div classrow-fluid> div classspan3 camera-setting> select classspan11 ideditCamera__preview_transmit_mode>/select> /div> div classadvanced_transmit advanced_transmit_hidden> label classcontrol-label for data-testidmodal-camera-settings-tab-resolution-input-label-max-bandwidth > % this.t(Max Bandwidth) %>: /label> div classspan3 camera-setting> select classspan11 ideditCamera__preview_realtime_bandwidth een-default1000000> /select> /div> /div> label classcontrol-label foreditCamera__original_aspect_ratio data-testidmodal-camera-settings-tab-resolution-input-label-original-aspect-ratio > % this.t(Original Aspect Ratio) %>: /label> div classspan2 camera-setting> input typecheckbox name ideditCamera__original_aspect_ratio checked> /div> /div> span classred small_font advanced_transmit_hidden idpreview_bandwidth_msg>% model.get(preview_msg) %>/span> /div> /div> div classcontrol-group> label classcontrol-label for data-testidmodal-camera-settings-tab-resolution-input-label-aspect-ratio > % this.t(Aspect ratio) %>: /label> div classcontrols> div classrow-fluid> div classspan3 camera-setting> select classspan11 ideditCamera__preview_aspect_ratio>/select> /div> /div> /div> /div> % } %> div classrow-fluid> h5 data-testidmodal-camera-settings-tab-resolution-header-full-video-recording > % this.t(Full Video Recording) %> /h5> /div> div classcontrol-group style%(model.isRtsp()?display:none:)%>> label classcontrol-label for data-testidmodal-camera-settings-tab-resolution-full-video-input-label-resolution > % this.t(Resolution) %>: /label> div classcontrols> div classrow-fluid> div classspan3 camera-setting> %(!model.isResolutionConfigurable()?em> + this.t(unknown) + */em>:)%> select classspan11 billing ideditCamera__video_resolution style%(!model.isResolutionConfigurable()?display:none:)%>>/select> /div> label classcontrol-label for data-testidmodal-camera-settings-tab-resolution-full-video-input-label-quality > % this.t(Quality) %>: /label> div classspan2 camera-setting> %(!model.isResolutionConfigurable()?em> + this.t(unknown) + */em>:)%> select classspan10 ideditCamera__video_quality style%(!model.isResolutionConfigurable()?display:none:)%>>/select> /div> div idvideo_bandwidth_wrapper style%(!model.isCloudCamera() ? display:none : )%> > label classcontrol-label for data-testidmodal-camera-settings-tab-resolution-full-video-input-label-bit-rate > % this.t(Bit Rate) %>: /label> div classspan3 camera-setting> %(!model.isResolutionConfigurable()?em> + this.t(unknown) + */em>:)%> select classspan11 ideditCamera__video_bandwidth_factor style%(!model.isResolutionConfigurable() ? display:none : )%> >/select> /div> /div> /div> /div> /div> div classcontrol-group> label classcontrol-label for data-testidmodal-camera-settings-tab-resolution-full-video-input-label-transmit-mode > % this.t(Transmit Mode) %>: /label> div classcontrols> div classrow-fluid> div classspan3 camera-setting> % if (!model.isCloudCamera()) { %> select classspan11 ideditCamera__video_transmit_mode>/select> %} else {%> select classspan11 disabled> option>always/option> /select> % } %> /div> % if (!model.isMCACamera()) { %> label classcontrol-label for data-testidmodal-camera-settings-tab-resolution-full-video-input-label-record-when > % this.t(Record When) %>: /label> div classspan2 camera-setting> select classspan10 ideditCamera__video_capture_mode>/select> /div> % } %> % if(model.get(camera_settings).local_retention_days && model.get(camera_settings).local_retention_days ! -1) { %> label classcontrol-label always_retention_days styledisplay: %model.get(camera_settings).video_capture_mode always ? block : none%> for data-testidmodal-camera-settings-tab-resolution-full-video-input-label-for > % this.t(For) %>: /label> div classspan2 camera-setting always_retention_days styledisplay: %model.get(camera_settings).video_capture_mode always ? block : none%>> %var always_value model.get(always_retention_days) ? model.get(always_retention_days) : 0;%> select classspan10 ideditCamera__always_retention_days> option value0 %always_value 0 ? selected : %>>%this.t(default)%>/option> option value1 %always_value 1 ? selected : %>>1 %this.t(days)%>/option> option value2 %always_value 2 ? selected : %>>2 %this.t(days)%>/option> option value3 %always_value 3 ? selected : %>>3 %this.t(days)%>/option> option value4 %always_value 4 ? selected : %>>4 %this.t(days)%>/option> option value5 %always_value 5 ? selected : %>>5 %this.t(days)%>/option> /select> /div> % } %> /div> /div> /div> /form> p classred new-line ideditCamera_resolution_msg> /p> /div> !-- Start Dewarping Pane --> div classtab-pane idcsDewarping>/div> !-- End Dewarping Pane --> !-- Start Input / Output Pane --> div classtab-pane idcsIO> ul classnav nav-tabs io-tabs hide> li classactive> a href#csIO-input data-toggletab data-testidmodal-camera-settings-tab-io-label-input > %this.t(Input)%> /a> /li> li class> a href#csIO-output data-toggletab data-testidmodal-camera-settings-tab-io-label-output > %this.t(Output)%> /a> /li> /ul> div classtab-content io-tabs-content hide idcsIO-panes> div classtab-pane active idcsIO-input>/div> div classtab-pane idcsIO-output>/div> /div> div classio-old-bridge-outer hide> span classio-old-bridge-inner data-testidmodal-camera-settings-tab-io-warning-old-bridge > %this.t({{bridge_name}} must be updated before you can use camera inputs and outputs. Please contact {{support_link}} to arrange for an update.)%> /span> /div> /div> !-- End Input / Output Pane --> div classtab-pane idcsptz> !-- launches help window from help/ data_link attribute + .html --> span classpull-right idcsCamera-help data_linkcamera_settings_ptz> i classicon-question-sign een-help-link>/i> /span> form classform-horizontal> div classrow-fluid> div classspan1 control-label stylewidth: 103px; data-testidmodal-camera-settings-tab-ptz-input-label-mode > %this.t(Mode)%>: /div> div classspan3> %var currSetting this.model.get(all_camera_settings).active_settings; var ptzSetting currSetting.ptz_active_tours && Object.keys(currSetting.ptz_active_tours.v).length > 0 ? tour : manual; var isHome ptzSetting tour && Object.keys(currSetting.ptz_active_tours.v).length 1 && default in currSetting.ptz_active_tours.v ? true : false; var isCont ptzSetting tour && Object.keys(currSetting.ptz_active_tours.v).length > 1 && continuous in currSetting.ptz_active_tours.v ? true : false; var finalSetting isHome ? home : (isCont ? continuous : ptzSetting);%> select stylewidth:100% idcamera_settings_ptz_mode> option valuemanual %(finalSetting manual ? selected : )%>>Manual Only/option> option valuehome styledisplay:none; idreturn_home %(finalSetting home ? selected : )%>>Home Return/option> option valuecontinuous %(finalSetting continuous ? selected : )%>>Tour/option> option styledisplay:none; idcamera_settings_ptz_single_tour valuetour %(finalSetting tour ? selected : )%>>Single Tour/option> /select> /div> div classspan1 control-label stylewidth: 60px; data-testidmodal-camera-settings-tab-ptz-input-label-after > %this.t(After)%>: /div> div classspan3> input stylewidth:100% min30 value30 typenumber idcamera_settings_ptz_delay> /div> div classspan1 stylepadding-top: 5px; data-testidmodal-camera-settings-tab-ptz-input-label-seconds > %this.t(seconds)%>: /div> /div> div classroi-container> /div> div classrow-fluid stylewidth:98%> div classrow-fluid ideditCamera__ptz_stations> div classrow-fluid stylewidth:98%> div classspan2 style padding-top: 10px;padding-left: 5px; data-testidmodal-camera-settings-tab-ptz-input-label-stations > %this.t(Stations)%> /div> button typebutton classspan2 btn-small btn-info idcamera_settings_addNewStation stylemargin-top: 2px;margin-bottom: 2px; data-testidmodal-camera-settings-tab-ptz-button-label-add-new-stations > %this.t(Add New Station)%> /button> /div> div styleheight: 250px; overflow-y: scroll;> table classtable table-condensed table-bordered table-striped idptzTable> thead> tr> th stylewidth:5% data-testidmodal-camera-settings-tab-ptz-table-header-order > % this.t(Order) %> /th> th stylewidth:20% data-testidmodal-camera-settings-tab-ptz-table-header-name > % this.t(Name) %> /th> th stylewidth:10% data-testidmodal-camera-settings-tab-ptz-table-header-set-home > % this.t(Set Home) %> /th> th stylewidth:10% data-testidmodal-camera-settings-tab-ptz-table-header-time-at-station > % this.t(Time At Station) %> /th> th stylewidth:10% data-testidmodal-camera-settings-tab-ptz-table-header-options > % this.t(Options) %> /th> /tr> /thead> tfoot> tr> td>/td> td>/td> td>/td> td>/td> td>/td> /tr> /tfoot> tbody idptzTableBody> % if(this.model.get(camera_settings).ptz_stations) {%> % _.each(Object.getOwnPropertyNames(this.model.get(camera_settings).ptz_stations), function(item){ %> tr classcamera_settings_ptz_row id%item%>> td> div classspan11> a href# classstation_up>i classicon-arrow-up>/i>/a> a href# classstation_down>i classicon-arrow-down>/i>/a> /div> /td> td> %-item%> /td> td> input typecheckbox classselected-home> /td> td> input min5 value30 typenumber stylewidth:85% classdwell-time> /td> td> button classgoto-ptz-station>i classicon-arrow-right>/i>/button>button classedit-ptz-station>i classicon-pencil>/i>/button>button classremove-ptz-station>i classicon-trash>/i>/button> /td> /tr> % }); %> %}%> /tbody> /table> /div> /div> /div> div idcamera_settings_newPtzStation styledisplay:none;> input idcamera_settings_newPtzName typetext> div classbtn-group stylemargin-top: 10px;margin-bottom: 2px;> button classbtn-small btn-info idcamera_settings_confNewStation data-testidmodal-camera-settings-tab-ptz-footer-save > % this.t(Save) %> /button> button classbtn-small btn-warning idcamera_settings_cancelNewStation data-testidmodal-camera-settings-tab-ptz-footer-cancel > % this.t(Cancel) %> /button> /div> /div> /form> /div> div classtab-pane idcsAnalytics> !-- launches help window from help/ data_link attribute + .html --> ul classnav nav-tabs> li idcsAnalytics_master_tab classactive> a href#csAnalytics_master data-toggletab data-testidmodal-camera-settings-tab-analytics-label-enable > %this.t(Enable)%> /a> /li> li classana-tab> a href#csAnalytics_object_counting data-toggletab data-testidmodal-camera-settings-tab-analytics-label-counting > %this.t(Counting)%> /a> /li> li classana-tab> a href#csAnalytics_line_crossing data-toggletab data-testidmodal-camera-settings-tab-analytics-label-line-crossing > %this.t(Line Crossing)%> /a> /li> li classana-tab> a href#csAnalytics_intrusion data-toggletab data-testidmodal-camera-settings-tab-analytics-label-intrusion > %this.t(Intrusion)%> /a> /li> li classana-tab> a href#csAnalytics_loitering data-toggletab data-testidmodal-camera-settings-tab-analytics-label-loitering > %this.t(Loitering)%> /a> /li> li classana-tab> a href#csAnalytics_tampering data-toggletab data-testidmodal-camera-settings-tab-analytics-label-tampering > %this.t(Tampering)%> /a> /li> li classana-tab> a href#csAnalytics_lpr data-toggletab data-testidmodal-camera-settings-tab-analytics-label-vsp > %this.t(VSP)%> /a> /li> li classana-tab> a href#csAnalytics_uncanny_lpr data-toggletab data-testidmodal-camera-settings-tab-analytics-label-lpr > %this.t(LPR)%> /a> /li> /ul> div classtab-content idcsAnalytics-panes> div classtab-pane active idcsAnalytics_master> span classpull-right help-link data_linkcamera_settings_analytics_enable_analytics> i classicon-question-sign een-help-link>/i> /span> form classform-horizontal> div idcs_analytics_sub_menu> div classcontainer-fluid> div classrow-fluid> div classspan2 editCamera-analytics-message data-testidmodal-camera-settings-tab-analytics-header-label-enable-analytics > % this.t(Enable Analytics) %> /div> div classspan9> p classred idanalytics-billing-message data-testidmodal-camera-settings-tab-analytics-warning-additional-fee > % this.t(Turning on analytics may use additional resources.) %> /p> p classred idanalytics-application-limit-message data-testidmodal-camera-settings-tab-analytics-warning-not-able-to-enable-both-analytics > % this.t(You can not enable both device analytics and VMS analytics. Please choose one option to continue.) %> /p> p classgreen ideditCamera__analytics-quality-message data-testidmodal-camera-settings-tab-analytics-info-set-preview-quality > % this.t(We have set Preview Quality to analytics for you.) %> a classgreen editCamera__analytics-quality-see-link href#>See or revert./a> /p> /div> /div> /div> div classcontrol-group control-group-counting> label classcontrol-label for data-testidmodal-camera-settings-tab-analytics-input-label-counting > % this.t(Counting) %>: /label> div classcontrols> div classrow-fluid> div classspan1 camera-setting analytic-check> input classanalytic-enable-check bridge-base-analytic data-anacsAnalytics_object_counting typecheckbox ideditCamera__object_counting_enabled valuetrue /> /div> div classspan9 analytics-description data-testidmodal-camera-settings-tab-analytics-input-info-counting > span> %this.t(Object counting is used to count the number of objects crossing over a line. This can be used for counting cars, people, or other objects. Total count per day is maintained. Graphs are available.) %> /span> /div> /div> /div> /div> div classcontrol-group control-group-line-crossing> label classcontrol-label for data-testidmodal-camera-settings-tab-analytics-input-label-line-crossing > % this.t(Line Crossing) %>: /label> div classcontrols> div classrow-fluid> div classspan1 camera-setting analytic-check> input classanalytic-enable-check bridge-base-analytic data-anacsAnalytics_line_crossing typecheckbox ideditCamera__line_crossing_enabled valuetrue /> /div> div classspan9 analytics-description data-testidmodal-camera-settings-tab-analytics-input-info-line-crossing > span> %this.t(Detects when an object crosses a line. Direction may be specified and Notifications may be generated) %> /span> /div> /div> /div> /div> div classcontrol-group control-group-intrusion-detection> label classcontrol-label for data-testidmodal-camera-settings-tab-analytics-input-label-intrusion-detection > % this.t(Intrusion Detection) %>: /label> div classcontrols> div classrow-fluid> div classspan1 camera-setting analytic-check> input classanalytic-enable-check bridge-base-analytic data-anacsAnalytics_intrusion typecheckbox ideditCamera__intrusion_detection_enabled valuetrue /> /div> div classspan9 analytics-description data-testidmodal-camera-settings-tab-analytics-input-info-line-crossing > span> %this.t(Intrusion detection is used to generate an alert when an object enters a forbidden area. The forbidden area may be any size and shape. Notifications may be sent.) %> /span> /div> /div> /div> /div> div classcontrol-group control-group-loitering-analytics> label classcontrol-label for data-testidmodal-camera-settings-tab-analytics-input-label-loitering > % this.t(Loitering) %>: /label> div classcontrols> div classrow-fluid> div classspan1 camera-setting analytic-check> input classanalytic-enable-check bridge-base-analytic data-anacsAnalytics_loitering typecheckbox ideditCamera__loitering_enabled valuetrue /> /div> div classspan9 analytics-description data-testidmodal-camera-settings-tab-analytics-input-info-loitering > span> %this.t(Loitering detection is used to generate an alert when a moving object remains in a predefined area for a specific amount of time. Notifications may be sent.) %> /span> /div> /div> /div> /div> div classcontrol-group control-group-tampering-analytics> label classcontrol-label foreditCamera__tampering_enabled data-testidmodal-camera-settings-tab-analytics-input-label-tampering > % this.t(Tampering) %>: /label> div classcontrols> div classrow-fluid> div classspan1 camera-setting analytic-check> input classanalytic-enable-check bridge-base-analytic data-anacsAnalytics_tampering typecheckbox ideditCamera__tampering_enabled valuetrue /> /div> div classspan9 analytics-description data-testidmodal-camera-settings-tab-analytics-input-info-tampering > span> %this.t(Tampering detection is used to generate an alert when someone is trying to block the cameras view or the image is greatly altered.) %> /span> /div> /div> /div> /div> % if(userList.getCurrentUser().checkFeatureFlag(lpr) && this._LPRSupport()) { %> div classcontrol-group control-group-lpr> label classcontrol-label foreditCamera__object_lpr_enabled data-testidmodal-camera-settings-tab-analytics-input-label-vsp > % this.t(VSP(Vehicle Surveillance Package)) %>: /label> div classcontrols> div classrow-fluid> div classspan1 camera-setting analytic-check> input classanalytic-enable-check bridge-base-analytic data-anacsAnalytics_lpr typecheckbox ideditCamera__object_lpr_enabled valuetrue /> /div> div classspan9 analytics-description data-testidmodal-camera-settings-tab-analytics-input-info-vsp > span> %this.t(is used to read and record vehicle license plates entering or exiting a facility and to create alerts and notifications for a vehicle allowed, denied, or out of area for specified periods of time.) %> /span> /div> /div> /div> /div> % } %> % if(this._checkExtensionSupport(this._getCapabilityUncannyLPR())) { %> div classcontrol-group control-group-uncanny-lpr> label classcontrol-label foreditCamera__object_uncanny_lpr_apply_enabled data-testidmodal-camera-settings-tab-analytics-input-label-lpr > % this.t(License Plate Recognition(LPR)) %>: /label> div classcontrols> div classrow-fluid> div classspan1 camera-setting analytic-check> % if (this.cloud_lpr_enabled) { %> input typecheckbox disabled checked valuetrue /> % } else { %> input classanalytic-enable-check bridge-base-analytic data-anacsAnalytics_uncanny_lpr typecheckbox ideditCamera__object_uncanny_lpr_apply_enabled valuetrue /> % } %> /div> div classspan9 analytics-description> div classrow-fluid data-testidmodal-camera-settings-tab-analytics-input-info-lpr > span> %this.t(License Plate Recognition/ Number Plate Recognition is used to read the license plate of the vehicle. Database functionality is available which allows to have alert for a specific license plates.) %> /span> % if (this.cloud_lpr_enabled) { %> br/> % this.t(Cloud LPR can be only configured in) %> a href/#/goToEnhancedInterface>% this.t(enhanced interface) %>/a>. % } %> /div> div classrow-fluid stylemargin-top: 4px; data-testidmodal-camera-settings-tab-analytics-input-label-lpr-add-on-features > b>% this.t(LPR Add-On Features)%>/b> /div> div classrow-fluid> div classspan1 camera-setting analytic-check> input classanalytic-enable-check bridge-base-analytic data-anacsAnalytics_uncanny_lpr_access_control typecheckbox valuetrue /> /div> div classspan11 analytics-description data-testidmodal-camera-settings-tab-analytics-input-info-lpr-add-on-features > b>% this.t(Local ID)%>/b> span> - %this.t(Enable LPR system to integrate with external access control system using locally stored license plate information.) %> /span> /div> /div> /div> /div> /div> /div> % } %> % if(userList.getCurrentUser().checkFeatureFlag(video_search_ga)) { %> div classcontrol-group control-group-scene-analysis> label classcontrol-label foreditCamera__scene_analysis_enabled data-testidmodal-camera-settings-tab-analytics-input-label-scene_analysis > % this.t(Scene Analysis) %>: /label> div classcontrols> div classrow-fluid> div classspan1 camera-setting analytic-check> % var checked this.model.get(scene_analysis) ? checked : ; %> input classanalytic-enable-check data-anacsAnalytics_scene_analysis typecheckbox ideditCamera__scene_analysis_enabled valuetrue %checked%> /> /div> div classspan9 analytics-description data-testidmodal-camera-settings-tab-analytics-input-info-scene_analysis > span> %this.t(Enabling Scene analysis will help capture events in Video Search including backpacks, bicycles, people and vehicles.) %> /span> /div> /div> /div> /div> % } %> /div> /form> div classeditCamera__analytics_warning_container> p classfrom-motion-warning data-testidmodal-camera-settings-tab-analytics-warning-container > %this.t(Zero sensitivity motion regions are applied to the analytics.) %> /p> /div> /div> div classtab-pane idcsAnalytics_line_crossing> span classpull-right help-link data_linkcamera_settings_analytics_line_crossing> i classicon-question-sign een-help-link>/i> /span> br> div classwell csAnalytics_cam_compatible_msg_wrapper data-testidmodal-camera-settings-tab-analytics-line-crossing-warning > span classred>i classicon-remove-circle>/i> % this.t(This camera is not optimized for analytics.)%>/span> /div> form classform-horizontal> div idcsAnalytics_line_crossing_container> /div> /form> /div> div classtab-pane idcsAnalytics_object_counting> span classpull-right help-link data_linkcamera_settings_analytics_counting> i classicon-question-sign een-help-link>/i> /span> br> div classwell csAnalytics_cam_compatible_msg_wrapper data-testidmodal-camera-settings-tab-analytics-counting-warning > span classred>i classicon-remove-circle>/i> % this.t(This camera is not optimized for analytics.)%>/span> /div> form classform-horizontal> div idcsAnalytics_object_counting_container> /div> /form> /div> div classtab-pane idcsAnalytics_intrusion> span classpull-right help-link data_linkcamera_settings_analytics_intrusion> i classicon-question-sign een-help-link>/i> /span> br> div classwell csAnalytics_cam_compatible_msg_wrapper data-testidmodal-camera-settings-tab-analytics-intrusion-warning > span classred>i classicon-remove-circle>/i> % this.t(This camera is not optimized for analytics.)%>/span> /div> form classform-horizontal> div idcsAnalytics_intrusion_regions_container> /div> /form> /div> div classtab-pane idcsAnalytics_loitering> span classpull-right help-link data_linkcamera_settings_analytics_loitering> i classicon-question-sign een-help-link>/i> /span> br> div classwell csAnalytics_cam_compatible_msg_wrapper data-testidmodal-camera-settings-tab-analytics-loitering-warning > span classred>i classicon-remove-circle>/i> % this.t(This camera is not optimized for analytics.)%>/span> /div> form classform-horizontal> div idcsAnalytics_loitering_container> /div> /form> /div> div classtab-pane idcsAnalytics_tampering> span classpull-right help-link data_linkcamera_settings_analytics_tampering> i classicon-question-sign een-help-link>/i> /span> br> div classwell csAnalytics_cam_compatible_msg_wrapper data-testidmodal-camera-settings-tab-analytics-tampering-warning > span classred>i classicon-remove-circle>/i> % this.t(This camera is not optimized for analytics.)%>/span> /div> form classform-horizontal> div idcsAnalytics_tampering_regions_container>/div> /form> /div> div classtab-pane idcsAnalytics_lpr> span classpull-right help-link data_linkcamera_settings_analytics_lpr> i classicon-question-sign een-help-link>/i> /span> br> div classwell csAnalytics_cam_compatible_msg_wrapper data-testidmodal-camera-settings-tab-analytics-lpr-warning > span classred>i classicon-remove-circle>/i> % this.t(This camera is not optimized for analytics.)%>/span> /div> form classform-horizontal> div idcsAnalytics_lpr_container>/div> /form> /div> div classtab-pane idcsAnalytics_uncanny_lpr> span classpull-right help-link data_linkcamera_settings_analytics_lpr_new> i classicon-question-sign een-help-link>/i> /span> br> div classwell csAnalytics_cam_compatible_msg_wrapper data-testidmodal-camera-settings-tab-analytics-lpr-new-warning > span classred>i classicon-remove-circle>/i> % this.t(This camera is not optimized for analytics.)%>/span> /div> form classform-horizontal> div idcsAnalytics_uncanny_lpr_container>/div> /form> /div> /div> /div> % var device_analytics this.model.device_analytics; %> div classtab-pane idcsDeviceAnalytics> ul classnav nav-tabs> li idcsDeviceAnalytics_master_tab classactive> a href#csDeviceAnalytics_master data-toggletab data-testidmodal-camera-settings-tab-analytics-tab-label-enable > %this.t(Enable)%> /a> /li> % _.each(device_analytics, function(device_analytic) { %> li classdevice-ana-tab> a href%`#csDeviceAnalytics_${device_analytic.provider}`%> data-toggletab > %device_analytic.schema.title%> /a> /li> % }) %> /ul> div classtab-content idcsDeviceAnalytics-panes> div classtab-pane active idcsDeviceAnalytics_master> span classpull-right help-link data_linkcamera_settings_device_analytics_enable_analytics> i classicon-question-sign een-help-link>/i> /span> form classform-horizontal> div idcs_device_analytics_sub_menu> div classcontainer-fluid> div classrow-fluid> div classspan2 editCamera-analytics-message>% this.t(Enable Analytics) %>/div> div classspan9> p classred> % if(this.model.attributes.settings.extra.make Bosch) { %> % this.t(On camera analytics must be configured via the) %> a hrefhttps://commerce.boschsecurity.com/pl/en/Configuration-Manager/p/F.01U.360.102/ target_blank > % this.t(Bosch Configuration Manager.) %> /a> % } else { %> % this.t(On camera analytics must be configured via the web interface of the camera.) %> /p> % } %> p classred iddevice-analytics-application-limit-message > % this.t(You can not enable both device analytics and VMS analytics. Please choose one option to continue.) %> /p> /div> /div> /div> % _.each(device_analytics, function(device_analytic) { %> div classcontrol-group> label classcontrol-label>%device_analytic.schema.title%>/label> div classcontrols> div classrow-fluid> div classspan1 camera-setting analytic-check> input classdevice-analytic-enable-check id%`device-analytic-${device_analytic.provider}-checkbox`%> data-ana%`csDeviceAnalytics_${device_analytic.provider}`%> typecheckbox valuetrue /> /div> div classspan9 analytics-description> span> %device_analytic.schema.description%> /span> /div> /div> /div> /div> % }) %> /div> /form> /div> % _.each(device_analytics, function(device_analytic) { %> div classtab-pane id%`csDeviceAnalytics_${device_analytic.provider}`%>> /div> % }) %> /div> /div> div classtab-pane idcsThermal>/div> div classtab-pane idcsMobotixMotion>/div> div classtab-pane idcsMobotixMotionMessage>/div> div classtab-pane idcsAIFiltering> Coming soon /div> div classtab-pane idcsMotion> !-- launches help window from help/ data_link attribute + .html --> span classpull-right idcsCamera-help data_linkcamera_settings_motion> i classicon-question-sign een-help-link>/i> /span> br> form classform-horizontal> input typehidden ideditCamera__motion_zone/> div classrow-fluid control-group camera-setting stylepadding-bottom: 5px; border-bottom: 1px dotted #ccc> label classspan3 foreditCamera__motion_sensitivity styletext-align:right titleSensitivity defines how much a block has to differe for the previous frame/background, to be consdered in motion. It is current defined as max(1,500(1-x)), and is compared againts the abs of the coefficient differences within the block dct. Under most conditions sensitivity between .8 and .95 work well, with sensitivity in the 0.01 range doing well as a motion mask. It is heavily influenced by the weight matrix and the noise filter data-testidmodal-camera-settings-tab-motion-master-motion-sensitivity > % this.t(Master Motion Sensitivity) %>: /label> div classspan4 een-slider-container> div ideditCamera__motion_sensitivity classeen-slider>/div> /div> label classspan3 foreditCamera__motion_size_ratio styletext-align:right titleMotion size ratio is the percentage of the entire screen that must be in motion to start/continue a motion event data-testidmodal-camera-settings-tab-motion-master-motion-object-size > % this.t(Master Motion Object Size) %>: /label> div classspan2> select classspan10 ideditCamera__motion_size_ratio> option value0.001>% this.t(Small) %>/option> option value0.01>% this.t(Medium) %>/option> option value0.1>% this.t(Large) %>/option> /select> /div> /div> div classrow-fluid control-group camera-setting advanced_options stylepadding-bottom: 5px; border-bottom: 1px dotted #ccc; titleMotion noise filter reduces the number of dct bands to process for motion detection. It is currently defined as max(1,min(16(1-x),8)), where 1 dc only and 16 is the entire 8x8 dct block. Note this impacts snesitivity. Increase this to reduce trees waving in the wind triggering motion., decrease it to track very small items.> label classspan3 foreditCamera__motion_noise_filter styletext-align:right data-testidmodal-camera-settings-tab-motion-master-noise-filter > % this.t(Master Noise Filter) %>: /label> div classspan4 een-slider-container> div ideditCamera__motion_noise_filter classeen-slider stylewidth: 205px;>/div> /div> /div> div classrow-fluid control-group camera-setting advanced_options stylepadding-bottom: 5px; border-bottom: 1px dotted #ccc; titleHold off defines how long an object must remain in motion before a motion event is started> label classspan3 foreditCamera__motion_event_holdoff_ms styletext-align:right data-testidmodal-camera-settings-tab-motion-master-event-hold-off > % this.t(Master Event Hold Off (ms)) %>: /label> div classspan4 een-slider-container> div ideditCamera__motion_event_holdoff_ms classeen-slider stylewidth: 205px;>/div> /div> /div> div classrow-fluid control-group camera-setting advanced_options stylepadding-bottom: 5px; border-bottom: 1px dotted #ccc; titleHold on defines how long to wait stopping a motion event. If new motion occurs within the interval the event will be extended. Note we currently run motion detection at 250ms (max), so anything smaller result in no object tracking> label classspan3 foreditCamera__motion_event_holdon_ms styletext-align:right data-testidmodal-camera-settings-tab-motion-master-event-hold-on > % this.t(Master Event Hold On (ms)) %>: /label> div classspan4 een-slider-container> div ideditCamera__motion_event_holdon_ms classeen-slider stylewidth: 205px;>/div> /div> /div> div classrow-fluid control-group camera-setting advanced_options stylepadding-bottom: 5px; border-bottom: 1px dotted #ccc; titleForeground hold defines how long a block must see no change before it is committed to the backgound> label classspan3 foreditCamera__motion_hold_interval styletext-align:right data-testidmodal-camera-settings-tab-motion-master-foreground-hold > % this.t(Master Foreground Hold (seconds)) %>: /label> div classspan4 camera-setting> select classspan10 ideditCamera__motion_hold_interval>/select> /div> /div> div classrow-fluid control-group camera-setting advanced_options stylepadding-bottom: 5px; border-bottom: 1px dotted #ccc; titleObject expand ratio defines the amount an object bounding box should be expanded to search for motion block in subsequent frames to link to the same object. Increase this to better track fast moving objects, decrease this if dealing with large crowds and close moving objects.> label classspan3 foreditCamera__motion_expand_ratio styletext-align:right data-testidmodal-camera-settings-tab-motion-master-object-search-expand-ratio > % this.t(Master Object Search Expand Ratio) %>: /label> div classspan4 camera-setting> select classspan10 ideditCamera__motion_expand_ratio>/select> /div> /div> div classrow-fluid control-group camera-setting advanced_options stylepadding-bottom: 5px; border-bottom: 1px dotted #ccc; titleThe weights vector defines the relative weighting of the frequency bands of the dct. The first entry is the DC coefficient, the next the 0.5, etc. Note that for each increase in frequency there is inherently an additional coefficient - so a flat freqeuncy weight is 8 4 3 2 2 1 1 1. Decrease the first two coefficient to ignore large lighting changes (lights on/off), Increase the first few coefficients to reduce sensitivity to small changes.> label classspan3 foreditCamera__motion_weights styletext-align:right data-testidmodal-camera-settings-tab-motion-master-weights > % this.t(Master Weights) %>: /label> div classspan4> input stylewidth: 10px; typetext ideditCamera__motion_weights_0 maxlength1> input stylewidth: 10px; typetext ideditCamera__motion_weights_1 maxlength1> input stylewidth: 10px; typetext ideditCamera__motion_weights_2 maxlength1> input stylewidth: 10px; typetext ideditCamera__motion_weights_3 maxlength1> input stylewidth: 10px; typetext ideditCamera__motion_weights_4 maxlength1> input stylewidth: 10px; typetext ideditCamera__motion_weights_5 maxlength1> input stylewidth: 10px; typetext ideditCamera__motion_weights_6 maxlength1> input stylewidth: 10px; typetext ideditCamera__motion_weights_7 maxlength1> /div> /div> div ideditCamera__motion_container> /div> /form> /div> div classtab-pane idcsPrivacy> !-- launches help window from help/ data_link attribute + .html --> span classpull-right idcsCamera-help data_linkcamera_settings_privacy> i classicon-question-sign een-help-link>/i> /span> form classform-horizontal> div ideditCamera__privacy_management> input typehidden ideditCamera__privacy_zone/> div classrow-fluid stylemargin-bottom: 10px> div classroi-container> div ideditCamera__roi_image>/div> canvas ideditCamera__privacy_image width640 height360>/canvas> canvas ideditCamera__privacy_boxes classcamera-rois width640 height360>/canvas> /div> input typehidden ideditCamera__privacy_id/> /div> div classrow-fluid ideditCamera__edit_privacy_region styledisplay:none; margin-bottom: 60px;> div classrow-fluid span6> div classrow-fluid control-group span12 stylemargin-left:0px;> div classspan10> input classspan12 typetext ideditCamera__privacy_name placeholder% this.t(Region Name) %>/> /div> /div> /div> div classrow-fluid span12> div classspan4> button classbtn-small btn-info ideditCamera__cancel_privacy_zone data-testidmodal-camera-settings-tab-privacy-button-cancel-region > % this.t(Cancel Region) %> /button> button classbtn-small btn-info ideditCamera__add_privacy_zone data-testidmodal-camera-settings-tab-privacy-button-save-region > % this.t(Save Region) %> /button> /div> div classspan8 red ideditCameraModal__privacy_msg>/div> /div> /div> div classrow-fluid ideditCamera__privacy_regions> div classrow-fluid span12> div classspan2> h5 data-testidmodal-camera-settings-tab-privacy-header-privacy-regions >% this.t(Privacy Regions) %>/h5> /div> div classspan10> button classbtn-small btn-info ideditCamera__new_privacy_zone data-testidmodal-camera-settings-tab-privacy-button-new-region > % this.t(New Region) %> /button> /div> /div> div classrow-fluid stylewidth:98%> table classtable table-condensed table-bordered table-striped ideditCamera__privacy_zones> thead> tr> th stylewidth:7% data-testidmodal-camera-settings-tab-privacy-table-header-order > % this.t(Order) %> /th> th stylewidth:83% data-testidmodal-camera-settings-tab-privacy-table-header-name > % this.t(Name) %> /th> th stylewidth:10% data-testidmodal-camera-settings-tab-privacy-table-header-actions > % this.t(Actions) %> /th> /tr> /thead> tfoot> tr> td> /td> td>/td> td>/td> /tr> /tfoot> tbody> % _.each(model.get(privacy), function(item) { %> tr id%item.id%> data-roiid%item.roiid%> data-name%item.name%> data-roi_name%item.roi_name%> data-roi%item.roi%> data-priority%item.priority%> data-color%item.color%>> td stylebackground-color:#%item.color%>> i classicon-arrow-up>/i> i classicon-arrow-down>/i> span>%-item.priority_text%>/span> /td> td> %-item.name%> /td> td> button classedit-privacy-zone>i classicon-pencil>/i>/button>button classremove-privacy-zone>i classicon-trash>/i>/button> /td> /tr> % }) %> /tbody> /table> /div> /div> /div> /form> /div> div classtab-pane idcsAudio> !-- launches help window from help/ data_link attribute + .html --> span classpull-right idcsCamera-help data_linkcamera_settings_audio> i classicon-question-sign een-help-link>/i> /span> form classform-horizontal> div classcontrol-group style%(this.model.get(camera_settings)audio_enable null ? display: none; : )%>> label classcontrol-label for data-testidmodal-camera-settings-tab-audio-input-label-audio-enabled > % this.t(Audio Enabled) %>: /label> div classcontrols> div classrow-fluid> div classspan1 camera-setting> input typecheckbox ideditCamera__audio_enable valuetrue/> /div> !-- label classoffset2 control-label for>Allow Live Audio Listening:/label> div classspan1> input typecheckbox ideditCamera__allow_live_audio_listening valuetrue /> /div> --> /div> /div> /div> % var source_camera cameraList.findByDeviceID(model.get(camera_settings)audio_clone_source); var show_copy_from !model.get(camera_settings)audio_enable && source_camera ? true : false; var bridge_id model.deviceBridge(); var bridge_cameras bridge_id && cameraList.filterBridge(bridge_id) || null; var show_copy_to !show_copy_from && model.get(camera_settings)audio_enable ! null && bridge_cameras && bridge_cameras.length>1 ? true : false; %> div classcontrol-group style%(!show_copy_from?display:none:)%>> label classcontrol-label for data-testidmodal-camera-settings-tab-audio-input-label-copy-audio-from > %this.t(Copy Audio From)%>: /label> div classcontrols> label classcheckbox> input typecheckbox ideditCamera__audio_clone_source_id value1 %(source_camera?checked:)%> /> %-(source_camera && source_camera.get(deviceName) || )%> /label> /div> /div> div classcontrol-group css-audio-copy-to style%(!show_copy_to?display:none:)%>> label classcontrol-label for data-testidmodal-camera-settings-tab-audio-input-label-copy-audio-to > %this.t(Copy Audio To)%>: /label> div classcontrols> div classrow-fluid> div classspan6 camera-setting> select classspan12 multiplemultiple ideditCamera__audio_clone_target_ids> % _.each(bridge_cameras, function(item) { %> % if(item.get(deviceType) ! speaker) { %> %if(item.get(deviceID) ! model.get(deviceID)){%> option value%item.get(deviceID)%> %($.inArray(item.get(deviceID), model.get(camera_settings)audio_clone_targets)>0 ? selected : )%>>%-item.get(deviceName)%>/option> %}%> % } %> % }) %> /select> /div> /div> /div> /div> div styledisplay:none> div classcontrol-group camera-setting data-camera-settingaudio_sensitivity> label classcontrol-label for data-testidmodal-camera-settings-tab-audio-input-label-audio-sensitivity > %this.t(Audio Sensitivity)%>: /label> div classcontrols> div classrow-fluid> div classspan11> div ideditCamera__audio_sensitivity>/div> /div> /div> /div> /div> div classcontrol-group> label classcontrol-label for data-testidmodal-camera-settings-tab-audio-input-label-audio-trigger-recording > %this.t(Audio Trigger Recording)%>: /label> div classcontrols> div classrow-fluid control-group camera-setting> div classspan1> input typecheckbox ideditCamera__audio_event_enable valuetrue/> /div> div classspan4> select classspan12 ideditCamera__audio_record_when> option valueall>%this.t(24 hours)%>/option> option valuework>%this.t(Work hours)%> (%model.get(camera_work_hours)%>)/option> option valuenonwork>%this.t(Non-work hours)%>/option> option valuecustom>%this.t(Custom hours)%>/option> /select> /div> div classspan7 hide> div ideditCamera__audio_record_when_custom>/div> /div> /div> /div> /div> div classcontrol-group stylemargin-bottom: 110px !important> label classcontrol-label for data-testidmodal-camera-settings-tab-audio-input-label-alert-when-audio > %this.t(Alert When Audio)%>: /label> div classcontrols> div classrow-fluid control-group> div classspan1> input typecheckbox value1 /> /div> div classspan4>select ideditCamera__audio_alert_when classspan12> option valueall>%this.t(24 hours)%>/option> option valuework>%this.t(Work hours)%> (%model.get(camera_work_hours)%>)/option> option valuenonwork>%this.t(Non-work hours)%>/option> option valuecustom>%this.t(Custom hours)%>/option> /select>/div> div classspan7 hide> div ideditCamera__audio_alert_when_custom>/div> /div> /div> div classrow-fluid control-group> label classcontrol-label stylewidth:90px !important for data-testidmodal-camera-settings-tab-audio-input-label-alert-mode > %this.t(Alert Mode)%>: /label> div classspan3> select classspan12 multiplemultiple ideditCamera__audio_alert_mode> option valueselect-all-option>%this.t(All)%>/option> % _.each(model.get(account_alert_modes), function(item) { %> option value% item %>>%- item %>/option> % }) %> /select> /div> label classcontrol-label stylewidth:85px !important for data-testidmodal-camera-settings-tab-audio-input-label-alert-level > %this.t(Alert Level)%>: /label> div classspan3> select classspan12 multiplemultiple ideditCamera__audio_alert_level> option valueselect-all-option>%this.t(All)%>/option> option value1>1/option> option value2>2/option> /select> /div> /div> div classrow-fluid control-group> label classcontrol-label stylewidth:90px !important for data-testidmodal-camera-settings-tab-audio-input-label-alert-who > %this.t(Alert Who)%>: /label> div classspan8> select classspan12 multiplemultiple ideditCamera__audio_alert_who> option valueselect-all-option>%this.t(All)%>/option> % _.each(model.get(users), function(item) { %> option value% item.get(id) %>>% item.getDisplayName() %>/option> % }) %> /select> /div> /div> /div> /div> /div> %if(Object.keys(model.get(talkdownConfig)).length && !model.isProxy()){%> div classrow-fluid> h5 data-testidmodal-camera-settings-tab-audio-header-2-way-audio-settings > % this.t(2-Way Audio Settings) %> /h5> /div> div classcontrol-group> label classcontrol-label for data-testidmodal-camera-settings-tab-audio-input-label-audio-mode > %this.t(Audio Mode)%>: /label> div classcontrols> div classrow-fluid> div classspan3 camera-setting> select classspan11 ideditCamera__two_way_audio_mode> option valuedisabled %(model.get(two_way_audio_mode) disabled ? selected : )%>>% this.t(Disabled) %>/option> option valuehalf_duplex %(model.get(two_way_audio_mode) half_duplex ? selected : )%>>% this.t(Talk Down) %>/option> option valuefull_duplex %(model.get(two_way_audio_mode) full_duplex ? selected : )%>>% this.t(2-Way Audio) %>/option> /select> /div> /div> /div> span classaudio-mode-msg red ideditCameraModal_audio_mode_msg styledisplay: none;>/span> /div> div ideditCameraModal_sip_config> div classcontrol-group ideditCameraModal_protocol> label classcontrol-label for>%this.t(Audio Protocol)%>:/label> div classcontrols> div classrow-fluid> div classspan3 camera-setting> select classspan11 ideditCamera__two_way_audio_protocol> % const protocols model.get(availableProtocols); %> % _.each(protocols, function(protocol) { %> option value% protocol %> % (model.get(talkdownConfig).protocol protocol ? selected : ) %>> % protocol.toUpperCase() %> /option> % }); %> /select> /div> /div> /div> span classaudio-mode-msg red ideditSpeaker_audio_mode_msg styledisplay: none;>/span> /div> div classcontrol-group ideditCameraModal_sip_credential> label classcontrol-label for data-testidmodal-camera-settings-tab-audio-input-label-audio-sip-username-password > % this.t(SIP Username/Password) %>: /label> div classcontrols> div classrow-fluid> input ideditCamera__sipu classspan5 typetext maxlength40 placeholder% this.t(SIP Username) %> autocompleteoff value%- model.get(sipUsername) %>/> input ideditCamera__sipp classspan5 input-password typetext maxlength40 placeholder% this.t(SIP Password) %> autocompleteoff value%- model.get(sipPassword) %>/> /div> /div> /div> div classrow-fluid> p data-testidmodal-camera-settings-tab-audio-input-label-audio-link-the-speaker-to-camera > %this.t(Link the speaker to a camera or cameras.)%> /p> /div> div classrow-fluid> div classoffset1 span10> div classspan5 data-testidmodal-camera-settings-tab-audio-input-label-audio-unlinked > %this.t(Unlinked)%> /div> div classspan5 offset1 data-testidmodal-camera-settings-tab-audio-input-label-audio-linked > %this.t(Linked)%> /div> /div> /div> div classrow-fluid> div classoffset1 span10 ideditCamera__associate_camera_menu>/div> /div> /div> % } %> /form> /div> div classtab-pane idcsImage> !-- launches help window from help/ data_link attribute + .html --> span classpull-right idcsCamera-help data_linkcamera_settings_image> i classicon-question-sign een-help-link>/i> /span> form classform-horizontal> div classcontrol-group camera-setting data-camera-settingimage_brightness stylemargin-top:20px> label classcontrol-label for>Brightness:/label> div classcontrols> div classrow-fluid> div classspan11> div ideditCamera__image_brightness>/div> /div> /div> /div> /div> div classcontrol-group camera-setting data-camera-settingimage_contrast> label classcontrol-label for>Contrast:/label> div classcontrols> div classrow-fluid> div classspan11> div ideditCamera__image_contrast>/div> /div> /div> /div> /div> div classcontrol-group camera-setting data-camera-settingimage_sharpness> label classcontrol-label for>Sharpness:/label> div classcontrols> div classrow-fluid> div classspan11> div ideditCamera__image_sharpness>/div> /div> /div> /div> /div> div classcontrol-group camera-setting data-camera-settingimage_hue> label classcontrol-label for>Hue:/label> div classcontrols> div classrow-fluid> div classspan11> div ideditCamera__image_hue>/div> /div> /div> /div> /div> div classcontrol-group camera-setting data-camera-settingimage_saturation> label classcontrol-label for>Saturation:/label> div classcontrols> div classrow-fluid> div classspan11> div ideditCamera__image_saturation>/div> /div> /div> /div> /div> /form> /div> div classtab-pane idcsLocation> !-- launches help window from help/ data_link attribute + .html --> span classpull-right idcsCamera-help data_link% model.isMCACamera() ? camera_settings_mca_location : camera_settings_location %>> i classicon-question-sign een-help-link>/i> /span> br> form classform-horizontal> div classcontrol-group camera-setting> label classcontrol-label for data-testidmodal-camera-settings-tab-location-input-label-name > % this.t(Location Name) %>: /label> div classcontrols> div classrow-fluid> div classspan12> % if(this.is_location_feature_enabled && !model.get(deviceShare)) { %> div ideditCameraModal_location_select classspan9>/div> % if(this.is_edit_location_permission) { %> div ideditCameraModal_location_add_button>/div> % } %> % } else { %> input classspan9 typetext ideditCamera__site_name maxlength255 placeholder value%- model.get(site_name) %> /> % } %> /div> /div> /div> /div> %if(!model.isMCACamera()){%> div classcontrol-group camera-setting> label classcontrol-label for data-testidmodal-camera-settings-tab-location-input-label-street-address > % this.t(Street Address) %>: /label> div classcontrols> div classrow-fluid> div classspan12> input classspan9 input-xlarge typetext % if(this.is_location_feature_enabled && !model.get(deviceShare)) { %> disabled % } %> ideditCamera__street_address maxlength255 placeholder value%- model.get(street_address) %> /> % if(!this.is_location_feature_enabled) { %> span data-testidmodal-camera-settings-tab-location-input-info-street-address > (% this.t(street, city, state, zip) %>) /span> % } %> /div> /div> /div> /div> % if(this.is_location_feature_enabled && !model.get(deviceShare)) { %> div classcontrol-group camera-setting> div classcontrols> div classrow-fluid> input classspan9 input-xlarge typetext disabled ideditCamera__street_address_2 maxlength255 placeholder value%- model.get(street_address_2) %> /> /div> /div> /div> div classcontrol-group camera-setting> label classcontrol-label for data-testidmodal-camera-settings-tab-location-input-label-city > % this.t(City) %>: /label> div classcontrols> div classrow-fluid> div classspan3> input classinput-mini span10 typetext disabled ideditCamera__city maxlength255 placeholder value%- model.get(city) %>/> /div> label classcontrol-label span4 for data-testidmodal-camera-settings-tab-location-input-label-region > % this.t(State / Province / Region) %>: /label> div classspan2> input classinput-mini span12 typetext disabled ideditCamera__region maxlength255 placeholder value%- model.get(state) %>/> /div> /div> /div> /div> div classcontrol-group camera-setting> label classcontrol-label for data-testidmodal-camera-settings-tab-location-input-label-country > % this.t(Country) %>: /label> div classcontrols> div classrow-fluid> div classspan3> input classinput-mini span10 typetext disabled ideditCamera__country maxlength255 placeholder value%- model.get(country) %>/> /div> label classcontrol-label span4 for data-testidmodal-camera-settings-tab-location-input-label-postal-code > % this.t(ZIP / Postal Code) %>: /label> div classspan2> input classinput-mini span12 typetext disabled ideditCamera__zip_code maxlength255 placeholder value%- model.get(zip_code) %>/> /div> /div> /div> /div> % } %> div idcs-scene>/div> div classcontrol-group camera-setting> label classcontrol-label for data-testidmodal-camera-settings-tab-location-input-label-latitude > % this.t(Latitude) %>: /label> div classcontrols> div classrow-fluid> div classspan5> input classspan7 typetext ideditCamera__latitude maxlength13 placeholder value%- model.get(latitude) %>/> (-90.0—90.0) /div> label classcontrol-label stylewidth:80px data-testidmodal-camera-settings-tab-location-input-label-longtitude > % this.t(Longitude) %>: /label> div classspan5> input classspan7 typetext ideditCamera__longitude maxlength14 placeholder value%- model.get(longitude) %>/> (-180.0—180.0) /div> /div> /div> /div> div classcontrol-group camera-setting> label classcontrol-label for data-testidmodal-camera-settings-tab-location-input-label-azimuth > % this.t(Azimuth) %>: /label> div classcontrols> div classrow-fluid> div classspan5> input classspan5 typetext ideditCamera__azimuth maxlength14 placeholder value%- model.get(azimuth) %>/> (0.0—360.0; 0.0% this.t(North) %>) /div> label classcontrol-label stylewidth:80px data-testidmodal-camera-settings-tab-location-input-label-range > % this.t(Range) %>: /label> div classspan5> input classspan5 typetext ideditCamera__range maxlength8 placeholder value%- model.get(range) %>/> (% this.t(feet) %>) /div> /div> /div> /div> div classcontrol-group camera-setting> label classcontrol-label for data-testidmodal-camera-settings-tab-location-input-label-floor > % this.t(Floor) %>: /label> div classcontrols> div classrow-fluid> div classspan5> input classspan5 typetext ideditCamera__floor maxlength6 placeholder value%- model.get(floor) %>/> (% this.t(number) %>) /div> /div> /div> /div> % if(this.is_location_feature_enabled && !model.get(deviceShare)) { %> div classcontrol-group camera> label classcontrol-label for data-testidmodal-camera-settings-tab-location-input-label-notes > % this.t(Notes) %>: /label> div classcontrols> div classrow-fluid> input ideditCamera__notes_location classspan9 typetext value%-model.get(notes)%> /> /div> /div> /div> %}%> %}%> /form> /div> div classtab-pane ideditCamera__metrics> !-- launches help window from help/ data_link attribute + .html --> span classpull-right idcsCamera-help data_linkcamera_settings_metrics> i classicon-question-sign een-help-link>/i> /span> ul classnav nav-tabs> li classactive ideditCamera__tab__metrics_streamed> a href#editCamera__metrics_streamed data-toggletab data-testidmodal-camera-settings-tab-metrics-tab-cloud-bw-label > % this.t(Cloud BW) %> /a> /li> li ideditCamera__tab__metrics_camera_bandwidth> a href#editCamera__metrics_camera_bandwidth data-toggletab data-testidmodal-camera-settings-tab-metrics-tab-camera-bw-label > % this.t(Camera BW) %> /a> /li> li ideditCamera__tab__metrics_storage> a href#editCamera__metrics_storage data-toggletab data-testidmodal-camera-settings-tab-metrics-tab-storage-label > % this.t(Storage) %> /a> /li> li ideditCamera__tab__metrics_delta_stored> a href#editCamera__metrics_delta_stored data-toggletab data-testidmodal-camera-settings-tab-metrics-tab-delta-storage-label > span>i classicon-caret-up stylefont-size:1.5em;>/i>% this.t(Storage) %>/span> /a> /li> li ideditCamera__tab__metrics_freed styledisplay:none;> a href#editCamera__metrics_freed data-toggletab data-testidmodal-camera-settings-tab-metrics-tab-freed-label > % this.t(Freed) %> /a> /li> /ul> i classicon-refresh chart-refresh>/i> div classtab-content> div classtab-pane active ideditCamera__metrics_streamed> div ideditCamera__metrics_streamed_chart styleheight: 350px;width:730px;>/div> /div> div classtab-pane ideditCamera__metrics_delta_stored> div ideditCamera__metrics_delta_stored_chart styleheight: 350px;width:730px;>/div> /div> div classtab-pane ideditCamera__metrics_storage> div ideditCamera__metrics_storage_chart styleheight: 350px;width:730px;>/div> /div> div classtab-pane ideditCamera__metrics_camera_bandwidth> div ideditCamera__metrics_camera_bandwidth_chart styleheight: 350px;width:730px;>/div> /div> div classtab-pane ideditCamera__metrics_freed> div ideditCamera__metrics_freed_chart styleheight: 350px;width:730px;>/div> /div> /div> /div> div classtab-pane idcsMaintenance> !-- launches help window from help/ data_link attribute + .html --> span classpull-right idcsCamera-help data_linkcamera_settings_maintenance> i classicon-question-sign een-help-link>/i> /span> form classform-horizontal> div ideditCamera__maintenance> div classrow-fluid buttons-all> p classspan10 offset1 idcsCamera-switchInfo data-testidmodal-camera-settings-tab-maintenance-switch-info > %this.t(This camera is on a supported switch and can be power cycled using the managed switch {{switch_name}} (port {{port_num}}).)%> /p> /div> div classrow-fluid buttons-all> button classbtn btn-success span3 offset1 idcsCameraPowerCycle title%this.t(Power cycle camera)%> data-testidmodal-camera-settings-tab-maintenance-button-power-cycle-camera > %this.t(Power Cycle Camera)%> /button> /div> /div> /form> /div> div idcs-bridge-health>/div> /script> !-- TEMPLATE END :: editCameraModal --> !-- TEMPLATE BEGIN :: EditDistributorUser --> script typetext/ractive idEditDistributorUser-template> ul classnav nav-tabs> {{#nav_tabs}} li class{{#if active_idid}}active{{/if}}> a href#{{id}} data-toggletab on-click@this.set(active_id, id)> {{{label}}} /a> /li> {{/nav_tabs}} /ul> div classtab-content> TabPane ideditDistributorUser-access-tab active_id{{active_id}}> DistributorUserAccess user_model{{user_model}}> /TabPane> /div> /script> !-- TEMPLATE END :: EditDistributorUser --> !-- TEMPLATE BEGIN :: editMasterAccountSettings --> script typetext/template ideditMasterAccountSettings-template> div classtab-pane active idmasterAccountSettingsBranding> span classpull-right idcsCamera-help data_linkaccount_settings_branding> i classicon-question-sign een-help-link>/i> /span> form classform-horizontal> div classcontrol-group> label classcontrol-label for>% this.t(Branding Enabled) %>:/label> div classcontrols> input typecheckbox ideditMasterAccountSettings__is_custom_brand value1 %(model.get(is_custom_brand) ? checked : )%>/> /div> /div> div classcontrol-group> label classcontrol-label for>% this.t(Company Name) %>:/label> div classcontrols> input typetext maxlength100 ideditMasterAccountSettings__brand_name value%-model.get(brand_name)%>/> /div> /div> div classcontrol-group> label classcontrol-label for>% this.t(Support Email) %>:/label> div classcontrols> input typetext maxlength100 ideditMasterAccountSettings__brand_support_email value%-model.get(brand_support_email)%>/> /div> /div> div classcontrol-group> label classcontrol-label for>% this.t(Support Phone) %>:/label> div classcontrols> input typetext maxlength100 ideditMasterAccountSettings__brand_support_phone value%-model.get(brand_support_phone)%>/> /div> /div> div classcontrol-group> label classcontrol-label for>% this.t(Sub domain) %>:/label> div classcontrols> input typetext maxlength63 ideditMasterAccountSettings__brand_subdomain value%- brand_subdomain %> required/> /div> /div> div classcontrol-group> label classcontrol-label for>% this.t(Small Logo) %>:br/>PNG, 160x52, % this.t(transparent background) %>/label> div classcontrols master-brand-logo-small-upload> input typefile ideditMasterAccountSettings__brand_logo_small_upload/> div> div> img src%(model.get(brand_logo_small) ? data:image/png;base64,+model.get(brand_logo_small): )%> ideditMasterAccountSettings__brand_logo_small %(model.get(brand_logo_small) ? : styledisplay:none)%> /> /div> /div> /div> /div> div classcontrol-group> label classcontrol-label for>% this.t(Large Logo) %>:br/>PNG, 460x184, % this.t(white background) %>/label> div classcontrols master-brand-logo-large-upload> input typefile ideditMasterAccountSettings__brand_logo_large_upload/> div> div> img src%(model.get(brand_logo_large) ? data:image/png;base64,+model.get(brand_logo_large): )%> ideditMasterAccountSettings__brand_logo_large %(model.get(brand_logo_large) ? : styledisplay:none)%> /> /div> /div> /div> /div> /form> /div> div classtab-pane idmasterAccountDefaults> !-- launches help window from help/ data_link attribute + .html --> span classpull-right idcsCamera-help data_linkmaster_account_settings_retention> i classicon-question-sign een-help-link>/i> /span> form classform-horizontal modal-form-centered> h5>% utils.t(Camera Defaults) %>/h5> div idmaster-default-cloud-preview-only>/div> div idmaster-default-cloud-retention>/div> div idmaster-default-min-local-retention>/div> div idmaster-default-max-local-retention>/div> div idmaster-default-preview-resolution>/div> div idmaster-default-full-video-resolution>/div> h5>% utils.t(Account Defaults) %>/h5> div idmaster-disable-billing-changes>/div> /form> /div> div classtab-pane idmasterAccountDays stylemin-height:260px;> !-- launches help window from help/ data_link attribute + .html --> span classpull-right idcsCamera-help data_linkaccount_settings_days> i classicon-question-sign een-help-link>/i> /span> form classform-horizontal> div classcontrol-group> label classcontrol-label for data-testidmodal-account-tab-days-input-label-time-zone > % this.t(Time Zone) %>: /label> div classcontrols> div classrow-fluid> select idmasterAccountSettings__timezone classspan6> % var model this.model; var user_timezone model.get(timezone); var is_in_timezones_array false; _.each(TIME_ZONES, function(timezone){ var is_selected ; var timezone_name timezone.name; if(user_timezonetimezone_name) { is_in_timezones_array true; is_selected selected; } %> option value%timezone_name%> %is_selected%>>%timezone_name%>/option> %})%> % if(!is_in_timezones_array) { %> option value%user_timezone%> selected>%user_timezone%>/option> % } %> /select> /div> /div> /div> div classcontrol-group> label classcontrol-label for data-testidmodal-master-account-tab-days-input-label-work-days > % this.t(Work days) %>: /label> div classcontrols> select idmasterAccountSettings__work_days> option value1111000 %(this.model.get(work_days)1111000 ? selected: )%> data-testidmodal-master-account-tab-days-option-label-monday-thursday >% this.t(Monday - Thursday) %>/option> option value1111100 %(this.model.get(work_days)1111100 ? selected: )%> data-testidmodal-master-account-tab-days-option-label-monday-friday >% this.t(Monday - Friday) %>/option> option value1111110 %(this.model.get(work_days)1111110 ? selected: )%> data-testidmodal-master-account-tab-days-option-label-monday-saturday >% this.t(Monday - Saturday) %>/option> option value1111111 %(this.model.get(work_days)1111111 ? selected: )%> data-testidmodal-master-account-tab-days-option-label-7-days >% this.t(7 days/week) %>/option> /select> /div> /div> div classcontrol-group> label classcontrol-label for data-testidmodal-master-account-tab-days-input-label-work-hours > % this.t(Work hours) %>: /label> div classcontrols> div classinput-append bootstrap-timepicker> input idmasterAccountSettings__work_hours_from typetext maxlength60 classinput-small> span classadd-on>i classicon-time>/i>/span> /div> To div classinput-append bootstrap-timepicker> input idmasterAccountSettings__work_hours_to typetext maxlength60 classinput-small> span classadd-on>i classicon-time>/i>/span> /div> /div> /div> /form> /div> % if(me.checkEditToS()) { %> div classtab-pane idmasterAccountSettingsTOS> form classform-horizontal> % if (me.get(is_superuser)) { %> div classcontrol-group> label classcontrol-label foreditMasterAccountSettings__tos_disable>Disable TOS:/label> div classcontrols> input ideditMasterAccountSettings__tos_disable typecheckbox value1> /div> /div> % } %> div classcontrol-group> label classcontrol-label foreditMasterAccountSettings__tos_required>% this.t(Required) %>:/label> div classcontrols> select typetext ideditMasterAccountSettings__tos_required> option valueis_admin_required,is_user_required>% this.t(Admins and Users) %>/option> option valueis_admin_required>% this.t(Admins) %>/option> option valueis_user_required>% this.t(Users) %>/option> /select> /div> /div> div classcontrol-group> label classcontrol-label foreditMasterAccountSettings__tos_text>% this.t(Text) %>:/label> div classcontrols> div classrow-fluid> div classspan12> textarea ideditMasterAccountSettings__tos_text classspan12 styleheight:200px;resize:none autofocus>/textarea> /div> /div> /div> /div> div classcontrol-group> label classcontrol-label foreditMasterAccountSettings__save_terms> /label> div classcontrols> button classbtn btn-success pull-right ideditMasterAccountSettings__save_terms>%this.t(Save New Terms)%>/button> p ideditMasterAccountSettings__terms_msg classred pull-right stylemargin-right:10px>/p> button classbtn btn-info pull-right ideditMasterAccountSettings__confirm_terms styledisplay:none>%this.t(Confirm)%>/button> /div> /div> /form> /div> % } %> div classtab-pane idmasterAccountSecurity> ul idmasterAccountSecurity_nav classnav nav-tabs> li idmasterAccountSecurity_general_tab classactive>a href#masterAccountSecurity_general data-toggletab>%this.t(General)%>/a>/li> li idmasterAccountSecurity_password_tab classhide>a href#masterAccountSecurity_password data-toggletab>%this.t(Password)%>/a>/li> li idmasterAccountSecurity_IdentityProvider_tab classhide>a href#masterAccountSecurity_IdentityProvider data-toggletab>%this.t(Identity Provider)%>/a>/li> /ul> div classtab-content idmasterAccountSecurity-panes> div classtab-pane active idmasterAccountSecurity_general> span classpull-right idcsCamera-help data_linkmaster_account_settings_security> i classicon-question-sign een-help-link>/i> /span> form classform-horizontal> div classcontrol-group> label classcontrol-label for data-testidmodal-master-account-tab-security-input-label-web-timeout > % this.t(Web Timeout) %>: /label> div classcontrols> select ideditMasterAccountSettings__session_duration classspan2> option value15 %(this.model.get(session_duration)15 ? selected : )%>>15 % this.t(minutes) %>/option> option value60 %(this.model.get(session_duration)60 ? selected : )%>>1 % this.t(hour) %>/option> option value240 %(this.model.get(session_duration)240 ? selected : )%>>4 % this.t(hours) %>/option> option value480 %(this.model.get(session_duration)480 ? selected : )%>>8 % this.t(hours) %>/option> option value720 %(this.model.get(session_duration)720 ? selected : )%>>12 % this.t(hours) %>/option> option value1440 %(this.model.get(session_duration)1440 ? selected : )%>>24 % this.t(hours) %>/option> option value10080 %(this.model.get(session_duration)10080 ? selected : )%>>1 % this.t(week) %>/option> /select> p>% this.t(To apply this setting, please sign in again) %>/p> /div> /div> div classcontrol-group> label classcontrol-label for data-testidmodal-master-account-tab-security-input-label-inactive-session-timeout > % this.t(Inactive Session Timeout) %>: /label> div classcontrols> select ideditMasterAccountSettings__inactive_session_timeout classspan2> option value %(this.model.get(inactive_session_timeout)null ? selected : )%>>% this.t(None) %>/option> option value5 %(this.model.get(inactive_session_timeout)5 ? selected : )%>>5 % this.t(minutes) %>/option> option value15 %(this.model.get(inactive_session_timeout)15 ? selected : )%>>15 % this.t(minutes) %>/option> option value60 %(this.model.get(inactive_session_timeout)60 ? selected : )%>>1 % this.t(hour) %>/option> option value240 %(this.model.get(inactive_session_timeout)240 ? selected : )%>>4 % this.t(hours) %>/option> option value480 %(this.model.get(inactive_session_timeout)480 ? selected : )%>>8 % this.t(hours) %>/option> option value720 %(this.model.get(inactive_session_timeout)720 ? selected : )%>>12 % this.t(hours) %>/option> option value1440 %(this.model.get(inactive_session_timeout)1440 ? selected : )%>>24 % this.t(hours) %>/option> /select> /div> /div> /form> /div> div classtab-pane idmasterAccountSecurity_password> span classpull-right idcsCamera-help data_linkaccount_settings_security_password> i classicon-question-sign een-help-link>/i> /span> form classform-horizontal modal-form-centered> div idmaster-password-management>/div> /form> /div> div classtab-pane idmasterAccountSecurity_IdentityProvider> span classpull-right> a idcsCamera-help data_linkmaster_account_settings_security_idp> i classicon-question-sign een-help-link>/i> /a> /span> div idmaster-identity-provider>/div> /div> /div> /div> /script> !-- TEMPLATE END :: editMasterAccountSettings --> !-- TEMPLATE BEGIN :: EditParentCameraView --> script typetext/template ideditParentCameraView-template> span classmodal-heading-append> // %-model.get(deviceName)%>/span> div classtab-pane active idcsParentCamera> form classform-horizontal> div classcontrol-group> label classcontrol-label for>% this.t(Name) %>:/label> div classcontrols> div classrow-fluid> input ideditParentCamera__name classspan6 typetext maxlength45 value% model.get(deviceName) %>/> /div> /div> /div> div classcontrol-group> label classcontrol-label for>%(!model.isRtsp() ? this.t(ONVIF) : )%> % this.t(Login) %>:/label> div classcontrols> div classrow-fluid> %/* Safari is aggressive with autopopulating username/password fields, so these bogus fields are needed in order to fool Safari into using them instead of the real fields. */%> div styleposition: fixed;width: 1px;left: -100vw;> input typetext tabindex-1 idbogus_username stylewidth:1%/> input typepassword tabindex-1 idbogus_password stylewidth:1%/> /div> input ideditParentCamera__onvifu classspan6 typetext maxlength40 placeholder% this.t(Username) %> autocompleteoff value%- model.get(cameraUsername) %>/> input ideditParentCamera__onvifp classspan6 typepassword maxlength40 placeholder% this.t(Password) %> autocompleteoff value%- model.get(cameraPassword) %>/> /div> /div> /div> div classcontrol-group> label classcontrol-label for>% this.t(Time Zone) %>:/label> div classcontrols> div classrow-fluid> select ideditParentCamera__timezone classspan6> % var model this.model; var device_timezone model.get(deviceTZ); var is_in_timezones_array false; _.each(TIME_ZONES, function(timezone){ var is_selected ; var timezone_name timezone.name; if(device_timezonetimezone_name) { is_in_timezones_array true; is_selected selected; } %> option value%timezone_name%> %is_selected%>>%timezone_name%>/option> %})%> % if(!is_in_timezones_array) { %> option value%device_timezone%> selected>%device_timezone%>/option> % } %> /select> /div> /div> /div> div classcontrol-group> label classcontrol-label for>% this.t(Notes) %>:/label> div classcontrols> div classrow-fluid> textarea ideditParentCamera__notes classspan12 styleheight: 70px; maxlength2000>%model.get(notes)%>/textarea> /div> /div> /div> div classcontrol-group> label classcontrol-label for>% this.t(Information) %>:/label> div classcontrols> div ideditParentCamera__device_info classinfo-box> %if(model.get(camera_info)){%> div classrow-fluid> div classspan4 text-right> % this.t(Manufacturer) %>: /div> div classspan7> %model.get(camera_info).make%> /div> /div> div classrow-fluid> div classspan4 text-right> % this.t(Model) %>: /div> div classspan7> %model.get(camera_info).model%> /div> /div> div classrow-fluid> div classspan4 text-right> % this.t(Firmware) %>: /div> div classspan7> %model.get(camera_info).version%> /div> /div> div classrow-fluid> div classspan4 text-right> % this.t(MAC Address) %>: /div> div classspan7> %model.get(camera_info).mac%> /div> /div> % if(model.get(deviceIPAddress)) { %> div classrow-fluid> div classspan4 text-right> % this.t(IP Address) %>: /div> div classspan7> %model.get(deviceIPAddress)%> /div> /div> % } %> div classrow-fluid> div classspan4 text-right> % this.t(ESN) %>: /div> div classspan7> % (model.get(deviceID) ? model.get(deviceID) : not available) %> /div> /div> div classrow-fluid> div classspan4 text-right> % this.t(GUID) %>: /div> div classspan8> % (model.get(deviceID) ? model.get(deviceGUID) : not available) %> /div> /div> %}else{%> div classrow-fluid> div classspan11 text-center> % this.t(Not available at this time) %> /div> /div> %}%> /div> /div> /div> /form> /div> div classtab-pane idcsParentCameraViews> div classcontrols> p ideditParentCamera__views_info>% this.t(There are no views to add.) %>/p> input typecheckbox nameSelect All ideditParentCamera__all_channels> p classeditParentCamera_channel_label ideditParentCamera__all_channels_label>% this.t(Select All) %>/p> hr ideditParentCamera__channel_sep_line> div ideditParentCamera__first_channel_col classeditParentCamera__channel_column> /div> div ideditParentCamera__second_channel_col classeditParentCamera__channel_column> /div> /div> /div> /script> !-- TEMPLATE END :: EditParentCameraView --> !-- TEMPLATE BEGIN :: EditSpeakerView --> script typetext/template ideditSpeakerView-template> span classmodal-heading-append> // %-model.get(deviceName)%>/span> div classtab-pane active ideditSpeaker__speaker> div classpull-right> span idcsSpeaker-help data_linkspeaker_settings_main> i classicon-question-sign een-help-link>/i> /span> /div> form classform-horizontal> div classcontrol-group> label classcontrol-label for>% this.t(Speaker Name) %>:/label> div classcontrols> div classrow-fluid> input ideditSpeaker__name classspan6 typetext maxlength45 value%- model.get(deviceName) %>/> /div> /div> /div> div classcontrol-group> label classcontrol-label muted for>% this.t(Connect to Bridge) %>:/label> div classcontrols> div classrow-fluid> select idaddSpeakerToBridge classspan6 disabled> option value>%- bridgeList.findByDeviceID(model.get(deviceBridge)).get(deviceName) %>/option> /select> /div> /div> /div> div classcontrol-group> label classcontrol-label for>% this.t(Notes) %>:/label> div classcontrols> div classrow-fluid> textarea ideditSpeaker__notes classspan12 styleheight: 70px; maxlength2000>%-model.get(notes)%>/textarea> /div> /div> /div> div classcontrol-group> label classcontrol-label for>% this.t(Speaker Information) %>:/label> div classcontrols> div ideditSpeaker__device_info classinfo-box> %if(model.get(speaker_info)){%> div classrow-fluid> div classspan4 text-right> % this.t(Manufacturer) %>: /div> div classspan7> %-model.get(speaker_info).make%> /div> /div> div classrow-fluid> div classspan4 text-right> % this.t(Model) %>: /div> div classspan7> %-model.get(speaker_info).model%> /div> /div> div classrow-fluid> div classspan4 text-right> % this.t(IP Address) %>: /div> div classspan7> a ideditSpeaker__vpn hrefhttp://%model.get(deviceIPAddress)%>> /a> /div> /div> div classrow-fluid> div classspan4 text-right> % this.t(ESN) %>: /div> div classspan7> %- (model.get(deviceID) ? model.get(deviceID) : this.t(not available)) %> /div> /div> div classrow-fluid> div classspan4 text-right> % this.t(GUID) %>: /div> div classspan7> %- (model.get(deviceID) ? model.get(deviceGUID) : this.t(not available)) %> /div> /div> %}else{%> div classrow-fluid> div classspan11 text-center> % this.t(Not available at this time) %> /div> /div> %}%> /div> /div> /div> % if(userList.getCurrentUser().checkAddDeleteDevices()) { %> div classcontrols> button classignore btn btn-inverse data-id% model.get(deviceID) %> title% this.t(remove speaker from account) %>>%this.t(Delete Speaker)%>/button> /div> % } %> /form> /div> div classtab-pane ideditSpeaker__cameras> span classpull-right idcsSpeaker-help data_linkspeaker_settings_association> i classicon-question-sign een-help-link>/i> /span> form classform-horizontal> div classcontrol-group> label classcontrol-label for>%this.t(Audio Mode)%>:/label> div classcontrols> div classrow-fluid> div classspan3 camera-setting> select classspan11 ideditSpeaker__two_way_audio_mode> option valuedisabled %(model.get(two_way_audio_mode) disabled ? selected : )%>>% this.t(Disabled) %>/option> option valuehalf_duplex %(model.get(two_way_audio_mode) half_duplex ? selected : )%>>% this.t(Talk Down) %>/option> option valuefull_duplex %(model.get(two_way_audio_mode) full_duplex ? selected : )%>>% this.t(2-Way Audio) %>/option> /select> /div> /div> /div> span classaudio-mode-msg red ideditSpeaker_audio_mode_msg styledisplay: none;>/span> /div> div ideditSpeaker_sip_config> div classcontrol-group ideditSpeaker_protocol> label classcontrol-label for>%this.t(Audio Protocol)%>:/label> div classcontrols> div classrow-fluid> div classspan3 camera-setting> select classspan11 ideditSpeaker__two_way_audio_protocol> % const protocols model.get(availableProtocols); %> % _.each(protocols, function(protocol) { %> option value% protocol %> % (model.get(talkdownConfig).protocol protocol ? selected : ) %>> % protocol.toUpperCase() %> /option> % }); %> /select> /div> /div> /div> span classaudio-mode-msg red ideditSpeaker_audio_mode_msg styledisplay: none;>/span> /div> div classcontrol-group ideditSpeaker_sip_credential> label classcontrol-label for>% this.t(SIP Username/Password) %>:/label> div classcontrols> div classrow-fluid> input ideditSpeaker__sipu classspan5 typetext maxlength40 placeholder% this.t(SIP Username) %> autocompleteoff value%- model.get(sipUsername) %>/> input ideditSpeaker__sipp classspan5 input-password typetext maxlength40 placeholder% this.t(SIP Password) %> autocompleteoff value%- model.get(sipPassword) %>/> /div> /div> /div> div classcontrol-group> label classcontrol-label for>% this.t(Speaker Login) %>:/label> div classcontrols> div classrow-fluid> input ideditSpeaker__onvifu classspan5 typetext maxlength40 placeholder% this.t(Username) %> autocompleteoff value%- model.get(speakerUsername) %>/> input ideditSpeaker__onvifp classspan5 input-password typetext maxlength40 placeholder% this.t(Password) %> autocompleteoff value%- model.get(speakerPassword) %>/> /div> /div> /div> div classrow-fluid> p>%this.t(Link the speaker to a camera or cameras.)%>/p> /div> div classrow-fluid> div classoffset1 span10> div classspan5>%this.t(Unlinked)%>/div> div classspan5 offset1>%this.t(Linked)%>/div> /div> /div> div classrow-fluid> div classoffset1 span10 idassociate_camera_menu>/div> /div> /div> /form> /div> /script> !-- TEMPLATE END :: EditSpeakerView --> !-- TEMPLATE BEGIN :: editSubAccountSettings --> script typetext/template ideditSubAccountSettings-template> div classtab-pane active idsubAccountSettingsStatus> span classpull-right idcsCamera-help data_linkaccount_settings_status> i classicon-question-sign een-help-link>/i> /span> form classform-horizontal> div classcontrol-group> label classcontrol-label for>% this.t(Name) %>:/label> div classcontrols> input typetext title%this.t(Name of the end user account)%> ideditSubAccountSettings__name required value%-model.get(name)%> maxlength255/> /div> /div> div classcontrol-group> label classcontrol-label for>% this.t(Customer ID) %>:/label> div classcontrols> input typetext title%this.t(Optional text that is searchable from the Reseller Dashboard)%> ideditSubAccountSettings__customer_id value%-model.get(customer_id)%> maxlength100/> /div> /div> div classcontrol-group> label classcontrol-label for>% this.t(Status) %>:/label> div classcontrols> div classrow-fluid> select typetext title%this.t(Current status of this end user account.)%> ideditSubAccountSettings__status> option valueactive title%this.t(The default is enabled.)%> %(model.get(is_active) ? selected : )%>>% this.t(Enabled) %>/option> option valueinactive title%this.t(No login is allowed for end user accounts, but cameras continue to record.)%> %(model.get(is_inactive) ? selected : )%>>% this.t(Login Disabled) %>/option> option valuesuspended title%this.t(All cameras are turned off and no login is allowed for end user accounts.)%> %(model.get(is_suspended) ? selected : )%>>% this.t(Account Disabled) %>/option> /select> /div> /div> /div> % if (this.model.get(is_reject)) { %> p class red new-line edition-error>% this.t(An error occurred while fetching available Editions. Please try again or contact support.)%>/p> % } %> % var available_editions_to_show this.getAvailableEditionToShow(); var current_user userList.getCurrentUser(); if (current_user.checkEditionsIsEnabled() && available_editions_to_show && available_editions_to_show.length > 0 && current_user.checkUpgradeEditionbyId(model.get(id))) { %> div classcontrol-group> label classcontrol-label for>% this.t(Edition) %>:/label> div classcontrols> div classrow-fluid> select typetext ideditSubAccountSettings__edition value%-String(model.get(extras).account_edition_id)%> > % _.each(available_editions_to_show, function(edition) { %> option value%edition.id%>> %edition.name%> /option> % }) %> /select> /div> /div> /div> p class hidden red new-line edition-warning>% this.t(WARNING: Changing the Edition will incur additional charges.Do you want to continue?) %>/p> % } %> %if(userList.getCurrentUser().checkAccountAddDelete()){%> button classaccount-delete btn btn-inverse stylemargin-left:181px; data-id% model.get(id) %> title%this.t(remove end user account)%>>%this.t(Delete Account)%>/button> %}%> /form> /div> div classtab-pane idsubAccountSettingsNotifications> form classform-horizontal> div classcontrol-group> label classcontrol-label for>% this.t(Notify Reseller Account) %>:/label> div classcontrols> div classrow-fluid> div classspan12> div classspan1> input typecheckbox ideditSubAccountSettings__notify_camera_on/> /div> div classspan11> label foreditSubAccountSettings__notify_camera_on>% this.t(Camera On/Off) %>/label> /div> /div> /div> div classrow-fluid> div classspan12> div classspan1> input typecheckbox ideditSubAccountSettings__notify_camera_online/> /div> div classspan11> label foreditSubAccountSettings__notify_camera_online>% this.t(Camera Online/Offline) %>/label> /div> /div> /div> div classrow-fluid> div classspan12> div classspan1> input typecheckbox ideditSubAccountSettings__notify_alert_level_one/> /div> div classspan11> label foreditSubAccountSettings__notify_alert_level_one>% this.t(Alert Level One) %>/label> /div> /div> /div> div classrow-fluid> div classspan12> div classspan1> input typecheckbox ideditSubAccountSettings__notify_alert_level_two/> /div> div classspan11> label foreditSubAccountSettings__notify_alert_level_two>% this.t(Alert Level Two) %>/label> /div> /div> /div> /div> /div> div classcontrol-group stylemargin-bottom:100px !important> label classcontrol-label>% this.t(Notify Who) %>:/label> div classcontrols> div classrow-fluid> div classspan12> div classspan6> select classspan12 multiplemultiple ideditSubAccountSettings__notify_who> option valueselect-all-option selected>% this.t(All) %>/option> % _.each(model.get(users), function(item) { %> option value% item.get(id) %>>%- item.getDisplayName() %>/option> % }) %> /select> /div> /div> /div> /div> /div> /form> /div> div classtab-pane idsubAccountSettingsAdmin> span classpull-right idcsCamera-help data_linkaccount_settings_permissions> i classicon-question-sign een-help-link>/i> /span> form classform-horizontal stylemargin-left: 145px;> div classcontrol-group title% this.t(Prevent any settings changes that can affect performance or billing.) %>> label classcontrol-label>% this.t(Disable Advanced Functions) %>:/label> div classcontrols> div classrow-fluid> div classspan1> input typecheckbox ideditSubAccountSettings__is_advanced_disabled %(model.get(is_advanced_disabled) ? checked : )%> value1/> /div> /div> /div> /div> div classcontrol-group title% this.t(Disable system notification e-mails.) %>> label classcontrol-label>% this.t(Disable System Notifications) %>:/label> div classcontrols> div classrow-fluid> div classspan1> input typecheckbox ideditSubAccountSettings__is_system_notifications_disabled value1 %(model.get(is_system_notifications_disabled) ? checked : )%> /> /div> /div> /div> /div> div classcontrol-group title% this.t(Disable any settings changes that can affect billing.) %>> label classcontrol-label>% this.t(Disable Billing Changes) %>:/label> div classcontrols> div classrow-fluid> div classspan1> input typecheckbox ideditSubAccountSettings__is_billing_disabled value1 %(model.get(is_billing_disabled) ? checked : )%> /> /div> /div> /div> /div> div classcontrol-group title% this.t(Disable adding or deleting bridges and cameras.) %>> label classcontrol-label>% this.t(Disable Add and Delete) %>:/label> div classcontrols> div classrow-fluid> div classspan1> input typecheckbox ideditSubAccountSettings__is_add_delete_disabled %(model.get(is_add_delete_disabled) ? checked : )%> value1/> /div> /div> /div> /div> div classcontrol-group title% this.t(Disable all bridge and camera settings. Disable account settings.) %>> label classcontrol-label>% this.t(Disable All Settings) %>:/label> div classcontrols> div classrow-fluid> div classspan1> input typecheckbox ideditSubAccountSettings__is_disable_all_settings value1 %(model.get(is_disable_all_settings) ? checked : )%> /> /div> /div> /div> /div> % if(current_user.get(is_account_superuser)) { %> div classcontrol-group title% this.t(End User Account Admin can toggle bridge health status visibility) %>> label classcontrol-label>% this.t(Disable Bridge Health Display) %>:/label> div classcontrols> div classrow-fluid> div classspan1> input typecheckbox ideditSubAccountSettings__is_bridge_health_available %(!model.get(is_bridge_health_available) ? checked : )%> value1/> /div> /div> /div> /div> % } %> div classcontrol-group title% this.t(End User Account Admin can block images/video from cameras to master reseller.) %>> label classcontrol-label>% this.t(Enable Privacy) %>:/label> div classcontrols> div classrow-fluid> div classspan1> input typecheckbox ideditSubAccountSettings__is_master_video_disabled_allowed %(model.get(is_master_video_disabled_allowed) ? checked : )%> value1/> /div> /div> /div> /div> div classcontrol-group title% this.t(Enable two factor authentication via text or email in end user account.) %>> label classcontrol-label>% this.t(Two Factor Authentication) %>:/label> div classcontrols> div classrow-fluid> div classspan1> input typecheckbox ideditSubAccountSettings__is_two_factor_authentication_forced %(model.get(is_two_factor_authentication_forced) ? checked : )%> value1/> /div> /div> /div> /div> div classcontrol-group styledisplay:none; title% this.t(Convert end user account to contract recording type.) %>> label classcontrol-label>% this.t(Contract Recording) %>:/label> div classcontrols> div classrow-fluid> div classspan1> input typecheckbox ideditSubAccountSettings__is_contract_recording %(model.get(is_contract_recording) ? checked : )%> value1/> /div> /div> /div> /div> /form> /div> div classtab-pane idsubAccountSettingsContact> form classform-horizontal stylemargin-left: -110px;> div classcontrol-group> label classcontrol-label for>% this.t(Contact) %>:/label> div classcontrols> div classrow-fluid control-group> div classspan12> div classspan12> input classspan12 typeemail maxlength60 ideditSubAccountSettings__contact_email placeholder% this.t(Email) %>* required value%-model.get(contact_email)%>> /div> /div> /div> div classrow-fluid control-group> div classspan12> div classspan6> input typetext classspan12 maxlength60 ideditSubAccountSettings__contact_first_name placeholder% this.t(First Name) %>* required value%-model.get(contact_first_name)%>> /div> div classspan6> input typetext classspan12 maxlength60 ideditSubAccountSettings__contact_last_name placeholder% this.t(Last Name) %>* required value%-model.get(contact_last_name)%>> /div> /div> /div> div classrow-fluid control-group> div classspan12> input ideditSubAccountSettings__contact_street classspan12 typetext maxlength60 placeholder% this.t(Address) %>1 value%-model.get(contact_street)%>/> /div> /div> div classrow-fluid control-group> div classspan12> input ideditSubAccountSettings__contact_street2 classspan12 typetext maxlength60 placeholder% this.t(Address) %>2 value%-model.get(contact_street2)%>/> /div> /div> div classrow-fluid control-group> div classspan12> div classspan6> input ideditSubAccountSettings__contact_city classspan12 typetext maxlength60 placeholder% this.t(City) %> value%-model.get(contact_city)%>/> /div> div classspan6> div classspan12 bfh-selectbox bfh-states data-countryeditSubAccountSettings__countries_states2 data-state%-model.get(contact_state)%>> input ideditSubAccountSettings__contact_state typehidden value> a classbfh-selectbox-toggle span12 stylemargin-left:0px rolebutton data-togglebfh-selectbox href#> span classbfh-selectbox-option input-medium data-option%-model.get(contact_state)%>>/span> b classcaret>/b> /a> div classbfh-selectbox-options> div rolelistbox> ul roleoption> /ul> /div> /div> /div> /div> /div> /div> div classrow-fluid control-group> div classspan12> div classspan6> input ideditSubAccountSettings__contact_postal_code classspan12 typetext maxlength60 placeholder% this.t(ZIP / Postal Code) %> value%-model.get(contact_postal_code)%>/> /div> div classspan6> div ideditSubAccountSettings__countries_states2 classspan12 bfh-selectbox bfh-countries data-country%-model.get(contact_country)%>> input ideditSubAccountSettings__contact_country typehidden value> a classspan12 bfh-selectbox-toggle stylemargin-left:0px rolebutton data-togglebfh-selectbox href#> span classbfh-selectbox-option input-medium data-option%-model.get(contact_country)%>>/span> b classcaret>/b> /a> div classbfh-selectbox-options> div rolelistbox> ul roleoption> /ul> /div> /div> /div> /div> /div> /div> /div> /div> /form> /div> /script> !-- TEMPLATE END :: editSubAccountSettings --> !-- TEMPLATE BEGIN :: editUserProfile --> script typetext/template ideditUserProfile-template> div classtab-pane active idusLogin> span classpull-right idcsCamera-help data_linkmy_profile_login> i classicon-question-sign een-help-link>/i> /span> form classform-horizontal> div classcontrol-group> label classcontrol-label for data-testidmodal-my-profile-tab-login-input-label-email>% this.t(Login (email)) %>:/label> div classcontrols> input typeemail maxlength60 iduserSettings_email classsettings span4 placeholder% this.t(Email) %> value%- this.model.get(email) %>> /div> /div> div classcontrol-group> label classcontrol-label for data-testidmodal-my-profile-tab-login-input-label-name>% this.t(Name) %>:/label> div classcontrols> div classrow-fluid> input typetext iduserSettings_first_name maxlength60 classspan5 placeholder% this.t(First Name) %> value%- this.model.get(first_name) %>> input typetext iduserSettings_last_name maxlength60 classspan5 offset1 placeholder% this.t(Last Name) %> value%- this.model.get(last_name) %>> /div> /div> /div> div classcontrol-group> label classcontrol-label for data-testidmodal-my-profile-tab-login-input-label-language>% this.t(Language) %>:/label> div classcontrols> div classrow-fluid> div classspan12> select classspan6 iduserSettings__language> option valueen-us %(this.model.get(language)en-us ? selected: )%>>English/option> option valueja-jp %(this.model.get(language)ja-jp ? selected: )%>>日本語/option> option valuede-de %(this.model.get(language)de-de ? selected: )%>>Deutsch/option> option valuees-es %(this.model.get(language)es-es ? selected: )%>>Español/option> option valuefr-fr %(this.model.get(language)fr-fr ? selected: )%>>Français/option> option valueit-it %(this.model.get(language)it-it ? selected: )%>>Italiano/option> option valuenl-nl %(this.model.get(language)nl-nl ? selected: )%>>Nederlands/option> option valuepl-pl %(this.model.get(language)pl-pl ? selected: )%>>Polski/option> option valuept-pt %(this.model.get(language)pt-pt ? selected: )%>>Português(Portugal) /option> option valuept-br %(this.model.get(language)pt-br ? selected: )%>>Português(Brasil) /option> option valuesv-se %(this.model.get(language)sv-se ? selected: )%>>Svenska/option> option valuetr-tr %(this.model.get(language)tr-tr ? selected: )%>>Türkçe/option> /select> /div> /div> /div> /div> div classcontrol-group> label classcontrol-label for data-testidmodal-my-profile-tab-login-input-label-password>% this.t(Password) %>: /label> div classcontrols> div classrow-fluid> button iduserSettings__change_password classbtn btn-info data-testidmodal-my-profile-tab-login-button-label-change-password>% this.t(Change Password) %>/button> input iduserSettings__current_password classspan4 hide typepassword placeholder% this.t(old password) %> value/> input iduserSettings__password classspan4 hide typepassword placeholder% this.t(new password) %> value/> input iduserSettings__password_confirm classspan4 hide typepassword placeholder% this.t(new password) %> value/> span classred>/span> /div> /div> /div> div classcontrol-group> label classcontrol-label for data-testidmodal-my-profile-tab-login-input-label-alternate-email>% this.t(Alternate email) %>:/label> div classcontrols> input typeemail iduserSettings_alternateEmail classsettings span4 maxlength60 placeholder% this.t(Alternate email) %> value%- this.model.get(alternate_email) %>> % if (!(userList.getCurrentUser().checkFeatureFlag(distributor_dashboard) && userList.getCurrentUser().get(is_distributor))) { %> (span data-testidmodal-my-profile-tab-login-input-label-for-alerts>% this.t(for alerts) %>/span>) % } %> /div> /div> div classcontrol-group style% if (userList.getCurrentUser().get(active_brand_subdomain) hkt) { %>display:none% } %>> label classcontrol-label for data-testidmodal-my-profile-tab-login-input-label-two-factor-auth>% this.t(Two Factor Authentication) %>:/label> div classcontrols stylepadding: 2px; title% this.t(Enable Two Factor Authentication) %>> input typecheckbox iduserSettings_is_two_factor_authentication_enabled classsettings> /div> /div> div classcontrol-group style% if (userList.getCurrentUser().get(active_brand_subdomain) hkt) { %>display:none% } %>> label classcontrol-label for data-testidmodal-my-profile-tab-login-input-label-sms-phone>% this.t(SMS Phone) %>:/label> div classcontrols> div classrow-fluid> div classspan6> select classspan4 iduserSettings_countryCode> % var self this; %> % var keys Object.keys(COUNTRY_CODES).sort(); %> option value>/option> % for(var i 0; i keys.length; i++){%> option value%keysi%> %(keysi self.model.get(country) ? selected : )%>>%keysi%>/option> % } %> /select> input typetext iduserSettings_smsPhone classsettings span8 maxlength60 placeholder% this.t(SMS Phone) %> value%- this.model.get(sms_phone) %>> p classspan12> (span data-testidmodal-my-profile-tab-login-input-label-for-authentication>% this.t(for authentication) %>/span>) /p> /div> /div> /div> /div> div classcontrol-group styledisplay:none> label classcontrol-label for data-testidmodal-my-profile-tab-login-input-label-mms-messages>% this.t(Use MMS Messages) %>:/label> div classcontrols> input typecheckbox iduserSettings_smsIncludePicture classsettings % (this.model.get(is_sms_include_picture)) ? print(checked) : print() %> > /div> /div> div classcontrol-group> label classcontrol-label for data-testidmodal-my-profile-tab-login-input-label-support-pin>% this.t(Support Pin) %>:/label> div classcontrols> input typetext iduserSettings_user_pin classsettings maxlength6 placeholder% this.t(Support Pin) %> value%- this.model.get(user_pin) %>> /div> /div> /form> /div> div classtab-pane idusAlerts> span classpull-right idcsCamera-help data_linkmy_profile_notifications> i classicon-question-sign een-help-link>/i> /span> form classform-horizontal> div classcontrol-group> label classcontrol-label for data-testidmodal-my-profile-tab-notifications-input-label-notify-on-alerts>% this.t(Notify on Alerts) %>:/label> % var model this.model; const show_system_all_option model.get(admin) && !model.get(is_system_notifications_disabled); %> % if (show_system_all_option) { %> div classcontrols> label classcheckbox foruserSettings__notify_levels_system> span data-testidmodal-my-profile-tab-notifications-input-label-notify-on-alerts-all>% this.t(System All) %>/span> input typecheckbox iduserSettings__notify_levels_system %($.inArray(3, this.model.get(json_obj).een.notify_levels) > 0 ? checked : )%> /> /label> /div> % } %> % if (userList.getCurrentUser().checkFeatureFlag(location_groups)) { %> div classcontrols> label classcheckbox foruserSettings__notify_levels_system_location> span data-testidmodal-my-profile-tab-notifications-input-label-notify-on-alerts-location>% this.t(System Location Specific) %>/span> input typecheckbox iduserSettings__notify_levels_system_location %($.inArray(4, this.model.get(json_obj).een.notify_levels) > 0 ? checked : )%> /> /label> /div> % } %> div classcontrols> label classcheckbox foruserSettings__notify_levels_high> span data-testidmodal-my-profile-tab-notifications-input-label-notify-on-alerts-high>% this.t(High) %>/span> input typecheckbox iduserSettings__notify_levels_high %($.inArray(1, this.model.get(json_obj).een.notify_levels) > 0 ? checked : )%> /> /label> /div> div classcontrols> label classcheckbox foruserSettings__notify_levels_low> span data-testidmodal-my-profile-tab-notifications-input-label-notify-on-alerts-low>% this.t(Low) %>/span> input typecheckbox iduserSettings__notify_levels_low %($.inArray(2, this.model.get(json_obj).een.notify_levels)> 0 ? checked : )%> /> /label> /div> /div> div classcontrol-group> label classcontrol-label for data-testidmodal-my-profile-tab-notifications-input-label-when>% this.t(When) %>:/label> div classcontrols> div classrow-fluid> div classspan12> select classspan8 iduserSettings__notify_time> option valueall %(this.model.get(notify_time)all ? selected: )%>>% this.t(24 hours) %>/option> option valuework %(this.model.get(notify_time)work ? selected: )%>>% this.t(Work hours) %> (%this.model.get(work_hours)%>)/option> option valuenonwork %(this.model.get(notify_time)nonwork ? selected: )%>>% this.t(Non-Work hours) %>/option> option valuecustom %(this.model.get(notify_time)custom ? selected: )%>>% this.t(Custom) %>/option> /select> /div> div iduserSettings__notify_time_custom stylemargin-left:0px !important; classspan12 %(this.model.get(notify_time)custom ? : hide)%>> div classinput-append bootstrap-timepicker> input iduserSettings__notify_time_custom_from typetext maxlength60 classinput-small> span classadd-on>i classicon-time>/i>/span> /div> To div classinput-append bootstrap-timepicker> input iduserSettings__notify_time_custom_to typetext maxlength60 classinput-small> span classadd-on>i classicon-time>/i>/span> /div> /div> /div> /div> /div> div classcontrol-group> label classcontrol-label for data-testidmodal-my-profile-tab-notifications-input-label-email>% this.t(Email Notifications) %>:/label> div classcontrols> div classrow-fluid> input typecheckbox iduserSettings__notify_rule_email %($.inArray(email, this.model.get(notify_rule_methods))>0 ? checked : )%>> /div> /div> label classcontrol-label for data-testidmodal-my-profile-tab-notifications-input-label-push>% this.t(Push Notifications) %>:/label> div classcontrols> div classrow-fluid> input typecheckbox iduserSettings__notify_rule_push %($.inArray(push, this.model.get(notify_rule_methods))>0 ? checked : )%>> /div> /div> /div> !-- div classcontrol-group stylemargin-bottom:80px !important> label classcontrol-label for>% this.t(Suppress email/sms when online) %>:/label> div classcontrols> input iduserSettings__suppress_notify_if_logged_in typecheckbox value1 checked> /div> /div> --> /form> /div> div classtab-pane idusTime> span classpull-right idcsCamera-help data_linkmy_profile_time> i classicon-question-sign een-help-link>/i> /span> form classform-horizontal> div classcontrol-group> label classcontrol-label for data-testidmodal-my-profile-tab-time-input-label-time-zone>% this.t(Time Zone) %>:/label> div classcontrols> div classrow-fluid> select iduserSettings__timezone classspan6> % var model this.model; var user_timezone model.get(timezone); var is_in_timezones_array false; _.each(TIME_ZONES, function(timezone){ var is_selected ; var timezone_name timezone.name; if(user_timezonetimezone_name) { is_in_timezones_array true; is_selected selected; } %> option value%timezone_name%> %is_selected%>>%timezone_name%>/option> %})%> % if(!is_in_timezones_array) { %> option value%user_timezone%> selected>%user_timezone%>/option> % } %> /select> /div> /div> /div> div classcontrol-group> label classcontrol-label for data-testidmodal-my-profile-tab-time-input-label-24-clock>% this.t(24 Hour Clock) %>:/label> div classcontrols> input typecheckbox iduserSettings_json_show_AMPM class %(this.model.get(json_obj).een.show_AMPM ? : checked)%>> /div> /div> div classcontrol-group> label classcontrol-label for data-testidmodal-my-profile-tab-time-input-label-show-milliseconds>% this.t(Millisecond Display) %>:/label> div classcontrols> input typecheckbox iduserSettings_json_milliseconds_display class %(this.model.get(json_obj).een.milliseconds_display ? checked : )%>> /div> /div> /form> /div> div classtab-pane idusLayouts> span classpull-right idcsCamera-help data_linkmy_profile_layouts> i classicon-question-sign een-help-link>/i> /span> form classform-horizontal clearfix> div classcontrol-group> label classcontrol-label for data-testidmodal-my-profile-tab-layouts-input-label-rotation-interval>% this.t(Layout Rotation Interval) %>:/label> div classcontrols> div classrow-fluid> div classspan5> %var rotation_setting this.model.getLayoutRotationSeconds();%> select classspan12 iduserSettings_json_layout_rotation_seconds %(layoutLinkList.models.length 1 && rotation_setting null ? disabled title + utils.t(You must have more than 1 layout to enable) + \ : )%>> option value %rotation_setting null ? selected : %>>% this.t(Disabled) %>/option> %if($.inArray(rotation_setting, 5,10,15,30,60,120,300)-1 && rotation_setting ! null){%> option value%rotation_setting%> selected>%rotation_setting%> % this.t(seconds) %>/option> %}%> option value5 %(rotation_setting5?selected:)%>>5 % this.t(seconds) %>/option> option value10 %(rotation_setting10?selected:)%>>10 % this.t(seconds) %>/option> option value15 %(rotation_setting15?selected:)%>>15 % this.t(seconds) %>/option> option value30 %(rotation_setting30?selected:)%>>30 % this.t(seconds) %>/option> option value60 %(rotation_setting60?selected:)%>>1 % this.t(minute) %>/option> option value120 %(rotation_setting120?selected:)%>>2 % this.t(minutes) %>/option> option value300 %(rotation_setting300?selected:)%>>5 % this.t(minutes) %>/option> /select> /div> /div> /div> /div> div classcontrol-group> label classcontrol-label for data-testidmodal-my-profile-tab-layouts-input-label-alphabetize>% this.t(Alphabetize Layouts) %>:/label> div classcontrols> label classcheckbox foruserSettings_layout_alphabetize> input typecheckbox iduserSettings_layout_alphabetize /> /label> /div> /div> label classcontrol-label pull-left for data-testidmodal-my-profile-tab-layouts-input-label-order>%this.t(Layout Order)%>: /label> div> ul title iduserSettings_layout_order classspan3 stylefloat:left; margin-left: 3.5%;> /ul> /div> /form> /div> div classtab-pane idusPreviews> span classpull-right idcsCamera-help data_linkmy_profile_previews> i classicon-question-sign een-help-link>/i> /span> form classform-horizontal> div iduserSettings-media-shortcut classcontrol-group> label classcontrol-label for data-testidmodal-my-profile-tab-previews-input-label-media-shortcut>% this.t(Enable Media Shortcut) %>:/label> div classcontrols> input typecheckbox iduserSettings_json_media_shortcut class %(this.model.get(json_obj).een.media_shortcut ? checked : )%>> /div> /div> div classcontrol-group> label classcontrol-label for data-testidmodal-my-profile-tab-previews-input-label-motion-boxes>% this.t(Show Motion Boxes) %>:/label> div classcontrols> input typecheckbox iduserSettings_json_motion_boxes class %(this.model.get(json_obj).een.motion_boxes ? checked : )%>> /div> /div> div classcontrol-group> label classcontrol-label data-testidmodal-my-profile-tab-previews-input-label-show-analytics>% this.t(Show Analytics) %>/label> div classcontrols> input typecheckbox classshowAnalytics valueanalytics %(this.model.isShowAnalytics() ? checked : )%>> /div> /div> div classcontrol-group> label classcontrol-label foruserSettings_json_show_plugins_extensions data-testidmodal-my-profile-tab-previews-input-label-show-plugins> % this.t(Show Plugins and Extensions) %>: /label> div classcontrols> input typecheckbox iduserSettings_json_show_plugins_extensions % (this.model.isShowPluginsNExtensions() ? checked : ) %>> /div> /div> div classcontrol-group> label classcontrol-label foruserSettings_show_original_aspect_ratio data-testidmodal-my-profile-tab-previews-input-label-original-aspect-ratio> % this.t(Show original aspect ratio) %>: /label> div classcontrols> input typecheckbox iduserSettings_show_original_aspect_ratio /> /div> /div> /form> /div> div classtab-pane idusDevices> % var devices this.model.get(user_authenticated_clients) || {}; var device_keys Object.keys(devices); var self this; if (device_keys.length 0) {%> p classred span4> % this.t(No trusted devices found.)%> /p> %} else {%> form classform-horizontal> div classrow-fluid> ul classspan12 trusted-device-list> % _.each(device_keys, function(key) { var device deviceskey; %> li classtrusted-device-entry span12 id%key%> data-id%key%>> div classspan1> i classicon-large device-icon %device.client_is_pc ? icon-laptop : (device.client_is_mobile ? icon-mobile-phone : icon-tablet)%>>/i> /div> div classspan8> p classspan12> %self.t(Info:)%> %-device.client_type ? device.client_type : %> /p> p classspan12> %self.t(IP Address:)%> %-device.client_ip ? device.client_ip : %> /p> p classspan12> %self.t(Last Login:)%> %-device.last_login ? new Date(device.last_login * 1000).toString() : %> /p> /div> div classspan2 offset1> button data-id%key%> classbtn forget-client title%self.t(Remove this device from trusted list.)%>>i classicon-trash>/i>/button> /div> /li> %});%> /ul> /div> /form> button classbtn btn-inverse forget-all>%self.t(Remove All)%>/button> %}%> /div> div classtab-pane idusReports> form classform-horizontal> div classcontrol-group> label classcontrol-label for data-testidmodal-my-profile-tab-reports-input-label-weekly-summary>% this.t(Cloud Video Surveillance Weekly Summary) %>:/label> div classcontrols> div classrow-fluid> input typecheckbox iduserSettings_weekly_newsletter classsettings % (this.model.get(weekly_newsletter)) ? print(checked) : print() %> > /div> /div> /div> /form> /div> /script> !-- TEMPLATE END :: editUserProfile --> !-- TEMPLATE BEGIN :: editUserView --> script typetext/template ideditUserView-template> span classmodal-heading-append> // %-this.model.get(first_name)%> %-this.model.get(last_name)%>/span> div classtab-pane active ideditUserModal__tab_permissions> div classrow-fluid> div ideditUserModal__permissions_manager>/div> /div> /div> div classtab-pane ideditUserModal__tab_user_settings> div ideditUserModal__general_access>/div> /div> div classtab-pane ideditUserModal__tab_accounts> div classrow-fluid> div ideditUserModal__account_access>/div> /div> /div> %if(userList.getCurrentUser().get(is_account_superuser) && userList.getCurrentUser().checkFeatureFlag(location_groups)){%> div classtab-pane ideditUserModal__tab_locations> div classrow-fluid> div ideditUserModal__locations_manager>/div> /div> /div> %}%> div classtab-pane ideditUserModal__tab_cameras> div classrow-fluid> div ideditUserModal__camera_access>/div> /div> /div> div classtab-pane ideditUserModal__tab_layouts> div classrow-fluid> div ideditUserModal__layout_access>/div> /div> /div> /script> !-- TEMPLATE END :: editUserView --> script typetext/template idExportsV3WrapView-template> div classcontainer-fluid> {{#if is_no_data}} h3>{{translateText(There are currently no downloads.)}}/h3> {{else}} div idjobs__content classdownloads-page> JobsView/> /div> div idexports__content classdownloads-page> ExportsView/> /div> {{/if}} /div> /script> !-- TEMPLATE BEGIN :: JobsView --> script typetext/template idExportsView-template> {{#if items.length}} article classrow-fluid> div classwidget> header classwidget-title>i classicon-flag>/i> {{translateText(Downloads)}} {{#if pagination.total > pagination.page_size}} div classpull-right pagination-bar> p classpag-num-text pull-right>{{pagination.pagination_range}}/p> div classpull-right btn-group pagination-buttons> button classbtn btn-info btn-mini first-btn on-clickpaginate(event, prev) > i class icon-chevron-left>/i> /button> button classbtn btn-info btn-mini last-btn on-clickpaginate(event, next) > i class icon-chevron-right>/i> /button> /div> /div> {{/if}} /header> div classwidget-content clearfix> div classrow> div classred notifications-error idnotifications__error>/div> /div> {{#if loading}} InitialLoadingTable rowLength6 initialLoadingTableInfo{{initialLoadingTableInfo}} /> {{else}} table classtable table-striped> thead> tr> th stylewidth:20%>{{translateText(Download Availability)}}/th> th stylewidth:65%>{{translateText(Details)}}/th> th stylewidth:15%; min-width: 125px;>{{translateText(Action)}}/th> /tr> /thead> tbody iddownloads__rows> {{#each items}} {{> downloads__row}} {{/each}} /tbody> /table> {{/if}} /div> /div> /article> {{/if}} {{#partial downloads__row}} tr data-id{{id}}> td class-redexpired>{{ expired ? translateText(Expired) : translateText(Expires)}} {{expire_formatted_date}}/td> !-- Details --> td classnotification-details-column> div> {{video_description}} /div> div classnotification-download-link> {{#if start_time && end_time }} a href# title{{translateText(View selection in history)}} class{{download_link_class}} on-clickexports_helper.viewSelectionInHist(camera, event, start_timestamp, end_timestamp) > span>{{start_date}}/span> span>{{start_time}} — {{end_time}} ({{duration}})/span> /a> {{/if}} {{download_size}} {{#if notes }} div idnotes-display-{{id}}> {{translateText(Notes)}}: {{notes}} /div> {{/if}} /div> div idnotification-notes-{{id}} classdisplay-none > div> div> input classnotes-input typetext placeholder{{notes}} idnotes-input-{{id}}/> button title{{translateText(Save Notes)}} typebutton classsave-notes edit-notes-btn btn on-click_saveNote(id) > i classicon icon-ok>/i> /button> button title{{translateText(Cancel Edit)}}> typebutton classedit-notes edit-notes-btn btn on-click_toggleEditNoteField(id) > i classicon icon-remove-sign>/i> /button> /div> /div> /div> {{#if is_debug_mode }} br/> div classdisabled>{{translateText(Task ID)}}: {{job_id}}/div> {{/if}} /td> !-- Actions --> td> {{#if download_url }} !-- Start Action Area --> button title{{translateText(Download)}} typebutton classfile-management btn on-click_downloadVideo(download_url, video_description) > i classicon-cloud-download>/i> /button> {{/if}} !-- End Action Area --> !-- Start Checksum Area --> {{#if checksum || is_directory }} button title{{translateText(Copy MD5 Checksum to clipboard (proof that video has not been tampered with))}} classchecksum btn on-click_handleChecksumBtnClick(this, event) > i classicon icon-check>/i> /button> textarea id{{checksum}}_sum classchecksum-exports>{{checksum}}>/textarea> {{/if}} !-- End Checksum Area --> !-- Start Notes Area --> button classbtn edit-notes title{{translateText(Edit notes)}} typebutton on-click_toggleEditNoteField(id) > i classicon-pencil>/i> /button> /td> /tr> {{/partial}} /script> !-- TEMPLATE BEGIN :: FeedbackView --> script typetext/template idFeedbackView-template> p>%this.t(Asterisk(*) indicates a required field)%>/p> form stylemargin-top: 7%; classform-horizontal> div classcontrol-group> label classcontrol-label> *% this.t(Make) %>:/label> div classcontrols> input maxlength255 idfeedback__make typetext required> /div> /div> div classcontrol-group> label classcontrol-label> *% this.t(Model) %>: /label> div classcontrols> input maxlength255 idfeedback__model typetext required> /div> /div> div classcontrol-group> label classcontrol-label> *% this.t(Camera IP) %>: /label> div classcontrols> input maxlength255 idfeedback__ip typetext required> /div> /div> div classcontrol-group> label classcontrol-label> *% this.t(Camera Login)%>:/label> div classcontrols> input maxlength255 idfeedback__login_u placeholder%this.t(Username)%> typetext required> input maxlength255 idfeedback__login_p classinput-password placeholder%this.t(password)%> typetext required> /div> /div> div classcontrol-group> label classcontrol-label> *% this.t(Contact Email) %>: /label> div classcontrols> input maxlength255 idfeedback__email typetext required> /div> /div> div classcontrol-group> label classcontrol-label> %this.t(Contact Phone) %>: /label> div classcontrols> input maxlength255 idfeedback__tel typetel> /div> /div> div classcontrol-group> label classcontrol-label> %this.t(Notes)%>: /label> div classcontrols> textarea maxlength1028 classspan4 idfeedback__notes typetext>/textarea /div> /div> p>%this.t(Leave the camera on and attached to the same network as the bridge)%>/p> /form> /script> !-- TEMPLATE END :: FeedbackView --> !-- TEMPLATE BEGIN :: FilteredDropdown --> script typetext/ractive idFilteredDropdown-template> input classspan12 typetext placeholder{{translateText(Filter Rooms)}} value{{filter}}/> select classspan12 value{{selected_val}} {{disabled ? disableddisabled : }}> {{#if filter.length 1}} option value>-- {{translateText(Choose)}} --/option> {{/if}} {{#each filtered_values}} option value{{id}}>{{name}}/option> {{/each}} /select> /script> !-- TEMPLATE END :: FilteredDropdown --> !-- TEMPLATE BEGIN :: FirstLayoutView --> script typetext/template idFirstLayoutView-template> header classwidget-title>i classicon-bullhorn>/i> % this.t(Welcome to Layouts) %>/header> div classwidget-content clearfix idfirst_layout_content> div classrow-fluid> div classspan6> h3>% this.t(Create your first layout) %>/h3> p> % this.t(Layouts are different organizations of your cameras. You can have as many layouts as you want.) %> /p> p> % this.t(Click the button to create your first layout.) %> /p> /div> div classspan6> img src_images/layouts.jpeg> /div> /div> div classrow-fluid> div classspan3 offset9> button idcreate_first_layout href# classbtn btn-success pull-right>i classicon-plus-sign>/i> % this.t(Create a Layout) %>/button> /div> /div> /div> /script> !-- TEMPLATE END :: FirstLayoutView --> script typetext/template idFirstLayoutWrapView-template> div classcontainer-fluid> article classrow-fluid> div classwidget idfirst_layout_content> /div> /article> /div> /script> !-- TEMPLATE BEGIN :: GlobalWarningComponent --> script typetext/ractive idGlobalWarningComponent-template> {{#if show}} {{> message_partial}} {{/if}} {{#partial bridge_update}} div classalert> strong>{{translateText(WARNING)}}: /strong> {{translateText(Bridges are being updated and must not be powered off:)}} strong> {{getBridgeList(bridge_upgrades)}}. /strong> /div> {{/partial}} /script> !-- TEMPLATE END :: GlobalWarningComponent --> script typetext/ractive idHelpLink-template> span on-click@this.showHelp() class{{class}} data_link{{data_link}}> i classicon-question-sign een-help-link>/i> /span> /script> !-- TEMPLATE BEGIN :: IdentityProviderForm --> script typetext/ractive idIdentityProviderForm-template> form classform-horizontal> !-- This sections differs depend on account level. --> !-- Reseller Account. --> {{#is_master}} div classidp row row-fluid> input ididp__disabled_all classidp radio typeradio name{{master_idp_switch}} valuemaster_disabled on-changetoggleForm> label classidp radio foridp__disabled_all data-testidmodal-account-tab-security-master-input-label-use-login > {{translateText(Use Login)}} /label> /div> div classidp row row-fluid> input ididp__enabled classidp radio typeradio name{{master_idp_switch}} valuemaster_enabled on-changetoggleForm> label classidp radio foridp__enabled data-testidmodal-account-tab-security-master-input-label-use-sso > {{translateText(Use my own Identity Provider to sign in (Single Sign-On))}} /label> p classidp help_text data-testidmodal-account-tab-security-master-input-label-use-sso-help-text > {{translateText(All users (including end user accounts) will use the same Identity Provider, which means that if the reseller account is using SSO, the reseller is responsible for managing all the users in each of the end user account.)}} /p> /div> div classidp row row-fluid> input ididp__sub_allowed classidp radio typeradio name{{master_idp_switch}} valuesub_allowed on-changetoggleForm> label classidp radio foridp__sub_allowed data-testidmodal-account-tab-security-master-input-label-allow-only-end-user-to-enable-sso > {{translateText(Allow ONLY End User Accounts to enable SSO)}} /label> p classidp help_text data-testidmodal-account-tab-security-master-input-label-allow-only-end-user-to-enable-sso-help-text > {{translateText(The reseller account cannot use SSO, and each end user account must have their own Identity Provider)}} /p> {{#sub_account_idp_warning}} p classidp text_warning>{{sub_account_idp_warning}}/p> {{/sub_account_idp_warning}} /div> {{else}} !-- End user account. Activate SSO.--> div classidp row row-fluid> input ididp__sub_enable classidp checkbox typecheckbox checked{{is_enabled}} on-changetoggleForm> label foridp__sub_enable classidp checkbox_label data-testidmodal-account-tab-security-input-label-use-sso > {{translateText(Use my own Identity Provider to sign in (Single Sign-On))}} /label> /div> !-- Allow new User creation on fly in end user account --> div classidp row row-fluid> input ididp__sub_enable_user classidp checkbox typecheckbox checked{{is_create_user}} disabled{{is_create_user_locked}} on-changetoggleForm> label foridp__sub_enable_user classidp checkbox_label {{#is_create_user_locked}}locked{{/is_create_user_locked}} data-testidmodal-account-tab-security-input-label-create-user-if-not-exist > {{translateText(Create user if one does not exist)}} /label> /div> {{/is_master}} !-- END Optional settings --> !-- Settings form --> {{#display_form}} hr classidp> h5 data-testidmodal-account-tab-security-header-settings >{{translateText(Settings)}}/h5> div classidp row row-fluid> label data-testidmodal-account-tab-security-settings-input-label-sso-url > {{translateText(Single Sign-On URL)}}: /label> input typetext classspan12 value{{sso_url}}> /div> div classidp row row-fluid> label data-testidmodal-account-tab-security-settings-input-label-issuer > {{translateText(Issuer)}}: /label> input typetext classspan12 value{{issuer}}> /div> div classidp row row-fluid> label data-testidmodal-account-tab-security-settings-input-label-certificate >{{translateText(X.509 Certificate)}}:/label> div> textarea classspan12 idp rows5 value{{cert}}>/textarea> /div> div> input typefile idsso__cert_upload on-changechangeCert> /div> /div> {{/display_form}} !-- END Settings form --> /form> /script> !-- TEMPLATE END :: IdentityProviderForm --> !-- TEMPLATE BEGIN :: IFrameDemoComponent --> script typetext/ractive idIFrameDemoComponent-template> div classwidget> header classwidget-title> i classicon-wrench>/i> {{widget_title}} /header> div classwidget-content> iframe src{{iframe_source_url}}> /div> /div> /script> !-- TEMPLATE END :: IFrameDemoComponent --> !-- TEMPLATE BEGIN :: InstallViewComponent --> script typetext/ractive idInstallViewComponent-template> div classwidget> header classwidget-title> i classicon-wrench>/i> {{translateText(Installer Diagnostic Tools)}} /header> div classwidget-content> table classtable table-striped> thead> tr> th scopecol>{{translateText(Status)}} i classicon-sort text-dimmed on-click@this.sortTable(status) title{{translateText(sort)}}>/i>/th> th scopecol>{{translateText(Name)}} i classicon-sort text-dimmed on-click@this.sortTable(name) title{{translateText(sort)}}>/i>/th> th scopecol>{{translateText(Motion)}} i classicon-sort text-dimmed on-click@this.sortTable(motion) title{{translateText(sort)}}>/i>/th> th scopecol>{{translateText(Analytics)}} i classicon-sort text-dimmed on-click@this.sortTable(analytics) title{{translateText(sort)}}>/i>/th> th scopecol>{{translateText(Camera Model)}} i classicon-sort text-dimmed on-click@this.sortTable(model) title{{translateText(sort)}}>/i>/th> th scopecol>{{translateText(Duty Cycle)}} i classicon-sort text-dimmed on-click@this.sortTable(duty_cycle) title{{translateText(sort)}}>/i>/th> th scopecol>{{translateText(Preview/Video Size)}}/th> th scopecol>{{translateText(Bandwidth Speed/Mode)}}/th> th scopecol>{{translateText(Retention)}}/th> {{#if show_advanced}} th scopecol>{{translateText(Bridge Camera Days/Data)}}/th> {{/if}} th scopecol>{{translateText(Stream Type)}}/th> th scopecol>{{translateText(Settings)}}/th> /tr> /thead> tbody> {{ #if loading }} {{#each loading_row_count}} tr> td>div classdashboard__skeleton-box>/div>/td> td>div classdashboard__skeleton-box>/div>/td> td>div classdashboard__skeleton-box>/div>/td> td>div classdashboard__skeleton-box>/div>/td> td>div classdashboard__skeleton-box>/div>/td> td>div classdashboard__skeleton-box>/div>/td> td>div classdashboard__skeleton-box>/div>/td> td>div classdashboard__skeleton-box>/div>/td> td>div classdashboard__skeleton-box>/div>/td> td>div classdashboard__skeleton-box>/div>/td> td>div classdashboard__skeleton-box>/div>/td> /tr> {{/each}} {{else}} {{#each cameras: i}} {{#with getSettingsInformation(i) as camera_info}} tr data-index{{i}}> td> i class{{status_class}} big-icon title{{device_state}}>/i> /td> td> div>{{deviceName}}/div> {{#if ../../show_advanced}} div classtext-dimmed>{{deviceID}}/div> {{/if}} /td> td> i class{{#if hasMotion(i)}}icon-ok green {{else}} icon-remove text-dimmed {{/if}}>/i> /td> td classanalytics> i class{{#if hasAnalytics(i)}}icon-ok green {{else}} icon-remove text-dimmed {{/if}}>/i> /td> td> div>{{deviceMake}} {{deviceModel}}/div> div>{{deviceIPAddress}}/div> /td> td> {{#with getDutyCycleInformation(i) as duty_cycle}} div class{{duty_cycle.class}}> {{duty_cycle.value}} /div> {{/with}} /td> td> div>{{getPreviewSize(camera_info) || }}/div> div>{{getVideoSize(camera_info) || }}/div> div> {{#if camera_info.preview_rate}} {{translateText(Update Rate)}} (s): {{camera_info.preview_rate / 1000}} {{/if}} /div> /td> td> div>{{getPreviewBandwidthText(camera_info) || }}/div> div>{{getVideoBandwidthText(camera_info) || }}/div> /td> td> div class{{camera_info.retention.class}}> {{#if ../../show_advanced}} span classtext-dimmed>bridge: /span>{{camera_info.retention.expected}} {{else}} {{#if camera_info.retention.local > -1}} {{! For CMVRs, show cloud retention by default }} {{translateText(Cloud Retention)}}: {{(!camera_info.retention.only_cloud && (camera_info.retention.cloud 1 || !Number(camera_info.retention.cloud))) ? 0 : camera_info.retention.cloud}} {{else}} {{camera_info.retention.expected}} {{/if}} {{/if}} /div> {{#if camera_info.is_bridge_cmvr}} div> {{#if ../../show_advanced}} span classtext-dimmed>{{translateText(minimum on premise retention)}}: /span> {{else}} {{translateText(Minimum On Premise Retention)}}: {{/if}} {{ camera_info.retention.bridge_target_days -1 || !Number(camera_info.retention.bridge_target_days) ? 0 : camera_info.retention.bridge_target_days}} /div> div> {{#if ../../show_advanced}} span classtext-dimmed>{{translateText(maximum on premise retention)}}: /span> {{else}} {{translateText(Maximum On Premise Retention)}}: {{/if}} {{ camera_info.retention.local_retention_days -1 || !Number(camera_info.retention.local_retention_days) ? 0 : camera_info.retention.local_retention_days}} /div> div> {{#if ../../show_advanced}} span classtext-dimmed>{{translateText(cloud preview only (PR1))}}: /span> {{else}} {{translateText(Cloud Preview Only (PR1))}}: {{/if}} {{camera_info.retention.only_cloud ? Yes : No}} /div> {{/if}} {{#if ../../show_advanced}} div classtext-dimmed> div>camera: {{camera_info.retention.cloud}}/div> /div> {{/if}} /td> {{#if ../../show_advanced}} td> div>{{deviceDaysOnDisk > 0 && String(deviceDaysOnDisk) || }}/div> div>{{getDeviceKBsOnDisk(i)}}/div> /td> {{/if}} td> {{#if deviceTypeAndStreams}} {{deviceTypeAndStreams}} {{else}} {{translateText(Pending)}} / {{translateText(Pending)}} {{/if}} td> {{#if getDeviceUpdatePermission(i)}} button typebutton classinfo on-click@this.openSettingsModal(i)>i classicon-cog>/i>/button> {{/if}} /td> /tr> {{/with}} {{/each}} {{/if}} /tbody> /table> /div> /div> /script> !-- TEMPLATE END :: InstallViewComponent --> !-- TEMPLATE BEGIN :: IntrusionRegionEditor --> script typetext/ractive idIntrusionRegionEditor-template> div classanalytics-object-settings> div classanalytics-object-title> h5> {{translateText(Object Detection Settings)}} /h5> button typebutton on-clickeditSize title{{translateText(Applies across all analytics)}}> i classicon-pencil>/i> /button> /div> {{#if @shared._object.edit_active}} div classanalytics-object-settings-detail> div classanalytics-object-sensitivity> {{translateText(Sensitivity)}}: Slider classanalytics-sensitivity-slider typeanalytics roiidloitering slider_sensitivity{{@shared.object.sensitivity}} min0 max100 step1>/Slider> i class{{#if @shared._object.not_default}}icon-undo{{/if}} gray on-clickresetSensitivity title{{translateText(Restore to default)}}>/i> /div> div classanalytics-object-size on-clicksetInnerActive> span>{{translateText(Min Size)}}:/span> input typetext classanalytics-object-setting-min {{#if @shared._object.edit_active_inner}}active{{/if}} title{{translateText(Edit)}} value{{getPercentValue(@shared.object.objectsize.minw)}}% x {{getPercentValue(@shared.object.objectsize.minh)}}% disabled> button typebutton classobject-size-inner {{#if @shared._object.edit_active_inner}}active{{/if}} title{{translateText(Edit)}}> i classicon-resize-full>/i> /button> /div> div classanalytics-object-size on-clicksetOuterActive> span>{{translateText(Max Size)}}:/span> input typetext classanalytics-object-setting-max {{#if @shared._object.edit_active_outer}}active{{/if}} title{{translateText(Edit)}} value{{getPercentValue(@shared.object.objectsize.maxw)}}% x {{getPercentValue(@shared.object.objectsize.maxh)}}% disabled> button typebutton classobject-size-outer {{#if @shared._object.edit_active_outer}}active{{/if}} title{{translateText(Edit)}}> i classicon-resize-full>/i> /button> /div> /div> {{/if}} /div> div classrow-fluid stylemargin-bottom: 10px> div classroi-container> /div> /div> div classrow-fluid> div classrow-fluid span12> div classspan2> h5>{{title}}/h5> /div> div classspan10> i classicon-plus-sign add-icon pull-right stylemargin-right: 16px; on-clickcreateNewPoly title{{translateText(Add region)}}.>/i> /div> /div> div classrow-fluid stylewidth:98%> table classtable table-condensed table-bordered table-striped analytics-table idcsAnalytics-line-table> thead> tr> th stylewidth:8%>{{translateText(Order)}}/th> th stylewidth:70%>{{translateText(Name)}}/th> th stylewidth:22%>{{translateText(Actions)}}/th> /tr> /thead> tbody idcsAnalytics_line_TableBody> {{#each polys:index}} tr data-id{{id}} classcamera_settings_line_row roi-options {{isEditActive(this) ? motion-selected-region : }} {{isRowSizeEditActive(this)}} id{{name}} data-color{{color}}> td on-clickeditPoly classpad-text line-order stylecolor: white; background-color: {{color}};>{{translateText( + (index + 1))}}/td> td on-clickeditPoly classcsAnalytics_line_name> input typetext classanalytic-region-name value{{this.name}}> /td> td> button typebutton classedit-analytics-line csAnalytics-edit-btn data-id{{id}} on-clickeditPoly> i classicon-pencil>/i> /button> {{#if allow_alerts && !model.get(deviceShare)}} button typebutton classedit-alerts data-id{{id}} on-clickeditAlert> i classicon-bell-alt {{isAlertSet(this) ? green : }}>/i> /button> {{/if}} button typebutton data-id{{id}} classremove-analytics-line csAnalytics-edit-btn on-clickdeletePoly> i classicon-trash>/i> /button> /td> /tr> {{#if isEditAlertActive(this.id)}} AnalyticAlertEditor colspan5 payload{{alert_payload}} roiid{{id}} who{{this.who}} when{{this.when ? this.when : *}} throttle_type{{this.throttle_type ? this.throttle_type : 2}} account_alert_modes{{accountAlertModes()}} throttle_seconds{{this.throttle_seconds ? this.throttle_seconds : 15 * 60}} throttle_hour_limit{{this.throttle_hour_limit ? this.throttle_hour_limit : 5}} users{{getUserList()}} mode{{this.mode ? this.mode : all}} level{{this.level ? this.level : 1}} smart_alerts_source_alertintrusion > /AnalyticAlertEditor> {{/if}} {{/each}} /tbody> /table> /div> /div> {{#if @shared.ignoremask_warning }} hr> p classfrom-motion-warning>{{translateText(Zero sensitivity motion regions are applied to the analytics.)}}/p> {{/if}} p stylecolor: red;>{{error_text}}/p> /script> !-- TEMPLATE END :: IntrusionRegionEditor --> !-- TEMPLATE BEGIN :: JobsView --> script typetext/template idJobsView-template> {{#if display_items.length}} article classrow-fluid> div classwidget> header classwidget-title> i classicon-flag>/i> {{translateText(Pending Downloads)}} /header> div classwidget-content clearfix> div classrow> div classred notifications-error idnotifications__error>/div> /div> {{#if loading}} InitialLoadingTable rowLength6 initialLoadingTableInfo{{initialLoadingTableInfo}} /> {{else}} table classtable table-striped> thead> tr> th stylewidth:20%>{{translateText(Download Availability)}}/th> th stylewidth:50%>{{translateText(Details)}}/th> th stylewidth:15%>{{translateText(Status)}}/th> th stylewidth:15%; min-width: 125px;>{{translateText(Action)}}/th> /tr> /thead> tbody idjobs__rows> {{#each display_items}} {{> job_row}} {{/each}} /tbody> /table> {{/if}} /div> /div> /article> {{/if}} {{#partial job_row}} tr data-id{{id}}> {{#if auto_delete false}} td> {{#if directory}} {{translateText(Your download will be securely stored in Archive)}} > {{directory}} {{translateText(after completion)}}. {{else}} {{translateText(Your download will be securely stored in Archive after completion)}}. {{/if}} /td> {{else}} td class{{ expired ? red : }}>{{translateText(Expires)}} {{expire_formatted_date}}/td> {{/if}} !-- Details --> td classnotification-details-column> div> {{video_description}} /div> div classnotification-download-link> {{#if start_time && end_time }} a href# title{{translateText(View selection in history)}} class{{download_link_class}} on-clickexports_helper.viewSelectionInHist(details.camera, event, start_timestamp, end_timestamp) > span>{{start_date}}/span> span>{{start_time}} — {{end_time}} ({{duration}})/span> /a> {{/if}} {{download_size}} /div> {{#if is_debug_mode }} br/> div classdisabled>{{translateText(Task ID)}}: {{id}}/div> {{/if}} /td> !-- Status --> td> {{details.job_state_text}} {{details.job_error}} /td> td> !-- End Notes Area --> !-- Start Progress Bar Area --> {{#if !notif_offline && percent > 0 && percent 100 && !( details.job_state JOBS_STATUSES.PARTIALLY_FAILED || details.job_state JOBS_STATUSES.FAILURE_INTERVALS || details.job_state JOBS_STATUSES.FAILURE_JOB ) }} div classnotification-progress-container> div classprogress progress-striped> div classbar styleheight: 15px; width:{{percent}}%;>/div> /div> div title{{translateText(Cancel download)}} classnotification-delete-download text-dimmed on-click_removeDownload(id, cancel) > i classicon icon-remove>/i> /div> /div> {{#if percent > 0 }} p>{{percent}}% {{translateText(Complete)}}/p> {{else}} p>{{translateText(Video download started)}} .../p> {{/if}} {{/if}} !-- End Progress Bar Area --> !-- Start Jobs actions --> {{#if ( details.job_state JOBS_STATUSES.PARTIALLY_FAILED || details.job_state JOBS_STATUSES.FAILURE_INTERVALS || details.job_state JOBS_STATUSES.FAILURE_JOB ) }} button idrepeat-download title{{translateText(Request Again)}} typebutton classbtn on-click_rerequestDownload(id, details.job_retry_strategy) > i classicon icon-repeat>/i> /button> button idremove-download title{{translateText(Delete export)}} typebutton classbtn on-click_removeDownload(id, delete) > i classicon icon-trash>/i> /button> {{/if}} div classred notification-cancel-error>/div> /td> /tr> {{/partial}} /script> script typetext/template idLayoutDynamicView-template> div classcontainer-fluid layout-dynamic> article classrow-fluid> div idlayout-edit-controls styledisplay:none> button classbtn btn-warning idcancel_edit_layout_button>i classicon-remove>/i> Cancel/button> button classbtn btn-success idsave_layout_button>i classicon-ok-circle>/i> Save Changes/button> /div> div classlayout-dynamic__initial-loading style%deviceList.init_loading ? display:grid : display:none%>> % for(var i 1; i this.initial_loading_items_amount; i++) { %> div classlayout-dynamic__initial-loading__item>/div> % } %> /div> div idlayout-manager> h3 idno-results-message>%this.t(No results found.)%>/h3> div idspeakerNotification-component>/div> div classlayout-pane-sizer size_1> div classlp-header>/div> div classlp-body>/div> /div> div classlayout-pane-gutter-sizer>/div> /div> /article> /div> /script> !-- TEMPLATE BEGIN :: LayoutLinkView --> script typetext/template idLayoutLinkView-template> li>a href#/layout_id/all classlayout-label>% this.t((all cameras)) %>/a>/li> % _.each(collection, function(item) { %> li>a href#/layout_id/% item.layout_id %> classlayout-label title%- item.layout_name %>>%- item.layout_name %>/a>/li> % }); %> /script> !-- TEMPLATE END :: LayoutLinkView --> !-- TEMPLATE BEGIN :: LayoutOptions --> script typetext/ractive idlayoutOptions-template> div classmodal-content> div classmodal-header> button typebutton classclose data-dismissmodal on-click@this.cancelNewLayout()>×/button> h3>{{translateText(Add New Layout)}}/h3> /div> div classmodal-body> div classtabbable> ul classnav nav-tabs> li classactive> a href#layout-options-settings-tab data-toggletab data-testidmodal-add-new-layout-tab-toggle-settings > {{translateText(Settings)}} /a> /li> li> a href#layout-options-cameras-tab data-toggletab data-testidmodal-add-new-layout-tab-toggle-add-cameras > {{translateText(Add Cameras)}} /a> /li> /ul> div classtab-content row-fluid> div classtab-pane active idlayout-options-settings-tab> form classform-horizontal> {{#layout_data}}{{#with layout_data.configuration.settings as config}} div classcontrol-group> label classcontrol-label>{{translateText(Name)}}:/label> div classcontrols> input typetext classspan8 maxlength60 placeholder{{translateText(New Layout)}} required value{{name}}> /div> /div> div classcontrol-group> label classcontrol-label>{{translateText(Camera Aspect Ratio)}}:/label> div classcontrols> select classspan4 value{{config.camera_aspect_ratio}}> {{#aspect_ratios}} option value{{value}}>{{label}}/option> {{/aspect_ratios}} /select> /div> /div> div classcontrol-group> label classcontrol-label>{{translateText(Max Cameras Per Row)}}:/label> div classcontrols> select classspan4 value{{config.camera_row_limit}}> {{#row_limits}} option value{{value}}>{{label}}/option> {{/row_limits}} /select> /div> /div> div classcontrol-group> label classcontrol-label>{{translateText(Show Camera Title Bars)}}:/label> div classcontrols> input typecheckbox checked{{config.camera_name}}> /div> /div> div classcontrol-group> label classcontrol-label>{{translateText(Show Camera Pane Borders)}}:/label> div classcontrols> input typecheckbox checked{{config.camera_border}}> /div> /div> div classcontrol-group> label classcontrol-label>{{translateText(Custom ID)}}:/label> div classcontrols> input typetext classspan8 maxlength5 placeholdercustom-id value{{config.custom_id}}> /div> /div> {{/with}}{{/layout_data}} /form> /div> div classtab-pane idlayout-options-cameras-tab> NewAddCameras camera_list{{isolated_camera_list}} selected_cameras{{selected_cameras}} hidden_cameras{{hide_existing_cameras}}> /NewAddCameras> /div> /div> /div> /div> div classmodal-footer> p classred>{{error_message}}/p> button typebutton classbtn btn-warning on-click@this.cancelNewLayout() data-testidmodal-add-new-layout-footer-button-cancel > {{translateText(Cancel)}} /button> button typebutton classbtn btn-success on-click@this.saveLayout() data-testidmodal-add-new-layout-footer-button-save > {{translateText(Save Changes)}} /button> /div> /div> /script> !-- TEMPLATE END :: LayoutOptions --> !-- TEMPLATE BEGIN :: layoutSettingsModal --> script typetext/template idlayoutSettingsModal-template> form classform-horizontal> div classcontrol-group> label classcontrol-label forlayout_name>% this.t(Name) %>:/label> div classcontrols> div classrow-fluid control-group> div classspan12> input typetext classspan8 maxlength60 idlayout_name placeholder% this.t(Layout Name) %> required value%- layout_name %>> /div> /div> /div> /div> div classcontrol-group> label classcontrol-label forlayoutSettingCameraAspectRatio>% this.t(Camera Aspect Ratio) %>:/label> div classcontrols> div classrow-fluid control-group> div classspan12> select classspan4 idlayoutSettingCameraAspectRatio> option value0.5625>16x9/option> option value0.75>4x3/option> /select> /div> /div> /div> /div> div classcontrol-group> label classcontrol-label forlayoutSettingCameraRowLimit>% this.t(Max Cameras Per Row) %>:/label> div classcontrols> div classrow-fluid control-group> div classspan12> select classspan4 idlayoutSettingCameraRowLimit> option value1>1/option> option value2>2/option> option value3>3/option> option value4>4/option> option value5>5/option> option value6>6/option> /select> /div> /div> /div> /div> div classcontrol-group> label classcontrol-label forlayoutSettingShowCameraName>% this.t(Show Camera Title Bars) %>:/label> div classcontrols> div classrow-fluid control-group> div classspan12> input typecheckbox nameoptionsRadios idlayoutSettingShowCameraName valueoption1> /div> /div> /div> /div> div classcontrol-group> label classcontrol-label forlayoutSettingShowBorder>% this.t(Show Camera Pane Borders) %>:/label> div classcontrols> div classrow-fluid control-group> div classspan12> input typecheckbox nameoptionsRadios idlayoutSettingShowBorder valueoption1> /div> /div> /div> /div> div classcontrol-group> label classcontrol-label forcustom_layout_id>% this.t(Custom ID) %>:/label> div classcontrols> div classrow-fluid control-group> div classspan12> input typetext classspan8 maxlength5 idcustom_layout_id placeholder% this.t(Custom ID) %>> /div> /div> /div> /div> /form> /script> !-- TEMPLATE END :: layoutSettingsModal --> !-- TEMPLATE BEGIN :: LayoutView --> script typetext/template idLayoutView-template> div classlp-wrapper> div classlp-loading-wrapper hidden> div classlp-loading-background>/div> div classlp-loading-text> span classloading>img src/_images/spinning.gif /> %this.t(Loading Viewport)%>.../span> span classdeleted hidden>%this.t(Viewport Deleted)%>/span> span classunavailable hidden>%this.t(No Viewport available)%>/span> /div> /div> % var device_id this.model.get(deviceID) %> div classlp-header> div classlp-time date_% device_id %>>span>/span>/div> div classlp-name>span>%- this.generateTitle() %>/span>/div> div classlp-control> span> i classicon-flag red img_motion_notification_% device_id %> styledisplay:none title%this.t(motion alert notification)%>>/i> i classicon-circle green %(this.model.get(is_status_video) && this.model.get(is_status_online) ? : hidden)%> img_recording_% device_id %> title%this.t(video recording)%>>/i> a href# classlp-lock-pane title%this.t(lock pane in top)%>>i classicon-lock>/i>/a> % if(userList.getCurrentUser().checkDeviceRecordedVideo(this.model) && !this.model.isLiveViewOnly()) { %> a href# classlp-history title%this.t(history)%>>i classicon-time>/i>/a> % } %> % var epoch (new Date()).valueOf(); %> span classlp-dropdown> a href# iddrop% device_id %>_%epoch%> rolebutton classdropdown-toggle drop% device_id %> data-toggledropdown title%this.t(actions)%>> i classicon-chevron-down>/i> /a> ul classdropdown-menu rolemenu aria-labelledbydrop% device_id %>_%epoch%>> % if(userList.getCurrentUser().checkDeviceUpdate(this.model)) { %> li>a tabindex-1 href# classlp-settings>% this.t(Camera Settings) %>/a>/li> % } %> li classhidden>a tabindex-1 href# classlp-save_image data-esn% device_id %>>% this.t(Save Image) %>/a>/li> % if(userList.getCurrentUser().checkShowCameraMetrics(this.model) && !this.model.isCloudCamera()) { %> li>a tabindex-1 href# classlp-analytics>% this.t(Analytics) %>/a>/li> % } %> !-- temporarily exclude mca_camera from gallery view, restore with EEN-14272 --> % if(!this.model.isMCACamera() && userList.getCurrentUser().checkDeviceRecordedVideo(this.model)) { %> li>a tabindex-1 href# classlp-viewer>% this.t(Search) %>/a>/li> % } %> % if(userList.getCurrentUser().checkDeviceVPNByID(device_id) && !this.model.isCloudCamera() && !this.model.deviceParent && !this.model.isAnalog()) { %> li>a tabindex-1 href# classlp-open-vpn>% this.t(Open VPN to camera) %>/a>/li> % } %> !-- Only for location view --> % if(this.options.show_remove_from_location_item && userList.getCurrentUser().checkEditLocationGroup()) { %> li>a tabindex-1 href# classlp-delete-from-location>% this.t(Remove camera from location) %>/a>/li> % } %> /ul> /span> i classicon-remove red big-icon remove-camera-from-layout>/i> /span> /div> /div> div classlp-body preview-container-% device_id %> data-esn% device_id %>> div classlp-relative-wrapper % this.getForceStretchClass() %>> canvas classlayout-canvas % this.getLoadingClass() %>>/canvas> div classlp-motion-boxes motion_boxes_% device_id %>>/div> div classlp-analytic-boxes analytic_boxes_% device_id %>>/div> /div> div classlp-help>% this.t(Click to change size. Click + drag to move.) %>/div> div classlp-status img_holder_% device_id %> % this.getImageHolderClass() %>> % this.getStatusText() %> /div> div classannotation-overlay> div classns-overlay counting>/div> div classns-overlay linecross>/div> div classns-overlay intrusion>/div> div classns-overlay loitering>/div> div classns-overlay tampering>/div> /div> div classzoom-control-overlay zoom-control-layout-view>/div> div classtalkdown-control-overlay>/div> div classio-control-overlay io-control-layout-view>/div> a classsmart-layout-thumbnail hidden> img src/> /a> /div> /div> /script> !-- TEMPLATE END :: LayoutView --> !-- TEMPLATE BEGIN :: LineCrossEditor --> script typetext/ractive idLineCrossEditor-template> div classanalytics-object-settings> div classanalytics-object-title> h5> {{translateText(Object Detection Settings)}} /h5> button typebutton on-clickeditSize title{{translateText(Applies across all analytics)}}> i classicon-pencil>/i> /button> /div> {{#if @shared._object.edit_active}} div classanalytics-object-settings-detail> div classanalytics-object-sensitivity> {{translateText(Sensitivity)}}: Slider classanalytics-sensitivity-slider typeanalytics roiidloitering slider_sensitivity{{@shared.object.sensitivity}} min0 max100 step1>/Slider> i class{{#if @shared._object.not_default}}icon-undo{{/if}} gray on-clickresetSensitivity title{{translateText(Restore to default)}}>/i> /div> div classanalytics-object-size on-clicksetInnerActive> span>{{translateText(Min Size)}}:/span> input typetext classanalytics-object-setting-min {{#if @shared._object.edit_active_inner}}active{{/if}} title{{translateText(Edit)}} value{{getPercentValue(@shared.object.objectsize.minw)}}% x {{getPercentValue(@shared.object.objectsize.minh)}}% disabled> button typebutton classobject-size-inner {{#if @shared._object.edit_active_inner}}active{{/if}} title{{translateText(Edit)}}> i classicon-resize-full>/i> /button> /div> div classanalytics-object-size on-clicksetOuterActive> span>{{translateText(Max Size)}}:/span> input typetext classanalytics-object-setting-max {{#if @shared._object.edit_active_outer}}active{{/if}} title{{translateText(Edit)}} value{{getPercentValue(@shared.object.objectsize.maxw)}}% x {{getPercentValue(@shared.object.objectsize.maxh)}}% disabled> button typebutton classobject-size-outer {{#if @shared._object.edit_active_outer}}active{{/if}} title{{translateText(Edit)}}> i classicon-resize-full>/i> /button> /div> /div> {{/if}} /div> div classrow-fluid stylemargin-bottom: 10px> div classroi-container> /div> {{#if current_annt}} div classarrow-container title{{translateText(Set crossing direction)}}> i classicon-circle-arrow-left {{checkCurrVector(left)}} on-clickvectorChange data-dirleft>/i> i classicon-circle-arrow-right {{checkCurrVector(right)}} on-clickvectorChange data-dirright>/i> i classicon-circle-arrow-up {{checkCurrVector(up)}} on-clickvectorChange data-dirup>/i> i classicon-circle-arrow-down {{checkCurrVector(down)}} on-clickvectorChange data-dirdown>/i> /div> {{/if}} /div> div classrow-fluid> div classrow-fluid span12> div classspan2> h5>{{title}}/h5> /div> div classspan10> i classicon-plus-sign add-icon pull-right {{lines.length > 0 ? add-disabled : }} stylemargin-right: 16px; on-clickcreateNewLine title{{lines.length 1 ? translateText(New line) : translateText(Only one line allowed)}}.>/i> /div> /div> div classrow-fluid stylewidth:98%> table classtable table-condensed table-bordered table-striped analytics-table idcsAnalytics-line-table> thead> tr> th stylewidth:8%>{{translateText(Order)}}/th> th stylewidth:60%>{{translateText(Name)}}/th> th stylewidth:10%>{{translateText(Direction)}}/th> th stylewidth:22%>{{translateText(Actions)}}/th> /tr> /thead> tbody idcsAnalytics_line_TableBody> {{#each lines:index}} tr classcamera_settings_line_row {{isEditActive(this) ? motion-selected-region : }} {{isAlertEditActive(this)}} id{{id}} data-color{{color}} data-id{{this.id}}> td on-clickeditLine classpad-text line-order stylecolor: white; background-color: {{color}};>{{translateText( + (index + 1))}}/td> td on-clickeditLine classcsAnalytics_line_name> input typetext classanalytic-region-name value{{this.name}}> /td> td on-clickeditLine classcsAnalytics_line_vector> span classvector-span {{isEditActive(this) ? line-edit-active : }} title{{translateText(Click to rotate clockwise 90 degrees)}} on-clickrotateVector data-id{{id}}> i classicon-circle-arrow-{{this.vector}}>/i> /span> /td> td> button typebutton classedit-analytics-line csAnalytics-edit-btn data-id{{id}} on-clickeditLine> i classicon-pencil>/i> /button> {{#if allow_alerts && !model.get(deviceShare)}} button typebutton classedit-alerts data-id{{id}} on-clickeditAlert> i classicon-bell-alt {{isAlertSet(this) ? green : }}>/i> /button> {{/if}} button typebutton data-id{{id}} classremove-analytics-line csAnalytics-edit-btn on-clickdeleteLine> i classicon-trash>/i> /button> /td> /tr> {{#if isEditAlertActive(this.id)}} AnalyticAlertEditor colspan6 payload{{alert_payload}} who{{this.who}} roiid{{id}} counting{{line_type crossing}} alert_on_in{{!is_wrong_way}} alert_on_out{{is_wrong_way}} in_vector{{this.vector}} out_vector{{getOutVector(this.vector)}} when{{this.when ? this.when : *}} throttle_type{{this.throttle_type ? this.throttle_type : 2}} account_alert_modes{{accountAlertModes()}} throttle_seconds{{this.throttle_seconds ? this.throttle_seconds : 15 * 60}} throttle_hour_limit{{this.throttle_hour_limit ? this.throttle_hour_limit : 5}} users{{getUserList()}} mode{{this.mode ? this.mode : all}} level{{this.level ? this.level : 1}} smart_alerts_source_alertlinecross > /AnalyticAlertEditor> {{/if}} {{/each}} /tbody> /table> /div> /div> {{#if @shared.ignoremask_warning }} hr> p classfrom-motion-warning>{{translateText(Zero sensitivity motion regions are applied to the analytics.)}}/p> {{/if}} p stylecolor: red;>{{error_text}}/p> /script> !-- TEMPLATE END :: LineCrossEditor --> !-- Copied directly from IntrusionEditor with minor loitering-specific changes --> !-- TEMPLATE BEGIN :: LoiteringRegionEditor --> script typetext/ractive idLoiteringRegionEditor-template> div classanalytics-object-settings> div classanalytics-object-title> h5> {{translateText(Object Detection Settings)}} /h5> button typebutton on-clickeditSize title{{translateText(Applies across all analytics)}}> i classicon-pencil>/i> /button> /div> {{#if @shared._object.edit_active}} div classanalytics-object-settings-detail> div classanalytics-object-sensitivity> {{translateText(Sensitivity)}}: Slider classanalytics-sensitivity-slider typeanalytics roiidloitering slider_sensitivity{{@shared.object.sensitivity}} min0 max100 step1>/Slider> i class{{#if @shared._object.not_default}}icon-undo{{/if}} gray on-clickresetSensitivity title{{translateText(Restore to default)}}>/i> /div> div classanalytics-object-size on-clicksetInnerActive> span>{{translateText(Min Size)}}:/span> input typetext classanalytics-object-setting-min {{#if @shared._object.edit_active_inner}}active{{/if}} title{{translateText(Edit)}} value{{getPercentValue(@shared.object.objectsize.minw)}}% x {{getPercentValue(@shared.object.objectsize.minh)}}% disabled> button typebutton classobject-size-inner {{#if @shared._object.edit_active_inner}}active{{/if}} title{{translateText(Edit)}}> i classicon-resize-full>/i> /button> /div> div classanalytics-object-size on-clicksetOuterActive> span>{{translateText(Max Size)}}:/span> input typetext classanalytics-object-setting-max {{#if @shared._object.edit_active_outer}}active{{/if}} title{{translateText(Edit)}} value{{getPercentValue(@shared.object.objectsize.maxw)}}% x {{getPercentValue(@shared.object.objectsize.maxh)}}% disabled> button typebutton classobject-size-outer {{#if @shared._object.edit_active_outer}}active{{/if}} title{{translateText(Edit)}}> i classicon-resize-full>/i> /button> /div> /div> {{/if}} /div> div classrow-fluid> div classroi-container> /div> /div> div classrow-fluid> div classrow-fluid span12> div classspan2> h5>{{title}}/h5> /div> div classspan10> i classicon-plus-sign add-icon pull-right stylemargin-right: 16px; on-clickcreateNewPoly title{{translateText(Add region)}}.>/i> /div> /div> div classrow-fluid stylewidth:98%> table classtable table-condensed table-bordered table-striped analytics-table> thead> tr> th stylewidth:8%>{{translateText(Order)}}/th> th stylewidth:40%>{{translateText(Name)}}/th> th stylewidth:30%>{{translateText(Dwell Time)}}/th> th stylewidth:22%>{{translateText(Actions)}}/th> /tr> /thead> tbody> {{#each polys:index}} tr data-id{{id}} classcamera_settings_line_row roi-options {{isEditActive(this) ? motion-selected-region : }} {{isRowSizeEditActive(this)}} id{{name}} data-color{{color}}> td on-clickeditPoly classpad-text line-order stylecolor: white; background-color: {{color}};>{{translateText( + (index + 1))}}/td> td on-clickeditPoly classcsAnalytics_line_name> input classanalytic-region-name typetext value{{this.name}}> /td> td on-clickeditPoly> input on-change-clickupdateDwellTime, @keypath classloitering-dwell-time-min min0 max2 {{! Tim suggests maximum of two minutes - more than that, and the object is lost into the background. This behavior will be improved later. }} typenumber step1 value{{formatDwellTime(seconds, min)}} twowayfalse /> min input on-change-clickupdateDwellTime, @keypath classloitering-dwell-time-sec typenumber step1 min0 max60 value{{formatDwellTime(seconds, sec)}} twowayfalse /> sec /td> td> button typebutton classedit-analytics-line csAnalytics-edit-btn data-id{{id}} on-clickeditPoly> i classicon-pencil>/i> /button> {{#if allow_alerts && !model.get(deviceShare)}} button typebutton classedit-alerts data-id{{id}} on-clickeditAlert> i classicon-bell-alt {{isAlertSet(this) ? green : }}>/i> /button> {{/if}} button typebutton data-id{{id}} classremove-analytics-line csAnalytics-edit-btn on-clickdeletePoly> i classicon-trash>/i> /button> /td> /tr> {{#if isEditAlertActive(this.id)}} AnalyticAlertEditor colspan6 payload{{alert_payload}} roiid{{id}} who{{this.who}} when{{this.when ? this.when : *}} throttle_type{{this.throttle_type ? this.throttle_type : 2}} {{! THROTTLE TYPE VALUES: immediate 1; after 2; after quiet for 3; TODO cea: fix magic numbers. }} account_alert_modes{{accountAlertModes()}} throttle_seconds{{this.throttle_seconds ? this.throttle_seconds : 15 * 60}} throttle_hour_limit{{this.throttle_hour_limit ? this.throttle_hour_limit : 5}} users{{getUserList()}} mode{{this.mode ? this.mode : all}} level{{this.level ? this.level : 1}} smart_alerts_source_alertloitering > /AnalyticAlertEditor> {{/if}} {{/each}} /tbody> /table> /div> /div> {{#if @shared.ignoremask_warning }} hr> p classfrom-motion-warning>{{translateText(Zero sensitivity motion regions are applied to the analytics.)}}/p> {{/if}} p classred>{{error_text}}/p> /script> !-- TEMPLATE END :: LoiteringRegionEditor --> !-- TEMPLATE BEGIN :: UncannyLPREditor --> script typetext/ractive idUncannyLPREditor-template> div classanalytics-object-title> {{#if show_redirect_to_enhanced_interface }} button typebutton classbtn btn-info on-clickopenNewWebapp title{{translateText(Configure in Enhanced Interface)}}> {{translateText(Configure in Enhanced Interface)}} /button> {{else}} h5> {{translateText(Open LPR Settings)}} /h5> button typebutton on-clickopenTunnelLpr title{{translateText(Open tunnel settings for lpr)}}> i classicon-pencil>/i> /button> {{/if}} /div> div classrow-fluid> div classroi-container> /div> /div> /script> !-- TEMPLATE END :: UncannyLPREditor --> !-- TEMPLATE BEGIN :: ManagedSwitchControls --> script idtemplate-ManagedSwitchControls typetext/ractive> div classmodal-header> button typebutton classclose on-clickclose data-dismissmodal aria-hiddentrue>×/button> h3> {{translateText(Managed Switch Settings)}} // {{static_name}}{{#if debug}} ({{model.get(ip)}}){{/if}} /h3> /div> div classmodal-body> !-- launches help window from help/ data_link attribute + .html --> span classpull-right on-clickopenHelp data_linkswitch_settings_ports> i classicon-question-sign een-help-link>/i> /span> div classrow-fluid> label classspan1> {{translateText(Name)}}: /label> div classspan5> input classswitch-name typetext value{{name}}/> /div> /div> div classrow-fluid> table classspan12> thead> tr> th stylewidth:10%>{{translateText(Port #)}}/th> th stylewidth:17%>{{translateText(Power Status)}}/th> th classport-name-header stylewidth:68%>{{translateText(Device (Bridge))}}/th> th stylewidth:5%>{{translateText(Power)}}/th> /tr> /thead> {{#each model.get(port_details)}} tr> td>{{index.split(_)1}}/td> td title{{getStatusTitle(enabled, power)}}> i classicon-bolt stylecolor: {{getStatusColor(enabled, power)}}>/i> /td> td classport-name style{{getNameStyle(this)}}> {{getCameraName(this)}} {{#if ip}} ({{ip}}){{/if}} /td> td title{{translateText(Click to toggle power on or off)}} classtoggle-port> label classswitch> input typecheckbox checked{{checkPortEnabled(this)}}> span classswitch-slider round on-clicktogglePort, this>/span> /label> /td> /tr> {{/each}} /table> /div> div classrow-fluid buttons-all> button classbtn btn-success span4 offset2 title{{translateText(Power cycle all ports)}} on-clickrestartAll> {{translateText(Power Cycle All)}} /button> button classbtn btn-info span4 title{{translateText(Reboot the managed switch)}} on-clickrestartSwitch> {{translateText(Reboot Switch)}} /button> /div> div classrow-fluid switch-loading> p classspan6 offset2 green>{{message}}/p> /div> /div> div classmodal-footer> p classred>{{error_message}}/p> button classbtn btn-warning on-clickclose>{{translateText(Cancel)}}/button> button classbtn btn-success on-clicksave>{{translateText(Save)}}/button> /div> /script> !-- TEMPLATE END :: ManagedSwitchControls --> !-- TEMPLATE BEGIN :: NotificationListItemView --> script typetext/template idNotificationListItemView-template> tr data-id%this.notif._key%>> % // TODO: clean up and move logic to view var details this.notif.details; if(this.notif.classvideo_download) { var camera cameraList.findByDeviceID(details.camera_id), camera_name camera ? camera.get(deviceName) : , notif_offline camera && !camera.get(is_status_cloud_registered), percent !(notif_offline) ? Math.round(details.percent_complete) : (parseInt(details.percent_complete) 100 ? 0 : 100), type_prefix details.download_type ? utils.format_string(this.t({{type}} Download), {type: this.t(details.download_type)}) : , description details.video_description, show_camera_name details.video_description.indexOf(camera_name) -1, offline_message (notif_offline || debug.offline_notif) && parseInt(percent) 100, out_of_retention_class this.notif.out_of_retention ? disabled : view-in-hist; camera_name camera && camera.get(deviceName) || , start_timestamp_camera camera && camera.getCameraTime(details.start_timestamp, false) || details.start_timestamp, end_timestamp_camera camera && camera.getCameraTime(details.end_timestamp, false) || details.end_timestamp, start_time deviceList.getDisplayTime(start_timestamp_camera, true, true), end_time deviceList.getDisplayTime(end_timestamp_camera, true, true), start_date start_timestamp_camera ? deviceList.getDisplayTime(start_timestamp_camera, false, true).split( )0 : , download_size_bytesdetailsdownload_size_bytes, duration ; if(details.start_timestamp && details.end_timestamp) { duration deviceList.getDuration(details.start_timestamp, details.end_timestamp) } download_size ; if(download_size_bytes){ download_size download_size_bytes / 1024, download_size_uom KB; if(download_size > 1024){ var download_size download_size_bytes / 1024 / 1024, download_size_uom MB; if(download_size > 1024){ download_size download_size_bytes / 1024 / 1024 / 1024, download_size_uom GB; } } download_size Math.round10(download_size, -2) + + download_size_uom; } var DOWNLOAD_EXPIRE_DAYS 7; var notification_request_date new Date(utils._epoch_StrToDate(this.notif.timestamp) * 1000); var expiration_date details.task_expire_timestamp ? // use expire timestamp provided by notification details, or calculate it based on download availability new Date(utils._epoch_StrToDate(details.task_expire_timestamp) * 1000) : new Date(notification_request_date.setDate(notification_request_date.getDate() + DOWNLOAD_EXPIRE_DAYS)); var expired Boolean(expiration_date new Date()); var expiration_display_date deviceList.getDisplayTime(expiration_date, false, true); } %> td class% expired ? red : %>>% (expired ? utils.format_string(utils.t(Expired {{expiration_date}}), {expiration_date: expiration_display_date }) : utils.format_string(utils.t(Expires {{expiration_date}}), {expiration_date: expiration_display_date })) %>/td> td classnotification-details-column> div> %type_prefix%>: %-description%> %if (show_camera_name) {%> %-camera_name%> %}%> %if (offline_message) {%> %this.t((Cannot process internet offline...))%> %}%> /div> div classnotification-download-link> a href# class%out_of_retention_class%> data-tsstart%details.start_timestamp%> data-tsend%details.end_timestamp%> data-id%details.camera_id%> title%this.t(View selection in history)%> %if(camera){%>disabled%}%>> span>%start_date%>/span> span>%start_time%>—%end_time%> %if (duration) {%> (%duration%>) %}%>/span>/a> %if (this.notif.out_of_retention) {%> %this.t((out of retention period))%> %}%> %download_size%> /div> % var notes (details.notes && details.notes.length > 0 ? details.notes : ); %> div classnotification-notes %((!!notes)? : notification-notes-empty)%>> %this.t(Notes)%>: span classnotes-field %percent && percent > 100 ? editable-notification : disabled-notification%>>%-notes%>i classicon-pencil>/i>/span> input styledisplay:none; classnotes-input typetext placeholder%-notes%>/> /div> %if(utils.isDebugModeEnabled()) {%> br /> div classdisabled>Task ID: %this.notif._key%>/div> %}%> /td> td> % //We always show the buttons visible but determine if we grey them out //There are three places for buttons edit button, action button, hash button. //Edit button is always shown and allows you to edit notes //Action button is special and either download or re-fetch or spinner downloading //depending on task state //Hash button is enabled only when the download completes and we have a hash to show //Rules for Action Section: //If the download is still going we show the spinner in the action section //If the download is done and not expired we show the download button enabled in action section //If the download is expired and not out of retention we show the refetch button enabled in action section //If the download is expired and out of retention we show the download button disabled in action section //We only show the buttons if we are ready else the progress bar if (this.notif.progress ready) { %> !-- Start Notes Button --> button classbtn notification-edit-button title%this.t(Add notes)%> typebutton> i classicon-pencil>/i> /button> !-- End Notes Button --> !-- Start Action Area --> % var title Download; var disabled ; var iclass icon-cloud-download if (this.notif.progress ! ready) { disabled disabled; iclass icon-spinner; } else if (expired && !this.notif.out_of_retention) { title Request Again; iclass icon-repeat; } else if (expired && this.notif.out_of_retention) { disabled disabled; }%> button title%this.t(title)%> typebutton data-notification_url%details.download_url%> data-notification_class%this.notif.class%> data-expired%expired%> data-key%this.notif._key%> classnotification-action btn %disabled%>> i class%iclass%>>/i> /button> !-- End Action Area --> !-- Start Checksum Area --> % var checksum (!!details.checksum && details.checksum.length > 0 && details.checksum); %> button title%this.t(Copy MD5 Checksum to clipboard (proof that video has not been tampered with))%> classchecksum btn data-sum%checksum%>_sum %((!!checksum)? : disabled )%>> i classicon icon-check>/i> /button> textarea id%checksum%>_sum classchecksum-exports>%checksum%>/textarea> !-- End Checksum Area --> %}%> !-- Start Progress Bar Area --> %if(!(notif_offline || debug.offline_notif || this.notif.out_of_retention) && percent ! null && percent ! undefined && percent > 0 && percent 100){%> div classnotification-progress-container> div classprogress progress-striped> div classbar styleheight: 15px; width: %percent%>%;>/div> /div> div title%this.t(Cancel download)%> classnotification-delete-download text-dimmed data-key%this.notif._key%>> i classicon icon-remove>/i> /div> /div> %if(percent > 0) {%> p>%percent%>% %this.t(complete)%>/p> %}else{%> p>%this.t(Video download started)%> .../p> %}%> %}else if(this.notif.out_of_retention && percent ! null && percent ! undefined && percent > 0 && percent 100){%> %this.t(Out of retention) %> %}%> !-- End Progress Bar Area --> div classred notification-cancel-error>/div> /td> /tr> /script> !-- TEMPLATE END :: NotificationListItemView --> !-- TEMPLATE BEGIN :: NotificationView --> script typetext/template idNotificationView-template> % var self this;%> article classrow-fluid> div classwidget> header classwidget-title>i classicon-flag>/i> %this.t(Downloads)%>/header> div classwidget-content clearfix> div classrow> div classred notifications-error idnotifications__error>/div> /div> table classtable table-striped> thead> tr> % if (userList.getCurrentUser().checkFeatureFlag(exports_v3)) { %> th stylewidth:20%>%this.t(Download Availability)%>/th> th stylewidth:50%>%this.t(Details)%>/th> th stylewidth:15%; min-width: 125px;>%this.t(Action)%>/th> % } else { %> th stylewidth:25%>%this.t(Download Availability)%>/th> th stylewidth:60%>%this.t(Details)%>/th> th stylewidth:15%; min-width: 125px;>%this.t(Action)%>/th> % } %> /tr> /thead> tbody idnotifications__rows> /tbody> /table> /div> /div> /article> /script> !-- TEMPLATE END :: NotificationView --> script typetext/template idNotificationWrapView-template> div classcontainer-fluid> div iddownloads-page>/div> /div> /script> !-- TEMPLATE BEGIN :: Slider --> script typetext/ractive idObjectDimensionSlider-template> div classrow-fluid> div classspan12> div classslider-widget csAnalytics_slider>/div> /div> /div> /script> !-- TEMPLATE END :: Slider --> !-- TEMPLATE BEGIN :: PaginationBarApi --> script typetext/ractive idPageSize-template> div classpage-size> label fordevices-list--page-size-select classpage-size-select--label pull-left>{{ translateText(Page size) }}:/label> select iddevices-list--page-size-select classpage-size-select pull-right value{{size}} > option value25>25/option> option value50>50/option> option value100>100/option> option value250>250/option> option value500>500/option> /select> /div> /script> !-- TEMPLATE END :: PaginationBar --> !-- TEMPLATE BEGIN :: PaginationBarApi --> script typetext/ractive idPaginationBarApi-template> div classpull-right pagination-bar> span classpag-num-text> {{#if loading}} img width10px src/_images/spinning.gif alt> {{else}} {{ pagbar_text }} {{/if}} /span> div classpull-right btn-group pagination-buttons> button classbtn-info btn btn-mini first-btn on-click@this.firstPage() {{#if (no_items || is_first_page || loading)}}disabled{{/if}}> i class icon-step-backward>/i> /button> button classbtn btn-info btn-mini middle-btn on-click@this.previousPage() {{#if (no_items || is_first_page || loading)}}disabled{{/if}}> i class icon-chevron-left>/i> /button> button classbtn btn-info btn-mini middle-btn on-click@this.nextPage() {{#if (no_items|| is_last_page || loading)}}disabled{{/if}}> i class icon-chevron-right>/i> /button> button classbtn-info btn btn-mini last-btn on-click@this.lastPage() {{#if (no_items || is_last_page || loading)}}disabled{{/if}}> i class icon-step-forward>/i> /button> /div> /div> /script> !-- TEMPLATE END :: PaginationBar --> !-- TEMPLATE BEGIN :: PaginationBar --> script typetext/ractive idPaginationBar-template> div classpull-right pagination-bar> div classpull-right btn-group pagination-buttons> button classbtn-info btn btn-mini first-btn on-click@this.firstPage() {{#if (quantity 0)}}disabled{{/if}}> i class icon-step-backward>/i> /button> button classbtn btn-info btn-mini middle-btn on-click@this.previousPage() {{#if (quantity 0)}}disabled{{/if}}> i class icon-chevron-left>/i> /button> button classbtn btn-info btn-mini middle-btn on-click@this.nextPage() {{#if (quantity 0)}}disabled{{/if}}> i class icon-chevron-right>/i> /button> button classbtn-info btn btn-mini last-btn on-click@this.lastPage() {{#if (quantity 0)}}disabled{{/if}}> i class icon-step-forward>/i> /button> /div> p classpag-num-text pull-right>{{ pagbar_text }}/p> /div> /script> !-- TEMPLATE END :: PaginationBar --> !-- TEMPLATE BEGIN :: PreviewBubble --> script typetext/ractive idPreviewBubble-template> div classpreview-bubble> div classclose on-clickclose>×/div> div classpreview-bubble-container>/div> /div> /script> !-- TEMPLATE END :: PreviewBubble --> !-- TEMPLATE BEGIN :: ReplaceBridgeView --> script typetext/template idReplaceBridgeView-template> span classmodal-heading-append> // %-model.get(deviceName)%>/span> div classtab-pane active ideditBridge__bridge> form classform-horizontal> div classcontrol-group> label classcontrol-label for>%utils.t(Replace Bridge:)%>/label> div classcontrols> div classrow-fluid stylemargin-top:5px> %-model.get(deviceName)%> /div> /div> /div> % if(replaceableBridges.length) { %> div classcontrol-group> label classcontrol-label for>%utils.t(with Bridge:)%>/label> div classcontrols> div classrow-fluid> select idreplaceBridge__new_bridge> % _.each(replaceableBridges, function(item) {%> option value%item.get(deviceGUID)%>>%-item.get(deviceName)%>/option> %});%> /select> /div> /div> /div> % } else { %> h4 classtext-center> No bridges to replace /h4> % } %> /form> div idbridgeSwapMessage classred text-center> p>%utils.t(Device Names cannot be the same for swapping feature)%>/p> p>%utils.t(We suggest naming the new device Swap)%>/p> /div> /div> /script> !-- TEMPLATE BEGIN :: ResponderView --> script typetext/template idResponderView-template> % cameraList.refreshResponderAccounts(); %> % var responderList cameraList.responderAccounts; var accounts Object.keys(responderList).sort(); %> % _.each(accounts, function(item) { %> li>a href#/layout_account/% encodeURIComponent(responderListitem) %> classtag-label>%- item %>/a>/li> % }); %> /script> !-- TEMPLATE END :: ResponderView --> !-- TEMPLATE BEGIN :: ROIEditor --> script typetext/ractive idROIEditor-template> div ideditCamera__roi_management> div classrow-fluid> div classroi-container> canvas ideditCamera__motion_image width640 height360>/canvas> canvas ideditCamera__motion_boxes classcamera-rois width640 height360>/canvas> /div> span styledisplay:none> div classspan1> input typecheckbox ideditCamera__motion_boxes_metric_active value1/> /div> div classspan10> label classlabel-row foreditCamera__motion_boxes_metric_active>{{ translateText(Show Motion Boxes (takes affect after Save)) }}/label> /div> /span> input typehidden ideditCamera__motion_id/> /div> div classrow-fluid ideditCamera__motion_regions> div classrow-fluid span12> div classspan2> h5>{{ translateText(Regions/Alerts) }}/h5> /div> div classspan10> i classicon-plus-sign add-icon pull-right on-clickcreateNewRegion title{{translateText(Create new motion region.)}} ideditCamera__new_motion_zone> /i> /div> /div> table classtable table-condensed table-bordered table-striped ideditCamera__motion_zones> thead> tr> th classroi-table-order-th>{{ translateText(Order) }}/th> th classroi-table-name-th>{{ translateText(Name) }}/th> th classroi-table-sensitivity-th>{{ translateText(Sensitivity) }}/th> th classroi-table-objectsize-th>{{ translateText(Object Size) }}/th> {{#if this.show_to_analytics_column }} th classroi-table-to-analytics-th>{{ translateText(To Analytics) }}/th> {{/if}} th classroi-table-actions-th>{{ translateText(Actions) }}/th> /tr> /thead> tbody> {{#each model.get(motion)}} tr on-clickeditPoly classroi-options {{isEditActive(this) ? motion-selected-region : }} {{isAlertEditActive(this)}} data-roi_name{{this.roi_name}} data-roiid{{this.roiid}} data-name{{this.name}} data-ignore_motion{{this.ignore_motion}} data-when{{this.when}} data-who{{this.who}} data-level{{this.level}} data-throttle_type{{this.throttle_type}} data-throttle_seconds{{this.throttle_seconds ? this.throttle_seconds : 0}} data-throttle_hour_limit{{this.throttle_hour_limit}} data-mode{{this.mode}} data-sensitivity{{this.sensitivity}} data-alert_name{{this.alert_name}} data-schedule_name{{this.schedule_name}} data-alert_id{{this.alert_id}} data-roi{{this.roi}} data-priority{{this.priority}} data-motion_threshold{{this.motion_threshold}} data-color{{this.color}} data-is_sensitivity_override{{this.is_sensitivity_override}}> td classroi-table-order-td stylebackground-color:#{{this.color}}> i classicon-arrow-up on-clickpriorityUp>/i> i classicon-arrow-down on-clickpriorityDown>/i> span classpriority>{{this.priority_text}}/span> /td> td classroi-table-name-td> input classroi-name analytic-region-name on-clickignoreClick twowayfalse value{{this.name}} typetext /> /td> td classslider-cell-roiid roi-table-sensitivity-td> Slider classroi-sensitivity min0 max100 typemotion on-change@this.sliderChange() slider_sensitivity{{Math.trunc(this.sensitivity * 100)}} step1>/Slider> /td> td classroi-table-objectsize-td> select classmotion-threshold {{isEditActive(this) ? : disabled-field}} on-clickignoreClick twowayfalse value{{this.motion_threshold}} disabled{{isEditActive(this) ? : disabled}}> option value0.001>{{ translateText(Small) }}/option> option value0.01>{{ translateText(Medium) }}/option> option value0.1>{{ translateText(Large) }}/option> /select> /td> {{#if ../../show_to_analytics_column }} td classroi-table-to-analytics-td> input title{{ translateText(Apply 0 sensitivity motion region to analytics to disable analytic event triggering) }} data-toggletooltip typecheckbox classmotion-to-analytics checked{{this.ignoremask_in_analytics}} {{#if this.sensitivity > 0}}disabled{{/if}} /> /td> {{/if}} td classroi-table-actions-td> {{#if !model.get(deviceShare)}} button on-clickeditAlert classedit-alerts>i classicon-bell-alt {{isAlertSet(this) ? green : }}>/i>/button> {{/if}} button on-clickremoveRegion classremove-motion-zone>i classicon-trash>/i>/button> /td> /tr> {{#if isEditAlertActive(this)}} AlertEditor colspan6 twowayfalse roiid{{this.roiid}} roi_name{{this.roi_name}} who{{this.who}} when{{this.when ? this.when : *}} throttle_type{{this.throttle_type ? this.throttle_type : 2}} {{! THROTTLE TYPES: immediately 1; after 2; after quiet for: 3; TODO cea: clean up magic numbers in refactor}} account_alert_modes{{accountAlertModes()}} throttle_seconds{{this.throttle_seconds ? this.throttle_seconds : 15 * 60}} throttle_hour_limit{{this.throttle_hour_limit}} users{{getUserList()}} mode{{this.mode ? this.mode : all}} level{{this.level ? this.level : 1}} smart_alerts_source_alertmotion > /AlertEditor> {{/if}} {{/each}} /tbody> /table> /div> p classred>{{error_text}}/p> /div> /script> !-- TEMPLATE END :: ROIEditor --> !-- TEMPLATE BEGIN :: SearchView --> script typetext/template idSearchView-template> form classform-horizontal> %var curr_user userList.getCurrentUser();%> div classrow-fluid> label classspan2 search_field_label forrecording_key> %if( curr_user.isTonyGroup() ){%> %this.t(Deal Number)%>: %}else{%> %this.t(Contract #)%>: %}%> /label> div classspan2> input typetext idrecording_key namerecording_key/> /div> /div> %if( curr_user.isTonyGroup() ){%> div classrow-fluid> label classspan2 search_field_label forstock_number> %this.t(Stock Number)%>: /label> div classspan2> input typetext idstock_number namestock_number/> /div> /div> %}%> div classrow-fluid stylemargin-bottom: 5px;> div classspan2 search_field_label> %(curr_user.isDiamond() ? this.t(Sales Center) : this.t(Room Name))%>:/div> div classspan2> input typetext idlayout_name namelayout_name/> /div> /div> %if(curr_user.isDiamond()){%> div classrow-fluid stylemargin-bottom: 5px;> div classspan2 search_field_label> %this.t(QAO Name)%>: /div> div classspan2> input typetext idmanager_last_name placeholder%this.t(Last Name)%> namemanager_last_name/> /div> /div> div classrow-fluid stylemargin-bottom: 5px;> div classspan2 search_field_label> %this.t(Customer Name)%>: /div> div classspan2> input typetext idcustomer_last_name placeholder%this.t(Last Name)%> namecustomer_last_name/> /div> /div> %}else{%> %if(!curr_user.isTonyGroup()){%> div classrow-fluid stylemargin-bottom: 5px;> div classspan2 search_field_label> %if( curr_user.isIberostar() || curr_user.isHolidaysLounge() || curr_user.isElCid() ){%> %this.t(VLO Name)%>: %}else{%> %this.t(Agent Name)%>: %}%> /div> div classspan2> input typetext idagent_first_name placeholder%this.t(First Name)%> nameagent_first_name/> /div> div classspan2 offset1> input typetext idagent_last_name placeholder%this.t(Last Name)%> nameagent_last_name/> /div> /div> %}%> %if(curr_user.isCRNotWyndham()){%> %if(!(curr_user.isIberostar() || curr_user.isElCid() || curr_user.isTonyGroup())){%> div classrow-fluid stylemargin-bottom: 5px;> div classspan2 search_field_label> %this.t(Manager Name)%>: /div> div classspan2> input typetext idmanager_first_name placeholder%this.t(First Name)%> namemanager_first_name/> /div> div classspan2 offset1> input typetext idmanager_last_name placeholder%this.t(Last Name)%> namemanager_last_name/> /div> /div> %}%> div classrow-fluid stylemargin-bottom: 5px;> div classspan2 search_field_label> %if (curr_user.isIberostar() || curr_user.isElCid()) {%> %this.t(Member Name)%>: %} else if (curr_user.isHolidaysLounge()) {%> %this.t(Owner Name)%>: %}else{%> %this.t(Customer Name)%>: %}%> /div> div classspan2> input typetext idcustomer_first_name placeholder%this.t(First Name)%> namecustomer_first_name/> /div> div classspan2 offset1> input typetext idcustomer_last_name placeholder%this.t(Last Name)%> namecustomer_last_name/> /div> /div> %if(curr_user.isHolidaysLounge()){%> div classrow-fluid stylemargin-bottom: 5px;> div classspan2 search_field_label> %this.t(Second Owner Name)%>: /div> div classspan2> input typetext idsecond_customer_first_name placeholder%this.t(First Name)%> namesecond_customer_first_name/> /div> div classspan2 offset1> input typetext idsecond_customer_last_name placeholder%this.t(Last Name)%> namesecond_customer_last_name/> /div> /div> %}%> %}%> %}%> div classrow-fluid stylemargin-bottom: 5px;> div classspan2 search_field_label> %this.t(Start Time)%>:/div> div classspan2> input typetext idsearch_start_date classdatepicker> /div> div classinput-append bootstrap-timepicker span2 %curr_user.isDiamond() ? : offset1%>> input idsearch_start_time typetext maxlength60 classinput-small> span classadd-on>i classicon-time>/i>/span> /div> /div> div classrow-fluid stylemargin-bottom: 5px;> div classspan2 search_field_label> %this.t(Stop Time)%>:/div> div classspan2> input typetext idsearch_stop_date classdatepicker> /div> div classinput-append span2 bootstrap-timepicker %curr_user.isDiamond() ? : offset1%>> input idsearch_stop_time typetext maxlength60 classinput-small> span classadd-on>i classicon-time>/i>/span> /div> /div> div classrow-fluid> div classspan2> button classbtn btn-success pull-right stylewidth:110px; idgo_search>%this.t(Search)%>/button> /div> /div> /div> div classrow-fluid idmessages styledisplay:none> div classspan8> p idsuccess>/p> p iderror>/p> /div> /div> /form> %if(recordings!null){%> div classrow-fluid> div classspan12 idresults> %if(recordings.length0){%> %this.t(No results found.)%> %}else{%> table classtable table-striped> thead> tr> %if(curr_user.isCRNotWyndham()){%> %if(curr_user.isDiamond()){%> th stylewidth:30%>%this.t(Cameras)%>/th> th stylewidth:10%>%this.t(Contract #)%>/th> th stylewidth:10%>%this.t(Sales Center)%>/th> th stylewidth:10%>%this.t(Customer Name)%>/th> th stylewidth:10%>%this.t(QAO Name)%>/th> th stylewidth:10%>%this.t(Length)%>/th> th stylewidth:10%>%this.t(Date)%>/th> %}else if (curr_user.isHolidaysLounge() ) {%> th stylewidth:20%>%this.t(Cameras)%>/th> th stylewidth:10%>%this.t(Contract #)%>/th> th stylewidth:10%>%this.t(Room)%>/th> th stylewidth:10%>%this.t(VLO Name)%>/th> th stylewidth:10%>%this.t(Owner Name)%>/th> th stylewidth:10%>%this.t(Second Owner Name)%>/th> th stylewidth:10%>%this.t(Manager Name)%>/th> th stylewidth:10%>%this.t(Length)%>/th> th stylewidth:10%>%this.t(Date)%>/th> %}else if (curr_user.isTonyGroup() ) {%> th stylewidth:15%>%this.t(Cameras)%>/th> th stylewidth:10%>%this.t(Deal Number)%>/th> th stylewidth:10%>%this.t(Stock Number)%>/th> th stylewidth:15%>%this.t(Room)%>/th> th stylewidth:25%>%this.t(Length)%>/th> th stylewidth:25%>%this.t(Date)%>/th> %}else{%> th stylewidth:20%>%this.t(Cameras)%>/th> th stylewidth:10%>%this.t(Contract #)%>/th> th stylewidth:10%>%this.t(Room)%>/th> th stylewidth:10%>%this.t(Agent Name)%>/th> th stylewidth:10%>%this.t(Customer Name)%>/th> th stylewidth:10%>%this.t(Second Customer Name)%>/th> th stylewidth:10%>%this.t(Manager Name)%>/th> th stylewidth:10%>%this.t(Length)%>/th> th stylewidth:10%>%this.t(Date)%>/th> %}%> %}else{%> th stylewidth:20%>%this.t(Cameras)%>/th> th stylewidth:10%>%this.t(Contract #)%>/th> %if(curr_user.isWyndham()){%> th stylewidth:15%>%this.t(Service Entity)%>/th> th stylewidth:15%>%this.t(Room)%>/th> %}else{%> th stylewidth:30%>%this.t(Room)%>/th> %}%> th stylewidth:25%>%this.t(Length)%>/th> th stylewidth:25%>%this.t(Date)%>/th> %}%> /tr> /thead> tbody> %var i0, selfthis;%> % _.each(recordings, function(item) { %> % var rowClass++i%20?-alt:, cameras , time , duration0s, layout _.escape(item.layout_id && layoutLinkList.findByLayoutID(item.layout_id) && layoutLinkList.findByLayoutID(item.layout_id).get(layout_name) || item.layout_name || Room);%> % _.each(item.camera_ids, function(cam) { %> %var camera cameraList.findByDeviceID(cam); durationitem.stop_timestamp && (item.no_video_reason ? deviceList.getDuration(item.start_timestamp, item.stop_timestamp) + ( + item.no_video_reason + ): deviceList.getDuration(item.start_timestamp, item.stop_timestamp)) || (deviceList.getDuration(item.start_timestamp) + br/> + self.t(currently recording)); if(camera){%> %timecamera.getCameraTime(item.start_timestamp, true)%> %cameras.push(camera)%> %}else{%> %timedeviceList.getDisplayTime(item.start_timestamp, false, true)%> %}%> % }); %> %var camera_id cameras.length 1 ? item.camera_ids0 : cameras0.get(deviceID);%> tr> td> %if(item.uuid){%> %var downloadUrl https://, window.location.host, /file/file?id, camera_id, &st, item.start_timestamp, &ts, item.start_timestamp, &u, item.uuid, &dispositionattachment .join();%> a href%downloadUrl%> target_blank>Click to download video/a> %if(item.camera_type && item.camera_type mobile_camera){%> %self.t((mobile device))%> %}%> %}else if(item.is_video ! false){%> %_.each(cameras, function(camera){%> %var imgUrl https:// + window.location.host + /asset/after/image.jpeg? + id + camera_id, timestamp + item.start_timestamp, qlow, asset_classthumb .join(&);%> img src%imgUrl%> loadinglazy classsearch-camera data-id%camera.get(deviceID)%> data-ts%(utils._epoch_StrToDate(item.start_timestamp)*1000)%>/> % }); %> %}else{%> %for(var i 0; i cameras.length; i++){%> %- camerasi.get(deviceName) + (icameras.length - 1 ? : , )%> %} %> %}%> /td> td>%-item.recording_key%>/td> %if( curr_user.isTonyGroup() ){%> td>%-item.stock_number || -%>/td> %}%> %if(curr_user.isWyndham()){%> td>%-item.service_entity ||self.t(none)%>/td> %}%> td>%layout%>/td> %if(!curr_user.isTonyGroup()){%> %if(curr_user.isCRNotWyndham()){%> %if(curr_user.isDiamond()){%> td>%-item.customer_last_name ? item.customer_last_name : self.t(none)%>/td> td>%-item.manager_last_name ? item.manager_last_name : self.t(none)%>/td> %}else{%> td>%-item.agent_first_name ? item.agent_first_name + + item.agent_last_name : self.t(none)%>/td> td>%-item.customer_first_name ? item.customer_first_name + + item.customer_last_name : self.t(none)%>/td> td>%-item.second_customer_first_name ? item.second_customer_first_name + + item.second_customer_last_name : self.t(none)%>/td> td>%-item.manager_first_name ? item.manager_first_name + + item.manager_last_name : self.t(none)%>/td> %}%> %}%> %}%> td>%duration%>/td> td>%time%>/td> /tr> % }); %> /tbody> /table> % } %> /div> /div> % } %> /script> !-- TEMPLATE END :: SearchView --> script typetext/template idSearchWrapView-template> div classcontainer-fluid> article classrow-fluid> div classwidget> header classwidget-title>i classicon-search>/i> Search/header> div classwidget-content clearfix idsearch> /div> /div> /article> /div> /script> !-- TEMPLATE BEGIN :: PasswordManagement --> script typetext/ractive idPasswordManagement-template> form classform-horizontal modal-form-centered> div classcontrol-group> label classcontrol-label>{{translateText(Minimum length)}}:/label> div classcontrols> div classrow-fluid> div classspan5> input typenumber classspan11 min{{allowed_minimum_length}} max{{allowed_maximum_length}} value{{minimum_length}}/> {{#if minimum_length_not_default}} i on-clickrestore_default idminimum_length__restore_icon classeen-custom icon-undo gray title{{translateText(Restore default value)}}>/i> {{/if}} /div> /div> /div> /div> div classcontrol-group> label classcontrol-label>{{translateText(Numeric character required)}}:/label> div classcontrols> input typecheckbox checked{{required_numeric_char}}/> {{#if required_numeric_char_not_default}} i on-clickrestore_default idrequired_numeric_char__restore_icon classeen-custom een-custom-checkbox icon-undo gray checkbox-restore-icon title{{translateText(Restore default value)}}>/i> {{/if}} /div> /div> div classcontrol-group> label classcontrol-label>{{translateText(Special character required)}}:/label> div classcontrols> input typecheckbox checked{{required_special_char}}/> {{#if required_special_char_not_default}} i on-clickrestore_default idrequired_special_char__restore_icon classeen-custom een-custom-checkbox icon-undo gray checkbox-restore-icon title{{translateText(Restore default value)}}>/i> {{/if}} /div> /div> div classcontrol-group> label classcontrol-label>{{translateText(Username cannot be part of the password)}}:/label> div classcontrols> input typecheckbox checked{{exclude_username}}/> {{#if exclude_username_not_default}} i on-clickrestore_default idexclude_username__restore_icon classeen-custom een-custom-checkbox icon-undo gray checkbox-restore-icon title{{translateText(Restore default value)}}>/i> {{/if}} /div> /div> div classcontrol-group> label classcontrol-label>{{translateText(Password Expiration)}}:/label> div classcontrols> div classrow-fluid> div classspan5> select classspan11 value{{days_to_expire}}> {{#each days_to_expire_options}} option value{{value}}>{{label}}/option> {{/each}} /select> {{#if days_to_expire_not_default}} i on-clickrestore_default iddays_to_expire__restore_icon classeen-custom icon-undo gray title{{translateText(Restore default value)}}>/i> {{/if}} /div> /div> /div> /div> h5>{{translateText(Password Reuse Restrictions)}}/h5> div classcontrol-group> label classcontrol-label title{{translateText(When the user creates a new password, restrict reuse of the same password for the selected period of time)}}> {{translateText(Number of days)}}: /label> div classcontrols> div classrow-fluid> div classspan5> select classspan11 value{{reuse_time_limit}}> {{#each reuse_time_limit_options}} option value{{value}}>{{label}}/option> {{/each}} /select> {{#if reuse_time_limit_not_default}} i on-clickrestore_default idreuse_time_limit__restore_icon classeen-custom icon-undo gray title{{translateText(Restore default value)}}>/i> {{/if}} /div> /div> /div> /div> div classcontrol-group> label classcontrol-label title{{translateText(When the user creates a new password, restrict reuse of the same password for the selected number of the previous passwords)}}> {{translateText(Number of previous passwords)}}: /label> div classcontrols> div classrow-fluid> div classspan5> select classspan11 value{{reuse_number_limit}}> {{#each reuse_number_limit_options}} option value{{value}}>{{label}}/option> {{/each}} /select> {{#if reuse_number_limit_not_default}} i on-clickrestore_default idreuse_number_limit__restore_icon classeen-custom icon-undo gray title{{translateText(Restore default value)}}>/i> {{/if}} /div> /div> /div> /div> /form> /script> !-- TEMPLATE END :: PasswordManagement --> !-- TEMPLATE BEGIN :: SelectScene --> script typetext/ractive idSelectScene-template> div classcontrol-group> label classcontrol-label for>{{translateText(Scene:)}}/label> div classcontrols> select classform-input-auto-width value{{scene}} {{#if is_mca}}disabled{{/if}}> {{#if is_mca}} option valuebody_worn>{{translateText(Body Worn)}}/option> {{else}} option value disableddisabled selectedselected>{{translateText(Please select camera scene)}}/option> optgroup label{{translateText(Indoor)}}> option valueassembly_line>{{translateText(Assembly Line)}}/option> option valuebank_teller_window>{{translateText(Bank Teller Window)}}/option> option valuecash_register>{{translateText(Cash Register)}}/option> option valuecheckout_counter>{{translateText(Checkout Counter)}}/option> option valuecheckout_line>{{translateText(Checkout Line)}}/option> option valueclassroom>{{translateText(Classroom)}}/option> option valuedata_center>{{translateText(Data Center)}}/option> option valuedining_area>{{translateText(Dining Area)}}/option> option valueelevator>{{translateText(Elevator)}}/option> option valuefront_desk>{{translateText(Front Desk)}}/option> option valuegarage>{{translateText(Garage)}}/option> option valuegrocery_area>{{translateText(Grocery Area)}}/option> option valuegrocery_line>{{translateText(Grocery Line)}}/option> option valuegym>{{translateText(Gym)}}/option> option valuehallway>{{translateText(Hallway)}}/option> option valuekitchen>{{translateText(Kitchen)}}/option> option valuelobby>{{translateText(Lobby)}}/option> option valuelobby_with_door>{{translateText(Lobby With Door)}}/option> option valuemachinery>{{translateText(Machinery)}}/option> option valuemeeting_room>{{translateText(Meeting Room)}}/option> option valueoffice>{{translateText(Office)}}/option> option valueoffice_cubicles>{{translateText(Office Cubicles)}}/option> option valueoverhead_entrance>{{translateText(Overhead Entrance)}}/option> option valueparking_garage>{{translateText(Parking Garage)}}/option> option valueretail_display>{{translateText(Retail Display)}}/option> option valuestorage>{{translateText(Storage)}}/option> option valuestorage_supply_room>{{translateText(Storage/Supply Room)}}/option> option valuevault>{{translateText(Vault)}}/option> option valuewaiting_room>{{translateText(Waiting Room)}}/option> option valuewarehouse>{{translateText(Warehouse)}}/option> /optgroup> optgroup label{{translateText(Outdoor)}}> option valuebuilding_entrance>{{translateText(Building Entrance)}}/option> option valuedrive_through>{{translateText(Drive Through)}}/option> option valuedriveway>{{translateText(Driveway)}}/option> option valueemergency_exit>{{translateText(Emergency Exit)}}/option> option valuefence>{{translateText(Fence)}}/option> option valuefield>{{translateText(Field)}}/option> option valuefreeway>{{translateText(Freeway)}}/option> option valuegas_pump>{{translateText(Gas Pump)}}/option> option valueindustrial>{{translateText(Industrial)}}/option> option valueindustrial_yard>{{translateText(Industrial Yard)}}/option> option valueintersection>{{translateText(Intersection)}}/option> option valueoffice_front>{{translateText(Office Front)}}/option> option valuepark>{{translateText(Park)}}/option> option valuepark_playground>{{translateText(Park/Playground)}}/option> option valueparking_entrance>{{translateText(Parking Entrance)}}/option> option valueparking_lot>{{translateText(Parking Lot)}}/option> option valueroad>{{translateText(Road)}}/option> option valuesidewalk>{{translateText(Sidewalk)}}/option> option valuestorefront>{{translateText(Storefront)}}/option> option valueswimming_pool>{{translateText(Swimming Pool)}}/option> option valuetoll_booth>{{translateText(Toll Booth)}}/option> option valuetrain_track>{{translateText(Train Track)}}/option> option valuevehicle>{{translateText(Vehicle)}}/option> option valueyard>{{translateText(Yard)}}/option> /optgroup> {{/if}} /select> /div> /div> /script> !-- TEMPLATE END :: SelectScene --> !-- TEMPLATE BEGIN :: DefaultCloudRetention --> script typetext/ractive idDefaultCloudRetention-template> div classcontrol-group title{{translateText(Set default cloud retention for all new cameras added to your account.)}}> label classcontrol-label data-testidmodal-account-tab-defaults-input-label-default-cloud-retention > {{translateText(Default Cloud Retention)}}: /label> div classcontrols> select classform-input-auto-width value{{user_value}}> {{#each retention_options}} option value{{value}}>{{label}}/option> {{/each}} /select> /div> /div> /script> !-- TEMPLATE END :: DefaultCloudRetention --> !-- TEMPLATE BEGIN :: DefaultMinLocalRetention --> script typetext/ractive idDefaultMinLocalRetention-template> div classcontrol-group title{{translateText(Set default minimum on premise retention for all new cameras added to your account.)}}> label classcontrol-label data-testidmodal-account-tab-defaults-input-label-default-minimum-on-premise-retention > {{translateText(Default Minimum On Premise Retention)}}: /label> div classcontrols> select classform-input-auto-width value{{user_value}} on-changeselect, user_value> {{#each retention_options}} option value{{value}} {{#if ((value > max_value) && (max_value ! 0))}}disabled{{/if}}>{{label}}/option> {{/each}} /select> /div> /div> /script> !-- TEMPLATE END :: DefaultMinLocalRetention --> !-- TEMPLATE BEGIN :: DefaultMaxLocalRetention --> script typetext/ractive idDefaultMaxLocalRetention-template> div classcontrol-group title{{translateText(Set default maximum on premise retention for all new cameras added to your account.)}}> label classcontrol-label data-testidmodal-account-tab-defaults-input-label-default-maximum-on-premise-retention > {{translateText(Default Maximum On Premise Retention)}}: /label> div classcontrols> select classform-input-auto-width value{{user_value}} on-changeselect, user_value> {{#each retention_options}} option value{{value}} {{#if ((value min_value) && (min_value ! 0))}}disabled{{/if}}>{{label}}/option> {{/each}} /select> /div> /div> /script> !-- TEMPLATE END :: DefaultMaxLocalRetention --> !-- TEMPLATE BEGIN :: DefaultPreviewResolution --> script typetext/ractive idDefaultPreviewResolution-template> div classcontrol-group title{{translateText(Set default preview resolution for all new cameras added to your account.)}}> label classcontrol-label data-testidmodal-account-tab-defaults-input-label-default-preview-resolution > {{translateText(Default Preview Resolution)}}: /label> div classcontrols> select classform-input-auto-width value{{user_value}}> {{#each resolution_options}} option value{{this}}>{{this}}/option> {{/each}} /select> /div> /div> /script> !-- TEMPLATE END :: DefaultPreviewResolution --> !-- TEMPLATE BEGIN :: DefaultFullVideoResolution --> script typetext/ractive idDefaultFullVideoResolution-template> div classcontrol-group title{{translateText(Set default full video resolution for all new cameras added to your account.)}}> label classcontrol-label data-testidmodal-account-tab-defaults-input-label-default-full-video-resolution > {{translateText(Default Full Video Resolution)}}: /label> div classcontrols> select classform-input-auto-width value{{user_value}}> {{#each resolution_options}} option value{{value}}>{{label}}/option> {{/each}} /select> /div> /div> /script> !-- TEMPLATE END :: DefaultFullVideoResolution --> !-- TEMPLATE BEGIN :: DefaultCloudPreviewOnly --> script typetext/ractive idDefaultCloudPreviewOnly-template> div classcontrol-group title{{translateText(Default Cloud Preview Only (PR1))}}> label classcontrol-label data-testidmodal-account-tab-defaults-input-label-default-cloud-preview-only > {{translateText(Default Cloud Preview Only (PR1))}}: /label> div classcontrols> input typecheckbox iddefault-cloud-preview-only-checkbox checked{{user_value}}/> /div> /div> /script> !-- TEMPLATE END :: DefaultCloudPreviewOnly --> !-- TEMPLATE BEGIN :: DisableBillingChanges --> script typetext/ractive idDisableBillingChanges-template> div classcontrol-group title{{translateText(Disable billing changes for all new accounts.)}}> label classcontrol-label>{{translateText(Disable Billing Changes)}}:/label> div classcontrols> input typecheckbox iddisable-billing-changes-checkbox checked{{user_value}}/> /div> /div> /script> !-- TEMPLATE END :: DisableBillingChanges --> !-- TEMPLATE BEGIN :: TimeSelector --> script typetext/ractive idTimeSelector-template> div classinput-append bootstrap-timepicker span10> input typetext maxlength60 classspan10 access_time_custom_from as-timePickertime> span classadd-on>i classicon-time>/i>/span> /div> /script> !-- TEMPLATE END :: TimeSelector --> !-- TEMPLATE BEGIN :: GenericSelect --> script typetext/ractive idGenericSelect-template> select classspan12 value{{value}}> {{#if placeholder.is_visible}} option value disabled {{#if placeholder.is_seleted}}selected{{/if}}> {{ translateText(Select) }} /option> {{/if}} {{#each getOptions()}} option value{{value}}>{{name}}/option> {{/each}} /select> /script> !-- TEMPLATE END :: GenericSelect --> !-- TEMPLATE BEGIN :: DayTimeSelector --> script typetext/ractive idDayTimeSelector-template> div classrow day-time-row> div classspan4> DaySelect options{{DAYS}} value{{time_set.day}}/> /div> div classspan3> TimePicker time{{time_set.start_time}}/> /div> div classspan3> TimePicker time{{time_set.end_time}}/> /div> {{#if time_set.idx ! 0}} div classspan2> button classbtn btn-small btn-info typebutton on-clickremove> {{translateText(Remove)}} /button> /div> {{/if}} /div> /script> !-- TEMPLATE END :: DayTimeSelector --> !-- TEMPLATE BEGIN :: MultipleDayTimeSelector --> script typetext/ractive idMultipleDayTimeSelector-template> div classday-time-selector> div classrow day-time-row> button classbtn btn-small btn-info typebutton on-clickaddPeriod> {{translateText(Add Period)}} /button> /div> {{#each parsed_periods}} DayTimeSelector time_set{{.}}/> {{/each}} /div> /script> !-- TEMPLATE END :: MultipleDayTimeSelector --> !-- TEMPLATE BEGIN :: SharedCamerasComponent --> script typetext/ractive idSharedCamerasComponent-template> div classwidget> header classwidget-title> i classicon-facetime-video>/i> {{translateText(Cameras Shared With Me)}} /header> div classwidget-content> table classtable table-striped dashboard-widget-table> thead> tr> th scopecol classcol-status >{{translateText(Status)}}/th> th scopecol classcol-name>{{translateText(Name)}}/th> th scopecol>{{translateText(Tags)}}/th> th scopecol classcol-location> span on-click@this.set(show_location, false) classdevice-location-col {{#if !show_location}}device-location-col-selected{{/if}}> {{translateText(Location)}} /span> / span on-click@this.set(show_location, true) classdevice-location-col {{#if show_location}}device-location-col-selected{{/if}}> {{translateText(Address)}} /span> /th> th scopecol classcol-actions>{{translateText(Actions)}}/th> /tr> /thead> tbody> {{#owners:owner}} tr> td colspan6> i classicon-user header-row-icon>/i> strong>{{owner}}/strong> ({{translateFormatText({{cam_count}} cameras, this.length, {cam_count: this.length})}}) /td> /tr> {{#each this as camera}} {{#if camera.filter_display}} tr> td classcol-status> i class{{status_class}}>/i> /td> td>{{deviceName}}{{#if camera.deviceType camera && camera.deviceExtra && camera.deviceExtra.associated_speaker}}i classicon-volume icon-volume-device device-speaker-icon>/i>{{/if}}/td> td> {{#each getCameraCustomTags(camera) as tag}} span classtag>a href#/layout_tag/{{tag}}>{{tag}}/a>/span> {{/each}} /td> td> {{#if ../../../show_location}} {{ deviceLocation4 }} {{! Location address}} {{else}} {{ deviceLocation6 }} {{! Location name}} {{/if}} /td> td> {{#with getCameraPermissions(camera) as permissions}} {{#if permissions.view_recorded_video && !camera.isLiveViewOnly()}} button classbtn on-click@this.openHistory(camera) title{{translateText(view camera history)}}>i classicon-time>/i>/button> {{/if}} button classbtn on-click@this.openCameraSettings(camera) title{{translateText(change camera settings)}}>i classicon-cog>/i>/button> {{#if permissions.view_analytics}} button classbtn on-click@this.openAnalyticsGraphs(camera) title{{translateText(open analytics graphs)}}>i classicon-bar-chart>/i>/button> {{/if}} {{#if permissions.can_delete}} button classbtn on-click@this.deleteCamera(camera) title{{translateText(remove camera from account)}}>i classicon-trash>/i>/button> {{/if}} {{/with}} /td> /tr> {{/if}} {{/each}} {{/owners}} /tbody> /table> /div> /div> /script> !-- TEMPLATE END :: SharedCamerasComponent --> !-- TEMPLATE BEGIN :: SideBarView --> script typetext/template idSideBarView-template> ul> li idsidebar-search % if(!(me.account && me.isContractRecording())) { %> styledisplay:none; % } %> > a href#/search>i classicon icon-search>/i> % this.t(Search) %> /a>em classindicator>/em>/li> % if(!me.isContractViewer()){ %> % if(me.getAccount().isLargeAccount()){ %> li classsubmenu idsidebar-dashboard> a href#/dash> i classicon icon-dashboard>/i> span data-testidsidebar-large-account-label-dashboard>% this.t(Dashboard) %>/span> % if(camera_count ! null){ %> span classlabel pull-right>% camera_count 0 ? : camera_count %>/span> %}%> /a> em classindicator>/em> ul> li idsidebar-manage-devices> a href#/manage/devices> i classicon icon-facetime-video>/i> span data-testidsidebar-large-account-label-bridges-cameras>% this.t(Bridges) + / + this.t(Cameras) %>/span> /a> /li> li idsidebar-manage-add-cameras> a href#/manage/add_camera> i classicon icon-plus-sign>/i> span data-testidsidebar-large-account-label-add-cameras>% this.t(Add Devices) %>/span> /a> /li> % if (!userList.getCurrentUser().get(is_master) && cameraList.filterShared(true).length > 0) { %> li idsidebar-manage-shared> a href#/manage/shared> i classicon icon-group>/i> span data-testidsidebar-large-account-label-shared-cameras>% this.t(Shared Cameras) %>/span> /a> /li> %}%> li idsidebar-manage-switches> a href#/manage/switches> i classicon icon-sitemap>/i> span data-testidsidebar-large-account-label-managed-switches>% this.t(Managed Switches) %>/span> /a> /li> /ul> /li> %} else if (!(me.checkFeatureFlag(distributor_dashboard) && me.get(is_distributor))) {%> li idsidebar-dashboard> a href#/dash> i classicon icon-dashboard>/i> span data-testidsidebar-label-dashboard>% this.t(Dashboard) %>/span> % if(camera_count ! null){ %> span classlabel pull-right>% camera_count 0 ? : camera_count %>/span> %}%> /a> em classindicator>/em> /li> %}%> %}%> % if(me.checkFeatureFlag(distributor_dashboard) && me.get(is_distributor) && me.checkViewDistributor()) { %> li idsidebar-resellers> a href#/resellers> i classfas fa-money-check>/i> span data-testidsidebar-label-resellers>% this.t(Resellers) %>/span> span classlabel pull-right>% reseller_counter %>/span> /a> em classindicator>/em> /li> %}%> % if(!me.get(is_master)) { %> li idsidebar-location classhidden> a href#/location> i classicon icon-map-marker>/i> span data-testidsidebar-label-locations>% this.t(Locations) %>/span> /a> em classindicator>/em> /li> %}%> % if(!me.get(is_master) && me.checkFeatureFlag(floorPlan) && me.checkFeatureFlag(location_groups)) { %> li idsidebar-floorPlans> a href#/floor_plans> i classicon-floor-plan>img src/_images/floor-plan.svg />/i> span data-testidsidebar-label-floor-plans>% this.t(Floor Plans) %>/span> /a> em classindicator>/em> /li> %}%> % if(!me.get(is_master)) { %> li classsubmenu idsidebar-layouts> a> i classicon icon-th-large>/i> span data-testidsidebar-label-layouts>% this.t(Layouts) %>/span> span classlabel pull-right>/span> em classindicator>/em>/a> ul idlayouts> /ul> /li> % if(!me.isContractViewer() && cameraList.filterATTD(true).length > 0){%> li classsubmenu idsidebar-cameras> a> i classicon icon-facetime-video>/i> span data-testidsidebar-label-tags>% this.t(Tags) %>/span> span classlabel pull-right> % tag_count %> /span> em classindicator>/em> /a> ul idtags-menu> /ul> /li> %}%> % if(cameraList.filterATTD(true).length > 0) { %> li styledisplay:%cameraList.responderAccounts && Object.keys(cameraList.responderAccounts).length > 0 ? block :none%>; classsubmenu idsidebar-responder> a> i classicon icon-bolt>/i> span data-testidsidebar-label-first-responder>% this.t(First Responder) %>/span> span classlabel pull-right>% responder_count %>/span> em classindicator>/em> /a> ul idresponder> /ul> /li> %}%> % } %> % if(!me.get(is_master) && !me.isContractViewer() && cameraList.filterATTD(true).length > 0) { %> li idsidebar-camera_map> a href#/camera_map> i classicon icon-globe>/i> span data-testidsidebar-label-map>% this.t(Map) %>/span> /a> em classindicator>/em> /li> % } %> % if(me.checkUserEditUsers() && !me.isContractViewer()) { %> li classsubmenu idsidebar-users> a> i classicon icon-group>/i> span data-testidsidebar-label-users>% this.t(Users) %>/span> span classlabel pull-right>% user_count %>/span> /a> em classindicator>/em> ul> li idsidebar-manage> a href#/users/permissions classusers-label sidebar-submenu> i classicon icon-sitemap>/i> span data-testidsidebar-label-users-manage>% this.t(Manage) %>/span> /a> /li> % if((userList.getCurrentUser().isOwnedByMasterAccount() || (me.checkFeatureFlag(distributor_dashboard) && me.get(is_distributor)) || userList.getCurrentUser().checkFeatureFlag(audit_log)) && me.get(is_view_audit_trail)) { %> li idsidebar-auditlog> a href#/auditlog classusers-label sidebar-submenu> i classicon icon-book>/i> span data-testidsidebar-label-users-audit-log>% this.t(Audit Log) %>/span> span classlabel pull-right>/span> /a> /li> %}%> % if(me.checkFeatureFlag(audit_notifications) && me.checkAuditNotifications()){ %> li idsidebar-audit_notifications> a href#/audit_notifications classusers-label sidebar-submenu> i classicon icon-bell>/i> span data-testidsidebar-label-users-notifications>% this.t(Notifications) %>/span> span classlabel pull-right>/span> /a> /li> %}%> /ul> /li> % } %> % if(me.get(is_master) && !(me.get(is_distributor) && me.checkFeatureFlag(distributor_dashboard)) && me.checkFeatureFlag(command_line_interface)){ %> li idsidebar-cli> a href#/cli> i classicon-terminal fa-terminal>/i> span data-testidsidebar-label-cli>% this.t(CLI) %>/span> span classlabel pull-right>/span> /a> /li> %}%> %if(!me.isContractViewer()){%> li idsidebar-api style%(is_api_keys_visible?:display:none)%>> a href#/apikeys> i classicon icon-wrench>/i> span data-testidsidebar-label-api-keys>% this.t(API Keys) %>/span> /a> em classindicator>/em> /li> %}%> % if(!(me.get(is_master) && !me.checkFeatureFlag(drive_fs_local_upload)) && me.checkFeatureFlag(drive_fs) && me.checkViewArchive()) { %> li idsidebar-archive> a href#/archive> i classicon icon-folder-open>/i> span data-testidsidebar-label-archive>% this.t(Archive) %>/span> span classlabel pull-right>/span> /a> em classindicator>/em> /li> %}%> % if(!me.get(is_master) && me.checkExportVideo() && cameraList.filterATTD(true).length > 0) { %> li idsidebar-notifications style> a href#/notifications> i classicon icon-flag>/i> span data-testidsidebar-label-downloads>% this.t(Downloads) %>/span> /a> em classindicator>/em> /li> %}%> % if (plugins.length > 0) {%> % if(plugins.length > 1) { %> li classsubmenu idsidebar-plugins> a> i classicon icon-play>/i> span data-testidsidebar-label-plugins>% this.t(Plugins) %>/span> span classlabel pull-right>% plugins.length %>/span> /a> em classindicator>/em> ul> %}%> % _.each(plugins, function(item) { %> % if(!me.get(is_master) && me.checkFeatureFlag(plugins) && me.checkViewPlugins()) { %> li idsidebar-plugin-%item.id %> classsidebar-plugin> a href#/plugins/%item.id %>> span data-testidsidebar-label-plugins-%item.id %>>%item.get(name)%>/span> % if (!item.get(open_as_iframe)) { %> i classicon icon-external-link>/i> %}%> span classlabel pull-right>/span> /a> em classindicator>/em> /li> %}%> % });%> % if(plugins.length > 1) { %>/ul>%}%> %}%> li idsidebar-install style%(me.get(owner_account_id) ! me.get(active_account_id)?:display:none)%>> a href#/install> i classicon icon-wrench>/i> span data-testidsidebar-label-installer-tools>% this.t(Installer Tools) %>/span> /a> em classindicator>/em> /li> % if(me.checkFeatureFlag(video_search_ga) && !me.get(is_master)){%> li idsidebar-videosearch> a href#/videosearch> i classicon icon-search>/i> span data-testidsidebar-label-video-search>% this.t(Video Search) %>/span> /a> /li> %}%> % if (me.isVSPEnabled()) { %> li idsidebar-lpr classsubmenu> a href#/vmslpr> i classfa fa-car aria-hiddentrue>/i> % this.t() %> span data-testidsidebar-label-vsp>% this.t(VSP) %>/span> /a> em classindicator>/em> ul> li> a href#/lpr/summary classlpr-label> span data-testidsidebar-label-vsp-summary>% this.t(Summary) %>/span> span classlabel pull-right>/span> /a> /li> li> a href#/lpr/search classlpr-label> span data-testidsidebar-label-vsp-search>% this.t(Search) %>/span> span classlabel pull-right>/span> /a> /li> li> a href#/lpr/alert classlpr-label> span data-testidsidebar-label-vsp-alert>% this.t(Alert) %>/span> span classlabel pull-right>/span> /a> /li> li> a href#/lpr/rule classlpr-label> span data-testidsidebar-label-vsp-rule>% this.t(Rule) %>/span> span classlabel pull-right>/span> /a> /li> /ul> /li> %}%> % if(me.isReportsTabVisible()) { %> li idsidebar-reports_gui> a href#/reports> i classicon-reports> img src/_images/icon-reports.svg /> /i> span data-testidsidebar-label-reports>% this.t(Reports) %>/span> span classlabel pull-right>/span> /a> em classindicator>/em> /li> %}%> % if(!branding.isWhitelabel()){ %> li idsidebar-helpCenter> a href#/help_center> i classicon-question-circle>/i> span data-testidsidebar-label-cli>% this.t(Help Center) %>/span> span classlabel pull-right>/span> /a> /li> %}%> /ul> /script> !-- TEMPLATE END :: SideBarView --> !-- TEMPLATE BEGIN :: Slider --> script typetext/ractive idSlider-template> div classslider-widget slider-widget-{{roiid}} {{class}}>/div> /script> !-- TEMPLATE END :: Slider --> !-- TEMPLATE BEGIN :: SmartAlertSlider --> script typetext/ractive idSmartAlertSlider-template> div classslider-widget slider-widget--simple slider-widget-{{id}} {{class}}>/div> /script> !-- TEMPLATE END :: SmartAlertSlider --> !-- TEMPLATE BEGIN :: SubAccountSummaryComponent --> script typetext/ractive idSubAccountSummaryComponent-template> div classwidget> header classwidget-title> i classicon-bar-chart>/i> span>{{translateText(Dashboard Summary)}}/span> i data-togglecollapse data-target#sub-account-widget-collapse classwidget-collapse icon-chevron-down pull-right>/i> /header> div idsub-account-widget-collapse classcollapse widget-content clearfix sub-account-summary-container> {{#if bridge_count > 0}} div classsub-account-chart-item> div classsub-account-chart> div idsub-account-bridge-summary>{{! highcharts element}}/div> /div> div classsub-account-chart-label>{{bridge_summary_label}}/div> /div> {{#if show_bridge_health_chart}} div classsub-account-chart-item> div classsub-account-chart> div idsub-account-bridge-health>{{! highcharts element}}/div> /div> div classsub-account-chart-label>{{bridge_health_label}}/div> /div> {{/if}} {{/if}} {{#if camera_count > 0}} div classsub-account-chart-item> div classsub-account-chart> div idsub-account-camera-summary>{{! highcharts element}}/div> /div> div classsub-account-chart-label title{{camera_summary_label_title}}>{{camera_summary_label}}/div> /div> {{/if}} {{#if shared_camera_count > 0}} div classsub-account-chart-item> div classsub-account-chart> div idsub-account-camera-shared-summary>{{! highcharts element}}/div> /div> div classsub-account-chart-label>{{shared_camera_summary_label}}/div> /div> {{/if}} /div> /div> /script> !-- TEMPLATE END :: SubAccountSummaryComponent --> !-- TEMPLATE BEGIN :: Slider --> script typetext/ractive idSuperSearch-template> {{#if show}} div classrow-fluid search-widget> {{#if showSaveBtn(curr_search, searches)}} div classpull-right btn-group span2> a classbtn pull-right title{{translateText(Save filter)}} on-clickopenSaveOptions>i classicon-plus-sign add-icon orange>/i>/a> /div> {{else}} {{#if searches.length > 0}} div classpull-right btn-group span2> a classdropdown-toggle btn pull-right data-toggledropdown title{{translateText(Saved Filters)}}> i classicon-bookmark>/i> /a> ul classdropdown-menu searches-menu rolemenu aria-labelledbydLabel> {{#each searches:index}} li> a data-filter{{this.1}} classsearch-name pull-left title{{this.0}} on-clicksetFilterFromBookmark> {{this.0}} /a> i classicon-remove icon-remove-filter pull-right data-index{{index}} on-clickdeleteFilter title{{translateText(Delete filter)}}>/i> /li> {{/each}} /ul> /div> {{/if}} {{/if}} {{#if !curr_search && !searches.length}} div classpull-right btn-group span2> div on-clickshowPopover classbtn pull-right title{{translateText(Help)}} data-linksearch> i classicon-question-sign add-icon orange>/i> /div> /div> {{/if}} input classspan9 typetext namesearch placeholder style{{curr_search ? : font-family: FontAwesome;}} value{{curr_search}} autocompleteoff/> {{#if curr_search}} i classicon-remove remove-search on-clickclearSearch title{{translateText(Clear filter)}}>/i> {{/if}} /div> {{/if}} /script> !-- TEMPLATE END :: Slider --> !-- TEMPLATE BEGIN :: SuperSearchSaveOptions --> script idtemplate-SuperSearchSaveOptions typetext/ractive> div classmodal-header> button typebutton classclose data-dismissmodal>×/button> h3>{{translateText(Save Filter)}}/h3> /div> div classmodal-body> div classform-horizontal> div classcontrol-group> label classcontrol-label>{{translateText(Name)}}:/label> div classcontrols> input typetext placeholder{{translateText(Name)}} value{{save_name}}> /div> /div> /div> /div> div classmodal-footer> p classred>{{error_message}}/p> button typebutton classbtn btn-warning data-dismissmodal> {{translateText(Cancel)}} /button> button typebutton classbtn btn-success on-click@this.saveAsSearch() {{#if !ui.allow_save}}disabled{{/if}}> {{translateText(Save Filter)}} /button> {{#if currentUser().checkLayoutCreate() && !currentUser().isContractViewer()}} button typebutton classbtn btn-success on-click@this.saveAsLayout() {{#if !(ui.allow_save && ui.allow_layout)}}disabled{{/if}}> {{translateText(Save Layout)}} /button> {{/if}} /div> /script> !-- TEMPLATE END :: SuperSearchSaveOptions --> !-- TEMPLATE BEGIN :: SwitchViewComponent --> script typetext/ractive idSwitchViewComponent-template> {{#if switch_list.length > 0}} div classwidget> header classwidget-title> i classicon-sitemap>/i> {{ translateText(Managed Switches) }} /header> div classwidget-content clearfix > table classtable table-striped> thead> tr> th stylewidth:7%>{{translateText(Status)}}/th> th stylewidth:20%>{{translateText(Name)}}/th> th stylewidth:7%> !-- {{translateText(Model)}}--> /th> th stylewidth:25%>{{translateText(IP Address)}}/th> th stylewidth:21%>{{translateText(Bridge)}}/th> th stylewidth:20%>{{translateText(Actions)}}/th> /tr> /thead> tbody classswitch-list-rows> {{#each switch_list as managed_switch}} {{#unless managed_switch.state LOST}} tr> td> {{> switch_statesmanaged_switch.state}} {{#partial status_online}} i classicon-ok-circle green big-icon title{{translateText(Ready to get commands)}}>/i> {{/partial}} {{#partial status_offline}} i classicon-exclamation-sign red big-icon title{{translateText(Offline)}}>/i> {{/partial}} {{#partial status_available}} i classicon-lock red big-icon title{{translateText(Available to be attached)}}>/i> {{/partial}} /td> td> {{managed_switch.name}} /td> td> !-- {{managed_switch.model}}--> /td> td> {{managed_switch.ip}} /td> td> {{getSwitchBridgeNames(managed_switch)}} /td> td> {{#if managed_switch.state AUTH}} button classgreen on-click@this.attachSwitch(managed_switch) title{{translateText(add to bridge)}} {{#if disabled}}disabled{{/if}}> i classicon-plus>/i> /button> {{else}} button classinfo on-click@this.openSwitchSettings(managed_switch) title{{translateText(change switch settings)}}> i classicon-cog>/i> /button> {{/if}} /td> /tr> {{/unless}} {{/each}} /tbody> /table> /div> /div> {{/if}} /script> !-- TEMPLATE END :: SwitchViewComponent --> script typetext/ractive idTabPane-template> div classtab-pane {{#if active_idid}}active{{/if}} id{{id}}> div classrow-fluid>{{yield}}/div> /div> /script> !-- TEMPLATE BEGIN :: TagListView --> script typetext/template idTagListView-template> % _.each(tagList, function(item) { %> % if(item.indexOf(-bridge) -1 || curr_user.checkShowBridgeTag(item)){ %> li> a href#/layout_tag/% encodeURIComponent(item) %> classtag-label title% item %>> %- view.renderTag(item) %> /a> /li> % } %> % }); %> /script> !-- TEMPLATE END :: TagListView --> !-- TEMPLATE BEGIN :: TamperingEditor --> script typetext/ractive idTamperingEditor-template> {{#region}} div classrow-fluid> div classspan6> div classspan2> {{translateText(Sensitivity)}}: /div> div classeen-slider-container span8 tampering_slider> div idcsAnalytics___tamperingSensitivity classeen-slider>/div> /div> div classspan2> i class{{#if tampering_sensitivity!default_sensitivity}}icon-undo{{/if}} gray on-clickresetSensitivity title{{translateText(Restore to default)}}>/i> /div> /div> {{#if allow_alerts && !model.get(deviceShare)}} button typebutton classedit-alerts data-id{{id}} on-clickeditAlert> i classicon-bell-alt {{isAlertSet(this) ? green : }}>/i> /button> {{/if}} /div> div classrow-fluid> table classtable table-condensed table-bordered table-striped analytics-table idcsAnalytics-line-table> tbody idcsAnalytics_line_TableBody> {{#if isEditAlertActive(this.id)}} AnalyticAlertEditor colspan5 payload{{alert_payload}} roiid{{id}} who{{this.who}} when{{this.when ? this.when : *}} throttle_type{{this.throttle_type ? this.throttle_type : 2}} account_alert_modes{{accountAlertModes()}} throttle_seconds{{this.throttle_seconds ? this.throttle_seconds : 15 * 60}} throttle_hour_limit{{this.throttle_hour_limit ? this.throttle_hour_limit : 5}} users{{getUserList()}} mode{{this.mode ? this.mode : all}} level{{this.level ? this.level : 1}}> /AnalyticAlertEditor> {{/if}} /tbody> /table> /div> {{/region}} p classred>{{error_text}}/p> /script> !-- TEMPLATE END :: TamperingEditor --> !-- TEMPLATE BEGIN :: Slider --> script typetext/ractive idTimeSlider-template> div classspan12 time-slider-container> div classtime-slider-widget>/div> /div> /script> !-- TEMPLATE END :: Slider --> !-- TEMPLATE BEGIN :: TunnelModal --> script typetext/template idTunnelModal-template> div classmodal-header> button classclose on-clickcloseModal>×/button> h3> {{title}} /h3> /div> div classmodal-body> div classrow-fluid> div classspan12> div classspan12> p classinfo-loading> {{#if !tunnel_loaded && !tunnel_closing}} {{translateText(Please wait while we open a connection with this camera)}} {{elseif tunnel_closing}} {{translateText(Please wait while we close a connection with this camera)}} {{else}} {{translateText(We have created a tunnel that will open in a new window.)}} {{translateText(If this does not appear, please check if your browser is blocking popups,)}} {{translateText(or)}}a href# on-clickopenTunnel> {{translateText(click here to open)}}/a> {{/if}} /p> /div> /div> /div> /div> div classmodal-footer> p classred>{{error_msg}}/p> button classbtn btn-warning on-clickcloseModal>Cancel/button> button classbtn btn-success on-clickcloseModal>Close/button> /div> /script> !-- TEMPLATE END :: TunnelModal --> !-- TEMPLATE BEGIN :: twoFactorUpdate --> script idtemplate-twoFactorUpdate typetext/ractive> {{#if this.password_entered}} div classmodal-header> h3>{{translateText(Verify your Security Code)}}/h3> /div> div classmodal-body> p>{{code_message}}/p> input classspan1 maxlength4 typetext value{{code}}/> /div> div classmodal-footer> p classred>{{error_message}}/p> button classbtn btn-warning on-clickcancelUpdate>{{translateText(Cancel)}}/button> button classbtn btn-success on-clicktwoFactorCodeSubmit>{{translateText(Verify Code)}}/button> /div> {{else}} div classmodal-header> h3>{{updateText()}}/h3> /div> div classmodal-body> form> div styleposition: fixed;width: 1px;left: -100vw;> input typetext tabindex-1 idbogus_username stylewidth:1%/> input typepassword tabindex-1 idbogus_password stylewidth:1%/> /div> input typetext classinput-password autocompleteoff value{{user_password}}/> p classred>{{methodMessage()}}/p> /form> /div> div classmodal-footer> p classred>{{error_message}}/p> button classbtn btn-warning on-clickcancelUpdate>{{translateText(Cancel)}}/button> button classbtn btn-success on-clicksubmitUpdate>{{translateText(Send Security Code)}}/button> /div> {{/if}} /script> !-- TEMPLATE END :: twoFactorUpdate --> !-- TEMPLATE BEGIN :: UserListItemView --> script typetext/template idUserListItemView-template> tr> td>%- this.model.get(first_name) %> %- this.model.get(last_name) %>/td> td>%- this.model.getEmailForDisplay() %>/td> %if(!(userList.getCurrentUser().checkFeatureFlag(distributor_dashboard) && userList.getCurrentUser().get(is_distributor))){%> td> % if(this.model.get(admin)) { print(i classicon-ok>/i>) } else { print( ) } %> /td> %}%> td>% this.t(this.model.get(display_status)) %>/td> td>% deviceList.getDisplayTime(this.model.get(last_login), false, true)%>/td> td> % if (userList.getCurrentUser().get(id) ! this.model.get(id)) { %> %if(userList.getCurrentUser().checkEditDeleteUser(this.model)){%> button classinfo iduser_info_% this.model.get(id) %> title% this.t(change user settings) %>>i classicon-cog>/i>/button> %}%> button class%(this.model.isPending() ? reconfirm: reset)%> iduser_reset_% this.model.get(id) %> title%(this.model.isPending() ? this.t(re-send confirmation email) : this.t(send password reset email))%>>i classicon-envelope>/i>/button> %if(userList.getCurrentUser().checkEditDeleteUser(this.model)){%> button classignore iduser_ignore_% this.model.get(id) %> title% this.t(remove user from account) %>>i classicon-trash>/i>/button> %}%> % if ((userList.getCurrentUser().isOwnedByMasterAccount() || userList.getCurrentUser().checkFeatureFlag(audit_log)) || (userList.getCurrentUser().checkFeatureFlag(distributor_dashboard) && userList.getCurrentUser().get(is_distributor)) && userList.getCurrentUser().get(is_view_audit_trail)) { %> button typebutton classaudit-user iduser_audit_% this.model.get(id) %> title% this.t(audit user) %>>i classicon-book>/i>/button> % } %> %} else if (userList.getCurrentUser().checkFeatureFlag(audit_log) || (userList.getCurrentUser().checkFeatureFlag(distributor_dashboard) && userList.getCurrentUser().get(is_distributor))){%> button typebutton classaudit-user iduser_audit_% this.model.get(id) %> title% this.t(audit user) %>>i classicon-book>/i>/button> % } %> /td> /tr> /script> !-- TEMPLATE END :: UserListItemView --> !-- TEMPLATE BEGIN :: UserListView --> script typetext/template idUserListView-template> article classrow-fluid> div classwidget> header classwidget-title>i classicon-sitemap>/i> span>% this.t(Users) %>/span> i idlaunchAddUserModalSmall title% this.t(Add User) %> classicon-plus-sign add-icon pull-right launchAddUserModal>/i> /header> div classwidget-content clearfix idusers-list-table> table classtable table-striped> thead> tr> th>% this.t(Name) %>/th> th>% this.t(E-mail Address) %>/th> %if(!(userList.getCurrentUser().checkFeatureFlag(distributor_dashboard) && userList.getCurrentUser().get(is_distributor))){%> th>% this.t(Administrator) %>/th> %}%> th>% this.t(Status) %>/th> th>% this.t(Last Login) %>/th> th>% this.t(Actions) %>/th> /tr> /thead> tbody idusers-list-rows> /tbody> /table> %if(userList.getCurrentUser().isDemoUser()){%> a classbtn btn-info pull-right iddummyCSVButton stylemargin-left: 10px;href#>i stylemargin-right:5px; classicon-download>/i>% this.t(Download User List) %>/a> %}else if (userList.getCurrentUser().checkExportUsers()) {%> %var currTime new Date(Date.now()); var userTime deviceList.getDisplayTime(currTime, false);%> a classbtn btn-info pull-right stylemargin-left: 10px;href%/g/list/user/export?account_id+userList.getCurrentUser().get(active_account_id)%> download%utils.t(User_List_for_) + _.escape(userList.getCurrentUser().account.get(name)) + ( + userTime + ) + .csv%>>i stylemargin-right:5px; classicon-download>/i>% this.t(Download User List) %>/a> %}%> button idlaunchAddUserModal href# classbtn btn-success pull-right launchAddUserModal>i classicon-plus-sign>/i> % this.t(Add User) %>/button> /div> /div> /article> /script> !-- TEMPLATE END :: UserListView --> script typetext/template idUsersPermissionsView-template> div classcontainer-fluid idtranslate-users>/div> /script> !-- TEMPLATE BEGIN :: warningDialogue --> script idtemplate-warningDialogue typetext/ractive> div classmodal-header> h3>{{header_text}}/h3> /div> div classmodal-body> p>{{{body_text}}}/p> {{! unescaped to allow rendering of HTML passed in}} /div> div classmodal-footer> button typebutton classbtn {{#if !cancel_button_class}} btn-warning {{else}} {{cancel_button_class}} {{/if}} on-clickcancel> {{#if !cancel_label}} {{translateText(Cancel)}} {{else}} {{cancel_label}} {{/if}} /button> button typebutton classbtn {{#if !accept_button_class}} btn-danger {{else}} {{accept_button_class}} {{/if}} on-clickproceed> {{#if !accept_label}} {{translateText(Accept)}} {{else}} {{accept_label}} {{/if}} /button> {{#if custom_button}} button typebutton classbtn {{custom_button.class}} on-clickcustom_button_action> {{custom_button.text}} /button> {{/if}} /div> /script> !-- TEMPLATE END :: warningDialogue --> !-- TEMPLATE BEGIN :: InitialLoadingTable --> script typetext/ractive idInitialLoadingTable-template> table classtable table-striped> thead> tr> {{#each initialLoadingTableInfo as row}} th width{{row.width}}>{{row.name}}/th> {{/each}} /tr> /thead> tbody> {{#each rowLengthArray}} tr> {{#each initialLoadingTableInfo}} td>div classdashboard__skeleton-box>/div>/td> {{/each}} /tr> {{/each}} /tbody> /table> /script> script typetext/ractive idEEN-PTZ-DropDown-template> div class{{device_id}}-layout-ptz-dropdown lp-dropdown {{#dropdown_show}}open{{/}} {{^show}}hidden{{/}} styleopacity: {{opacity}} title{{translateText(Toggle Viewport)}} on-mouseenter@this.set(opacity, 1) on-mouseleave@this.set(opacity, .6) on-clickdropdown> ul classdropdown-menu dropdown_{{device_id}} {{^dropdown_show}}hidden{{/}} rolemenu aria-lablledbydropdownMenu> li classptz-title>{{translateText(Viewports)}}/li> li classdivider>/li> li classptz-save {{^save_enabled}}disabled{{/}} {{^save_show}}hidden{{/}}> a href# on-clicksave-viewport>{{translateText(Save)}}/a> /li> li classdivider {{^save_show}}hidden{{/}}>/li> {{#each stations: index}} {{#id}} li classptz-drop>a href# on-clickgoto data-station{{index}}>{{name}}/a>/li> {{else}} {{#name}} li classptz-drop divider>/li> li classptz-title>{{name}}/li> {{/}} li classptz-drop divider>/li> {{/}} {{/each}} /ul> a href# data-toggledropdown classdropdown-toggle ptz-drop-toggle> i classicon-chevron-down big-icon icon-chevron-pane>/i> /a> /div> /script> script typetext/ractive idEEN-PTZ-PTZ-template> div classptz-controls-wrapper {{^control_show}}hidden{{/}} styletop: {{control_position.top}}; left: {{control_position.left}}; bottom: {{control_position.bottom}}; right: {{control_position.right}};> div classeen-prev-ptz {{device_id}}-layout-ptz-buttons {{^control_pt_show}}hidden{{/}} stylecolor: {{#active}}lightgreen{{else}}white{{/}}; opacity: {{opacity}} on-mouseover@this.set(opacity, 1) on-mouseout@this.set(opacity, .6) on-clicktoggle> i classicon-virtual-ptz {{#active}}active{{/}} big-icon>/i> /div> PTZDropDown stations{{stations}} composite_type{{composite_type}} device_id{{device_id}} show{{control_chevron_show}} ptz_enabled{{ptz_enabled}} save_show{{control_save_show}} save_enabled{{save_enabled}} /> /div> /script> !-- TEMPLATE BEGIN :: AnalyticsCameraCompatibility --> script typetext/ractive idAnalyticsCameraCompatibility-template> {{#message}} span idcsAnalytics-compatible-msg class{{ class }}>{{#if icon}}{{{ icon }}} {{/if}}{{ text }}/span> {{/message}} {{#if support_section}} div idcsAnalytics-compatible-btn-wrapper classbtn-group> button idcsAnalytics-compatible-btn-submit classbtn btn-success on-click@this.fire(request_support)> {{ translateText(Request Analytics Optimization) }} /button> /div> {{/if}} /script> !-- TEMPLATE END :: AnalyticsCameraCompatibility --> !-- TEMPLATE BEGIN :: AnalyticsCounter --> script typetext/ractive idAnalyticsCounter-template> div classana-count styleposition:{{position}}; display:block; line-height: 1.2; padding: 1px; font-size: 20px; color: yellowgreen; text-shadow:-1px -1px 0 #000, 1px -1px 0 #000,-1px 1px 0 #000,1px 1px 0 #000; top: {{top}}px;left:{{left}}px; margin-right: {{margin-right}};> {{#if loading}} {{translateText(loading)}}... {{else}} {{#if counts && delta ! undefined}} div classana-delta> span classdelta-text>{{delta}}/span> i classicon-delta>/i> /div> {{/if}} {{#if counts}} {{#if line_settings.in_dir}} div classana-count> {{{getArrowFromDir(line_settings.in_dir)}}} {{counts.num_in}} {{{getArrowFromDir(line_settings.out_dir)}}} {{counts.num_out}} /div> {{/if}} {{/if}} {{#if show_crossing}} div classana-flash ana-count> i classicon-crossing {{checkActive(crossing)}}>/i> /div> {{/if}} {{#if show_intrusion}} div classana-flash ana-count> i classicon-intrusion {{checkActive(intrusion)}}>/i> /div> {{/if}} {{#if show_loitering}} div classana-flash ana-count> i classicon-loitering {{checkActive(loitering)}}>/i> /div> {{/if}} {{#if show_tampering}} div classana-flash> i classicon-tampering {{checkActive(tampering)}}>/i> /div> {{/if}} {{/if}} /div> /script> !-- TEMPLATE END :: AnalyticsCounter --> !-- TEMPLATE BEGIN :: AuditlogDetail --> script typetext/ractive idAuditlogDetail-template> {{>getLayoutPartial()}} {{! Event Type Templates}} {{#partial generic}} div classrow-fluid> {{#each data:key}} {{#if .}}{{#with . as item}} {{>key}} {{/with}}{{/if}} {{/each}} /div> {{/partial}} {{#partial user_device}} div classrow-fluid> div classspan6> {{#with data.users as item}} {{>users}} {{/with}} /div> div classspan6> {{#with data.devices as item}} {{>devices}} {{/with}} /div> /div> {{/partial}} {{#partial user_location}} div classrow-fluid> div classspan6> {{#with data.users as item}} {{>users}} {{/with}} /div> div classspan6> {{#with data.location as location}} {{>location_settings}} {{/with}} /div> /div> div classrow-fluid> div classspan6> {{#if data.location.added_users}} {{#with data.location.added_users as item, true as added}} {{>users}} {{/with}} {{/if}} /div> div classspan6> {{#if data.location.removed_users}} {{#with data.location.removed_users as item, true as removed}} {{>users}} {{/with}} {{/if}} /div> /div> div classrow-fluid> div classspan6> {{#if data.location.added_devices}} {{#with data.location.added_devices as item, true as added}} {{>devices}} {{/with}} {{/if}} /div> div classspan6> {{#if data.location.removed_devices}} {{#with data.location.removed_devices as item, true as removed}} {{>devices}} {{/with}} {{/if}} /div> /div> div classrow-fluid> div classspan12> {{#with settings as item}} {{>diff}} {{/with}} /div> /div> {{/partial}} {{#partial user_device_diff}} div classrow-fluid> div classspan6> {{#with data.users as item}} {{>users}} {{/with}} /div> div classspan6> {{#with data.devices as item}} {{>devices}} {{/with}} /div> /div> div classrow-fluid> div classspan12> {{#with settings as item}} {{>diff}} {{/with}} /div> /div> {{/partial}} {{#partial user_diff}} div classrow-fluid> div classspan12> {{#with data.users as item}} {{>users}} {{/with}} /div> /div> div classrow-fluid> div classspan12> {{#if settings}} {{#with settings as item}} {{>diff}} {{/with}} {{/if}} /div> /div> {{/partial}} {{#partial user_layout}} div classrow-fluid> div classspan6> {{#with data.users as item}} {{>users}} {{/with}} /div> div classspan6> {{#with data.layout as layout}} {{>layout_settings}} {{/with}} /div> /div> {{#if data.layout.configuration.panes.0}} {{#with data.layout.configuration.panes as panes}} {{#with data.devices as devices}} {{>layout_panes}} {{/with}} {{/with}} {{/if}} {{/partial}} {{#partial user_device_videoURL}} {{>user_device}} h5> {{#if data.video.video_type historical}} History Browser {{elseif data.video.video_type live}} Live {{/if}} Video: /h5> div>a on-click@this.launchHistoryBrowser(data.devices, data.video) href>Jump to viewed video start/a>/div> div>span classtext-dimmed>Video start:/span> {{isoTimestamp(data.video.start_ts)}}/div> div>span classtext-dimmed>Video end:/span> {{isoTimestamp(data.video.end_ts)}}/div> {{/partial}} {{#partial user_device_download}} {{>user_device}} {{#with data.video_download as download}} {{>video_download}} {{/with}} {{/partial}} {{#partial create_export}} {{>user_device}} div classrow-fluid> div classspan12> div classaudit-detail-item audit-user-detail> h5>Details/h5> {{#each data.location_groups}} {{#if .name}} div>span classtext-dimmed>Site name:/span> {{.name}}/div> {{/if}} {{/each}} {{#if (((data || {}).export_request || {}).period || {}).startTimestamp}} div>span classtext-dimmed>Start time:/span> {{ @this.formatDateTime(data.export_request.period.startTimestamp, data.export_request.osd.timeZone) }}/div> {{/if}} {{#if (((data || {}).export_request || {}).period || {}).endTimestamp}} div>span classtext-dimmed>End time :/span> {{ @this.formatDateTime(data.export_request.period.endTimestamp, data.export_request.osd.timeZone) }}/div> {{/if}} /div> /div> /div> {{/partial}} {{#partial user_switch_command}} div classrow-fluid> div classspan6> {{#with data.users as item}} {{>users}} {{/with}} /div> div classspan6> h5>Managed Switch/h5> {{#if data.managed_switch.command}} div>span classtext-dimmed>Name:/span> {{data.managed_switch.name}}/div> div>span classtext-dimmed>GUID:/span> {{data.managed_switch.guid}}/div> div> strong classcapitalize>{{data.managed_switch.command}}/strong> port(s): {{#each data.managed_switch.ports:key}} {{#if key > 0}}, {{getPortNumber(.)}}{{else}}{{getPortNumber(.)}}{{/if}} {{/each}} /div> {{else}} div>span classtext-dimmed>Old name:/span> {{data.managed_switch.old_values.name || unset}}/div> div>span classtext-dimmed>New name:/span> {{data.managed_switch.new_values.name}}/div> {{/if}} /div> /div> {{/partial}} {{! Detail Items}} {{#partial devices}} div class> h5>{{#if added}}Added {{/if}}{{#if removed}}Removed {{/if}}Devices/h5> {{#each item}} {{#if .esn}} div classaudit-detail-item audit-device-detail> div>span classtext-dimmed>Name:/span> {{.name}} ({{.esn}})/div> div>span classtext-dimmed>Make:/span> {{.make}}/div> div>span classtext-dimmed>Model:/span> {{.model}}/div> /div> {{else}} No device data available {{/if}} {{/each}} {{/partial}} {{#partial users}} {{#each item}} h5>{{#if .created_new}}Created New {{/if}}{{#if added}}Added {{/if}}{{#if removed}}Removed {{/if}}Users/h5> div classaudit-detail-item audit-user-detail> div>span classtext-dimmed>Name:/span> {{.first_name}} {{.last_name}}/div> div>span classtext-dimmed>Email:/span> {{.email}}/div> div>span classtext-dimmed>ID:/span> {{.id}}/div> /div> {{/each}} {{/partial}} {{#partial diff}} h5>Settings Changes/h5> {{#if item}} table classtable audit-settings-table> thead> th classcol-setting>Setting/th> th classcol-diff>Previous Value/th> th classcol-diff>New Value/th> /thead> tbody> {{#each item}} tr> td>{{ .path.join( > ) }}/td> td>div classshow-more>{{ getDiff(this.old_value) }}/div>/td> td>div classshow-more>{{ getDiff(this.new_value) }}/div>/td> /tr> {{/each}} /tbody> /table> {{else}} No data available {{/if}} {{/partial}} {{#partial layout_settings}} h5>Layout Settings/h5> div>span classtext-dimmed>Name:/span> {{layout.name}}/div> div>span classtext-dimmed>ID:/span> {{layout.id}}/div> div>span classtext-dimmed>Cameras per row:/span> {{layout.configuration.settings.camera_row_limit}}/div> div>span classtext-dimmed>Show camera name:/span> {{layout.configuration.settings.camera_name}}/div> div>span classtext-dimmed>Borders:/span> {{layout.configuration.settings.camera_border}}/div> div>span classtext-dimmed>Custom ID:/span> {{layout.configuration.settings.custom_id}}/div> div>span classtext-dimmed>Aspect ratio:/span> {{layout.configuration.settings.camera_aspect_ratio}}/div> {{/partial}} {{#partial location_settings}} h5>Location Settings/h5> div>span classtext-dimmed>Name:/span> {{location.name}}/div> div>span classtext-dimmed>ID:/span> {{location.id}}/div> {{/partial}} {{#partial layout_panes}} h5>Layout Panes/h5> div classaudit-layout-panes> {{#each panes}} {{#if .cameras}} div classaudit-layout-pane> div>Camera: {{.name || devices.cameras0.name}}/div> div>ID: {{.cameras}}/div> div>Size: {{.size}}/div> div>Position in layout: {{@key}}/div> /div> {{/if}} {{/each}} /div> {{/partial}} {{#partial video_download}} h5>Video Download Details/h5> div>span classtext-dimmed>Format:/span> {{download.video_format}}/div> div>span classtext-dimmed>Download Type:/span> {{download.download_type}}/div> div>span classtext-dimmed>Description:/span> {{download.video_description}}/div> div>span classtext-dimmed>Notes:/span> {{download.notes}}/div> div>span classtext-dimmed>ID:/span> {{download.download_id}}/div> {{/partial}} /script> !-- TEMPLATE END :: AuditlogDetail --> !-- TEMPLATE BEGIN :: DeviceWidgetComponent --> script typetext/ractive idDashboard-template> main classdashboard widget> header classwidget-title> div classdashboard__header> div classdashboard__header__left> DashboardTitle/> /div> div classdashboard__header__right> PaginationBarApi collection{{collection}} current_page{{state.get(current_page)}} size{{state.get(size)}} quantity{{state.get(total_size)}} is_last_page{{state.get(is_last_page)}} loading{{state.get(loading)}} /> DashboardActions device_list_loading{{device_list_loading}} /> /div> /div> /header> div classdashboard__items widget-content> {{#if state.get(loading) && !state.get(initial_loading)}} div classdashboard__loading-mask> div classdashboard__loading-positioning> img classdashboard__loading-image src/_images/spinning.gif alt> /div> /div> {{/if}} {{#if state.get(error) && state.get(initial_loading)}} div classdashboard__no-results row-fluid text-center> h3>{{translateText(Error)}}/h3> p>{{translateText(An error occurred while downloading the device list, please try again.)}}/p> button classbtn btn-info typebutton on-click@this.tryAgainFetchList()>{{translateText(Reload)}}/button> /div> {{elseif state.get(initial_loading)}} InitialLoadingTable rowLength6 initialLoadingTableInfo{{initialLoadingTableInfo}} /> {{elseif collection.length}} table classtable table-striped> thead> tr> th idcamera-table-status stylewidth:5%;>{{translateText(Status)}}/th> th idcamera-table-status-indent stylewidth:5%>/th> {{! ICON COL / CAMERA STATUS - no header text }} th idcamera-table-name stylewidth:25%>{{translateText(Name)}}/th> th idcamera-table-tags stylewidth:25%>{{translateText(Tags)}}/th> th idcamera-table-location stylewidth:20%;> span on-click@this.set(location_info_type, location) class device-location-col {{#if location_info_type location}}device-location-col-selected{{/if}} > {{translateText(Location)}} /span> / span on-click@this.set(location_info_type, address) class device-location-col {{#if location_info_type address}}device-location-col-selected{{/if}} > {{translateText(Address)}} /span> /th> th stylewidth:20%; min-width: 200px;> {{translateText(Actions)}} /th> /tr> /thead> tbody iddevice-widget-component-light> {{#each collection}} DashboardRow item{{this}} location_info_type{{location_info_type}} user{{user}} doTalkdown{{doTalkdown}} /> {{/each}} /tbody> /table> {{elseif state.get(no_results)}} div classdashboard__no-results row-fluid> h3 classtext-center>{{translateText(No results found)}}/h3> /div> {{elseif !state.get(loading) && !state.get(total_size)}} div classrow-fluid> div classspan6> div stylemargin-left: 15px;> h3>{{translateText(Add Bridge)}}/h3> p>{{translateText(A Bridge is needed to connect your cameras to a cloud data center.)}}/p> p>{{translateText(Make sure the WAN port of your Bridge is connected to the internet and then press the Add Bridge button.)}}/p> /div> /div> div idwrapper-bridges-img classspan6> img src{{no_bridge_image}} alt> /div> /div> {{/if}} /div> footer classwidget-title> div classdashboard__footer> div classdashboard__footer__left> /div> div classdashboard__footer__right> PaginationBarApi collection{{collection}} current_page{{state.get(current_page)}} size{{state.get(size)}} quantity{{state.get(total_size)}} is_last_page{{state.get(is_last_page)}} loading{{state.get(loading)}} /> div classpull-right> {{#if (!state.get(initial_loading))}} PageSize collection{{collection}} size{{state.get(size)}} /> {{/if}} /div> /div> /div> /footer> audio idtalkdown-audio autoplay>/audio> div idspeakerNotification-component>/div> /main> /script> !-- TEMPLATE BEGIN :: DashboardActions --> script typetext/ractive idDashboardActions-template> {{#if show_dropdown }} div classdashboard__actions> div classbtn-group device-dropdown-menu> a href# classdropdown-toggle data-toggledropdown data-testidpage-dashboard-header-dropdown-toggle-button-add-devices > i classfas fa-ellipsis-h>/i> /a> ul classdropdown-menu pull-right> {{#if show_bridge_option}} li on-click@this.addBridge() data-testidpage-dashboard-header-dropdown-menu-add-bridge > a>{{translateText(Add Bridge)}}/a> /li> {{/if}} {{#if show_camera_option && !device_list_loading}} li on-click@this.addRtspCamera() data-testidpage-dashboard-header-dropdown-menu-add-rtsp-camera > a>{{translateText(Add Cameras)}}/a> /li> {{/if}} {{#if show_camera_direct_option}} li on-click@this.openDirectCameraModal() data-testidpage-dashboard-header-dropdown-menu-add-direct-camera > a>{{translateText(Add Camera Direct)}}/a> /li> {{/if}} {{#if show_mass_edit_option}} li on-click@this.goToMassEdit(bridge)>a>{{translateText(Mass Edit Bridges)}}/a>/li> li on-click@this.goToMassEdit(camera)>a>{{translateText(Mass Edit Cameras)}}/a>/li> {{/if}} /ul> /div> /div> {{elseif show_bridge_option}} div classdashboard__actions> i on-click@this.addBridge() classicon-plus-sign add-icon title{{translateText(Add Bridge)}} data-testidpage-dashboard-header-button-add-bridge >/i> /div> {{/if}} /script> !-- TEMPLATE BEGIN :: DashboardRow --> script typetext/ractive idDashboardRow-template> {{#if item.firstCloudCamera}} DirectBridgeRow/> {{/if}} tr data-esn{{item.deviceID}}> {{#if item.deviceType camera}} {{#if item.deviceParent}} ChildCameraRow item{{item}} location_info_type{{location_info_type}} user{{user}}/> {{else}} CameraRow item{{item}} location_info_type{{location_info_type}} user{{user}}/> {{/if}} {{elseif item.deviceType multiview_camera}} MultiviewCameraRow item{{item}} location_info_type{{location_info_type}} user{{user}}/> {{elseif item.deviceType cloud_camera}} DirectCameraRow item{{item}} location_info_type{{location_info_type}} user{{user}}/> {{elseif item.deviceType speaker}} SpeakerRow item{{item}} location_info_type{{location_info_type}} user{{user}} doTalkdown{{doTalkdown}} /> {{elseif item.deviceType bridge}} BridgeRow item{{item}} location_info_type{{location_info_type}} user{{user}}/> {{else}} NotSupportedRow item{{item}}/> {{/if}} /tr> {{#if (item.deviceFisheyeViewports.length)}} {{#each item.deviceFisheyeViewports as viewport}} tr data-esn{{item.deviceID}} data-composite-id{{ viewport.id }}> FisheyeViewportCameraRow item{{item}} viewport{{viewport}} location_info_type{{location_info_type}} user{{user}} /> /tr> {{/each}} {{/if}} /script> !-- TEMPLATE BEGIN :: DashboardTitle --> script typetext/ractive idDashboardTitle-template> i classicon-hdd>/i> {{translateText(Bridges)}} / i classicon-facetime-video>/i> {{translateText(Cameras)}} /script> !-- TEMPLATE BEGIN :: BridgeRow --> script typetext/ractive idBridgeRow-template> td classtable-device-status> {{! STATUS COL }} i class{{status_column_parameters.classes}} title{{status_column_parameters.title}}> /i> /td> td classtable-device-icon> {{! ICON COL }} i class{{bridge_icon_column_parameters.classes}} title{{bridge_icon_column_parameters.title}}> /i> /td> td> {{! NAME COL }} strong>{{item.deviceName}}/strong> {{#if summary_message}} ({{summary_message}}) {{/if}} !-- TODO: update warning div classred>{{item.new_bridge_warning}}/div>--> /td> td> {{! SERIAL COL }} {{item.deviceSerial}} /td> td> {{! LOCATION COL}} {{location_info}} /td> td> {{! ACTIONS COL }} {{#if user.checkBridgeUpdate(item)}} button typebutton classbtn on-click@this.openBridgeSettings() title{{translateText(change bridge settings)}}> i classicon-cog>/i> /button> {{/if}} {{! TODO: entire model check }} {{#if user.is_edit_all_and_add}} button typebutton classbtn on-click@this.replaceBridge(item) title{{translateText(replace bridge)}}> i classicon-exchange>/i> /button> {{/if}} {{#if user.checkAddDeleteDevices()}} button typebutton classbtn on-click@this.deleteBridge() title{{translateText(remove bridge from account)}}> i classicon-trash>/i> /button> {{/if}} /td> /script> !-- TEMPLATE BEGIN :: CameraRow --> script typetext/ractive idCameraRow-template> {{#if hasBridge}} td classoffset-cell offset-with-line>/td> {{/if}} td classtable-device-status> {{! STATUS COL }} div {{#if has_preview_bubble}} classstatus-clickable on-click@this.showPreview(@node){{/if}}> i class{{status_column_parameters.classes}} title{{status_column_parameters.title}}> /i> /div> /td> {{#if !hasBridge}} {{! offset table cells when there are no bridges }} td>/td> {{/if}} td> {{! NAME COL }} {{item.deviceName}} {{#if has_associated_speaker}} i classicon-volume icon-volume-device device-speaker-icon>/i> {{/if}} /td> td> {{! TAGS COL }} {{#each item.deviceTags as tag}} span classtag>a href#/layout_tag/{{tag}}>{{tag}}/a>/span> {{/each}} /td> td> {{! LOCATION COL}} {{location_info}} /td> td> {{! ACTIONS COL }} {{#if user.checkDeviceRecordedVideo(item) && !item.isLiveViewOnly()}} button typebutton classbtn on-click@this.openHistory(this) title{{translateText(view camera history)}}> i classicon-time>/i> /button> {{/if}} {{#if user.checkDeviceUpdate(item) || user.checkPTZOnlyShowSettings(item) }} button typebutton classbtn on-click@this.openCameraSettings() title{{has_composites ? translateText(change parent camera settings) : translateText(change camera settings)}} > i class{{has_composites ? icon-cogs : icon-cog}}>/i> /button> {{/if}} {{#if user.checkDeviceUpdate(item) && user.checkDeviceVPNForAttachedCamera(item) && !item.isAnalog()}} button typebutton {{#if !has_vpn}}disabled{{/if}} on-click@this.openVPN() title{{translateText(open VPN to camera)}} > i classeen-icon-tunnel>/i> /button> {{/if}} {{#if user.checkShowCameraMetrics(item)}} button typebutton classbtn on-click@this.openAnalytics() title{{translateText(open analytics graphs) }}> i classicon-bar-chart>/i> /button> {{/if}} {{#if user.checkAddDeleteDevices()}} button typebutton classbtn on-click@this.deleteCamera() title{{translateText(remove camera from account) }}> i classicon-trash>/i> /button> {{/if}} /td> /script> !-- TEMPLATE BEGIN :: CameraRow --> script typetext/ractive idChildCameraRow-template> {{#if hasBridge}} td classoffset-cell offset-with-line>/td> {{/if}} td classoffset-cell> {{! STATUS COL }} /td> {{#if !hasBridge}} {{! offset table cells when there are no bridges }} td>/td> {{/if}} td> {{! NAME COL }} span classtable-device-child-camera-status {{#if has_preview_bubble}}status-clickable{{/if}} {{#if has_preview_bubble}}on-click@this.showPreview(@node){{/if}}> i class{{status_column_parameters.classes}} title{{status_column_parameters.title}}> /i> /span> {{item.deviceName}} {{#if has_associated_speaker}} i classicon-volume icon-volume-device device-speaker-icon>/i> {{/if}} /td> td> {{! TAGS COL }} {{#each item.deviceTags as tag}} span classtag>a href#/layout_tag/{{tag}}>{{tag}}/a>/span> {{/each}} /td> td> {{! LOCATION COL}} {{location_info}} /td> td> {{! ACTIONS COL }} {{#if user.checkDeviceRecordedVideo(item) && !item.isLiveViewOnly()}} button typebutton classbtn on-click@this.openHistory(this) title{{translateText(view camera history)}}> i classicon-time>/i> /button> {{/if}} {{#if user.checkDeviceUpdate(item) || user.checkPTZOnlyShowSettings(item) }} button typebutton classbtn on-click@this.openCameraSettings() title{{has_composites ? translateText(change parent camera settings) : translateText(change camera settings)}} > i class{{has_composites ? icon-cogs : icon-cog}}>/i> /button> {{/if}} {{#if user.checkShowCameraMetrics(item)}} button typebutton classbtn on-click@this.openAnalytics() title{{translateText(open analytics graphs) }}> i classicon-bar-chart>/i> /button> {{/if}} {{#if user.checkAddDeleteDevices()}} button typebutton classbtn on-click@this.deleteCamera() title{{translateText(remove camera from account) }}> i classicon-trash>/i> /button> {{/if}} /td> /script> !-- TEMPLATE BEGIN :: CameraRow --> script typetext/ractive idDirectBridgeRow-template> tr data-esnCameraDirectBridge> td classtable-device-status> i classicon-ok-circle green big-icon titlebridge online>/i> /td> td classtable-device-icon> i classbridge-camera-direct-list-row-icon icon-large title>/i> /td> td> strong>{{ translateText(Direct to Cloud Cameras) }}/strong> /td> td>/td> td>/td> td>/td> /tr> /script> !-- TEMPLATE BEGIN :: CameraRow --> script typetext/ractive idDirectCameraRow-template> td classoffset-cell offset-with-line>/td> td classtable-device-status> {{! STATUS COL }} div {{#if has_preview_bubble}} classstatus-clickable on-click@this.showPreview(@node){{/if}}> i class{{status_column_parameters.classes}} title{{status_column_parameters.title}}> /i> /div> /td> td> {{! NAME COL }} {{item.deviceName}} /td> td> {{! TAGS COL }} {{#each item.deviceTags as tag}} span classtag>a href#/layout_tag/{{tag}}>{{tag}}/a>/span> {{/each}} /td> td> {{! LOCATION COL}} {{location_info}} /td> td> {{! ACTIONS COL }} {{#if user.checkDeviceRecordedVideo(item) && !item.isLiveViewOnly()}} button typebutton classbtn on-click@this.openHistory(this) title{{translateText(view camera history)}}> i classicon-time>/i> /button> {{/if}} {{#if user.checkDeviceUpdate(item) || user.checkPTZOnlyShowSettings(item) }} button typebutton classbtn on-click@this.openCameraSettings() title{{has_composites ? translateText(change parent camera settings) : translateText(change camera settings)}} > i class{{has_composites ? icon-cogs : icon-cog}}>/i> /button> {{/if}} {{#if user.checkAddDeleteDevices()}} button typebutton classbtn on-click@this.deleteCamera() title{{translateText(remove camera from account) }}> i classicon-trash>/i> /button> {{/if}} /td> /script> !-- TEMPLATE BEGIN :: FisheyeViewportCameraRow --> script typetext/ractive idFisheyeViewportCameraRow-template> td classoffset-cell offset-with-line>/td>{{! STATUS COL }} td>/td> td classoffset-with-indentation> {{! NAME COL }} {{viewport.name}} /td> td> {{! TAGS COL }} {{#each viewport.tags as tag}} span classtag>a href#/layout_tag/{{tag}}>{{tag}}/a>/span> {{/each}} /td> td> {{! LOCATION COL}} {{location_info}} /td> td> {{! ACTIONS COL }} {{#if user.checkDeviceRecordedVideo(item) && !item.isLiveViewOnly()}} button typebutton classbtn on-click@this.openHistory() title{{translateText(view camera history)}}> i classicon-time>/i> /button> {{/if}} {{#if user.checkDeviceUpdate(item) || user.checkPTZOnlyShowSettings(item) }} button typebutton classbtn on-click@this.openCameraViewportSettings() title{{translateText(change viewport settings)}} > i classicon-cog>/i> /button> {{/if}} {{#if user.checkAddDeleteDevices()}} button typebutton classbtn on-click@this.deleteCameraComposite() title{{translateText(remove camera from account) }}> i classicon-trash>/i> /button> {{/if}} /td> /script> !-- TEMPLATE BEGIN :: CameraRow --> script typetext/ractive idMultiviewCameraRow-template> {{#if hasBridge}} td classoffset-cell offset-with-line>/td> {{/if}} td classtable-device-status> {{! STATUS COL }} i class{{status_column_parameters.classes}} title{{status_column_parameters.title}}> /i> /td> {{#if !hasBridge}} {{! offset table cells when there are no bridges }} td>/td> {{/if}} td> {{! NAME COL }} strong>{{item.deviceName}}/strong> /td> td> {{! TAGS COL }} {{#each item.deviceTags as tag}} span classtag>a href#/layout_tag/{{tag}}>{{tag}}/a>/span> {{/each}} /td> td> {{! LOCATION COL}} {{location_info}} /td> td> {{! ACTIONS COL }} {{#if user.checkDeviceUpdate(item)}} button typebutton classbtn on-click@this.openCameraSettings() title{{translateText(change parent camera settings)}} > i classicon-cogs>/i> /button> {{/if}} {{#if has_available_child_views}} button classbtn btn-info btn-small new-child-view-btn title{{translateText(New View)}} on-click@this.openCameraSettings(camera, views)> i classicon-plus>/i> /button> {{/if}} {{#if user.checkDeviceUpdate(item) && user.checkDeviceVPNForAttachedCamera(item) && !item.isAnalog()}} button typebutton {{#if !has_vpn}}disabled{{/if}} on-click@this.openVPN() title{{translateText(open VPN to camera)}} > i classeen-icon-tunnel>/i> /button> {{/if}} {{#if user.checkShowCameraMetrics(item)}} button typebutton classbtn on-click@this.openAnalytics() title{{translateText(open analytics graphs) }}> i classicon-bar-chart>/i> /button> {{/if}} {{#if user.checkAddDeleteDevices()}} button typebutton classbtn on-click@this.deleteCamera() title{{translateText(remove camera from account) }}> i classicon-trash>/i> /button> {{/if}} /td> /script> !-- TEMPLATE BEGIN :: NotSupportedRow --> script typetext/ractive idNotSupportedRow-template> td colspan10> Device not supported b>{{item.deviceType}}/b> /td> /script> !-- TEMPLATE BEGIN :: CameraRow --> script typetext/ractive idSpeakerRow-template> {{#if hasBridge}} td classoffset-cell offset-with-line>/td> {{/if}} td classtable-device-status> {{! STATUS COL }} div> i class{{status_column_parameters.classes}} title{{status_column_parameters.title}}> /i> /div> {{webRTC_speaker}} /td> {{#if !hasBridge}} {{! offset table cells when there are no bridges }} td>/td> {{/if}} td> {{! NAME COL }} {{item.deviceName}} /td> td> {{! TAGS COL }} /td> td> {{! LOCATION COL}} {{location_info}} /td> td> {{! ACTIONS COL }} {{#if (user.checkDeviceUpdate(item) || user.checkPTZOnlyShowSettings(item)) && item.isAbleToTalkdown() }} button typebutton classbtn on-clickdoTalkdown(item.deviceID, item.deviceExtra) title{{translateText(directly talk to speaker)}}> i classicon-microphone id{{item.deviceID}}-talkdown-icon>/i> /button> {{/if}} {{#if user.checkSpeakerOnlyShowSettingsByID(item.deviceID) }} button typebutton classbtn on-click@this.openSpeakerSettings() title{{translateText(change speaker settings)}} > i classicon-cog>/i> /button> {{/if}} {{#if user.checkDeviceVPNForAttachedCamera(item)}} button typebutton on-click@this.openVPN() title{{translateText(open VPN to speaker)}} > i classeen-icon-tunnel>/i> /button> {{/if}} {{#if user.checkAddDeleteDevices()}} button typebutton classbtn on-click@this.deleteSpeaker() title{{translateText(remove speaker from account) }}> i classicon-trash>/i> /button> {{/if}} /td> /script> !-- TEMPLATE BEGIN :: LocationGroupModal --> script typetext/ractive idDewarpDashboardSettingsComponent-template> form classform-horizontal> !-- Name of the composite --> div classcontrol-group> label classcontrol-label>{{translateText(Name)}}:/label> div classcontrols> div classrow-fluid> input classspan6 typetext maxlength25 value{{name}} placeholder{{translateText(Name)}} /> {{#if compositeEditError}} p classtext-error>{{ translateText(Please enter a valid name for the viewport) }}/p> {{/if}} /div> /div> /div> !-- TAGS --> div classcontrol-group> label classcontrol-label>{{translateText(Tags)}}:/label> div classcontrols> div classrow-fluid> input nametags classspan8 iddewarpDashboardSettings__tags value{{_normalized_tags}} styledisplay: none; /> /div> /div> /div> !-- Notes --> div classcontrol-group> label classcontrol-label>{{translateText(Notes)}}:/label> div classcontrols> div classrow-fluid> textarea classspan12 iddewarpDashboardSettings__notes maxlength50>{{notes}}/textarea> /div> /div> /div> !-- Delete Viewport --> div classcontrol-group> div classcontrols> div classrow-flouid> button on-clickdelete classbtn btn-inverse>{{translateText(Delete Viewport)}}/button> /div> /div> /div> /form> /script> !-- TEMPLATE BEGIN :: DistributorUserAccess --> script typetext/ractive idDistributorUserAccess-template> form classform-horizontal> div classcontrol-group> label classcontrol-label>{{{translateText(Disable User)}}}:/label> div classcontrols> div classrow-fluid> input typecheckbox nameoptionsRadios valueoption1 checked{{is_disabled}}/> /div> /div> /div> div classcontrol-group> label classcontrol-label>{{{translateText(Employee ID)}}}:/label> div classcontrols> div classrow-fluid> div classspan8> input typetext maxlength50 value{{employee_id}}> /div> /div> /div> /div> div classcontrol-group> div classcontrols> button classignore btn btn-inverse title{{{translateText(remove user from account)}}} typebutton on-click@this.delete_user()> {{{translateText(Delete User)}}} /button> /div> /div> /form> /script> !-- TEMPLATE END :: DistributorUserAccess --> script typetext/ractive idLocationAddButton-template> i on-click@this.openModal() classicon-plus-sign add-icon location-add-button title{{translateText(Add Location)}}>/i> /script> !-- TEMPLATE BEGIN :: DeleteLocation--> script idDeleteLocation-template typetext/ractive> div classcontainer-fluid> div classwidget-content> div classrow-fluid> div classspan12> p> {{translateText(WARNING: About to delete device from location.)}} /p> p> {{translateText(This will delete the device from the location, if it is a bridge it will also delete all connected cameras from this location.)}} /p> p> {{translateText(Are you REALLY SURE you want to do this?)}} /p> /div> /div> /div> /div> /script> !-- TEMPLATE END :: DeleteLocation --> script typetext/ractive idLocationDetailMapView-template> div classlocation-wrapper-map-container> div idCameraMap__map>/div> /div> /script> script typetext/ractive idLocationDetailView-template> div classlocation-details-row-wrapper> div classrow-fluid {{#if show_location_details}}location-details-row{{else}}hidden{{/if}} > div class{{#if total_device_number 1}}hidden{{else}}content-grid-panel detail-panel{{/if}}> div classlocations-dropdown control-group> LocationStatistics /> /div> {{#unless map_address}} {{translateText(No Address)}} {{#if user.checkEditLocationGroup()}} button typebutton classbtn btn-success on-click@this.parent.editLocation(current_location)> i classfas fa-plus>/i> {{translateText(Add Address)}} /button> {{/if}} {{/unless}} /div> div classcontent-grid-panel> {{#if any_camera_location}} LocationDetailMapView camera_with_location{{any_camera_location}} current_location{{current_location}} /> {{elseif map_address}} iframe width100% height100% frameborder0 styleborder:0 srchttps://www.google.com/maps/embed/v1/search?key{{google_maps_api_key}}&q{{map_address}}> /iframe> {{else}} div classempty-state> div classfeature-icon-outer> div classfeature-icon-inner> i classfas fa-map-marker-alt>/i> /div> /div> {{#unless map_address}} br /> br /> {{translateText(No Address)}} br /> {{#if user.checkEditLocationGroup()}} button typebutton classbtn btn-success on-click@this.parent.editLocation(current_location)> i classfas fa-plus>/i> {{translateText(Add Address)}} /button> {{/if}} {{/unless}} /div> {{/if}} /div> /div> div classlocations-details-arrow> i on-click@this.toggle(show_location_details) classfas {{#show_location_details}}icon-angle-up{{else}}icon-angle-down{{/}}>/i> /div> /div> div classrow-fluid> {{#if location_devices.cameras.length || location_devices.bridges.length}} LocationDeviceTable camera_models{{location_devices.cameras}} user{{user}} bridge_models{{location_devices.bridges}} ui{{ui}} current_location{{current_location}} /> {{/if}} /div> /script> !-- TEMPLATE BEGIN :: LocationDeviceTable --> script typetext/ractive idLocationDeviceTable-template> div classlocation-devices> {{#if ui.view table}} LocationSingleListViewComponent location_camera_list{{camera_models}} ui{{ui}} user{{user}} current_location{{current_location}} /> {{elseif ui.view grid}} LocationSingleGridViewComponent camera_models{{camera_models}} ui{{ui}} user{{user}} current_location{{current_location}} /> {{elseif ui.view hierarchy}} LocationSingleHierarchyViewComponent camera_models{{camera_models}} bridge_models{{bridge_models}} ui{{ui}} user{{user}} current_location{{current_location}} /> {{/if}} /div> /script> !-- TEMPLATE END :: LocationDeviceTable --> !-- TEMPLATE BEGIN :: LocationGroupModal --> script typetext/ractive idLocationGroupModal-template> div classmodal-content> div classmodal-header> button typebutton classclose data-dismissmodal on-click@this.onClose()>×/button> {{#if is_edit}} h3>{{translateText(Edit Location)}}/h3> {{else}} h3>{{translateText(Add New Location)}}/h3> {{/if}} /div> div classmodal-body> div classlocations-header-buttons-wrapper float-right> HelpLink data_linklocation_main_page/> /div> div classtabbable> ul classnav nav-tabs> li classactive> a href#locations-detail-tab data-toggletab> {{translateText(Location Details)}} /a> /li> li> a href#location-cameras-tab data-toggletab> {{#if is_edit || is_transition}} {{translateText(Edit Cameras)}} {{else}} {{translateText(Add Cameras)}} {{/if}} /a> /li> {{#if is_transition}} li> a href#location-devices-tab data-toggletab> {{translateText(Edit Devices)}} /a> /li> {{/if}} /ul> div classtab-content> div classtab-pane active idlocations-detail-tab class-is-transitionis_transition && is_edit> {{! I have no idea what Im doing with this bootstrap but this seems to work }} form idlocations-detail-tab-form classrow-fluid> div classcontrols controls-row> label>{{translateText(Location Name)}}/label> input typetext classspan10 data-testidmodal-add-edit-location-form-input-name required value{{location.name}} > /div> {{! ADDRESS FIELDS }} div classcontrols controls-row> label>{{translateText(Street Address)}}/label> input idlocationModal__street_address typetext classspan10 data-testidmodal-add-edit-location-form-input-street-address value{{location.address.streetAddress}} > /div> div classcontrols controls-row> input typetext classspan10 data-testidmodal-add-edit-location-form-input-street-address-2 value{{location.address.streetAddress2}} > /div> div classrow-fluid> div classcontrols controls-row span5> label>{{translateText(City)}}/label> input typetext classspan12 data-testidmodal-add-edit-location-form-input-city value{{location.address.city}} > /div> div classcontrols controls-row span6> label>{{translateText(State / Province / Region)}}/label> input typetext classspan10 data-testidmodal-add-edit-location-form-input-region value{{location.address.region}} > /div> /div> div classrow-fluid> div classcontrols controls-row span5> label>{{translateText(ZIP / Postal Code)}}/label> input typetext classspan12 data-testidmodal-add-edit-location-form-input-postal-code value{{location.address.postalCode}} > /div> div classcontrols controls-row span6> label>{{translateText(Country)}}/label> input typetext classspan10 data-testidmodal-add-edit-location-form-input-country value{{location.address.country}} > /div> /div> div classrow-fluid> div classcontrols> label classcheckbox> input typecheckbox data-testidmodal-add-edit-location-form-checkbox-default checked{{location.isDefault}} > {{translateText(Make this the default location for the account)}} /label> /div> /div> {{! END ADDRESS FIELDS }} /form> /div> div classtab-pane idlocation-cameras-tab> SelectLocationCameras isolated_camera_list{{isolated_camera_list}} selected_cameras{{selected_cameras}} super_search{{super_search}} original_set{{original_set}} is_new{{false}} hide_existing_cameras{{hide_existing_cameras}} hide_label{{translateText(Hide cameras already in location)}}> /div> {{#if is_transition}} div classtab-pane idlocation-devices-tab> SelectLocationDevices isolated_camera_list{{isolated_camera_list}} isolated_bridges_list{{isolated_bridges_list}} selected_bridges{{selected_bridges}} selected_cameras{{selected_cameras}} super_search{{super_search}} original_set{{original_set}} original_set_bridges{{original_set_bridges}} is_new{{false}} hide_existing_devices{{hide_existing_devices}} hide_label{{translateText(Hide devices already in location)}}> /div> {{/if}} /div> /div> /div> div classmodal-footer> p classred>{{error_message}}/p> button typebutton classbtn btn-warning on-click@this.onClose() data-dismissmodal data-testidmodal-add-edit-location-footer-button-cancel > {{translateText(Cancel)}} /button> button typebutton classbtn btn-success on-click@this.saveLocation() data-testidmodal-add-edit-location-footer-button-save > {{translateText(Save)}} /button> /div> /div> /script> !-- TEMPLATE END :: LocationGroupModal --> !-- TEMPLATE BEGIN :: SelectLocationCameras --> script typetext/ractive idSelectLocationCameras-template> form classform-horizontal> div classcontrol-group> label classcontrol-label>{{translateText(Filter:)}}/label> div classcontrols> input typetext autocompleteoff maxlength100 value{{search_filter}}> /div> /div> div classcontrol-group> div classcontrols> {{#unless is_new}} label classcheckbox> input typecheckbox checked{{hide_existing_cameras}}>{{hide_label}} /label> {{/unless}} /div> /div> /form> div idadd-cameras-list> {{#each super_search.getWorkingSet(isolated_camera_list)}} div classrow-fluid {{#if shouldHideCamera(this.get(deviceID), this.get(deviceLocationId), this.get(deviceType)) }}choose-camera-hidden{{/if}} on-click@this.selectRow(this.get(deviceID))> div classspan1 choose-camera-select> input typecheckbox name{{selected_cameras}} value{{this.get(deviceID)}} {{#if !currentUser().checkDeviceRead(this) }}disabled{{/if}}> /div> div classspan2 choose-camera-image> img src/asset/prev/image.jpeg?id{{this.get(deviceID)}}×tampnow&asset_classall > /div> div classspan8 choose-camera-filtered> p>{{this.get(deviceName)}}/p> {{#each this.getCustomTags().sort()}} span classtag>a> {{this.toLowerCase()}} /a>/span> {{/each}} /div> /div> {{/each}} /div> /script> !-- TEMPLATE END :: SelectLocationCameras --> !-- TEMPLATE BEGIN :: SelectLocationDevices --> script typetext/ractive idSelectLocationDevices-template> form classform-horizontal> div classcontrol-group> label classcontrol-label>{{translateText(Filter:)}}/label> div classcontrols> input typetext autocompleteoff maxlength100 value{{search_filter}}> /div> /div> div classcontrol-group> div classcontrols> {{#unless is_new}} label classcheckbox> input typecheckbox checked{{hide_existing_devices}}>{{hide_label}} /label> {{/unless}} /div> /div> /form> div idadd-devices-list> table classtable table-striped> thead> tr> th stylewidth: 2%>{{translateText(Selected)}}/th> th stylewidth: 30px>/th> {{! ICON COL / CAMERA STATUS - no header text }} th stylewidth: 30px>/th> {{! ICON COL / CAMERA STATUS - no header text }} th>{{translateText(Name)}}/th> /tr> /thead> tbody> {{#each hierarchy_devices_list}} {{#if !shouldHideDevice(this.bridge.get(deviceID)) && (this.bridge.filter_display || this.bridge.hierarchy_display) }} {{#with bridge}} {{> bridge_row}} {{/with}} {{#each cameras}} {{#with (@index cameras.length - 1) as last_child, (switches.length > 0) as bridge_with_switches}} {{> camera_row}} {{/with}} {{/each}} {{#each switches}} {{#with (@index switches.length - 1) as last_parent}} {{> switch_row}} {{/with}} {{#each cameras}} {{#with (@index cameras.length - 1) as last_child}} {{> camera_row}} {{/with}} {{/each}} {{/each}} {{/if}} {{/each}} /tbody> /table> /div> {{#partial switch_row}} tr> td>/td> td classoffset-cell> div classoffset-with-line last-cell>/div> /td> td classtable-device-icon> i classfas fa-server icon-large switch-list-row-icon>/i> /td> td> {{! NAME COL }} {{managed_switch.name}} /td> /tr> {{/partial}} {{#partial camera_row}} {{#if (shouldHideCamera(this.deviceID)) && (this.filter_display || this.hierarchy_display) && !this.isParentCamera() }} tr> td> div classtext-center> input typecheckbox name{{selected_cameras}} value{{this.get(deviceID)}} {{#if !currentUser().checkDeviceRead(this) }}disabled{{/if}}> /div> /td> td class{{#if this.level ! is_under_switch}} offset-cell {{/if}} {{#if this.level is_under_bridge && bridge_with_switches}} offset-with-line {{/if}}> {{#if bridge_with_switches && this.level is_under_bridge}} div classoffset-with-line last-cell>/div> {{/if}} /td> td classoffset-cell offset-with-line>/td> td> {{! NAME COL }} {{#if this.deviceParent}} {{! child view camera }} {{this.deviceName}} ({{translateText(View)}}: {{this.deviceChildViewName}}) {{elseif this.deviceType multiview_camera}} strong>{{this.deviceName}}/strong> {{else}} {{this.deviceName}} {{/if}} /td> /tr> {{/if}} {{/partial}} {{#partial bridge_row}} tr data-esn{{this.deviceID}}> td> div classtext-center> input typecheckbox name{{selected_bridges}} value{{this.deviceID}} on-change@this.selectChildCameras(selected_bridges.includes(this.deviceID), this.deviceCameras) {{#if !currentUser().checkDeviceRead(this)}}disabled{{/if}}> /div> /td> td classtable-device-icon> {{! ICON COL }} {{#if this.health_summary}} i class{{bridge_iconsthis.health_summary.status}} icon-large bridge-list-row-icon title{{this.health_summary.message}}>/i> {{else}} i classfar fa-hdd icon-large bridge-list-row-icon>/i> {{/if}} /td> td>/td> td> {{! NAME COL }} strong>{{this.deviceName}}/strong> /td> /tr> {{/partial}} /script> !-- TEMPLATE END :: SelectLocationDevices --> !-- TEMPLATE BEGIN :: RACTIVE PARTIALS --> script typetext/ractive idpartial-mca-camera-status> {{#if camera.device_state}} {{#if camera.is_mca_camera_mounted}} i classicon-bodycam icon-bodycam-orange big-icon title{{translateText(wearable camera volume is mounted)}}> /i> {{elseif camera.is_status_streaming}} i classicon-bodycam icon-bodycam-green big-icon title{{translateText(connected wearable camera)}}> /i> {{elseif !camera.is_status_on}} !-- this should be orange --> i classicon-bodycam icon-bodycam-black big-icon title{{translateText(disconnected wearable camera)}}> /i> {{elseif !camera.is_status_cloud_registered}} i classicon-bodycam icon-bodycam-black big-icon title{{translateText(disconnected wearable camera)}}> /i> {{elseif camera.is_status_password}} i classicon-lock red big-icon title{{translateText(camera password required)}}> /i> {{else}} i classicon-bodycam icon-bodycam-black big-icon title{{translateText(disconnected wearable camera)}}> /i> {{/if}} {{/if}} /script> script typetext/ractive idLocationSelect-template> select classspan12 value{{selectedLocationId}} {{#is_disabled }}disabled{{/is_disabled}} data-testid{{data_test_id}} > {{#if is_no_location_visible }} option value> {{translateText(No location)}} /option> {{/if}} {{#locations}} option value{{this.id}}> {{this.name}} /option> {{/}} /select> /script> !-- TEMPLATE BEGIN :: LocationSingleGridViewComponent --> script typetext/ractive idLocationSingleGridViewComponent-template> div classwidget> header classwidget-title> i classicon-facetime-video>/i> {{translateText(Cameras)}} span classpull-right> div classdevices-view-toggle> div> i classfas fa-th-large {{#if ui.view grid}} active{{/if}} title{{translateText(view previews)}} on-click@this.parent.changeLocationView(grid)> /i> /div> div> i classfas fa-list-ul {{#if ui.view table}} active{{/if}} title{{translateText(view as list)}} on-click@this.parent.changeLocationView(table)> /i> /div> div> i classicon icon-sitemap {{#if ui.view hierarchy}} active{{/if}} title{{translateText(view as hierarchy table)}} on-click@this.parent.changeLocationView(hierarchy)> /i> /div> /div> /span> span classpull-right> div classpreview-grid-search> div classminimal-slider title{{translateText(preview size)}} as-sliderui.grid_size, ui.slider_start, ui.slider_stop, ui.slider_step> /div> /div> /span> /header> div classwidget-content> div classpreview-grid> {{#each devices.cameras}} {{#if filter_display && deviceType ! speaker}} div classpreview-panel stylewidth:calc({{preview_width}}% - 10px);> div classpreview-image> div classlocation-preview data-esn{{deviceID}} as-previewdeviceID, layout_settings> /div> /div> /div> {{/if}} {{/each}} /div> /div> /div> /script> !-- TEMPLATE END :: LocationSingleGridViewComponent --> !-- TEMPLATE BEGIN :: LocationSingleHierarchyViewComponent --> script typetext/ractive idLocationSingleHierarchyViewComponent-template> div classwidget> header classwidget-title> i classicon-hdd>/i> {{translateText(Bridges)}} / i classicon-facetime-video>/i> {{translateText(Cameras)}} span classpull-right> div classdevices-view-toggle> div> i classfas fa-th-large {{#if ui.view grid}} active{{/if}} title{{translateText(view previews)}} on-click@this.parent.changeLocationView(grid)> /i> /div> div> i classfas fa-list-ul {{#if ui.view table}} active{{/if}} title{{translateText(view as list)}} on-click@this.parent.changeLocationView(table)> /i> /div> div> i classicon icon-sitemap {{#if ui.view hierarchy}} active{{/if}} title{{translateText(view as hierarchy table)}} on-click@this.parent.changeLocationView(hierarchy)> /i> /div> /div> /span> /header> div classwidget-content> table classtable table-striped> thead> tr> th idcamera-table-status classclickable stylewidth:3% on-click@this.sortBy(@this.available_attributes.STATUS)>{{translateText(Status)}}/th> th idcamera-table-status-indentstylewidth:3%>/th> {{! ICON COL / CAMERA STATUS - no header text }} th idcamera-table-status-indentstylewidth:3%>/th> {{! ICON COL / CAMERA STATUS - no header text }} th idcamera-table-name classclickable on-click@this.sortBy(@this.available_attributes.DEVICE_NAME) stylewidth:25%>{{translateText(Name)}}/th> th idcamera-table-tags classclickable on-click@this.sortBy(@this.available_attributes.TAGS) stylewidth:25%>{{translateText(Tags)}}/th> th stylewidth:20%; min-width: 200px;> {{translateText(Actions)}} /th> th stylewidth: 1%>/th> /tr> /thead> tbody> {{#each sorted_hierarchy_devices_list}} {{#with bridge}} {{> bridge_row}} {{/with}} {{#each cameras}} {{#with (@index cameras.length - 1) as last_child, (switches.length > 0) as bridge_with_switches}} {{> camera_row}} {{/with}} {{/each}} {{#if bridge.filter_display || bridge.hierarchy_display}} {{#each switches}} {{#with (@index switches.length - 1) as last_parent}} {{> switch_row}} {{/with}} {{#each cameras}} {{#with (@index cameras.length - 1) as last_child}} {{> camera_row}} {{/with}} {{/each}} {{/each}} {{/if}} {{/each}} {{#if sorted_hierarchy_cameras_list.length > 0}} tr data-esnno_bridge class-children-are-hiddenui.hide_children_cameras> td colspan6 classdisabled> i classfar fa-hdd icon-large header-row-icon>/i> strong classtext-italic>{{translateText(Bridge Not Assigned to this Location)}}/strong> /td> td> button classbtn on-click@this.toggleShowDevicesUnderBridge(no_bridge) title{{translateText(show/hide children devices)}}>i classfas icon-angle-down>/i>/button> /td> /tr> {{#each sorted_hierarchy_cameras_list}} {{#with (@index sorted_hierarchy_cameras_list.length - 1) as last_child}} {{> camera_row}} {{/with}} {{/each}} {{/if}} /tbody> /table> /div> /div> {{#partial switch_row}} tr data-parent-id{{managed_switch.bridges.length ? managed_switch.bridges0 : }}> td classoffset-cell> div classoffset-with-line last-cell>/div> /td> td classtable-device-status> {{! STATUS COL }} {{#if managed_switch.state}} {{#if managed_switch.state}} i classicon-ok-circle green big-icon title{{translateText(switch state)}}>/i> {{else}} i classicon-exclamation-sign red big-icon title{{translateText(switch offline)}}>/i> {{/if}} {{/if}} /td> td classtable-device-icon> i classfas fa-server icon-large switch-list-row-icon>/i> /td> td> {{! NAME COL }} {{managed_switch.name}} /td> td>/td> td> {{! ACTIONS COL }} {{#if user.checkShowAction() }} button classbtn on-click@this.openSwitchSettings(managed_switch) title{{translateText(change switch settings)}}> i classicon-cog>/i> /button> {{/if}} /td> td>/td> /tr> {{/partial}} {{#partial camera_row}} {{#if (this.deviceStatus ATTD) && (this.filter_display || this.hierarchy_display)}} tr data-esn{{this.deviceID}} data-parent-id{{this.deviceBridges.length && !this.noAccessToBridge ? this.deviceBridges00 : no_bridge}} class-hiddenthis.deviceBridges.length && !this.noAccessToBridge && ui.hide_children_cameras > td classoffset-cell {{#if this.level is_under_bridge && bridge_with_switches}} offset-with-line {{/if}}> {{#if bridge_with_switches && this.level is_under_bridge}} div classoffset-with-line last-cell>/div> {{/if}} /td> td classoffset-cell offset-with-line> /td> td classtable-device-status {{#if this.deviceParent}}offset-cell{{/if}}> {{! STATUS COL }} {{#if !this.deviceParent}} {{! Parent/regular camera }} {{#with this as camera}} {{#if camera.deviceType mca_camera}} {{> partial-mca-camera-status}} {{elseif camera.deviceType speaker }} {{> partial-speaker-status}} {{else}} div {{#if show_preview_bubble}} classstatus-clickable {{#if camera.deviceType ! speaker}} on-click@this.showPreview(camera.deviceID, @node){{/if}}{{/if}}> {{> partial-camera-status}} /div> {{/if}} {{/with}} {{/if}} /td> td> {{! NAME COL }} {{#if this.deviceParent}} {{! child view camera }} {{#with this as camera}} span classtable-device-child-camera-status status-clickable on-click@this.showPreview(camera.deviceID, @node, true)> {{> partial-camera-status}} /span> {{/with}} {{this.deviceName}} ({{translateText(View)}}: {{this.deviceChildViewName}}) {{elseif this.deviceType multiview_camera}} strong>{{this.deviceName}}/strong> {{else}} {{this.deviceName}} {{/if}} /td> td> {{! TAGS COL }} {{#each this.deviceTags.sort()}} {{#unless excluded_tags.indexOf(this.toLowerCase()) ! -1}} span classtag>a href#/layout_tag/{{this.toLowerCase()}}> {{this.toLowerCase()}}/a>/span> {{/unless}} {{/each}} /td> td> {{! ACTIONS COL }} {{#if user.checkShowAction() }} {{#if user.checkDeviceRecordedVideoByID(this.deviceID) && this.deviceType ! multiview_camera && !this.isLiveViewOnly() && this.deviceType ! speaker}} button typebutton classbtn on-click@this.openHistory(this) title{{translateText(view camera history)}}> i classicon-time>/i> /button> {{/if}} {{#if this.hasEditPermissions() }} {{#if this.isAbleToTalkdown() }} button typebutton classbtn on-click@this.doTalkdown(this) title{{translateText(directly talk to speaker)}}> i classicon-microphone id{{this.deviceID}}-talkdown-icon styledisplay: block;>/i> /button> {{/if}} {{#if this.deviceType multiview_camera || !!composites && composites.length > 0}} button typebutton classbtn on-click@this.openCameraSettings(this) title{{translateText(change parent camera settings)}}> i classicon-cogs>/i> /button> {{#if available_child_views}} button classbtn btn-info btn-small new-child-view-btn title{{translateText(New View)}} on-click@this.openCameraSettings(camera, views)> i classicon-plus>/i> /button> {{/if}} {{elseif this.deviceType speaker && user.checkSpeakerOnlyShowSettingsByID(this.deviceID)}} button typebutton classbtn on-click@this.openCameraSettings(this) title{{translateText(change speaker settings)}}> i classicon-cog>/i> /button> {{elseif user.checkPTZOnlyShowSettingsByID(this.deviceID)}} button typebutton classbtn on-click@this.openCameraSettingsWithCustomTab(this, #csLocationTabLabel, #csLocation) title{{translateText(change camera settings)}}> i classicon-cog>/i> /button> {{/if}} {{#if user.checkDeviceVPN(this) && !this.isCloudCamera() && !this.deviceParent && !this.isAnalog()}} button typebutton on-click@this.openVPN(this) {{#if this.deviceType speaker}} title{{translateText(open VPN to speaker)}} {{else}} title{{translateText(open VPN to camera)}} {{/if}} > i classeen-icon-tunnel>/i> /button> {{/if}} {{/if}} {{#if user.checkShowCameraMetricsByID(this.deviceID) && !this.isCloudCamera() && this.deviceType ! speaker}} button typebutton classbtn on-click@this.openAnalytics(this) title{{translateText(open analytics graphs) }}> i classicon-bar-chart>/i> /button> {{/if}} {{#if user.checkEditLocationGroup() && this.deviceType ! speaker}} button typebutton classbtn on-click@this.deleteDeviceFromLocation(this, current_location) title{{translateText(remove camera from location) }}> i classicon-trash>/i> /button> {{/if}} {{/if}} /td> td>/td> /tr> {{/if}} {{/partial}} {{#partial bridge_row}} {{#if this.filter_display || this.hierarchy_display}} tr data-esn{{this.deviceID}} class-children-are-hiddenui.hide_children_cameras> td classtable-device-status> {{! STATUS COL }} {{#if this.device_state}} {{#if this.is_status_cloud_registered}} i classicon-ok-circle green big-icon title{{translateText(bridge online)}}>/i> {{else}} i classicon-exclamation-sign red big-icon title{{translateText(internet offline)}}>/i> {{/if}} {{/if}} /td> td classtable-device-icon> {{! ICON COL }} {{#if this.health_summary}} i class{{bridge_iconsthis.health_summary.status}} icon-large bridge-list-row-icon title{{this.health_summary.message}}>/i> {{else}} i classfar fa-hdd icon-large bridge-list-row-icon>/i> {{/if}} /td> td>/td> td class-text-italicthis.deviceNotAttachedToLocation> {{! NAME COL }} strong>{{this.deviceName}}/strong> /td> td class-text-italicthis.deviceNotAttachedToLocation> {{! SERIAL COL }} {{this.deviceSerial}} /td> td> {{! ACTIONS COL }} {{#if user.checkShowAction() }} {{#if user.checkBridgeUpdateByID(this.deviceID)}} button typebutton classbtn on-click@this.openBridgeSettingsWithCustomTab(this, #editBridge__locationTabLabel, #editBridge__location) title{{translateText(change bridge location settings)}}> i classicon-cog>/i> /button> {{/if}} {{#if user.checkEditLocationGroup() && !this.deviceNotAttachedToLocation}} button typebutton classbtn on-click@this.deleteDeviceFromLocation(this, current_location) title{{translateText(remove bridge from location)}}> i classicon-trash>/i> /button> {{/if}} {{/if}} /td> td> button classbtn on-click@this.toggleShowDevicesUnderBridge(this.deviceID) title{{translateText(show/hide children devices)}}>i classfas icon-angle-down>/i>/button> /td> /tr> {{/if}} {{/partial}} /script> !-- TEMPLATE END :: LocationSingleHierarchyViewComponent --> !-- TEMPLATE BEGIN :: RACTIVE PARTIALS --> script typetext/ractive idpartial-mca-camera-status> {{#if camera.device_state}} {{#if camera.is_mca_camera_mounted}} i classicon-bodycam icon-bodycam-orange big-icon title{{translateText(wearable camera volume is mounted)}}> /i> {{elseif camera.is_status_streaming}} i classicon-bodycam icon-bodycam-green big-icon title{{translateText(connected wearable camera)}}> /i> {{elseif !camera.is_status_on}} !-- this should be orange --> i classicon-bodycam icon-bodycam-black big-icon title{{translateText(disconnected wearable camera)}}> /i> {{elseif !camera.is_status_cloud_registered}} i classicon-bodycam icon-bodycam-black big-icon title{{translateText(disconnected wearable camera)}}> /i> {{elseif camera.is_status_password}} i classicon-lock red big-icon title{{translateText(camera password required)}}> /i> {{else}} i classicon-bodycam icon-bodycam-black big-icon title{{translateText(disconnected wearable camera)}}> /i> {{/if}} {{/if}} /script> script typetext/ractive idpartial-speaker-status> {{#if camera.deviceExtra && camera.speaker_status REDY}} i classicon-ok-circle green big-icon title{{translateText(speaker connected)}}> /i> {{elseif camera.deviceExtra && camera.speaker_status PASS}} i classicon-exclamation-sign orange big-icon title{{translateText(bad password)}}> /i> {{elseif camera.deviceExtra && camera.speaker_status BUSY}} i classicon-ban-circle orange big-icon title{{translateText(device is busy)}}> /i> {{else}} i classicon-remove-circle red big-icon title{{translateText(speaker disconnected)}}> /i> {{/if}} /script> !-- TEMPLATE BEGIN :: LocationSingleListViewComponent --> script typetext/ractive idLocationSingleListViewComponent-template> div classlocation-list--single-list-view row-fluid> div classwidget> header classwidget-title> i classicon-facetime-video>/i> {{translateText(Cameras)}} span classpull-right> div classdevices-view-toggle> div> i classfas fa-th-large {{#if ui.view grid}} active{{/if}} title{{translateText(view previews)}} on-click@this.parent.changeLocationView(grid)> /i> /div> div> i classfas fa-list-ul {{#if ui.view table}} active{{/if}} title{{translateText(view as list)}} on-click@this.parent.changeLocationView(table)> /i> /div> div> i classicon icon-sitemap {{#if ui.view hierarchy}} active{{/if}} title{{translateText(view as hierarchy table)}} on-click@this.parent.changeLocationView(hierarchy)> /i> /div> /div> /span> /header> div classwidget-content> table classtable table-striped> thead> tr> th classclickable on-click@this.sortBy(@this.available_attributes.DEVICE_NAME)>{{translateText(Name)}}/th> th classclickable on-click@this.sortBy(@this.available_attributes.STATUS)>{{translateText(Status)}}/th> th classclickable on-click@this.sortBy(@this.available_attributes.TAGS)>{{translateText(Tags)}}/th> th stylewidth:20%; min-width: 200px;> {{translateText(Actions)}} /th> /tr> /thead> tbody> {{#each current_location_camera_list}} {{#if filter_display}} tr> td> {{! Name column }} {{deviceName}} /td> td classno-wrap> {{! Status column }} {{#if device_state}} {{#if deviceType ! speaker}} {{#if is_status_streaming && is_status_on}} div classcamera-status-circle status-ok>/div> {{translateText(Online)}} {{elseif !is_status_on}} div classcamera-status-circle status-warning>/div> {{#if is_status_bad_analog}} {{translateText(Bad analog signal)}} {{else}} {{translateText(Off)}} {{/if}} {{else}} div classcamera-status-circle status-bad>/div> {{#if !is_status_cloud_registered}} {{translateText(Internet offline)}} {{elseif is_status_password}} {{translateText(Password required)}} {{else}} {{translateText(Offline)}} {{/if}} {{/if}} {{else}} {{#if speaker_status REDY}} div classcamera-status-circle status-ok>/div> {{translateText(Online)}} {{elseif speaker_status PASS}} div classcamera-status-circle status-warning>/div> {{translateText(bad password)}} {{elseif speaker_status BUSY}} div classcamera-status-circle status-warning>/div> {{translateText(device is busy)}} {{else}} div classcamera-status-circle status-bad>/div> {{translateText(speaker disconnected)}} {{/if}} {{/if}} {{/if}} /td> td> {{! Tags column }} {{#each deviceTags.sort()}} {{#unless excluded_tags.indexOf(this.toLowerCase()) ! -1}} span classtag>a href#/layout_tag/{{this.toLowerCase()}}> {{this.toLowerCase()}}/a>/span> {{/unless}} {{/each}} /td> td> {{! ACTIONS COL }} {{#if user.checkShowAction() }} {{#if user.checkDeviceRecordedVideoByID(this.deviceID) && this.deviceType ! multiview_camera && !this.isLiveViewOnly() && this.deviceType ! speaker}} button typebutton classbtn on-click@this.openHistory(this) title{{translateText(view camera history)}}> i classicon-time>/i> /button> {{/if}} {{#if this.hasEditPermissions() }} {{#if this.isAbleToTalkdown() }} button typebutton classbtn on-click@this.doTalkdown(this) title{{translateText(directly talk to speaker)}}> i classicon-microphone id{{this.deviceID}}-talkdown-icon styledisplay: block;>/i> /button> {{/if}} {{#if this.deviceType multiview_camera || !!composites && composites.length > 0}} button typebutton classbtn on-click@this.openCameraSettingsWithCustomTab(this, #csLocationTabLabel, #csLocation) title{{translateText(change parent camera settings)}}> i classicon-cogs>/i> /button> {{#if available_child_views}} button classbtn btn-info btn-small new-child-view-btn title{{translateText(New View)}} on-click@this.openCameraSettings(camera, views)> i classicon-plus>/i> /button> {{/if}} {{elseif this.deviceType speaker && user.checkSpeakerOnlyShowSettingsByID(this.deviceID)}} button typebutton classbtn on-click@this.openCameraSettings(this) title{{translateText(change speaker settings)}}> i classicon-cog>/i> /button> {{elseif user.checkPTZOnlyShowSettingsByID(this.deviceID)}} button typebutton classbtn on-click@this.openCameraSettingsWithCustomTab(this, #csLocationTabLabel, #csLocation) title{{translateText(change camera settings)}}> i classicon-cog>/i> /button> {{/if}} {{#if user.checkDeviceVPN(this) && !this.isCloudCamera() && !this.deviceParent && !this.isAnalog()}} button typebutton on-click@this.openVPN(this) {{#if this.deviceType speaker}} title{{translateText(open VPN to speaker)}} {{else}} title{{translateText(open VPN to camera)}} {{/if}} > i classeen-icon-tunnel>/i> /button> {{/if}} {{/if}} {{#if user.checkShowCameraMetricsByID(this.deviceID) && !this.isCloudCamera() && this.deviceType ! speaker}} button typebutton classbtn on-click@this.openAnalytics(this) title{{translateText(open analytics graphs) }}> i classicon-bar-chart>/i> /button> {{/if}} {{#if user.checkEditLocationGroup() && this.deviceType ! speaker}} button typebutton classbtn on-click@this.deleteDeviceFromLocation(this, current_location) title{{translateText(remove camera from location) }}> i classicon-trash>/i> /button> {{/if}} {{/if}} /td> /tr> {{/if}} {{/each}} /tbody> /table> /div> footer classwidget-title> div classpull-right> select idlocation-list--page-size-select classpage-size-select pull-right value{{size}} on-change@this.backToFirstPage > option>10/option> option>25/option> option>50/option> option>75/option> option>100/option> /select> label forlocation-list--page-size-select classpage-size-select--label pull-left>{{ translateText(Page size) }}:/label> /div> span classpagination-bar--wrapper> PaginationBar page{{ page }} size{{ size }} quantity{{ sorted_location_camera_list.length }}/> /span> /footer> /div> /div> /script> !-- TEMPLATE END :: LocationSingleListViewComponent --> !-- TEMPLATE BEGIN :: LocationsManage --> script typetext/ractive idLocationsManage-template> article classlocation-list row-fluid> div classwidget> header classwidget-title> i classicon-sitemap>/i> span>{{ translateText(Locations) }}/span> (span>{{ locations_length }}/span> {{ translateText(Total) }}) {{#if user.checkEditLocationGroup()}} i classicon-plus-sign add-icon pull-right orange add-location on-click@this.addLocation() title{{translateText(Add Location)}} data-testidpage-locations-header-button-add-location >/i> {{/if}} div classpull-right> div classpull-left> input classpull-left maxlength100 value{{ search_phrase }} placeholder{{ translateText(Search) }} autocompleteoff typetext > /div> /div> span classpull-right pagination-bar--wrapper> PaginationBar page{{ page }} size{{ size }} quantity{{ locations_length }}/> /span> /header> div classwidget-content clearfix> table classtable table-striped> thead> tr> th classname-col clickable on-click@this.sortBy(@this.available_attributes.NAME)>{{ translateText(Name) }}/th> th classaddress-col clickable on-click@this.sortBy(@this.available_attributes.STREET_ADDRESS)>{{translateText(Address)}}/th> th classcameras-col clickable on-click@this.sortBy(@this.available_attributes.CAMERAS)>{{translateText(Cameras)}}/th> th classbridges-col clickable on-click@this.sortBy(@this.available_attributes.BRIDGES)>{{translateText(Bridges)}}/th> th classactions-col>{{ translateText(Actions) }}/th> /tr> /thead> tbody> {{#current_list}} tr> td>a href# on-click@this.viewLocation(this)>{{.name}}/a>/td> td> {{#if @this.isSomeFieldFilled(this.address)}} {{#if this.address.streetAddress}} div>{{this.address.streetAddress}}/div> {{/if}} {{#if this.address.streetAddress2}} div>{{this.address.streetAddress2}}/div> {{/if}} {{#if this.address.city || this.address.region || this.address.postalCode}} div> {{this.address.city}}{{#if this.address.city && this.address.region}}, {{/if}}{{this.address.region}} {{this.address.postalCode}} /div> {{/if}} {{#if this.address.country}} div>{{this.address.country}}/div> {{/if}} {{else}} i>({{translateText(No address)}})/i> {{/if}} /td> td> {{#with @this.aggregateDeviceStatuses(this.resourceStatusCounts, camera) as status}} {{#if status.online || status.offline || status.off}} a href# on-click@this.viewLocation(this, table)> span classcount green {{^status.online}}hidden{{/}}>{{status.online}}/span> span classcount red {{^status.offline}}hidden{{/}}>{{status.offline}}/span> span classcount orange {{^status.off}}hidden{{/}}>{{status.off}}/span> /a> {{else}} i>({{translateText(No Cameras)}})/i> {{/if}} {{/with}} /td> td> {{#with @this.aggregateDeviceStatuses(this.resourceStatusCounts, bridge) as status}} {{#if status.online || status.offline || status.off}} a href# on-click@this.viewLocation(this, hierarchy)> span classcount green {{^status.online}}hidden{{/}}>{{status.online}}/span> span classcount red {{^status.offline}}hidden{{/}}>{{status.offline}}/span> span classcount orange {{^status.off}}hidden{{/}}>{{status.off}}/span> /a> {{else}} i>({{translateText(No Bridges)}})/i> {{/if}} {{/with}} /td> td> button typebutton on-click@this.viewLocation(this)> i classfas fa-eye>/i> /button> {{#if user.checkEditLocationGroup()}} button typebutton on-click@this.editLocation(this) title{{translateText(edit location)}}> i classicon-cog>/i> /button> button typebutton on-click@this.deleteLocation(this.id) title{{translateText(delete location)}}> i classicon-trash>/i> /button> {{/if}} /td> /tr> {{/current_list}} /tbody> /table> /div> footer classwidget-title> {{#if user.checkEditLocationGroup()}} i classicon-plus-sign add-icon pull-right orange add-location on-click@this.addLocation() title{{translateText(Add Location)}} data-testidpage-locations-footer-button-add-location >/i> {{/if}} div classpull-right> select idlocation-list--page-size-select classpage-size-select pull-right value{{size}} on-changebackToFirstPage > option>10/option> option>25/option> option>50/option> option>75/option> option>100/option> /select> label forlocation-list--page-size-select classpage-size-select--label pull-left>{{ translateText(Page size) }}:/label> /div> span classpagination-bar--wrapper> PaginationBar page{{ page }} size{{ size }} quantity{{ locations_length }}/> /span> /footer> /div> /article> /script> !-- TEMPLATE END :: LocationsManage --> !-- TEMPLATE BEGIN :: LocationStatistics --> script typetext/ractive idLocationStatistics-template> div idlocation-statistics-widget-collapse classwidget-content clearfix location-statistics-summary-container> div classlocation-statistics-chart-item {{#if bridge_count 1}}hidden{{/if}}> div classlocation-statistics-chart> div idlocation-statistics-bridge-summary>{{! highcharts element}}/div> /div> div classlocation-statistics-chart-label>{{bridge_summary_label}}/div> /div> div classlocation-statistics-chart-item {{#if camera_count 1}}hidden{{/if}}> div classlocation-statistics-chart> div idlocation-statistics-camera-summary>{{! highcharts element}}/div> /div> div classlocation-statistics-chart-label>{{camera_summary_label}}/div> /div> div classlocation-statistics-chart-item {{#if shared_camera_count 1}}hidden{{/if}}> div classlocation-statistics-chart> div idlocation-statistics-camera-shared-summary>{{! highcharts element}}/div> /div> div classlocation-statistics-chart-label>{{shared_camera_summary_label}}/div> /div> /div> /script> !-- TEMPLATE END :: LocationStatistics --> !-- TEMPLATE BEGIN :: LocationDash --> script typetext/ractive idLocationDash-template> {{#if locations.length > 0}} div classcontent-header> div classlocations-header-left> {{#if current_location}} h4 on-click@this.manageLocations()> a > {{translateText(Locations)}} /a> /h4> h4 classseparator> / /h4> select value{{location_selector_idx}} classspan4 location-select> {{#each locations}} option value{{@index}}> {{this.name}} {{#if this.address.city || this.address.street_address || this.address.region || this.address.postal_code || this.address.country}} - {{/if}} {{this.address.street_address}} {{#if this.address.city || this.address.region || this.address.postal_code}} {{this.address.city}}{{#if this.address.city && this.address.region}},{{/if}} {{this.address.region}} {{this.address.postal_code}}{{#if this.address.country}},{{/if}} {{/if}} {{this.address.country}} /option> {{/each}} /select> {{/if}} {{^current_location}} h4> {{translateText(Locations)}} /h4> {{/current_location}} /div> div classlocations-header-buttons-wrapper> {{#if current_location}} HelpLink data_linklocation_individual_page/> {{#if user.checkEditLocationGroup()}} button typebutton on-click@this.editLocation(current_location) classbtn btn-info> i classicon-cog>/i> /button> {{/if}} {{else}} HelpLink data_linklocation_main_page/> {{/if}} /div> /div> {{#if current_location}} LocationDetailView current_location{{current_location}} ui{{ui}} /> {{else}} LocationsManage locations{{locations}} user{{user}} page{{page}} size{{size}} search_phrase{{search_phrase}} /> {{/if}} {{elseif locations ! null}} div classcontent-grid-panel empty-state> div classfeature-icon-outer> div classfeature-icon-inner> i classfas fa-map-marker-alt>/i> /div> /div> h3>{{translateText(Locations)}}/h3> p> {{translateText(Group devices by location to view a custom, filtered dashboard.)}} /p> p> {{! TODO: uncomment when help file is added }} !-- a href/#> i classfas fa-external-link-alt>/i> {{translateText(Learn more)}} /a> --> /p> {{#if user.checkEditLocationGroup()}} button typebutton classbtn btn-success on-click@this.addLocation()> i classfas fa-plus>/i> {{translateText(Add Location)}} /button> {{/if}} /div> {{/if}} /script> !-- TEMPLATE END :: LocationDash --> !-- TEMPLATE BEGIN :: MassEditForm --> script typetext/ractive idMassEditForm-template> form classmass-edit-form> {{#if device_ids.length > 0}} label>{{main_label}}/label> div classmain-row> select classrow-elem value{{ selectedSetting }}> {{#each settings}} option value{{name}}>{{getLabel(name)}}/option> {{/each}} /select> {{>field_input current_form_control}} /div> div classmain-row> {{#if additional_field && current_form_control.control_value.additional_field}} {{>field_input additional_field}} {{/if}} /div> {{else}} label>{{translateText(No devices have been selected)}}/label> {{/if}} {{#partial field_input}} {{#if type text_input}} input classrow-elem typetext value{{control_value}}> {{elseif type textarea}} textarea classrow-elem row-textarea value{{control_value}}> {{elseif type select}} select classrow-elem value{{control_value}}> {{#each options}} {{#if typeof . object && . ! null}} option value{{.}}>{{getLabel(.name)}}/option> {{else}} option value{{.}}>{{getLabel(.)}}/option> {{/if}} {{/each}} /select> {{#if control_value.timepicker}} div classrow-slider as-timeRangeSliderinit_time_start_minutes, init_time_end_minutes, time_start, time_end> /div> {{elseif control_value.range && bandwidth_settings.indexOf(name) > 0}} div classrow-slider as-bandwidthSlidercontrol_value.name, control_value.range, bandwidth_slider_value> div> {{/if}} {{elseif type checkbox}} input classrow-elem typecheckbox checked{{control_value}}> {{elseif type list}} div classrow-elem> input as-tagsInput{}, @keypath + .control_value value> /div> {{elseif type slider}} div classrow-slider as-simpleSliderinit_slider_value, range, step_valuesname, @keypath + .control_value> {{/if}} {{/partial}} /form> /script> !-- TEMPLATE END :: MassEditForm --> !-- TEMPLATE BEGIN :: MassEditList --> script typetext/ractive idMassEditList-template> div classcontainer-fluid> article classrow-fluid> div classwidget mass-edit-list> header classwidget-title> {{#if device_type camera}} i classicon-facetime-video>/i> {{{translateText(Mass Edit Cameras)}}} {{else}} i classicon-hdd>/i> {{{translateText(Mass Edit Bridges)}}} {{/if}} span classpull-right> button typebutton on-clickmass_edit classbtn btn-info>{{{translateText(Mass Edit)}}}/button> button typebutton on-clickreturn classbtn btn-warning>{{{translateText(Cancel)}}}/button> /span> /header> div classwidget-content> table classtable table-striped> thead> tr> th classstatus-header>{{{translateText(Status)}}}/th> th classstatus-indent-header>/th> {{! ICON COL / CAMERA STATUS - no header text }} th classname-header>{{{translateText(Name)}}}/th> th classtags-header>{{{translateText(Tags)}}}/th> th classlocation-header> span on-click@this.set(ui.show_location, false) classdevice-location-col {{#if !ui.show_location}}device-location-col-selected{{/if}}> {{{translateText(Location)}}} /span> / span on-click@this.set(ui.show_location, true) classdevice-location-col {{#if ui.show_location}}device-location-col-selected{{/if}}> {{{translateText(Address)}}} /span> /th> th classactions-header> span>{{{translateText(Selection)}}}/span> button typebutton classbtn btn-mini select-all-btn on-click@this.toggleAllSelection(show_select_all)> {{#if show_select_all}} {{{translateText(Select All)}}} {{else}} {{{translateText(Unselect All)}}} {{/if}} /button> /th> /tr> /thead> tbody> {{#each devices}} {{#if device_type bridge || cameras.length}} {{#with bridge}} {{> bridge_row}} {{/with}} {{/if}} {{#if device_type camera}} {{#each cameras}} {{#with (@index cameras.length - 1) as last_parent, child_view_cameras.length as children}} {{#with composites as composites}} {{#with camera}} {{#if !this.deviceShare}} {{> camera_row}} {{#each child_view_cameras}} {{#with (@index child_view_cameras.length - 1) as last_child}} {{> camera_row}} {{/with}} {{/each}} {{/if}} {{/with}} {{/with}} {{/with}} {{/each}} {{/if}} {{/each}} {{#if device_type camera}} {{#grouped_shares:account}} {{#with this as shared_cameras}} {{#if isAnyDeviceVisible(shared_cameras)}} tr> td colspan6> i classicon-user header-row-icon>/i> strong>{{{translateText(Shared from)}}}: {{account}}/strong> /td> /tr> {{/if}} {{#each shared_cameras}} {{#with (@index shared_cameras.length - 1) as last_parent, child_view_cameras.length as children}} {{#with composites as composites}} {{#with this as camera}} {{> camera_row}} {{#each child_view_cameras}} {{#with (@index child_view_cameras.length - 1) as last_child}} {{> camera_row}} {{/with}} {{/each}} {{/with}} {{/with}} {{/with}} {{/each}} {{/with}} {{/grouped_shares}} {{/if}} /tbody> /table> /div> /div> /article> /div> {{#partial bridge_row}} {{#if this.filter_display || this.hierarchy_display}} tr data-esn{{this.deviceID}}> td classtable-device-status> {{! STATUS COL }} {{#if this.device_state}} {{#if this.is_status_cloud_registered}} i classicon-ok-circle green big-icon title{{{translateText(bridge online)}}}>/i> {{else}} i classicon-exclamation-sign red big-icon title{{{translateText(internet offline)}}}>/i> {{/if}} {{/if}} /td> td> {{! ICON COL }} {{#if this.health_summary}} i class{{ui.bridge_iconsthis.health_summary.status}} icon-large bridge-list-row-icon title{{this.health_summary.message}}> /i> {{else}} i classfar fa-hdd icon-large bridge-list-row-icon>/i> {{/if}} /td> td> {{! NAME COL }} strong>{{this.deviceName}}/strong> ({{this.attached_cameras_message}}{{this.available_cameras_message}}) div classred>{{this.new_bridge_warning}}/div> /td> td> {{! SERIAL COL }} {{this.deviceSerial}} /td> td> {{! LOCATION COL}} {{#if ui.show_location}} {{#if location_grouping}} {{this.deviceExtra.location_address}} {{else}} {{this.deviceLocation4}} {{/if}} {{else}} {{#if location_grouping}} {{this.deviceExtra.location_name}} {{else}} {{this.deviceLocation6}} {{! Location name}} {{/if}} {{/if}} /td> td> {{! SELECTION COL }} {{#if device_type bridge}} input checked{{this.get(deviceID) in selected_devices}} classmass-edit-selection typecheckbox on-changeselectionChange, this> {{/if}} /td> /tr> {{/if}} {{/partial}} {{#partial camera_row}} {{#if (this.deviceStatus ATTD) && (this.filter_display || this.hierarchy_display)}} tr data-esn{{this.deviceID}}> {{! TODO: Fix this stupid line logic/css}} {{#if ui.bridges_present}} {{! show connecting line from cameras to bridge }} {{#with (last_parent && ((this.deviceParent && last_child))) as last_cell}} td classoffset-cell {{#if !last_cell}} offset-with-line {{/if}}> {{#if last_cell}} div classoffset-with-line last-cell>/div> {{/if}} /td> {{/with}} {{/if}} td class{{#if this.deviceParent}}offset-cell{{/if}}> {{! STATUS COL }} {{#if !this.deviceParent}} {{! Parent/regular camera }} {{#with this as camera}} {{#if camera.deviceType mca_camera}} {{> partial-mca-camera-status}} {{else}} div {{#if ui.show_preview_bubble}} classstatus-clickable on-click@this.showPreview(camera.deviceID, @node) {{/if}}> {{> partial-camera-status}} /div> {{/if}} {{/with}} {{/if}} /td> {{#if !ui.bridges_present}} {{! offset table cells when there are no bridges }} td>/td> {{/if}} td> {{! NAME COL }} {{#if this.deviceParent}} {{! child view camera }} {{#with this as camera}} span classtable-device-child-camera-status status-clickable on-click@this.showPreview(camera.deviceID, @node, true)> {{> partial-camera-status}} /span> {{/with}} {{this.deviceName}} ({{translateText(View)}}: {{this.deviceChildViewName}}) {{elseif this.deviceType multiview_camera}} strong>{{this.deviceName}}/strong> {{else}} {{this.deviceName}} {{/if}} /td> td> {{! TAGS COL }} {{#each this.deviceTags.sort()}} {{#unless excluded_tags.indexOf(this.toLowerCase()) ! -1}} span classtag>a href#/layout_tag/{{this.toLowerCase()}}> {{this.toLowerCase()}}/a>/span> {{/unless}} {{/each}} /td> td> {{! LOCATION COL}} {{#if ui.show_location}} {{#if location_grouping}} {{this.deviceExtra.location_address}} {{else}} {{this.deviceLocation4}} {{/if}} {{else}} {{#if location_grouping}} {{this.deviceExtra.location_name}} {{else}} {{this.deviceLocation6}} {{! Location name}} {{/if}} {{/if}} /td> td> {{! SELECTION COL }} input checked{{this.get(deviceID) in selected_devices}} classmass-edit-selection typecheckbox on-changeselectionChange, this> /td> /tr> {{/if}} {{/partial}} /script> !-- TEMPLATE END :: MassEditList --> !-- TEMPLATE BEGIN :: Modals-GenericModal-template --> script typetext/ractive idModals-GenericModal-template> div classmodal-loading-wrapper styledisplay: {{#loading}}block{{else}}none{{/}};> div classmodal-loading-background>/div> div classmodal-loading-indicator>Loading please wait.../div> /div> div classmodal-header> h3>{{title}}/h3> /div> div classmodal-body> # body /> /div> div classmodal-footer> div classmessage {{footer_class}} {{^footer_show}}hidden{{/}}>{{footer_label}}/div> button typebutton classbtn {{cancel_class}} {{^cancel_show}}hidden{{/}} on-clickcancel>{{cancel_label}}/button> button typebutton classbtn {{apply_class}} {{^apply_show}}hidden{{/}} on-clickapply>{{apply_label}}/button> button typebutton classbtn {{commit_class}} {{^commit_show}}hidden{{/}} on-clickcommit>{{commit_label}}/button> /div> /script> script typetext/ractive idModals-WarningModal-template>/script> script typetext/ractive idPermissionsSection-template> div classpermissions accordion idaccordion{{section_id}} as-collapse> div classclass permissions section accordion-group> div classpermissions section-heading accordion-heading data-togglecollapse href#collapse{{section_id}}> div classpermissions section-heading-body> div classpermissions custom-checkbox> input idroot{{section_id}} classroot-checkbox typecheckbox> label on-clickrootClick forroot{{section_id}}>{{{root.name}}}/label> /div> i classpermissions toggle-icon accordion-toggle fas {{toggle_icon_class}} data-togglecollapse href#collapse{{section_id}}> /i> /div> div classpermissions section-message description {{section_msg_class}}> span idsection{{section_id}}-msg classtext-success>{{{section_msg}}}/span> /div> /div> div idcollapse{{section_id}} classaccordion-body collapse> div classpermissions section-inner accordion-inner> {{#permissions_structure}} {{>permission_list}} {{/permissions_structure}} {{#partial permission_list}} ul classpermissions sub-ul> {{#permissions}} {{>permission_list_items}} {{/permissions}} /ul> {{/partial}} {{#partial permission_list_items}} li> div classpermissions custom-checkbox> input on-changepermChange typecheckbox id{{this.name}} checked{{~/section_permissionsthis.name}}> label for{{this.name}}>{{{permission_detailsthis.name.label}}}/label> /div> div classpermissions description>{{{permission_detailsthis.name.description}}}/div> p classpermissions description text-success>{{~/permission_msgsthis.name}}/p> /li> {{#if this.permissions}} {{>permission_list}} {{/if}} {{/partial}} /div> /div> /div> /div> /script> script typetext/ractive idUserPermissions-template> {{#if has_role_enabled}} div classalert-permissions alert alert-warning> i classalert-permissions__icon icon-exclamation-sign>/i> span classalert-permissions__content>{{translateText(Roles are enabled. Use the)}} span classalert-permissions__link on-click@this.openNewWebapp()>{{translateText(enhanced web interface)}}/span> {{translateText(to manage permissions)}}./span> /div> {{else}} {{#if current_user.get(is_account_superuser) || (!current_user.account.get(is_master) && current_user.get(is_edit_admin_users))}} div classpermissions custom-checkbox> input on-changeadminChange idis_account_superuser classroot-checkbox typecheckbox checked{{is_account_superuser}}> label foris_account_superuser>{{{permission_details.is_account_superuser.label}}}/label> div classpermissions description> {{{permission_details.is_account_superuser.description}}} /div> /div> hr classpermissions separator> {{/if}} {{#available_sections:i}} PermissionsSectionComponent user_permissions{{@this.get(usr_perms)}} permission_details{{@this.get(permission_details)}} root{{root}} section_id{{i}} permissions_structure{{tree}}/> {{/available_sections}} {{/if}} /script> script typetext/ractive idAddReseller-template> ResellerDetails is_new_resellertrue/> /script> !-- TEMPLATE BEGIN :: BillingContactInfoView --> script typetext/ractive idContactInfoView-template> div classcontrol-group> label classcontrol-label> {{title}}: /label> div classcontrols> div classrow-fluid control-group> div classspan7> input typeemail maxlength60 value{{contact_email}} placeholder{{translateText(Email)}} required> /div> /div> div classrow-fluid control-group> div classspan12> div classspan6> input typetext classspan12 maxlength60 value{{contact_first_name}} placeholder{{translateText(First Name)}} required> /div> div classspan6> input typetext classspan12 maxlength60 value{{contact_last_name}} placeholder{{translateText(Last Name)}} required> /div> /div> /div> div classrow-fluid control-group> div classspan12> input value{{contact_phone}} classspan12 maxlength255 typetel placeholder{{translateText(Phone)}} {{#if is_billing}}required{{/if}} > /div> /div> div classrow-fluid control-group> div classspan12> input typetext classspan12 maxlength60 value{{contact_address1}} placeholder{{translateText(Address)}} 1 {{#if is_billing}}required{{/if}}> /div> /div> div classrow-fluid control-group> div classspan12> input typetext classspan12 maxlength60 value{{contact_address2}} placeholder{{translateText(Address)}} 2> /div> /div> div classrow-fluid control-group> div classspan12> div classspan6> input typetext classspan12 maxlength60 value{{contact_city}} placeholder{{translateText(City)}} {{#if is_billing}}required{{/if}}> /div> div classspan6> div classspan12 bfh-selectbox bfh-states data-country{{title_without_spacebars}}add-reseller-country data-state{{contact_state}}> input typehidden id{{title_without_spacebars}}add-reseller-state-value> a classbfh-selectbox-toggle span12 rolebutton data-togglebfh-selectbox href#> span classbfh-selectbox-option input-medium data-option{{contact_state}}> /span> b classcaret>/b> /a> div classbfh-selectbox-options> div rolelistbox> ul roleoption> /ul> /div> /div> /div> /div> /div> /div> div classrow-fluid control-group> div classspan12> div classspan6> input typetext classspan12 value{{contact_postal_code}} maxlength60 placeholder{{translateText(ZIP / Postal Code)}} {{#if is_billing}}required{{/if}}> /div> div classspan6> div id{{title_without_spacebars}}add-reseller-country classspan12 bfh-selectbox bfh-countries data-country{{contact_country}}> input typehidden id{{title_without_spacebars}}add-reseller-country-value> a classspan12 bfh-selectbox-toggle rolebutton data-togglebfh-selectbox href#> span classbfh-selectbox-option input-medium data-option{{contact_country}}> /span> b classcaret>/b> /a> div classbfh-selectbox-options> div rolelistbox> ul roleoption> /ul> /div> /div> /div> /div> /div> /div> /div> /div> /script> script typetext/ractive idEditReseller-template> div idedit-reseller-details>/div> /script> !-- TEMPLATE BEGIN :: ResellerList --> script typetext/ractive idResellerList-template> div classcontainer-fluid reseller-list> article classrow-fluid> div classwidget> header classwidget-title> i classicon-sitemap>/i> span>{{ translateText(Reseller Accounts) }}/span> (span>{{ reseller_quantity }}/span> {{ translateText(Total) }}) {{#if is_edit_distributor}} button typebutton on-click@this.addReseller() classbtn btn-success pull-right add-reseller> i classfas fa-plus>/i> {{ translateText(Add Reseller) }} /button> {{/if}} div classpull-right> div classpull-left> input classpull-left maxlength100 value{{ search_phrase }} placeholder{{ translateText(Search) }} autocompleteoff typetext> /div> /div> {{#if reseller_quantity > size}} span classpull-right resellers-pag-bar> PaginationBar page{{ page }} size{{ size }} quantity{{ reseller_quantity }}/> /span> {{/if}} /header> div classwidget-content clearfix> table classtable table-striped> thead> tr> th classname-col>{{ translateText(Reseller Name) }}/th> th classstatus-col>{{ translateText(Status) }}/th> th classactions-col>{{ translateText(Actions) }}/th> /tr> /thead> tbody> {{#current_list}} ResellerListItem reseller{{ . }} is_edit_distributor{{ is_edit_distributor }}/> {{/current_list}} /tbody> /table> /div> footer classwidget-title> {{#if is_edit_distributor}} button typebutton on-click@this.addReseller() classbtn btn-success pull-right add-reseller> i classfas fa-plus>/i> {{ translateText(Add Reseller) }} /button> {{/if}} {{#if reseller_quantity > size}} span classresellers-pag-bar> PaginationBar page{{ page }} size{{ size }} quantity{{ reseller_quantity }}/> /span> {{/if}} /footer> /div> /article> /div> /script> !-- TEMPLATE END :: ResellerList --> !-- TEMPLATE BEGIN :: ResellerListItem --> script typetext/ractive idResellerListItem-template> tr> td>{{ reseller.name }}/td> td>{{ status }}/td> td classactions-column> {{#if is_edit_distributor}} button classaccount-edit on-click@this.editReseller() title{{ translateText(change reseller settings) }}> i classicon-cog>/i> /button> {{/if}} {{#if !reseller.is_active}} button title{{ translateText(re-send confirmation email) }} on-click@this.resendEmail()>i classicon-envelope>/i>/button> {{/if}} /td> /tr> /script> !-- TEMPLATE END :: ResellerListItem --> script typetext/ractive idResellerDetails-template> form classform-horizontal reseller-details> div classcontrol-group> label classcontrol-label>{{translateText(Reseller Name)}}:/label> div classcontrols> div classcontrol-group> input typetext value{{name}} maxlength60 autocompleteoff placeholder{{translateText(Reseller Name)}}* required> /div> /div> /div> div classcontrol-group> label classcontrol-label>{{translateText(Reseller ID)}}:/label> div classcontrols> div classcontrol-group> input typetext value{{reseller_id}} maxlength60 autocompleteoff placeholder{{translateText(Reseller ID)}}> /div> /div> /div> {{#if is_new_reseller}} div classcontrol-group> label classcontrol-label>{{translateText(Region)}}:/label> div classcontrols> div classcontrol-group> select typetext value{{region}} required> option valueUSA>{{translateText(United States)}}/option> option valueCanada>{{translateText(Canada)}}/option> option valueEU>{{translateText(Europe)}}/option> option valueAPAC>{{translateText(Asia Pacific)}}/option> option valueUK>{{translateText(United Kingdom)}}/option> /select> /div> /div> /div> div classcontrol-group> label classcontrol-label>{{translateText(Admin User)}}:/label> div classcontrols> div classrow-fluid control-group> div classspan7> input typeemail maxlength60 value{{user_email}} placeholder{{translateText(Email)}}{{^is_new_reseller}}*{{/is_new_reseller}} required> /div> /div> div classrow-fluid control-group {{#if !user_valid_email}}hidden{{/if}}> div classspan12> div classspan6> input typetext classspan12 maxlength60 value{{user_first_name}} placeholder{{translateText(First Name)}}* required> /div> div classspan6> input typetext classspan12 maxlength60 value{{user_last_name}} placeholder{{translateText(Last Name)}}* required> /div> /div> /div> p classreseller-info>{{translateText(An Admin User can only be created during Reseller account creation.)}}/p> /div> /div> {{/if}} {{#if is_enabled_edition && distributor_available_editions}} div classcontrol-group> label classcontrol-label>{{translateText(Editions)}}:/label> div classcontrols> div classcontrol-group> select as-multiSelectavailable_edition_ids,available_edition_ids typetext multiplemultiple required > {{#each distributor_available_editions}} option value{{.id}}>{{.name}}/option> {{/each}} /select> /div> /div> /div> {{/if}} {{#if is_enabled_L2PP_billing && is_new_reseller}} ul idreseller-details--tabs classnav nav-tabs> li idtab__contact-info classactive> a href#tab-content__contact-info data-toggletab>{{translateText(Contact Info)}}/a> /li> li idtab__billing_info> a href#tab-content__billing-info data-toggletab>{{translateText(Billing Info)}}/a> /li> /ul> div classtab-content idmasterAccountSecurity-panes> div classtab-pane active idtab-content__contact-info> div idcontact_info_component> !-- here will be ContactInfoComponent --> /div> /div> div classtab-pane idtab-content__billing-info> div idbilling_contact_info_component> !-- here will be ContactInfoComponent --> /div> /div> /div> {{else}} div idcontact_info_component> !-- here will be ContactInfoComponent --> /div> {{/if}} /form> /script> script typetext/ractive idAccountAccess-template> HelpLink classpull-right data_linkuser_settings_non_admin_access/> {{#if is_admin}} p>{{{translateText(Admins always have access to all accounts.)}}}/p> {{else}} div classrow-fluid> div classspan11> p classspan10>{{{translateText(You can control this users access to individual accounts.)}}}/p> div classpull-right> p classaccess-menu-label {{#if !is_allowed_to_grant_all_accounts}}text-dimmed{{/if}}> {{{translateText(All)}}} /p> input typecheckbox nameAll Accounts classaccess-checkbox checked{{is_all_items_access}} {{#if !is_allowed_to_grant_all_accounts}}disabled{{/if}}> /div> /div> /div> div classrow-fluid> div classspan5> p classaccess-menu-label>{{{translateText(No Access)}}}/p> /div> div classspan5 offset1> p classaccess-menu-label>{{{translateText(Access)}}}/p> {{^is_new_user}} p classaccess-menu-label pull-right>{{{translateText(Temporary Access)}}}/p> {{/}} /div> div classred {{#if !is_warning_visible}}hide{{/if}} idaccount_all_access_msg> p>{{{translateText(WARNING: About to grant access of ALL accounts to this user. Any accounts added in the future will also automatically be included.)}}}/p> p>{{{translateText(This cannot be undone without disabling ALL and reassigning.)}}}/p> p>{{{translateText(Are you REALLY SURE you want to do this?)}}}/p> /div> /div> div ideditUserModal__accounts_menu>/div> {{/if}} /script> script typetext/ractive idCameraAccess-template> HelpLink classpull-right data_linkuser_settings_cameras/> {{#if is_admin}} p>{{{translateText(Admins always have access to all cameras.)}}}/p> {{else}} p>{{{translateText(You can control this users access to individual cameras.)}}}/p> div classrow-fluid> div classspan5> p classaccess-menu-label>{{{translateText(No Access)}}}/p> /div> div classspan5 offset1> p classaccess-menu-label>{{{translateText(Access)}}}/p> div classpull-right> p classaccess-menu-label {{#if !is_allowed_to_grant_all_cameras}}text-dimmed{{/if}}> {{{translateText(All)}}} /p> input typecheckbox nameAll Cameras classaccess-checkbox checked{{is_all_items_access}} {{#if !is_allowed_to_grant_all_cameras}}disabled{{/if}}> /div> /div> div classred {{#if !is_warning_visible}}hide{{/if}} idcamera_all_access_msg> p>{{{translateText(WARNING: About to grant access of ALL cameras to this user. Any cameras added in the future will also automatically be included.)}}}/p> p>{{{translateText(This cannot be undone without disabling ALL and reassigning.)}}}/p> p>{{{translateText(Are you REALLY SURE you want to do this?)}}}/p> /div> /div> div classrow-fluid ideditUserModal__cameras_menu>/div> {{/if}} /script> script typetext/ractive idGeneralAccess-template> HelpLink classpull-right data_linkuser_settings_permissions/> form classform-horizontal general-access-component> {{#if user_id}} div classcontrol-group> label classcontrol-label>{{{translateText(Disable User)}}}:/label> div classcontrols> div classrow-fluid> input typecheckbox nameoptionsRadios ideditUserModal_accountStatus valueoption1 checked{{is_disabled}}/> /div> /div> /div> {{/if}} div classcontrol-group> label classcontrol-label>{{{translateText(Access Period)}}}:/label> div classcontrols> div classrow-fluid> div classspan8> select classspan12 ideditUserModal__access_time value{{access_time}}> option valueall>{{{translateText(24 hours)}}}/option> option valuework>{{{translateText(Work hours)}}} ({{formatted_work_hours}})/option> option valuenonwork>{{{translateText(Non-Work hours)}}}/option> option valuecustom>{{{translateText(Custom)}}}/option> /select> /div> div classspan2> ({{timezone}}) /div> /div> div classrow-fluid {{#if access_time ! custom}}hide{{/if}} ideditUserModal__access_time_custom> MultipleDayTimeSelector periods{{custom_access_period}} default_period{{default_period}}/> /div> /div> /div> {{#if is_locations_feature_enabled}} div classcontrol-group> label classcontrol-label>{{{translateText(Location)}}}:/label> div classcontrols> div classrow-fluid> div classspan8> LocationSelect onSelect{{onLocationSelect}} is_no_location_visibletrue selectedLocationId{{user_model.location_id}} data_test_idmodal-user-settings-form-select-location /> /div> div classspan2 location-add-button-center> LocationAddButton beforeOpen{{hideUserModal}} onResult{{onAddNewLocation}}/> /div> /div> /div> /div> {{/if}} div classcontrol-group> label classcontrol-label>{{{translateText(Employee ID)}}}:/label> div classcontrols> div classrow-fluid> div classspan8> input typetext maxlength50 value{{employee_id}} ideditUserModal__employeeID> /div> /div> /div> /div> {{#if user_id}} div classcontrol-group> div classcontrols> button classignore btn btn-inverse iduser_ignore_{{user_id}} title{{{translateText(remove user from account)}}} typebutton> {{{translateText(Delete User)}}} /button> /div> /div> {{/if}} /form> /script> script typetext/ractive idLayoutAccess-template> HelpLink classpull-right data_linkuser_settings_layouts/> {{#if is_admin}} p>{{{translateText(Admins always have access to all layouts.)}}}/p> {{else}} p>{{{translateText(You can control this users access to layouts. Giving access to a layout automatically gives access to all cameras in the layout.)}}}/p> div classrow-fluid> div classspan5> p classaccess-menu-label>{{{translateText(No Access)}}}/p> /div> div classspan5 offset1> p classaccess-menu-label>{{{translateText(Access)}}}/p> div classpull-right> p classaccess-menu-label {{#if !is_allowed_to_grant_all_layouts}}text-dimmed{{/if}}> {{{translateText(All)}}} /p> input typecheckbox nameAll Layouts classaccess-checkbox checked{{is_all_items_access}} {{#if !is_allowed_to_grant_all_layouts}}disabled{{/if}}> /div> /div> div classred {{#if !is_warning_visible}}hide{{/if}} idlayout_all_access_msg> p>{{{translateText(WARNING: About to grant access of ALL layouts to this user. Any layouts added in the future will also automatically be included.)}}}/p> p>{{{translateText(This cannot be undone without disabling ALL and reassigning.)}}}/p> p>{{{translateText(Are you REALLY SURE you want to do this?)}}}/p> /div> /div> div classrow-fluid ideditUserModal__layouts_menu>/div> {{/if}} /script> script typetext/ractive idLocationAccess-template> HelpLink classpull-right data_linkuser_settings_locations/> {{#if is_admin}} p>{{{translateText(Admins always have access to all locations.)}}}/p> {{else}} p>{{{translateText(You can control this users access to locations.)}}}/p> div classrow-fluid> div classspan5> p classaccess-menu-label>{{{translateText(No Access)}}}/p> /div> div classspan5 offset1> p classaccess-menu-label>{{{translateText(Access)}}}/p> div classpull-right> p classaccess-menu-label> {{{translateText(All)}}} /p> input typecheckbox nameAll Locations classaccess-checkbox checked{{is_all_items_access}} > /div> /div> div classred {{#if !is_warning_visible}}hide{{/if}} idcamera_all_access_msg> p>{{{translateText(WARNING: About to grant access of ALL locations to this user. Any locations added in the future will also automatically be included.)}}}/p> p>{{{translateText(This cannot be undone without disabling ALL and reassigning.)}}}/p> p>{{{translateText(Are you REALLY SURE you want to do this?)}}}/p> /div> /div> div classrow-fluid ideditUserModal__locations_menu>/div> {{/if}} /script> !-- TEMPLATE BEGIN :: VideoSearch --> script typetext/ractive idVideoSearch-template> div classwidget> header classwidget-title> i classicon icon-search>/i> span>{{videosearch_title}}/span> div classfloat-right> HelpLink data_linkvideo_search_page/> /div> /header> div classwidget-content> iframe idvideo-search-target classwidget-content-iframe-with-header src{{videosearch_url}}>/iframe> /div> /div> /script> !-- TEMPLATE END :: VideoSearch --> !-- TEMPLATE BEGIN :: FloorPlans --> script typetext/ractive idFloorPlans-template> div classwidget> header classwidget-title> div classfloat-right> HelpLink data_linkfloor_plans_page/> /div> /header> div classwidget-content> iframe idfloor-plans-iframe classwidget-content-iframe src{{floor_plans_url}} allowfullscreen allowgeolocation>/iframe> /div> /div> /script> !-- TEMPLATE END :: FloorPlans --> !-- TEMPLATE BEGIN :: HelpCenter --> script typetext/ractive idHelpCenter-template> div classwidget> header classwidget-title> i classicon-question-circle>/i> {{translateText(Help Center)}} /header> div classwidget-content> iframe idhelp-center-iframe classwidget-content-iframe src{{help_center_url}} allowfullscreen>/iframe> /div> /div> /script> !-- TEMPLATE END :: HelpCenter --> !-- TEMPLATE BEGIN :: CLI --> script typetext/ractive idcli-template> div classwrapper> div classcli> header classcli__header> h2 classcli__title>{{ translateText(Command Line Interface) }}/h2> p classlead>{{ translateText(Select your OS) }}/p> /header> ul classcli__link-group> li classcli__link> i classicon-windows fa-windows>/i> a href{{ windows_url }} classbtn btn-info download> i classicon-download-alt>/i> {{ translateText(Windows) }} /a> /li> li classcli__link> i classicon-apple fa-apple>/i> a href{{ macos_url }} classbtn btn-info download> i classicon-download-alt>/i> {{ translateText(MacOS) }} /a> /li> li classcli__link> i classicon-linux fa-linux>/i> a href{{ linux_url }} classbtn btn-info download> i classicon-download-alt>/i> {{ translateText(Linux) }} /a> /li> /ul> section classcli__help-section> div classwidget> header classwidget-title>span>{{ translateText(Help Section) }}/span>/header> div classwidget-content cli-widget> iframe classcli__iframe src{{ cli_iframe_url }}>/iframe> span classcli_loading>img src/_images/spinning.gif />/span> /div> /div> section> /div> /div> /script> !-- TEMPLATE END :: CLI --> !-- TEMPLATE BEGIN :: LPRSearchView --> script typetext/ractive idLPRSearch-template> div classwidget> div classwidget-content> iframe idlpr-iframe classwidget-content-iframe src{{lpr_search_url}}>/iframe> /div> /div> /script> !-- TEMPLATE END :: LPRSearchView --> !-- TEMPLATE BEGIN :: LPRSummaryView --> script typetext/ractive idLPRSummaryView-template> div classwidget> div classwidget-content> iframe idlpr-iframe classwidget-content-iframe src{{lpr_summary_url}}>/iframe> /div> /div> /script> !-- TEMPLATE END :: LPRSummaryView --> !-- TEMPLATE BEGIN :: ReportsGUIView --> script typetext/ractive idReportsGUIView-template> div classwidget> header classwidget-title> div classfloat-right> HelpLink data_linkreports_page/> /div> /header> div classwidget-content> iframe idreports-gui-iframe classwidget-content-iframe src{{reports_gui_url}}>/iframe> /div> /div> /script> !-- TEMPLATE END :: ReportsGUIView --> !-- TEMPLATE BEGIN :: AIFiltering --> script typetext/ractive idAIFiltering-template> div classai-filtering-tab> div classrow-fluid> span classpull-right idcsCamera-help data_linkcamera_settings_aifiltering> i classicon-question-sign een-help-link>/i> /span> /div> {{#if alert_actions && alert_actions.length}} div classai-filtering-tab__active-action__wrapper> {{#each alert_actions: index}} AIFilteringEditorActionRow init_settings{{this}} index{{index}} recipients{{recipients}} /> {{/each}} /div> {{/if}} div class-hidden(alert_actions || ).length > 3> div classrow-fluid> div classspan2 ai-filtering-tab__row_label> {{translateText(Name of Action)}}: /div> div classspan4> input typetext classai-filtering-tab__form__input placeholder autocompleteoff required value{{alert_name}} /> /div> /div> div classrow-fluid> div classspan2 ai-filtering-tab__row_label> {{translateText(Action type)}}: /div> div classspan4> select value{{selected_alert_type}} classai-filtering-tab__form__select > option valuenotification>{{translateText(Notification)}}/option> {{#if is_immix_available}} option valueimmix>{{translateText(Immix)}}/option> {{/if}} option valuewebhook>{{translateText(Webhook)}}/option> /select> /div> /div> !-- notification alert type start--> div class-hiddenselected_alert_type ! notification> div classrow-fluid> div classspan2 ai-filtering-tab__row_label> {{translateText(Recipients)}}: /div> div classspan4 custom-multiselect ai-filtering-tab__form__multiselect-wrapper> select idai-filtering-tab__parent__recipients-input classspan12 ai-filtering-tab__form__select hidden multiplemultiple > option valueselect-all-option>All/option> {{#each recipients}} option value{{.id}}>{{.name}}/option> {{/each}} /select> /div> /div> div classrow-fluid> div classspan2 ai-filtering-tab__row_label> {{translateText(Notification type)}}: /div> div classspan4 custom-multiselect ai-filtering-tab__form__multiselect-wrapper> select idai-filtering-tab__parent__notification-type-input classspan12 ai-filtering-tab__form__select hidden multiplemultiple > option valueselect-all-option>All/option> option valueemail>{{translateText(Email)}}/option> option valuepush>{{translateText(Push notification)}}/option> /select> /div> /div> div classrow-fluid> div classspan2 ai-filtering-tab__row_label> {{translateText(Re-arm (minutes))}}: /div> div classspan4> input typenumber classai-filtering-tab__form__input placeholder min1 max65535 autocompleteoff value{{settings.re_arm_in_minutes}} /> /div> /div> div classrow-fluid> div classspan2 ai-filtering-tab__row_label> {{translateText(Max per hour)}}: /div> div classspan4> input typenumber classai-filtering-tab__form__input min1 max65535 placeholder autocompleteoff value{{settings.max_per_hour}} /> /div> /div> /div> !-- notification alert type end--> !-- immix alert type start--> div class-hiddenselected_alert_type ! immix> div classrow-fluid> div classspan2 ai-filtering-tab__row_label> {{translateText(IP adress/URL)}}: /div> div classspan4> input typetext classai-filtering-tab__form__input placeholder192.168.123.132 autocompleteoff value{{settings.url}} required /> /div> /div> div classrow-fluid> div classspan2 ai-filtering-tab__row_label> {{translateText(Email)}}: /div> div classspan4> input typeemail classai-filtering-tab__form__input placeholder{{translateText(email@domain.com)}} autocompleteoff value{{settings.email}} required /> /div> /div> div classrow-fluid> div classspan2 ai-filtering-tab__row_label> {{translateText(Port)}}: /div> div classspan4> input typenumber classai-filtering-tab__form__input placeholder443 autocompleteoff value{{settings.port}} required /> /div> /div> div classrow-fluid> div classspan2 ai-filtering-tab__row_label> {{translateText(Object Bounding Box)}}: /div> div classspan1> input typecheckbox classai-filtering-tab__form__input checked{{settings.bounding_box_enabled}} /> /div> /div> /div> !-- immix alert type end--> !-- webhook alert type start--> div class-hiddenselected_alert_type ! webhook> div classrow-fluid> div classspan2 ai-filtering-tab__row_label> {{translateText(URL)}}: /div> div classspan4> input typetext classai-filtering-tab__form__input placeholder{{translateText(domain.com)}} autocompleteoff value{{settings.url}} required /> /div> /div> /div> !-- webhook alert type end--> {{#if error_message }} div classrow-fluid> div classspan2> /div> div classspan4> p classred text-right>{{error_message}}/p> /div> /div> {{/if}} {{#if selected_alert_type }} div classrow-fluid> div classspan2> /div> div classspan4 ai-filtering-tab__form__add-action-wrapper> button typebutton classbtn btn-info on-click@this.addAction() > {{translateText(Add action)}} /button> /div> /div> {{/if}} /div> /div> /script> !-- TEMPLATE END :: UncannyLPREditor --> !-- TEMPLATE BEGIN :: AIFilteringEditorActionRow --> script typetext/ractive idAIFilteringEditorActionRow-template> div class-hiddenis_edit> div classrow-fluid > div classspan2 ai-filtering-tab__row_label> {{#if index 0}} {{translateText(Alert actions)}}: {{/if}} /div> div classspan4> div classai-filtering-tab__active-action__item> {{ init_settings.name }} /div> /div> div classspan2> button typebutton classbtn ai-filtering-tab__active-action__action on-click@this.toggleEditMode() title{{translateText(Edit action) }} > i classicon-pencil>/i> /button> button typebutton classbtn ai-filtering-tab__active-action__action on-click@this.deleteAction() title{{translateText(Remove action) }} > i classicon-trash>/i> /button> /div> /div> {{#if error_message }} div classrow-fluid> div classspan2> /div> div classspan4> p classred text-right>{{error_message}}/p> /div> /div> {{/if}} /div> div classai-filtering-tab__edit_action_wrapper class-hidden!is_edit> !-- Name of Action --> div classrow-fluid> div classspan2 ai-filtering-tab__row_label> {{translateText(Name of Action)}}: /div> div classspan4> input typetext classai-filtering-tab__form__input placeholder autocompleteoff required value{{edited_settings.name}} /> /div> div classspan2> button typebutton classbtn ai-filtering-tab__active-action__action on-click@this.toggleEditMode() title{{translateText(Edit action) }} > i classicon-pencil>/i> /button> button typebutton classbtn ai-filtering-tab__active-action__action on-click@this.deleteAction() title{{translateText(Remove action) }} > i classicon-trash>/i> /button> /div> /div> !-- notification alert type start--> div class-hiddenedited_settings.type ! notification> div classrow-fluid> div classspan2 ai-filtering-tab__row_label> {{translateText(Recipients)}}: /div> div classspan4 custom-multiselect ai-filtering-tab__form__multiselect-wrapper> select idai-filtering-tab__recipients-input classspan12 ai-filtering-tab__form__select hidden multiplemultiple > option valueselect-all-option>All/option> {{#each recipients}} option value{{.id}}>{{.name}}/option> {{/each}} /select> /div> /div> div classrow-fluid> div classspan2 ai-filtering-tab__row_label> {{translateText(Notification type)}}: /div> div classspan4 custom-multiselect ai-filtering-tab__form__multiselect-wrapper> select idai-filtering-tab__notification-type-input classspan12 ai-filtering-tab__form__select hidden multiplemultiple > option valueselect-all-option>All/option> option valueemail>{{translateText(Email)}}/option> option valuepush>{{translateText(Push notification)}}/option> /select> /div> /div> div classrow-fluid> div classspan2 ai-filtering-tab__row_label> {{translateText(Re-arm (minutes))}}: /div> div classspan4> input typenumber classai-filtering-tab__form__input placeholder min1 max65535 autocompleteoff value{{edited_settings.settings.rearmSeconds}} /> /div> /div> div classrow-fluid> div classspan2 ai-filtering-tab__row_label> {{translateText(Max per hour)}}: /div> div classspan4> input typenumber classai-filtering-tab__form__input min1 max65535 placeholder autocompleteoff value{{edited_settings.settings.maxPerHour}} /> /div> /div> /div> !-- notification alert type end--> !-- immix alert type start--> div class-hiddenedited_settings.type ! immix> div classrow-fluid> div classspan2 ai-filtering-tab__row_label> {{translateText(IP adress/URL)}}: /div> div classspan4> input typetext classai-filtering-tab__form__input placeholder192.168.123.132 autocompleteoff value{{edited_settings.settings.url}} required /> /div> /div> div classrow-fluid> div classspan2 ai-filtering-tab__row_label> {{translateText(Email)}}: /div> div classspan4> input typeemail classai-filtering-tab__form__input placeholder{{translateText(email@domain.com)}} autocompleteoff value{{edited_settings.settings.email}} required /> /div> /div> div classrow-fluid> div classspan2 ai-filtering-tab__row_label> {{translateText(Port)}}: /div> div classspan4> input typenumber classai-filtering-tab__form__input placeholder443 autocompleteoff value{{edited_settings.settings.port}} required /> /div> /div> div classrow-fluid> div classspan2 ai-filtering-tab__row_label> {{translateText(Object Bounding Box)}}: /div> div classspan1> input typecheckbox classai-filtering-tab__form__input value{{edited_settings.settings.bounding_box_enabled}} checked{{edited_settings.settings.bounding_box_enabled}} /> /div> /div> /div> !-- immix alert type end--> !-- webhook alert type start--> div class-hiddenedited_settings.type ! webhook> div classrow-fluid> div classspan2 ai-filtering-tab__row_label> {{translateText(URL)}}: /div> div classspan4> input typetext classai-filtering-tab__form__input placeholder{{translateText(domain.com)}} autocompleteoff value{{edited_settings.settings.url}} required /> /div> /div> /div> {{#if error_message }} div classrow-fluid> div classspan2> /div> div classspan4> p classred text-right>{{error_message}}/p> /div> /div> {{/if}} div classrow-fluid> div classspan6 ai-filtering-tab__form__add-action-wrapper> button typebutton classbtn btn-warning on-click@this.cancelEdit() > {{translateText(Cancel)}} /button> button typebutton classbtn btn-success on-click@this.saveEdit() > {{translateText(Save)}} /button> /div> /div> /div> /script> script typetext/ractive idEEN-Debug-Container-template> div classdebug-toolbar> div classdebug-toolbar-background>/div> /div> div on-clickbody-click class-activeshow classdebug-body-container {{^show}}hidden{{/}}> div classdebug-body-background>/div> div classdebug-body>#Body/>/div> /div> /script> script typetext/ractive idDebug-PreviewPane-Loitering-icon> a href# on-clickicon-click>Loitering/a> /script> script typetext/ractive idDebug-PreviewPane-Loitering-template> div> button on-clickfeed>{{caption}}/button> /div> /script> script typetext/ractive idDebug-PreviewPane-ObjectTracking-icon> a href# on-clickicon-click>Object Tracking/a> /script> script typetext/ractive idDebug-PreviewPane-ObjectTracking-template> div> button on-clicktrack {{disabled}}>{{caption}}/button> /div> /script> script typetext/ractive idDebug-PreviewPane-Dewarp-icon> a href# on-clickicon-click>Dewarp/a> /script> script typetext/ractive idDebug-PreviewPane-Dewarp-template> {{#partial pane_lookat}} div classpane-lookat> label>X: input typetext placeholderX Value size3 value{{x}} />/label> label>Y: input typetext placeholderY Value size3 value{{y}} />/label> label>Z: input typetext placeholderZ Value size3 value{{z}} />/label> /div> {{/partial}} div idDebug-PreviewPane-Dewarp> div on-clickpropagation stylewidth: 100%; height: 100%> button on-clickrefresh>Refresh/button> {{#each panes: idx}} {{#with lookAt}} div classpane-lookat-title>Pane {{idx}}/div> {{> pane_lookat}} {{/with}} {{/each}} Config settings: br /> textarea stylewidth: 100%; height: 225px;>{{JSON.stringify(config, null, 4)}}/textarea> /div> /div> /script> script typetext/ractive idDebug-PreviewPane-Preview-icon> a href# on-clickicon-click>Preview/a> /script> script typetext/ractive idDebug-PreviewPane-Preview-template> div> Camera ESN: {{esn}} br /> Plugins Enabled: ul> {{#each plugins}} li>{{@key}}: {{.}}/li> {{/each}} /ul> /div> /script> script typetext/ractive idDebug-PreviewPane-Websocket-icon> a href# on-clickicon-click>Websocket/a> /script> script typetext/ractive idDebug-PreviewPane-Websocket-template> div> button on-clickdrop>{{caption}}/button> /div> div> span>Websocket Distributed Tracing: {{#@global.WebApp.config.websocket_distributed_tracing_enabled}}True{{else}}False{{/}}/span> /div> /script> !-- TEMPLATE BEGIN :: Modals-GenericModal-template --> script typetext/ractive idEEN-Common-Modal-GenericModal-template> div classmodal-loading-wrapper styledisplay: {{#loading}}block{{else}}none{{/}};> div classmodal-loading-background>/div> div classmodal-loading-indicator>{{loading_label}}/div> /div> div classmodal-header> button classclose typebutton on-clickcancel>x/button> h3>{{title}}/h3> /div> div classmodal-body {{body_class}}> {{#if body_text}} p>{{{body_text}}}/p> {{/if}} # modal_body/> /div> div classmodal-footer> p classmessage {{footer_class}} {{^footer_show}}hidden{{/}}>{{footer_label}}/p> button typebutton classbtn {{cancel_class}} {{^cancel_show}}hidden{{/}} on-clickcancel>{{cancel_label}}/button> button typebutton classbtn {{apply_class}} {{^apply_show}}hidden{{/}} on-clickapply>{{apply_label}}/button> button typebutton classbtn {{commit_class}} {{^commit_show}}hidden{{/}} on-clickcommit>{{commit_label}}/button> /div> /script> script typetext/ractive idEEN-DeviceSettings-Dewarp-template> HelpLink classpull-right data_linkcamera_settings_dewarping/> form classform-horizontal> div classrow-fluid control-group> label classspan2 control-label data-testidmodal-camera-settings-tab-fisheye-input-label-orientation > {{ translateText(Orientation) }}: /label> div classspan3> select classspan10 value{{orientation}}> option valuewall>Wall/option> option valueceiling>Ceiling/option> option valuefloor>Floor/option> /select> /div> /div> !-- Start LayoutView --> div classrow-fluid> div classroi-container idEEN-DeviceSettings-Dewarp-template-layout-view>/div> /div> !-- End LayoutView --> !-- Start Viewport (Composite) Listing --> div classrow-fluid> div classspan2> h5 data-testidmodal-camera-settings-tab-fisheye-header-viewports > {{ translateText(Viewports) }} /h5> /div> div classspan10> i on-clickadd_composite, show classicon-plus-sign add-icon pull-right title{{translateText(Create new viewport)}} data-testidmodal-camera-settings-tab-fisheye-button-add-viewport >/i> /div> /div> {{edit_mode}} div idEEN-DeviceSettings-Dewarp-template-composite-listings> table classtable table-condensed table-bordered table-striped> thead> tr> th classcolumn-order data-testidmodal-camera-settings-tab-fisheye-table-header-order > {{ translateText(Order) }} /th> th class data-testidmodal-camera-settings-tab-fisheye-table-header-name > {{ translateText(Name) }} /th> th classcolumn-type data-testidmodal-camera-settings-tab-fisheye-table-header-type > {{ translateText(Type) }} /th> th classcolumn-tags data-testidmodal-camera-settings-tab-fisheye-table-header-tags > {{ translateText(Tags) }} /th> th classcolumn-options data-testidmodal-camera-settings-tab-fisheye-table-header-options > {{ translateText(Options) }} /th> /tr> /thead> tbody> tr class-hiddenshowAdd> td classcolumn-order>/td> td> input typetext value{{composite_add.name}} placeholderView 1 /> p class-hidden!compositeAddError classtext-error>{{ translateText(Please enter a valid name for the viewport) }}/p> /td> td classcolumn-type> {{>composite_select}} /td> {{#if state add}} td classcolumn-tags> input nametags as-tagsInputtags_input_settings, composite_add.tags value> /td> {{/if}} td classcolumn-options> button on-clickadd_composite, add typebutton>i classicon-check>/i>/button> button on-clickremove_composite, -1 typebutton>i classicon-trash>/i>/button> /td> /tr> {{#each sorted}} tr class{{#if ~/selected_idx @index}}selected{{/if}} on-clickshow_composite, @index> td classcolumn-order> i classicon-arrow-up on-clickpriorityUp {{#if @index 0}}disabled{{/if}} on-clickmove_up, @index>/i> i classicon-arrow-down on-clickpriorityDown on-clickmove_down, @index>/i> span classpriority>{{this.priority_text}}/span> /td> td> {{#if ~/editable_idx @index}} input typetext class-dimm-row!name value{{name}} placeholderView 1 /> {{^name.trim()}} p classtext-error>{{ translateText(Please enter a valid name for the viewport) }}/p> {{/}} {{else}} span class{{^name}}dim-row{{/}}> {{#name}} {{name}} {{else}} View 1 {{/}} /span> {{/if}} /td> td classcolumn-type> {{#if ~/editable_idx @index}} {{>composite_select}} {{else}} {{@this.getCompositeType(.)}} {{/if}} /td> {{#if ~/editable_idx @index}} td classcolumn-tags> input nametags as-tagsInputtags_input_settings, sorted. + @index + .tags value{{tags.join(,)}}> /td> {{else}} td classcolumn-tags> {{#each tags}} span classtag>{{.}}/span> {{/each}} /td> {{/if}} td classcolumn-options> button on-clickedit, @index typebutton>i class{{#if ~/editable_idx @index}}icon-check{{else}}icon-pencil{{/if}}>/i>/button> button on-clickremove_composite, @index typebutton>i classicon-trash>/i>/button> /td> /tr> {{/each}} /tbody> /table> /div> !-- EndViewport (Composite) Listing --> /form> {{#partial composite_select}} select value{{composite_type}}> option disabled selected valuefisheye> -- {{translateText(Select Viewport Type)}} -- /option> option valuesingle>{{translateText(Single)}}/option> option valuepanorama {{#if orientation ! wall}}disabled{{/if}}> {{translateText(Single Panorama)}} /option> option valuedouble {{#if orientation wall}}disabled{{/if}}> {{translateText(Double Panorama)}} /option> option valuequad> {{translateText(Quad)}} /option> /select> {{/partial}} /script> script typetext/ractive idEEN-DeviceSettings-Extension-template> form classform-horizontal extension> {{#if is_device_features_analytic}} p classred text-center> {{translateText(Warning: Accuracy of device analytics is dependent on device. Contact your device manufacturer for further details.)}} /p> {{/if}} div classschema-form stylemargin-bottom: 10px;>/div> {{#if hasAlert()}} div classrow-fluid control-group> table classtable table-condensed table-bordered table-striped> tbody> tr> td class> AnalyticAlertEditor payload{{alert_payload}} roiid{{region.id}} who{{region.who}} when{{region.when ? region.when : *}} throttle_type{{region.throttle_type ? region.throttle_type : 2}} account_alert_modes{{accountAlertModes()}} throttle_seconds{{region.throttle_seconds ? region.throttle_seconds : 15 * 60}} throttle_hour_limit{{region.throttle_hour_limit ? region.throttle_hour_limit : 5}} users{{getUserList()}} mode{{region.mode ? region.mode : all}} template#ExtensionAlertEditor-template level{{region.level ? region.level : 1}}> /AnalyticAlertEditor> /td> /tr> /tbody> /table> /div> {{/if}} /form> /script> !-- TEMPLATE BEGIN :: AnalyticAlertEditor --> script typetext/ractive idExtensionAlertEditor-template> tr> td colspan{{colspan}}> div classspan7 alert-column> div classspan12 styledisplay:none> label classspan5 foreditCamera__motion_alert> {{ translateText(Enable Alerts) }}: /label> div classspan1> input typecheckbox classalert-active on-clicksave checked{{active}} twowaytrue/> /div>/div> div classspan12> label classspan5 for> {{ translateText(When) }}: /label> div classrow-fluid control-group span7> select classspan12 when value{{*, work, nonwork.indexOf(when) > -1 ? when : custom}} twowaytrue> option value*>{{ translateText(24 hours) }}/option> option valuework>{{ translateText(Work hours)}}({{getWorkHours()}})/option> option valuenonwork>{{ translateText(Non-work hours) }}/option> option valuecustom>{{ translateText(Custom hours) }}/option> /select> /div> /div> {{#if *, work, nonwork.indexOf(when) -1}} TimeSlider start{{when_start}} end{{when_end}} on-changesave>/TimeSlider> {{/if}} div classspan12> label classspan5 foreditCamera__analytic_alert_throttle_none> {{ translateText(Re-arm) }}: /label> div classspan7> div classspan12> div classspan6> select classspan12 throttle_type value{{throttle_type}} twowaytrue> option value1> {{ translateText(Immediate) }} /option> option value2> {{ translateText(After) }} /option> option value3> {{ translateText(After quiet for) }} /option> /select> /div> div classspan6> div classspan6> input typenumber min1 styleheight:25px; classspan12 throttle_seconds maxlength5 name{{throttle_type}} value{{parseInt(throttle_type) 1 ? : typeof throttle_seconds number ? throttle_seconds / 60 : 15 }} twowaytrue {{#if (parseInt(throttle_type) 1)}}disabled{{/if}}> /div> div classspan6 stylemargin-top:5px>{{ translateText(minutes) }}/div> /div> /div> /div> /div> div classspan12> label classspan5 foranalytic_alert_throttle_hour_limit> {{ translateText(Max Per Hour) }}: /label> div classspan7 styletext-align: left> input typetext styleheight: 25px; classspan3 throttle_hour_limit maxlength3 twowaytrue nameeditCamera__analytic_alert_throttle_hour_limit value{{typeof throttle_hour_limit number ? throttle_hour_limit: }}> /div> /div> /div> div classspan4 alert-column> div classspan12 styledisplay:none>/div> div classspan12 css-motion-alert-who> label classspan4 foreditCamera__analytic_alert_who> {{ translateText(Who) }}: /label> div classspan7> select classspan12 analytic_alert_who multiplemultiple> option valueselect-all-option>{{ translateText(All) }}/option> {{#each users}} option value{{ this.get(id) }}>{{this.getDisplayName(true)}}/option> {{/each}} /select> /div> /div> div classspan12 css-motion-alert-mode> label classspan4 foranalytic_alert_mode> {{ translateText(Mode) }}: /label> div classspan7> select classspan12 analytic_alert_mode multiplemultiple> option valueselect-all-option>{{ translateText(All) }}/option> {{#each account_alert_modes}} option value{{ this }}>{{ this }}/option> {{/each}} /select> /div> /div> div classspan12> label classspan4 foreditCamera__analytic_alert_level> {{ translateText(Level) }}: /label> div classspan4> select classspan12 level nameanalytic_alert_level value{{level}} twowaytrue> option value1>{{ translateText(High) }}/option> option value2>{{ translateText(Low) }}/option> /select> /div> /div> /div> /td> /tr> /script> !-- TEMPLATE END :: AnalyticAlertEditor --> script typetext/ractive idEEN-DeviceSettings-InputOutput-template> {{#each entries}} form classform-horizontal> div classrow-fluid control-group> label classspan3 control-label data-testidmodal-camera-settings-tab-io-{{mode}}-enable-camera > {{#if mode modes.INPUT}} {{translateText(Enable Camera Input)}} {{elseif mode modes.OUTPUT}} {{translateText(Enable Camera Output)}} {{/if}} {{@index + 1}} /label> div classspan1> input typecheckbox checked{{config.enable}}/> /div> label classspan1 control-label data-testidmodal-camera-settings-tab-io-{{mode}}-name > {{translateText(Name:)}} /label> div classspan2> input classspan12 typetext value{{config.username}}/> /div> div classspan2> select classspan12 value{{config.polarity}}> {{#if mode modes.INPUT}} option valueactive_high>{{translateText(Normally Open)}}/option> option valueactive_low>{{translateText(Normally Closed)}}/option> {{elseif mode modes.OUTPUT}} option valuenormally_open>{{translateText(Normally Open)}}/option> option valuenormally_closed>{{translateText(Normally Closed)}}/option> {{/if}} {{@index + 1}} /select> /div> div classspan3> div classspan4> {{#if mode modes.OUTPUT}} button classbtn-info on-clickhandleTestButton data-index{{@index}} data-name{{name}} data-testidmodal-camera-settings-tab-io-{{mode}}-test-button > Test /button> b> {{#if output_statuses@index}} {{output_statuses@index}} {{/if}} /b> {{/if}} /div> div classspan5> a classbtn-link collapsed data-togglecollapse data-target#{{getIOAdvancedCollapseID(this)}}> div classio-setting-collapse-icon-container> i classfas icon-angle-up io-setting-collapse-icon if-not-collapsed>/i> i classfas icon-angle-down io-setting-collapse-icon if-collapsed>/i> /div> /a> /div> div classspan3> {{#if @index 0}} {{#if mode modes.INPUT}} span classpull-right idcsCamera-help data_linkcamera_settings_input> i classicon-question-sign een-help-link>/i> /span> {{elseif mode modes.OUTPUT}} span classpull-right idcsCamera-help data_linkcamera_settings_output> i classicon-question-sign een-help-link>/i> /span> {{/if}} {{/if}} /div> /div> /div> div id{{getIOAdvancedCollapseID(this)}} classrow-fluid collapse> div classspan12 pull-right io-setting-add-right-padding io-setting-add-bottom-padding> div classrow-fluid control-group> label classspan4 control-label data-testidmodal-camera-settings-tab-io-{{mode}}-trigger-video-recording > {{translateText(Trigger Video Recording)}} /label> div classspan1> input typecheckbox checked{{config.record}}/> /div> label classspan2 control-label io-setting-add-left-padding data-testidmodal-camera-settings-tab-io-{{mode}}-icon-on-screen > {{translateText(Icon On Screen)}} /label> div classspan2 io-setting-add-left-padding> input typecheckbox checked{{config.alert}}/> div classspan10 float-right io-setting-sub-right-margin> div classbtn-group> button classbtn dropdown-toggle span12 io-setting-control-dropdown io-setting-icon-{{config.x_alert_icon}} {{!config.alert ? disabled : }} data-toggledropdown> span classcaret io-setting-control-dropdown-caret>/span> /button> ul data-entry-index{{@index}} on-clickhandleIconChange classdropdown-menu io-setting-icon-dropdown> {{#if mode modes.INPUT}} li data-icon-iddot classio-setting-control io-setting-icon-dot>/li> li data-icon-iddoor classio-setting-control io-setting-icon-door>/li> li data-icon-idbell classio-setting-control io-setting-icon-bell>/li> {{elseif mode modes.OUTPUT}} li data-icon-idsiren classio-setting-control io-setting-icon-siren>/li> li data-icon-idlight classio-setting-control io-setting-icon-light>/li> li data-icon-iddoor classio-setting-control io-setting-icon-door>/li> li data-icon-idbell classio-setting-control io-setting-icon-bell>/li> {{/if}} /ul> /div> /div> /div> div classspan3> /div> /div> div classrow-fluid control-group> {{#each this.alerts}} IOAlertEditor roiid{{../../name}} who{{this.who}} when{{this.when}} throttle_type{{this.throttle_type}} throttle_seconds{{this.throttle_seconds}} throttle_hour_limit{{this.throttle_hour_limit}} mode{{this.mode}} level{{this.level}} > /IOAlertEditor> {{/each}} /div> /div> /div> /form> {{/each}} /script> !-- TEMPLATE BEGIN :: IOAlertEditor --> script typetext/ractive idIOAlertEditor-template> div classrow-fluid control-group> label classspan4 control-label data-testidmodal-camera-settings-tab-io-{{io_mode}}-input-label-alert-enable > {{ translateText(Enable Alerts) }} /label> div classspan1> input typecheckbox classalert-active on-clicksave checked{{is_active}} twowayfalse/> /div> div classspan7> /div> /div> div class{{alerts_active ? : hide}}> div classrow-fluid control-group> div classspan2> /div> label classspan2 control-label data-testidmodal-camera-settings-tab-io-{{io_mode}}-input-label-when > {{ translateText(When) }}: /label> div classspan2> select on-changesave classwhen span12 value{{when}} twowaytrue> option value*>{{ translateText(24 hours) }}/option> option valuework>{{ translateText(Work hours)}} ({{getWorkHours()}})/option> option valuenonwork>{{ translateText(Non-work hours) }}/option> option valuecustom>{{ translateText(Custom hours) }}/option> /select> {{#if when custom}} TimeSlider start{{when_start}} end{{when_end}} on-changesave>/TimeSlider> {{/if}} /div> label classspan2 control-label data-testidmodal-camera-settings-tab-io-{{io_mode}}-input-label-who > {{ translateText(Who) }}: /label> div classspan4> div classspan12 css-motion-alert-who> select on-changesave classmotion_alert_who multiplemultiple> option valueselect-all-option>All/option> {{#each users}} option value{{ this.get(id) }}>{{this.getDisplayName(true)}}/option> {{/each}} /select> /div> /div> /div> div classrow-fluid control-group> div classspan2> /div> label classspan2 control-label data-testidmodal-camera-settings-tab-io-{{io_mode}}-input-label-rearm > {{ translateText(Re-arm) }}: /label> div classspan2> div classspan12> div classspan6> select on-changesave classspan12 throttle_type value{{throttle_type}} twowaytrue> option value1> {{ translateText(Immediate) }} /option> option value2> {{ translateText(After) }} /option> option value3> {{ translateText(After quiet for) }} /option> /select> /div> div classspan6> div classspan10> input typenumber on-changesave min1 classspan12 throttle_seconds maxlength5 name{{throttle_type}} value{{parseInt(throttle_type) 1 ? : typeof throttle_seconds number ? throttle_seconds / 60 : 15 }} twowayfalse {{#if (parseInt(throttle_type) 1)}}disabled{{/if}}> /div> div classspan2 io-alert-minutes>{{ translateText(minutes) }}/div> /div> /div> /div> label classspan2 control-label data-testidmodal-camera-settings-tab-io-{{io_mode}}-input-label-mode > {{ translateText(Mode) }}: /label> div classspan4> div classspan12 css-motion-alert-mode> select on-changesave classspan12 motion_alert_mode multiplemultiple> option valueselect-all-option>All/option> {{#each account_alert_modes}} option value{{ this }}>{{ this }}/option> {{/each}} /select> /div> /div> /div> div classrow-fluid control-group> div classspan2> /div> label classspan2 control-label io-alert-max-per-hour data-testidmodal-camera-settings-tab-io-{{io_mode}}-input-label-max-per-hour > {{ translateText(Max Per Hour) }}: /label> div classspan2> input on-changesave typenumber classspan6 throttle_hour_limit min0 max999 maxlength3 twowayfalse nameeditCamera__motion_alert_throttle_hour_limit value{{throttle_hour_limit}}> /div> label classspan2 control-label data-testidmodal-camera-settings-tab-io-{{io_mode}}-input-label-level > {{ translateText(Level) }}: /label> div classspan4> select on-changesave classspan12 level namemotion_alert_level value{{level}} twowayfalse> option value1>{{ translateText(High) }}/option> option value2>{{ translateText(Low) }}/option> /select> /div> /div> /div> /script> !-- TEMPLATE END :: IOAlertEditor --> !-- TEMPLATE BEGIN :: InputOutputControls --> script typetext/ractive idInputOutputControls-template> {{#each entries.inputs}} i data-type{{this.x_type}} data-index{{this.x_index}} data-name{{this.name}} data-username{{this.config.username}} data-mode{{this.x_mode}} title{{this._x_username}} classio-control-input-toggle {{this.config._x_alert_icon}} on-click_userIconClick>/i> {{/each}} {{#each entries.outputs}} i data-type{{this.x_type}} data-index{{this.x_index}} data-name{{this.name}} data-username{{this.config.username}} data-mode{{this.x_mode}} title{{this._x_username}} classio-control-output-toggle {{this.config._x_alert_icon}} on-click_userIconClick>/i> {{/each}} /script> !-- TEMPLATE END :: InputOutputControls --> !-- jquery version 1.8.3 --> !-- underscore version 1.13.7 --> !-- backbone version 1.0.0 --> !-- jquery-ui version 1.9.2 --> script srchttps://cdn.jsdelivr.net/npm/@json-editor/json-editor@latest/dist/jsoneditor.min.js>/script> script src_js/build/posthog_4bb71761.js>/script> script srchttps://www.gstatic.com/firebasejs/9.22.0/firebase-app-compat.js>/script> script srchttps://www.gstatic.com/firebasejs/9.22.0/firebase-remote-config-compat.js>/script> script typemodule src_js/build/firebase_7b378998.js>/script> script src_js/build/app-dependencies_e7de753a.js>/script> script> var current_user_data; var branding new BrandingSupport(); branding.updateBrandByDomain(); /* * Hook into xhr so that we can change the host to the right cluster regarless of brand domain * or reseller->sub situations */ var origOpen XMLHttpRequest.prototype.open; XMLHttpRequest.prototype.open function() { try { var url arguments1; // any call to /api/v2 without a host, we should go direct to cluster if(window.userList && url.match(/^\/api\/v2\/drivefs/) && location.host.match(/\.eagleeyenetworks\.com$/)) { var new_host userList.getCurrentUser().account.get(default_cluster); url location.protocol + \/\/ + new_host + . + location.host.split(.).slice(1).join(.) + url; this.withCredentials true; } arguments1 url; } catch (err) { console.warn(non-fatal issue hijacking xhrRequest, err); } origOpen.apply(this, arguments); }; // track viewport size var analytics new SiteAnalytics(); var viewport_size { width: Math.max(document.documentElement.clientWidth, window.innerWidth || 0), height: Math.max(document.documentElement.clientHeight, window.innerHeight || 0) }; analytics.collectByGoogleAnalytics(Viewport Size, viewport_size, Main); /script> script src_js/build/backbone.combined_83c4bc55.js>/script> script src_js/build/bootstrap-plugins_42461d22.js>/script> script src_js/build/bootstrap-formhelpers_4dd67b5c.js>/script> script src_js/build/jquery-plugins_2b143dc5.js>/script> !-- postfix.html --> /body>/html>
Subdomains
Date
Domain
IP
c001.eagleeyenetworks.com
2025-09-22
192.40.4.23
c021.eagleeyenetworks.com
2026-02-06
216.245.89.136
c012.eagleeyenetworks.com
2018-08-10
192.40.5.150
c024.eagleeyenetworks.com
2025-07-06
167.94.39.41
cluster.c024.eagleeyenetworks.com
2025-06-22
167.94.39.41
c005.eagleeyenetworks.com
2026-02-06
192.40.5.58
media.c005.eagleeyenetworks.com
2025-08-12
208.81.97.90
edge.c005.eagleeyenetworks.com
2025-07-04
192.40.5.58
badger.c005.eagleeyenetworks.com
2026-02-06
192.40.5.58
tunnels.c005.eagleeyenetworks.com
2025-08-12
192.40.5.58
c015.eagleeyenetworks.com
2025-07-25
208.81.96.5
c026.eagleeyenetworks.com
2025-11-30
167.94.228.4
cluster.c026.eagleeyenetworks.com
2025-09-22
167.94.228.4
cluster.c027.eagleeyenetworks.com
2026-02-06
167.94.229.77
api.eagleeyenetworks.com
2025-07-09
208.81.97.30
cilvicorp.eagleeyenetworks.com
2025-06-18
192.40.5.58
scs.eagleeyenetworks.com
2025-07-14
192.40.5.58
bis.eagleeyenetworks.com
2025-06-11
192.40.5.58
completeit.eagleeyenetworks.com
2026-02-06
192.40.5.58
www.eagleeyenetworks.com
2025-12-31
192.40.4.23
View on OTX
|
View on ThreatMiner
Please enable JavaScript to view the
comments powered by Disqus.
Data with thanks to
AlienVault OTX
,
VirusTotal
,
Malwr
and
others
. [
Sitemap
]