@liascript/exporter 3.0.0--1.0.3 → 3.0.2--1.0.3

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.
Files changed (82) hide show
  1. package/dist/assets/capacitor/{index.bfe7363b.js → index.44a6a9b3.js} +1 -1
  2. package/dist/assets/capacitor/index.html +1 -1
  3. package/dist/assets/capacitor/{jszip.min.f6eda75b.js → jszip.min.2f991499.js} +1 -1
  4. package/dist/assets/capacitor/{trystero-ipfs.min.b27a61d7.js → trystero-ipfs.min.f25fe3e7.js} +1 -1
  5. package/dist/assets/indexeddb/{index.599a57d6.js → index.4aceca2f.js} +1 -1
  6. package/dist/assets/indexeddb/index.html +1 -1
  7. package/dist/assets/pdf/{index.aa124b49.js → index.49b3a4d9.js} +1 -1
  8. package/dist/assets/pdf/index.html +1 -1
  9. package/dist/assets/scorm2004/{index.45f7501b.js → index.031764e4.js} +1 -1
  10. package/dist/assets/scorm2004/index.html +1 -1
  11. package/dist/assets/{xapi/jszip.min.eaecf580.js → scorm2004/jszip.min.19c66d77.js} +1 -1
  12. package/dist/assets/web/{index.39a3e3eb.js → index.98993ded.js} +1 -1
  13. package/dist/assets/web/{index.1062f2c5.js → index.e84d3f3b.js} +1 -1
  14. package/dist/assets/web/index.html +1 -1
  15. package/dist/assets/web/{jszip.min.eaecf580.js → jszip.min.19c66d77.js} +1 -1
  16. package/dist/assets/xapi/{index.018a032a.js → index.f2e89e49.js} +1 -1
  17. package/dist/assets/xapi/{index.780a0ec3.js → index.f5402f58.js} +1 -1
  18. package/dist/assets/xapi/index.html +1 -1
  19. package/dist/assets/{scorm2004/jszip.min.eaecf580.js → xapi/jszip.min.19c66d77.js} +1 -1
  20. package/dist/index.js +3 -3
  21. package/dist/server/presets.json +94 -0
  22. package/dist/server/presets.yaml +120 -0
  23. package/dist/server/public/app.js +1 -0
  24. package/dist/server/public/assets/android.svg +38 -0
  25. package/dist/server/public/assets/cmi.svg +154 -0
  26. package/dist/server/public/assets/docx.svg +20 -0
  27. package/dist/server/public/assets/edX.svg +75 -0
  28. package/dist/server/public/assets/edx.svg +75 -0
  29. package/dist/server/public/assets/epub.svg +18 -0
  30. package/dist/server/public/assets/icon.svg +82 -0
  31. package/dist/server/public/assets/ilias.png +0 -0
  32. package/dist/server/public/assets/json.svg +4 -0
  33. package/dist/server/public/assets/learnworlds.png +0 -0
  34. package/dist/server/public/assets/moodle.svg +190 -0
  35. package/dist/server/public/assets/opal.png +0 -0
  36. package/dist/server/public/assets/openolat.png +0 -0
  37. package/dist/server/public/assets/pdf.svg +4 -0
  38. package/dist/server/public/assets/rdf.svg +4 -0
  39. package/dist/server/public/assets/scorm.png +0 -0
  40. package/dist/server/public/assets/web.png +0 -0
  41. package/dist/server/public/assets/xapi.png +0 -0
  42. package/dist/server/public/i18n.js +1 -0
  43. package/dist/server/public/index.html +1587 -0
  44. package/dist/server/public/locales/de.json +247 -0
  45. package/dist/server/public/locales/en.json +247 -0
  46. package/dist/server/public/status.html +251 -0
  47. package/dist/server/public/styles.css +712 -0
  48. package/package.json +5 -1
  49. package/.parcelrc +0 -3
  50. package/DESKTOP_APP_README.md +0 -58
  51. package/DOCKERHUB_DESCRIPTION.md +0 -52
  52. package/Dockerfile +0 -129
  53. package/PLAYSTORE_GUIDE.md +0 -172
  54. package/action.yml +0 -157
  55. package/custom.css +0 -10
  56. package/electron-builder.json +0 -149
  57. package/src/cli.ts +0 -69
  58. package/src/colorize.ts +0 -115
  59. package/src/export/android.ts +0 -419
  60. package/src/export/docx.ts +0 -1025
  61. package/src/export/epub.ts +0 -1306
  62. package/src/export/h5p.ts +0 -390
  63. package/src/export/helper.ts +0 -360
  64. package/src/export/ims.ts +0 -191
  65. package/src/export/pdf.ts +0 -406
  66. package/src/export/presets.ts +0 -220
  67. package/src/export/project.ts +0 -829
  68. package/src/export/rdf.ts +0 -551
  69. package/src/export/scorm12.ts +0 -167
  70. package/src/export/scorm2004.ts +0 -140
  71. package/src/export/web.ts +0 -306
  72. package/src/export/xapi.ts +0 -424
  73. package/src/exporter.ts +0 -296
  74. package/src/index.ts +0 -96
  75. package/src/parser.ts +0 -373
  76. package/src/presets.yaml +0 -219
  77. package/src/types.ts +0 -82
  78. package/tsconfig.json +0 -24
  79. /package/dist/assets/{pdf → indexeddb}/jszip.min.4fbcc13f.js +0 -0
  80. /package/dist/assets/{indexeddb → pdf}/jszip.min.63142cc8.js +0 -0
  81. /package/dist/assets/{xapi → web}/jszip.min.63142cc8.js +0 -0
  82. /package/dist/assets/{web → xapi}/jszip.min.4fbcc13f.js +0 -0
@@ -0,0 +1,251 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
+ <title>Export Status - LiaScript Exporter</title>
7
+
8
+ <link rel="stylesheet" href="/styles.css" />
9
+
10
+ <script src="/i18n.js"></script>
11
+ </head>
12
+ <body>
13
+ <nav class="navbar">
14
+ <div class="navbar-container">
15
+ <a href="/" class="navbar-brand">
16
+ <img src="./assets/icon.svg" alt="LiaScript" />
17
+ </a>
18
+ <ul class="navbar-menu">
19
+ <li><a href="/" class="navbar-link" data-i18n="nav.home">Home</a></li>
20
+ <li><a href="/status.html" class="navbar-link active" data-i18n="nav.status">Status</a></li>
21
+ <li class="language-selector-container">
22
+ <select id="language-selector" class="language-selector">
23
+ <option value="en">EN</option>
24
+ <option value="de">DE</option>
25
+ </select>
26
+ </li>
27
+ </ul>
28
+ </div>
29
+ </nav>
30
+
31
+ <div class="container">
32
+ <header>
33
+ <h1 data-i18n="status.title">Export Status</h1>
34
+ <p class="subtitle" data-i18n="status.subtitle">Track the status of your export job</p>
35
+ </header>
36
+
37
+ <main>
38
+ <section class="card">
39
+ <div id="statusContent">
40
+ <p data-i18n="status.loading">Loading status...</p>
41
+ </div>
42
+ <div class="refresh-info" id="refreshInfo">
43
+ <span data-i18n="status.autoRefresh">Page will refresh automatically</span>
44
+ </div>
45
+ </section>
46
+
47
+ <div style="text-align: center; margin-top: 2rem">
48
+ <a href="/" class="btn-secondary" data-i18n="status.backHome">Back to Home</a>
49
+ </div>
50
+ </main>
51
+
52
+ <footer>
53
+ <p data-i18n="footer.copyright">&copy; 2026 LiaScript Exporter</p>
54
+ </footer>
55
+ </div>
56
+
57
+ <script>
58
+ const urlParams = new URLSearchParams(window.location.search)
59
+ let jobId = urlParams.get('jobId')
60
+ let refreshInterval
61
+
62
+ // Wait for i18n to be ready before loading status
63
+ async function initializeStatus() {
64
+ if (!window.i18n || !window.i18n.translations[window.i18n.currentLanguage]) {
65
+ await new Promise(resolve => {
66
+ const checkI18n = setInterval(() => {
67
+ if (window.i18n && window.i18n.translations[window.i18n.currentLanguage]) {
68
+ clearInterval(checkI18n)
69
+ resolve()
70
+ }
71
+ }, 50)
72
+ })
73
+ }
74
+
75
+ if (jobId) {
76
+ loadStatus()
77
+ refreshInterval = setInterval(loadStatus, 3000)
78
+ } else {
79
+ // Try to get the last job ID from localStorage
80
+ const lastJobId = localStorage.getItem('lastJobId')
81
+ if (lastJobId) {
82
+ jobId = lastJobId
83
+ window.history.replaceState({}, '', `/status.html?jobId=${jobId}`)
84
+ loadStatus()
85
+ refreshInterval = setInterval(loadStatus, 3000)
86
+ } else {
87
+ // No job found
88
+ document.getElementById('statusContent').innerHTML = `
89
+ <div style="text-align: center; padding: 3rem 1rem;">
90
+ <p style="color: var(--text-muted); margin-bottom: 1rem;" data-i18n="status.noExport">No export found</p>
91
+ <p style="color: var(--text-muted); font-size: 0.9rem;" data-i18n="status.noExportMessage">Start a new export on the home page.</p>
92
+ </div>
93
+ `
94
+ // Re-translate the new content
95
+ if (window.i18n) {
96
+ window.i18n.updatePageTranslations()
97
+ }
98
+ document.getElementById('refreshInfo').style.display = 'none'
99
+ }
100
+ }
101
+ }
102
+
103
+ initializeStatus()
104
+
105
+ async function loadStatus() {
106
+ try {
107
+ const response = await fetch(`/api/job/${jobId}`)
108
+
109
+ if (!response.ok) {
110
+ throw new Error(window.i18n ? window.i18n.t('status.error') : 'Job not found')
111
+ }
112
+
113
+ const data = await response.json()
114
+ window.lastJobData = data
115
+ displayStatus(data)
116
+
117
+ // Stop refreshing if job is completed or failed
118
+ if (data.job.status === 'completed' || data.job.status === 'failed') {
119
+ clearInterval(refreshInterval)
120
+ }
121
+ } catch (error) {
122
+ const errorMsg = window.i18n ? window.i18n.t('status.errorMessage') : 'Error loading status'
123
+ document.getElementById('statusContent').innerHTML = `
124
+ <p class="error-message">${errorMsg}: ${error.message}</p>
125
+ `
126
+ clearInterval(refreshInterval)
127
+ }
128
+ }
129
+
130
+ // Listen for language changes and refresh display (for the card content)
131
+ if (window.i18n) {
132
+ const originalSetLanguage = window.i18n.setLanguage.bind(window.i18n)
133
+ window.i18n.setLanguage = async function(lang) {
134
+ await originalSetLanguage(lang)
135
+ if (jobId && window.lastJobData) {
136
+ displayStatus(window.lastJobData)
137
+ }
138
+ }
139
+ }
140
+
141
+ function displayStatus(data) {
142
+ const { job, queuePosition } = data
143
+ const statusClass = `status-${job.status}`
144
+
145
+ // Get translations
146
+ const t = (key, fallback) => window.i18n ? window.i18n.t(key, fallback) : fallback
147
+
148
+ let statusText = {
149
+ queued: t('status.statusQueued', 'Queued'),
150
+ processing: t('status.statusProcessing', 'Processing'),
151
+ completed: t('status.statusCompleted', 'Completed'),
152
+ failed: t('status.statusFailed', 'Failed'),
153
+ }[job.status]
154
+
155
+ let progressPercent = 0
156
+ if (job.status === 'processing') progressPercent = 50
157
+ if (job.status === 'completed') progressPercent = 100
158
+
159
+ const sourceText = job.source.type === 'upload'
160
+ ? t('status.sourceUpload', 'File Upload')
161
+ : t('status.sourceGit', 'Git Repository')
162
+
163
+ let content = `
164
+ <h2>${t('status.jobId', 'Job ID')}: ${job.id}</h2>
165
+ <div style="margin: 1.5rem 0;">
166
+ <span class="status-badge ${statusClass}">${statusText}</span>
167
+ </div>
168
+
169
+ ${
170
+ queuePosition > 0
171
+ ? `
172
+ <p><strong>${t('status.queuePosition', 'Position in queue')}:</strong> ${queuePosition}</p>
173
+ `
174
+ : ''
175
+ }
176
+
177
+ <div class="progress-bar">
178
+ <div class="progress-fill" style="width: ${progressPercent}%"></div>
179
+ </div>
180
+
181
+ <div style="margin-top: 1.5rem;">
182
+ <p><strong>${t('status.source', 'Source')}:</strong> ${sourceText}</p>
183
+ ${
184
+ job.source.gitUrl
185
+ ? `<p><strong>${t('status.repository', 'Repository')}:</strong> ${job.source.gitUrl}</p>`
186
+ : ''
187
+ }
188
+ ${
189
+ job.source.files
190
+ ? `<p><strong>${t('status.files', 'Files')}:</strong> ${job.source.files.length} ${t('status.filesCount', 'file(s)')}</p>`
191
+ : ''
192
+ }
193
+ <p><strong>${t('status.format', 'Format')}:</strong> ${
194
+ job.target.preset || job.target.format
195
+ }</p>
196
+ <p><strong>${t('status.createdAt', 'Created')}:</strong> ${new Date(
197
+ job.createdAt
198
+ ).toLocaleString()}</p>
199
+ ${
200
+ job.startedAt
201
+ ? `<p><strong>${t('status.startedAt', 'Started')}:</strong> ${new Date(
202
+ job.startedAt
203
+ ).toLocaleString()}</p>`
204
+ : ''
205
+ }
206
+ ${
207
+ job.completedAt
208
+ ? `<p><strong>${t('status.completedAt', 'Completed')}:</strong> ${new Date(
209
+ job.completedAt
210
+ ).toLocaleString()}</p>`
211
+ : ''
212
+ }
213
+ </div>
214
+
215
+ ${
216
+ job.status === 'failed' && job.error
217
+ ? `
218
+ <div style="margin-top: 1.5rem; padding: 1rem; background: #fee2e2; border-radius: 6px;">
219
+ <strong>${t('status.error', 'Error')}:</strong> ${job.error}
220
+ </div>
221
+ `
222
+ : ''
223
+ }
224
+
225
+ ${
226
+ job.status === 'completed'
227
+ ? `
228
+ <div style="margin-top: 1.5rem;">
229
+ <button class="btn-primary" onclick="downloadResult()">
230
+ <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
231
+ <path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"></path>
232
+ <polyline points="7 10 12 15 17 10"></polyline>
233
+ <line x1="12" y1="15" x2="12" y2="3"></line>
234
+ </svg>
235
+ ${t('status.downloadButton', 'Download File')}
236
+ </button>
237
+ </div>
238
+ `
239
+ : ''
240
+ }
241
+ `
242
+
243
+ document.getElementById('statusContent').innerHTML = content
244
+ }
245
+
246
+ function downloadResult() {
247
+ window.location.href = `/api/download/${jobId}`
248
+ }
249
+ </script>
250
+ </body>
251
+ </html>