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; Notre challenge | Les Filles du Thé - Part 4

L’Instant Thé : Témoin du folklore montois !

Nouvelle escale en Belgique dans la capitale culturelle 2015, Mons ! C’est après quelques flâneries, dans les rues pavées du centre ville de Mons que nous trouvons L’Instant Thé. Nous l’avions sélectionné pour la possibilité des dégustations !         photo de Juliette j’ai l’impression  d’être Bernadette mais bon, Bernadette, elle est très chouette comme … Lire la suite L’Instant Thé : Témoin du folklore montois !

5/12 : Les Filles du Thé à Mons, Le Petit Singe et Lumeçon de L’Instant Thé !

Bonjour à tous, 5e escale de notre challenge “2 Thés dans un Salon” : Mons (en Belgique) ! Pourquoi les Filles du Thé à Mons ? Pour cette nouvelle étape, nous voulions trouver un salon de thé dans une ville quelque part entre Lille et Bruxelles, nous avons choisi MONS. Pour vous repérez, voici une … Lire la suite 5/12 : Les Filles du Thé à Mons, Le Petit Singe et Lumeçon de L’Instant Thé !

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-

4/12 : Les Filles du Thé à Valenciennes : Long Jing & Grand Yunnan chez IsaBella -FERME-

Bonjour à tous, Nous voilà déjà à la 4e escale de notre challenge : “2 Thés dans 1 Salon”! Cette fois, nous vous proposons d’aller faire un tour à Valenciennes ! Pourquoi Les Filles du Thé à Valenciennes ? Tout d’abord vous vous demandez peut-être  où se trouve Valenciennes. La petite carte suivante devrait vous … Lire la suite 4/12 : Les Filles du Thé à Valenciennes : Long Jing & Grand Yunnan chez IsaBella -FERME-

3/12 : Les Filles du Thé à Bruxelles : Bai mu dan et Pu Er à La Mercerie -FERME-

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-