mirror of
https://github.com/lone-cloud/gerbil
synced 2026-06-03 19:54:44 -07:00
155 lines
4.3 KiB
TypeScript
155 lines
4.3 KiB
TypeScript
export const KLITE_CSS_OVERRIDE = `
|
|
<style id="gerbil-css-override">
|
|
* {
|
|
transition: 100ms ease all;
|
|
}
|
|
|
|
.maincontainer {
|
|
padding-right: 0 !important;
|
|
padding-left: 0 !important;
|
|
}
|
|
|
|
.adaptivecontainer {
|
|
width: 100% !important;
|
|
}
|
|
|
|
#lastreq1 {
|
|
margin: 0 10px;
|
|
}
|
|
|
|
#inputrow {
|
|
padding: 0 10px;
|
|
}
|
|
|
|
#actionmenuitems {
|
|
margin-left: 10px;
|
|
}
|
|
|
|
#navbarNavDropdown {
|
|
padding: 0;
|
|
}
|
|
|
|
#inputrow > :nth-child(1) {
|
|
padding-right: 0 !important;
|
|
}
|
|
#inputrow.show_mode > :nth-child(1) {
|
|
flex: 0 0 70px;
|
|
margin-right: 4px;
|
|
}
|
|
#inputrow > :nth-child(3) {
|
|
flex: 0 0 70px;
|
|
padding-right: 0 !important;
|
|
}
|
|
#inputrow.show_mode > :nth-child(3) button {
|
|
background-color: #129c00;
|
|
font-size: 14px;
|
|
}
|
|
#inputrow.show_mode > :nth-child(3) button:hover {
|
|
background-color: #058105;
|
|
}
|
|
|
|
#actionmenuitems + div {
|
|
margin-right: 10px;
|
|
}
|
|
|
|
#actionmenuitems + div input[type=checkbox] {
|
|
margin: 0;
|
|
}
|
|
|
|
#actionmenuitems button, #actionmenuitems2 button {
|
|
background-color: #337ab7 !important;
|
|
}
|
|
#actionmenuitems button:hover, #actionmenuitems2 button:hover {
|
|
background-color: #286090 !important;
|
|
}
|
|
</style>`;
|
|
|
|
export const KLITE_AUTOSCROLL_PATCHES = `
|
|
<script id="gerbil-autoscroll-patches">
|
|
(function() {
|
|
'use strict';
|
|
|
|
let lastScrollHeights = {};
|
|
|
|
window.handle_autoscroll = function(alwaysscroll = true) {
|
|
if (localsettings.autoscroll) {
|
|
let box1 = document.getElementById("gametext");
|
|
let box2 = document.getElementById("chat_msg_body");
|
|
let box3 = document.getElementById("corpostylemain");
|
|
|
|
function isScrolledToBottom(element) {
|
|
return element.scrollHeight - element.scrollTop <= element.clientHeight + 250;
|
|
}
|
|
|
|
function shouldRespectUserScroll(element) {
|
|
const elementId = element.id;
|
|
const currentHeight = element.scrollHeight;
|
|
const lastHeight = lastScrollHeights[elementId] || currentHeight;
|
|
|
|
const heightGrowth = Math.max(0, currentHeight - lastHeight);
|
|
const dynamicThreshold = Math.min(Math.max(heightGrowth * 1.2, 30), 200);
|
|
|
|
lastScrollHeights[elementId] = currentHeight;
|
|
|
|
return (element.scrollHeight - element.scrollTop - element.clientHeight) > dynamicThreshold;
|
|
}
|
|
|
|
if((alwaysscroll && !shouldRespectUserScroll(box1)) || isScrolledToBottom(box1)) {
|
|
box1.scrollTop = box1.scrollHeight - box1.clientHeight + 10;
|
|
}
|
|
if((alwaysscroll && !shouldRespectUserScroll(box2)) || isScrolledToBottom(box2)) {
|
|
box2.scrollTop = box2.scrollHeight - box2.clientHeight + 10;
|
|
}
|
|
if((alwaysscroll && !shouldRespectUserScroll(box3)) || isScrolledToBottom(box3)) {
|
|
box3.scrollTop = box3.scrollHeight - box3.clientHeight + 10;
|
|
}
|
|
}
|
|
};
|
|
|
|
window.update_pending_stream_displays = function() {
|
|
var elements = document.querySelectorAll(".pending_text");
|
|
|
|
if(elements && elements.length > 0) {
|
|
let onboundary = false;
|
|
if(gametext_arr.length > 0 && gametext_arr[gametext_arr.length-1].trim().endsWith("{{[OUTPUT]}}")) {
|
|
onboundary = true;
|
|
}
|
|
elements.forEach(function (element) {
|
|
let temp_stream = synchro_pending_stream;
|
|
if (onboundary) {
|
|
let codeblockcount = (temp_stream.match(/\`\`\`/g) || []).length;
|
|
if (codeblockcount > 0 && codeblockcount % 2 != 0) {
|
|
temp_stream += "\`\`\`"; // force end code block
|
|
}
|
|
}
|
|
let pend = escape_html(pending_context_preinjection) + format_streaming_text(escape_html(temp_stream));
|
|
element.innerHTML = pend;
|
|
});
|
|
} else {
|
|
render_gametext(false);
|
|
}
|
|
|
|
let shouldSkipAutoscroll = false;
|
|
["gametext", "chat_msg_body", "corpostylemain"].forEach(id => {
|
|
let el = document.getElementById(id);
|
|
if (el) {
|
|
const currentHeight = el.scrollHeight;
|
|
const lastHeight = lastScrollHeights[id] || currentHeight;
|
|
|
|
const heightGrowth = Math.max(0, currentHeight - lastHeight);
|
|
const dynamicThreshold = Math.min(Math.max(heightGrowth * 1.2, 30), 200);
|
|
|
|
lastScrollHeights[id] = currentHeight;
|
|
|
|
if ((el.scrollHeight - el.scrollTop - el.clientHeight) > dynamicThreshold) {
|
|
shouldSkipAutoscroll = true;
|
|
}
|
|
}
|
|
});
|
|
|
|
if (!shouldSkipAutoscroll) {
|
|
handle_autoscroll(false);
|
|
}
|
|
};
|
|
})();
|
|
</script>`;
|