mirror of
https://github.com/KoboldAI/KoboldAI-Client.git
synced 2025-06-05 21:59:24 +02:00
Shave off unselected text
That was surprisingly difficult
This commit is contained in:
@@ -7010,10 +7010,36 @@ sync_hooks.push({
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
async function showScreenshotWizard(actionComposition) {
|
async function showScreenshotWizard(actionComposition, startDebt, endDebt) {
|
||||||
|
// startDebt is the amount we need to shave off the front, and endDebt the
|
||||||
|
// same for the end
|
||||||
|
|
||||||
screenshotTextContainer.innerHTML = "";
|
screenshotTextContainer.innerHTML = "";
|
||||||
|
let charCount = startDebt;
|
||||||
for (const action of actionComposition) {
|
for (const action of actionComposition) {
|
||||||
for (const chunk of action) {
|
for (const chunk of action) {
|
||||||
|
// Account for debt
|
||||||
|
if (startDebt > 0) {
|
||||||
|
if (chunk.content.length <= startDebt) {
|
||||||
|
startDebt -= chunk.content.length;
|
||||||
|
continue;
|
||||||
|
} else {
|
||||||
|
// Slice up chunk
|
||||||
|
chunk.content = chunk.content.slice(startDebt);
|
||||||
|
startDebt = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (charCount > endDebt) {
|
||||||
|
break;
|
||||||
|
} else if (charCount + chunk.content.length > endDebt) {
|
||||||
|
let charsLeft = endDebt - charCount
|
||||||
|
chunk.content = chunk.content.slice(0, charsLeft);
|
||||||
|
endDebt = -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
charCount += chunk.content.length;
|
||||||
|
|
||||||
let actionClass = {
|
let actionClass = {
|
||||||
ai: "ai-text",
|
ai: "ai-text",
|
||||||
user: "human-text",
|
user: "human-text",
|
||||||
@@ -7094,23 +7120,35 @@ async function screenshot_selection(summonEvent) {
|
|||||||
if (commonAncestorContainer.nodeName === "#text") commonAncestorContainer = commonAncestorContainer.parentNode;
|
if (commonAncestorContainer.nodeName === "#text") commonAncestorContainer = commonAncestorContainer.parentNode;
|
||||||
|
|
||||||
let rangeParentChildren = commonAncestorContainer.childNodes;
|
let rangeParentChildren = commonAncestorContainer.childNodes;
|
||||||
|
|
||||||
// Array of STRING actions ids
|
// Array of STRING actions ids
|
||||||
let selectedActionIds = [];
|
let selectedActionIds = [];
|
||||||
|
|
||||||
for (let el of rangeParentChildren) {
|
for (let el of rangeParentChildren) {
|
||||||
if (selection.containsNode(el, true)) {
|
if (!selection.containsNode(el, true)) continue;
|
||||||
// When selecting a portion of a singular action, el can be a text
|
// When selecting a portion of a singular action, el can be a text
|
||||||
// node rather than an action span
|
// node rather than an action span
|
||||||
if (el.nodeName === "#text") el = el.parentNode.closest("[chunk]");
|
if (el.nodeName === "#text") el = el.parentNode.closest("[chunk]");
|
||||||
let actionId = el.getAttribute("chunk");
|
let actionId = el.getAttribute("chunk");
|
||||||
if (!actionId) continue;
|
|
||||||
if (selectedActionIds.includes(actionId)) continue;
|
if (!actionId) continue;
|
||||||
selectedActionIds.push(actionId);
|
if (selectedActionIds.includes(actionId)) continue;
|
||||||
}
|
|
||||||
|
selectedActionIds.push(actionId);
|
||||||
}
|
}
|
||||||
|
|
||||||
let actionComposition = await (await fetch(`/action_composition.json?actions=${selectedActionIds.join(",")}`)).json();
|
let actionComposition = await (await fetch(`/action_composition.json?actions=${selectedActionIds.join(",")}`)).json();
|
||||||
console.log(actionComposition);
|
|
||||||
await showScreenshotWizard(actionComposition);
|
let totalText = "";
|
||||||
|
|
||||||
|
for (const action of actionComposition) {
|
||||||
|
for (const chunk of action) totalText += chunk.content;
|
||||||
|
}
|
||||||
|
|
||||||
|
let selectionContent = selection.toString();
|
||||||
|
let startDebt = totalText.indexOf(selectionContent);
|
||||||
|
// lastIndexOf??
|
||||||
|
// endDebt is distance from the end of selection.
|
||||||
|
let endDebt = totalText.indexOf(selectionContent) + selectionContent.length;
|
||||||
|
|
||||||
|
await showScreenshotWizard(actionComposition, startDebt=startDebt, endDebt=endDebt, totalText);
|
||||||
}
|
}
|
Reference in New Issue
Block a user