Added core code-lang-favourites JS, PHP & CSS logic

- Got the functionality now working to favourite items and store that
  status within the system for the user.
- Improved CSS display for usability.
This commit is contained in:
Dan Brown
2022-07-25 13:10:27 +01:00
parent ebc5a53410
commit 0df5ae0658
5 changed files with 76 additions and 8 deletions

View File

@ -15,12 +15,14 @@ class CodeEditor {
this.languageInput = this.$refs.languageInput;
this.historyDropDown = this.$refs.historyDropDown;
this.historyList = this.$refs.historyList;
this.favourites = new Set(this.$opts.favourites.split(','));
this.callback = null;
this.editor = null;
this.history = {};
this.historyKey = 'code_history';
this.setupListeners();
this.setupFavourites();
}
setupListeners() {
@ -49,6 +51,43 @@ class CodeEditor {
});
}
setupFavourites() {
for (const button of this.languageLinks) {
this.setupFavouritesForButton(button);
}
this.sortLanguageList();
}
/**
* @param {HTMLButtonElement} button
*/
setupFavouritesForButton(button) {
const language = button.dataset.lang;
let isFavorite = this.favourites.has(language);
button.setAttribute('data-favourite', isFavorite ? 'true' : 'false');
onChildEvent(button.parentElement, '.lang-option-favorite-toggle', 'click', () => {
isFavorite = !isFavorite;
isFavorite ? this.favourites.add(language) : this.favourites.delete(language);
button.setAttribute('data-favourite', isFavorite ? 'true' : 'false');
window.$http.patch('/settings/users/update-code-language-favourite', {
language: language,
active: isFavorite
});
this.sortLanguageList();
if (isFavorite) {
button.scrollIntoView({block: "center", behavior: "smooth"});
}
});
}
sortLanguageList() {
// TODO
}
save() {
if (this.callback) {
this.callback(this.editor.getValue(), this.languageInput.value);