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)),