PluginProbe
Image Optimizer – Compress Images and Convert to WebP or AVIF / trunk
Image Optimizer – Compress Images and Convert to WebP or AVIF vtrunk
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 +49 -0 1.2.0 → trunk View file →
@@ -4,8 +4,9 @@
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() {
11 12 this.controlSyncRequestInProgress = false;
@@ -36,8 +37,10 @@
36 37 initEventListeners() {
37 38 document.addEventListener( 'click', ( e ) => this.handleOptimizeButtonClick( e ) );
38 39 document.addEventListener( 'click', ( e ) => this.handleReoptimizeButtonClick( e ) );
39 40 document.addEventListener( 'click', ( e ) => this.handleRestoreButtonClick( e ) );
41 + document.addEventListener( 'click', ( e ) => this.handleOptimizationDetailsOpen( e ) );
42 + document.addEventListener( 'click', ( e ) => this.handleOptimizationDetailsClick( e ) );
40 43 }
41 44
42 45 async handleOptimizeButtonClick( e ) {
43 46 if ( ! e.target.closest( `${ SELECTORS.optimizeButtonSelector }, ${ SELECTORS.tryAgainOptimizeButtonSelector }` ) ) {
@@ -51,8 +54,10 @@
51 54
52 55 states.renderLoading( 'optimize' );
53 56
54 57 try {
58 + controlWrapper.dataset.isFrozen = true;
59 +
55 60 await API.optimizeSingleImage( {
56 61 imageId: new ControlMeta( controlWrapper ).getImageId(),
57 62 reoptimize: false,
58 63 } );
@@ -73,8 +78,10 @@
73 78
74 79 states.renderLoading( 'reoptimize' );
75 80
76 81 try {
82 + controlWrapper.dataset.isFrozen = true;
83 +
77 84 await API.optimizeSingleImage( {
78 85 imageId: new ControlMeta( controlWrapper ).getImageId(),
79 86 reoptimize: true,
80 87 } );
@@ -95,12 +102,54 @@
95 102
96 103 states.renderLoading( 'restore' );
97 104
98 105 try {
106 + controlWrapper.dataset.isFrozen = true;
107 +
99 108 await API.restoreSingleImage( new ControlMeta( controlWrapper ).getImageId() );
100 109 } catch ( error ) {
101 110 states.renderError( error );
102 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();
103 152 }
104 153 }
105 154
106 155 export default OptimizationControl;