diff --git a/README.md b/README.md index 54fe60c..7b1fcd5 100644 --- a/README.md +++ b/README.md @@ -3,4 +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.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. diff --git a/appinfo/info.xml b/appinfo/info.xml index 54dbc5a..2c3dc3f 100644 --- a/appinfo/info.xml +++ b/appinfo/info.xml @@ -1,28 +1,32 @@ - - solitaire - Solitaire - Solitaire + + solitaire_emoji + Solitaire (Emoji Face Fork) + Emoji‑Face Solitaire for Nextcloud + + 1.0.0 - public - DerBen - Solitaire + agpl + David + SolitaireEmoji + 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 - - + 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'){ diff --git a/lib/Controller/PageController.php b/lib/Controller/PageController.php index 1af3a6e..17f84fe 100644 --- a/lib/Controller/PageController.php +++ b/lib/Controller/PageController.php @@ -1,5 +1,5 @@ allowEvalScript(true); + // $csp->allowEvalScript(true); $response->setContentSecurityPolicy($csp); return $response;