website

source code for the ttmaths.uk website
Log | Files | Refs | README

commit b9804fe555dd7e982cd4cf50c52616577bd0fbec
parent 57be49f4c638dfe9800cb9b5a5c171590eed9741
Author: hrryt <harry@mayesfield.uk>
Date:   Sat,  1 Aug 2026 00:35:27 +0100

Rename parameters variables and constants

Diffstat:
Msrc/components/MultipleSelection.jsx | 10+++++-----
Msrc/components/QuestionWindow.jsx | 44+++++++++++++++++++++-----------------------
Msrc/components/questions/AddingFractionsQuestion.jsx | 2+-
Msrc/components/questions/QuadraticEquationQuestion.jsx | 12++++++------
Msrc/data/test-question-window.js | 18++++++++----------
5 files changed, 41 insertions(+), 45 deletions(-)

diff --git a/src/components/MultipleSelection.jsx b/src/components/MultipleSelection.jsx @@ -1,12 +1,12 @@ import * as React from 'react'; -export default function MultipleSelection({ parameter, setParameter, id, legend, values, labels = values }) { - checked = values.map(value => parameter.includes(value)); +export default function MultipleSelection({ variable, setVariable, id, legend, values, labels = values }) { + checked = values.map(value => variable.includes(value)); - function updateParameter(e, index) { + function updateVariable(e, index) { const newChecked = checked.map((value, i) => i === index ? e.target.checked : value); const validChecked = newChecked.some(Boolean) ? newChecked : checked.map((value) => !value); - setParameter(values.filter((_, i) => validChecked[i])); + setVariable(values.filter((_, i) => validChecked[i])); } return ( @@ -16,7 +16,7 @@ export default function MultipleSelection({ parameter, setParameter, id, legend, const name = `${id}:${value}`; return ( <div key={value} className="field-row"> - <input type="checkbox" id={name} name={name} checked={checked[i]} onChange={e => updateParameter(e, i)} /> + <input type="checkbox" id={name} name={name} checked={checked[i]} onChange={e => updateVariable(e, i)} /> <label htmlFor={name}>{labels[i]}</label> </div> ); diff --git a/src/components/QuestionWindow.jsx b/src/components/QuestionWindow.jsx @@ -24,27 +24,27 @@ function chooseQuestionComponent(type) { } } -function resolveParameters(question, variableParameters) { - const parameters = question.lockedParameters || { }; - const controlledParameters = question.controlledParameters || { }; - Object.keys(controlledParameters).forEach((key) => { - parameters[key] = variableParameters[controlledParameters[key]]; +function resolveParameters(question, variables) { + const parameters = question.constants || { }; + const variableKeys = question.variables || { }; + Object.keys(variableKeys).forEach((key) => { + parameters[key] = variables[variableKeys[key]]; }) return parameters; } -function renderQuestion(seed, showAnswer, variableParameters) { +function renderQuestion(seed, showAnswer, variables) { return (question, i) => { const QuestionComponent = chooseQuestionComponent(question.type); - const parameters = resolveParameters(question, variableParameters); - return <QuestionComponent key={i} seed={seed+i} showAnswer={showAnswer} parameters={parameters} />; + const parameters = resolveParameters(question, variables); + return <QuestionComponent key={i} seed={seed+i} showAnswer={showAnswer} {...parameters} />; }; } -function getQuestionList(id, questions, showAnswers, seed, variableParameters) { +function getQuestionList(id, questions, showAnswers, seed, variables) { return ( <QuestionList key={id}> - {questions.map(renderQuestion(seed, showAnswers, variableParameters))} + {questions.map(renderQuestion(seed, showAnswers, variables))} </QuestionList> ); } @@ -55,18 +55,18 @@ function shuffleArray(arr, n, seed) { export default function QuestionWindow({ data }) { - defaultParameters = Object.fromEntries( - data.inputs.map(input => [input.id, input.default ?? input.values]) + defaultVariables = Object.fromEntries( + data.variables.map(input => [input.id, input.default ?? input.values]) ); - const [showAnswers , setShowAnswers ] = React.useState(false); - const [seed , setSeed ] = React.useState(Math.random()); - const [variableParameters , setVariableParameters ] = React.useState(defaultParameters); + const [showAnswers, setShowAnswers] = React.useState(false); + const [seed , setSeed ] = React.useState(Math.random()); + const [variables , setVariables ] = React.useState(defaultVariables); - function setParameter(id) { + function setVariable(id) { return (value) => { - setVariableParameters({ - ...variableParameters, + setVariables({ + ...variables, [id]: value }); } @@ -79,19 +79,17 @@ export default function QuestionWindow({ data }) { const questions = data.questionLists.map(questionList => { const { id: id, n: n, questions: unique_questions } = questionList; const questions = shuffleArray(unique_questions, n, current_seed); - const randomQuestionList = getQuestionList(id, questions, showAnswers, current_seed, variableParameters); + const randomQuestionList = getQuestionList(id, questions, showAnswers, current_seed, variables); current_seed += n; return randomQuestionList; }); - const fields = data.inputs.map(input => { + const fields = data.variables.map(input => { const { type: type, ...props } = input; const InputComponent = chooseInputComponent(type); - return <InputComponent parameter={variableParameters[input.id]} setParameter={setParameter(input.id)} {...props} />; + return <InputComponent variable={variables[input.id]} setVariable={setVariable(input.id)} {...props} />; }); - console.log(variableParameters); - return ( <Window title="Questions"> {fields} diff --git a/src/components/questions/AddingFractionsQuestion.jsx b/src/components/questions/AddingFractionsQuestion.jsx @@ -26,7 +26,7 @@ function getRandomFractions(seed) { return [num1, denom1, num2, denom2]; } -export default function AddingFractionsQuestion({ seed, showAnswer, parameters }) { +export default function AddingFractionsQuestion({ seed, showAnswer }) { const [num1, denom1, num2, denom2] = getRandomFractions(seed); const question = formatFraction(num1, denom1) + ' + ' + formatFraction(num2, denom2); diff --git a/src/components/questions/QuadraticEquationQuestion.jsx b/src/components/questions/QuadraticEquationQuestion.jsx @@ -45,17 +45,17 @@ function getRandomRoots(seed) { ].sort((a, b) => a - b); } -export default function QuadraticEquationQuestion({ seed, showAnswer, parameters }) { - const { - aPlurality: aPlurality = ["a=1", "a>1"], - factorise: factorise = getRandomBoolean(seed + .1), - } = parameters; - +export default function QuadraticEquationQuestion({ seed, showAnswer, aPlurality, framing }) { const aChoices = Array(); aPlurality.includes("a=1") && aChoices.push(1); aPlurality.includes("a>1") && aChoices.push(2, 3); const a = getRandomChoice(aChoices, seed); + const factoriseChoices = Array(); + framing.includes("Solve") && factoriseChoices.push(false); + framing.includes("Factorise") && factoriseChoices.push(true); + const factorise = getRandomChoice(factoriseChoices, seed + .1); + const [root1, root2] = getRandomRoots(seed + .2); const b = a * -(root1 + root2); diff --git a/src/data/test-question-window.js b/src/data/test-question-window.js @@ -1,7 +1,12 @@ export const questionWindow = { - inputs: [{ + variables: [{ + id: 'framing', + legend: 'Quadratic Equations: Framing', + type: 'multiple-selection', + values: ["Solve", "Factorise"], + }, { id: 'aPlurality', - legend: 'Quadratic Equations: a', + legend: 'Quadratic Equations: Coefficient a', type: 'multiple-selection', values: ["a=1", "a>1"], }], @@ -10,7 +15,7 @@ export const questionWindow = { n: 10, questions: [{ type: 'quadratic-equation', - controlledParameters: { aPlurality: 'aPlurality' }, + variables: { aPlurality: 'aPlurality', framing: 'framing' }, }] }, { id: 1, @@ -18,12 +23,5 @@ export const questionWindow = { questions: [{ type: 'adding-fractions', }] - }, { - id: 2, - n: 5, - questions: [{ - type: 'quadratic-equation', - lockedParameters: { aPlurality: ["a=1"], factorise: false }, - }] }] }