Extension:Code
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/ |
|
|
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 yourextensions/
folder. - Add the following code at the bottom of your LocalSettings.php file:
wfLoadExtension( 'Code' );
- 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]- â 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.