; (function ($) { "use strict"; wp.customize.controlConstructor['blogsy-design-options'] = wp.customize.Control.extend({ ready: function () { 'use strict'; var control = this, setting = control.setting.get(), range, range_input, value, blogsy_range_input_number_timeout, popup_content = control.container.find('.popup-content'); // Range controls. control.container.find('.blogsy-range-wrapper').each( function () { var $this = $(this); if (!_.isUndefined($this.rangeControl)) { $this.rangeControl({ id: control.params.id + '-' + $this.data('option-id'), option: $this.data('option-id'), value: setting[$this.data('options-id')], responsive: control.params.responsive, change: function () { control.update_value(); } }); } } ); // Change the text value control.container.find('input.blogsy-range-input').on( 'change keyup', function () { control.autocorrect_range_input_number($(this), 1000, blogsy_range_input_number_timeout); } ).on( 'focusout', function () { control.autocorrect_range_input_number($(this), 0, blogsy_range_input_number_timeout); } ); // Visibility deps. control.container.on( 'change', '[data-option="background-type"], [data-option="gradient-type"]', function () { var field = $(this).attr('data-option'); control.container.find('[data-dep-field="' + field + '"]').hide(); control.container.find('[data-dep-field="' + field + '"][data-dep-value="' + $(this).val() + '"]').show(); } ); control.container.find('[data-option="background-type"], [data-option="gradient-type"]').trigger('change'); // Changes. control.container.on( 'color-updated', '.blogsy-color-control', function () { control.update_value(); } ); control.container.on( 'change', '.blogsy-select-wrapper', function () { control.update_value(); } ); // Box shadow type radio buttons control.container.on( 'change', 'input[data-option="box-shadow-type"]', function () { control.update_value(); } ); // Advanced panel. control.container.find('.popup-link').on( 'click', function () { popup_content.toggleClass('hidden'); $(this).toggleClass('active'); $(this).siblings('.reset-defaults').toggleClass('active'); // Close the panel on outside click. $('body').on('click', outside_click_close); } ); var outside_click_close = function (e) { if (!$(e.target).closest('.customize-save-button-wrapper').length && !control.container.has($(e.target).closest('.popup-link')).length && !control.container.has($(e.target).closest('.popup-content')).length && !popup_content.hasClass('hidden') && !$(e.target).closest('.reset-defaults').length) { popup_content.addClass('hidden'); control.container.find('.popup-link').removeClass('active'); control.container.find('.reset-defaults').removeClass('active'); $('body').off('click', outside_click_close); } }; // Hide unnecessary controls. control.container.find('.background-image-advanced').hide(); // Background-Repeat. control.container.on( 'change', '.background-repeat select', function () { control.update_value(); } ); // Background-Size. control.container.on( 'change click', '.background-size input', function () { control.update_value(); } ); // Background-Attachment. control.container.on( 'change click', '.background-attachment input', function () { control.update_value(); } ); // Background-Image. control.container.on( 'click', '.background-image-upload-button', function (e) { $('body').off('click', outside_click_close); var image = wp.media({ multiple: false, title: control.params.l10n.image.select_image, button: { text: control.params.l10n.image.use_image }, }).open().on( 'select', function () { // This will return the selected image from the Media Uploader, the result is an object. var uploadedImage = image.state().get('selection').first(), uploadedImageJSON = uploadedImage.toJSON(), previewImage, imageUrl, imageID, imageWidth, imageHeight, preview, removeButton; if (!_.isUndefined(uploadedImageJSON.sizes)) { if (!_.isUndefined(uploadedImageJSON.sizes.medium)) { previewImage = uploadedImageJSON.sizes.medium.url; } else if (!_.isUndefined(uploadedImageJSON.sizes.thumbnail)) { previewImage = uploadedImageJSON.sizes.thumbnail.url; } else if (!_.isUndefined(uploadedImageJSON.sizes.full)) { previewImage = uploadedImageJSON.sizes.full.url; } else { previewImage = uploadedImageJSON.url; } } else { previewImage = uploadedImageJSON.url; } imageUrl = uploadedImageJSON.url; imageID = uploadedImageJSON.id; imageWidth = uploadedImageJSON.width; imageHeight = uploadedImageJSON.height; // Show extra controls if the value has an image. if ('' !== imageUrl) { control.container.find('.background-image-advanced').show(); control.container.find('.advanced-settings').removeClass('hidden').addClass('up'); } control.container.find('[data-option="background-image"]').val(imageUrl); control.container.find('[data-option="background-image-id"]').val(imageID); control.update_value(); preview = control.container.find('.placeholder, .thumbnail'); removeButton = control.container.find('.background-image-upload-remove-button'); if (preview.length) { preview.removeClass().addClass('thumbnail thumbnail-image').html(''); } if (removeButton.length) { removeButton.show(); } setTimeout( function () { $('body').on('click', outside_click_close); }, 100 ); } ); e.preventDefault(); } ); control.container.on( 'click', '.background-image-upload-remove-button', function (e) { var preview, removeButton; e.preventDefault(); control.container.find('[data-option="background-image"]').val(''); control.container.find('[data-option="background-image-id"]').val(''); control.update_value(); preview = control.container.find('.placeholder, .thumbnail'); removeButton = control.container.find('.background-image-upload-remove-button'); // Hide unnecessary controls. control.container.find('.background-image-advanced').hide(); control.container.find('.advanced-settings').addClass('hidden').removeClass('up'); if (preview.length) { preview.removeClass().addClass('placeholder').html(control.params.l10n.image.placeholder); } if (removeButton.length) { removeButton.hide(); } } ); control.container.on( 'click', '.advanced-settings', function (e) { $(this).toggleClass('up'); control.container.find('.background-image-advanced').toggle(); } ); // Spacing field. // Linked button control.container.on( 'click', '.blogsy-spacing-linked', function () { // Set up variables var $this = $(this); // Remove linked class $this.closest('ul').find('.spacing-input').removeClass('linked'); // Remove class $this.parent('.spacing-link-values').removeClass('unlinked'); } ); // Unlinked button control.container.on( 'click', '.blogsy-spacing-unlinked', function () { // Set up variables var $this = $(this); // Remove linked class $this.closest('ul').find('.spacing-input').addClass('linked'); // Remove class $this.parent('.spacing-link-values').addClass('unlinked'); } ); // Values linked inputs control.container.on( 'input', '.linked input', function () { var $val = $(this).val(); $(this).closest('.spacing-input').siblings('.linked').find('input').val($val).change(); } ); // Store new inputs control.container.on( 'change input', '.spacing-input input', function () { control.update_value(); } ); // Reset default. control.container.find('.reset-defaults').on( 'click', function () { var item, option_id; control.container.find('[data-option]').each( function () { item = $(this); option_id = item.data('option'); if ('background-size' === option_id || 'background-attachment' === option_id || 'type' === option_id) { item.prop('checked', false); if ((option_id in control.params.default) && control.params.default[option_id] === item.val()) { item.prop('checked', true); } } else { item.val(control.params.default[item.data('option')]).trigger('change'); } } ); control.container.find('.background-image-upload-remove-button').click(); control.update_value(); } ); }, // Update value. update_value: function () { var self = this, value = {}, option; self.container.find('[data-option]').each( function () { option = $(this).data('option'); if ('background-size' === option || 'background-attachment' === option || 'type' === option) { value[option] = $(this).is(':checked') ? $(this).val() : value[option]; } else { value[option] = $(this).val(); } } ); self.setting.set(value); }, autocorrect_range_input_number: function (input_number, timeout) { var range_input = input_number, range = range_input.parent().find('input[type="range"]'), value = parseFloat(range_input.val()), reset = parseFloat(range.find('.blogsy-reset-range').attr('data-reset_value')), step = parseFloat(range_input.attr('step')), min = parseFloat(range_input.attr('min')), max = parseFloat(range_input.attr('max')); clearTimeout(timeout); timeout = setTimeout( function () { if (isNaN(value)) { range_input.val(reset); range.val(reset).trigger('change'); return; } if (step >= 1 && value % 1 !== 0) { value = Math.round(value); range_input.val(value); range.val(value).trigger('change'); } if (value > max) { range_input.val(max); range.val(max).trigger('change'); } if (value < min) { range_input.val(min); range.val(min).trigger('change'); } }, timeout ); range.val(value).trigger('change'); this.update_value(); } }); })(jQuery);