mirror of
https://github.com/woocommerce/woocommerce-paypal-payments.git
synced 2026-08-02 02:40:44 +08:00
98 lines
2 KiB
JavaScript
98 lines
2 KiB
JavaScript
class ErrorHandler {
|
|
/**
|
|
* @param {string} genericErrorText
|
|
* @param {Element} wrapper
|
|
*/
|
|
constructor( genericErrorText, wrapper ) {
|
|
this.genericErrorText = genericErrorText;
|
|
this.wrapper = wrapper;
|
|
}
|
|
|
|
genericError() {
|
|
this.clear();
|
|
this.message( this.genericErrorText );
|
|
}
|
|
|
|
appendPreparedErrorMessageElement( errorMessageElement ) {
|
|
this._getMessageContainer().replaceWith( errorMessageElement );
|
|
}
|
|
|
|
/**
|
|
* @param {string} text
|
|
*/
|
|
message( text ) {
|
|
this._addMessage( text );
|
|
|
|
this._scrollToMessages();
|
|
}
|
|
|
|
/**
|
|
* @param {Array} texts
|
|
*/
|
|
messages( texts ) {
|
|
texts.forEach( ( t ) => this._addMessage( t ) );
|
|
|
|
this._scrollToMessages();
|
|
}
|
|
|
|
/**
|
|
* @return {string}
|
|
*/
|
|
currentHtml() {
|
|
const messageContainer = this._getMessageContainer();
|
|
return messageContainer.outerHTML;
|
|
}
|
|
|
|
/**
|
|
* @private
|
|
* @param {string} text
|
|
*/
|
|
_addMessage( text ) {
|
|
if ( ! typeof String || text.length === 0 ) {
|
|
throw new Error( 'A new message text must be a non-empty string.' );
|
|
}
|
|
|
|
const messageContainer = this._getMessageContainer();
|
|
|
|
const messageNode = this._prepareMessageElement( text );
|
|
messageContainer.appendChild( messageNode );
|
|
}
|
|
|
|
/**
|
|
* @private
|
|
*/
|
|
_scrollToMessages() {
|
|
jQuery.scroll_to_notices( jQuery( '.woocommerce-error' ) );
|
|
}
|
|
|
|
/**
|
|
* @private
|
|
*/
|
|
_getMessageContainer() {
|
|
let messageContainer = document.querySelector( 'ul.woocommerce-error' );
|
|
if ( messageContainer === null ) {
|
|
messageContainer = document.createElement( 'ul' );
|
|
messageContainer.setAttribute( 'class', 'woocommerce-error' );
|
|
messageContainer.setAttribute( 'role', 'alert' );
|
|
jQuery( this.wrapper ).prepend( messageContainer );
|
|
}
|
|
return messageContainer;
|
|
}
|
|
|
|
/**
|
|
* @param message
|
|
* @private
|
|
*/
|
|
_prepareMessageElement( message ) {
|
|
const li = document.createElement( 'li' );
|
|
li.innerHTML = message;
|
|
|
|
return li;
|
|
}
|
|
|
|
clear() {
|
|
jQuery( '.woocommerce-error, .woocommerce-message' ).remove();
|
|
}
|
|
}
|
|
|
|
export default ErrorHandler;
|