PluginProbe
Image Optimizer – Compress Images and Convert to WebP or AVIF / 1.7.7
Image Optimizer – Compress Images and Convert to WebP or AVIF v1.7.7
1.7.7 1.7.6 1.7.5 1.7.4 trunk 1.0.0 1.0.1 1.0.2 1.1.0 1.2.0 1.2.1 1.3.0 1.4.0 1.4.1 1.5.0 1.5.1 1.5.2 1.5.3 1.5.4 1.6.0 1.6.1 1.6.2 1.6.3 1.6.4 1.6.5 All 33 releases
← All changes | modules/optimization/assets/js/control.js +66 -2 1.1.01.7.7 View file →
@@ -4,25 +4,43 @@
4 4 import API from './classes/api';
5 5 import ControlSync from './classes/control/control-sync';
6 6 import ControlStates from './classes/control/control-states';
7 7 import ControlMeta from './classes/control/control-meta';
8 +import OptimizationDetails from './classes/optimization-details';
8 9
9 10 class OptimizationControl {
10 11 constructor() {
12 + this.controlSyncRequestInProgress = false;
13 +
11 14 this.init();
15 +
16 + this.controlSync = new ControlSync();
12 17 }
13 18
14 19 init() {
15 20 this.initEventListeners();
16 21
17 - const controlSync = new ControlSync();
18 - setInterval( () => controlSync.run(), 5000 );
22 + setInterval( () => this.runStatusCheckLoop(), 5000 );
19 23 }
20 24
25 + async runStatusCheckLoop() {
26 + if ( this.controlSyncRequestInProgress ) {
27 + return;
28 + }
29 +
30 + this.controlSyncRequestInProgress = true;
31 +
32 + await this.controlSync.run();
33 +
34 + this.controlSyncRequestInProgress = false;
35 + }
36 +
21 37 initEventListeners() {
22 38 document.addEventListener( 'click', ( e ) => this.handleOptimizeButtonClick( e ) );
23 39 document.addEventListener( 'click', ( e ) => this.handleReoptimizeButtonClick( e ) );
24 40 document.addEventListener( 'click', ( e ) => this.handleRestoreButtonClick( e ) );
41 + document.addEventListener( 'click', ( e ) => this.handleOptimizationDetailsOpen( e ) );
42 + document.addEventListener( 'click', ( e ) => this.handleOptimizationDetailsClick( e ) );
25 43 }
26 44
27 45 async handleOptimizeButtonClick( e ) {
28 46 if ( ! e.target.closest( `${ SELECTORS.optimizeButtonSelector }, ${ SELECTORS.tryAgainOptimizeButtonSelector }` ) ) {
@@ -36,8 +54,10 @@
36 54
37 55 states.renderLoading( 'optimize' );
38 56
39 57 try {
58 + controlWrapper.dataset.isFrozen = true;
59 +
40 60 await API.optimizeSingleImage( {
41 61 imageId: new ControlMeta( controlWrapper ).getImageId(),
42 62 reoptimize: false,
43 63 } );
@@ -58,8 +78,10 @@
58 78
59 79 states.renderLoading( 'reoptimize' );
60 80
61 81 try {
82 + controlWrapper.dataset.isFrozen = true;
83 +
62 84 await API.optimizeSingleImage( {
63 85 imageId: new ControlMeta( controlWrapper ).getImageId(),
64 86 reoptimize: true,
65 87 } );
@@ -80,12 +102,54 @@
80 102
81 103 states.renderLoading( 'restore' );
82 104
83 105 try {
106 + controlWrapper.dataset.isFrozen = true;
107 +
84 108 await API.restoreSingleImage( new ControlMeta( controlWrapper ).getImageId() );
85 109 } catch ( error ) {
86 110 states.renderError( error );
87 111 }
112 + }
113 +
114 + async handleOptimizationDetailsOpen( e ) {
115 + if ( ! e.target.closest( `${ SELECTORS.optimizationDetailsButtonSelector }` ) ) {
116 + return;
117 + }
118 +
119 + const controlWrapper = e.target.closest( SELECTORS.controlWrapperSelector );
120 + const imageId = new ControlMeta( controlWrapper ).getImageId();
121 +
122 + try {
123 + OptimizationDetails.initModal();
124 + OptimizationDetails.renderLoading();
125 +
126 + const details = await API.getOptimizationDetails( imageId );
127 +
128 + OptimizationDetails.openModal();
129 + OptimizationDetails.renderData( imageId, details );
130 + } catch ( error ) {
131 + OptimizationDetails.openModal();
132 + OptimizationDetails.renderError( error.message );
133 + }
134 + }
135 +
136 + async handleOptimizationDetailsClick( e ) {
137 + if ( ! e.target.closest( `${ SELECTORS.optimizationDetailsOptimizeButtonSelector }` ) ) {
138 + return;
139 + }
140 +
141 + const imageId = parseInt( e.target.dataset?.imageId, 10 );
142 +
143 + await API.optimizeSingleImage( { imageId } );
144 +
145 + const controlWrapper = document.querySelector( `.image-optimization-control[data-image-optimization-image-id="${ imageId }"]` );
146 +
147 + if ( controlWrapper ) {
148 + new ControlStates( controlWrapper ).renderLoading( 'optimize' );
149 + }
150 +
151 + OptimizationDetails.closeModal();
88 152 }
89 153 }
90 154
91 155 export default OptimizationControl;