diff --git a/src/constants.js b/src/constants.js index f7168c0..c5e6841 100644 --- a/src/constants.js +++ b/src/constants.js @@ -36,6 +36,7 @@ export const DEFAULT_DICTIONARY = { definition: '', details: '', etymology: [], + related: [], wordId: 0 }, */ ], diff --git a/src/js/render/words.js b/src/js/render/words.js index 7d5d2df..3087c67 100644 --- a/src/js/render/words.js +++ b/src/js/render/words.js @@ -62,6 +62,8 @@ export function renderWords() { details: parseReferences(removeTags(originalWord.details)), etymology: typeof originalWord.etymology === 'undefined' || originalWord.etymology.length < 1 ? null : originalWord.etymology.map(root => getWordReferenceMarkdown(removeTags(root))).join(', '), + related: typeof originalWord.related === 'undefined' || originalWord.related.length < 1 ? null + : originalWord.related.map(relatedWord => getWordReferenceMarkdown(removeTags(relatedWord))).join(', '), wordId: originalWord.wordId, }); const homonymnNumber = getHomonymnNumber(originalWord); @@ -88,11 +90,15 @@ export function renderWords() {
${md(word.details)}
- ${word.etymology === null ? '' : `
-
Etymology (Root Word${originalWord.etymology.length !== 1 ? 's' : ''})
+ ${word.etymology === null && word.related === null ? '' : `
`} + ${word.etymology === null ? '' : `
Etymology (Root Word${originalWord.etymology.length !== 1 ? 's' : ''})
${md(word.etymology).replace(/<\/?p>/g, '')}
`} + ${word.related === null ? '' : `
Related Word${originalWord.related.length !== 1 ? 's' : ''}
+ `} `; }); @@ -174,6 +180,9 @@ export function renderEditForm(wordId = false) { +
Save Changes diff --git a/src/js/wordManagement.js b/src/js/wordManagement.js index a0a0762..45a1f70 100644 --- a/src/js/wordManagement.js +++ b/src/js/wordManagement.js @@ -182,7 +182,8 @@ export function submitWordForm() { partOfSpeech = document.getElementById('wordPartOfSpeech').value, definition = document.getElementById('wordDefinition').value, details = document.getElementById('wordDetails').value, - etymology = document.getElementById('wordEtymology').value; + etymology = document.getElementById('wordEtymology').value, + related = document.getElementById('wordRelated').value; const word = { name: removeTags(name).trim(), @@ -197,6 +198,10 @@ export function submitWordForm() { word.etymology = removeTags(etymology).split(',').map(w => w.trim()).filter(w => w.length > 0); } + if (removeTags(related).trim() !== '') { + word.related = removeTags(related).split(',').map(w => w.trim()).filter(w => w.length > 0); + } + if (validateWord(word)) { addWord(word); sortWords(true); @@ -280,7 +285,8 @@ export function confirmEditWord(id) { partOfSpeech = document.getElementById('wordPartOfSpeech_' + wordId).value, definition = document.getElementById('wordDefinition_' + wordId).value, details = document.getElementById('wordDetails_' + wordId).value, - etymology = document.getElementById('wordEtymology_' + wordId).value; + etymology = document.getElementById('wordEtymology_' + wordId).value, + related = document.getElementById('wordRelated_' + wordId).value; const word = { name: removeTags(name).trim(), @@ -295,6 +301,10 @@ export function confirmEditWord(id) { word.etymology = removeTags(etymology).split(',').map(w => w.trim()).filter(w => w.length > 0); } + if (removeTags(related).trim() !== '') { + word.related = removeTags(related).split(',').map(w => w.trim()).filter(w => w.length > 0); + } + if (validateWord(word, wordId)) { if (confirm(`Are you sure you want to save changes to "${word.name}"?`)) { document.getElementById('editForm_' + wordId).classList.add('done'); diff --git a/src/php/api/Dictionary.php b/src/php/api/Dictionary.php index e8e7b8b..4cdbbdf 100644 --- a/src/php/api/Dictionary.php +++ b/src/php/api/Dictionary.php @@ -215,7 +215,7 @@ WHERE dictionary=$dictionary"; } public function getWords ($user, $dictionary) { - $query = "SELECT words.*, words_advanced.etymology FROM words + $query = "SELECT words.*, words_advanced.etymology, words_advanced.related FROM words LEFT JOIN words_advanced ON words_advanced.dictionary = words.dictionary AND words_advanced.word_id = words.word_id JOIN dictionaries ON dictionaries.id = words.dictionary WHERE words.dictionary=$dictionary AND dictionaries.user=$user"; @@ -233,10 +233,14 @@ WHERE words.dictionary=$dictionary AND dictionaries.user=$user"; 'wordId' => intval($row['word_id']), ); - if (!is_null($row['etymology'])) { + if (!is_null($row['etymology']) && $row['etymology'] !== '') { $word['etymology'] = explode(',', $row['etymology']); } + if (!is_null($row['related']) && $row['related'] !== '') { + $word['related'] = explode(',', $row['related']); + } + return $word; }, $results); } @@ -263,7 +267,7 @@ WHERE words.dictionary=$dictionary AND dictionaries.user=$user"; } $query1 = 'INSERT INTO words (dictionary, word_id, name, pronunciation, part_of_speech, definition, details, last_updated, created_on) VALUES '; - $query2 = 'INSERT INTO words_advanced (dictionary, word_id, etymology) VALUES '; + $query2 = 'INSERT INTO words_advanced (dictionary, word_id, etymology, related) VALUES '; $params1 = array(); $params2 = array(); $word_ids = array(); @@ -285,10 +289,11 @@ WHERE words.dictionary=$dictionary AND dictionaries.user=$user"; $params1[] = $last_updated; $params1[] = $word['createdOn']; - $query2 .= "(?, ?, ?), "; + $query2 .= "(?, ?, ?, ?), "; $params2[] = $dictionary; $params2[] = $word['wordId']; - $params2[] = isset($word['etymology']) ? implode(',', $word['etymology']) : null; + $params2[] = isset($word['etymology']) ? implode(',', $word['etymology']) : ''; + $params2[] = isset($word['related']) ? implode(',', $word['related']) : ''; } $query1 = trim($query1, ', ') . ' ON DUPLICATE KEY UPDATE name=VALUES(name), @@ -299,7 +304,8 @@ details=VALUES(details), last_updated=VALUES(last_updated), created_on=VALUES(created_on)'; $query2 = trim($query2, ', ') . ' ON DUPLICATE KEY UPDATE -etymology=VALUES(etymology)'; +etymology=VALUES(etymology), +related=VALUES(related)'; $results1 = $this->db->execute($query1, $params1); diff --git a/template-index.html b/template-index.html index 8880261..e263748 100644 --- a/template-index.html +++ b/template-index.html @@ -146,6 +146,9 @@ +
Add Word