OSDN Git Service

BugTrack/2465 img plugin: +Inline style, Show image of any extention
authorumorigu <umorigu@gmail.com>
Mon, 16 Apr 2018 22:25:11 +0000 (07:25 +0900)
committerumorigu <umorigu@gmail.com>
Mon, 16 Apr 2018 22:25:11 +0000 (07:25 +0900)
plugin/img.inc.php

index 06769ed..55e16ca 100644 (file)
@@ -1,45 +1,99 @@
 <?php
 // PukiWiki - Yet another WikiWikiWeb clone.
-// $Id: img.inc.php,v 1.15 2007/04/08 10:22:18 henoheno Exp $
-// Copyright (C) 2002-2005, 2007 PukiWiki Developers Team
+// img.inc.php
+// Copyright 2002-2018 PukiWiki Development Team
 // License: GPL v2 or (at your option) any later version
 //
 // Inline-image plugin (Output inline-image tag from a URI)
 
 define('PLUGIN_IMG_USAGE', '#img(): Usage: (URI-to-image[,right[,clear]])<br />' . "\n");
 define('PLUGIN_IMG_CLEAR', '<div style="clear:both"></div>' . "\n"); // Stop word-wrapping
+if (defined('PKWK_DISABLE_INLINE_IMAGE_FROM_URI') && PKWK_DISABLE_INLINE_IMAGE_FROM_URI) {
+       define('PLUGIN_IMG_SHOW_IMAGE', 0); // 1: Show image, 0: Don't show image
+} else {
+       define('PLUGIN_IMG_SHOW_IMAGE', 1); // 1: Show image, 0: Don't show image
+}
 
-function plugin_img_convert()
+function plugin_img_get_style($args)
 {
-       if (PKWK_DISABLE_INLINE_IMAGE_FROM_URI)
-               return '#img(): PKWK_DISABLE_INLINE_IMAGE_FROM_URI prohibits this' .
-                       '<br />' . "\n";
+       $style = '';
+       for ($i = 1; $i <= 3; $i++) {
+               if (isset($args[$i])) {
+                       $arg = $args[$i];
+                       $m = null;
+                       if (preg_match('#^(\d+)x(\d+)$#', $arg, $m)) {
+                               $style = 'max-width:' . $m[1] . 'px;max-height:' . $m[2] . 'px;';
+                               break;
+                       } else if (preg_match('#^(\d+)px$#', $arg, $m)) {
+                               $style = 'max-width:' . $m[1] . 'px;max-height:' . $m[1] . 'px;';
+                               break;
+                       } else if (preg_match('#^(\d+)%$#', $arg, $m)) {
+                               // Note: zoom is not standard. Recommend using MAXpx or WIDTHxHEIGHT
+                               $style = 'zoom:' . $m[1] . '%;';
+                               break;
+                       }
+               }
+       }
+       return $style;
+}
 
+function plugin_img_inline()
+{
        $args = func_get_args();
+       $url = isset($args[0]) ? $args[0] : '';
+       if (!PLUGIN_IMG_SHOW_IMAGE) {
+               if (is_url($url)) {
+                       $h_url = htmlsc($url);
+                       $title = '#img(): PLUGIN_IMG_SHOW_IMAGE prohibits this';
+                       return "<a href=\"$h_url\" title=\"$title\">$h_url</a>";
+               }
+               return '&amp;img(): PLUGIN_IMG_SHOW_IMAGE prohibits this' . "\n";
+       }
+       $size = isset($args[2]) ? strtolower($args[2]) : '';
+       if (is_url($url)) {
+               $h_url = htmlsc($url);
+               $style = plugin_img_get_style($args);
+               return <<<EOD
+<img class="plugin-img-inline" src="$h_url" style="$style" alt="" />
+EOD;
+       }
+}
 
+function plugin_img_convert()
+{
+       $args = func_get_args();
+       $url = isset($args[0]) ? $args[0] : '';
+       $h_url = htmlsc($url);
+       if (!PLUGIN_IMG_SHOW_IMAGE) {
+               if (is_url($url)) {
+                       $title = '#img(): PLUGIN_IMG_SHOW_IMAGE prohibits this';
+                       return "<div><a href=\"$h_url\" title=\"$title\">$h_url</a></div>";
+               }
+               return '#img(): PLUGIN_IMG_SHOW_IMAGE prohibits this' .
+                       '<br />' . "\n";
+       }
        // Check the 2nd argument first, for compatibility
        $arg = isset($args[1]) ? strtoupper($args[1]) : '';
        if ($arg == '' || $arg == 'L' || $arg == 'LEFT') {
                $align = 'left';
        } else if ($arg == 'R' || $arg == 'RIGHT') {
                $align = 'right';
-       } else {
+       } else if ($url === '' && $arg == 'CLEAR') {
                // Stop word-wrapping only (Ugly but compatible)
                // Short usage: #img(,clear)
                return PLUGIN_IMG_CLEAR;
        }
-
        $url = isset($args[0]) ? $args[0] : '';
-       if (! is_url($url) || ! preg_match('/\.(jpe?g|gif|png)$/i', $url))
+       if (! is_url($url)) {
                return PLUGIN_IMG_USAGE;
-
+       }
+       $h_url = htmlsc($url);
        $arg = isset($args[2]) ? strtoupper($args[2]) : '';
        $clear = ($arg == 'C' || $arg == 'CLEAR') ? PLUGIN_IMG_CLEAR : '';
-
+       $style = plugin_img_get_style($args);
        return <<<EOD
-<div style="float:$align;padding:.5em 1.5em .5em 1.5em">
- <img src="$url" alt="" />
+<div style="float:$align;padding:.5em 1.5em .5em 1.5em;">
+ <img class="plugin-img-block" src="$h_url" style="$style" alt="" />
 </div>$clear
 EOD;
 }
-?>