From 40feae719441676df716dde1fb3179168fc3be8e Mon Sep 17 00:00:00 2001 From: Robbie Antenesse Date: Sun, 3 May 2020 22:28:31 -0600 Subject: [PATCH] Display word etymology if is present --- src/js/render/words.js | 9 ++++- src/js/wordManagement.js | 72 ++++++++++++++++++++++------------------ 2 files changed, 48 insertions(+), 33 deletions(-) diff --git a/src/js/render/words.js b/src/js/render/words.js index 73bd93a..7d5d2df 100644 --- a/src/js/render/words.js +++ b/src/js/render/words.js @@ -9,7 +9,7 @@ import { setupWordEditFormButtons, } from '../setupListeners/words'; import { getPaginationData } from '../pagination'; -import { getOpenEditForms, translateOrthography, parseReferences } from '../wordManagement'; +import { getOpenEditForms, translateOrthography, parseReferences, getWordReferenceMarkdown } from '../wordManagement'; import { renderAd } from '../ads'; import { getPublicLink } from '../account/utilities'; import { renderPartsOfSpeech } from './details'; @@ -60,6 +60,8 @@ export function renderWords() { partOfSpeech: removeTags(originalWord.partOfSpeech), definition: removeTags(originalWord.definition), details: parseReferences(removeTags(originalWord.details)), + etymology: typeof originalWord.etymology === 'undefined' || originalWord.etymology.length < 1 ? null + : originalWord.etymology.map(root => getWordReferenceMarkdown(removeTags(root))).join(', '), wordId: originalWord.wordId, }); const homonymnNumber = getHomonymnNumber(originalWord); @@ -86,6 +88,11 @@ export function renderWords() {
${md(word.details)}
+ ${word.etymology === null ? '' : `
+
Etymology (Root Word${originalWord.etymology.length !== 1 ? 's' : ''})
+
+ ${md(word.etymology).replace(/<\/?p>/g, '')} +
`} `; }); diff --git a/src/js/wordManagement.js b/src/js/wordManagement.js index f3fd34f..a0a0762 100644 --- a/src/js/wordManagement.js +++ b/src/js/wordManagement.js @@ -116,38 +116,8 @@ export function parseReferences(detailsMarkdown) { const references = detailsMarkdown.match(/\{\{.+?\}\}/g); if (references && Array.isArray(references)) { new Set(references).forEach(reference => { - let wordToFind = reference.replace(/\{\{|\}\}/g, ''); - let homonymn = 0; - - if (wordToFind.includes(':')) { - const separator = wordToFind.indexOf(':'); - homonymn = wordToFind.substr(separator + 1); - wordToFind = wordToFind.substring(0, separator); - if (homonymn && homonymn.trim() - && !isNaN(parseInt(homonymn.trim())) && parseInt(homonymn.trim()) > 0) { - homonymn = parseInt(homonymn.trim()); - } else { - homonymn = false; - } - } - - let existingWordId = false; - const homonymnIndexes = getHomonymnIndexes({ name: wordToFind, wordId: -1 }); - - if (homonymn !== false && homonymn > 0) { - if (typeof homonymnIndexes[homonymn - 1] !== 'undefined') { - existingWordId = window.currentDictionary.words[homonymnIndexes[homonymn - 1]].wordId; - } - } else if (homonymn !== false) { - existingWordId = wordExists(wordToFind, true); - } - - if (existingWordId !== false) { - if (homonymn < 1 && homonymnIndexes.length > 0) { - homonymn = 1; - } - const homonymnSubHTML = homonymnIndexes.length > 1 && homonymn - 1 >= 0 ? '' + homonymn.toString() + '' : ''; - const wordMarkdownLink = `[${translateOrthography(wordToFind)}${homonymnSubHTML}](#${existingWordId})`; + const wordMarkdownLink = getWordReferenceMarkdown(reference); + if (wordMarkdownLink !== reference) { detailsMarkdown = detailsMarkdown.replace(new RegExp(reference, 'g'), wordMarkdownLink); } }); @@ -155,6 +125,44 @@ export function parseReferences(detailsMarkdown) { return detailsMarkdown; } +export function getWordReferenceMarkdown(reference) { + const wordToFind = reference.replace(/\{\{|\}\}/g, ''); + let homonymn = 0; + + if (wordToFind.includes(':')) { + const separator = wordToFind.indexOf(':'); + homonymn = wordToFind.substr(separator + 1); + wordToFind = wordToFind.substring(0, separator); + if (homonymn && homonymn.trim() + && !isNaN(parseInt(homonymn.trim())) && parseInt(homonymn.trim()) > 0) { + homonymn = parseInt(homonymn.trim()); + } else { + homonymn = false; + } + } + + let existingWordId = false; + const homonymnIndexes = getHomonymnIndexes({ name: wordToFind, wordId: -1 }); + + if (homonymn !== false && homonymn > 0) { + if (typeof homonymnIndexes[homonymn - 1] !== 'undefined') { + existingWordId = window.currentDictionary.words[homonymnIndexes[homonymn - 1]].wordId; + } + } else if (homonymn !== false) { + existingWordId = wordExists(wordToFind, true); + } + + if (existingWordId !== false) { + if (homonymn < 1 && homonymnIndexes.length > 0) { + homonymn = 1; + } + const homonymnSubHTML = homonymnIndexes.length > 1 && homonymn - 1 >= 0 ? '' + homonymn.toString() + '' : ''; + return `[${translateOrthography(wordToFind)}${homonymnSubHTML}](#${existingWordId})`; + } + + return reference; +} + export function expandAdvancedForm(id = false) { const wordId = typeof id.target !== 'undefined' ? this.id.replace('expandAdvancedForm', '') : id; const button = typeof id.target !== 'undefined' ? this : document.getElementById('expandAdvancedForm' + (!wordId ? '' : wordId)),