UNPKG

@quartic/bokehjs

Version:

Interactive, novel data visualization

151 lines (150 loc) 6.23 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var 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; var annotation_1 = require("./annotation"); var dom_1 = require("core/dom"); var p = require("core/properties"); var types_1 = require("core/util/types"); exports.BoxAnnotationView = (function (superClass) { extend(BoxAnnotationView, superClass); function BoxAnnotationView() { return BoxAnnotationView.__super__.constructor.apply(this, arguments); } BoxAnnotationView.prototype.initialize = function (options) { BoxAnnotationView.__super__.initialize.call(this, options); this.plot_view.canvas_overlays.appendChild(this.el); this.el.classList.add("bk-shading"); return dom_1.hide(this.el); }; BoxAnnotationView.prototype.bind_bokeh_events = function () { if (this.model.render_mode === 'css') { this.listenTo(this.model, 'change', this.render); return this.listenTo(this.model, 'data_update', this.render); } else { this.listenTo(this.model, 'change', this.plot_view.request_render); return this.listenTo(this.model, 'data_update', this.plot_view.request_render); } }; BoxAnnotationView.prototype.render = function () { var sbottom, sleft, sright, stop; if (!this.model.visible && this.model.render_mode === 'css') { dom_1.hide(this.el); } if (!this.model.visible) { return; } if ((this.model.left == null) && (this.model.right == null) && (this.model.top == null) && (this.model.bottom == null)) { dom_1.hide(this.el); return null; } this.frame = this.plot_model.frame; this.canvas = this.plot_model.canvas; this.xmapper = this.plot_view.frame.x_mappers[this.model.x_range_name]; this.ymapper = this.plot_view.frame.y_mappers[this.model.y_range_name]; sleft = this.canvas.vx_to_sx(this._calc_dim(this.model.left, this.model.left_units, this.xmapper, this.frame.h_range.start)); sright = this.canvas.vx_to_sx(this._calc_dim(this.model.right, this.model.right_units, this.xmapper, this.frame.h_range.end)); sbottom = this.canvas.vy_to_sy(this._calc_dim(this.model.bottom, this.model.bottom_units, this.ymapper, this.frame.v_range.start)); stop = this.canvas.vy_to_sy(this._calc_dim(this.model.top, this.model.top_units, this.ymapper, this.frame.v_range.end)); if (this.model.render_mode === 'css') { return this._css_box(sleft, sright, sbottom, stop); } else { return this._canvas_box(sleft, sright, sbottom, stop); } }; BoxAnnotationView.prototype._css_box = function (sleft, sright, sbottom, stop) { var ld, sh, sw; sw = Math.abs(sright - sleft); sh = Math.abs(sbottom - stop); this.el.style.left = sleft + "px"; this.el.style.width = sw + "px"; this.el.style.top = stop + "px"; this.el.style.height = sh + "px"; this.el.style.borderWidth = this.model.line_width.value + "px"; this.el.style.borderColor = this.model.line_color.value; this.el.style.backgroundColor = this.model.fill_color.value; this.el.style.opacity = this.model.fill_alpha.value; ld = this.model.line_dash; if (types_1.isArray(ld)) { ld = ld.length < 2 ? "solid" : "dashed"; } if (types_1.isString(ld)) { this.el.style.borderStyle = ld; } return dom_1.show(this.el); }; BoxAnnotationView.prototype._canvas_box = function (sleft, sright, sbottom, stop) { var ctx; ctx = this.plot_view.canvas_view.ctx; ctx.save(); ctx.beginPath(); ctx.rect(sleft, stop, sright - sleft, sbottom - stop); this.visuals.fill.set_value(ctx); ctx.fill(); this.visuals.line.set_value(ctx); ctx.stroke(); return ctx.restore(); }; BoxAnnotationView.prototype._calc_dim = function (dim, dim_units, mapper, frame_extrema) { var vdim; if (dim != null) { if (dim_units === 'data') { vdim = mapper.map_to_target(dim); } else { vdim = dim; } } else { vdim = frame_extrema; } return vdim; }; return BoxAnnotationView; })(annotation_1.AnnotationView); exports.BoxAnnotation = (function (superClass) { extend(BoxAnnotation, superClass); function BoxAnnotation() { return BoxAnnotation.__super__.constructor.apply(this, arguments); } BoxAnnotation.prototype.default_view = exports.BoxAnnotationView; BoxAnnotation.prototype.type = 'BoxAnnotation'; BoxAnnotation.mixins(['line', 'fill']); BoxAnnotation.define({ render_mode: [p.RenderMode, 'canvas'], x_range_name: [p.String, 'default'], y_range_name: [p.String, 'default'], top: [p.Number, null], top_units: [p.SpatialUnits, 'data'], bottom: [p.Number, null], bottom_units: [p.SpatialUnits, 'data'], left: [p.Number, null], left_units: [p.SpatialUnits, 'data'], right: [p.Number, null], right_units: [p.SpatialUnits, 'data'] }); BoxAnnotation.override({ fill_color: '#fff9ba', fill_alpha: 0.4, line_color: '#cccccc', line_alpha: 0.3 }); BoxAnnotation.prototype.update = function (arg) { var bottom, left, right, top; left = arg.left, right = arg.right, top = arg.top, bottom = arg.bottom; this.setv({ left: left, right: right, top: top, bottom: bottom }, { silent: true }); return this.trigger('data_update'); }; return BoxAnnotation; })(annotation_1.Annotation);