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 */ 84ff971beSsaggi-dw 9*4fa647deSsaggi-dwuse dokuwiki\plugin\dwtimeline\support\support; 104ff971beSsaggi-dw 1185220f43Ssaggi-dwclass syntax_plugin_dwtimeline_timeline extends \dokuwiki\Extension\SyntaxPlugin 1285220f43Ssaggi-dw{ 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 { 292ddb0813SSteffen Sagert return 400; 3085220f43Ssaggi-dw } 3185220f43Ssaggi-dw 322ddb0813SSteffen Sagert 3385220f43Ssaggi-dw /** 3485220f43Ssaggi-dw * @return array Things that may be inside the syntax 3585220f43Ssaggi-dw */ 3685220f43Ssaggi-dw function getAllowedTypes() { 372ddb0813SSteffen Sagert return array('plugin_dwtimeline_milestone'); 3885220f43Ssaggi-dw } 3985220f43Ssaggi-dw 4085220f43Ssaggi-dw /** 4185220f43Ssaggi-dw * Set the EntryPattern 42*4fa647deSsaggi-dw * @param string $mode 4385220f43Ssaggi-dw */ 4485220f43Ssaggi-dw public function connectTo($mode) 4585220f43Ssaggi-dw { 462ddb0813SSteffen Sagert $this->Lexer->addEntryPattern('<dwtimeline\b.*?>(?=.*?</dwtimeline\b.*?>)',$mode,'plugin_dwtimeline_timeline'); 4785220f43Ssaggi-dw } 4885220f43Ssaggi-dw 4985220f43Ssaggi-dw /** 5085220f43Ssaggi-dw * Set the ExitPattern 5185220f43Ssaggi-dw */ 5285220f43Ssaggi-dw public function postConnect() 5385220f43Ssaggi-dw { 5485220f43Ssaggi-dw $this->Lexer->addExitPattern('</dwtimeline\b.*?>', 'plugin_dwtimeline_timeline'); 5585220f43Ssaggi-dw } 5685220f43Ssaggi-dw 5785220f43Ssaggi-dw /** 5885220f43Ssaggi-dw * Handle the match 59*4fa647deSsaggi-dw * @param string $match The match of the syntax 60*4fa647deSsaggi-dw * @param int $state The state of the handler 61*4fa647deSsaggi-dw * @param int $pos The position in the document 62*4fa647deSsaggi-dw * @param Doku_Handler $handler The handler 63*4fa647deSsaggi-dw * @return array Data for the renderer 6485220f43Ssaggi-dw */ 6585220f43Ssaggi-dw public function handle($match, $state, $pos, Doku_Handler $handler) 6685220f43Ssaggi-dw { 6785220f43Ssaggi-dw $data = []; 6885220f43Ssaggi-dw switch ($state) { 6985220f43Ssaggi-dw case DOKU_LEXER_ENTER : 704ff971beSsaggi-dw global $align; 714ff971beSsaggi-dw $align = $this->getConf('align'); 7285220f43Ssaggi-dw $match = trim(substr($match, 11,-1));// returns match between <dwtimeline(11) and >(-1) 73*4fa647deSsaggi-dw $data = support::getTitleMatches($match); 742ddb0813SSteffen Sagert $align = $data['align']; 7585220f43Ssaggi-dw return array($state,$data); 7685220f43Ssaggi-dw case DOKU_LEXER_UNMATCHED : 7785220f43Ssaggi-dw return array ($state,$match); 7885220f43Ssaggi-dw case DOKU_LEXER_EXIT : 7985220f43Ssaggi-dw $match = trim(substr($match, 12,-1));//returns match between </dwtimeline(12) and >(-1) 80*4fa647deSsaggi-dw $data = support::getTitleMatches($match); 8185220f43Ssaggi-dw return array($state,$data); 8285220f43Ssaggi-dw } 8385220f43Ssaggi-dw return array(); 8485220f43Ssaggi-dw } 8585220f43Ssaggi-dw 8685220f43Ssaggi-dw /** 87*4fa647deSsaggi-dw * Create output 88*4fa647deSsaggi-dw * 89*4fa647deSsaggi-dw * @param string $mode string output format being rendered 90*4fa647deSsaggi-dw * @param Doku_Renderer $renderer the current renderer object 91*4fa647deSsaggi-dw * @param array $data data created by handler() 92*4fa647deSsaggi-dw * @return boolean rendered correctly? 9385220f43Ssaggi-dw */ 9485220f43Ssaggi-dw public function render($mode, Doku_Renderer $renderer, $data) 9585220f43Ssaggi-dw { 9685220f43Ssaggi-dw if ($mode == 'xhtml') { 9785220f43Ssaggi-dw global $direction; 9808c5c745SSteffen Sagert if (!$direction) {$direction='tl-'.$this->getConf('direction');} 9985220f43Ssaggi-dw list($state,$indata) = $data; 10085220f43Ssaggi-dw switch ($state) { 10185220f43Ssaggi-dw case DOKU_LEXER_ENTER : 1022ddb0813SSteffen Sagert $renderer->doc .= '<div class="dwtimeline">'. DOKU_LF; 1034ff971beSsaggi-dw if ($indata['align'] === 'horz'){$renderer->doc .= '<div class="timeline-'.$indata['align'].'-line"></div>'. DOKU_LF;}; 1044ff971beSsaggi-dw $renderer->doc .= '<div class="timeline-'.$indata['align'].'">'. DOKU_LF; 1054ff971beSsaggi-dw if (isset($indata['title']) or isset($indata['description'])) { 10608c5c745SSteffen Sagert $renderer->doc .= '<div class="container-'.$indata['align'].' tl-top">'. DOKU_LF; 10708c5c745SSteffen Sagert $renderer->doc .= '<div class="tlcontent">'. DOKU_LF; 1084ff971beSsaggi-dw if (isset($indata['title'])) {$renderer->doc .= '<div class="tltitle">'.$indata['title'].'</div>'. DOKU_LF;} 1092ddb0813SSteffen Sagert if (isset($indata['description'])) {$renderer->doc .= '<p>'. DOKU_LF.$indata['description']. DOKU_LF.'</p>'. DOKU_LF;} 11085220f43Ssaggi-dw $renderer->doc .= '</div>'. DOKU_LF; 11185220f43Ssaggi-dw $renderer->doc .= '</div>'. DOKU_LF; 11285220f43Ssaggi-dw } 11385220f43Ssaggi-dw break; 11485220f43Ssaggi-dw case DOKU_LEXER_UNMATCHED : 1154ff971beSsaggi-dw $renderer->doc .= $renderer->cdata($indata); 11685220f43Ssaggi-dw break; 11785220f43Ssaggi-dw case DOKU_LEXER_EXIT : 1184ff971beSsaggi-dw if (isset($indata['title']) or isset($indata['description'])) { 11908c5c745SSteffen Sagert $renderer->doc .= '<div class="container-'.$indata['align'].' tl-bottom">'. DOKU_LF; 12008c5c745SSteffen Sagert $renderer->doc .= '<div class="tlcontent">'. DOKU_LF; 1214ff971beSsaggi-dw if (isset($indata['title'])) {$renderer->doc .= '<div class="tltitle">'.$indata['title'].'</div>'. DOKU_LF;} 1224ff971beSsaggi-dw if (isset($indata['description'])) {$renderer->doc .= '<p>'.$indata['description'].'</p>'. DOKU_LF;} 12385220f43Ssaggi-dw $renderer->doc .= '</div>'. DOKU_LF; 12485220f43Ssaggi-dw $renderer->doc .= '</div>'. DOKU_LF; 1252ddb0813SSteffen Sagert $renderer->doc .= '</div>'. DOKU_LF; 12685220f43Ssaggi-dw } 12785220f43Ssaggi-dw $renderer->doc .= '</div>'. DOKU_LF; 12808c5c745SSteffen Sagert $direction='tl-'.$this->getConf('direction');//Reset direction 12985220f43Ssaggi-dw break; 13085220f43Ssaggi-dw } 13185220f43Ssaggi-dw return true; 13285220f43Ssaggi-dw } 13385220f43Ssaggi-dw return false; 13485220f43Ssaggi-dw } 13585220f43Ssaggi-dw 13685220f43Ssaggi-dw} 13785220f43Ssaggi-dw 138