mirror of
https://github.com/SillyTavern/SillyTavern.git
synced 2025-06-05 21:59:27 +02:00
verify QR paste JSON and allow non-JSON pastes
This commit is contained in:
@ -239,6 +239,28 @@ export class QuickReplySet {
|
|||||||
this.save();
|
this.save();
|
||||||
return qr;
|
return qr;
|
||||||
}
|
}
|
||||||
|
addQuickReplyFromText(qrJson) {
|
||||||
|
let data;
|
||||||
|
try {
|
||||||
|
data = JSON.parse(qrJson ?? '{}');
|
||||||
|
delete data.id;
|
||||||
|
} catch {
|
||||||
|
// not JSON data
|
||||||
|
}
|
||||||
|
if (data) {
|
||||||
|
// JSON data
|
||||||
|
if (data.label === undefined || data.message === undefined) {
|
||||||
|
// not a QR
|
||||||
|
toastr.error('Not a QR.');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// no JSON, use plaintext as QR message
|
||||||
|
data = { message: qrJson };
|
||||||
|
}
|
||||||
|
const newQr = this.addQuickReply(data);
|
||||||
|
return newQr;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
@ -250,11 +272,8 @@ export class QuickReplySet {
|
|||||||
qr.onDelete = ()=>this.removeQuickReply(qr);
|
qr.onDelete = ()=>this.removeQuickReply(qr);
|
||||||
qr.onUpdate = ()=>this.save();
|
qr.onUpdate = ()=>this.save();
|
||||||
qr.onInsertBefore = (qrJson)=>{
|
qr.onInsertBefore = (qrJson)=>{
|
||||||
const data = JSON.parse(qrJson ?? '{}');
|
this.addQuickReplyFromText(qrJson);
|
||||||
delete data.id;
|
const newQr = this.qrList.pop();
|
||||||
log('onInsertBefore', data);
|
|
||||||
const newQr = this.addQuickReply(data);
|
|
||||||
this.qrList.pop();
|
|
||||||
this.qrList.splice(this.qrList.indexOf(qr), 0, newQr);
|
this.qrList.splice(this.qrList.indexOf(qr), 0, newQr);
|
||||||
if (qr.settingsDom) {
|
if (qr.settingsDom) {
|
||||||
qr.settingsDom.insertAdjacentElement('beforebegin', newQr.settingsDom);
|
qr.settingsDom.insertAdjacentElement('beforebegin', newQr.settingsDom);
|
||||||
|
@ -121,7 +121,7 @@ export class SettingsUi {
|
|||||||
});
|
});
|
||||||
this.dom.querySelector('#qr--set-paste').addEventListener('click', async()=>{
|
this.dom.querySelector('#qr--set-paste').addEventListener('click', async()=>{
|
||||||
const text = await navigator.clipboard.readText();
|
const text = await navigator.clipboard.readText();
|
||||||
this.currentQrSet.addQuickReply(JSON.parse(text));
|
this.currentQrSet.addQuickReplyFromText(text);
|
||||||
});
|
});
|
||||||
this.dom.querySelector('#qr--set-importQr').addEventListener('click', async()=>{
|
this.dom.querySelector('#qr--set-importQr').addEventListener('click', async()=>{
|
||||||
const inp = document.createElement('input'); {
|
const inp = document.createElement('input'); {
|
||||||
|
Reference in New Issue
Block a user