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; Les Filles du The sont à Londres… ou presque !! This is London @ Roubaix ! | Les Filles du Thé

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é ?

Thisislondon-lesfillesduthe

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é d’installer la capitale dans laquelle vivent le plus de communautés à Roubaix !

this-is-londn-entree

La cuisine anglaise vue par Flora

A travers, ce petit coin londonien, elle nous fait découvrir la vraie cuisine anglaise. Je sais que vous êtes déjà en train de penser aux amas verts gélatineux et aux sauces improbables. Mais pour Flora, la cuisine anglaise c’est surtout une cuisine végétarienne, avec des produits frais et très avant-gardiste. C’est un peu une “cuisine Melting Pot”. Toutes les communautés y ont apportées leurs notes, leurs saveurs, leurs traditions. Tels que les quartiers londoniens, la cuisine anglaise est le doux mélange de toutes ces communautés.

Nous avions opté pour un brunch entre filles du thé. Belles découvertes gustatives sans peur de la gélatine verte !!

    the-menthekeep-calm

                                                                  chai

C’est aussi pour cette raison que nous avons choisi le thé à la menthe et le chaï pour illustrer les propos de Flora !

Une ambiance cosy & funny !

this-is-london-etage

This is London est ouvert depuis 1 an et demi. C’est vraiment Londres en plein cœur de Roubaix. On a même l’impression que les Beatles vont donner un concert privé à l’étage !

Pour un P’tit dej, un brunch, un goûter ou un thé, entre amis ou entre clients, vous vous retrouverez de l’autre côté de la manche sans avoir à prendre l’Eurostar Clignement d'œil.

Flora sait nous faire entrer dans son univers so british. Nous y sommes bien, comme à la maison !!

this_is-london-mylene-krystelflora-my-juflora-krystel-mylene

Laisser un commentaire