import md from 'marked'; import { removeTags } from '../../helpers'; import { getHomonymnNumber, hasToken } from '../utilities'; import { getMatchingSearchWords, highlightSearchTerm, getSearchFilters, getSearchTerm } from '../search'; import { setupWordOptionButtons, // setupPagination, setupWordOptionSelections, setupWordEditFormButtons, } from '../setupListeners/words'; // import { getPaginationData } from '../pagination'; import { getOpenEditForms, translateOrthography, parseReferences, getWordReferenceMarkdown } from '../wordManagement'; import { getPublicLink } from '../account/utilities'; import { renderPartsOfSpeech } from './details'; import { renderTemplateSelectOptions } from './settings'; export function renderWord(savedWord, isPublic) { const word = highlightSearchTerm({ name: removeTags(savedWord.name), pronunciation: removeTags(savedWord.pronunciation), partOfSpeech: removeTags(savedWord.partOfSpeech), definition: removeTags(savedWord.definition), details: parseReferences(removeTags(savedWord.details)), etymology: typeof savedWord.etymology === 'undefined' || savedWord.etymology.length < 1 ? null : savedWord.etymology.map(root => getWordReferenceMarkdown(removeTags(root))).join(', '), related: typeof savedWord.related === 'undefined' || savedWord.related.length < 1 ? null : savedWord.related.map(relatedWord => getWordReferenceMarkdown(removeTags(relatedWord))).join(', '), principalParts: typeof savedWord.principalParts === 'undefined' || savedWord.principalParts.length < 1 ? null : savedWord.principalParts.join(', '), wordId: savedWord.wordId, }); const homonymnNumber = getHomonymnNumber(savedWord); const shareLink = window.currentDictionary.hasOwnProperty('externalID') ? getPublicLink() + '/' + word.wordId : ''; let wordNameDisplay = translateOrthography(word.name); return `

${wordNameDisplay}${homonymnNumber > 0 ? ' ' + homonymnNumber.toString() + '' : ''}

${word.principalParts === null ? '' : `(${word.principalParts})`} ${word.pronunciation} ${word.partOfSpeech} ${isPublic ? `` : ''} Options
${word.definition}
${md(word.details)}
${word.etymology === null && word.related === null ? '' : `
`} ${word.etymology === null ? '' : `
Etymology (Root Word${savedWord.etymology.length !== 1 ? 's' : ''})
${md(word.etymology).replace(/<\/?p>/g, '')}
`} ${word.related === null ? '' : `
Related Word${savedWord.related.length !== 1 ? 's' : ''}
`}
`; } export function renderWords() { let wordsHTML = ''; let openEditForms = getOpenEditForms(); let words = false; const isPublic = hasToken() && window.currentDictionary.settings.isPublic; if (window.currentDictionary.words.length === 0) { wordsHTML = `

No Words Created

Use the Word Form to create words or click the Help button below!
`; } else { words = getMatchingSearchWords(); if (words.length === 0) { wordsHTML = `

No Search Results

Edit your search or filter to show words.
`; } if (openEditForms.length > 0) { // Clone the dom nodes openEditForms.forEach((wordFormId, index) => { openEditForms[index] = document.getElementById(wordFormId.toString()).cloneNode(true); }); } // const { pageStart, pageEnd } = getPaginationData(words); // words.slice(pageStart, pageEnd).forEach(savedWord => { words.forEach(savedWord => { wordsHTML += renderWord(savedWord, isPublic); }); } document.getElementById('entries').innerHTML = wordsHTML; if (openEditForms.length > 0) { // Clone the dom nodes openEditForms.forEach(editForm => { const entryElement = document.getElementById(editForm.id); entryElement.parentNode.replaceChild(editForm, entryElement); }); setupWordEditFormButtons(); } setupWordOptionButtons(); setupWordOptionSelections(); // Show Search Results const searchTerm = getSearchTerm(); const filters = getSearchFilters(); let resultsText = searchTerm !== '' || !filters.allPartsOfSpeechChecked ? (words ? words.length : 0).toString() + ' Results' : ''; resultsText += !filters.allPartsOfSpeechChecked ? ' (Filtered)' : ''; document.getElementById('searchResults').innerHTML = resultsText; // renderPagination(words); } // export function renderPagination(filteredWords) { // const paginationData = getPaginationData(filteredWords); // if (paginationData.pages > 0) { // let paginationHTML = (paginationData.currentPage > 0 ? '« Previous' : '') // + '' // + (paginationData.currentPage < paginationData.pages - 1 ? 'Next »' : ''); // Array.from(document.getElementsByClassName('pagination')).forEach(pagination => { // pagination.innerHTML = paginationHTML; // }); // setupPagination(); // } // } export function renderEditForm(wordId = false) { wordId = typeof wordId.target === 'undefined' ? wordId : parseInt(this.id.replace('edit_', '')); const word = window.currentDictionary.words.find(w => w.wordId === wordId); if (word) { const escapeQuotes = (value) => value.replace(/"/g, '"'); const wordHasAdvancedFields = (word.hasOwnProperty('etymology') && word.etymology) || (word.hasOwnProperty('related') && word.related) || (word.hasOwnProperty('principalParts') && word.principalParts); const ipaPronunciationField = `
Field Help`; const plainPronunciationField = ``; const editForm = `
Save Changes Cancel Edit
`; document.getElementById(wordId.toString()).innerHTML = editForm; setupWordEditFormButtons(); renderPartsOfSpeech(true); renderTemplateSelectOptions(); } }