Export Web/SCORM : port complet du runtime jouable côté navigateur
Build and deploy / test-python (push) Successful in 9m20s
Build and deploy / test-js (push) Successful in 1m6s
Build and deploy / build-and-push (push) Skipped
Build and deploy / deploy (push) Skipped

Phase 1.2 de la feuille de route produit — un paquet SCORM tourne seul
dans le LMS du client, sans serveur Forge Engine disponible. Ajoute
static/js/play/offline/ (miroir JS de screens/rendering/ et
data_actions/, sous window.FORGE_OFFLINE) pour que variables, score,
données d'objet, répéteurs et conditions de visibilité fonctionnent
entièrement en mémoire côté navigateur ; branche actions.js et
bindings.js dessus au lieu d'un fetch() serveur. Ajoute
publish/build_scorm_package.py (paquet statique + imsmanifest.xml
SCORM 1.2 + wrapper API SCORM) et le bouton "Exporter (Web/SCORM)".

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
william
2026-09-02 07:43:02 +02:00
co-authored by Claude Sonnet 5
parent 9776fbc057
commit f3b72d73c9
32 changed files with 2469 additions and 22 deletions
+1 -1
View File
@@ -1 +1 @@
from . import publish_game
from . import publish_game, export_scorm
+27
View File
@@ -0,0 +1,27 @@
import os
from flask import after_this_request, send_file
import db
from publish.build_scorm_package import build_scorm_zip
from core.flask_app import app
@app.route("/game/<slug>/export-scorm", methods=["POST"])
def export_scorm(slug):
"""Construit et renvoie le paquet Web/SCORM autonome du jeu (voir
publish/build_scorm_package.py) — même garde d'accès que
/game/<slug>/publish (core/auth_guard.py)."""
zip_path, game_name = build_scorm_zip(slug)
@after_this_request
def _cleanup(response):
try:
os.remove(zip_path)
except OSError:
pass
return response
download_name = f"{db.slugify(game_name)}-scorm.zip"
return send_file(zip_path, as_attachment=True, download_name=download_name, mimetype="application/zip")