diff --git a/src/wwwroot/js/genpage/gentab/presets.js b/src/wwwroot/js/genpage/gentab/presets.js
index 5791bbf0..3f3a35c2 100644
--- a/src/wwwroot/js/genpage/gentab/presets.js
+++ b/src/wwwroot/js/genpage/gentab/presets.js
@@ -1,5 +1,6 @@
let allPresets = [];
+let allPresetsUnsorted = [];
let currentPresets = [];
let preset_to_edit = null;
@@ -292,16 +293,58 @@ function editPreset(preset) {
fixPresetParamClickables();
}
+function getPresetSortValue(sortBy, preset) {
+ switch (sortBy) {
+ case 'Name': return preset.title.substring(preset.title.lastIndexOf('/') + 1);
+ case 'Path': return preset.title;
+ default: return preset.title;
+ }
+}
+
+/** A preset comparison function which can be used to sort presets. */
+function presetSortCompare(sortBy, a, b) {
+ let valueA = getPresetSortValue(sortBy, a);
+ let valueB = getPresetSortValue(sortBy, b);
+ return valueA.localeCompare(valueB);
+}
+
+/** Sorts the presets based on the current sort options. */
function sortPresets() {
- let preList = allPresets.filter(p => p.title.toLowerCase() == "default" || p.title.toLowerCase() == "preview");
- allPresets = preList.concat(allPresets.filter(p => p.title.toLowerCase() != "default" && p.title.toLowerCase() != "preview"));
+ let sortBy = localStorage.getItem('preset_list_sort_by') || 'Default';
+ let reverse = localStorage.getItem('preset_list_sort_reverse') == 'true';
+ let preList = allPresetsUnsorted.filter(p => p.title.toLowerCase() == "default" || p.title.toLowerCase() == "preview");
+ let mainList = allPresetsUnsorted.filter(p => p.title.toLowerCase() != "default" && p.title.toLowerCase() != "preview");
+ if (sortBy != 'Default') {
+ mainList.sort((a, b) => presetSortCompare(sortBy, a, b));
+ }
+ if (reverse) {
+ mainList.reverse();
+ }
+ allPresets = preList.concat(mainList);
}
function listPresetFolderAndFiles(path, isRefresh, callback, depth) {
+ let sortElem = document.getElementById('preset_list_sort_by');
+ let fix = null;
+ if (!sortElem) { // first call happens before headers are built atm
+ fix = () => {
+ let sortElem = document.getElementById('preset_list_sort_by');
+ let sortReverseElem = document.getElementById('preset_list_sort_reverse');
+ sortElem.addEventListener('change', () => {
+ localStorage.setItem('preset_list_sort_by', sortElem.value);
+ presetBrowser.update();
+ });
+ sortReverseElem.addEventListener('change', () => {
+ localStorage.setItem('preset_list_sort_reverse', sortReverseElem.checked);
+ presetBrowser.update();
+ });
+ }
+ }
let proc = () => {
let prefix = path == '' ? '' : (path.endsWith('/') ? path : `${path}/`);
let folders = [];
let files = [];
+ sortPresets();
for (let preset of allPresets) {
if (preset.title.startsWith(prefix)) {
let subPart = preset.title.substring(prefix.length);
@@ -322,11 +365,13 @@ function listPresetFolderAndFiles(path, isRefresh, callback, depth) {
}
}
callback(folders, files);
+ if (fix) {
+ fix();
+ }
};
if (isRefresh) {
genericRequest('GetMyUserData', {}, data => {
- allPresets = data.presets;
- sortPresets();
+ allPresetsUnsorted = data.presets;
proc();
});
}
@@ -381,7 +426,8 @@ function clearPresets() {
}
let presetBrowser = new GenPageBrowserClass('preset_list', listPresetFolderAndFiles, 'presetbrowser', 'Cards', describePreset, selectPreset,
- `
+ `
+
`);
diff --git a/src/wwwroot/js/genpage/main.js b/src/wwwroot/js/genpage/main.js
index 03a0a6e5..d806e438 100644
--- a/src/wwwroot/js/genpage/main.js
+++ b/src/wwwroot/js/genpage/main.js
@@ -354,10 +354,10 @@ function loadUserData(callback) {
else {
autoCompletionsList = null;
}
- allPresets = data.presets;
if (!language) {
language = data.language;
}
+ allPresetsUnsorted = data.presets;
sortPresets();
presetBrowser.update();
if (shouldApplyDefault) {