User:MaxEnt/Bloop

From mediawiki.org

Purpose[edit]

To employ balloon tags within a template. See Extension:Balloons.

Status[edit]

This was my first attempt at extension development. Version 0.1 is rather crude.

As a learning exercise, this template demonstrates that it is relatively easy to wrap a tag extension with a parser extension if one requires the use of a tag extension within templates.

Apparently it is possible to add complexity to a tag extension to the same purpose, but my feeble efforts in this direction did not succeed. The documentation here could use some work.

Advantages of parser wrapper[edit]

Bonus for wrapping a parser around Balloons is separation of effort and the option to provide an alternate syntax, less verbose.

For the wiki I maintain at work, I can't go around asking inexperienced editors to author the following syntax in order for wiki markup to work as expected:

 <span id="myContent" style="display:none">
 <font color="red">Hello!</font> I am also a ''balloon'' tooltip
 </span>

Nor was it previously possible to hide this mess within a template.

Last, but not least, by rewriting bloop parser syntax into balloon tag syntax, I remain blissfully ignorant of the balloon popup JavaScript, where all the hard work is done. Nice.

Name[edit]

I considered naming this Balloon_tooltip_parser which would be fine for embedding inside templates, but I might also use this in article space in my own wiki, so I decided on something short and evocative of my shallow foundation.

Limitations[edit]

Not using load[edit]

In particular, it should be using the Load method instead, which preserves more wiki markup. I need to dust off my PHP to create an incrementing id counter, so I left that for another day. It's also possible that MediaWiki has a way to embed a token or some magic syntax which will function for this purpose.

Only two parameters[edit]

Only the basic balloon functions are wrapped, not yet having taken the time to figure out a good mapping for the feature set as a whole.

Source[edit]

 
<?php
# Patterned after http://www.mediawiki.org/wiki/Manual:Parser_functions

$wgExtensionFunctions[] = 'wfBloopExtension';
$wgHooks['LanguageGetMagic'][] = 'bloop_parser_Magic';

$wgExtensionCredits['parserhook'][] = array(
        'name' => 'Bloop (version 0.1)',
        'author' =>'MaxEnt', 
        'url' => 'http://www.mediawiki.org/wiki/User:MaxEnt/Bloop',
        'description' => 'Use balloon tags with template parameters'
);

function wfBloopExtension() {  # AKA Starup
        global $wgParser;
        $wgParser->setFunctionHook( 'bloop', 'bloop_parser_Render' );

}

function bloop_parser_Magic( &$magicWords, $langCode ) {
        $magicWords['bloop'] = array( 0, 'bloop' );
        return true; # allows other functions to load
}

function bloop_parser_Render( &$parser, $param1 = '', $param2 = '' ) {
        # The input parameters are wikitext with templates expanded
        # The output should be wikitext too
        $title = "title=\"${param2}\"";
        $output = "<balloon ${title}>${param1}</balloon>";
        # $output = "param1 is $param1 and param2 is $param2";
        return $output;
}
?>

Pretty simple, in'it?

Reference[edit]

- Automatic numbering in CSS 2.1 is controlled with two properties, 'counter-increment' and 'counter-reset'.