feat: initial implementation of WooList phpList Integration plugin v1.0.0
- phpList REST API wrapper with subscriber get-or-create + list assignment - WooCommerce Settings tab (5 sections: connection, orders, signup, newsletter) - Test Connection button via admin-post action - Hooks for order completed/cancelled and user_register events - [woolist_newsletter] shortcode with jQuery AJAX, fixed & auto-generated coupons - Responsive front-end form styles and JS with loading/success/error states Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
69
woolist-phplist/assets/js/woolist-public.js
Normal file
69
woolist-phplist/assets/js/woolist-public.js
Normal file
@@ -0,0 +1,69 @@
|
||||
/* global woolist, jQuery */
|
||||
( function ( $ ) {
|
||||
'use strict';
|
||||
|
||||
$( document ).on( 'submit', '#woolist-newsletter-form', function ( e ) {
|
||||
e.preventDefault();
|
||||
|
||||
var $form = $( this );
|
||||
var $wrap = $form.closest( '.woolist-newsletter-wrap' );
|
||||
var $btn = $form.find( '.woolist-submit-btn' );
|
||||
var $email = $form.find( '[name="woolist_email"]' );
|
||||
var $resp = $wrap.find( '.woolist-response' );
|
||||
|
||||
// Clear previous response state.
|
||||
$resp.hide().removeClass( 'woolist-success woolist-error' ).html( '' );
|
||||
|
||||
var email = $email.val().trim();
|
||||
if ( ! email ) {
|
||||
showResponse( $resp, woolist.i18n.error, false );
|
||||
return;
|
||||
}
|
||||
|
||||
// Loading state.
|
||||
var originalLabel = $btn.text();
|
||||
$btn.prop( 'disabled', true ).text( woolist.i18n.subscribing );
|
||||
|
||||
$.ajax( {
|
||||
url: woolist.ajaxurl,
|
||||
method: 'POST',
|
||||
data: {
|
||||
action: 'woolist_newsletter_submit',
|
||||
nonce: woolist.nonce,
|
||||
woolist_email: email,
|
||||
},
|
||||
} )
|
||||
.done( function ( response ) {
|
||||
if ( response.success && response.data && response.data.message ) {
|
||||
// Hide the form, show the success message.
|
||||
$form.slideUp( 200 );
|
||||
showResponse( $resp, response.data.message, true );
|
||||
} else {
|
||||
var msg = ( response.data && response.data.message )
|
||||
? response.data.message
|
||||
: woolist.i18n.error;
|
||||
showResponse( $resp, msg, false );
|
||||
$btn.prop( 'disabled', false ).text( originalLabel );
|
||||
}
|
||||
} )
|
||||
.fail( function () {
|
||||
showResponse( $resp, woolist.i18n.error, false );
|
||||
$btn.prop( 'disabled', false ).text( originalLabel );
|
||||
} );
|
||||
} );
|
||||
|
||||
/**
|
||||
* Display a response message in the response container.
|
||||
*
|
||||
* @param {jQuery} $el The response element.
|
||||
* @param {string} message HTML or text message to display.
|
||||
* @param {boolean} success Whether this is a success message.
|
||||
*/
|
||||
function showResponse( $el, message, success ) {
|
||||
$el
|
||||
.addClass( success ? 'woolist-success' : 'woolist-error' )
|
||||
.html( message )
|
||||
.slideDown( 200 );
|
||||
}
|
||||
|
||||
} )( jQuery );
|
||||
Reference in New Issue
Block a user