From mediawiki.org
Jump to navigation Jump to search
MediaWiki extensions manual
OOjs UI icon advanced-invert.svg
Release status: unmaintained
Implementation Tag , Extended syntax , Hook
Description Provides tags to control whitespace
Author(s) Van de Buggertalk
Latest version 0.1.0 (2012-03-19)
MediaWiki 1.18+
License GNU Affero General Public License 3.0
  • ‎<dws />
  • ‎<nl />
Translate the WhiteSpace extension if it is available at translatewiki.net

Check usage and version matrix.

The WhiteSpace extension provides two tags to control whitespace in templates: ‎<dws /> discards itself and all whitespace (including newlines) after the tag, ‎<nl /> replaces itself with a newline.


In wikitext spaces and newlines do matter. Leading space causes a paragraph to be verbatim, newline terminates a list item, etc. This means that template code cannot be formatted freely. For example, two subsequent template calls:

{{ Template1 }}{{ Template2 }}

being reformatted as:

{{ Template1 }}
{{ Template2 }}

may produce different result (e. g. two list items instead of one). This is not a big deal for a simple template, but it quickly become a real issue for complicated templates. Let us consider a real example, a small part of Template:Extension:

   {{#if: {{{username|}}} |<!--
   -->{{#ifeq: {{{username}}}|{{{author|{{{username}}}<!-- -->}}}|<!--
      -->{{{author}}} (<!--
   --><sup><small>[[User talk:{{{username}}}|{{int:talkpagelinktext}}]]</small></sup><!--
   -->{{#ifeq: {{{username}}}|{{{author|{{{username}}}<!-- -->}}}|<!--

HTML comments (<!-- -->) allows splitting template code to lines but it pollutes template code so the overall result is not so good. Using <dws/> the code can be reformatted as:

{{  #if: {{{ username | }}} 
    |   {{  #ifeq: {{{ username }}} | {{{ author | {{{ username }}} }}}
            |   nothing
            |   {{{ author }}}<dws/>
        [[User:{{{ username }}}|{{{ username }}}]]<dws/>
        <sup><small>[[User talk:{{{ username }}}|{{ int: talkpagelinktext }}]]</small></sup><dws/>
        {{  #ifeq: {{{ username }}} | {{{ author | {{{ username }}} }}}
            |   nothing
            |   )
    |   {{{ author }}}

Of course, it is just another style of formatting, but <dws/> allows using this style regularly and uniformly.


git clone https://gerrit.wikimedia.org/r/mediawiki/extensions/WhiteSpace.git


Note: This extension requires patching MediaWiki core. The one-line patch introduces a parser hook which makes implementation of this extension possible. See Requests for comment/New hook: ParserBeforePreprocess for rationale.

In the MediaWiki root directory:

$ patch -p0 -i extensions/WhiteSpace/MediaWiki-1.18.1.patch

The add to your `LocalSettings.php ':

require_once( "$IP/extensions/WhiteSpace/WhiteSpace.php" );

Installing on MediaWiki v1.25 or newer[edit]

The `wfRunHooks` function has been deprecated since v1.25, so the MediaWiki-1.18.1.patch patch file will not work and you will see a "Fatal Error" or "ParseError".

Instead, manually edit MediaWiki core file `includes/parser/Parser.php`. Find function `preprocessToDom` (around line 2952) and add this as the first line in that function:

 Hooks::run( 'ParserBeforePreprocess', array( $this, &$text, $flags ) );

Known issues[edit]

  • Patching the MediaWiki core required. :-(