@quartic/bokehjs
Version:
Interactive, novel data visualization
256 lines (255 loc) • 9.73 kB
JavaScript
"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 p = require("core/properties");
var array_1 = require("core/util/array");
var action_tool_1 = require("./actions/action_tool");
var help_tool_1 = require("./actions/help_tool");
var gesture_tool_1 = require("./gestures/gesture_tool");
var inspect_tool_1 = require("./inspectors/inspect_tool");
var toolbar_base_1 = require("./toolbar_base");
var tool_proxy_1 = require("./tool_proxy");
var box_1 = require("../layouts/box");
exports.ToolbarBoxToolbar = (function (superClass) {
extend(ToolbarBoxToolbar, superClass);
function ToolbarBoxToolbar() {
return ToolbarBoxToolbar.__super__.constructor.apply(this, arguments);
}
ToolbarBoxToolbar.prototype.type = 'ToolbarBoxToolbar';
ToolbarBoxToolbar.prototype.default_view = toolbar_base_1.ToolbarBaseView;
ToolbarBoxToolbar.prototype.initialize = function (options) {
ToolbarBoxToolbar.__super__.initialize.call(this, options);
this._init_tools();
if (this.merge_tools === true) {
return this._merge_tools();
}
};
ToolbarBoxToolbar.define({
merge_tools: [p.Bool, true]
});
ToolbarBoxToolbar.prototype._init_tools = function () {
var et, i, len, ref, results, tool;
ref = this.tools;
results = [];
for (i = 0, len = ref.length; i < len; i++) {
tool = ref[i];
if (tool instanceof inspect_tool_1.InspectTool) {
if (!array_1.any(this.inspectors, (function (_this) {
return function (t) {
return t.id === tool.id;
};
})(this))) {
results.push(this.inspectors = this.inspectors.concat([tool]));
}
else {
results.push(void 0);
}
}
else if (tool instanceof help_tool_1.HelpTool) {
if (!array_1.any(this.help, (function (_this) {
return function (t) {
return t.id === tool.id;
};
})(this))) {
results.push(this.help = this.help.concat([tool]));
}
else {
results.push(void 0);
}
}
else if (tool instanceof action_tool_1.ActionTool) {
if (!array_1.any(this.actions, (function (_this) {
return function (t) {
return t.id === tool.id;
};
})(this))) {
results.push(this.actions = this.actions.concat([tool]));
}
else {
results.push(void 0);
}
}
else if (tool instanceof gesture_tool_1.GestureTool) {
et = tool.event_type;
if (!array_1.any(this.gestures[et].tools, (function (_this) {
return function (t) {
return t.id === tool.id;
};
})(this))) {
results.push(this.gestures[et].tools = this.gestures[et].tools.concat([tool]));
}
else {
results.push(void 0);
}
}
else {
results.push(void 0);
}
}
return results;
};
ToolbarBoxToolbar.prototype._merge_tools = function () {
var actions, active, et, event_type, gestures, helptool, i, info, inspectors, j, k, l, len, len1, len2, len3, make_proxy, new_help_tools, new_help_urls, proxy, ref, ref1, ref2, ref3, ref4, ref5, ref6, results, tool, tool_type, tools;
inspectors = {};
actions = {};
gestures = {};
new_help_tools = [];
new_help_urls = [];
ref = this.help;
for (i = 0, len = ref.length; i < len; i++) {
helptool = ref[i];
if (ref1 = helptool.redirect, indexOf.call(new_help_urls, ref1) < 0) {
new_help_tools.push(helptool);
new_help_urls.push(helptool.redirect);
}
}
this.help = new_help_tools;
ref2 = this.gestures;
for (event_type in ref2) {
info = ref2[event_type];
if (!(event_type in gestures)) {
gestures[event_type] = {};
}
ref3 = info.tools;
for (j = 0, len1 = ref3.length; j < len1; j++) {
tool = ref3[j];
if (!(tool.type in gestures[event_type])) {
gestures[event_type][tool.type] = [];
}
gestures[event_type][tool.type].push(tool);
}
}
ref4 = this.inspectors;
for (k = 0, len2 = ref4.length; k < len2; k++) {
tool = ref4[k];
if (!(tool.type in inspectors)) {
inspectors[tool.type] = [];
}
inspectors[tool.type].push(tool);
}
ref5 = this.actions;
for (l = 0, len3 = ref5.length; l < len3; l++) {
tool = ref5[l];
if (!(tool.type in actions)) {
actions[tool.type] = [];
}
actions[tool.type].push(tool);
}
make_proxy = function (tools, active) {
if (active == null) {
active = false;
}
return new tool_proxy_1.ToolProxy({
tools: tools,
event_type: tools[0].event_type,
tooltip: tools[0].tool_name,
tool_name: tools[0].tool_name,
icon: tools[0].icon,
active: active
});
};
for (event_type in gestures) {
this.gestures[event_type].tools = [];
ref6 = gestures[event_type];
for (tool_type in ref6) {
tools = ref6[tool_type];
if (tools.length > 0) {
proxy = make_proxy(tools);
this.gestures[event_type].tools.push(proxy);
this.listenTo(proxy, 'change:active', this._active_change.bind(proxy));
}
}
}
this.actions = [];
for (tool_type in actions) {
tools = actions[tool_type];
if (tools.length > 0) {
this.actions.push(make_proxy(tools));
}
}
this.inspectors = [];
for (tool_type in inspectors) {
tools = inspectors[tool_type];
if (tools.length > 0) {
this.inspectors.push(make_proxy(tools, active = true));
}
}
results = [];
for (et in this.gestures) {
tools = this.gestures[et].tools;
if (tools.length === 0) {
continue;
}
this.gestures[et].tools = array_1.sortBy(tools, function (tool) {
return tool.default_order;
});
if (et !== 'pinch' && et !== 'scroll') {
results.push(this.gestures[et].tools[0].active = true);
}
else {
results.push(void 0);
}
}
return results;
};
return ToolbarBoxToolbar;
})(toolbar_base_1.ToolbarBase);
exports.ToolbarBoxView = (function (superClass) {
extend(ToolbarBoxView, superClass);
function ToolbarBoxView() {
return ToolbarBoxView.__super__.constructor.apply(this, arguments);
}
ToolbarBoxView.prototype.className = 'bk-toolbar-box';
ToolbarBoxView.prototype.get_width = function () {
if (this.model._horizontal === true) {
return 30;
}
else {
return null;
}
};
ToolbarBoxView.prototype.get_height = function () {
return 30;
};
return ToolbarBoxView;
})(box_1.BoxView);
exports.ToolbarBox = (function (superClass) {
extend(ToolbarBox, superClass);
function ToolbarBox() {
return ToolbarBox.__super__.constructor.apply(this, arguments);
}
ToolbarBox.prototype.type = 'ToolbarBox';
ToolbarBox.prototype.default_view = exports.ToolbarBoxView;
ToolbarBox.prototype.initialize = function (options) {
var ref;
ToolbarBox.__super__.initialize.call(this, options);
this._toolbar = new exports.ToolbarBoxToolbar(options);
if ((ref = this.toolbar_location) === 'left' || ref === 'right') {
this._horizontal = true;
return this._toolbar._sizeable = this._toolbar._width;
}
else {
this._horizontal = false;
return this._toolbar._sizeable = this._toolbar._height;
}
};
ToolbarBox.prototype._doc_attached = function () {
return this._toolbar.attach_document(this.document);
};
ToolbarBox.prototype.get_layoutable_children = function () {
return [this._toolbar];
};
ToolbarBox.define({
toolbar_location: [p.Location, "right"],
merge_tools: [p.Bool, true],
tools: [p.Any, []],
logo: [p.String, "normal"]
});
return ToolbarBox;
})(box_1.Box);