import md from 'snarkdown'; export function showSection(sectionName) { switch (sectionName) { case 'description': showDescription(); break; case 'details': showDetails(); break; case 'stats': showStats(); break; } } function showDescription() { const detailsPanel = document.getElementById('detailsPanel'); detailsPanel.style.display = 'block'; const {description} = window.currentDictionary; const descriptionHTML = md(description); detailsPanel.innerHTML = descriptionHTML; } function showDetails() { const detailsPanel = document.getElementById('detailsPanel'); detailsPanel.style.display = 'block'; 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(' ') }

`; detailsPanel.innerHTML = partsOfSpeechHTML + alphabeticalOrderHTML; } function showStats() { const detailsPanel = document.getElementById('detailsPanel'); detailsPanel.style.display = 'block'; const wordStats = getWordsStats(); const numberOfWordsHTML = `

Number of Words
${wordStats.numberOfWords.map(stat => `${stat.name}${stat.value}`).join(' ')}

`; const wordLengthHTML = `

Word Length
Shortest${wordStats.wordLength.shortest} Longest${wordStats.wordLength.longest} Average${wordStats.wordLength.average}

`; const letterDistributionHTML = `

Letter Distribution
${wordStats.letterDistribution.map(stat => `${stat.letter}${stat.percentage.toFixed(2)}`).join(' ')}

`; const totalLettersHTML = `

${wordStats.totalLetters} Total Letters

`; detailsPanel.innerHTML = numberOfWordsHTML + wordLengthHTML + letterDistributionHTML + totalLettersHTML; } function getWordsStats() { const {words, partsOfSpeech} = window.currentDictionary; const {caseSensitive} = window.currentDictionary.settings; const wordStats = { numberOfWords: [ { name: 'Total', value: words.length, }, ], wordLength: { shortest: 0, longest: 0, average: 0, }, letterDistribution: [ /* { letter: '', number: 0, percentage: 0.00, } */ ], totalLetters: 0, }; partsOfSpeech.forEach(partOfSpeech => { const wordsWithPartOfSpeech = words.filter(word => word.partOfSpeech === partOfSpeech); wordStats.numberOfWords.push({ name: partOfSpeech, value: wordsWithPartOfSpeech.length, }); }); wordStats.numberOfWords.push({ name: 'Unclassified', value: words.filter(word => !partsOfSpeech.includes(word.partOfSpeech)).length, }); let totalLetters = 0; const numberOfLetters = {}; words.forEach(word => { const shortestWord = wordStats.wordLength.shortest; const longestWord = wordStats.wordLength.longest; const wordLetters = word.name.split(''); const lettersInWord = wordLetters.length; totalLetters += lettersInWord; if (shortestWord === 0 || lettersInWord < shortestWord) { wordStats.wordLength.shortest = lettersInWord; } if (longestWord === 0 || lettersInWord > longestWord) { wordStats.wordLength.longest = lettersInWord; } wordLetters.forEach(letter => { const letterToUse = caseSensitive ? letter : letter.toLowerCase(); if (!numberOfLetters.hasOwnProperty(letterToUse)) { numberOfLetters[letterToUse] = 1; } else { numberOfLetters[letterToUse]++; } }); }); wordStats.totalLetters = totalLetters; wordStats.wordLength.average = words.length > 0 ? totalLetters / words.length : 0; for (const letter in numberOfLetters) { if (numberOfLetters.hasOwnProperty(letter)) { const number = numberOfLetters[letter]; wordStats.letterDistribution.push({ letter, number, percentage: number / totalLetters, }); } } wordStats.letterDistribution.sort((a, b) => { if (a.percentage === b.percentage) return 0; return (a.percentage > b.percentage) ? -1 : 1; }); return wordStats; }