Skip to content

Commit 43cdbab

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

File tree

1 file changed

+39
-2
lines changed

1 file changed

+39
-2
lines changed

src/AnythingLLMDocs.jl

Lines changed: 39 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://cdn.jsdelivr.net/npm/iframe-resizer/js/iframeResizer.min.js"
404+
resizer_child_src = "https://cdn.jsdelivr.net/npm/iframe-resizer/js/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,27 @@ 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+
421+
const ensureResizer = () => new Promise((resolve) => {
422+
if (window.iFrameResize) {
423+
resolve(window.iFrameResize);
424+
return;
425+
}
426+
const existing = document.querySelector('script[data-anythingllm-resizer-parent]');
427+
if (existing) {
428+
existing.addEventListener('load', () => resolve(window.iFrameResize));
429+
return;
430+
}
431+
const tag = document.createElement("script");
432+
tag.src = resizerParentSrc;
433+
tag.async = true;
434+
tag.dataset.anythingllmResizerParent = "true";
435+
tag.onload = () => resolve(window.iFrameResize);
436+
document.head.appendChild(tag);
437+
});
438+
439+
const injectEmbed = async () => {
419440
if (document.getElementById("anythingllm-embed-frame")) return;
420441
421442
const iframe = document.createElement("iframe");
@@ -434,6 +455,7 @@ function embed_script(
434455
</style>
435456
</head>
436457
<body>
458+
<script src="\${resizer_child_src}"><\\/script>
437459
<script
438460
data-embed-id="\${embedId}"
439461
data-base-api-url="\${apiBase}"
@@ -444,6 +466,21 @@ function embed_script(
444466
</html>`;
445467
iframe.srcdoc = html;
446468
document.body.appendChild(iframe);
469+
470+
try {
471+
const resizer = await ensureResizer();
472+
if (resizer) {
473+
resizer({
474+
checkOrigin: false,
475+
sizeHeight: true,
476+
sizeWidth: true,
477+
heightCalculationMethod: "lowestElement",
478+
widthCalculationMethod: "scroll",
479+
}, iframe);
480+
}
481+
} catch (e) {
482+
console.warn("iframe-resizer failed to load", e);
483+
}
447484
};
448485
449486
if (document.readyState === "complete" || document.readyState === "interactive") {

0 commit comments

Comments
 (0)