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; japon | Les Filles du Thé
l-otaku-les-filles-du-the-the

L’Otaku, Thés et Mangas jusqu’au bout des doigts !

Bonjour à vous, nos chers Ami(e)s Thé ! Si vous voulez marcher dans les pas des Filles du Thé à Lille, un endroit incontournable, l’Otaku ! C’est au 7 rue Jean sans Peur … même pas peur !        Un royaume japonais au cœur de Lille ! Ouvert depuis  octobre 2016, l’Otaku est le fruit … Lire la suite L’Otaku, Thés et Mangas jusqu’au bout des doigts !

IMG_2974

Interview | Kosyuen, LE salon de Thé JAPONAIS à PARIS

Bonjour à toutes et à tous, Nous avons tellement adoré le moment passé chez Kosyuen (vous pouvez aller voir l’article ici) que nous avions envie d’en savoir un peu plus. Anne-Laure, la gérante du salon de thé Japonais a gentiment accepté d’être interviewée et de nous livrer les secrets de Kosyuen. Retrouvez les infos sur … Lire la suite Interview | Kosyuen, LE salon de Thé JAPONAIS à PARIS

kosyuen-les-filles-du-thé

Kosyuen : Le salon de thé JAPONAIS en plein coeur de PARIS

Bonjour à toutes et à tous, En cherchant un salon de thé sympa à Paris où passer un moment entre amis, j’ai (Juliette) demandé conseil à Valentine du blog Thé Café & Scones qui m’a tout de suite fait une top liste (ou une liste top) de petites merveilles de salons dignes de ce nom. … Lire la suite Kosyuen : Le salon de thé JAPONAIS en plein coeur de PARIS

sial-les-filles-du-the

Un Matcha au SIAL rien que pour moi !

Bonjour à toutes et à tous ! Vous avez certainement vu passer cette  photo sur Instagram …Une Fille du Thé au SIAL! Quand Pascal invite une Fille du Thé au SIAL ! Qu’est ce que le SIAL ? Le SIAL, c’est le Salon International de l’Alimentation. C’est à cet endroit que nous pouvons voir les … Lire la suite Un Matcha au SIAL rien que pour moi !

les-filles-du-the-matcha-genmaicha

Genmaïcha/Matcha Genmaïcha

  Nom  : Genmaïcha (surnom : thé pop corn) / Matcha Genmaïcha Couleur/type : Mélange de thé vert bancha, de riz soufflé et grillé et de popcorn avec ou sans Matcha (poudre de feuilles de thé vert) Lieu de naissance : Japon Histoire  : Genmaïcha signifie « thé de riz brun ». L’histoire raconte qu’à l’origine, le Genmaïcha était consommé par les Japonais … Lire la suite Genmaïcha/Matcha Genmaïcha