UNPKG

feeles-ide

Version:

The hackable and serializable IDE to make learning material

116 lines (103 loc) 3.18 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck")); var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass")); var _codemirror = require("codemirror"); var _File = require("../File/"); var Snippet = /*#__PURE__*/ function () { function Snippet(props) { (0, _classCallCheck2.default)(this, Snippet); this.key = getUniqueId(); this.props = Object.freeze(props); this._separate = (0, _File.separate)(props.name); } (0, _createClass2.default)(Snippet, [{ key: "render", value: function render(element) { element.textContent = this.props.prefix + ' ' + this.props.description; return element; } }, { key: "hint", value: function hint(cm, self, data) { var from = self.asset ? new _codemirror.Pos(self.from.line + 1, 0) : self.from; var to = self.asset ? from : self.to; var text = self.asset ? data.text + '\n' : data.text; var prefix = cm.getLine(from.line); cm.replaceRange(text, from, to, 'complete'); // 挿入位置のタブに合わせるインデント var indent = (0, _codemirror.countColumn)(prefix, null, 4); var end = from.line + text.split('\n').length + (self.asset ? -1 : 0); for (var line = from.line + 1; line < end; line++) { var pos = new _codemirror.Pos(line, 0); cm.replaceRange('\t'.repeat(indent / 4), pos, pos, '+input'); } var endLine = from.line + length - 1; var endCh = cm.getLine(endLine).length; return { from: from, to: new _codemirror.Pos(endLine, endCh) }; } }, { key: "text", get: function get() { if (!this.props.body && typeof this.props.text === 'string') { return this.props.text; } else if (Array.isArray(this.props.body)) { return this.props.body.map(function (text) { return text.replace(/\\t/g, '\t'); }).join('\n'); } else { return this.props.body.replace(/\\n/g, '\n').replace(/\\t/g, '\t'); } } }, { key: "prefix", get: function get() { return this.props.prefix || ''; } }, { key: "description", get: function get() { return this.props.description; } }, { key: "descriptionMoreURL", get: function get() { return this.props.descriptionMoreURL; } }, { key: "leftLabel", get: function get() { return this.props.leftLabelHTML || this.props.leftLabel || ''; } }, { key: "rightLabel", get: function get() { return this.props.rightLabelHTML || this.props.rightLabel || ''; } }, { key: "plain", get: function get() { return this._separate.plain; } }, { key: "fileKey", get: function get() { return this.props.fileKey; } }]); return Snippet; }(); exports.default = Snippet; var getUniqueId = function (id) { return function () { return 'Snippet__' + ++id; }; }(0);