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