/**
* Certificate Admin JavaScript
*
* Handles certificate admin functionality including preview generation.
*/
(function($) {
'use strict';
// Initialize color pickers
function initColorPickers() {
if ($.fn.wpColorPicker) {
$('.hvac-color-picker').wpColorPicker({
change: function() {
// Trigger settings change on color picker change
$(this).trigger('change');
}
});
}
}
// Generate certificate preview
function generatePreview() {
var previewContainer = $('.hvac-certificate-preview');
var loadingIndicator = $('
Generating preview...
');
// Show loading indicator
previewContainer.html(loadingIndicator);
// Collect all settings
var settings = {};
$('.hvac-certificate-settings input, .hvac-certificate-settings select, .hvac-certificate-settings textarea').each(function() {
var input = $(this);
var name = input.attr('name');
if (name && name.startsWith('hvac_certificate_')) {
var key = name.replace('hvac_certificate_', '');
settings[key] = input.val();
}
});
// Send AJAX request
$.ajax({
url: ajaxurl,
method: 'POST',
data: {
action: 'hvac_preview_certificate',
nonce: hvacCertificateData.previewNonce,
settings: settings
},
success: function(response) {
if (response.success) {
// Create preview image
var previewImg = $('
', {
src: response.data.preview_url,
alt: 'Certificate Preview',
class: 'hvac-certificate-preview-img'
});
// Display preview
previewContainer.html(previewImg);
} else {
// Show error
previewContainer.html('Error: ' + response.data.message + '
');
}
},
error: function() {
// Show connection error
previewContainer.html('Error: Could not connect to the server
');
}
});
}
// Handle file uploads
function initFileUploads() {
// Background image upload
$('#hvac_upload_background_btn').on('click', function(e) {
e.preventDefault();
var button = $(this);
var field = $('#hvac_certificate_custom_background');
var frame = wp.media({
title: 'Select Certificate Background',
button: {
text: 'Use this image'
},
multiple: false
});
frame.on('select', function() {
var attachment = frame.state().get('selection').first().toJSON();
field.val(attachment.url);
// Show preview
if ($('#background_preview').length) {
$('#background_preview').attr('src', attachment.url);
} else {
$('
', {
id: 'background_preview',
src: attachment.url,
class: 'hvac-image-preview',
style: 'max-width: 200px; margin-top: 10px;'
}).insertAfter(field);
}
// Trigger change to update preview
field.trigger('change');
});
frame.open();
});
// Logo image upload
$('#hvac_upload_logo_btn').on('click', function(e) {
e.preventDefault();
var button = $(this);
var field = $('#hvac_certificate_custom_logo');
var frame = wp.media({
title: 'Select Certificate Logo',
button: {
text: 'Use this image'
},
multiple: false
});
frame.on('select', function() {
var attachment = frame.state().get('selection').first().toJSON();
field.val(attachment.url);
// Show preview
if ($('#logo_preview').length) {
$('#logo_preview').attr('src', attachment.url);
} else {
$('
', {
id: 'logo_preview',
src: attachment.url,
class: 'hvac-image-preview',
style: 'max-width: 100px; margin-top: 10px;'
}).insertAfter(field);
}
// Trigger change to update preview
field.trigger('change');
});
frame.open();
});
}
// Insert placeholder
function initPlaceholders() {
$('.hvac-placeholder-insert').on('click', function(e) {
e.preventDefault();
var placeholder = $(this).data('placeholder');
var targetField = $('#hvac_certificate_completion_text');
// Insert at cursor position
var field = targetField[0];
var startPos = field.selectionStart;
var endPos = field.selectionEnd;
var text = field.value;
field.value = text.substring(0, startPos) + placeholder + text.substring(endPos);
// Set cursor position after placeholder
field.selectionStart = startPos + placeholder.length;
field.selectionEnd = startPos + placeholder.length;
// Focus the field
field.focus();
// Trigger change to update preview
targetField.trigger('change');
});
}
// Init on document ready
$(document).ready(function() {
// Initialize color pickers
initColorPickers();
// Initialize file uploads
initFileUploads();
// Initialize placeholder inserts
initPlaceholders();
// Generate preview on settings change (debounced)
var previewTimeout;
$('.hvac-certificate-settings input, .hvac-certificate-settings select, .hvac-certificate-settings textarea').on('change', function() {
clearTimeout(previewTimeout);
previewTimeout = setTimeout(generatePreview, 800);
});
// Generate initial preview
generatePreview();
// Handle preview button click
$('#hvac_generate_preview_btn').on('click', function(e) {
e.preventDefault();
generatePreview();
});
});
})(jQuery);