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; Retour à l'Otaku pour une interview d'une des Filles du Thé par WeskhyTV. | Les Filles du Thé
interview-les-filles-du-the-weskhytv-otaku-lille

Retour à l’Otaku pour l’interview d’une des Filles du Thé par Weskhy TV !

Bonjour très cher(e)s AmiThés !

L’Otaku, “ Thé et Mangas jusqu’au bout des doigts” n’est pas seulement un super salon de Thé Lillois, c’est aussi un lieu qui permet d’échanger !

l-otaku-lille-les-filles-du-the

En effet, Les Filles du Thé ont été contactées par Alex de WeskyTV pour une interview ! Alex avait trouvé notre carte et Vianney lui a gentiment parlé de nous !

C’est comme ça que Mylène a “subi l’interrogatoire” d’Alex , qui en retour a vécu sa première expérience avec un Thé, le Lapsang Souchong ! Grand amateur de Café, il lui fallait bien un thé fumé !

Le tout s’est déroulé dans le salon privé de l’Otaku. Et oui, c’est possible aussi de s’isoler pour être interviewée ! ou d’avoir une discussion très privée… sur le Thé ou… le Thé !

salon privé-lille-lotaku-les-filles-du-the

En fait, à l’Otaku, tout est possible, boire des thés bios des Jardins de Gaïa, lire des Mangas, jouer à des jeux de société et même au jeu de Go Maintenant, on peut aussi manger des sandwichs, des Onigiri  et aussi des petites pâtisseries ! Onigiri, c’est qui ? L’Onigiri est une préparation culinaire japonaise souvent en forme de boulette de riz,  le tout enveloppé par une algue nori.  C’est clair, à l’Otaku, le dépaysement est garanti ! Le Japon, c’est ici !

otaku-lille-les-filles-du-the-salonde-the

Vous pourrez retrouver le tout sur la chaine Youtube  Weskhy TV ! Il y a aussi un reportage sur l’Otaku !

L’interview terminée, c’est Florent que j’ai rencontré ! Florent, le créateur de Manga Dokaze ! Manga Dokaze, c’est à Lille aussi, rue de la Monnaie et c’est le lieu incontournable des passionné(e)s de.. de… Mangas bien sûr !

Pour en savoir plus, vous pouvez retrouver son interview sur Weskhy TV ! Et oui Alex était déjà passé par là aussi !

Merci de nous avoir lu et à très bientôt !

Les Filles du Thé

Cliquez sur les images pour découvrir les interviews de WeskhyTV

interview-les-filles-du-the-weskhytv-otaku-lille        interview-otaku-salon-de-the-les-filles-du-the

manga-dokaze-lille-interview-les-filles-du-the-weskhytv

Laisser un commentaire