Pendrokar's picture
xVASynth v3 code for English
19c8b95
raw
history blame
23.2 kB
"use strict"
window.arpabetMenuState = {
currentDict: undefined,
dictionaries: {},
paginationIndex: 0,
totalPages: 0,
clickedRecord: undefined,
skipRefresh: false,
hasInitialised: false,
isRefreshing: false,
hasChangedARPAbet: false
}
window.ARPAbetSymbols = ['AA0', 'AA1', 'AA2', 'AA', 'AE0', 'AE1', 'AE2', 'AE', 'AH0', 'AH1', 'AH2', 'AH',
'AO0', 'AO1', 'AO2', 'AO', 'AW0', 'AW1', 'AW2', 'AW', 'AY0', 'AY1', 'AY2', 'AY',
'B', 'CH', 'D', 'DH', 'EH0', 'EH1', 'EH2', 'EH', 'ER0', 'ER1', 'ER2', 'ER',
'EY0', 'EY1', 'EY2', 'EY', 'F', 'G', 'HH', 'IH0', 'IH1', 'IH2', 'IH', 'IY0', 'IY1',
'IY2', 'IY', 'JH', 'K', 'L', 'M', 'N', 'NG', 'OW0', 'OW1', 'OW2', 'OW', 'OY0',
'OY1', 'OY2', 'OY', 'P', 'R', 'S', 'SH', 'T', 'TH', 'UH0', 'UH1', 'UH2', 'UH',
'UW0', 'UW1', 'UW2', 'UW', 'V', 'W', 'Y', 'Z', 'ZH', ,"}","{", "_",
"AX", "AXR", "IX", "UX", "DX", "EL", "EM", "EN0", "EN1", "EN2", "EN", "NX", "Q", "WH",
"RRR", "HR", "OE", "RH", "TS", "RR", "UU", "OO", "KH", "SJ", "HJ", "BR",
"A1", "A2", "A3", "A4", "A5", "AI1", "AI2", "AI3", "AI4", "AI5", "AIR2", "AIR3", "AIR4", "AN1", "AN2", "AN3", "AN4", "AN5", "ANG1", "ANG2", "ANG3", "ANG4", "ANG5", "ANGR2", "ANGR3", "ANGR4", "ANR1", "ANR3", "ANR4", "AO1", "AO2", "AO3", "AO4", "AO5", "AOR1", "AOR2", "AOR3", "AOR4", "AOR5", "AR2", "AR3", "AR4", "AR5", "E1", "E2", "E3", "E4", "E5", "EI1", "EI2", "EI3", "EI4", "EI5", "EIR4", "EN1", "EN2", "EN3", "EN4", "EN5", "ENG1", "ENG2", "ENG3", "ENG4", "ENG5", "ENGR1", "ENGR4", "ENR1", "ENR2", "ENR3", "ENR4", "ENR5", "ER1", "ER2", "ER3", "ER4", "ER5", "I1", "I2", "I3", "I4", "I5", "IA1", "IA2", "IA3", "IA4", "IA5", "IAN1", "IAN2", "IAN3", "IAN4", "IAN5", "IANG1", "IANG2", "IANG3", "IANG4", "IANG5", "IANGR2", "IANR1", "IANR2", "IANR3", "IANR4", "IANR5", "IAO1", "IAO2", "IAO3", "IAO4", "IAO5", "IAOR1", "IAOR2", "IAOR3", "IAOR4", "IAR1", "IAR4", "IE1", "IE2", "IE3", "IE4", "IE5", "IN1", "IN2", "IN3", "IN4", "IN5", "ING1", "ING2", "ING3", "ING4", "ING5", "INGR2", "INGR4", "INR1", "INR4", "IONG1", "IONG2", "IONG3", "IONG4", "IONG5", "IR1", "IR3", "IR4", "IU1", "IU2", "IU3", "IU4", "IU5", "IUR1", "IUR2", "O1", "O2", "O3", "O4", "O5", "ONG1", "ONG2", "ONG3", "ONG4", "ONG5", "OR1", "OR2", "OU1", "OU2", "OU3", "OU4", "OU5", "OUR2", "OUR3", "OUR4", "OUR5", "U1", "U2", "U3", "U4", "U5", "UA1", "UA2", "UA3", "UA4", "UA5", "UAI1", "UAI2", "UAI3", "UAI4", "UAIR4", "UAIR5", "UAN1", "UAN2", "UAN3", "UAN4", "UAN5", "UANG1", "UANG2", "UANG3", "UANG4", "UANG5", "UANR1", "UANR2", "UANR3", "UANR4", "UAR1", "UAR2", "UAR4", "UE1", "UE2", "UE3", "UE4", "UE5", "UER2", "UER3", "UI1", "UI2", "UI3", "UI4", "UI5", "UIR1", "UIR2", "UIR3", "UIR4", "UN1", "UN2", "UN3", "UN4", "UN5", "UNR1", "UNR2", "UNR3", "UNR4", "UO1", "UO2", "UO3", "UO4", "UO5", "UOR1", "UOR2", "UOR3", "UOR5", "UR1", "UR2", "UR4", "UR5", "V2", "V3", "V4", "V5", "VE4", "VR3", "WA1", "WA2", "WA3", "WA4", "WA5", "WAI1", "WAI2", "WAI3", "WAI4", "WAN1", "WAN2", "WAN3", "WAN4", "WAN5", "WANG1", "WANG2", "WANG3", "WANG4", "WANG5", "WANGR2", "WANGR4", "WANR2", "WANR4", "WANR5", "WEI1", "WEI2", "WEI3", "WEI4", "WEI5", "WEIR1", "WEIR2", "WEIR3", "WEIR4", "WEIR5", "WEN1", "WEN2", "WEN3", "WEN4", "WEN5", "WENG1", "WENG2", "WENG3", "WENG4", "WENR2", "WO1", "WO2", "WO3", "WO4", "WO5", "WU1", "WU2", "WU3", "WU4", "WU5", "WUR3", "YA1", "YA2", "YA3", "YA4", "YA5", "YAN1", "YAN2", "YAN3", "YAN4", "YANG1", "YANG2", "YANG3", "YANG4", "YANG5", "YANGR4", "YANR3", "YAO1", "YAO2", "YAO3", "YAO4", "YAO5", "YE1", "YE2", "YE3", "YE4", "YE5", "YER4", "YI1", "YI2", "YI3", "YI4", "YI5", "YIN1", "YIN2", "YIN3", "YIN4", "YIN5", "YING1", "YING2", "YING3", "YING4", "YING5", "YINGR1", "YINGR2", "YINGR3", "YIR4", "YO1", "YO3", "YONG1", "YONG2", "YONG3", "YONG4", "YONG5", "YONGR3", "YOU1", "YOU2", "YOU3", "YOU4", "YOU5", "YOUR2", "YOUR3", "YOUR4", "YU1", "YU2", "YU3", "YU4", "YU5", "YUAN1", "YUAN2", "YUAN3", "YUAN4", "YUAN5", "YUANR2", "YUANR4", "YUE1", "YUE2", "YUE4", "YUE5", "YUER4", "YUN1", "YUN2", "YUN3", "YUN4",
"@BREATHE_IN", "@BREATHE_OUT", "@LAUGH", "@GIGGLE", "@SIGH", "@COUGH", "@AHEM", "@SNEEZE", "@WHISTLE", "@UGH", "@HMM", "@GASP", "@AAH", "@GRUNT", "@YAWN", "@SNIFF"
]
// window.ARPAbetSymbols = [
// 'AA', 'AA0', 'AA1', 'AA2', 'AE', 'AE0', 'AE1', 'AE2', 'AH', 'AH0', 'AH1', 'AH2',
// 'AO', 'AO0', 'AO1', 'AO2', 'AW', 'AW0', 'AW1', 'AW2', 'AY', 'AY0', 'AY1', 'AY2',
// 'B', 'CH', 'D', 'DH', 'EH', 'EH0', 'EH1', 'EH2', 'ER', 'ER0', 'ER1', 'ER2', 'EY',
// 'EY0', 'EY1', 'EY2', 'F', 'G', 'HH', 'IH', 'IH0', 'IH1', 'IH2', 'IY', 'IY0', 'IY1',
// 'IY2', 'JH', 'K', 'L', 'M', 'N', 'NG', 'OW', 'OW0', 'OW1', 'OW2', 'OY', 'OY0',
// 'OY1', 'OY2', 'P', 'R', 'S', 'SH', 'T', 'TH', 'UH', 'UH0', 'UH1', 'UH2', 'UW',
// 'UW0', 'UW1', 'UW2', 'V', 'W', 'Y', 'Z', 'ZH'
// ,"}","{", "_"
// ]
window.refreshDictionariesList = () => {
return new Promise(resolve => {
// Don't spam with changes when the menu isn't open
// if (arpabetModal.parentElement.style.display!="flex" && window.arpabetMenuState.hasInitialised) {
if (arpabetModal.parentElement.style.display!="flex") {
return
}
window.arpabetMenuState.hasInitialised = true
if (window.arpabetMenuState.isRefreshing) {
resolve()
return
}
window.arpabetMenuState.isRefreshing = true
if (window.arpabetMenuState.skipRefresh) {
resolve()
return
}
spinnerModal(window.i18n.LOADING_DICTIONARIES)
window.arpabetMenuState.dictionaries = {}
arpabet_dicts_list.innerHTML = ""
const jsonFiles = fs.readdirSync(`${window.path}/arpabet`).filter(fname => fname.includes(".json"))
const readFile = (fileCounter) => {
const fname = jsonFiles[fileCounter]
if (!fname.includes(".json")) {
if ((fileCounter+1)<jsonFiles.length) {
readFile(fileCounter+1)
} else {
window.arpabetRunSearch()
window.arpabetMenuState.isRefreshing = false
closeModal(undefined, arpabetContainer)
resolve()
}
return
}
const dictId = fname.replace(".json", "")
fs.readFile(`${window.path}/arpabet/${fname}`, "utf8", (err, data) => {
const jsonData = JSON.parse(data)
const dictButton = createElem("button", jsonData.title)
dictButton.title = jsonData.description
dictButton.style.background = window.currentGame ? `#${window.currentGame.themeColourPrimary}` : "#aaa"
arpabet_dicts_list.appendChild(dictButton)
window.arpabetMenuState.dictionaries[dictId] = jsonData
dictButton.addEventListener("click", ()=>handleDictClick(dictId))
if ((fileCounter+1)<jsonFiles.length) {
readFile(fileCounter+1)
} else {
window.arpabetRunSearch()
window.arpabetMenuState.isRefreshing = false
closeModal(undefined, arpabetContainer)
resolve()
}
})
}
if (jsonFiles.length) {
readFile(0)
} else {
window.arpabetMenuState.isRefreshing = false
closeModal(undefined, arpabetContainer)
resolve()
}
})
}
window.handleDictClick = (dictId) => {
if (window.arpabetMenuState.currentDict==dictId) {
return
}
arpabet_enableall_button.disabled = false
arpabet_disableall_button.disabled = false
window.arpabetMenuState.currentDict = dictId
window.arpabetMenuState.paginationIndex = 0
window.arpabetMenuState.totalPages = 0
arpabet_word_search_input.value = ""
window.arpabetRunSearch()
window.refreshDictWordList()
}
window.refreshDictWordList = () => {
const dictId = window.arpabetMenuState.currentDict
arpabetWordsListContainer.innerHTML = ""
const wordKeys = Object.keys(window.arpabetMenuState.dictionaries[dictId].filteredData)
let startIndex = window.arpabetMenuState.paginationIndex*window.userSettings.arpabet_paginationSize
const endIndex = Math.min(startIndex+window.userSettings.arpabet_paginationSize, wordKeys.length)
window.arpabetMenuState.totalPages = Math.ceil(wordKeys.length/window.userSettings.arpabet_paginationSize)
arpabet_pagination_numbers.innerHTML = window.i18n.PAGINATION_X_OF_Y.replace("_1", window.arpabetMenuState.paginationIndex+1).replace("_2", window.arpabetMenuState.totalPages)
for (let i=startIndex; i<endIndex; i++) {
const data = window.arpabetMenuState.dictionaries[dictId].filteredData[wordKeys[i]]
const word = wordKeys[i]
const rowElem = createElem("div.arpabetRow")
const ckbx = createElem("input.arpabetRowItem", {type: "checkbox"})
ckbx.checked = data.enabled
ckbx.style.marginTop = 0
ckbx.addEventListener("click", () => {
window.arpabetMenuState.dictionaries[dictId].data[wordKeys[i]].enabled = ckbx.checked
window.arpabetMenuState.skipRefresh = true
window.saveARPAbetDict(dictId)
window.arpabetMenuState.hasChangedARPAbet = true
setTimeout(() => window.arpabetMenuState.skipRefresh = false, 1000)
})
const deleteButton = createElem("button.smallButton.arpabetRowItem", window.i18n.DELETE)
deleteButton.style.background = window.currentGame ? `#${window.currentGame.themeColourPrimary}` : "#aaa"
deleteButton.addEventListener("click", () => {
window.confirmModal(window.i18n.ARPABET_CONFIRM_DELETE_WORD.replace("_1", word)).then(response => {
if (response) {
setTimeout(() => {
delete window.arpabetMenuState.dictionaries[dictId].data[word]
delete window.arpabetMenuState.dictionaries[dictId].filteredData[word]
window.saveARPAbetDict(dictId)
window.refreshDictWordList()
}, 210)
}
})
})
const wordElem = createElem("div.arpabetRowItem", word)
wordElem.title = word
const arpabetElem = createElem("div.arpabetRowItem", data.arpabet)
arpabetElem.title = data.arpabet
rowElem.appendChild(createElem("div.arpabetRowItem", ckbx))
rowElem.appendChild(createElem("div.arpabetRowItem", deleteButton))
rowElem.appendChild(wordElem)
rowElem.appendChild(arpabetElem)
rowElem.addEventListener("click", () => {
window.arpabetMenuState.clickedRecord = {elem: rowElem, word}
arpabet_word_input.value = word
arpabet_arpabet_input.value = data.arpabet
})
arpabetWordsListContainer.appendChild(rowElem)
}
}
window.saveARPAbetDict = (dictId) => {
const dataOut = {
title: window.arpabetMenuState.dictionaries[dictId].title,
description: window.arpabetMenuState.dictionaries[dictId].description,
version: window.arpabetMenuState.dictionaries[dictId].version,
author: window.arpabetMenuState.dictionaries[dictId].author,
nexusLink: window.arpabetMenuState.dictionaries[dictId].nexusLink,
data: window.arpabetMenuState.dictionaries[dictId].data
}
doFetch(`http://localhost:8008/updateARPABet`, {
method: "Post",
body: JSON.stringify({})
})//.then(r => r.text()).then(r => {console.log(r)})
fs.writeFileSync(`${window.path}/arpabet/${dictId}.json`, JSON.stringify(dataOut, null, 4))
}
window.refreshARPABETReferenceDisplay = () => {
const V2 = [2]
const V3 = [3]
const V2_3 = [2,3]
const data = [
// Min model version, symbols, examples
[V2, "AA0, AA1, AA2", "b<b>al</b>m, b<b>o</b>t, c<b>o</b>t"],
[V3, "AA, AA0, AA1, AA2", "b<b>al</b>m, b<b>o</b>t, c<b>o</b>t"],
[V2, "AE0, AE1, AE2", "b<b>a</b>t, f<b>a</b>st"],
[V3, "AE, AE0, AE1, AE2", "b<b>a</b>t, f<b>a</b>st"],
[V2, "AH0, AH1, AH2", "b<b>u</b>tt"],
[V3, "AH, AH0, AH1, AH2", "b<b>u</b>tt"],
[V2, "AO0, AO1, AO2", "st<b>o</b>ry"],
[V3, "AO, AO0, AO1, AO2", "st<b>o</b>ry"],
[V2, "AW0, AW1, AW2", "b<b>ou</b>t"],
[V3, "AW, AW0, AW1, AW2", "b<b>ou</b>t"],
[V3, "AX", "comm<b>a</b>"],
[V3, "AXR", "lett<b>er</b>"],
[V2, "AY0, AY1, AY2", "b<b>i</b>te"],
[V3, "AY, AY0, AY1, AY2", "b<b>i</b>te"],
[V2_3, "B", "<b>b</b>uy"],
[V3, "BR", "B and RRR sounds, together"],
[V2_3, "CH", "<b>ch</b>ina"],
[V2_3, "D", "<b>d</b>ie"],
[V3, "DX", "bu<b>tt</b>er"],
[V2_3, "DH", "<b>th</b>y"],
[V2, "EH0, EH1, EH2", "b<b>e</b>t"],
[V3, "EH,EH0, EH1, EH2", "b<b>e</b>t"],
[V3, "EL", "bott<b>le</b>"],
[V3, "EM", "rhyth<b>m</b>"],
[V3, "EN, EN0, EN1, EN2", "butt<b>on</b>"],
[V2, "ER0, ER1, ER2", "b<b>i</b>rd"],
[V3, "ER, ER0, ER1, ER2", "b<b>i</b>rd"],
[V2, "EY0, EY1, EY2", "b<b>ai</b>t"],
[V3, "EY, EY0, EY1, EY2", "b<b>ai</b>t"],
[V2_3, "F", "<b>f</b>ight"],
[V2_3, "G", "<b>g</b>uy"],
[V2_3, "HH", "<b>h</b>igh"],
[V3, "HJ", "J sound if mouth was open"],
[V3, "HR", "hrr sound typical in Arabic"],
[V2, "IH0, IH1, IH2", "b<b>i</b>t"],
[V3, "IH, IH0, IH1, IH2", "b<b>i</b>t"],
[V3, "IX", "ros<b>e</b>s, rabb<b>i</b>t"],
[V2, "IY0, IY1, IY2", "b<b>ea</b>t"],
[V3, "IY, IY0, IY1, IY2", "b<b>ea</b>t"],
[V2_3, "JH", "<b>j</b>ive"],
[V2_3, "K", "<b>k</b>ite"],
[V3, "KH", "K and H sounds, but together"],
[V2_3, "L", "<b>l</b>ie"],
[V2_3, "M", "<b>m</b>y"],
[V2_3, "N", "<b>n</b>igh"],
[V2_3, "NG", "si<b>ng</b>"],
[V3, "NX", "wi<b>nn</b>er"],
[V3, "OE", "german m<b>ΓΆ</b>ve, french eu (bl<b>eu</b>)"],
[V3, "OO", "hard o sound"],
[V2, "OW0, OW1, OW2", "b<b>oa</b>t"],
[V3, "OW, OW0, OW1, OW2", "b<b>oa</b>t"],
[V2, "OY0, OY1, OY2", "b<b>oy</b>"],
[V3, "OY, OY0, OY1, OY2", "b<b>oy</b>"],
[V2_3, "P", "<b>p</b>ie"],
[V3, "Q", "(glottal stop) uh<b>-</b>oh)"],
[V2_3, "R", "<b>r</b>ye"],
[V3, "RH, RR", "<b>r</b>un"],
[V3, "RRR", "<strong r>"],
[V2_3, "S", "<b>s</b>igh"],
[V3, "SJ", "swedish sj"],
[V2_3, "SH", "<b>sh</b>y"],
[V2_3, "T", "<b>t</b>ie"],
[V2_3, "TH", "<b>th</b>igh"],
[V3, "TS", "T and S sounds together (eg romanian Θ›)"],
[V2, "UH0, UH1, UH2", "b<b>oo</b>k"],
[V3, "UH, UH0, UH1, UH2", "b<b>oo</b>k"],
[V3, "UU", "german <b>ΓΌ</b>ber"],
[V2, "UW0, UW1, UW2", "b<b>oo</b>t"],
[V3, "UW, UW0, UW1, UW2", "b<b>oo</b>t"],
[V3, "UX", "d<b>u</b>de"],
[V3, "WH", "<b>wh</b>at, <b>wh</b>y (w with 'h' sound)"],
[V2_3, "V", "<b>v</b>ie"],
[V2_3, "W", "<b>w</b>ise"],
[V2_3, "Y", "<b>y</b>acht"],
[V2_3, "Z", "<b>z</b>oo"],
[V2_3, "ZH", "plea<b>s</b>ure"],
]
arpabetReferenceList.innerHTML = ""
data.forEach(item => {
if (item[0].includes(parseInt(arpabetMenuModelDropdown.value))) {
const div = createElem("div")
div.appendChild(createElem("div", item[1]))
const exampleDiv = createElem("div")
exampleDiv.appendChild(createElem("div",item[2]))
div.appendChild(exampleDiv)
arpabetReferenceList.appendChild(div)
}
})
}
arpabetMenuModelDropdown.value = "3"
window.refreshARPABETReferenceDisplay()
arpabetMenuModelDropdown.addEventListener("click", window.refreshARPABETReferenceDisplay)
arpabet_save.addEventListener("click", () => {
const word = arpabet_word_input.value.trim().toLowerCase()
const arpabet = arpabet_arpabet_input.value.trim().toUpperCase().replace(/\s{2,}/g, " ")
if (!word.length || !arpabet.length) {
return window.errorModal(window.i18n.ARPABET_ERROR_EMPTY_INPUT)
}
const badSymbols = arpabet.split(" ").filter(symb => !window.ARPAbetSymbols.includes(symb))
if (badSymbols.length) {
return window.errorModal(window.i18n.ARPABET_ERROR_BAD_SYMBOLS.replace("_1", badSymbols.join(", ")))
}
const wordKeys = Object.keys(window.arpabetMenuState.dictionaries[window.arpabetMenuState.currentDict].data)
const doTheRest_updateDict = () => {
window.arpabetMenuState.dictionaries[window.arpabetMenuState.currentDict].data[word] = {enabled: true, arpabet: arpabet}
window.arpabetMenuState.dictionaries[window.arpabetMenuState.currentDict].filteredData = window.arpabetMenuState.dictionaries[window.arpabetMenuState.currentDict].data
window.refreshDictWordList()
window.saveARPAbetDict(window.arpabetMenuState.currentDict)
}
// Delete the old record
if (window.arpabetMenuState.clickedRecord && window.arpabetMenuState.clickedRecord.word != word) {
delete window.arpabetMenuState.dictionaries[window.arpabetMenuState.currentDict].data[window.arpabetMenuState.clickedRecord.word]
}
let wordExists = []
Object.keys(window.arpabetMenuState.dictionaries).forEach(dictName => {
if (dictName==window.arpabetMenuState.currentDict) {
return
}
if (Object.keys(window.arpabetMenuState.dictionaries[dictName].data).includes(word)) {
wordExists.push(dictName)
}
})
if (wordExists.length) {
window.confirmModal(window.i18n.ARPABET_CONFIRM_SAME_WORD.replace("_1", word).replace("_2", wordExists.join("<br>"))).then(response => {
if (response) {
doTheRest_updateDict()
}
})
} else {
doTheRest_updateDict()
}
})
arpabetModal.addEventListener("click", (event) => {
if (window.arpabetMenuState.clickedRecord && event.target.className!="arpabetRow"&& event.target.className!="arpabetRowItem" && ![arpabet_word_input, arpabet_arpabet_input, arpabet_save, arpabet_prev_btn, arpabet_next_btn].includes(event.target)) {
window.arpabetMenuState.clickedRecord = undefined
arpabet_word_input.value = ""
arpabet_arpabet_input.value = ""
}
})
arpabet_prev_btn.addEventListener("click", () => {
window.arpabetMenuState.paginationIndex = Math.max(0, window.arpabetMenuState.paginationIndex-1)
window.refreshDictWordList()
})
arpabet_next_btn.addEventListener("click", () => {
window.arpabetMenuState.paginationIndex = Math.min(window.arpabetMenuState.totalPages-1, window.arpabetMenuState.paginationIndex+1)
window.refreshDictWordList()
})
window.arpabetRunSearch = () => {
if (!window.arpabetMenuState.currentDict) {
return
}
window.arpabetMenuState.paginationIndex = 0
window.arpabetMenuState.totalPages = 0
let query = arpabet_word_search_input.value.trim().toLowerCase()
if (!query.length) {
if (arpabet_search_only_enabled.checked) {
const filteredKeys = Object.keys(window.arpabetMenuState.dictionaries[window.arpabetMenuState.currentDict].data).filter(key => window.arpabetMenuState.dictionaries[window.arpabetMenuState.currentDict].data[key].enabled)
window.arpabetMenuState.dictionaries[window.arpabetMenuState.currentDict].filteredData = {}
filteredKeys.forEach(key => {
window.arpabetMenuState.dictionaries[window.arpabetMenuState.currentDict].filteredData[key] = window.arpabetMenuState.dictionaries[window.arpabetMenuState.currentDict].data[key]
})
} else {
window.arpabetMenuState.dictionaries[window.arpabetMenuState.currentDict].filteredData = window.arpabetMenuState.dictionaries[window.arpabetMenuState.currentDict].data
}
} else {
const strictQuery = query.startsWith("\"")
const filteredKeys = Object.keys(window.arpabetMenuState.dictionaries[window.arpabetMenuState.currentDict].data)
.filter(key => {
if (strictQuery) {
query = query.replaceAll("\"", "")
return key==query && (arpabet_search_only_enabled.checked ? (window.arpabetMenuState.dictionaries[window.arpabetMenuState.currentDict].data[key].enabled) : true)
} else {
return key.includes(query) && (arpabet_search_only_enabled.checked ? (window.arpabetMenuState.dictionaries[window.arpabetMenuState.currentDict].data[key].enabled) : true)
}
})
window.arpabetMenuState.dictionaries[window.arpabetMenuState.currentDict].filteredData = {}
filteredKeys.forEach(key => {
window.arpabetMenuState.dictionaries[window.arpabetMenuState.currentDict].filteredData[key] = window.arpabetMenuState.dictionaries[window.arpabetMenuState.currentDict].data[key]
})
}
window.refreshDictWordList()
}
let arpabetSearchInterval
arpabet_word_search_input.addEventListener("keyup", () => {
if (arpabetSearchInterval!=null) {
clearTimeout(arpabetSearchInterval)
}
arpabetSearchInterval = setTimeout(window.arpabetRunSearch, 500)
})
arpabet_enableall_button.addEventListener("click", () => {
const dictName = window.arpabetMenuState.dictionaries[window.arpabetMenuState.currentDict].title
window.confirmModal(window.i18n.ARPABET_CONFIRM_ENABLE_ALL.replace("_1", dictName)).then(response => {
if (response) {
setTimeout(() => {
const wordKeys = Object.keys(window.arpabetMenuState.dictionaries[window.arpabetMenuState.currentDict].data)
wordKeys.forEach(word => {
window.arpabetMenuState.dictionaries[window.arpabetMenuState.currentDict].data[word].enabled = true
})
window.saveARPAbetDict(window.arpabetMenuState.currentDict)
window.arpabetRunSearch()
}, 210)
}
})
})
arpabet_disableall_button.addEventListener("click", () => {
const dictName = window.arpabetMenuState.dictionaries[window.arpabetMenuState.currentDict].title
window.confirmModal(window.i18n.ARPABET_CONFIRM_DISABLE_ALL.replace("_1", dictName)).then(response => {
if (response) {
setTimeout(() => {
const wordKeys = Object.keys(window.arpabetMenuState.dictionaries[window.arpabetMenuState.currentDict].data)
wordKeys.forEach(word => {
window.arpabetMenuState.dictionaries[window.arpabetMenuState.currentDict].data[word].enabled = false
})
window.saveARPAbetDict(window.arpabetMenuState.currentDict)
window.arpabetRunSearch()
}, 210)
}
})
})
arpabet_search_only_enabled.addEventListener("click", () => window.arpabetRunSearch())
fs.watch(`${window.path}/arpabet`, {recursive: false, persistent: true}, (eventType, filename) => {console.log(eventType, filename);refreshDictionariesList()})