sjy-ecos/public/lib/bokeh/js/tree/models/annotations/label.js

125 lines
3.6 KiB
JavaScript

var Label, LabelView, TextAnnotation, p,
extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
hasProp = {}.hasOwnProperty;
TextAnnotation = require("./text_annotation");
p = require("../../core/properties");
LabelView = (function(superClass) {
extend(LabelView, superClass);
function LabelView() {
return LabelView.__super__.constructor.apply(this, arguments);
}
LabelView.prototype.initialize = function(options) {
var name, prop, ref, results;
LabelView.__super__.initialize.call(this, options);
this.canvas = this.plot_model.get('canvas');
this.xmapper = this.plot_view.frame.get('x_mappers')[this.mget("x_range_name")];
this.ymapper = this.plot_view.frame.get('y_mappers')[this.mget("y_range_name")];
ref = this.visuals;
results = [];
for (name in ref) {
prop = ref[name];
results.push(prop.warm_cache(null));
}
return results;
};
LabelView.prototype._get_size = function() {
var ctx, height, side, width;
ctx = this.plot_view.canvas_view.ctx;
this.visuals.text.set_value(ctx);
side = this.model.panel.side;
if (side === "above" || side === "below") {
height = ctx.measureText(this.mget('text')).ascent;
return height;
}
if (side === 'left' || side === 'right') {
width = ctx.measureText(this.mget('text')).width;
return width;
}
};
LabelView.prototype.render = function() {
var angle, ctx, panel_offset, sx, sy, vx, vy;
ctx = this.plot_view.canvas_view.ctx;
switch (this.mget('angle_units')) {
case "rad":
angle = -1 * this.mget('angle');
break;
case "deg":
angle = -1 * this.mget('angle') * Math.PI / 180.0;
}
if (this.mget('x_units') === "data") {
vx = this.xmapper.map_to_target(this.mget('x'));
} else {
vx = this.mget('x');
}
sx = this.canvas.vx_to_sx(vx);
if (this.mget('y_units') === "data") {
vy = this.ymapper.map_to_target(this.mget('y'));
} else {
vy = this.mget('y');
}
sy = this.canvas.vy_to_sy(vy);
if (this.model.panel != null) {
panel_offset = this._get_panel_offset();
sx += panel_offset.x;
sy += panel_offset.y;
}
if (this.mget('render_mode') === 'canvas') {
return this._canvas_text(ctx, this.mget('text'), sx + this.mget('x_offset'), sy - this.mget('y_offset'), angle);
} else {
return this._css_text(ctx, this.mget('text'), sx + this.mget('x_offset'), sy - this.mget('y_offset'), angle);
}
};
return LabelView;
})(TextAnnotation.View);
Label = (function(superClass) {
extend(Label, superClass);
function Label() {
return Label.__super__.constructor.apply(this, arguments);
}
Label.prototype.default_view = LabelView;
Label.prototype.type = 'Label';
Label.mixins(['text', 'line:border_', 'fill:background_']);
Label.define({
x: [p.Number],
x_units: [p.SpatialUnits, 'data'],
y: [p.Number],
y_units: [p.SpatialUnits, 'data'],
text: [p.String],
angle: [p.Angle, 0],
angle_units: [p.AngleUnits, 'rad'],
x_offset: [p.Number, 0],
y_offset: [p.Number, 0],
x_range_name: [p.String, 'default'],
y_range_name: [p.String, 'default'],
render_mode: [p.RenderMode, 'canvas']
});
Label.override({
background_fill_color: null,
border_line_color: null
});
return Label;
})(TextAnnotation.Model);
module.exports = {
Model: Label,
View: LabelView
};