diff --git a/.eslintrc.cjs b/.eslintrc.cjs index 7e2695f..8dae000 100644 --- a/.eslintrc.cjs +++ b/.eslintrc.cjs @@ -33,7 +33,7 @@ module.exports = { "no-dupe-else-if": "error", "no-dupe-keys": "error", "no-duplicate-case": "error", - "no-duplicate-imports": "error", + // "no-duplicate-imports": "error", "no-empty-character-class": "error", "no-empty-pattern": "error", "no-ex-assign": "error", diff --git a/src-runtime/TypePanel.js b/src-runtime/TypePanel.js index b2fb766..088bb7a 100644 --- a/src-runtime/TypePanel.js +++ b/src-runtime/TypePanel.js @@ -1,7 +1,9 @@ -import {assertMode } from "./assertMode.js"; -import {options } from "./options.js"; -import {warnedTable} from "./warnedTable.js"; -import {Warning } from "./Warning.js"; +import {assertMode } from "./assertMode.js"; +import {options } from "./options.js"; +import {disableTypeChecking} from "./validateType.js"; +import {enableTypeChecking } from "./validateType.js"; +import {warnedTable } from "./warnedTable.js"; +import {Warning } from "./Warning.js"; /** * @param {HTMLDivElement} div - The
. */ @@ -39,8 +41,13 @@ function niceDiv(div) { div.classList.add('rti'); document.head.appendChild(rule); } +function isEnabled() { + const tmp = localStorage.getItem('rti-enabled'); + return tmp === null || tmp === 'true'; +} class TypePanel { div = document.createElement('div'); + inputEnable = document.createElement('input'); spanErrors = document.createElement('span'); span = document.createElement('span'); select = document.createElement('select'); @@ -51,12 +58,22 @@ class TypePanel { buttonLoadState = document.createElement('button'); buttonSaveState = document.createElement('button'); constructor() { - const {div, spanErrors, span, select, option_spam, option_once, option_never, buttonHide, buttonLoadState, buttonSaveState} = this; + const {div, inputEnable, spanErrors, span, select, option_spam, option_once, option_never, buttonHide, buttonLoadState, buttonSaveState} = this; div.style.position = "absolute"; div.style.bottom = "0px"; div.style.right = "0px"; div.style.zIndex = "10"; niceDiv(div); + inputEnable.checked = isEnabled(); + inputEnable.type = "checkbox"; + inputEnable.onchange = (e) => { + if (inputEnable.checked) { + enableTypeChecking(); + } else { + disableTypeChecking(); + } + }; + inputEnable.onchange(); span.innerText = " Type report mode:"; option_spam.text = 'spam'; option_once.text = 'once'; @@ -83,7 +100,7 @@ class TypePanel { buttonLoadState.onclick = () => this.loadState(); buttonSaveState.textContent = 'Save state'; buttonSaveState.onclick = () => this.saveState(); - div.append(spanErrors, span, select, buttonHide, buttonLoadState, buttonSaveState, warnedTable); + div.append(inputEnable, spanErrors, span, select, buttonHide, buttonLoadState, buttonSaveState, warnedTable); div.style.maxHeight = '200px'; div.style.overflow = 'scroll'; const finalFunc = () => document.body.append(div); diff --git a/src-runtime/validateType.js b/src-runtime/validateType.js index b1ce3ff..08eecfd 100644 --- a/src-runtime/validateType.js +++ b/src-runtime/validateType.js @@ -17,9 +17,11 @@ import {validateUnion } from "./validateUnion.js"; export let enabled = true; export function disableTypeChecking() { enabled = false; + localStorage.setItem('rti-enabled', 'false'); } export function enableTypeChecking() { enabled = true; + localStorage.setItem('rti-enabled', 'true'); } /** * @typedef {object} TypeObject