171 lines
4.8 KiB
JavaScript
171 lines
4.8 KiB
JavaScript
( function( $, window ) {
|
|
'use strict';
|
|
|
|
var config = window.mapAdminSettings || {};
|
|
var optionKey = config.optionKey || 'map_settings';
|
|
var presetTokens = config.presets || {};
|
|
|
|
function getFieldSelector( key ) {
|
|
return '[name="' + optionKey + '[' + key + ']"]';
|
|
}
|
|
|
|
function getFieldValue( key ) {
|
|
var $field = $( getFieldSelector( key ) );
|
|
|
|
if ( ! $field.length ) {
|
|
return null;
|
|
}
|
|
|
|
if ( 'checkbox' === $field.attr( 'type' ) ) {
|
|
return $field.is( ':checked' ) ? 1 : 0;
|
|
}
|
|
|
|
return $field.val();
|
|
}
|
|
|
|
function setFieldValue( key, value ) {
|
|
var $field = $( getFieldSelector( key ) );
|
|
|
|
if ( ! $field.length ) {
|
|
return;
|
|
}
|
|
|
|
if ( 'checkbox' === $field.attr( 'type' ) ) {
|
|
$field.prop( 'checked', !! Number( value ) ).trigger( 'change' );
|
|
return;
|
|
}
|
|
|
|
if ( $field.hasClass( 'map-color-field' ) ) {
|
|
$field.wpColorPicker( 'color', value );
|
|
return;
|
|
}
|
|
|
|
$field.val( value ).trigger( 'input' ).trigger( 'change' );
|
|
}
|
|
|
|
function updateRangeLabels() {
|
|
$( '[data-map-range-value]' ).each( function() {
|
|
var key = $( this ).data( 'mapRangeValue' );
|
|
var $input = $( getFieldSelector( key ) );
|
|
var unit = $input.data( 'unit' ) || '';
|
|
$( this ).text( $input.val() + unit );
|
|
} );
|
|
}
|
|
|
|
function buildPreviewStyles() {
|
|
return {
|
|
'--velora-bg': getFieldValue( 'player_background_color' ),
|
|
'--velora-surface': getFieldValue( 'player_surface_color' ),
|
|
'--velora-text': getFieldValue( 'player_text_color' ),
|
|
'--velora-muted': getFieldValue( 'player_muted_text_color' ),
|
|
'--velora-accent': getFieldValue( 'player_accent_color' ),
|
|
'--velora-button-bg': getFieldValue( 'player_button_background_color' ),
|
|
'--velora-button-text': getFieldValue( 'player_button_text_color' ),
|
|
'--velora-progress-bg': getFieldValue( 'player_progress_background_color' ),
|
|
'--velora-progress-fill': getFieldValue( 'player_progress_fill_color' ),
|
|
'--velora-border': getFieldValue( 'player_border_color' ),
|
|
'--velora-shadow': getFieldValue( 'player_shadow_color' ),
|
|
'--velora-radius': getFieldValue( 'player_border_radius' ) + 'px',
|
|
'--velora-padding': getFieldValue( 'player_padding' ) + 'px',
|
|
'--velora-font-size': getFieldValue( 'player_font_size' ) + 'px',
|
|
'--map-progress-percent': '38%'
|
|
};
|
|
}
|
|
|
|
function updatePreview() {
|
|
var preset = $( '[data-map-preset-select]' ).val();
|
|
var $preview = $( '[data-map-admin-preview]' );
|
|
var styles = buildPreviewStyles();
|
|
var hasCover = Number( getFieldValue( 'player_show_cover_image' ) );
|
|
|
|
$preview.css( styles );
|
|
$preview
|
|
.removeClass( 'map-theme-modern-dark map-theme-glassmorphism map-theme-podcast-style map-player--no-cover' )
|
|
.addClass( 'map-theme-' + preset );
|
|
|
|
$( '[data-map-preview-theme]' ).text(
|
|
$( '[data-map-preset-select] option:selected' ).text()
|
|
);
|
|
|
|
if ( hasCover ) {
|
|
$preview.find( '.map-player__cover-wrap' ).show();
|
|
$preview.attr( 'data-map-has-cover', 'true' );
|
|
} else {
|
|
$preview.find( '.map-player__cover-wrap' ).hide();
|
|
$preview
|
|
.addClass( 'map-player--no-cover' )
|
|
.attr( 'data-map-has-cover', 'false' );
|
|
}
|
|
|
|
if ( Number( getFieldValue( 'player_show_theme_label' ) ) ) {
|
|
$preview.find( '.map-player__eyebrow' ).show();
|
|
} else {
|
|
$preview.find( '.map-player__eyebrow' ).hide();
|
|
}
|
|
|
|
updateRangeLabels();
|
|
}
|
|
|
|
function applyPreset( preset ) {
|
|
if ( ! presetTokens[ preset ] ) {
|
|
return;
|
|
}
|
|
|
|
Object.keys( presetTokens[ preset ] ).forEach( function( key ) {
|
|
setFieldValue( key, presetTokens[ preset ][ key ] );
|
|
} );
|
|
|
|
updatePreview();
|
|
}
|
|
|
|
function initColorPickers() {
|
|
$( '.map-color-field' ).wpColorPicker( {
|
|
change: function() {
|
|
window.setTimeout( updatePreview, 0 );
|
|
},
|
|
clear: function() {
|
|
window.setTimeout( updatePreview, 0 );
|
|
}
|
|
} );
|
|
}
|
|
|
|
function setActivePanel( panelKey ) {
|
|
$( '.map-design-form .nav-tab' ).removeClass( 'nav-tab-active' );
|
|
$( '.map-design-form .nav-tab[data-map-tab="' + panelKey + '"]' ).addClass( 'nav-tab-active' );
|
|
|
|
$( '.map-settings-panel' ).removeClass( 'is-active' );
|
|
$( '.map-settings-panel[data-map-panel="' + panelKey + '"]' ).addClass( 'is-active' );
|
|
|
|
$( '.map-settings-panels' ).scrollTop( 0 );
|
|
}
|
|
|
|
function initTabs() {
|
|
$( '.map-design-form .nav-tab' ).on( 'click', function( event ) {
|
|
event.preventDefault();
|
|
setActivePanel( $( this ).data( 'mapTab' ) );
|
|
} );
|
|
}
|
|
|
|
function initResetConfirmation() {
|
|
$( '.map-reset-button' ).on( 'click', function( event ) {
|
|
if ( ! window.confirm( config.i18n.resetConfirm ) ) {
|
|
event.preventDefault();
|
|
}
|
|
} );
|
|
}
|
|
|
|
$( function() {
|
|
initColorPickers();
|
|
initTabs();
|
|
initResetConfirmation();
|
|
|
|
$( document ).on( 'input change', '[data-map-field], [data-map-preset-select]', updatePreview );
|
|
$( '[data-map-preset-select]' ).on( 'change', function() {
|
|
applyPreset( $( this ).val() );
|
|
} );
|
|
|
|
setActivePanel( 'presets' );
|
|
updatePreview();
|
|
} );
|
|
}( jQuery, window ) );
|