AutomaticImageResize
Comments0this wiki
This has been tested in OmniWeb, Mozilla, Firefox, and Safari.
Add this javascript function to the javascript section of local/html/Elements/HEADER.
function resizeImage() {
var images = document.getElementsByTagName('img');
targetWidth = document.body.clientWidth - 250;
for (i=0; i < images.length; i++) {
if (images[i].width > targetWidth) {
images[i].width = targetWidth;
}
}
}
Next add this to the body tag in HEADER
onResize="resizeImage()" onLoad="resizeImage()"
so that it reads:
<BODY BGCOLOR="<%$BgColor%>"
ONLOAD="
% if ($Focus) {
var tmp = (document.getElementsByName('<% $Focus %>'));
if (tmp.length > 0) tmp[tmp.length-1].focus();
% }
resizeImage();"
onResize="resizeImage()"
>
(Above example taken from RT 3.2)
The above example didn;t seem to fit v3.8.4 very well, so I came up with this. maybe someone can improve. uses Scriptaculous "Scale" effect, since RT ships with Prototype/Scriptaculous anyway.
Copy html/Elements/HeaderJavascript to the "local" directory and then edit it to add the following after:
<script type="text/javascript" src="<%RT->Config->Get('WebPath')%>/NoAuth/js/scriptaculous/scriptaculous.js?load=effects,controls"></script>
% if($m->{'top_path'} =~ /(Display\.html|History\.html)/) { # try to only do this on ticket page
<script type="text/javascript">
// <![CDATA[
Event.observe(window, 'load', function() {
var z = $$('.messagebody img');
var maxImgWidth = document.viewport.getWidth() - 100;
z.each(function(n) {
if(n.getWidth() > maxImgWidth)
{
new Effect.Scale(n, 20, {scaleFromCenter:true} );
}
});
});
// ]]>
</script>
% }
The result is that only on Ticket pages, javascript will be added to the page that selects every img inside a messagebody CSS class, checks if it is wider than the viewport, and if so, applies the "Scale" effect to reduce it down to 20% original size.
Doing this will make it so you don't get scroll bars around images too large to fit in their assigned html area.