Skip to content

Commit 414956b

Browse files
author
prima
committed
fix: Assorted character manager fixes
1 parent 5872231 commit 414956b

File tree

1 file changed

+124
-37
lines changed

1 file changed

+124
-37
lines changed

klite.embd

Lines changed: 124 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -5233,7 +5233,7 @@ Current version indicated by LITEVER below.
52335233
image: b64Url
52345234
}
52355235
indexeddb_save(`character_${charName}`, JSON.stringify(dataToSave)).then(() => {
5236-
allCharacterNames.push({name: charName, thumbnail: dataUrl})
5236+
allCharacterNames.push({name: charName, thumbnail: dataUrl, type: "Character"})
52375237
updateCharacterListFromAllDe();
52385238
})
52395239
})
@@ -5244,6 +5244,24 @@ Current version indicated by LITEVER below.
52445244
}
52455245
}
52465246

5247+
function saveLorebookToIndexDB(filename, data)
5248+
{
5249+
let charName = filename.replaceAll(/[^\w()_\-'",!\[\].]/g, " ").replaceAll(/\s+/g, " ").trim();
5250+
let dataToSave = {
5251+
name: charName,
5252+
data: data
5253+
}
5254+
indexeddb_save(`character_${charName}`, JSON.stringify(dataToSave)).then(() => {
5255+
allCharacterNames.push({name: charName, type: "World Info"})
5256+
updateCharacterListFromAllDe();
5257+
})
5258+
}
5259+
5260+
function getTypeFromAllCharacterData(data)
5261+
{
5262+
return !!data?.type ? data.type : "Character"
5263+
}
5264+
52475265
function convertTavernPng(data, filename) //import tavern png data. adapted from png-chunks-extract under MIT license
52485266
{
52495267
//accepts png input data, and returns the extracted JSON
@@ -24180,7 +24198,7 @@ Current version indicated by LITEVER below.
2418024198
function getImageUrlFromCharacter(characterName)
2418124199
{
2418224200
let charData = allCharacterNames.find(c => c.name === characterName)
24183-
if (charData !== undefined)
24201+
if (charData !== undefined && charData?.thumbnail !== undefined)
2418424202
{
2418524203
let charName = characterName.replaceAll(/[^\w]/g, "_"), id = `style_image_${charName}`;
2418624204
let varName = `--img_character_${charName}`
@@ -37260,7 +37278,9 @@ flowchart TD\n${treeToViewOutput.outputText.trim()}`
3726037278
#popupContainer .popupContent
3726137279
{
3726237280
overflow-y: auto;
37281+
overflow-x: hidden;
3726337282
height: calc(100% - 40px);
37283+
width: 70vw;
3726437284
}
3726537285

3726637286
#popupContainer .popupfooter button
@@ -37385,50 +37405,95 @@ flowchart TD\n${treeToViewOutput.outputText.trim()}`
3738537405
})
3738637406

3738737407
let showCharacterList = async () => {
37388-
let container = document.createElement("div");
37389-
container.classList.add("fillContainer", "autoGrid")
37390-
container.style.width = "70vw"
37391-
container.style.overflowX = "hidden"
37392-
if (allCharacterNames.length === 0)
37393-
{
37408+
let containers = []
37409+
37410+
let createIcon = (name, image) => {
3739437411
let charIcon = document.createElement("span");
37395-
charIcon.innerText = "No characters added yet";
37396-
charIcon.style.color = "white";
37412+
let charText = document.createElement("b");
37413+
charIcon.classList.add("containAndScaleImage", "tile")
37414+
charIcon.style.backgroundImage = !!image ? image : "var(--img_esobold)"
37415+
charIcon.title = name
37416+
charText.innerText = name
37417+
charIcon.appendChild(charText)
37418+
return charIcon
37419+
}
37420+
let getContainerForType = (containerName) => {
37421+
let containerNameAsClass = containerName.replaceAll(/\s/g, "_")
37422+
let existingContainer = containers.find(container => container.classList.contains(containerNameAsClass));
37423+
if (!!existingContainer)
37424+
{
37425+
return existingContainer;
37426+
}
37427+
37428+
let container = document.createElement("div");
37429+
container.classList.add("autoGrid")
37430+
container.style.overflowX = "hidden"
37431+
container.style.border = "lightcoral"
37432+
container.style.borderStyle = "dashed"
37433+
container.style.marginBottom = "10px"
37434+
container.classList.add(containerNameAsClass)
37435+
containers.push(container)
37436+
37437+
let charIcon = createIcon(containerName, "var(--img_load)")
3739737438
container.appendChild(charIcon);
37439+
return container
37440+
}
37441+
37442+
if (allCharacterNames.length === 0)
37443+
{
37444+
let charIcon = createIcon("No characters added yet")
37445+
getContainerForType("Character").appendChild(charIcon);
3739837446
}
3739937447
else
3740037448
{
3740137449
for (let i = 0; i < allCharacterNames.length; i++)
3740237450
{
37403-
let {name, thumbnail} = allCharacterNames[i];
37404-
let charIcon = document.createElement("span");
37405-
let charText = document.createElement("b");
37406-
charIcon.classList.add("containAndScaleImage", "tile")
37407-
charIcon.style.backgroundImage = `url(${thumbnail})`
37408-
charIcon.title = name
37409-
charText.innerText = name
37451+
let {name, thumbnail} = allCharacterNames[i], type = getTypeFromAllCharacterData(allCharacterNames[i]);
37452+
let charIcon = createIcon(name, !!thumbnail ? `url(${thumbnail})` : undefined)
3741037453
charIcon.onclick = () => {
37411-
popupUtils.reset().title("Character Options").button("Load character", async () => {
37412-
popupUtils.reset()
37413-
let charData = await getCharacterData(name)
37414-
load_tavern_obj(charData.data);
37415-
}).button("Add character to WI", async () => {
37416-
popupUtils.reset()
37417-
let charData = await getCharacterData(name)
37418-
let wiToAdd = importCharacterCardAsWIInternal(charData.data);
37419-
current_wi = current_wi.filter(wi => wi?.folder !== name)
37420-
current_wi.push(...wiToAdd)
37421-
}).button("Delete character", async () => {
37454+
if (type === "Character")
37455+
{
37456+
popupUtils.reset().title("Character Options").button("Load character", async () => {
37457+
popupUtils.reset()
37458+
let charData = await getCharacterData(name)
37459+
load_tavern_obj(charData.data);
37460+
}).button("Add character to WI", async () => {
37461+
popupUtils.reset()
37462+
let charData = await getCharacterData(name)
37463+
let wiToAdd = importCharacterCardAsWIInternal(charData.data);
37464+
current_wi = current_wi.filter(wi => wi?.folder !== name)
37465+
current_wi.push(...wiToAdd)
37466+
}).button("Delete character", async () => {
37467+
popupUtils.reset()
37468+
allCharacterNames = allCharacterNames.filter(c => c.name !== name)
37469+
updateCharacterListFromAll()
37470+
}).button("Close", () => popupUtils.reset()).show();
37471+
}
37472+
else if (type === "World Info")
37473+
{
37474+
popupUtils.reset().title("World Info Options").button("Add to WI", async () => {
37475+
popupUtils.reset()
37476+
let charData = await getCharacterData(name)
37477+
let wiToAdd = charData.data;
37478+
current_wi = current_wi.filter(wi => wi?.folder !== name)
37479+
current_wi.push(...wiToAdd)
37480+
}).button("Delete world info", async () => {
37481+
popupUtils.reset()
37482+
allCharacterNames = allCharacterNames.filter(c => c.name !== name)
37483+
updateCharacterListFromAll()
37484+
}).button("Close", () => popupUtils.reset()).show();
37485+
}
37486+
else
37487+
{
3742237488
popupUtils.reset()
37423-
allCharacterNames = allCharacterNames.filter(c => c.name !== name)
37424-
updateCharacterListFromAll()
37425-
}).button("Close", () => popupUtils.reset()).show();
37489+
}
3742637490
}
37427-
charIcon.appendChild(charText)
37428-
container.appendChild(charIcon)
37491+
getContainerForType(type).appendChild(charIcon)
3742937492
}
3743037493
}
37431-
popupUtils.reset().title("Character List").content(container).button("Upload characters", () => {
37494+
popupUtils.reset().title(`Character List (${allCharacterNames.length})`)
37495+
containers.forEach(container => popupUtils.content(container))
37496+
popupUtils.button("Upload characters, lorebooks and world info", () => {
3743237497
popupUtils.reset()
3743337498
promptUserForLocalFile(async (result) => {
3743437499
let { file, fileName, ext, content, plaintext, dataArr } = result;
@@ -37438,12 +37503,34 @@ flowchart TD\n${treeToViewOutput.outputText.trim()}`
3743837503
{
3743937504
let arr = new Uint8Array(dataArr)
3744037505
let res = convertTavernPng(arr)
37441-
if (!res)
37506+
}
37507+
else if (ext === ".webp")
37508+
{
37509+
let arr = new Uint8Array(dataArr)
37510+
getTavernExifJSON(arr)
37511+
}
37512+
else
37513+
{
37514+
let wiToAdd = JSON.parse(plaintext);
37515+
let has_tav_wi_check = has_tavern_wi_check(wiToAdd);
37516+
if(has_tav_wi_check)
37517+
{
37518+
wiToAdd = load_tavern_wi(wiToAdd);
37519+
if(wiToAdd && wiToAdd.length > 0)
37520+
{
37521+
wiToAdd.forEach(wi => wi.wigroup = fileName.replace("'", ""))
37522+
}
37523+
}
37524+
if (Array.isArray(wiToAdd))
3744237525
{
37443-
getTavernExifJSON(arr)
37526+
wiToAdd = wiToAdd.filter(wi => wi?.key !== undefined)
37527+
if (wiToAdd.length > 0)
37528+
{
37529+
saveLorebookToIndexDB(fileName, wiToAdd)
37530+
}
3744437531
}
3744537532
}
37446-
}, [".png", ".webp"], true)
37533+
}, [".png", ".webp", ".json"], true)
3744737534
}).button("Delete all characters", async () => {
3744837535
popupUtils.reset()
3744937536
waitingToast.show()

0 commit comments

Comments
 (0)