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) {