heartbeat.js 2.95 KB
/*
 * ADOBE CONFIDENTIAL
 *
 * Copyright 2015 Adobe Systems Incorporated
 * All Rights Reserved.
 *
 * NOTICE:  All information contained herein is, and remains
 * the property of Adobe Systems Incorporated and its suppliers,
 * if any.  The intellectual and technical concepts contained
 * herein are proprietary to Adobe Systems Incorporated and its
 * suppliers and may be covered by U.S. and Foreign Patents,
 * patents in process, and are protected by trade secret or copyright law.
 * Dissemination of this information or reproduction of this material
 * is strictly forbidden unless prior written permission is obtained
 * from Adobe Systems Incorporated.
 */
(function(window, document, $, i18n) {
    'use strict';

    // ==================================================================================================
    // TODO: replace with the foundation-frame refresh feature once this is available (see GRANITE-12998)
    // ==================================================================================================

    var POLLING_INTERVAL = 30000; // ms
    var HEARTBEAT_SELECTOR = '.screens-Device-status';

    function updateDevicesStatus($devices) {
        return function(data) {
            $devices.each(function(idx, tr) {
                var itemId = tr.dataset.foundationCollectionItemId;
                var $newHeartbeat = $(data).find('[data-foundation-collection-item-id="' + itemId + '"]');
                $(tr).find(HEARTBEAT_SELECTOR).replaceWith($newHeartbeat.find(HEARTBEAT_SELECTOR));
            });
        };
    }

    function pollDisplayDashboard() {
        var $devices = $('.screens-DeviceCollection .screens-Device');
        var url = '/libs/screens/dcc/content/dashboard/display/jcr:content/content/items/devices/content/list';
        var offset = 0;
        var limit = $devices.length;
        var suffix = $('.screens-DeviceCollection').data('foundationCollectionId');

        $.ajax(url + '.' + offset + '.' + limit + '.html' + suffix)
            .always(schedulePoll)
            .done(updateDevicesStatus($devices));
    }

    function pollDeviceDashboard() {
        var url = '/libs/screens/dcc/content/dashboard/device/jcr:content/content/items/activity/content/deviceactivity.html';
        var suffix = $('.screens-Device').data('device-path');

        $.ajax(url + suffix)
            .always(schedulePoll)
            .done(function(data) {
                $('.screens-DeviceActivity').replaceWith(data);
            });
    }

    function schedulePoll() {
        var isDisplayDashboard = !!document.querySelector('.screens-DisplayDashboard');
        if (isDisplayDashboard) {
            window.setTimeout(pollDisplayDashboard, POLLING_INTERVAL);
        }

        var isDeviceDashboard = !!document.querySelector('.screens-DeviceDashboard');
        if (isDeviceDashboard) {
            window.setTimeout(pollDeviceDashboard, POLLING_INTERVAL);
        }
    }

    $(schedulePoll);

}(window, document, Granite.$, Granite.I18n));