From 4879f5a7cfcb38c38bcf1bb29c6bd66d7bd94e6f Mon Sep 17 00:00:00 2001
From: dakedres <ramondolive@gmail.com>
Date: Sat, 23 Dec 2023 17:03:28 -0500
Subject: [PATCH] Neutralino & new project structure

---
 .gitignore                                  |  11 +++-
 build.js                                    |  54 ++++++++++++++++++++
 index.js => editor.js                       |   3 +-
 index.html                                  |  10 ++--
 libs.js => libs/index.js                    |   0
 rollup.config.mjs => libs/rollup.config.mjs |   4 +-
 neutralino.config.json                      |  46 +++++++++++++++++
 notes.txt                                   |   4 ++
 package.json                                |   8 ++-
 platforms/browser.js                        |  22 ++++++++
 platforms/neutralino.js                     |   3 ++
 resources/icon.png                          | Bin 0 -> 16392 bytes
 yarn.lock                                   |   4 ++
 13 files changed, 159 insertions(+), 10 deletions(-)
 create mode 100644 build.js
 rename index.js => editor.js (99%)
 rename libs.js => libs/index.js (100%)
 rename rollup.config.mjs => libs/rollup.config.mjs (75%)
 create mode 100644 neutralino.config.json
 create mode 100644 notes.txt
 create mode 100644 platforms/browser.js
 create mode 100644 platforms/neutralino.js
 create mode 100644 resources/icon.png

diff --git a/.gitignore b/.gitignore
index db6695d..6df2256 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,10 @@
-.temp/
+.temp
+.tmp
 node_modules/
-dist/
+/index.html
+/bin
+/dist
+/build
+
+yarn-error.log
+neutralinojs.log
\ No newline at end of file
diff --git a/build.js b/build.js
new file mode 100644
index 0000000..1b9021e
--- /dev/null
+++ b/build.js
@@ -0,0 +1,54 @@
+// Usage: node build <platform> <[dev]/prod>
+
+import Path from 'path'
+import { copyFile } from 'fs/promises'
+
+let [ platform, environment = 'dev' ] = process.argv.slice(2)
+let projectRoot = Path.dirname(new URL(import.meta.url).pathname)
+
+const indexTemplate = scripts => `\
+<html>
+
+<head>
+
+<!-- <link rel="icon" href=".temp/editorapp/resources/icons/appIcon.png"> -->
+${scripts.map(src => "<script async src=" + JSON.stringify(src) + "></script>").join('\n')}
+
+<style id="stylesheet">
+body { display: flex; flex-direction: column; margin: 0; height: 100vh; max-height: 100vh; font-size: 14px; }
+nav { background: #f5f5f5; color: #6c6c6c; margin: 2px 5px }
+nav input { all: unset; text-decoration: underline; font-family: sans-serif; }
+.cm-editor { flex-grow: 1; outline: 1px solid #ddd; overflow-y: auto; }
+</style>
+
+</head>
+
+</html>
+`
+
+let out
+
+switch(environment) {
+  case 'dev':
+    out = indexTemplate([
+      Path.join('platforms', platform + '.js'),
+      'editor.js',
+      'build/libs.js'
+    ])
+    break
+
+  case 'prod':
+    await copyFile(
+      Path.join(projectRoot, 'platforms', platform + '.js'),
+      Path.join(projectRoot, 'build', 'platform.js')
+    )
+
+    out = indexTemplate([
+      'platform.js',
+      'editor.js',
+      'libs.js'
+    ])
+    break
+}
+
+process.stdout.write(out)
\ No newline at end of file
diff --git a/index.js b/editor.js
similarity index 99%
rename from index.js
rename to editor.js
index 046db47..32ac818 100644
--- a/index.js
+++ b/editor.js
@@ -147,7 +147,7 @@ function App() {
         }
       },
       {
-        key: 'Ctrl-n',
+        key: 'Ctrl-r',
         run(state, event) {
           event.preventDefault()
           let mainSelection = self.editor.state.selection.main
@@ -269,6 +269,7 @@ function ChildWindow(index) {
 
   this.index = app.views.length
   this.window = window.open('about:blank', '_blank')
+  console.log(this)
   this.window.document.head.appendChild(document.getElementById('stylesheet').cloneNode(true))
   this.editor = new $.EditorView({
     state,
diff --git a/index.html b/index.html
index 6701d5e..5802b6f 100644
--- a/index.html
+++ b/index.html
@@ -2,11 +2,13 @@
 
 <head>
 
-<script async src="./dist/libs.js"></script>
-<script async src="./index.js"></script>
+<!-- <link rel="icon" href=".temp/editorapp/resources/icons/appIcon.png"> -->
+<script async src="platforms/neutralino.js"></script>
+<script async src="editor.js"></script>
+<script async src="build/libs.js"></script>
 
 <style id="stylesheet">
-body { display: flex; flex-direction: column; margin: 0; height: 100vh; max-height: 100vh; }
+body { display: flex; flex-direction: column; margin: 0; height: 100vh; max-height: 100vh; font-size: 14px; }
 nav { background: #f5f5f5; color: #6c6c6c; margin: 2px 5px }
 nav input { all: unset; text-decoration: underline; font-family: sans-serif; }
 .cm-editor { flex-grow: 1; outline: 1px solid #ddd; overflow-y: auto; }
@@ -14,4 +16,4 @@ nav input { all: unset; text-decoration: underline; font-family: sans-serif; }
 
 </head>
 
-</html>
\ No newline at end of file
+</html>
diff --git a/libs.js b/libs/index.js
similarity index 100%
rename from libs.js
rename to libs/index.js
diff --git a/rollup.config.mjs b/libs/rollup.config.mjs
similarity index 75%
rename from rollup.config.mjs
rename to libs/rollup.config.mjs
index 55781d4..12588b2 100644
--- a/rollup.config.mjs
+++ b/libs/rollup.config.mjs
@@ -1,9 +1,9 @@
 import nodeResolve from "@rollup/plugin-node-resolve";
 
 export default {
-  input: "./libs.js",
+  input: "./index.js",
   output: {
-    file: "./dist/libs.js",
+    file: "../build/libs.js",
     name: '$',
     format: "iife"
   },
diff --git a/neutralino.config.json b/neutralino.config.json
new file mode 100644
index 0000000..2473b05
--- /dev/null
+++ b/neutralino.config.json
@@ -0,0 +1,46 @@
+{
+  "applicationId": "net.sys42.dakedres.editor",
+  "version": "1.0.0",
+  "defaultMode": "window",
+  "port": 0,
+  "documentRoot": "/",
+  "url": "/index.html",
+  "enableServer": true,
+  "enableNativeAPI": true,
+  "tokenSecurity": "one-time",
+  "logging": {
+    "enabled": true,
+    "writeToLogFile": true
+  },
+  "nativeAllowList": [
+    "app.*",
+    "os.*",
+    "debug.log"
+  ],
+  "globalVariables": {},
+  "modes": {
+    "window": {
+      "title": "waw",
+      "width": 800,
+      "height": 500,
+      "minWidth": 400,
+      "minHeight": 200,
+      "fullScreen": false,
+      "alwaysOnTop": false,
+      "icon": "/resources/icon.png",
+      "enableInspector": false,
+      "borderless": false,
+      "maximize": false,
+      "hidden": false,
+      "resizable": true,
+      "exitProcessOnClose": true
+    }
+  },
+  "cli": {
+    "binaryName": "waw",
+    "resourcesPath": "/build/",
+    "clientLibrary": "/build/neutralino.js",
+    "binaryVersion": "4.14.1",
+    "clientVersion": "3.12.0"
+  }
+}
\ No newline at end of file
diff --git a/notes.txt b/notes.txt
new file mode 100644
index 0000000..cc07a67
--- /dev/null
+++ b/notes.txt
@@ -0,0 +1,4 @@
+# Deps
+
+Needed to
+```sudo apt install libsoup-2.4-dev libwebkit2gtk-4.0-dev libjavascriptcoregtk-4.0-dev```
\ No newline at end of file
diff --git a/package.json b/package.json
index 98638e7..379434c 100644
--- a/package.json
+++ b/package.json
@@ -4,9 +4,15 @@
   "main": "index.js",
   "license": "MIT",
   "dependencies": {
+    "@neutralinojs/lib": "neutralinojs/neutralino.js",
     "@neutralinojs/neu": "^10.1.0",
     "@rollup/plugin-node-resolve": "^15.2.3",
     "codemirror": "^6.0.1",
     "rollup": "^4.9.1"
-  }
+  },
+  "scripts": {
+    "dev": "node build neutralino > index.html && neu run",
+    "build": "node build neutralino prod > index.html && neu build"
+  },
+  "type": "module"
 }
diff --git a/platforms/browser.js b/platforms/browser.js
new file mode 100644
index 0000000..205efb4
--- /dev/null
+++ b/platforms/browser.js
@@ -0,0 +1,22 @@
+function Platform() {
+  this.save = async (path, data) => {
+    localStorage.setItem(path, data)
+  }
+
+  this.open = (path) => {
+    return localStorage.getItem(path)
+  }
+
+  this.readdir = (path) => {
+    return Object.keys(localStorage)
+      .filter(key => key.startsWith(path))
+  }
+
+  this.createWindow = url => {
+    return window.open(url ?? 'about:blank', '_blank')
+  }
+
+  this.createInstance = url => {
+    return window.open(url ?? this.location)
+  }
+}
\ No newline at end of file
diff --git a/platforms/neutralino.js b/platforms/neutralino.js
new file mode 100644
index 0000000..60004c9
--- /dev/null
+++ b/platforms/neutralino.js
@@ -0,0 +1,3 @@
+function Platform() {
+  
+}
\ No newline at end of file
diff --git a/resources/icon.png b/resources/icon.png
new file mode 100644
index 0000000000000000000000000000000000000000..d708bc3cc0f64c18aac9ff49d28476c02c9dca0c
GIT binary patch
literal 16392
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

literal 0
HcmV?d00001

diff --git a/yarn.lock b/yarn.lock
index a0a9a43..ed7967d 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -85,6 +85,10 @@
   dependencies:
     "@lezer/common" "^1.0.0"
 
+"@neutralinojs/lib@neutralinojs/neutralino.js":
+  version "3.13.0"
+  resolved "https://codeload.github.com/neutralinojs/neutralino.js/tar.gz/080900b7af3d79c6e387d213b437bdb62870f109"
+
 "@neutralinojs/neu@^10.1.0":
   version "10.1.0"
   resolved "https://registry.yarnpkg.com/@neutralinojs/neu/-/neu-10.1.0.tgz#7c0fc2eaee14583651203309c9f653811df15499"