mirror of
https://github.com/SillyTavern/SillyTavern.git
synced 2025-06-05 21:59:27 +02:00
Add QR set duplicate button
This commit is contained in:
@ -51,6 +51,7 @@
|
|||||||
<div class="qr--add menu_button menu_button_icon fa-solid fa-file-import" id="qr--set-import" title="Import quick reply set"></div>
|
<div class="qr--add menu_button menu_button_icon fa-solid fa-file-import" id="qr--set-import" title="Import quick reply set"></div>
|
||||||
<input type="file" id="qr--set-importFile" accept=".json" hidden>
|
<input type="file" id="qr--set-importFile" accept=".json" hidden>
|
||||||
<div class="qr--add menu_button menu_button_icon fa-solid fa-file-export" id="qr--set-export" title="Export quick reply set"></div>
|
<div class="qr--add menu_button menu_button_icon fa-solid fa-file-export" id="qr--set-export" title="Export quick reply set"></div>
|
||||||
|
<div class="qr-add menu_button menu_button_icon fa-solid fa-paste" id="qr--set-duplicate" title="Duplicate quick reply set"></div>
|
||||||
<div class="qr--del menu_button menu_button_icon fa-solid fa-trash redWarningBG" id="qr--set-delete" title="Delete quick reply set"></div>
|
<div class="qr--del menu_button menu_button_icon fa-solid fa-trash redWarningBG" id="qr--set-delete" title="Delete quick reply set"></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -120,7 +120,8 @@ export class SettingsUi {
|
|||||||
importFile.value = null;
|
importFile.value = null;
|
||||||
});
|
});
|
||||||
this.dom.querySelector('#qr--set-import').addEventListener('click', ()=>importFile.click());
|
this.dom.querySelector('#qr--set-import').addEventListener('click', ()=>importFile.click());
|
||||||
this.dom.querySelector('#qr--set-export').addEventListener('click', async()=>this.exportQrSet());
|
this.dom.querySelector('#qr--set-export').addEventListener('click', async () => this.exportQrSet());
|
||||||
|
this.dom.querySelector('#qr--set-duplicate').addEventListener('click', async () => this.duplicateQrSet());
|
||||||
this.dom.querySelector('#qr--set-delete').addEventListener('click', async()=>this.deleteQrSet());
|
this.dom.querySelector('#qr--set-delete').addEventListener('click', async()=>this.deleteQrSet());
|
||||||
this.dom.querySelector('#qr--set-add').addEventListener('click', async()=>{
|
this.dom.querySelector('#qr--set-add').addEventListener('click', async()=>{
|
||||||
this.currentQrSet.addQuickReply();
|
this.currentQrSet.addQuickReply();
|
||||||
@ -460,6 +461,40 @@ export class SettingsUi {
|
|||||||
URL.revokeObjectURL(url);
|
URL.revokeObjectURL(url);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async duplicateQrSet() {
|
||||||
|
const newName = await Popup.show.input('Duplicate Quick Reply Set', 'Enter a name for the new Quick Reply Set:', `${this.currentQrSet.name} (Copy)`);
|
||||||
|
if (newName && newName.length > 0) {
|
||||||
|
const existingSet = QuickReplySet.get(newName);
|
||||||
|
if (existingSet) {
|
||||||
|
toastr.error(`A Quick Reply Set named "${newName}" already exists.`);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const newQrSet = QuickReplySet.from(JSON.parse(JSON.stringify(this.currentQrSet)));
|
||||||
|
newQrSet.name = newName;
|
||||||
|
newQrSet.qrList = this.currentQrSet.qrList.map(qr => QuickReply.from(JSON.parse(JSON.stringify(qr))));
|
||||||
|
newQrSet.addQuickReply();
|
||||||
|
const idx = QuickReplySet.list.findIndex(it => it.name.toLowerCase().localeCompare(newName.toLowerCase()) == 1);
|
||||||
|
if (idx > -1) {
|
||||||
|
QuickReplySet.list.splice(idx, 0, newQrSet);
|
||||||
|
} else {
|
||||||
|
QuickReplySet.list.push(newQrSet);
|
||||||
|
}
|
||||||
|
const opt = document.createElement('option'); {
|
||||||
|
opt.value = newQrSet.name;
|
||||||
|
opt.textContent = newQrSet.name;
|
||||||
|
if (idx > -1) {
|
||||||
|
this.currentSet.children[idx].insertAdjacentElement('beforebegin', opt);
|
||||||
|
} else {
|
||||||
|
this.currentSet.append(opt);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
this.currentSet.value = newName;
|
||||||
|
this.onQrSetChange();
|
||||||
|
this.prepareGlobalSetList();
|
||||||
|
this.prepareChatSetList();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
selectQrSet(qrs) {
|
selectQrSet(qrs) {
|
||||||
this.currentSet.value = qrs.name;
|
this.currentSet.value = qrs.name;
|
||||||
this.onQrSetChange();
|
this.onQrSetChange();
|
||||||
|
Reference in New Issue
Block a user