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; { "name": "woocommerce/product-image", "title": "Product Image", "description": "Display the main product image.", "category": "woocommerce-product-elements", "attributes": { "showProductLink": { "type": "boolean", "default": true }, "showSaleBadge": { "type": "boolean", "default": true }, "saleBadgeAlign": { "type": "string", "default": "right" }, "imageSizing": { "type": "string", "default": "single" }, "productId": { "type": "number", "default": 0 }, "isDescendentOfQueryLoop": { "type": "boolean", "default": false }, "isDescendentOfSingleProductBlock": { "type": "boolean", "default": false }, "width": { "type": "string" }, "height": { "type": "string" }, "scale": { "type": "string", "default": "cover" }, "aspectRatio": { "type": "string" } }, "supports": { "interactivity": { "clientNavigation": true }, "html": false, "__experimentalBorder": { "radius": true, "__experimentalSkipSerialization": true }, "typography": { "fontSize": true, "__experimentalSkipSerialization": true }, "spacing": { "margin": true, "padding": true }, "dimensions": { "aspectRatio": true, "__experimentalSkipSerialization": true }, "email": true }, "selectors": { "root": ".wp-block-woocommerce-product-image.wc-block-components-product-image, .wp-block-woocommerce-product-image .wc-block-components-product-image" }, "ancestor": [ "woocommerce/all-products", "woocommerce/single-product", "woocommerce/product-template", "core/post-template" ], "usesContext": [ "imageId", "postId", "query", "queryId" ], "keywords": [ "WooCommerce" ], "textdomain": "woocommerce", "apiVersion": 3, "$schema": "https://schemas.wp.org/trunk/block.json" } Commentaires sur : Le Thé Blanc : Qui est-il? https://les-filles-du-the.com/le-the-blanc-qui-est-il/?utm_source=rss&utm_medium=rss&utm_campaign=le-the-blanc-qui-est-il Apprenez facilement à choisir, préparer et déguster votre Thé ! Tue, 28 Feb 2017 15:47:10 +0000 hourly 1 Par : Juliette et Mylène https://les-filles-du-the.com/le-the-blanc-qui-est-il/#comment-571 Tue, 28 Feb 2017 15:47:10 +0000 http://les-filles-du-the.com/?p=1830#comment-571 En réponse à Petit.

Bonjour Petit Gaiwan et un immense merci pour ces informations complémentaires!
Nous avons pu visiter ton univers et visualiser les thés blancs abordés dans le commentaire… magnifiques !
Au plaisir pour tous compléments d’informations !

]]>
Par : Petit https://les-filles-du-the.com/le-the-blanc-qui-est-il/#comment-568 Mon, 27 Feb 2017 15:38:32 +0000 http://les-filles-du-the.com/?p=1830#comment-568 Bonjour,

Très bel article sur le thé blanc. Afin d’ajouter un peu d’eau au moulin, voici quelques infos supplémentaires.

En plus du comté de Zheng He, il y a également le comté de Fuding qui produit de grandes quantités de thé blanc, il y a aussi la province du Guangxi qui produit un peu de thé blanc, mais il est plus difficile d’en trouver.

En plus des deux sortes de thés blancs mentionnés, il y a également le Shou Mei, le Gong Mei, le new craft white tea et le jasmine dragon pearl (qui peut également être fait à base de thé vert).
Le thé blanc est également produit en galettes (comme le Pu Erh).
Autre point également méconnu du grand public, bien stocké, le thé blanc se conserve de nombreuses années et ne perd en rien ses qualités (mais il évolue).

Concernant le Silver Needle (aiguilles d’argent), il peut déjà être récolté aux alentours de la 3ème semaine du mois de mars (tout dépend du temps).
Le Bai Mu Dan, sera également récolté avant Qing Ming, mais son grade dépendra également de la quantité de bourgeons que le thé contient, ainsi que de la taille des feuilles. Un grade inférieur de Bai Mu Dan aura très peu de bourgeons et des feuilles plus développées, même si cela reste les 1ère et 2ème feuilles.
Idem pour le Gong Mei, le Shou Mei, et le new craft white tea, qui est également beaucoup plus oxydé que les autres sortes de thés blancs (env. 30% au lieu des 5% habituels).

Le thé blanc est également très bon pour la santé, mais là, c’est une autre histoire…

]]>