HEX
Server: nginx/1.18.0
System: Linux iZj6c1ieg2jrpk1z5tzi19Z 6.3.9-1.el7.elrepo.x86_64 #1 SMP PREEMPT_DYNAMIC Wed Jun 21 22:18:40 EDT 2023 x86_64
User: www (1001)
PHP: 8.2.4
Disabled: passthru,exec,system,putenv,chroot,chgrp,chown,shell_exec,popen,proc_open,pcntl_exec,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,imap_open,apache_setenv
Upload Files
File: /www/wwwroot/www.cytocare.cn/wp-content/plugins/hummingbird-performance/_src/js/utils/scanner.js
/**
 * Scanner class.
 *
 * @since 2.7.0
 */
class Scanner {
	constructor( totalSteps, currentStep ) {
		this.totalSteps = parseInt( totalSteps );
		this.currentStep = parseInt( currentStep );
		this.cancelling = false;
	}

	/**
	 * Start the scan.
	 */
	start() {
		this.updateProgressBar( this.getProgress() );

		const remainingSteps = this.totalSteps - this.currentStep;

		if ( this.currentStep !== 0 ) {
			// Scan already started.
			this.step( remainingSteps );
		} else {
			this.onStart().then( () => {
				this.step( remainingSteps );
			} );
		}
	}

	/**
	 * Cancel scan.
	 */
	cancel() {
		this.cancelling = true;
		this.updateProgressBar( 0, true );
	}

	/**
	 * Get scan progress.
	 *
	 * @return {number}  Progress 0-99.
	 */
	getProgress() {
		if ( this.cancelling ) {
			return 0;
		}
		const remainingSteps = this.totalSteps - this.currentStep;
		return Math.min(
			Math.round(
				( parseInt( this.totalSteps - remainingSteps ) * 100 ) /
					this.totalSteps
			),
			99
		);
	}

	/**
	 * Update progress bar.
	 *
	 * @param {number}  progress Progress percentage.
	 * @param {boolean} cancel   Cancel the scan.
	 */
	updateProgressBar( progress, cancel = false ) {
		if ( progress > 100 ) {
			progress = 100;
		}

		// Update progress bar.
		document.querySelector(
			'.sui-progress-block .sui-progress-text span'
		).innerHTML = progress + '%';

		document.querySelector(
			'.sui-progress-block .sui-progress-bar span'
		).style.width = progress + '%';

		if ( progress >= 90 ) {
			document.querySelector(
				'.sui-progress-state .sui-progress-state-text'
			).innerHTML = 'Finalizing...';
		}

		if ( cancel ) {
			document.querySelector(
				'.sui-progress-state .sui-progress-state-text'
			).innerHTML = 'Cancelling...';
		}
	}

	/**
	 * Execute a scan step.
	 *
	 * @param {number} remainingSteps
	 */
	step( remainingSteps ) {
		if ( remainingSteps >= 0 ) {
			this.currentStep = this.totalSteps - remainingSteps;
		}
	}

	/**
	 * On start function.
	 */
	onStart() {
		throw new Error( 'onStart() must be implemented in child class' );
	}

	/**
	 * On finish function.
	 */
	onFinish() {
		this.updateProgressBar( 100 );
	}
}

export default Scanner;