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; Salon de thé | Les Filles du Thé - Part 3
reporter-toulon-o-gout-the

11/12 : Reporters pour les Filles du Thé à Toulon – Multiples dégustations O goût thé! -FERME-

Bonjour à tous, Pour cette escale estivale « 2 thés dans 1 salon », direction Toulon ! Après nos étapes septentrionales, nous avons décidé d’en consacrer une dans le Sud de la France. Et pour ça, quoi de mieux que d’envoyer deux de nos meilleures reporters/ représentantes/ supportrices : Diane et Katy ! Diane, amie … Lire la suite 11/12 : Reporters pour les Filles du Thé à Toulon – Multiples dégustations O goût thé! -FERME-

Un Déjeuner… des Thés pour les Filles du Thé

Bonjour à toutes et à tous, Nous voilà à Marcq en Baroeul, à deux pas du croisé Laroche pour un Déjeuner… des Thés ! Entrer chez Annick, c’est un peu comme dans les pays Nordiques : le bois et le blanc se mêlent pour créer une ambiance douce et apaisante. Pas de fioriture, c’est l’art … Lire la suite Un Déjeuner… des Thés pour les Filles du Thé

8/12 : Les Filles du Thé au Touquet, 2 infusions chez ABACA

Bonjour ! Pour cette nouvelle étape de notre challenge “2 Thés dans 1 Salon”, nous avons choisi de vous faire découvrir Le Touquet ! Pourquoi les Filles du Thé au Touquet ? Pour ceux qui ne connaitraient pas cette jolie station balnéaire appelée “Le Touquet-Paris-Plage”, sachez qu’elle se situe sur la côte d’Opale, dans le … Lire la suite 8/12 : Les Filles du Thé au Touquet, 2 infusions chez ABACA

ABACA : bananier et un lieu pas comme les autres

ABACA, plus qu’un lieu, un concept ! Abaca, c’est une variété de bananier qui pousse aux Philippines.  C’est aussi un concept, pas comme les autres,  qui a germé dans l’esprit d’Eric et de Nicolas… pour pousser au Touquet ! Dès notre passage devant cet espace, le ton est donné : ABACA, c’est l’univers des plantes, … Lire la suite ABACA : bananier et un lieu pas comme les autres

Les Filles du The sont à Londres… ou presque !! This is London @ Roubaix !

Bonjour à toutes et à tous ! Un petit tour à Londres avec les Filles du thé ? It’s Tea Time & This is London !!! – What ?” This is London, c’est so British food & atmosphère ! Un concept créé par Flora. Après une année et demie passée à Londres, elle a décidé … Lire la suite Les Filles du The sont à Londres… ou presque !! This is London @ Roubaix !