UNPKG

feeles-ide

Version:

The hackable and serializable IDE to make learning material

206 lines (171 loc) 5.96 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread")); var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck")); var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass")); var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn")); var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf")); var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits")); var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized")); var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _md = _interopRequireDefault(require("md5")); var _JSON = require("./JSON6"); var _File3 = _interopRequireDefault(require("./_File")); var _configs = _interopRequireDefault(require("./configs")); var _sanitizeHTML = require("./sanitizeHTML"); var SourceFile = /*#__PURE__*/ function (_File2) { (0, _inherits2.default)(SourceFile, _File2); function SourceFile(props) { var _this; (0, _classCallCheck2.default)(this, SourceFile); if (props.composed && !props.text) { var text = ''; try { // base64 encode された文字列の展開 text = decodeURIComponent(escape(atob(props.composed))); } catch (e) { // 旧仕様(sanitizeHTML)で compose された文字列の展開 (backword compatibility) text = (0, _sanitizeHTML.decode)(props.composed); } props = (0, _objectSpread2.default)({}, props, { text: text }); } _this = (0, _possibleConstructorReturn2.default)(this, (0, _getPrototypeOf2.default)(SourceFile).call(this, props)); (0, _defineProperty2.default)((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)), "_hash", null); return _this; } (0, _createClass2.default)(SourceFile, [{ key: "set", value: function set(change) { if (!change.text && this.hash) { change.hash = this.hash; } var seed = (0, _objectSpread2.default)({}, this.serialize(), change); seed.key = this.key; seed.lastModified = Date.now(); return new this.constructor(seed); } }, { key: "compose", value: function compose() { var serialized = this.serialize(); delete serialized.text; serialized.composed = (0, _sanitizeHTML.encode)(this.text); if (this.sign && this.sign === this.credit) { var credits = this.credits.concat((0, _objectSpread2.default)({}, this.sign, { timestamp: Date.now(), hash: this.hash })); serialized.credits = JSON.stringify(credits); } else { serialized.credits = JSON.stringify(this.credits); } return Promise.resolve(serialized); } /** * @param file File|Blob * @return Promise gives SourceFile */ }, { key: "text", get: function get() { return this.props.text; } }, { key: "isScript", get: function get() { return this.is('javascript'); } }, { key: "blob", get: function get() { var blobCache = this.constructor.blobCache; if (blobCache.has(this)) { return blobCache.get(this); } var blob = new Blob([this.text], { type: this.type }); blobCache.set(this, blob); return blob; } }, { key: "json", get: function get() { var _this2 = this; if (!this._json) { var model = Array.from(_configs.default.values()).find(function (config) { return config.test.test(_this2.name); }); var defaultValue = model ? model.defaultValue : {}; try { this._json = (0, _objectSpread2.default)({}, defaultValue, (0, _JSON.parse)(this.text)); } catch (e) { return {}; } } return this._json; } }, { key: "hash", get: function get() { return this._hash = this._hash || (0, _md.default)(this.text); } }], [{ key: "load", value: function load(file) { return new Promise(function (resolve) { var reader = new FileReader(); reader.onload = function (e) { resolve(new SourceFile({ type: file.type, name: file.name || SourceFile.defaultProps.name, text: e.target.result, lastModified: file.lastModified })); }; reader.readAsText(file); }); } }, { key: "shot", value: function shot(text) { var name = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ''; return new SourceFile({ type: 'text/javascript', name: name, text: text }); } }, { key: "html", value: function html() { var text = "<!DOCTYPE html>\n<html>\n <head>\n <meta charset=\"utf-8\">\n <title>404 Not Found</title>\n </head>\n <body style=\"background-color: white;\">\n File Not Found\n </body>\n</html>"; return new SourceFile({ name: '404.html', type: 'text/html', text: text }); } }]); return SourceFile; }(_File3.default); exports.default = SourceFile; (0, _defineProperty2.default)(SourceFile, "defaultProps", { name: '.SourceFile', text: '', json: null, sign: null }); (0, _defineProperty2.default)(SourceFile, "defaultOptions", { isTrashed: false }); (0, _defineProperty2.default)(SourceFile, "visible", _File3.default.visible.concat('text', 'isScript')); (0, _defineProperty2.default)(SourceFile, "blobCache", new WeakMap());