@quartic/bokehjs
Version:
Interactive, novel data visualization
234 lines (233 loc) • 9.13 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var ContextProperties, 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 mixins = require("./property_mixins");
var color_1 = require("./util/color");
ContextProperties = (function () {
function ContextProperties(obj, prefix) {
var attr, do_spec, j, len, ref;
if (prefix == null) {
prefix = "";
}
this.obj = obj;
this.prefix = prefix;
this.cache = {};
do_spec = obj.properties[prefix + this.do_attr].spec;
this.doit = do_spec.value !== null;
ref = this.attrs;
for (j = 0, len = ref.length; j < len; j++) {
attr = ref[j];
this[attr] = obj.properties[prefix + attr];
}
}
ContextProperties.prototype.warm_cache = function (source) {
var attr, j, len, prop, ref, results;
ref = this.attrs;
results = [];
for (j = 0, len = ref.length; j < len; j++) {
attr = ref[j];
prop = this.obj.properties[this.prefix + attr];
if (prop.spec.value !== void 0) {
results.push(this.cache[attr] = prop.spec.value);
}
else {
results.push(this.cache[attr + "_array"] = prop.array(source));
}
}
return results;
};
ContextProperties.prototype.cache_select = function (attr, i) {
var prop;
prop = this.obj.properties[this.prefix + attr];
if (prop.spec.value !== void 0) {
return this.cache[attr] = prop.spec.value;
}
else {
return this.cache[attr] = this.cache[attr + "_array"][i];
}
};
return ContextProperties;
})();
exports.Line = (function (superClass) {
extend(Line, superClass);
function Line() {
return Line.__super__.constructor.apply(this, arguments);
}
Line.prototype.attrs = Object.keys(mixins.line());
Line.prototype.do_attr = "line_color";
Line.prototype.set_value = function (ctx) {
ctx.strokeStyle = this.line_color.value();
ctx.globalAlpha = this.line_alpha.value();
ctx.lineWidth = this.line_width.value();
ctx.lineJoin = this.line_join.value();
ctx.lineCap = this.line_cap.value();
ctx.setLineDash(this.line_dash.value());
return ctx.setLineDashOffset(this.line_dash_offset.value());
};
Line.prototype.set_vectorize = function (ctx, i) {
this.cache_select("line_color", i);
if (ctx.strokeStyle !== this.cache.line_color) {
ctx.strokeStyle = this.cache.line_color;
}
this.cache_select("line_alpha", i);
if (ctx.globalAlpha !== this.cache.line_alpha) {
ctx.globalAlpha = this.cache.line_alpha;
}
this.cache_select("line_width", i);
if (ctx.lineWidth !== this.cache.line_width) {
ctx.lineWidth = this.cache.line_width;
}
this.cache_select("line_join", i);
if (ctx.lineJoin !== this.cache.line_join) {
ctx.lineJoin = this.cache.line_join;
}
this.cache_select("line_cap", i);
if (ctx.lineCap !== this.cache.line_cap) {
ctx.lineCap = this.cache.line_cap;
}
this.cache_select("line_dash", i);
if (ctx.getLineDash() !== this.cache.line_dash) {
ctx.setLineDash(this.cache.line_dash);
}
this.cache_select("line_dash_offset", i);
if (ctx.getLineDashOffset() !== this.cache.line_dash_offset) {
return ctx.setLineDashOffset(this.cache.line_dash_offset);
}
};
Line.prototype.color_value = function () {
var color;
color = color_1.color2rgba(this.line_color.value(), this.line_alpha.value());
return "rgba(" + (color[0] * 255) + "," + (color[1] * 255) + "," + (color[2] * 255) + "," + color[3] + ")";
};
return Line;
})(ContextProperties);
exports.Fill = (function (superClass) {
extend(Fill, superClass);
function Fill() {
return Fill.__super__.constructor.apply(this, arguments);
}
Fill.prototype.attrs = Object.keys(mixins.fill());
Fill.prototype.do_attr = "fill_color";
Fill.prototype.set_value = function (ctx) {
ctx.fillStyle = this.fill_color.value();
return ctx.globalAlpha = this.fill_alpha.value();
};
Fill.prototype.set_vectorize = function (ctx, i) {
this.cache_select("fill_color", i);
if (ctx.fillStyle !== this.cache.fill_color) {
ctx.fillStyle = this.cache.fill_color;
}
this.cache_select("fill_alpha", i);
if (ctx.globalAlpha !== this.cache.fill_alpha) {
return ctx.globalAlpha = this.cache.fill_alpha;
}
};
Fill.prototype.color_value = function () {
var color;
color = color_1.color2rgba(this.fill_color.value(), this.fill_alpha.value());
return "rgba(" + (color[0] * 255) + "," + (color[1] * 255) + "," + (color[2] * 255) + "," + color[3] + ")";
};
return Fill;
})(ContextProperties);
exports.Text = (function (superClass) {
extend(Text, superClass);
function Text() {
return Text.__super__.constructor.apply(this, arguments);
}
Text.prototype.attrs = Object.keys(mixins.text());
Text.prototype.do_attr = "text_color";
Text.prototype.cache_select = function (name, i) {
var val;
if (name === "font") {
val = Text.__super__.cache_select.call(this, "text_font_style", i) + " " + Text.__super__.cache_select.call(this, "text_font_size", i) + " " + Text.__super__.cache_select.call(this, "text_font", i);
return this.cache.font = val;
}
else {
return Text.__super__.cache_select.call(this, name, i);
}
};
Text.prototype.font_value = function () {
var font, font_size, font_style;
font = this.text_font.value();
font_size = this.text_font_size.value();
font_style = this.text_font_style.value();
return font_style + " " + font_size + " " + font;
};
Text.prototype.color_value = function () {
var color;
color = color_1.color2rgba(this.text_color.value(), this.text_alpha.value());
return "rgba(" + (color[0] * 255) + "," + (color[1] * 255) + "," + (color[2] * 255) + "," + color[3] + ")";
};
Text.prototype.set_value = function (ctx) {
ctx.font = this.font_value();
ctx.fillStyle = this.text_color.value();
ctx.globalAlpha = this.text_alpha.value();
ctx.textAlign = this.text_align.value();
return ctx.textBaseline = this.text_baseline.value();
};
Text.prototype.set_vectorize = function (ctx, i) {
this.cache_select("font", i);
if (ctx.font !== this.cache.font) {
ctx.font = this.cache.font;
}
this.cache_select("text_color", i);
if (ctx.fillStyle !== this.cache.text_color) {
ctx.fillStyle = this.cache.text_color;
}
this.cache_select("text_alpha", i);
if (ctx.globalAlpha !== this.cache.text_alpha) {
ctx.globalAlpha = this.cache.text_alpha;
}
this.cache_select("text_align", i);
if (ctx.textAlign !== this.cache.text_align) {
ctx.textAlign = this.cache.text_align;
}
this.cache_select("text_baseline", i);
if (ctx.textBaseline !== this.cache.text_baseline) {
return ctx.textBaseline = this.cache.text_baseline;
}
};
return Text;
})(ContextProperties);
exports.Visuals = (function () {
function Visuals(model) {
var cls, j, len, name, prefix, ref, ref1, ref2, spec;
ref = model.mixins;
for (j = 0, len = ref.length; j < len; j++) {
spec = ref[j];
ref1 = spec.split(":"), name = ref1[0], prefix = (ref2 = ref1[1]) != null ? ref2 : "";
cls = (function () {
switch (name) {
case "line":
return exports.Line;
case "fill":
return exports.Fill;
case "text":
return exports.Text;
}
})();
this[prefix + name] = new cls(model, prefix);
}
}
Visuals.prototype.warm_cache = function (source) {
var name, prop, ref, results;
ref = this;
results = [];
for (name in ref) {
if (!hasProp.call(ref, name))
continue;
prop = ref[name];
if (prop instanceof ContextProperties) {
results.push(prop.warm_cache(source));
}
else {
results.push(void 0);
}
}
return results;
};
return Visuals;
})();