CINXE.COM
devel:action_plugins [DokuWiki]
<!DOCTYPE html> <html lang="en" dir="ltr" class="no-js"> <head> <meta charset="utf-8" /> <title>devel:action_plugins [DokuWiki]</title> <meta name="generator" content="DokuWiki"/> <meta name="theme-color" content="#008800"/> <meta name="robots" content="index,follow"/> <meta name="keywords" content="devel,action_plugins"/> <link rel="search" type="application/opensearchdescription+xml" href="/lib/exe/opensearch.php" title="DokuWiki"/> <link rel="start" href="/"/> <link rel="contents" href="/devel:action_plugins?do=index" title="Sitemap"/> <link rel="manifest" href="/lib/exe/manifest.php"/> <link rel="alternate" type="application/rss+xml" title="Recent Changes" href="/feed.php"/> <link rel="alternate" type="application/rss+xml" title="Current namespace" href="/feed.php?mode=list&ns=devel"/> <link rel="edit" title="Edit this page" href="/devel:action_plugins?do=edit"/> <link rel="alternate" type="text/html" title="Plain HTML" href="/_export/xhtml/devel:action_plugins"/> <link rel="alternate" type="text/plain" title="Wiki Markup" href="/_export/raw/devel:action_plugins"/> <link rel="canonical" href="https://www.dokuwiki.org/devel:action_plugins"/> <link rel="stylesheet" href="/lib/exe/css.php?t=dokuwiki&tseed=f1005bad3d81fc9c803c7f93d32a390e"/> <link rel="alternate" hreflang="fr" href="https://www.dokuwiki.org/fr:devel:action_plugins"/> <link rel="alternate" hreflang="ja" href="https://www.dokuwiki.org/ja:devel:action_plugins"/> <link rel="alternate" hreflang="ru" href="https://www.dokuwiki.org/ru:devel:action_plugins"/> <link rel="alternate" hreflang="x-default" href="https://www.dokuwiki.org/devel:action_plugins"/> <script >var NS='devel';var JSINFO = {"plugins":{"edittable":{"default columnwidth":""}},"id":"devel:action_plugins","namespace":"devel","ACT":"show","useHeadingNavigation":0,"useHeadingContent":0};(function(H){H.className=H.className.replace(/\bno-js\b/,'js')})(document.documentElement);</script> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.4/jquery.min.js" defer="defer"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.13.2/jquery-ui.min.js" defer="defer"></script> <script src="/lib/exe/js.php?t=dokuwiki&tseed=f1005bad3d81fc9c803c7f93d32a390e&lang=en" defer="defer"></script> <meta name="viewport" content="width=device-width,initial-scale=1" /> <link rel="shortcut icon" href="/lib/tpl/dokuwiki/images/favicon.ico" /> <link rel="apple-touch-icon" href="/lib/tpl/dokuwiki/images/apple-touch-icon.png" /> <meta name="verify-v1" content="OVxl3gsCv2MhZqh1cBQyl0JytWXSwXMjyvwc+4w3WtA=" /> <meta name="google-site-verification" content="YhTVK69hW94ZXUtc2zSLPxTkZKbZIn0zK67mz5WQB-E" /> <!-- Global site tag (gtag.js) - Google Analytics --> <script async src="https://www.googletagmanager.com/gtag/js?id=UA-83791-1"></script> <script> window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'UA-83791-1', { 'anonymize_ip': true }); </script> </head> <body> <div id="dokuwiki__site"><div id="dokuwiki__top" class="site dokuwiki mode_show tpl_dokuwiki showSidebar hasSidebar"> <!-- ********** HEADER ********** --> <header id="dokuwiki__header"><div class="pad group"> <div class="headings group"> <ul class="a11y skip"> <li><a href="#dokuwiki__content">skip to content</a></li> </ul> <h1 class="logo"><a href="/start" accesskey="h" title="Home [h]"><img src="/lib/tpl/dokuwiki/images/logo.png" width="64" height="64" alt="" /><span>DokuWiki</span></a></h1> <p class="claim">It's better when it's simple</p> </div> <div class="tools group"> <!-- USER TOOLS --> <div id="dokuwiki__usertools"> <h3 class="a11y">User Tools</h3> <ul> <li class="action login"><a href="/devel:action_plugins?do=login&sectok=" title="Log In" rel="nofollow"><span>Log In</span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M10 17.25V14H3v-4h7V6.75L15.25 12 10 17.25M8 2h9a2 2 0 0 1 2 2v16a2 2 0 0 1-2 2H8a2 2 0 0 1-2-2v-4h2v4h9V4H8v4H6V4a2 2 0 0 1 2-2z"/></svg></a></li> </ul> </div> <!-- SITE TOOLS --> <div id="dokuwiki__sitetools"> <h3 class="a11y">Site Tools</h3> <form action="/start" method="get" role="search" class="search doku_form" id="dw__search" accept-charset="utf-8"><input type="hidden" name="do" value="search" /><input type="hidden" name="id" value="devel:action_plugins" /><div class="no"><input name="q" type="text" class="edit" title="[F]" accesskey="f" placeholder="Search" autocomplete="on" id="qsearch__in" value="" /><button value="1" type="submit" title="Search">Search</button><div id="qsearch__out" class="ajax_qsearch JSpopup"></div></div></form> <div class="mobileTools"> <form action="/doku.php" method="get" accept-charset="utf-8"><div class="no"><input type="hidden" name="id" value="devel:action_plugins" /><select name="do" class="edit quickselect" title="Tools"><option value="">Tools</option><optgroup label="Page Tools"><option value="edit">Edit this page</option><option value="revisions">Old revisions</option><option value="backlink">Backlinks</option></optgroup><optgroup label="Site Tools"><option value="recent">Recent Changes</option><option value="media">Media Manager</option><option value="index">Sitemap</option></optgroup><optgroup label="User Tools"><option value="login">Log In</option></optgroup></select><button type="submit">></button></div></form> </div> <ul> <li class="action recent"><a href="/devel:action_plugins?do=recent" title="Recent Changes [r]" rel="nofollow" accesskey="r">Recent Changes</a></li><li class="action media"><a href="/devel:action_plugins?do=media&ns=devel" title="Media Manager" rel="nofollow">Media Manager</a></li><li class="action index"><a href="/devel:action_plugins?do=index" title="Sitemap [x]" rel="nofollow" accesskey="x">Sitemap</a></li> </ul> </div> </div> <!-- BREADCRUMBS --> <div class="breadcrumbs"> <div class="trace"><span class="bchead">Trace:</span> <span class="bcsep">•</span> <span class="curid"><bdi><a href="/devel:action_plugins" class="breadcrumbs" title="devel:action_plugins">action_plugins</a></bdi></span></div> </div> <hr class="a11y" /> </div></header><!-- /header --> <div class="wrapper group"> <!-- ********** ASIDE ********** --> <nav id="dokuwiki__aside" aria-label="Sidebar"><div class="pad aside include group"> <h3 class="toggle">Sidebar</h3> <div class="content"><div class="group"> <div class="plugin_translation is-dropdown"><span class="title">Translations of this page<sup><a href="/localization" class="wikilink1" title="localization" data-wiki-id="localization">?</a></sup>: </span><ul><li class="span"><span class="wikilink1" title="English">English (en)</span></li><li class="a"><a class="wikilink2" title="|العربية" href="/ar:devel:action_plugins">|العربية (ar)</a></li><li class="a"><a class="wikilink2" title="Català" href="/ca:devel:action_plugins">Català (ca)</a></li><li class="a"><a class="wikilink2" title="Česky" href="/cs:devel:action_plugins">Česky (cs)</a></li><li class="a"><a class="wikilink2" title="Dansk" href="/da:devel:action_plugins">Dansk (da)</a></li><li class="a"><a class="wikilink2" title="Deutsch" href="/de:devel:action_plugins">Deutsch (de)</a></li><li class="a"><a class="wikilink2" title="Ελληνικά" href="/el:devel:action_plugins">Ελληνικά (el)</a></li><li class="a"><a class="wikilink2" title="Esperanto" href="/eo:devel:action_plugins">Esperanto (eo)</a></li><li class="a"><a class="wikilink2" title="Español" href="/es:devel:action_plugins">Español (es)</a></li><li class="a"><a class="wikilink2" title="فارسی" href="/fa:devel:action_plugins">فارسی (fa)</a></li><li class="a"><a class="wikilink1" title="Français" href="/fr:devel:action_plugins">Français (fr)</a></li><li class="a"><a class="wikilink2" title="עברית" href="/he:devel:action_plugins">עברית (he)</a></li><li class="a"><a class="wikilink2" title="Magyar" href="/hu:devel:action_plugins">Magyar (hu)</a></li><li class="a"><a class="wikilink2" title="Italiano" href="/it:devel:action_plugins">Italiano (it)</a></li><li class="a"><a class="wikilink1" title="日本語" href="/ja:devel:action_plugins">日本語 (ja)</a></li><li class="a"><a class="wikilink2" title="한국어" href="/ko:devel:action_plugins">한국어 (ko)</a></li><li class="a"><a class="wikilink2" title="Lietuvių Kalba" href="/lt:devel:action_plugins">Lietuvių Kalba (lt)</a></li><li class="a"><a class="wikilink2" title="Nederlands" href="/nl:devel:action_plugins">Nederlands (nl)</a></li><li class="a"><a class="wikilink2" title="Norsk" href="/no:devel:action_plugins">Norsk (no)</a></li><li class="a"><a class="wikilink2" title="Polski" href="/pl:devel:action_plugins">Polski (pl)</a></li><li class="a"><a class="wikilink2" title="Português" href="/pt-br:devel:action_plugins">Português (pt-br)</a></li><li class="a"><a class="wikilink2" title="Română" href="/ro:devel:action_plugins">Română (ro)</a></li><li class="a"><a class="wikilink1" title="Русский" href="/ru:devel:action_plugins">Русский (ru)</a></li><li class="a"><a class="wikilink2" title="Српски Језик" href="/sr:devel:action_plugins">Српски Језик (sr)</a></li><li class="a"><a class="wikilink2" title="Svenska" href="/sv:devel:action_plugins">Svenska (sv)</a></li><li class="a"><a class="wikilink2" title="ไทย" href="/th:devel:action_plugins">ไทย (th)</a></li><li class="a"><a class="wikilink2" title="Українська" href="/uk:devel:action_plugins">Українська (uk)</a></li><li class="a"><a class="wikilink2" title="中文" href="/zh:devel:action_plugins">中文 (zh)</a></li><li class="a"><a class="wikilink2" title="繁體中文" href="/zh-tw:devel:action_plugins">繁體中文 (zh-tw)</a></li></ul></div> <p> <strong>Learn about DokuWiki</strong> </p> <ul> <li class="level1"><div class="li"> <a href="/features" class="wikilink1" title="features" data-wiki-id="features">Features</a> & <a href="/blogroll" class="wikilink1" title="blogroll" data-wiki-id="blogroll">reviews</a> </div> </li> <li class="level1"><div class="li"> <a href="/install" class="wikilink1" title="install" data-wiki-id="install">Installation guide</a></div> </li> <li class="level1"><div class="li"> <a href="/manual" class="wikilink1" title="manual" data-wiki-id="manual">User manual</a> & <a href="/wiki:syntax" class="wikilink1" title="wiki:syntax" data-wiki-id="wiki:syntax">syntax</a></div> </li> <li class="level1"><div class="li"> <a href="/changes" class="wikilink1" title="changes" data-wiki-id="changes">Release notes</a></div> </li> <li class="level1"><div class="li"> <a href="/faq" class="wikilink1" title="faq" data-wiki-id="faq">FAQ</a></div> </li> </ul> <p> <strong>Advanced Use</strong> </p> <ul> <li class="level1"><div class="li"> <a href="/extensions" class="wikilink1" title="extensions" data-wiki-id="extensions">Extensions</a></div> </li> <li class="level1"><div class="li"> <a href="/development" class="wikilink1" title="development" data-wiki-id="development">Development manual</a></div> </li> </ul> <p> <strong>Corporate Use</strong> </p> <ul> <li class="level1"><div class="li"> <a href="/faq:support" class="wikilink1" title="faq:support" data-wiki-id="faq:support">Get support</a></div> </li> <li class="level1"><div class="li"> <a href="/donate" class="wikilink1" title="donate" data-wiki-id="donate">Donations</a></div> </li> </ul> <p> <strong>Our Community</strong> </p> <ul> <li class="level1"><div class="li"> <a href="/teams:getting_involved" class="wikilink1" title="teams:getting_involved" data-wiki-id="teams:getting_involved">Get involved</a></div> </li> <li class="level1"><div class="li"> <a href="/dokuinstall" class="wikilink1" title="dokuinstall" data-wiki-id="dokuinstall">Users</a></div> </li> <li class="level1"><div class="li"> <a href="http://forum.dokuwiki.org" class="urlextern" title="http://forum.dokuwiki.org">User forum</a></div> </li> <li class="level1"><div class="li"> <a href="/mailinglist" class="wikilink1" title="mailinglist" data-wiki-id="mailinglist">Development mailinglist</a></div> </li> </ul> <hr /> <p> Follow us on <a href="https://phpc.social/@dokuwiki" class="urlextern" title="https://phpc.social/@dokuwiki">Mastodon</a> and other <a href="/social" class="wikilink1" title="social" data-wiki-id="social">social networks</a>. </p> <p> <a href="/privacy" class="wikilink1" title="privacy" data-wiki-id="privacy">Our Privacy Policy</a> </p> </div></div> </div></nav><!-- /aside --> <!-- ********** CONTENT ********** --> <main id="dokuwiki__content"><div class="pad group"> <div class="pageId"><span>devel:action_plugins</span></div> <div class="page group"> <!-- wikipage start --> <!-- TOC START --> <div id="dw__toc" class="dw__toc"> <h3 class="toggle">Table of Contents</h3> <div> <ul class="toc"> <li class="level1"><div class="li"><a href="#action_plugins">Action Plugins</a></div> <ul class="toc"> <li class="level2"><div class="li"><a href="#working_principle">Working principle</a></div></li> <li class="level2"><div class="li"><a href="#synopsis">Synopsis</a></div> <ul class="toc"> <li class="level3"><div class="li"><a href="#required_methods">Required methods</a></div></li> <li class="level3"><div class="li"><a href="#inherited_methods">Inherited methods</a></div></li> </ul> </li> <li class="level2"><div class="li"><a href="#register_method">register() method</a></div></li> <li class="level2"><div class="li"><a href="#event_handler_method"><event handler>() method</a></div></li> <li class="level2"><div class="li"><a href="#further_reading">Further reading</a></div></li> <li class="level2"><div class="li"><a href="#examples">Examples</a></div> <ul class="toc"> <li class="level3"><div class="li"><a href="#sampleadd_always_a_javascript_file">Sample: add always a JavaScript file</a></div></li> <li class="level3"><div class="li"><a href="#sampleadd_toolbar_button">Sample: add toolbar button</a></div></li> <li class="level3"><div class="li"><a href="#samplehandle_ajax_requests">Sample: handle ajax requests</a></div></li> </ul></li> </ul></li> </ul> </div> </div> <!-- TOC END --> <h1 class="sectionedit1" id="action_plugins">Action Plugins</h1> <div class="level1"> <p> <a href="http://www.dokuwiki.org/plugins?plugintype=4#extension__table" class="interwiki iw_plugintype" title="http://www.dokuwiki.org/plugins?plugintype=4#extension__table">Action plugins</a> are designed to work with DokuWiki <a href="/devel:events" class="wikilink1" title="devel:events" data-wiki-id="devel:events">events</a> to allow for customisation/extension of any part of DokuWiki that signals its activity using events. They are a way to modify many aspects of how DokuWiki behaves in certain cases independent of a page's syntax. To be able to modify a DokuWiki internal behavior it needs to trigger an event. Your action plugin can register as a handler for such an event and then work with the given event data. </p> </div> <div class="secedit editbutton_section editbutton_1"><form class="button btn_secedit" method="post" action="/devel:action_plugins"><div class="no"><input type="hidden" name="do" value="edit" /><input type="hidden" name="rev" value="1693605142" /><input type="hidden" name="summary" value="[Action Plugins] " /><input type="hidden" name="target" value="section" /><input type="hidden" name="hid" value="action_plugins" /><input type="hidden" name="codeblockOffset" value="0" /><input type="hidden" name="range" value="1-528" /><button type="submit" title="Action Plugins">Edit</button></div></form></div> <h2 class="sectionedit2" id="working_principle">Working principle</h2> <div class="level2"> <p> Action plugins are loaded before any significant DokuWiki processing takes place. Immediately after loading, each plugin is called by its <code>register()</code> method to give it the opportunity to register any of its event handlers. When an event is signaled all event handlers registered for that event are called in turn in ascending order of the $seq number used to register them (Since release 2014-05-05 “Ponder Stibbons”, before it was in no particular order) and passed the Event object. The handler has the opportunity to take action based on the event data and to alter either the event data or the event's subsequent processing. </p> <p> For more details of how the events system works and lists of events refer to the <a href="/devel:events" class="wikilink1" title="devel:events" data-wiki-id="devel:events">events</a> page. </p> </div> <div class="secedit editbutton_section editbutton_2"><form class="button btn_secedit" method="post" action="/devel:action_plugins"><div class="no"><input type="hidden" name="do" value="edit" /><input type="hidden" name="rev" value="1693605142" /><input type="hidden" name="summary" value="[Working principle] " /><input type="hidden" name="target" value="section" /><input type="hidden" name="hid" value="working_principle" /><input type="hidden" name="codeblockOffset" value="0" /><input type="hidden" name="range" value="529-1300" /><button type="submit" title="Working principle">Edit</button></div></form></div> <h2 class="sectionedit3" id="synopsis">Synopsis</h2> <div class="level2"> <p> An Action Plugin <em>Example</em> needs: </p> <ul> <li class="level1"><div class="li"> class name <code>action_plugin_example</code></div> </li> <li class="level1"><div class="li"> which extends <a href="https://codesearch.dokuwiki.org/search?project=dokuwiki&defs=ActionPlugin&path=ActionPlugin" class="interwiki plugin_xref" title="view definition for ActionPlugin">ActionPlugin</a><sup><a href="#fn__1" id="fnt__1" class="fn_top">1)</a></sup>. </div> </li> <li class="level1"><div class="li"> to be stored in a file <code>lib/plugins/example/action.php</code>.</div> </li> </ul> <p> Moreover, a <a href="/devel:plugin_info" class="wikilink1" title="devel:plugin_info" data-wiki-id="devel:plugin_info">plugin.info.txt</a> file is needed. For full details of plugins and their files and how to create more action components refer to <a href="/devel:plugin_file_structure" class="wikilink1" title="devel:plugin_file_structure" data-wiki-id="devel:plugin_file_structure">plugin file structure</a>. </p> <ul> <li class="level1"><div class="li"> The plugin must declare one method <code>register()</code> and some handler that is registered there.</div> </li> <li class="level1"><div class="li"> External libs must be loaded at the time the plugin needs them or in the constructor and not at the top of the file</div> </li> </ul> </div> <div class="secedit editbutton_section editbutton_3"><form class="button btn_secedit" method="post" action="/devel:action_plugins"><div class="no"><input type="hidden" name="do" value="edit" /><input type="hidden" name="rev" value="1693605142" /><input type="hidden" name="summary" value="[Synopsis] " /><input type="hidden" name="target" value="section" /><input type="hidden" name="hid" value="synopsis" /><input type="hidden" name="codeblockOffset" value="0" /><input type="hidden" name="range" value="1301-2030" /><button type="submit" title="Synopsis">Edit</button></div></form></div> <h3 class="sectionedit4" id="required_methods">Required methods</h3> <div class="level3"> <p> An action plugin requires at least two methods: </p> <ul> <li class="level1"><div class="li"> <strong><code>register(EventHandler $controller)</code></strong> Use this method to register your handlers with the DokuWiki's event controller</div> </li> <li class="level1"><div class="li"> <strong><code><event handler>(Event $event, $param)</code></strong> Your event handler(s), that perform your actions when they are triggered.</div> </li> </ul> <p> You can register multiple events in a single action plugin. When doing this you may need multiple <code><event handler>()</code> functions. </p> </div> <div class="secedit editbutton_section editbutton_4"><form class="button btn_secedit" method="post" action="/devel:action_plugins"><div class="no"><input type="hidden" name="do" value="edit" /><input type="hidden" name="rev" value="1693605142" /><input type="hidden" name="summary" value="[Required methods] " /><input type="hidden" name="target" value="section" /><input type="hidden" name="hid" value="required_methods" /><input type="hidden" name="codeblockOffset" value="0" /><input type="hidden" name="range" value="2031-2489" /><button type="submit" title="Required methods">Edit</button></div></form></div> <h3 class="sectionedit5" id="inherited_methods">Inherited methods</h3> <div class="level3"> <ul> <li class="level1"><div class="li"> See <a href="/devel:common_plugin_functions" class="wikilink1" title="devel:common_plugin_functions" data-wiki-id="devel:common_plugin_functions">common plugin functions</a> for inherited function available to all plugins. e.g. localisation, configuration and introspection.</div> </li> </ul> </div> <div class="secedit editbutton_section editbutton_5"><form class="button btn_secedit" method="post" action="/devel:action_plugins"><div class="no"><input type="hidden" name="do" value="edit" /><input type="hidden" name="rev" value="1693605142" /><input type="hidden" name="summary" value="[Inherited methods] " /><input type="hidden" name="target" value="section" /><input type="hidden" name="hid" value="inherited_methods" /><input type="hidden" name="codeblockOffset" value="0" /><input type="hidden" name="range" value="2490-2661" /><button type="submit" title="Inherited methods">Edit</button></div></form></div> <h2 class="sectionedit6" id="register_method">register() method</h2> <div class="level2"> <p> The <code><a href="https://codesearch.dokuwiki.org/search?project=dokuwiki&defs=register&path=" class="interwiki plugin_xref" title="search definitions for register()">register()</a></code> method is used to subscribe an event. The following code shows a generic version to register an event. </p> <pre class="code php"><span class="co4">/** * plugin should use this method to register its handlers with the DokuWiki's * event controller * * @param EventHandler $controller DokuWiki's event controller object. * Also available as global $EVENT_HANDLER * @return void not required */</span> <span class="kw2">public</span> <span class="kw2">function</span> register<span class="br0">(</span>EventHandler <span class="re0">$controller</span><span class="br0">)</span> <span class="br0">{</span> <span class="re0">$controller</span><span class="sy0">-></span><span class="me1">register_hook</span><span class="br0">(</span><span class="sy0"><</span>EVENT NAME<span class="sy0">>,</span> <span class="sy0"><</span>EVENT ADVISE<span class="sy0">>,</span> <span class="re0">$this</span><span class="sy0">,</span> <span class="sy0"><</span>event handler function<span class="sy0">>,</span> <span class="sy0"><</span>parameter to be passed to event handler<span class="sy0">>,</span> <span class="sy0"><</span>sequence number<span class="sy0">></span><span class="br0">)</span><span class="sy0">;</span> <span class="br0">}</span></pre> <p> The <code><a href="https://codesearch.dokuwiki.org/search?project=dokuwiki&defs=register_hook&path=" class="interwiki plugin_xref" title="view definition for register_hook">$controller->register_hook()</a></code> function is used to register the event. The parameters are: </p> <ol> <li class="level1"><div class="li"> <code><EVENT NAME></code>: Name of the event. All available events can be found at <a href="/devel:events_list" class="wikilink1" title="devel:events_list" data-wiki-id="devel:events_list">the Event Reference List</a>.</div> </li> <li class="level1"><div class="li"> <code><EVENT ADVISE></code>: can be either <code>BEFORE</code> or <code>AFTER</code>. This determines when you want to invoke the given event.</div> </li> <li class="level1"><div class="li"> <code>$this</code>: An object reference to your action class containing the <code><event handler function></code>, usually <code>$this</code>.</div> </li> <li class="level1"><div class="li"> <code><event handler function></code>: Name of the function to handle the event as string.</div> </li> <li class="level1"><div class="li"> <code><parameter></code>: (optional) parameter will passed directly and unchanged to your <code><event handler function>(Event $event, $parameter)</code> as second argument.</div> </li> <li class="level1"><div class="li"> <code><sequence number></code>: (optional) used to affect the order in which hooks are executed. Defaults to 0. It is recommended to use ranges of sequence numbers and avoid +/- PHP_INT_MAX:</div> </li> </ol> <div class="table sectionedit7"><table class="inline"> <tr class="row0"> <td class="col0 centeralign"> -3999 - -3000 </td><td class="col1"> for “very early” </td> </tr> <tr class="row1"> <td class="col0 centeralign"> -2999 - -2000 </td><td class="col1"> for “earlier” </td> </tr> <tr class="row2"> <td class="col0 centeralign"> -1999 - -1000 </td><td class="col1"> for “early” </td> </tr> <tr class="row3"> <td class="col0 centeralign"> -999 - -1 </td><td class="col1"> for “earlier than default” </td> </tr> <tr class="row4"> <td class="col0 centeralign"> 0 </td><td class="col1"> default </td> </tr> <tr class="row5"> <td class="col0 centeralign"> 1 - 999 </td><td class="col1"> for “later than default” </td> </tr> <tr class="row6"> <td class="col0 centeralign"> 1000 - 1999 </td><td class="col1"> for “late” </td> </tr> <tr class="row7"> <td class="col0 centeralign"> 2000 - 2999 </td><td class="col1"> for “later” </td> </tr> <tr class="row8"> <td class="col0 centeralign"> 3000 - 3999 </td><td class="col1"> for “very late” </td> </tr> </table></div> <div class="secedit editbutton_table editbutton_7"><form class="button btn_secedit" method="post" action="/devel:action_plugins"><div class="no"><input type="hidden" name="do" value="edit" /><input type="hidden" name="rev" value="1693605142" /><input type="hidden" name="summary" value="[Table] " /><input type="hidden" name="target" value="table" /><input type="hidden" name="hid" value="table" /><input type="hidden" name="range" value="4354-4665" /><button type="submit" title="Table">Edit</button></div></form></div> </div> <div class="secedit editbutton_section editbutton_6"><form class="button btn_secedit" method="post" action="/devel:action_plugins"><div class="no"><input type="hidden" name="do" value="edit" /><input type="hidden" name="rev" value="1693605142" /><input type="hidden" name="summary" value="[register() method] " /><input type="hidden" name="target" value="section" /><input type="hidden" name="hid" value="register_method" /><input type="hidden" name="codeblockOffset" value="0" /><input type="hidden" name="range" value="2662-4666" /><button type="submit" title="register() method">Edit</button></div></form></div> <h2 class="sectionedit8" id="event_handler_method"><event handler>() method</h2> <div class="level2"> <p> Have as many as necessary, can be given any name not already in use in this plugin or its ancestor classes. This function must be public. It will be called by DokuWiki's event controller. </p> <pre class="code php"><span class="co4">/** * custom event handler * * @param Event $event event object by reference * @param mixed $param (optional) the parameters passed to register_hook() * when this handler was registered * * @return void not required */</span> <span class="kw2">public</span> <span class="kw2">function</span> <span class="sy0"><</span>event_handler<span class="sy0">></span><span class="br0">(</span>Event <span class="re0">$event</span><span class="sy0">,</span> <span class="re0">$param</span><span class="br0">)</span> <span class="br0">{</span> <span class="co1">// custom script statements ...</span> <span class="br0">}</span></pre> <p> The passed arguments are: </p> <ol> <li class="level1"><div class="li"> <code>$event</code>: The event object. Further information on the passed event object can be found on the <a href="/devel:events#event_object" class="wikilink1" title="devel:events" data-wiki-id="devel:events">Event page</a>.</div> </li> <li class="level1"><div class="li"> <code>$param</code>: Data passed to the <code>register_hook()</code> function, when this handler was registered. Can be left out if not used.</div> </li> </ol> </div> <div class="secedit editbutton_section editbutton_8"><form class="button btn_secedit" method="post" action="/devel:action_plugins"><div class="no"><input type="hidden" name="do" value="edit" /><input type="hidden" name="rev" value="1693605142" /><input type="hidden" name="summary" value="[<event handler>() method] " /><input type="hidden" name="target" value="section" /><input type="hidden" name="hid" value="event_handler_method" /><input type="hidden" name="codeblockOffset" value="1" /><input type="hidden" name="range" value="4667-5553" /><button type="submit" title="<event handler>() method">Edit</button></div></form></div> <h2 class="sectionedit9" id="further_reading">Further reading</h2> <div class="level2"> <ul> <li class="level1"><div class="li"> <a href="/devel:events" class="wikilink1" title="devel:events" data-wiki-id="devel:events">Events</a></div> </li> <li class="level1"><div class="li"> <a href="/devel:events_list" class="wikilink1" title="devel:events_list" data-wiki-id="devel:events_list">Events list</a></div> </li> <li class="level1"><div class="li"> <a href="/devel:event_handlers" class="wikilink1" title="devel:event_handlers" data-wiki-id="devel:event_handlers">Event handlers</a></div> </li> <li class="level1"><div class="li"> <a href="http://www.dokuwiki.org/plugins?plugintype=4#extension__table" class="interwiki iw_plugintype" title="http://www.dokuwiki.org/plugins?plugintype=4#extension__table">Available action plugins</a></div> </li> <li class="level1"><div class="li"> <a href="/devel:plugin_programming_tips" class="wikilink1" title="devel:plugin_programming_tips" data-wiki-id="devel:plugin_programming_tips">Plugin programming tips</a></div> </li> <li class="level1"><div class="li"> <a href="/devel:plugins" class="wikilink1" title="devel:plugins" data-wiki-id="devel:plugins">Plugin Development</a></div> </li> </ul> </div> <div class="secedit editbutton_section editbutton_9"><form class="button btn_secedit" method="post" action="/devel:action_plugins"><div class="no"><input type="hidden" name="do" value="edit" /><input type="hidden" name="rev" value="1693605142" /><input type="hidden" name="summary" value="[Further reading] " /><input type="hidden" name="target" value="section" /><input type="hidden" name="hid" value="further_reading" /><input type="hidden" name="codeblockOffset" value="2" /><input type="hidden" name="range" value="5554-5772" /><button type="submit" title="Further reading">Edit</button></div></form></div> <h2 class="sectionedit10" id="examples">Examples</h2> <div class="level2"> <p> Here some examples: </p> <ul> <li class="level1"><div class="li"> Below: <a href="#sampleadd_always_a_javascript_file" title="devel:action_plugins ↵" class="wikilink1">Sample Action Plugin</a> – include javascript file in all pages</div> </li> <li class="level1"><div class="li"> Below: <a href="#sampleadd_toolbar_button" title="devel:action_plugins ↵" class="wikilink1">Sample Action Plugin</a> – insert button in toolbar</div> </li> <li class="level1 node"><div class="li"> Examples of <a href="/devel:event_handlers_code" class="wikilink1" title="devel:event_handlers_code" data-wiki-id="devel:event_handlers_code">Event handlers code</a> </div> <ul> <li class="level2"><div class="li"> <a href="/devel:event_handlers_code#eventcheck_plugin" class="wikilink1" title="devel:event_handlers_code" data-wiki-id="devel:event_handlers_code">eventCheck Plugin</a> – plugin to register all event and call them</div> </li> <li class="level2"><div class="li"> <a href="/devel:event_handlers_code#caching" class="wikilink1" title="devel:event_handlers_code" data-wiki-id="devel:event_handlers_code">Caching</a> – selective disabling</div> </li> <li class="level2"><div class="li"> <a href="/devel:event_handlers_code#headers_and_footers" class="wikilink1" title="devel:event_handlers_code" data-wiki-id="devel:event_handlers_code">Headers and Footers</a> – add your own stuff to top and bottom of page</div> </li> <li class="level2"><div class="li"> <a href="/devel:event_handlers_code#content_modification" class="wikilink1" title="devel:event_handlers_code" data-wiki-id="devel:event_handlers_code">Content Modification</a> – points event that handles directly wikicontent</div> </li> </ul> </li> <li class="level1"><div class="li"> Dumps of <a href="/devel:event_objects" class="wikilink1" title="devel:event_objects" data-wiki-id="devel:event_objects">Event Objects</a> – examples of event objects for some events</div> </li> <li class="level1"><div class="li"> Implementation of a custom <a href="/devel:section_editor" class="wikilink1" title="devel:section_editor" data-wiki-id="devel:section_editor">Section Editor</a></div> </li> <li class="level1"><div class="li"> <a href="/devel:plugin_programming_tips#handle_json_ajax_request" class="wikilink1" title="devel:plugin_programming_tips" data-wiki-id="devel:plugin_programming_tips">Handle JSON ajax request</a></div> </li> </ul> </div> <div class="secedit editbutton_section editbutton_10"><form class="button btn_secedit" method="post" action="/devel:action_plugins"><div class="no"><input type="hidden" name="do" value="edit" /><input type="hidden" name="rev" value="1693605142" /><input type="hidden" name="summary" value="[Examples] " /><input type="hidden" name="target" value="section" /><input type="hidden" name="hid" value="examples" /><input type="hidden" name="codeblockOffset" value="2" /><input type="hidden" name="range" value="5773-6607" /><button type="submit" title="Examples">Edit</button></div></form></div> <h3 class="sectionedit11" id="sampleadd_always_a_javascript_file">Sample: add always a JavaScript file</h3> <div class="level3"> <p> Insert a javascript script link in all pages. </p> <ul> <li class="level1"><div class="li"> Register the <a href="/devel:events_list#tpl_metaheader_output" class="wikilink1" title="devel:events_list" data-wiki-id="devel:events_list">TPL_METAHEADER_OUTPUT</a> event, with a before EVENT_ADVISE.</div> </li> <li class="level1"><div class="li"> Add javascript information to “script” meta headers as array type.</div> </li> </ul> <dl class="code"> <dt><a href="/_export/code/devel:action_plugins?codeblock=2" title="Download Snippet" class="mediafile mf_php">lib/plugins/example/action.php</a></dt> <dd><pre class="code php"><span class="kw2"><?php</span> <span class="kw2">use</span> dokuwiki\Extension\ActionPlugin<span class="sy0">;</span> <span class="kw2">use</span> dokuwiki\Extension\EventHandler<span class="sy0">;</span> <span class="kw2">use</span> dokuwiki\Extension\Event<span class="sy0">;</span> <span class="co4">/** * Example Action Plugin: Example Component. * * @author Samuele Tognini <samuele@cli.di.unipi.it> */</span> <span class="kw2">class</span> action_plugin_example <span class="kw2">extends</span> ActionPlugin <span class="br0">{</span> <span class="co4">/** * Register its handlers with the DokuWiki's event controller * * @param EventHandler $controller event controller object */</span> <span class="kw2">public</span> <span class="kw2">function</span> register<span class="br0">(</span>EventHandler <span class="re0">$controller</span><span class="br0">)</span> <span class="br0">{</span> <span class="re0">$controller</span><span class="sy0">-></span><span class="me1">register_hook</span><span class="br0">(</span><span class="st_h">'TPL_METAHEADER_OUTPUT'</span><span class="sy0">,</span> <span class="st_h">'BEFORE'</span><span class="sy0">,</span> <span class="re0">$this</span><span class="sy0">,</span> <span class="st_h">'hookJsScript'</span><span class="br0">)</span><span class="sy0">;</span> <span class="br0">}</span> <span class="co4">/** * Hook js script into page headers. * * @param Event $event event object * * @author Samuele Tognini <samuele@cli.di.unipi.it> */</span> <span class="kw2">public</span> <span class="kw2">function</span> hookJsScript<span class="br0">(</span>Event <span class="re0">$event</span><span class="br0">)</span> <span class="br0">{</span> <span class="re0">$event</span><span class="sy0">-></span><span class="me1">data</span><span class="br0">[</span><span class="st_h">'script'</span><span class="br0">]</span><span class="br0">[</span><span class="br0">]</span> <span class="sy0">=</span> <span class="br0">[</span> <span class="st_h">'type'</span> <span class="sy0">=></span> <span class="st_h">'text/javascript'</span><span class="sy0">,</span> <span class="st_h">'charset'</span> <span class="sy0">=></span> <span class="st_h">'utf-8'</span><span class="sy0">,</span> <span class="st_h">'_data'</span> <span class="sy0">=></span> <span class="st_h">''</span><span class="sy0">,</span> <span class="st_h">'src'</span> <span class="sy0">=></span> DOKU_PLUGIN <span class="sy0">.</span> <span class="st_h">'example/example.js'</span> <span class="br0">]</span><span class="sy0">;</span> <span class="br0">}</span> <span class="br0">}</span></pre> </dd></dl> </div> <div class="secedit editbutton_section editbutton_11"><form class="button btn_secedit" method="post" action="/devel:action_plugins"><div class="no"><input type="hidden" name="do" value="edit" /><input type="hidden" name="rev" value="1693605142" /><input type="hidden" name="summary" value="[Sample: add always a JavaScript file] " /><input type="hidden" name="target" value="section" /><input type="hidden" name="hid" value="sampleadd_always_a_javascript_file" /><input type="hidden" name="codeblockOffset" value="2" /><input type="hidden" name="range" value="6608-7979" /><button type="submit" title="Sample: add always a JavaScript file">Edit</button></div></form></div> <h3 class="sectionedit12" id="sampleadd_toolbar_button">Sample: add toolbar button</h3> <div class="level3"> <p> Inserts a button into the editor toolbar: </p> <ul> <li class="level1"><div class="li"> registers as handler for the <a href="/devel:events_list#toolbar_define" class="wikilink1" title="devel:events_list" data-wiki-id="devel:events_list">TOOLBAR_DEFINE</a> event with an AFTER advise</div> </li> <li class="level1"><div class="li"> adds a button definition to the event's <code>data</code></div> </li> </ul> <dl class="code"> <dt><a href="/_export/code/devel:action_plugins?codeblock=3" title="Download Snippet" class="mediafile mf_php">lib/plugin/example/action.php</a></dt> <dd><pre class="code php"><span class="kw2"><?php</span> <span class="kw2">use</span> dokuwiki\Extension\ActionPlugin<span class="sy0">;</span> <span class="kw2">use</span> dokuwiki\Extension\EventHandler<span class="sy0">;</span> <span class="kw2">use</span> dokuwiki\Extension\Event<span class="sy0">;</span> <span class="co4">/** * Example Action Plugin: Inserts a button into the toolbar * * @author Gina Haeussge <osd@foosel.net> */</span> <span class="kw2">class</span> action_plugin_example <span class="kw2">extends</span> ActionPlugin <span class="br0">{</span> <span class="co4">/** * Register the event handlers * * @param EventHandler $controller DokuWiki's event controller object */</span> <span class="kw2">public</span> <span class="kw2">function</span> register<span class="br0">(</span>EventHandler <span class="re0">$controller</span><span class="br0">)</span> <span class="br0">{</span> <span class="re0">$controller</span><span class="sy0">-></span><span class="me1">register_hook</span><span class="br0">(</span><span class="st_h">'TOOLBAR_DEFINE'</span><span class="sy0">,</span> <span class="st_h">'AFTER'</span><span class="sy0">,</span> <span class="re0">$this</span><span class="sy0">,</span> <span class="st_h">'insert_button'</span><span class="sy0">,</span> <span class="br0">[</span><span class="br0">]</span><span class="br0">)</span><span class="sy0">;</span> <span class="br0">}</span> <span class="co4">/** * Inserts the toolbar button * * @param Event $event event object * @param mixed $param [the parameters passed as fifth argument to * register_hook() when this handler was registered, * here just an empty array..] */</span> <span class="kw2">public</span> <span class="kw2">function</span> insert_button<span class="br0">(</span>Event <span class="re0">$event</span><span class="sy0">,</span> <span class="re0">$param</span><span class="br0">)</span> <span class="br0">{</span> <span class="re0">$event</span><span class="sy0">-></span><span class="me1">data</span><span class="br0">[</span><span class="br0">]</span> <span class="sy0">=</span> <span class="br0">[</span> <span class="st_h">'type'</span> <span class="sy0">=></span> <span class="st_h">'format'</span><span class="sy0">,</span> <span class="st_h">'title'</span> <span class="sy0">=></span> <span class="re0">$this</span><span class="sy0">-></span><span class="me1">getLang</span><span class="br0">(</span><span class="st_h">'qb_abutton'</span><span class="br0">)</span><span class="sy0">,</span> <span class="st_h">'icon'</span> <span class="sy0">=></span> <span class="st_h">'../../plugins/actionexample/abutton.png'</span><span class="sy0">,</span> <span class="st_h">'open'</span> <span class="sy0">=></span> <span class="st_h">'<abutton>'</span><span class="sy0">,</span> <span class="st_h">'close'</span> <span class="sy0">=></span> <span class="st_h">'</abutton>'</span><span class="sy0">,</span> <span class="br0">]</span><span class="sy0">;</span> <span class="br0">}</span> <span class="br0">}</span></pre> </dd></dl> </div> <div class="secedit editbutton_section editbutton_12"><form class="button btn_secedit" method="post" action="/devel:action_plugins"><div class="no"><input type="hidden" name="do" value="edit" /><input type="hidden" name="rev" value="1693605142" /><input type="hidden" name="summary" value="[Sample: add toolbar button] " /><input type="hidden" name="target" value="section" /><input type="hidden" name="hid" value="sampleadd_toolbar_button" /><input type="hidden" name="codeblockOffset" value="3" /><input type="hidden" name="range" value="7980-9505" /><button type="submit" title="Sample: add toolbar button">Edit</button></div></form></div> <h3 class="sectionedit13" id="samplehandle_ajax_requests">Sample: handle ajax requests</h3> <div class="level3"> <p> See <a href="/devel:plugin_programming_tips#handle_json_ajax_request" class="wikilink1" title="devel:plugin_programming_tips" data-wiki-id="devel:plugin_programming_tips">Handle JSON ajax request</a> </p> </div> <div class="secedit editbutton_section editbutton_13"><form class="button btn_secedit" method="post" action="/devel:action_plugins"><div class="no"><input type="hidden" name="do" value="edit" /><input type="hidden" name="rev" value="1693605142" /><input type="hidden" name="summary" value="[Sample: handle ajax requests] " /><input type="hidden" name="target" value="section" /><input type="hidden" name="hid" value="samplehandle_ajax_requests" /><input type="hidden" name="codeblockOffset" value="4" /><input type="hidden" name="range" value="9506-" /><button type="submit" title="Sample: handle ajax requests">Edit</button></div></form></div><div class="footnotes"> <div class="fn"><sup><a href="#fnt__1" id="fn__1" class="fn_bot">1)</a></sup> <div class="content">defined in <code>lib/Extension/ActionPlugin.php</code>, before called <code>DokuWiki_Action_Plugin</code> which is still available as alias</div></div> </div> <!-- wikipage stop --> </div> <div class="docInfo"><bdi>devel/action_plugins.txt</bdi> · Last modified: <time datetime="2023-09-01T23:52:22+0200">2023-09-01 23:52</time> by <bdi>Klap-in</bdi></div> <hr class="a11y" /> </div></main><!-- /content --> <!-- PAGE ACTIONS --> <nav id="dokuwiki__pagetools" aria-labelledby="dokuwiki__pagetools__heading"> <h3 class="a11y" id="dokuwiki__pagetools__heading">Page Tools</h3> <div class="tools"> <ul> <li class="edit"><a href="/devel:action_plugins?do=edit" title="Edit this page [e]" rel="nofollow" accesskey="e"><span>Edit this page</span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M20.71 7.04c.39-.39.39-1.04 0-1.41l-2.34-2.34c-.37-.39-1.02-.39-1.41 0l-1.84 1.83 3.75 3.75M3 17.25V21h3.75L17.81 9.93l-3.75-3.75L3 17.25z"/></svg></a></li><li class="revs"><a href="/devel:action_plugins?do=revisions" title="Old revisions [o]" rel="nofollow" accesskey="o"><span>Old revisions</span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M11 7v5.11l4.71 2.79.79-1.28-4-2.37V7m0-5C8.97 2 5.91 3.92 4.27 6.77L2 4.5V11h6.5L5.75 8.25C6.96 5.73 9.5 4 12.5 4a7.5 7.5 0 0 1 7.5 7.5 7.5 7.5 0 0 1-7.5 7.5c-3.27 0-6.03-2.09-7.06-5h-2.1c1.1 4.03 4.77 7 9.16 7 5.24 0 9.5-4.25 9.5-9.5A9.5 9.5 0 0 0 12.5 2z"/></svg></a></li><li class="backlink"><a href="/devel:action_plugins?do=backlink" title="Backlinks" rel="nofollow"><span>Backlinks</span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M10.59 13.41c.41.39.41 1.03 0 1.42-.39.39-1.03.39-1.42 0a5.003 5.003 0 0 1 0-7.07l3.54-3.54a5.003 5.003 0 0 1 7.07 0 5.003 5.003 0 0 1 0 7.07l-1.49 1.49c.01-.82-.12-1.64-.4-2.42l.47-.48a2.982 2.982 0 0 0 0-4.24 2.982 2.982 0 0 0-4.24 0l-3.53 3.53a2.982 2.982 0 0 0 0 4.24m2.82-4.24c.39-.39 1.03-.39 1.42 0a5.003 5.003 0 0 1 0 7.07l-3.54 3.54a5.003 5.003 0 0 1-7.07 0 5.003 5.003 0 0 1 0-7.07l1.49-1.49c-.01.82.12 1.64.4 2.43l-.47.47a2.982 2.982 0 0 0 0 4.24 2.982 2.982 0 0 0 4.24 0l3.53-3.53a2.982 2.982 0 0 0 0-4.24.973.973 0 0 1 0-1.42z"/></svg></a></li><li class="top"><a href="#dokuwiki__top" title="Back to top [t]" rel="nofollow" accesskey="t"><span>Back to top</span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12z"/></svg></a></li> </ul> </div> </nav> </div><!-- /wrapper --> <!-- ********** FOOTER ********** --> <footer id="dokuwiki__footer"><div class="pad"> <div class="license">Except where otherwise noted, content on this wiki is licensed under the following license: <bdi><a href="https://creativecommons.org/licenses/by-sa/4.0/deed.en" rel="license" class="urlextern">CC Attribution-Share Alike 4.0 International</a></bdi></div> <div class="buttons"> <a href="https://creativecommons.org/licenses/by-sa/4.0/deed.en" rel="license"><img src="/lib/images/license/button/cc-by-sa.png" alt="CC Attribution-Share Alike 4.0 International" /></a> <a href="https://www.dokuwiki.org/donate" title="Donate" ><img src="/lib/tpl/dokuwiki/images/button-donate.gif" width="80" height="15" alt="Donate" /></a> <a href="https://php.net" title="Powered by PHP" ><img src="/lib/tpl/dokuwiki/images/button-php.gif" width="80" height="15" alt="Powered by PHP" /></a> <a href="//validator.w3.org/check/referer" title="Valid HTML5" ><img src="/lib/tpl/dokuwiki/images/button-html5.png" width="80" height="15" alt="Valid HTML5" /></a> <a href="//jigsaw.w3.org/css-validator/check/referer?profile=css3" title="Valid CSS" ><img src="/lib/tpl/dokuwiki/images/button-css.png" width="80" height="15" alt="Valid CSS" /></a> <a href="https://dokuwiki.org/" title="Driven by DokuWiki" ><img src="/lib/tpl/dokuwiki/images/button-dw.png" width="80" height="15" alt="Driven by DokuWiki" /></a> </div> <div style="margin-top: 2em; font-size:90%" class="dokuwiki"><div style="float:right"><a href="http://www.splitbrain.org/personal#imprint" style="float:right; text-decoration: none; color:#333">Imprint</a></div></div><!-- Include for DokuWiki site wide top bar --> <style type="text/css"> @media screen { body { padding-top: 30px; } #global__header { position: absolute; top: 0; left: 0; text-align: left; vertical-align: middle; line-height: 1.5; background-color: #333; box-shadow: 0 0 8px rgba(0,0,0,0.5); width: 100%; margin: 0; padding: 5px 20px; -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box; white-space: nowrap; overflow: hidden; } #global__header h2 { position: absolute; left: -99999em; top: 0; overflow: hidden; display: inline; } #global__header ul, #global__header li { margin: 0; padding: 0; list-style: none; display: inline; line-height: 1.5; } #global__header a { color: #bbb; text-decoration: none; margin-right: 20px; font-size: 14px; font-weight: normal; } #global__header a:hover, #global__header a:active, #global__header a:focus { color: #fff; text-decoration: underline; } #global__header form { float: right; margin: 0 0 0 20px; } #global__header input { background-color: #333; background-image: none; border: 1px solid #bbb; color: #fff; box-shadow: none; border-radius: 2px; margin: 0; line-height: normal; padding: 1px 0 1px 0; height: auto; } #global__header input.button { border: none; color: #bbb; } #global__header input.button:hover, #global__header input.button:active, #global__header input.button:focus { color: #fff; text-decoration: underline; } } /* /@media */ @media only screen and (min-width: 601px) { /* changes specific for www.dokuwiki.org */ #dokuwiki__header { padding-top: 3em; } #dokuwiki__usertools { top: 3em; } /* changes specific for bugs.dokuwiki.org */ div#container div#showtask { top: 40px; } } /* /@media */ @media only screen and (max-width: 600px) { body { padding-top: 0; } #global__header { position: static; white-space: normal; overflow: auto; } #global__header form { float: none; display: block; margin: 0 0 .4em; } } /* /@media */ @media print { #global__header { display: none; } } /* /@media */ </style> <div id="global__header"> <h2>Global DokuWiki Links</h2> <form method="get" action="https://search.dokuwiki.org/" target="_top"> <input type="text" name="q" title="Search all DokuWiki sites at once" class="input" /> <input type="submit" title="Search all DokuWiki sites at once" value="Search" class="button" /> </form> <ul> <li><a href="https://download.dokuwiki.org" title="Download the latest release" target="_top">Download</a></li> <li><a href="https://www.dokuwiki.org" title="Read the DokuWiki documentation" target="_top">Wiki</a></li> <li><a href="https://forum.dokuwiki.org" title="Ask questions in the DokuWiki forum" target="_top">Forum</a></li> <li><a href="https://irc.dokuwiki.org" title="Check IRC chat logs or join the chat" target="_top">IRC</a></li> <li><a href="https://github.com/splitbrain/dokuwiki/issues" title="Report and track bugs" target="_top">Bugs</a></li> <li><a href="https://translate.dokuwiki.org/" title="Help translating the DokuWiki interface" target="_top">Translate</a></li> <li><a href="https://github.com/splitbrain/dokuwiki" title="Access the most recent git commits" target="_top">Git</a></li> <li><a href="https://xref.dokuwiki.org/reference/dokuwiki/" title="Cross-Reference of the DokuWiki source code" target="_top">XRef</a></li> <li><a href="https://codesearch.dokuwiki.org/" title="Search through the sources of DokuWiki, plugins and templates" target="_top">Code Search</a></li> </ul> </div> <!-- end of DokuWiki top bar include --> </div></footer><!-- /footer --> </div></div><!-- /site --> <div class="no"><img src="/lib/exe/taskrunner.php?id=devel%3Aaction_plugins&1742899529" width="2" height="1" alt="" /></div> <div id="screen__mode" class="no"></div></body> </html>