Вход Регистрация
Файл: templates/backend/default/assets/plugins/jquery-flot/jquery.flot.orderBars.js
Строк: 198
<?php
/*
 * Flot plugin to order bars side by side.
 *
 * Released under the MIT license by Benjamin BUFFET, 20-Sep-2010.
 * Modifications made by Steven Hall <github.com/emmerich>, 01-May-2013.
 *
 * This plugin is an alpha version.
 *
 * To activate the plugin you must specify the parameter "order" for the specific serie :
 *
 *  $.plot($("#placeholder"), [{ data: [ ... ], bars :{ order = null or integer }])
 *
 * If 2 series have the same order param, they are ordered by the position in the array;
 *
 * The plugin adjust the point by adding a value depanding of the barwidth
 * Exemple for 3 series (barwidth : 0.1) :
 *
 *          first bar décalage : -0.15
 *          second bar décalage : -0.05
 *          third bar décalage : 0.05
 *
 */

// INFO: decalage/decallage is French for gap. It's used to denote the spacing applied to each
// bar.
(function($){
    function 
init(plot){
        var 
orderedBarSeries;
        var 
nbOfBarsToOrder;
        var 
borderWidth;
        var 
borderWidthInXabsWidth;
        var 
pixelInXWidthEquivalent 1;
        var 
isHorizontal false;

        
// A mapping of order integers to decallage.
        
var decallageByOrder = {};

        
/*
         * This method add shift to x values
         */
        
function reOrderBars(plotseriedatapoints){
            var 
shiftedPoints null;

            if(
serieNeedToBeReordered(serie)){
                
checkIfGraphIsHorizontal(serie);
                
calculPixel2XWidthConvert(plot);
                
retrieveBarSeries(plot);
                
calculBorderAndBarWidth(serie);

                if(
nbOfBarsToOrder >= 2){
                    var 
position findPosition(serie);
                    var 
decallage 0;

                    var 
centerBarShift calculCenterBarShift();

                    
// If we haven't already calculated the decallage for this order value, do it.
                    
if(typeof decallageByOrder[serie.bars.order] === 'undefined') {
                        if (
isBarAtLeftOfCenter(position)){
                            
decallageByOrder[serie.bars.order] = -1*(sumWidth(orderedBarSeries,position-1,Math.floor(nbOfBarsToOrder 2)-1)) - centerBarShift;
                        }else{
                            
decallageByOrder[serie.bars.order] = sumWidth(orderedBarSeries,Math.ceil(nbOfBarsToOrder 2),position-2) + centerBarShift borderWidthInXabsWidth*2;
                        }
                    }

                    
// Lookup the decallage based on the series' order value.
                    
decallage decallageByOrder[serie.bars.order];

                    
shiftedPoints shiftPoints(datapoints,serie,decallage);
                    
datapoints.points shiftedPoints;
                }
            }
            return 
shiftedPoints;
        }

        function 
serieNeedToBeReordered(serie){
            return 
serie.bars != null
                
&& serie.bars.show
                
&& serie.bars.order != null;
        }

        function 
calculPixel2XWidthConvert(plot){
            var 
gridDimSize isHorizontal plot.getPlaceholder().innerHeight() : plot.getPlaceholder().innerWidth();
            var 
minMaxValues isHorizontal getAxeMinMaxValues(plot.getData(),1) : getAxeMinMaxValues(plot.getData(),0);
            var 
AxeSize minMaxValues[1] - minMaxValues[0];
            
pixelInXWidthEquivalent AxeSize gridDimSize;
        }

        function 
getAxeMinMaxValues(series,AxeIdx){
            var 
minMaxValues = new Array();
            for(var 
0series.lengthi++){
                
minMaxValues[0] = series[i].data[0][AxeIdx];
                
minMaxValues[1] = series[i].data[series[i].data.length 1][AxeIdx];
            }
            return 
minMaxValues;
        }

        function 
retrieveBarSeries(plot){
            
orderedBarSeries findOthersBarsToReOrders(plot.getData());
            
nbOfBarsToOrder orderedBarSeries.length;
        }

        function 
findOthersBarsToReOrders(series){
            var 
retSeries = new Array();
            var 
orderValuesSeen = [];

            for(var 
0series.lengthi++){
                if(
series[i].bars.order != null && series[i].bars.show &&
                    
orderValuesSeen.indexOf(series[i].bars.order) < 0){

                    
orderValuesSeen.push(series[i].bars.order);
                    
retSeries.push(series[i]);
                }
            }
            return 
retSeries.sort(sortByOrder);
        }

        function 
sortByOrder(serie1,serie2){
            var 
serie1.bars.order;
            var 
serie2.bars.order;
            return ((
y) ? -: ((y) ? 0));
        }

        function  
calculBorderAndBarWidth(serie){
            
borderWidth typeof serie.bars.lineWidth !== 'undefined' serie.bars.lineWidth  2;
            
borderWidthInXabsWidth borderWidth pixelInXWidthEquivalent;
        }

        function 
checkIfGraphIsHorizontal(serie){
            if(
serie.bars.horizontal){
                
isHorizontal true;
            }
        }

        function 
findPosition(serie){
            var 
pos 0
            
for (var 0orderedBarSeries.length; ++i) {
                if (
serie == orderedBarSeries[i]){
                    
pos i;
                    break;
                }
            }

            return 
pos+1;
        }

        function 
calculCenterBarShift(){
            var 
width 0;

            if(
nbOfBarsToOrder%!= 0)
                
width = (orderedBarSeries[Math.ceil(nbOfBarsToOrder 2)].bars.barWidth)/2;

            return 
width;
        }

        function 
isBarAtLeftOfCenter(position){
            return 
position <= Math.ceil(nbOfBarsToOrder 2);
        }

        function 
sumWidth(series,start,end){
            var 
totalWidth 0;

            for(var 
start<= endi++){
                
totalWidth += series[i].bars.barWidth+borderWidthInXabsWidth*2;
            }

            return 
totalWidth;
        }

        function 
shiftPoints(datapoints,serie,dx){
            var 
ps datapoints.pointsize;
            var 
points datapoints.points;
            var 
0;
            for(var 
isHorizontal 0;points.length+= ps){
                
points[i] += dx;
                
//Adding the new x value in the serie to be abble to display the right tooltip value,
                //using the index 3 to not overide the third index.
                
serie.data[j][3] = points[i];
                
j++;
            }

            return 
points;
        }

        
plot.hooks.processDatapoints.push(reOrderBars);

    }

    var 
options = {
        
series : {
            
bars: {ordernull// or number/string
        
}
    };

    $.
plot.plugins.push({
        
initinit,
        
optionsoptions,
        
name"orderBars",
        
version"0.2"
    
});

})(
jQuery);
?>
Онлайн: 0
Реклама