displayresolutionrequired.js 3.27 KB
/*
 * ADOBE CONFIDENTIAL
 *
 * Copyright 2017 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.
 */

/*
 * Workaround for CQ-4197617
 */

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

    var SELECT_RESOLUTION_SELECTOR = '.screens-DisplayDialog-selectResolution';
    var CUSTOM_RESOLUTION_FORM_FIELDS_SELECTOR = '.screens-DisplayDialog-customResolutionFormField';

    // covers initally injected Elements
    $(document).on('foundation-contentloaded', function(e) {
        onToggleSelected($(SELECT_RESOLUTION_SELECTOR, e.target));
    });

    // covers lazily injected Elements
    $(document).on('selected', SELECT_RESOLUTION_SELECTOR, function(e) {
        onToggleSelected($(this));
    });

    function onToggleSelected(el) {
        el.each(function(i, element) {
            Coral.commons.ready(element, function(component) { // eslint-disable-line max-nested-callbacks
                toggleCustomResolution(component);
                component.on('change', function() { // eslint-disable-line max-nested-callbacks
                    toggleCustomResolution(component);
                });
            });
        });
    }

    function toggleCustomResolution(component) {
        var toggleables = $(CUSTOM_RESOLUTION_FORM_FIELDS_SELECTOR);
        if (component.selectedItem.value === '') {
            toggleables.each(function(index, toggleable) {
                $(toggleable).adaptTo('foundation-toggleable').show();
            });
        } else {
            toggleables.each(function(index, toggleable) {
                $(toggleable).adaptTo('foundation-toggleable').hide();
            });
        }
    }

    $(window).adaptTo('foundation-registry').register('foundation.adapters', {
        type: 'foundation-toggleable',
        selector: CUSTOM_RESOLUTION_FORM_FIELDS_SELECTOR,
        adapter: function(el) {
            var toggleable = $(el);
            return {
                isOpen: function() {
                    return toggleable.adaptTo('foundation-field').isRequired();
                },
                show: function(anchor) {
                    toggleable.adaptTo('foundation-field').setDisabled(false);
                    toggleable.adaptTo('foundation-field').setRequired(true);
                    toggleable.adaptTo('foundation-validation').checkValidity();
                    toggleable.parent().show();
                },
                hide: function() {
                    toggleable.adaptTo('foundation-field').setDisabled(true);
                    toggleable.adaptTo('foundation-field').setRequired(false);
                    toggleable.adaptTo('foundation-validation').checkValidity();
                    toggleable.parent().hide();
                }
            };
        }
    });

}(document, Granite.$));