UNPKG

@quartic/bokehjs

Version:

Interactive, novel data visualization

529 lines (528 loc) 19.2 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, indexOf = [].indexOf || function (item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }; var events_1 = require("./events"); var enums = require("./enums"); var svg_colors = require("./util/svg_colors"); var color_1 = require("./util/color"); var array_1 = require("./util/array"); var types_1 = require("./util/types"); exports.Property = (function () { extend(Property.prototype, events_1.Events); Property.prototype.dataspec = false; function Property(arg) { this.obj = arg.obj, this.attr = arg.attr, this.default_value = arg.default_value; this._init(false); this.listenTo(this.obj, "change:" + this.attr, (function (_this) { return function () { _this._init(); return _this.obj.trigger("propchange"); }; })(this)); } Property.prototype.update = function () { return this._init(); }; Property.prototype.init = function () { }; Property.prototype.transform = function (values) { return values; }; Property.prototype.validate = function (value) { }; Property.prototype.value = function (do_spec_transform) { var ret; if (do_spec_transform == null) { do_spec_transform = true; } if (this.spec.value === void 0) { throw new Error("attempted to retrieve property value for property without value specification"); } ret = this.transform([this.spec.value])[0]; if ((this.spec.transform != null) && do_spec_transform) { ret = this.spec.transform.compute(ret); } return ret; }; Property.prototype.array = function (source) { var data, i, length, ret, value; if (!this.dataspec) { throw new Error("attempted to retrieve property array for non-dataspec property"); } data = source.data; if (this.spec.field != null) { if (this.spec.field in data) { ret = this.transform(source.get_column(this.spec.field)); } else { throw new Error("attempted to retrieve property array for nonexistent field '" + this.spec.field + "'"); } } else { length = source.get_length(); if (length == null) { length = 1; } value = this.value(false); ret = (function () { var j, ref, results; results = []; for (i = j = 0, ref = length; 0 <= ref ? j < ref : j > ref; i = 0 <= ref ? ++j : --j) { results.push(value); } return results; })(); } if (this.spec.transform != null) { ret = this.spec.transform.v_compute(ret); } return ret; }; Property.prototype._init = function (trigger) { var attr, attr_value, default_value, obj; if (trigger == null) { trigger = true; } obj = this.obj; if (obj == null) { throw new Error("missing property object"); } if (obj.properties == null) { throw new Error("property object must be a HasProps"); } attr = this.attr; if (attr == null) { throw new Error("missing property attr"); } attr_value = obj.getv(attr); if (attr_value === void 0) { default_value = this.default_value; attr_value = (function () { switch (false) { case default_value !== void 0: return null; case !types_1.isArray(default_value): return array_1.copy(default_value); case !types_1.isFunction(default_value): return default_value(obj); default: return default_value; } })(); obj.setv(attr, attr_value, { silent: true, defaults: true }); } if (types_1.isArray(attr_value)) { this.spec = { value: attr_value }; } else if (types_1.isObject(attr_value) && ((attr_value.value === void 0) !== (attr_value.field === void 0))) { this.spec = attr_value; } else { this.spec = { value: attr_value }; } if ((this.spec.field != null) && !types_1.isString(this.spec.field)) { throw new Error("field value for property '" + attr + "' is not a string"); } if (this.spec.value != null) { this.validate(this.spec.value); } this.init(); if (trigger) { return this.trigger("change"); } }; return Property; })(); exports.simple_prop = function (name, pred) { var Prop; return Prop = (function (superClass) { extend(Prop, superClass); function Prop() { return Prop.__super__.constructor.apply(this, arguments); } Prop.prototype.toString = function () { return name + "(obj: " + this.obj.id + ", spec: " + (JSON.stringify(this.spec)) + ")"; }; Prop.prototype.validate = function (value) { if (!pred(value)) { throw new Error(name + " property '" + this.attr + "' given invalid value: " + (JSON.stringify(value))); } }; return Prop; })(exports.Property); }; exports.Any = (function (superClass) { extend(Any, superClass); function Any() { return Any.__super__.constructor.apply(this, arguments); } return Any; })(exports.simple_prop("Any", function (x) { return true; })); exports.Array = (function (superClass) { extend(Array, superClass); function Array() { return Array.__super__.constructor.apply(this, arguments); } return Array; })(exports.simple_prop("Array", function (x) { return types_1.isArray(x) || x instanceof Float64Array; })); exports.Bool = (function (superClass) { extend(Bool, superClass); function Bool() { return Bool.__super__.constructor.apply(this, arguments); } return Bool; })(exports.simple_prop("Bool", types_1.isBoolean)); exports.Boolean = exports.Bool; exports.Color = (function (superClass) { extend(Color, superClass); function Color() { return Color.__super__.constructor.apply(this, arguments); } return Color; })(exports.simple_prop("Color", function (x) { return (svg_colors[x.toLowerCase()] != null) || x.substring(0, 1) === "#" || color_1.valid_rgb(x); })); exports.Instance = (function (superClass) { extend(Instance, superClass); function Instance() { return Instance.__super__.constructor.apply(this, arguments); } return Instance; })(exports.simple_prop("Instance", function (x) { return x.properties != null; })); exports.Number = (function (superClass) { extend(Number, superClass); function Number() { return Number.__super__.constructor.apply(this, arguments); } return Number; })(exports.simple_prop("Number", function (x) { return types_1.isNumber(x) || types_1.isBoolean(x); })); exports.Int = exports.Number; exports.Percent = (function (superClass) { extend(Percent, superClass); function Percent() { return Percent.__super__.constructor.apply(this, arguments); } return Percent; })(exports.simple_prop("Number", function (x) { return (types_1.isNumber(x) || types_1.isBoolean(x)) && ((0 <= x && x <= 1.0)); })); exports.String = (function (superClass) { extend(String, superClass); function String() { return String.__super__.constructor.apply(this, arguments); } return String; })(exports.simple_prop("String", types_1.isString)); exports.Font = (function (superClass) { extend(Font, superClass); function Font() { return Font.__super__.constructor.apply(this, arguments); } return Font; })(exports.String); exports.enum_prop = function (name, enum_values) { var Enum; return Enum = (function (superClass) { extend(Enum, superClass); function Enum() { return Enum.__super__.constructor.apply(this, arguments); } Enum.prototype.toString = function () { return name + "(obj: " + this.obj.id + ", spec: " + (JSON.stringify(this.spec)) + ")"; }; return Enum; })(exports.simple_prop(name, function (x) { return indexOf.call(enum_values, x) >= 0; })); }; exports.Anchor = (function (superClass) { extend(Anchor, superClass); function Anchor() { return Anchor.__super__.constructor.apply(this, arguments); } return Anchor; })(exports.enum_prop("Anchor", enums.LegendLocation)); exports.AngleUnits = (function (superClass) { extend(AngleUnits, superClass); function AngleUnits() { return AngleUnits.__super__.constructor.apply(this, arguments); } return AngleUnits; })(exports.enum_prop("AngleUnits", enums.AngleUnits)); exports.Direction = (function (superClass) { extend(Direction, superClass); function Direction() { return Direction.__super__.constructor.apply(this, arguments); } Direction.prototype.transform = function (values) { var i, j, ref, result; result = new Uint8Array(values.length); for (i = j = 0, ref = values.length; 0 <= ref ? j < ref : j > ref; i = 0 <= ref ? ++j : --j) { switch (values[i]) { case 'clock': result[i] = false; break; case 'anticlock': result[i] = true; } } return result; }; return Direction; })(exports.enum_prop("Direction", enums.Direction)); exports.Dimension = (function (superClass) { extend(Dimension, superClass); function Dimension() { return Dimension.__super__.constructor.apply(this, arguments); } return Dimension; })(exports.enum_prop("Dimension", enums.Dimension)); exports.Dimensions = (function (superClass) { extend(Dimensions, superClass); function Dimensions() { return Dimensions.__super__.constructor.apply(this, arguments); } return Dimensions; })(exports.enum_prop("Dimensions", enums.Dimensions)); exports.FontStyle = (function (superClass) { extend(FontStyle, superClass); function FontStyle() { return FontStyle.__super__.constructor.apply(this, arguments); } return FontStyle; })(exports.enum_prop("FontStyle", enums.FontStyle)); exports.LatLon = (function (superClass) { extend(LatLon, superClass); function LatLon() { return LatLon.__super__.constructor.apply(this, arguments); } return LatLon; })(exports.enum_prop("LatLon", enums.LatLon)); exports.LineCap = (function (superClass) { extend(LineCap, superClass); function LineCap() { return LineCap.__super__.constructor.apply(this, arguments); } return LineCap; })(exports.enum_prop("LineCap", enums.LineCap)); exports.LineJoin = (function (superClass) { extend(LineJoin, superClass); function LineJoin() { return LineJoin.__super__.constructor.apply(this, arguments); } return LineJoin; })(exports.enum_prop("LineJoin", enums.LineJoin)); exports.LegendLocation = (function (superClass) { extend(LegendLocation, superClass); function LegendLocation() { return LegendLocation.__super__.constructor.apply(this, arguments); } return LegendLocation; })(exports.enum_prop("LegendLocation", enums.LegendLocation)); exports.Location = (function (superClass) { extend(Location, superClass); function Location() { return Location.__super__.constructor.apply(this, arguments); } return Location; })(exports.enum_prop("Location", enums.Location)); exports.Orientation = (function (superClass) { extend(Orientation, superClass); function Orientation() { return Orientation.__super__.constructor.apply(this, arguments); } return Orientation; })(exports.enum_prop("Orientation", enums.Orientation)); exports.TextAlign = (function (superClass) { extend(TextAlign, superClass); function TextAlign() { return TextAlign.__super__.constructor.apply(this, arguments); } return TextAlign; })(exports.enum_prop("TextAlign", enums.TextAlign)); exports.TextBaseline = (function (superClass) { extend(TextBaseline, superClass); function TextBaseline() { return TextBaseline.__super__.constructor.apply(this, arguments); } return TextBaseline; })(exports.enum_prop("TextBaseline", enums.TextBaseline)); exports.RenderLevel = (function (superClass) { extend(RenderLevel, superClass); function RenderLevel() { return RenderLevel.__super__.constructor.apply(this, arguments); } return RenderLevel; })(exports.enum_prop("RenderLevel", enums.RenderLevel)); exports.RenderMode = (function (superClass) { extend(RenderMode, superClass); function RenderMode() { return RenderMode.__super__.constructor.apply(this, arguments); } return RenderMode; })(exports.enum_prop("RenderMode", enums.RenderMode)); exports.SizingMode = (function (superClass) { extend(SizingMode, superClass); function SizingMode() { return SizingMode.__super__.constructor.apply(this, arguments); } return SizingMode; })(exports.enum_prop("SizingMode", enums.SizingMode)); exports.SpatialUnits = (function (superClass) { extend(SpatialUnits, superClass); function SpatialUnits() { return SpatialUnits.__super__.constructor.apply(this, arguments); } return SpatialUnits; })(exports.enum_prop("SpatialUnits", enums.SpatialUnits)); exports.Distribution = (function (superClass) { extend(Distribution, superClass); function Distribution() { return Distribution.__super__.constructor.apply(this, arguments); } return Distribution; })(exports.enum_prop("Distribution", enums.DistributionTypes)); exports.TransformStepMode = (function (superClass) { extend(TransformStepMode, superClass); function TransformStepMode() { return TransformStepMode.__super__.constructor.apply(this, arguments); } return TransformStepMode; })(exports.enum_prop("TransformStepMode", enums.TransformStepModes)); exports.units_prop = function (name, valid_units, default_units) { var UnitsProp; return UnitsProp = (function (superClass) { extend(UnitsProp, superClass); function UnitsProp() { return UnitsProp.__super__.constructor.apply(this, arguments); } UnitsProp.prototype.toString = function () { return name + "(obj: " + this.obj.id + ", spec: " + (JSON.stringify(this.spec)) + ")"; }; UnitsProp.prototype.init = function () { var units; if (this.spec.units == null) { this.spec.units = default_units; } this.units = this.spec.units; units = this.spec.units; if (indexOf.call(valid_units, units) < 0) { throw new Error(name + " units must be one of " + valid_units + ", given invalid value: " + units); } }; return UnitsProp; })(exports.Number); }; exports.Angle = (function (superClass) { extend(Angle, superClass); function Angle() { return Angle.__super__.constructor.apply(this, arguments); } Angle.prototype.transform = function (values) { var x; if (this.spec.units === "deg") { values = (function () { var j, len, results; results = []; for (j = 0, len = values.length; j < len; j++) { x = values[j]; results.push(x * Math.PI / 180.0); } return results; })(); } values = (function () { var j, len, results; results = []; for (j = 0, len = values.length; j < len; j++) { x = values[j]; results.push(-x); } return results; })(); return Angle.__super__.transform.call(this, values); }; return Angle; })(exports.units_prop("Angle", enums.AngleUnits, "rad")); exports.Distance = (function (superClass) { extend(Distance, superClass); function Distance() { return Distance.__super__.constructor.apply(this, arguments); } return Distance; })(exports.units_prop("Distance", enums.SpatialUnits, "data")); exports.AngleSpec = (function (superClass) { extend(AngleSpec, superClass); function AngleSpec() { return AngleSpec.__super__.constructor.apply(this, arguments); } AngleSpec.prototype.dataspec = true; return AngleSpec; })(exports.Angle); exports.ColorSpec = (function (superClass) { extend(ColorSpec, superClass); function ColorSpec() { return ColorSpec.__super__.constructor.apply(this, arguments); } ColorSpec.prototype.dataspec = true; return ColorSpec; })(exports.Color); exports.DirectionSpec = (function (superClass) { extend(DirectionSpec, superClass); function DirectionSpec() { return DirectionSpec.__super__.constructor.apply(this, arguments); } DirectionSpec.prototype.dataspec = true; return DirectionSpec; })(exports.Distance); exports.DistanceSpec = (function (superClass) { extend(DistanceSpec, superClass); function DistanceSpec() { return DistanceSpec.__super__.constructor.apply(this, arguments); } DistanceSpec.prototype.dataspec = true; return DistanceSpec; })(exports.Distance); exports.FontSizeSpec = (function (superClass) { extend(FontSizeSpec, superClass); function FontSizeSpec() { return FontSizeSpec.__super__.constructor.apply(this, arguments); } FontSizeSpec.prototype.dataspec = true; return FontSizeSpec; })(exports.String); exports.NumberSpec = (function (superClass) { extend(NumberSpec, superClass); function NumberSpec() { return NumberSpec.__super__.constructor.apply(this, arguments); } NumberSpec.prototype.dataspec = true; return NumberSpec; })(exports.Number); exports.StringSpec = (function (superClass) { extend(StringSpec, superClass); function StringSpec() { return StringSpec.__super__.constructor.apply(this, arguments); } StringSpec.prototype.dataspec = true; return StringSpec; })(exports.String);