diff --git a/public/chats/Aqua/1673181146000.jsonl b/public/chats/Aqua/1673181146000.jsonl
deleted file mode 100644
index edb024759..000000000
--- a/public/chats/Aqua/1673181146000.jsonl
+++ /dev/null
@@ -1,2 +0,0 @@
-{"user_name":"You","character_name":"Aqua","create_date":1674559896839}
-{"name":"Aqua","is_user":false,"is_name":true,"send_date":1674563371558,"mes":"*I am in the town square at a city named \"Axel\". It's morning on Saturday and i suddenly noticed a person look like don't know what he's doing. I approached to him and speak* Are you new here? Do you need help? Don't worry, I, aqua the goddess of water, shall help you! Do i look beautiful? *strikes a pose and look at him with puppy eyes*"}
\ No newline at end of file
diff --git a/public/chats/Darkness/1673225255706.jsonl b/public/chats/Darkness/1673225255706.jsonl
deleted file mode 100644
index 33f28a349..000000000
--- a/public/chats/Darkness/1673225255706.jsonl
+++ /dev/null
@@ -1,2 +0,0 @@
-{"user_name":"You","character_name":"Darkness","create_date":1674559899431}
-{"name":"Darkness","is_user":false,"is_name":true,"send_date":1674564914912,"mes":"*It's a sunny day, in a big park on which there are many people, some walking and others lying in the sun. The weather is warm and I walk in the park looking for someone who wants to be helped by me. Suddenly realise that someone is looking at me.* Hello, I am Darkness, a Crusader, and would you like some help?"}
\ No newline at end of file
diff --git a/public/chats/Megumin/1673323621108.jsonl b/public/chats/Megumin/1673323621108.jsonl
deleted file mode 100644
index 14a25aa6c..000000000
--- a/public/chats/Megumin/1673323621108.jsonl
+++ /dev/null
@@ -1,2 +0,0 @@
-{"user_name":"You","character_name":"Megumin","create_date":1674559900991}
-{"name":"Megumin","is_user":false,"is_name":true,"send_date":1674563153854,"mes":"*It was day, the weather was sunny and windless. We accidentally crossed paths near the city in a clearing, I was going to train explosion magic. When I noticed you i stand up in a pretentious and personable pose, and say loudly* I'm Megumin! The Arch Wizard of the Crimson Magic Clan! And i the best at explosion magic!! What are you doing here?"}
\ No newline at end of file
diff --git a/public/script.js b/public/script.js
index 75b532c8c..365b261d0 100644
--- a/public/script.js
+++ b/public/script.js
@@ -1,4 +1,5 @@
import { humanizedDateTime } from "./scripts/RossAscends-mods.js";
+import { encode, decode } from "../scripts/gpt-2-3-tokenizer/mod.js";
//RossAscends: exporting functions and vars for RA mods.
export {
@@ -648,7 +649,23 @@ var token;
}
}
async function setBackground(bg) {
+ /*
+ const response = await fetch("/setbackground", {
+ method: "POST",
+ headers: { "Content-Type": "application/json" },
+ body: JSON.stringify({
+ "bg": bg
+ })
+ });
+ if (response.ok === true) {
+ //const getData = await response.json();
+ //background = getData;
+
+ //var aa = JSON.parse(getData[0]);
+ //const load_ch_coint = Object.getOwnPropertyNames(getData);
+ }*/
+ //console.log(bg);
jQuery.ajax({
type: 'POST', //
url: '/setbackground', //
@@ -663,6 +680,9 @@ var token;
contentType: "application/json",
//processData: false,
success: function (html) {
+ //setBackground(html);
+ //$('body').css('background-image', 'linear-gradient(rgba(19,21,44,0.75), rgba(19,21,44,0.75)), url('+e.target.result+')');
+ //$("#form_bg_download").after("


");
},
error: function (jqXHR, exception) {
console.log(exception);
@@ -683,10 +703,20 @@ var token;
});
if (response.ok === true) {
+ //const getData = await response.json();
+ //background = getData;
+
+ //var aa = JSON.parse(getData[0]);
+ //const load_ch_coint = Object.getOwnPropertyNames(getData);
+
+
}
}
function printMessages() {
+ //console.log(chat);
+ //console.log('printMessages() -- printing messages for -- '+this_chid+' '+active_character+' '+characters[this_chid]);
chat.forEach(function (item, i, arr) {
+ //console.log('printMessage calls addOneMessage');
addOneMessage(item);
});
}
@@ -797,31 +827,58 @@ var token;
if (isSystem) {
newMessage.find('.mes_edit').hide();
}
-
- if (type === "swipe") {
- $("#chat")
- .children()
- .filter('[mesid="' + (count_view_mes - 1) + '"]')
- .children(".mes_block")
- .children(".mes_text")
- .html("");
- $("#chat")
- .children()
- .filter('[mesid="' + (count_view_mes - 1) + '"]')
- .children(".mes_block")
- .children(".mes_text")
- .append(messageText);
+//////// swipecode inside addOneMessage - to keep swipes displayed while
+// SWIPE BUTTON DISPLAY SHOULD BE HANDLED IN showSwipeButtons/hideSwipeButtons, not here. Commented out duplicate code.
- count_view_mes++;
+ //console.log('addOneMessage -- type = '+type);
+ if(type === 'swipe'){
+ //console.log('addOneMessage -- detected adding one swipe message')
+ $("#chat").children().filter('[mesid="'+(count_view_mes-1)+'"]').children('.mes_block').children('.mes_text').html('');
+ $("#chat").children().filter('[mesid="'+(count_view_mes-1)+'"]').children('.mes_block').children('.mes_text').append(messageText);
+
+/* if(mes['swipe_id'] !== 0 && swipes){
+ console.log('addOneMessage -- swipe_id is not 0, adding both buttons');
+ $("#chat").children().filter('[mesid="'+(count_view_mes-1)+'"]').children('.swipe_right').css('display', 'flex');
+ $("#chat").children().filter('[mesid="'+(count_view_mes-1)+'"]').children('.swipe_left').css('display', 'flex');
+ } */
+ }else{ //if this is not a display of a new swipe message..
+ //console.log('addOneMessage -- adding message');
+ $("#chat").children().filter('[mesid="'+count_view_mes+'"]').children('.mes_block').children('.mes_text').append(messageText);
+ //console.log('addOneMessage - hiding swipe buttons');
+ hideSwipeButtons(); //disabling this leaves buttons visibile on all messages, breaks swipes
+ //console.log('addOneMessage -- checking for swipes');
+ /* if(parseInt(chat.length-1) === parseInt(count_view_mes) && !mes['is_user'] && swipes){
+
+ console.log('chat length - 1 = '+(chat[chat.length-1]['mesid']));
+ if(chat[chat.length-1]['mesid'] !==undefined){
+ if(mes['swipe_id'] === undefined && count_view_mes !== 0){
+ console.log('addOneMessage -- no swipes here, showing right button for possible generation');
+ $("#chat").children().filter('[mesid="'+(count_view_mes)+'"]').children('.swipe_right').css('display', 'flex');
+ }else if(mes['swipe_id'] !== undefined){ // if swipes aren't undefined == swipes exist at this node
+ console.log('addOneMessage -- found swipes')
+ if(mes['swipe_id'] === 0){ //if we are viewing the first swipe message, display right
+ console.log('addOneMessage -- found lone swipe, displaying right button');
+ $("#chat").children().filter('[mesid="'+(count_view_mes)+'"]').children('.swipe_right').css('display', 'flex');
+ }else { // if swipe_id is more than 0, than means we must have multiple swipes, so show both items
+ console.log('addOneMessage -- found multiple swipes, showing both buttons');
+ $("#chat").children().filter('[mesid="'+(count_view_mes)+'"]').children('.swipe_right').css('display', 'flex');
+ $("#chat").children().filter('[mesid="'+(count_view_mes)+'"]').children('.swipe_left').css('display', 'flex');
+ }
+ }
+ }
+ }else{console.log('apparently no swipes found, and not a valid mesage to add hideSwipeButtons, so skipping');} */
+ count_view_mes++;
}
+ /* } */
+ // if(type !== 'swipe'){count_view_mes++;}
- var $textchat = $("#chat");
- $("#chat .mes").last().addClass("last_mes");
- $("#chat .mes").eq(-2).removeClass("last_mes");
- $textchat.scrollTop($textchat[0].scrollHeight);
+ var $textchat = $('#chat');
+ $('#chat .mes').last().addClass('last_mes');
+ $('#chat .mes').eq(-2).removeClass('last_mes');
+ $textchat.scrollTop($textchat[0].scrollHeight);
- hideSwipeButtons();
- showSwipeButtons();
+ hideSwipeButtons(); //disabling this prevents left button from correctly removing on last message without swipe to the left...
+ showSwipeButtons();
}
function substituteParams(content) {
@@ -3039,358 +3096,359 @@ console.log('getGroupChat calls addOneMessage');
a.download = fileName;
a.click();
}
- // World Info Editor
- async function showWorldEditor() {
- if (!world_info) {
- popup_type = 'default';
- callPopup('Select a world info first!
');
- return;
+
+ // World Info Editor
+ async function showWorldEditor() {
+ if (!world_info) {
+ popup_type = 'default';
+ callPopup('Select a world info first!
');
+ return;
+ }
+
+ is_world_edit_open = true;
+ $('#world_popup_name').val(world_info);
+ $('#world_popup').css('display', 'flex');
+ await loadWorldInfoData();
+ displayWorldEntries(world_info_data);
}
-
- is_world_edit_open = true;
- $('#world_popup_name').val(world_info);
- $('#world_popup').css('display', 'flex');
- await loadWorldInfoData();
- displayWorldEntries(world_info_data);
- }
-
- async function loadWorldInfoData() {
- if (!world_info) {
- return;
- }
-
- const response = await fetch("/getworldinfo", {
- method: "POST",
- headers: {
- "Content-Type": "application/json",
- "X-CSRF-Token": token,
- },
- body: JSON.stringify({ name: world_info })
- });
-
- if (response.ok) {
- world_info_data = await response.json();
- }
- }
-
- function hideWorldEditor() {
- is_world_edit_open = false;
- $('#world_popup').css('display', 'none');
- }
-
- function displayWorldEntries(data) {
- $('#world_popup_entries_list').empty();
-
- if (!data || !('entries' in data)) {
- return;
- }
-
- for (const entryUid in data.entries) {
- const entry = data.entries[entryUid];
- appendWorldEntry(entry);
- }
- }
-
- function appendWorldEntry(entry) {
- const template = $('#entry_edit_template .world_entry').clone();
- template.data('uid', entry.uid);
-
- // key
- const keyInput = template.find('textarea[name="key"]');
- keyInput.data('uid', entry.uid);
- keyInput.on('input', function () {
- const uid = $(this).data('uid');
- const value = $(this).val();
- $(this).css("height", ""); //reset the height
- $(this).css("height", $(this).prop('scrollHeight') + "px");
- world_info_data.entries[uid].key = value.split(',').map(x => x.trim()).filter(x => x);
- saveWorldInfo();
- });
- keyInput.val(entry.key.join(',')).trigger('input');
- keyInput.css("height", ""); //reset the height
- keyInput.css("height", $(this).prop('scrollHeight') + "px");
-
- // keysecondary
- const keySecondaryInput = template.find('textarea[name="keysecondary"]');
- keySecondaryInput.data('uid', entry.uid);
- keySecondaryInput.on('input', function () {
- const uid = $(this).data('uid');
- const value = $(this).val();
- $(this).css("height", ""); //reset the height
- $(this).css("height", $(this).prop('scrollHeight') + "px");
- world_info_data.entries[uid].keysecondary = value.split(',').map(x => x.trim()).filter(x => x);
- saveWorldInfo();
- });
- keySecondaryInput.val(entry.keysecondary.join(',')).trigger('input');
- keySecondaryInput.css("height", ""); //reset the height
- keySecondaryInput.css("height", $(this).prop('scrollHeight') + "px");
-
- // comment
- const commentInput = template.find('textarea[name="comment"]');
- commentInput.data('uid', entry.uid);
- commentInput.on('input', function () {
- const uid = $(this).data('uid');
- const value = $(this).val();
- $(this).css("height", ""); //reset the height
- $(this).css("height", $(this).prop('scrollHeight') + "px");
- world_info_data.entries[uid].comment = value;
- saveWorldInfo();
- });
- commentInput.val(entry.comment).trigger('input');
- commentInput.css("height", ""); //reset the height
- commentInput.css("height", $(this).prop('scrollHeight') + "px");
-
- // content
- const contentInput = template.find('textarea[name="content"]');
- contentInput.data('uid', entry.uid);
- contentInput.on('input', function () {
- const uid = $(this).data('uid');
- const value = $(this).val();
- world_info_data.entries[uid].content = value;
- $(this).css("height", ""); //reset the height
- $(this).css("height", $(this).prop('scrollHeight') + "px");
- saveWorldInfo();
-
- // count tokens
- const numberOfTokens = encode(value).length;
- $(this).closest('.world_entry').find('.world_entry_form_token_counter').html(numberOfTokens);
- });
- contentInput.val(entry.content).trigger('input');
- contentInput.css("height", ""); //reset the height
- contentInput.css("height", $(this).prop('scrollHeight') + "px");
-
- // selective
- const selectiveInput = template.find('input[name="selective"]');
- selectiveInput.data('uid', entry.uid);
- selectiveInput.on('input', function () {
- const uid = $(this).data('uid');
- const value = $(this).prop('checked');
- world_info_data.entries[uid].selective = value;
- saveWorldInfo();
-
- const keysecondary = $(this).closest('.world_entry').find('.keysecondary');
- value ? keysecondary.show() : keysecondary.hide();
- });
- selectiveInput.prop('checked', entry.selective).trigger('input');
- selectiveInput.siblings('.checkbox_fancy').click(function () {
- $(this).siblings('input').click();
- });
-
-
- // constant
- const constantInput = template.find('input[name="constant"]');
- constantInput.data('uid', entry.uid);
- constantInput.on('input', function () {
- const uid = $(this).data('uid');
- const value = $(this).prop('checked');
- world_info_data.entries[uid].constant = value;
- saveWorldInfo();
- });
- constantInput.prop('checked', entry.constant).trigger('input');
- constantInput.siblings('.checkbox_fancy').click(function () {
- $(this).siblings('input').click();
- });
-
- // order
- const orderInput = template.find('input[name="order"]');
- orderInput.data('uid', entry.uid);
- orderInput.on('input', function () {
- const uid = $(this).data('uid');
- const value = Number($(this).val());
-
- world_info_data.entries[uid].order = !isNaN(value) ? value : 0;
- saveWorldInfo();
- });
- orderInput.val(entry.order).trigger('input');
-
- // position
- if (entry.position === undefined) {
- entry.position = 0;
- }
-
- const positionInput = template.find('input[name="position"]');
- positionInput.data('uid', entry.uid);
- positionInput.on('input', function () {
- const uid = $(this).data('uid');
- const value = Number($(this).val());
- world_info_data.entries[uid].position = !isNaN(value) ? value : 0;
- saveWorldInfo();
- })
- template.find(`input[name="position"][value=${entry.position}]`).prop('checked', true).trigger('input');
-
- // display uid
- template.find('.world_entry_form_uid_value').html(entry.uid);
-
- // delete button
- const deleteButton = template.find('input.delete_entry_button');
- deleteButton.data('uid', entry.uid);
- deleteButton.on('click', function () {
- const uid = $(this).data('uid');
- deleteWorldInfoEntry(uid);
- $(this).closest('.world_entry').remove();
- saveWorldInfo();
- });
-
- template.appendTo('#world_popup_entries_list');
- return template;
- }
-
- async function deleteWorldInfoEntry(uid) {
- if (!world_info_data || !('entries' in world_info_data)) {
- return;
- }
-
- delete world_info_data.entries[uid];
- }
-
- function createWorldInfoEntry() {
- const newEntryTemplate = {
- key: [],
- keysecondary: [],
- comment: '',
- content: '',
- constant: false,
- selective: false,
- order: 100,
- position: 0,
- };
- const newUid = getFreeWorldEntryUid();
-
- if (!Number.isInteger(newUid)) {
- console.error("Couldn't assign UID to a new entry");
- return;
- }
-
- const newEntry = { uid: newUid, ...newEntryTemplate };
- world_info_data.entries[newUid] = newEntry;
-
- const entryTemplate = appendWorldEntry(newEntry);
- entryTemplate.get(0).scrollIntoView({ behavior: 'smooth' });
- }
-
- async function saveWorldInfo(immediately) {
- if (!world_info || !world_info_data) {
- return;
- }
-
- async function _save() {
- const response = await fetch("/editworldinfo", {
+
+ async function loadWorldInfoData() {
+ if (!world_info) {
+ return;
+ }
+
+ const response = await fetch("/getworldinfo", {
method: "POST",
headers: {
"Content-Type": "application/json",
"X-CSRF-Token": token,
},
- body: JSON.stringify({ name: world_info, data: world_info_data })
+ body: JSON.stringify({ name: world_info })
});
+
+ if (response.ok) {
+ world_info_data = await response.json();
+ }
}
-
- if (immediately) {
- return await _save();
+
+ function hideWorldEditor() {
+ is_world_edit_open = false;
+ $('#world_popup').css('display', 'none');
}
-
- clearTimeout(timerWorldSave);
- timerWorldSave = setTimeout(async () => await _save(), durationSaveEdit);
- }
-
- async function renameWorldInfo() {
- const oldName = world_info;
- const newName = $('#world_popup_name').val();
-
- if (oldName === newName) {
- return;
+
+ function displayWorldEntries(data) {
+ $('#world_popup_entries_list').empty();
+
+ if (!data || !('entries' in data)) {
+ return;
+ }
+
+ for (const entryUid in data.entries) {
+ const entry = data.entries[entryUid];
+ appendWorldEntry(entry);
+ }
}
-
- world_info = newName;
- await saveWorldInfo(true);
- await deleteWorldInfo(oldName, newName);
- }
-
- async function deleteWorldInfo(worldInfoName, selectWorldName) {
- if (!world_names.includes(worldInfoName)) {
- return;
+
+ function appendWorldEntry(entry) {
+ const template = $('#entry_edit_template .world_entry').clone();
+ template.data('uid', entry.uid);
+
+ // key
+ const keyInput = template.find('textarea[name="key"]');
+ keyInput.data('uid', entry.uid);
+ keyInput.on('input', function () {
+ const uid = $(this).data('uid');
+ const value = $(this).val();
+ $(this).css("height", ""); //reset the height
+ $(this).css("height", $(this).prop('scrollHeight') + "px");
+ world_info_data.entries[uid].key = value.split(',').map(x => x.trim()).filter(x => x);
+ saveWorldInfo();
+ });
+ keyInput.val(entry.key.join(',')).trigger('input');
+ keyInput.css("height", ""); //reset the height
+ keyInput.css("height", $(this).prop('scrollHeight') + "px");
+
+ // keysecondary
+ const keySecondaryInput = template.find('textarea[name="keysecondary"]');
+ keySecondaryInput.data('uid', entry.uid);
+ keySecondaryInput.on('input', function () {
+ const uid = $(this).data('uid');
+ const value = $(this).val();
+ $(this).css("height", ""); //reset the height
+ $(this).css("height", $(this).prop('scrollHeight') + "px");
+ world_info_data.entries[uid].keysecondary = value.split(',').map(x => x.trim()).filter(x => x);
+ saveWorldInfo();
+ });
+ keySecondaryInput.val(entry.keysecondary.join(',')).trigger('input');
+ keySecondaryInput.css("height", ""); //reset the height
+ keySecondaryInput.css("height", $(this).prop('scrollHeight') + "px");
+
+ // comment
+ const commentInput = template.find('textarea[name="comment"]');
+ commentInput.data('uid', entry.uid);
+ commentInput.on('input', function () {
+ const uid = $(this).data('uid');
+ const value = $(this).val();
+ $(this).css("height", ""); //reset the height
+ $(this).css("height", $(this).prop('scrollHeight') + "px");
+ world_info_data.entries[uid].comment = value;
+ saveWorldInfo();
+ });
+ commentInput.val(entry.comment).trigger('input');
+ commentInput.css("height", ""); //reset the height
+ commentInput.css("height", $(this).prop('scrollHeight') + "px");
+
+ // content
+ const contentInput = template.find('textarea[name="content"]');
+ contentInput.data('uid', entry.uid);
+ contentInput.on('input', function () {
+ const uid = $(this).data('uid');
+ const value = $(this).val();
+ world_info_data.entries[uid].content = value;
+ $(this).css("height", ""); //reset the height
+ $(this).css("height", $(this).prop('scrollHeight') + "px");
+ saveWorldInfo();
+
+ // count tokens
+ const numberOfTokens = encode(value).length;
+ $(this).closest('.world_entry').find('.world_entry_form_token_counter').html(numberOfTokens);
+ });
+ contentInput.val(entry.content).trigger('input');
+ contentInput.css("height", ""); //reset the height
+ contentInput.css("height", $(this).prop('scrollHeight') + "px");
+
+ // selective
+ const selectiveInput = template.find('input[name="selective"]');
+ selectiveInput.data('uid', entry.uid);
+ selectiveInput.on('input', function () {
+ const uid = $(this).data('uid');
+ const value = $(this).prop('checked');
+ world_info_data.entries[uid].selective = value;
+ saveWorldInfo();
+
+ const keysecondary = $(this).closest('.world_entry').find('.keysecondary');
+ value ? keysecondary.show() : keysecondary.hide();
+ });
+ selectiveInput.prop('checked', entry.selective).trigger('input');
+ selectiveInput.siblings('.checkbox_fancy').click(function () {
+ $(this).siblings('input').click();
+ });
+
+
+ // constant
+ const constantInput = template.find('input[name="constant"]');
+ constantInput.data('uid', entry.uid);
+ constantInput.on('input', function () {
+ const uid = $(this).data('uid');
+ const value = $(this).prop('checked');
+ world_info_data.entries[uid].constant = value;
+ saveWorldInfo();
+ });
+ constantInput.prop('checked', entry.constant).trigger('input');
+ constantInput.siblings('.checkbox_fancy').click(function () {
+ $(this).siblings('input').click();
+ });
+
+ // order
+ const orderInput = template.find('input[name="order"]');
+ orderInput.data('uid', entry.uid);
+ orderInput.on('input', function () {
+ const uid = $(this).data('uid');
+ const value = Number($(this).val());
+
+ world_info_data.entries[uid].order = !isNaN(value) ? value : 0;
+ saveWorldInfo();
+ });
+ orderInput.val(entry.order).trigger('input');
+
+ // position
+ if (entry.position === undefined) {
+ entry.position = 0;
+ }
+
+ const positionInput = template.find('input[name="position"]');
+ positionInput.data('uid', entry.uid);
+ positionInput.on('input', function () {
+ const uid = $(this).data('uid');
+ const value = Number($(this).val());
+ world_info_data.entries[uid].position = !isNaN(value) ? value : 0;
+ saveWorldInfo();
+ })
+ template.find(`input[name="position"][value=${entry.position}]`).prop('checked', true).trigger('input');
+
+ // display uid
+ template.find('.world_entry_form_uid_value').html(entry.uid);
+
+ // delete button
+ const deleteButton = template.find('input.delete_entry_button');
+ deleteButton.data('uid', entry.uid);
+ deleteButton.on('click', function () {
+ const uid = $(this).data('uid');
+ deleteWorldInfoEntry(uid);
+ $(this).closest('.world_entry').remove();
+ saveWorldInfo();
+ });
+
+ template.appendTo('#world_popup_entries_list');
+ return template;
}
-
- const response = await fetch("/deleteworldinfo", {
- method: "POST",
- headers: {
- "Content-Type": "application/json",
- "X-CSRF-Token": token,
- },
- body: JSON.stringify({ name: worldInfoName })
- });
-
- if (response.ok) {
+
+ async function deleteWorldInfoEntry(uid) {
+ if (!world_info_data || !('entries' in world_info_data)) {
+ return;
+ }
+
+ delete world_info_data.entries[uid];
+ }
+
+ function createWorldInfoEntry() {
+ const newEntryTemplate = {
+ key: [],
+ keysecondary: [],
+ comment: '',
+ content: '',
+ constant: false,
+ selective: false,
+ order: 100,
+ position: 0,
+ };
+ const newUid = getFreeWorldEntryUid();
+
+ if (!Number.isInteger(newUid)) {
+ console.error("Couldn't assign UID to a new entry");
+ return;
+ }
+
+ const newEntry = { uid: newUid, ...newEntryTemplate };
+ world_info_data.entries[newUid] = newEntry;
+
+ const entryTemplate = appendWorldEntry(newEntry);
+ entryTemplate.get(0).scrollIntoView({ behavior: 'smooth' });
+ }
+
+ async function saveWorldInfo(immediately) {
+ if (!world_info || !world_info_data) {
+ return;
+ }
+
+ async function _save() {
+ const response = await fetch("/editworldinfo", {
+ method: "POST",
+ headers: {
+ "Content-Type": "application/json",
+ "X-CSRF-Token": token,
+ },
+ body: JSON.stringify({ name: world_info, data: world_info_data })
+ });
+ }
+
+ if (immediately) {
+ return await _save();
+ }
+
+ clearTimeout(timerWorldSave);
+ timerWorldSave = setTimeout(async () => await _save(), durationSaveEdit);
+ }
+
+ async function renameWorldInfo() {
+ const oldName = world_info;
+ const newName = $('#world_popup_name').val();
+
+ if (oldName === newName) {
+ return;
+ }
+
+ world_info = newName;
+ await saveWorldInfo(true);
+ await deleteWorldInfo(oldName, newName);
+ }
+
+ async function deleteWorldInfo(worldInfoName, selectWorldName) {
+ if (!world_names.includes(worldInfoName)) {
+ return;
+ }
+
+ const response = await fetch("/deleteworldinfo", {
+ method: "POST",
+ headers: {
+ "Content-Type": "application/json",
+ "X-CSRF-Token": token,
+ },
+ body: JSON.stringify({ name: worldInfoName })
+ });
+
+ if (response.ok) {
+ await updateWorldInfoList();
+
+ const selectedIndex = world_names.indexOf(selectWorldName);
+ if (selectedIndex !== -1) {
+ $('#world_info').val(selectedIndex).change();
+ }
+ else {
+ $('#world_info').val('None').change();
+ }
+
+ hideWorldEditor();
+ }
+ }
+
+ function getFreeWorldEntryUid() {
+ if (!world_info_data || !('entries' in world_info_data)) {
+ return null;
+ }
+
+ const MAX_UID = 1_000_000; // <- should be safe enough :)
+ for (let uid = 0; uid < MAX_UID; uid++) {
+ if (uid in world_info_data.entries) {
+ continue;
+ }
+ return uid;
+ }
+
+ return null;
+ }
+
+ function getFreeWorldName() {
+ const MAX_FREE_NAME = 100_000;
+ for (let index = 1; index < MAX_FREE_NAME; index++) {
+ const newName = `New World (${index})`;
+ if (world_names.includes(newName)) {
+ continue;
+ }
+ return newName;
+ }
+
+ return undefined;
+ }
+
+ async function createNewWorldInfo() {
+ const worldInfoTemplate = { entries: {} };
+ const worldInfoName = getFreeWorldName();
+
+ if (!worldInfoName) {
+ return;
+ }
+
+ world_info = worldInfoName;
+ world_info_data = { ...worldInfoTemplate };
+ await saveWorldInfo(true);
await updateWorldInfoList();
-
- const selectedIndex = world_names.indexOf(selectWorldName);
+
+ const selectedIndex = world_names.indexOf(worldInfoName);
if (selectedIndex !== -1) {
$('#world_info').val(selectedIndex).change();
}
else {
$('#world_info').val('None').change();
}
-
- hideWorldEditor();
}
- }
-
- function getFreeWorldEntryUid() {
- if (!world_info_data || !('entries' in world_info_data)) {
- return null;
- }
-
- const MAX_UID = 1_000_000; // <- should be safe enough :)
- for (let uid = 0; uid < MAX_UID; uid++) {
- if (uid in world_info_data.entries) {
- continue;
- }
- return uid;
- }
-
- return null;
- }
-
- function getFreeWorldName() {
- const MAX_FREE_NAME = 100_000;
- for (let index = 1; index < MAX_FREE_NAME; index++) {
- const newName = `New World (${index})`;
- if (world_names.includes(newName)) {
- continue;
- }
- return newName;
- }
-
- return undefined;
- }
-
- async function createNewWorldInfo() {
- const worldInfoTemplate = { entries: {} };
- const worldInfoName = getFreeWorldName();
-
- if (!worldInfoName) {
- return;
- }
-
- world_info = worldInfoName;
- world_info_data = { ...worldInfoTemplate };
- await saveWorldInfo(true);
- await updateWorldInfoList();
-
- const selectedIndex = world_names.indexOf(worldInfoName);
- if (selectedIndex !== -1) {
- $('#world_info').val(selectedIndex).change();
- }
- else {
- $('#world_info').val('None').change();
- }
- }
/////////////////////////////////////////////////////////
///////// INTERACTIVE FUNCTIONS AND LISTENERS ///////////
/////////////////////////////////////////////////////////
-import { encode, decode } from "../scripts/gpt-2-3-tokenizer/mod.js";
+
$(document).ready(function () {
$('#swipes-checkbox').change(function() {