diff --git a/src/js/src/js/solitude.js b/src/js/src/js/solitude.js index d16e4f2..d25ad5b 100644 --- a/src/js/src/js/solitude.js +++ b/src/js/src/js/solitude.js @@ -1,122 +1,121 @@ +function graftSolitude(global) { + var solitude; + (function dismantleGlobal() { + global.solitude = solitude = global.solitude || { + "variant": "web", + get global() { return global; }, + get postMessage() { return global.postMessage }, + get createURL() { return global.URL.createObjectURL }, + get main() { return global.parent }, + get origin() { return global.parent.location.origin }, + get myOrigin() { return global.location.origin }, + get console() { return global.parent.console }, + get message() { return message }, + get persistence() { return persistenceFunc }, + }; -(function graftSolitude(global) { - var solitude; - (function dismantleGlobal() { - global.solitude = solitude = global.solitude || { - "variant": "web", - get global() { return global; }, - get postMessage() {return global.postMessage}, - get createURL() {return global.URL.createObjectURL}, - get main() { return global.parent}, - get origin() { return global.parent.location.origin}, - get myOrigin() { return global.location.origin}, - get console() {return global.parent.console}, - get message() {return message}, - get persistence() {return persistenceFunc}, - }; - - const message = { - get post() {return solitude.postMessage }, - get addListener() {return addMessageListener}, - get removeListener() { return } - }; + const message = { + get post() { return solitude.postMessage }, + get addListener() { return addMessageListener }, + get removeListener() { return } + }; - function addMessageListener(listener, bool) { - bool = bool || false; - global.addEventListener("message",listener,bool); - } - - function removeMessageListener(listener, option, useCapture) { - global.removeEventListener("message", listener) - } - })(); - io(solitude); - return solitude; - - //declaretions - function persistenceFunc() { - const strategies = { - get local() {return writeLocal}, - get download() { return download}, - get console() { return solitude.console} - }; - return strategies; + function addMessageListener(listener, bool) { + bool = bool || false; + global.addEventListener("message", listener, bool); } - //file output strategies - function writeLocal(path, content) { - const message = { - "path": path, - "content": content, - } - solitude.message.post(JSON.stringify(message), solitude.origin) + function removeMessageListener(listener, option, useCapture) { + global.removeEventListener("message", listener) + } + })(); + io(solitude); + return solitude; + + //declaretions + function persistenceFunc() { + const strategies = { + get local() { return writeLocal }, + get download() { return download }, + get console() { return solitude.console } + }; + return strategies; + } + + //file output strategies + function writeLocal(path, content) { + const message = { + "path": path, + "content": content, + } + 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; + } + 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 }); + const link = document.createElement('a'); + + link.href = solitude.createURL(blob); + link.download = filename; + link.click() + } + + function log(log) { + + } + + function io(solitude) { + //std can customize + const initialStd = { + get out() { return solitude.global.console.log }, + get in() { return noop }, + } + var std = initialStd; + + solitude.io = { + get std() { return std; }, + set std(value) { std = value; }, + get console() { return solitude.console; }, + get fs() { return fs } } - 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; - } - solitude.removeMessageListener(receiver); - response(message.success, message.content); - } - solitude.message.addListener(receiver); - solitude.message.post(JSON.stringify(request), solitude.origin); + const fs = { + get write() { return writeLocal }, + get download() { return download }, + get read() { return readLocal }, + get out() { return this.write }, + get in() { return this.read }, } + } - 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 }); - const link = document.createElement('a'); - - link.href = solitude.createURL(blob); - link.download = filename; - link.click() - } - - function log(log) { - - } - - function io(solitude) { - //std can customize - const initialStd = { - get out() {return solitude.global.console.log }, - get in() {return noop}, - } - var std = initialStd; - - solitude.io = { - get std() { return std; }, - set std(value) { std = value; }, - get console() { return solitude.console; }, - get fs() {return fs} - } - - const fs = { - get write() { return writeLocal}, - get download() {return download}, - get read() { return readLocal}, - get out() { return this.write}, - get in() { return this.read}, - } - } - - function noop() { - //do nothing - } -}) (window); + function noop() { + //do nothing + } +}