push-channel.js 2.26 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.
 */

/* globals Granite */

(function(window, document, $) {
    'use strict';

    var ACTIVATOR = '.screens-dcc-actions-Channel-pushchannel-activator';
    var SELECTOR_CHANNEL_DETAILS = '.screens-Channel-offline';

    var DATA_CONFIG_PATH = 'configpath';
    var DATA_CHANNEL_PATH = 'channelpath';
    var DATA_IS_OFFLINE = 'isoffline';

    var URL_SELECTOR_UPDATE = 'channel';

    function requestUpdate(configPath, channelPath) {
        var url = Granite.HTTP.externalize(configPath + '.' + URL_SELECTOR_UPDATE + '.json');

        return $.ajax(url, {
            type: 'POST',
            data: {
                channel: channelPath
            }
        });
    }

    function push() {
        var configPath = $(SELECTOR_CHANNEL_DETAILS).data(DATA_CONFIG_PATH);
        var channelPath = $(SELECTOR_CHANNEL_DETAILS).data(DATA_CHANNEL_PATH);

        var ui = $(window).adaptTo('foundation-ui');
        var content = $('.foundation-content').adaptTo('foundation-content');
        var waitTicker;

        var reload = function() {
            waitTicker.clear();
            content.refresh();
        };

        waitTicker = ui.waitTicker(
            Granite.I18n.get('Update Offline Content'),
            Granite.I18n.get('Generating offline package(s) for your channel.<br/>This might take up to a few minutes. Please wait…')
        );

        requestUpdate(configPath, channelPath).always(reload);
    }

    $(document).on('ready', function() {
        $(ACTIVATOR).prop('disabled', !$(SELECTOR_CHANNEL_DETAILS).data(DATA_IS_OFFLINE));
        $(document).on('click', ACTIVATOR, push);
    });

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