/home/vianto5/ceibaresidencial.mx/wp-content/plugins/olympus-google-fonts/admin
NameSizeModeActions
admin-page.css186550644editdlrm
admin-page.js194670644editdlrm
class-ogf-admin-page.php861060644editdlrm
class-ogf-upload-fonts-screen.php200520644editdlrm
class-ogf-welcome-screen.php52250644editdlrm
fonts-plugin-quickstart-guide.png708970644editdlrm
icon-128x128.jpg21880644editdlrm
style.css17440644editdlrm
Edit: /home/vianto5/ceibaresidencial.mx/wp-content/plugins/olympus-google-fonts/admin/admin-page.js (19467B)
/** * Fonts Plugin (olympus-google-fonts) Admin Page JS. * * Domain-specific modules. Generic tab switching, toggle/select auto-save, * and toast notifications are handled by Plinth (window.Plinth). * * Relies on localized data from WordPress via window.ogfAdmin. * * @package suspended */ ( function() { 'use strict'; var ogfConfig = window.ogfAdmin || {}; var showToast = window.Plinth.showToast; // Local AJAX wrapper that uses the OGF nonce (ogf_admin_nonce), not the // Plinth nonce (fonts-plugin_plinth_nonce). Font-row toggles and other // domain-specific handlers verify the OGF nonce on the server side. // Settings tab toggles use Plinth's own ajaxPost with its own nonce. function ajaxPost( action, data ) { var formData = new FormData(); formData.append( 'action', action ); formData.append( '_ajax_nonce', ogfConfig.nonce ); Object.keys( data ).forEach( function( key ) { formData.append( key, data[ key ] ); } ); return fetch( ogfConfig.ajaxUrl, { method: 'POST', credentials: 'same-origin', body: formData, } ).then( function( response ) { return response.json(); } ); } /* --------------------------------------------------------------- * Pro feature modal * ------------------------------------------------------------- */ function openProModal( featureTitle, featureDesc ) { var modal = document.getElementById( 'ogf-modal' ); if ( ! modal ) { return; } var titleEl = document.getElementById( 'ogf-modal-title' ); var descEl = document.getElementById( 'ogf-modal-desc' ); if ( ogfAdmin.needsLicense && ogfAdmin.i18n ) { if ( titleEl ) { titleEl.textContent = ogfAdmin.i18n.inactiveLicenseTitle || 'Inactive License'; } if ( descEl ) { descEl.textContent = ogfAdmin.i18n.inactiveLicenseDesc || ''; } } else { if ( titleEl ) { titleEl.textContent = featureTitle || ''; } if ( descEl ) { descEl.textContent = featureDesc || ''; } } var slug = ( featureTitle || 'pro' ) .toLowerCase() .replace( /[^a-z0-9]+/g, '-' ) .replace( /^-|-$/g, '' ); var link = document.getElementById( 'ogf-modal-link' ); var benefits = modal.querySelector( '.ogf-modal-benefits' ); if ( link ) { if ( ogfAdmin.needsLicense && ogfAdmin.licenseUrl ) { link.href = ogfAdmin.licenseUrl; link.removeAttribute( 'target' ); link.removeAttribute( 'rel' ); link.textContent = ( ogfAdmin.i18n && ogfAdmin.i18n.addLicense ) || 'Add License'; if ( benefits ) { benefits.style.display = 'none'; } } else if ( ogfAdmin.upgradeUrl ) { link.href = ogfAdmin.upgradeUrl + '&utm_campaign=' + encodeURIComponent( slug ); link.setAttribute( 'target', '_blank' ); if ( benefits ) { benefits.style.display = ''; } } } modal.classList.add( 'visible' ); } function closeProModal() { var modal = document.getElementById( 'ogf-modal' ); if ( modal ) { modal.classList.remove( 'visible' ); } } function initProModal() { var modal = document.getElementById( 'ogf-modal' ); if ( ! modal ) { return; } document.querySelectorAll( '[data-pro-feature]' ).forEach( function( el ) { el.addEventListener( 'click', function() { openProModal( el.getAttribute( 'data-feature' ) || '', el.getAttribute( 'data-desc' ) || '' ); } ); } ); document.querySelectorAll( '.ogf-fl-grid-row .ogf-toggle-xs.disabled' ).forEach( function( toggle ) { toggle.addEventListener( 'click', function() { openProModal( toggle.getAttribute( 'data-feature' ) || 'Font Loading', toggle.getAttribute( 'data-desc' ) || '' ); } ); } ); document.querySelectorAll( '[data-pro-trigger]' ).forEach( function( btn ) { btn.addEventListener( 'click', function() { openProModal( btn.getAttribute( 'data-feature' ) || '', btn.getAttribute( 'data-desc' ) || '' ); } ); } ); document.querySelectorAll( '.ogf-font-toggle-group[data-pro-toggle]' ).forEach( function( group ) { var toggle = group.querySelector( '.ogf-toggle-sm' ); if ( toggle ) { toggle.addEventListener( 'click', function( e ) { e.stopPropagation(); openProModal( group.getAttribute( 'data-feature' ) || 'Pro Feature', group.getAttribute( 'data-desc' ) || '' ); } ); } } ); modal.addEventListener( 'click', function( e ) { if ( e.target === modal ) { closeProModal(); } } ); modal.querySelectorAll( '.ogf-modal-close' ).forEach( function( btn ) { btn.addEventListener( 'click', closeProModal ); } ); document.addEventListener( 'keydown', function( e ) { if ( e.key === 'Escape' ) { closeProModal(); } } ); } /* --------------------------------------------------------------- * Font row expand / collapse * ------------------------------------------------------------- */ function initFontRows() { document.querySelectorAll( '.ogf-font-row-header' ).forEach( function( header ) { header.addEventListener( 'click', function( e ) { if ( e.target.closest( '.ogf-toggle-sm, .ogf-toggle-xs' ) ) { return; } header.closest( '.ogf-font-row' ).classList.toggle( 'open' ); } ); } ); } /* --------------------------------------------------------------- * Global Host / Preload toggles shown on active font rows * ------------------------------------------------------------- */ function syncFontToggles( setting, value ) { document.querySelectorAll( '.ogf-font-toggles .ogf-toggle-sm[data-setting]' ).forEach( function( toggle ) { if ( toggle.getAttribute( 'data-setting' ) === setting ) { toggle.classList.toggle( 'on', 1 === Number( value ) ); } } ); } function initFontToggles() { document.querySelectorAll( '.ogf-font-toggles .ogf-toggle-sm[data-setting]' ).forEach( function( toggle ) { toggle.addEventListener( 'click', function( e ) { e.stopPropagation(); if ( toggle.classList.contains( 'disabled' ) ) { return; } var setting = toggle.getAttribute( 'data-setting' ) || ''; var value = toggle.classList.contains( 'on' ) ? 0 : 1; toggle.classList.toggle( 'on', 1 === value ); ajaxPost( 'ogf_save_settings', { setting: setting, value: value } ) .then( function( response ) { if ( ! response.success ) { throw new Error( 'Could not save setting' ); } syncFontToggles( setting, value ); showToast( ogfAdmin.i18n.saved ); } ) .catch( function() { toggle.classList.toggle( 'on', 1 !== value ); showToast( ogfAdmin.i18n.error ); } ); } ); } ); } /* --------------------------------------------------------------- * Selective font loading * ------------------------------------------------------------- */ function initFontLoading() { document.querySelectorAll( '.ogf-fl-grid-row .ogf-toggle-xs:not(.disabled)' ).forEach( function( toggle ) { toggle.addEventListener( 'click', function() { var card = toggle.closest( '.ogf-fl-card' ); var kind = toggle.getAttribute( 'data-kind' ) || ''; var fontId = toggle.getAttribute( 'data-font' ) || ''; var wasOn = toggle.classList.contains( 'on' ); var isEnabled = ! wasOn; toggle.classList.toggle( 'on', isEnabled ); var payload = { font_id: fontId, kind: kind, }; if ( 'weight' === kind ) { var selected = []; card.querySelectorAll( '[data-kind="weight"]' ).forEach( function( weightToggle ) { if ( weightToggle.classList.contains( 'on' ) ) { selected.push( weightToggle.getAttribute( 'data-weight' ) ); } } ); if ( ! selected.length ) { toggle.classList.add( 'on' ); return; } payload.values = JSON.stringify( selected ); } else if ( 'subset' === kind ) { payload.subset = toggle.getAttribute( 'data-subset' ) || ''; payload.enabled = isEnabled ? 1 : 0; } else { toggle.classList.toggle( 'on', wasOn ); return; } ajaxPost( 'ogf_save_font_loading', payload ) .then( function( response ) { if ( ! response.success ) { toggle.classList.toggle( 'on', wasOn ); showToast( ( response.data && response.data.message ) || ogfAdmin.i18n.error ); return; } if ( 'subset' === kind ) { document.querySelectorAll( '[data-kind="subset"]' ).forEach( function( subsetToggle ) { if ( subsetToggle.getAttribute( 'data-subset' ) === payload.subset ) { subsetToggle.classList.toggle( 'on', isEnabled ); } } ); } showToast( ogfAdmin.i18n.saved ); } ) .catch( function() { toggle.classList.toggle( 'on', wasOn ); showToast( ogfAdmin.i18n.error ); } ); } ); } ); } /* --------------------------------------------------------------- * Diagnostics: clear cache and reset fonts * ------------------------------------------------------------- */ function initDiagnostics() { var clearBtn = document.getElementById( 'ogf-clear-cache' ); var resetBtn = document.getElementById( 'ogf-reset-fonts' ); if ( clearBtn ) { clearBtn.addEventListener( 'click', function() { if ( ! window.confirm( ogfAdmin.i18n.clearCacheConfirm ) ) { return; } ajaxPost( 'ogf_clear_font_cache', {} ) .then( function() { showToast( ogfAdmin.i18n.cleared ); } ) .catch( function() { showToast( ogfAdmin.i18n.error ); } ); } ); } if ( resetBtn ) { resetBtn.addEventListener( 'click', function() { if ( ! window.confirm( ogfAdmin.i18n.resetFontsConfirm ) ) { return; } ajaxPost( 'ogf_reset_all_fonts', {} ) .then( function() { showToast( ogfAdmin.i18n.resetDone ); } ) .catch( function() { showToast( ogfAdmin.i18n.error ); } ); } ); } } /* --------------------------------------------------------------- * Copy diagnostics for support * ------------------------------------------------------------- */ function buildDiagnosticsReport() { var panel = document.getElementById( 'pln-tab-diagnostics' ); var lines = []; if ( ! panel ) { return ''; } panel.querySelectorAll( '.pln-card' ).forEach( function( card ) { var rows = card.querySelectorAll( '.pln-diag__item' ); if ( ! rows.length ) { return; } var heading = card.querySelector( '.pln-card__header' ); lines.push( '## ' + ( heading ? heading.textContent.trim() : '' ) ); rows.forEach( function( row ) { var key = row.querySelector( '.pln-diag__key' ); var val = row.querySelector( '.pln-diag__val, .pln-diag__status' ); if ( key && val ) { lines.push( key.textContent.trim() + ': ' + val.textContent.trim() ); } } ); card.querySelectorAll( '.ogf-diag-plugins-report li' ).forEach( function( pluginLine ) { lines.push( '- ' + pluginLine.textContent.trim() ); } ); lines.push( '' ); } ); if ( ! lines.length ) { return ''; } return 'Fonts Plugin diagnostics\n' + 'Generated: ' + new Date().toISOString().replace( 'T', ' ' ).slice( 0, 19 ) + ' UTC\n\n' + lines.join( '\n' ).trim() + '\n'; } function legacyCopy( text ) { return new Promise( function( resolve, reject ) { var field = document.createElement( 'textarea' ); field.value = text; field.setAttribute( 'readonly', '' ); field.style.position = 'fixed'; field.style.top = '-1000px'; document.body.appendChild( field ); field.select(); try { if ( document.execCommand( 'copy' ) ) { resolve(); } else { reject(); } } catch ( e ) { reject(); } finally { document.body.removeChild( field ); } } ); } function copyText( text ) { if ( navigator.clipboard && window.isSecureContext ) { return navigator.clipboard.writeText( text ).catch( function() { return legacyCopy( text ); } ); } return legacyCopy( text ); } function initCopyDiagnostics() { var button = document.getElementById( 'ogf-copy-diagnostics' ); if ( ! button ) { return; } button.addEventListener( 'click', function() { var report = buildDiagnosticsReport(); if ( ! report ) { showToast( ogfAdmin.i18n.error ); return; } copyText( report ) .then( function() { showToast( ogfAdmin.i18n.diagnosticsCopied ); } ) .catch( function() { showToast( ogfAdmin.i18n.copyFailed ); } ); } ); } /* --------------------------------------------------------------- * Shared helpers for the Upload / Adobe Fonts tabs * ------------------------------------------------------------- */ function reloadToTab( tab ) { window.location.hash = '#' + tab; window.location.reload(); } function setBusy( button, label ) { var original = button.textContent; button.disabled = true; button.textContent = label; return function() { button.disabled = false; button.textContent = original; }; } function collectFontForm( form ) { var payload = { term_id: form.getAttribute( 'data-term-id' ) || 0 }; form.querySelectorAll( '[data-field]' ).forEach( function( el ) { var field = el.getAttribute( 'data-field' ); if ( 'BUTTON' === el.tagName ) { payload[ field ] = el.classList.contains( 'on' ) ? 1 : 0; } else { payload[ field ] = el.value; } } ); return payload; } /* --------------------------------------------------------------- * Upload Fonts tab * ------------------------------------------------------------- */ var mediaFrame = null; function openFontPicker( input ) { if ( ! window.wp || ! window.wp.media ) { return; } if ( ! mediaFrame ) { mediaFrame = window.wp.media( { title: ogfAdmin.i18n.selectFontFile, button: { text: ogfAdmin.i18n.useFontFile }, multiple: false, } ); } mediaFrame.off( 'select' ); mediaFrame.on( 'select', function() { var attachment = mediaFrame.state().get( 'selection' ).first().toJSON(); input.value = attachment.url; } ); mediaFrame.open(); } function initCustomFonts() { var panel = document.getElementById( 'pln-tab-upload' ); if ( ! panel ) { return; } panel.querySelectorAll( '.ogf-cf-form .ogf-toggle-sm[data-field]' ).forEach( function( toggle ) { toggle.addEventListener( 'click', function() { toggle.classList.toggle( 'on' ); } ); } ); panel.querySelectorAll( '.ogf-cf-upload' ).forEach( function( button ) { button.addEventListener( 'click', function() { openFontPicker( button.parentElement.querySelector( 'input[data-field]' ) ); } ); } ); panel.querySelectorAll( '.ogf-cf-edit' ).forEach( function( button ) { button.addEventListener( 'click', function() { var row = button.closest( '.ogf-uploaded-font-row' ); var editPanel = row.nextElementSibling; if ( editPanel && editPanel.classList.contains( 'ogf-cf-edit-panel' ) ) { editPanel.classList.toggle( 'open' ); } } ); } ); panel.querySelectorAll( '.ogf-cf-cancel' ).forEach( function( button ) { button.addEventListener( 'click', function() { button.closest( '.ogf-cf-edit-panel' ).classList.remove( 'open' ); } ); } ); panel.querySelectorAll( '.ogf-cf-save' ).forEach( function( button ) { button.addEventListener( 'click', function() { var form = button.closest( '.ogf-cf-form' ); var restore = setBusy( button, ogfAdmin.i18n.saving ); ajaxPost( 'ogf_save_custom_font', collectFontForm( form ) ) .then( function( response ) { if ( ! response.success ) { restore(); showToast( ( response.data && response.data.message ) || ogfAdmin.i18n.error ); return; } showToast( ogfAdmin.i18n.fontSaved ); reloadToTab( 'upload' ); } ) .catch( function() { restore(); showToast( ogfAdmin.i18n.error ); } ); } ); } ); panel.querySelectorAll( '.ogf-cf-delete' ).forEach( function( button ) { button.addEventListener( 'click', function() { if ( ! window.confirm( ogfAdmin.i18n.deleteFontConfirm ) ) { return; } var row = button.closest( '.ogf-uploaded-font-row' ); var restore = setBusy( button, ogfAdmin.i18n.saving ); ajaxPost( 'ogf_delete_custom_font', { term_id: row.getAttribute( 'data-term-id' ) } ) .then( function( response ) { if ( ! response.success ) { restore(); showToast( ( response.data && response.data.message ) || ogfAdmin.i18n.error ); return; } showToast( ogfAdmin.i18n.fontDeleted ); reloadToTab( 'upload' ); } ) .catch( function() { restore(); showToast( ogfAdmin.i18n.error ); } ); } ); } ); } /* --------------------------------------------------------------- * Adobe Fonts tab * ------------------------------------------------------------- */ function initTypekit() { var keyInput = document.getElementById( 'ogf-typekit-key' ); var saveBtn = document.getElementById( 'ogf-typekit-save' ); var refreshBtn = document.getElementById( 'ogf-typekit-refresh' ); function run( button, label, action, payload ) { var restore = setBusy( button, label ); ajaxPost( action, payload ) .then( function( response ) { if ( ! response.success ) { restore(); showToast( ( response.data && response.data.message ) || ogfAdmin.i18n.error ); return; } showToast( ( response.data && response.data.message ) || ogfAdmin.i18n.saved ); reloadToTab( 'adobe' ); } ) .catch( function() { restore(); showToast( ogfAdmin.i18n.error ); } ); } if ( saveBtn && keyInput ) { saveBtn.addEventListener( 'click', function() { run( saveBtn, ogfAdmin.i18n.saving, 'ogf_save_typekit_key', { api_key: keyInput.value } ); } ); } if ( refreshBtn ) { refreshBtn.addEventListener( 'click', function() { run( refreshBtn, ogfAdmin.i18n.refreshing, 'ogf_refresh_typekit', {} ); } ); } document.querySelectorAll( '.ogf-tk-toggle' ).forEach( function( button ) { button.addEventListener( 'click', function() { var enabled = '1' !== button.getAttribute( 'data-enabled' ); var restore = setBusy( button, ogfAdmin.i18n.saving ); ajaxPost( 'ogf_toggle_typekit_kit', { kit_id: button.getAttribute( 'data-kit' ), enabled: enabled ? 1 : 0, } ) .then( function( response ) { restore(); if ( ! response.success ) { showToast( ( response.data && response.data.message ) || ogfAdmin.i18n.error ); return; } var status = button.parentElement.querySelector( '.ogf-kit-status' ); button.setAttribute( 'data-enabled', enabled ? '1' : '0' ); button.textContent = enabled ? ogfAdmin.i18n.disableKit : ogfAdmin.i18n.enableKit; if ( status ) { status.classList.toggle( 'active', enabled ); status.classList.toggle( 'inactive', ! enabled ); status.textContent = enabled ? ogfAdmin.i18n.kitActive : ogfAdmin.i18n.kitInactive; } showToast( ogfAdmin.i18n.kitUpdated ); } ) .catch( function() { restore(); showToast( ogfAdmin.i18n.error ); } ); } ); } ); } /* --------------------------------------------------------------- * Boot * ------------------------------------------------------------- */ document.addEventListener( 'DOMContentLoaded', function() { initProModal(); initFontRows(); initFontToggles(); initFontLoading(); initDiagnostics(); initCustomFonts(); initTypekit(); initCopyDiagnostics(); } ); } )();