1*fe6a5210SGerry Weißbach<?php 2*fe6a5210SGerry Weißbach/** 3*fe6a5210SGerry Weißbach * magnifier Plugin 4*fe6a5210SGerry Weißbach * 5*fe6a5210SGerry Weißbach * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) 6*fe6a5210SGerry Weißbach * @author i-net software <tools@inetsoftware.de> 7*fe6a5210SGerry Weißbach * @author Gerry Weissbach <gweissbach@inetsoftware.de> 8*fe6a5210SGerry Weißbach */ 9*fe6a5210SGerry Weißbach 10*fe6a5210SGerry Weißbach// must be run within Dokuwiki 11*fe6a5210SGerry Weißbachif(!defined('DOKU_INC')) die(); 12*fe6a5210SGerry Weißbachif (!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/'); 13*fe6a5210SGerry Weißbach 14*fe6a5210SGerry Weißbachrequire_once(DOKU_PLUGIN.'syntax.php'); 15*fe6a5210SGerry Weißbach 16*fe6a5210SGerry Weißbachclass syntax_plugin_magnifier extends DokuWiki_Syntax_Plugin { 17*fe6a5210SGerry Weißbach 18*fe6a5210SGerry Weißbach function getInfo(){ 19*fe6a5210SGerry Weißbach return array_merge(confToHash(dirname(__FILE__).'/plugin.info.txt'), array()); 20*fe6a5210SGerry Weißbach } 21*fe6a5210SGerry Weißbach 22*fe6a5210SGerry Weißbach function getType() { return 'substition'; } 23*fe6a5210SGerry Weißbach function getPType() { return 'normal'; } 24*fe6a5210SGerry Weißbach function getSort() { return 98; } 25*fe6a5210SGerry Weißbach 26*fe6a5210SGerry Weißbach function connectTo($mode) { 27*fe6a5210SGerry Weißbach 28*fe6a5210SGerry Weißbach $this->Lexer->addSpecialPattern('{{magnifier>[^}]+}}', $mode, 'plugin_magnifier'); 29*fe6a5210SGerry Weißbach } 30*fe6a5210SGerry Weißbach 31*fe6a5210SGerry Weißbach function handle($match, $state, $pos, &$handler) { 32*fe6a5210SGerry Weißbach 33*fe6a5210SGerry Weißbach // {{magnifier>:image:test.png?widthxheight}} 34*fe6a5210SGerry Weißbach 35*fe6a5210SGerry Weißbach $orig = substr($match, 12, -2); 36*fe6a5210SGerry Weißbach 37*fe6a5210SGerry Weißbach list($id, $param) = explode('?', $orig, 2); // find ID + Params 38*fe6a5210SGerry Weißbach list($w, $h) = explode('x', $param, 2); // find Size 39*fe6a5210SGerry Weißbach /* 40*fe6a5210SGerry Weißbach if ( preg_match("/{{[^}]+}}/", $name)) { 41*fe6a5210SGerry Weißbach 42*fe6a5210SGerry Weißbach $displayImage = substr($name, 2, -2); // strip markup 43*fe6a5210SGerry Weißbach $name = array(); 44*fe6a5210SGerry Weißbach list($name['id'], $name['name']) = explode('|', $displayImage, 2); // find ID/Params + Name Extension 45*fe6a5210SGerry Weißbach list($name['id'], $name['param']) = explode('?', $name['id'], 2); // find ID + Params 46*fe6a5210SGerry Weißbach list($name['w'], $name['h']) = explode('x', $name['param'], 2); // find Size 47*fe6a5210SGerry Weißbach } 48*fe6a5210SGerry Weißbach */ 49*fe6a5210SGerry Weißbach return array(trim($id), $w, $h, $orig); 50*fe6a5210SGerry Weißbach } 51*fe6a5210SGerry Weißbach 52*fe6a5210SGerry Weißbach function render($mode, &$renderer, $data) { 53*fe6a5210SGerry Weißbach global $ID, $conf, $JSINFO; 54*fe6a5210SGerry Weißbach 55*fe6a5210SGerry Weißbach list($id, $w, $h, $orig) = $data; 56*fe6a5210SGerry Weißbach if ( empty($id) ) { $exists = false; } else 57*fe6a5210SGerry Weißbach { 58*fe6a5210SGerry Weißbach $id = cleanID($id); 59*fe6a5210SGerry Weißbach $page = resolve_id(getNS($ID),$id); 60*fe6a5210SGerry Weißbach $file = mediaFN($page); 61*fe6a5210SGerry Weißbach $exists = @file_exists($file) && @is_file($file); 62*fe6a5210SGerry Weißbach } 63*fe6a5210SGerry Weißbach 64*fe6a5210SGerry Weißbach if ($mode == 'xhtml') { 65*fe6a5210SGerry Weißbach 66*fe6a5210SGerry Weißbach $params = ''; $params2 = ''; 67*fe6a5210SGerry Weißbach 68*fe6a5210SGerry Weißbach if ( $exists ) { 69*fe6a5210SGerry Weißbach // is Media 70*fe6a5210SGerry Weißbach 71*fe6a5210SGerry Weißbach $p1 = Doku_Handler_Parse_Media($orig); 72*fe6a5210SGerry Weißbach $scID = sectionID(noNs($id), $renderer->headers); 73*fe6a5210SGerry Weißbach 74*fe6a5210SGerry Weißbach $p = array(); 75*fe6a5210SGerry Weißbach $p['alt'] = $id; 76*fe6a5210SGerry Weißbach $p['class'] = 'magnifierImage'; 77*fe6a5210SGerry Weißbach $p['id'] = 'magnifierimage_' . $scID; 78*fe6a5210SGerry Weißbach $p['magnifierImage'] = ml($id); 79*fe6a5210SGerry Weißbach if ($p1['width']) $p['width'] = $p1['width']; 80*fe6a5210SGerry Weißbach if ($p1['height']) $p['height'] = $p1['height']; 81*fe6a5210SGerry Weißbach if ($p1['title'] && !$p['title']) { $p['title'] = $p1['title']; $p['alt'] = $p1['title']; } 82*fe6a5210SGerry Weißbach if ($p1['align']) $p['class'] .= ' media' . $p1['align']; 83*fe6a5210SGerry Weißbach 84*fe6a5210SGerry Weißbach $p2 = buildAttributes($p); 85*fe6a5210SGerry Weißbach $renderer->doc .= '<img src="' . ml($id, array( 'w' => $p['width'], 'h' => $p['height'] ) ) . '" '.$p2.'/>'; 86*fe6a5210SGerry Weißbach 87*fe6a5210SGerry Weißbach return true; 88*fe6a5210SGerry Weißbach } 89*fe6a5210SGerry Weißbach } 90*fe6a5210SGerry Weißbach return false; 91*fe6a5210SGerry Weißbach } 92*fe6a5210SGerry Weißbach 93*fe6a5210SGerry Weißbach function _renderFinalPopupImage($id, $exists, $more, $name, $isImageMap, $script, $class='') { 94*fe6a5210SGerry Weißbach 95*fe6a5210SGerry Weißbach $more .= ' class="wikilink' . ($exists?1:2) . (!empty($class) ? ' ' . $class : '' ). '"'; 96*fe6a5210SGerry Weißbach $name = trim(preg_replace("%^(\s|\r|\n)*?<a.+?>(.*)?</a>(\s|\r|\n)*?$%is", "$2", preg_replace("%^(\s|\r|\n)*?<p.*?>(.*)?</p>(\s|\r|\n)*?$%is", "$2", $name))); 97*fe6a5210SGerry Weißbach 98*fe6a5210SGerry Weißbach if ( !is_array($isImageMap) ) { 99*fe6a5210SGerry Weißbach return '<a href="'.$id.'" ' . $more . ' >' . $name . '</a>' . $script; 100*fe6a5210SGerry Weißbach } else { 101*fe6a5210SGerry Weißbach $return = '<area href="'.$id.'" ' . $more . ''; 102*fe6a5210SGerry Weißbach $return .= ' title="'.$name.'" alt="'.$name.'"'; 103*fe6a5210SGerry Weißbach $return .= ' shape="'.$isImageMap['shape'].'" coords="'.$isImageMap['coords'].'" />' . $script; 104*fe6a5210SGerry Weißbach 105*fe6a5210SGerry Weißbach return $return; 106*fe6a5210SGerry Weißbach } 107*fe6a5210SGerry Weißbach } 108*fe6a5210SGerry Weißbach} 109*fe6a5210SGerry Weißbach// vim:ts=4:sw=4:et:enc=utf-8: 110