setDefaultTheme( $defaultTheme ); return $mermaidParserFunction->parse( func_get_args() ); }; } /** * @since 1.0 * * @return Parser $parser */ public function __construct( Parser $parser ) { $this->parser = $parser; } /** * @since 1.0 * * @param string $defaultTheme */ public function setDefaultTheme( $defaultTheme ) { $this->defaultTheme = $defaultTheme; } /** * @since 1.0 * * @param array $params * * @return string */ public function parse( array $params ) { $class = 'ext-mermaid'; $parserOutput = $this->parser->getOutput(); if( isset( $params[0] ) && $params[0] instanceof \Parser ) { array_shift( $params ); } // Signal the OutputPageParserOutput hook $parserOutput->setExtensionData( 'ext-mermaid', true ); $parserOutput->addModuleStyles( 'ext.mermaid.styles' ); $parserOutput->addModules( 'ext.mermaid' ); $config = [ 'theme' => $this->defaultTheme ]; foreach ( $params as $key => $param ) { if ( strpos( $param, '=' ) !== false ) { list( $k, $v ) = explode( '=', $param, 2 ); if ( $k === 'config.theme' ) { $config['theme'] = $v; unset( $params[$key] ); } if ( $k === 'config.flowchart.curve' ) { $config['flowchart'] = [ 'curve' => $v ]; unset( $params[$key] ); } } } $content = implode( "|", $params ); return Html::rawElement( 'div', [ 'class' => $class, 'data-mermaid' => json_encode( [ 'content' => $content, 'config' => $config ] ) ], Html::rawElement( 'div', [ 'class' => 'mermaid-dots', ] ) ); } }