--- rat/lonwrapper.pm 2019/08/02 00:19:00 1.49.2.7
+++ rat/lonwrapper.pm 2024/07/04 02:30:39 1.49.2.12
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Wrapper for external and binary files as standalone resources
#
-# $Id: lonwrapper.pm,v 1.49.2.7 2019/08/02 00:19:00 raeburn Exp $
+# $Id: lonwrapper.pm,v 1.49.2.12 2024/07/04 02:30:39 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -52,6 +52,9 @@ sub wrapper {
'show' => 'Show content in pop-up window',
);
+ (undef,undef,undef,undef,undef,undef,my $clientmobile) =
+ &Apache::loncommon::decode_user_agent($r);
+
my ($anchor,$uselink,$linktext);
if ($is_ext) {
if ($env{'form.symb'}) {
@@ -62,7 +65,7 @@ sub wrapper {
} elsif ($env{'form.anchor'} ne '') {
$anchor = '#'.$env{'form.anchor'};
}
- unless (($is_pdf) && ($env{'browser.mobile'})) {
+ unless (($is_pdf) && ($clientmobile)) {
my $hostname = $r->hostname();
my $lonhost = $r->dir_config('lonHostID');
my $ip = &Apache::lonnet::get_host_ip($lonhost);
@@ -70,7 +73,7 @@ sub wrapper {
}
}
- my $noiframe = &Apache::loncommon::modal_link($url.$anchor,$lt{'show'},500,400);
+ my $noiframe = &Apache::loncommon::modal_link(&HTML::Entities::encode($url.$anchor,'&<>"\''),$lt{'show'},500,400);
my $args = {'bgcolor' => '#FFFFFF'};
if ($forcereg) {
$args->{'force_register'} = $forcereg;
@@ -85,7 +88,26 @@ sub wrapper {
$args->{'only_body'} = $env{'form.only_body'};
}
- my $startpage = &Apache::loncommon::start_page('Menu',undef,$args);
+ my $headjs;
+
+#
+# Where iframe is in use, if window.onload() executes before the custom resize function
+# has been defined (jQuery), two global javascript vars (LCnotready and LCresizedef)
+# are used to ensure document.ready() triggers a call to resize, so the iframe contents
+# do not obscure the Functions menu.
+#
+
+ unless ($clientmobile || $uselink) {
+ $headjs = '
+'."\n";
+ }
+
+ my $startpage = &Apache::loncommon::start_page('Menu',$headjs,$args);
my $endpage = &Apache::loncommon::end_page();
if (($uselink) && ($title eq '')) {
@@ -98,7 +120,7 @@ sub wrapper {
}
}
}
- if ($env{'browser.mobile'}) {
+ if ($clientmobile) {
my $output = $startpage;
if ($is_pdf) {
$linktext = &mt('Link to PDF (for mobile devices)');
@@ -149,8 +171,20 @@ sub wrapper {
var pos = height + hdrtop + offset;
\$('.LC_iframecontainer').css('top', pos);
});
+ LCresizedef = 1;
+ if (LCnotready == 1) {
+ LCnotready = 0;
+ \$(window).trigger('resize');
+ }
});
- window.onload = function(){ \$(window).trigger('resize') };
+ window.onload = function(){
+ if (LCresizedef) {
+ LCnotready = 0;
+ \$(window).trigger('resize');
+ } else {
+ LCnotready = 1;
+ }
+ };
SCRIPT
# javascript will position the iframe if window was resized (or zoomed)
return <