diff --git a/frontend/src/ts/test/funbox/funbox.ts b/frontend/src/ts/test/funbox/funbox.ts index 76dcd8917..7605b779f 100644 --- a/frontend/src/ts/test/funbox/funbox.ts +++ b/frontend/src/ts/test/funbox/funbox.ts @@ -19,6 +19,7 @@ import { checkFunboxForcedConfigs, } from "./funbox-validation"; import { Wordset } from "../wordset"; +import * as LayoutfluidFunboxTimer from "./layoutfluid-funbox-timer"; const prefixSize = 2; @@ -291,17 +292,31 @@ FunboxList.setFunboxFunctions("layoutfluid", { const layouts: string[] = Config.customLayoutfluid ? Config.customLayoutfluid.split("#") : ["qwerty", "dvorak", "colemak"]; - let index = 0; const outOf: number = TestWords.words.length; - index = Math.floor( - (TestInput.input.history.length + 1) / (outOf / layouts.length) + const wordsPerLayout = Math.floor(outOf / layouts.length); + const index = Math.floor( + (TestInput.input.history.length + 1) / wordsPerLayout ); - if (Config.layout !== layouts[index] && layouts[index] !== undefined) { - Notifications.add(`--- !!! ${layouts[index]} !!! ---`, 0); - } - if (layouts[index]) { - UpdateConfig.setLayout(layouts[index]); - UpdateConfig.setKeymapLayout(layouts[index]); + const mod = + wordsPerLayout - ((TestWords.words.currentIndex + 1) % wordsPerLayout); + + console.log(wordsPerLayout); + console.log(mod); + + if (layouts[index + 1]) { + if (mod <= 3) { + LayoutfluidFunboxTimer.show(); + LayoutfluidFunboxTimer.updateWords(mod, layouts[index + 1]); + } + if (mod === wordsPerLayout) { + UpdateConfig.setLayout(layouts[index]); + UpdateConfig.setKeymapLayout(layouts[index]); + if (mod > 3) { + LayoutfluidFunboxTimer.hide(); + } + } + } else { + LayoutfluidFunboxTimer.hide(); } setTimeout(() => { KeymapEvent.highlight( diff --git a/frontend/src/ts/test/funbox/layoutfluid-funbox-timer.ts b/frontend/src/ts/test/funbox/layoutfluid-funbox-timer.ts index 7ce9e9d41..02c89c053 100644 --- a/frontend/src/ts/test/funbox/layoutfluid-funbox-timer.ts +++ b/frontend/src/ts/test/funbox/layoutfluid-funbox-timer.ts @@ -18,8 +18,16 @@ export function hide(): void { ); } -export function update(sec: number, layout: string): void { +export function updateTime(sec: number, layout: string): void { $("#typingTest #layoutfluidTimer").text( `${capitalizeFirstLetter(layout)} in: ${sec}s` ); } + +export function updateWords(words: number, layout: string): void { + let str = `${capitalizeFirstLetter(layout)} in: ${words} words`; + if (words === 1) { + str = `${capitalizeFirstLetter(layout)} starting next word`; + } + $("#typingTest #layoutfluidTimer").text(str); +} diff --git a/frontend/src/ts/test/test-timer.ts b/frontend/src/ts/test/test-timer.ts index 89ecd4c34..53a7999ed 100644 --- a/frontend/src/ts/test/test-timer.ts +++ b/frontend/src/ts/test/test-timer.ts @@ -103,11 +103,11 @@ function layoutfluid(): void { if (flooredSwitchTimes.includes(time + 3)) { LayoutfluidFunboxTimer.show(); - LayoutfluidFunboxTimer.update(3, layouts[index + 1]); + LayoutfluidFunboxTimer.updateTime(3, layouts[index + 1]); } else if (flooredSwitchTimes.includes(time + 2)) { - LayoutfluidFunboxTimer.update(2, layouts[index + 1]); + LayoutfluidFunboxTimer.updateTime(2, layouts[index + 1]); } else if (flooredSwitchTimes.includes(time + 1)) { - LayoutfluidFunboxTimer.update(1, layouts[index + 1]); + LayoutfluidFunboxTimer.updateTime(1, layouts[index + 1]); } if (Config.layout !== layout && layout !== undefined) {