@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.
- package/dist/assets/capacitor/{index.bfe7363b.js → index.44a6a9b3.js} +1 -1
- package/dist/assets/capacitor/index.html +1 -1
- package/dist/assets/capacitor/{jszip.min.f6eda75b.js → jszip.min.2f991499.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/pdf/{index.aa124b49.js → index.49b3a4d9.js} +1 -1
- package/dist/assets/pdf/index.html +1 -1
- package/dist/assets/scorm2004/{index.45f7501b.js → index.031764e4.js} +1 -1
- package/dist/assets/scorm2004/index.html +1 -1
- package/dist/assets/{xapi/jszip.min.eaecf580.js → scorm2004/jszip.min.19c66d77.js} +1 -1
- package/dist/assets/web/{index.39a3e3eb.js → index.98993ded.js} +1 -1
- package/dist/assets/web/{index.1062f2c5.js → index.e84d3f3b.js} +1 -1
- package/dist/assets/web/index.html +1 -1
- package/dist/assets/web/{jszip.min.eaecf580.js → jszip.min.19c66d77.js} +1 -1
- package/dist/assets/xapi/{index.018a032a.js → index.f2e89e49.js} +1 -1
- package/dist/assets/xapi/{index.780a0ec3.js → index.f5402f58.js} +1 -1
- package/dist/assets/xapi/index.html +1 -1
- package/dist/assets/{scorm2004/jszip.min.eaecf580.js → xapi/jszip.min.19c66d77.js} +1 -1
- package/dist/index.js +3 -3
- 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
- /package/dist/assets/{pdf → indexeddb}/jszip.min.4fbcc13f.js +0 -0
- /package/dist/assets/{indexeddb → pdf}/jszip.min.63142cc8.js +0 -0
- /package/dist/assets/{xapi → web}/jszip.min.63142cc8.js +0 -0
- /package/dist/assets/{web → xapi}/jszip.min.4fbcc13f.js +0 -0
package/DESKTOP_APP_README.md
DELETED
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
# LiaScript Exporter Desktop Application
|
|
2
|
-
|
|
3
|
-
Native desktop application wrapping the LiaScript-Exporter CLI and web server using Electron.
|
|
4
|
-
|
|
5
|
-
## Download
|
|
6
|
-
|
|
7
|
-
[](https://github.com/LiaScript/LiaScript-Exporter/releases/latest)
|
|
8
|
-
|
|
9
|
-
Download from [GitHub Releases](https://github.com/LiaScript/LiaScript-Exporter/releases/latest)
|
|
10
|
-
|
|
11
|
-
### Available Packages
|
|
12
|
-
|
|
13
|
-
**Windows:**
|
|
14
|
-
- `.exe` - NSIS installer with start menu shortcuts
|
|
15
|
-
- `-win.zip` - Portable archive
|
|
16
|
-
|
|
17
|
-
**macOS:**
|
|
18
|
-
- `.dmg` - Disk image installer
|
|
19
|
-
- `-mac.zip` - Portable archive
|
|
20
|
-
|
|
21
|
-
**Linux:**
|
|
22
|
-
- `.AppImage` - Universal self-contained executable (no installation)
|
|
23
|
-
- `.deb` - Debian/Ubuntu package
|
|
24
|
-
- `.rpm` - Fedora/RHEL/openSUSE package
|
|
25
|
-
- `.tar.gz` - Portable archive
|
|
26
|
-
|
|
27
|
-
## Development
|
|
28
|
-
|
|
29
|
-
```bash
|
|
30
|
-
# Install dependencies
|
|
31
|
-
npm install
|
|
32
|
-
|
|
33
|
-
# Run in development mode
|
|
34
|
-
npm run electron:dev
|
|
35
|
-
|
|
36
|
-
# Build for current platform
|
|
37
|
-
npm run electron:build:linux # Linux (AppImage, deb, rpm, tar.gz)
|
|
38
|
-
npm run electron:build:win # Windows (requires Wine on Linux)
|
|
39
|
-
npm run electron:build:mac # macOS (requires macOS)
|
|
40
|
-
|
|
41
|
-
# Quick Linux build (AppImage only)
|
|
42
|
-
npm run electron:build:quick
|
|
43
|
-
```
|
|
44
|
-
|
|
45
|
-
## Architecture
|
|
46
|
-
|
|
47
|
-
The desktop app embeds a Fastify web server that serves the existing UI and handles export operations. The Electron wrapper provides:
|
|
48
|
-
- Native file dialogs (replacing browser file input)
|
|
49
|
-
- System tray integration
|
|
50
|
-
- Auto-updates (when configured)
|
|
51
|
-
- Native installers for each platform
|
|
52
|
-
|
|
53
|
-
**Key files:**
|
|
54
|
-
- `electron/main.js` - Main process & window management
|
|
55
|
-
- `electron/preload.js` - Security context bridge
|
|
56
|
-
- `electron/server-wrapper.js` - Embedded server
|
|
57
|
-
- `electron/scripts/after-pack.js` - Build post-processing
|
|
58
|
-
- `electron-builder.json` - Package configuration
|
package/DOCKERHUB_DESCRIPTION.md
DELETED
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
# Docker Hub Description for LiaScript-Exporter
|
|
2
|
-
|
|
3
|
-
## Short Description (100 character limit)
|
|
4
|
-
Export LiaScript courses to SCORM, IMS, PDF, Web, and other formats for LMS platforms like Moodle.
|
|
5
|
-
|
|
6
|
-
## Full Description
|
|
7
|
-
|
|
8
|
-
# LiaScript-Exporter
|
|
9
|
-
|
|
10
|
-
Export educational LiaScript Markdown courses into multiple formats for Learning Management Systems (LMS), static content readers, and mobile platforms.
|
|
11
|
-
|
|
12
|
-
## Features
|
|
13
|
-
|
|
14
|
-
- **Multiple Export Formats**: SCORM 1.2, SCORM 2004, IMS Content Package, Web (PWA), PDF, ePub, Android APK, and more
|
|
15
|
-
- **LMS Integration**: Compatible with Moodle, ILIAS, OPAL, Blackboard, and other SCORM-compliant platforms
|
|
16
|
-
- **Web Interface**: User-friendly web server mode with job queue and multi-user support
|
|
17
|
-
- **CLI Tool**: Command-line interface for automated batch processing
|
|
18
|
-
- **Git Repository Support**: Export directly from Git repositories with branch/subdirectory options
|
|
19
|
-
- **Preset Configurations**: Pre-configured settings for popular LMS platforms
|
|
20
|
-
|
|
21
|
-
## Usage
|
|
22
|
-
|
|
23
|
-
### Web Server Mode (Recommended)
|
|
24
|
-
```bash
|
|
25
|
-
docker run -p 3000:3000 liascript/exporter
|
|
26
|
-
```
|
|
27
|
-
Access the web interface at `http://localhost:3000`
|
|
28
|
-
|
|
29
|
-
### CLI Mode
|
|
30
|
-
```bash
|
|
31
|
-
docker run -v $(pwd):/workspace liascript/exporter \
|
|
32
|
-
liaex -i /workspace/course.md -f scorm1.2 -o /workspace/output
|
|
33
|
-
```
|
|
34
|
-
|
|
35
|
-
## Perfect For
|
|
36
|
-
|
|
37
|
-
- Educational institutions providing self-service export solutions
|
|
38
|
-
- Course creators needing multi-platform distribution
|
|
39
|
-
- OER (Open Educational Resources) content creators
|
|
40
|
-
- Organizations migrating content between different LMS platforms
|
|
41
|
-
|
|
42
|
-
## Documentation
|
|
43
|
-
|
|
44
|
-
Full documentation: [GitHub Repository](https://github.com/liaScript/LiaScript-Exporter)
|
|
45
|
-
|
|
46
|
-
## Project Support
|
|
47
|
-
|
|
48
|
-
This project is funded by the German Federal Ministry for Family Affairs, Senior Citizens, Women and Youth (BMBFSFJ) as part of the federal government's OER strategy.
|
|
49
|
-
|
|
50
|
-
## License
|
|
51
|
-
|
|
52
|
-
Licensed under MIT
|
package/Dockerfile
DELETED
|
@@ -1,129 +0,0 @@
|
|
|
1
|
-
# Docker image for Android export with Play Store signing support
|
|
2
|
-
|
|
3
|
-
# Base image with Java 21 for Android SDK and Gradle
|
|
4
|
-
FROM eclipse-temurin:21-jdk-jammy
|
|
5
|
-
|
|
6
|
-
# Limit Java memory usage (adjust values as needed)
|
|
7
|
-
#ENV JAVA_OPTS="-Xmx256m -Xms128m -XX:MaxMetaspaceSize=128m"
|
|
8
|
-
#ENV GRADLE_OPTS="-Xmx256m -Xms128m -XX:MaxMetaspaceSize=128m -Dorg.gradle.daemon=false -Dorg.gradle.parallel=false -Dorg.gradle.workers.max=1 -Dorg.gradle.jvmargs=-Xmx256m"
|
|
9
|
-
|
|
10
|
-
ARG ANDROID_SDK_ROOT=/opt/android-sdk
|
|
11
|
-
ENV ANDROID_SDK_ROOT=${ANDROID_SDK_ROOT}
|
|
12
|
-
ENV ANDROID_HOME=${ANDROID_SDK_ROOT}
|
|
13
|
-
ENV PATH=${PATH}:${ANDROID_SDK_ROOT}/cmdline-tools/latest/bin:${ANDROID_SDK_ROOT}/platform-tools:${ANDROID_SDK_ROOT}/build-tools/34.0.0
|
|
14
|
-
|
|
15
|
-
RUN apt-get update && apt-get install -y --no-install-recommends \
|
|
16
|
-
wget unzip git ca-certificates \
|
|
17
|
-
&& rm -rf /var/lib/apt/lists/*
|
|
18
|
-
|
|
19
|
-
# Install Android SDK command line tools
|
|
20
|
-
RUN mkdir -p ${ANDROID_SDK_ROOT}/cmdline-tools \
|
|
21
|
-
&& wget -q https://dl.google.com/android/repository/commandlinetools-linux-11076708_latest.zip -O /tmp/cmdline-tools.zip \
|
|
22
|
-
&& unzip -q /tmp/cmdline-tools.zip -d ${ANDROID_SDK_ROOT}/cmdline-tools \
|
|
23
|
-
&& mv ${ANDROID_SDK_ROOT}/cmdline-tools/cmdline-tools ${ANDROID_SDK_ROOT}/cmdline-tools/latest \
|
|
24
|
-
&& rm /tmp/cmdline-tools.zip
|
|
25
|
-
|
|
26
|
-
# Accept licenses + install required SDK packages (adjust as needed)
|
|
27
|
-
RUN yes | sdkmanager --licenses
|
|
28
|
-
RUN sdkmanager \
|
|
29
|
-
"platform-tools" \
|
|
30
|
-
"platforms;android-34" \
|
|
31
|
-
"platforms;android-36" \
|
|
32
|
-
"build-tools;34.0.0" \
|
|
33
|
-
"build-tools;35.0.0"
|
|
34
|
-
|
|
35
|
-
# ---- Install Node.js 24.x (NodeSource) ----
|
|
36
|
-
RUN curl -fsSL https://deb.nodesource.com/setup_24.x | bash - \
|
|
37
|
-
&& apt-get update \
|
|
38
|
-
&& apt-get install -y --no-install-recommends nodejs \
|
|
39
|
-
&& rm -rf /var/lib/apt/lists/*
|
|
40
|
-
|
|
41
|
-
# Install Chrome dependencies for Puppeteer
|
|
42
|
-
RUN apt-get update && apt-get install -y \
|
|
43
|
-
git \
|
|
44
|
-
wget \
|
|
45
|
-
gnupg \
|
|
46
|
-
ca-certificates \
|
|
47
|
-
fonts-liberation \
|
|
48
|
-
libasound2 \
|
|
49
|
-
libatk-bridge2.0-0 \
|
|
50
|
-
libatk1.0-0 \
|
|
51
|
-
libcups2 \
|
|
52
|
-
libdbus-1-3 \
|
|
53
|
-
libdrm2 \
|
|
54
|
-
libgbm1 \
|
|
55
|
-
libgtk-3-0 \
|
|
56
|
-
libnspr4 \
|
|
57
|
-
libnss3 \
|
|
58
|
-
libx11-xcb1 \
|
|
59
|
-
libxcomposite1 \
|
|
60
|
-
libxdamage1 \
|
|
61
|
-
libxrandr2 \
|
|
62
|
-
xdg-utils \
|
|
63
|
-
&& rm -rf /var/lib/apt/lists/*
|
|
64
|
-
|
|
65
|
-
# Set working directory
|
|
66
|
-
WORKDIR /app
|
|
67
|
-
|
|
68
|
-
# Install production dependencies
|
|
69
|
-
COPY package.json package-lock.json* ./
|
|
70
|
-
RUN npm ci --omit=dev
|
|
71
|
-
|
|
72
|
-
# Copy the dist folder
|
|
73
|
-
COPY dist/ ./dist/
|
|
74
|
-
|
|
75
|
-
# Pre-cache Capacitor dependencies for Android builds
|
|
76
|
-
RUN mkdir -p dist/capacitor-cache && \
|
|
77
|
-
cd dist/capacitor-cache && \
|
|
78
|
-
echo '{"dependencies":{"@capacitor/cli":"^8.0.0","@capacitor-community/text-to-speech":"git+https://github.com/capacitor-community/text-to-speech.git#v8.0.0","@capacitor/android":"^8.0.0","@capacitor/assets":"^3.0.5","@capacitor/core":"^8.0.0"}}' > package.json && \
|
|
79
|
-
npm install && \
|
|
80
|
-
echo "import type { CapacitorConfig } from '@capacitor/cli'; const config: CapacitorConfig = { appId: 'io.liascript.course', appName: 'App', webDir: 'www' }; export default config;" > capacitor.config.ts && \
|
|
81
|
-
mkdir -p www && \
|
|
82
|
-
cp -r ../assets/capacitor/* www/ && \
|
|
83
|
-
cp -r ../assets/common/* www/ && \
|
|
84
|
-
npx cap add android && \
|
|
85
|
-
cd android && \
|
|
86
|
-
./gradlew assembleDebug && \
|
|
87
|
-
cd .. && \
|
|
88
|
-
rm -rf www android capacitor.config.ts
|
|
89
|
-
|
|
90
|
-
# Install Puppeteer's Chrome explicitly
|
|
91
|
-
RUN npx puppeteer browsers install chrome
|
|
92
|
-
|
|
93
|
-
# Find and set the Chrome executable path
|
|
94
|
-
RUN CHROME_PATH=$(find /root/.cache/puppeteer -name chrome -type f | head -n 1) && \
|
|
95
|
-
echo "export PUPPETEER_EXECUTABLE_PATH=$CHROME_PATH" >> /etc/profile.d/puppeteer.sh && \
|
|
96
|
-
echo "Chrome installed at: $CHROME_PATH" && \
|
|
97
|
-
chmod +x /etc/profile.d/puppeteer.sh
|
|
98
|
-
|
|
99
|
-
# Create directory for keystore (to be mounted as volume for Play Store builds)
|
|
100
|
-
RUN mkdir -p /keystore
|
|
101
|
-
|
|
102
|
-
# Create entrypoint script with keystore support for signed Android builds
|
|
103
|
-
RUN echo '#!/bin/bash\n\
|
|
104
|
-
set -e\n\
|
|
105
|
-
\n\
|
|
106
|
-
# Set Puppeteer executable path\n\
|
|
107
|
-
export PUPPETEER_EXECUTABLE_PATH=$(find /root/.cache/puppeteer -name chrome -type f | head -n 1)\n\
|
|
108
|
-
\n\
|
|
109
|
-
# Check for keystore configuration when building release\n\
|
|
110
|
-
if [[ "$*" == *"--android-bundle"* ]] || [[ "$*" == *"--android-release"* ]]; then\n\
|
|
111
|
-
if [ -z "$KEYSTORE_FILE" ] && [ ! -f "/keystore/release.keystore" ]; then\n\
|
|
112
|
-
echo "Warning: No keystore found. Set KEYSTORE_FILE env var or mount keystore to /keystore/release.keystore"\n\
|
|
113
|
-
fi\n\
|
|
114
|
-
\n\
|
|
115
|
-
# Export signing environment variables if not already set\n\
|
|
116
|
-
export KEYSTORE_FILE=${KEYSTORE_FILE:-/keystore/release.keystore}\n\
|
|
117
|
-
export KEYSTORE_PASSWORD=${KEYSTORE_PASSWORD:-}\n\
|
|
118
|
-
export KEY_ALIAS=${KEY_ALIAS:-release}\n\
|
|
119
|
-
export KEY_PASSWORD=${KEY_PASSWORD:-}\n\
|
|
120
|
-
fi\n\
|
|
121
|
-
\n\
|
|
122
|
-
# Execute the main application\n\
|
|
123
|
-
exec node /app/dist/index.js "$@"' > /entrypoint.sh && \
|
|
124
|
-
chmod +x /entrypoint.sh
|
|
125
|
-
|
|
126
|
-
EXPOSE 4000
|
|
127
|
-
|
|
128
|
-
ENTRYPOINT ["/entrypoint.sh"]
|
|
129
|
-
CMD ["sh", "-c", "node /app/dist/index.js serve --port ${PORT:-4000}"]
|
package/PLAYSTORE_GUIDE.md
DELETED
|
@@ -1,172 +0,0 @@
|
|
|
1
|
-
# Play Store AAB Build - Quick Guide
|
|
2
|
-
|
|
3
|
-
Complete workflow to build and upload a signed Android App Bundle (AAB) to Google Play Store.
|
|
4
|
-
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## 📋 Prerequisites
|
|
8
|
-
|
|
9
|
-
### 1. Create Keystore (One-time Only)
|
|
10
|
-
```bash
|
|
11
|
-
keytool -genkey -v -keystore release.keystore -alias release \
|
|
12
|
-
-keyalg RSA -keysize 2048 -validity 10000
|
|
13
|
-
```
|
|
14
|
-
**⚠️ Important:** Backup your keystore securely! You'll need it for all future updates.
|
|
15
|
-
|
|
16
|
-
### 2. Organize Your Course
|
|
17
|
-
Put your markdown file in a clean folder (avoid large binaries or unrelated files):
|
|
18
|
-
```bash
|
|
19
|
-
mkdir -p ~/my-course
|
|
20
|
-
cp your-course.md ~/my-course/
|
|
21
|
-
# Copy any images/resources the course needs
|
|
22
|
-
```
|
|
23
|
-
|
|
24
|
-
### 3. Set Up Google Play Console
|
|
25
|
-
1. Go to [Google Play Console](https://play.google.com/console)
|
|
26
|
-
2. Create a new app
|
|
27
|
-
3. Fill in store listing details (title, description, screenshots)
|
|
28
|
-
4. Set up app category and content rating
|
|
29
|
-
|
|
30
|
-
---
|
|
31
|
-
|
|
32
|
-
## 🏗️ Build Process
|
|
33
|
-
|
|
34
|
-
### Step 1: Build Docker Image
|
|
35
|
-
```bash
|
|
36
|
-
cd ~/LiaScript-Exporter
|
|
37
|
-
docker build -t liascript-exporter-android .
|
|
38
|
-
```
|
|
39
|
-
|
|
40
|
-
### Step 2: Build Signed AAB
|
|
41
|
-
```bash
|
|
42
|
-
docker run --rm \
|
|
43
|
-
-v $(pwd)/release.keystore:/keystore/release.keystore \
|
|
44
|
-
-v $(pwd)/output:/output \
|
|
45
|
-
-v ~/my-course:/input \
|
|
46
|
-
-e KEYSTORE_PASSWORD="your-password" \
|
|
47
|
-
-e KEY_PASSWORD="your-key-password" \
|
|
48
|
-
liascript-exporter-android \
|
|
49
|
-
--input /input/your-course.md \
|
|
50
|
-
--format android \
|
|
51
|
-
--output /output/my-app \
|
|
52
|
-
--android-bundle \
|
|
53
|
-
--android-appId "com.yourcompany.yourapp" \
|
|
54
|
-
--android-appName "Your App Name"
|
|
55
|
-
```
|
|
56
|
-
|
|
57
|
-
**Output:** `output/my-app.aab` (ready for upload)
|
|
58
|
-
|
|
59
|
-
---
|
|
60
|
-
|
|
61
|
-
## 📤 Upload to Play Store
|
|
62
|
-
|
|
63
|
-
### Step 1: Create Release in Play Console
|
|
64
|
-
1. Open [Google Play Console](https://play.google.com/console)
|
|
65
|
-
2. Select your app
|
|
66
|
-
3. Go to **Production** → **Create new release**
|
|
67
|
-
4. Upload `output/my-app.aab`
|
|
68
|
-
|
|
69
|
-
### Step 2: Complete Release Details
|
|
70
|
-
- **Release name:** e.g., "Version 1.0.0"
|
|
71
|
-
- **Release notes:** Describe what's in your course
|
|
72
|
-
- Click **Review release**
|
|
73
|
-
|
|
74
|
-
### Step 3: Submit for Review
|
|
75
|
-
- Review all details
|
|
76
|
-
- Click **Start rollout to Production**
|
|
77
|
-
- Google will review your app (typically 1-3 days)
|
|
78
|
-
|
|
79
|
-
---
|
|
80
|
-
|
|
81
|
-
## 🔄 Updating Your App
|
|
82
|
-
|
|
83
|
-
When you need to update your course:
|
|
84
|
-
|
|
85
|
-
1. **Update your markdown file**
|
|
86
|
-
2. **Increment version** in your build (optional: add `--android-versionCode` flag)
|
|
87
|
-
3. **Rebuild AAB** with the same keystore and passwords
|
|
88
|
-
4. **Upload to Play Console** as a new release
|
|
89
|
-
|
|
90
|
-
---
|
|
91
|
-
|
|
92
|
-
## ⚙️ Configuration Options
|
|
93
|
-
|
|
94
|
-
### Required Flags
|
|
95
|
-
| Flag | Description | Example |
|
|
96
|
-
|------|-------------|---------|
|
|
97
|
-
| `--android-bundle` | Build AAB instead of APK | Required for Play Store |
|
|
98
|
-
| `--android-appId` | Unique app identifier | `com.company.app` |
|
|
99
|
-
| `--android-appName` | App display name | `"My Course"` |
|
|
100
|
-
|
|
101
|
-
### Optional Flags
|
|
102
|
-
| Flag | Description | Default |
|
|
103
|
-
|------|-------------|---------|
|
|
104
|
-
| `--android-keystore` | Keystore file path | `/keystore/release.keystore` |
|
|
105
|
-
| `--android-keystorePassword` | Keystore password | From `KEYSTORE_PASSWORD` env var |
|
|
106
|
-
| `--android-keyPassword` | Key password | From `KEY_PASSWORD` env var |
|
|
107
|
-
| `--android-keyAlias` | Key alias in keystore | `release` |
|
|
108
|
-
| `--android-icon` | Custom app icon (1024x1024px) | LiaScript default |
|
|
109
|
-
|
|
110
|
-
---
|
|
111
|
-
|
|
112
|
-
## 🐛 Troubleshooting
|
|
113
|
-
|
|
114
|
-
### Build takes too long
|
|
115
|
-
- **Cause:** Large files in course directory
|
|
116
|
-
- **Fix:** Ensure only course files are in the input folder
|
|
117
|
-
|
|
118
|
-
### "No input defined" error
|
|
119
|
-
- **Cause:** Course file not mounted correctly
|
|
120
|
-
- **Fix:** Check `-v ~/my-course:/input` matches `--input /input/your-course.md`
|
|
121
|
-
|
|
122
|
-
### "Keystore file not found"
|
|
123
|
-
- **Cause:** Keystore not mounted or wrong path
|
|
124
|
-
- **Fix:** Verify `-v $(pwd)/release.keystore:/keystore/release.keystore`
|
|
125
|
-
|
|
126
|
-
### AAB file not created
|
|
127
|
-
- **Cause:** Gradle build failed
|
|
128
|
-
- **Fix:** Check error messages in build output, ensure passwords are correct
|
|
129
|
-
|
|
130
|
-
---
|
|
131
|
-
|
|
132
|
-
## 📚 Example: Complete Workflow
|
|
133
|
-
|
|
134
|
-
```bash
|
|
135
|
-
# 1. Create keystore (first time only)
|
|
136
|
-
keytool -genkey -v -keystore release.keystore -alias release \
|
|
137
|
-
-keyalg RSA -keysize 2048 -validity 10000
|
|
138
|
-
|
|
139
|
-
# 2. Prepare course folder
|
|
140
|
-
mkdir -p ~/courses/intro-to-physics
|
|
141
|
-
cp intro-to-physics.md ~/courses/intro-to-physics/
|
|
142
|
-
|
|
143
|
-
# 3. Build Docker image
|
|
144
|
-
cd ~/LiaScript-Exporter
|
|
145
|
-
docker build -t liascript-exporter-android .
|
|
146
|
-
|
|
147
|
-
# 4. Build signed AAB
|
|
148
|
-
docker run --rm \
|
|
149
|
-
-v $(pwd)/release.keystore:/keystore/release.keystore \
|
|
150
|
-
-v $(pwd)/output:/output \
|
|
151
|
-
-v ~/courses/intro-to-physics:/input \
|
|
152
|
-
-e KEYSTORE_PASSWORD="mySecretPass123" \
|
|
153
|
-
-e KEY_PASSWORD="mySecretPass123" \
|
|
154
|
-
liascript-exporter-android \
|
|
155
|
-
--input /input/intro-to-physics.md \
|
|
156
|
-
--format android \
|
|
157
|
-
--output /output/physics-app \
|
|
158
|
-
--android-bundle \
|
|
159
|
-
--android-appId "com.education.physics" \
|
|
160
|
-
--android-appName "Physics 101"
|
|
161
|
-
|
|
162
|
-
# 5. Upload output/physics-app.aab to Google Play Console
|
|
163
|
-
```
|
|
164
|
-
|
|
165
|
-
---
|
|
166
|
-
|
|
167
|
-
## 📖 Additional Resources
|
|
168
|
-
|
|
169
|
-
- **Google Play Console:** https://play.google.com/console
|
|
170
|
-
- **Play Console Help:** https://support.google.com/googleplay/android-developer
|
|
171
|
-
- **App Signing Help:** https://developer.android.com/studio/publish/app-signing
|
|
172
|
-
- **LiaScript Documentation:** https://liascript.github.io
|
package/action.yml
DELETED
|
@@ -1,157 +0,0 @@
|
|
|
1
|
-
name: 'LiaScript-Exporter'
|
|
2
|
-
description: 'Export LiaScript courses to SCORM, PDF, Web, and other formats for LMS deployment and distribution'
|
|
3
|
-
author: 'LiaScript'
|
|
4
|
-
branding:
|
|
5
|
-
icon: 'book'
|
|
6
|
-
color: 'blue'
|
|
7
|
-
|
|
8
|
-
inputs:
|
|
9
|
-
# Core inputs
|
|
10
|
-
input-file:
|
|
11
|
-
description: 'Path to README.md or project.yml file'
|
|
12
|
-
required: true
|
|
13
|
-
format:
|
|
14
|
-
description: 'Export format (scorm1.2, scorm2004, pdf, web, ims, xapi, rdf, json, project)'
|
|
15
|
-
required: true
|
|
16
|
-
output-name:
|
|
17
|
-
description: 'Base name for output files'
|
|
18
|
-
required: false
|
|
19
|
-
course-path:
|
|
20
|
-
description: 'Directory containing the course'
|
|
21
|
-
required: false
|
|
22
|
-
|
|
23
|
-
# SCORM settings
|
|
24
|
-
scorm-organization:
|
|
25
|
-
description: 'Organization title'
|
|
26
|
-
required: false
|
|
27
|
-
scorm-mastery-score:
|
|
28
|
-
description: 'Mastery score (0-100)'
|
|
29
|
-
required: false
|
|
30
|
-
default: '0'
|
|
31
|
-
scorm-typical-duration:
|
|
32
|
-
description: 'Duration (PT0H5M0S format)'
|
|
33
|
-
required: false
|
|
34
|
-
default: 'PT0H5M0S'
|
|
35
|
-
scorm-iframe:
|
|
36
|
-
description: 'Use iframe for SCORM'
|
|
37
|
-
required: false
|
|
38
|
-
default: 'false'
|
|
39
|
-
scorm-embed:
|
|
40
|
-
description: 'Embed Markdown in JS'
|
|
41
|
-
required: false
|
|
42
|
-
default: 'false'
|
|
43
|
-
scorm-always-active:
|
|
44
|
-
description: 'Keep SCORM always active'
|
|
45
|
-
required: false
|
|
46
|
-
default: 'false'
|
|
47
|
-
|
|
48
|
-
# PDF settings
|
|
49
|
-
pdf-theme:
|
|
50
|
-
description: 'LiaScript theme'
|
|
51
|
-
required: false
|
|
52
|
-
default: 'default'
|
|
53
|
-
pdf-format:
|
|
54
|
-
description: 'Paper format'
|
|
55
|
-
required: false
|
|
56
|
-
default: 'A4'
|
|
57
|
-
pdf-scale:
|
|
58
|
-
description: 'Webpage rendering scale'
|
|
59
|
-
required: false
|
|
60
|
-
default: '1'
|
|
61
|
-
pdf-landscape:
|
|
62
|
-
description: 'Landscape orientation'
|
|
63
|
-
required: false
|
|
64
|
-
default: 'false'
|
|
65
|
-
pdf-print-background:
|
|
66
|
-
description: 'Print background graphics'
|
|
67
|
-
required: false
|
|
68
|
-
default: 'false'
|
|
69
|
-
pdf-stylesheet:
|
|
70
|
-
description: 'Custom CSS file path'
|
|
71
|
-
required: false
|
|
72
|
-
|
|
73
|
-
# Web settings
|
|
74
|
-
web-zip:
|
|
75
|
-
description: 'Create zip archive'
|
|
76
|
-
required: false
|
|
77
|
-
default: 'true'
|
|
78
|
-
web-indexeddb:
|
|
79
|
-
description: 'Enable IndexedDB storage'
|
|
80
|
-
required: false
|
|
81
|
-
default: 'false'
|
|
82
|
-
web-iframe:
|
|
83
|
-
description: 'Use iframe version'
|
|
84
|
-
required: false
|
|
85
|
-
default: 'false'
|
|
86
|
-
|
|
87
|
-
# IMS settings
|
|
88
|
-
ims-indexeddb:
|
|
89
|
-
description: 'Use IndexedDB for persistence'
|
|
90
|
-
required: false
|
|
91
|
-
default: 'false'
|
|
92
|
-
|
|
93
|
-
# xAPI settings
|
|
94
|
-
xapi-endpoint:
|
|
95
|
-
description: 'LRS endpoint URL'
|
|
96
|
-
required: false
|
|
97
|
-
xapi-auth:
|
|
98
|
-
description: 'Authentication string'
|
|
99
|
-
required: false
|
|
100
|
-
xapi-actor:
|
|
101
|
-
description: 'xAPI actor JSON'
|
|
102
|
-
required: false
|
|
103
|
-
xapi-course-id:
|
|
104
|
-
description: 'Course identifier'
|
|
105
|
-
required: false
|
|
106
|
-
xapi-course-title:
|
|
107
|
-
description: 'Course title'
|
|
108
|
-
required: false
|
|
109
|
-
xapi-debug:
|
|
110
|
-
description: 'Enable debug logging'
|
|
111
|
-
required: false
|
|
112
|
-
default: 'false'
|
|
113
|
-
xapi-zip:
|
|
114
|
-
description: 'Package as zip'
|
|
115
|
-
required: false
|
|
116
|
-
default: 'false'
|
|
117
|
-
|
|
118
|
-
# RDF settings
|
|
119
|
-
rdf-format:
|
|
120
|
-
description: 'Output format (json-ld, n-quads)'
|
|
121
|
-
required: false
|
|
122
|
-
default: 'json-ld'
|
|
123
|
-
rdf-url:
|
|
124
|
-
description: 'External URL reference'
|
|
125
|
-
required: false
|
|
126
|
-
rdf-type:
|
|
127
|
-
description: 'Schema.org type'
|
|
128
|
-
required: false
|
|
129
|
-
default: 'Course'
|
|
130
|
-
rdf-license:
|
|
131
|
-
description: 'License URL'
|
|
132
|
-
required: false
|
|
133
|
-
rdf-educational-level:
|
|
134
|
-
description: 'Educational level'
|
|
135
|
-
required: false
|
|
136
|
-
|
|
137
|
-
# General settings
|
|
138
|
-
style:
|
|
139
|
-
description: 'Additional CSS styling'
|
|
140
|
-
required: false
|
|
141
|
-
responsive-voice-key:
|
|
142
|
-
description: 'Text-to-speech API key'
|
|
143
|
-
required: false
|
|
144
|
-
|
|
145
|
-
outputs:
|
|
146
|
-
output-file:
|
|
147
|
-
description: 'Path to the generated file'
|
|
148
|
-
file-size:
|
|
149
|
-
description: 'Size of generated file in bytes'
|
|
150
|
-
format:
|
|
151
|
-
description: 'Format that was generated'
|
|
152
|
-
success:
|
|
153
|
-
description: 'Whether export succeeded (true/false)'
|
|
154
|
-
|
|
155
|
-
runs:
|
|
156
|
-
using: 'node20'
|
|
157
|
-
main: 'action/dist/index.js'
|
package/custom.css
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
:root {
|
|
2
|
-
--color-highlight: 2, 255, 0;
|
|
3
|
-
--color-background: 122, 122, 122;
|
|
4
|
-
--color-border: 0, 0, 0;
|
|
5
|
-
--color-highlight-dark: 0, 0, 0;
|
|
6
|
-
--color-highlight-menu: 0, 0, 0;
|
|
7
|
-
--color-text: 0, 0, 255;
|
|
8
|
-
--global-font-size: 1rem;
|
|
9
|
-
--font-size-multiplier: 2;
|
|
10
|
-
}
|