In the <head>, this page includes
<script src="https://unpkg.com/@doenet/beta"></script> <link rel="stylesheet" href="https://unpkg.com/@doenet/beta/dist/main.css">in order to load the Doenet library.
When the DOMContentLoaded event is fired, we run
let worksheet = new window.doenet.Worksheet();to load the Doenet services. This triggers the GDPR consent form.
The handler for the click event on the button is:
let p = 0; if (worksheet.progress > 0.0) p = worksheet.progress; worksheet.progress = (1 + p)/2.0;Setting
worksheet.progress updates the green bar in the corner, and also sends these updates to the gradebook.
When the checkbox state changes, we make the corresponding change to the worksheet.state, which synchronizes with the server.
let checkbox = document.getElementById("checkbox");
checkbox.addEventListener("input", function() {
worksheet.state.checked = checkbox.checked;
});
Similarly when the <textarea> changes, we make the corresponding change to the worksheet.state. We do this in an ugly way just to demonstrate that you can also completely replace the worksheet.state and it will still sync with the server.
let textbox = document.getElementById("textbox");
textbox.addEventListener("input", function() {
console.log(textbox.value);
worksheet.state = { textbox: textbox.value, checked: checkbox.checked };
});
Finally, whenever the state changes on the server side, we make the corresponding change to the page.
worksheet.addEventListener( 'state', function(event, state) {
if (state.textbox)
textbox.value = state.textbox;
checkbox.checked = state.checked;
});