From d3f2dd4aadee908792c0773f830cc656ae36e806 Mon Sep 17 00:00:00 2001 From: Yvo Brevoort Date: Fri, 22 Nov 2024 14:33:10 +0100 Subject: [PATCH 01/38] add content-type for svg content --- main.js | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/main.js b/main.js index 2df3347..ce9ad61 100755 --- a/main.js +++ b/main.js @@ -274,11 +274,17 @@ app.whenReady().then(() => { let target = dataDir + componentDirectory + "/" + componentName; if(fs.existsSync(target)){ const filestuff = fs.readFileSync(target) + let headers = {}; + if (componentName.match(/\.svg$/)) { + headers = { + 'content-type' : 'image/svg+xml' + } + } return new Response(filestuff, { - // headers: { 'content-type': 'text/html' } + headers: headers }) } else { - return new Response('"Not found"', { status: 404}) + return new Response('"Not found"', { status: 404 }) } break } From 1efc8076850c02a610fe7a591f925582fec2c61e Mon Sep 17 00:00:00 2001 From: Yvo Brevoort Date: Wed, 4 Dec 2024 11:26:41 +0100 Subject: [PATCH 02/38] fix paths, resolve assets --- main.js | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/main.js b/main.js index 2df3347..afa1e97 100755 --- a/main.js +++ b/main.js @@ -225,6 +225,7 @@ app.whenReady().then(() => { let pathicles = componentPath.split('\/'); let componentName = pathicles.pop(); + componentName = decodeURIComponent(componentName); if (pathicles[0] == ''){ pathicles.shift() } @@ -272,7 +273,10 @@ app.whenReady().then(() => { case 'GET': default: let target = dataDir + componentDirectory + "/" + componentName; - if(fs.existsSync(target)){ + if(!fs.existsSync(target)) { + target = __dirname + '/simplycode/' + componentDirectory + '\/' + componentName; + } + if (fs.existsSync(target)) { const filestuff = fs.readFileSync(target) return new Response(filestuff, { // headers: { 'content-type': 'text/html' } @@ -324,6 +328,7 @@ app.whenReady().then(() => { let pathicles = componentPath.split('\/'); // also splits on an empty string let componentName = pathicles.pop(); + componentName = decodeURIComponent(componentName); if (pathicles[0] == ''){ pathicles.shift() @@ -380,6 +385,7 @@ app.whenReady().then(() => { if ( (componentPath.indexOf("/js/simply") === 0) || (componentPath.indexOf("/simply") === 0) || + (componentPath.indexOf("/assets") === 0) || (componentPath.indexOf("/hope") === 0) ) { const filestuff = fs.readFileSync(__dirname + '/simplycode/' + componentDirectory + '\/' + componentName) From 952d509cf38f16bbe2072e7dda1bc7a15f8043f9 Mon Sep 17 00:00:00 2001 From: Yvo Brevoort Date: Wed, 4 Dec 2024 16:03:47 +0100 Subject: [PATCH 03/38] update simplycode, rework post install script --- package-lock.json | 326 ++-- package.json | 2 + scripts/post-install.sh | 55 +- simplycode/assets/fonts/CoconRegularFont.woff | Bin 0 -> 16480 bytes simplycode/assets/img/feather-sprite.svg | 1 + simplycode/index.html | 1476 +++++++++++++---- 6 files changed, 1425 insertions(+), 435 deletions(-) create mode 100644 simplycode/assets/fonts/CoconRegularFont.woff create mode 100644 simplycode/assets/img/feather-sprite.svg diff --git a/package-lock.json b/package-lock.json index 6b6f99e..2eb5737 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,8 +10,10 @@ "hasInstallScript": true, "license": "MIT", "dependencies": { + "codemirror": "5.65.2", "electron-squirrel-startup": "^1.0.1", - "simplycode": "github:simplyedit/simplycode" + "simplycode": "github:simplyedit/simplycode", + "simplyedit": "github:simplyedit/simplyedit" }, "devDependencies": { "@electron-forge/cli": "^7.4.0", @@ -34,9 +36,9 @@ } }, "node_modules/@electron-forge/cli": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@electron-forge/cli/-/cli-7.5.0.tgz", - "integrity": "sha512-dlxr4ac5ONWs1Wmbgh18rclxcp9Fe5SzCF9ookp08Z1w4YP9FbQd1SHs0oLKWLF6qH9qdX8H2EWB9Nt6tOzC5g==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@electron-forge/cli/-/cli-7.6.0.tgz", + "integrity": "sha512-5G7rBbvTb4HJDiCuhncBzNaRj1e1dEmrk6jExpziqv4Y8p9b+nxfdOjsjWu0hvAl4k2V65Rnm1uEkAA7MmlZOQ==", "dev": true, "funding": [ { @@ -49,8 +51,8 @@ } ], "dependencies": { - "@electron-forge/core": "7.5.0", - "@electron-forge/shared-types": "7.5.0", + "@electron-forge/core": "7.6.0", + "@electron-forge/shared-types": "7.6.0", "@electron/get": "^3.0.0", "chalk": "^4.0.0", "commander": "^4.1.1", @@ -69,9 +71,9 @@ } }, "node_modules/@electron-forge/core": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@electron-forge/core/-/core-7.5.0.tgz", - "integrity": "sha512-Hg/fXabRZtMbyrtnpzpb3i49qNai+juCg+6bgyjYfWgJGr5VGH947lWd7skujH5qJ+Y7FgvANDGnenZuQwxZNw==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@electron-forge/core/-/core-7.6.0.tgz", + "integrity": "sha512-DgkjpoK+SPExNTLZL1v81zl0RswQWvMXkMnMqZYf0/S/KHKTXWsoE9KTzr8fDGpiG3nUJXWMqHyny9zLoUdKXQ==", "dev": true, "funding": [ { @@ -84,20 +86,20 @@ } ], "dependencies": { - "@electron-forge/core-utils": "7.5.0", - "@electron-forge/maker-base": "7.5.0", - "@electron-forge/plugin-base": "7.5.0", - "@electron-forge/publisher-base": "7.5.0", - "@electron-forge/shared-types": "7.5.0", - "@electron-forge/template-base": "7.5.0", - "@electron-forge/template-vite": "7.5.0", - "@electron-forge/template-vite-typescript": "7.5.0", - "@electron-forge/template-webpack": "7.5.0", - "@electron-forge/template-webpack-typescript": "7.5.0", - "@electron-forge/tracer": "7.5.0", + "@electron-forge/core-utils": "7.6.0", + "@electron-forge/maker-base": "7.6.0", + "@electron-forge/plugin-base": "7.6.0", + "@electron-forge/publisher-base": "7.6.0", + "@electron-forge/shared-types": "7.6.0", + "@electron-forge/template-base": "7.6.0", + "@electron-forge/template-vite": "7.6.0", + "@electron-forge/template-vite-typescript": "7.6.0", + "@electron-forge/template-webpack": "7.6.0", + "@electron-forge/template-webpack-typescript": "7.6.0", + "@electron-forge/tracer": "7.6.0", "@electron/get": "^3.0.0", "@electron/packager": "^18.3.5", - "@electron/rebuild": "^3.2.10", + "@electron/rebuild": "^3.7.0", "@malept/cross-spawn-promise": "^2.0.0", "chalk": "^4.0.0", "debug": "^4.3.1", @@ -125,13 +127,13 @@ } }, "node_modules/@electron-forge/core-utils": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@electron-forge/core-utils/-/core-utils-7.5.0.tgz", - "integrity": "sha512-PtyQT6qeOEJsi4ltoB7Jb6YUUCwK3gDt5gVyAF2aJ8eZi9rJ0hasHc5vjcmBaz9FwDMjYZrBD8oRBhNgbhEakQ==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@electron-forge/core-utils/-/core-utils-7.6.0.tgz", + "integrity": "sha512-7XVKHPI87p558kVen280yB1UC2cVGHvrMfnPFv4zm3TQHEVaKWKW+5y+UZsKUnGAukNlahHWuHF/1S8dRCJNEg==", "dev": true, "dependencies": { - "@electron-forge/shared-types": "7.5.0", - "@electron/rebuild": "^3.2.10", + "@electron-forge/shared-types": "7.6.0", + "@electron/rebuild": "^3.7.0", "@malept/cross-spawn-promise": "^2.0.0", "chalk": "^4.0.0", "debug": "^4.3.1", @@ -146,12 +148,12 @@ } }, "node_modules/@electron-forge/maker-base": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@electron-forge/maker-base/-/maker-base-7.5.0.tgz", - "integrity": "sha512-+jluKW2UPxaI1+qQQ8fqaUVVbZohRjOSF0Iti7STRFbgJKJitzPB24Cjji9qJCKIx5klMeEiwp0YPAE/d9Xt8g==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@electron-forge/maker-base/-/maker-base-7.6.0.tgz", + "integrity": "sha512-GrVYhiA/g0NXrI13LcXrT+JKLlq8kkYyO6w0jQORqDFeRSLRoLhrru5w0msg0wINGugBe+/NwyAyFZ2KaQ6o4g==", "devOptional": true, "dependencies": { - "@electron-forge/shared-types": "7.5.0", + "@electron-forge/shared-types": "7.6.0", "fs-extra": "^10.0.0", "which": "^2.0.2" }, @@ -160,13 +162,13 @@ } }, "node_modules/@electron-forge/maker-deb": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@electron-forge/maker-deb/-/maker-deb-7.5.0.tgz", - "integrity": "sha512-rMXYJzu2LuyDQ5TX4VzQ2OSWDFC7Y1nJpBoyJvXfkA5fF5NNScOFYPv1YzEYAXMcG5hCOVLorsG9HDTEC8uh9g==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@electron-forge/maker-deb/-/maker-deb-7.6.0.tgz", + "integrity": "sha512-vTg/wJwfdWM4Hm1NlU0g30ODn6z3NBukQdWOS2xXJQ/Y0KnQRVN7ThSlxxzWJy0tI6hGAlpziJjpXozTfhM/Nw==", "dev": true, "dependencies": { - "@electron-forge/maker-base": "7.5.0", - "@electron-forge/shared-types": "7.5.0" + "@electron-forge/maker-base": "7.6.0", + "@electron-forge/shared-types": "7.6.0" }, "engines": { "node": ">= 16.4.0" @@ -176,13 +178,13 @@ } }, "node_modules/@electron-forge/maker-dmg": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@electron-forge/maker-dmg/-/maker-dmg-7.5.0.tgz", - "integrity": "sha512-OcySukBT6FQJRbb0CKXnre4e0JinJfDGteCOLypB8UsN5Wg/4lIDB0hMhBmWGPJkZXKUDGkB1lhkdcLKbzT50Q==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@electron-forge/maker-dmg/-/maker-dmg-7.6.0.tgz", + "integrity": "sha512-Wa4XG9r4RldF5uy7vef5/BR8o/P+BmltZIbZulnFwhOYEu4Quj+SDF1bet7y3tM2i1am/sEocFcBHXC7CRk8xg==", "optional": true, "dependencies": { - "@electron-forge/maker-base": "7.5.0", - "@electron-forge/shared-types": "7.5.0", + "@electron-forge/maker-base": "7.6.0", + "@electron-forge/shared-types": "7.6.0", "fs-extra": "^10.0.0" }, "engines": { @@ -213,13 +215,13 @@ } }, "node_modules/@electron-forge/maker-rpm": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@electron-forge/maker-rpm/-/maker-rpm-7.5.0.tgz", - "integrity": "sha512-NzrtEqa61D++GoaURpicj9oxwOA/z0wcZaeipsrzUEBXE53UAo47tdIZjh396MhC0z9Mr6bxgDwpPUZF9QgfDA==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@electron-forge/maker-rpm/-/maker-rpm-7.6.0.tgz", + "integrity": "sha512-pZGpZ+Oum7uyykwi73e+s/LnWDsG+B0t1iU9jCaZObIR0lcISK5VemeIlgm1A4HlDHODdBZ5AEJfIJ5p9t7w/w==", "dev": true, "dependencies": { - "@electron-forge/maker-base": "7.5.0", - "@electron-forge/shared-types": "7.5.0" + "@electron-forge/maker-base": "7.6.0", + "@electron-forge/shared-types": "7.6.0" }, "engines": { "node": ">= 16.4.0" @@ -229,13 +231,13 @@ } }, "node_modules/@electron-forge/maker-squirrel": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@electron-forge/maker-squirrel/-/maker-squirrel-7.5.0.tgz", - "integrity": "sha512-fz3vbp1BnbQWeZVVM3lKOGhrCVKLjAXKDTntBL2+8Rz02a63eozGjOtC5KZYXax6nM4TF6LvwjagY/qTs5jFag==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@electron-forge/maker-squirrel/-/maker-squirrel-7.6.0.tgz", + "integrity": "sha512-8tqsJBRAe37YZSKv1fPc1tijQljkSlUQCaeun37ZOM/viurSeydt5nu2M+UDmJHAfD/PRZMjnYvCCWH+08wGVg==", "dev": true, "dependencies": { - "@electron-forge/maker-base": "7.5.0", - "@electron-forge/shared-types": "7.5.0", + "@electron-forge/maker-base": "7.6.0", + "@electron-forge/shared-types": "7.6.0", "fs-extra": "^10.0.0" }, "engines": { @@ -246,13 +248,13 @@ } }, "node_modules/@electron-forge/maker-zip": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@electron-forge/maker-zip/-/maker-zip-7.5.0.tgz", - "integrity": "sha512-gIO3bEbubOJqWV6kd0b9nBwTrFfFQv/K8PAqg6e0uSZiy7QuSCFZVAZse02gO3AzxVDSVjjTQ4nmXBXC4Glh1A==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@electron-forge/maker-zip/-/maker-zip-7.6.0.tgz", + "integrity": "sha512-sDPQoEs6CnkxsydvnfZByBGf+RREky2xqiusWCvaPnUoLRpq96SFaBb1BRCS6tQKQHKkaEUXEC5pBdrYGLHPVg==", "dev": true, "dependencies": { - "@electron-forge/maker-base": "7.5.0", - "@electron-forge/shared-types": "7.5.0", + "@electron-forge/maker-base": "7.6.0", + "@electron-forge/shared-types": "7.6.0", "cross-zip": "^4.0.0", "fs-extra": "^10.0.0", "got": "^11.8.5" @@ -262,38 +264,38 @@ } }, "node_modules/@electron-forge/plugin-auto-unpack-natives": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@electron-forge/plugin-auto-unpack-natives/-/plugin-auto-unpack-natives-7.5.0.tgz", - "integrity": "sha512-cT/yTAr5Zd81HANi5bdyCoSG9nzIrB1WIEkFA7sWuyATiOjk9SGKn1aM543XWJ/TFkTg0800JpyocsSC9wOzEg==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@electron-forge/plugin-auto-unpack-natives/-/plugin-auto-unpack-natives-7.6.0.tgz", + "integrity": "sha512-rSWRLJinRIxtlkLke0uJzOLksRnXszu3hZrzlgOWChDuMFM298yb6gxWAjYh94VoNxXrUHl9Cd4ia/5+wgPwwg==", "dev": true, "dependencies": { - "@electron-forge/plugin-base": "7.5.0", - "@electron-forge/shared-types": "7.5.0" + "@electron-forge/plugin-base": "7.6.0", + "@electron-forge/shared-types": "7.6.0" }, "engines": { "node": ">= 16.4.0" } }, "node_modules/@electron-forge/plugin-base": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@electron-forge/plugin-base/-/plugin-base-7.5.0.tgz", - "integrity": "sha512-44AbXSb5lDY8uHIo0mJ91atOSWgxv3iuECk07/gDBiuMPX62dwHnLteEjQF4GBXJZTpnV7SxhD+d2AUBQmoojw==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@electron-forge/plugin-base/-/plugin-base-7.6.0.tgz", + "integrity": "sha512-9llu4algWZJAJFVVZtd/Xa71c0QVxRmoMrpHX2SB+XJ+ZlFVdXrlnhn2hc/CnM0by9cBElyAL3cx3533OKS7lA==", "dev": true, "dependencies": { - "@electron-forge/shared-types": "7.5.0" + "@electron-forge/shared-types": "7.6.0" }, "engines": { "node": ">= 16.4.0" } }, "node_modules/@electron-forge/plugin-fuses": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@electron-forge/plugin-fuses/-/plugin-fuses-7.5.0.tgz", - "integrity": "sha512-nF5C4TN/rzN95F5HwAkyYTgy44Mu3EAys8O5zShzg7rye8d5BTnx2peAGtROZcChSaHRql09EeoOswNtuJNMcw==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@electron-forge/plugin-fuses/-/plugin-fuses-7.6.0.tgz", + "integrity": "sha512-3M6LN0B/y9cZvjpAX7zKVGTNximOEIlYvh2HJJvRARrwOE3eGRBWZsPZg7etqSZtxS6ENtUt/kM88KYOyLfB0w==", "dev": true, "dependencies": { - "@electron-forge/plugin-base": "7.5.0", - "@electron-forge/shared-types": "7.5.0" + "@electron-forge/plugin-base": "7.6.0", + "@electron-forge/shared-types": "7.6.0" }, "engines": { "node": ">= 16.4.0" @@ -303,25 +305,25 @@ } }, "node_modules/@electron-forge/publisher-base": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@electron-forge/publisher-base/-/publisher-base-7.5.0.tgz", - "integrity": "sha512-PcF3jWA+oXRwNVWjKW6GxHJywJ62QXpYF/8SMs7kgKzBDzLqrbUnWuaXoCP5kCP+AxM495ZU5L2dyJek1eM+VA==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@electron-forge/publisher-base/-/publisher-base-7.6.0.tgz", + "integrity": "sha512-IL9bbIb/4J4I1bfW53RAmE/Al835XJsOwFXTLUnxnaGtbWg5jz7eiyw9Vl8XvvfHN1Dpoa9f94to8keU2MXgDg==", "dev": true, "dependencies": { - "@electron-forge/shared-types": "7.5.0" + "@electron-forge/shared-types": "7.6.0" }, "engines": { "node": ">= 16.4.0" } }, "node_modules/@electron-forge/publisher-github": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@electron-forge/publisher-github/-/publisher-github-7.5.0.tgz", - "integrity": "sha512-876lMpsNzVcfJ0sdq/aP93dal7mMcnEa78AQoQb/vmewvwR7TtNjYyv/+Wtyu/M/BVyZ4sZB8Dd/C2xOMFSyrQ==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@electron-forge/publisher-github/-/publisher-github-7.6.0.tgz", + "integrity": "sha512-hK69MeB0o+gLc/xlVRebs4m2NEBWi26Ep4GMpAu718NXaTpOINpGc9jzw+U2n3qX1lN8iIFxovg3s+fMtSquJg==", "dev": true, "dependencies": { - "@electron-forge/publisher-base": "7.5.0", - "@electron-forge/shared-types": "7.5.0", + "@electron-forge/publisher-base": "7.6.0", + "@electron-forge/shared-types": "7.6.0", "@octokit/core": "^3.2.4", "@octokit/plugin-retry": "^3.0.9", "@octokit/request-error": "^2.0.5", @@ -338,14 +340,14 @@ } }, "node_modules/@electron-forge/shared-types": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@electron-forge/shared-types/-/shared-types-7.5.0.tgz", - "integrity": "sha512-VXuLVGYa3ZulBlmjA40ZEpk+iPH5ebN0v7t27wDt3rm23bph2aQrL7uSTLXhobenXYBVKggXnQt6rJ9A7FCDNQ==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@electron-forge/shared-types/-/shared-types-7.6.0.tgz", + "integrity": "sha512-qpJRaPo/tx/+t3iFdUWnK4Tk/elo+Izk3yS+BhzfaF0XOK8wS+NNYW4vycK6eVMxN3Yu7/924MQFtPlCKlWHvA==", "devOptional": true, "dependencies": { - "@electron-forge/tracer": "7.5.0", + "@electron-forge/tracer": "7.6.0", "@electron/packager": "^18.3.5", - "@electron/rebuild": "^3.2.10", + "@electron/rebuild": "^3.7.0", "listr2": "^7.0.2" }, "engines": { @@ -353,12 +355,12 @@ } }, "node_modules/@electron-forge/template-base": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@electron-forge/template-base/-/template-base-7.5.0.tgz", - "integrity": "sha512-wEz4FI90jje4FdwJ4FzqUejodfioNcJjlgG2Ci1FiRn4Qv0jX4MP8SEgKmnD44181/44HgMa429zxRv/fDYzOw==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@electron-forge/template-base/-/template-base-7.6.0.tgz", + "integrity": "sha512-lhvab8a/knuGnpzep8BMOEkgnkHGr11QELGBzslEnA6rwZi9DDyEgmMCk6VWOVQNHMeuEqh5XlgjVqJmjW6nIQ==", "dev": true, "dependencies": { - "@electron-forge/shared-types": "7.5.0", + "@electron-forge/shared-types": "7.6.0", "@malept/cross-spawn-promise": "^2.0.0", "debug": "^4.3.1", "fs-extra": "^10.0.0", @@ -369,13 +371,13 @@ } }, "node_modules/@electron-forge/template-vite": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@electron-forge/template-vite/-/template-vite-7.5.0.tgz", - "integrity": "sha512-AkMO5nW5jC8ijCYeoAK7hu+K5o7NMoHNsn71eepJ/kjOnSxXjJeBVGmP4DgzF2zc6AgeRz2TCKx6P8GUtFG5cw==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@electron-forge/template-vite/-/template-vite-7.6.0.tgz", + "integrity": "sha512-C0V0dGDO1hLXnAM9lGnZU0esNOTbxwcgILWJXv0mYErBkmputAIi3HM1Is3h3JdSijXgVbRWcIQxFxJlOCpB/A==", "dev": true, "dependencies": { - "@electron-forge/shared-types": "7.5.0", - "@electron-forge/template-base": "7.5.0", + "@electron-forge/shared-types": "7.6.0", + "@electron-forge/template-base": "7.6.0", "fs-extra": "^10.0.0" }, "engines": { @@ -383,13 +385,13 @@ } }, "node_modules/@electron-forge/template-vite-typescript": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@electron-forge/template-vite-typescript/-/template-vite-typescript-7.5.0.tgz", - "integrity": "sha512-bD9QQ6uEsDHp6/V7odCkoK53egy0A4LEh++F1VYFt7SWJ5+InkcSLww7ELz2hrNmpmXb+euRrNagL1gorPToSA==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@electron-forge/template-vite-typescript/-/template-vite-typescript-7.6.0.tgz", + "integrity": "sha512-i2Bt5Hehoq2CNNrUQjl8DQX7VatBMQ6mv+CCa+m+EV92nUYxXsoFva62/5ITpc3gFAGd1upw/S7dTbHV6GOwsA==", "dev": true, "dependencies": { - "@electron-forge/shared-types": "7.5.0", - "@electron-forge/template-base": "7.5.0", + "@electron-forge/shared-types": "7.6.0", + "@electron-forge/template-base": "7.6.0", "fs-extra": "^10.0.0" }, "engines": { @@ -397,13 +399,13 @@ } }, "node_modules/@electron-forge/template-webpack": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@electron-forge/template-webpack/-/template-webpack-7.5.0.tgz", - "integrity": "sha512-Il9dO4VMhxibsYTsKRkccWUN3WFg55PEQFL93oarFcEtAT3sjMx/1bZDj/2AIHqbwIf7IrCylPKiPP2uUNOM9Q==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@electron-forge/template-webpack/-/template-webpack-7.6.0.tgz", + "integrity": "sha512-+HEf0ryUfLpHvl27TXSdP2Ob69+ktNtr5EnmroZGGIxhSAtEs4HloPtDF9PSfBzm38pZhQBZn78kY9LbITTGjg==", "dev": true, "dependencies": { - "@electron-forge/shared-types": "7.5.0", - "@electron-forge/template-base": "7.5.0", + "@electron-forge/shared-types": "7.6.0", + "@electron-forge/template-base": "7.6.0", "fs-extra": "^10.0.0" }, "engines": { @@ -411,13 +413,13 @@ } }, "node_modules/@electron-forge/template-webpack-typescript": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@electron-forge/template-webpack-typescript/-/template-webpack-typescript-7.5.0.tgz", - "integrity": "sha512-Q11xAzFxWtES0bwykMd8MAzrVRtmSruXQxQIvqM7Qf3VmU8joq8v5njmn13LeCDkcRGjALiJqO8EsgsW3bttNw==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@electron-forge/template-webpack-typescript/-/template-webpack-typescript-7.6.0.tgz", + "integrity": "sha512-fDj4DkGxJJjGL8lpowFnkX7PvV9koLHKJuyusK8p8ayVMGoHpHrIcVCrV06tKYOvhFrL/ahW+CKKvjlxF8niEg==", "dev": true, "dependencies": { - "@electron-forge/shared-types": "7.5.0", - "@electron-forge/template-base": "7.5.0", + "@electron-forge/shared-types": "7.6.0", + "@electron-forge/template-base": "7.6.0", "fs-extra": "^10.0.0" }, "engines": { @@ -425,9 +427,9 @@ } }, "node_modules/@electron-forge/tracer": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@electron-forge/tracer/-/tracer-7.5.0.tgz", - "integrity": "sha512-1dE0wKCmv/K3BXCH70o2jp/y2kXgZQm73gIvzyadySXYwu2L4BWxhAO+Q+JsnbUk+nclHEup5ph4D0JoPIWLcQ==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@electron-forge/tracer/-/tracer-7.6.0.tgz", + "integrity": "sha512-Rn76RHqNhLyZDnu+xY/X73+bv+Q09XKaZBL/WvlYBbvrrHe26NOHJ3IHXxkWRokSWd4B7lOGLGKm3j1Il8dVbQ==", "devOptional": true, "dependencies": { "chrome-trace-event": "^1.0.3" @@ -669,9 +671,9 @@ } }, "node_modules/@electron/packager": { - "version": "18.3.5", - "resolved": "https://registry.npmjs.org/@electron/packager/-/packager-18.3.5.tgz", - "integrity": "sha512-ClgTxXTt3MesWAcjIxIkgxELjTcllw1FRoVsihP7uT48kpDMqI71p4XvnMWbq8PvU57TcrKICAaLkxRhbc+/wQ==", + "version": "18.3.6", + "resolved": "https://registry.npmjs.org/@electron/packager/-/packager-18.3.6.tgz", + "integrity": "sha512-1eXHB5t+SQKvUiDpWGpvr90ZSSbXj+isrh3YbjCTjKT4bE4SQrKSBfukEAaBvp67+GXHFtCHjQgN9qSTFIge+Q==", "devOptional": true, "dependencies": { "@electron/asar": "^3.2.13", @@ -719,9 +721,9 @@ } }, "node_modules/@electron/rebuild": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@electron/rebuild/-/rebuild-3.7.0.tgz", - "integrity": "sha512-VW++CNSlZwMYP7MyXEbrKjpzEwhB5kDNbzGtiPEjwYysqyTCF+YbNJ210Dj3AjWsGSV4iEEwNkmJN9yGZmVvmw==", + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/@electron/rebuild/-/rebuild-3.7.1.tgz", + "integrity": "sha512-sKGD+xav4Gh25+LcLY0rjIwcCFTw+f/HU1pB48UVbwxXXRGaXEqIH0AaYKN46dgd/7+6kuiDXzoyAEvx1zCsdw==", "devOptional": true, "dependencies": { "@electron/node-gyp": "git+https://github.com/electron/node-gyp.git#06b29aafb7708acef8b3669835c8a7857ebc92d2", @@ -1165,9 +1167,9 @@ "optional": true }, "node_modules/@types/node": { - "version": "20.17.6", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.6.tgz", - "integrity": "sha512-VEI7OdvK2wP7XHnsuXbAJnEpEkF6NjSN45QJlL4VGqZSXsnicpesdTWsg9RISeSdYd3yeRj/y3k5KGjUXYnFwQ==", + "version": "20.17.9", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.9.tgz", + "integrity": "sha512-0JOXkRyLanfGPE2QRCwgxhzlBAvaRdCNMcvbd7jFfpmD4eEXll7LRwy5ymJmyeZqk7Nh7eD2LeUyQ68BbndmXw==", "devOptional": true, "dependencies": { "undici-types": "~6.19.2" @@ -1621,6 +1623,25 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "optional": true, + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -1875,9 +1896,9 @@ "devOptional": true }, "node_modules/cross-spawn": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.5.tgz", - "integrity": "sha512-ZVJrKKYunU38/76t0RMOulHOnUcbU9GbpWKAOZ0mhjr7CX6FVrH+4FrAapSOekrgFQ3f/8gwMEuIft0aKq6Hug==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "devOptional": true, "dependencies": { "path-key": "^3.1.0", @@ -2759,9 +2780,9 @@ } }, "node_modules/execa/node_modules/cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "version": "6.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.6.tgz", + "integrity": "sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw==", "devOptional": true, "dependencies": { "nice-try": "^1.0.4", @@ -3291,12 +3312,15 @@ } }, "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.1.0.tgz", + "integrity": "sha512-FQoVQnqcdk4hVM4JN1eromaun4iuS34oStkdlLENLdpULsuQcTyXj8w7ayhuUfPwEYZ1ZOooOTT6fdA9Vmx/RA==", "optional": true, "dependencies": { - "get-intrinsic": "^1.1.3" + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -3355,10 +3379,13 @@ } }, "node_modules/has-proto": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", - "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.1.0.tgz", + "integrity": "sha512-QLdzI9IIO1Jg7f9GT1gXpPpXArAn6cS31R1eEZqz08Gc+uQ8/XiqHWt17Fiw+2p6oTTIq5GXEpQkAlA88YRl/Q==", "optional": true, + "dependencies": { + "call-bind": "^1.0.7" + }, "engines": { "node": ">= 0.4" }, @@ -3367,9 +3394,9 @@ } }, "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", "optional": true, "engines": { "node": ">= 0.4" @@ -3915,9 +3942,9 @@ } }, "node_modules/macos-alias": { - "version": "0.2.11", - "resolved": "https://registry.npmjs.org/macos-alias/-/macos-alias-0.2.11.tgz", - "integrity": "sha512-zIUs3+qpml+w3wiRuADutd7XIO8UABqksot10Utl/tji4UxZzLG4fWDC+yJZoO8/Ehg5RqsvSRE/6TS5AEOeWw==", + "version": "0.2.12", + "resolved": "https://registry.npmjs.org/macos-alias/-/macos-alias-0.2.12.tgz", + "integrity": "sha512-yiLHa7cfJcGRFq4FrR4tMlpNHb4Vy4mWnpajlSSIFM5k4Lv8/7BbbDLzCAVogWNl0LlLhizRp1drXv0hK9h0Yw==", "hasInstallScript": true, "optional": true, "os": [ @@ -5237,6 +5264,23 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "optional": true, + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -5996,9 +6040,9 @@ } }, "node_modules/yarn-or-npm/node_modules/cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "version": "6.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.6.tgz", + "integrity": "sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw==", "dev": true, "dependencies": { "nice-try": "^1.0.4", diff --git a/package.json b/package.json index f24c7bd..a28d8b2 100755 --- a/package.json +++ b/package.json @@ -41,6 +41,8 @@ }, "dependencies": { "electron-squirrel-startup": "^1.0.1", + "codemirror": "5.65.2", + "simplyedit": "github:simplyedit/simplyedit", "simplycode": "github:simplyedit/simplycode" }, "config": { diff --git a/scripts/post-install.sh b/scripts/post-install.sh index bdbab6e..c81d5d2 100755 --- a/scripts/post-install.sh +++ b/scripts/post-install.sh @@ -1,20 +1,65 @@ #!/usr/bin/env bash +current_pwd=`pwd` + +if [[ ${INIT_CWD} != ${current_pwd} ]]; then + exit 0; # Skip posinstall when we are installed as a dependancy +fi + + +installSimplyEdit() { + local sSourceDir sTargetDir + + readonly sSourceDir="${npm_config_local_prefix}/node_modules/simplyedit" + readonly sTargetDir="${npm_config_local_prefix}/simplycode" + + mkdir -p \ + "${sTargetDir}/js/" \ + "${sTargetDir}/hope/" \ + "${sTargetDir}/simply/" \ + + cp -a "${sSourceDir}/js/"* "${sTargetDir}/js" + cp -a "${sSourceDir}/hope/"* "${sTargetDir}/hope" + cp -a "${sSourceDir}/simply/"* "${sTargetDir}/simply" +} + +installCodeMirror() { + sSourceDir="${npm_config_local_prefix}/node_modules" + sTargetDir="${npm_config_local_prefix}/simplycode/js" + + mkdir -p \ + "${sTargetDir}/codemirror/lib/" \ + "${sTargetDir}/codemirror/mode/css/" \ + "${sTargetDir}/codemirror/mode/htmlmixed/" \ + "${sTargetDir}/codemirror/mode/javascript/" \ + "${sTargetDir}/codemirror/mode/xml/" \ + "${sTargetDir}/codemirror/theme/" + + cp -f "${sSourceDir}/codemirror/lib/codemirror.css" "${sTargetDir}/codemirror/lib/codemirror.css" + cp -f "${sSourceDir}/codemirror/lib/codemirror.js" "${sTargetDir}/codemirror/lib/codemirror.js" + cp -f "${sSourceDir}/codemirror/mode/css/css.js" "${sTargetDir}/codemirror/mode/css/css.js" + cp -f "${sSourceDir}/codemirror/mode/htmlmixed/htmlmixed.js" "${sTargetDir}/codemirror/mode/htmlmixed/htmlmixed.js" + cp -f "${sSourceDir}/codemirror/mode/javascript/javascript.js" "${sTargetDir}/codemirror/mode/javascript/javascript.js" + cp -f "${sSourceDir}/codemirror/mode/xml/xml.js" "${sTargetDir}/codemirror/mode/xml/xml.js" + cp -f "${sSourceDir}/codemirror/theme/base16-dark.css" "${sTargetDir}/codemirror/theme/base16-dark.css" +} installSimplyCode() { local sSourceDir sTargetDir - readonly sSourceDir="${npm_config_local_prefix}/node_modules/simplycode/www" + readonly sSourceDir="${npm_config_local_prefix}/node_modules/simplycode" readonly sTargetDir="${npm_config_local_prefix}/simplycode" - cp -a "${sSourceDir}/js" "${sTargetDir}" - cp -a "${sSourceDir}/hope" "${sTargetDir}" - cp -a "${sSourceDir}/simply" "${sTargetDir}" - cp -f "${sSourceDir}/index.html" "${sTargetDir}" + cp -a "${sSourceDir}/assets" "${sTargetDir}" + cp -f "${sSourceDir}/generated.html" "${sTargetDir}/index.html" } if [[ ${BASH_SOURCE[0]} != "${0}" ]]; then + export -f installSimplyEdit + export -f installCodeMirror export -f installSimplyCode else + installSimplyEdit + installCodeMirror installSimplyCode exit $? fi diff --git a/simplycode/assets/fonts/CoconRegularFont.woff b/simplycode/assets/fonts/CoconRegularFont.woff new file mode 100644 index 0000000000000000000000000000000000000000..0f98fcf427580767ad1b53eafac38486d4a81888 GIT binary patch literal 16480 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

lY$$BsQpjkJJLaplCQ&(qC`9%tMj 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 literal 0 HcmV?d00001 diff --git a/simplycode/assets/img/feather-sprite.svg b/simplycode/assets/img/feather-sprite.svg new file mode 100644 index 0000000..fcb2082 --- /dev/null +++ b/simplycode/assets/img/feather-sprite.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/simplycode/index.html b/simplycode/index.html index 8446464..dbe42ac 100644 --- a/simplycode/index.html +++ b/simplycode/index.html @@ -4,146 +4,699 @@ @@ -545,7 +1236,15 @@ - + +