185220f43Ssaggi-dw<?php 285220f43Ssaggi-dw/** 385220f43Ssaggi-dw * DokuWiki Plugin dwtimeline (Syntax Component) 485220f43Ssaggi-dw * 585220f43Ssaggi-dw * @license GPL 2 http://www.gnu.org/licenses/gpl-2.0.html 685220f43Ssaggi-dw * @author saggi <saggi@gmx.de> 785220f43Ssaggi-dw */ 8*4ff971beSsaggi-dw 9*4ff971beSsaggi-dw// must be run within Dokuwiki 10*4ff971beSsaggi-dwif(!defined('DOKU_INC')) die(); 11*4ff971beSsaggi-dw 1285220f43Ssaggi-dwclass syntax_plugin_dwtimeline_milestone extends \dokuwiki\Extension\SyntaxPlugin 1385220f43Ssaggi-dw{ 1485220f43Ssaggi-dw /** @inheritDoc */ 1585220f43Ssaggi-dw public function getType() 1685220f43Ssaggi-dw { 1785220f43Ssaggi-dw return 'substition'; 1885220f43Ssaggi-dw } 1985220f43Ssaggi-dw 2085220f43Ssaggi-dw /** @inheritDoc */ 2185220f43Ssaggi-dw public function getPType() 2285220f43Ssaggi-dw { 2385220f43Ssaggi-dw return 'stack'; 2485220f43Ssaggi-dw } 2585220f43Ssaggi-dw 2685220f43Ssaggi-dw /** @inheritDoc */ 2785220f43Ssaggi-dw public function getSort() 2885220f43Ssaggi-dw { 29*4ff971beSsaggi-dw return 320; 3085220f43Ssaggi-dw } 3185220f43Ssaggi-dw 3285220f43Ssaggi-dw /** 3385220f43Ssaggi-dw * @return array Things that may be inside the syntax 3485220f43Ssaggi-dw */ 3585220f43Ssaggi-dw function getAllowedTypes() { 3685220f43Ssaggi-dw return array('container', 'formatting', 'substition', 'protected', 'disabled', 'paragraphs'); 3785220f43Ssaggi-dw } 3885220f43Ssaggi-dw 3985220f43Ssaggi-dw /** 4085220f43Ssaggi-dw * Set the EntryPattern 4185220f43Ssaggi-dw * @param type $mode 4285220f43Ssaggi-dw */ 4385220f43Ssaggi-dw public function connectTo($mode) 4485220f43Ssaggi-dw { 45*4ff971beSsaggi-dw $this->Lexer->addEntryPattern('<milestone\b.*?>',$mode,'plugin_dwtimeline_milestone'); 4685220f43Ssaggi-dw } 4785220f43Ssaggi-dw 4885220f43Ssaggi-dw /** 4985220f43Ssaggi-dw * Set the ExitPattern 5085220f43Ssaggi-dw */ 5185220f43Ssaggi-dw public function postConnect() 5285220f43Ssaggi-dw { 5385220f43Ssaggi-dw $this->Lexer->addExitPattern('</milestone>', 'plugin_dwtimeline_milestone'); 5485220f43Ssaggi-dw } 5585220f43Ssaggi-dw 5685220f43Ssaggi-dw /** 5785220f43Ssaggi-dw * Handle the match 5885220f43Ssaggi-dw * @param type $match 5985220f43Ssaggi-dw * @param type $state 6085220f43Ssaggi-dw * @param type $pos 6185220f43Ssaggi-dw * @param Doku_Handler $handler 6285220f43Ssaggi-dw * @return type 6385220f43Ssaggi-dw */ 6485220f43Ssaggi-dw public function handle($match, $state, $pos, Doku_Handler $handler) 6585220f43Ssaggi-dw { 6685220f43Ssaggi-dw $data = []; 6785220f43Ssaggi-dw switch ($state) { 6885220f43Ssaggi-dw case DOKU_LEXER_ENTER : 6985220f43Ssaggi-dw $match = trim(substr($match, 10,-1));// returns match between <milestone(10) and >(-1) 7085220f43Ssaggi-dw $data = helper_plugin_dwtimeline::getTitleMatches($match, 'title'); 71*4ff971beSsaggi-dw global $align; 72*4ff971beSsaggi-dw $data['align'] = $align; 7385220f43Ssaggi-dw return array($state,$data); 7485220f43Ssaggi-dw case DOKU_LEXER_UNMATCHED : 7585220f43Ssaggi-dw return array($state,$match); 7685220f43Ssaggi-dw case DOKU_LEXER_EXIT : 7785220f43Ssaggi-dw return array($state,''); 7885220f43Ssaggi-dw } 7985220f43Ssaggi-dw return array(); 8085220f43Ssaggi-dw } 8185220f43Ssaggi-dw 8285220f43Ssaggi-dw /** 8385220f43Ssaggi-dw * Render Function 8485220f43Ssaggi-dw * @param type $mode 8585220f43Ssaggi-dw * @param Doku_Renderer $renderer 8685220f43Ssaggi-dw * @param type $data 8785220f43Ssaggi-dw * @return boolean 8885220f43Ssaggi-dw */ 8985220f43Ssaggi-dw public function render($mode, Doku_Renderer $renderer, $data) 9085220f43Ssaggi-dw { 9185220f43Ssaggi-dw if ($mode == 'xhtml') { 9285220f43Ssaggi-dw 9385220f43Ssaggi-dw global $direction; 9485220f43Ssaggi-dw if (!$direction) {$direction=$this->getConf('direction');} 9585220f43Ssaggi-dw list($state,$indata) = $data; 9685220f43Ssaggi-dw switch ($state) { 9785220f43Ssaggi-dw case DOKU_LEXER_ENTER : 98*4ff971beSsaggi-dw $renderer->doc .= '<div class="container-'.$indata['align'].' '.$direction.'"'.$indata['data'].$indata['backcolor'].'>'. DOKU_LF; 9985220f43Ssaggi-dw $renderer->doc .= '<div class="content">'. DOKU_LF; 100*4ff971beSsaggi-dw if (isset($indata['title'])) { 101*4ff971beSsaggi-dw if (isset($indata['link'])) { 102*4ff971beSsaggi-dw $renderer->doc .= '<div class="mstitle">'.$this->render_text('[['.$indata['link'].'|'.$indata['title'].']]').'</div>'. DOKU_LF; 10385220f43Ssaggi-dw } else { 104*4ff971beSsaggi-dw $renderer->doc .= '<div class="mstitle">'.$indata['title'].'</div>'. DOKU_LF; 10585220f43Ssaggi-dw } 10685220f43Ssaggi-dw } 107*4ff971beSsaggi-dw if (isset($indata['description'])) {$renderer->doc .= '<div class="msdesc">'.$indata['description'].'</div>'. DOKU_LF;} 10885220f43Ssaggi-dw break; 10985220f43Ssaggi-dw 11085220f43Ssaggi-dw case DOKU_LEXER_UNMATCHED : 111*4ff971beSsaggi-dw $renderer->doc .= $renderer->cdata($indata); 11285220f43Ssaggi-dw break; 11385220f43Ssaggi-dw case DOKU_LEXER_EXIT : 11485220f43Ssaggi-dw $renderer->doc .= '</div>'. DOKU_LF; 11585220f43Ssaggi-dw $renderer->doc .= '</div>'. DOKU_LF; 11685220f43Ssaggi-dw $direction = helper_plugin_dwtimeline::getDirection($direction); 11785220f43Ssaggi-dw break; 11885220f43Ssaggi-dw } 11985220f43Ssaggi-dw return true; 12085220f43Ssaggi-dw } 12185220f43Ssaggi-dw return false; 12285220f43Ssaggi-dw } 12385220f43Ssaggi-dw 12485220f43Ssaggi-dw} 12585220f43Ssaggi-dw 126