PluginProbe ʕ •ᴥ•ʔ
WP Chat App / trunk
WP Chat App vtrunk
3.8.1 3.8.2 trunk 2.6 3.4 3.4.1 3.4.2 3.4.4 3.4.5 3.4.6 3.5 3.6 3.6.1 3.6.2 3.6.3 3.6.4 3.6.5 3.6.6 3.6.7 3.6.8 3.6.9 3.7.0 3.7.1 3.7.2 3.7.3 3.7.4 3.8.0
wp-whatsapp / vendor-prefixed / assets / js / license.js
wp-whatsapp / vendor-prefixed / assets / js Last commit date
license.js 4 months ago other-plugins.js 3 months ago
license.js
177 lines
1 /**
2 * License activate/update/remove via REST API.
3 * Slug-agnostic: discovers all window[`${slug}LicenseData`] objects on the page
4 * so one script handles all YayCommerce plugins.
5 *
6 * Each plugin's LicenseHandler::enqueue_license_scripts() localizes:
7 * window[`${slug}LicenseData`] = { slug, apiSettings: { restUrl, restNonce } }
8 */
9 jQuery(document).ready(function () {
10 // Discover all registered plugin license data objects
11 var dataKeys = Object.keys(window).filter(function (k) {
12 return k.endsWith('LicenseData') && window[k] && window[k].apiSettings;
13 });
14
15 dataKeys.forEach(function (dataKey) {
16 initLicenseUI(window[dataKey]);
17 });
18
19 function initLicenseUI(data) {
20 var slug = data.slug || data.apiSettings.slug || '';
21 if (!slug) return;
22
23 var REST_URL = data.apiSettings.restUrl;
24 var REST_NONCE = data.apiSettings.restNonce;
25 var POST_OPTIONS = {
26 method: 'POST',
27 headers: {
28 'Content-type': 'application/json',
29 'x-wp-nonce': REST_NONCE,
30 },
31 };
32
33 var escapedSlug = CSS.escape(slug);
34 jQuery('.yaycommerce-license-layout').on(
35 'click',
36 ".yaycommerce-activate-license-button[data-plugin='" + escapedSlug + "']",
37 handleActivate
38 );
39 jQuery('.yaycommerce-license-layout').on(
40 'click',
41 ".yaycommerce-update-license[data-plugin='" + escapedSlug + "']",
42 handleUpdate
43 );
44 jQuery('.yaycommerce-license-layout').on(
45 'click',
46 ".yaycommerce-remove-license[data-plugin='" + escapedSlug + "']",
47 handleRemove
48 );
49 jQuery('.yaycommerce-license-layout').on(
50 'click',
51 '#' + jQuery.escapeSelector(slug) + '_license_card .yaycommerce-license-message .yaycommerce-license-message__close',
52 function () {
53 hideMessage(slug);
54 }
55 );
56
57 function handleActivate(event) {
58 event.preventDefault();
59 clearMessages();
60 var plugin = jQuery(this).data('plugin');
61 beforeCallAPI(plugin, 'activate');
62 hideMessage(plugin);
63 var licenseKey = jQuery('#' + jQuery.escapeSelector(plugin) + '_license_input').val();
64
65 fetch(REST_URL + '/license/activate', Object.assign({}, POST_OPTIONS, {
66 body: JSON.stringify({ license_key: licenseKey, plugin: plugin }),
67 }))
68 .then(function (r) { return r.json(); })
69 .then(function (response) {
70 afterCallAPI(plugin, 'activate');
71 if (response.success) {
72 replaceContent(response);
73 }
74 showMessage(response, 'activate');
75 });
76 }
77
78 function handleUpdate(event) {
79 event.preventDefault();
80 clearMessages();
81 var plugin = jQuery(this).data('plugin');
82 beforeCallAPI(plugin, 'update');
83
84 fetch(REST_URL + '/license/update', Object.assign({}, POST_OPTIONS, {
85 body: JSON.stringify({ plugin: plugin }),
86 }))
87 .then(function (r) { return r.json(); })
88 .then(function (response) {
89 afterCallAPI(plugin, 'update');
90 replaceContent(response);
91 showMessage(response, 'update');
92 });
93 }
94
95 function handleRemove(event) {
96 event.preventDefault();
97 clearMessages();
98 var plugin = jQuery(this).data('plugin');
99 beforeCallAPI(plugin, 'remove');
100
101 fetch(REST_URL + '/license/delete', Object.assign({}, POST_OPTIONS, {
102 body: JSON.stringify({ plugin: plugin }),
103 }))
104 .then(function (r) { return r.json(); })
105 .then(function (response) {
106 afterCallAPI(plugin, 'remove');
107 replaceContent(response);
108 showMessage({ success: true }, 'remove');
109 });
110 }
111
112 function replaceContent(data) {
113 jQuery('#' + jQuery.escapeSelector(data.slug) + '_license_card').replaceWith(data.html);
114 updateImportantNotice();
115 }
116
117 function updateImportantNotice() {
118 // If any activate card remains on the page → still has inactive licenses
119 var hasInactive = jQuery('.yaycommerce-license-settings .yaycommerce-activate-license-button').length > 0;
120 var $notice = jQuery('.yaycommerce-license__important-notice');
121 if (hasInactive) {
122 $notice.attr('data-display', 'true').show();
123 } else {
124 $notice.attr('data-display', 'false').hide();
125 }
126 }
127
128 function hideMessage(s) {
129 jQuery('#' + jQuery.escapeSelector(s) + '_license_card .yaycommerce-license-message')
130 .removeClass('show')
131 .html('');
132 }
133 }
134
135 function clearMessages() {
136 jQuery('.message').removeClass('active');
137 }
138
139 function showMessage(data, action) {
140 var id = 'message-' + action + '-' + (data.success ? 'success' : 'error');
141 var el = document.getElementById(id);
142 if (el) {
143 el.classList.add('active');
144 setTimeout(function () { el.classList.remove('active'); }, 2000);
145 }
146 }
147
148 function beforeCallAPI(plugin, action) {
149 var sel = "[data-plugin='" + CSS.escape(plugin) + "']";
150 var btnClass = {
151 activate: '.yaycommerce-activate-license-button',
152 update: '.yaycommerce-update-license',
153 remove: '.yaycommerce-remove-license'
154 };
155 // Show spinner only on the clicked button
156 if (btnClass[action]) {
157 jQuery(btnClass[action] + sel + ' .activate-loading').css('display', 'inline-flex');
158 }
159 // Disable all buttons for this plugin
160 jQuery('.yaycommerce-activate-license-button' + sel).attr('disabled', true);
161 jQuery('.yaycommerce-update-license' + sel).attr('disabled', true);
162 jQuery('.yaycommerce-remove-license' + sel).attr('disabled', true);
163 }
164
165 function afterCallAPI(plugin, action) {
166 var sel = "[data-plugin='" + CSS.escape(plugin) + "']";
167 // Hide all spinners
168 jQuery('.yaycommerce-activate-license-button' + sel + ' .activate-loading').hide();
169 jQuery('.yaycommerce-update-license' + sel + ' .activate-loading').hide();
170 jQuery('.yaycommerce-remove-license' + sel + ' .activate-loading').hide();
171 // Re-enable all buttons
172 jQuery('.yaycommerce-activate-license-button' + sel).attr('disabled', false);
173 jQuery('.yaycommerce-update-license' + sel).attr('disabled', false);
174 jQuery('.yaycommerce-remove-license' + sel).attr('disabled', false);
175 }
176 });
177