Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Table of Contents
maxLevel3
classts-toc-btf
printablefalse
Html macro
<style>
    .ts-toc-btf {
        float: right;
        position: fixed;
        width: inherit;
        right: 0px;
        top: 300px;
        background: rgba(229, 232, 232, 0.5);
        overflow-wrap: normal;
        visibility: hidden;
    }
     
    .navigation ul {
      list-style-type: none;
      padding: 0px;
    }
 
    .navigation>ul {
        padding: 10px 15px 10px 10px;
    }
     
    .navigation ul li {
      white-space: nowrap;
    }
 
    .navigation ul li a {
      padding: 0 0 0 10px;
    }
 
 
    .navigation ul li ul li a {
      padding: 0 0 0 20px;
    }
 
 
    .navigation ul li ul li ul li a {
      padding: 0 0 0 30px;
    }
 
    .navigation ul li li {
      white-space: nowrap;
    }
     
    .navigation ul li span.active a {
      font-weight: bold;
      color: #222222;
      border-left: 2px solid #222222;
    }
     
    .navigation ul li a:link,
    .navigation ul li a:visited,
    .navigation ul li a:active,
    .navigation ul li a:hover,
    .navigation ul li a:focus {
      color: #4a72c2;
      text-decoration: none;
    }
     
</style>
 
 
<script type="text/javascript">
    /*!
     * Scrollspy Plugin
     * Author: r3plica
     * Licensed under the MIT license
     */
    ; (function ($, window, document, undefined) {
        // Add our plugin to fn
        $.fn.extend({
            // Scrollspy is the name of the plugin
            scrollspy: function (options) {
                // Define our defaults
                var defaults = {
                    namespace: 'scrollspy',
                    activeClass: 'active',
                    animate: false,
                    duration: 1000,
                    offset: 0,
                    container: window,
                    replaceState: false
                };
     
                // Add any overriden options to a new object
                options = $.extend({}, defaults, options);
                
                var add = function (ex1, ex2) {
                    return parseInt(ex1, 10) + parseInt(ex2, 10);
                };
     
                // Find our elements
                var findElements = function (links) {
                    var elements = [];
     
                    // Loop through the links
                    for (var i = 0; i < links.length; i++) {
                        var link = links[i];
     
                        // Get our hash
                        var hash = $(link).attr("href");
     
                        // Store our has as an element
                        var element = $("[id='" + hash.replace('#','') + "']");
     
                        // If we have an element matching the hash
                        if (element.length > 0) {
     
                            // Get our offset
                            var top = Math.floor(element.offset().top),
                                bottom = top + Math.floor(element.outerHeight());
     
                            // Add to our array
                            elements.push({ element: element, hash: hash, top: top, bottom: bottom });
                        }
                    }

                    return elements;
                };
     
                // Find our link from a hash
                var findLink = function (links, hash) {
                    for (var i = 0; i < links.length; i++) {
                        var link = $(links[i]);
     
                        // If our hash matches the link href
                        if (link.attr("href") === hash) {
     
                            // Return the link
                            return link;
                        }
                    }
                };
     
                // Reset classes on our elements
                var resetClasses = function (links) {
     
                    // For each link
                    for (var i = 0; i < links.length; i++) {
     
                        // Get our current link
                        var link = $(links[i]);
     
                        // Remove the active class
                        link.parent().removeClass(options.activeClass);
                    }
                };
     
                // Find the nearest heading whether at the top of the screen or off the screen
                var getActiveHeadingHash = function (elements) {
     
                    // Get the position and store in an object
                    var position = {
                        top: add($(this).scrollTop(), Math.abs(options.offset)),
                        left: $(this).scrollLeft()
                    };
     
                    // Store the nearest heading off the top of the page
                    var nearest = null;
     
                    // Loop through our elements
                    for (var i = 0; i < elements.length; i++) {
     
                        // Get our current item
                        var current = elements[i];
     
                        // If we are within the boundaries of our element return that link
                        if (position.top >= current.top && position.top <= current.bottom)
                            return current.hash;
                        // Otherwise, return the closest of the top of the screen--they are in order
                        else if (position.top > current.bottom) {
                            nearest = current.hash;
                        }
                    }
     
                    return nearest;
                };
     
                // Store last fired scroll event
                var scrollArea = '';
     
                // For each scrollspy instance
                return this.each(function () {
     
                    // Declare our global variables
                    var element = this,
                        container = $(options.container);
     
                    // Get our objects
                    var links = $(element).find('a');
     
                    // Loop through our links
                    for (var i = 0; i < links.length; i++) {
     
                        // Get our current link
                        var link = links[i];
     
                        // Bind the click event
                        $(link).on("click", function (e) {
     
                            // Get our target
                            var target = $(this).attr("href"),
                                $target = $(target);
     
                            // If we have the element
                            if ($target.length > 0) {
     
                                // Get it's scroll position
                                var top = add($target.offset().top, options.offset);
     
                                // If animation is on
                                if (options.animate) {
     
                                    // Animate our scroll
                                    $('html, body').animate({ scrollTop: top }, options.duration);
                                } else {
     
                                    // Scroll to our position
                                    window.scrollTo(0, top);
                                }
                                 
                                location.hash = target;
     
                                // Prevent our link
                                e.preventDefault();
                            }
                        });
                    }
     
                    // Set links
                    resetClasses(links);
     
                    // Get our elements (targets of the navigation links)
                    var elements = findElements(links);
     
                    var trackChanged = function() {
     
                        // Create a variable for our link
                        var link;
     
                        // get our element
                        var hash = getActiveHeadingHash(elements);
     
                        // Get the link
                        link = findLink(links, hash);
     
                        // If we have a link
                        if (link) {
                            // If we have an onChange function
                            if (options.onChange && (scrollArea !== hash)) {
     
                                // Fire our onChange function
                                options.onChange(current.element, $(element), position);
     
                                // set scrollArea
                                scrollArea = hash;
     
                            }
     
                            // Update url
                            if (options.replaceState) {
                                history.replaceState( {}, '', '/' + hash );
                            }
     
                            // Reset the classes on all other link
                            resetClasses(links);
     
                            // Add our active link to our parent
                            link.parent().addClass(options.activeClass);
                        }
     
                        // If we don't have a link and we have a exit function
                        if (!link && (scrollArea !== 'exit') && options.onExit) {
     
                            // Fire our onChange function
                            options.onExit($(element), position);
     
                            // Reset the classes on all other link
                            resetClasses(links);
     
                            // set scrollArea
                            scrollArea = 'exit';
     
                            // Update url
                            if (options.replaceState) {
                                history.replaceState( {}, '', '/' );
                            }
     
                        }
                    };
     
                    // Add a listener to the window
                    container.bind('scroll.' + options.namespace, function () {
                        trackChanged();
                    });
     
                    $(document).ready(function (e) {
                        trackChanged();
                    });
                });
            }
        });
    })(jQuery, window, document, undefined);
 
    var getMenuWidth = function() {
        // Need to get the padding of the main window since menu goes to edge of window
        var mainPadding = ($('#main').innerWidth() - $('#main').width()) / 2;
        var parentWidth = AJS.$(".ts-toc-btf").parent().parent().outerWidth();
        return parentWidth + mainPadding;
    };
     
    AJS.$(window).load(function(){
 
        var content_top = AJS.$('#content').offset().top;
        var menu_width = getMenuWidth();
        var max_width = AJS.$('.ts-toc-btf').width();
 
        AJS.$(".ts-toc-btf")
            .addClass('navigation')
            .attr('id', 'nav')
            .css({'top': content_top, 'visibility': 'visible', 'width': menu_width, 'max-width': max_width});
        AJS.$("#nav").scrollspy();
    });
 
    AJS.$(window).resize(function() {
        var menu_width = getMenuWidth();
 
        AJS.$(".ts-toc-btf")
            .css({'width': menu_width});
    });
</script>
Widget Connector
overlayyoutube
_templatecom/atlassian/confluence/extra/widgetconnector/templates/youtube.vm
width300px
urlhttps://www.youtube.com/watch?v=C_p8aSqvAno
height200px

Viewing Demographic Events

Monitoring Recent Demographics Events in the Monitor Panel

The OpCenter Monitor panel allows you to view events as they happen. You can specify which cameras to view, and what types of events are displayed. Use the following steps to view recent events generated by the Demographics plug-in:

  1. In 3VR OpCenter, click the Monitor tab to go to the Monitor panel.

  2. Click camera numbers to select the cameras associated with the Demographics plug-in.

  3. Click the arrow below the camera selector to open the event type drop-down menu.

  4. Select [ ]Demographics to display events of that type and click OK.

  5. The Monitor panel will update to display only Demographics events from the selected cameras.
    To view an event, click the event card. The event card will turn blue, indicating it is currently selected.

About Demographics Event Cards

A Demographics event will be generated in OpCenter whenever a person is identified on a camera bound to the Demographics plugin.
Demographics event cards contain pictures, video, and information about the person. They appear in the Monitor panel for recent
events and in the Search panel for search results.

Each Demographics event card contains the following information in storyboard view:

  1. Thumbnail image

  2. Camera number and name

  3. Time of event

  4. Event type

  5. Length of event

  6. Demographics zone name (or “None”)

  7. Estimated age

  8. Gender with additional information displayed on mouse-over:

    1. Date of event

Viewing Demographic Events

When a Demographics event card is selected, the video clip associated with the event will play back in the video player. Details about the event may be viewed in the event editor, located below the video player.
In addition to the tabs available for all event types, such as Notes and Images, Demographics events include the following information in the Details tab:

  • Demographics Zone Name: The name of the Demographics zone generating the
    event (or “None”)

  • Age Group: The estimated age of the person

  • Gender: The gender of the person

Searching for Demographic Events

Use the Search panel to find Demographics events recorded days, weeks, or months ago.

  1. To go to the Search panel, click the Search tab.

  2. Define the dates, days of the week, and time ranges to search for events.

  3. Under Cameras, select one or more cameras bound to the Demographics plug-in.

  4. Under Events, select [ ]Demographics to search for events generated by the Demographics plug-in.

  5. The following options are available when searching for Demographics events:

    • Click ( )All Demographics to search for all Demographics events generated during the specified time range.

    • To search using Demographics properties, click ( )Specify.

      • Type some text in the Demographics Zone box to locate events in a specific zone.