summaryrefslogtreecommitdiff
blob: b0ec95fd5d6b28cabbdcfcb2f47979282fbd41b5 (plain)
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
'use strict';
/* eslint-disable no-implicit-globals */

/*!
 * Used to embed translation stats graph on other pages.
 * @license GPL-2.0-or-later
 */
var EmbeddedHandler = function ( $graphContainer ) {
	var graphOptions = JSON.parse(
		$graphContainer.find( '[name="translationStatsGraphOptions"]' ).val()
	);

	function getHeight() {
		return parseInt( graphOptions.height, 10 );
	}

	function getWidth() {
		return parseInt( graphOptions.width, 10 );
	}

	function getAllOptions() {
		return {
			measure: graphOptions.count,
			days: graphOptions.days,
			start: graphOptions.start,
			granularity: graphOptions.scale,
			group: graphOptions.group,
			language: graphOptions.language,
			height: getHeight(),
			width: getWidth()
		};
	}

	return {
		getAllOptions: getAllOptions
	};
};

$( function () {
	var $graphContainers = $( '.mw-translate-translationstats-container' ),
		currentGraph = 0,
		graphInstances = [];

	function loadGraph() {
		var currentGraphBuilder = graphInstances[ currentGraph ].graphBuilder,
			currentOptions = graphInstances[ currentGraph ].options.getAllOptions();

		currentGraphBuilder
			.display( currentOptions )
			.always( function () {
				++currentGraph;
				if ( currentGraph < graphInstances.length ) {
					loadGraph();
				}
			} );
	}

	// Create graph and options instances, then display loader
	function initGraph( $graphContainer ) {
		var graphBuilder,
			graphOptions;

		graphOptions = new EmbeddedHandler( $graphContainer );
		graphBuilder = new mw.translate.TranslationStatsGraphBuilder(
			$graphContainer, graphOptions.getAllOptions()
		);
		graphBuilder.showLoading();

		return {
			graphBuilder: graphBuilder,
			options: graphOptions
		};
	}

	for ( ;currentGraph < $graphContainers.length; ++currentGraph ) {
		graphInstances.push(
			initGraph( $graphContainers.eq( currentGraph ) )
		);
	}

	currentGraph = 0;
	setTimeout( function () {
		// Give time to display the loaders.
		loadGraph();
	} );
} );