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.