PluginProbe
Image Optimization – Compress Images and Convert to WebP or AVIF / 1.6.6
Image Optimization – Compress Images and Convert to WebP or AVIF v1.6.6
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 1.6.6 All 32 releases
image-optimization / modules / optimization / assets / js / control.js

control.js in Image Optimization – Compress Images and Convert to WebP or AVIF 1.6.6, at modules/optimization/assets/js/control.js

156 lines 4.4 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 import { __ } from '@wordpress/i18n';
2 import { speak } from '@wordpress/a11y';
3 import { SELECTORS } from './constants';
4 import API from './classes/api';
5 import ControlSync from './classes/control/control-sync';
6 import ControlStates from './classes/control/control-states';
7 import ControlMeta from './classes/control/control-meta';
8 import OptimizationDetails from './classes/optimization-details';
9
10 class OptimizationControl {
11 constructor() {
12 this.controlSyncRequestInProgress = false;
13
14 this.init();
15
16 this.controlSync = new ControlSync();
17 }
18
19 init() {
20 this.initEventListeners();
21
22 setInterval( () => this.runStatusCheckLoop(), 5000 );
23 }
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
37 initEventListeners() {
38 document.addEventListener( 'click', ( e ) => this.handleOptimizeButtonClick( e ) );
39 document.addEventListener( 'click', ( e ) => this.handleReoptimizeButtonClick( e ) );
40 document.addEventListener( 'click', ( e ) => this.handleRestoreButtonClick( e ) );
41 document.addEventListener( 'click', ( e ) => this.handleOptimizationDetailsOpen( e ) );
42 document.addEventListener( 'click', ( e ) => this.handleOptimizationDetailsClick( e ) );
43 }
44
45 async handleOptimizeButtonClick( e ) {
46 if ( ! e.target.closest( `${ SELECTORS.optimizeButtonSelector }, ${ SELECTORS.tryAgainOptimizeButtonSelector }` ) ) {
47 return;
48 }
49
50 speak( __( 'Optimization is in progress', 'image-optimization' ), 'assertive' );
51
52 const controlWrapper = e.target.closest( SELECTORS.controlWrapperSelector );
53 const states = new ControlStates( controlWrapper );
54
55 states.renderLoading( 'optimize' );
56
57 try {
58 controlWrapper.dataset.isFrozen = true;
59
60 await API.optimizeSingleImage( {
61 imageId: new ControlMeta( controlWrapper ).getImageId(),
62 reoptimize: false,
63 } );
64 } catch ( error ) {
65 states.renderError( error );
66 }
67 }
68
69 async handleReoptimizeButtonClick( e ) {
70 if ( ! e.target.closest( `${ SELECTORS.reoptimizeButtonSelector }, ${ SELECTORS.tryAgainReoptimizeButtonSelector }` ) ) {
71 return;
72 }
73
74 speak( __( 'Reoptimizing is in progress', 'image-optimization' ), 'assertive' );
75
76 const controlWrapper = e.target.closest( SELECTORS.controlWrapperSelector );
77 const states = new ControlStates( controlWrapper );
78
79 states.renderLoading( 'reoptimize' );
80
81 try {
82 controlWrapper.dataset.isFrozen = true;
83
84 await API.optimizeSingleImage( {
85 imageId: new ControlMeta( controlWrapper ).getImageId(),
86 reoptimize: true,
87 } );
88 } catch ( error ) {
89 states.renderError( error );
90 }
91 }
92
93 async handleRestoreButtonClick( e ) {
94 if ( ! e.target.closest( `${ SELECTORS.restoreButtonSelector }, ${ SELECTORS.tryAgainRestoreButtonSelector }` ) ) {
95 return;
96 }
97
98 speak( __( 'Image restoring is in progress', 'image-optimization' ), 'assertive' );
99
100 const controlWrapper = e.target.closest( SELECTORS.controlWrapperSelector );
101 const states = new ControlStates( controlWrapper );
102
103 states.renderLoading( 'restore' );
104
105 try {
106 controlWrapper.dataset.isFrozen = true;
107
108 await API.restoreSingleImage( new ControlMeta( controlWrapper ).getImageId() );
109 } catch ( error ) {
110 states.renderError( error );
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();
152 }
153 }
154
155 export default OptimizationControl;
156