import { __ } from '@wordpress/i18n';
import { speak } from '@wordpress/a11y';
import { SELECTORS } from './constants';
import API from './classes/api';
import ControlSync from './classes/control/control-sync';
import ControlStates from './classes/control/control-states';
import ControlMeta from './classes/control/control-meta';
import OptimizationDetails from './classes/optimization-details';
class OptimizationControl {
constructor() {
this.controlSyncRequestInProgress = false;
this.init();
this.controlSync = new ControlSync();
}
init() {
this.initEventListeners();
setInterval( () => this.runStatusCheckLoop(), 5000 );
}
async runStatusCheckLoop() {
if ( this.controlSyncRequestInProgress ) {
return;
}
this.controlSyncRequestInProgress = true;
await this.controlSync.run();
this.controlSyncRequestInProgress = false;
}
initEventListeners() {
document.addEventListener( 'click', ( e ) => this.handleOptimizeButtonClick( e ) );
document.addEventListener( 'click', ( e ) => this.handleReoptimizeButtonClick( e ) );
document.addEventListener( 'click', ( e ) => this.handleRestoreButtonClick( e ) );
document.addEventListener( 'click', ( e ) => this.handleOptimizationDetailsOpen( e ) );
document.addEventListener( 'click', ( e ) => this.handleOptimizationDetailsClick( e ) );
}
async handleOptimizeButtonClick( e ) {
if ( ! e.target.closest( `${ SELECTORS.optimizeButtonSelector }, ${ SELECTORS.tryAgainOptimizeButtonSelector }` ) ) {
return;
}
speak( __( 'Optimization is in progress', 'image-optimization' ), 'assertive' );
const controlWrapper = e.target.closest( SELECTORS.controlWrapperSelector );
const states = new ControlStates( controlWrapper );
states.renderLoading( 'optimize' );
try {
controlWrapper.dataset.isFrozen = true;
await API.optimizeSingleImage( {
imageId: new ControlMeta( controlWrapper ).getImageId(),
reoptimize: false,
} );
} catch ( error ) {
states.renderError( error );
}
}
async handleReoptimizeButtonClick( e ) {
if ( ! e.target.closest( `${ SELECTORS.reoptimizeButtonSelector }, ${ SELECTORS.tryAgainReoptimizeButtonSelector }` ) ) {
return;
}
speak( __( 'Reoptimizing is in progress', 'image-optimization' ), 'assertive' );
const controlWrapper = e.target.closest( SELECTORS.controlWrapperSelector );
const states = new ControlStates( controlWrapper );
states.renderLoading( 'reoptimize' );
try {
controlWrapper.dataset.isFrozen = true;
await API.optimizeSingleImage( {
imageId: new ControlMeta( controlWrapper ).getImageId(),
reoptimize: true,
} );
} catch ( error ) {
states.renderError( error );
}
}
async handleRestoreButtonClick( e ) {
if ( ! e.target.closest( `${ SELECTORS.restoreButtonSelector }, ${ SELECTORS.tryAgainRestoreButtonSelector }` ) ) {
return;
}
speak( __( 'Image restoring is in progress', 'image-optimization' ), 'assertive' );
const controlWrapper = e.target.closest( SELECTORS.controlWrapperSelector );
const states = new ControlStates( controlWrapper );
states.renderLoading( 'restore' );
try {
controlWrapper.dataset.isFrozen = true;
await API.restoreSingleImage( new ControlMeta( controlWrapper ).getImageId() );
} catch ( error ) {
states.renderError( error );
}
}
async handleOptimizationDetailsOpen( e ) {
if ( ! e.target.closest( `${ SELECTORS.optimizationDetailsButtonSelector }` ) ) {
return;
}
const controlWrapper = e.target.closest( SELECTORS.controlWrapperSelector );
const imageId = new ControlMeta( controlWrapper ).getImageId();
try {
OptimizationDetails.initModal();
OptimizationDetails.renderLoading();
const details = await API.getOptimizationDetails( imageId );
OptimizationDetails.openModal();
OptimizationDetails.renderData( imageId, details );
} catch ( error ) {
OptimizationDetails.openModal();
OptimizationDetails.renderError( error.message );
}
}
async handleOptimizationDetailsClick( e ) {
if ( ! e.target.closest( `${ SELECTORS.optimizationDetailsOptimizeButtonSelector }` ) ) {
return;
}
const imageId = parseInt( e.target.dataset?.imageId, 10 );
await API.optimizeSingleImage( { imageId } );
const controlWrapper = document.querySelector( `.image-optimization-control[data-image-optimization-image-id="${ imageId }"]` );
if ( controlWrapper ) {
new ControlStates( controlWrapper ).renderLoading( 'optimize' );
}
OptimizationDetails.closeModal();
}
}
export default OptimizationControl;
{
"name": "woocommerce/product-image",
"title": "Product Image",
"description": "Display the main product image.",
"category": "woocommerce-product-elements",
"attributes": {
"showProductLink": { "type": "boolean", "default": true },
"showSaleBadge": { "type": "boolean", "default": true },
"saleBadgeAlign": { "type": "string", "default": "right" },
"imageSizing": { "type": "string", "default": "single" },
"productId": { "type": "number", "default": 0 },
"isDescendentOfQueryLoop": { "type": "boolean", "default": false },
"isDescendentOfSingleProductBlock": {
"type": "boolean",
"default": false
},
"width": { "type": "string" },
"height": { "type": "string" },
"scale": { "type": "string", "default": "cover" },
"aspectRatio": { "type": "string" }
},
"supports": {
"interactivity": {
"clientNavigation": true
},
"html": false,
"__experimentalBorder": {
"radius": true,
"__experimentalSkipSerialization": true
},
"typography": {
"fontSize": true,
"__experimentalSkipSerialization": true
},
"spacing": {
"margin": true,
"padding": true
},
"dimensions": {
"aspectRatio": true,
"__experimentalSkipSerialization": true
},
"email": true
},
"selectors": {
"root": ".wp-block-woocommerce-product-image.wc-block-components-product-image, .wp-block-woocommerce-product-image .wc-block-components-product-image"
},
"ancestor": [
"woocommerce/all-products",
"woocommerce/single-product",
"woocommerce/product-template",
"core/post-template"
],
"usesContext": [ "imageId", "postId", "query", "queryId" ],
"keywords": [ "WooCommerce" ],
"textdomain": "woocommerce",
"apiVersion": 3,
"$schema": "https://schemas.wp.org/trunk/block.json"
}
bai Mu dan | Les Filles du Thé
Aller au contenu
Bonjour à vous nos très chers Ami(e)sThé ! Nous avons décidé de découvrir ce qui se cache sous ce grand manteau … blanc. Une couleur qui n’en n’est pas et qui fait tout de même partie de celles que l’on associe au Thé ! aiguilles d’argent photo de Abelke- pivoine blanche photo de Makamuki Le … Lire la suite Le Thé Blanc : Qui est-il?
Nom : Bai Mu Dan Couleur/type : Thé blanc Lieu de naissance : Chine, province de Fujian Histoire : Le Bai Mu Dan ou Pai Mu Tan 白牡丹, aussi appelé Pivoine Blanche est un thé blanc de Chine spécialité de la province du Fujian. Récolté entre le 15 mars et le … Lire la suite Bai Mu Dan
Bonjour à tous, Pour ce 3e volet de notre challenge “2 Thés dans 1 salon”, nous avons choisi de vous emmener à Bruxelles. Pourquoi les Filles du Thé à Bruxelles ? Profitant du fait que l’une de nous se soit récemment installée en Belgique, nous sommes parties à la découverte des salons de thé de … Lire la suite 3/12 : Les Filles du Thé à Bruxelles : Bai mu dan et Pu Er à La Mercerie -FERME-