11 Commits

14 changed files with 53 additions and 46 deletions

BIN
.DS_Store vendored

Binary file not shown.

2
.gitignore vendored
View File

@@ -1,3 +1,3 @@
.gpg/ .gpg/
node_modules node_modules
.DS_Store

View File

@@ -8,4 +8,6 @@ Nonograms is a modern, fast, and accessible logic puzzle game (also known as Pic
- Difficulty simulation and guide to learn solving strategies - Difficulty simulation and guide to learn solving strategies
- Shareable puzzles and persistent progress - Shareable puzzles and persistent progress
![Nonograms Application Screenshot](public/screenshot.png)
Play online at https://nonograms.7u.pl or install as a PWA for an app-like experience. Play online at https://nonograms.7u.pl or install as a PWA for an app-like experience.

View File

@@ -1,37 +0,0 @@
const fs = require('fs');
const fileContent = fs.readFileSync('src/composables/useI18n.js', 'utf8');
// Extract the messages object
const match = fileContent.match(/const messages = ({[\s\S]*?});/);
if (!match) {
console.error('Could not find messages object');
process.exit(1);
}
// We need to make the string valid JS to eval it.
// It seems the content inside `const messages = { ... };` is valid JS object notation.
// But we need to be careful about imports or other things if we were to `eval` the whole file.
// We'll just `eval` the object part.
const messagesStr = match[1];
const messages = eval(`(${messagesStr})`);
const enKeys = Object.keys(messages.en);
const languages = Object.keys(messages);
const missing = {};
languages.forEach(lang => {
if (lang === 'en') return;
const langKeys = Object.keys(messages[lang]);
const missingKeys = enKeys.filter(k => !langKeys.includes(k));
if (missingKeys.length > 0) {
missing[lang] = missingKeys;
}
});
console.log(JSON.stringify(missing, null, 2));

View File

@@ -3,7 +3,7 @@
<head> <head>
<meta charset="UTF-8" /> <meta charset="UTF-8" />
<link rel="icon" type="image/svg+xml" href="/nonograms.svg" /> <link rel="icon" type="image/svg+xml" href="/nonograms.svg" />
<link rel="apple-touch-icon" href="/nonograms.svg" /> <link rel="apple-touch-icon" href="/apple-touch-icon.png" />
<link rel="mask-icon" href="/nonograms.svg" color="#00f2fe" /> <link rel="mask-icon" href="/nonograms.svg" color="#00f2fe" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Nonograms Pro - Vue 3 SOLID</title> <title>Nonograms Pro - Vue 3 SOLID</title>

4
package-lock.json generated
View File

@@ -1,12 +1,12 @@
{ {
"name": "vue-nonograms-solid", "name": "vue-nonograms-solid",
"version": "1.12.0", "version": "1.12.5",
"lockfileVersion": 3, "lockfileVersion": 3,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "vue-nonograms-solid", "name": "vue-nonograms-solid",
"version": "1.12.0", "version": "1.12.5",
"dependencies": { "dependencies": {
"fireworks-js": "^2.10.8", "fireworks-js": "^2.10.8",
"flag-icons": "^7.5.0", "flag-icons": "^7.5.0",

View File

@@ -1,6 +1,6 @@
{ {
"name": "vue-nonograms-solid", "name": "vue-nonograms-solid",
"version": "1.12.0", "version": "1.12.5",
"homepage": "https://nonograms.7u.pl/", "homepage": "https://nonograms.7u.pl/",
"type": "module", "type": "module",
"scripts": { "scripts": {

BIN
public/apple-touch-icon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

BIN
public/pwa-192x192.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

BIN
public/pwa-512x512.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 78 KiB

BIN
public/screenshot.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 MiB

42
scripts/generate-icons.js Normal file
View File

@@ -0,0 +1,42 @@
import sharp from 'sharp';
import path from 'path';
import { fileURLToPath } from 'url';
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
const INPUT_FILE = path.join(__dirname, '../public/nonograms.svg');
const OUTPUT_DIR = path.join(__dirname, '../public');
async function generateIcons() {
console.log('Generating icons from ' + INPUT_FILE);
try {
// 192x192
await sharp(INPUT_FILE)
.resize(192, 192)
.png()
.toFile(path.join(OUTPUT_DIR, 'pwa-192x192.png'));
console.log('Created pwa-192x192.png');
// 512x512
await sharp(INPUT_FILE)
.resize(512, 512)
.png()
.toFile(path.join(OUTPUT_DIR, 'pwa-512x512.png'));
console.log('Created pwa-512x512.png');
// Apple Touch Icon (180x180)
await sharp(INPUT_FILE)
.resize(180, 180)
.png()
.toFile(path.join(OUTPUT_DIR, 'apple-touch-icon.png'));
console.log('Created apple-touch-icon.png');
} catch (err) {
console.error('Error generating icons:', err);
process.exit(1);
}
}
generateIcons();

BIN
src/assets/.DS_Store vendored

Binary file not shown.

View File

@@ -31,14 +31,14 @@ export default defineConfig({
theme_color: '#00f2fe', theme_color: '#00f2fe',
icons: [ icons: [
{ {
src: '/pwa-192x192.svg', src: '/pwa-192x192.png',
sizes: '192x192', sizes: '192x192',
type: 'image/svg+xml' type: 'image/png'
}, },
{ {
src: '/pwa-512x512.svg', src: '/pwa-512x512.png',
sizes: '512x512', sizes: '512x512',
type: 'image/svg+xml' type: 'image/png'
} }
] ]
} }