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; thé noir | Les Filles du Thé
champagne-des-thes-darjeeling-les-filles-du-the-the-noir

Darjeeling : les 4 indispensables pour choisir un Champagne des Thés plutôt qu’un Champony !

Célèbres pour la qualité de leur Thés Fermentés, c’est à travers le monde que les Darjeeling jouissent d’une réputation prestigieuse. Chaque année, les récoltes apporteront des notes différentes résultant des conditions climatiques et des paramètres de transformation. Photo de Rajib Darjeeling, un Paradis pour le Camelia Sinensis ! Darjeeling est une région montagneuse qui “subit” … Lire la suite Darjeeling : les 4 indispensables pour choisir un Champagne des Thés plutôt qu’un Champony !

lendemain-de-fete-puer-les-filles-du-the

Le Pu Er, le Thé Sombre anti gueule de bois et notre meilleur ami des lendemains de fêtes.

Bonjour à vous, nos très Chers Ami(e)s Thé ! Pour vous permettre de prendre encore plus soin de votre corps et de votre esprit, voici, en quoi le Pu Er peut vous y aider… Consommé depuis la dynastie Tang par les populations voisines du Tibet, il s’associe parfaitement à une alimentation très riche, propre aux … Lire la suite Le Pu Er, le Thé Sombre anti gueule de bois et notre meilleur ami des lendemains de fêtes.

mini-galettes-les-filles-du-the-pu-er

Le Pu Er | Comment le préparer pour profiter de tous ses bienfaits pour la santé?

  Bonjour à Vous,  cher(e)s ami(e)s Thé ! Cet article vient compléter celui sur le Pu Er, Qui est-il ? Il est question de découvrir les différents types de préparations de ce Thé Sombre qu’est le Pu Er… Le Pu Er, …en vrac, en galette, en brique ou en nid, … Ce Thé sombre ou … Lire la suite Le Pu Er | Comment le préparer pour profiter de tous ses bienfaits pour la santé?

Tendance et moderne, la dégustation de thé au IsaBella à Valenciennes – FERME-

Plaisir des sens ! Avant de pénétrer dans le IsaBella, le ton est donné.  La devanture couverte de blanc et noir est surmontée par ce nom IsaBella. Y entrer, nous invite au raffinement moderne et tendance de ce lieu. Un rez-de-chaussée plutôt destiné à la vente de produits raffinés : les chocolats, les magnifiques pâtisseries … Lire la suite Tendance et moderne, la dégustation de thé au IsaBella à Valenciennes – FERME-

La Mercerie : un salon enchanté à Bruxelles – FERME

Lorsqu’une mercerie se métamorphose en salon de thé… Nous voici à Bruxelles, et nous vous invitons à découvrir “La Mercerie”. Située à l’angle de la chaussée d’Ixelle et la rue de vergnies, cette ancienne mercerie a été métamorphosée en salon de thé grâce à l’historienne de l’art et scénographe Anne Goldschmidt. C’est un endroit sympa à … Lire la suite La Mercerie : un salon enchanté à Bruxelles – FERME