PluginProbe
Image Optimizer – Compress Images and Convert to WebP or AVIF / 1.7.4
Image Optimizer – Compress Images and Convert to WebP or AVIF v1.7.4
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
image-optimization / modules / deactivation / assets / js / deactivation-feedback.js

deactivation-feedback.js in Image Optimizer – Compress Images and Convert to WebP or AVIF 1.7.4, at modules/deactivation/assets/js/deactivation-feedback.js

118 lines 2.9 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 import '../css/style.css';
2
3 const REASON_FIELDS = {
4 unclear_how_to_use: [ 'io_text_field_unclear', 'io_unclear_details' ],
5 switched_solution: [ 'io_text_field_switched', 'io_switched_details' ],
6 other: [ 'io_text_field_other', 'io_other_details' ],
7 };
8
9 class ImageOptimizationDeactivationHandler {
10 constructor() {
11 this.deactivationLink = document.querySelector(
12 '[id*="deactivate-image-optimizer"], [id*="deactivate-image-optimization"]',
13 );
14
15 if ( ! this.deactivationLink ) {
16 return;
17 }
18
19 this.originalDeactivationLink = this.deactivationLink.getAttribute( 'href' );
20
21 this.init();
22 }
23
24 modal( title, url, cssClass ) {
25 window.tb_show?.( title, url );
26 setTimeout(
27 () => document.getElementById( 'TB_window' )?.classList.add( cssClass ),
28 5,
29 );
30 }
31
32 hideFields() {
33 document
34 .querySelectorAll( '.image-optimization-feedback-text-field' )
35 .forEach( ( f ) => ( f.classList.add( 'text-field-hidden' ) ) );
36 }
37
38 toggleField( reason ) {
39 this.hideFields();
40 const fieldId = REASON_FIELDS[ reason ]?.[ 0 ];
41 if ( fieldId ) {
42 document.getElementById( fieldId ).classList.remove( 'text-field-hidden' );
43 }
44 }
45
46 sendRequest( data, done ) {
47 fetch( window?.imageOptimizationDeactivationFeedback?.ajaxurl || '', {
48 method: 'POST',
49 headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
50 body: new URLSearchParams( data ),
51 } ).finally( done );
52 }
53
54 handleSubmit() {
55 const reason = document.querySelector(
56 'input[name="image_optimization_deactivation_reason"]:checked',
57 )?.value;
58 const detailsId = REASON_FIELDS[ reason ]?.[ 1 ];
59 const extra = detailsId
60 ? document.getElementById( detailsId )?.value || ''
61 : '';
62
63 if ( ! reason ) {
64 this.deactivate();
65 return;
66 }
67
68 this.sendRequest(
69 {
70 action: 'image_optimization_deactivation_feedback',
71 reason,
72 additional_data: extra,
73 nonce: window?.imageOptimizationDeactivationFeedback?.nonce || '',
74 },
75 () => this.deactivate(),
76 );
77 }
78
79 deactivate() {
80 window.tb_remove?.();
81 window.location.href = this.originalDeactivationLink;
82 }
83
84 init() {
85 this.deactivationLink.addEventListener( 'click', ( e ) => {
86 e.preventDefault();
87 this.hideFields();
88 this.modal(
89 'QUICK FEEDBACK',
90 '#TB_inline?width=550&height=auto&inlineId=image-optimization-deactivation-modal',
91 'image-optimization-feedback-thickbox',
92 );
93 } );
94
95 document.addEventListener( 'change', ( e ) => {
96 if ( e.target?.name === 'image_optimization_deactivation_reason' ) {
97 this.toggleField( e.target.value );
98 }
99 } );
100
101 document.addEventListener( 'click', ( e ) => {
102 if ( e.target?.id === 'image-optimization-submit-deactivate' ) {
103 e.preventDefault();
104 this.handleSubmit();
105 }
106 if ( e.target?.id === 'image-optimization-skip-deactivate' ) {
107 e.preventDefault();
108 this.deactivate();
109 }
110 } );
111 }
112 }
113
114 document.addEventListener(
115 'DOMContentLoaded',
116 () => new ImageOptimizationDeactivationHandler(),
117 );
118