Current File : /var/www/kurt6690.2978.w2868/site96340/wp-content/themes/hopeui/assets/js/src/customizer.js
(function (jQuery) {
    "use strict";

    /**
     * Store Object of section Which has tab Controls.
     * @type {Object}
     */
    let customizerSectionTab =
    {
        breadcrumb: 'breadcrumb_section_tabs',
        header_layout: 'header_section_tabs',
    };

    jQuery.fn.extend({
        toggleOnCondition: function (condition) {
            if (condition)
                this.show();
            else
                this.hide();
        }
    });

    let control_condition = (tab_switching = false) => {
        /*-----------------------------------
       Controls Conditions
       -------------------------------------*/
        let controls = wp.customize.settings.controls;
        for (let controlKey in controls) {
            if (controls[controlKey].condition != null) {
                for (let condition in controls[controlKey].condition) {
                    wp.customize(condition).bind((controlVal => {
                        wp.customize.control(controls[controlKey].settings.default).container.toggleOnCondition(controls[controlKey].condition[condition] == controlVal)
                    }));

                    if (!tab_switching && !wp.customize.control(controls[controlKey].settings.default).container.is(":visible")) {
                        wp.customize.control(controls[controlKey].settings.default).container.toggleOnCondition(false)
                    } else if (!tab_switching) {
                        wp.customize.control(controls[controlKey].settings.default).container.toggleOnCondition(controls[controlKey].condition[condition] == wp.customize(condition)._value)
                    }
                }
            }
        }
    }

    jQuery(document).ready(function() {

        jQuery('.slider-custom-control').each(function () {
            var sliderValue = jQuery(this).find('.customize-control-slider-value');
            var newSlider = jQuery(this).find('.slider');
            var sliderMinValue = parseFloat(newSlider.attr('slider-min-value'));
            var sliderMaxValue = parseFloat(newSlider.attr('slider-max-value'));
            var sliderStepValue = parseFloat(newSlider.attr('slider-step-value'));
            let sliderReset = jQuery(this).find('.slider-reset');
            newSlider.slider({
                value: sliderValue.val(),
                min: sliderMinValue,
                max: sliderMaxValue,
                step: sliderStepValue,
                slide: function (e, ui) {
                    sliderValue.val(ui.value).trigger('change');
                },
                change: (e, ui) => {
                    sliderValue.val(ui.value).trigger('change');
                }
            });
            sliderReset.on('click', (e) => {
                sliderValue.val(sliderReset.attr('slider-reset-value')).trigger('change');
            });

        });

        /*-----------------------------------
        Select-2 Dropdown
        -------------------------------------*/
        jQuery('.customize-control-dropdown-select2').each(function () {
            jQuery('.customize-control-select2').select2({
                minimumResultsForSearch: -1
            });
        });
        jQuery(".customize-control-select2").on("change", function () {
            var select2Val = jQuery(this).val();
            jQuery(this).parent().find('.customize-control-dropdown-select2').val(select2Val).trigger('change');
        });


        /*-----------------------------------
        Section Tabs
        -------------------------------------*/
        jQuery('.customize-control-hopeui_php_section_tabs .hopeui_style-section-tabs .hopeui_style-section-tab-item').on('click', (e) => {
            jQuery(e.currentTarget).addClass('checked').siblings().removeClass('checked');

        });

        for (var key in customizerSectionTab) {

            let sectionControls = wp.customize.section(key).controls();
            let defaultTab;
            sectionControls.forEach(control => {
                if (control.params.type == "hopeui_php_section_tabs") {
                    defaultTab = control.params.default;
                    control.setting.set(defaultTab)
                    return
                }
                if (control.params.tab != defaultTab) {
                    control.container.toggleOnCondition(false);
                }
            })
            wp.customize.control(customizerSectionTab[key]).setting.bind(val => {
                sectionControls.forEach(control => {
                    if (control.templateSelector == "customize-control-hopeui_php_section_tabs-content" || control.params.tab === undefined) return;
                    control.container.toggleOnCondition(control.params.tab == val)
                    control_condition(true);
                });
            });
        }

        control_condition();
        /*-----------------------------------
        Toggle Button
        -------------------------------------*/
        jQuery('.toggle_button_button_control input[type=checkbox]').on('change', (val) => {
            jQuery(val.target).parent().toggleClass('active')
        });

        /*-----------------------------------
        Two Dimension Control
        -------------------------------------*/
        jQuery('.hopeui_style-twodimension_input .button-decrement').on('click', function () {
            let input = jQuery(this).parent().find('input');
            input.val(Number(input.val()) - 1).change();
        });
        jQuery('.hopeui_style-twodimension_input .button-increment').on('click ', function () {
            let input = jQuery(this).parent().find('input');
            input.val(Number(input.val()) + 1).change();
        });

        jQuery('.hopeui_style-twodimension_input .number-input-text-box,.hopeui_style-twodimension_input .customize-control-select2').on('change', function () {
            let hidden_input = jQuery(this).parents('.hopeui_style-twodimension_input').find('.hopeui_style-twodimension-val');
            let twodimension = jQuery(this).parents('.hopeui_style-twodimension_input');
            let val = {
                height: twodimension.find('.hopeui_style-height').val(),
                width: twodimension.find('.hopeui_style-width').val(),
                unit: twodimension.find('.hopeui_style-unit').val()
            }
            hidden_input.val(JSON.stringify(val)).change();
        });

        /*-----------------------------------
       Loader
       -------------------------------------*/
        // Section Specific Page Load
        wp.customize.section('loader', function (section) {
            section.expanded.bind(function (isExpanded) {
                wp.customize.previewer.send('show_loader', isExpanded);
            });
        });

        /*-----------------------------------
        404
        -------------------------------------*/
        wp.customize.section('fourzerofour', function (section) {
            section.expanded.bind(function (isExpanded) {
                isExpanded && wp.customize.previewer.previewUrl(wp.customize.settings.url.home + 'index.php/404');
            });
        });
        wp.customize.section('page_settings', function (section) {
            section.expanded.bind(function (isExpanded) {
                isExpanded && wp.customize.previewer.previewUrl(wp.customize.settings.url.home + 'index.php/?s=h');
            });
        });



        jQuery('.hopeui_style-typography-dropdown-button').on('click', function () {
            jQuery(this).parents('.hopeui_style-typography').next().toggleClass('active').slideToggle();
        });
        /**
     * Googe Font Select Custom Control
     *
     */

        jQuery('.google_fonts_select_control select').each(function (i, obj) {
            if (jQuery(obj).hasClass('google-fonts-list')) {
                jQuery(obj).select2();
            } else {
                jQuery(obj).select2({
                    minimumResultsForSearch: -1
                });
            }
        });

        jQuery('.google-fonts-list').on('change', function () {
            var elementRegularWeight = jQuery(this).parents('.google_fonts_select_control').find('.google-fonts-regularweight-style');
            var elementItalicWeight = jQuery(this).parents('.google_fonts_select_control').find('.google-fonts-italicweight-style');
            var elementBoldWeight = jQuery(this).parents('.google_fonts_select_control').find('.google-fonts-boldweight-style');
            var selectedFont = jQuery(this).val();
            var customizerControlName = jQuery(this).attr('control-name');
            var elementItalicWeightCount = 0;
            var elementBoldWeightCount = 0;

            // Clear Weight/Style dropdowns
            elementRegularWeight.empty();
            elementItalicWeight.empty();
            elementBoldWeight.empty();
            // Make sure Italic & Bold dropdowns are enabled
            elementItalicWeight.prop('disabled', false);
            elementBoldWeight.prop('disabled', false);

            // Get the Google Fonts control object

            var bodyfontcontrol = _wpCustomizeSettings.controls[customizerControlName];

            // Find the index of the selected font
            var indexes = jQuery.map(bodyfontcontrol.hopeui_scriptfontslist, function (obj, index) {
                if (obj.family === selectedFont) {
                    return index;
                }
            });
            var index = indexes[0];

            // For the selected Google font show the available weight/style variants
            if (bodyfontcontrol.hopeui_scriptfontslist[index].variants.includes('italic')) {
                elementRegularWeight.append(
                    jQuery('<option></option>').val('italic').html('italic')
                );
                elementRegularWeight.append(
                    jQuery('<option></option>').val('normal').html('normal')
                );
            } else {

                elementRegularWeight.append(
                    jQuery('<option></option>').val('normal').html('normal')
                );
            }
            jQuery.each(bodyfontcontrol.hopeui_scriptfontslist[index].variants, function (val, text) {

                if (text.indexOf("italic") >= 0) {
                    elementItalicWeight.append(
                        jQuery('<option></option>').val(text).html(text)
                    );
                    elementItalicWeightCount++;
                } else {
                    elementBoldWeight.append(
                        jQuery('<option></option>').val(text).html(text)
                    );
                    elementBoldWeightCount++;
                }
            });

            if (elementItalicWeightCount == 0) {
                elementItalicWeight.append(
                    jQuery('<option></option>').val('').html('Not Available for this font')
                );
                elementItalicWeight.prop('disabled', 'disabled');
            }
            if (elementBoldWeightCount == 0) {
                elementBoldWeight.append(
                    jQuery('<option></option>').val('').html('Not Available for this font')
                );
                elementBoldWeight.prop('disabled', 'disabled');
            }

            // Update the font category based on the selected font
            jQuery(this).parents('.google_fonts_select_control').find('.google-fonts-category').val(bodyfontcontrol.hopeui_scriptfontslist[index].category);

            hopeui_scriptGetAllSelects(jQuery(this).parents('.google_fonts_select_control'));
        });

        jQuery('.google_fonts_select_control select,.google_fonts_select_control input').on('input', function () {
            hopeui_scriptGetAllSelects(jQuery(this).parents('.google_fonts_select_control'));
        });



    });

}(jQuery));

function hopeui_scriptGetAllSelects(jQueryelement) {
    let textSizeElement = jQueryelement.find('.google-fonts-size'), textSize;
    textSize = textSizeElement.val().includes('px') ? textSizeElement.val() : textSizeElement.val() + textSizeElement.attr('data-unit');
    var selectedFont = {
        font: jQueryelement.find('.google-fonts-list').val(),
        regularweight: jQueryelement.find('.google-fonts-regularweight-style').val(),
        boldweight: jQueryelement.find('.google-fonts-boldweight-style').val(),
        size: textSize,
        category: jQueryelement.find('.google-fonts-category').val()
    };

    // Important! Make sure to trigger change event so Customizer knows it has to save the field
    jQueryelement.find('.customize-control-google-font-selection').val(JSON.stringify(selectedFont)).trigger('change');
}