${word.name}
${word.pronunciation} ${word.partOfSpeech}- ${word.simpleDefinition}
- ${md(word.longDefinition)}
import md from 'snarkdown'; import { removeTags } from '../helpers'; import { getWordsStats, wordExists } from './utilities'; import { getMatchingSearchWords, highlightSearchTerm } from './search'; import { showSection } from './displayToggles'; export function renderAll() { renderDictionaryDetails(); renderPartsOfSpeechSelect(); renderWords(); } export function renderDictionaryDetails() { renderName(); const tabs = document.querySelectorAll('#detailsSection nav li'); const shownTab = Array.from(tabs).find(tab => tab.classList.contains('active')); if (shownTab) { const tabName = shownTab.innerText.toLowerCase(); showSection(tabName); } } export function renderName() { const dictionaryName = removeTags(window.currentDictionary.name) + ' ' + removeTags(window.currentDictionary.specification); document.getElementById('dictionaryName').innerHTML = dictionaryName; } export function renderDescription() { const descriptionHTML = md(removeTags(window.currentDictionary.description)); detailsPanel.innerHTML = descriptionHTML; } export function renderDetails() { const { partsOfSpeech, alphabeticalOrder } = window.currentDictionary; const { phonology, orthography, grammar } = window.currentDictionary.details; const partsOfSpeechHTML = `
Parts of Speech: ${partsOfSpeech.map(partOfSpeech => '' + partOfSpeech + '').join(' ')}
`; const alphabeticalOrderHTML = `Alphabetical Order: ${ (alphabeticalOrder.length > 0 ? alphabeticalOrder : ['English Alphabet']).map(letter => `${letter}`).join(' ') }
`; const generalHTML = `Consonants: ${consonants.map(letter => `${letter}`).join(' ')}
`; const vowelHTML = `Vowels: ${vowels.map(letter => `${letter}`).join(' ')}
`; const blendHTML = blends.length > 0 ? `Polyphthongs / Blends: ${blends.map(letter => `${letter}`).join(' ')}
` : ''; const phonologyHTML = `Onset: ${onset.map(letter => `${letter}`).join(' ')}
`; const nucleusHTML = `Nucleus: ${nucleus.map(letter => `${letter}`).join(' ')}
`; const codaHTML = `Coda: ${coda.map(letter => `${letter}`).join(' ')}
`; const exceptionsHTML = exceptions.trim().length > 0 ? 'Exceptions:
Notes:
Notes:
Number of Words
${wordStats.numberOfWords.map(stat => `${stat.name}${stat.value}`).join(' ')}
Word Length
Shortest${wordStats.wordLength.shortest}
Longest${wordStats.wordLength.longest}
Average${wordStats.wordLength.average}
Letter Distribution
${wordStats.letterDistribution.map(stat => `${stat.letter}${stat.percentage.toFixed(2)}`).join(' ')}
${wordStats.totalLetters} Total Letters
`; detailsPanel.innerHTML = numberOfWordsHTML + wordLengthHTML + letterDistributionHTML + totalLettersHTML; } export function renderPartsOfSpeechSelect() { let optionsHTML = ''; window.currentDictionary.partsOfSpeech.forEach(partOfSpeech => { partOfSpeech = removeTags(partOfSpeech); optionsHTML += ``; }); Array.from(document.getElementsByClassName('part-of-speech-select')).forEach(select => { const selectedValue = select.value; select.innerHTML = optionsHTML; select.value = selectedValue; }); } export function renderWords() { const words = getMatchingSearchWords(); let wordsHTML = ''; words.forEach(originalWord => { let detailsMarkdown = removeTags(originalWord.longDefinition); const references = detailsMarkdown.match(/\{\{.+?\}\}/g); if (references && Array.isArray(references)) { new Set(references).forEach(reference => { const wordToFind = reference.replace(/\{\{|\}\}/g, ''); const existingWordId = wordExists(wordToFind, true); if (existingWordId !== false) { const wordMarkdownLink = `[${wordToFind}](#${existingWordId})`; detailsMarkdown = detailsMarkdown.replace(new RegExp(reference, 'g'), wordMarkdownLink); } }); } const word = highlightSearchTerm({ name: removeTags(originalWord.name), pronunciation: removeTags(originalWord.pronunciation), partOfSpeech: removeTags(originalWord.partOfSpeech), simpleDefinition: removeTags(originalWord.simpleDefinition), longDefinition: detailsMarkdown, wordId: originalWord.wordId, }); wordsHTML += `