@mtldev514/retro-portfolio-engine 1.0.0 → 1.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/workflows/build-and-deploy.yml +105 -0
- package/ADMIN_SETUP.md +306 -0
- package/README.md +193 -301
- package/USAGE.md +451 -0
- package/build.sh +326 -0
- package/index.html +85 -0
- package/js/manifest-loader.js +313 -0
- package/manifest.json +74 -0
- package/package.json +14 -38
- package/setup-admin.sh +134 -0
- package/sync-after-admin.sh +58 -0
- package/bin/cli.js +0 -103
- package/engine/admin/admin.css +0 -720
- package/engine/admin/admin.html +0 -801
- package/engine/admin/admin_api.py +0 -230
- package/engine/admin/scripts/backup.sh +0 -116
- package/engine/admin/scripts/config_loader.py +0 -180
- package/engine/admin/scripts/init.sh +0 -141
- package/engine/admin/scripts/manager.py +0 -308
- package/engine/admin/scripts/restore.sh +0 -121
- package/engine/admin/scripts/server.py +0 -41
- package/engine/admin/scripts/update.sh +0 -321
- package/engine/admin/scripts/validate_json.py +0 -62
- package/engine/fonts.css +0 -37
- package/engine/index.html +0 -190
- package/engine/js/config-loader.js +0 -370
- package/engine/js/config.js +0 -173
- package/engine/js/counter.js +0 -17
- package/engine/js/effects.js +0 -97
- package/engine/js/i18n.js +0 -68
- package/engine/js/init.js +0 -107
- package/engine/js/media.js +0 -264
- package/engine/js/render.js +0 -282
- package/engine/js/router.js +0 -133
- package/engine/js/sparkle.js +0 -123
- package/engine/js/themes.js +0 -607
- package/engine/style.css +0 -2037
- package/index.js +0 -35
- package/scripts/admin.js +0 -67
- package/scripts/build.js +0 -142
- package/scripts/init.js +0 -237
- package/scripts/post-install.js +0 -16
- package/scripts/serve.js +0 -54
- package/templates/user-portfolio/.github/workflows/deploy.yml +0 -57
- package/templates/user-portfolio/config/app.json +0 -36
- package/templates/user-portfolio/config/categories.json +0 -241
- package/templates/user-portfolio/config/languages.json +0 -15
- package/templates/user-portfolio/config/media-types.json +0 -59
- package/templates/user-portfolio/data/painting.json +0 -3
- package/templates/user-portfolio/data/projects.json +0 -3
- package/templates/user-portfolio/lang/en.json +0 -114
- package/templates/user-portfolio/lang/fr.json +0 -114
package/README.md
CHANGED
|
@@ -1,408 +1,300 @@
|
|
|
1
|
-
#
|
|
1
|
+
# 🎨 Site-as-a-Package Engine
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
[](https://opensource.org/licenses/MIT)
|
|
3
|
+
Un moteur de site web autonome qui récupère son contenu depuis un repo distant et se construit automatiquement. Concept **Site-as-a-Package** : le code du moteur est séparé des données.
|
|
5
4
|
|
|
6
|
-
|
|
5
|
+
## 🚀 Concept
|
|
7
6
|
|
|
8
|
-
|
|
7
|
+
Au lieu d'avoir un site avec du contenu figé, ce repo contient uniquement :
|
|
9
8
|
|
|
10
|
-
|
|
9
|
+
1. **Le moteur de rendu** (HTML, CSS, JS)
|
|
10
|
+
2. **Un script de build** qui récupère les données distantes
|
|
11
|
+
3. **Une GitHub Action** qui automatise tout
|
|
11
12
|
|
|
12
|
-
|
|
13
|
+
Les **données, traductions et configurations** sont stockées dans un repo séparé. À chaque build, le moteur récupère la dernière version du contenu.
|
|
13
14
|
|
|
14
|
-
|
|
15
|
-
✅ **Mises à jour faciles** via `npm update`
|
|
16
|
-
✅ **Pas de merge conflicts** pour récupérer les nouvelles features
|
|
17
|
-
✅ **Workflow simple** : `npm install` → `npm run build`
|
|
18
|
-
✅ **Admin inclus** pour gérer le contenu visuellement
|
|
15
|
+
## 📁 Architecture
|
|
19
16
|
|
|
20
|
-
---
|
|
21
|
-
|
|
22
|
-
## 🚀 Quick Start
|
|
23
|
-
|
|
24
|
-
### Pour créer votre portfolio
|
|
25
|
-
|
|
26
|
-
```bash
|
|
27
|
-
# 1. Créer un nouveau portfolio
|
|
28
|
-
npx @retro-portfolio/engine init mon-portfolio
|
|
29
|
-
cd mon-portfolio
|
|
30
|
-
|
|
31
|
-
# 2. Installer les dépendances
|
|
32
|
-
npm install
|
|
33
|
-
|
|
34
|
-
# 3. Lancer le serveur de dev
|
|
35
|
-
npm run dev
|
|
36
|
-
|
|
37
|
-
# 4. Ouvrir http://localhost:8000
|
|
38
|
-
```
|
|
39
|
-
|
|
40
|
-
C'est tout ! 🎉
|
|
41
|
-
|
|
42
|
-
---
|
|
43
|
-
|
|
44
|
-
## 📦 Installation dans un projet existant
|
|
45
|
-
|
|
46
|
-
```bash
|
|
47
|
-
npm install @retro-portfolio/engine
|
|
48
17
|
```
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
## 📁 Structure de votre projet
|
|
65
|
-
|
|
66
|
-
Après `init`, votre projet contient **uniquement vos données** :
|
|
67
|
-
|
|
68
|
-
```
|
|
69
|
-
mon-portfolio/
|
|
70
|
-
├── package.json (dépendance: @retro-portfolio/engine)
|
|
71
|
-
├── config/ (VOS configurations)
|
|
18
|
+
retro-portfolio-engine/ (Ce repo - Le moteur)
|
|
19
|
+
├── index.html Squelette HTML
|
|
20
|
+
├── style.css, fonts.css Styles
|
|
21
|
+
├── js/
|
|
22
|
+
│ ├── manifest-loader.js Charge le manifest distribué
|
|
23
|
+
│ ├── i18n.js, render.js Modules du moteur
|
|
24
|
+
│ └── ...
|
|
25
|
+
├── build.sh Script de build avec cache
|
|
26
|
+
├── manifest.json Configuration du data repo
|
|
27
|
+
└── .github/workflows/
|
|
28
|
+
└── build-and-deploy.yml Automatisation GitHub
|
|
29
|
+
|
|
30
|
+
retro-portfolio-data/ (Repo séparé - Les données)
|
|
31
|
+
├── manifest.json Point d'entrée
|
|
32
|
+
├── config/
|
|
72
33
|
│ ├── app.json
|
|
73
34
|
│ ├── languages.json
|
|
74
35
|
│ └── categories.json
|
|
75
|
-
├── data/
|
|
36
|
+
├── data/
|
|
76
37
|
│ ├── painting.json
|
|
77
|
-
│ └──
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
└── assets/ (VOS images, etc.)
|
|
38
|
+
│ └── ...
|
|
39
|
+
└── lang/
|
|
40
|
+
├── en.json
|
|
41
|
+
└── fr.json
|
|
82
42
|
```
|
|
83
43
|
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
---
|
|
87
|
-
|
|
88
|
-
## 🛠️ Commandes
|
|
89
|
-
|
|
90
|
-
### `retro-portfolio init [directory]`
|
|
44
|
+
## 🔧 Installation
|
|
91
45
|
|
|
92
|
-
|
|
46
|
+
### 1. Cloner le repo moteur
|
|
93
47
|
|
|
94
48
|
```bash
|
|
95
|
-
|
|
96
|
-
retro-portfolio
|
|
97
|
-
|
|
98
|
-
# Créer dans un nouveau dossier
|
|
99
|
-
retro-portfolio init mon-portfolio
|
|
100
|
-
|
|
101
|
-
# Forcer l'écrasement
|
|
102
|
-
retro-portfolio init --force
|
|
49
|
+
git clone https://github.com/YOUR_USERNAME/retro-portfolio-engine.git
|
|
50
|
+
cd retro-portfolio-engine
|
|
103
51
|
```
|
|
104
52
|
|
|
105
|
-
###
|
|
53
|
+
### 2. Configurer le manifest
|
|
106
54
|
|
|
107
|
-
|
|
55
|
+
Éditez `manifest.json` et changez les URLs :
|
|
108
56
|
|
|
109
|
-
```
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
57
|
+
```json
|
|
58
|
+
{
|
|
59
|
+
"dataRepository": {
|
|
60
|
+
"owner": "YOUR_USERNAME",
|
|
61
|
+
"repo": "retro-portfolio-data",
|
|
62
|
+
"branch": "main",
|
|
63
|
+
"baseUrl": "https://raw.githubusercontent.com/YOUR_USERNAME/retro-portfolio-data/main/"
|
|
64
|
+
}
|
|
65
|
+
}
|
|
118
66
|
```
|
|
119
67
|
|
|
120
|
-
|
|
121
|
-
1. Le package copie ses fichiers engine (HTML, CSS, JS)
|
|
122
|
-
2. Il fusionne avec vos fichiers `config/`, `data/`, `lang/`
|
|
123
|
-
3. Génère un site complet dans `dist/`
|
|
124
|
-
|
|
125
|
-
### `retro-portfolio dev`
|
|
126
|
-
|
|
127
|
-
Lance un serveur de développement local.
|
|
68
|
+
### 3. Build local (avec cache)
|
|
128
69
|
|
|
129
70
|
```bash
|
|
130
|
-
|
|
71
|
+
# Build normal (utilise le cache si disponible)
|
|
72
|
+
./build.sh
|
|
131
73
|
|
|
132
|
-
#
|
|
133
|
-
|
|
74
|
+
# Force le re-téléchargement complet
|
|
75
|
+
./build.sh --force
|
|
134
76
|
|
|
135
|
-
#
|
|
136
|
-
|
|
77
|
+
# Tester localement
|
|
78
|
+
cd dist
|
|
79
|
+
python3 -m http.server 8000
|
|
80
|
+
# Ouvrir http://localhost:8000
|
|
137
81
|
```
|
|
138
82
|
|
|
139
|
-
###
|
|
83
|
+
### 4. Déploiement automatique sur GitHub Pages
|
|
140
84
|
|
|
141
|
-
|
|
85
|
+
1. **Activer GitHub Pages** dans les paramètres du repo :
|
|
86
|
+
- Settings → Pages
|
|
87
|
+
- Source : **GitHub Actions**
|
|
142
88
|
|
|
143
|
-
|
|
144
|
-
|
|
89
|
+
2. **Configurer le secret (optionnel)** :
|
|
90
|
+
- Settings → Secrets → Actions
|
|
91
|
+
- Ajouter `MANIFEST_URL` si votre manifest est ailleurs
|
|
145
92
|
|
|
146
|
-
|
|
147
|
-
|
|
93
|
+
3. **Déclencher un build** :
|
|
94
|
+
- Push sur `main` → build automatique
|
|
95
|
+
- Actions → Build and Deploy Site → Run workflow
|
|
148
96
|
|
|
149
|
-
|
|
150
|
-
retro-portfolio admin --open
|
|
151
|
-
```
|
|
97
|
+
## 🎯 Utilisation
|
|
152
98
|
|
|
153
|
-
|
|
99
|
+
### Mode 1 : Build automatique (recommandé)
|
|
154
100
|
|
|
155
|
-
|
|
101
|
+
GitHub Action se déclenche automatiquement :
|
|
156
102
|
|
|
157
|
-
|
|
103
|
+
- ✅ À chaque push sur `main`
|
|
104
|
+
- ✅ Tous les jours à minuit (récupère les nouvelles données)
|
|
105
|
+
- ✅ Manuellement depuis l'onglet Actions
|
|
158
106
|
|
|
159
|
-
###
|
|
107
|
+
### Mode 2 : Build manuel
|
|
160
108
|
|
|
161
109
|
```bash
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
npm install
|
|
165
|
-
```
|
|
166
|
-
|
|
167
|
-
### 2️⃣ Configuration
|
|
110
|
+
# Build avec cache (rapide)
|
|
111
|
+
./build.sh
|
|
168
112
|
|
|
169
|
-
|
|
113
|
+
# Build complet (ignore le cache)
|
|
114
|
+
./build.sh --force
|
|
170
115
|
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
nano config/app.json
|
|
116
|
+
# Build avec manifest custom
|
|
117
|
+
./build.sh --manifest https://example.com/manifest.json
|
|
174
118
|
|
|
175
|
-
#
|
|
176
|
-
|
|
119
|
+
# Options avancées
|
|
120
|
+
./build.sh --help
|
|
177
121
|
```
|
|
178
122
|
|
|
179
|
-
|
|
123
|
+
## 🔄 Mettre à jour le contenu
|
|
180
124
|
|
|
181
|
-
|
|
125
|
+
### Option A : Modifier le repo de données
|
|
182
126
|
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
# Upload images, ajouter descriptions, etc.
|
|
187
|
-
```
|
|
127
|
+
1. Modifier les fichiers dans `retro-portfolio-data/`
|
|
128
|
+
2. Commit & push
|
|
129
|
+
3. (Optionnel) Déclencher un rebuild du moteur
|
|
188
130
|
|
|
189
|
-
|
|
131
|
+
### Option B : Utiliser un webhook
|
|
190
132
|
|
|
191
|
-
|
|
192
|
-
nano data/painting.json
|
|
193
|
-
```
|
|
133
|
+
Configurez le repo de données pour notifier le moteur :
|
|
194
134
|
|
|
195
|
-
|
|
135
|
+
```yaml
|
|
136
|
+
# Dans retro-portfolio-data/.github/workflows/notify.yml
|
|
137
|
+
on:
|
|
138
|
+
push:
|
|
139
|
+
branches: [main]
|
|
196
140
|
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
141
|
+
jobs:
|
|
142
|
+
notify-engine:
|
|
143
|
+
runs-on: ubuntu-latest
|
|
144
|
+
steps:
|
|
145
|
+
- name: Trigger rebuild
|
|
146
|
+
run: |
|
|
147
|
+
curl -X POST \
|
|
148
|
+
-H "Authorization: token ${{ secrets.PAT_TOKEN }}" \
|
|
149
|
+
https://api.github.com/repos/YOUR_USERNAME/retro-portfolio-engine/dispatches \
|
|
150
|
+
-d '{"event_type": "data-updated"}'
|
|
200
151
|
```
|
|
201
152
|
|
|
202
|
-
|
|
153
|
+
## 🛡️ Sécurité et Bonnes Pratiques
|
|
203
154
|
|
|
204
|
-
|
|
205
|
-
npm run build
|
|
206
|
-
# → génère dist/
|
|
207
|
-
```
|
|
155
|
+
### ✅ CORS
|
|
208
156
|
|
|
209
|
-
|
|
157
|
+
`raw.githubusercontent.com` envoie automatiquement `Access-Control-Allow-Origin: *`, donc **pas de problème CORS** pour les requêtes GET.
|
|
210
158
|
|
|
211
|
-
|
|
159
|
+
### ✅ Validation des données
|
|
212
160
|
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
161
|
+
Le `manifest-loader.js` valide la structure du manifest :
|
|
162
|
+
|
|
163
|
+
```javascript
|
|
164
|
+
validateManifest(manifest) {
|
|
165
|
+
const required = ['version', 'dataRepository', 'structure'];
|
|
166
|
+
// Validation stricte
|
|
167
|
+
}
|
|
218
168
|
```
|
|
219
169
|
|
|
220
|
-
|
|
170
|
+
### ✅ Cache intelligent
|
|
221
171
|
|
|
222
|
-
|
|
172
|
+
Le script `build.sh` utilise un cache local (`.cache/`) :
|
|
223
173
|
|
|
224
|
-
|
|
174
|
+
- ⚡ Accélère les builds répétés
|
|
175
|
+
- 🔄 TTL de 1 heure par défaut
|
|
176
|
+
- 🔨 Option `--force` pour forcer le refresh
|
|
225
177
|
|
|
226
|
-
###
|
|
178
|
+
### ✅ Sanitisation
|
|
227
179
|
|
|
228
|
-
|
|
180
|
+
Tous les contenus HTML sont sanitisés pour éviter les XSS :
|
|
229
181
|
|
|
230
|
-
```
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
182
|
+
```javascript
|
|
183
|
+
sanitizeHTML(str) {
|
|
184
|
+
const temp = document.createElement('div');
|
|
185
|
+
temp.textContent = str;
|
|
186
|
+
return temp.innerHTML;
|
|
234
187
|
}
|
|
235
188
|
```
|
|
236
189
|
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
### Ajouter des pages custom
|
|
190
|
+
## 📊 Fonctionnalités
|
|
240
191
|
|
|
241
|
-
|
|
192
|
+
### ✨ Avantages
|
|
242
193
|
|
|
243
|
-
|
|
194
|
+
- **🔄 Toujours à jour** : Récupère la dernière version du contenu à chaque build
|
|
195
|
+
- **📦 Léger** : Le repo moteur est quasi vide
|
|
196
|
+
- **🌍 Multi-langues** : Support natif de plusieurs langues
|
|
197
|
+
- **⚡ Performant** : Cache intelligent, build optimisé
|
|
198
|
+
- **🔒 Sécurisé** : Validation, sanitisation, pas d'eval()
|
|
199
|
+
- **🚀 Zero-config** : Push et c'est déployé
|
|
244
200
|
|
|
245
|
-
|
|
201
|
+
### 🎨 Personnalisation
|
|
246
202
|
|
|
247
|
-
|
|
203
|
+
Vous pouvez modifier :
|
|
248
204
|
|
|
249
|
-
|
|
250
|
-
|
|
205
|
+
- `style.css` : Apparence visuelle
|
|
206
|
+
- `js/render.js` : Logique de rendu
|
|
207
|
+
- `manifest.json` : Source des données
|
|
251
208
|
|
|
252
|
-
|
|
253
|
-
npm install @retro-portfolio/engine@latest
|
|
254
|
-
```
|
|
255
|
-
|
|
256
|
-
**Aucun conflit de merge** ! Vos données restent intactes.
|
|
209
|
+
## 🐛 Dépannage
|
|
257
210
|
|
|
258
|
-
|
|
211
|
+
### Le build échoue
|
|
259
212
|
|
|
260
|
-
|
|
213
|
+
```bash
|
|
214
|
+
# Vérifier que jq est installé
|
|
215
|
+
which jq
|
|
261
216
|
|
|
262
|
-
|
|
217
|
+
# Tester manuellement le manifest
|
|
218
|
+
curl https://raw.githubusercontent.com/YOUR_USERNAME/retro-portfolio-data/main/manifest.json
|
|
263
219
|
|
|
264
|
-
|
|
220
|
+
# Build en mode verbose
|
|
221
|
+
bash -x build.sh
|
|
222
|
+
```
|
|
265
223
|
|
|
266
|
-
|
|
267
|
-
name: Deploy to GitHub Pages
|
|
224
|
+
### Les données ne se mettent pas à jour
|
|
268
225
|
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
226
|
+
```bash
|
|
227
|
+
# Forcer le re-téléchargement
|
|
228
|
+
./build.sh --force
|
|
272
229
|
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
steps:
|
|
277
|
-
- uses: actions/checkout@v3
|
|
278
|
-
- uses: actions/setup-node@v3
|
|
279
|
-
with:
|
|
280
|
-
node-version: '18'
|
|
281
|
-
|
|
282
|
-
- run: npm install
|
|
283
|
-
- run: npm run build
|
|
284
|
-
|
|
285
|
-
- uses: peaceiris/actions-gh-pages@v3
|
|
286
|
-
with:
|
|
287
|
-
github_token: ${{ secrets.GITHUB_TOKEN }}
|
|
288
|
-
publish_dir: ./dist
|
|
230
|
+
# Vider le cache
|
|
231
|
+
rm -rf .cache
|
|
232
|
+
./build.sh
|
|
289
233
|
```
|
|
290
234
|
|
|
291
|
-
|
|
235
|
+
### GitHub Action échoue
|
|
292
236
|
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
**Publish directory** : `dist`
|
|
297
|
-
|
|
298
|
-
---
|
|
237
|
+
1. Vérifier que GitHub Pages est activé
|
|
238
|
+
2. Vérifier les permissions dans Settings → Actions → Workflow permissions
|
|
239
|
+
3. Consulter les logs dans Actions → Build and Deploy
|
|
299
240
|
|
|
300
241
|
## 📚 Documentation Avancée
|
|
301
242
|
|
|
302
|
-
### Structure du
|
|
243
|
+
### Structure du Manifest
|
|
303
244
|
|
|
304
|
-
```
|
|
305
|
-
@retro-portfolio/engine/
|
|
306
|
-
├── engine/ (Code du site - copié au build)
|
|
307
|
-
│ ├── index.html
|
|
308
|
-
│ ├── style.css
|
|
309
|
-
│ ├── js/
|
|
310
|
-
│ └── admin/
|
|
311
|
-
├── scripts/ (Scripts Node.js)
|
|
312
|
-
│ ├── build.js
|
|
313
|
-
│ ├── serve.js
|
|
314
|
-
│ └── admin.js
|
|
315
|
-
├── bin/
|
|
316
|
-
│ └── cli.js (CLI retro-portfolio)
|
|
317
|
-
└── templates/ (Templates pour init)
|
|
318
|
-
```
|
|
319
|
-
|
|
320
|
-
### API de données
|
|
321
|
-
|
|
322
|
-
Format des fichiers JSON :
|
|
323
|
-
|
|
324
|
-
**data/painting.json** :
|
|
325
245
|
```json
|
|
326
246
|
{
|
|
327
|
-
"
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
"
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
"
|
|
339
|
-
|
|
247
|
+
"version": "1.0.0",
|
|
248
|
+
"dataRepository": {
|
|
249
|
+
"type": "github",
|
|
250
|
+
"baseUrl": "https://raw.githubusercontent.com/..."
|
|
251
|
+
},
|
|
252
|
+
"structure": {
|
|
253
|
+
"config": {
|
|
254
|
+
"app": "config/app.json",
|
|
255
|
+
"languages": "config/languages.json"
|
|
256
|
+
},
|
|
257
|
+
"data": {
|
|
258
|
+
"painting": "data/painting.json"
|
|
259
|
+
},
|
|
260
|
+
"lang": {
|
|
261
|
+
"en": "lang/en.json"
|
|
340
262
|
}
|
|
341
|
-
|
|
342
|
-
}
|
|
343
|
-
```
|
|
344
|
-
|
|
345
|
-
**lang/en.json** :
|
|
346
|
-
```json
|
|
347
|
-
{
|
|
348
|
-
"header_title": "My Portfolio",
|
|
349
|
-
"nav_painting": "Paintings",
|
|
350
|
-
"footer_copy": "© 2026 Your Name"
|
|
263
|
+
}
|
|
351
264
|
}
|
|
352
265
|
```
|
|
353
266
|
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
## 🐛 Dépannage
|
|
357
|
-
|
|
358
|
-
### Le build échoue
|
|
359
|
-
|
|
360
|
-
```bash
|
|
361
|
-
# Vérifier que les dossiers requis existent
|
|
362
|
-
ls -la config/ data/ lang/
|
|
363
|
-
|
|
364
|
-
# Réinstaller le package
|
|
365
|
-
rm -rf node_modules
|
|
366
|
-
npm install
|
|
367
|
-
```
|
|
267
|
+
### API du ManifestLoader
|
|
368
268
|
|
|
369
|
-
|
|
269
|
+
```javascript
|
|
270
|
+
// Initialiser
|
|
271
|
+
await ManifestLoader.init('./manifest.json');
|
|
370
272
|
|
|
371
|
-
|
|
273
|
+
// Récupérer des URLs
|
|
274
|
+
const appConfigUrl = ManifestLoader.getConfigUrl('app');
|
|
275
|
+
const paintingUrl = ManifestLoader.getDataUrl('painting');
|
|
276
|
+
const frTransUrl = ManifestLoader.getLangUrl('fr');
|
|
372
277
|
|
|
373
|
-
|
|
374
|
-
|
|
278
|
+
// Lister les langues disponibles
|
|
279
|
+
const langs = ManifestLoader.getAvailableLanguages();
|
|
375
280
|
```
|
|
376
281
|
|
|
377
|
-
### Les images ne s'affichent pas
|
|
378
|
-
|
|
379
|
-
Vérifiez que vos URLs d'images sont complètes (Cloudinary, etc.) ou placez-les dans `assets/`.
|
|
380
|
-
|
|
381
|
-
---
|
|
382
|
-
|
|
383
282
|
## 🤝 Contribution
|
|
384
283
|
|
|
385
|
-
|
|
284
|
+
Les contributions sont les bienvenues ! Pour contribuer :
|
|
386
285
|
|
|
387
|
-
1. Fork le
|
|
388
|
-
2.
|
|
389
|
-
3.
|
|
390
|
-
|
|
391
|
-
---
|
|
286
|
+
1. Fork le projet
|
|
287
|
+
2. Créer une branche (`git checkout -b feature/amazing`)
|
|
288
|
+
3. Commit vos changements
|
|
289
|
+
4. Push et créer une Pull Request
|
|
392
290
|
|
|
393
291
|
## 📄 Licence
|
|
394
292
|
|
|
395
|
-
MIT
|
|
293
|
+
MIT License - Utilisation libre
|
|
396
294
|
|
|
397
295
|
---
|
|
398
296
|
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
- [Documentation](https://github.com/YOUR_USERNAME/retro-portfolio-engine)
|
|
402
|
-
- [NPM Package](https://www.npmjs.com/package/@retro-portfolio/engine)
|
|
403
|
-
- [Issues](https://github.com/YOUR_USERNAME/retro-portfolio-engine/issues)
|
|
404
|
-
- [Exemples](https://github.com/YOUR_USERNAME/retro-portfolio-examples)
|
|
405
|
-
|
|
406
|
-
---
|
|
297
|
+
**Fait avec 💜 par Alex**
|
|
407
298
|
|
|
408
|
-
|
|
299
|
+
🔗 [Demo](https://YOUR_USERNAME.github.io/retro-portfolio-engine/)
|
|
300
|
+
🐛 [Issues](https://github.com/YOUR_USERNAME/retro-portfolio-engine/issues)
|