diff --git a/_sources/lectures/TWP52_en.rst b/_sources/lectures/TWP52_en.rst index e19079513c..b64d5a3fbb 100644 --- a/_sources/lectures/TWP52_en.rst +++ b/_sources/lectures/TWP52_en.rst @@ -305,7 +305,8 @@ Review + OptionMenu() - +.. raw:: html + :file: ../../scorm_package/index.html .. disqus:: :shortname: pyzombis diff --git a/_templates/layout.html b/_templates/layout.html index 00a8807a4f..68b4225437 100644 --- a/_templates/layout.html +++ b/_templates/layout.html @@ -275,6 +275,8 @@ {% endraw %} {% endif %} + + {% endblock %} {# Silence the sidebar's, relbar's #} diff --git a/scorm_package/imsmanifest.xml b/scorm_package/imsmanifest.xml new file mode 100644 index 0000000000..5af91efd24 --- /dev/null +++ b/scorm_package/imsmanifest.xml @@ -0,0 +1,21 @@ + + + + ADL SCORM + 1.2 + + + + SCORM Course + + Lesson 1 + + + + + + + + + + diff --git a/scorm_package/index.html b/scorm_package/index.html new file mode 100644 index 0000000000..6cd5672653 --- /dev/null +++ b/scorm_package/index.html @@ -0,0 +1,32 @@ + + + + SCORM Course + + + + +

Welcome to the SCORM Course

+

+
+ +
+ + + + diff --git a/scorm_package/scripts/scorm_functions.js b/scorm_package/scripts/scorm_functions.js new file mode 100644 index 0000000000..47d8f9c8c7 --- /dev/null +++ b/scorm_package/scripts/scorm_functions.js @@ -0,0 +1,76 @@ +var scorm = pipwerks.SCORM; +scorm.version = "1.2"; + +function initialize() { + return new Promise((resolve, reject) => { + var result = scorm.init(); + if (result) { + console.log("SCORM initialized"); + resolve(); + } else { + console.log("SCORM initialization failed"); + reject(); + } + }); +} + +function completeLesson() { + console.log("Complete Lesson button clicked"); + scorm.setValue("cmi.core.lesson_status", "completed").then(() => { + fetch('/LMSSetValue', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ element: "cmi.core.lesson_status", value: "completed" }), + }) + .then(response => response.json()) + .then(data => { + console.log('Success:', data); + }) + .catch((error) => { + console.error('Error:', error); + }); + }); +} + +scorm.setValue = function(element, value) { + return new Promise((resolve, reject) => { + fetch('/LMSSetValue', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ element: element, value: value }), + }) + .then(response => { + if (response.ok) { + resolve(); + } else { + reject(); + } + }) + .catch(error => { + console.error('Error:', error); + reject(); + }); + }); +}; + +scorm.getValue = function(element) { + return new Promise((resolve, reject) => { + fetch(`/LMSGetValue?element=${element}`) + .then(response => response.json()) + .then(data => { + resolve(data[element]); + }) + .catch(error => { + console.error('Error:', error); + reject(); + }); + }); +}; + +// Expose functions to global scope +window.completeLesson = completeLesson; +window.initialize = initialize; diff --git a/scorm_package/server.py b/scorm_package/server.py new file mode 100644 index 0000000000..23d5fe6ba2 --- /dev/null +++ b/scorm_package/server.py @@ -0,0 +1,38 @@ +from flask import Flask, request, jsonify + +app = Flask(__name__) + +# Dummy storage for demonstration +scorm_data = { + "student_name": "John Doe", # Example student name + "lesson_status": "", + "lesson_location": "" +} + +@app.route('/LMSInitialize', methods=['GET']) +def initialize(): + print("SCORM initialized") + return 'true', 200 + +@app.route('/LMSGetValue', methods=['GET']) +def get_value(): + element = request.args.get('element') + print(f"Getting value for: {element}") + return jsonify({element: scorm_data.get(element, '')}) + +@app.route('/LMSSetValue', methods=['POST']) +def set_value(): + data = request.get_json() + element = data.get('element') + value = data.get('value') + scorm_data[element] = value + print(f"Set {element} to {value}") + return 'true', 200 + +@app.route('/LMSFinish', methods=['GET']) +def finish(): + print("SCORM finished") + return 'true', 200 + +if __name__ == '__main__': + app.run(debug=True)