Changeset 24

Show
Ignore:
Timestamp:
2007-11-01 15:41:56 (1 year ago)
Author:
tdb01r
Message:
  • If ChartDirector? is unavailable resort to using PlotKit? (javascript graphs)
  • Changed id= to class= for Bar chart divs
Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/irstats/perl_lib/IRStats/View/DownloadCountHTML.pm

    r1 r24  
    88use IRStats::Visualisation::HTML; 
    99use IRStats::View; 
    10 use perlchartdir; 
    1110use Data::Dumper; 
    1211 
  • trunk/irstats/perl_lib/IRStats/View/SearchEngineGraph.pm

    r19 r24  
    88use IRStats::Visualisation::Graph::Pie; 
    99use IRStats::View; 
    10 use perlchartdir; 
    1110use Data::Dumper; 
    1211 
  • trunk/irstats/perl_lib/IRStats/Visualisation/Graph.pm

    r12 r24  
    55 
    66use IRStats::Visualisation; 
    7 use perlchartdir; 
    87use List::Util 'shuffle'; 
    98use Data::Dumper; 
     9 
     10BEGIN 
     11{ 
     12        eval "use perlchartdir"; 
     13        $IRStats::Visualisation::Graph::CHART_DIRECTOR = $@ ? 0 : 1; 
     14} 
    1015 
    1116our @ISA = qw/ IRStats::Visualisation /; 
     
    6368} 
    6469 
     70sub render 
     71{ 
     72        my( $self ) = @_; 
    6573 
    66  
    67  
    68  
     74        if( $IRStats::Visualisation::Graph::CHART_DIRECTOR ) 
     75        { 
     76                return $self->chartdirector_render; 
     77        } 
     78        else 
     79        { 
     80                return $self->plotkit_render; 
     81        } 
     82
    6983 
    70841; 
    71  
  • trunk/irstats/perl_lib/IRStats/Visualisation/Graph/Bar.pm

    r1 r24  
    22 
    33use strict; 
    4 use warnings; 
    54 
    65use IRStats::Visualisation::Graph::GraphLegend; 
    76use IRStats::Visualisation::Graph; 
    8 use perlchartdir; 
    9 use Data::Dumper; 
    107 
    118our @ISA = qw(IRStats::Visualisation::Graph); 
     
    1815} 
    1916 
    20 sub render 
     17sub quote_javascript 
     18
     19        my( $value ) = @_; 
     20        $value =~ s/'/\\'/g; 
     21        return "'$value'"; 
     22
     23 
     24sub plotkit_render 
    2125{ 
    2226        my ($self) = @_; 
     27 
     28        my $base_url = $self->{params}->get('conf')->static_url; 
     29 
     30        my $width = 490; 
     31        my $height = 290; 
     32 
     33        # Quick hack to get a unique id 
     34        my $canvas_id = $self->{filename}; 
     35        $canvas_id =~ s/\.png$//; 
     36 
     37        my @x_labels = @{$self->{x_labels}}; 
     38        my @data = @{$self->{data_series}->[0]->{data}}; 
     39        my $label = quote_javascript($self->{data_series}->[0]->{citation} || '(null)'); 
     40 
     41        my @series; 
     42        my @labels; 
     43 
     44        my $tick_every = scalar(@x_labels)/10; 
     45 
     46        for(my $i = 0; $i < @x_labels; $i++) 
     47        { 
     48                push @series, "[".$i.",".$data[$i]."]"; 
     49                push @labels, "{v:".$i.", label:".quote_javascript($x_labels[$i])."}" if int($i % $tick_every) == 0; 
     50        } 
     51 
     52        my $data_array = join(',', @series); 
     53        my $labels_array = join(',', @labels); 
     54 
     55        my $barWidthFillFraction = '0.75'; 
     56        my $renderer = 'SweetCanvasRenderer'; 
     57 
     58        my $html = <<EOH; 
     59<script type="text/javascript" src="$base_url/mochikit/MochiKit.js"></script> 
     60<script type="text/javascript" src="$base_url/plotkit/Base.js"></script> 
     61<script type="text/javascript" src="$base_url/plotkit/Layout.js"></script> 
     62<script type="text/javascript" src="$base_url/plotkit/Canvas.js"></script> 
     63<script type="text/javascript" src="$base_url/plotkit/SweetCanvas.js"></script> 
     64<div class='bar_graph'> 
     65<div><canvas id='$canvas_id' width='$width' height='$height'></canvas></div><br /> 
     66</div> 
     67EOH 
     68 
     69        my $options = <<EOH; 
     70        'yTickPrecision': 0, 
     71        'xNumberOfTicks': 10, 
     72        'axisLabelColor': Color.blackColor(), 
     73        'xTicks': [$labels_array] 
     74EOH 
     75 
     76        # Approximately! 
     77        if( scalar(@series)*2 > $width ) 
     78        { 
     79                $html .= <<EOH; 
     80<script type="text/javascript"> 
     81var options = { 
     82        $options, 
     83        'barWidthFillFraction': 2, 
     84        'shouldStroke': false, 
     85        'shouldFill': true 
     86}; 
     87var layout = new PlotKit.Layout('bar',options); 
     88        layout.addDataset($label,[$data_array]); 
     89        layout.evaluate(); 
     90var canvas = MochiKit.DOM.getElement('$canvas_id'); 
     91var plotter = new PlotKit.CanvasRenderer(canvas,layout,options); 
     92 
     93plotter.render(); 
     94</script> 
     95EOH 
     96        } 
     97        else 
     98        { 
     99                $html .= <<EOH; 
     100<script type="text/javascript"> 
     101var options = { 
     102        $options 
     103}; 
     104var layout = new PlotKit.Layout('bar',options); 
     105        layout.addDataset($label,[$data_array]); 
     106        layout.evaluate(); 
     107var canvas = MochiKit.DOM.getElement('$canvas_id'); 
     108var plotter = new PlotKit.SweetCanvasRenderer(canvas,layout,options); 
     109 
     110plotter.render(); 
     111</script> 
     112EOH 
     113        } 
     114 
     115        return $html; 
     116} 
     117 
     118sub chartdirector_render 
     119{ 
     120        my( $self ) = @_; 
    23121 
    24122        my $c = new XYChart(500, 300, 0xeeeeff, 0x000000, 1); 
  • trunk/irstats/perl_lib/IRStats/Visualisation/Graph/GraphLegend.pm

    r1 r24  
    22 
    33use strict; 
    4 use warnings; 
    54 
    65sub new 
  • trunk/irstats/perl_lib/IRStats/Visualisation/Graph/Line.pm

    r1 r24  
    22 
    33use strict; 
    4 use warnings; 
    54 
    65use IRStats::Visualisation::Graph::GraphLegend; 
    7 use Data::Dumper; 
    8 use perlchartdir; 
    96use IRStats::Visualisation::Graph; 
    10 #use IRStats::Visualisation; 
    117 
    128# A graph object expects the following in the data hash: 
     
    3632} 
    3733 
     34sub quote_javascript 
     35{ 
     36        my( $value ) = @_; 
     37        $value =~ s/'/\\'/g; 
     38        return "'$value'"; 
     39} 
    3840 
    39 sub render 
     41 
     42sub chartdirector_render 
    4043{ 
    4144        my ($self) = @_; 
    4245 
    43         my $c = new XYChart(600, 300, 0xeeeeff, 0x000000, 1); 
     46        my $c = new XYChart(500, 300, 0xeeeeff, 0x000000, 1); 
    4447        $c->setRoundedFrame(); 
    4548        $c->setPlotArea(55, 58, 520, 195, 0xffffff, -1, -1, 0xcccccc, 0xcccccc); 
     
    7780} 
    7881 
     82sub plotkit_render 
     83{ 
     84        my ($self) = @_; 
     85 
     86        my $base_url = $self->{params}->get('conf')->static_url; 
     87 
     88        my $width = 490; 
     89 
     90        # Quick hack to get a unique id 
     91        my $canvas_id = $self->{filename}; 
     92        $canvas_id =~ s/\.png$//; 
     93 
     94        my @x_labels = @{$self->{x_labels}}; 
     95        my @data = @{$self->{data_series}->[0]->{data}}; 
     96        my $label = quote_javascript($self->{data_series}->[0]->{citation} || '(null)'); 
     97 
     98        my @series; 
     99        my @labels; 
     100 
     101        my $tick_every = scalar(@x_labels)/10; 
     102 
     103        for(my $i = 0; $i < @x_labels; $i++) 
     104        { 
     105                push @series, "[".$i.",".$data[$i]."]"; 
     106                push @labels, "{v:".$i.", label:".quote_javascript($x_labels[$i])."}" if int($i % $tick_every) == 0; 
     107        } 
     108 
     109        my $data_array = join(',', @series); 
     110        my $labels_array = join(',', @labels); 
     111 
     112        my $html = <<EOH; 
     113<script type="text/javascript" src="$base_url/mochikit/MochiKit.js"></script> 
     114<script type="text/javascript" src="$base_url/plotkit/Base.js"></script> 
     115<script type="text/javascript" src="$base_url/plotkit/Layout.js"></script> 
     116<script type="text/javascript" src="$base_url/plotkit/Canvas.js"></script> 
     117<script type="text/javascript" src="$base_url/plotkit/SweetCanvas.js"></script> 
     118<div class='bar_graph'> 
     119<div><canvas id='$canvas_id' width='$width' height='290'></canvas></div><br /> 
     120</div> 
     121<script type="text/javascript"> 
     122var options = { 
     123        'yTickPrecision': 0, 
     124        'xTicks': [$labels_array], 
     125        'xNumberOfTicks': 10, 
     126        'shouldStroke': true, 
     127//      'strokeWidth': 0.1, 
     128        'axisLabelColor': Color.blackColor(), 
     129        'shouldFill': false 
     130}; 
     131var layout = new PlotKit.Layout('line',options); 
     132        layout.addDataset($label,[$data_array]); 
     133        layout.evaluate(); 
     134var canvas = MochiKit.DOM.getElement('$canvas_id'); 
     135var plotter = new PlotKit.CanvasRenderer(canvas,layout,options); 
     136 
     137plotter.render(); 
     138</script> 
     139EOH 
     140 
     141        return $html; 
     142} 
     143 
    791441; 
    80  
  • trunk/irstats/perl_lib/IRStats/Visualisation/Graph/Pie.pm

    r1 r24  
    22 
    33use strict; 
    4 use warnings; 
    54 
    6 use perlchartdir; 
    75use IRStats::Visualisation::Graph; 
    8  
    96 
    107our @ISA = qw/ IRStats::Visualisation::Graph /; 
     
    1815} 
    1916 
     17sub quote_javascript 
     18{ 
     19        my( $value ) = @_; 
     20        $value =~ s/'/\\'/g; 
     21        return "'$value'"; 
     22} 
    2023 
    21 sub render 
     24sub chartdirector_render 
    2225{ 
    2326        my ($self) = @_; 
     
    4750} 
    4851 
     52sub plotkit_render 
     53{ 
     54        my ($self) = @_; 
     55 
     56        my $base_url = $self->{params}->get('conf')->static_url; 
     57 
     58        # Quick hack to get a unique id 
     59        my $canvas_id = $self->{filename}; 
     60        $canvas_id =~ s/\.png$//; 
     61 
     62        my @series = (); 
     63        my @labels = (); 
     64        my $i = 0; 
     65        foreach (@{$self->{'data_series'}}) 
     66        { 
     67                push @series,'['.$i.', '.$_->{data}.']'; 
     68                my $c = $_->{citation} || '(null)'; 
     69                push @labels, '{v:'.$i.', label:'.quote_javascript($c).'}'; 
     70                ++$i; 
     71        } 
     72 
     73        my $series_array = join(',', @series); 
     74        my $labels_array = join(',', @labels); 
     75 
     76        my $html = <<EOH; 
     77<div class='pie_graph'> 
     78<div><canvas id='$canvas_id' height="290" width="490"></canvas></div><br /> 
     79</div> 
     80<script type="text/javascript" src="$base_url/mochikit/MochiKit.js"></script> 
     81<script type="text/javascript" src="$base_url/plotkit/Base.js"></script> 
     82<script type="text/javascript" src="$base_url/plotkit/Layout.js"></script> 
     83<script type="text/javascript" src="$base_url/plotkit/Canvas.js"></script> 
     84<script type="text/javascript" src="$base_url/plotkit/SweetCanvas.js"></script> 
     85<script type="text/javascript"> 
     86var options = { 
     87        'xTicks': [$labels_array], 
     88        'axisLabelColor': Color.blackColor(), 
     89        'axisLabelWidth': 100, 
     90        'axisLabelFontSize': 14, 
     91}; 
     92var layout = new PlotKit.Layout("pie", options); 
     93        layout.addDataset("data", [$series_array]); 
     94        layout.evaluate(); 
     95var canvas = MochiKit.DOM.getElement('$canvas_id'); 
     96var plotter = new PlotKit.SweetCanvasRenderer(canvas, layout, options); 
     97 
     98plotter.render(); 
     99</script> 
     100EOH 
     101        return $html; 
     102} 
     103 
    491041; 
    50105