Extension:QPoll/Terminology and Syntax

== General information == Every page can have one or more of polls. Every poll may contain one or more questions. Every question represents the table with rows and columns counting from zero, where columns are categories (possible user answers) and rows are proposals (poll author's questions). Polls and their questions have xml-style attributes, some of those are mandatory and thus should be properly customized. Question(s) also has a header, which contains a common question, question attributes, optional metacategories line and a mandatory categories line.

Poll definition
Every poll is defined in the source text of the page enclosed into the tag. One wikipage can embed one or multiple polls in the source text.  ... Each question contain definition of metacategories and / or categories. Note that neither of them have any relation to MediaWikis categories, nor the Category namespace, unless you deliberately create one by adding such links.
 * poll_attributes : xml list of qpoll element attributes
 * ... : list of questions, see below

Poll address
Poll addresses are similar to addresses of wikipage section: Pagetitle#poll_id. "Title part" before the dash sign can be omitted to specify the address of the poll located at current page. However, the part after the dash sign is not a section. It's an ID of some poll declared at the page Pagetitle, specified as   . Poll addresses are currently used as value of address and dependance attributes (see just below) and in qpuserchoice parser function.

Mode definition poll attributes
...
 * id attribute switches poll definition into declaration / voting mode. It defines string identifier of the poll at the current wikipage. It must be unique on the wikipage. The identifier with the same name might be re-used only at another wikipage. This is because polls cannot be remotely voted at another pages. Please note that id value should be specified without the preceding dash sign, for the very same reason. Non-ASCII id's are possible, just place the value of attribute in quotes (an example in Russian):

 {question attributes} {question attributes}  {question attributes} {question attributes} Only common question_attributes can be specified in this poll mode, one question header per line, enclosed into the curly braces.
 * address attribute switches the poll definition into statistical display mode. The value of attribute specifies short or full address of the poll, whose statistical data should be displayed. For example, it's very handy to create a page or column of the page, where the results of different polls from different pages will be shown. To display statistics of user voting for declared at Page1 and declared at Page2, one can use the following code (just replace question attributes with real question attributes, or with empty set of attributes {} ):

Declaration / voting mode
This mode was the only mode available before v0.6.0. Make sure that poll / question attributes are compatible to that mode, otherwise you should get syntax error messages. There are some common attributes which are applicable to any mode, see below.

Every poll may contain an one or multiple question(s):  {common_question metacategories categories ...
 * question_attributes}

{common_question metacategories categories ...
 * question_attributes}

{common_question metacategories categories ... []<> proposal text The above proposal line defines three input fields, the first is a checkbox, the second is a radiobutton, the third is a text field. Proposals are internally numbered from zero.
 * question_attributes}
 * common_question : Common question describes the purpose of the question at whole. It's not mandatory and thus can be blank. Questions are automatically numbered from the number one. Since v0.8.0 questions also may have names defined via question "name" attribute to simplify their usage in interpretation scripts.
 * question_attributes : xml-style list of question attributes.
 * metacategories : optional source line, containing the row of cells, separated by special character ("|" or "!"). Every cell is either a name of metacategory or is an empty one. Empty cell(s) before a cell with the name of metacategory define the count of categories, placed into the group (metacategory). The groups make a "subquestions" in the question of "single" category selections type (see Question attributes). In the source code these are referred as "category spans". Real metacategories are separated with "|". It is also possible to create "fake" metacategories, which serve the purpose as comments to categories and don't create real subquestions. In such case "!" character should be used as a cells separator. Wikilinks and templates can be used in metacategory names (since v0.4.1), though beware of posting non-existing templates, you'll get unexpected category names. Define your templates before submitting the poll.
 * categories : mandatory source line, containing the row of cells, separated by "|" character. Defines the list of categories (columns) in the question table. Categories are the "possible answers", internally numbered from zero. Wikilinks and templates can be used in category names (since v0.4.1), though beware of posting non-existing templates, you'll get unexpected category names. Define your templates before submitting the poll.
 * ... : mandatory list of proposals (one or more source lines). For the types of question "", "unique", "[]" (see Question attributes) these lines contain just the list of proposal texts, one proposal per line. For the type of question "mixed" (since v0.4.0), proposal text is preceeded by list of input types, one element per category defined:


 * Since v0.8.0 proposals of "text" question type can be named, multi-line and to have their text mixed in-between with various types of categories.

Note that category spans, metacategories, category groups are just a different description of the same logical category grouping. Grouping can be applied only to radiobuttons (for example, a group of two radiobuttons is a logical equivalent of checkbox).

Metacategories (category groups) are unavailable for the types of question "[]", "mixed".

Internal numbering of questions, categories and proposals is important because they might be addressed later as a parameter of the extension's.

Poll attributes
Version 0.6.0 of extension introduces two separate modes of polls: declaration/voting mode and statistical display mode. These modes are selected by choosing appropriate poll attributes:
 * specifying id attribute causes the poll definition to use declaration/voting mode (the only mode available prior to v0.6.0)
 * address attribute causes the poll definition to use statistical display mode, which should be used to display the results of the polls at any wikipage - without the forms used to submit the polls.

The modes are mutually exclusive, so no both id and address attributes can be used together in one poll definition. Also, while some of poll attributes have sense in both modes, many of poll attributes can be used exclusively in one mode. However, nothing prevents the user to define the poll and to show it's statistical results at the same page - just define the poll twice - once with id attribute, another time with address attribute.

Common poll attributes

 * Optional perrow attribute specifies to display question tables in cells, similar to MediaWiki's built-in   tag attribute). It's very useful when the polls categories and/or proposals are short texts (e.g. lists of numbers, yes/no choice). In such case you may fit more polls on the screen. For example, perrow=3 would setup three question tables per row display layout.


 * Optional showresults attribute specifies to display statistics (percents of user votes for some of the question's category) inside the poll. Originally showresults has only key with no value specified. Starting from v0.5.0 showresults value defines the list of statistical display parameters, separated by semicolons (CSS-like). First element of the list is numerical code of display type: 0 - suppress output (do not show the results), 1 - numerical percents, 2 - simple bars. Next elements define the values of CSS-like attributes: color - the color of bar, background - the background of bar, textcolor - the color of text, textbackground - the background of text. For example:

To enable showresults functionality, an administrator of the wikisite should set "global showresults level" which is specified by value of qp_Setup::$global_showresults property defined in LocalSettings.php after the inclusion of the extension.

Note: you need to set up a page to show the results, see.

Declaration/voting mode poll attributes

 * Optional dependance atttibute defines a relation of the current poll to the successful submission of the poll, address of whose is defined as a value of dependance attribute. For example, poll with the header  will be available for voting only when the user had successfully passed a poll with id="my_earlier_poll", located at Another page. Dependence of the polls can be chained further to the next poll, and the engine would then look for the first unsubmitted poll of the current user.
 * Optional randomize attribute allows to show only some randomly chosen questions from totally defined in poll.

Common question attributes

 * Optional layout attribute provides various visual layouts of the question. (Note that the question data won't be altered, only the visual representation will be changed). Value of the layout attribute is the list of tokens (words), currently limited to proposals and transpose. Thus, a four possible layouts are available:


 * Optional showresults attribute defines the style of statistical display. The meaning of value is the same as poll's showresults attribute (see above), but it can be applied to every question separately, also the locally-undefined values will be inherited from the top element (poll), like in CSS. Such way, different questions of the same poll may have different values of showresults attribute defined, presenting statistical information in various ways and colors.

Declaration / voting mode question attributes

 * Mandatory "type" attribute defines the type of user's category selection in the current question. The following values are currently available:


 * Optional "name" attribute (available since v0.8.0) provides name of question to be addressed in the interpretation scripts. In programming environment it is much more convenient to access question by it's name, not just by question index.


 * Optional textwidth attribute defines the width of text fields in em's, when the categories of such type were defined in proposal line(s) of the question of "mixed" type.

"text" type of question
Since v0.8.0 new "text" type of question was introduced. Similar to "mixed" question type described just above, it allows to mix various input types but in a more flexible and powerful ways. Definition of proposal is not separated from definition of category inputs. Instead, categories are embedded directly into proposal text. Due of that, categories (possible choices) are enclosed into tag-like angle braces <...>. In addition to radiobuttons defined as <> and checkboxes defined as <[]>, it allows to define text inputs of various types.

"text" type of question proposals
"text" type of question, introduced in v0.8.0, supports multi-line proposals and named proposals. Thus new subform of proposal definition syntax was introduced:
 * proposal_attributes|proposal_and_category_definition


 * :| characters separate multi-line proposals from each other. Old type of single-line definition is also possible, when proposals are separated via new-line, however mixing of multi-line proposals and single-line proposals in one question is not possible and will result in wrong layout or syntax errors.
 * proposal_attributes can be specified to alter the following proposal properties:
 * proposal_and_category_definition Mixed parts of proposal text and definition(s) of category / categories. Eg. Age* <<::width=2>> or Birth place <<>>.

Simple complete example of "text" type question multi-line named proposal definition:
 * name="age" emptytext="no"|Age* <<::width=2>>

More complex complete examples:
 * name="ethnic_origin" emptytext="no" catreq=1|Ethnic origin* <> or (arbitrary) : <<>>

 Hi! My <<|name|country|city>> is Andrew. How are you? Today is Sunday. Tomorrow is <<|Friday|Saturday|Monday>>.
 * name="short_text"|A duck is a type of <<|fish|mammal|bird>>.