Jump to content

Extension:Code

From mediawiki.org
MediaWiki extensions manual
Code
Release status: beta
Implementation Tag , User interface
Description Code pages, code actions and customizable code rendering.
Author(s) Martin Fischer (push-ftalk)
Latest version 0.1.0
MediaWiki
License MIT License
Download https://git.push-f.com/mw-code/
  • $wgnamespacesWithCodePages
  • $wglanguages
configurable

A MediaWiki extension that builds on SyntaxHighlight to provide the following (all in a configurable manner):

shorter tags
e.g. <query> instead of <syntaxhighlight lang=sparql>
code actions
e.g. automatically link the WDQS for SPARQL code blocks[1]
code pages
e.g. automatically higlight pages with names ending in .rq as SPARQL (and also display the code actions for them)
customizable code display via Lua/Scribunto
e.g. automatically link Wikidata identifiers in code blocks

Note that code actions are also linkable from other pages via the Special:CodeAction special page, e.g. Special:CodeAction/run/Example.rq attempts to execute the run action for the Example.rq code page and redirect the user accordingly.

Example configuration

[edit]
$wgCode_namespacesWithCodePages[NS_MAIN] = true; $wgCode_languages[] = [ 'tag' => 'query', 'pygmentsLexer' => 'sparql', 'actions' => [ 'run' => 'https://query.wikidata.org/#$code', 'embed' => 'https://query.wikidata.org/embed.html#$code', ], 'suffix' => '.rq', ]; 

Customizable code display

[edit]

The display of code blocks can be customized via Lua/Scribunto . For example if you specify e.g. "scribuntoModule" => "QueryCode" for a language then this extension will additionally invoke the Module:QueryCode Scribunto module for every code tag and code page. Such a module could look as follows:

local p = {} p.formatCode = function(frame)  local code, tag, is_code_page = frame.args[1], frame.args[2], frame.args[3]  local formattedCode = frame.args[4]  formattedCode = formattedCode:gsub('[QP][0-9]+', function(m)  local a = mw.html.create('a')  a:attr('href', 'https://www.wikidata.org/entity/' .. m)  a:wikitext(m)  return tostring(a)  end)  return formattedCode; end p.additionalOutput = function(frame)  local code, tag, is_code_page = frame.args[1], frame.args[2], frame.args[3]  -- HTML returned here is displayed after the code action links end return p 

Note that the returned strings are not parsed as Wikitext they must already be HTML; any dangerous tags and attributes are removed via MediaWiki's builtin Sanitizer class.

Installation

[edit]
  • Download and place the file(s) in a directory called Code in your extensions/ folder.
  • Add the following code at the bottom of your LocalSettings.php file:
    wfLoadExtension( 'Code' ); 
  • Yes Done – Navigate to Special:Version on your wiki to verify that the extension is successfully installed.

Visit Special:CodeAction it will tell you what other configuration you need.

(If you want syntax highlighting via SyntaxHighlight , additionally add wfLoadExtension('SyntaxHighlight_GeSHi'); to your LocalSettings.php).

Footnotes

[edit]
  1. While this can also be achieved just via MediaWiki templates, this bears the problem that | has to be escaped as {{!}}, which can be quite annoying for languages like SPARQL that use | as an operator.