Skip to content

Commit b058acd

Browse files
committed
try automatically resizing the iframe
1 parent 7ebf0fb commit b058acd

File tree

1 file changed

+40
-2
lines changed

1 file changed

+40
-2
lines changed

src/AnythingLLMDocs.jl

Lines changed: 40 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -400,6 +400,8 @@ function embed_script(
400400
)
401401
api_base = string(cfg.embed_host, "/api/embed")
402402
script_src = string(cfg.embed_host, "/embed/anythingllm-chat-widget.min.js")
403+
resizer_parent_src = "https://unpkg.com/@iframe-resizer/parent@5.0.0/dist/iframeResizer.min.js"
404+
resizer_child_src = "https://unpkg.com/@iframe-resizer/child@5.0.0/dist/iframeResizer.contentWindow.min.js"
403405
attrs = embed_attributes(options; custom=custom_attributes)
404406
iframe_styles = merge(default_iframe_style(), iframe_style)
405407

@@ -414,8 +416,28 @@ function embed_script(
414416
const embedId = "$(escape_js(embed_uuid))";
415417
const apiBase = "$(escape_js(api_base))";
416418
const src = "$(escape_js(script_src))";
417-
418-
const injectEmbed = () => {
419+
const resizerParentSrc = "$(escape_js(resizer_parent_src))";
420+
const resizerChildSrc = "$(escape_js(resizer_child_src))";
421+
422+
const ensureResizer = () => new Promise((resolve) => {
423+
if (window.iFrameResize) {
424+
resolve(window.iFrameResize);
425+
return;
426+
}
427+
const existing = document.querySelector('script[data-anythingllm-resizer-parent]');
428+
if (existing) {
429+
existing.addEventListener('load', () => resolve(window.iFrameResize));
430+
return;
431+
}
432+
const tag = document.createElement("script");
433+
tag.src = resizerParentSrc;
434+
tag.async = true;
435+
tag.dataset.anythingllmResizerParent = "true";
436+
tag.onload = () => resolve(window.iFrameResize);
437+
document.head.appendChild(tag);
438+
});
439+
440+
const injectEmbed = async () => {
419441
if (document.getElementById("anythingllm-embed-frame")) return;
420442
421443
const iframe = document.createElement("iframe");
@@ -434,6 +456,7 @@ function embed_script(
434456
</style>
435457
</head>
436458
<body>
459+
<script src="\${resizerChildSrc}"><\\/script>
437460
<script
438461
data-embed-id="\${embedId}"
439462
data-base-api-url="\${apiBase}"
@@ -444,6 +467,21 @@ function embed_script(
444467
</html>`;
445468
iframe.srcdoc = html;
446469
document.body.appendChild(iframe);
470+
471+
try {
472+
const resizer = await ensureResizer();
473+
if (resizer) {
474+
resizer({
475+
checkOrigin: false,
476+
sizeHeight: true,
477+
sizeWidth: true,
478+
heightCalculationMethod: "lowestElement",
479+
widthCalculationMethod: "scroll",
480+
}, iframe);
481+
}
482+
} catch (e) {
483+
console.warn("iframe-resizer failed to load", e);
484+
}
447485
};
448486
449487
if (document.readyState === "complete" || document.readyState === "interactive") {

0 commit comments

Comments
 (0)