2019-05-09 14:24:47 -06:00
|
|
|
import { SETTINGS_KEY, DEFAULT_SETTINGS } from "../constants";
|
2019-05-23 18:09:01 -06:00
|
|
|
import { cloneObject, removeTags } from "../helpers";
|
2019-05-09 14:24:47 -06:00
|
|
|
import { usePhondueDigraphs } from "./KeyboardFire/phondue/ipaField";
|
2019-07-08 15:49:46 -06:00
|
|
|
import { renderWords } from "./render/words";
|
2019-07-09 17:03:52 -06:00
|
|
|
import { addMessage, hasToken, objectValuesAreDifferent } from "./utilities";
|
2019-05-10 13:18:38 -06:00
|
|
|
import { enableHotKeys, disableHotKeys } from "./hotkeys";
|
2020-07-31 15:14:41 -06:00
|
|
|
import { showTemplateEditor, renderTemplateSelectOptions, showSelectedTemplate } from "./render/settings";
|
2019-05-09 14:24:47 -06:00
|
|
|
|
|
|
|
export function loadSettings() {
|
|
|
|
const storedSettings = window.localStorage.getItem(SETTINGS_KEY);
|
|
|
|
window.settings = storedSettings ? JSON.parse(storedSettings) : cloneObject(DEFAULT_SETTINGS);
|
2019-06-05 17:28:49 -06:00
|
|
|
toggleIPAPronunciationFields(false);
|
2020-04-30 01:20:10 -06:00
|
|
|
toggleShowAdvancedFields();
|
2019-05-09 14:24:47 -06:00
|
|
|
}
|
|
|
|
|
|
|
|
export function saveSettings() {
|
|
|
|
window.localStorage.setItem(SETTINGS_KEY, JSON.stringify(window.settings));
|
2019-05-09 14:34:32 -06:00
|
|
|
addMessage('Settings Saved!');
|
2019-05-09 14:24:47 -06:00
|
|
|
}
|
|
|
|
|
|
|
|
export function openSettingsModal() {
|
2020-07-31 15:14:41 -06:00
|
|
|
const { useIPAPronunciationField, useHotkeys, showAdvanced, defaultTheme, templates } = window.settings;
|
2019-05-09 14:24:47 -06:00
|
|
|
|
|
|
|
document.getElementById('settingsUseIPA').checked = useIPAPronunciationField;
|
2019-05-10 13:18:38 -06:00
|
|
|
document.getElementById('settingsUseHotkeys').checked = useHotkeys;
|
2020-04-30 01:20:10 -06:00
|
|
|
document.getElementById('settingsShowAdvanced').checked = showAdvanced;
|
2019-05-31 13:11:01 -06:00
|
|
|
document.getElementById('settingsDefaultTheme').value = defaultTheme;
|
2019-05-09 14:24:47 -06:00
|
|
|
|
2020-07-31 15:14:41 -06:00
|
|
|
renderTemplateSelectOptions();
|
|
|
|
showTemplateEditor(false);
|
|
|
|
|
2019-05-09 14:24:47 -06:00
|
|
|
document.getElementById('settingsModal').style.display = '';
|
2020-08-03 16:33:56 -06:00
|
|
|
document.querySelector('#settingsModal .modal-content section').scrollTop = 0;
|
2019-05-09 14:24:47 -06:00
|
|
|
}
|
|
|
|
|
2020-07-31 15:14:41 -06:00
|
|
|
export function updateTemplateSelects() {
|
|
|
|
const { templates } = window.settings;
|
|
|
|
|
|
|
|
if (typeof templates !== 'undefined') {
|
|
|
|
const templatesOptionsHTML = templates.map((template, index) => {
|
|
|
|
return `<option value="${index.toString()}">${template.name}</options>`;
|
|
|
|
}).join('');
|
|
|
|
document.getElementById('savedDetailsTemplates').innerHTML = templatesOptionsHTML;
|
|
|
|
|
|
|
|
const templateSelects = document.getElementsByClassName('template-select');
|
|
|
|
Array.from(templateSelects).forEach(select => {
|
|
|
|
select.removeEventListener('click', showWordOptions);
|
|
|
|
select.innerHTML = templatesOptionsHTML;
|
|
|
|
select.addEventListener('click', showWordOptions);
|
|
|
|
})
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
export function createTemplate() {
|
|
|
|
window.settings.templates.push({ name: 'New Blank Template', template: '' });
|
|
|
|
const newTemplateIndex = window.settings.templates.length - 1;
|
|
|
|
|
|
|
|
renderTemplateSelectOptions();
|
|
|
|
document.getElementById('savedDetailsTemplates').value = (newTemplateIndex).toString();
|
|
|
|
|
|
|
|
editSavedTemplate(newTemplateIndex);
|
|
|
|
}
|
|
|
|
|
|
|
|
export function saveTemplate() {
|
|
|
|
const nameField = document.getElementById('templateNameField');
|
|
|
|
const name = nameField.value.trim();
|
|
|
|
const index = parseInt(nameField.getAttribute('template'));
|
|
|
|
const template = document.getElementById('templateTextarea').value;
|
|
|
|
window.settings.templates[index] = { name, template };
|
|
|
|
|
|
|
|
let storedSettings = window.localStorage.getItem(SETTINGS_KEY);
|
|
|
|
storedSettings = storedSettings ? JSON.parse(storedSettings) : cloneObject(DEFAULT_SETTINGS);
|
|
|
|
storedSettings.templates = window.settings.templates;
|
|
|
|
window.localStorage.setItem(SETTINGS_KEY, JSON.stringify(storedSettings));
|
|
|
|
addMessage('Templates Saved!');
|
|
|
|
|
|
|
|
showTemplateEditor(false);
|
|
|
|
|
|
|
|
renderTemplateSelectOptions();
|
|
|
|
}
|
|
|
|
|
|
|
|
export function deleteSelectedTemplate() {
|
|
|
|
const nameField = document.getElementById('templateNameField');
|
|
|
|
const index = nameField.getAttribute('template');
|
|
|
|
const name = window.settings.templates[index].name;
|
|
|
|
if (confirm(`Are you sure you want to delete the "${name}" template? This cannot be undone!`)) {
|
|
|
|
delete window.settings.templates[index];
|
|
|
|
window.settings.templates = window.settings.templates.filter(template => template != null);
|
|
|
|
|
|
|
|
saveSettings();
|
|
|
|
|
|
|
|
showTemplateEditor(false);
|
|
|
|
|
|
|
|
renderTemplateSelectOptions();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
export function editSavedTemplate(selectEvent) {
|
|
|
|
const { templates } = window.settings;
|
|
|
|
const selectedIndex = typeof selectEvent.target !== 'undefined' ? selectEvent.target.value : selectEvent;
|
|
|
|
|
|
|
|
if (selectedIndex !== '') {
|
|
|
|
showSelectedTemplate(templates[selectedIndex], selectedIndex);
|
|
|
|
} else {
|
|
|
|
showTemplateEditor(false);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2019-05-09 14:24:47 -06:00
|
|
|
export function saveSettingsModal() {
|
2019-07-09 17:03:52 -06:00
|
|
|
const updatedSettings = cloneObject(window.settings);
|
|
|
|
updatedSettings.useIPAPronunciationField = document.getElementById('settingsUseIPA').checked;
|
|
|
|
updatedSettings.useHotkeys = document.getElementById('settingsUseHotkeys').checked;
|
2020-04-30 01:20:10 -06:00
|
|
|
updatedSettings.showAdvanced = document.getElementById('settingsShowAdvanced').checked;
|
2019-07-09 17:03:52 -06:00
|
|
|
updatedSettings.defaultTheme = document.getElementById('settingsDefaultTheme').value;
|
2019-05-09 14:24:47 -06:00
|
|
|
|
2019-05-23 18:09:01 -06:00
|
|
|
if (hasToken()) {
|
|
|
|
import('./account/index.js').then(account => {
|
|
|
|
const emailField = document.getElementById('accountSettingsEmail');
|
|
|
|
let email = removeTags(emailField.value).trim();
|
|
|
|
const publicName = document.getElementById('accountSettingsPublicName');
|
|
|
|
if (!/.+@.+\..+/.test(email)) {
|
|
|
|
email = window.account.email;
|
|
|
|
emailField.value = email;
|
|
|
|
}
|
2019-07-09 17:03:52 -06:00
|
|
|
const updatedAccount = cloneObject(window.account);
|
|
|
|
updatedAccount.email = email;
|
|
|
|
updatedAccount.publicName = removeTags(publicName.value).trim();
|
|
|
|
updatedAccount.allowEmails = document.getElementById('accountSettingsAllowEmails').checked;
|
2019-05-23 18:09:01 -06:00
|
|
|
|
2019-05-23 18:25:52 -06:00
|
|
|
const newPassword = document.getElementById('accountSettingsNewPassword').value;
|
|
|
|
|
2019-07-09 17:03:52 -06:00
|
|
|
if (objectValuesAreDifferent(updatedAccount, window.account)) {
|
|
|
|
window.account = Object.assign(window.account, updatedAccount);
|
|
|
|
account.editAccount(Object.assign({ newPassword }, window.account));
|
|
|
|
} else {
|
|
|
|
addMessage('No changes made to Account.');
|
|
|
|
}
|
2019-05-23 18:09:01 -06:00
|
|
|
});
|
|
|
|
}
|
|
|
|
|
2019-07-09 17:03:52 -06:00
|
|
|
if (objectValuesAreDifferent(updatedSettings, window.settings)) {
|
|
|
|
window.settings = Object.assign(window.settings, updatedSettings);
|
|
|
|
saveSettings();
|
|
|
|
toggleHotkeysEnabled();
|
|
|
|
toggleIPAPronunciationFields();
|
2020-04-30 01:20:10 -06:00
|
|
|
toggleShowAdvancedFields();
|
2019-07-09 17:03:52 -06:00
|
|
|
} else {
|
|
|
|
addMessage('No changes made to Settings.');
|
|
|
|
}
|
2019-05-09 14:24:47 -06:00
|
|
|
}
|
|
|
|
|
|
|
|
export function saveAndCloseSettingsModal() {
|
|
|
|
saveSettingsModal();
|
|
|
|
document.getElementById('settingsModal').style.display = 'none';
|
|
|
|
}
|
|
|
|
|
2019-05-10 13:18:38 -06:00
|
|
|
export function toggleHotkeysEnabled() {
|
|
|
|
disableHotKeys();
|
|
|
|
if (window.settings.useHotkeys) {
|
|
|
|
enableHotKeys();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2019-06-05 17:28:49 -06:00
|
|
|
export function toggleIPAPronunciationFields(render = true) {
|
2019-06-06 11:36:27 -06:00
|
|
|
const ipaButtons = document.querySelectorAll('.ipa-field-help-button'),
|
2019-05-09 14:24:47 -06:00
|
|
|
ipaFields = document.querySelectorAll('.ipa-field');
|
|
|
|
if (!window.settings.useIPAPronunciationField) {
|
|
|
|
Array.from(ipaButtons).forEach(button => {
|
|
|
|
button.style.display = 'none';
|
|
|
|
});
|
|
|
|
Array.from(ipaFields).forEach(field => {
|
|
|
|
field.removeEventListener('keypress', usePhondueDigraphs);
|
|
|
|
});
|
|
|
|
} else {
|
|
|
|
Array.from(ipaButtons).forEach(button => {
|
|
|
|
button.style.display = '';
|
|
|
|
});
|
|
|
|
Array.from(ipaFields).forEach(field => {
|
|
|
|
field.addEventListener('keypress', usePhondueDigraphs);
|
|
|
|
});
|
|
|
|
}
|
2019-06-05 17:28:49 -06:00
|
|
|
if (render) {
|
|
|
|
renderWords();
|
|
|
|
}
|
2019-05-09 14:24:47 -06:00
|
|
|
}
|
2020-04-30 01:20:10 -06:00
|
|
|
|
|
|
|
export function toggleShowAdvancedFields() {
|
|
|
|
const buttons = document.getElementsByClassName('expand-advanced-form'),
|
|
|
|
forms = document.getElementsByClassName('advanced-word-form');
|
|
|
|
const formsWithFilledFields = [];
|
|
|
|
|
|
|
|
Array.from(forms).forEach(form => {
|
|
|
|
const fields = form.querySelectorAll('input, textarea');
|
|
|
|
const formHasFieldFilled = Array.from(fields).some(field => field.value.trim() !== '');
|
|
|
|
if (window.settings.showAdvanced || formHasFieldFilled) {
|
|
|
|
form.style.display = 'block';
|
|
|
|
} else {
|
|
|
|
form.style.display = 'none';
|
|
|
|
}
|
|
|
|
if (formHasFieldFilled) {
|
|
|
|
formsWithFilledFields.push(form.id.replace('advancedForm', ''));
|
|
|
|
}
|
|
|
|
});
|
|
|
|
Array.from(buttons).forEach(button => {
|
|
|
|
const formHasFilledField = formsWithFilledFields.includes(button.id.replace('expandAdvancedForm', ''));
|
|
|
|
if (window.settings.showAdvanced || formHasFilledField) {
|
|
|
|
button.innerText = 'Hide Advanced Fields';
|
|
|
|
} else {
|
|
|
|
button.innerText = 'Show Advanced Fields';
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|