Вход Регистрация
Файл: templates/backend/default/assets/plugins/jquery-ricksaw-chart/js/Rickshaw.Graph.HoverDetail.js
Строк: 220
<?php
Rickshaw
.namespace('Rickshaw.Graph.HoverDetail');

Rickshaw.Graph.HoverDetail Rickshaw.Class.create({

    
initialize: function(args) {

        var 
graph this.graph args.graph;

        
this.xFormatter args.xFormatter || function(x) {
            return new 
Date1000 ).toUTCString();
        };

        
this.yFormatter args.yFormatter || function(y) {
            return 
=== null y.toFixed(2);
        };

        var 
element this.element document.createElement('div');
        
element.className 'detail';

        
this.visible true;
        
graph.element.appendChild(element);

        
this.lastEvent null;
        
this._addListeners();

        
this.onShow args.onShow;
        
this.onHide args.onHide;
        
this.onRender args.onRender;

        
this.formatter args.formatter || this.formatter;

    },

    
formatter: function(seriesxyformattedXformattedYd) {
        return 
series.name ':&nbsp;' formattedY;
    },

    
update: function(e) {

        
|| this.lastEvent;
        if (!
e) return;
        
this.lastEvent e;

        if (!
e.target.nodeName.match(/^(path|svg|rect|circle)$/)) return;

        var 
graph this.graph;

        var 
eventX e.offsetX || e.layerX;
        var 
eventY e.offsetY || e.layerY;

        var 
0;
        var 
points = [];
        var 
nearestPoint;

        
this.graph.series.active().forEach( function(series) {

            var 
data this.graph.stackedData[j++];

            if (!
data.length)
                return;

            var 
domainX graph.x.invert(eventX);

            var 
domainIndexScale d3.scale.linear()
                .
domain([data[0].xdata.slice(-1)[0].x])
                .
range([0data.length 1]);

            var 
approximateIndex Math.round(domainIndexScale(domainX));
            if (
approximateIndex == data.length 1approximateIndex--;

            var 
dataIndex Math.min(approximateIndex || 0data.length 1);

            for (var 
approximateIndexdata.length 1;) {

                if (!
data[i] || !data[1]) break;

                if (
data[i].<= domainX && data[1].domainX) {
                    
dataIndex Math.abs(domainX data[i].x) < Math.abs(domainX data[1].x) ? 1;
                    break;
                }

                if (
data[1].<= domainX) { i++ } else { i-- }
            }

            if (
dataIndex 0dataIndex 0;
            var 
value data[dataIndex];

            var 
distance Math.sqrt(
                
Math.pow(Math.abs(graph.x(value.x) - eventX), 2) +
                
Math.pow(Math.abs(graph.y(value.value.y0) - eventY), 2)
            );

            var 
xFormatter series.xFormatter || this.xFormatter;
            var 
yFormatter series.yFormatter || this.yFormatter;

            var 
point = {
                
formattedXValuexFormatter(value.x),
                
formattedYValueyFormatter(series.scale series.scale.invert(value.y) : value.y),
                
seriesseries,
                
valuevalue,
                
distancedistance,
                
orderj,
                
nameseries.name
            
};

            if (!
nearestPoint || distance nearestPoint.distance) {
                
nearestPoint point;
            }

            
points.push(point);

        }, 
this );

        if (!
nearestPoint)
            return;

        
nearestPoint.active true;

        var 
domainX nearestPoint.value.x;
        var 
formattedXValue nearestPoint.formattedXValue;

        
this.element.innerHTML '';
        
this.element.style.left graph.x(domainX) + 'px';

        
this.visible && this.render( {
            
pointspoints,
            
detailpoints// for backwards compatibility
            
mouseXeventX,
            
mouseYeventY,
            
formattedXValueformattedXValue,
            
domainXdomainX
        
} );
    },

    
hide: function() {
        
this.visible false;
        
this.element.classList.add('inactive');

        if (
typeof this.onHide == 'function') {
            
this.onHide();
        }
    },

    
show: function() {
        
this.visible true;
        
this.element.classList.remove('inactive');

        if (
typeof this.onShow == 'function') {
            
this.onShow();
        }
    },

    
render: function(args) {

        var 
graph this.graph;
        var 
points args.points;
        var 
point points.filter( function(p) { return p.active } ).shift();

        if (
point.value.=== null) return;

        var 
formattedXValue point.formattedXValue;
        var 
formattedYValue point.formattedYValue;

        
this.element.innerHTML '';
        
this.element.style.left graph.x(point.value.x) + 'px';

        var 
xLabel document.createElement('div');

        
xLabel.className 'x_label';
        
xLabel.innerHTML formattedXValue;
        
this.element.appendChild(xLabel);

        var 
item document.createElement('div');

        
item.className 'item';

        
// invert the scale if this series displays using a scale
        
var series point.series;
        var 
actualY series.scale series.scale.invert(point.value.y) : point.value.y;

        
item.innerHTML this.formatter(seriespoint.value.xactualYformattedXValueformattedYValuepoint);
        
item.style.top this.graph.y(point.value.y0 point.value.y) + 'px';

        
this.element.appendChild(item);

        var 
dot document.createElement('div');

        
dot.className 'dot';
        
dot.style.top item.style.top;
        
dot.style.borderColor series.color;

        
this.element.appendChild(dot);

        if (
point.active) {
            
item.className 'item active';
            
dot.className 'dot active';
        }

        
this.show();

        if (
typeof this.onRender == 'function') {
            
this.onRender(args);
        }
    },

    
_addListeners: function() {

        
this.graph.element.addEventListener(
            
'mousemove',
            function(
e) {
                
this.visible true;
                
this.update(e);
            }.
bind(this),
            
false
        
);

        
this.graph.onUpdate( function() { this.update() }.bind(this) );

        
this.graph.element.addEventListener(
            
'mouseout',
            function(
e) {
                if (
e.relatedTarget && !(e.relatedTarget.compareDocumentPosition(this.graph.element) & Node.DOCUMENT_POSITION_CONTAINS)) {
                    
this.hide();
                }
            }.
bind(this),
            
false
        
);
    }
});
?>
Онлайн: 2
Реклама