Extension:Page Forms/Developers' documentation

From mediawiki.org

This page holds information about the Page Forms code, for developers who want to better understand it, modify it, or create code that ties into it.

Code[edit]

To view the code online, including version history for each file, you can go here.

Modifying or improving Page Forms[edit]

There's certainly no shortage of ways to improve Page Forms , including bugs that can be fixed, interface elements that can be improved, or new features that can be added. If you are a developer, or simply a user with some technical skill, any help you can provide in improving the software is welcome: Page Forms would not be at its current state without the contributions of many people.

If you encounter some issue or limitation in Page Forms , and have an interest in fixing it, please either write Yaron, write about it on the talk page, or post a task on Phabricator.

You can also see the current list of Known bugs and planned features.

Defining new inputs[edit]

To create a new input type, you need to define a class for that input, and have it inherit (using the "extends" keyword) from the class PFFormInput, or one of its child classes. There are a number of methods that this class can or should define; the following are the crucial ones:

  • getName() - sets the name of the input within the form definition.
  • getParameters() - defines which parameters can be be passed in to this input, for use within Special:CreateForm.
  • getHtmlText() - defines the HTML to display this input.
  • getResourceModuleNames() - sets the name(s) of the ResourceLoader modules used by this input; if the input contains any JavaScript or CSS, they should be packaged into one or more modules, which are then specified here.

Other methods that can be overridden include the following:

  • getHandledPropertyTypes()
  • getDefaultParameters()
  • canHandleLists()
  • getDefaultCargoTypes()
  • getDefaultCargoTypeLists()
  • getOtherCargoTypesHandled()
  • getOtherCargoTypeListsHandled()

It's useful to look at the existing form input classes to see how all these functions are called.

One note on getting other parameters: let's say that your input is named "myinput", and is called in the form definition in the following way:

{{{field|Some Field|input type=myinput|color=orange|height=200}}}

Within your class's getHtmlText() method, $this->mOtherArgs will contain the "color=orange" and "height=200" key-value pairs, which the function can then use however it wants.

Finally, once your new input is defined, it needs to be registered. You do that by using the 'PageForms::FormPrinterSetup' hook. You need to register with that hook a function that looks like the following:

public static function onFormPrinterSetup( &$pfFormPrinter ) {
    $pfFormPrinter->registerInputType( 'MyInputClass' );
}

Testing[edit]

You can find information on testing the code at the page Testing.