1*e2969550SEli Fenton<?php 2*e2969550SEli Fentonif (!defined('DOKU_INC')) die(); 3*e2969550SEli Fentonif(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/'); 4*e2969550SEli Fentonrequire_once DOKU_INC . 'inc/parser/xhtml.php'; 5*e2969550SEli Fenton 6*e2969550SEli Fenton/** 7*e2969550SEli Fenton * Auto-Tooltip DokuWiki plugin, for use with the ActionRenderer plugin. This will run only if 8*e2969550SEli Fenton * ActionRenderer is the current renderer plugin. For improved performance, use the AutoTooltip 9*e2969550SEli Fenton * renderer plugin instead. 10*e2969550SEli Fenton * 11*e2969550SEli Fenton * @license MIT 12*e2969550SEli Fenton * @author Eli Fenton 13*e2969550SEli Fenton */ 14*e2969550SEli Fentonclass action_plugin_autotooltip extends DokuWiki_Action_Plugin { 15*e2969550SEli Fenton /** @type helper_plugin_autotooltip m_helper */ 16*e2969550SEli Fenton private $m_helper; 17*e2969550SEli Fenton private $m_disable; 18*e2969550SEli Fenton 19*e2969550SEli Fenton public function __construct() { 20*e2969550SEli Fenton $this->m_disable = !plugin_load('renderer', 'actionrenderer'); 21*e2969550SEli Fenton if (!$this->m_disable) { 22*e2969550SEli Fenton global $ID; 23*e2969550SEli Fenton $this->m_helper = plugin_load('helper', 'autotooltip'); 24*e2969550SEli Fenton } 25*e2969550SEli Fenton } 26*e2969550SEli Fenton 27*e2969550SEli Fenton public function register(Doku_Event_Handler $controller) { 28*e2969550SEli Fenton if ($this->m_disable) { 29*e2969550SEli Fenton return; 30*e2969550SEli Fenton } 31*e2969550SEli Fenton $controller->register_hook('PLUGIN_ACTIONRENDERER_METHOD_EXECUTE', 'BEFORE', $this, 'actionrenderer'); 32*e2969550SEli Fenton } 33*e2969550SEli Fenton 34*e2969550SEli Fenton /** 35*e2969550SEli Fenton * Intercept Doku_Renderer_xhtml:internallink to give every wikilink a tooltip! 36*e2969550SEli Fenton * 37*e2969550SEli Fenton * @param Doku_Event $event 38*e2969550SEli Fenton * @param array $param 39*e2969550SEli Fenton */ 40*e2969550SEli Fenton function actionrenderer(Doku_Event $event, $param) { 41*e2969550SEli Fenton if ($event->data['method'] == 'internallink') { 42*e2969550SEli Fenton $renderer = $event->data['renderer']; 43*e2969550SEli Fenton $args = $event->data['arguments']; 44*e2969550SEli Fenton 45*e2969550SEli Fenton $id = $args[0]; 46*e2969550SEli Fenton $name = $args[1] ?: 'null'; 47*e2969550SEli Fenton $search = $args[2] ?: null; 48*e2969550SEli Fenton $returnonly = $args[3] ?: false; 49*e2969550SEli Fenton $linktype = $args[4] ?: 'content'; 50*e2969550SEli Fenton 51*e2969550SEli Fenton global $ID; 52*e2969550SEli Fenton if (!$this->m_helper->isExcluded($ID) && page_exists($id) && $id != $ID) { 53*e2969550SEli Fenton $event->preventDefault(); 54*e2969550SEli Fenton 55*e2969550SEli Fenton 56*e2969550SEli Fenton $link = call_user_func_array( 57*e2969550SEli Fenton array($renderer, 'parent::internallink'), 58*e2969550SEli Fenton array($id, $name, $search, true, $linktype) 59*e2969550SEli Fenton ); 60*e2969550SEli Fenton 61*e2969550SEli Fenton $meta = $this->m_helper->read_meta_fast($id); 62*e2969550SEli Fenton $abstract = $meta['abstract']; 63*e2969550SEli Fenton $link = $this->m_helper->stripNativeTooltip($link); 64*e2969550SEli Fenton $link = $this->m_helper->forText($link, $abstract, $meta['title']); 65*e2969550SEli Fenton 66*e2969550SEli Fenton if (!$returnonly) { 67*e2969550SEli Fenton $renderer->doc .= $link; 68*e2969550SEli Fenton } 69*e2969550SEli Fenton return $link; 70*e2969550SEli Fenton } 71*e2969550SEli Fenton } 72*e2969550SEli Fenton } 73*e2969550SEli Fenton} 74