/**
* Accepta Copyright Control JavaScript
* Handles the interactive functionality for the copyright control
*/
(function($) {
'use strict';
// Initialize copyright controls when customizer is ready
wp.customize.bind('ready', function() {
initializeCopyrightControls();
});
function initializeCopyrightControls() {
$('.accepta-copyright-control').each(function() {
var $control = $(this);
var controlId = $control.data('control-id');
initializeCopyrightControl($control, controlId);
});
}
function initializeCopyrightControl($control, controlId) {
var $textarea = $control.find('.accepta-copyright-textarea');
var $preview = $control.find('.accepta-copyright-preview-content');
var $tagButtons = $control.find('.accepta-copyright-tag-btn');
// Remove any existing event handlers to prevent duplicates
$tagButtons.off('click.accepta-copyright');
$textarea.off('input.accepta-copyright change.accepta-copyright');
// Handle tag button clicks with namespaced events
$tagButtons.on('click.accepta-copyright', function(e) {
e.preventDefault();
e.stopPropagation();
var tag = $(this).data('tag');
insertTag($textarea, tag);
updatePreview($control);
});
// Handle textarea input with namespaced events
$textarea.on('input.accepta-copyright change.accepta-copyright', function() {
updatePreview($control);
});
// Initialize preview
updatePreview($control);
}
function insertTag($textarea, tag) {
var textarea = $textarea[0];
var startPos = textarea.selectionStart;
var endPos = textarea.selectionEnd;
var textBefore = textarea.value.substring(0, startPos);
var textAfter = textarea.value.substring(endPos);
// Insert the tag at cursor position
var newValue = textBefore + tag + textAfter;
textarea.value = newValue;
// Set cursor position after the inserted tag
var newCursorPos = startPos + tag.length;
textarea.setSelectionRange(newCursorPos, newCursorPos);
// Focus back to textarea
textarea.focus();
// Add visual feedback
$textarea.addClass('tag-inserted');
setTimeout(function() {
$textarea.removeClass('tag-inserted');
}, 500);
// Trigger change event for customizer
$textarea.trigger('input').trigger('change');
}
function updatePreview($control) {
var $textarea = $control.find('.accepta-copyright-textarea');
var $preview = $control.find('.accepta-copyright-preview-content');
var text = $textarea.val();
if (!text) {
$preview.html('Enter copyright text to see preview...');
return;
}
// Process tags for preview
var processedText = processTagsForPreview(text);
$preview.html(processedText);
}
function processTagsForPreview(text) {
// Get current site info for preview
var siteTitle = wp.customize('blogname')() || 'Your Site Title';
var currentYear = new Date().getFullYear();
var replacements = {
'{copyright}': '©',
'{current-year}': currentYear,
'{site-title}': siteTitle,
'{site-url}': '' + siteTitle + '',
'{theme-name}': 'Accepta',
'{theme-author}': 'WPDINO',
'{wordpress}': 'WordPress'
};
var processedText = text;
// Replace each tag
Object.keys(replacements).forEach(function(tag) {
var regex = new RegExp(escapeRegExp(tag), 'g');
processedText = processedText.replace(regex, replacements[tag]);
});
return processedText;
}
function escapeRegExp(string) {
return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
}
// Add control to customizer control types
wp.customize.controlConstructor['accepta-copyright'] = wp.customize.Control.extend({
ready: function() {
var control = this;
var $control = this.container.find('.accepta-copyright-control');
initializeCopyrightControl($control, control.id);
// Update preview when site title changes
wp.customize('blogname', function(value) {
value.bind(function() {
updatePreview($control);
});
});
}
});
})(jQuery);