File "custom-controls.js"
Full Path: /home/pumpbmko/public_html/themes/pure-portfolio/assets/js/custom-controls.js
File size: 7.43 KB
MIME-type: text/plain
Charset: utf-8
jQuery(document).ready(function($) {
"use strict";
/**
* ============================================
* Sortable Repeater Custom Control
* ============================================
*/
// Update the values for all our input fields and initialise the sortable repeater
$('.sortable_repeater_control').each(function() {
// If there is an existing customizer value, populate our rows
var defaultValuesArray = $(this).find('.customize-control-sortable-repeater').val().split(',');
var numRepeaterItems = defaultValuesArray.length;
if (numRepeaterItems > 0) {
// Add the first item to our existing input field
$(this).find('.repeater-input').val(defaultValuesArray[0]);
// Create a new row for each new value
if (numRepeaterItems > 1) {
var i;
for (i = 1; i < numRepeaterItems; ++i) {
SortableRepeaterAppendRow($(this), defaultValuesArray[i]);
}
}
}
});
// Make our Repeater fields sortable
$(this).find('.sortable_repeater.sortable').sortable({
update: function(event, ui) {
SortableRepeaterGetAllInputs($(this).parent());
}
});
// Remove item starting from it's parent element
$('.sortable_repeater.sortable').on('click', '.customize-control-sortable-repeater-delete', function(event) {
event.preventDefault();
var numItems = $(this).parent().parent().find('.repeater').length;
if (numItems > 1) {
$(this).parent().slideUp('fast', function() {
var parentContainer = $(this).parent().parent();
$(this).remove();
SortableRepeaterGetAllInputs(parentContainer);
})
} else {
$(this).parent().find('.repeater-input').val('');
SortableRepeaterGetAllInputs($(this).parent().parent().parent());
}
});
// Add new item
$('.customize-control-sortable-repeater-add').click(function(event) {
event.preventDefault();
SortableRepeaterAppendRow($(this).parent());
SortableRepeaterGetAllInputs($(this).parent());
});
// Refresh our hidden field if any fields change
$('.sortable_repeater.sortable').change(function() {
SortableRepeaterGetAllInputs($(this).parent());
})
// Add https:// to the start of the URL if it doesn't have it
$('.sortable_repeater.sortable').on('blur', '.repeater-input', function() {
var url = $(this);
var val = url.val();
if (val && !val.match(/^.+:\/\/.*/)) {
// Important! Make sure to trigger change event so Customizer knows it has to save the field
url.val('https://' + val).trigger('change');
}
});
// Append a new row to our list of elements
function SortableRepeaterAppendRow($element, defaultValue = '') {
var newRow = '<div class="repeater" style="display:none"><input type="text" value="' + defaultValue + '" class="repeater-input" placeholder="https://" /><span class="dashicons dashicons-sort"></span><a class="customize-control-sortable-repeater-delete" href="#"><span class="dashicons dashicons-no-alt"></span></a></div>';
$element.find('.sortable').append(newRow);
$element.find('.sortable').find('.repeater:last').slideDown('slow', function() {
$(this).find('input').focus();
});
}
// Get the values from the repeater input fields and add to our hidden field
function SortableRepeaterGetAllInputs($element) {
var inputValues = $element.find('.repeater-input').map(function() {
return $(this).val();
}).toArray();
// Add all the values from our repeater fields to the hidden field (which is the one that actually gets saved)
$element.find('.customize-control-sortable-repeater').val(inputValues);
// Important! Make sure to trigger change event so Customizer knows it has to save the field
$element.find('.customize-control-sortable-repeater').trigger('change');
}
/**
* ============================================
* Multi Input Custom control
* ============================================
*/
function customize_multi_write($element){
var customize_multi_val = '';
$element.find('.customize_multi_fields .customize_multi_single_field').each(function(){
customize_multi_val += $(this).val()+'|';
});
$element.find('.customize_multi_value_field').val(customize_multi_val.slice(0, -1)).change();
}
function customize_multi_add_field(e){
e.preventDefault();
var $control = $(this).parents('.customize_multi_input');
$control.find('.customize_multi_fields').append('<div class="set"><input type="text" value="" class="customize_multi_single_field" /><a href="#" class="customize_multi_remove_field dashicons dashicons-no-alt">X</a></div>');
}
function customize_multi_single_field() {
var $control = $(this).parents('.customize_multi_input');
customize_multi_write($control);
}
function customize_multi_remove_field(e){
e.preventDefault();
var $this = $(this);
var $control = $this.parents('.customize_multi_input');
$this.parent().remove();
customize_multi_write($control);
}
$(document).on('click', '.customize_multi_add_field', customize_multi_add_field)
.on('keyup', '.customize_multi_single_field', customize_multi_single_field)
.on('click', '.customize_multi_remove_field', customize_multi_remove_field);
$('.customize_multi_input').each(function(){
var $this = $(this);
var multi_saved_value = $this.find('.customize_multi_value_field').val();
if(multi_saved_value.length>0){
var multi_saved_values = multi_saved_value.split("|");
$this.find('.customize_multi_fields').empty();
$.each(multi_saved_values, function( index, value ) {
$this.find('.customize_multi_fields').append('<div class="set"><input type="text" value="'+value+'" class="customize_multi_single_field" /><a href="#" class="customize_multi_remove_field dashicons dashicons-no-alt">X</a></div>');
});
}
});
});
(function(api) {
api.sectionConstructor['pure-portfolio-upsell'] = api.Section.extend({
// Remove events for this section.
attachEvents: function() {},
// Ensure this section is active. Normally, sections without contents aren't visible.
isContextuallyActive: function() {
return true;
}
});
const pure_portfolio_section_lists = ['banner','skill','experience','gallery','blog','cta'];
pure_portfolio_section_lists.forEach(pure_portfolio_homepage_scroll);
function pure_portfolio_homepage_scroll(item, index) {
// Detect when the front page sections section is expanded (or closed) so we can adjust the preview accordingly.
item = item.replace(/-/g, '_');
wp.customize.section('pure_portfolio_' + item + '_section', function(section) {
section.expanded.bind(function(isExpanding) {
// Value of isExpanding will = true if you're entering the section, false if you're leaving it.
wp.customize.previewer.send(item, { expanded: isExpanding });
});
});
}
})(wp.customize);