diff --git a/src/js/src/js/File.js b/src/js/src/js/File.js
new file mode 100644
index 0000000..929caa8
--- /dev/null
+++ b/src/js/src/js/File.js
@@ -0,0 +1,25 @@
+export const File = {
+ get load() { return loadFileContent }
+}
+
+/**
+ * 引数Pathで渡されたファイルの中身を読み込む
+ */
+async function loadFileContent(path) {
+ try {
+ const response = await fetch(path);
+ if (response.ok) {
+ return response.text();
+ } else {
+ throw new Error(`HTTP error, status = ${response.status}`);
+ }
+ } catch (ex) {
+ const error = new Error('ファイルのオープンに失敗しました。causeプロパティで原因となったオブジェクトを返します。');
+ error.cause = ex;
+ throw error;
+ }
+}
+
+async function writeFilecontent() {
+
+}
\ No newline at end of file
diff --git a/src/js/src/js/solitude.js b/src/js/src/js/solitude.js
index 8305231..e35dfb6 100644
--- a/src/js/src/js/solitude.js
+++ b/src/js/src/js/solitude.js
@@ -1,4 +1,6 @@
-function graftSolitude(global) {
+import { File } from "/solitude/resources/js/File.js"
+
+export function graftSolitude(global) {
var solitude;
(function dismantleGlobal() {
global.solitude = solitude = global.solitude || {
@@ -51,30 +53,22 @@
solitude.message.post(JSON.stringify(message), solitude.origin)
}
- function readLocal(path, response) {
- //requestIdは2バイトの後ろのほう
- const request = { "path": path, "requestId": __getRandomInt(50000, 60000) }
-
- const receiver = function (event) {
- if (event.origin != slitude.origin)
- return;
-
- const message = jSON.parse(event.data);
- if (message.requestId != request.requestId) {
- return;
+ function readLocal(path) {
+ // stringで解決するPromiseを返したい。
+ return fetch(path).then(
+ (response) => {
+ if (response.ok) {
+ return response.text();
+ } else {
+ throw new Error(`HTTP error, status = ${response.status}`);
+ }
+ }, (cause) => {
+ const error = new Error('ファイルのオープンに失敗しました。causeプロパティで原因となったオブジェクトを返します。');
+ error.cause = cause;
+ throw error;
}
- solitude.removeMessageListener(receiver);
- response(message.success, message.content);
- }
- solitude.message.addListener(receiver);
- solitude.message.post(JSON.stringify(request), solitude.origin);
- }
-
- function __getRandomInt(min, max) {
- min = Math.ceil(min);
- max = Math.floor(max);
- return Math.floor(Math.random() * (max - min) + min)
- }
+ );
+ }
function download(filename, content, mimeType) {
const blob = new Blob([content], { "type": mimeType });
@@ -85,10 +79,6 @@
link.click()
}
- function log(log) {
-
- }
-
function io(solitude) {
//std can customize
const initialStd = {
@@ -107,7 +97,7 @@
const fs = {
get write() { return writeLocal },
get download() { return download },
- get read() { return readLocal },
+ get read() { return File.load },
get out() { return this.write },
get in() { return this.read },
}
diff --git a/src/js/src/main/app.html b/src/js/src/main/app.html
index 74c9ff6..1e89cc8 100644
--- a/src/js/src/main/app.html
+++ b/src/js/src/main/app.html
@@ -6,7 +6,7 @@
Solitude
-
+
diff --git a/src/js/src/main/app.js b/src/js/src/main/app.js
index bd75b21..94fb8a7 100644
--- a/src/js/src/main/app.js
+++ b/src/js/src/main/app.js
@@ -1,4 +1,5 @@
-import { Que } from "/solitude/resources/js/Que.js"
+import { Que } from "/solitude/resources/js/Que.js";
+import { graftSolitude } from "/solitude/resources/js/solitude.js"
window.addEventListener('load', main(document));
@@ -70,43 +71,7 @@
const solitude = window.solitude;
solitude.apps = {};
Object.assign(solitude.apps, window.tmp.solitudeapps);
- addProperty(solitude);
return solitude;
-
- function addProperty(app) {
- //solitude本体を設定しているような表現をしたいための回りくどい書き方
- Object.defineProperty(app, 'style', {
- get() { return 'web' }
- });
-
- app.write = {}
- app.write.local = writeLocal;
- app.read = {};
- app.read.local = readLocal;
-
- return app;
-
- function writeLocal(path, _contents) {
- solitude.io.fs.download(path, cotents, "text/plain");
- }
-
- function readLocal(path) {
- // stringで解決するPromiseを返したい。
- return fetch(path).then(
- (response) => {
- if (response.ok) {
- return response.text();
- } else {
- throw new Error(`HTTP error, status = ${response.status}`);
- }
- }, (cause) => {
- const error = new Error('ファイルのオープンに失敗しました。causeプロパティで原因となったオブジェクトを返します。');
- error.cause = cause;
- throw error;
- }
- );
- }
- }
}
function initializeSolitudeApps(apps) {
@@ -262,31 +227,29 @@
iframe.setAttribute("src", app.conf.src);
}
- function staticpageCallback(app, base) {
- mysolitude.read.local(app.conf.src).then((text) => {
- const parser = new DOMParser();
- const doc = parser.parseFromString(text, "text/html");
- const content = Que("div.app-body", doc).get().cloneNode(true);
- Que("div.app-container", base).get().appendChild(content);
+ async function staticpageCallback(app, base) {
+ const text = await mysolitude.io.fs.read(app.conf.src);
+ const parser = new DOMParser();
+ const doc = parser.parseFromString(text, "text/html");
+ const content = Que("div.app-body", doc).get().cloneNode(true);
+ Que("div.app-container", base).get().appendChild(content);
- //文書内のJavascriptコードを実行する。簡単な実装。
- //これだとon.loadイベントとかがキックされなくなってしまう気がする。
- const removes = [];
- Que("script", content).list().forEach(element => {
- const script = document.createElement("script")
- script.innerHTML = element.innerHTML;
- for (const attr of element.attributes) {
- script.setAttribute(attr.name, attr.value);
- }
- element.before(script)
- removes.push(element);
- });
-
- for (const script of removes) {
- script.remove();
+ //文書内のJavascriptコードを実行する。簡単な実装。
+ //これだとon.loadイベントとかがキックされなくなってしまう気がする。
+ const removes = [];
+ Que("script", content).list().forEach(element => {
+ const script = document.createElement("script")
+ script.innerHTML = element.innerHTML;
+ for (const attr of element.attributes) {
+ script.setAttribute(attr.name, attr.value);
}
-
+ element.before(script)
+ removes.push(element);
});
+
+ for (const script of removes) {
+ script.remove();
+ }
}
function batchCallback(app, base) {