You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
135 lines
5.8 KiB
135 lines
5.8 KiB
|
4 months ago
|
"use strict";
|
||
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||
|
|
exports.Controller = void 0;
|
||
|
|
var tslib_1 = require("tslib");
|
||
|
|
var core_1 = require("../../core");
|
||
|
|
var shapes_1 = require("../../shapes");
|
||
|
|
var util_1 = require("../../util");
|
||
|
|
var icons_1 = require("./icons");
|
||
|
|
var componentsMap = {
|
||
|
|
reset: icons_1.Reset,
|
||
|
|
speed: icons_1.SpeedSelect,
|
||
|
|
backward: icons_1.Backward,
|
||
|
|
playPause: icons_1.PlayPause,
|
||
|
|
forward: icons_1.Forward,
|
||
|
|
selectionType: icons_1.SelectionType,
|
||
|
|
chartType: icons_1.ChartType,
|
||
|
|
split: icons_1.Split,
|
||
|
|
};
|
||
|
|
var Controller = /** @class */ (function (_super) {
|
||
|
|
tslib_1.__extends(Controller, _super);
|
||
|
|
function Controller(options) {
|
||
|
|
var _this = _super.call(this, (0, util_1.deepAssign)({}, Controller.defaultOptions, options)) || this;
|
||
|
|
_this.background = _this.appendChild(new shapes_1.Rect({}));
|
||
|
|
_this.functions = _this.appendChild(new shapes_1.Group({}));
|
||
|
|
return _this;
|
||
|
|
}
|
||
|
|
Object.defineProperty(Controller.prototype, "padding", {
|
||
|
|
get: function () {
|
||
|
|
return (0, util_1.parseSeriesAttr)(this.attributes.padding);
|
||
|
|
},
|
||
|
|
enumerable: false,
|
||
|
|
configurable: true
|
||
|
|
});
|
||
|
|
Controller.prototype.renderBackground = function () {
|
||
|
|
var _a = this.style, x = _a.x, y = _a.y, width = _a.width, height = _a.height;
|
||
|
|
var backgroundStyle = (0, util_1.subStyleProps)(this.attributes, 'background');
|
||
|
|
this.background.attr(tslib_1.__assign({ x: x, y: y, width: width, height: height }, backgroundStyle));
|
||
|
|
};
|
||
|
|
Controller.prototype.renderFunctions = function () {
|
||
|
|
var _this = this;
|
||
|
|
var _a;
|
||
|
|
var _b = this.attributes, functions = _b.functions, iconSize = _b.iconSize, iconSpacing = _b.iconSpacing, x = _b.x, y = _b.y, width = _b.width, height = _b.height, align = _b.align;
|
||
|
|
var _c = tslib_1.__read(this.padding, 4), right = _c[1], left = _c[3];
|
||
|
|
var components = functions.reduce(function (prev, curr) {
|
||
|
|
if (prev.length && curr.length) {
|
||
|
|
return prev.concat.apply(prev, tslib_1.__spreadArray(['split'], tslib_1.__read(curr), false));
|
||
|
|
}
|
||
|
|
return prev.concat.apply(prev, tslib_1.__spreadArray([], tslib_1.__read(curr), false));
|
||
|
|
}, []);
|
||
|
|
var componentsWidth = components.length * (iconSize + iconSpacing) - iconSpacing;
|
||
|
|
var xOffset = {
|
||
|
|
left: left + iconSize / 2,
|
||
|
|
center: (width - componentsWidth) / 2 + iconSize / 2,
|
||
|
|
right: width - componentsWidth - left - right + iconSize / 2,
|
||
|
|
}[align] || 0;
|
||
|
|
(_a = this.speedSelect) === null || _a === void 0 ? void 0 : _a.destroy();
|
||
|
|
this.functions.removeChildren();
|
||
|
|
components.forEach(function (name, index) {
|
||
|
|
var _a;
|
||
|
|
var Ctor = componentsMap[name];
|
||
|
|
var style = {
|
||
|
|
x: x + index * (iconSize + iconSpacing) + xOffset,
|
||
|
|
y: y + height / 2,
|
||
|
|
size: iconSize,
|
||
|
|
};
|
||
|
|
if (Ctor === icons_1.SpeedSelect) {
|
||
|
|
style.speed = _this.attributes.speed;
|
||
|
|
style.onSelect = function (value) { return _this.handleFunctionChange(name, { value: value }); };
|
||
|
|
}
|
||
|
|
else if ([icons_1.PlayPause, icons_1.SelectionType, icons_1.ChartType].includes(Ctor)) {
|
||
|
|
style.onChange = function (value) { return _this.handleFunctionChange(name, { value: value }); };
|
||
|
|
if (Ctor === icons_1.PlayPause)
|
||
|
|
style.type = _this.attributes.state === 'play' ? 'pause' : 'play';
|
||
|
|
if (Ctor === icons_1.SelectionType)
|
||
|
|
style.type = _this.attributes.selectionType === 'range' ? 'value' : 'range';
|
||
|
|
if (Ctor === icons_1.ChartType)
|
||
|
|
style.type = _this.attributes.chartType === 'line' ? 'column' : 'line';
|
||
|
|
}
|
||
|
|
else {
|
||
|
|
// IconBase
|
||
|
|
style.onClick = function () { return _this.handleFunctionChange(name, { value: name }); };
|
||
|
|
}
|
||
|
|
if (Ctor === icons_1.SpeedSelect) {
|
||
|
|
// SpeedSelect 直接插入到 canvas
|
||
|
|
var canvas = (_a = _this.ownerDocument) === null || _a === void 0 ? void 0 : _a.defaultView;
|
||
|
|
if (canvas) {
|
||
|
|
_this.speedSelect = new Ctor({ style: tslib_1.__assign(tslib_1.__assign({}, style), { zIndex: 100 }) });
|
||
|
|
canvas.appendChild(_this.speedSelect);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
else {
|
||
|
|
_this.functions.appendChild(new Ctor({ style: style }));
|
||
|
|
}
|
||
|
|
});
|
||
|
|
};
|
||
|
|
Controller.prototype.disconnectedCallback = function () {
|
||
|
|
var _a;
|
||
|
|
_super.prototype.disconnectedCallback.call(this);
|
||
|
|
(_a = this.speedSelect) === null || _a === void 0 ? void 0 : _a.destroy();
|
||
|
|
};
|
||
|
|
Controller.prototype.render = function () {
|
||
|
|
this.renderBackground();
|
||
|
|
this.renderFunctions();
|
||
|
|
};
|
||
|
|
Controller.prototype.handleFunctionChange = function (name, value) {
|
||
|
|
var onChange = this.attributes.onChange;
|
||
|
|
onChange === null || onChange === void 0 ? void 0 : onChange(name, value);
|
||
|
|
};
|
||
|
|
Controller.defaultOptions = {
|
||
|
|
style: {
|
||
|
|
x: 0,
|
||
|
|
y: 0,
|
||
|
|
width: 300,
|
||
|
|
height: 40,
|
||
|
|
padding: 0,
|
||
|
|
align: 'center',
|
||
|
|
iconSize: 25,
|
||
|
|
iconSpacing: 0,
|
||
|
|
speed: 1,
|
||
|
|
state: 'pause',
|
||
|
|
chartType: 'line',
|
||
|
|
selectionType: 'range',
|
||
|
|
backgroundFill: '#fbfdff',
|
||
|
|
backgroundStroke: '#ebedf0',
|
||
|
|
functions: [
|
||
|
|
['reset', 'speed'],
|
||
|
|
['backward', 'playPause', 'forward'],
|
||
|
|
['selectionType', 'chartType'],
|
||
|
|
],
|
||
|
|
},
|
||
|
|
};
|
||
|
|
return Controller;
|
||
|
|
}(core_1.Component));
|
||
|
|
exports.Controller = Controller;
|
||
|
|
//# sourceMappingURL=controller.js.map
|