* * @see also: https://www.dokuwiki.org/devel:javascript * * Allow inline JavaScript in DokuWiki page. * This plugin ensures that your script embedded inside of CDATA section. * * SYNTAX: * * ... * */ // must be run within Dokuwiki if (!defined('DOKU_INC')) die(); class syntax_plugin_inlinejs_embedder extends DokuWiki_Syntax_Plugin { public function getType() { // Syntax Type return 'protected'; } public function getPType() { // Paragraph Type return 'block'; } /** * Connect pattern to lexer */ protected $mode, $pattern; public function preConnect() { // drop 'syntax_' from class name $this->mode = substr(get_class($this), 7); // syntax pattern $this->pattern[1] = '(?=.*?)'; $this->pattern[4] = ''; } public function connectTo($mode) { $this->Lexer->addEntryPattern($this->pattern[1], $mode, $this->mode); } public function postConnect() { $this->Lexer->addExitPattern($this->pattern[4], $this->mode); } public function getSort() { // sort number used to determine priority of this mode return 305; } /** * Plugin features */ protected $code = null; /** * handle the match */ public function handle($match, $state, $pos, Doku_Handler $handler) { global $conf; if ($this->getConf('follow_htmlok') && !$conf['htmlok']) { msg($this->getPluginName().': '.$this->getPluginComponent().' is disabled.',-1); return false; } switch ($state) { case DOKU_LEXER_ENTER: return false; case DOKU_LEXER_UNMATCHED: $this->code = $match; return false; case DOKU_LEXER_EXIT: $data = array($state, $this->code); $this->code = null; if ($this->getConf('follow_htmlok') && !$conf['htmlok']) { $msg = $this->getPluginComponent().' is disabled.'; msg($this->getPluginName().': '.$msg, -1); return false; } return $data; } return false; } /** * Create output */ public function render($format, Doku_Renderer $renderer, $data) { list($state, $code) = $data; if ($format != 'xhtml') return false; $html = ''.DOKU_LF; $renderer->doc .= $html; return true; } }