Version-adaptive documentation

Concept I am looking into the possibility of making certain pages of our Wiki be adaptive to the user's GNU Radio version (or desired version) so that sections which don't apply would be hidden. This would make cleaner page presentations and reduce the clutter of unrelated information.

Proof of Concept

Phase 1

Plan


 * Emulate MediaWiki with a local nodeJS program to allow non-destructive testing.
 * Create a test page with sections which can be hidden, based on a 'data-vad' attribute.
 * Create a form to enter a Version selection.
 * Before displaying the page, execute a script to show or hide sections based on the Version selection.

Test results

Page before any selections are made (i.e. all information is shown).

Version selection before clicking 'Submit'.

Version 3.9 selected. Note that the items for 3.8 are not shown (hidden).

Conclusions
 * 1) I have found that this methodology for hiding sections of a document is relatively easy.
 * 2) There are several groups of pages which might benefit from this method:
 * 3) Block docs
 * 4) Tutorials
 * 5) Installation instructions
 * 6) Specific examples are:
 * 7) Message_Debug
 * 8) Packet_Communications
 * 9) LinuxInstall

Phase 2

Plan


 * Use a 'test' MediaWiki.
 * Put a version selection menu below the "Tools" group in the left-hand Navigation section.
 * Create a test page with HTML "div" tags which can be hidden, based on a 'data-vad' attribute.
 * Embed a JavaScript link at the end of the page HTML to perform the requested selection.

Test results

Page before any selections are made (i.e. all information is shown).

Version 3.9 selected. Note that the items for 3.8 are not shown (hidden).

Conclusions
 * 1) Testing with the Message_Debug_Test_Page proves the basic concept.
 * 2) You can select multiple versions such as 3.9 and 3.10, but there are no smarts to know that the 3.9 content applies to 3.10, so selecting 3.10 only yields no content.
 * 3) Version 4.0 can be added whenever we want.
 * 4) Additional work would need to be done in order to change the Table of Contents based on the version selection.

Phase 3

Plan


 * Revise Message_Debug_Test_Page to show version 3.10 properly
 * Make a test version of Packet_Communications

How to mark up a MediaWiki doc for Version-adaptive documentation

 * Open the document to Edit
 * Enter the first three lines as follows:



(using the applicable version or comma separated versions) and
 * For each section of content which applies specifically to one or more GNU Radio versions, surround it with

A section can include any amount of headings, paragraphs, and other content.


 * Keep in mind that the majority of a document will apply to all versions, and therefore does not need  any  version-related markup.


 * Here is an example taken from Message_Debug:

Versions 3.9 and 3.10

 * print
 * Prints all messages to standard out. If the message is a PDU, it will receive special formatting and the  block parameter will determine if the uniform vector is printed or not.


 * store
 * Stores the message in an internal vector. It works in conjunction with a message_debug::get_message(size_t i) call that allows us to retrieve message i afterward.


 * print_pdu
 * PDU messages are redirected to the  port. This is included for compatibility and is no longer recommended for use.


 * Add a last line:

There may be another Category as well, such as 'Category:Block Docs' or 'Category:Tutorials'. Put each one on a separate line.

Lessons learned using JavaScript in MediaWiki:Common.js

 * The JavaScript must conform to ECMAScript 2009, also known as ES5.
 * The script is triggered by MediaWiki, so no additional trigger is needed (such as document.body.onload).
 * The content is inserted at the end of every page and is wrapped in  and   tags by MediaWiki.
 * Careful consideration must be given to avoid affecting unintended MediaWiki pages.