diff --git a/CHANGELOG.md b/CHANGELOG.md
index de400ba..d1a1baf 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -4,6 +4,23 @@ All notable changes to this project will be documented in this file. Each batch
It is a summary of changes that would be pertinent to the end user of the PGEtinker website. For a comprehensive history of changes made to the project, please refer to the repository's commit history.
+## 2024-06-17
+
+- Fixed [Issue #98](https://github.com/Moros1138/PGEtinker/issues/98)
+- Removed sponsor spot from navbar
+- Added normalize.css
+- Added link to Javid's youtube channel
+- Changed navbar menu, made ready for mobile
+- Added mobile menu
+- Added settings dialog
+- Changed dialog behavior, no more click anywhere!
+- Added toast notifications
+- Added Javid Mode to settings dialog
+- Added editor.inlayHints to settings dialog
+- Fixed browser tests, broke due to UI changes
+- Changed screenshot fail graphic (Thanks TechnicJelle)
+- Changed light theme, make dialogs easier on the eyes
+
## 2024-06-10
- Added language client automatic reconnect
diff --git a/app/Http/Controllers/PatreonController.php b/app/Http/Controllers/PatreonController.php
index 0281030..a9bd00a 100644
--- a/app/Http/Controllers/PatreonController.php
+++ b/app/Http/Controllers/PatreonController.php
@@ -49,14 +49,20 @@ function get_supporters(Request $request)
], 500);
}
- $supporters = Redis::get("supporters");
-
- if(isset($supporters))
+ try
+ {
+ $supporters = Redis::get("supporters");
+ if(isset($supporters))
+ {
+ $supporters = json_decode($supporters);
+ return $supporters;
+ }
+ }
+ catch(Exception $e)
{
- $supporters = json_decode($supporters);
- return $supporters;
+ Log::emergency("Patreon supporters cache failed. Redis");
}
-
+
return $this->getPatreonNames();
}
@@ -114,7 +120,15 @@ function getPatreonNames()
}
$supporters = ["supporters" => $supporters];
- Redis::set("supporters", json_encode($supporters, JSON_PRETTY_PRINT));
+
+ try
+ {
+ Redis::set("supporters", json_encode($supporters, JSON_PRETTY_PRINT));
+ }
+ catch(Exception $e)
+ {
+ Log::emergency("failed to set supporters cache. Redis");
+ }
return $supporters;
}
diff --git a/package-lock.json b/package-lock.json
index 9e4c487..bd2f28f 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -25,7 +25,9 @@
"monaco-editor": "npm:@codingame/monaco-vscode-editor-api@~5.1.1",
"monaco-editor-wrapper": "~5.1.1",
"monaco-languageclient": "~8.4.0",
+ "normalize-css": "^2.3.1",
"sass": "^1.75.0",
+ "toastify-js": "^1.12.0",
"typescript": "^5.4.5",
"vite": "^5.0",
"vscode": "npm:@codingame/monaco-vscode-api"
@@ -1074,12 +1076,12 @@
}
},
"node_modules/braces": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
- "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
+ "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
"dev": true,
"dependencies": {
- "fill-range": "^7.0.1"
+ "fill-range": "^7.1.1"
},
"engines": {
"node": ">=8"
@@ -1190,9 +1192,9 @@
"dev": true
},
"node_modules/fill-range": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
- "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
+ "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
"dev": true,
"dependencies": {
"to-regex-range": "^5.0.1"
@@ -1295,6 +1297,12 @@
"url": "https://github.com/sponsors/wooorm"
}
},
+ "node_modules/insert-css": {
+ "version": "0.0.0",
+ "resolved": "https://registry.npmjs.org/insert-css/-/insert-css-0.0.0.tgz",
+ "integrity": "sha512-PwixL1rVtKkM1gz43tEHwZ2sUOYmWB5zk/9YiEmOxERqjfIkkMY4jwrl3v3e9NLzblEdkBuMLiTLm/0sHMx4qA==",
+ "dev": true
+ },
"node_modules/is-binary-path": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
@@ -1537,6 +1545,16 @@
"node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
}
},
+ "node_modules/normalize-css": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/normalize-css/-/normalize-css-2.3.1.tgz",
+ "integrity": "sha512-70Lnkke3P+8ehu56S0M0yoUTgTve/rCrEncjdgPmKER/TLZMRa30rFLW7Yv3iGZldmGV4bGevGW47VOfZJbGyw==",
+ "deprecated": "see npm.im/normalize.css instead",
+ "dev": true,
+ "dependencies": {
+ "insert-css": "0.0.0"
+ }
+ },
"node_modules/normalize-path": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
@@ -1731,6 +1749,12 @@
"node": ">=8.0"
}
},
+ "node_modules/toastify-js": {
+ "version": "1.12.0",
+ "resolved": "https://registry.npmjs.org/toastify-js/-/toastify-js-1.12.0.tgz",
+ "integrity": "sha512-HeMHCO9yLPvP9k0apGSdPUWrUbLnxUKNFzgUoZp1PHCLploIX/4DSQ7V8H25ef+h4iO9n0he7ImfcndnN6nDrQ==",
+ "dev": true
+ },
"node_modules/tree-dump": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/tree-dump/-/tree-dump-1.0.1.tgz",
diff --git a/package.json b/package.json
index b766359..b602d98 100644
--- a/package.json
+++ b/package.json
@@ -26,7 +26,9 @@
"monaco-editor": "npm:@codingame/monaco-vscode-editor-api@~5.1.1",
"monaco-editor-wrapper": "~5.1.1",
"monaco-languageclient": "~8.4.0",
+ "normalize-css": "^2.3.1",
"sass": "^1.75.0",
+ "toastify-js": "^1.12.0",
"typescript": "^5.4.5",
"vite": "^5.0",
"vscode": "npm:@codingame/monaco-vscode-api"
diff --git a/resources/css/app.scss b/resources/css/app.scss
index 2c3f628..4496f9e 100644
--- a/resources/css/app.scss
+++ b/resources/css/app.scss
@@ -1,5 +1,6 @@
@import "./pixel-code.scss";
-@import "./loading.scss";
+@import "./app/loading.scss";
+@import "toastify-js/src/toastify.css";
body {
--pgetinker-link-color: #ff6500;
@@ -10,7 +11,7 @@ body {
--pgetinker-text-shadow-color: #000;
--pgetinker-menu-text-color: #ded;
- --pgetinker-menu-background: #f1f1f1;
+ --pgetinker-menu-background: #3e3c44;
--pgetinker-menu-hover-background:#a86326;
--pgetinker-menu-hover-text-color: #ded;
@@ -32,11 +33,11 @@ body.light {
--pgetinker-background-color: #fff;
--pgetinker-text-color:#000;
- --pgetinker-text-shadow-color: #fff;
+ --pgetinker-text-shadow-color: none;
+ --pgetinker-menu-text-color: #424242;
--pgetinker-menu-background: #f1f1f1;
--pgetinker-menu-hover-background:#f70;
- --pgetinker-menu-text-color: #424242;
--pgetinker-menu-hover-text-color: #ded;
--pgetinker-submenu-background: #f1f1f1;
@@ -46,8 +47,8 @@ body.light {
--pgetinker-content-border-color: #8c909d;
- --pgetinker-dialog-background-color:#dee4ff;
- --pgetinker-dialog-text-color:rgb(56, 56, 56);
+ --pgetinker-dialog-background-color:#fff;
+ --pgetinker-dialog-text-color:#000;
--pgetinker-dialog-border-color: #444;
}
@@ -75,6 +76,10 @@ a:hover {
text-decoration: underline;
}
+a:focus {
+ outline: none;
+}
+
#app {
position: absolute;
top: 0;
@@ -83,163 +88,56 @@ a:hover {
height: 100%;
background: var(--pgetinker-background-color);
color: var(--pgetinker-text-color);
-}
-
-#header {
- position: absolute;
- display: block;
- top: 0;
- left: 0;
- width: 100%;
- height: 48px;
- z-index: 100;
-}
-
-nav a.brand,
-nav a.brand img {
- display: block;
- width: auto;
- height: 48px;
- float: left;
-}
-
-nav a.brand:hover,
-nav a.brand:link,
-nav a.brand:active,
-nav a.brand:visited {
- display: inline-block;
- line-height: 47px;
- padding: 0 .8rem;
- text-decoration: none;
- font-size: 3rem;
- color: var(--pgetinker-link-color);
- text-shadow: .2rem .2rem .2rem #000;
-}
-
-
-a:active.menu-item,
-a:link.menu-item,
-a:visited.menu-item,
-.menu-item {
- display: inline-block;
- background-color: var(--pgetinker-background-color);
- color: var(--pgetinker-menu-text-color);
- font-size: 1.2rem;
- letter-spacing: 1px;
- text-shadow: .2rem .2rem .5rem var(--pgetinker-text-shadow-color);
- height: 48px;
- line-height: 48px;
- vertical-align: middle;
- padding: 0 .4rem;
- border: none;
- cursor: pointer;
- text-decoration: none;
-}
-
-
-.lucide {
- vertical-align: middle;
- filter: drop-shadow(.2rem .2rem .1rem var(--pgetinker-text-shadow-color));
-}
-
-nav .sponsor {
- line-height: 47px;
- padding: 0;
- margin-right: .5rem;
- font-size: 0.8rem;
- text-shadow: .1rem .1rem .2rem var(--pgetinker-text-shadow-color);
- white-space: nowrap;
-}
-.sponsor a {
- text-decoration: none;
+ #header {
+ position: absolute;
+ display: block;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 48px;
+ z-index: 100;
+ }
+
+ #content {
+ position: absolute;
+ top: 49px;
+ bottom: 0px;
+ width: 100%;
+ overflow: hidden;
+ margin: 0;
+ padding: 0;
+ border-top: 1px solid var(--pgetinker-content-border-color);
+ border-bottom: 1px solid var(--pgetinker-content-border-color);
+ }
}
-.sponsor a:hover {
- text-decoration: underline;
-}
-
-.dropdown {
- position: relative;
- display: inline-block;
-}
-
-.dropdown-content {
- display: none;
- position: absolute;
- background-color: var(--pgetinker-submenu-background);
- box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.2);
- z-index: 1;
- white-space: nowrap;
- border-top: 1px solid var(--pgetinker-content-border-color);
-}
-
-.dropdown-content a {
- font-size: 1.2rem;
- text-shadow: .2rem .2rem .5rem var(--pgetinker-text-shadow-color);
- color: var(--pgetinker-submenu-text-color);
- padding: 12px 16px;
- text-decoration: none;
- display: block;
-}
-
-.dropdown-content a:hover {
- background-color: var(--pgetinker-submenu-hover-background);
-}
-
-.dropdown:hover .dropdown-content {
- display: block;
-}
-
-a:hover.menu-item,
-.menu-item:hover,
-.dropdown:hover .menu-item {
- background-color: var(--pgetinker-menu-hover-background);
-}
-
-/* differentiate between left menus and right menus */
-nav .navbar-left-menu {
- float: left;
-}
-
-nav .navbar-right-menu {
- float: right;
+.center {
+ text-align: center;
}
-nav .navbar-right-menu .dropdown-content {
- right: 0;
-}
-nav .navbar-right-menu .menu-item {
- margin-top: -3px;
+.display-block {
+ display: block !important;
}
-#content {
- position: absolute;
- top: 49px;
- bottom: 0px;
- width: 100%;
- overflow: hidden;
- margin: 0;
- padding: 0;
- border-top: 1px solid var(--pgetinker-content-border-color);
- border-bottom: 1px solid var(--pgetinker-content-border-color);
-}
-
-.center {
- text-align: center;
+.display-flex {
+ display: flex !important;
}
.hidden { display: none; }
-@import "./console-panel.scss";
-@import "./compiler-output-panel.scss";
-@import "./editor-panel.scss";
-@import "./player-panel.scss";
-@import "./problems-panel.scss";
-@import "./dialog.scss";
-
-@import "./responsive.scss";
-
.lm_content {
overflow: visible !important;
}
+
+@import "./app/dialog.scss";
+@import "./app/mobile-menu-dialog.scss";
+@import "./app/navbar.scss";
+@import "./app/settings-dialog.scss";
+@import "./app/toasts.scss";
+@import "./app/components/CompilerOutputPanel.scss";
+@import "./app/components/ConsolePanel.scss";
+@import "./app/components/EditorPanel.scss";
+@import "./app/components/PlayerPanel.scss";
+@import "./app/components/ProblemsPanel.scss";
+@import "./app/responsive.scss";
diff --git a/resources/css/app/components/CompilerOutputPanel.scss b/resources/css/app/components/CompilerOutputPanel.scss
new file mode 100644
index 0000000..90b6856
--- /dev/null
+++ b/resources/css/app/components/CompilerOutputPanel.scss
@@ -0,0 +1,18 @@
+#compiler-output-panel {
+ position: absolute;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ overflow: auto;
+
+ & > div {
+ font-family: "Droid Sans Mono", "monospace", monospace;
+ width: 100%;
+ white-space: pre-wrap; /* Since CSS 2.1 */
+ white-space: -moz-pre-wrap; /* Mozilla, since 1999 */
+ white-space: -pre-wrap; /* Opera 4-6 */
+ white-space: -o-pre-wrap; /* Opera 7 */
+ word-wrap: break-word; /* Internet Explorer 5.5+ */
+ }
+}
diff --git a/resources/css/console-panel.scss b/resources/css/app/components/ConsolePanel.scss
similarity index 84%
rename from resources/css/console-panel.scss
rename to resources/css/app/components/ConsolePanel.scss
index a15e6d0..091689e 100644
--- a/resources/css/console-panel.scss
+++ b/resources/css/app/components/ConsolePanel.scss
@@ -6,6 +6,11 @@
bottom: 0;
overflow: auto;
padding: 1rem 1rem 2rem 1rem;
+
+ & div {
+ white-space: pre;
+ font-family: "Droid Sans Mono", "monospace", monospace;
+ }
}
#console-auto-scroll {
@@ -26,7 +31,3 @@
background-color: var(--pgetinker-link-hover-color);
}
-#console-panel div {
- white-space: pre;
- font-family: "Droid Sans Mono", "monospace", monospace;
-}
diff --git a/resources/css/app/components/EditorPanel.scss b/resources/css/app/components/EditorPanel.scss
new file mode 100644
index 0000000..1735052
--- /dev/null
+++ b/resources/css/app/components/EditorPanel.scss
@@ -0,0 +1,52 @@
+#editor-panel {
+ position: relative;
+ width: 100%;
+ height: 100%;
+ overflow: visible;
+
+ .code-editor {
+ position: absolute;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 1.2rem;
+ }
+
+ .status {
+ position: absolute;
+ left: 0;
+ right: 0;
+ bottom: 0px;
+ height: 1.2rem;
+ line-height: 1.2rem;
+ font-size: 0.8rem;
+ color: var(--pgetinker-text-color);
+ border-top: 1px solid var(--pgetinker-content-border-color);
+ padding-left: 1rem;
+ padding-right: 1rem;
+
+ .status-left {
+ float: left;
+ padding-left: 0.5rem;
+
+ span {
+ padding-left: 1rem;
+ }
+ }
+
+ .status-right {
+ float: right;
+ padding-right: 0.5rem;
+
+ span {
+ padding-right: 1rem;
+ }
+ }
+
+ &.too-fucking-big {
+ background: #f00;
+ color: #ff0;
+ font-weight: bolder;
+ }
+ }
+}
diff --git a/resources/css/app/components/PlayerPanel.scss b/resources/css/app/components/PlayerPanel.scss
new file mode 100644
index 0000000..a4fbffc
--- /dev/null
+++ b/resources/css/app/components/PlayerPanel.scss
@@ -0,0 +1,62 @@
+#player-panel {
+ border: none;
+ display: block;
+ height: 100%;
+ width: 100%;
+
+ .compiling {
+ align-items: center;
+ display: none;
+ flex-flow: column;
+ height: 100%;
+ justify-content: center;
+ left: 0;
+ position: absolute;
+ top: 0;
+ width: 100%;
+ }
+
+ .compiling-failed {
+ align-items: center;
+ color: #f00;
+ display: none;
+ flex-flow: column;
+ height: 100%;
+ justify-content: center;
+ left: 0;
+ position: absolute;
+ top: 0;
+ width: 100%;
+
+ p {
+ margin-top: .5rem;
+ }
+
+ svg {
+ display: block;
+ height: 69px;
+ padding-bottom: 1rem;
+ width: 69px;
+ }
+ }
+
+ .iframe-container {
+ border: none;
+ display: block;
+ height: 100%;
+ width: 100%;
+
+ iframe {
+ align-items: center;
+ border: none;
+ display: none;
+ flex-flow: column;
+ height: 100%;
+ justify-content: center;
+ left: 0;
+ position: absolute;
+ top: 0;
+ width: 100%;
+ }
+ }
+}
diff --git a/resources/css/problems-panel.scss b/resources/css/app/components/ProblemsPanel.scss
similarity index 100%
rename from resources/css/problems-panel.scss
rename to resources/css/app/components/ProblemsPanel.scss
diff --git a/resources/css/app/dialog.scss b/resources/css/app/dialog.scss
new file mode 100644
index 0000000..9b956a2
--- /dev/null
+++ b/resources/css/app/dialog.scss
@@ -0,0 +1,188 @@
+.dialog
+{
+ position: absolute;
+ display: block;
+ width: 100%;
+ height: 100%;
+ left: 0;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ background: rgba(0, 0, 0, 0.9);
+ z-index: 9999;
+ padding: 0;
+ overflow: hidden;
+ overflow-y: auto;
+
+ .window {
+ width: 90vw;
+ max-width: 80rem;
+ margin: 10vh auto;
+ background: var(--pgetinker-dialog-background-color);
+ font-size: 1.2rem;
+ color: var(--pgetinker-dialog-text-color);
+ border: 1px solid var(--pgetinker-dialog-border-color);
+ border-radius: 0.4rem;
+
+ & > .header {
+ border-bottom: 1px solid var(--pgetinker-dialog-border-color);
+ padding: 0.4rem 1rem;
+ font-weight: bold;
+ font-size: 2rem;
+ }
+
+ & > .content {
+ padding: 1rem;
+ }
+
+ & > .footer {
+ border-top: 1px solid var(--pgetinker-dialog-border-color);
+ padding: 0.4rem 1rem;
+ text-align: right;
+
+ button {
+ margin-left: 0.5rem;
+ border: none;
+ padding: 0.4rem 1rem;
+ border-radius: 0.2rem;
+
+ &.ok {
+ background: #0D6EFD;
+ color: #fff;
+ font-weight: bold;
+ }
+
+ &.ok:hover {
+ background: #0B5ED7;
+ color: #fff;
+ }
+
+ &.cancel {
+ background: #DC3545;
+ color: #fff;
+ font-weight: bold;
+ }
+
+ &.cancel:hover {
+ background: #BB2D3B;
+ color: #fff;
+ }
+ }
+ }
+ }
+}
+
+.first-time {
+ .window {
+ .content {
+ ul {
+ padding-left: 1rem;
+ }
+
+ li {
+ padding-bottom: 1rem;
+ }
+ }
+ }
+}
+
+.share-dialog {
+ .window > .content {
+ img {
+ display: block;
+ width: auto;
+ max-width: 100%;
+ height: auto;
+ max-height: 30rem;
+ margin: 2rem auto;
+ }
+
+ .input-group {
+ display: flex;
+ margin-top: 1rem;
+ justify-content: center;
+
+ label {
+ border-radius: 0.4rem 0rem 0rem 0.4rem;
+ border: 1px solid #000;
+ background: #4d4d4d;
+ color: #ffffff;
+ padding: 0.4rem;
+ }
+
+ input[type=text] {
+ border-radius: none;
+ border: 1px solid #000;
+ flex-grow: 3;
+ }
+
+ button {
+ border-radius: 0rem 0.4rem 0.4rem 0rem;
+ border: 1px solid #000;
+ margin: 0;
+ padding: 0.4rem 1rem;
+ }
+ }
+ }
+}
+
+.news {
+ .entries {
+ margin: 1rem 0 3rem 0;
+ div {
+ margin-bottom: 1rem;
+
+ &.added:before {
+ content: "+ Added: ";
+ color: rgb(34, 167, 172);
+ }
+
+ &.removed:before {
+ content: "‐ Removed: ";
+ color: rgb(248, 102, 102);
+ }
+
+ &.fixed:before {
+ content: "✔ Fixed: ";
+ color: rgb(184, 184, 50);
+ }
+
+ &.changed:before {
+ content: "✔ Changed: ";
+ color: rgb(127, 192, 133);
+ }
+ }
+ }
+}
+
+.supporters {
+ .window > .content {
+ a {
+ display: block;
+ text-align: center;
+ margin-top: 2rem;
+ margin-bottom: 1rem;
+ font-size: 2.5rem;
+ }
+
+ h3 {
+ text-align: center;
+ font-size: 2rem;
+ // text-decoration: underline;
+ padding-bottom: 1rem;
+ border-bottom: 4px solid var(--pgetinker-dialog-text-color);
+ }
+ .names {
+ display: flex;
+ width: 100%;
+ flex-direction: column;
+ justify-content: center;
+ align-items: center;
+
+ .name {
+ padding: .5rem 2rem;
+ font-size: 2.5rem;
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/resources/css/goldenlayout-base.scss b/resources/css/app/goldenlayout-base.scss
similarity index 100%
rename from resources/css/goldenlayout-base.scss
rename to resources/css/app/goldenlayout-base.scss
diff --git a/resources/css/goldenlayout-dark-theme.scss b/resources/css/app/goldenlayout-dark-theme.scss
similarity index 100%
rename from resources/css/goldenlayout-dark-theme.scss
rename to resources/css/app/goldenlayout-dark-theme.scss
diff --git a/resources/css/goldenlayout-light-theme.scss b/resources/css/app/goldenlayout-light-theme.scss
similarity index 100%
rename from resources/css/goldenlayout-light-theme.scss
rename to resources/css/app/goldenlayout-light-theme.scss
diff --git a/resources/css/loading.scss b/resources/css/app/loading.scss
similarity index 100%
rename from resources/css/loading.scss
rename to resources/css/app/loading.scss
diff --git a/resources/css/app/mobile-menu-dialog.scss b/resources/css/app/mobile-menu-dialog.scss
new file mode 100644
index 0000000..bc95385
--- /dev/null
+++ b/resources/css/app/mobile-menu-dialog.scss
@@ -0,0 +1,39 @@
+.dialog .menu,
+.dialog .submenu {
+ list-style-type: none;
+ padding: 0 !important;
+}
+
+.dialog .item,
+.dialog .subitem {
+ padding: .0rem 1rem;
+}
+
+.dialog .has-submenu > a:link,
+.dialog .has-submenu > a:active,
+.dialog .has-submenu > a:visited,
+.dialog .has-submenu > a:hover,
+.dialog .has-submenu > a {
+ border-bottom: 1px solid white;
+ border-top: 1px solid white;
+ color: var(--pgetinker-menu-text-color);
+ display: block;
+ font-size: 1.6rem;
+ margin: 1rem 0;
+ padding: .4rem 1rem;
+ text-align: center;
+ text-decoration: none;
+}
+
+.dialog .subitem > a {
+ background-color: var(--pgetinker-menu-background);
+ border: 1px solid var(--pgetinker-menu-text-color);
+ border-radius: .6rem;
+ color: var(--pgetinker-menu-text-color);
+ cursor: pointer;
+ display: block;
+ font-size: 1.4rem;
+ margin: 1rem 0;
+ padding: .6rem 1rem;
+ text-align: center;
+}
\ No newline at end of file
diff --git a/resources/css/app/navbar.scss b/resources/css/app/navbar.scss
new file mode 100644
index 0000000..02e3d89
--- /dev/null
+++ b/resources/css/app/navbar.scss
@@ -0,0 +1,137 @@
+#header {
+ nav {
+ display: flex;
+ justify-content: space-between;
+
+ .menu {
+ display: flex;
+ flex-flow: row;
+ justify-content:flex-start;
+ align-items: center;
+ list-style-type: none;
+ padding: 0;
+ margin: 0;
+
+ &.right-menu {
+ justify-content: flex-end;
+ }
+
+ .brand {
+ a:hover,
+ a:link,
+ a:active,
+ a:visited {
+ display: inline-block;
+ line-height: 48px;
+ padding: 0 .8rem;
+ text-decoration: none;
+ font-size: 3rem;
+ color: var(--pgetinker-link-color);
+ text-shadow: .2rem .2rem .2rem #000;
+ }
+ }
+
+ .item {
+ a,
+ a:active,
+ a:link,
+ a:visited {
+ background-color: var(--pgetinker-background-color);
+ border: none;
+ color: var(--pgetinker-menu-text-color);
+ cursor: pointer;
+ display: block;
+ font-size: 1.2rem;
+ height: 48px;
+ letter-spacing: 1px;
+ line-height: 48px;
+ padding: 0 .4rem;
+ text-decoration: none;
+ text-shadow: .2rem .2rem .5rem var(--pgetinker-text-shadow-color);
+ }
+
+ a:hover {
+ background-color: var(--pgetinker-menu-hover-background);
+ }
+
+ &.has-submenu {
+ position: relative;
+ }
+
+ .submenu {
+ background-color: var(--pgetinker-submenu-background);
+ border-top: 1px solid var(--pgetinker-content-border-color);
+ box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.2);
+ display: none;
+ list-style-type: none;
+ position: absolute;
+ margin: 0;
+ padding: 0;
+ white-space: nowrap;
+ z-index: 1;
+
+ .subitem {
+ a {
+ display: block;
+ color: var(--pgetinker-submenu-text-color);
+ font-size: 1.2rem;
+ text-decoration: none;
+ text-shadow: .2rem .2rem .5rem var(--pgetinker-text-shadow-color);
+ padding: .0rem 1rem;
+ }
+ a:hover {
+ background-color: var(--pgetinker-submenu-hover-background);
+ }
+ }
+ }
+
+ &.has-submenu:hover .submenu {
+ display: block;
+ }
+ }
+
+ &.right-menu .has-submenu .submenu {
+ left: auto;
+ right: 0;
+ }
+
+ .separator {
+ display: none;
+ flex-grow: 1;
+ }
+ }
+ }
+
+ .lucide {
+ vertical-align: middle;
+ filter: drop-shadow(.2rem .2rem .1rem var(--pgetinker-text-shadow-color));
+ }
+}
+
+@media screen and (max-width: 750px) {
+ #header {
+ nav {
+ .menu {
+ &.left-menu {
+ width: 100%;
+ }
+
+ #settings-menu {
+ order: 1;
+ }
+
+ &.right-menu {
+ display: none;
+ }
+
+ .item span {
+ display: none;
+ }
+
+ .separator {
+ display: block;
+ }
+ }
+ }
+ }
+}
diff --git a/resources/css/app/responsive.scss b/resources/css/app/responsive.scss
new file mode 100644
index 0000000..e69de29
diff --git a/resources/css/app/settings-dialog.scss b/resources/css/app/settings-dialog.scss
new file mode 100644
index 0000000..d66d6e6
--- /dev/null
+++ b/resources/css/app/settings-dialog.scss
@@ -0,0 +1,50 @@
+.settings-dialog {
+
+ .content {
+ font-family: "Droid Sans Mono", "monospace", monospace;
+
+ button {
+ width: 100%;
+ margin: .6rem 0;
+ padding: .4rem;
+ }
+
+ select {
+ width: 100%;
+ margin: .6rem 0;
+ padding: .4rem;
+ }
+ }
+
+ .form-group {
+ padding: 1rem;
+ .form-label {
+ font-weight: bold;
+ font-size: 1.4rem;
+ margin-bottom: .6rem;
+ }
+
+ .form-description {
+ padding: .6rem 0;
+ }
+
+ input[type="checkbox"] {
+ display: inline-block;
+ width: 1.6rem;
+ height: 1.6rem;
+ }
+
+ label {
+ display: block;
+ font-size: 1.2rem;
+ line-height: 1.6rem;
+ }
+ }
+
+ .form-group:hover {
+ border: 1px solid rgba(0, 0, 255,0.7);
+ margin: -1px;
+ }
+
+
+}
\ No newline at end of file
diff --git a/resources/css/app/toasts.scss b/resources/css/app/toasts.scss
new file mode 100644
index 0000000..25b45a4
--- /dev/null
+++ b/resources/css/app/toasts.scss
@@ -0,0 +1,25 @@
+.toastify {
+ text-shadow: 1px 1px 0px #000;
+ font-weight: bold;
+ &.danger {
+ background: #bd0000;
+ color: #fff;
+ }
+
+ &.warning {
+ background: #a86326;
+ color: #fff;
+ }
+
+ &.info {
+ background: #02cece;
+ color: #fff;
+
+ }
+
+ &.success {
+ background: #01b301;
+ color: #fff;
+ }
+}
+
diff --git a/resources/css/compiler-output-panel.scss b/resources/css/compiler-output-panel.scss
deleted file mode 100644
index a9e7a81..0000000
--- a/resources/css/compiler-output-panel.scss
+++ /dev/null
@@ -1,18 +0,0 @@
-#compiler-output-panel {
- position: absolute;
- top: 0;
- left: 0;
- right: 0;
- bottom: 0;
- overflow: auto;
-}
-
-#compiler-output-panel > div {
- font-family: "Droid Sans Mono", "monospace", monospace;
- width: 100%;
- white-space: pre-wrap; /* Since CSS 2.1 */
- white-space: -moz-pre-wrap; /* Mozilla, since 1999 */
- white-space: -pre-wrap; /* Opera 4-6 */
- white-space: -o-pre-wrap; /* Opera 7 */
- word-wrap: break-word; /* Internet Explorer 5.5+ */
-}
diff --git a/resources/css/dialog.scss b/resources/css/dialog.scss
deleted file mode 100644
index 93ace2c..0000000
--- a/resources/css/dialog.scss
+++ /dev/null
@@ -1,171 +0,0 @@
-.dialog
-{
- position: absolute;
- display: block;
- width: 100%;
- height: 100%;
- left: 0;
- top: 0;
- right: 0;
- bottom: 0;
- background: rgba(0, 0, 0, 0.8);
- z-index: 9999;
- padding: 0;
- overflow: hidden;
- overflow-y: auto;
-}
-
-.dialog .window {
- width: 90vw;
- max-width: 80rem;
- margin: 10vh auto;
- background: var(--pgetinker-dialog-background-color);
- font-size: 1.2rem;
- color: var(--pgetinker-dialog-text-color);
- border: 1px solid var(--pgetinker-dialog-border-color);
- border-radius: 0.4rem;
-}
-
-.dialog .window > .header {
- border-bottom: 1px solid var(--pgetinker-dialog-border-color);
- padding: 0.4rem 1rem;
- font-weight: bold;
- font-size: 2rem;
-}
-
-.dialog .window > .content {
- padding: 1rem;
-}
-
-.dialog .window > .footer {
- border-top: 1px solid var(--pgetinker-dialog-border-color);
- padding: 0.4rem 1rem;
- text-align: right;
-}
-
-.dialog .window .footer button {
- margin-left: 0.5rem;
- border: none;
- padding: 0.4rem 1rem;
- border-radius: 0.2rem;
-}
-.dialog .window > .content img {
- display: block;
- width: auto;
- height: 30rem;
- margin: 2rem auto;
-}
-.ok {
- background: #0D6EFD;
- color: var(--pgetinker-dialog-text-color);
- font-weight: bold;
-}
-
-.ok:hover {
- background: #0B5ED7;
- color: var(--pgetinker-dialog-text-color);
-}
-
-.cancel {
- background: #DC3545;
- color: var(--pgetinker-dialog-text-color);
- font-weight: bold;
-}
-
-.cancel:hover {
- background: #BB2D3B;
- color: var(--pgetinker-dialog-text-color);
-}
-
-.input-group {
- display: flex;
- margin-top: 1rem;
- justify-content: center;
-}
-
-.input-group label {
- border-radius: 0.4rem 0rem 0rem 0.4rem;
- border: 1px solid #000;
- background: #4d4d4d;
- color: #ffffff;
- padding: 0.4rem;
-}
-
-.input-group input[type=text] {
- border-radius: none;
- border: 1px solid #000;
- flex-grow: 3;
-}
-
-.input-group button {
- border-radius: 0rem 0.4rem 0.4rem 0rem;
- border: 1px solid #000;
- margin: 0;
- padding: 0.4rem 1rem;
-}
-
-.dialog .window ul {
- padding-left: 1rem;
-}
-
-.dialog .window li {
- padding-bottom: 1rem;
-}
-
-.dialog.news .entries {
- margin: 1rem 0 3rem 0;
-}
-
-.dialog.news .entries div {
- margin-bottom: 1rem;
-}
-
-.dialog.news .added:before {
- content: "+ Added: ";
- color: rgb(92, 250, 255);
-}
-
-.dialog.news .removed:before {
- content: "‐ Removed: ";
- color: rgb(248, 102, 102);
-}
-
-.dialog.news .fixed:before {
- content: "✔ Fixed: ";
- color: rgb(252, 252, 170);
-}
-
-.dialog.news .changed:before {
- content: "✔ Changed: ";
- color: rgb(170, 252, 177);
-}
-
-.dialog.supporters h3 {
- text-align: center;
- font-size: 2rem;
- // text-decoration: underline;
- padding-bottom: 1rem;
- border-bottom: 4px solid var(--pgetinker-dialog-text-color);
-}
-
-.dialog.supporters .names {
- display: flex;
- width: 100%;
- flex-direction: column;
- justify-content: center;
- // justify-items: center;
- align-items: center;
-}
-
-.dialog.supporters .names .name {
- padding: .5rem 2rem;
- font-size: 2.5rem;
-}
-
-.dialog.supporters a {
- display: block;
- text-align: center;
- margin-top: 2rem;
- margin-bottom: 1rem;
- font-size: 2.5rem;
-}
\ No newline at end of file
diff --git a/resources/css/editor-panel.scss b/resources/css/editor-panel.scss
deleted file mode 100644
index 8e557f9..0000000
--- a/resources/css/editor-panel.scss
+++ /dev/null
@@ -1,52 +0,0 @@
-#editor-panel {
- position: relative;
- width: 100%;
- height: 100%;
- overflow: visible;
-}
-
-#editor-panel .code-editor {
- position: absolute;
- top: 0;
- left: 0;
- right: 0;
- bottom: 1.2rem;
-}
-
-#editor-panel .status {
- position: absolute;
- left: 0;
- right: 0;
- bottom: 0px;
- height: 1.2rem;
- line-height: 1.2rem;
- font-size: 0.8rem;
- color: var(--pgetinker-text-color);
- border-top: 1px solid var(--pgetinker-content-border-color);
- padding-left: 1rem;
- padding-right: 1rem;
-}
-
-#editor-panel .status-left {
- float: left;
- padding-left: 0.5rem;
-}
-
-#editor-panel .status-right {
- float: right;
- padding-right: 0.5rem;
-}
-
-#editor-panel .status-left span {
- padding-left: 1rem;
-}
-
-#editor-panel .status-right span {
- padding-right: 1rem;
-}
-
-.too-fucking-big {
- background: #f00;
- color: #ff0;
- font-weight: bolder;
-}
diff --git a/resources/css/light.scss b/resources/css/light.scss
deleted file mode 100644
index 7909bf1..0000000
--- a/resources/css/light.scss
+++ /dev/null
@@ -1,48 +0,0 @@
-body.light {
- background: #fff;
- color: #000;
-}
-
-body.light a:link, body.light a:visited, body.light a:active {
- color: #770;
-}
-
-body.light a:hover {
- color: #f70;
-}
-
-
-body.light #app,
-body.light #player-panel div.loading {
- background: #fff;
- color: #000;
-}
-
-body.light #info-panel a:active,
-body.light #info-panel a:link,
-body.light #info-panel a:visited {
- color:rgb(196, 99, 99);
- text-decoration: none;
-}
-
-body.light .dialog .window {
- border: 1px solid #333;
- border-radius: 0.4rem;
- background: #fff;
- color: #000;
-}
-
-body.light .dialog .window > .content {
- border-top: 1px solid #333;
- border-bottom: 1px solid #333;
-}
-
-
-body.light .dialog .window > .content .first-time-dialog h2 {
- border-bottom: 2px solid #000;
-}
-
-body.light .dialog .window > .content .first-time-dialog .variable .name {
- background: #ddd;
-}
-
diff --git a/resources/css/normalize.scss b/resources/css/normalize.scss
new file mode 100644
index 0000000..217b764
--- /dev/null
+++ b/resources/css/normalize.scss
@@ -0,0 +1 @@
+@import "normalize-css/normalize.css"
diff --git a/resources/css/player-panel.scss b/resources/css/player-panel.scss
deleted file mode 100644
index 4733223..0000000
--- a/resources/css/player-panel.scss
+++ /dev/null
@@ -1,71 +0,0 @@
-#player-panel,
-#player-panel .iframe-container,
-#player-panel .iframe-container iframe {
- display: block;
- width: 100%;
- height: 100%;
- border: none;
-}
-#player-panel .iframe-container iframe,
-#player-panel .compiling,
-#player-panel .compiling-failed {
- display: none;
- position: absolute;
- top: 0;
- left: 0;
- width: 100%;
- height: 100%;
- justify-content: center;
- align-items: center;
- flex-flow:column;
-}
-
-#player-panel .compiling-failed svg {
- display: block;
- width: 69px;
- height: 69px;
- padding-bottom: 1rem;
-
-}
-
-.display-block {
- display: block !important;
-}
-
-.display-flex {
- display: flex !important;
-}
-
-#player-panel .compiling-failed {
- color: #f00;
-}
-
-#player-panel .compiling-failed p {
- margin-top: .5rem;
-}
-
-
-
-// #player-panel div {
-// display: none;
-// position: absolute;
-// top: 0;
-// left: 0;
-// bottom: 0;
-// right: 0;
-// }
-
-// #player-panel div.loading {
-// display: block;
-// background: #222;
-// }
-
-// #player-panel div.compiling {
-// display: block;
-// background: #080;
-// }
-
-// #player-panel div.fail {
-// display: block;
-// background: #800;
-// }
diff --git a/resources/css/responsive.scss b/resources/css/responsive.scss
deleted file mode 100644
index 18ebec7..0000000
--- a/resources/css/responsive.scss
+++ /dev/null
@@ -1,12 +0,0 @@
-@media screen and (max-width: 1320px) {
- nav .navbar-right-menu .sponsor {
- display: none;
- }
-}
-
-@media screen and (max-width: 750px) {
- #settings-menu,
- nav .navbar-right-menu {
- display: none;
- }
-}
diff --git a/resources/images/screenshot-fail.png b/resources/images/screenshot-fail.png
index 9a17bae..ed1c08b 100644
Binary files a/resources/images/screenshot-fail.png and b/resources/images/screenshot-fail.png differ
diff --git a/resources/images/screenshot-fail.svg b/resources/images/screenshot-fail.svg
index 9430d9a..dfc9fe8 100644
--- a/resources/images/screenshot-fail.svg
+++ b/resources/images/screenshot-fail.svg
@@ -28,8 +28,8 @@
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="px"
inkscape:zoom="2.8436027"
- inkscape:cx="162.11829"
- inkscape:cy="116.04997"
+ inkscape:cx="163.52495"
+ inkscape:cy="105.1483"
inkscape:window-width="1920"
inkscape:window-height="1002"
inkscape:window-x="1920"
@@ -38,8 +38,8 @@
inkscape:current-layer="layer1" />