[pmwiki-users] Double Custom Markup Prevents Page from Loading

Philippe Krait philippe at krait.net
Sat Nov 9 01:20:33 PST 2019


Hi,

I have a very bizarre side effect from a custom markup, and the most
bizarre is that it is a "new" problem in the sense that it has worked in
the past (I can't remember under which PmWiki version it worked last,
though).

The bizarre thing is that when, on a page, I invoke the custom markup the
second time, it prevents the save from working, the page stays blank and
does not reload. I am pretty sure that this is the cause, because I went to
some very old pages with the markup, and the pages with only one instance
of the markup load perfectly, but old pages with two or more instances of
the markup do not load anymore !

I have no idea what might be causing this as I am not that good at
programming and at PHP in particular, but I have copied the code of the
recipe below. My apologies for the probably very badly written code.

Note that it's based on this:
http://ajaxian.com/archives/popbox-a-javascript-image-magnifier but I am
not sure how it's relevant to the issue... Note that I am using a very old
version of the script, do you think it might be the reason ?

Can anyone please help me solve this mystery ?

Thanks in advance,

Philippe

========================================================

<?php if (!defined('PmWiki')) exit();
/*  Copyright 2010 Philippe Krait (philippe at krait.net)

    This script activates the (:popbox ...:) markup.

    To activate this script, copy it into the cookbook/ directory,
    then add the following line to your local/config.php:

        include_once('cookbook/popbox.php');
*/

# Creates the Markup
#Markup('popbox','fulltext', '/\\(:popbox(\\s.*?)?:\\)/e',
"Keep(PopBox(PSS('$1')))");
Markup_e('popbox','fulltext', '/\\(:popbox(\\s.*?)?:\\)/',
"Keep(PopBox(\$m[1]))");

# Defines where the javascript, css and images are
SDV($popBoxDirUrl,$PubDirUrl."/cookbook/popBox");

SDV($HTMLHeaderFmt['popboxjava'] , "<script
src='$popBoxDirUrl/scripts/PopBox.js' type='text/javascript'></script>
<script type='text/javascript'>
popBoxWaitImage.src = '$popBoxDirUrl/images/spinner40.gif';
popBoxRevertImage = '$popBoxDirUrl/images/magminus.gif';
popBoxPopImage = '$popBoxDirUrl/images/magplus.gif';
</script>");

function PopBox($attr) {
$EnablePathInfo = 1;

$attr = preg_replace('/ *([a-zA-Z]=)([^\']\\S*)/',"&\$1\$2",$attr);
$attr = substr($attr,1);
$el = explode("&", $attr);

$Header = "";
$Tailer = "";

$Img = "http://
".$_SERVER['SERVER_NAME']."/pmwiki/uploads/Main/Images/Unknown.jpg";
$ImgPath = "";
$ImgDir = "http://".$_SERVER['SERVER_NAME']."/pmwiki/uploads/Main/Images";
$ImgType = "";
$ImgName = "";
$ImgFormat = "jpg";

$size = 250;
$title = 'Click to magnify/shrink';
$caption = 'Caption';
$align = '';
# $command = 'onmouseover';
$command = 'onclick';

$startX = "startpos.x";
$startY = "startpos.y";
# The newLeft and newTop parameters are treated by default as positions
relative to the image starting point and can be either a negative or
positive number.
# If either value is a numeric string followed by an upper case "A" then it
is treated as an absolute position, relative to its containing element
(typically the browser window).
# Ex: "200A". If either value is null the image will be centered in the
browser window.
$endX = "null";
$endY = "null";

$startW = "startpos.w";
$startH = "startpos.h";
# If the newWidth value is 0 the full width of the image will be used up to
a maximum of the browser window width.
# If the newWidth value is  null the full size of the image will be used
regardless of the browser window width.
# Passing either 0 or null will still scale the image against the image
height. An integer greater than 0 will not be scaled.
$endW = 0;
# If the newHeight value is 0 the full height of the image will be used up
to a maximum of the browser window height.
# If the newHeight value is  null the full size of the image will be used
regardless of the browser window height.
# Passing either 0 or null will still scale the image against the image
width. An integer greater than 0 will not be scaled.
$endH = 0;

$sM = 100;
$sS = 100;

$RevertBarAbove = "true";
$CaptionBelow = "true";

$Style = "PopBoxImageLarge";

foreach ($el as $k => $v) {
$cpl = explode("=", $v);
switch ($cpl[0]) {
case "A":
case "a":

global $pagename, $UploadUrlFmt, $EnablePathInfo;

$attpage = $pagename;
$path = str_replace(array('"', ' '), array('', '%20'), $cpl[1]);

if (preg_match('!^(.*)/([^/]+)$!', $path, $match)) {
$attpage = MakePageName($attpage, $match[1]);
$path = $match[2];
}

# if ($EnablePathInfo)
$attpage=str_replace(".", "/", $attpage);

#echo $EnablePathInfo."<br>\n";
#echo $UploadUrlFmt."<br>\n";
#echo $attpage."<br>\n";
#echo $path."<br>\n";

$ImgPath = FmtPageName("$UploadUrlFmt/$attpage/$path", $attpage);
#echo $ImgPath."<br>\n";
break;
case "I":
case "i":
$ImgPath = str_replace(array('"', ' '), array('', '%20'), $cpl[1]);
break;
case "T":
case "t":
$ImgType = str_replace('"', '', $cpl[1]);
break;
case "N":
case "n":
$ImgName = str_replace(array('"', ' '), array('', '%20'), $cpl[1]);
break;
case "F":
case "f":
$ImgFormat = str_replace('"', '', $cpl[1]);
break;
case "S":
case "s":
$size = str_replace('"', '', $cpl[1]);
break;
case "C":
case "c":
$caption = str_replace('"', '', $cpl[1]);
break;
case "P":
case "p":
$assignformat=array( "lfloat" => "lfloat", "rfloat" => "rfloat",
"lframe" => "lfloat frame", "rframe" => "rfloat frame",
"lfloatclear" => "lfloat lclear", "rfloatclear" => "rfloat rclear",
"lframeclear" => "lfloat frame lclear", "rframeclear" => "rfloat frame
rclear", );

switch (str_replace('"', '', $cpl[1])) {
case "left": case "Left": case "LEFT":
case "right": case "Right": case "RIGHT":
$Header = "<div style='text-align: ".strtolower($cpl[1]).";'>";
$Tailer = "</div>";
break;
case "lfloat": case "Lfloat": case "LFloat": case "LFLOAT":
case "rfloat": case "Rfloat": case "RFloat": case "RFLOAT":
case "lfloatclear": case "Lfloatclear": case "LFloatClear": case
"LFLOATCLEAR":
case "rfloatclear": case "Rfloatclear": case "RFloatClear": case
"RFLOATCLEAR":
$Header = "<div class='".$assignformat[strtolower(str_replace('"', '',
$cpl[1]))]."' style='text-align: center;'>";
$Tailer = "</div>";
break;
case "lframe": case "Lframe": case "LFrame": case "LFRAME":
case "rframe": case "Rframe": case "RFrame": case "RFRAME":
case "lframeclear": case "Lframeclear": case "LFrameClear": case
"LFRAMECLEAR":
case "rframeclear": case "Rframeclear": case "RFrameClear": case
"RFRAMECLEAR":
$Header = "<div class='".$assignformat[strtolower(str_replace('"', '',
$cpl[1]))]."' style='text-align: center;'>";
$Tailer = "<br /><strong><em>$caption</em></strong></div>";
break;
case "note": case "Note": case "NOTE":
$Header = "<table class='widenote'><tr><td
class='noteheader'>$caption</td></tr><tr><td>";
$Tailer = "</td></tr></table>";
break;
}
break;
}
}

$ImgPath = "$ImgPath.$ImgFormat";

#echo "Path: |".$ImgPath."|<br>\n";

        function UR_exists($uri) {
            $ch = curl_init($uri);
            curl_setopt($ch, CURLOPT_NOBODY, true);
            curl_exec($ch);
            $code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
            curl_close($ch);

            return $code == 200;
        }

if (UR_exists($ImgPath)) $Img = $ImgPath;
else $caption = "Unknown Image ! ".$caption;

return "$Header
<img src='$Img' pbsrc='$Img' title='$title' pbCaption='$caption'
$command=' var startPos = GetElementPosition(this);
popBoxRevertBarAbove=$RevertBarAbove;
popBoxCaptionBelow=$CaptionBelow;
PopEx(this, $endX, $endY, $endW, $endH, $sM,\"$Style\");'
alt='' width='".$size."px' $align  />
$Tailer";
}

?>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.pmichaud.com/pipermail/pmwiki-users/attachments/20191109/f512c44a/attachment.html>


More information about the pmwiki-users mailing list