mirror of
https://github.com/SillyTavern/SillyTavern.git
synced 2025-06-05 21:59:27 +02:00
Add drag&drop to data bank
This commit is contained in:
@ -863,6 +863,61 @@ async function openAttachmentManager() {
|
|||||||
template.find('.chatAttachmentsName').text(chatName);
|
template.find('.chatAttachmentsName').text(chatName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function addDragAndDrop() {
|
||||||
|
$(document.body).on('dragover', '.dialogue_popup', (event) => {
|
||||||
|
event.preventDefault();
|
||||||
|
event.stopPropagation();
|
||||||
|
$(event.target).closest('.dialogue_popup').addClass('dragover');
|
||||||
|
});
|
||||||
|
|
||||||
|
$(document.body).on('dragleave', '.dialogue_popup', (event) => {
|
||||||
|
event.preventDefault();
|
||||||
|
event.stopPropagation();
|
||||||
|
$(event.target).closest('.dialogue_popup').removeClass('dragover');
|
||||||
|
});
|
||||||
|
|
||||||
|
$(document.body).on('drop', '.dialogue_popup', async (event) => {
|
||||||
|
event.preventDefault();
|
||||||
|
event.stopPropagation();
|
||||||
|
$(event.target).closest('.dialogue_popup').removeClass('dragover');
|
||||||
|
|
||||||
|
const files = Array.from(event.originalEvent.dataTransfer.files);
|
||||||
|
const targets = Object.values(ATTACHMENT_SOURCE);
|
||||||
|
|
||||||
|
const isNotCharacter = this_chid === undefined || selected_group;
|
||||||
|
const isNotInChat = getCurrentChatId() === undefined;
|
||||||
|
let selectedTarget = ATTACHMENT_SOURCE.GLOBAL;
|
||||||
|
|
||||||
|
if (isNotCharacter) {
|
||||||
|
targets.splice(targets.indexOf(ATTACHMENT_SOURCE.CHARACTER), 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isNotInChat) {
|
||||||
|
targets.splice(targets.indexOf(ATTACHMENT_SOURCE.CHAT), 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
const targetSelectTemplate = $(await renderExtensionTemplateAsync('attachments', 'files-dropped', { count: files.length, targets: targets }));
|
||||||
|
targetSelectTemplate.find('.droppedFilesTarget').on('input', function () {
|
||||||
|
selectedTarget = String($(this).val());
|
||||||
|
});
|
||||||
|
const result = await callGenericPopup(targetSelectTemplate, POPUP_TYPE.CONFIRM, '', { wide: false, large: false, okButton: 'Upload', cancelButton: 'Cancel' });
|
||||||
|
if (result !== POPUP_RESULT.AFFIRMATIVE) {
|
||||||
|
console.log('File upload cancelled');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
for (const file of files) {
|
||||||
|
await uploadFileAttachmentToServer(file, selectedTarget);
|
||||||
|
}
|
||||||
|
renderAttachments();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function removeDragAndDrop() {
|
||||||
|
$(document.body).off('dragover', '.shadow_popup');
|
||||||
|
$(document.body).off('dragleave', '.shadow_popup');
|
||||||
|
$(document.body).off('drop', '.shadow_popup');
|
||||||
|
}
|
||||||
|
|
||||||
let sortField = localStorage.getItem('DataBank_sortField') || 'created';
|
let sortField = localStorage.getItem('DataBank_sortField') || 'created';
|
||||||
let sortOrder = localStorage.getItem('DataBank_sortOrder') || 'desc';
|
let sortOrder = localStorage.getItem('DataBank_sortOrder') || 'desc';
|
||||||
let filterString = '';
|
let filterString = '';
|
||||||
@ -888,9 +943,11 @@ async function openAttachmentManager() {
|
|||||||
const cleanupFn = await renderButtons();
|
const cleanupFn = await renderButtons();
|
||||||
await verifyAttachments();
|
await verifyAttachments();
|
||||||
await renderAttachments();
|
await renderAttachments();
|
||||||
|
addDragAndDrop();
|
||||||
await callGenericPopup(template, POPUP_TYPE.TEXT, '', { wide: true, large: true, okButton: 'Close' });
|
await callGenericPopup(template, POPUP_TYPE.TEXT, '', { wide: true, large: true, okButton: 'Close' });
|
||||||
|
|
||||||
cleanupFn();
|
cleanupFn();
|
||||||
|
removeDragAndDrop();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
8
public/scripts/extensions/attachments/files-dropped.html
Normal file
8
public/scripts/extensions/attachments/files-dropped.html
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
<div class="flex-container justifyCenter alignItemsCenter">
|
||||||
|
<span>Save <span class="droppedFilesCount">{{count}}</span> file(s) to...</span>
|
||||||
|
<select class="droppedFilesTarget">
|
||||||
|
{{#each targets}}
|
||||||
|
<option value="{{this}}">{{this}}</option>
|
||||||
|
{{/each}}
|
||||||
|
</select>
|
||||||
|
</div>
|
@ -2262,6 +2262,11 @@ grammarly-extension {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.dialogue_popup.dragover {
|
||||||
|
filter: brightness(1.1) saturate(1.1);
|
||||||
|
outline: 3px dashed var(--SmartThemeBorderColor);
|
||||||
|
}
|
||||||
|
|
||||||
#bgtest {
|
#bgtest {
|
||||||
display: none;
|
display: none;
|
||||||
width: 100vw;
|
width: 100vw;
|
||||||
@ -4015,4 +4020,4 @@ body:not(.movingUI) .drawer-content.maximized {
|
|||||||
height: 100vh;
|
height: 100vh;
|
||||||
z-index: 9999;
|
z-index: 9999;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user