diff --git a/src/simulator/src/restrictedElementDiv.js b/src/simulator/src/restrictedElementDiv.js deleted file mode 100644 index 74e1aad5..00000000 --- a/src/simulator/src/restrictedElementDiv.js +++ /dev/null @@ -1,44 +0,0 @@ -export function updateRestrictedElementsList() { - if (restrictedElements.length === 0) return - - const { restrictedCircuitElementsUsed } = globalScope - let restrictedStr = '' - - restrictedCircuitElementsUsed.forEach((element) => { - restrictedStr += `${element}, ` - }) - - if (restrictedStr === '') { - restrictedStr = 'None' - } else { - restrictedStr = restrictedStr.slice(0, -2) - } - - document.getElementById('restrictedElementsDiv--list').innerHTML = restrictedStr -} - -export function updateRestrictedElementsInScope(scope = globalScope) { - // Do nothing if no restricted elements - if (restrictedElements.length === 0) return - - const restrictedElementsUsed = [] - restrictedElements.forEach((element) => { - if (scope[element].length > 0) { - restrictedElementsUsed.push(element) - } - }) - - scope.restrictedCircuitElementsUsed = restrictedElementsUsed - updateRestrictedElementsList() -} - -export function showRestricted() { - document.getElementById('restrictedDiv').classList.remove('display--none') - // Show no help text for restricted elements - document.getElementById('Help').classList.remove('show') - document.getElementById('restrictedDiv').innerHTML = 'The element has been restricted by mentor. Usage might lead to deduction in marks' -} - -export function hideRestricted() { - document.getElementById('restrictedDiv').classList.add('display--none') -} diff --git a/src/simulator/src/restrictedElementDiv.ts b/src/simulator/src/restrictedElementDiv.ts new file mode 100644 index 00000000..35326553 --- /dev/null +++ b/src/simulator/src/restrictedElementDiv.ts @@ -0,0 +1,60 @@ +import { Scope } from './types/restrictedElementDiv.types' + +const globalScope: Scope = { + restrictedCircuitElementsUsed: [] +}; +const restrictedElements: string[] = []; + +export function updateRestrictedElementsList(): void { + if (globalScope.restrictedCircuitElementsUsed.length === 0) { + const restrictedElementsDiv = document.getElementById('restrictedElementsDiv--list'); + if (restrictedElementsDiv) { + restrictedElementsDiv.innerHTML = 'None'; + } + return; + } + const { restrictedCircuitElementsUsed } = globalScope; + const restrictedStr = restrictedCircuitElementsUsed.join(', '); + const restrictedElementsDiv = document.getElementById('restrictedElementsDiv--list'); + if (restrictedElementsDiv) { + restrictedElementsDiv.innerHTML = restrictedStr; + } else { + console.error('Element restrictedElementsDiv--list not found'); + } +} + +export function updateRestrictedElementsInScope(scope: Scope = globalScope): void { + if (restrictedElements.length === 0) return; + + const restrictedElementsUsed: string[] = []; + restrictedElements.forEach((element: string) => { + if (scope[element] && scope[element].length > 0) { + restrictedElementsUsed.push(element); + } + }); + + scope.restrictedCircuitElementsUsed = restrictedElementsUsed; + updateRestrictedElementsList(); +} + +const RESTRICTED_MESSAGE = 'The element has been restricted by mentor. Usage might lead to deduction in marks'; +export function showRestricted(): void { + const restrictedDiv = document.getElementById('restrictedDiv'); + const helpDiv = document.getElementById('Help'); + if (!restrictedDiv) { + console.error('Element restrictedDiv not found'); + return; + } + restrictedDiv.classList.remove('display--none'); + restrictedDiv.innerHTML = RESTRICTED_MESSAGE; + if (helpDiv) { + helpDiv.classList.remove('show'); + } +} + +export function hideRestricted(): void { + const restrictedDiv = document.getElementById('restrictedDiv'); + if (restrictedDiv) { + restrictedDiv.classList.add('display--none'); + } +} \ No newline at end of file diff --git a/src/simulator/src/types/restrictedElementDiv.types.ts b/src/simulator/src/types/restrictedElementDiv.types.ts new file mode 100644 index 00000000..cfa20528 --- /dev/null +++ b/src/simulator/src/types/restrictedElementDiv.types.ts @@ -0,0 +1,4 @@ +export interface Scope { + [key: string]: string[]; + restrictedCircuitElementsUsed: string[]; +} \ No newline at end of file