From eb54e2d644e6c80761661cf7136d91b14f681db8 Mon Sep 17 00:00:00 2001
From: David Neumann
Date: Thu, 9 Apr 2026 21:28:47 -0500
Subject: [PATCH 01/13] Updated cards.js with emoji faces + fangs
---
js/cards.js | 131 +++++++++++++++++++++++++++++++++++-----------------
1 file changed, 88 insertions(+), 43 deletions(-)
diff --git a/js/cards.js b/js/cards.js
index da2cdea..9d99842 100644
--- a/js/cards.js
+++ b/js/cards.js
@@ -19,49 +19,94 @@ function dnm(canv,x,y,sz,nm,c){
ctx.font = sz+"px Arial";
ctx.fillText(Number.isInteger(nm) ? nm:nm.toUpperCase(), x-(sz/2), y+(sz/2));
}
-function dsh(canv,x,y,sz,s){
- var ctx = canv.getContext("2d");
- if (s=='c' || s=='t') { c=1; }
- if (s=='d' || s=='s') { c=2; }
- if (s==1 || s=='c') {
- //draw circle
- ctx.beginPath();
- ctx.arc(x, y,sz/2, 0, 2 * Math.PI);
- ctx.fillStyle = c==1 ? "red" : 'black';
- ctx.fill();
- ctx.stroke();
- }
- if (s==2 || s=='s') {
- //draw square
- ctx.beginPath();
- ctx.rect(x - (sz/2), y - (sz/2),sz,sz);
- ctx.fillStyle = c==1 ? "red" : 'black';
- ctx.fill();
- ctx.stroke();
- }
- if (s==3 || s=='d') {
- //draw diamond
- ctx.beginPath();
- ctx.moveTo(x, y-(sz/2));
- ctx.lineTo(x - sz/2, y);
- ctx.lineTo(x, y+(sz/2));
- ctx.lineTo(x + sz/2, y);
- ctx.closePath();
- ctx.fillStyle = c==1 ? "red" : 'black';
- ctx.fill();
- ctx.stroke();
- }
- if (s==4 || s=='t') {
- //draw triangle
- ctx.beginPath();
- ctx.moveTo(x, y-(sz/2));
- ctx.lineTo(x-(sz/2), y+(sz/2));
- ctx.lineTo(x+(sz/2), y+(sz/2));
- ctx.closePath();
- ctx.fillStyle = c==1 ? "red" : 'black';
- ctx.fill();
- ctx.stroke();
- }
+
+function dsh(canv, x, y, sz, s) {
+ const ctx = canv.getContext("2d");
+
+ // Colors
+ const yellow = "#F2D000";
+ const green = "#4AA000";
+ const outline = "#000000";
+
+ // Suit → face mapping
+ // c = hearts → smiley
+ // t = clubs → kissy
+ // s = spades → mr yuck
+ // d = diamonds → evil grin
+
+ let fill;
+ if (s === 'c' || s === 1) fill = yellow; // smiley
+ if (s === 't' || s === 4) fill = yellow; // kissy
+ if (s === 's' || s === 2) fill = green; // mr yuck
+ if (s === 'd' || s === 3) fill = green; // evil grin
+
+ ctx.lineWidth = 2;
+ ctx.strokeStyle = outline;
+ ctx.fillStyle = fill;
+
+ // Head radius
+ const r = Math.max(sz / 2.5, 6);
+
+ // Draw head
+ ctx.beginPath();
+ ctx.arc(x, y, r, 0, Math.PI * 2);
+ ctx.fill();
+ ctx.stroke();
+
+ // Pixel-ish unit
+ const u = Math.max(Math.floor(r / 4), 2);
+
+ // Eyes
+ ctx.fillStyle = outline;
+
+ // Left eye
+ ctx.fillRect(x - 2*u, y - u, u, u);
+
+ // Right eye
+ ctx.fillRect(x + u, y - u, u, u);
+
+ // Reset fill for mouths
+ ctx.fillStyle = outline;
+
+ // Mouths by suit
+ if (s === 'c' || s === 1) {
+ // 😀 Smiley
+ ctx.fillRect(x - 2*u, y + u, 4*u, u);
+ }
+
+ if (s === 't' || s === 4) {
+ // 😘 Kissy face (little puckered mouth)
+ ctx.fillRect(x - u/2, y + u, u, u);
+ }
+
+ if (s === 's' || s === 2) {
+ // Mr. Yuck (flat angry mouth)
+ ctx.fillRect(x - 2*u, y + u, 4*u, u);
+ ctx.fillRect(x - 2*u, y + u, u, u); // left fang
+ ctx.fillRect(x + u, y + u, u, u); // right fang
+ }
+
+ if (s === 'd' || s === 3) {
+ // Evil grin
+ ctx.fillRect(x - 2*u, y + u, 4*u, u);
+
+// Left fang (triangle)
+ ctx.beginPath();
+ ctx.moveTo(x - 1.5*u, y + 2*u); // top-left
+ ctx.lineTo(x - 0.5*u, y + 2*u); // top-right
+ ctx.lineTo(x - u, y + 5*u); // bottom point
+ ctx.closePath();
+ ctx.fill();
+
+ // Right fang (triangle)
+ ctx.beginPath();
+ ctx.moveTo(x + 0.5*u, y + 2*u); // top-left
+ ctx.lineTo(x + 1.5*u, y + 2*u); // top-right
+ ctx.lineTo(x + u, y + 5*u); // bottom point
+ ctx.closePath();
+ ctx.fill();
+
+ }
}
function dcd(canv,x,y,c='',s=200,co1='lime',co2='green'){
From 4b2ba7e8b7fbc2942187c1bb26186b38e12e27e0 Mon Sep 17 00:00:00 2001
From: scootercommuter-090
Date: Wed, 10 Jun 2026 10:32:28 -0500
Subject: [PATCH 02/13] Bump version to 1.0.1 and update dependencies
---
appinfo/info.xml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/appinfo/info.xml b/appinfo/info.xml
index 54dbc5a..705e4d9 100644
--- a/appinfo/info.xml
+++ b/appinfo/info.xml
@@ -8,7 +8,7 @@
# Solitaire
A Nextcloud app that lets you play Solitaire.
]]>
- 1.0.0
+ 1.0.1
public
DerBen
Solitaire
@@ -17,7 +17,7 @@ A Nextcloud app that lets you play Solitaire.
https://github.com/derbenx/nextcloud-solitaire/issues
https://raw.githubusercontent.com/derbenx/nextcloud-solitaire/master/Solitaire.png
-
+
From 391224d9f6ffd91d826bb2eb1f03be27dbbfc436 Mon Sep 17 00:00:00 2001
From: scootercommuter-090
Date: Wed, 10 Jun 2026 10:33:22 -0500
Subject: [PATCH 03/13] Comment out CSP instantiation in PageController
Comment out the ContentSecurityPolicy instantiation.
---
lib/Controller/PageController.php | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/lib/Controller/PageController.php b/lib/Controller/PageController.php
index 1af3a6e..3bb28d7 100644
--- a/lib/Controller/PageController.php
+++ b/lib/Controller/PageController.php
@@ -27,7 +27,7 @@ public function __construct($AppName, IRequest $request, $UserId){
*/
public function index() {
$response = new TemplateResponse('solitaire', 'index'); // templates/index.php
- $csp = new ContentSecurityPolicy();
+ // $csp = new ContentSecurityPolicy();
$csp->allowEvalScript(true);
$response->setContentSecurityPolicy($csp);
From 4f9402961c51b83d46c2a14ddcd8a6d1df01fe70 Mon Sep 17 00:00:00 2001
From: scootercommuter-090
Date: Wed, 10 Jun 2026 10:38:04 -0500
Subject: [PATCH 04/13] Update compatibility info and config for Solitaire app
Updated compatibility and configuration details.
---
README.md | 3 +++
1 file changed, 3 insertions(+)
diff --git a/README.md b/README.md
index 54fe60c..ee80b03 100644
--- a/README.md
+++ b/README.md
@@ -4,3 +4,6 @@
Want to play Solitaire? Go ahead! This is a tiny game generated on demand using just HTML5, CSS and JS.
Nextcloud Hub 10 (31.0.6) is compatible, the icons at the top may look funny, but the app does still work!
+June 10, 2026
+Changed info.xml to increase the compatible version number of solitaire.
+commented out allowevalscript which is no longer supported.
From a4ea488640fe8755793e1ba817ef5791e252ada4 Mon Sep 17 00:00:00 2001
From: scootercommuter-090
Date: Wed, 10 Jun 2026 10:40:05 -0500
Subject: [PATCH 05/13] Initialize ContentSecurityPolicy in index method
---
lib/Controller/PageController.php | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/lib/Controller/PageController.php b/lib/Controller/PageController.php
index 3bb28d7..04ed46f 100644
--- a/lib/Controller/PageController.php
+++ b/lib/Controller/PageController.php
@@ -27,8 +27,8 @@ public function __construct($AppName, IRequest $request, $UserId){
*/
public function index() {
$response = new TemplateResponse('solitaire', 'index'); // templates/index.php
- // $csp = new ContentSecurityPolicy();
- $csp->allowEvalScript(true);
+ $csp = new ContentSecurityPolicy();
+ // $csp->allowEvalScript(true);
$response->setContentSecurityPolicy($csp);
return $response;
From 3d5bda0f9336343d9ff6c3a61735b7d01ffab5e5 Mon Sep 17 00:00:00 2001
From: scootercommuter-090
Date: Wed, 10 Jun 2026 10:41:12 -0500
Subject: [PATCH 06/13] Update README.md
---
README.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/README.md b/README.md
index ee80b03..c74b0b2 100644
--- a/README.md
+++ b/README.md
@@ -3,7 +3,7 @@
A Nextcloud app that lets you play Solitaire.
Want to play Solitaire? Go ahead! This is a tiny game generated on demand using just HTML5, CSS and JS.
-Nextcloud Hub 10 (31.0.6) is compatible, the icons at the top may look funny, but the app does still work!
+Nextcloud Hub 26 (34.0.6) is compatible, the icons at the top may look funny, but the app does still work!
June 10, 2026
Changed info.xml to increase the compatible version number of solitaire.
commented out allowevalscript which is no longer supported.
From 2ac7bc941c2488dca955a7435b5b1e5bf193b0ec Mon Sep 17 00:00:00 2001
From: scootercommuter-090
Date: Wed, 10 Jun 2026 10:41:36 -0500
Subject: [PATCH 07/13] Update Nextcloud Hub compatibility version in README
Updated compatibility version for Nextcloud Hub in README.
---
README.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/README.md b/README.md
index c74b0b2..7b1fcd5 100644
--- a/README.md
+++ b/README.md
@@ -3,7 +3,7 @@
A Nextcloud app that lets you play Solitaire.
Want to play Solitaire? Go ahead! This is a tiny game generated on demand using just HTML5, CSS and JS.
-Nextcloud Hub 26 (34.0.6) is compatible, the icons at the top may look funny, but the app does still work!
+Nextcloud Hub 26 (34.0.0) is compatible, the icons at the top may look funny, but the app does still work!
June 10, 2026
Changed info.xml to increase the compatible version number of solitaire.
commented out allowevalscript which is no longer supported.
From 3d4e12aa40c5a5bc3e3570811a38f89277cecacb Mon Sep 17 00:00:00 2001
From: scootercommuter-090
Date: Wed, 10 Jun 2026 10:54:47 -0500
Subject: [PATCH 08/13] Update info.xml
---
appinfo/info.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/appinfo/info.xml b/appinfo/info.xml
index 705e4d9..6ef5eab 100644
--- a/appinfo/info.xml
+++ b/appinfo/info.xml
@@ -1,7 +1,7 @@
- solitaire
+ emoji-face-solitaire
Solitaire
Solitaire
Date: Wed, 10 Jun 2026 10:55:20 -0500
Subject: [PATCH 09/13] Update info.xml
---
appinfo/info.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/appinfo/info.xml b/appinfo/info.xml
index 6ef5eab..931d346 100644
--- a/appinfo/info.xml
+++ b/appinfo/info.xml
@@ -2,7 +2,7 @@
emoji-face-solitaire
- Solitaire
+ Solitaire (Emoji Face Fork)
Solitaire
Date: Wed, 10 Jun 2026 11:10:10 -0500
Subject: [PATCH 10/13] Update info.xml
---
appinfo/info.xml | 40 ++++++++++++++++++++++------------------
1 file changed, 22 insertions(+), 18 deletions(-)
diff --git a/appinfo/info.xml b/appinfo/info.xml
index 931d346..c0178ca 100644
--- a/appinfo/info.xml
+++ b/appinfo/info.xml
@@ -1,28 +1,32 @@
-
+
emoji-face-solitaire
Solitaire (Emoji Face Fork)
- Solitaire
+ Emoji‑Face Solitaire for Nextcloud
+
- 1.0.1
- public
- DerBen
- Solitaire
+
+ 1.0.0
+ agpl
+ David
+ EmojiFaceSolitaire
+
games
- https://github.com/derbenx/nextcloud-solitaire
- https://github.com/derbenx/nextcloud-solitaire/issues
- https://raw.githubusercontent.com/derbenx/nextcloud-solitaire/master/Solitaire.png
+
+ https://github.com/scootercommuter-090/nextcloud-emoji-face-solitaire
+ https://github.com/scootercommuter-090/nextcloud-emoji-face-solitaire/issues
+ https://github.com/scootercommuter-090/nextcloud-emoji-face-solitaire.git
+
-
+
+
-
-
- Solitaire
- solitaire.page.index
-
-
+
From 4c102a689a16883075c2a09f8005fa01e332dcc5 Mon Sep 17 00:00:00 2001
From: scootercommuter-090
Date: Wed, 10 Jun 2026 11:12:05 -0500
Subject: [PATCH 11/13] Rename app ID from emoji-face-solitaire to
solitaire_emoji
---
appinfo/info.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/appinfo/info.xml b/appinfo/info.xml
index c0178ca..80672d1 100644
--- a/appinfo/info.xml
+++ b/appinfo/info.xml
@@ -2,7 +2,7 @@
- emoji-face-solitaire
+ solitaire_emoji
Solitaire (Emoji Face Fork)
Emoji‑Face Solitaire for Nextcloud
From 2778c154c11d317b39825fea80d7a9a53ff508f9 Mon Sep 17 00:00:00 2001
From: scootercommuter-090
Date: Wed, 10 Jun 2026 11:31:52 -0500
Subject: [PATCH 12/13] Update PageController.php
---
lib/Controller/PageController.php | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/lib/Controller/PageController.php b/lib/Controller/PageController.php
index 04ed46f..17f84fe 100644
--- a/lib/Controller/PageController.php
+++ b/lib/Controller/PageController.php
@@ -1,5 +1,5 @@
Date: Wed, 10 Jun 2026 13:34:04 -0500
Subject: [PATCH 13/13] Update info.xml
---
appinfo/info.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/appinfo/info.xml b/appinfo/info.xml
index 80672d1..2c3dc3f 100644
--- a/appinfo/info.xml
+++ b/appinfo/info.xml
@@ -16,7 +16,7 @@ cleaned‑up assets, and a simplified deck renderer.
1.0.0
agpl
David
- EmojiFaceSolitaire
+ SolitaireEmoji
games