feeles-ide
Version:
The hackable and serializable IDE to make learning material
116 lines (103 loc) • 3.18 kB
JavaScript
"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);