@liascript/exporter 3.0.0--1.0.3 → 3.0.1--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.
- package/dist/assets/capacitor/{index.bfe7363b.js → index.a7f021f7.js} +1 -1
- package/dist/assets/capacitor/index.html +1 -1
- package/dist/assets/capacitor/{jszip.min.f6eda75b.js → jszip.min.43389eb1.js} +1 -1
- package/dist/assets/capacitor/{trystero-ipfs.min.b27a61d7.js → trystero-ipfs.min.f25fe3e7.js} +1 -1
- package/dist/assets/indexeddb/{index.599a57d6.js → index.4aceca2f.js} +1 -1
- package/dist/assets/indexeddb/index.html +1 -1
- package/dist/assets/indexeddb/{jszip.min.63142cc8.js → jszip.min.4fbcc13f.js} +1 -1
- package/dist/assets/scorm2004/{index.7a5820ab.js → index.33bec53a.js} +1 -1
- package/dist/assets/scorm2004/index.html +1 -1
- package/dist/assets/scorm2004/{jszip.min.63142cc8.js → jszip.min.4fbcc13f.js} +1 -1
- package/dist/assets/xapi/{index.018a032a.js → index.f2e89e49.js} +1 -1
- package/dist/assets/xapi/index.html +1 -1
- package/dist/assets/xapi/{jszip.min.eaecf580.js → jszip.min.19c66d77.js} +1 -1
- package/dist/index.js +47 -47
- package/dist/server/presets.json +94 -0
- package/dist/server/presets.yaml +120 -0
- package/dist/server/public/app.js +1 -0
- package/dist/server/public/assets/android.svg +38 -0
- package/dist/server/public/assets/cmi.svg +154 -0
- package/dist/server/public/assets/docx.svg +20 -0
- package/dist/server/public/assets/edX.svg +75 -0
- package/dist/server/public/assets/edx.svg +75 -0
- package/dist/server/public/assets/epub.svg +18 -0
- package/dist/server/public/assets/icon.svg +82 -0
- package/dist/server/public/assets/ilias.png +0 -0
- package/dist/server/public/assets/json.svg +4 -0
- package/dist/server/public/assets/learnworlds.png +0 -0
- package/dist/server/public/assets/moodle.svg +190 -0
- package/dist/server/public/assets/opal.png +0 -0
- package/dist/server/public/assets/openolat.png +0 -0
- package/dist/server/public/assets/pdf.svg +4 -0
- package/dist/server/public/assets/rdf.svg +4 -0
- package/dist/server/public/assets/scorm.png +0 -0
- package/dist/server/public/assets/web.png +0 -0
- package/dist/server/public/assets/xapi.png +0 -0
- package/dist/server/public/i18n.js +1 -0
- package/dist/server/public/index.html +1587 -0
- package/dist/server/public/locales/de.json +247 -0
- package/dist/server/public/locales/en.json +247 -0
- package/dist/server/public/status.html +251 -0
- package/dist/server/public/styles.css +712 -0
- package/package.json +5 -1
- package/.parcelrc +0 -3
- package/DESKTOP_APP_README.md +0 -58
- package/DOCKERHUB_DESCRIPTION.md +0 -52
- package/Dockerfile +0 -129
- package/PLAYSTORE_GUIDE.md +0 -172
- package/action.yml +0 -157
- package/custom.css +0 -10
- package/electron-builder.json +0 -149
- package/src/cli.ts +0 -69
- package/src/colorize.ts +0 -115
- package/src/export/android.ts +0 -419
- package/src/export/docx.ts +0 -1025
- package/src/export/epub.ts +0 -1306
- package/src/export/h5p.ts +0 -390
- package/src/export/helper.ts +0 -360
- package/src/export/ims.ts +0 -191
- package/src/export/pdf.ts +0 -406
- package/src/export/presets.ts +0 -220
- package/src/export/project.ts +0 -829
- package/src/export/rdf.ts +0 -551
- package/src/export/scorm12.ts +0 -167
- package/src/export/scorm2004.ts +0 -140
- package/src/export/web.ts +0 -306
- package/src/export/xapi.ts +0 -424
- package/src/exporter.ts +0 -296
- package/src/index.ts +0 -96
- package/src/parser.ts +0 -373
- package/src/presets.yaml +0 -219
- package/src/types.ts +0 -82
- package/tsconfig.json +0 -24
|
@@ -0,0 +1,1587 @@
|
|
|
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>LiaScript Exporter</title>
|
|
7
|
+
<link rel="stylesheet" href="/styles.css" />
|
|
8
|
+
<script src="/i18n.js"></script>
|
|
9
|
+
</head>
|
|
10
|
+
<body>
|
|
11
|
+
<nav class="navbar">
|
|
12
|
+
<div class="navbar-container">
|
|
13
|
+
<a href="/" class="navbar-brand">
|
|
14
|
+
<img src="./assets/icon.svg" alt="LiaScript" />
|
|
15
|
+
</a>
|
|
16
|
+
<ul class="navbar-menu">
|
|
17
|
+
<li>
|
|
18
|
+
<a href="/" class="navbar-link active" data-i18n="nav.home">Home</a>
|
|
19
|
+
</li>
|
|
20
|
+
<li>
|
|
21
|
+
<a href="/status.html" class="navbar-link" data-i18n="nav.status"
|
|
22
|
+
>Status</a
|
|
23
|
+
>
|
|
24
|
+
</li>
|
|
25
|
+
<li class="language-selector-container">
|
|
26
|
+
<select id="language-selector" class="language-selector">
|
|
27
|
+
<option value="en">EN</option>
|
|
28
|
+
<option value="de">DE</option>
|
|
29
|
+
</select>
|
|
30
|
+
</li>
|
|
31
|
+
</ul>
|
|
32
|
+
</div>
|
|
33
|
+
</nav>
|
|
34
|
+
|
|
35
|
+
<div class="container">
|
|
36
|
+
<header>
|
|
37
|
+
<h1 data-i18n="header.title">LiaScript Exporter</h1>
|
|
38
|
+
<p class="subtitle" data-i18n="header.subtitle">
|
|
39
|
+
Create exports for various LMS and formats
|
|
40
|
+
</p>
|
|
41
|
+
</header>
|
|
42
|
+
|
|
43
|
+
<main>
|
|
44
|
+
<form id="exportForm" enctype="multipart/form-data">
|
|
45
|
+
<!-- Section 1: Project Source -->
|
|
46
|
+
<section class="card">
|
|
47
|
+
<h2 data-i18n="sections.projectSource">1. Project Source</h2>
|
|
48
|
+
|
|
49
|
+
<!-- Upload Tab -->
|
|
50
|
+
<div class="source-tabs">
|
|
51
|
+
<button
|
|
52
|
+
type="button"
|
|
53
|
+
class="tab-button active"
|
|
54
|
+
data-tab="upload"
|
|
55
|
+
data-i18n="tabs.fileUpload"
|
|
56
|
+
>
|
|
57
|
+
File Upload
|
|
58
|
+
</button>
|
|
59
|
+
<button
|
|
60
|
+
type="button"
|
|
61
|
+
class="tab-button"
|
|
62
|
+
data-tab="git"
|
|
63
|
+
data-i18n="tabs.gitRepository"
|
|
64
|
+
>
|
|
65
|
+
Git Repository
|
|
66
|
+
</button>
|
|
67
|
+
</div>
|
|
68
|
+
|
|
69
|
+
<!-- Upload Panel -->
|
|
70
|
+
<div class="tab-panel active" id="upload-panel">
|
|
71
|
+
<div class="upload-area" id="uploadArea">
|
|
72
|
+
<svg
|
|
73
|
+
width="48"
|
|
74
|
+
height="48"
|
|
75
|
+
viewBox="0 0 24 24"
|
|
76
|
+
fill="none"
|
|
77
|
+
stroke="currentColor"
|
|
78
|
+
stroke-width="2"
|
|
79
|
+
>
|
|
80
|
+
<path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"></path>
|
|
81
|
+
<polyline points="17 8 12 3 7 8"></polyline>
|
|
82
|
+
<line x1="12" y1="3" x2="12" y2="15"></line>
|
|
83
|
+
</svg>
|
|
84
|
+
<p data-i18n="upload.dropzone">
|
|
85
|
+
Drop files here or click to select
|
|
86
|
+
</p>
|
|
87
|
+
<p class="hint" data-i18n="upload.hint">
|
|
88
|
+
ZIP files or multiple files (max. 100MB)
|
|
89
|
+
</p>
|
|
90
|
+
</div>
|
|
91
|
+
<div id="fileList" class="file-list"></div>
|
|
92
|
+
</div>
|
|
93
|
+
|
|
94
|
+
<!-- Git Panel -->
|
|
95
|
+
<div class="tab-panel" id="git-panel">
|
|
96
|
+
<div class="form-group">
|
|
97
|
+
<label for="gitUrl" data-i18n="git.repoUrlRequired"
|
|
98
|
+
>Repository URL *</label
|
|
99
|
+
>
|
|
100
|
+
<input
|
|
101
|
+
type="text"
|
|
102
|
+
id="gitUrl"
|
|
103
|
+
name="gitUrl"
|
|
104
|
+
placeholder="https://github.com/user/repo.git"
|
|
105
|
+
/>
|
|
106
|
+
</div>
|
|
107
|
+
<div class="form-row">
|
|
108
|
+
<div class="form-group">
|
|
109
|
+
<label for="gitBranch" data-i18n="git.branch"
|
|
110
|
+
>Branch / Tag</label
|
|
111
|
+
>
|
|
112
|
+
<input
|
|
113
|
+
type="text"
|
|
114
|
+
id="gitBranch"
|
|
115
|
+
name="gitBranch"
|
|
116
|
+
data-i18n-placeholder="git.branchPlaceholder"
|
|
117
|
+
placeholder="main"
|
|
118
|
+
/>
|
|
119
|
+
</div>
|
|
120
|
+
<div class="form-group">
|
|
121
|
+
<label for="gitSubdir" data-i18n="git.subdirectory"
|
|
122
|
+
>Subdirectory</label
|
|
123
|
+
>
|
|
124
|
+
<input
|
|
125
|
+
type="text"
|
|
126
|
+
id="gitSubdir"
|
|
127
|
+
name="gitSubdir"
|
|
128
|
+
data-i18n-placeholder="git.subdirPlaceholder"
|
|
129
|
+
placeholder="docs/"
|
|
130
|
+
/>
|
|
131
|
+
</div>
|
|
132
|
+
</div>
|
|
133
|
+
</div>
|
|
134
|
+
</section>
|
|
135
|
+
|
|
136
|
+
<!-- Section 2: Export Target -->
|
|
137
|
+
<section class="card">
|
|
138
|
+
<h2 data-i18n="sections.exportTarget">2. Export Target</h2>
|
|
139
|
+
|
|
140
|
+
<!-- Export Target Tabs -->
|
|
141
|
+
<div class="export-tabs">
|
|
142
|
+
<button
|
|
143
|
+
type="button"
|
|
144
|
+
class="export-tab-button active"
|
|
145
|
+
data-export-tab="presets"
|
|
146
|
+
data-i18n="exportTabs.presets"
|
|
147
|
+
>
|
|
148
|
+
Known Configurations
|
|
149
|
+
</button>
|
|
150
|
+
<button
|
|
151
|
+
type="button"
|
|
152
|
+
class="export-tab-button"
|
|
153
|
+
data-export-tab="formats"
|
|
154
|
+
data-i18n="exportTabs.formats"
|
|
155
|
+
>
|
|
156
|
+
Formats
|
|
157
|
+
</button>
|
|
158
|
+
</div>
|
|
159
|
+
|
|
160
|
+
<!-- Presets Panel -->
|
|
161
|
+
<div class="export-tab-panel active" id="presets-panel">
|
|
162
|
+
<div class="preset-grid" id="presets-grid">
|
|
163
|
+
<!-- Presets will be loaded dynamically -->
|
|
164
|
+
</div>
|
|
165
|
+
|
|
166
|
+
<hr
|
|
167
|
+
style="
|
|
168
|
+
margin: 2rem 0 1rem 0;
|
|
169
|
+
border: none;
|
|
170
|
+
border-top: 1px solid #e0e0e0;
|
|
171
|
+
"
|
|
172
|
+
/>
|
|
173
|
+
|
|
174
|
+
<div
|
|
175
|
+
id="preset-description"
|
|
176
|
+
style="
|
|
177
|
+
padding: 1rem;
|
|
178
|
+
background-color: #f8f9fa;
|
|
179
|
+
border-radius: 8px;
|
|
180
|
+
display: none;
|
|
181
|
+
"
|
|
182
|
+
>
|
|
183
|
+
<p style="margin: 0; color: #555; line-height: 1.6"></p>
|
|
184
|
+
</div>
|
|
185
|
+
</div>
|
|
186
|
+
|
|
187
|
+
<!-- Formats Panel -->
|
|
188
|
+
<div class="export-tab-panel" id="formats-panel">
|
|
189
|
+
<div class="preset-grid">
|
|
190
|
+
<label class="preset-tile">
|
|
191
|
+
<input
|
|
192
|
+
type="radio"
|
|
193
|
+
name="format"
|
|
194
|
+
value="scorm1.2"
|
|
195
|
+
data-i18n-description="formats.scorm12.description"
|
|
196
|
+
data-description="E-learning standard for learning management systems. Widely used, but older. Suitable for legacy LMS platforms. <a href='https://en.wikipedia.org/wiki/Sharable_Content_Object_Reference_Model' target='_blank'>Learn more</a>"
|
|
197
|
+
/>
|
|
198
|
+
<div class="preset-content">
|
|
199
|
+
<img
|
|
200
|
+
style="height: 48px"
|
|
201
|
+
src="../assets/scorm.png"
|
|
202
|
+
alt="SCORM"
|
|
203
|
+
/>
|
|
204
|
+
<h3 data-i18n="formats.scorm12.title">SCORM 1.2</h3>
|
|
205
|
+
<p data-i18n="formats.scorm12.subtitle">Legacy Standard</p>
|
|
206
|
+
</div>
|
|
207
|
+
</label>
|
|
208
|
+
|
|
209
|
+
<label class="preset-tile">
|
|
210
|
+
<input
|
|
211
|
+
type="radio"
|
|
212
|
+
name="format"
|
|
213
|
+
value="scorm2004"
|
|
214
|
+
data-i18n-description="formats.scorm2004.description"
|
|
215
|
+
data-description="Modern version of the SCORM standard with advanced features for learning paths and assessments. Recommended for current LMS systems. <a href='https://en.wikipedia.org/wiki/Sharable_Content_Object_Reference_Model' target='_blank'>Learn more</a>"
|
|
216
|
+
/>
|
|
217
|
+
<div class="preset-content">
|
|
218
|
+
<img
|
|
219
|
+
style="height: 48px"
|
|
220
|
+
src="../assets/scorm.png"
|
|
221
|
+
alt="SCORM"
|
|
222
|
+
/>
|
|
223
|
+
<h3 data-i18n="formats.scorm2004.title">SCORM 2004</h3>
|
|
224
|
+
<p data-i18n="formats.scorm2004.subtitle">
|
|
225
|
+
Modern Standard
|
|
226
|
+
</p>
|
|
227
|
+
</div>
|
|
228
|
+
</label>
|
|
229
|
+
|
|
230
|
+
<label class="preset-tile">
|
|
231
|
+
<input
|
|
232
|
+
type="radio"
|
|
233
|
+
name="format"
|
|
234
|
+
value="ims"
|
|
235
|
+
data-i18n-description="formats.ims.description"
|
|
236
|
+
data-description="IMS Content Packaging for exchanging learning content between different platforms. Standard for cross-platform compatibility. <a href='https://en.wikipedia.org/wiki/IMS_Content_Packaging' target='_blank'>Learn more</a>"
|
|
237
|
+
/>
|
|
238
|
+
<div class="preset-content">
|
|
239
|
+
<img
|
|
240
|
+
style="height: 48px"
|
|
241
|
+
src="../assets/cmi.svg"
|
|
242
|
+
alt="IMS"
|
|
243
|
+
/>
|
|
244
|
+
<h3 data-i18n="formats.ims.title">IMS</h3>
|
|
245
|
+
<p data-i18n="formats.ims.subtitle">Content Package</p>
|
|
246
|
+
</div>
|
|
247
|
+
</label>
|
|
248
|
+
|
|
249
|
+
<label class="preset-tile">
|
|
250
|
+
<input
|
|
251
|
+
type="radio"
|
|
252
|
+
name="format"
|
|
253
|
+
value="web"
|
|
254
|
+
data-i18n-description="formats.web.description"
|
|
255
|
+
data-description="Standalone HTML website for hosting on any web server. Works offline and online. Perfect for self-hosting."
|
|
256
|
+
/>
|
|
257
|
+
<div class="preset-content">
|
|
258
|
+
<img
|
|
259
|
+
style="height: 48px"
|
|
260
|
+
src="../assets/web.png"
|
|
261
|
+
alt="Web"
|
|
262
|
+
/>
|
|
263
|
+
<h3 data-i18n="formats.web.title">Web</h3>
|
|
264
|
+
<p data-i18n="formats.web.subtitle">Standalone</p>
|
|
265
|
+
</div>
|
|
266
|
+
</label>
|
|
267
|
+
|
|
268
|
+
<label class="preset-tile">
|
|
269
|
+
<input
|
|
270
|
+
type="radio"
|
|
271
|
+
name="format"
|
|
272
|
+
value="pdf"
|
|
273
|
+
data-i18n-description="formats.pdf.description"
|
|
274
|
+
data-description="Portable Document Format for printing and archiving. Ideal for static content and offline reading. <a href='https://en.wikipedia.org/wiki/PDF' target='_blank'>Learn more</a>"
|
|
275
|
+
/>
|
|
276
|
+
<div class="preset-content">
|
|
277
|
+
<img
|
|
278
|
+
style="height: 48px"
|
|
279
|
+
src="../assets/pdf.svg"
|
|
280
|
+
alt="PDF"
|
|
281
|
+
/>
|
|
282
|
+
<h3 data-i18n="formats.pdf.title">PDF</h3>
|
|
283
|
+
<p data-i18n="formats.pdf.subtitle">Document</p>
|
|
284
|
+
</div>
|
|
285
|
+
</label>
|
|
286
|
+
|
|
287
|
+
<label class="preset-tile">
|
|
288
|
+
<input
|
|
289
|
+
type="radio"
|
|
290
|
+
name="format"
|
|
291
|
+
value="android"
|
|
292
|
+
data-i18n-description="formats.android.description"
|
|
293
|
+
data-description="Android app package (APK) for installation on Android devices. Enables offline access and native app experience."
|
|
294
|
+
/>
|
|
295
|
+
<div class="preset-content">
|
|
296
|
+
<img
|
|
297
|
+
style="height: 48px"
|
|
298
|
+
src="../assets/android.svg"
|
|
299
|
+
alt="Android"
|
|
300
|
+
/>
|
|
301
|
+
<h3 data-i18n="formats.android.title">Android</h3>
|
|
302
|
+
<p data-i18n="formats.android.subtitle">App Package</p>
|
|
303
|
+
</div>
|
|
304
|
+
</label>
|
|
305
|
+
|
|
306
|
+
<label class="preset-tile">
|
|
307
|
+
<input
|
|
308
|
+
type="radio"
|
|
309
|
+
name="format"
|
|
310
|
+
value="json"
|
|
311
|
+
data-i18n-description="formats.json.description"
|
|
312
|
+
data-description="Structured data format for programmatic processing and API integration. Perfect for developers and automated workflows. <a href='https://en.wikipedia.org/wiki/JSON' target='_blank'>Learn more</a>"
|
|
313
|
+
/>
|
|
314
|
+
<div class="preset-content">
|
|
315
|
+
<img
|
|
316
|
+
style="height: 48px"
|
|
317
|
+
src="../assets/json.svg"
|
|
318
|
+
alt="JSON"
|
|
319
|
+
/>
|
|
320
|
+
<h3 data-i18n="formats.json.title">JSON</h3>
|
|
321
|
+
<p data-i18n="formats.json.subtitle">Data Export</p>
|
|
322
|
+
</div>
|
|
323
|
+
</label>
|
|
324
|
+
|
|
325
|
+
<label class="preset-tile">
|
|
326
|
+
<input
|
|
327
|
+
type="radio"
|
|
328
|
+
name="format"
|
|
329
|
+
value="epub"
|
|
330
|
+
data-i18n-description="formats.epub.description"
|
|
331
|
+
data-description="Open e-book format for e-readers and mobile devices. Supports reflowable layouts and is compatible with most e-readers. <a href='https://en.wikipedia.org/wiki/EPUB' target='_blank'>Learn more</a>"
|
|
332
|
+
/>
|
|
333
|
+
<div class="preset-content">
|
|
334
|
+
<img
|
|
335
|
+
style="height: 48px"
|
|
336
|
+
src="../assets/epub.svg"
|
|
337
|
+
alt="EPUB"
|
|
338
|
+
/>
|
|
339
|
+
<h3 data-i18n="formats.epub.title">EPUB</h3>
|
|
340
|
+
<p data-i18n="formats.epub.subtitle">E-Book</p>
|
|
341
|
+
</div>
|
|
342
|
+
</label>
|
|
343
|
+
|
|
344
|
+
<label class="preset-tile">
|
|
345
|
+
<input
|
|
346
|
+
type="radio"
|
|
347
|
+
name="format"
|
|
348
|
+
value="docx"
|
|
349
|
+
data-i18n-description="formats.docx.description"
|
|
350
|
+
data-description="Microsoft Word document format for professional documents. Compatible with Word 2007+, LibreOffice Writer, and Google Docs. <a href='https://en.wikipedia.org/wiki/Office_Open_XML' target='_blank'>Learn more</a>"
|
|
351
|
+
/>
|
|
352
|
+
<div class="preset-content">
|
|
353
|
+
<img
|
|
354
|
+
style="height: 48px"
|
|
355
|
+
src="../assets/docx.svg"
|
|
356
|
+
alt="DOCX"
|
|
357
|
+
/>
|
|
358
|
+
<h3 data-i18n="formats.docx.title">DOCX</h3>
|
|
359
|
+
<p data-i18n="formats.docx.subtitle">Word Document</p>
|
|
360
|
+
</div>
|
|
361
|
+
</label>
|
|
362
|
+
|
|
363
|
+
<label class="preset-tile">
|
|
364
|
+
<input
|
|
365
|
+
type="radio"
|
|
366
|
+
name="format"
|
|
367
|
+
value="rdf"
|
|
368
|
+
data-i18n-description="formats.rdf.description"
|
|
369
|
+
data-description="Resource Description Framework for structured metadata and Linked Data. For semantic web applications and metadata export. <a href='https://en.wikipedia.org/wiki/Resource_Description_Framework' target='_blank'>Learn more</a>"
|
|
370
|
+
/>
|
|
371
|
+
<div class="preset-content">
|
|
372
|
+
<img
|
|
373
|
+
style="height: 48px"
|
|
374
|
+
src="../assets/rdf.svg"
|
|
375
|
+
alt="RDF"
|
|
376
|
+
/>
|
|
377
|
+
<h3 data-i18n="formats.rdf.title">RDF</h3>
|
|
378
|
+
<p data-i18n="formats.rdf.subtitle">Metadata</p>
|
|
379
|
+
</div>
|
|
380
|
+
</label>
|
|
381
|
+
|
|
382
|
+
<label class="preset-tile">
|
|
383
|
+
<input
|
|
384
|
+
type="radio"
|
|
385
|
+
name="format"
|
|
386
|
+
value="xapi"
|
|
387
|
+
data-i18n-description="formats.xapi.description"
|
|
388
|
+
data-description="Experience API (xAPI) for Learning Analytics and detailed tracking of learning activities. Enables advanced analytics through a Learning Record Store (LRS). <a href='https://en.wikipedia.org/wiki/Experience_API' target='_blank'>Learn more</a>"
|
|
389
|
+
/>
|
|
390
|
+
<div class="preset-content">
|
|
391
|
+
<img
|
|
392
|
+
style="height: 48px"
|
|
393
|
+
src="../assets/xapi.png"
|
|
394
|
+
alt="xAPI"
|
|
395
|
+
/>
|
|
396
|
+
<h3 data-i18n="formats.xapi.title">xAPI</h3>
|
|
397
|
+
<p data-i18n="formats.xapi.subtitle">Learning Analytics</p>
|
|
398
|
+
</div>
|
|
399
|
+
</label>
|
|
400
|
+
</div>
|
|
401
|
+
|
|
402
|
+
<hr
|
|
403
|
+
style="
|
|
404
|
+
margin: 2rem 0 1rem 0;
|
|
405
|
+
border: none;
|
|
406
|
+
border-top: 1px solid #e0e0e0;
|
|
407
|
+
"
|
|
408
|
+
/>
|
|
409
|
+
|
|
410
|
+
<div
|
|
411
|
+
id="format-description"
|
|
412
|
+
style="
|
|
413
|
+
padding: 1rem;
|
|
414
|
+
background-color: #f8f9fa;
|
|
415
|
+
border-radius: 8px;
|
|
416
|
+
display: none;
|
|
417
|
+
"
|
|
418
|
+
>
|
|
419
|
+
<p style="margin: 0; color: #555; line-height: 1.6"></p>
|
|
420
|
+
</div>
|
|
421
|
+
</div>
|
|
422
|
+
</section>
|
|
423
|
+
|
|
424
|
+
<!-- Section 3: Advanced Settings -->
|
|
425
|
+
<section class="card">
|
|
426
|
+
<h2>
|
|
427
|
+
<button
|
|
428
|
+
type="button"
|
|
429
|
+
id="toggleAdvanced"
|
|
430
|
+
class="collapsible-toggle"
|
|
431
|
+
>
|
|
432
|
+
<span class="toggle-icon">▶</span>
|
|
433
|
+
<span data-i18n="sections.advancedSettings"
|
|
434
|
+
>3. Advanced Settings (optional)</span
|
|
435
|
+
>
|
|
436
|
+
</button>
|
|
437
|
+
</h2>
|
|
438
|
+
|
|
439
|
+
<div id="advancedSettings" class="collapsible-content hidden">
|
|
440
|
+
<!-- SCORM Settings -->
|
|
441
|
+
<div
|
|
442
|
+
class="settings-group"
|
|
443
|
+
data-formats="scorm1.2,scorm2004,moodle,ilias,opal,generic,openolat,openedx"
|
|
444
|
+
>
|
|
445
|
+
<h3 class="settings-heading" data-i18n="settings.scorm.title">
|
|
446
|
+
SCORM Settings
|
|
447
|
+
</h3>
|
|
448
|
+
|
|
449
|
+
<div class="form-group">
|
|
450
|
+
<label
|
|
451
|
+
for="masteryScore"
|
|
452
|
+
data-i18n="settings.scorm.masteryScore"
|
|
453
|
+
>Mastery Score</label
|
|
454
|
+
>
|
|
455
|
+
<input
|
|
456
|
+
type="text"
|
|
457
|
+
inputmode="numeric"
|
|
458
|
+
id="masteryScore"
|
|
459
|
+
name="option_masteryScore"
|
|
460
|
+
placeholder="70"
|
|
461
|
+
/>
|
|
462
|
+
<span class="hint" data-i18n="settings.scorm.masteryScoreHint"
|
|
463
|
+
>Minimum score to pass (0-100)</span
|
|
464
|
+
>
|
|
465
|
+
</div>
|
|
466
|
+
|
|
467
|
+
<div class="form-group">
|
|
468
|
+
<label
|
|
469
|
+
for="scormOrganization"
|
|
470
|
+
data-i18n="settings.scorm.organization"
|
|
471
|
+
>Organization</label
|
|
472
|
+
>
|
|
473
|
+
<input
|
|
474
|
+
type="text"
|
|
475
|
+
id="scormOrganization"
|
|
476
|
+
name="option_scormOrganization"
|
|
477
|
+
data-i18n-placeholder="settings.scorm.organizationHint"
|
|
478
|
+
placeholder="My Organization"
|
|
479
|
+
/>
|
|
480
|
+
<span class="hint" data-i18n="settings.scorm.organizationHint"
|
|
481
|
+
>Organization title in SCORM package</span
|
|
482
|
+
>
|
|
483
|
+
</div>
|
|
484
|
+
|
|
485
|
+
<div class="form-group">
|
|
486
|
+
<label
|
|
487
|
+
for="typicalDuration"
|
|
488
|
+
data-i18n="settings.scorm.typicalDuration"
|
|
489
|
+
>Typical Duration</label
|
|
490
|
+
>
|
|
491
|
+
<input
|
|
492
|
+
type="text"
|
|
493
|
+
id="typicalDuration"
|
|
494
|
+
name="option_typicalDuration"
|
|
495
|
+
placeholder="PT0H5M0S"
|
|
496
|
+
value="PT0H5M0S"
|
|
497
|
+
/>
|
|
498
|
+
<span
|
|
499
|
+
class="hint"
|
|
500
|
+
data-i18n="settings.scorm.typicalDurationHint"
|
|
501
|
+
>Format: PT0H5M0S (5 minutes)</span
|
|
502
|
+
>
|
|
503
|
+
</div>
|
|
504
|
+
|
|
505
|
+
<div class="form-group">
|
|
506
|
+
<label>
|
|
507
|
+
<input
|
|
508
|
+
type="checkbox"
|
|
509
|
+
id="scormIframe"
|
|
510
|
+
name="option_scormIframe"
|
|
511
|
+
/>
|
|
512
|
+
<span data-i18n="settings.scorm.useIframe">Use iFrame</span>
|
|
513
|
+
</label>
|
|
514
|
+
<span class="hint" data-i18n="settings.scorm.useIframeHint"
|
|
515
|
+
>For better compatibility in some LMS</span
|
|
516
|
+
>
|
|
517
|
+
</div>
|
|
518
|
+
|
|
519
|
+
<div class="form-group">
|
|
520
|
+
<label>
|
|
521
|
+
<input
|
|
522
|
+
type="checkbox"
|
|
523
|
+
id="scormEmbed"
|
|
524
|
+
name="option_scormEmbed"
|
|
525
|
+
/>
|
|
526
|
+
<span data-i18n="settings.scorm.embedMarkdown"
|
|
527
|
+
>Embed Markdown</span
|
|
528
|
+
>
|
|
529
|
+
</label>
|
|
530
|
+
<span
|
|
531
|
+
class="hint"
|
|
532
|
+
data-i18n="settings.scorm.embedMarkdownHint"
|
|
533
|
+
>Recommended for Moodle 4</span
|
|
534
|
+
>
|
|
535
|
+
</div>
|
|
536
|
+
</div>
|
|
537
|
+
|
|
538
|
+
<!-- xAPI Settings -->
|
|
539
|
+
<div class="settings-group" data-formats="xapi">
|
|
540
|
+
<h3 class="settings-heading" data-i18n="settings.xapi.title">
|
|
541
|
+
xAPI Settings
|
|
542
|
+
</h3>
|
|
543
|
+
|
|
544
|
+
<div class="form-group">
|
|
545
|
+
<label
|
|
546
|
+
for="xapiEndpoint"
|
|
547
|
+
data-i18n="settings.xapi.lrsEndpoint"
|
|
548
|
+
>LRS Endpoint</label
|
|
549
|
+
>
|
|
550
|
+
<input
|
|
551
|
+
type="text"
|
|
552
|
+
id="xapiEndpoint"
|
|
553
|
+
name="option_xapi-endpoint"
|
|
554
|
+
placeholder="https://lrs.example.com/xAPI/statements"
|
|
555
|
+
/>
|
|
556
|
+
<span class="hint" data-i18n="settings.xapi.lrsEndpointHint"
|
|
557
|
+
>URL of the Learning Record Store (LRS) endpoint</span
|
|
558
|
+
>
|
|
559
|
+
</div>
|
|
560
|
+
|
|
561
|
+
<div class="form-group">
|
|
562
|
+
<label for="xapiAuth" data-i18n="settings.xapi.authentication"
|
|
563
|
+
>Authentication</label
|
|
564
|
+
>
|
|
565
|
+
<input
|
|
566
|
+
type="text"
|
|
567
|
+
id="xapiAuth"
|
|
568
|
+
name="option_xapi-auth"
|
|
569
|
+
placeholder="Basic dXNlcm5hbWU6cGFzc3dvcmQ="
|
|
570
|
+
/>
|
|
571
|
+
<span
|
|
572
|
+
class="hint"
|
|
573
|
+
data-i18n="settings.xapi.authenticationHint"
|
|
574
|
+
>Basic Auth String for LRS (e.g. "Basic
|
|
575
|
+
base64encodedcredentials")</span
|
|
576
|
+
>
|
|
577
|
+
</div>
|
|
578
|
+
|
|
579
|
+
<div class="form-group">
|
|
580
|
+
<label for="xapiActor" data-i18n="settings.xapi.actor"
|
|
581
|
+
>Actor (JSON)</label
|
|
582
|
+
>
|
|
583
|
+
<textarea
|
|
584
|
+
id="xapiActor"
|
|
585
|
+
name="option_xapi-actor"
|
|
586
|
+
rows="4"
|
|
587
|
+
data-i18n-placeholder="settings.xapi.actorPlaceholder"
|
|
588
|
+
placeholder='{"objectType":"Agent","name":"Anonymous","mbox":"mailto:anonymous@example.com"}'
|
|
589
|
+
></textarea>
|
|
590
|
+
<span class="hint" data-i18n="settings.xapi.actorHint"
|
|
591
|
+
>xAPI Actor in JSON format (default: anonymous)</span
|
|
592
|
+
>
|
|
593
|
+
</div>
|
|
594
|
+
|
|
595
|
+
<div class="form-group">
|
|
596
|
+
<label for="xapiCourseId" data-i18n="settings.xapi.courseId"
|
|
597
|
+
>Course ID</label
|
|
598
|
+
>
|
|
599
|
+
<input
|
|
600
|
+
type="text"
|
|
601
|
+
id="xapiCourseId"
|
|
602
|
+
name="option_xapi-course-id"
|
|
603
|
+
placeholder="https://example.com/course/123"
|
|
604
|
+
/>
|
|
605
|
+
<span class="hint" data-i18n="settings.xapi.courseIdHint"
|
|
606
|
+
>Unique identifier for the course (default: course
|
|
607
|
+
URL)</span
|
|
608
|
+
>
|
|
609
|
+
</div>
|
|
610
|
+
|
|
611
|
+
<div class="form-group">
|
|
612
|
+
<label
|
|
613
|
+
for="xapiCourseTitle"
|
|
614
|
+
data-i18n="settings.xapi.courseTitle"
|
|
615
|
+
>Course Title</label
|
|
616
|
+
>
|
|
617
|
+
<input
|
|
618
|
+
type="text"
|
|
619
|
+
id="xapiCourseTitle"
|
|
620
|
+
name="option_xapi-course-title"
|
|
621
|
+
data-i18n-placeholder="settings.xapi.courseTitleHint"
|
|
622
|
+
placeholder="My LiaScript Course"
|
|
623
|
+
/>
|
|
624
|
+
<span class="hint" data-i18n="settings.xapi.courseTitleHint"
|
|
625
|
+
>Displayed course title (default: from document)</span
|
|
626
|
+
>
|
|
627
|
+
</div>
|
|
628
|
+
|
|
629
|
+
<div class="form-group">
|
|
630
|
+
<label
|
|
631
|
+
for="xapiMasteryScore"
|
|
632
|
+
data-i18n="settings.xapi.masteryScore"
|
|
633
|
+
>Mastery Score</label
|
|
634
|
+
>
|
|
635
|
+
<input
|
|
636
|
+
type="text"
|
|
637
|
+
inputmode="decimal"
|
|
638
|
+
id="xapiMasteryScore"
|
|
639
|
+
name="option_xapi-mastery-threshold"
|
|
640
|
+
placeholder="0.8"
|
|
641
|
+
/>
|
|
642
|
+
<span class="hint" data-i18n="settings.xapi.masteryScoreHint"
|
|
643
|
+
>Required score to pass (0.0-1.0, default: 0.8)</span
|
|
644
|
+
>
|
|
645
|
+
</div>
|
|
646
|
+
|
|
647
|
+
<div class="form-group">
|
|
648
|
+
<label
|
|
649
|
+
for="xapiProgressThreshold"
|
|
650
|
+
data-i18n="settings.xapi.progressThreshold"
|
|
651
|
+
>Progress Threshold</label
|
|
652
|
+
>
|
|
653
|
+
<input
|
|
654
|
+
type="text"
|
|
655
|
+
inputmode="decimal"
|
|
656
|
+
id="xapiProgressThreshold"
|
|
657
|
+
name="option_xapi-progress-threshold"
|
|
658
|
+
placeholder="0.9"
|
|
659
|
+
/>
|
|
660
|
+
<span
|
|
661
|
+
class="hint"
|
|
662
|
+
data-i18n="settings.xapi.progressThresholdHint"
|
|
663
|
+
>Required slide progress for completion (0.0-1.0, default:
|
|
664
|
+
0.9)</span
|
|
665
|
+
>
|
|
666
|
+
</div>
|
|
667
|
+
|
|
668
|
+
<div class="form-group">
|
|
669
|
+
<label>
|
|
670
|
+
<input
|
|
671
|
+
type="checkbox"
|
|
672
|
+
id="xapiDebug"
|
|
673
|
+
name="option_xapi-debug"
|
|
674
|
+
/>
|
|
675
|
+
<span data-i18n="settings.xapi.debugMode">Debug Mode</span>
|
|
676
|
+
</label>
|
|
677
|
+
<span class="hint" data-i18n="settings.xapi.debugModeHint"
|
|
678
|
+
>Output xAPI statements to console</span
|
|
679
|
+
>
|
|
680
|
+
</div>
|
|
681
|
+
|
|
682
|
+
<div class="form-group">
|
|
683
|
+
<label>
|
|
684
|
+
<input
|
|
685
|
+
type="checkbox"
|
|
686
|
+
id="xapiZip"
|
|
687
|
+
name="option_xapi-zip"
|
|
688
|
+
checked
|
|
689
|
+
/>
|
|
690
|
+
<span data-i18n="settings.xapi.zipPackage"
|
|
691
|
+
>Package as ZIP</span
|
|
692
|
+
>
|
|
693
|
+
</label>
|
|
694
|
+
<span class="hint" data-i18n="settings.xapi.zipPackageHint"
|
|
695
|
+
>Output as ZIP file</span
|
|
696
|
+
>
|
|
697
|
+
</div>
|
|
698
|
+
</div>
|
|
699
|
+
|
|
700
|
+
<!-- IMS Settings -->
|
|
701
|
+
<div class="settings-group" data-formats="ims">
|
|
702
|
+
<h3 class="settings-heading" data-i18n="settings.ims.title">
|
|
703
|
+
IMS Settings
|
|
704
|
+
</h3>
|
|
705
|
+
|
|
706
|
+
<div class="form-group">
|
|
707
|
+
<label>
|
|
708
|
+
<input
|
|
709
|
+
type="checkbox"
|
|
710
|
+
id="imsIndexeddb"
|
|
711
|
+
name="option_imsIndexeddb"
|
|
712
|
+
/>
|
|
713
|
+
<span data-i18n="settings.ims.useIndexedDB"
|
|
714
|
+
>Use IndexedDB</span
|
|
715
|
+
>
|
|
716
|
+
</label>
|
|
717
|
+
<span class="hint" data-i18n="settings.ims.useIndexedDBHint"
|
|
718
|
+
>Persistent storage in browser</span
|
|
719
|
+
>
|
|
720
|
+
</div>
|
|
721
|
+
</div>
|
|
722
|
+
|
|
723
|
+
<!-- Web Settings -->
|
|
724
|
+
<div class="settings-group" data-formats="web">
|
|
725
|
+
<h3 class="settings-heading" data-i18n="settings.web.title">
|
|
726
|
+
Web Settings
|
|
727
|
+
</h3>
|
|
728
|
+
|
|
729
|
+
<div class="form-group">
|
|
730
|
+
<label>
|
|
731
|
+
<input
|
|
732
|
+
type="checkbox"
|
|
733
|
+
id="webIframe"
|
|
734
|
+
name="option_webIframe"
|
|
735
|
+
/>
|
|
736
|
+
<span data-i18n="settings.web.iframeVersion"
|
|
737
|
+
>iFrame Version</span
|
|
738
|
+
>
|
|
739
|
+
</label>
|
|
740
|
+
<span class="hint" data-i18n="settings.web.iframeVersionHint"
|
|
741
|
+
>Hides the course URL</span
|
|
742
|
+
>
|
|
743
|
+
</div>
|
|
744
|
+
|
|
745
|
+
<div class="form-group">
|
|
746
|
+
<label>
|
|
747
|
+
<input
|
|
748
|
+
type="checkbox"
|
|
749
|
+
id="webIndexeddb"
|
|
750
|
+
name="option_webIndexeddb"
|
|
751
|
+
/>
|
|
752
|
+
<span data-i18n="settings.web.useIndexedDB"
|
|
753
|
+
>Use IndexedDB</span
|
|
754
|
+
>
|
|
755
|
+
</label>
|
|
756
|
+
<span class="hint" data-i18n="settings.web.useIndexedDBHint"
|
|
757
|
+
>Store data in browser</span
|
|
758
|
+
>
|
|
759
|
+
</div>
|
|
760
|
+
|
|
761
|
+
<div class="form-group">
|
|
762
|
+
<label>
|
|
763
|
+
<input
|
|
764
|
+
type="checkbox"
|
|
765
|
+
id="webZip"
|
|
766
|
+
name="option_webZip"
|
|
767
|
+
checked
|
|
768
|
+
/>
|
|
769
|
+
<span data-i18n="settings.web.zipPackage"
|
|
770
|
+
>Package as ZIP</span
|
|
771
|
+
>
|
|
772
|
+
</label>
|
|
773
|
+
<span class="hint" data-i18n="settings.web.zipPackageHint"
|
|
774
|
+
>Creates a ZIP file</span
|
|
775
|
+
>
|
|
776
|
+
</div>
|
|
777
|
+
</div>
|
|
778
|
+
|
|
779
|
+
<!-- PDF Settings -->
|
|
780
|
+
<div class="settings-group" data-formats="pdf">
|
|
781
|
+
<h3 class="settings-heading" data-i18n="settings.pdf.title">
|
|
782
|
+
PDF Settings
|
|
783
|
+
</h3>
|
|
784
|
+
|
|
785
|
+
<!-- Layout & Format -->
|
|
786
|
+
<div class="form-group">
|
|
787
|
+
<label for="pdfFormat" data-i18n="settings.pdf.pageFormat"
|
|
788
|
+
>Page Format</label
|
|
789
|
+
>
|
|
790
|
+
<select id="pdfFormat" name="option_pdf-format">
|
|
791
|
+
<option value="A4" selected>A4</option>
|
|
792
|
+
<option value="A3">A3</option>
|
|
793
|
+
<option value="A5">A5</option>
|
|
794
|
+
<option value="Letter">Letter</option>
|
|
795
|
+
<option value="Legal">Legal</option>
|
|
796
|
+
<option value="Tabloid">Tabloid</option>
|
|
797
|
+
<option value="Ledger">Ledger</option>
|
|
798
|
+
</select>
|
|
799
|
+
<span class="hint" data-i18n="settings.pdf.pageFormatHint"
|
|
800
|
+
>Standard paper size</span
|
|
801
|
+
>
|
|
802
|
+
</div>
|
|
803
|
+
|
|
804
|
+
<div class="form-group">
|
|
805
|
+
<label>
|
|
806
|
+
<input
|
|
807
|
+
type="checkbox"
|
|
808
|
+
id="pdfLandscape"
|
|
809
|
+
name="option_pdf-landscape"
|
|
810
|
+
/>
|
|
811
|
+
<span data-i18n="settings.pdf.landscape">Landscape</span>
|
|
812
|
+
</label>
|
|
813
|
+
<span class="hint" data-i18n="settings.pdf.landscapeHint"
|
|
814
|
+
>Print page in landscape orientation</span
|
|
815
|
+
>
|
|
816
|
+
</div>
|
|
817
|
+
|
|
818
|
+
<!-- Scale & Background -->
|
|
819
|
+
<div class="form-group">
|
|
820
|
+
<label for="pdfScale" data-i18n="settings.pdf.scale"
|
|
821
|
+
>Scale</label
|
|
822
|
+
>
|
|
823
|
+
<input
|
|
824
|
+
type="text"
|
|
825
|
+
inputmode="decimal"
|
|
826
|
+
id="pdfScale"
|
|
827
|
+
name="option_pdf-scale"
|
|
828
|
+
placeholder="1.0"
|
|
829
|
+
/>
|
|
830
|
+
<span class="hint" data-i18n="settings.pdf.scaleHint"
|
|
831
|
+
>Page scale (0.1 - 2.0)</span
|
|
832
|
+
>
|
|
833
|
+
</div>
|
|
834
|
+
|
|
835
|
+
<div class="form-group">
|
|
836
|
+
<label>
|
|
837
|
+
<input
|
|
838
|
+
type="checkbox"
|
|
839
|
+
id="pdfPrintBackground"
|
|
840
|
+
name="option_pdf-printBackground"
|
|
841
|
+
checked
|
|
842
|
+
/>
|
|
843
|
+
<span data-i18n="settings.pdf.printBackground"
|
|
844
|
+
>Print Background Graphics</span
|
|
845
|
+
>
|
|
846
|
+
</label>
|
|
847
|
+
<span
|
|
848
|
+
class="hint"
|
|
849
|
+
data-i18n="settings.pdf.printBackgroundHint"
|
|
850
|
+
>Prints background colors and images</span
|
|
851
|
+
>
|
|
852
|
+
</div>
|
|
853
|
+
|
|
854
|
+
<!-- Margins -->
|
|
855
|
+
<div class="form-group">
|
|
856
|
+
<label for="pdfMarginTop" data-i18n="settings.pdf.marginTop"
|
|
857
|
+
>Top Margin</label
|
|
858
|
+
>
|
|
859
|
+
<input
|
|
860
|
+
type="text"
|
|
861
|
+
id="pdfMarginTop"
|
|
862
|
+
name="option_pdf-margin-top"
|
|
863
|
+
placeholder="80"
|
|
864
|
+
value="80"
|
|
865
|
+
/>
|
|
866
|
+
<span class="hint" data-i18n="settings.pdf.marginTopHint"
|
|
867
|
+
>Top margin in pixels or with unit (e.g. "2cm")</span
|
|
868
|
+
>
|
|
869
|
+
</div>
|
|
870
|
+
|
|
871
|
+
<div class="form-group">
|
|
872
|
+
<label
|
|
873
|
+
for="pdfMarginBottom"
|
|
874
|
+
data-i18n="settings.pdf.marginBottom"
|
|
875
|
+
>Bottom Margin</label
|
|
876
|
+
>
|
|
877
|
+
<input
|
|
878
|
+
type="text"
|
|
879
|
+
id="pdfMarginBottom"
|
|
880
|
+
name="option_pdf-margin-bottom"
|
|
881
|
+
placeholder="80"
|
|
882
|
+
value="80"
|
|
883
|
+
/>
|
|
884
|
+
<span class="hint" data-i18n="settings.pdf.marginBottomHint"
|
|
885
|
+
>Bottom margin in pixels or with unit</span
|
|
886
|
+
>
|
|
887
|
+
</div>
|
|
888
|
+
|
|
889
|
+
<div class="form-group">
|
|
890
|
+
<label for="pdfMarginLeft" data-i18n="settings.pdf.marginLeft"
|
|
891
|
+
>Left Margin</label
|
|
892
|
+
>
|
|
893
|
+
<input
|
|
894
|
+
type="text"
|
|
895
|
+
id="pdfMarginLeft"
|
|
896
|
+
name="option_pdf-margin-left"
|
|
897
|
+
placeholder="30"
|
|
898
|
+
value="30"
|
|
899
|
+
/>
|
|
900
|
+
<span class="hint" data-i18n="settings.pdf.marginLeftHint"
|
|
901
|
+
>Left margin in pixels or with unit</span
|
|
902
|
+
>
|
|
903
|
+
</div>
|
|
904
|
+
|
|
905
|
+
<div class="form-group">
|
|
906
|
+
<label
|
|
907
|
+
for="pdfMarginRight"
|
|
908
|
+
data-i18n="settings.pdf.marginRight"
|
|
909
|
+
>Right Margin</label
|
|
910
|
+
>
|
|
911
|
+
<input
|
|
912
|
+
type="text"
|
|
913
|
+
id="pdfMarginRight"
|
|
914
|
+
name="option_pdf-margin-right"
|
|
915
|
+
placeholder="30"
|
|
916
|
+
value="30"
|
|
917
|
+
/>
|
|
918
|
+
<span class="hint" data-i18n="settings.pdf.marginRightHint"
|
|
919
|
+
>Right margin in pixels or with unit</span
|
|
920
|
+
>
|
|
921
|
+
</div>
|
|
922
|
+
|
|
923
|
+
<!-- Header & Footer -->
|
|
924
|
+
<div class="form-group">
|
|
925
|
+
<label>
|
|
926
|
+
<input
|
|
927
|
+
type="checkbox"
|
|
928
|
+
id="pdfDisplayHeaderFooter"
|
|
929
|
+
name="option_pdf-displayHeaderFooter"
|
|
930
|
+
/>
|
|
931
|
+
<span data-i18n="settings.pdf.displayHeaderFooter"
|
|
932
|
+
>Display Header & Footer</span
|
|
933
|
+
>
|
|
934
|
+
</label>
|
|
935
|
+
<span
|
|
936
|
+
class="hint"
|
|
937
|
+
data-i18n="settings.pdf.displayHeaderFooterHint"
|
|
938
|
+
>Shows header and footer on each page</span
|
|
939
|
+
>
|
|
940
|
+
</div>
|
|
941
|
+
|
|
942
|
+
<div
|
|
943
|
+
class="form-group"
|
|
944
|
+
id="pdfHeaderGroup"
|
|
945
|
+
style="display: none"
|
|
946
|
+
>
|
|
947
|
+
<label
|
|
948
|
+
for="pdfHeaderTemplate"
|
|
949
|
+
data-i18n="settings.pdf.headerTemplate"
|
|
950
|
+
>Header Template (HTML)</label
|
|
951
|
+
>
|
|
952
|
+
<textarea
|
|
953
|
+
id="pdfHeaderTemplate"
|
|
954
|
+
name="option_pdf-headerTemplate"
|
|
955
|
+
rows="3"
|
|
956
|
+
data-i18n-placeholder="settings.pdf.headerTemplatePlaceholder"
|
|
957
|
+
placeholder="<div style='font-size: 10px; text-align: center; width: 100%;'><span class='title'></span></div>"
|
|
958
|
+
></textarea>
|
|
959
|
+
<span class="hint" data-i18n="settings.pdf.headerTemplateHint"
|
|
960
|
+
>HTML template with classes: date, title, url, pageNumber,
|
|
961
|
+
totalPages</span
|
|
962
|
+
>
|
|
963
|
+
</div>
|
|
964
|
+
|
|
965
|
+
<div
|
|
966
|
+
class="form-group"
|
|
967
|
+
id="pdfFooterGroup"
|
|
968
|
+
style="display: none"
|
|
969
|
+
>
|
|
970
|
+
<label
|
|
971
|
+
for="pdfFooterTemplate"
|
|
972
|
+
data-i18n="settings.pdf.footerTemplate"
|
|
973
|
+
>Footer Template (HTML)</label
|
|
974
|
+
>
|
|
975
|
+
<textarea
|
|
976
|
+
id="pdfFooterTemplate"
|
|
977
|
+
name="option_pdf-footerTemplate"
|
|
978
|
+
rows="3"
|
|
979
|
+
data-i18n-placeholder="settings.pdf.footerTemplatePlaceholder"
|
|
980
|
+
placeholder="<div style='font-size: 10px; text-align: center; width: 100%;'><span class='pageNumber'></span> / <span class='totalPages'></span></div>"
|
|
981
|
+
></textarea>
|
|
982
|
+
<span class="hint" data-i18n="settings.pdf.footerTemplateHint"
|
|
983
|
+
>HTML template for footer</span
|
|
984
|
+
>
|
|
985
|
+
</div>
|
|
986
|
+
|
|
987
|
+
<!-- Page Ranges -->
|
|
988
|
+
<div class="form-group">
|
|
989
|
+
<label for="pdfPageRanges" data-i18n="settings.pdf.pageRanges"
|
|
990
|
+
>Page Ranges</label
|
|
991
|
+
>
|
|
992
|
+
<input
|
|
993
|
+
type="text"
|
|
994
|
+
id="pdfPageRanges"
|
|
995
|
+
name="option_pdf-pageRanges"
|
|
996
|
+
data-i18n-placeholder="settings.pdf.pageRangesPlaceholder"
|
|
997
|
+
placeholder="e.g. 1-5, 8, 11-13"
|
|
998
|
+
/>
|
|
999
|
+
<span class="hint" data-i18n="settings.pdf.pageRangesHint"
|
|
1000
|
+
>Print only specific pages (optional)</span
|
|
1001
|
+
>
|
|
1002
|
+
</div>
|
|
1003
|
+
|
|
1004
|
+
<!-- LiaScript Specific -->
|
|
1005
|
+
<div class="form-group">
|
|
1006
|
+
<label for="pdfTheme" data-i18n="settings.pdf.theme"
|
|
1007
|
+
>LiaScript Theme</label
|
|
1008
|
+
>
|
|
1009
|
+
<select id="pdfTheme" name="option_pdf-theme">
|
|
1010
|
+
<option value="">Standard</option>
|
|
1011
|
+
<option
|
|
1012
|
+
value="default"
|
|
1013
|
+
data-i18n="settings.pdf.themeDefault"
|
|
1014
|
+
>
|
|
1015
|
+
Default
|
|
1016
|
+
</option>
|
|
1017
|
+
<option
|
|
1018
|
+
value="turquoise"
|
|
1019
|
+
data-i18n="settings.pdf.themeTurquoise"
|
|
1020
|
+
>
|
|
1021
|
+
Turquoise
|
|
1022
|
+
</option>
|
|
1023
|
+
<option value="blue" data-i18n="settings.pdf.themeBlue">
|
|
1024
|
+
Blue
|
|
1025
|
+
</option>
|
|
1026
|
+
<option value="red" data-i18n="settings.pdf.themeRed">
|
|
1027
|
+
Red
|
|
1028
|
+
</option>
|
|
1029
|
+
<option value="yellow" data-i18n="settings.pdf.themeYellow">
|
|
1030
|
+
Yellow
|
|
1031
|
+
</option>
|
|
1032
|
+
</select>
|
|
1033
|
+
<span class="hint" data-i18n="settings.pdf.themeHint"
|
|
1034
|
+
>Color scheme for PDF</span
|
|
1035
|
+
>
|
|
1036
|
+
</div>
|
|
1037
|
+
|
|
1038
|
+
<div class="form-group">
|
|
1039
|
+
<label for="pdfTimeout" data-i18n="settings.pdf.timeout"
|
|
1040
|
+
>Timeout (ms)</label
|
|
1041
|
+
>
|
|
1042
|
+
<input
|
|
1043
|
+
type="text"
|
|
1044
|
+
inputmode="numeric"
|
|
1045
|
+
id="pdfTimeout"
|
|
1046
|
+
name="option_pdf-timeout"
|
|
1047
|
+
placeholder="15000"
|
|
1048
|
+
/>
|
|
1049
|
+
<span class="hint" data-i18n="settings.pdf.timeoutHint"
|
|
1050
|
+
>Wait time for complete loading (15000 = 15 seconds)</span
|
|
1051
|
+
>
|
|
1052
|
+
</div>
|
|
1053
|
+
|
|
1054
|
+
<!-- Advanced Options -->
|
|
1055
|
+
<div class="form-group">
|
|
1056
|
+
<label>
|
|
1057
|
+
<input
|
|
1058
|
+
type="checkbox"
|
|
1059
|
+
id="pdfPreferCSSPageSize"
|
|
1060
|
+
name="option_pdf-preferCSSPageSize"
|
|
1061
|
+
/>
|
|
1062
|
+
<span data-i18n="settings.pdf.preferCSSPageSize"
|
|
1063
|
+
>Prefer CSS @page Size</span
|
|
1064
|
+
>
|
|
1065
|
+
</label>
|
|
1066
|
+
<span
|
|
1067
|
+
class="hint"
|
|
1068
|
+
data-i18n="settings.pdf.preferCSSPageSizeHint"
|
|
1069
|
+
>CSS page size takes precedence</span
|
|
1070
|
+
>
|
|
1071
|
+
</div>
|
|
1072
|
+
|
|
1073
|
+
<div class="form-group">
|
|
1074
|
+
<label>
|
|
1075
|
+
<input
|
|
1076
|
+
type="checkbox"
|
|
1077
|
+
id="pdfOmitBackground"
|
|
1078
|
+
name="option_pdf-omitBackground"
|
|
1079
|
+
/>
|
|
1080
|
+
<span data-i18n="settings.pdf.omitBackground"
|
|
1081
|
+
>Transparent Background</span
|
|
1082
|
+
>
|
|
1083
|
+
</label>
|
|
1084
|
+
<span class="hint" data-i18n="settings.pdf.omitBackgroundHint"
|
|
1085
|
+
>White background is omitted</span
|
|
1086
|
+
>
|
|
1087
|
+
</div>
|
|
1088
|
+
</div>
|
|
1089
|
+
|
|
1090
|
+
<!-- Android Settings -->
|
|
1091
|
+
<div class="settings-group" data-formats="android">
|
|
1092
|
+
<h3 class="settings-heading" data-i18n="settings.android.title">
|
|
1093
|
+
Android Settings
|
|
1094
|
+
</h3>
|
|
1095
|
+
|
|
1096
|
+
<div class="form-group">
|
|
1097
|
+
<label
|
|
1098
|
+
for="androidAppName"
|
|
1099
|
+
data-i18n="settings.android.appName"
|
|
1100
|
+
>App Name</label
|
|
1101
|
+
>
|
|
1102
|
+
<input
|
|
1103
|
+
type="text"
|
|
1104
|
+
id="androidAppName"
|
|
1105
|
+
name="option_android-appName"
|
|
1106
|
+
data-i18n-placeholder="settings.android.appNameHint"
|
|
1107
|
+
placeholder="My App"
|
|
1108
|
+
/>
|
|
1109
|
+
<span class="hint" data-i18n="settings.android.appNameHint"
|
|
1110
|
+
>Name of the Android app</span
|
|
1111
|
+
>
|
|
1112
|
+
</div>
|
|
1113
|
+
|
|
1114
|
+
<div class="form-group">
|
|
1115
|
+
<label for="androidAppId" data-i18n="settings.android.appId"
|
|
1116
|
+
>App ID *</label
|
|
1117
|
+
>
|
|
1118
|
+
<input
|
|
1119
|
+
type="text"
|
|
1120
|
+
id="androidAppId"
|
|
1121
|
+
name="option_android-appId"
|
|
1122
|
+
data-i18n-placeholder="settings.android.appIdPlaceholder"
|
|
1123
|
+
placeholder="io.github.liascript"
|
|
1124
|
+
data-required="true"
|
|
1125
|
+
/>
|
|
1126
|
+
<span class="hint" data-i18n="settings.android.appIdHint"
|
|
1127
|
+
>Unique app identifier (e.g. io.github.liascript)</span
|
|
1128
|
+
>
|
|
1129
|
+
</div>
|
|
1130
|
+
</div>
|
|
1131
|
+
|
|
1132
|
+
<!-- EPUB Settings -->
|
|
1133
|
+
<div class="settings-group" data-formats="epub">
|
|
1134
|
+
<h3 class="settings-heading" data-i18n="settings.epub.title">
|
|
1135
|
+
EPUB Settings
|
|
1136
|
+
</h3>
|
|
1137
|
+
|
|
1138
|
+
<div class="form-group">
|
|
1139
|
+
<label for="epubAuthor" data-i18n="settings.epub.author"
|
|
1140
|
+
>Author</label
|
|
1141
|
+
>
|
|
1142
|
+
<input
|
|
1143
|
+
type="text"
|
|
1144
|
+
id="epubAuthor"
|
|
1145
|
+
name="option_epubAuthor"
|
|
1146
|
+
data-i18n-placeholder="settings.epub.authorPlaceholder"
|
|
1147
|
+
placeholder="John Doe"
|
|
1148
|
+
/>
|
|
1149
|
+
<span class="hint" data-i18n="settings.epub.authorHint"
|
|
1150
|
+
>Author of the e-book</span
|
|
1151
|
+
>
|
|
1152
|
+
</div>
|
|
1153
|
+
|
|
1154
|
+
<div class="form-group">
|
|
1155
|
+
<label for="epubPublisher" data-i18n="settings.epub.publisher"
|
|
1156
|
+
>Publisher</label
|
|
1157
|
+
>
|
|
1158
|
+
<input
|
|
1159
|
+
type="text"
|
|
1160
|
+
id="epubPublisher"
|
|
1161
|
+
name="option_epubPublisher"
|
|
1162
|
+
data-i18n-placeholder="settings.epub.publisherHint"
|
|
1163
|
+
placeholder="My Publisher"
|
|
1164
|
+
/>
|
|
1165
|
+
<span class="hint" data-i18n="settings.epub.publisherHint"
|
|
1166
|
+
>Publisher/Publisher house</span
|
|
1167
|
+
>
|
|
1168
|
+
</div>
|
|
1169
|
+
</div>
|
|
1170
|
+
|
|
1171
|
+
<!-- DOCX Settings -->
|
|
1172
|
+
<div class="settings-group" data-formats="docx">
|
|
1173
|
+
<h3 class="settings-heading" data-i18n="settings.docx.title">
|
|
1174
|
+
DOCX Settings
|
|
1175
|
+
</h3>
|
|
1176
|
+
|
|
1177
|
+
<div class="form-group">
|
|
1178
|
+
<label for="docxTitle" data-i18n="settings.docx.docTitle"
|
|
1179
|
+
>Document Title</label
|
|
1180
|
+
>
|
|
1181
|
+
<input
|
|
1182
|
+
type="text"
|
|
1183
|
+
id="docxTitle"
|
|
1184
|
+
name="option_docx-title"
|
|
1185
|
+
data-i18n-placeholder="settings.docx.docTitlePlaceholder"
|
|
1186
|
+
placeholder="My Course"
|
|
1187
|
+
/>
|
|
1188
|
+
<span class="hint" data-i18n="settings.docx.docTitleHint"
|
|
1189
|
+
>Title of the Word document</span
|
|
1190
|
+
>
|
|
1191
|
+
</div>
|
|
1192
|
+
|
|
1193
|
+
<div class="form-group">
|
|
1194
|
+
<label for="docxAuthor" data-i18n="settings.docx.author"
|
|
1195
|
+
>Author</label
|
|
1196
|
+
>
|
|
1197
|
+
<input
|
|
1198
|
+
type="text"
|
|
1199
|
+
id="docxAuthor"
|
|
1200
|
+
name="option_docx-author"
|
|
1201
|
+
data-i18n-placeholder="settings.docx.authorPlaceholder"
|
|
1202
|
+
placeholder="John Doe"
|
|
1203
|
+
/>
|
|
1204
|
+
<span class="hint" data-i18n="settings.docx.authorHint"
|
|
1205
|
+
>Author of the document</span
|
|
1206
|
+
>
|
|
1207
|
+
</div>
|
|
1208
|
+
|
|
1209
|
+
<div class="form-group">
|
|
1210
|
+
<label
|
|
1211
|
+
for="docxOrientation"
|
|
1212
|
+
data-i18n="settings.docx.orientation"
|
|
1213
|
+
>Orientation</label
|
|
1214
|
+
>
|
|
1215
|
+
<select id="docxOrientation" name="option_docx-orientation">
|
|
1216
|
+
<option
|
|
1217
|
+
value="portrait"
|
|
1218
|
+
selected
|
|
1219
|
+
data-i18n="settings.docx.orientationPortrait"
|
|
1220
|
+
>
|
|
1221
|
+
Portrait
|
|
1222
|
+
</option>
|
|
1223
|
+
<option
|
|
1224
|
+
value="landscape"
|
|
1225
|
+
data-i18n="settings.docx.orientationLandscape"
|
|
1226
|
+
>
|
|
1227
|
+
Landscape
|
|
1228
|
+
</option>
|
|
1229
|
+
</select>
|
|
1230
|
+
<span class="hint" data-i18n="settings.docx.orientationHint"
|
|
1231
|
+
>Page orientation</span
|
|
1232
|
+
>
|
|
1233
|
+
</div>
|
|
1234
|
+
|
|
1235
|
+
<div class="form-group">
|
|
1236
|
+
<label for="docxFont" data-i18n="settings.docx.font"
|
|
1237
|
+
>Font</label
|
|
1238
|
+
>
|
|
1239
|
+
<input
|
|
1240
|
+
type="text"
|
|
1241
|
+
id="docxFont"
|
|
1242
|
+
name="option_docx-font"
|
|
1243
|
+
placeholder="Arial"
|
|
1244
|
+
data-i18n-placeholder="settings.docx.fontPlaceholder"
|
|
1245
|
+
/>
|
|
1246
|
+
<span class="hint" data-i18n="settings.docx.fontHint"
|
|
1247
|
+
>Font name (default: Arial)</span
|
|
1248
|
+
>
|
|
1249
|
+
</div>
|
|
1250
|
+
|
|
1251
|
+
<div class="form-group">
|
|
1252
|
+
<label for="docxFontSize" data-i18n="settings.docx.fontSize"
|
|
1253
|
+
>Font Size</label
|
|
1254
|
+
>
|
|
1255
|
+
<input
|
|
1256
|
+
type="number"
|
|
1257
|
+
id="docxFontSize"
|
|
1258
|
+
name="option_docx-font-size"
|
|
1259
|
+
placeholder="22"
|
|
1260
|
+
min="10"
|
|
1261
|
+
max="100"
|
|
1262
|
+
/>
|
|
1263
|
+
<span class="hint" data-i18n="settings.docx.fontSizeHint"
|
|
1264
|
+
>Font size in half-points (22 = 11pt)</span
|
|
1265
|
+
>
|
|
1266
|
+
</div>
|
|
1267
|
+
|
|
1268
|
+
<div class="form-group">
|
|
1269
|
+
<label for="docxTheme" data-i18n="settings.docx.theme"
|
|
1270
|
+
>LiaScript Theme</label
|
|
1271
|
+
>
|
|
1272
|
+
<select id="docxTheme" name="option_docx-theme">
|
|
1273
|
+
<option
|
|
1274
|
+
value=""
|
|
1275
|
+
selected
|
|
1276
|
+
data-i18n="settings.docx.themeDefault"
|
|
1277
|
+
>
|
|
1278
|
+
Default
|
|
1279
|
+
</option>
|
|
1280
|
+
<option
|
|
1281
|
+
value="turquoise"
|
|
1282
|
+
data-i18n="settings.docx.themeTurquoise"
|
|
1283
|
+
>
|
|
1284
|
+
Turquoise
|
|
1285
|
+
</option>
|
|
1286
|
+
<option value="blue" data-i18n="settings.docx.themeBlue">
|
|
1287
|
+
Blue
|
|
1288
|
+
</option>
|
|
1289
|
+
<option value="red" data-i18n="settings.docx.themeRed">
|
|
1290
|
+
Red
|
|
1291
|
+
</option>
|
|
1292
|
+
<option
|
|
1293
|
+
value="yellow"
|
|
1294
|
+
data-i18n="settings.docx.themeYellow"
|
|
1295
|
+
>
|
|
1296
|
+
Yellow
|
|
1297
|
+
</option>
|
|
1298
|
+
</select>
|
|
1299
|
+
<span class="hint" data-i18n="settings.docx.themeHint"
|
|
1300
|
+
>Color scheme for the document</span
|
|
1301
|
+
>
|
|
1302
|
+
</div>
|
|
1303
|
+
|
|
1304
|
+
<div class="form-group">
|
|
1305
|
+
<label>
|
|
1306
|
+
<input
|
|
1307
|
+
type="checkbox"
|
|
1308
|
+
id="docxHeader"
|
|
1309
|
+
name="option_docx-header"
|
|
1310
|
+
/>
|
|
1311
|
+
<span data-i18n="settings.docx.header">Enable Header</span>
|
|
1312
|
+
</label>
|
|
1313
|
+
<span class="hint" data-i18n="settings.docx.headerHint"
|
|
1314
|
+
>Add a header to every page</span
|
|
1315
|
+
>
|
|
1316
|
+
</div>
|
|
1317
|
+
|
|
1318
|
+
<div class="form-group">
|
|
1319
|
+
<label>
|
|
1320
|
+
<input
|
|
1321
|
+
type="checkbox"
|
|
1322
|
+
id="docxFooter"
|
|
1323
|
+
name="option_docx-footer"
|
|
1324
|
+
/>
|
|
1325
|
+
<span data-i18n="settings.docx.footer">Enable Footer</span>
|
|
1326
|
+
</label>
|
|
1327
|
+
<span class="hint" data-i18n="settings.docx.footerHint"
|
|
1328
|
+
>Add a footer to every page</span
|
|
1329
|
+
>
|
|
1330
|
+
</div>
|
|
1331
|
+
|
|
1332
|
+
<div class="form-group">
|
|
1333
|
+
<label>
|
|
1334
|
+
<input
|
|
1335
|
+
type="checkbox"
|
|
1336
|
+
id="docxPageNumber"
|
|
1337
|
+
name="option_docx-page-number"
|
|
1338
|
+
/>
|
|
1339
|
+
<span data-i18n="settings.docx.pageNumber"
|
|
1340
|
+
>Page Numbers</span
|
|
1341
|
+
>
|
|
1342
|
+
</label>
|
|
1343
|
+
<span class="hint" data-i18n="settings.docx.pageNumberHint"
|
|
1344
|
+
>Add page numbers to the footer</span
|
|
1345
|
+
>
|
|
1346
|
+
</div>
|
|
1347
|
+
|
|
1348
|
+
<div class="form-group">
|
|
1349
|
+
<label for="docxTimeout" data-i18n="settings.docx.timeout"
|
|
1350
|
+
>Timeout (ms)</label
|
|
1351
|
+
>
|
|
1352
|
+
<input
|
|
1353
|
+
type="number"
|
|
1354
|
+
id="docxTimeout"
|
|
1355
|
+
name="option_docx-timeout"
|
|
1356
|
+
placeholder="15000"
|
|
1357
|
+
min="1000"
|
|
1358
|
+
max="120000"
|
|
1359
|
+
/>
|
|
1360
|
+
<span class="hint" data-i18n="settings.docx.timeoutHint"
|
|
1361
|
+
>Wait time for complete loading (15000 = 15 seconds)</span
|
|
1362
|
+
>
|
|
1363
|
+
</div>
|
|
1364
|
+
</div>
|
|
1365
|
+
|
|
1366
|
+
<!-- JSON Settings -->
|
|
1367
|
+
<div class="settings-group" data-formats="json">
|
|
1368
|
+
<h3 class="settings-heading" data-i18n="settings.json.title">
|
|
1369
|
+
JSON Settings
|
|
1370
|
+
</h3>
|
|
1371
|
+
|
|
1372
|
+
<div class="form-group">
|
|
1373
|
+
<label>
|
|
1374
|
+
<input
|
|
1375
|
+
type="checkbox"
|
|
1376
|
+
id="jsonFull"
|
|
1377
|
+
name="option_jsonFull"
|
|
1378
|
+
/>
|
|
1379
|
+
<span data-i18n="settings.json.fullJSON">Full JSON</span>
|
|
1380
|
+
</label>
|
|
1381
|
+
<span class="hint" data-i18n="settings.json.fullJSONHint"
|
|
1382
|
+
>Exports all details</span
|
|
1383
|
+
>
|
|
1384
|
+
</div>
|
|
1385
|
+
|
|
1386
|
+
<div class="form-group">
|
|
1387
|
+
<label>
|
|
1388
|
+
<input
|
|
1389
|
+
type="checkbox"
|
|
1390
|
+
id="jsonPretty"
|
|
1391
|
+
name="option_jsonPretty"
|
|
1392
|
+
checked
|
|
1393
|
+
/>
|
|
1394
|
+
<span data-i18n="settings.json.prettyPrint"
|
|
1395
|
+
>Formatted (Pretty Print)</span
|
|
1396
|
+
>
|
|
1397
|
+
</label>
|
|
1398
|
+
<span class="hint" data-i18n="settings.json.prettyPrintHint"
|
|
1399
|
+
>Readable formatted JSON</span
|
|
1400
|
+
>
|
|
1401
|
+
</div>
|
|
1402
|
+
</div>
|
|
1403
|
+
|
|
1404
|
+
<!-- RDF Settings -->
|
|
1405
|
+
<div class="settings-group" data-formats="rdf">
|
|
1406
|
+
<h3 class="settings-heading" data-i18n="settings.rdf.title">
|
|
1407
|
+
RDF Settings
|
|
1408
|
+
</h3>
|
|
1409
|
+
|
|
1410
|
+
<div class="form-group">
|
|
1411
|
+
<label for="rdfFormat" data-i18n="settings.rdf.outputFormat"
|
|
1412
|
+
>Output Format</label
|
|
1413
|
+
>
|
|
1414
|
+
<select id="rdfFormat" name="option_rdf-format">
|
|
1415
|
+
<option value="json-ld" selected>JSON-LD</option>
|
|
1416
|
+
<option value="n-quads">N-Quads</option>
|
|
1417
|
+
</select>
|
|
1418
|
+
<span class="hint" data-i18n="settings.rdf.outputFormatHint"
|
|
1419
|
+
>Format for RDF output (default: JSON-LD)</span
|
|
1420
|
+
>
|
|
1421
|
+
</div>
|
|
1422
|
+
|
|
1423
|
+
<div class="form-group">
|
|
1424
|
+
<label>
|
|
1425
|
+
<input
|
|
1426
|
+
type="checkbox"
|
|
1427
|
+
id="rdfPreview"
|
|
1428
|
+
name="option_rdf-preview"
|
|
1429
|
+
/>
|
|
1430
|
+
<span data-i18n="settings.rdf.previewConsole"
|
|
1431
|
+
>Preview in Console</span
|
|
1432
|
+
>
|
|
1433
|
+
</label>
|
|
1434
|
+
<span class="hint" data-i18n="settings.rdf.previewConsoleHint"
|
|
1435
|
+
>Display output in console</span
|
|
1436
|
+
>
|
|
1437
|
+
</div>
|
|
1438
|
+
|
|
1439
|
+
<div class="form-group">
|
|
1440
|
+
<label for="rdfUrl" data-i18n="settings.rdf.externalUrl"
|
|
1441
|
+
>External URL</label
|
|
1442
|
+
>
|
|
1443
|
+
<input
|
|
1444
|
+
type="url"
|
|
1445
|
+
id="rdfUrl"
|
|
1446
|
+
name="option_rdf-url"
|
|
1447
|
+
placeholder="https://example.com/course"
|
|
1448
|
+
/>
|
|
1449
|
+
<span class="hint" data-i18n="settings.rdf.externalUrlHint"
|
|
1450
|
+
>External URL for local projects (optional)</span
|
|
1451
|
+
>
|
|
1452
|
+
</div>
|
|
1453
|
+
|
|
1454
|
+
<div class="form-group">
|
|
1455
|
+
<label for="rdfType" data-i18n="settings.rdf.schemaType"
|
|
1456
|
+
>Schema.org Type</label
|
|
1457
|
+
>
|
|
1458
|
+
<input
|
|
1459
|
+
type="text"
|
|
1460
|
+
id="rdfType"
|
|
1461
|
+
name="option_rdf-type"
|
|
1462
|
+
placeholder="Course"
|
|
1463
|
+
/>
|
|
1464
|
+
<span class="hint" data-i18n="settings.rdf.schemaTypeHint"
|
|
1465
|
+
>Schema.org type (default: Course, e.g.
|
|
1466
|
+
EducationalResource)</span
|
|
1467
|
+
>
|
|
1468
|
+
</div>
|
|
1469
|
+
|
|
1470
|
+
<div class="form-group">
|
|
1471
|
+
<label for="rdfTemplate" data-i18n="settings.rdf.templateUrl"
|
|
1472
|
+
>Template URL/File</label
|
|
1473
|
+
>
|
|
1474
|
+
<input
|
|
1475
|
+
type="text"
|
|
1476
|
+
id="rdfTemplate"
|
|
1477
|
+
name="option_rdf-template"
|
|
1478
|
+
placeholder="template.json"
|
|
1479
|
+
/>
|
|
1480
|
+
<span class="hint" data-i18n="settings.rdf.templateUrlHint"
|
|
1481
|
+
>URL or JSON file as template (optional)</span
|
|
1482
|
+
>
|
|
1483
|
+
</div>
|
|
1484
|
+
|
|
1485
|
+
<div class="form-group">
|
|
1486
|
+
<label for="rdfLicense" data-i18n="settings.rdf.licenseUrl"
|
|
1487
|
+
>License URL</label
|
|
1488
|
+
>
|
|
1489
|
+
<input
|
|
1490
|
+
type="url"
|
|
1491
|
+
id="rdfLicense"
|
|
1492
|
+
name="option_rdf-license"
|
|
1493
|
+
placeholder="https://creativecommons.org/licenses/by/4.0/"
|
|
1494
|
+
/>
|
|
1495
|
+
<span class="hint" data-i18n="settings.rdf.licenseUrlHint"
|
|
1496
|
+
>URL to course license (optional)</span
|
|
1497
|
+
>
|
|
1498
|
+
</div>
|
|
1499
|
+
|
|
1500
|
+
<div class="form-group">
|
|
1501
|
+
<label
|
|
1502
|
+
for="rdfEducationalLevel"
|
|
1503
|
+
data-i18n="settings.rdf.educationalLevel"
|
|
1504
|
+
>Educational Level</label
|
|
1505
|
+
>
|
|
1506
|
+
<input
|
|
1507
|
+
type="text"
|
|
1508
|
+
id="rdfEducationalLevel"
|
|
1509
|
+
name="option_rdf-educationalLevel"
|
|
1510
|
+
placeholder="beginner, intermediate, advanced"
|
|
1511
|
+
/>
|
|
1512
|
+
<span
|
|
1513
|
+
class="hint"
|
|
1514
|
+
data-i18n="settings.rdf.educationalLevelHint"
|
|
1515
|
+
>Educational level (e.g. beginner, intermediate,
|
|
1516
|
+
advanced)</span
|
|
1517
|
+
>
|
|
1518
|
+
</div>
|
|
1519
|
+
</div>
|
|
1520
|
+
|
|
1521
|
+
<!-- No settings message -->
|
|
1522
|
+
<div class="settings-group no-settings" style="display: none">
|
|
1523
|
+
<p class="hint" data-i18n="settings.noSettings">
|
|
1524
|
+
No additional settings available for this format.
|
|
1525
|
+
</p>
|
|
1526
|
+
</div>
|
|
1527
|
+
</div>
|
|
1528
|
+
</section>
|
|
1529
|
+
|
|
1530
|
+
<!-- Submit Section -->
|
|
1531
|
+
<section class="card submit-section">
|
|
1532
|
+
<button type="submit" id="submitBtn" class="btn-primary">
|
|
1533
|
+
<svg
|
|
1534
|
+
width="20"
|
|
1535
|
+
height="20"
|
|
1536
|
+
viewBox="0 0 24 24"
|
|
1537
|
+
fill="none"
|
|
1538
|
+
stroke="currentColor"
|
|
1539
|
+
stroke-width="2"
|
|
1540
|
+
>
|
|
1541
|
+
<path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"></path>
|
|
1542
|
+
<polyline points="7 10 12 15 17 10"></polyline>
|
|
1543
|
+
<line x1="12" y1="15" x2="12" y2="3"></line>
|
|
1544
|
+
</svg>
|
|
1545
|
+
<span data-i18n="submit.button">Start Export</span>
|
|
1546
|
+
</button>
|
|
1547
|
+
<p class="info-text" data-i18n-html="submit.info">
|
|
1548
|
+
Export jobs are queued.<br />Only one export is processed at a
|
|
1549
|
+
time.
|
|
1550
|
+
</p>
|
|
1551
|
+
</section>
|
|
1552
|
+
</form>
|
|
1553
|
+
|
|
1554
|
+
<!-- Confirmation Modal -->
|
|
1555
|
+
<div id="confirmationModal" class="modal hidden">
|
|
1556
|
+
<div class="modal-content">
|
|
1557
|
+
<h2 data-i18n="modal.title">Export Started</h2>
|
|
1558
|
+
<div id="confirmationDetails"></div>
|
|
1559
|
+
<div class="modal-actions">
|
|
1560
|
+
<a
|
|
1561
|
+
id="statusLink"
|
|
1562
|
+
href="#"
|
|
1563
|
+
class="btn-primary"
|
|
1564
|
+
data-i18n="modal.statusLink"
|
|
1565
|
+
>Go to Status Page</a
|
|
1566
|
+
>
|
|
1567
|
+
<button
|
|
1568
|
+
type="button"
|
|
1569
|
+
id="closeModal"
|
|
1570
|
+
class="btn-secondary"
|
|
1571
|
+
data-i18n="modal.close"
|
|
1572
|
+
>
|
|
1573
|
+
Close
|
|
1574
|
+
</button>
|
|
1575
|
+
</div>
|
|
1576
|
+
</div>
|
|
1577
|
+
</div>
|
|
1578
|
+
</main>
|
|
1579
|
+
|
|
1580
|
+
<footer>
|
|
1581
|
+
<p data-i18n="footer.copyright">© 2026 LiaScript Exporter</p>
|
|
1582
|
+
</footer>
|
|
1583
|
+
</div>
|
|
1584
|
+
|
|
1585
|
+
<script src="/app.js"></script>
|
|
1586
|
+
</body>
|
|
1587
|
+
</html>
|