Create New Item
×
Item Type
File
Folder
Item Name
×
Search file in folder and subfolders...
File Manager
/
wp-content
/
plugins
/
wp-smushit
/
_src
/
js
/
modules
Advanced Search
Upload
New Item
Settings
Back
Back Up
Advanced Editor
Save
/* global WP_Smush */ /* global ajaxurl */ /** * Bulk restore JavaScript code. * * @since 3.2.2 */ (function() { "use strict"; /** * Bulk restore modal. * * @since 3.2.2 */ WP_Smush.restore = { modal: document.getElementById("smush-restore-images-dialog"), contentContainer: document.getElementById("smush-bulk-restore-content"), settings: { slide: "start", // start, progress or finish. success: 0, errors: [] }, items: [], // total items, 1 item = 1 step. success: [], // successful items restored. errors: [], // failed items. currentStep: 0, totalSteps: 0, /** * Init module. */ init() { if (!this.modal) { return; } this.settings = { slide: "start", success: 0, errors: [] }; this.resetModalWidth(); this.renderTemplate(); // Show the modal. window.SUI.openModal( "smush-restore-images-dialog", "wpbody-content", undefined, false ); }, /** * Update the template, register new listeners. */ renderTemplate() { const template = WP_Smush.onboarding.template("smush-bulk-restore"); const content = template(this.settings); if (content) { this.contentContainer.innerHTML = content; } this.bindSubmit(); }, /** * Reset modal width. * * @since 3.6.0 */ resetModalWidth() { this.modal.style.maxWidth = "460px"; this.modal.querySelector(".sui-box").style.maxWidth = "460px"; }, /** * Catch "Finish setup wizard" button click. */ bindSubmit() { const confirmButton = this.modal.querySelector( 'button[id="smush-bulk-restore-button"]' ); const self = this; if (confirmButton) { confirmButton.addEventListener("click", function(e) { e.preventDefault(); self.resetModalWidth(); self.settings = { slide: "progress" }; self.errors = []; self.renderTemplate(); self.initScan(); }); } }, /** * Cancel the bulk restore. */ cancel() { if ("start" === this.settings.slide || "finish" === this.settings.slide) { // Hide the modal. window.SUI.closeModal(); } else { this.updateProgressBar(true); window.location.reload(); } }, /** * Update progress bar during directory smush. * * @param {boolean} cancel Cancel status. */ updateProgressBar(cancel = false) { let progress = 0; if (0 < this.currentStep) { progress = Math.min( Math.round((this.currentStep * 100) / this.totalSteps), 99 ); } if (progress > 100) { progress = 100; } // Update progress bar this.modal.querySelector(".sui-progress-text span").innerHTML = progress + "%"; this.modal.querySelector(".sui-progress-bar span").style.width = progress + "%"; const statusDiv = this.modal.querySelector(".sui-progress-state-text"); if (progress >= 90) { statusDiv.innerHTML = "Finalizing..."; } else if (cancel) { statusDiv.innerHTML = "Cancelling..."; } else { statusDiv.innerHTML = this.currentStep + "/" + this.totalSteps + " " + "images restored"; } }, /** * First step in bulk restore - get the bulk attachment count. */ initScan() { const self = this; const _nonce = document.getElementById("_wpnonce"); const xhr = new XMLHttpRequest(); xhr.open("POST", ajaxurl + "?action=get_image_count", true); xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); xhr.onload = () => { if (200 === xhr.status) { const res = JSON.parse(xhr.response); if ("undefined" !== typeof res.data.items) { self.items = res.data.items; self.totalSteps = res.data.items.length; self.step(); } } else { window.console.log( "Request failed. Returned status of " + xhr.status ); } }; xhr.send("_ajax_nonce=" + _nonce.value); }, /** * Execute a scan step recursively */ step() { const self = this; const _nonce = document.getElementById("_wpnonce"); if (0 < this.items.length) { const item = this.items.pop(); const xhr = new XMLHttpRequest(); xhr.open("POST", ajaxurl + "?action=restore_step", true); xhr.setRequestHeader( "Content-type", "application/x-www-form-urlencoded" ); xhr.onload = () => { this.currentStep++; if (200 === xhr.status) { const res = JSON.parse(xhr.response); if ("undefined" !== typeof res.data.success && res.data.success) { self.success.push(item); } else { self.errors.push({ id: item, src: res.data.src, thumb: res.data.thumb, link: res.data.link }); } } self.updateProgressBar(); self.step(); }; xhr.send("item=" + item + "&_ajax_nonce=" + _nonce.value); } else { // Finish. this.settings = { slide: "finish", success: this.success.length, errors: this.errors, total: this.totalSteps }; self.renderTemplate(); if (0 < this.errors.length) { this.modal.style.maxWidth = "660px"; this.modal.querySelector(".sui-box").style.maxWidth = "660px"; } } } }; /** * Template function (underscores based). * * @type {Function} */ WP_Smush.restore.template = _.memoize(id => { let compiled; const options = { evaluate: /<#([\s\S]+?)#>/g, interpolate: /{{{([\s\S]+?)}}}/g, escape: /{{([^}]+?)}}(?!})/g, variable: "data" }; return data => { _.templateSettings = options; compiled = compiled || _.template(document.getElementById(id).innerHTML); return compiled(data); }; }); })();