import SettingsGroup from "./settings-group"; import Config, * as UpdateConfig from "./config"; import * as Sound from "./sound"; import * as Misc from "./misc"; import layouts from "./layouts"; import * as LanguagePicker from "./language-picker"; import * as Notifications from "./notifications"; import * as DB from "./db"; import * as Loader from "./loader"; import * as CloudFunctions from "./cloud-functions"; import * as Funbox from "./funbox"; import * as TagController from "./tag-controller"; import * as PresetController from "./preset-controller"; import * as SimplePopups from "./simple-popups"; import * as EditTagsPopup from "./edit-tags-popup"; import * as EditPresetPopup from "./edit-preset-popup"; import * as ThemePicker from "./theme-picker"; export let groups = {}; async function initGroups() { await UpdateConfig.loadPromise; groups.smoothCaret = new SettingsGroup( "smoothCaret", UpdateConfig.setSmoothCaret ); groups.difficulty = new SettingsGroup( "difficulty", UpdateConfig.setDifficulty ); groups.quickTab = new SettingsGroup("quickTab", UpdateConfig.setQuickTabMode); groups.showLiveWpm = new SettingsGroup( "showLiveWpm", UpdateConfig.setShowLiveWpm, () => { groups.keymapMode.updateButton(); } ); groups.showLiveAcc = new SettingsGroup( "showLiveAcc", UpdateConfig.setShowLiveAcc ); groups.showTimerProgress = new SettingsGroup( "showTimerProgress", UpdateConfig.setShowTimerProgress ); groups.keymapMode = new SettingsGroup( "keymapMode", UpdateConfig.setKeymapMode, () => { groups.showLiveWpm.updateButton(); }, () => { if (Config.keymapMode === "off") { $(".pageSettings .section.keymapStyle").addClass("hidden"); $(".pageSettings .section.keymapLayout").addClass("hidden"); $(".pageSettings .section.keymapLegendStyle").addClass("hidden"); } else { $(".pageSettings .section.keymapStyle").removeClass("hidden"); $(".pageSettings .section.keymapLayout").removeClass("hidden"); $(".pageSettings .section.keymapLegendStyle").removeClass("hidden"); } } ); groups.keymapMatrix = new SettingsGroup( "keymapStyle", UpdateConfig.setKeymapStyle ); groups.keymapLayout = new SettingsGroup( "keymapLayout", UpdateConfig.setKeymapLayout ); groups.keymapLegendStyle = new SettingsGroup( "keymapLegendStyle", UpdateConfig.setKeymapLegendStyle ); groups.showKeyTips = new SettingsGroup( "showKeyTips", UpdateConfig.setKeyTips, null, () => { if (Config.showKeyTips) { $(".pageSettings .tip").removeClass("hidden"); } else { $(".pageSettings .tip").addClass("hidden"); } } ); groups.freedomMode = new SettingsGroup( "freedomMode", UpdateConfig.setFreedomMode, () => { groups.confidenceMode.updateButton(); } ); groups.strictSpace = new SettingsGroup( "strictSpace", UpdateConfig.setStrictSpace ); groups.oppositeShiftMode = new SettingsGroup( "oppositeShiftMode", UpdateConfig.setOppositeShiftMode ); groups.confidenceMode = new SettingsGroup( "confidenceMode", UpdateConfig.setConfidenceMode, () => { groups.freedomMode.updateButton(); groups.stopOnError.updateButton(); } ); groups.indicateTypos = new SettingsGroup( "indicateTypos", UpdateConfig.setIndicateTypos ); groups.hideExtraLetters = new SettingsGroup( "hideExtraLetters", UpdateConfig.setHideExtraLetters ); groups.blindMode = new SettingsGroup("blindMode", UpdateConfig.setBlindMode); groups.quickEnd = new SettingsGroup("quickEnd", UpdateConfig.setQuickEnd); groups.repeatQuotes = new SettingsGroup( "repeatQuotes", UpdateConfig.setRepeatQuotes ); groups.enableAds = new SettingsGroup("enableAds", UpdateConfig.setEnableAds); groups.alwaysShowWordsHistory = new SettingsGroup( "alwaysShowWordsHistory", UpdateConfig.setAlwaysShowWordsHistory ); groups.singleListCommandLine = new SettingsGroup( "singleListCommandLine", UpdateConfig.setSingleListCommandLine ); groups.flipTestColors = new SettingsGroup( "flipTestColors", UpdateConfig.setFlipTestColors ); groups.swapEscAndTab = new SettingsGroup( "swapEscAndTab", UpdateConfig.setSwapEscAndTab ); groups.showOutOfFocusWarning = new SettingsGroup( "showOutOfFocusWarning", UpdateConfig.setShowOutOfFocusWarning ); groups.colorfulMode = new SettingsGroup( "colorfulMode", UpdateConfig.setColorfulMode ); groups.startGraphsAtZero = new SettingsGroup( "startGraphsAtZero", UpdateConfig.setStartGraphsAtZero ); groups.randomTheme = new SettingsGroup( "randomTheme", UpdateConfig.setRandomTheme ); groups.stopOnError = new SettingsGroup( "stopOnError", UpdateConfig.setStopOnError, () => { groups.confidenceMode.updateButton(); } ); groups.playSoundOnError = new SettingsGroup( "playSoundOnError", UpdateConfig.setPlaySoundOnError ); groups.playSoundOnClick = new SettingsGroup( "playSoundOnClick", UpdateConfig.setPlaySoundOnClick, () => { if (Config.playSoundOnClick !== "off") Sound.playClick(Config.playSoundOnClick); } ); groups.showAllLines = new SettingsGroup( "showAllLines", UpdateConfig.setShowAllLines ); groups.paceCaret = new SettingsGroup( "paceCaret", UpdateConfig.setPaceCaret, () => { if (Config.paceCaret === "custom") { $( ".pageSettings .section.paceCaret input.customPaceCaretSpeed" ).removeClass("hidden"); } else { $( ".pageSettings .section.paceCaret input.customPaceCaretSpeed" ).addClass("hidden"); } } ); groups.minWpm = new SettingsGroup("minWpm", UpdateConfig.setMinWpm, () => { if (Config.minWpm === "custom") { $(".pageSettings .section.minWpm input.customMinWpmSpeed").removeClass( "hidden" ); } else { $(".pageSettings .section.minWpm input.customMinWpmSpeed").addClass( "hidden" ); } }); groups.minAcc = new SettingsGroup("minAcc", UpdateConfig.setMinAcc, () => { if (Config.minAcc === "custom") { $(".pageSettings .section.minAcc input.customMinAcc").removeClass( "hidden" ); } else { $(".pageSettings .section.minAcc input.customMinAcc").addClass("hidden"); } }); groups.smoothLineScroll = new SettingsGroup( "smoothLineScroll", UpdateConfig.setSmoothLineScroll ); groups.capsLockBackspace = new SettingsGroup( "capsLockBackspace", UpdateConfig.setCapsLockBackspace ); groups.layout = new SettingsGroup("layout", UpdateConfig.setLayout); groups.language = new SettingsGroup("language", UpdateConfig.setLanguage); groups.fontSize = new SettingsGroup("fontSize", UpdateConfig.setFontSize); groups.pageWidth = new SettingsGroup("pageWidth", UpdateConfig.setPageWidth); groups.caretStyle = new SettingsGroup( "caretStyle", UpdateConfig.setCaretStyle ); groups.paceCaretStyle = new SettingsGroup( "paceCaretStyle", UpdateConfig.setPaceCaretStyle ); groups.timerStyle = new SettingsGroup( "timerStyle", UpdateConfig.setTimerStyle ); groups.highlighteMode = new SettingsGroup( "highlightMode", UpdateConfig.setHighlightMode ); groups.timerOpacity = new SettingsGroup( "timerOpacity", UpdateConfig.setTimerOpacity ); groups.timerColor = new SettingsGroup( "timerColor", UpdateConfig.setTimerColor ); groups.fontFamily = new SettingsGroup( "fontFamily", UpdateConfig.setFontFamily, null, () => { let customButton = $( ".pageSettings .section.fontFamily .buttons .custom" ); if ( $(".pageSettings .section.fontFamily .buttons .active").length === 0 ) { customButton.addClass("active"); customButton.text(`Custom (${Config.fontFamily.replace(/_/g, " ")})`); } else { customButton.text("Custom"); } } ); groups.alwaysShowDecimalPlaces = new SettingsGroup( "alwaysShowDecimalPlaces", UpdateConfig.setAlwaysShowDecimalPlaces ); groups.alwaysShowCPM = new SettingsGroup( "alwaysShowCPM", UpdateConfig.setAlwaysShowCPM ); groups.customBackgroundSize = new SettingsGroup( "customBackgroundSize", UpdateConfig.setCustomBackgroundSize ); // groups.customLayoutfluid = new SettingsGroup( // "customLayoutfluid", // UpdateConfig.setCustomLayoutfluid // ); } async function fillSettingsPage() { await initGroups(); await UpdateConfig.loadPromise; ThemePicker.refreshButtons(); let langGroupsEl = $( ".pageSettings .section.languageGroups .buttons" ).empty(); let currentLanguageGroup = await Misc.findCurrentGroup(Config.language); Misc.getLanguageGroups().then((groups) => { groups.forEach((group) => { langGroupsEl.append( `
` ); }); }); let layoutEl = $(".pageSettings .section.layout .buttons").empty(); Object.keys(layouts).forEach((layout) => { layoutEl.append( ` ` ); }); let keymapEl = $(".pageSettings .section.keymapLayout .buttons").empty(); keymapEl.append( ` ` ); Object.keys(layouts).forEach((layout) => { if (layout.toString() != "default") { keymapEl.append( ` ` ); } }); let funboxEl = $(".pageSettings .section.funbox .buttons").empty(); funboxEl.append(` `); Misc.getFunboxList().then((funboxModes) => { funboxModes.forEach((funbox) => { if (funbox.name === "mirror") { funboxEl.append( ` ` ); } else { funboxEl.append( ` ` ); } }); }); let isCustomFont = true; let fontsEl = $(".pageSettings .section.fontFamily .buttons").empty(); Misc.getFontsList().then((fonts) => { fonts.forEach((font) => { if (Config.fontFamily === font.name) isCustomFont = false; fontsEl.append( ` ` ); }); $( isCustomFont ? ` ` : ' ' ) .on("click", () => { SimplePopups.list.applyCustomFont.show([]); }) .appendTo(fontsEl); }); $(".pageSettings .section.customBackgroundSize input").val( Config.customBackground ); $(".pageSettings .section.customLayoutfluid input").val( Config.customLayoutfluid.replace(/#/g, " ") ); } export let settingsFillPromise = fillSettingsPage(); export function hideAccountSection() { $(`.sectionGroupTitle[group='account']`).addClass("hidden"); $(`.settingsGroup.account`).addClass("hidden"); } function showActiveTags() { DB.getSnapshot().tags.forEach((tag) => { if (tag.active === true) { $( `.pageSettings .section.tags .tagsList .tag[id='${tag.id}'] .active` ).html(''); } else { $( `.pageSettings .section.tags .tagsList .tag[id='${tag.id}'] .active` ).html(''); } }); } export function updateDiscordSection() { //no code and no discord if (firebase.auth().currentUser == null) { $(".pageSettings .section.discordIntegration").addClass("hidden"); } else { if (DB.getSnapshot() == null) return; $(".pageSettings .section.discordIntegration").removeClass("hidden"); if (DB.getSnapshot().discordId == undefined) { //show button $(".pageSettings .section.discordIntegration .buttons").removeClass( "hidden" ); $(".pageSettings .section.discordIntegration .info").addClass("hidden"); } else { $(".pageSettings .section.discordIntegration .buttons").addClass( "hidden" ); $(".pageSettings .section.discordIntegration .info").removeClass( "hidden" ); } } } function setActiveFunboxButton() { $(`.pageSettings .section.funbox .button`).removeClass("active"); $( `.pageSettings .section.funbox .button[funbox='${Funbox.funboxSaved}']` ).addClass("active"); } function refreshTagsSettingsSection() { if (firebase.auth().currentUser !== null && DB.getSnapshot() !== null) { let tagsEl = $(".pageSettings .section.tags .tagsList").empty(); DB.getSnapshot().tags.forEach((tag) => { let tagPbString = "No PB found"; if (tag.pb != undefined && tag.pb > 0) { tagPbString = `PB: ${tag.pb}`; } tagsEl.append(`