mirror of
https://github.com/SillyTavern/SillyTavern.git
synced 2025-06-05 21:59:27 +02:00
Add asset filters
This commit is contained in:
@@ -25,6 +25,37 @@ let currentAssets = {};
|
|||||||
// Extension UI and Settings //
|
// Extension UI and Settings //
|
||||||
//#############################//
|
//#############################//
|
||||||
|
|
||||||
|
function filterAssets() {
|
||||||
|
const searchValue = String($('#assets_search').val()).toLowerCase().trim();
|
||||||
|
const typeValue = String($('#assets_type_select').val());
|
||||||
|
|
||||||
|
if (typeValue === '') {
|
||||||
|
$('#assets_menu .assets-list-div').show();
|
||||||
|
$('#assets_menu .assets-list-div h3').show();
|
||||||
|
} else {
|
||||||
|
$('#assets_menu .assets-list-div h3').hide();
|
||||||
|
$('#assets_menu .assets-list-div').hide();
|
||||||
|
$(`#assets_menu .assets-list-div[data-type="${typeValue}"]`).show();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (searchValue === '') {
|
||||||
|
$('#assets_menu .asset-block').show();
|
||||||
|
} else {
|
||||||
|
$('#assets_menu .asset-block').hide();
|
||||||
|
$('#assets_menu .asset-block').filter(function () {
|
||||||
|
return $(this).text().toLowerCase().includes(searchValue);
|
||||||
|
}).show();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const KNOWN_TYPES = {
|
||||||
|
'extension': 'Extensions',
|
||||||
|
'character': 'Characters',
|
||||||
|
'ambient': 'Ambient sounds',
|
||||||
|
'bgm': 'Background music',
|
||||||
|
'blip': 'Blip sounds',
|
||||||
|
};
|
||||||
|
|
||||||
function downloadAssetsList(url) {
|
function downloadAssetsList(url) {
|
||||||
updateCurrentAssets().then(function () {
|
updateCurrentAssets().then(function () {
|
||||||
fetch(url, { cache: 'no-cache' })
|
fetch(url, { cache: 'no-cache' })
|
||||||
@@ -48,9 +79,26 @@ function downloadAssetsList(url) {
|
|||||||
// First extensions, then everything else
|
// First extensions, then everything else
|
||||||
const assetTypes = Object.keys(availableAssets).sort((a, b) => (a === 'extension') ? -1 : (b === 'extension') ? 1 : 0);
|
const assetTypes = Object.keys(availableAssets).sort((a, b) => (a === 'extension') ? -1 : (b === 'extension') ? 1 : 0);
|
||||||
|
|
||||||
|
$('#assets_type_select').empty();
|
||||||
|
$('#assets_search').val('');
|
||||||
|
$('#assets_type_select').append($('<option />', { value: '', text: 'All' }));
|
||||||
|
|
||||||
|
for (const type of assetTypes) {
|
||||||
|
const option = $('<option />', { value: type, text: KNOWN_TYPES[type] || type });
|
||||||
|
$('#assets_type_select').append(option);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (assetTypes.includes('extension')) {
|
||||||
|
$('#assets_type_select').val('extension');
|
||||||
|
}
|
||||||
|
|
||||||
|
$('#assets_type_select').off('change').on('change', filterAssets);
|
||||||
|
$('#assets_search').off('input').on('input', filterAssets);
|
||||||
|
|
||||||
for (const assetType of assetTypes) {
|
for (const assetType of assetTypes) {
|
||||||
let assetTypeMenu = $('<div />', { id: 'assets_audio_ambient_div', class: 'assets-list-div' });
|
let assetTypeMenu = $('<div />', { id: 'assets_audio_ambient_div', class: 'assets-list-div' });
|
||||||
assetTypeMenu.append(`<h3>${assetType}</h3>`);
|
assetTypeMenu.attr('data-type', assetType);
|
||||||
|
assetTypeMenu.append(`<h3>${KNOWN_TYPES[assetType] || assetType}</h3>`).hide();
|
||||||
|
|
||||||
if (assetType == 'extension') {
|
if (assetType == 'extension') {
|
||||||
assetTypeMenu.append(`
|
assetTypeMenu.append(`
|
||||||
@@ -152,12 +200,16 @@ function downloadAssetsList(url) {
|
|||||||
assetBlock.find('.asset-name').prepend(`<div class="avatar"><img src="${asset['url']}" alt="${displayName}"></div>`);
|
assetBlock.find('.asset-name').prepend(`<div class="avatar"><img src="${asset['url']}" alt="${displayName}"></div>`);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
assetBlock.addClass('asset-block');
|
||||||
|
|
||||||
assetTypeMenu.append(assetBlock);
|
assetTypeMenu.append(assetBlock);
|
||||||
}
|
}
|
||||||
assetTypeMenu.appendTo('#assets_menu');
|
assetTypeMenu.appendTo('#assets_menu');
|
||||||
assetTypeMenu.on('click', 'a.asset_preview', previewAsset);
|
assetTypeMenu.on('click', 'a.asset_preview', previewAsset);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
filterAssets();
|
||||||
|
$('#assets_filters').show();
|
||||||
$('#assets_menu').show();
|
$('#assets_menu').show();
|
||||||
})
|
})
|
||||||
.catch((error) => {
|
.catch((error) => {
|
||||||
@@ -340,5 +392,6 @@ jQuery(async () => {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
windowHtml.find('#assets_filters').hide();
|
||||||
$('#extensions_settings').append(windowHtml);
|
$('#extensions_settings').append(windowHtml);
|
||||||
});
|
});
|
||||||
|
@@ -16,7 +16,7 @@
|
|||||||
.assets-list-git {
|
.assets-list-git {
|
||||||
font-size: calc(var(--mainFontSize) * 0.8);
|
font-size: calc(var(--mainFontSize) * 0.8);
|
||||||
opacity: 0.8;
|
opacity: 0.8;
|
||||||
margin-bottom: 1em;
|
margin-bottom: 0.25em;
|
||||||
}
|
}
|
||||||
|
|
||||||
.assets-list-div h3 {
|
.assets-list-div h3 {
|
||||||
|
@@ -10,6 +10,11 @@
|
|||||||
<input id="assets-json-url-field" class="text_pole widthUnset flex1">
|
<input id="assets-json-url-field" class="text_pole widthUnset flex1">
|
||||||
<i id="assets-connect-button" class="menu_button fa-solid fa-plug-circle-exclamation fa-xl redOverlayGlow"></i>
|
<i id="assets-connect-button" class="menu_button fa-solid fa-plug-circle-exclamation fa-xl redOverlayGlow"></i>
|
||||||
</div>
|
</div>
|
||||||
|
<div id="assets_filters" class="flex-container">
|
||||||
|
<select id="assets_type_select" class="text_pole flex1">
|
||||||
|
</select>
|
||||||
|
<input id="assets_search" class="text_pole flex1" placeholder="Search" type="search">
|
||||||
|
</div>
|
||||||
<div class="inline-drawer-content" id="assets_menu">
|
<div class="inline-drawer-content" id="assets_menu">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
Reference in New Issue
Block a user