From caa69e26ad6eac1c8d40fd06f0dc67b2df906058 Mon Sep 17 00:00:00 2001 From: Tim Schumacher Date: Tue, 26 Nov 2013 20:57:26 +0100 Subject: [PATCH] init --- plugin.info.txt | 7 ++++ syntax.php | 90 +++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 97 insertions(+) create mode 100644 plugin.info.txt create mode 100644 syntax.php diff --git a/plugin.info.txt b/plugin.info.txt new file mode 100644 index 0000000..758792c --- /dev/null +++ b/plugin.info.txt @@ -0,0 +1,7 @@ +base navigation +author Tim Schumacher +email tim@bandenkrieg.hacked.jp +date 2013-11-12 +name Navigation +desc A Navigation that uses the object representation class +url https://bk-dev.hacked.jp/project/view/3/ \ No newline at end of file diff --git a/syntax.php b/syntax.php new file mode 100644 index 0000000..57892a4 --- /dev/null +++ b/syntax.php @@ -0,0 +1,90 @@ + + */ + +// must be run within DokuWiki +if (!defined ('DOKU_INC')) die(); + +if (!defined ('DOKU_PLUGIN')) define('DOKU_PLUGIN', DOKU_INC . 'lib/plugins/'); +require_once DOKU_PLUGIN . 'syntax.php'; + +require_once dirname (__FILE__) . DIRECTORY_SEPARATOR . 'DokuWikiObjectRepresentation.class.php'; + +/** + * All DokuWiki plugins to extend the parser/rendering mechanism + * need to inherit from this class + */ +class syntax_plugin_navigation extends DokuWiki_Syntax_Plugin { + + function getInfo () { + return array ('author' => 'Tim Schumacher', + 'email' => 'me@someplace.com', + 'date' => '2005-07-28', + 'name' => 'Now Plugin', + 'desc' => 'Include the current date and time', + 'url' => 'http://www.dokuwiki.org/devel:syntax_plugins'); + } + + function getType () { + return 'substition'; + } + + function getSort () { + return 32; + } + + function connectTo ($mode) { + $this->Lexer->addSpecialPattern('{{indexmenu_n>(\d+)}}',$mode,'plugin_navigation'); + $this->Lexer->addSpecialPattern ('\[NOW\]', $mode, 'plugin_navigation'); + } + + function handle ($match, $state, $pos, &$handler) { + return array ($match, $state, $pos); + } + + function render ($mode, &$renderer, $data) { + global $ID; + + $iter = new DokuWikiIterator(); + + $iter->all(function(DokuWikiNode $node) { + if (preg_match('/{{indexmenu_n>(\d+)}}/',$node->getContent(),$matches)) { + $node->setMetaData('sortorder',$matches[1]); + } else { + $node->setMetaData('sortorder',9999999); + } + }); + + $iter->all(function(DokuWikiNode $node){ + if ($node instanceof DokuWikiNameSpace) { + $node->nodes->uasort(function(DokuWikiNode $a,DokuWikiNode $b){ + if ($a->getMetaData('sortorder') == $b->getMetaData('sortorder')) { + return 0; + } + return ($a->getMetaData('sortorder') < $b->getMetaData('sortorder')) ? -1 : 1; + }); + } + }); + + $content = ''; + + // $data is what the function handle return'ed. + if ($mode == 'xhtml') { + $renderer->doc .= $content; + return true; + } + return false; + } +} \ No newline at end of file