matrix-react-sdk
Version:
SDK for matrix.org using React
132 lines (108 loc) • 15 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _react = _interopRequireDefault(require("react"));
var _propTypes = _interopRequireDefault(require("prop-types"));
var _languageHandler = require("../../../languageHandler");
var _classnames = _interopRequireDefault(require("classnames"));
var _AccessibleTooltipButton = _interopRequireDefault(require("../elements/AccessibleTooltipButton"));
var _replaceableComponent = require("../../../utils/replaceableComponent");
var _dec, _class, _class2, _temp;
let MessageComposerFormatBar = (_dec = (0, _replaceableComponent.replaceableComponent)("views.rooms.MessageComposerFormatBar"), _dec(_class = (_temp = _class2 = class MessageComposerFormatBar extends _react.default.PureComponent {
constructor(props) {
super(props);
this.state = {
visible: false
};
}
render() {
const classes = (0, _classnames.default)("mx_MessageComposerFormatBar", {
"mx_MessageComposerFormatBar_shown": this.state.visible
});
return /*#__PURE__*/_react.default.createElement("div", {
className: classes,
ref: ref => this._formatBarRef = ref
}, /*#__PURE__*/_react.default.createElement(FormatButton, {
label: (0, _languageHandler._t)("Bold"),
onClick: () => this.props.onAction("bold"),
icon: "Bold",
shortcut: this.props.shortcuts.bold,
visible: this.state.visible
}), /*#__PURE__*/_react.default.createElement(FormatButton, {
label: (0, _languageHandler._t)("Italics"),
onClick: () => this.props.onAction("italics"),
icon: "Italic",
shortcut: this.props.shortcuts.italics,
visible: this.state.visible
}), /*#__PURE__*/_react.default.createElement(FormatButton, {
label: (0, _languageHandler._t)("Strikethrough"),
onClick: () => this.props.onAction("strikethrough"),
icon: "Strikethrough",
visible: this.state.visible
}), /*#__PURE__*/_react.default.createElement(FormatButton, {
label: (0, _languageHandler._t)("Code block"),
onClick: () => this.props.onAction("code"),
icon: "Code",
visible: this.state.visible
}), /*#__PURE__*/_react.default.createElement(FormatButton, {
label: (0, _languageHandler._t)("Quote"),
onClick: () => this.props.onAction("quote"),
icon: "Quote",
shortcut: this.props.shortcuts.quote,
visible: this.state.visible
}));
}
showAt(selectionRect) {
this.setState({
visible: true
});
const parentRect = this._formatBarRef.parentElement.getBoundingClientRect();
this._formatBarRef.style.left = `${selectionRect.left - parentRect.left}px`; // 12 is half the height of the bar (e.g. to center it) and 16 is an offset that felt ok.
this._formatBarRef.style.top = `${selectionRect.top - parentRect.top - 16 - 12}px`;
}
hide() {
this.setState({
visible: false
});
}
}, (0, _defineProperty2.default)(_class2, "propTypes", {
onAction: _propTypes.default.func.isRequired,
shortcuts: _propTypes.default.object.isRequired
}), _temp)) || _class);
exports.default = MessageComposerFormatBar;
class FormatButton extends _react.default.PureComponent {
render() {
const className = `mx_MessageComposerFormatBar_button mx_MessageComposerFormatBar_buttonIcon${this.props.icon}`;
let shortcut;
if (this.props.shortcut) {
shortcut = /*#__PURE__*/_react.default.createElement("div", {
className: "mx_MessageComposerFormatBar_tooltipShortcut"
}, this.props.shortcut);
}
const tooltip = /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement("div", {
className: "mx_Tooltip_title"
}, this.props.label), /*#__PURE__*/_react.default.createElement("div", {
className: "mx_Tooltip_sub"
}, shortcut));
return /*#__PURE__*/_react.default.createElement(_AccessibleTooltipButton.default, {
element: "button",
type: "button",
onClick: this.props.onClick,
title: this.props.label,
tooltip: tooltip,
className: className
});
}
}
(0, _defineProperty2.default)(FormatButton, "propTypes", {
label: _propTypes.default.string.isRequired,
onClick: _propTypes.default.func.isRequired,
icon: _propTypes.default.string.isRequired,
shortcut: _propTypes.default.string,
visible: _propTypes.default.bool
});
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3ZpZXdzL3Jvb21zL01lc3NhZ2VDb21wb3NlckZvcm1hdEJhci5qcyJdLCJuYW1lcyI6WyJNZXNzYWdlQ29tcG9zZXJGb3JtYXRCYXIiLCJSZWFjdCIsIlB1cmVDb21wb25lbnQiLCJjb25zdHJ1Y3RvciIsInByb3BzIiwic3RhdGUiLCJ2aXNpYmxlIiwicmVuZGVyIiwiY2xhc3NlcyIsInJlZiIsIl9mb3JtYXRCYXJSZWYiLCJvbkFjdGlvbiIsInNob3J0Y3V0cyIsImJvbGQiLCJpdGFsaWNzIiwicXVvdGUiLCJzaG93QXQiLCJzZWxlY3Rpb25SZWN0Iiwic2V0U3RhdGUiLCJwYXJlbnRSZWN0IiwicGFyZW50RWxlbWVudCIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsInN0eWxlIiwibGVmdCIsInRvcCIsImhpZGUiLCJQcm9wVHlwZXMiLCJmdW5jIiwiaXNSZXF1aXJlZCIsIm9iamVjdCIsIkZvcm1hdEJ1dHRvbiIsImNsYXNzTmFtZSIsImljb24iLCJzaG9ydGN1dCIsInRvb2x0aXAiLCJsYWJlbCIsIm9uQ2xpY2siLCJzdHJpbmciLCJib29sIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQWdCQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7OztJQUdxQkEsd0IsV0FEcEIsZ0RBQXFCLHNDQUFyQixDLG1DQUFELE1BQ3FCQSx3QkFEckIsU0FDc0RDLGVBQU1DLGFBRDVELENBQzBFO0FBTXRFQyxFQUFBQSxXQUFXLENBQUNDLEtBQUQsRUFBUTtBQUNmLFVBQU1BLEtBQU47QUFDQSxTQUFLQyxLQUFMLEdBQWE7QUFBQ0MsTUFBQUEsT0FBTyxFQUFFO0FBQVYsS0FBYjtBQUNIOztBQUVEQyxFQUFBQSxNQUFNLEdBQUc7QUFDTCxVQUFNQyxPQUFPLEdBQUcseUJBQVcsNkJBQVgsRUFBMEM7QUFDdEQsMkNBQXFDLEtBQUtILEtBQUwsQ0FBV0M7QUFETSxLQUExQyxDQUFoQjtBQUdBLHdCQUFRO0FB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QUxKLEMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuQ29weXJpZ2h0IDIwMTkgVGhlIE1hdHJpeC5vcmcgRm91bmRhdGlvbiBDLkkuQy5cblxuTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbnlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbllvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cblVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbmRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbldJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxubGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4qL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB7IF90IH0gZnJvbSAnLi4vLi4vLi4vbGFuZ3VhZ2VIYW5kbGVyJztcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IEFjY2Vzc2libGVUb29sdGlwQnV0dG9uIGZyb20gXCIuLi9lbGVtZW50cy9BY2Nlc3NpYmxlVG9vbHRpcEJ1dHRvblwiO1xuaW1wb3J0IHtyZXBsYWNlYWJsZUNvbXBvbmVudH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL3JlcGxhY2VhYmxlQ29tcG9uZW50XCI7XG5cbkByZXBsYWNlYWJsZUNvbXBvbmVudChcInZpZXdzLnJvb21zLk1lc3NhZ2VDb21wb3NlckZvcm1hdEJhclwiKVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTWVzc2FnZUNvbXBvc2VyRm9ybWF0QmFyIGV4dGVuZHMgUmVhY3QuUHVyZUNvbXBvbmVudCB7XG4gICAgc3RhdGljIHByb3BUeXBlcyA9IHtcbiAgICAgICAgb25BY3Rpb246IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgICAgIHNob3J0Y3V0czogUHJvcFR5cGVzLm9iamVjdC5pc1JlcXVpcmVkLFxuICAgIH07XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG4gICAgICAgIHRoaXMuc3RhdGUgPSB7dmlzaWJsZTogZmFsc2V9O1xuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgY29uc3QgY2xhc3NlcyA9IGNsYXNzTmFtZXMoXCJteF9NZXNzYWdlQ29tcG9zZXJGb3JtYXRCYXJcIiwge1xuICAgICAgICAgICAgXCJteF9NZXNzYWdlQ29tcG9zZXJGb3JtYXRCYXJfc2hvd25cIjogdGhpcy5zdGF0ZS52aXNpYmxlLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuICg8ZGl2IGNsYXNzTmFtZT17Y2xhc3Nlc30gcmVmPXtyZWYgPT4gdGhpcy5fZm9ybWF0QmFyUmVmID0gcmVmfT5cbiAgICAgICAgICAgIDxGb3JtYXRCdXR0b24gbGFiZWw9e190KFwiQm9sZFwiKX0gb25DbGljaz17KCkgPT4gdGhpcy5wcm9wcy5vbkFjdGlvbihcImJvbGRcIil9IGljb249XCJCb2xkXCIgc2hvcnRjdXQ9e3RoaXMucHJvcHMuc2hvcnRjdXRzLmJvbGR9IHZpc2libGU9e3RoaXMuc3RhdGUudmlzaWJsZX0gLz5cbiAgICAgICAgICAgIDxGb3JtYXRCdXR0b24gbGFiZWw9e190KFwiSXRhbGljc1wiKX0gb25DbGljaz17KCkgPT4gdGhpcy5wcm9wcy5vbkFjdGlvbihcIml0YWxpY3NcIil9IGljb249XCJJdGFsaWNcIiBzaG9ydGN1dD17dGhpcy5wcm9wcy5zaG9ydGN1dHMuaXRhbGljc30gdmlzaWJsZT17dGhpcy5zdGF0ZS52aXNpYmxlfSAvPlxuICAgICAgICAgICAgPEZvcm1hdEJ1dHRvbiBsYWJlbD17X3QoXCJTdHJpa2V0aHJvdWdoXCIpfSBvbkNsaWNrPXsoKSA9PiB0aGlzLnByb3BzLm9uQWN0aW9uKFwic3RyaWtldGhyb3VnaFwiKX0gaWNvbj1cIlN0cmlrZXRocm91Z2hcIiB2aXNpYmxlPXt0aGlzLnN0YXRlLnZpc2libGV9IC8+XG4gICAgICAgICAgICA8Rm9ybWF0QnV0dG9uIGxhYmVsPXtfdChcIkNvZGUgYmxvY2tcIil9IG9uQ2xpY2s9eygpID0+IHRoaXMucHJvcHMub25BY3Rpb24oXCJjb2RlXCIpfSBpY29uPVwiQ29kZVwiIHZpc2libGU9e3RoaXMuc3RhdGUudmlzaWJsZX0gLz5cbiAgICAgICAgICAgIDxGb3JtYXRCdXR0b24gbGFiZWw9e190KFwiUXVvdGVcIil9IG9uQ2xpY2s9eygpID0+IHRoaXMucHJvcHMub25BY3Rpb24oXCJxdW90ZVwiKX0gaWNvbj1cIlF1b3RlXCIgc2hvcnRjdXQ9e3RoaXMucHJvcHMuc2hvcnRjdXRzLnF1b3RlfSB2aXNpYmxlPXt0aGlzLnN0YXRlLnZpc2libGV9IC8+XG4gICAgICAgIDwvZGl2Pik7XG4gICAgfVxuXG4gICAgc2hvd0F0KHNlbGVjdGlvblJlY3QpIHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7dmlzaWJsZTogdHJ1ZX0pO1xuICAgICAgICBjb25zdCBwYXJlbnRSZWN0ID0gdGhpcy5fZm9ybWF0QmFyUmVmLnBhcmVudEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIHRoaXMuX2Zvcm1hdEJhclJlZi5zdHlsZS5sZWZ0ID0gYCR7c2VsZWN0aW9uUmVjdC5sZWZ0IC0gcGFyZW50UmVjdC5sZWZ0fXB4YDtcbiAgICAgICAgLy8gMTIgaXMgaGFsZiB0aGUgaGVpZ2h0IG9mIHRoZSBiYXIgKGUuZy4gdG8gY2VudGVyIGl0KSBhbmQgMTYgaXMgYW4gb2Zmc2V0IHRoYXQgZmVsdCBvay5cbiAgICAgICAgdGhpcy5fZm9ybWF0QmFyUmVmLnN0eWxlLnRvcCA9IGAke3NlbGVjdGlvblJlY3QudG9wIC0gcGFyZW50UmVjdC50b3AgLSAxNiAtIDEyfXB4YDtcbiAgICB9XG5cbiAgICBoaWRlKCkge1xuICAgICAgICB0aGlzLnNldFN0YXRlKHt2aXNpYmxlOiBmYWxzZX0pO1xuICAgIH1cbn1cblxuY2xhc3MgRm9ybWF0QnV0dG9uIGV4dGVuZHMgUmVhY3QuUHVyZUNvbXBvbmVudCB7XG4gICAgc3RhdGljIHByb3BUeXBlcyA9IHtcbiAgICAgICAgbGFiZWw6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICAgICAgb25DbGljazogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICAgICAgaWNvbjogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgICAgICBzaG9ydGN1dDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgICAgdmlzaWJsZTogUHJvcFR5cGVzLmJvb2wsXG4gICAgfTtcblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgY29uc3QgY2xhc3NOYW1lID0gYG14X01lc3NhZ2VDb21wb3NlckZvcm1hdEJhcl9idXR0b24gbXhfTWVzc2FnZUNvbXBvc2VyRm9ybWF0QmFyX2J1dHRvbkljb24ke3RoaXMucHJvcHMuaWNvbn1gO1xuICAgICAgICBsZXQgc2hvcnRjdXQ7XG4gICAgICAgIGlmICh0aGlzLnByb3BzLnNob3J0Y3V0KSB7XG4gICAgICAgICAgICBzaG9ydGN1dCA9IDxkaXYgY2xhc3NOYW1lPVwibXhfTWVzc2FnZUNvbXBvc2VyRm9ybWF0QmFyX3Rvb2x0aXBTaG9ydGN1dFwiPnt0aGlzLnByb3BzLnNob3J0Y3V0fTwvZGl2PjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0b29sdGlwID0gPGRpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXhfVG9vbHRpcF90aXRsZVwiPlxuICAgICAgICAgICAgICAgIHt0aGlzLnByb3BzLmxhYmVsfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm14X1Rvb2x0aXBfc3ViXCI+XG4gICAgICAgICAgICAgICAge3Nob3J0Y3V0fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PjtcblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPEFjY2Vzc2libGVUb29sdGlwQnV0dG9uXG4gICAgICAgICAgICAgICAgZWxlbWVudD1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgb25DbGljaz17dGhpcy5wcm9wcy5vbkNsaWNrfVxuICAgICAgICAgICAgICAgIHRpdGxlPXt0aGlzLnByb3BzLmxhYmVsfVxuICAgICAgICAgICAgICAgIHRvb2x0aXA9e3Rvb2x0aXB9XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWV9IC8+XG4gICAgICAgICk7XG4gICAgfVxufVxuIl19