File: ve.init.mw.ProgressBarWidget.js

package info (click to toggle)
mediawiki 1%3A1.35.13-1%2Bdeb11u2
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 274,932 kB
  • sloc: php: 677,563; javascript: 572,709; sql: 11,565; python: 4,447; xml: 3,145; sh: 892; perl: 788; ruby: 496; pascal: 365; makefile: 128
file content (54 lines) | stat: -rw-r--r-- 1,578 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
/*!
 * VisualEditor progress bar widget
 *
 * @copyright 2011-2020 VisualEditor Team and others; see AUTHORS.txt
 * @license The MIT License (MIT); see LICENSE.txt
 */

mw.libs.ve = mw.libs.ve || {};

/**
 * Progress bar widget
 *
 * This widget can be used to show a progress bar
 * while VE libraries are still loading.
 *
 * It has a similar API to OO.ui.ProgressBarWidget, but is designed to
 * be loaded before any core VE code or dependencies, e.g. OOUI.
 *
 * @class
 * @constructor
 */
mw.libs.ve.ProgressBarWidget = function VeUiMwProgressBarWidget() {
	this.progressStep = 0;
	this.progressSteps = [
		// [ percentage, delay ]
		[ 30, 3000 ],
		[ 70, 2000 ],
		[ 100, 1000 ]
	];
	// Stylesheets might not have processed yet, so manually set starting width to 0
	this.$bar = $( '<div>' ).addClass( 've-init-mw-progressBarWidget-bar' ).css( 'width', 0 );
	this.$element = $( '<div>' ).addClass( 've-init-mw-progressBarWidget' ).append( this.$bar );
};

mw.libs.ve.ProgressBarWidget.prototype.setLoadingProgress = function ( target, duration ) {
	var $bar = this.$bar.stop();
	$bar.css( 'transition', 'width ' + duration + 'ms ease-in' );
	setTimeout( function () {
		$bar.css( 'width', target + '%' );
	} );
};

mw.libs.ve.ProgressBarWidget.prototype.incrementLoadingProgress = function () {
	var step = this.progressSteps[ this.progressStep ];
	if ( step ) {
		this.setLoadingProgress( step[ 0 ], step[ 1 ] );
		this.progressStep++;
	}
};

mw.libs.ve.ProgressBarWidget.prototype.clearLoading = function () {
	this.progressStep = 0;
	this.setLoadingProgress( 0, 0 );
};