From f6446eedc9aff8afb99cd9faba396b758002befa Mon Sep 17 00:00:00 2001 From: Robbie Antenesse Date: Fri, 31 Jul 2020 15:14:41 -0600 Subject: [PATCH] Add Details field templates --- src/constants.js | 1 + src/js/account/render.js | 26 +++++----- src/js/render/index.js | 2 + src/js/render/settings.js | 40 ++++++++++++++++ src/js/render/words.js | 7 +++ src/js/settings.js | 79 ++++++++++++++++++++++++++++++- src/js/setupListeners/index.js | 3 ++ src/js/setupListeners/modals.js | 11 ++++- src/js/setupListeners/settings.js | 31 ++++++++++++ src/js/wordManagement.js | 2 + src/scss/Account/_structure.scss | 9 ++++ template-index.html | 31 +++++++++++- 12 files changed, 228 insertions(+), 14 deletions(-) create mode 100644 src/js/render/settings.js create mode 100644 src/js/setupListeners/settings.js diff --git a/src/constants.js b/src/constants.js index 6c03ba7..f2c2d0d 100644 --- a/src/constants.js +++ b/src/constants.js @@ -59,6 +59,7 @@ export const DEFAULT_SETTINGS = { useHotkeys: true, showAdvanced: false, defaultTheme: 'default', + templates: [], }; export const DISPLAY_AD_EVERY = 10; diff --git a/src/js/account/render.js b/src/js/account/render.js index bc0a7d5..63b46b0 100644 --- a/src/js/account/render.js +++ b/src/js/account/render.js @@ -94,18 +94,22 @@ export function renderAccountActions() { const accountActionsHTML = `

Account Actions

Create New Dictionary

-

Request Your Data

-

- Per your GDPR rights in Articles 13–15 and 20, we allow you to request any and all data we have stored about you. The only data we have about you personally is your email address and your Public Name, if you decided to set one. All other data (your Dictionary data) is visible and accessible via the Export button under your Dictionary's Settings. Send an email to help@lexicon.ga to request your information. -

+
+

Request Your Data

+

+ Per your GDPR rights in Articles 13–15 and 20, we allow you to request any and all data we have stored about you. The only data we have about you personally is your email address and your Public Name, if you decided to set one. All other data (your Dictionary data) is visible and accessible via the Export button under your Dictionary's Settings. Send an email to help@lexicon.ga to request your information. +

+
-

Delete Your Account

-

- Per your GDPR rights in Articles 17, if you wish for your account to be deleted, please contact us at help@lexicon.ga, and we will delete your account and all associated dictionaries and words as quickly as possible. Note that you can delete dictionaries yourself via your Dictionary's Settings. -

-

- Anything that is deleted from our system is permanently and irretrievably removed from our system and cannot be restored, though search engines or internet archives may retain a cached version of your content (there is nothing we can do about this, and you will need to seek out removal of that information by directly contacting the services that are caching your data). -

+
+

Delete Your Account

+

+ Per your GDPR rights in Articles 17, if you wish for your account to be deleted, please contact us at help@lexicon.ga, and we will delete your account and all associated dictionaries and words as quickly as possible. Note that you can delete dictionaries yourself via your Dictionary's Settings. +

+

+ Anything that is deleted from our system is permanently and irretrievably removed from our system and cannot be restored, though search engines or internet archives may retain a cached version of your content (there is nothing we can do about this, and you will need to seek out removal of that information by directly contacting the services that are caching your data). +

+
`; accountActionsColumn.innerHTML = accountActionsHTML; diff --git a/src/js/render/index.js b/src/js/render/index.js index e2996a7..644dc5f 100644 --- a/src/js/render/index.js +++ b/src/js/render/index.js @@ -1,11 +1,13 @@ import { renderDictionaryDetails, renderPartsOfSpeech } from './details'; import { renderWords } from './words'; +import { renderTemplateSelectOptions } from './settings'; export function renderAll() { renderTheme(); renderCustomCSS(); renderDictionaryDetails(); renderPartsOfSpeech(); + renderTemplateSelectOptions(); renderWords(); } diff --git a/src/js/render/settings.js b/src/js/render/settings.js new file mode 100644 index 0000000..ca66e2f --- /dev/null +++ b/src/js/render/settings.js @@ -0,0 +1,40 @@ +import { setupTemplateSelectOptions } from "../setupListeners/settings"; + +export function renderTemplateSelectOptions() { + const { templates } = window.settings; + + if (typeof templates !== 'undefined') { + const templatesOptionsHTML = templates.map((template, index) => { + return `' + templatesOptionsHTML; + }); + + setupTemplateSelectOptions(); + } +} + +export function showTemplateEditor(show = true) { + document.getElementById('templateFields').style.display = show ? '' : 'none'; + if (show) { + document.getElementById('templateTextarea').focus(); + } else { + clearTemplateEditor(); + } +} + +export function showSelectedTemplate(template, index) { + const nameField = document.getElementById('templateNameField'); + nameField.value = template.name; + nameField.setAttribute('template', index.toString()); + document.getElementById('templateTextarea').value = template.template; + showTemplateEditor(true); +} + +export function clearTemplateEditor() { + document.getElementById('savedDetailsTemplates').value = ''; + document.getElementById('templateNameField').value = ''; + document.getElementById('templateTextarea').value = ''; +} \ No newline at end of file diff --git a/src/js/render/words.js b/src/js/render/words.js index c15f36b..f8ccd27 100644 --- a/src/js/render/words.js +++ b/src/js/render/words.js @@ -13,6 +13,7 @@ import { getOpenEditForms, translateOrthography, parseReferences, getWordReferen import { renderAd } from '../ads'; import { getPublicLink } from '../account/utilities'; import { renderPartsOfSpeech } from './details'; +import { renderTemplateSelectOptions } from './settings'; export function renderWord(savedWord, isPublic) { const word = highlightSearchTerm({ @@ -186,6 +187,11 @@ export function renderEditForm(wordId = false) { ${wordHasAdvancedFields || window.settings.showAdvanced ? 'Hide' : 'Show'} Advanced Fields
+ @@ -204,5 +210,6 @@ export function renderEditForm(wordId = false) { document.getElementById(wordId.toString()).innerHTML = editForm; setupWordEditFormButtons(); renderPartsOfSpeech(true); + renderTemplateSelectOptions(); } } diff --git a/src/js/settings.js b/src/js/settings.js index af229a0..e8ed9f2 100644 --- a/src/js/settings.js +++ b/src/js/settings.js @@ -4,6 +4,7 @@ import { usePhondueDigraphs } from "./KeyboardFire/phondue/ipaField"; import { renderWords } from "./render/words"; import { addMessage, hasToken, objectValuesAreDifferent } from "./utilities"; import { enableHotKeys, disableHotKeys } from "./hotkeys"; +import { showTemplateEditor, renderTemplateSelectOptions, showSelectedTemplate } from "./render/settings"; export function loadSettings() { const storedSettings = window.localStorage.getItem(SETTINGS_KEY); @@ -18,16 +19,92 @@ export function saveSettings() { } export function openSettingsModal() { - const { useIPAPronunciationField, useHotkeys, showAdvanced, defaultTheme } = window.settings; + const { useIPAPronunciationField, useHotkeys, showAdvanced, defaultTheme, templates } = window.settings; document.getElementById('settingsUseIPA').checked = useIPAPronunciationField; document.getElementById('settingsUseHotkeys').checked = useHotkeys; document.getElementById('settingsShowAdvanced').checked = showAdvanced; document.getElementById('settingsDefaultTheme').value = defaultTheme; + renderTemplateSelectOptions(); + showTemplateEditor(false); + document.getElementById('settingsModal').style.display = ''; } +export function updateTemplateSelects() { + const { templates } = window.settings; + + if (typeof templates !== 'undefined') { + const templatesOptionsHTML = templates.map((template, index) => { + return `