From ed7bb749522d694f1db1dd11ff802bda6824f08c Mon Sep 17 00:00:00 2001 From: Josun Date: Mon, 20 Dec 2021 20:55:04 +0100 Subject: [PATCH] Feature/check page (#19) * Working on Check Page loading * Adding Input and Control Elements * implementing check logic * adding docu and footer * [CodeFactor] Apply fixes * Fixing eval Co-authored-by: codefactor-io --- README.md | 10 ++ app/main.js | 4 + app/main.ts | 7 +- package-lock.json | 152 +++++++++++++++-------------- package.json | 12 ++- src/classes/app.ts | 7 +- src/classes/checkTemplate.d.ts | 34 +++++++ src/classes/checkTemplate.ts | 88 +++++++++++++++++ src/classes/editor.d.ts | 9 -- src/classes/editor.ts | 17 ---- src/classes/renderer.d.ts | 26 ++++- src/classes/renderer.ts | 169 ++++++++++++++++++++++++++++++--- src/model/info.d.ts | 37 ++++++++ src/model/info.ts | 58 +++++++++++ src/sass/_app-body.sass | 41 +++++++- src/sass/_app-navigation.sass | 3 +- src/sass/_mixin.sass | 3 +- static/assets/CHECK_STEP_1.png | Bin 0 -> 40076 bytes static/assets/CHECK_STEP_2.png | Bin 0 -> 39527 bytes static/index.html | 2 - tools/deploy.js | 6 +- tools/updateVersion.js | 36 +++++++ 22 files changed, 593 insertions(+), 128 deletions(-) create mode 100644 src/classes/checkTemplate.d.ts create mode 100644 src/classes/checkTemplate.ts create mode 100644 src/model/info.d.ts create mode 100644 src/model/info.ts create mode 100644 static/assets/CHECK_STEP_1.png create mode 100644 static/assets/CHECK_STEP_2.png create mode 100644 tools/updateVersion.js diff --git a/README.md b/README.md index 72d6a76..a8b3671 100644 --- a/README.md +++ b/README.md @@ -60,3 +60,13 @@ The build script first installs all dependencies with ```npm install``` and then ![Step 5](https://raw.githubusercontent.com/Social-graphics-library/Template-Generator/main/static/assets/STEP_5.png) --- + +## Check template + +### Step 1 - Select JS template file + +![Check Step 1](https://raw.githubusercontent.com/Social-graphics-library/Template-Generator/main/static/assets/CHECK_STEP_1.png) + +### Step 2 - Click on check button + +![Check Step 2](https://raw.githubusercontent.com/Social-graphics-library/Template-Generator/main/static/assets/CHECK_STEP_2.png) \ No newline at end of file diff --git a/app/main.js b/app/main.js index 4d8a69b..66e74ea 100644 --- a/app/main.js +++ b/app/main.js @@ -17,6 +17,10 @@ var createWindow = function () { win.loadFile('./static/index.html'); // Open the DevTools. // win.webContents.openDevTools({ mode: 'detach' }) + win.webContents.on('new-window', function (e, url) { + e.preventDefault(); + require('electron').shell.openExternal(url); + }); }; electron_1.app.whenReady().then(function () { createWindow(); diff --git a/app/main.ts b/app/main.ts index f3a28c9..605a464 100644 --- a/app/main.ts +++ b/app/main.ts @@ -18,6 +18,11 @@ const createWindow = () => { // Open the DevTools. // win.webContents.openDevTools({ mode: 'detach' }) + + win.webContents.on('new-window', (e, url) => { + e.preventDefault(); + require('electron').shell.openExternal(url); + }); } app.whenReady().then(() => { @@ -31,4 +36,4 @@ app.whenReady().then(() => { app.on('window-all-closed', () => { if (process.platform !== 'darwin') app.quit() -}) \ No newline at end of file +}) diff --git a/package-lock.json b/package-lock.json index 23b16cc..702f02f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,18 +1,19 @@ { "name": "sgl-template-generator", - "version": "1.0.0", + "version": "1.1.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "sgl-template-generator", - "version": "1.0.0", + "version": "1.1.0", "license": "MPL-2.0", "dependencies": { "@popperjs/core": "^2.11.0", "bootstrap": "^5.1.3", "codemirror": "^5.64.0", - "jquery": "^3.6.0" + "jquery": "^3.6.0", + "social-graphics-library": "^2.1.0" }, "devDependencies": { "@types/bootstrap": "^5.1.6", @@ -140,9 +141,9 @@ } }, "node_modules/@types/eslint-scope": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.1.tgz", - "integrity": "sha512-SCFeogqiptms4Fg29WpOTk5nHIzfpKCemSN63ksBQYKTcXoJEmJagV+DhVmbapZzY4/5YaOV1nZwrsU79fFm1g==", + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.2.tgz", + "integrity": "sha512-TzgYCWoPiTeRg6RQYgtuW7iODtVoKu3RVL72k3WohqhjfaOLK5Mg2T4Tg1o2bSfu0vPkoI48wdQFv5b/Xe04wQ==", "dev": true, "dependencies": { "@types/eslint": "*", @@ -189,9 +190,9 @@ "optional": true }, "node_modules/@types/node": { - "version": "14.18.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.0.tgz", - "integrity": "sha512-0GeIl2kmVMXEnx8tg1SlG6Gg8vkqirrW752KqolYo1PHevhhZN3bhJ67qHj+bQaINhX0Ra3TlWwRvMCd9iEfNQ==", + "version": "14.18.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.1.tgz", + "integrity": "sha512-fTFWOFrgAkj737w1o0HLTIgisgYHnsZfeiqhG1Ltrf/iJjudEbUwetQAsfrtVE49JGwvpEzQR+EbMkIqG4227g==", "dev": true }, "node_modules/@types/sizzle": { @@ -609,13 +610,13 @@ } }, "node_modules/browserslist": { - "version": "4.18.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.18.1.tgz", - "integrity": "sha512-8ScCzdpPwR2wQh8IT82CA2VgDwjHyqMovPBZSNH54+tm4Jk2pCuv90gmAdH6J84OCRWi0b4gMe6O6XPXuJnjgQ==", + "version": "4.19.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.19.1.tgz", + "integrity": "sha512-u2tbbG5PdKRTUoctO3NBD8FQ5HdPh1ZXPHzp1rwaa5jTc+RV9/+RlWiAIKmjRPQF+xbGM9Kklj5bZQFa2s/38A==", "dev": true, "dependencies": { - "caniuse-lite": "^1.0.30001280", - "electron-to-chromium": "^1.3.896", + "caniuse-lite": "^1.0.30001286", + "electron-to-chromium": "^1.4.17", "escalade": "^3.1.1", "node-releases": "^2.0.1", "picocolors": "^1.0.0" @@ -711,9 +712,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001286", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001286.tgz", - "integrity": "sha512-zaEMRH6xg8ESMi2eQ3R4eZ5qw/hJiVsO/HlLwniIwErij0JDr9P+8V4dtx1l+kLq6j3yy8l8W4fst1lBnat5wQ==", + "version": "1.0.30001291", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001291.tgz", + "integrity": "sha512-roMV5V0HNGgJ88s42eE70sstqGW/gwFndosYrikHthw98N5tLnOTxFqMLQjZVRxTWFlJ4rn+MsgXrR7MDPY4jA==", "dev": true, "funding": { "type": "opencollective", @@ -796,9 +797,9 @@ } }, "node_modules/codemirror": { - "version": "5.64.0", - "resolved": "https://registry.npmjs.org/codemirror/-/codemirror-5.64.0.tgz", - "integrity": "sha512-fqr6CtDQdJ6iNMbD8NX2gH2G876nNDk+TO1rrYkgWnqQdO3O1Xa9tK6q+psqhJJgE5SpbaDcgdfLmukoUVE8pg==" + "version": "5.65.0", + "resolved": "https://registry.npmjs.org/codemirror/-/codemirror-5.65.0.tgz", + "integrity": "sha512-gWEnHKEcz1Hyz7fsQWpK7P0sPI2/kSkRX2tc7DFA6TmZuDN75x/1ejnH/Pn8adYKrLEA1V2ww6L00GudHZbSKw==" }, "node_modules/color-convert": { "version": "2.0.1", @@ -986,9 +987,9 @@ "dev": true }, "node_modules/electron": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/electron/-/electron-16.0.4.tgz", - "integrity": "sha512-IptwmowvMP1SFOmZLh6rrURwfnOxbDBXBRBcaOdfBM5I+B9mgtdNwzNC3ymFFNzEkZUwdOyg9fu3iyjAAQIQgw==", + "version": "16.0.5", + "resolved": "https://registry.npmjs.org/electron/-/electron-16.0.5.tgz", + "integrity": "sha512-TgQXWmEGQ3uH2P2JDq5GyJDEu/fimRgqp1iNisARtGreU1k3630PqWlR+4SPnSEHN9NuSv92ng6NWxtefeFzxg==", "dev": true, "hasInstallScript": true, "dependencies": { @@ -1210,9 +1211,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.16", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.16.tgz", - "integrity": "sha512-BQb7FgYwnu6haWLU63/CdVW+9xhmHls3RCQUFiV4lvw3wimEHTVcUk2hkuZo76QhR8nnDdfZE7evJIZqijwPdA==", + "version": "1.4.24", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.24.tgz", + "integrity": "sha512-erwx5r69B/WFfFuF2jcNN0817BfDBdC4765kQ6WltOMuwsimlQo3JTEq0Cle+wpHralwdeX3OfAtw/mHxPK0Wg==", "dev": true }, "node_modules/electron-winstaller": { @@ -2080,9 +2081,9 @@ } }, "node_modules/jest-worker": { - "version": "27.4.4", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.4.4.tgz", - "integrity": "sha512-jfwxYJvfua1b1XkyuyPh01ATmgg4e5fPM/muLmhy9Qc6dmiwacQB0MLHaU6IjEsv/+nAixHGxTn8WllA27Pn0w==", + "version": "27.4.5", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.4.5.tgz", + "integrity": "sha512-f2s8kEdy15cv9r7q4KkzGXvlY0JTcmCbMHZBfSQDwW77REr45IDWwd0lksDFeVHH2jJ5pqb90T77XscrjeGzzg==", "dev": true, "dependencies": { "@types/node": "*", @@ -3077,6 +3078,14 @@ "integrity": "sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==", "dev": true }, + "node_modules/social-graphics-library": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/social-graphics-library/-/social-graphics-library-2.1.0.tgz", + "integrity": "sha512-lsbjIBvDxxkWBipUc/Njak0F28/zCmrsFAI7VtgcDMAzEOFp3onVR0dHh3iqXVzWg2YJRjETyN4PgyBGskFJ2A==", + "funding": { + "url": "https://ko-fi.com/josunlp" + } + }, "node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -3264,12 +3273,12 @@ } }, "node_modules/terser-webpack-plugin": { - "version": "5.2.5", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.2.5.tgz", - "integrity": "sha512-3luOVHku5l0QBeYS8r4CdHYWEGMmIj3H1U64jgkdZzECcSOJAyJ9TjuqcQZvw1Y+4AOBN9SeYJPJmFn2cM4/2g==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.0.tgz", + "integrity": "sha512-LPIisi3Ol4chwAaPP8toUJ3L4qCM1G0wao7L3qNv57Drezxj6+VEyySpPw4B1HSO2Eg/hDY/MNF5XihCAoqnsQ==", "dev": true, "dependencies": { - "jest-worker": "^27.0.6", + "jest-worker": "^27.4.1", "schema-utils": "^3.1.1", "serialize-javascript": "^6.0.0", "source-map": "^0.6.1", @@ -3440,9 +3449,9 @@ "dev": true }, "node_modules/typescript": { - "version": "4.5.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.3.tgz", - "integrity": "sha512-eVYaEHALSt+s9LbvgEv4Ef+Tdq7hBiIZgii12xXJnukryt3pMgJf6aKhoCZ3FWQsu6sydEnkg11fYXLzhLBjeQ==", + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.4.tgz", + "integrity": "sha512-VgYs2A2QIRuGphtzFV7aQJduJ2gyfTljngLzjpfW9FoYZF6xuw1W0vW9ghCKLfcWrCFxK81CSGRAvS1pn4fIUg==", "dev": true, "bin": { "tsc": "bin/tsc", @@ -3777,9 +3786,9 @@ } }, "@types/eslint-scope": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.1.tgz", - "integrity": "sha512-SCFeogqiptms4Fg29WpOTk5nHIzfpKCemSN63ksBQYKTcXoJEmJagV+DhVmbapZzY4/5YaOV1nZwrsU79fFm1g==", + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.2.tgz", + "integrity": "sha512-TzgYCWoPiTeRg6RQYgtuW7iODtVoKu3RVL72k3WohqhjfaOLK5Mg2T4Tg1o2bSfu0vPkoI48wdQFv5b/Xe04wQ==", "dev": true, "requires": { "@types/eslint": "*", @@ -3826,9 +3835,9 @@ "optional": true }, "@types/node": { - "version": "14.18.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.0.tgz", - "integrity": "sha512-0GeIl2kmVMXEnx8tg1SlG6Gg8vkqirrW752KqolYo1PHevhhZN3bhJ67qHj+bQaINhX0Ra3TlWwRvMCd9iEfNQ==", + "version": "14.18.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.1.tgz", + "integrity": "sha512-fTFWOFrgAkj737w1o0HLTIgisgYHnsZfeiqhG1Ltrf/iJjudEbUwetQAsfrtVE49JGwvpEzQR+EbMkIqG4227g==", "dev": true }, "@types/sizzle": { @@ -4170,13 +4179,13 @@ } }, "browserslist": { - "version": "4.18.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.18.1.tgz", - "integrity": "sha512-8ScCzdpPwR2wQh8IT82CA2VgDwjHyqMovPBZSNH54+tm4Jk2pCuv90gmAdH6J84OCRWi0b4gMe6O6XPXuJnjgQ==", + "version": "4.19.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.19.1.tgz", + "integrity": "sha512-u2tbbG5PdKRTUoctO3NBD8FQ5HdPh1ZXPHzp1rwaa5jTc+RV9/+RlWiAIKmjRPQF+xbGM9Kklj5bZQFa2s/38A==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30001280", - "electron-to-chromium": "^1.3.896", + "caniuse-lite": "^1.0.30001286", + "electron-to-chromium": "^1.4.17", "escalade": "^3.1.1", "node-releases": "^2.0.1", "picocolors": "^1.0.0" @@ -4249,9 +4258,9 @@ } }, "caniuse-lite": { - "version": "1.0.30001286", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001286.tgz", - "integrity": "sha512-zaEMRH6xg8ESMi2eQ3R4eZ5qw/hJiVsO/HlLwniIwErij0JDr9P+8V4dtx1l+kLq6j3yy8l8W4fst1lBnat5wQ==", + "version": "1.0.30001291", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001291.tgz", + "integrity": "sha512-roMV5V0HNGgJ88s42eE70sstqGW/gwFndosYrikHthw98N5tLnOTxFqMLQjZVRxTWFlJ4rn+MsgXrR7MDPY4jA==", "dev": true }, "chalk": { @@ -4313,9 +4322,9 @@ } }, "codemirror": { - "version": "5.64.0", - "resolved": "https://registry.npmjs.org/codemirror/-/codemirror-5.64.0.tgz", - "integrity": "sha512-fqr6CtDQdJ6iNMbD8NX2gH2G876nNDk+TO1rrYkgWnqQdO3O1Xa9tK6q+psqhJJgE5SpbaDcgdfLmukoUVE8pg==" + "version": "5.65.0", + "resolved": "https://registry.npmjs.org/codemirror/-/codemirror-5.65.0.tgz", + "integrity": "sha512-gWEnHKEcz1Hyz7fsQWpK7P0sPI2/kSkRX2tc7DFA6TmZuDN75x/1ejnH/Pn8adYKrLEA1V2ww6L00GudHZbSKw==" }, "color-convert": { "version": "2.0.1", @@ -4461,9 +4470,9 @@ "dev": true }, "electron": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/electron/-/electron-16.0.4.tgz", - "integrity": "sha512-IptwmowvMP1SFOmZLh6rrURwfnOxbDBXBRBcaOdfBM5I+B9mgtdNwzNC3ymFFNzEkZUwdOyg9fu3iyjAAQIQgw==", + "version": "16.0.5", + "resolved": "https://registry.npmjs.org/electron/-/electron-16.0.5.tgz", + "integrity": "sha512-TgQXWmEGQ3uH2P2JDq5GyJDEu/fimRgqp1iNisARtGreU1k3630PqWlR+4SPnSEHN9NuSv92ng6NWxtefeFzxg==", "dev": true, "requires": { "@electron/get": "^1.13.0", @@ -4629,9 +4638,9 @@ } }, "electron-to-chromium": { - "version": "1.4.16", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.16.tgz", - "integrity": "sha512-BQb7FgYwnu6haWLU63/CdVW+9xhmHls3RCQUFiV4lvw3wimEHTVcUk2hkuZo76QhR8nnDdfZE7evJIZqijwPdA==", + "version": "1.4.24", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.24.tgz", + "integrity": "sha512-erwx5r69B/WFfFuF2jcNN0817BfDBdC4765kQ6WltOMuwsimlQo3JTEq0Cle+wpHralwdeX3OfAtw/mHxPK0Wg==", "dev": true }, "electron-winstaller": { @@ -5319,9 +5328,9 @@ "dev": true }, "jest-worker": { - "version": "27.4.4", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.4.4.tgz", - "integrity": "sha512-jfwxYJvfua1b1XkyuyPh01ATmgg4e5fPM/muLmhy9Qc6dmiwacQB0MLHaU6IjEsv/+nAixHGxTn8WllA27Pn0w==", + "version": "27.4.5", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.4.5.tgz", + "integrity": "sha512-f2s8kEdy15cv9r7q4KkzGXvlY0JTcmCbMHZBfSQDwW77REr45IDWwd0lksDFeVHH2jJ5pqb90T77XscrjeGzzg==", "dev": true, "requires": { "@types/node": "*", @@ -6106,6 +6115,11 @@ "integrity": "sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==", "dev": true }, + "social-graphics-library": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/social-graphics-library/-/social-graphics-library-2.1.0.tgz", + "integrity": "sha512-lsbjIBvDxxkWBipUc/Njak0F28/zCmrsFAI7VtgcDMAzEOFp3onVR0dHh3iqXVzWg2YJRjETyN4PgyBGskFJ2A==" + }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -6265,12 +6279,12 @@ } }, "terser-webpack-plugin": { - "version": "5.2.5", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.2.5.tgz", - "integrity": "sha512-3luOVHku5l0QBeYS8r4CdHYWEGMmIj3H1U64jgkdZzECcSOJAyJ9TjuqcQZvw1Y+4AOBN9SeYJPJmFn2cM4/2g==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.0.tgz", + "integrity": "sha512-LPIisi3Ol4chwAaPP8toUJ3L4qCM1G0wao7L3qNv57Drezxj6+VEyySpPw4B1HSO2Eg/hDY/MNF5XihCAoqnsQ==", "dev": true, "requires": { - "jest-worker": "^27.0.6", + "jest-worker": "^27.4.1", "schema-utils": "^3.1.1", "serialize-javascript": "^6.0.0", "source-map": "^0.6.1", @@ -6372,9 +6386,9 @@ "dev": true }, "typescript": { - "version": "4.5.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.3.tgz", - "integrity": "sha512-eVYaEHALSt+s9LbvgEv4Ef+Tdq7hBiIZgii12xXJnukryt3pMgJf6aKhoCZ3FWQsu6sydEnkg11fYXLzhLBjeQ==", + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.4.tgz", + "integrity": "sha512-VgYs2A2QIRuGphtzFV7aQJduJ2gyfTljngLzjpfW9FoYZF6xuw1W0vW9ghCKLfcWrCFxK81CSGRAvS1pn4fIUg==", "dev": true }, "universalify": { diff --git a/package.json b/package.json index bb628d6..0e8aa06 100644 --- a/package.json +++ b/package.json @@ -1,13 +1,13 @@ { "name": "sgl-template-generator", - "version": "1.0.0", + "version": "1.1.0", "description": "A tool to generate Templates from SVG Files", "main": "./app/main.js", "private": true, "productName": "SGL Template Generator", "scripts": { "start": "electron .", - "build": "npm run build-main-file && npm run build-sass && webpack --config ./webpack.config.js", + "build": "node ./tools/updateVersion.js && npm run build-main-file && npm run build-sass && webpack --config ./webpack.config.js", "build-main-file": "tsc ./app/main.ts", "watch-main-file": "tsc ./app/main.ts --watch", "watch-webpack": "webpack --config ./webpack.config.js --watch", @@ -47,7 +47,10 @@ "social", "media" ], - "author": "Jonas Pfalzgraf", + "author": { + "name": "Jonas Pfalzgraf", + "email": "info@josunlp.de" + }, "license": "MPL-2.0", "bugs": { "url": "https://github.com/Social-graphics-library/Template-Generator/issues" @@ -69,6 +72,7 @@ "@popperjs/core": "^2.11.0", "bootstrap": "^5.1.3", "codemirror": "^5.64.0", - "jquery": "^3.6.0" + "jquery": "^3.6.0", + "social-graphics-library": "^2.1.0" } } diff --git a/src/classes/app.ts b/src/classes/app.ts index 0b70562..efade76 100644 --- a/src/classes/app.ts +++ b/src/classes/app.ts @@ -1,4 +1,3 @@ -import { Editor } from "./editor"; import { Guid } from "./guid"; import { Renderer } from "./renderer"; @@ -48,10 +47,8 @@ export class App { */ public async run(): Promise { const target = this.appTarget; - const render = Renderer.getInstance(); + const render = Renderer.getInstance(target); console.log('App running'); - render.renderMain(target); - const editor = Editor.getInstance(); - editor; + render; } } \ No newline at end of file diff --git a/src/classes/checkTemplate.d.ts b/src/classes/checkTemplate.d.ts new file mode 100644 index 0000000..602b8aa --- /dev/null +++ b/src/classes/checkTemplate.d.ts @@ -0,0 +1,34 @@ +import { SGL } from "social-graphics-library"; +/** + * Check template + */ +export declare class CheckTemplate { + /** + * Alert handler of check template + */ + private alertHandler; + /** + * Sgl of check template + */ + private sgl; + /** + * Creates an instance of check template. + */ + constructor(sgl: SGL); + /** + * Sets check listeners + */ + private setCheckListeners; + /** + * Checks template + * @param input + */ + private checkTemplate; + /** + * Removes string + * @param str + * @param remove + * @returns string + */ + private removeString; +} diff --git a/src/classes/checkTemplate.ts b/src/classes/checkTemplate.ts new file mode 100644 index 0000000..430f2c0 --- /dev/null +++ b/src/classes/checkTemplate.ts @@ -0,0 +1,88 @@ +import { AlertHandler } from "./alertHandler"; +import { SGL } from "social-graphics-library"; + +/** + * Check template + */ +export class CheckTemplate { + + /** + * Alert handler of check template + */ + private alertHandler: AlertHandler; + + /** + * Sgl of check template + */ + private sgl: SGL; + + /** + * Creates an instance of check template. + */ + constructor(sgl: SGL) { + this.alertHandler = new AlertHandler(); + this.setCheckListeners(); + this.sgl = sgl; + } + + /** + * Sets check listeners + */ + private setCheckListeners(): void { + const checkButton = document.getElementById('check-button') as HTMLButtonElement; + const checkTemplateInput = document.getElementById('template-input') as HTMLInputElement; + + checkButton.addEventListener('click', () => { + this.checkTemplate(checkTemplateInput); + }); + } + + /** + * Checks template + * @param input + */ + private async checkTemplate(input: HTMLInputElement): Promise { + let file: File + if (input.files && input.files[0]) { + file = input.files[0]; + } else { + this.alertHandler.fireWarning('No file selected'); + return; + } + + const reader = new FileReader(); + + reader.onload = async () => { + let template = reader.result as string; + template = this.removeString(template, 'export'); + const templateName: string = file.name.split('.')[0] as string; + let tmp; + + try { + tmp = Function('(' + template + '\n)'); + } catch { + this.alertHandler.fireDanger('Invalid template'); + return; + } + + if (this.sgl.checkTemplate("advanced", templateName, tmp())) { + this.alertHandler.fireSuccess('Template is valid'); + } else { + this.alertHandler.fireDanger('Template is not valid'); + } + } + + reader.readAsText(file, "UTF-8"); + } + + /** + * Removes string + * @param str + * @param remove + * @returns string + */ + private removeString(str: string, remove: string): string { + return str.replace(remove, ''); + } + +} \ No newline at end of file diff --git a/src/classes/editor.d.ts b/src/classes/editor.d.ts index 85c28ee..893c04b 100644 --- a/src/classes/editor.d.ts +++ b/src/classes/editor.d.ts @@ -3,10 +3,6 @@ import '../../node_modules/codemirror/mode/xml/xml'; * Editor */ export declare class Editor { - /** - * Instance of app - */ - private static instance; /** * Target of editor */ @@ -27,11 +23,6 @@ export declare class Editor { * Creates an instance of editor. */ constructor(); - /** - * Gets instance - * @returns instance - */ - static getInstance(): Editor; /** * Sets editor listener */ diff --git a/src/classes/editor.ts b/src/classes/editor.ts index a4433e7..eac4d13 100644 --- a/src/classes/editor.ts +++ b/src/classes/editor.ts @@ -9,11 +9,6 @@ import { Preview } from './preview'; */ export class Editor { - /** - * Instance of app - */ - private static instance: Editor - /** * Target of editor */ @@ -59,18 +54,6 @@ export class Editor { this.preview; } - /** - * Gets instance - * @returns instance - */ - public static getInstance(): Editor { - if (!Editor.instance) { - Editor.instance = new Editor(); - } - - return Editor.instance; - } - /** * Sets editor listener */ diff --git a/src/classes/renderer.d.ts b/src/classes/renderer.d.ts index acb006c..a560c8b 100644 --- a/src/classes/renderer.d.ts +++ b/src/classes/renderer.d.ts @@ -10,6 +10,14 @@ export declare class Renderer { * Alert handler of renderer */ private alertHandler; + /** + * Sgl instance of renderer + */ + private sgl; + /** + * Info instance of renderer + */ + private info; /** * Creates an instance of renderer. */ @@ -18,12 +26,26 @@ export declare class Renderer { * Gets instance * @returns instance */ - static getInstance(): Renderer; + static getInstance(target: HTMLDivElement): Renderer; + /** + * Renders navigation + * @param appRoot + */ + private renderNavigation; + /** + * Renders footer + */ + private renderFooter; /** * Renders main * @param appRoot */ - renderMain(appRoot: HTMLDivElement): void; + private renderMainPage; + /** + * Renders check page + * @param appRoot + */ + renderCheckPage(appRoot: HTMLDivElement): void; /** * Copys to clipboard * @param element diff --git a/src/classes/renderer.ts b/src/classes/renderer.ts index a8d59b8..0f375d5 100644 --- a/src/classes/renderer.ts +++ b/src/classes/renderer.ts @@ -1,5 +1,9 @@ import { AlertHandler } from "./alertHandler"; import $ from 'jquery'; +import { SGL } from 'social-graphics-library' +import { Editor } from "./editor"; +import { CheckTemplate } from "./checkTemplate"; +import { Info } from "../model/info"; /** * Renderer @@ -16,10 +20,25 @@ export class Renderer { */ private alertHandler: AlertHandler + /** + * Sgl instance of renderer + */ + private sgl: SGL + + /** + * Info instance of renderer + */ + private info: Info + /** * Creates an instance of renderer. */ - private constructor() { + private constructor(target: HTMLDivElement) { + this.info = new Info(); + this.sgl = new SGL(); + this.renderNavigation(target); + this.renderMainPage(target); + this.renderFooter(); this.alertHandler = new AlertHandler(); console.log('Renderer initialized'); } @@ -28,23 +47,87 @@ export class Renderer { * Gets instance * @returns instance */ - public static getInstance(): Renderer { + public static getInstance(target: HTMLDivElement): Renderer { if (!Renderer.instance) { - Renderer.instance = new Renderer(); + Renderer.instance = new Renderer(target); } return Renderer.instance; } /** - * Renders main + * Renders navigation * @param appRoot */ - public renderMain(appRoot: HTMLDivElement):void { + private renderNavigation(appRoot: HTMLDivElement):void { const appNavigation = document.createElement('div'); const navigation = document.createElement('nav'); const optionMain = document.createElement('button'); + const optionCheck = document.createElement('button'); + + appNavigation.classList.add('app-navigation'); + optionMain.classList.add('app-navigation__option-main'); + optionMain.classList.add('nav-item'); + optionMain.classList.add('btn'); + optionMain.innerHTML = 'Generate new template'; + optionMain.onclick = () => { + this.renderMainPage(appRoot); + } + optionCheck.classList.add('app-navigation__option-check'); + optionCheck.classList.add('nav-item'); + optionCheck.classList.add('btn'); + optionCheck.innerHTML = 'Check template'; + optionCheck.onclick = () => { + this.renderCheckPage(appRoot); + } + navigation.appendChild(optionMain); + navigation.appendChild(optionCheck); + appNavigation.appendChild(navigation); + appRoot.appendChild(appNavigation); + } + + /** + * Renders footer + */ + private renderFooter():void { + const appFooter = document.createElement('footer'); + const footer = document.createElement('div'); + const footerText = document.createElement('p'); + const footerLink = document.createElement('a'); + + appFooter.classList.add('app-footer'); + footer.classList.add('app-footer__footer'); + footerText.classList.add('app-footer__footer-text'); + footerLink.classList.add('app-footer__footer-link'); + footerLink.innerHTML = 'Github'; + footerLink.id = 'footer-link'; + footerLink.href = this.info._homepage; + footerLink.target = '_blank'; + + footerText.innerHTML = this.info._name + + ' © ' + new Date().getFullYear().toString() + ' v' + + this.info._version + ' by ' + + this.info._author + + ' | '; + + footer.appendChild(footerText); + footer.appendChild(footerLink); + appFooter.appendChild(footer); + try { + document.body.removeChild(document.getElementsByTagName('footer')[0] as HTMLDivElement); + } catch { + console.log('No footer found'); + } + document.body.appendChild(appFooter); + } + + /** + * Renders main + * @param appRoot + */ + private renderMainPage(appRoot: HTMLDivElement):void { const appBody = document.createElement('div'); + const appBodyTitle = document.createElement('h1'); const svgDropZone = document.createElement('input'); const widthInput = document.createElement('input'); const heightInput = document.createElement('input'); @@ -65,12 +148,12 @@ export class Renderer { const iconOne = document.createElement('img'); const iconTwo = document.createElement('img'); - appNavigation.classList.add('app-navigation'); appBody.classList.add('app-body'); - optionMain.classList.add('app-navigation__option-main'); - optionMain.classList.add('nav-item'); - optionMain.classList.add('btn'); - optionMain.innerHTML = 'Generate new template'; + + //#region appBodyTitle + appBodyTitle.classList.add('app-body__title'); + appBodyTitle.innerHTML = 'Generate'; + //#endregion //#region svgDropZone svgDropZone.type = 'file'; @@ -222,8 +305,6 @@ export class Renderer { previewButton.id = 'preview-button'; //#endregion - navigation.appendChild(optionMain); - infoBox.appendChild(infoBoxText1); infoBox.appendChild(breakText); infoBox.appendChild(infoBoxText2); @@ -231,6 +312,7 @@ export class Renderer { fileForm.appendChild(svgDropZone); fileForm.appendChild(submitDrop); fileForm.appendChild(infoBox); + appBody.appendChild(appBodyTitle); appBody.appendChild(fileForm); appBody.appendChild(editor); appBody.appendChild(previewButton); @@ -240,9 +322,68 @@ export class Renderer { valuesForm.appendChild(exportModeSelectBox); valuesForm.appendChild(saveButton); appBody.appendChild(valuesForm); - appNavigation.appendChild(navigation); - appRoot.appendChild(appNavigation); + appRoot.innerHTML = ''; + this.renderNavigation(appRoot); + appRoot.appendChild(appBody); + this.renderFooter(); + const editorIni = new Editor(); + editorIni; + } + + /** + * Renders check page + * @param appRoot + */ + public renderCheckPage(appRoot: HTMLDivElement): void { + appRoot.innerHTML = ''; + this.renderNavigation(appRoot); + console.log(SGL.info()); + this.sgl; + + const appBody = document.createElement('div'); + appBody.classList.add('app-body'); + appBody.id = 'app-body'; + + const appBodyTitle = document.createElement('h1'); + appBodyTitle.classList.add('app-body__title'); + appBodyTitle.innerHTML = 'Check'; + + const appBodyText = document.createElement('p'); + appBodyText.classList.add('app-body__text'); + appBodyText.innerHTML = 'Select your template and click the button below to see the result of the Check.'; + + const templateInput = document.createElement('input'); + templateInput.classList.add('app-body__template-input'); + templateInput.classList.add('form-control'); + templateInput.id = 'template-input'; + templateInput.type = 'file'; + templateInput.required = true; + templateInput.accept = '.js'; + + const templateInputLabel = document.createElement('label'); + templateInputLabel.classList.add('app-body__template-input-label'); + templateInputLabel.innerHTML = '!Warning! Only .js files are allowed'; + templateInputLabel.setAttribute('for', 'template-input'); + + const checkButton = document.createElement('button'); + checkButton.classList.add('app-body__check-button'); + checkButton.classList.add('btn'); + checkButton.classList.add('btn-success'); + checkButton.innerHTML = 'Check'; + checkButton.id = 'check-button'; + + const checkResult = document.createElement('div'); + checkResult.classList.add('app-body__check-result'); + checkResult.id = 'check-result'; + + appBody.appendChild(appBodyTitle); + appBody.appendChild(appBodyText); + appBody.appendChild(templateInput); + appBody.appendChild(templateInputLabel); + appBody.appendChild(checkButton); + appBody.appendChild(checkResult); appRoot.appendChild(appBody); + new CheckTemplate(this.sgl); } /** diff --git a/src/model/info.d.ts b/src/model/info.d.ts new file mode 100644 index 0000000..2624007 --- /dev/null +++ b/src/model/info.d.ts @@ -0,0 +1,37 @@ +/** + * Info + */ +export declare class Info { + /** + * Version of info + */ + readonly _version: string; + /** + * Name of info + */ + readonly _name: string; + /** + * Author of info + */ + readonly _author: string; + /** + * License of info + */ + readonly _license: string; + /** + * Repository of info + */ + readonly _repository: string; + /** + * Repository of info + */ + readonly _homepage: string; + /** + * Install of info + */ + readonly _install: string; + /** + * Creates an instance of info. + */ + constructor(); +} diff --git a/src/model/info.ts b/src/model/info.ts new file mode 100644 index 0000000..8003b95 --- /dev/null +++ b/src/model/info.ts @@ -0,0 +1,58 @@ +/** + * Info + */ +export class Info { + + //#region vars + /** + * Version of info + */ + public readonly _version: string = "1.1.0" + + /** + * Name of info + */ + public readonly _name: string = "sgl-template-generator" + + /** + * Author of info + */ + public readonly _author: string = "Jonas Pfalzgraf" + + /** + * License of info + */ + public readonly _license: string = "MPL-2.0" + + /** + * Repository of info + */ + public readonly _repository: string = "git+https://github.com/Social-graphics-library/Template-Generator.git" + + /** + * Repository of info + */ + public readonly _homepage: string = "https://github.com/Social-graphics-library/Template-Generator#readme" + + /** + * Install of info + */ + public readonly _install: string = "https://github.com/Social-graphics-library/Template-Generator/releases/download/v" + this._version + "/SGL.Template.GeneratorSetup.exe" + //#endregion + + //#region constructor + /** + * Creates an instance of info. + */ + public constructor() { + this._version; + this._name; + this._author; + this._license; + this._repository; + this._install; + this._homepage; + } + //#endregion + +} \ No newline at end of file diff --git a/src/sass/_app-body.sass b/src/sass/_app-body.sass index 7bd91ad..86e3c57 100644 --- a/src/sass/_app-body.sass +++ b/src/sass/_app-body.sass @@ -1,3 +1,5 @@ +@import 'mixin' + .app-body margin-top: 2rem margin-bottom: 2rem @@ -17,7 +19,7 @@ display: flex width: 10rem - .app-body__width-input, .app-body__height-input, .app-body__name-input, .app-body__export-mode-select + .app-body__width-input, .app-body__height-input, .app-body__name-input, .app-body__export-mode-select, .app-body__check-button, .app-body__template-input-mode-select width: 10rem margin-top: 0.5rem margin-right: 0.5rem @@ -90,4 +92,39 @@ .icon-copy width: 0.9rem - height: 0.9rem \ No newline at end of file + height: 0.9rem + +.app-body__template-input-label + margin-top: 0.5rem + margin-right: 0.5rem + margin-left: auto + position: relative + right: 0px + display: flex + text-align: center + color: #535353 + font-size: 0.8rem + @include noselect + +.app-footer__footer + clear: both + margin-top: 2rem + min-width: 100% + background-color: #2f3241 + color: #74b1be + position: fixed + bottom: 0 + left: 0 + right: 0 + z-index: 9 + text-align: center + height: 2rem + width: 100% + padding: 0.2rem + display: flex + justify-content: center + +.app-footer__footer-link + color: #74b1be + text-decoration: none + cursor: pointer !important diff --git a/src/sass/_app-navigation.sass b/src/sass/_app-navigation.sass index 86c9012..8657d7f 100644 --- a/src/sass/_app-navigation.sass +++ b/src/sass/_app-navigation.sass @@ -1,4 +1,5 @@ .app-navigation .nav-item background-color: #2f3241 - color: #74b1be \ No newline at end of file + color: #74b1be + margin-left: 0.5rem \ No newline at end of file diff --git a/src/sass/_mixin.sass b/src/sass/_mixin.sass index 03fdf9c..ceafbe5 100644 --- a/src/sass/_mixin.sass +++ b/src/sass/_mixin.sass @@ -13,4 +13,5 @@ -moz-user-select: none -ms-user-select: none user-select: none - pointer-events: none \ No newline at end of file + pointer-events: none + \ No newline at end of file diff --git a/static/assets/CHECK_STEP_1.png b/static/assets/CHECK_STEP_1.png new file mode 100644 index 0000000000000000000000000000000000000000..a09fd746ef9aeb71bd46df48522ae9b91942703c GIT binary patch literal 40076 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 literal 0 HcmV?d00001 diff --git a/static/assets/CHECK_STEP_2.png b/static/assets/CHECK_STEP_2.png new file mode 100644 index 0000000000000000000000000000000000000000..5d77e58dc0868181de882c3dbb32c3c52db783a3 GIT binary patch literal 39527 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

W{?GtWzx*cD449cPMVRPg$IqqhSG)X*9 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 J@~&7s{y*jQIeGv9 literal 0 HcmV?d00001 diff --git a/static/index.html b/static/index.html index 90518e0..5ad7ffd 100644 --- a/static/index.html +++ b/static/index.html @@ -23,7 +23,5 @@

Template Generator

-
-
\ No newline at end of file diff --git a/tools/deploy.js b/tools/deploy.js index 52e9780..4d4a06f 100644 --- a/tools/deploy.js +++ b/tools/deploy.js @@ -4,6 +4,10 @@ const path = require('path'); const tmp = "./tmp/"; const root = "./"; +// get version from package.json +const pkg = require('./../package.json'); +const version = pkg.version; + function deleteFolderRecursive(path) { if (fs.existsSync(path)) { fs.readdirSync(path).forEach(function (file) { @@ -45,7 +49,7 @@ async function winInstaller() { outputDirectory: './tmp/build/installers/windows/', authors: 'Jonas Pfalzgraf', loadingGif: './static/assets/sgl.gif', - version: '1.0.0', + version: version, iconUrl: 'https://raw.githubusercontent.com/Social-graphics-library/Template-Generator/main/static/assets/sgl.ico', }); console.log('It worked!'); diff --git a/tools/updateVersion.js b/tools/updateVersion.js new file mode 100644 index 0000000..efef543 --- /dev/null +++ b/tools/updateVersion.js @@ -0,0 +1,36 @@ +const fs = require('fs'); + +var packageFile = "./package.json"; +var targetFile = "./src/model/info.ts"; + +fs.readFile(packageFile, 'utf8', (err, data) => { + if (err) { + console.error(err) + return + } + const pkg = JSON.parse(data) + + fs.readFile(targetFile, 'utf8', (err, target) => { + if (err) { + console.error(err) + return + } + + target = replaceLine(target, 'readonly _name', pkg.name); + target = replaceLine(target, 'readonly _version', pkg.version); + target = replaceLine(target, 'readonly _license', pkg.license); + target = replaceLine(target, 'readonly _author', pkg.author.name); + target = replaceLine(target, 'readonly _repository', pkg.repository.url); + target = replaceLine(target, 'readonly _homepage', pkg.homepage); + + fs.writeFile(targetFile, target, 'utf8', function (err) { + if (err) return console.log(err); + }); + }) +}) + +function replaceLine(target, searchString, pkg) { + let re = new RegExp('^.*' + searchString + '.*$', 'gm'); + target = target.replace(re, ' public ' + searchString + ': string = "' + pkg + '"'); + return target; +}