121913ab3SNickeau<?php 221913ab3SNickeau 321913ab3SNickeau 421913ab3SNickeau// must be run within Dokuwiki 521913ab3SNickeauuse ComboStrap\Background; 623723136Sgerardnicouse ComboStrap\MediaLink; 721913ab3SNickeauuse ComboStrap\PluginUtility; 821913ab3SNickeauuse ComboStrap\Tag; 921913ab3SNickeauuse ComboStrap\TagAttributes; 1021913ab3SNickeau 1121913ab3SNickeauif (!defined('DOKU_INC')) die(); 1221913ab3SNickeau 1321913ab3SNickeau/** 1421913ab3SNickeau * 1521913ab3SNickeau * backgrounds is an element that holds more than one background 1621913ab3SNickeau * We can set then parallax effect for instance 1721913ab3SNickeau * 1821913ab3SNickeau */ 1921913ab3SNickeauclass syntax_plugin_combo_backgrounds extends DokuWiki_Syntax_Plugin 2021913ab3SNickeau{ 2121913ab3SNickeau 2221913ab3SNickeau const TAG = "backgrounds"; 2321913ab3SNickeau 2421913ab3SNickeau 2521913ab3SNickeau /** 2621913ab3SNickeau * Syntax Type. 2721913ab3SNickeau * 2821913ab3SNickeau * Needs to return one of the mode types defined in $PARSER_MODES in parser.php 2921913ab3SNickeau * @see DokuWiki_Syntax_Plugin::getType() 3021913ab3SNickeau */ 3121913ab3SNickeau function getType() 3221913ab3SNickeau { 3321913ab3SNickeau return 'container'; 3421913ab3SNickeau } 3521913ab3SNickeau 3621913ab3SNickeau /** 3721913ab3SNickeau * How Dokuwiki will add P element 3821913ab3SNickeau * 3921913ab3SNickeau * * 'normal' - The plugin can be used inside paragraphs 4021913ab3SNickeau * * 'block' - Open paragraphs need to be closed before plugin output - block should not be inside paragraphs 4121913ab3SNickeau * * 'stack' - Special case. Plugin wraps other paragraphs. - Stacks can contain paragraphs 4221913ab3SNickeau * 4321913ab3SNickeau * @see DokuWiki_Syntax_Plugin::getPType() 4421913ab3SNickeau */ 4521913ab3SNickeau function getPType() 4621913ab3SNickeau { 4721913ab3SNickeau /** 4821913ab3SNickeau * normal (and not block) is important to not create p_open calls 4921913ab3SNickeau */ 5021913ab3SNickeau return 'normal'; 5121913ab3SNickeau } 5221913ab3SNickeau 5321913ab3SNickeau /** 5421913ab3SNickeau * @return array 5521913ab3SNickeau * Allow which kind of plugin inside 5621913ab3SNickeau * 5721913ab3SNickeau * Array('baseonly','container', 'formatting', 'substition', 'protected', 'disabled', 'paragraphs') 5821913ab3SNickeau * 5921913ab3SNickeau * Return an array of one or more of the mode types {@link $PARSER_MODES} in Parser.php 6021913ab3SNickeau */ 6121913ab3SNickeau function getAllowedTypes() 6221913ab3SNickeau { 6321913ab3SNickeau return array('baseonly', 'container', 'formatting', 'substition', 'protected', 'disabled', 'paragraphs'); 6421913ab3SNickeau } 6521913ab3SNickeau 6621913ab3SNickeau public function accepts($mode) 6721913ab3SNickeau { 6821913ab3SNickeau 6921913ab3SNickeau return syntax_plugin_combo_preformatted::disablePreformatted($mode); 7021913ab3SNickeau 7121913ab3SNickeau } 7221913ab3SNickeau 7321913ab3SNickeau function getSort() 7421913ab3SNickeau { 7521913ab3SNickeau return 201; 7621913ab3SNickeau } 7721913ab3SNickeau 7821913ab3SNickeau 7921913ab3SNickeau function connectTo($mode) 8021913ab3SNickeau { 8121913ab3SNickeau 8221913ab3SNickeau $pattern = PluginUtility::getContainerTagPattern(self::TAG); 83*9337a630SNickeau $this->Lexer->addEntryPattern($pattern, $mode, PluginUtility::getModeFromTag($this->getPluginComponent())); 8421913ab3SNickeau 8521913ab3SNickeau } 8621913ab3SNickeau 8721913ab3SNickeau 8821913ab3SNickeau function postConnect() 8921913ab3SNickeau { 9021913ab3SNickeau 91*9337a630SNickeau $this->Lexer->addExitPattern('</' . self::TAG . '>', PluginUtility::getModeFromTag($this->getPluginComponent())); 9221913ab3SNickeau 9321913ab3SNickeau 9421913ab3SNickeau } 9521913ab3SNickeau 9621913ab3SNickeau function handle($match, $state, $pos, Doku_Handler $handler) 9721913ab3SNickeau { 9821913ab3SNickeau 9921913ab3SNickeau switch ($state) { 10021913ab3SNickeau 10121913ab3SNickeau case DOKU_LEXER_ENTER : 10221913ab3SNickeau $tagAttributes = TagAttributes::createFromTagMatch($match); 10321913ab3SNickeau return array( 10421913ab3SNickeau PluginUtility::STATE => $state, 10521913ab3SNickeau PluginUtility::ATTRIBUTES => $tagAttributes->toCallStackArray() 10621913ab3SNickeau ); 10721913ab3SNickeau 10821913ab3SNickeau case DOKU_LEXER_UNMATCHED : 10921913ab3SNickeau /** 11021913ab3SNickeau * We should not have anything here 11121913ab3SNickeau * but in any case, we send the data for feedback 11221913ab3SNickeau */ 11321913ab3SNickeau return PluginUtility::handleAndReturnUnmatchedData(self::TAG, $match, $handler); 11421913ab3SNickeau 11521913ab3SNickeau case DOKU_LEXER_EXIT : 11621913ab3SNickeau 11721913ab3SNickeau /** 11821913ab3SNickeau * Return state to keep the call stack structure 11921913ab3SNickeau * and print the closing tag 12021913ab3SNickeau */ 12121913ab3SNickeau return array( 12221913ab3SNickeau PluginUtility::STATE => $state 12321913ab3SNickeau ); 12421913ab3SNickeau 12521913ab3SNickeau 12621913ab3SNickeau } 12721913ab3SNickeau return array(); 12821913ab3SNickeau 12921913ab3SNickeau } 13021913ab3SNickeau 13121913ab3SNickeau /** 13221913ab3SNickeau * Render the output 13321913ab3SNickeau * @param string $format 13421913ab3SNickeau * @param Doku_Renderer $renderer 13521913ab3SNickeau * @param array $data - what the function handle() return'ed 13621913ab3SNickeau * @return boolean - rendered correctly? (however, returned value is not used at the moment) 13721913ab3SNickeau * @see DokuWiki_Syntax_Plugin::render() 13821913ab3SNickeau * 13921913ab3SNickeau * 14021913ab3SNickeau */ 14121913ab3SNickeau function render($format, Doku_Renderer $renderer, $data) 14221913ab3SNickeau { 14321913ab3SNickeau if ($format == 'xhtml') { 14421913ab3SNickeau 14521913ab3SNickeau /** @var Doku_Renderer_xhtml $renderer */ 14621913ab3SNickeau $state = $data[PluginUtility::STATE]; 14721913ab3SNickeau switch ($state) { 14821913ab3SNickeau 14921913ab3SNickeau case DOKU_LEXER_ENTER: 15021913ab3SNickeau $tagAttributes = TagAttributes::createFromCallStackArray($data[PluginUtility::ATTRIBUTES]); 15121913ab3SNickeau $tagAttributes->addClassName(self::TAG); 15221913ab3SNickeau $renderer->doc .= $tagAttributes->toHtmlEnterTag("div"); 15321913ab3SNickeau break; 15421913ab3SNickeau case DOKU_LEXER_EXIT: 15521913ab3SNickeau $renderer->doc .= "</div>"; 15621913ab3SNickeau break; 15721913ab3SNickeau case DOKU_LEXER_UNMATCHED: 15821913ab3SNickeau /** 15921913ab3SNickeau * In case anyone put text where it should not 16021913ab3SNickeau */ 16121913ab3SNickeau $renderer->doc .= PluginUtility::renderUnmatched($data); 16221913ab3SNickeau break; 16321913ab3SNickeau 16421913ab3SNickeau } 16521913ab3SNickeau return true; 16621913ab3SNickeau } 16721913ab3SNickeau 16821913ab3SNickeau // unsupported $mode 16921913ab3SNickeau return false; 17021913ab3SNickeau } 17121913ab3SNickeau 17221913ab3SNickeau 17321913ab3SNickeau} 17421913ab3SNickeau 175