From 8bb514bf314c392bdc1f6e8d064d39c590f05645 Mon Sep 17 00:00:00 2001 From: Mikhail Loginov Date: Wed, 13 May 2026 15:54:14 +0100 Subject: [PATCH 1/2] settings WIP(html skeleton) --- icon.svg | 1 + metadata.json | 16 +++++ settings.css | 21 +++++++ settings.html | 164 ++++++++++++++++++++++++++++++++++++++++++++++++++ settings.js | 40 ++++++++++++ 5 files changed, 242 insertions(+) create mode 100644 icon.svg create mode 100644 metadata.json create mode 100644 settings.css create mode 100644 settings.html create mode 100644 settings.js diff --git a/icon.svg b/icon.svg new file mode 100644 index 0000000..cb1265b --- /dev/null +++ b/icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/metadata.json b/metadata.json new file mode 100644 index 0000000..e9caa94 --- /dev/null +++ b/metadata.json @@ -0,0 +1,16 @@ +{ + "name": "Advanced Code Test", + "type": "assessment", + "properties": { + "type": "test", + "icon": "./icon.svg", + "defaultHeight": 500, + "gradingControls": { + "points": true, + "allowPartialPoints": true, + "useMaximumScore": true, + "definedNumberOfAttempts": true, + "rationale": true + } + } +} diff --git a/settings.css b/settings.css new file mode 100644 index 0000000..2df5188 --- /dev/null +++ b/settings.css @@ -0,0 +1,21 @@ +.settings-content-row-container { + display: flex; + flex-direction: row; + gap: 10px; +} + +.timeout-container { + flex: 1; +} + +.lang-subtype-java-style-settings-config-container { + flex: 1; +} + +.test-case-controls-container { + align-items: end; +} + +.test-case-add-case-container { + flex: 1; +} diff --git a/settings.html b/settings.html new file mode 100644 index 0000000..d002a5d --- /dev/null +++ b/settings.html @@ -0,0 +1,164 @@ + + + + + Settings + + + + + + + +
+
+ + +
+
+
+ +
+ +
+
+
+ + +
+
+
+
+ + +
+
+
+
+ +
+ +
+
+
+
+
+ +
+ +
+
+
+
+ + +
+
+ +
+ +
+
+
+
+
+
+ +
+ +
+
+
+ + +
+
+
+
+ + +
+
+ + +
+
+
+ + +
+
+
+
+
+ +
+ +
+
+
+
+
+ + +
+
+ + +
+
+
+ + +
+
+
+
+
+ +
+ +
+
+
+
+
+
+ + +
+ +
+
+
+
+ + diff --git a/settings.js b/settings.js new file mode 100644 index 0000000..b48b02b --- /dev/null +++ b/settings.js @@ -0,0 +1,40 @@ +(function () { + const collectSettings = () => { + const instructions = $('#instructions').val() + const timeout = parseInt($('#timeout').val(), 10); + + return {instructions, timeout}; + } + + const exportSettings = () => { + const data = collectSettings(); + window.codioAssessmentsHelper.send(window.codioAssessmentsHelper.METHODS.EXPORT_SETTINGS_RESPONSE, data); + } + + const applySettings = (settings = {}) => { + $('#instructions').val(settings.instructions || ''); + $('#timeout').val(settings.timeout || ''); + } + + const processMessage = (jsonData) => { + console.log('settings iframe processMessage', jsonData) + try { + const {method, data} = JSON.parse(jsonData); + switch (method) { + case window.codioAssessmentsHelper.METHODS.EXPORT_SETTINGS: + exportSettings(); + break; + case window.codioAssessmentsHelper.METHODS.GET_SETTINGS_RESPONSE: + applySettings(data.settings); + break; + } + } catch {} + } + + const onLoad = async () => { + window.codioAssessmentsHelper.registerMessageListener(processMessage) + window.codioAssessmentsHelper.send(window.codioAssessmentsHelper.METHODS.GET_SETTINGS) + } + + window.addEventListener('load', onLoad); +})() From 4c8e35ab3f88b40cc87fda50088faf059de800a0 Mon Sep 17 00:00:00 2001 From: Mikhail Loginov Date: Thu, 14 May 2026 16:30:22 +0100 Subject: [PATCH 2/2] settings visibility management --- settings.css | 8 -------- settings.html | 38 +++++++++++++++++++------------------- settings.js | 43 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 62 insertions(+), 27 deletions(-) diff --git a/settings.css b/settings.css index 2df5188..27da8ee 100644 --- a/settings.css +++ b/settings.css @@ -4,14 +4,6 @@ gap: 10px; } -.timeout-container { - flex: 1; -} - -.lang-subtype-java-style-settings-config-container { - flex: 1; -} - .test-case-controls-container { align-items: end; } diff --git a/settings.html b/settings.html index d002a5d..943ee55 100644 --- a/settings.html +++ b/settings.html @@ -28,40 +28,40 @@ -
+
-
+
-
+
-
-
+
-
-
+
@@ -77,7 +77,7 @@
-
+
@@ -90,32 +90,32 @@
-
+
-
+
-
+
-
+
-
+
- @@ -123,26 +123,26 @@
-
+
-
+
-
+
-
+
- diff --git a/settings.js b/settings.js index b48b02b..613079b 100644 --- a/settings.js +++ b/settings.js @@ -31,9 +31,52 @@ } catch {} } + const onSubtypeChanged = (language, subtype) => { + $('.lang-subtype-settings-container').addClass('hide') + $(`.lang-subtype-${language}-${subtype}-settings`).removeClass('hide') + } + + const onLanguageChanged = (language) => { + $('.language-settings-container').addClass('hide') + $(`.${language}-container`).removeClass('hide') + const subtype = $(`#${language}LangSubtype`).val() + onSubtypeChanged(language, subtype) + } + + const bindEvents = () => { + $('#languageType').on('change', function () { + const languageType = $(this).val(); + onLanguageChanged(languageType); + }) + $('.lang-subtype-select').on('change', function () { + const langSubtype = $(this).val(); + onSubtypeChanged($('#languageType').val(), langSubtype); + }) + + // $("html").on("dragover", function(event) { + // event.preventDefault(); + // event.stopPropagation(); + // console.log('dragover', event); + // }); + // + // $("html").on("dragleave", function(event) { + // event.preventDefault(); + // event.stopPropagation(); + // console.log('dragover', event); + // }); + + $("html").on("drop", function(event) { + event.preventDefault(); + event.stopPropagation(); + console.log('drop', event); + }); + } + const onLoad = async () => { window.codioAssessmentsHelper.registerMessageListener(processMessage) window.codioAssessmentsHelper.send(window.codioAssessmentsHelper.METHODS.GET_SETTINGS) + + bindEvents() } window.addEventListener('load', onLoad);