view test-data/assembly-stats.html @ 0:9e4955725212 draft default tip

planemo upload for repository https://github.com/galaxyproject/tools-iuc/tree/master/tools/assembly-stats commit 28119c39c4b59a67f629c8ca569d58f4d2949c9c
author iuc
date Wed, 21 Jun 2023 09:26:46 +0000
parents
children
line wrap: on
line source

<html>
<head>
    <title>assembly stats</title>
</head>
<body>
    <link rel="stylesheet" type="text/css" href="css/circle-plot.css?v1">
    <link rel="stylesheet" type="text/css" href="css/square-plot.css?v1">
    <link rel="stylesheet" type="text/css" href="css/table.css?v1">
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.2/jquery.min.js"></script>
    <script src="https://d3js.org/d3.v3.min.js" charset="utf-8"></script>
    <script src="js/d3-tip.js"></script>
    <script type="text/javascript" src="js/circle-plot.js?v1"></script>
    <script type="text/javascript" src="js/square-plot.js?v1"></script>
    <script type="text/javascript" src="js/table.js?v1"></script>
    <style>
        html, body {
            padding: 0px;
            margin: 0px;
            overflow: hidden;
        }

        #assembly {
            text-align: center;
            position: fixed;
            top: 0;
            left: 0;
            bottom: 0;
            right: 0;
            font-family: helvetica, arial, sans-serif;
            font-size: 14pt;
            overflow: hidden;
        }

        #assembly_stats {
            height: 100%;
            width: 100%;
        }

        .asm-tab-container {
            position: relative;
            width: 100%;
            height: 34px;
            text-align: center;
            color: #555555;
            background-color: #cccccc;
        }

        .asm-tab {
            position: relative;
            width: 33.33%;
            height: 30px;
            display: inline-block;
            font-size: 12pt;
            line-height: 30px;
            margin-left: -2px;
            margin-top: 2px;
            border: solid 2px #555555;
            border-top: none;
            border-bottom: none;
            cursor: pointer;
            border-radius: 17px;
        }

        .asm-tab.active {
            color: black;
            margin-top: 0;
            border: solid 2px #555555;
            background-color: #bbbbbb;
        }

        .asm-tab:hover {
            margin-top: 0;
            border: solid 2px #555555;
        }

        .asm-plot-container {
            position: relative;
            width: 100%;
            height: 90%;
            text-align: center;
        }

        #assembly_stats_left {
            position: relative;
            width: 50%;
            height: 90%;
            float: left;
            text-align: center;
        }

        #assembly_stats_right {
            position: relative;
            width: 50%;
            height: 90%;
            float: right;
            text-align: center;
        }
    </style>

    <div id="assembly_stats"></div>

    <script>
        var queries = window.location.href.replace(/^.+\?/, '').split('&');
        var params = [];
        queries.forEach(function (q) {
            var parts = q.split('=');
            if (!params[parts[0]]) params[parts[0]] = [];
            params[parts[0]].push(parts[1]);
        });

        var assemblies = params['assembly'] || ['output'];
        var path = params['path'] || 'json/';
        if (params['altAssembly']) assemblies = assemblies.concat(params['altAssembly']);

        var views = ['circle', 'cumulative', 'table']; // Les trois onglets à afficher
        var defaultTab = 'circle'; // Onglet par défaut à afficher

        var div = d3.select('div#assembly_stats');
        var tab_container = div.append('div').attr('class', 'asm-tab-container');
        var tabcount = 3; // Nombre d'onglets (circle, cumulative, table)
        var tabwidth = 25; // Largeur de chaque onglet en pourcentage

        for (var i = 0; i < tabcount; i++) {
            var tab_div = tab_container.append('div')
                .attr('class', function () {
                    if (views[i] === defaultTab) return 'asm-tab active';
                    return 'asm-tab';
                })
                .style('width', tabwidth + '%')
                .text(views[i]);

            tab_div.on('click', function () {
                d3.selectAll('.asm-tab').classed('active', false);
                d3.select(this).classed('active', true);

                var view = d3.select(this).text();
                var plot_container = d3.select('#asm-plot-container');

                if (view === 'circle') {
                    plot_container.html('');
                    arr[0].drawPlot('asm-plot-container');
                } else if (view === 'cumulative') {
                    plot_container.html('');
                    arr[0].squarePlot('asm-plot-container');
                    arr[0].addKey(assemblies);

                    setTimeout(function () {
                        arr.forEach(function (asm, index) {
                            if (index > 0) {
                                var data = asm.prepareLine();
                                arr[0].addLine(data, asm.name, asm);
                            }
                        });
                    }, 250);
                } else if (view === 'table') {
                    plot_container.html('');
                    arr[0].drawTable('asm-plot-container');

                    setTimeout(function () {
                        arr.forEach(function (asm, index) {
                            if (index > 0) {
                                setTimeout(function () {
                                    arr[0].addColumn(asm);
                                }, 250);
                            }
                        });
                    }, 250);
                }
            });
        }

        var plot_container = div.append('div').attr('class', 'asm-plot-container').attr('id', 'asm-plot-container');
        document.title = assemblies[0] + ' assembly stats';
        var arr = [];

        assemblies.forEach(function (assembly, index) {
            d3.json(path + assembly + '.assembly-stats.json', function (error, json) {
                if (error) return console.warn(error);
                arr[index] = new Assembly(json);
                arr[index].name = assembly.replace('.', '_');

                if (views[0] === 'cumulative') {
                    if (index === 0) {
                        arr[0].squarePlot('asm-plot-container');
                        arr[0].addKey(assemblies);
                    } else {
                        var data = arr[index].prepareLine();
                        setTimeout(function () {
                            arr[0].addLine(data, assembly, arr[index]);
                        }, 250);
                    }
                } else if (views[0] === 'table') {
                    if (index === 0) {
                        arr[0].drawTable('asm-plot-container');
                    } else {
                        setTimeout(function () {
                            arr[0].addColumn(arr[index]);
                        }, 250);
                    }
                } else {
                    arr[0].drawPlot('asm-plot-container');
                }
            });
        });

        function compare(asm1, asm2) {
            if (!asm1) return;
            if (!asm2) return;

            plot_container
                .append('div')
                .attr('id', 'assembly_stats_left')
                .append('p')
                .text(assemblies[0]);

            plot_container
                .append('div')
                .attr('id', 'assembly_stats_right')
                .append('p')
                .text(assemblies[1]);

            var span = Math.max(asm1.assembly, asm2.assembly);
            var longest = Math.max(asm1.scaffolds[0], asm2.scaffolds[0]);

            asm1.drawPlot('assembly_stats_left', longest, span);
            asm2.drawPlot('assembly_stats_right', longest, span);
        }
    </script>
</body>
</html>