User:MaxEnt/Bloop

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'.