# Code coverage report for src/BasicViewer.js

## Statements: 17.14% (6 / 35) Branches: 0% (0 / 6) Functions: 0% (0 / 9) Lines: 17.14% (6 / 35) Ignored: none

All files » src/ » BasicViewer.js

    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

    1
    1
    1
    1

    1

    1
     /*jslint node: true */
    /*jshint laxbreak: true */
    "use strict";

    var d3 = require("d3");
    var FeatureFactory = require("./FeatureFactory");
    var NonOverlappingLayout = require("./NonOverlappingLayout");
    var ViewerHelper = require("./ViewerHelper");

    var BasicViewer = function(catTitle, features, container, fv) {
        var height = 40;
        var width = fv.width;

        var layout = new NonOverlappingLayout(features, height);
        layout.calculate();

        var featurePlot = function() {
            var series,
                shapes;

            var featurePlot = function(selection) {
                selection.each(function(data) {
                    series = d3.select(this);
                    shapes = series.selectAll('.up_pftv_feature')
                        .data(data);

                    var newShapes = shapes.enter().append('path')
                        .attr('name', function(d, index) {
                            d.internalId = d.internalId === undefined ? catTitle + '_' + index : d.internalId;
                            return d.internalId;
                        })
                        .attr('class',function(d) {
                            return 'up_pftv_feature up_pftv_' + d.type.toLowerCase();
                        })
                    ;

                    shapes
                        .attr('d', function(d) {
                            return FeatureFactory.getFeature(
                                d.type,
                                fv.xScale(2) - fv.xScale(1),
                                layout.getFeatureHeight(),
                                (d.end) ? d.end - d.begin + 1 : 1);
                        })
                        .attr('transform',function(d) {
                            return 'translate('+fv.xScale(d.begin)+ ',' + layout.getYPos(d) + ')';
                        })
                    ;
                    ViewerHelper.addEventsClassAndTitle(catTitle, newShapes, fv, container);
                    shapes.exit().remove();
                });
            };
            return featurePlot;
        };

        var series = featurePlot();
        var svg = ViewerHelper.createSVG(container, width, height, fv);

        var drawArea = svg.append('g')
            .classed('up_pftv_category-viewer-group', true);

        var dataSeries = drawArea
            .datum(features)
            .call(series);

        this.update = function() {
            dataSeries.call(series);
            if (fv.selectedFeature) {
                ViewerHelper.updateShadow(fv.selectedFeature, fv);
            }
        };

        return this;
    };

    module.exports = BasicViewer;