1*04fd306cSNickeau<?php 2*04fd306cSNickeau 3*04fd306cSNickeauuse ComboStrap\EditButton; 4*04fd306cSNickeauuse ComboStrap\ExceptionBadArgument; 5*04fd306cSNickeauuse ComboStrap\ExceptionNotEnabled; 6*04fd306cSNickeauuse ComboStrap\LogUtility; 7*04fd306cSNickeauuse ComboStrap\PluginUtility; 8*04fd306cSNickeauuse ComboStrap\Site; 9*04fd306cSNickeauuse ComboStrap\TagAttributes; 10*04fd306cSNickeau 11*04fd306cSNickeau 12*04fd306cSNickeau/** 13*04fd306cSNickeau * 14*04fd306cSNickeau * An edit button 15*04fd306cSNickeau * 16*04fd306cSNickeau * This is created in the parse tree for the following reason 17*04fd306cSNickeau * 18*04fd306cSNickeau * * We need the start and end position (easier to catch at the parse tree creation because they are given in the handle function) 19*04fd306cSNickeau * * A component may not allow them (for instance: 20*04fd306cSNickeau * * an iterator will not allow edit button and delete them 21*04fd306cSNickeau * * or {@link syntax_plugin_combo_webcode} 22*04fd306cSNickeau * * The wiki id is mandatory and is given as global id in the handle function. In render, we may compose several parse tree (call stack) 23*04fd306cSNickeau * 24*04fd306cSNickeau */ 25*04fd306cSNickeauclass syntax_plugin_combo_edit extends DokuWiki_Syntax_Plugin 26*04fd306cSNickeau{ 27*04fd306cSNickeau 28*04fd306cSNickeau const TAG = "edit"; 29*04fd306cSNickeau const CANONICAL = self::TAG; 30*04fd306cSNickeau const START_POSITION = "start-position"; 31*04fd306cSNickeau const END_POSITION = "end-position"; 32*04fd306cSNickeau const LABEL = "label"; 33*04fd306cSNickeau const FORMAT = "format"; 34*04fd306cSNickeau const HEADING_ID = "heading-id"; 35*04fd306cSNickeau const SECTION_ID = "section-id"; // to be dokuwiki conform 36*04fd306cSNickeau 37*04fd306cSNickeau 38*04fd306cSNickeau /** 39*04fd306cSNickeau * Syntax Type. 40*04fd306cSNickeau * 41*04fd306cSNickeau * Needs to return one of the mode types defined in $PARSER_MODES in parser.php 42*04fd306cSNickeau * @see DokuWiki_Syntax_Plugin::getType() 43*04fd306cSNickeau */ 44*04fd306cSNickeau function getType(): string 45*04fd306cSNickeau { 46*04fd306cSNickeau return 'substition'; 47*04fd306cSNickeau } 48*04fd306cSNickeau 49*04fd306cSNickeau /** 50*04fd306cSNickeau * How Dokuwiki will add P element 51*04fd306cSNickeau * 52*04fd306cSNickeau * * 'normal' - The plugin can be used inside paragraphs 53*04fd306cSNickeau * * 'block' - Open paragraphs need to be closed before plugin output - block should not be inside paragraphs 54*04fd306cSNickeau * * 'stack' - Special case. Plugin wraps other paragraphs. - Stacks can contain paragraphs 55*04fd306cSNickeau * 56*04fd306cSNickeau * @see DokuWiki_Syntax_Plugin::getPType() 57*04fd306cSNickeau */ 58*04fd306cSNickeau function getPType(): string 59*04fd306cSNickeau { 60*04fd306cSNickeau return 'block'; 61*04fd306cSNickeau } 62*04fd306cSNickeau 63*04fd306cSNickeau /** 64*04fd306cSNickeau * @return array 65*04fd306cSNickeau * Allow which kind of plugin inside 66*04fd306cSNickeau * 67*04fd306cSNickeau * Array('baseonly','container', 'formatting', 'substition', 'protected', 'disabled', 'paragraphs') 68*04fd306cSNickeau * 69*04fd306cSNickeau * Return an array of one or more of the mode types {@link $PARSER_MODES} in Parser.php 70*04fd306cSNickeau */ 71*04fd306cSNickeau function getAllowedTypes(): array 72*04fd306cSNickeau { 73*04fd306cSNickeau return array(); 74*04fd306cSNickeau } 75*04fd306cSNickeau 76*04fd306cSNickeau 77*04fd306cSNickeau function getSort(): int 78*04fd306cSNickeau { 79*04fd306cSNickeau return 201; 80*04fd306cSNickeau } 81*04fd306cSNickeau 82*04fd306cSNickeau 83*04fd306cSNickeau function connectTo($mode) 84*04fd306cSNickeau { 85*04fd306cSNickeau /** 86*04fd306cSNickeau * Call is generated via {@link EditButton::toComboCallComboFormat()} 87*04fd306cSNickeau */ 88*04fd306cSNickeau } 89*04fd306cSNickeau 90*04fd306cSNickeau 91*04fd306cSNickeau function postConnect() 92*04fd306cSNickeau { 93*04fd306cSNickeau 94*04fd306cSNickeau /** 95*04fd306cSNickeau * Call is generated in {@link action_plugin_combo_instructionspostprocessing} 96*04fd306cSNickeau */ 97*04fd306cSNickeau 98*04fd306cSNickeau } 99*04fd306cSNickeau 100*04fd306cSNickeau function handle($match, $state, $pos, Doku_Handler $handler): array 101*04fd306cSNickeau { 102*04fd306cSNickeau 103*04fd306cSNickeau return array(); 104*04fd306cSNickeau 105*04fd306cSNickeau } 106*04fd306cSNickeau 107*04fd306cSNickeau /** 108*04fd306cSNickeau * Render the output 109*04fd306cSNickeau * @param string $format 110*04fd306cSNickeau * @param Doku_Renderer $renderer 111*04fd306cSNickeau * @param array $data - what the function handle() return'ed 112*04fd306cSNickeau * @return boolean - rendered correctly? (however, returned value is not used at the moment) 113*04fd306cSNickeau * @see DokuWiki_Syntax_Plugin::render() 114*04fd306cSNickeau * 115*04fd306cSNickeau * 116*04fd306cSNickeau */ 117*04fd306cSNickeau function render($format, Doku_Renderer $renderer, $data): bool 118*04fd306cSNickeau { 119*04fd306cSNickeau 120*04fd306cSNickeau /** 121*04fd306cSNickeau * 122*04fd306cSNickeau * The rendering is used only when exporting to another format 123*04fd306cSNickeau * (XML) to render on another platform such as mobile 124*04fd306cSNickeau */ 125*04fd306cSNickeau if ($format !== "xhtml") { 126*04fd306cSNickeau return false; 127*04fd306cSNickeau } 128*04fd306cSNickeau 129*04fd306cSNickeau $state = $data[PluginUtility::STATE]; 130*04fd306cSNickeau if ($state !== DOKU_LEXER_SPECIAL) { 131*04fd306cSNickeau LogUtility::error("The edit button should be a special tag", self::CANONICAL); 132*04fd306cSNickeau return false; 133*04fd306cSNickeau } 134*04fd306cSNickeau 135*04fd306cSNickeau $editButton = EditButton::createFromCallStackArray($data[PluginUtility::ATTRIBUTES]); 136*04fd306cSNickeau try { 137*04fd306cSNickeau $renderer->doc .= $editButton->toHtmlComment(); 138*04fd306cSNickeau } catch (ExceptionBadArgument $e) { 139*04fd306cSNickeau LogUtility::error("Error while rendering the edit button ($editButton). Error: {$e->getMessage()}", self::CANONICAL); 140*04fd306cSNickeau return false; 141*04fd306cSNickeau } catch (ExceptionNotEnabled $e) { 142*04fd306cSNickeau // ok 143*04fd306cSNickeau return false; 144*04fd306cSNickeau } 145*04fd306cSNickeau return true; 146*04fd306cSNickeau 147*04fd306cSNickeau } 148*04fd306cSNickeau 149*04fd306cSNickeau 150*04fd306cSNickeau} 151*04fd306cSNickeau 152