mirror of
				https://github.com/Alamantus/Lexiconga.git
				synced 2025-11-04 10:17:01 +01:00 
			
		
		
		
	Only save dictionary and settings when changed
This commit is contained in:
		
							parent
							
								
									572b49a660
								
							
						
					
					
						commit
						be61709d5d
					
				
					 3 changed files with 81 additions and 45 deletions
				
			
		| 
						 | 
				
			
			@ -3,7 +3,7 @@ import { renderDictionaryDetails, renderPartsOfSpeech } from "./render/details";
 | 
			
		|||
import { renderAll, renderTheme } from "./render";
 | 
			
		||||
import { removeTags, cloneObject, getTimestampInSeconds, download, slugify } from "../helpers";
 | 
			
		||||
import { LOCAL_STORAGE_KEY, DEFAULT_DICTIONARY } from "../constants";
 | 
			
		||||
import { addMessage, getNextId, hasToken } from "./utilities";
 | 
			
		||||
import { addMessage, getNextId, hasToken, objectValuesAreDifferent } from "./utilities";
 | 
			
		||||
import { addWord, sortWords } from "./wordManagement";
 | 
			
		||||
import { migrateDictionary } from './migration';
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -49,48 +49,56 @@ export function openEditModal() {
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
export function saveEditModal() {
 | 
			
		||||
  window.currentDictionary.name = removeTags(document.getElementById('editName').value.trim());
 | 
			
		||||
  window.currentDictionary.specification = removeTags(document.getElementById('editSpecification').value.trim());
 | 
			
		||||
  window.currentDictionary.description = removeTags(document.getElementById('editDescription').value.trim());
 | 
			
		||||
  window.currentDictionary.partsOfSpeech = document.getElementById('editPartsOfSpeech').value.split(',').map(val => val.trim()).filter(val => val !== '');
 | 
			
		||||
  window.currentDictionary.alphabeticalOrder = document.getElementById('editAlphabeticalOrder').value.split(' ').map(val => val.trim()).filter(val => val !== '');
 | 
			
		||||
  const updatedDictionary = cloneObject(window.currentDictionary);
 | 
			
		||||
  delete updatedDictionary.words;
 | 
			
		||||
  updatedDictionary.name = removeTags(document.getElementById('editName').value.trim());
 | 
			
		||||
  updatedDictionary.specification = removeTags(document.getElementById('editSpecification').value.trim());
 | 
			
		||||
  updatedDictionary.description = removeTags(document.getElementById('editDescription').value.trim());
 | 
			
		||||
  updatedDictionary.partsOfSpeech = document.getElementById('editPartsOfSpeech').value.split(',').map(val => val.trim()).filter(val => val !== '');
 | 
			
		||||
  updatedDictionary.alphabeticalOrder = document.getElementById('editAlphabeticalOrder').value.split(' ').map(val => val.trim()).filter(val => val !== '');
 | 
			
		||||
 | 
			
		||||
  window.currentDictionary.details.phonology.consonants = document.getElementById('editConsonants').value.split(' ').map(val => val.trim()).filter(val => val !== '');
 | 
			
		||||
  window.currentDictionary.details.phonology.vowels = document.getElementById('editVowels').value.split(' ').map(val => val.trim()).filter(val => val !== '');
 | 
			
		||||
  window.currentDictionary.details.phonology.blends = document.getElementById('editBlends').value.split(' ').map(val => val.trim()).filter(val => val !== '');
 | 
			
		||||
  window.currentDictionary.details.phonotactics.onset = document.getElementById('editOnset').value.split(',').map(val => val.trim()).filter(val => val !== '');
 | 
			
		||||
  window.currentDictionary.details.phonotactics.nucleus = document.getElementById('editNucleus').value.split(',').map(val => val.trim()).filter(val => val !== '');
 | 
			
		||||
  window.currentDictionary.details.phonotactics.coda = document.getElementById('editCoda').value.split(',').map(val => val.trim()).filter(val => val !== '');
 | 
			
		||||
  window.currentDictionary.details.phonotactics.notes = removeTags(document.getElementById('editPhonotacticsNotes').value.trim());
 | 
			
		||||
  updatedDictionary.details.phonology.consonants = document.getElementById('editConsonants').value.split(' ').map(val => val.trim()).filter(val => val !== '');
 | 
			
		||||
  updatedDictionary.details.phonology.vowels = document.getElementById('editVowels').value.split(' ').map(val => val.trim()).filter(val => val !== '');
 | 
			
		||||
  updatedDictionary.details.phonology.blends = document.getElementById('editBlends').value.split(' ').map(val => val.trim()).filter(val => val !== '');
 | 
			
		||||
  updatedDictionary.details.phonotactics.onset = document.getElementById('editOnset').value.split(',').map(val => val.trim()).filter(val => val !== '');
 | 
			
		||||
  updatedDictionary.details.phonotactics.nucleus = document.getElementById('editNucleus').value.split(',').map(val => val.trim()).filter(val => val !== '');
 | 
			
		||||
  updatedDictionary.details.phonotactics.coda = document.getElementById('editCoda').value.split(',').map(val => val.trim()).filter(val => val !== '');
 | 
			
		||||
  updatedDictionary.details.phonotactics.notes = removeTags(document.getElementById('editPhonotacticsNotes').value.trim());
 | 
			
		||||
 | 
			
		||||
  window.currentDictionary.details.orthography.translations = document.getElementById('editTranslations').value.split('\n').map(val => val.trim()).filter(val => val !== '');
 | 
			
		||||
  window.currentDictionary.details.orthography.notes = removeTags(document.getElementById('editOrthography').value.trim());
 | 
			
		||||
  window.currentDictionary.details.grammar.notes = removeTags(document.getElementById('editGrammar').value.trim());
 | 
			
		||||
  updatedDictionary.details.orthography.translations = document.getElementById('editTranslations').value.split('\n').map(val => val.trim()).filter(val => val !== '');
 | 
			
		||||
  updatedDictionary.details.orthography.notes = removeTags(document.getElementById('editOrthography').value.trim());
 | 
			
		||||
  updatedDictionary.details.grammar.notes = removeTags(document.getElementById('editGrammar').value.trim());
 | 
			
		||||
 | 
			
		||||
  window.currentDictionary.settings.allowDuplicates = !document.getElementById('editPreventDuplicates').checked;
 | 
			
		||||
  window.currentDictionary.settings.caseSensitive = document.getElementById('editCaseSensitive').checked;
 | 
			
		||||
  window.currentDictionary.settings.sortByDefinition = document.getElementById('editSortByDefinition').checked;
 | 
			
		||||
  window.currentDictionary.settings.theme = document.getElementById('editTheme').value;
 | 
			
		||||
  updatedDictionary.settings.allowDuplicates = !document.getElementById('editPreventDuplicates').checked;
 | 
			
		||||
  updatedDictionary.settings.caseSensitive = document.getElementById('editCaseSensitive').checked;
 | 
			
		||||
  updatedDictionary.settings.sortByDefinition = document.getElementById('editSortByDefinition').checked;
 | 
			
		||||
  updatedDictionary.settings.theme = document.getElementById('editTheme').value;
 | 
			
		||||
 | 
			
		||||
  if (hasToken()) {
 | 
			
		||||
    window.currentDictionary.settings.isPublic = document.getElementById('editIsPublic').checked;
 | 
			
		||||
    updatedDictionary.settings.isPublic = document.getElementById('editIsPublic').checked;
 | 
			
		||||
  } else {
 | 
			
		||||
    window.currentDictionary.settings.isPublic = false;
 | 
			
		||||
    updatedDictionary.settings.isPublic = false;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  renderTheme();
 | 
			
		||||
  renderDictionaryDetails();
 | 
			
		||||
  renderPartsOfSpeech();
 | 
			
		||||
  sortWords(true);
 | 
			
		||||
  if (objectValuesAreDifferent(updatedDictionary, window.currentDictionary)) {
 | 
			
		||||
    window.currentDictionary = Object.assign(window.currentDictionary, updatedDictionary);
 | 
			
		||||
 | 
			
		||||
  addMessage('Saved ' + window.currentDictionary.specification + ' Successfully');
 | 
			
		||||
  saveDictionary();
 | 
			
		||||
    renderTheme();
 | 
			
		||||
    renderDictionaryDetails();
 | 
			
		||||
    renderPartsOfSpeech();
 | 
			
		||||
    sortWords(true);
 | 
			
		||||
 | 
			
		||||
  if (hasToken()) {
 | 
			
		||||
    import('./account/index.js').then(account => {
 | 
			
		||||
      account.uploadDetailsDirect();
 | 
			
		||||
      account.updateChangeDictionaryOption();
 | 
			
		||||
    })
 | 
			
		||||
    addMessage('Saved ' + window.currentDictionary.specification + ' Successfully');
 | 
			
		||||
    saveDictionary();
 | 
			
		||||
 | 
			
		||||
    if (hasToken()) {
 | 
			
		||||
      import('./account/index.js').then(account => {
 | 
			
		||||
        account.uploadDetailsDirect();
 | 
			
		||||
        account.updateChangeDictionaryOption();
 | 
			
		||||
      })
 | 
			
		||||
    }
 | 
			
		||||
  } else {
 | 
			
		||||
    addMessage('No changes made to Dictionary Settings.');
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -2,7 +2,7 @@ import { SETTINGS_KEY, DEFAULT_SETTINGS } from "../constants";
 | 
			
		|||
import { cloneObject, removeTags } from "../helpers";
 | 
			
		||||
import { usePhondueDigraphs } from "./KeyboardFire/phondue/ipaField";
 | 
			
		||||
import { renderWords } from "./render/words";
 | 
			
		||||
import { addMessage, hasToken } from "./utilities";
 | 
			
		||||
import { addMessage, hasToken, objectValuesAreDifferent } from "./utilities";
 | 
			
		||||
import { enableHotKeys, disableHotKeys } from "./hotkeys";
 | 
			
		||||
 | 
			
		||||
export function loadSettings() {
 | 
			
		||||
| 
						 | 
				
			
			@ -27,9 +27,10 @@ export function openSettingsModal() {
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
export function saveSettingsModal() {
 | 
			
		||||
  window.settings.useIPAPronunciationField = document.getElementById('settingsUseIPA').checked;
 | 
			
		||||
  window.settings.useHotkeys = document.getElementById('settingsUseHotkeys').checked;
 | 
			
		||||
  window.settings.defaultTheme = document.getElementById('settingsDefaultTheme').value;
 | 
			
		||||
  const updatedSettings = cloneObject(window.settings);
 | 
			
		||||
  updatedSettings.useIPAPronunciationField = document.getElementById('settingsUseIPA').checked;
 | 
			
		||||
  updatedSettings.useHotkeys = document.getElementById('settingsUseHotkeys').checked;
 | 
			
		||||
  updatedSettings.defaultTheme = document.getElementById('settingsDefaultTheme').value;
 | 
			
		||||
 | 
			
		||||
  if (hasToken()) {
 | 
			
		||||
    import('./account/index.js').then(account => {
 | 
			
		||||
| 
						 | 
				
			
			@ -40,19 +41,30 @@ export function saveSettingsModal() {
 | 
			
		|||
        email = window.account.email;
 | 
			
		||||
        emailField.value = email;
 | 
			
		||||
      }
 | 
			
		||||
      window.account.email = email;
 | 
			
		||||
      window.account.publicName = removeTags(publicName.value).trim();
 | 
			
		||||
      window.account.allowEmails = document.getElementById('accountSettingsAllowEmails').checked;
 | 
			
		||||
      const updatedAccount = cloneObject(window.account);
 | 
			
		||||
      updatedAccount.email = email;
 | 
			
		||||
      updatedAccount.publicName = removeTags(publicName.value).trim();
 | 
			
		||||
      updatedAccount.allowEmails = document.getElementById('accountSettingsAllowEmails').checked;
 | 
			
		||||
 | 
			
		||||
      const newPassword = document.getElementById('accountSettingsNewPassword').value;
 | 
			
		||||
 | 
			
		||||
      account.editAccount(Object.assign({ newPassword }, window.account));
 | 
			
		||||
      if (objectValuesAreDifferent(updatedAccount, window.account)) {
 | 
			
		||||
        window.account = Object.assign(window.account, updatedAccount);
 | 
			
		||||
        account.editAccount(Object.assign({ newPassword }, window.account));
 | 
			
		||||
      } else {
 | 
			
		||||
        addMessage('No changes made to Account.');
 | 
			
		||||
      }
 | 
			
		||||
    });
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  saveSettings();
 | 
			
		||||
  toggleHotkeysEnabled();
 | 
			
		||||
  toggleIPAPronunciationFields();
 | 
			
		||||
  if (objectValuesAreDifferent(updatedSettings, window.settings)) {
 | 
			
		||||
    window.settings = Object.assign(window.settings, updatedSettings);
 | 
			
		||||
    saveSettings();
 | 
			
		||||
    toggleHotkeysEnabled();
 | 
			
		||||
    toggleIPAPronunciationFields();
 | 
			
		||||
  } else {
 | 
			
		||||
    addMessage('No changes made to Settings.');
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export function saveAndCloseSettingsModal() {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -176,3 +176,19 @@ export function hideAllModals() {
 | 
			
		|||
export function hasToken() {
 | 
			
		||||
  return window.isOffline !== true && getCookie('token') !== '';
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export function objectValuesAreDifferent(newObject, oldObject) {
 | 
			
		||||
  let valuesAreDifferent = false;
 | 
			
		||||
  for (let property in newObject) {
 | 
			
		||||
    if (!oldObject.hasOwnProperty(property) || JSON.stringify(newObject[property]) !== JSON.stringify(oldObject[property])) {
 | 
			
		||||
      valuesAreDifferent = true;
 | 
			
		||||
    }
 | 
			
		||||
    if (typeof newObject[property] === 'object' && !Array.isArray(newObject[property])) {
 | 
			
		||||
      valuesAreDifferent = objectValuesAreDifferent(newObject[property], oldObject[property]);
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    if (valuesAreDifferent) break;
 | 
			
		||||
  }
 | 
			
		||||
  
 | 
			
		||||
  return valuesAreDifferent;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		
		Reference in a new issue