wikimedia/mediawiki-extensions-Translate

View on GitHub
resources/js/ext.translate.translationstats.embedded.js

Summary

Maintainability
A
0 mins
Test Coverage
'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 graphOptions = new EmbeddedHandler( $graphContainer );
        var 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();
    } );
} );