Files
wp-plugin-starter-template-…/admin/js/admin-scripts.js
Marcus Quinn d6dcda908c fix: change comma-dangle rule to always-multiline per review feedback (#88)
Addresses Gemini review feedback from PR #66 (issue #73).
Changes 'comma-dangle' from 'never' to 'always-multiline' to improve
maintainability — cleaner git diffs and easier line reordering.
Updates admin/js files to comply with the new rule.

Closes #73
2026-03-17 21:00:19 +00:00

142 lines
3.3 KiB
JavaScript

/**
* Admin Scripts
*
* @package WPALLSTARS\PluginStarterTemplate
*/
(function ($) {
'use strict';
/**
* Admin functionality
*/
const WPSTAdmin = {
/**
* Initialize
*/
init: function () {
// Initialize components.
this.initComponents();
// Bind events.
this.bindEvents();
},
/**
* Initialize components
*/
initComponents: function () {
// Initialize any components here.
},
/**
* Bind events
*/
bindEvents: function () {
// Example: Toggle sections.
$( '.wpst-toggle-section' ).on( 'click', this.toggleSection );
// Example: Form submission.
$( '#wpst-settings-form' ).on( 'submit', this.handleFormSubmit );
},
/**
* Toggle section visibility
*
* @param {Event} e Click event
*/
toggleSection: function (e) {
e.preventDefault();
const $this = $( this );
const target = $this.data( 'target' );
$( target ).slideToggle( 200 );
$this.toggleClass( 'open' );
},
/**
* Handle form submission
*
* @param {Event} e Submit event
*/
handleFormSubmit: function (e) {
e.preventDefault();
const $form = $( this );
const $submitButton = $form.find( 'input[type="submit"]' );
const formData = $form.serialize();
// Disable submit button and show loading state.
$submitButton.prop( 'disabled', true ).addClass( 'loading' );
// Send AJAX request.
$.ajax(
{
url: wpstData.ajaxUrl,
type: 'POST',
data: {
action: 'wpst_save_settings',
nonce: wpstData.nonce,
formData: formData,
},
success: function (response) {
if (response.success) {
WPSTAdmin.showNotice( 'success', response.data.message );
} else {
WPSTAdmin.showNotice( 'error', response.data.message );
}
},
error: function () {
WPSTAdmin.showNotice( 'error', 'An error occurred. Please try again.' );
},
complete: function () {
// Re-enable submit button and remove loading state.
$submitButton.prop( 'disabled', false ).removeClass( 'loading' );
},
},
);
},
/**
* Show admin notice
*
* @param {string} type Notice type (success, error, warning)
* @param {string} message Notice message
*/
showNotice: function (type, message) {
const allowedTypes = [ 'success', 'error', 'warning' ];
const safeType = allowedTypes.includes( type ) ? type : 'error';
const $p = $( '<p>' );
const $notice = $( '<div>' ).addClass( 'wpst-notice ' + safeType ).append( $p );
// Set message as plain text to prevent XSS.
$p.text( message );
// Add notice to the page.
$( '.wpst-notices' ).empty().append( $notice );
// Automatically remove notice after 5 seconds.
setTimeout(
function () {
$notice.fadeOut(
300,
function () {
$( this ).remove();
},
);
},
5000,
);
},
};
// Initialize when document is ready.
$( document ).ready(
function () {
WPSTAdmin.init();
},
);
})( jQuery );