diff --git a/src/js/.gitignore b/src/js/.gitignore index 61e3567..15d5b9f 100644 --- a/src/js/.gitignore +++ b/src/js/.gitignore @@ -8,6 +8,9 @@ #symlink etc/public/* +#local environment +local/* + # misc .DS_Store diff --git a/src/js/src/app.html b/src/js/src/app.html index 86d9f7d..0fd2a7b 100644 --- a/src/js/src/app.html +++ b/src/js/src/app.html @@ -20,15 +20,19 @@ +
-
+

Hello Solitude World

This is first Solitude

+
+ +

Hello Solitude World 2

@@ -46,6 +50,7 @@ selectTab(index); }); }) + append(location.href); const leftMenu = query("#left-menu")[0]; const menuToggle = query("#menu-toggle")[0] @@ -57,6 +62,29 @@ }) }) + window.addEventListener("message", (event) => { + const appFrame = query("#main-pane .app-container iframe")[0] + expectedOrigin = appFrame.contentWindow.location.origin + if(event.origin != expectedOrigin) { + append("failed!") + append("eventorigin:") + append(event.origin) + append("expectedOrigin:"); + append(expectedOrigin); + return; + } + append("event.data : ") + append(event.data) + try { + const data = JSON.parse(event.data); + solitude.write.local(data.path, data.content); + } catch (error) { + append(error); + } + append("success !") + }); + + // 以下、宣言 function toggleMenuItem(element) { if(element.classList.contains("expanded")) { element.classList.add("shrinked"); @@ -85,6 +113,12 @@ function query(selector) { return document.querySelectorAll(selector) } + + function append(kontent) { + let logs = query("#logarea")[0].value + logs += kontent + "\n"; + query("#logarea")[0].value = logs; + } } diff --git a/src/js/src/css/index.css b/src/js/src/css/index.css index 58eafdb..b43b608 100644 --- a/src/js/src/css/index.css +++ b/src/js/src/css/index.css @@ -152,3 +152,15 @@ background-color: #CCCCCC; } +#main-pane #petari { + width:100%; + height:100%; + overflow: auto; +} + +#main-pane div.app-container { + border: 0.1em solid #516C8D; + height: 640px; + visibility: initial; + resize: both; +} diff --git a/src/js/src/index.js b/src/js/src/index.js index 9a8fa84..ce206f4 100644 --- a/src/js/src/index.js +++ b/src/js/src/index.js @@ -1,21 +1,34 @@ const { app, BrowserWindow, ipcMain} = require('electron'); -/* const path = require('path'); const fs = require('fs'); -*/ + +ipcMain.on("write.local", (ipcEvent, savePath, content ) => { + console.log("listen wirte.local message"); + let dest = path.join(__dirname, "..", "var","local", "petari", "app.html"); + fs.writeFile(dest, content , (err) => { + if(err) { + console.log("dest: " + dest); + console.log("content: " + content); + console.log(err); + } + }); +}); function createWindow() { + const preloadPath = path.join(__dirname, 'preload.js') + console.log(preloadPath); + let win = new BrowserWindow({ width:640, height: 480, - webPreference: { - nodeIntegration:true + webPreferences: { + enableRemoteModule: true, + preload: preloadPath, } }); win.loadFile('app.html'); } -ipcMain.on("write.local", (ipcEvent, savePath, content ) => { -}); + app.whenReady().then(createWindow) \ No newline at end of file diff --git a/src/js/src/js/index.js b/src/js/src/js/index.js deleted file mode 100644 index e69de29..0000000 --- a/src/js/src/js/index.js +++ /dev/null diff --git a/src/js/src/js/persistent.js b/src/js/src/js/persistent.js new file mode 100644 index 0000000..be84343 --- /dev/null +++ b/src/js/src/js/persistent.js @@ -0,0 +1,16 @@ + +window.persistence = persistenceFunc; +function persistenceFunc() { + const strategies = {}; + strategies.local = writeLocal; + return strategies; + + // declearation + function writeLocal(path, content) { + const message = { + "path": path, + "content": content, + } + window.parent.postMessage(JSON.stringify(message), window.parent.location.origin) + } +} \ No newline at end of file diff --git a/src/js/src/petari/app.html b/src/js/src/petari/app.html new file mode 100644 index 0000000..d4b4dff --- /dev/null +++ b/src/js/src/petari/app.html @@ -0,0 +1,71 @@ + + + + keywords + + + + +

キーワード一覧

+

メニュー

+
+
+
+ +
+
+ + + + +
+
+
+

お気に入り

+
+ +
+

ToDo

+
+
    +
+
+

URL

+
+ +
+

思い付き

+
+
    +
  • lattice based access control
  • +
+
+ + + + + + + + + + \ No newline at end of file diff --git a/src/js/src/petari/css/main.css b/src/js/src/petari/css/main.css new file mode 100644 index 0000000..03f4657 --- /dev/null +++ b/src/js/src/petari/css/main.css @@ -0,0 +1,178 @@ + html { + width: 210mm; + font-size: 16px; + } + + body { + margin: 1em; + } + + h6 { + background-color: #3080ff; + font-size: 1.0em; + } + + h5 { + background-color: #3080ff; + color: #ffffff; + font-size: 1.25em; + } + + h4 { + background-color: #2766cc; + color: #ffffff; + font-size: 1.50em; + } + + h3 { + background-color: #2766cc; + color: #ffffff; + font-size: 1.75em; + } + + h2 { + background-color: #1e50a2; + color: #ffffff; + font-size: 2.0em; + } + + h1 { + background-color: #1e50a2; + color: #ffffff; + font-size: 2.25em; + } + + h1, + h2, + h3, + h4, + h5, + h6 { + padding-left: 0.3em; + } + + pre { + margin-left: 1em; + border-left-width: 0.25em; + padding-left: 0.5em; + border-left-style: solid; + border-left-color: #003fa3; + } + + blockquote { + margin-left: 1em; + border-left-width: 0.25em; + padding-left: 0.5em; + border-left-style: solid; + border-left-color: #627ba3 + } + + th { + background-color: #e5f3fd; + color: #000000 + } + + #TOC { + border-top-width: 0.5em; + padding-top: 1em; + border-top-style: solid; + border-top-color: #3080ff; + } + + tr.odd { + background-color: #dddddd; + } + + a:link { + color: #1e50a2 + } + + a:hover { + color: #3080ff + } + + a:visited { + color: #3080ff + } + + a:active { + color: #1e50a2 + } + + div.tag_list li,input,select{ + display: inline-block; + line-height: 2.0em; + padding: 0em; + margin-left: 0.25em; + margin-right:0.25em; + margin-top: 0.15em; + margin-bottom: 0.15em; + color: #3080ff; + border-style: solid; + border-color: #3080ff; + border-radius: 0.25em; + border-width: 0.15em; + vertical-align: middle; + } + + div.tag_list li.removed { + display: none; + } + + + #add,#save, input[type="text"], select{ + padding: 0.5em 1em 0.5em 1em; + } + + div.tag_list ul { + border-collapse: separete; + border-spacing: 0.5em; + border-top-style: solid; + border-bottom-style: solid; + border-color: #3080ff; + text-align: justify; + } + + img { + max-width: 95%; + height: auto; + } + + li a, + li span.label { + padding: 0.3em; + } + + h1~p, + h2~p, + h3~p, + h4~p, + h5~p, + h6~p { + margin-left: 1em; + } + + +li span.delete { + padding-left: 1em; +} + +li{ + position: relative; +} + +li>span.remove { + vertical-align: top; + padding-top: 0em; + content: ""; + border-left: #fff; + border-top-color: #fff; + border-right: #3080ff; + border-bottom-color: #3080ff; +/* border-color: #853e04 #853e04 #fff #fff;*/ + border-style: solid; + border-width: 0em 0em 1em 0.5em; + position: absolute; + top: -0.15em; + left: -0.15em; +} diff --git a/src/js/src/petari/js/main.js b/src/js/src/petari/js/main.js new file mode 100644 index 0000000..8245b04 --- /dev/null +++ b/src/js/src/petari/js/main.js @@ -0,0 +1,94 @@ +function check() { + console.log("check"); +} + +function main() { + var templates = {}; + templates.normal = document.querySelector("#tag_templates").content.querySelector("li"); + templates.linked = document.querySelector("#link_tag_templates").content.querySelector("li"); + document.querySelectorAll("span.remove").forEach(function (current) { + current.onclick = remove; + }); + + + + document.querySelector("#add").onclick = function () { + var label = document.querySelector('input[name="keyword"').value; + var url = document.querySelector('input[name="url"]').value; + + var index = document.command_menu.category.selectedIndex; + var category = document.command_menu.category.options[index].value; + + add(category, label, url); + } + + document.querySelector("#save").onclick = save; + + function add(category, label, url) { + url = url || ""; + var newItem; + console.log(url.length); + + if (url.length > 0) { + newItem = templates.linked.cloneNode(true); + newItem.querySelector("a").setAttribute("href", url) + newItem.querySelector("a span.label").innerText = label; + } else { + newItem = templates.normal.cloneNode(true); + newItem.querySelector("span.label").innerText = label; + } + newItem.querySelector("span.remove").onclick = remove; + + var list = document.querySelector("#" + category + " ul"); + + //最初の子要素として追加 + list.insertBefore(newItem, list.firstChild); + + } + + function save() { + var content = "\r\n"; + content += document.querySelector("html").outerHTML; + + /* const url = "" + * putToWebDav(url, content) + download("keywords.html", content) + */ + putToLocal(null,content); + } + + function remove() { + //check(); + this.parentNode.classList.add("removed"); + //this.parentNode.remove(); + } + + + function putToLocal(path, content) { + path = path || location.href.replace('/', ''); + const writer = persistence(); + writer.local(path,content) + } + + function putToWebDav(url, content) { + + fetch(url, { + method: "PUT", + cache: "no-cache", + body: body + }).then(function (response) { + document.querySelector("#add_result").innerText = "成功 " + (new Date()).toString(); + }).catch(function (response) { + document.querySelector("#add_result").innerText = "失敗 " + (new Date()).toString(); + }); + } + + function download(filename, content) { + const blob = new Blob([content], { "type": "text/plain" }); + const link = document.createElement('a'); + + link.href = window.URL.createObjectURL(blob); + link.download = filename; + link.click() + } +} \ No newline at end of file diff --git a/src/js/src/preload.js b/src/js/src/preload.js new file mode 100644 index 0000000..e5946cf --- /dev/null +++ b/src/js/src/preload.js @@ -0,0 +1,10 @@ +const {contextBridge, ipcRenderer} = require('electron'); +const { remote } = require('electron'); +console.log("preload"); +window.remote = remote; + +contextBridge.exposeInMainWorld('solitude', { + "write": { + "local" : (path,contents) => ipcRenderer.send("write.local", path,contents) + } +})