Hi Eric,
so far it does not work yet...thought I took a really small but long page and gave it a 1000 milliseconds. But at least it does not throw an error-message like my brute first attempt did.

If you want to inspect the installation look here:
https://www.szen.io/Kunstgeschichte/#FlexframeTest

Best wishes Jan


Am 05.09.2020 um 02:24 schrieb Eric Shulman:
On Friday, September 4, 2020 at 2:50:16 PM UTC-7, Jan wrote:

    recently I stumbled upon a script which is able to adjust the size
    of an Iframe to the content.
    Because I like to work with external files like etherpads for
    interaction, this would make a lot of things possible.
    Here's a Demo
    https://css-tricks.com/examples/iFrameResize/crossdomain.php#
    <https://css-tricks.com/examples/iFrameResize/crossdomain.php#>

    ||

|
<scripttype="application/javascript">
functionresizeIFrameToFitContent(iFrame ){
    iFrame.width =iFrame.contentWindow.document.body.scrollWidth;
    iFrame.height =iFrame.contentWindow.document.body.scrollHeight;
}
window.addEventListener('DOMContentLoaded',function(e){
variFrame =document.getElementById('iFrame1');
    resizeIFrameToFitContent(iFrame );
// or, to resize all iframes:
variframes =document.querySelectorAll("iframe");
for(vari =0;i <iframes.length;i++){
        resizeIFrameToFitContent(iframes[i]);
}
});
</script>
|

    I wonder if this could be implemented to tiddlywiki.

    Two things to change
    -It needs to have flexible Ids to allow multiple instances.


The first two lines from the event listener are looking for an iframe with a specific ID. The rest of the listener does the same for ALL iframes, regardless of ID. Thus, you can simply omit the first two lines and keep the rest.

    -width should be fixed only the height should adapt.


Just omit the "iFrame.width = ... " line from the resizeIFrameToFitContent function, so that only the height is adjusted.

    What do you think, is this possible?


Normally, this kind of code would be added to the <head> section of the HTML file. To do this in TiddlyWiki, you would place the code in a tiddler tagged with $:/tags/RawMarkup and then save-and-reload so the code is inserted into the <head> of the HTML file.

HOWEVER... having said all of the above... *This code, as written, will NOT work in TiddlyWiki.*
*
*
The problem is that, in TiddlyWiki, any IFrame that is contained in a tiddler will not even *exist* until that tiddler is actually displayed... and at the time that the document is *loaded*, no tiddlers are displayed yet. Thus, the above code will not find any "iframe" elements to modify. To make this work in TiddlyWiki, you need to trigger the code whenever a tiddler is opened or refreshed rather than when the DOM content is loaded.

Here's some EXPERIMENTAL code that uses the TiddlyWiki core "hook" mechanism instead of window.addEventListener()
|
/*\
title: ResizeIFrame
type: application/javascript
module-type: startup

\*/
(function(){
/*jslint node: true, browser: true */
/*global $tw: false */
"use strict";

// Export name and synchronous status
exports.name ="resizeIFrame";
exports.platforms =["browser"];
exports.after =["startup"];
exports.synchronous =true;
exports.startup =function(){
   $tw.hooks.addHook("th-page-refreshed",function(){
      setTimeout(function(){
variframes =document.querySelectorAll("iframe");
for(vari =0;i <iframes.length;i++){
iframes[i].height =iframes[i].contentWindow.document.body.scrollHeight;
}
},100);
});
   $tw.hooks.addHook("th-navigating",function(event){
      setTimeout(function(){
variframes =document.querySelectorAll("iframe");
for(vari =0;i <iframes.length;i++){
iframes[i].height =iframes[i].contentWindow.document.body.scrollHeight;
}
},100);
returnevent;
});
};
})();
|

Notes:
* Enter the code above into the text field of a tiddler (e.g., "ResizeIFrame") * Set the tiddler's type field to a value of "application/javascript" and create a "module-type" field with value of "startup"
* Save-and-reload for the code to take effect.

To test:
* Create a tiddler containing an iframe, like this:
|
<iframesrc="somefile.html"width="100%"height="480"></iframe>
|
* IMPORTANT NOTE: the src="..." file must be from the *same domain* as your TiddlyWiki file because, for security reasons, modern browsers do not permit "cross-domain" access to the "document" object of another file.

How it works:
* The code defines a "startup" function that is invoked when your TiddlyWiki file is loaded. * This code sets up two "hooks" that will be triggered in response to TWCore activities * The "th-page-refreshed" hook is triggered when the page is first displayed and whenever it is refreshed (e.g., if you edit the PageTemplate) * The "th-navigating" hook is triggered whenever you open a tiddler or follow a link to an already opened tiddler. * Each hook uses setTimeout(...) to delay it's action by 100 milliseconds. This is needed because the hooks are triggered *before* the IFrame contents are actually rendered, so we need to wait just a little bit for the Iframe to do it's thing. You might need to increase this delay depending upon the speed of your system and/or the complexity of the IFrame contents.

I've tested this code on my own system by viewing a local file (actually another TiddlyWiki file!) in an IFrame, and it *SEEMS* to work.

Give this a try and let me know how it goes...

enjoy,
-e
--
You received this message because you are subscribed to the Google Groups "TiddlyWiki" group. To unsubscribe from this group and stop receiving emails from it, send an email to tiddlywiki+unsubscr...@googlegroups.com <mailto:tiddlywiki+unsubscr...@googlegroups.com>. To view this discussion on the web visit https://groups.google.com/d/msgid/tiddlywiki/8ec7c9eb-3277-4594-bae7-3832547b7497o%40googlegroups.com <https://groups.google.com/d/msgid/tiddlywiki/8ec7c9eb-3277-4594-bae7-3832547b7497o%40googlegroups.com?utm_medium=email&utm_source=footer>.

--
You received this message because you are subscribed to the Google Groups 
"TiddlyWiki" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to tiddlywiki+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/tiddlywiki/5F537075.9000504%40googlemail.com.

Reply via email to