X-Git-Url: https://git.auder.net/?a=blobdiff_plain;f=public%2Fjavascripts%2Fcomponents%2Fstatements.js;h=0b8ef656e04bad97d654a686f23afc0050a7d2c6;hb=92a6f83096ec0f1a32a306fda21ab2d324a3a433;hp=824ce76a9b13959dfd9c8e90685d3725fc1c8456;hpb=a3080c337cfaca9d600911396cae5a9233d43554;p=qomet.git diff --git a/public/javascripts/components/statements.js b/public/javascripts/components/statements.js index 824ce76..0b8ef65 100644 --- a/public/javascripts/components/statements.js +++ b/public/javascripts/components/statements.js @@ -6,13 +6,15 @@ NOTE: questions can contain parameterized exercises (how ? --> write javascript script (OK, users trusted ? ==> safe mode possible if public website) Imaginary example: (using math.js) (avant l'exo) - x: math.random() - y: math.random() - M: math.matrix([[7, x], [y, -3]]); - res: math.det(M) + const x = math.random() + const y = math.random() + + let M = math.matrix([[7, x], [y, -3]]); + return math.det(M); +
Calculer le déterminant de - $$\begin{matrix}7 & x\\y & -3\end{matrix}$$
+ $$\begin{matrix}7 & £x£\\£y£ & -3\end{matrix}$$ * ... + fixed + question time (syntax ?) @@ -26,12 +28,13 @@ Vue.component("statements", { // 'inputs': object with key = question index and value = text or boolean array // display: 'all', 'one', 'solution' // iidx: current level-0 integer index (can match a group of questions / inputs) - props: ['questions','inputs','display','iidx'], + props: ['questions','inputs','answers','display','iidx'], data: function() { return { displayStyle: "compact", //or "all": all on same page + parameters: 0, //TODO: DO NOT re-draw parameters for already answered questions }; - } + }, // Full questions tree is rendered, but some parts hidden depending on display settings render(h) { // Prepare questions groups, ordered @@ -40,7 +43,9 @@ Vue.component("statements", { const dotPos = q.index.indexOf("."); return dotPos === -1 ? q.index : q.index.substring(0,dotPos); }); - let domTree = questionGroups.map( (qg,i) => { + let domTree = Object.keys(questionGroups).map( idx => { + let qg = questionGroups[idx]; + const i = parseInt(idx); // Re-order questions 1.1.1 then 1.1.2 then... const orderedQg = qg.sort( (a,b) => { let aParts = a.split('.').map(Number); @@ -120,14 +125,15 @@ Vue.component("statements", { } ) ); + const aIdx = (this.answers || [ ]).findIndex( item => { return item.index == q.index; }); optionList.push( h( "div", { "class": { option: true, - choiceCorrect: this.display == "solution" && q.answer.includes(idx), - choiceWrong: this.display == "solution" && !!this.inputs && this.inputs[q.index][idx] && !q.answer.includes(idx), + choiceCorrect: this.display == "solution" && this.answers[aIdx].includes(idx), + choiceWrong: this.display == "solution" && !!this.inputs && this.inputs[q.index][idx] && !this.answers[aIdx].includes(idx), }, }, option @@ -146,13 +152,17 @@ Vue.component("statements", { ) ); } + else + { + // Open question, or parameterized: TODO + } const depth = (q.index.match(/\./g) || []).length; return h( "div", { "class": { "question": true, - "depth" + depth: true, + ["depth" + depth]: true, }, }, questionContent @@ -165,7 +175,7 @@ Vue.component("statements", { "questionGroup": true, "hide": this.display == "one" && this.iidx != i, }, - } + }, qgDom ); });