FuriKani/src/popup.js

131 lines
4.6 KiB
JavaScript
Raw Normal View History

2022-03-20 14:54:48 +00:00
const submitButton = document.getElementById("submit-token")
const inputField = document.getElementById("token")
const statusField = document.getElementById("token-status")
const errorField = document.getElementById("error-text")
2022-03-20 15:25:50 +00:00
const globalSetting = document.getElementById("setting-global")
const vocabSetting = document.getElementById("setting-vocabulary")
const kanjiSetting = document.getElementById("setting-kanji")
2022-03-20 14:54:48 +00:00
// Set popup content
2022-03-20 16:13:22 +00:00
chrome.storage.local.get(["level", "token", "enabled", "enabledVocab", "enabledKanji"], (data) => {
2022-03-21 12:34:22 +00:00
// If no token is set, display exlamation mark and checkmark button
2022-03-20 14:54:48 +00:00
if(data.token === undefined)
{
statusField.innerHTML = String.fromCodePoint(0x2757)
submitButton.innerHTML = String.fromCodePoint(0x2705)
submitButton.classList.add("no-token")
}
2022-03-21 12:34:22 +00:00
else // else display checkmark and reload button
2022-03-20 14:54:48 +00:00
{
statusField.innerHTML = String.fromCodePoint(0x2705)
submitButton.innerHTML = String.fromCodePoint(0x1F501)
}
2022-03-21 12:34:22 +00:00
// Display the users current WaniKani level
2022-03-20 14:54:48 +00:00
const levelSpan = document.getElementById("level")
levelSpan.innerHTML = data.level
2022-03-21 12:34:22 +00:00
// If the input field contains text that is not the current token, turn the
// button into a checkmark (else turn it into a repeat button)
2022-03-20 14:54:48 +00:00
inputField.addEventListener("input", () => {
if(inputField.value !== "" && inputField.value !== data.token)
{
submitButton.innerHTML = String.fromCodePoint(0x2705)
submitButton.classList.add("new-token")
}
else
{
submitButton.innerHTML = String.fromCodePoint(0x1F501)
submitButton.classList.remove("new-token")
}
})
2022-03-20 16:13:22 +00:00
2022-03-21 12:34:22 +00:00
// Set the switches to thecached values
2022-03-20 16:13:22 +00:00
globalSetting.checked = data.enabled
vocabSetting.checked = data.enabledVocab
kanjiSetting.checked = data.enabledKanji
2022-03-20 14:54:48 +00:00
})
2022-03-21 12:57:05 +00:00
// Submit button pressed
2022-03-20 14:54:48 +00:00
submitButton.addEventListener( "click", () => {
2022-03-21 12:57:05 +00:00
// If the submit field has a new token, replace the current one with it
2022-03-20 14:54:48 +00:00
if(submitButton.classList.contains("new-token"))
{
chrome.storage.local.set({"token": inputField.value})
submitButton.classList.remove("new-token", "no-token")
inputField.value = ""
}
if(submitButton.classList.contains("no-token"))
return
statusField.innerHTML = String.fromCodePoint(0x23F1)
2022-03-21 12:57:05 +00:00
// Sync with wanikani
2022-03-20 14:54:48 +00:00
chrome.runtime.sendMessage("", {type: "sync"}, response => {
2022-03-21 13:03:34 +00:00
if(response.success)
{
statusField.innerHTML = String.fromCodePoint(0x2705)
errorField.innerHTML = ""
2022-03-30 14:37:47 +00:00
// Update the users current WaniKani level
chrome.storage.local.get("level", (data) => {
const levelSpan = document.getElementById("level")
levelSpan.innerHTML = data.level
})
2022-03-21 13:03:34 +00:00
}
else
{
statusField.innerHTML = String.fromCodePoint(0x2757)
errorField.innerHTML = response.error
}
})
2022-03-20 16:13:22 +00:00
})
// Set settings event listeners
globalSetting.addEventListener("change", () => {
chrome.storage.local.set({"enabled": globalSetting.checked})
2022-03-21 12:34:22 +00:00
// If the global settings are unchecked, uncheck the other options as well
// and disable them
2022-03-20 16:13:22 +00:00
if(!globalSetting.checked)
{
vocabSetting.checked = false
kanjiSetting.checked = false
vocabSetting.setAttribute("disabled", true)
kanjiSetting.setAttribute("disabled", true)
}
2022-03-21 12:34:22 +00:00
// Else restore the values of the switches and activate them agin
else
2022-03-20 16:13:22 +00:00
{
chrome.storage.local.get(["enabledVocab", "enabledKanji"], (data) => {
vocabSetting.checked = data.enabledVocab
kanjiSetting.checked = data.enabledKanji
})
vocabSetting.removeAttribute("disabled")
kanjiSetting.removeAttribute("disabled")
}
2022-03-21 12:34:22 +00:00
// Send a message to content script that the switches were updated
2022-03-20 16:13:22 +00:00
chrome.tabs.query({active: true, currentWindow: true}, (tabs) => {
chrome.tabs.sendMessage(tabs[0].id, {action: "settingsUpdated"}, (r) => {})
})
})
vocabSetting.addEventListener("change", () => {
chrome.storage.local.set({"enabledVocab": vocabSetting.checked})
chrome.tabs.query({active: true, currentWindow: true}, (tabs) => {
chrome.tabs.sendMessage(tabs[0].id, {action: "settingsUpdated"}, (r) => {})
})
})
kanjiSetting.addEventListener("change", () => {
chrome.storage.local.set({"enabledKanji": kanjiSetting.checked})
chrome.tabs.query({active: true, currentWindow: true}, (tabs) => {
chrome.tabs.sendMessage(tabs[0].id, {action: "settingsUpdated"}, (r) => {})
})
2022-03-20 14:54:48 +00:00
})