~ubuntu-branches/ubuntu/raring/ntop/raring-proposed

« back to all changes in this revision

Viewing changes to html/jqplot/plugins/jqplot.canvasAxisLabelRenderer.js

  • Committer: Package Import Robot
  • Author(s): Ludovico Cavedon
  • Date: 2012-06-27 00:24:42 UTC
  • mfrom: (1.1.7)
  • Revision ID: package-import@ubuntu.com-20120627002442-9ljq6fhjqzx9qsu6
Tags: 3:4.99.3+ndpi5517+dfsg1-1
* Imported Upstream version 4.99.3 and nDPI r5517.
* get-orig-source.sh: incude nDPI in the orig tarball.
* No longer suggest ntop-graphs and update NEWS about that.
* Update copyright for the new jqPlot library.
* Refresh patches.
* Enable hardening flags.
* Add install-jqplot.patch to install jqPlot.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/**
 
2
 * jqPlot
 
3
 * Pure JavaScript plotting plugin using jQuery
 
4
 *
 
5
 * Version: 1.0.0b2_r1012
 
6
 *
 
7
 * Copyright (c) 2009-2011 Chris Leonello
 
8
 * jqPlot is currently available for use in all personal or commercial projects 
 
9
 * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL 
 
10
 * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can 
 
11
 * choose the license that best suits your project and use it accordingly. 
 
12
 *
 
13
 * Although not required, the author would appreciate an email letting him 
 
14
 * know of any substantial use of jqPlot.  You can reach the author at: 
 
15
 * chris at jqplot dot com or see http://www.jqplot.com/info.php .
 
16
 *
 
17
 * If you are feeling kind and generous, consider supporting the project by
 
18
 * making a donation at: http://www.jqplot.com/donate.php .
 
19
 *
 
20
 * sprintf functions contained in jqplot.sprintf.js by Ash Searle:
 
21
 *
 
22
 *     version 2007.04.27
 
23
 *     author Ash Searle
 
24
 *     http://hexmen.com/blog/2007/03/printf-sprintf/
 
25
 *     http://hexmen.com/js/sprintf.js
 
26
 *     The author (Ash Searle) has placed this code in the public domain:
 
27
 *     "This code is unrestricted: you are free to use it however you like."
 
28
 * 
 
29
 */
 
30
(function($) {
 
31
    /**
 
32
    * Class: $.jqplot.CanvasAxisLabelRenderer
 
33
    * Renderer to draw axis labels with a canvas element to support advanced
 
34
    * featrues such as rotated text.  This renderer uses a separate rendering engine
 
35
    * to draw the text on the canvas.  Two modes of rendering the text are available.
 
36
    * If the browser has native font support for canvas fonts (currently Mozila 3.5
 
37
    * and Safari 4), you can enable text rendering with the canvas fillText method.
 
38
    * You do so by setting the "enableFontSupport" option to true. 
 
39
    * 
 
40
    * Browsers lacking native font support will have the text drawn on the canvas
 
41
    * using the Hershey font metrics.  Even if the "enableFontSupport" option is true
 
42
    * non-supporting browsers will still render with the Hershey font.
 
43
    * 
 
44
    */
 
45
    $.jqplot.CanvasAxisLabelRenderer = function(options) {
 
46
        // Group: Properties
 
47
        
 
48
        // prop: angle
 
49
        // angle of text, measured clockwise from x axis.
 
50
        this.angle = 0;
 
51
        // name of the axis associated with this tick
 
52
        this.axis;
 
53
        // prop: show
 
54
        // wether or not to show the tick (mark and label).
 
55
        this.show = true;
 
56
        // prop: showLabel
 
57
        // wether or not to show the label.
 
58
        this.showLabel = true;
 
59
        // prop: label
 
60
        // label for the axis.
 
61
        this.label = '';
 
62
        // prop: fontFamily
 
63
        // CSS spec for the font-family css attribute.
 
64
        // Applies only to browsers supporting native font rendering in the
 
65
        // canvas tag.  Currently Mozilla 3.5 and Safari 4.
 
66
        this.fontFamily = '"Trebuchet MS", Arial, Helvetica, sans-serif';
 
67
        // prop: fontSize
 
68
        // CSS spec for font size.
 
69
        this.fontSize = '11pt';
 
70
        // prop: fontWeight
 
71
        // CSS spec for fontWeight:  normal, bold, bolder, lighter or a number 100 - 900
 
72
        this.fontWeight = 'normal';
 
73
        // prop: fontStretch
 
74
        // Multiplier to condense or expand font width.  
 
75
        // Applies only to browsers which don't support canvas native font rendering.
 
76
        this.fontStretch = 1.0;
 
77
        // prop: textColor
 
78
        // css spec for the color attribute.
 
79
        this.textColor = '#666666';
 
80
        // prop: enableFontSupport
 
81
        // true to turn on native canvas font support in Mozilla 3.5+ and Safari 4+.
 
82
        // If true, label will be drawn with canvas tag native support for fonts.
 
83
        // If false, label will be drawn with Hershey font metrics.
 
84
        this.enableFontSupport = true;
 
85
        // prop: pt2px
 
86
        // Point to pixel scaling factor, used for computing height of bounding box
 
87
        // around a label.  The labels text renderer has a default setting of 1.4, which 
 
88
        // should be suitable for most fonts.  Leave as null to use default.  If tops of
 
89
        // letters appear clipped, increase this.  If bounding box seems too big, decrease.
 
90
        // This is an issue only with the native font renderering capabilities of Mozilla
 
91
        // 3.5 and Safari 4 since they do not provide a method to determine the font height.
 
92
        this.pt2px = null;
 
93
        
 
94
        this._elem;
 
95
        this._ctx;
 
96
        this._plotWidth;
 
97
        this._plotHeight;
 
98
        this._plotDimensions = {height:null, width:null};
 
99
        
 
100
        $.extend(true, this, options);
 
101
        
 
102
        if (options.angle == null && this.axis != 'xaxis' && this.axis != 'x2axis') {
 
103
            this.angle = -90;
 
104
        }
 
105
        
 
106
        var ropts = {fontSize:this.fontSize, fontWeight:this.fontWeight, fontStretch:this.fontStretch, fillStyle:this.textColor, angle:this.getAngleRad(), fontFamily:this.fontFamily};
 
107
        if (this.pt2px) {
 
108
            ropts.pt2px = this.pt2px;
 
109
        }
 
110
        
 
111
        if (this.enableFontSupport) {
 
112
            if ($.jqplot.support_canvas_text()) {
 
113
                this._textRenderer = new $.jqplot.CanvasFontRenderer(ropts);
 
114
            }
 
115
            
 
116
            else {
 
117
                this._textRenderer = new $.jqplot.CanvasTextRenderer(ropts); 
 
118
            }
 
119
        }
 
120
        else {
 
121
            this._textRenderer = new $.jqplot.CanvasTextRenderer(ropts); 
 
122
        }
 
123
    };
 
124
    
 
125
    $.jqplot.CanvasAxisLabelRenderer.prototype.init = function(options) {
 
126
        $.extend(true, this, options);
 
127
        this._textRenderer.init({fontSize:this.fontSize, fontWeight:this.fontWeight, fontStretch:this.fontStretch, fillStyle:this.textColor, angle:this.getAngleRad(), fontFamily:this.fontFamily});
 
128
    };
 
129
    
 
130
    // return width along the x axis
 
131
    // will check first to see if an element exists.
 
132
    // if not, will return the computed text box width.
 
133
    $.jqplot.CanvasAxisLabelRenderer.prototype.getWidth = function(ctx) {
 
134
        if (this._elem) {
 
135
         return this._elem.outerWidth(true);
 
136
        }
 
137
        else {
 
138
            var tr = this._textRenderer;
 
139
            var l = tr.getWidth(ctx);
 
140
            var h = tr.getHeight(ctx);
 
141
            var w = Math.abs(Math.sin(tr.angle)*h) + Math.abs(Math.cos(tr.angle)*l);
 
142
            return w;
 
143
        }
 
144
    };
 
145
    
 
146
    // return height along the y axis.
 
147
    $.jqplot.CanvasAxisLabelRenderer.prototype.getHeight = function(ctx) {
 
148
        if (this._elem) {
 
149
         return this._elem.outerHeight(true);
 
150
        }
 
151
        else {
 
152
            var tr = this._textRenderer;
 
153
            var l = tr.getWidth(ctx);
 
154
            var h = tr.getHeight(ctx);
 
155
            var w = Math.abs(Math.cos(tr.angle)*h) + Math.abs(Math.sin(tr.angle)*l);
 
156
            return w;
 
157
        }
 
158
    };
 
159
    
 
160
    $.jqplot.CanvasAxisLabelRenderer.prototype.getAngleRad = function() {
 
161
        var a = this.angle * Math.PI/180;
 
162
        return a;
 
163
    };
 
164
    
 
165
    $.jqplot.CanvasAxisLabelRenderer.prototype.draw = function(ctx, plot) {
 
166
          // Memory Leaks patch
 
167
          if (this._elem) {
 
168
              if ($.jqplot.use_excanvas && window.G_vmlCanvasManager.uninitElement !== undefined) {
 
169
                  window.G_vmlCanvasManager.uninitElement(this._elem.get(0));
 
170
              }
 
171
            
 
172
              this._elem.emptyForce();
 
173
              this._elem = null;
 
174
          }
 
175
 
 
176
        // create a canvas here, but can't draw on it untill it is appended
 
177
        // to dom for IE compatability.
 
178
        var elem = plot.canvasManager.getCanvas();
 
179
 
 
180
        this._textRenderer.setText(this.label, ctx);
 
181
        var w = this.getWidth(ctx);
 
182
        var h = this.getHeight(ctx);
 
183
        elem.width = w;
 
184
        elem.height = h;
 
185
        elem.style.width = w;
 
186
        elem.style.height = h;
 
187
        
 
188
                elem = plot.canvasManager.initCanvas(elem);
 
189
                
 
190
        this._elem = $(elem);
 
191
        this._elem.css({ position: 'absolute'});
 
192
        this._elem.addClass('jqplot-'+this.axis+'-label');
 
193
        
 
194
        elem = null;
 
195
        return this._elem;
 
196
    };
 
197
    
 
198
    $.jqplot.CanvasAxisLabelRenderer.prototype.pack = function() {
 
199
        this._textRenderer.draw(this._elem.get(0).getContext("2d"), this.label);
 
200
    };
 
201
    
 
202
})(jQuery);
 
 
b'\\ No newline at end of file'