<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://www.limesurvey.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Twilllig</id>
	<title>LimeSurvey Manual - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://www.limesurvey.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Twilllig"/>
	<link rel="alternate" type="text/html" href="https://www.limesurvey.org/manual/Special:Contributions/Twilllig"/>
	<updated>2026-08-16T21:19:28Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.9</generator>
	<entry>
		<id>https://www.limesurvey.org/manual/index.php?title=LimeSurvey_7_Question_Editor&amp;diff=381231</id>
		<title>LimeSurvey 7 Question Editor</title>
		<link rel="alternate" type="text/html" href="https://www.limesurvey.org/manual/index.php?title=LimeSurvey_7_Question_Editor&amp;diff=381231"/>
		<updated>2026-04-27T10:22:37Z</updated>

		<summary type="html">&lt;p&gt;Twilllig: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Switching URL format from &amp;quot;get&amp;quot; to &amp;quot;path&amp;quot; to enable the new editor in LimeSurvey 7 ==&lt;br /&gt;
&lt;br /&gt;
=== Overview ===&lt;br /&gt;
&lt;br /&gt;
LimeSurvey 7 introduces a new React-based survey editor. If you are an existing LimeSurvey CE user who has upgraded from an earlier version, your installation is maybe configured to use the &#039;&#039;&#039;&amp;lt;code&amp;gt;get&amp;lt;/code&amp;gt;&#039;&#039;&#039; URL format. The new editor &#039;&#039;&#039;requires&#039;&#039;&#039; the &#039;&#039;&#039;&amp;lt;code&amp;gt;path&amp;lt;/code&amp;gt;&#039;&#039;&#039; URL format to be enabled. This article explains why, what the difference is, and how to make the switch safely.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Why is the URL format change required? ===&lt;br /&gt;
&lt;br /&gt;
The new React editor relies on modern browser routing and API calls that use &#039;&#039;&#039;path-based URLs&#039;&#039;&#039;. Internally, LimeSurvey checks whether the &amp;lt;code&amp;gt;path&amp;lt;/code&amp;gt; format is active before allowing the editor to be enabled. If your installation is still using the &amp;lt;code&amp;gt;get&amp;lt;/code&amp;gt; format, you will see the editor toggle either greyed out or accompanied by a warning message about the URL format requirement.&lt;br /&gt;
&lt;br /&gt;
In short: &#039;&#039;&#039;without switching to &amp;lt;code&amp;gt;path&amp;lt;/code&amp;gt;, the new editor cannot be activated.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== What is the difference between &amp;lt;code&amp;gt;get&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;path&amp;lt;/code&amp;gt; URL format? ===&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;get&amp;lt;/code&amp;gt; format (legacy default) ====&lt;br /&gt;
&lt;br /&gt;
Parameters are passed as HTTP query string arguments after a &amp;lt;code&amp;gt;?&amp;lt;/code&amp;gt; character.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Examples:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Page !! URL&lt;br /&gt;
|-&lt;br /&gt;
| Admin area || &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://example.com/limesurvey/index.php?r=admin&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Survey start || &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://example.com/limesurvey/index.php?r=survey/index&amp;amp;sid=123456&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Survey with token || &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://example.com/limesurvey/index.php?r=survey/index&amp;amp;sid=123456&amp;amp;token=abc123&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This format works on virtually all web server configurations without any special setup.&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;path&amp;lt;/code&amp;gt; format (required for the new editor) ====&lt;br /&gt;
&lt;br /&gt;
The routing part of the URL is embedded as segments of the URL path, separated by &amp;lt;code&amp;gt;/&amp;lt;/code&amp;gt;. Custom parameters such as tokens and user-defined variables are still passed as regular query string arguments after a &amp;lt;code&amp;gt;?&amp;lt;/code&amp;gt; character.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Examples:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Page !! URL&lt;br /&gt;
|-&lt;br /&gt;
| Admin area || &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://example.com/limesurvey/index.php/admin&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Survey start || &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://example.com/limesurvey/index.php/123456&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Survey with token || &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://example.com/limesurvey/index.php/123456?token=abc123&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Survey with token + custom variables || &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://example.com/limesurvey/index.php/123456?token=abc123&amp;amp;myvar=321&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
{| style=&amp;quot;border-left: 4px solid #3a87ad; background-color: #d9edf7; padding: 8px 12px; width: 100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Note:&#039;&#039;&#039; Existing panel integrations and other use cases that pass custom URL parameters (e.g. &amp;lt;code&amp;gt;?token=...&amp;amp;panelid=...&amp;lt;/code&amp;gt;) will continue to work without modification. Only the routing part of the URL has changed; query string parameters are appended the same way as before.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This format produces cleaner, more readable URLs and is the standard for modern web applications. It requires the web server to support &#039;&#039;&#039;URL rewriting&#039;&#039;&#039; (Apache &amp;lt;code&amp;gt;mod_rewrite&amp;lt;/code&amp;gt;, nginx &amp;lt;code&amp;gt;try_files&amp;lt;/code&amp;gt;, or equivalent).&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;border-left: 4px solid #3a87ad; background-color: #d9edf7; padding: 8px 12px; width: 100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Note:&#039;&#039;&#039; With &amp;lt;code&amp;gt;showScriptName = true&amp;lt;/code&amp;gt; (the default), &amp;lt;code&amp;gt;index.php&amp;lt;/code&amp;gt; remains visible in the URL. Setting it to &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt; removes it entirely but requires additional server configuration and is not covered by this article.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Risks and considerations when switching active surveys ===&lt;br /&gt;
&lt;br /&gt;
Switching the URL format is a &#039;&#039;&#039;breaking change&#039;&#039;&#039; for any URLs that were generated using the old &amp;lt;code&amp;gt;get&amp;lt;/code&amp;gt; format. Review the following points before proceeding.&lt;br /&gt;
&lt;br /&gt;
==== 1. Participant survey links will change ====&lt;br /&gt;
&lt;br /&gt;
If you have already distributed survey invitation links to participants — by email, SMS, or published on a website — those links use the old &amp;lt;code&amp;gt;get&amp;lt;/code&amp;gt;-style format and &#039;&#039;&#039;will stop working&#039;&#039;&#039; after the switch.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example of a broken old link:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;https://example.com/limesurvey/index.php?r=survey/index&amp;amp;sid=123456&amp;amp;token=abc123&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You have two options:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Update the links:&#039;&#039;&#039; Send participants the new path-style URL.&lt;br /&gt;
* &#039;&#039;&#039;Set up server-side redirects:&#039;&#039;&#039; Configure your web server to redirect old &amp;lt;code&amp;gt;?r=survey/index&amp;amp;sid=…&amp;lt;/code&amp;gt; URLs to the new path-style equivalent. This is the preferred approach when re-contacting participants is not practical.&lt;br /&gt;
&lt;br /&gt;
==== 2. Pending email invitations ====&lt;br /&gt;
&lt;br /&gt;
Email invitations already sent via the LimeSurvey token system contain embedded survey links. Those links are fixed in the email body and cannot be updated retroactively. Participants who have not yet opened their invitation will receive a broken link.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mitigation:&#039;&#039;&#039; Configure a server-side redirect as described above &#039;&#039;&#039;before&#039;&#039;&#039; making the switch.&lt;br /&gt;
&lt;br /&gt;
==== 3. Bookmarks and external integrations ====&lt;br /&gt;
&lt;br /&gt;
Any bookmarks saved by participants, or external systems (e.g., panel providers, CRM integrations) that call LimeSurvey using the old URL format, will break after the switch.&lt;br /&gt;
&lt;br /&gt;
Audit all known entry points to your surveys before switching.&lt;br /&gt;
&lt;br /&gt;
==== 4. Embedded surveys and iFrames ====&lt;br /&gt;
&lt;br /&gt;
If you have embedded surveys in external websites using &amp;lt;code&amp;gt;&amp;amp;lt;iframe&amp;amp;gt;&amp;lt;/code&amp;gt; or JavaScript embeds pointing to &amp;lt;code&amp;gt;get&amp;lt;/code&amp;gt;-style URLs, those embeds must be updated after the switch.&lt;br /&gt;
&lt;br /&gt;
==== 5. No impact on collected response data ====&lt;br /&gt;
&lt;br /&gt;
The URL format change does &#039;&#039;&#039;not&#039;&#039;&#039; affect your collected survey data, active survey configuration, question logic, or any other internal settings. The switch is purely about how URLs are structured externally.&lt;br /&gt;
&lt;br /&gt;
==== 6. Reverting is possible ====&lt;br /&gt;
&lt;br /&gt;
If you encounter problems, you can revert the change by setting &amp;lt;code&amp;gt;&#039;urlFormat&#039; =&amp;gt; &#039;get&#039;&amp;lt;/code&amp;gt; again in &amp;lt;code&amp;gt;config.php&amp;lt;/code&amp;gt; following the same steps above. The old &amp;lt;code&amp;gt;get&amp;lt;/code&amp;gt;-style URLs will work again immediately. Note that reverting will disable the new editor.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== How to switch from &amp;lt;code&amp;gt;get&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;path&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Follow these steps carefully. It is important to &#039;&#039;&#039;log out and fully close LimeSurvey&#039;&#039;&#039; before editing the configuration, to avoid session inconsistencies.&lt;br /&gt;
&lt;br /&gt;
==== Step 1 – Verify your server supports URL rewriting ====&lt;br /&gt;
&lt;br /&gt;
Before making any changes, confirm that your web server has URL rewriting enabled:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Apache:&#039;&#039;&#039; The &amp;lt;code&amp;gt;mod_rewrite&amp;lt;/code&amp;gt; module must be enabled. Check that the &amp;lt;code&amp;gt;.htaccess&amp;lt;/code&amp;gt; file in your LimeSurvey root directory is being processed (&amp;lt;code&amp;gt;AllowOverride All&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;AllowOverride FileInfo Options&amp;lt;/code&amp;gt; must be set for your document root in the Apache configuration).&lt;br /&gt;
* &#039;&#039;&#039;nginx:&#039;&#039;&#039; Your &amp;lt;code&amp;gt;nginx.conf&amp;lt;/code&amp;gt; or site configuration must include a &amp;lt;code&amp;gt;try_files&amp;lt;/code&amp;gt; directive that forwards requests to &amp;lt;code&amp;gt;index.php&amp;lt;/code&amp;gt;.&lt;br /&gt;
* &#039;&#039;&#039;IIS:&#039;&#039;&#039; The URL Rewrite module must be installed and a &amp;lt;code&amp;gt;web.config&amp;lt;/code&amp;gt; rewrite rule must be in place.&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;border-left: 4px solid #d9534f; background-color: #f2dede; padding: 8px 12px; width: 100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Warning:&#039;&#039;&#039; If you are unsure whether URL rewriting works, try accessing a path-style URL after the change. If you get a 404 error, URL rewriting is not configured correctly. Consult your hosting provider before proceeding.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Step 2 – Log out of the LimeSurvey administration ====&lt;br /&gt;
&lt;br /&gt;
Log out from the LimeSurvey administration panel using the logout button. Do &#039;&#039;&#039;not&#039;&#039;&#039; simply close the browser tab.&lt;br /&gt;
&lt;br /&gt;
==== Step 3 – Close all LimeSurvey browser tabs ====&lt;br /&gt;
&lt;br /&gt;
Close all browser tabs or windows that have LimeSurvey open. This ensures that no old session data or cached URLs cause confusion after the configuration change.&lt;br /&gt;
&lt;br /&gt;
==== Step 4 – Edit &amp;lt;code&amp;gt;config.php&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
Open the file &amp;lt;code&amp;gt;application/config/config.php&amp;lt;/code&amp;gt; in a text editor on your server.&lt;br /&gt;
&lt;br /&gt;
Locate the &amp;lt;code&amp;gt;urlManager&amp;lt;/code&amp;gt; section. It will look similar to this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&#039;urlManager&#039; =&amp;gt; array(&lt;br /&gt;
    &#039;urlFormat&#039; =&amp;gt; &#039;get&#039;,   // &amp;lt;-- change this&lt;br /&gt;
    &#039;rules&#039; =&amp;gt; array(&lt;br /&gt;
        // You can add your own rules here&lt;br /&gt;
    ),&lt;br /&gt;
    &#039;showScriptName&#039; =&amp;gt; true,&lt;br /&gt;
),&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Change &amp;lt;code&amp;gt;&#039;get&#039;&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;&#039;path&#039;&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&#039;urlManager&#039; =&amp;gt; array(&lt;br /&gt;
    &#039;urlFormat&#039; =&amp;gt; &#039;path&#039;,  // &amp;lt;-- changed&lt;br /&gt;
    &#039;rules&#039; =&amp;gt; array(&lt;br /&gt;
        // You can add your own rules here&lt;br /&gt;
    ),&lt;br /&gt;
    &#039;showScriptName&#039; =&amp;gt; true,&lt;br /&gt;
),&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Save the file.&lt;br /&gt;
&lt;br /&gt;
==== Step 5 – Open the administration area with the correct URL ====&lt;br /&gt;
&lt;br /&gt;
Do &#039;&#039;&#039;not&#039;&#039;&#039; use a bookmark or browser history entry that still points to a &amp;lt;code&amp;gt;get&amp;lt;/code&amp;gt;-style URL. Instead, navigate manually to the path-style URL of your administration area:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;https://example.com/limesurvey/index.php/admin&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Replace &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://example.com/limesurvey&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; with your actual LimeSurvey base URL.&lt;br /&gt;
&lt;br /&gt;
Log in normally. The new editor can now be activated from the editor selection modal or from your account settings.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Summary checklist ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Step !! Action&lt;br /&gt;
|-&lt;br /&gt;
| ✅ || Verify web server URL rewriting is supported and enabled&lt;br /&gt;
|-&lt;br /&gt;
| ✅ || Log out of the LimeSurvey administration area&lt;br /&gt;
|-&lt;br /&gt;
| ✅ || Close all LimeSurvey browser tabs&lt;br /&gt;
|-&lt;br /&gt;
| ✅ || Edit &amp;lt;code&amp;gt;application/config/config.php&amp;lt;/code&amp;gt;: change &amp;lt;code&amp;gt;urlFormat&amp;lt;/code&amp;gt; from &amp;lt;code&amp;gt;&#039;get&#039;&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;&#039;path&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| ✅ || Open the admin area using the path-style URL: &amp;lt;code&amp;gt;…/index.php/admin&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| ✅ || Update or redirect any previously distributed survey links&lt;br /&gt;
|-&lt;br /&gt;
| ✅ || Update bookmarks and external integrations&lt;br /&gt;
|-&lt;br /&gt;
| ✅ || Activate the new editor from the editor selection modal&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Twilllig</name></author>
	</entry>
	<entry>
		<id>https://www.limesurvey.org/manual/index.php?title=LimeSurvey_7_Question_Editor&amp;diff=381230</id>
		<title>LimeSurvey 7 Question Editor</title>
		<link rel="alternate" type="text/html" href="https://www.limesurvey.org/manual/index.php?title=LimeSurvey_7_Question_Editor&amp;diff=381230"/>
		<updated>2026-04-23T10:25:34Z</updated>

		<summary type="html">&lt;p&gt;Twilllig: /* path format (required for the new editor) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Switching URL format from &amp;quot;get&amp;quot; to &amp;quot;path&amp;quot; to enable the new editor in LimeSurvey 7 ==&lt;br /&gt;
&lt;br /&gt;
=== Overview ===&lt;br /&gt;
&lt;br /&gt;
LimeSurvey 7 introduces a new React-based survey editor. If you are an existing LimeSurvey CE user who has upgraded from an earlier version, your installation is maybe configured to use the &#039;&#039;&#039;&amp;lt;code&amp;gt;get&amp;lt;/code&amp;gt;&#039;&#039;&#039; URL format. The new editor &#039;&#039;&#039;requires&#039;&#039;&#039; the &#039;&#039;&#039;&amp;lt;code&amp;gt;path&amp;lt;/code&amp;gt;&#039;&#039;&#039; URL format to be enabled. This article explains why, what the difference is, and how to make the switch safely.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Why is the URL format change required? ===&lt;br /&gt;
&lt;br /&gt;
The new React editor relies on modern browser routing and API calls that use &#039;&#039;&#039;path-based URLs&#039;&#039;&#039;. Internally, LimeSurvey checks whether the &amp;lt;code&amp;gt;path&amp;lt;/code&amp;gt; format is active before allowing the editor to be enabled. If your installation is still using the &amp;lt;code&amp;gt;get&amp;lt;/code&amp;gt; format, you will see the editor toggle either greyed out or accompanied by a warning message about the URL format requirement.&lt;br /&gt;
&lt;br /&gt;
In short: &#039;&#039;&#039;without switching to &amp;lt;code&amp;gt;path&amp;lt;/code&amp;gt;, the new editor cannot be activated.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== What is the difference between &amp;lt;code&amp;gt;get&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;path&amp;lt;/code&amp;gt; URL format? ===&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;get&amp;lt;/code&amp;gt; format (legacy default) ====&lt;br /&gt;
&lt;br /&gt;
Parameters are passed as HTTP query string arguments after a &amp;lt;code&amp;gt;?&amp;lt;/code&amp;gt; character.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Examples:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Page !! URL&lt;br /&gt;
|-&lt;br /&gt;
| Admin area || &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://example.com/limesurvey/index.php?r=admin&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Survey start || &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://example.com/limesurvey/index.php?r=survey/index&amp;amp;sid=123456&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Survey with token || &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://example.com/limesurvey/index.php?r=survey/index&amp;amp;sid=123456&amp;amp;token=abc123&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This format works on virtually all web server configurations without any special setup.&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;path&amp;lt;/code&amp;gt; format (required for the new editor) ====&lt;br /&gt;
&lt;br /&gt;
The routing part of the URL is embedded as segments of the URL path, separated by &amp;lt;code&amp;gt;/&amp;lt;/code&amp;gt;. Custom parameters such as tokens and user-defined variables are still passed as regular query string arguments after a &amp;lt;code&amp;gt;?&amp;lt;/code&amp;gt; character.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Examples:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Page !! URL&lt;br /&gt;
|-&lt;br /&gt;
| Admin area || &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://example.com/limesurvey/index.php/admin&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Survey start || &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://example.com/limesurvey/index.php/123456&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Survey with token || &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://example.com/limesurvey/index.php/123456?token=abc123&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Survey with token + custom variables || &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://example.com/limesurvey/index.php/123456?token=abc123&amp;amp;myvar=321&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
{| style=&amp;quot;border-left: 4px solid #3a87ad; background-color: #d9edf7; padding: 8px 12px; width: 100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Note:&#039;&#039;&#039; Existing panel integrations and other use cases that pass custom URL parameters (e.g. &amp;lt;code&amp;gt;?token=...&amp;amp;panelid=...&amp;lt;/code&amp;gt;) will continue to work without modification. Only the routing part of the URL has changed; query string parameters are appended the same way as before.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This format produces cleaner, more readable URLs and is the standard for modern web applications. It requires the web server to support &#039;&#039;&#039;URL rewriting&#039;&#039;&#039; (Apache &amp;lt;code&amp;gt;mod_rewrite&amp;lt;/code&amp;gt;, nginx &amp;lt;code&amp;gt;try_files&amp;lt;/code&amp;gt;, or equivalent).&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;border-left: 4px solid #3a87ad; background-color: #d9edf7; padding: 8px 12px; width: 100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Note:&#039;&#039;&#039; With &amp;lt;code&amp;gt;showScriptName = true&amp;lt;/code&amp;gt; (the default), &amp;lt;code&amp;gt;index.php&amp;lt;/code&amp;gt; remains visible in the URL. Setting it to &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt; removes it entirely but requires additional server configuration and is not covered by this article.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== How to switch from &amp;lt;code&amp;gt;get&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;path&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Follow these steps carefully. It is important to &#039;&#039;&#039;log out and fully close LimeSurvey&#039;&#039;&#039; before editing the configuration, to avoid session inconsistencies.&lt;br /&gt;
&lt;br /&gt;
==== Step 1 – Verify your server supports URL rewriting ====&lt;br /&gt;
&lt;br /&gt;
Before making any changes, confirm that your web server has URL rewriting enabled:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Apache:&#039;&#039;&#039; The &amp;lt;code&amp;gt;mod_rewrite&amp;lt;/code&amp;gt; module must be enabled. Check that the &amp;lt;code&amp;gt;.htaccess&amp;lt;/code&amp;gt; file in your LimeSurvey root directory is being processed (&amp;lt;code&amp;gt;AllowOverride All&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;AllowOverride FileInfo Options&amp;lt;/code&amp;gt; must be set for your document root in the Apache configuration).&lt;br /&gt;
* &#039;&#039;&#039;nginx:&#039;&#039;&#039; Your &amp;lt;code&amp;gt;nginx.conf&amp;lt;/code&amp;gt; or site configuration must include a &amp;lt;code&amp;gt;try_files&amp;lt;/code&amp;gt; directive that forwards requests to &amp;lt;code&amp;gt;index.php&amp;lt;/code&amp;gt;.&lt;br /&gt;
* &#039;&#039;&#039;IIS:&#039;&#039;&#039; The URL Rewrite module must be installed and a &amp;lt;code&amp;gt;web.config&amp;lt;/code&amp;gt; rewrite rule must be in place.&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;border-left: 4px solid #d9534f; background-color: #f2dede; padding: 8px 12px; width: 100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Warning:&#039;&#039;&#039; If you are unsure whether URL rewriting works, try accessing a path-style URL after the change. If you get a 404 error, URL rewriting is not configured correctly. Consult your hosting provider before proceeding.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Step 2 – Log out of the LimeSurvey administration ====&lt;br /&gt;
&lt;br /&gt;
Log out from the LimeSurvey administration panel using the logout button. Do &#039;&#039;&#039;not&#039;&#039;&#039; simply close the browser tab.&lt;br /&gt;
&lt;br /&gt;
==== Step 3 – Close all LimeSurvey browser tabs ====&lt;br /&gt;
&lt;br /&gt;
Close all browser tabs or windows that have LimeSurvey open. This ensures that no old session data or cached URLs cause confusion after the configuration change.&lt;br /&gt;
&lt;br /&gt;
==== Step 4 – Edit &amp;lt;code&amp;gt;config.php&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
Open the file &amp;lt;code&amp;gt;application/config/config.php&amp;lt;/code&amp;gt; in a text editor on your server.&lt;br /&gt;
&lt;br /&gt;
Locate the &amp;lt;code&amp;gt;urlManager&amp;lt;/code&amp;gt; section. It will look similar to this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&#039;urlManager&#039; =&amp;gt; array(&lt;br /&gt;
    &#039;urlFormat&#039; =&amp;gt; &#039;get&#039;,   // &amp;lt;-- change this&lt;br /&gt;
    &#039;rules&#039; =&amp;gt; array(&lt;br /&gt;
        // You can add your own rules here&lt;br /&gt;
    ),&lt;br /&gt;
    &#039;showScriptName&#039; =&amp;gt; true,&lt;br /&gt;
),&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Change &amp;lt;code&amp;gt;&#039;get&#039;&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;&#039;path&#039;&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&#039;urlManager&#039; =&amp;gt; array(&lt;br /&gt;
    &#039;urlFormat&#039; =&amp;gt; &#039;path&#039;,  // &amp;lt;-- changed&lt;br /&gt;
    &#039;rules&#039; =&amp;gt; array(&lt;br /&gt;
        // You can add your own rules here&lt;br /&gt;
    ),&lt;br /&gt;
    &#039;showScriptName&#039; =&amp;gt; true,&lt;br /&gt;
),&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Save the file.&lt;br /&gt;
&lt;br /&gt;
==== Step 5 – Open the administration area with the correct URL ====&lt;br /&gt;
&lt;br /&gt;
Do &#039;&#039;&#039;not&#039;&#039;&#039; use a bookmark or browser history entry that still points to a &amp;lt;code&amp;gt;get&amp;lt;/code&amp;gt;-style URL. Instead, navigate manually to the path-style URL of your administration area:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;https://example.com/limesurvey/index.php/admin&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Replace &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://example.com/limesurvey&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; with your actual LimeSurvey base URL.&lt;br /&gt;
&lt;br /&gt;
Log in normally. The new editor can now be activated from the editor selection modal or from your account settings.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Risks and considerations when switching active surveys ===&lt;br /&gt;
&lt;br /&gt;
Switching the URL format is a &#039;&#039;&#039;breaking change&#039;&#039;&#039; for any URLs that were generated using the old &amp;lt;code&amp;gt;get&amp;lt;/code&amp;gt; format. Review the following points before proceeding.&lt;br /&gt;
&lt;br /&gt;
==== 1. Participant survey links will change ====&lt;br /&gt;
&lt;br /&gt;
If you have already distributed survey invitation links to participants — by email, SMS, or published on a website — those links use the old &amp;lt;code&amp;gt;get&amp;lt;/code&amp;gt;-style format and &#039;&#039;&#039;will stop working&#039;&#039;&#039; after the switch.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example of a broken old link:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;https://example.com/limesurvey/index.php?r=survey/index&amp;amp;sid=123456&amp;amp;token=abc123&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You have two options:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Update the links:&#039;&#039;&#039; Send participants the new path-style URL.&lt;br /&gt;
* &#039;&#039;&#039;Set up server-side redirects:&#039;&#039;&#039; Configure your web server to redirect old &amp;lt;code&amp;gt;?r=survey/index&amp;amp;sid=…&amp;lt;/code&amp;gt; URLs to the new path-style equivalent. This is the preferred approach when re-contacting participants is not practical.&lt;br /&gt;
&lt;br /&gt;
==== 2. Pending email invitations ====&lt;br /&gt;
&lt;br /&gt;
Email invitations already sent via the LimeSurvey token system contain embedded survey links. Those links are fixed in the email body and cannot be updated retroactively. Participants who have not yet opened their invitation will receive a broken link.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mitigation:&#039;&#039;&#039; Configure a server-side redirect as described above &#039;&#039;&#039;before&#039;&#039;&#039; making the switch.&lt;br /&gt;
&lt;br /&gt;
==== 3. Bookmarks and external integrations ====&lt;br /&gt;
&lt;br /&gt;
Any bookmarks saved by participants, or external systems (e.g., panel providers, CRM integrations) that call LimeSurvey using the old URL format, will break after the switch.&lt;br /&gt;
&lt;br /&gt;
Audit all known entry points to your surveys before switching.&lt;br /&gt;
&lt;br /&gt;
==== 4. Embedded surveys and iFrames ====&lt;br /&gt;
&lt;br /&gt;
If you have embedded surveys in external websites using &amp;lt;code&amp;gt;&amp;amp;lt;iframe&amp;amp;gt;&amp;lt;/code&amp;gt; or JavaScript embeds pointing to &amp;lt;code&amp;gt;get&amp;lt;/code&amp;gt;-style URLs, those embeds must be updated after the switch.&lt;br /&gt;
&lt;br /&gt;
==== 5. No impact on collected response data ====&lt;br /&gt;
&lt;br /&gt;
The URL format change does &#039;&#039;&#039;not&#039;&#039;&#039; affect your collected survey data, active survey configuration, question logic, or any other internal settings. The switch is purely about how URLs are structured externally.&lt;br /&gt;
&lt;br /&gt;
==== 6. Reverting is possible ====&lt;br /&gt;
&lt;br /&gt;
If you encounter problems, you can revert the change by setting &amp;lt;code&amp;gt;&#039;urlFormat&#039; =&amp;gt; &#039;get&#039;&amp;lt;/code&amp;gt; again in &amp;lt;code&amp;gt;config.php&amp;lt;/code&amp;gt; following the same steps above. The old &amp;lt;code&amp;gt;get&amp;lt;/code&amp;gt;-style URLs will work again immediately. Note that reverting will disable the new editor.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Summary checklist ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Step !! Action&lt;br /&gt;
|-&lt;br /&gt;
| ✅ || Verify web server URL rewriting is supported and enabled&lt;br /&gt;
|-&lt;br /&gt;
| ✅ || Log out of the LimeSurvey administration area&lt;br /&gt;
|-&lt;br /&gt;
| ✅ || Close all LimeSurvey browser tabs&lt;br /&gt;
|-&lt;br /&gt;
| ✅ || Edit &amp;lt;code&amp;gt;application/config/config.php&amp;lt;/code&amp;gt;: change &amp;lt;code&amp;gt;urlFormat&amp;lt;/code&amp;gt; from &amp;lt;code&amp;gt;&#039;get&#039;&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;&#039;path&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| ✅ || Open the admin area using the path-style URL: &amp;lt;code&amp;gt;…/index.php/admin&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| ✅ || Update or redirect any previously distributed survey links&lt;br /&gt;
|-&lt;br /&gt;
| ✅ || Update bookmarks and external integrations&lt;br /&gt;
|-&lt;br /&gt;
| ✅ || Activate the new editor from the editor selection modal&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Twilllig</name></author>
	</entry>
	<entry>
		<id>https://www.limesurvey.org/manual/index.php?title=LimeSurvey_7_Question_Editor&amp;diff=381229</id>
		<title>LimeSurvey 7 Question Editor</title>
		<link rel="alternate" type="text/html" href="https://www.limesurvey.org/manual/index.php?title=LimeSurvey_7_Question_Editor&amp;diff=381229"/>
		<updated>2026-04-23T10:23:47Z</updated>

		<summary type="html">&lt;p&gt;Twilllig: /* path format (required for the new editor) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Switching URL format from &amp;quot;get&amp;quot; to &amp;quot;path&amp;quot; to enable the new editor in LimeSurvey 7 ==&lt;br /&gt;
&lt;br /&gt;
=== Overview ===&lt;br /&gt;
&lt;br /&gt;
LimeSurvey 7 introduces a new React-based survey editor. If you are an existing LimeSurvey CE user who has upgraded from an earlier version, your installation is maybe configured to use the &#039;&#039;&#039;&amp;lt;code&amp;gt;get&amp;lt;/code&amp;gt;&#039;&#039;&#039; URL format. The new editor &#039;&#039;&#039;requires&#039;&#039;&#039; the &#039;&#039;&#039;&amp;lt;code&amp;gt;path&amp;lt;/code&amp;gt;&#039;&#039;&#039; URL format to be enabled. This article explains why, what the difference is, and how to make the switch safely.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Why is the URL format change required? ===&lt;br /&gt;
&lt;br /&gt;
The new React editor relies on modern browser routing and API calls that use &#039;&#039;&#039;path-based URLs&#039;&#039;&#039;. Internally, LimeSurvey checks whether the &amp;lt;code&amp;gt;path&amp;lt;/code&amp;gt; format is active before allowing the editor to be enabled. If your installation is still using the &amp;lt;code&amp;gt;get&amp;lt;/code&amp;gt; format, you will see the editor toggle either greyed out or accompanied by a warning message about the URL format requirement.&lt;br /&gt;
&lt;br /&gt;
In short: &#039;&#039;&#039;without switching to &amp;lt;code&amp;gt;path&amp;lt;/code&amp;gt;, the new editor cannot be activated.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== What is the difference between &amp;lt;code&amp;gt;get&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;path&amp;lt;/code&amp;gt; URL format? ===&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;get&amp;lt;/code&amp;gt; format (legacy default) ====&lt;br /&gt;
&lt;br /&gt;
Parameters are passed as HTTP query string arguments after a &amp;lt;code&amp;gt;?&amp;lt;/code&amp;gt; character.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Examples:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Page !! URL&lt;br /&gt;
|-&lt;br /&gt;
| Admin area || &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://example.com/limesurvey/index.php?r=admin&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Survey start || &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://example.com/limesurvey/index.php?r=survey/index&amp;amp;sid=123456&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Survey with token || &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://example.com/limesurvey/index.php?r=survey/index&amp;amp;sid=123456&amp;amp;token=abc123&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This format works on virtually all web server configurations without any special setup.&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;path&amp;lt;/code&amp;gt; format (required for the new editor) ====&lt;br /&gt;
&lt;br /&gt;
The routing part of the URL is embedded as segments of the URL path, separated by &amp;lt;code&amp;gt;/&amp;lt;/code&amp;gt;. Custom parameters such as tokens and user-defined variables are still passed as regular query string arguments after a &amp;lt;code&amp;gt;?&amp;lt;/code&amp;gt; character.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Examples:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Page !! URL&lt;br /&gt;
|-&lt;br /&gt;
| Admin area || &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://example.com/limesurvey/index.php/admin&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Survey start || &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://example.com/limesurvey/index.php/survey/123456&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Survey with token || &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://example.com/limesurvey/index.php/survey/123456?token=abc123&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Survey with token + custom variables || &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://example.com/limesurvey/index.php/survey/123456?token=abc123&amp;amp;myvar=321&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
{| style=&amp;quot;border-left: 4px solid #3a87ad; background-color: #d9edf7; padding: 8px 12px; width: 100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Note:&#039;&#039;&#039; Existing panel integrations and other use cases that pass custom URL parameters (e.g. &amp;lt;code&amp;gt;?token=...&amp;amp;panelid=...&amp;lt;/code&amp;gt;) will continue to work without modification. Only the routing part of the URL has changed; query string parameters are appended the same way as before.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This format produces cleaner, more readable URLs and is the standard for modern web applications. It requires the web server to support &#039;&#039;&#039;URL rewriting&#039;&#039;&#039; (Apache &amp;lt;code&amp;gt;mod_rewrite&amp;lt;/code&amp;gt;, nginx &amp;lt;code&amp;gt;try_files&amp;lt;/code&amp;gt;, or equivalent).&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;border-left: 4px solid #3a87ad; background-color: #d9edf7; padding: 8px 12px; width: 100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Note:&#039;&#039;&#039; With &amp;lt;code&amp;gt;showScriptName = true&amp;lt;/code&amp;gt; (the default), &amp;lt;code&amp;gt;index.php&amp;lt;/code&amp;gt; remains visible in the URL. Setting it to &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt; removes it entirely but requires additional server configuration and is not covered by this article.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== How to switch from &amp;lt;code&amp;gt;get&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;path&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Follow these steps carefully. It is important to &#039;&#039;&#039;log out and fully close LimeSurvey&#039;&#039;&#039; before editing the configuration, to avoid session inconsistencies.&lt;br /&gt;
&lt;br /&gt;
==== Step 1 – Verify your server supports URL rewriting ====&lt;br /&gt;
&lt;br /&gt;
Before making any changes, confirm that your web server has URL rewriting enabled:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Apache:&#039;&#039;&#039; The &amp;lt;code&amp;gt;mod_rewrite&amp;lt;/code&amp;gt; module must be enabled. Check that the &amp;lt;code&amp;gt;.htaccess&amp;lt;/code&amp;gt; file in your LimeSurvey root directory is being processed (&amp;lt;code&amp;gt;AllowOverride All&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;AllowOverride FileInfo Options&amp;lt;/code&amp;gt; must be set for your document root in the Apache configuration).&lt;br /&gt;
* &#039;&#039;&#039;nginx:&#039;&#039;&#039; Your &amp;lt;code&amp;gt;nginx.conf&amp;lt;/code&amp;gt; or site configuration must include a &amp;lt;code&amp;gt;try_files&amp;lt;/code&amp;gt; directive that forwards requests to &amp;lt;code&amp;gt;index.php&amp;lt;/code&amp;gt;.&lt;br /&gt;
* &#039;&#039;&#039;IIS:&#039;&#039;&#039; The URL Rewrite module must be installed and a &amp;lt;code&amp;gt;web.config&amp;lt;/code&amp;gt; rewrite rule must be in place.&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;border-left: 4px solid #d9534f; background-color: #f2dede; padding: 8px 12px; width: 100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Warning:&#039;&#039;&#039; If you are unsure whether URL rewriting works, try accessing a path-style URL after the change. If you get a 404 error, URL rewriting is not configured correctly. Consult your hosting provider before proceeding.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Step 2 – Log out of the LimeSurvey administration ====&lt;br /&gt;
&lt;br /&gt;
Log out from the LimeSurvey administration panel using the logout button. Do &#039;&#039;&#039;not&#039;&#039;&#039; simply close the browser tab.&lt;br /&gt;
&lt;br /&gt;
==== Step 3 – Close all LimeSurvey browser tabs ====&lt;br /&gt;
&lt;br /&gt;
Close all browser tabs or windows that have LimeSurvey open. This ensures that no old session data or cached URLs cause confusion after the configuration change.&lt;br /&gt;
&lt;br /&gt;
==== Step 4 – Edit &amp;lt;code&amp;gt;config.php&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
Open the file &amp;lt;code&amp;gt;application/config/config.php&amp;lt;/code&amp;gt; in a text editor on your server.&lt;br /&gt;
&lt;br /&gt;
Locate the &amp;lt;code&amp;gt;urlManager&amp;lt;/code&amp;gt; section. It will look similar to this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&#039;urlManager&#039; =&amp;gt; array(&lt;br /&gt;
    &#039;urlFormat&#039; =&amp;gt; &#039;get&#039;,   // &amp;lt;-- change this&lt;br /&gt;
    &#039;rules&#039; =&amp;gt; array(&lt;br /&gt;
        // You can add your own rules here&lt;br /&gt;
    ),&lt;br /&gt;
    &#039;showScriptName&#039; =&amp;gt; true,&lt;br /&gt;
),&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Change &amp;lt;code&amp;gt;&#039;get&#039;&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;&#039;path&#039;&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&#039;urlManager&#039; =&amp;gt; array(&lt;br /&gt;
    &#039;urlFormat&#039; =&amp;gt; &#039;path&#039;,  // &amp;lt;-- changed&lt;br /&gt;
    &#039;rules&#039; =&amp;gt; array(&lt;br /&gt;
        // You can add your own rules here&lt;br /&gt;
    ),&lt;br /&gt;
    &#039;showScriptName&#039; =&amp;gt; true,&lt;br /&gt;
),&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Save the file.&lt;br /&gt;
&lt;br /&gt;
==== Step 5 – Open the administration area with the correct URL ====&lt;br /&gt;
&lt;br /&gt;
Do &#039;&#039;&#039;not&#039;&#039;&#039; use a bookmark or browser history entry that still points to a &amp;lt;code&amp;gt;get&amp;lt;/code&amp;gt;-style URL. Instead, navigate manually to the path-style URL of your administration area:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;https://example.com/limesurvey/index.php/admin&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Replace &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://example.com/limesurvey&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; with your actual LimeSurvey base URL.&lt;br /&gt;
&lt;br /&gt;
Log in normally. The new editor can now be activated from the editor selection modal or from your account settings.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Risks and considerations when switching active surveys ===&lt;br /&gt;
&lt;br /&gt;
Switching the URL format is a &#039;&#039;&#039;breaking change&#039;&#039;&#039; for any URLs that were generated using the old &amp;lt;code&amp;gt;get&amp;lt;/code&amp;gt; format. Review the following points before proceeding.&lt;br /&gt;
&lt;br /&gt;
==== 1. Participant survey links will change ====&lt;br /&gt;
&lt;br /&gt;
If you have already distributed survey invitation links to participants — by email, SMS, or published on a website — those links use the old &amp;lt;code&amp;gt;get&amp;lt;/code&amp;gt;-style format and &#039;&#039;&#039;will stop working&#039;&#039;&#039; after the switch.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example of a broken old link:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;https://example.com/limesurvey/index.php?r=survey/index&amp;amp;sid=123456&amp;amp;token=abc123&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You have two options:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Update the links:&#039;&#039;&#039; Send participants the new path-style URL.&lt;br /&gt;
* &#039;&#039;&#039;Set up server-side redirects:&#039;&#039;&#039; Configure your web server to redirect old &amp;lt;code&amp;gt;?r=survey/index&amp;amp;sid=…&amp;lt;/code&amp;gt; URLs to the new path-style equivalent. This is the preferred approach when re-contacting participants is not practical.&lt;br /&gt;
&lt;br /&gt;
==== 2. Pending email invitations ====&lt;br /&gt;
&lt;br /&gt;
Email invitations already sent via the LimeSurvey token system contain embedded survey links. Those links are fixed in the email body and cannot be updated retroactively. Participants who have not yet opened their invitation will receive a broken link.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mitigation:&#039;&#039;&#039; Configure a server-side redirect as described above &#039;&#039;&#039;before&#039;&#039;&#039; making the switch.&lt;br /&gt;
&lt;br /&gt;
==== 3. Bookmarks and external integrations ====&lt;br /&gt;
&lt;br /&gt;
Any bookmarks saved by participants, or external systems (e.g., panel providers, CRM integrations) that call LimeSurvey using the old URL format, will break after the switch.&lt;br /&gt;
&lt;br /&gt;
Audit all known entry points to your surveys before switching.&lt;br /&gt;
&lt;br /&gt;
==== 4. Embedded surveys and iFrames ====&lt;br /&gt;
&lt;br /&gt;
If you have embedded surveys in external websites using &amp;lt;code&amp;gt;&amp;amp;lt;iframe&amp;amp;gt;&amp;lt;/code&amp;gt; or JavaScript embeds pointing to &amp;lt;code&amp;gt;get&amp;lt;/code&amp;gt;-style URLs, those embeds must be updated after the switch.&lt;br /&gt;
&lt;br /&gt;
==== 5. No impact on collected response data ====&lt;br /&gt;
&lt;br /&gt;
The URL format change does &#039;&#039;&#039;not&#039;&#039;&#039; affect your collected survey data, active survey configuration, question logic, or any other internal settings. The switch is purely about how URLs are structured externally.&lt;br /&gt;
&lt;br /&gt;
==== 6. Reverting is possible ====&lt;br /&gt;
&lt;br /&gt;
If you encounter problems, you can revert the change by setting &amp;lt;code&amp;gt;&#039;urlFormat&#039; =&amp;gt; &#039;get&#039;&amp;lt;/code&amp;gt; again in &amp;lt;code&amp;gt;config.php&amp;lt;/code&amp;gt; following the same steps above. The old &amp;lt;code&amp;gt;get&amp;lt;/code&amp;gt;-style URLs will work again immediately. Note that reverting will disable the new editor.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Summary checklist ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Step !! Action&lt;br /&gt;
|-&lt;br /&gt;
| ✅ || Verify web server URL rewriting is supported and enabled&lt;br /&gt;
|-&lt;br /&gt;
| ✅ || Log out of the LimeSurvey administration area&lt;br /&gt;
|-&lt;br /&gt;
| ✅ || Close all LimeSurvey browser tabs&lt;br /&gt;
|-&lt;br /&gt;
| ✅ || Edit &amp;lt;code&amp;gt;application/config/config.php&amp;lt;/code&amp;gt;: change &amp;lt;code&amp;gt;urlFormat&amp;lt;/code&amp;gt; from &amp;lt;code&amp;gt;&#039;get&#039;&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;&#039;path&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| ✅ || Open the admin area using the path-style URL: &amp;lt;code&amp;gt;…/index.php/admin&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| ✅ || Update or redirect any previously distributed survey links&lt;br /&gt;
|-&lt;br /&gt;
| ✅ || Update bookmarks and external integrations&lt;br /&gt;
|-&lt;br /&gt;
| ✅ || Activate the new editor from the editor selection modal&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Twilllig</name></author>
	</entry>
	<entry>
		<id>https://www.limesurvey.org/manual/index.php?title=LimeSurvey_7_Question_Editor&amp;diff=381082</id>
		<title>LimeSurvey 7 Question Editor</title>
		<link rel="alternate" type="text/html" href="https://www.limesurvey.org/manual/index.php?title=LimeSurvey_7_Question_Editor&amp;diff=381082"/>
		<updated>2026-03-26T12:23:00Z</updated>

		<summary type="html">&lt;p&gt;Twilllig: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Switching URL format from &amp;quot;get&amp;quot; to &amp;quot;path&amp;quot; to enable the new editor in LimeSurvey 7 ==&lt;br /&gt;
&lt;br /&gt;
=== Overview ===&lt;br /&gt;
&lt;br /&gt;
LimeSurvey 7 introduces a new React-based survey editor. If you are an existing LimeSurvey CE user who has upgraded from an earlier version, your installation is maybe configured to use the &#039;&#039;&#039;&amp;lt;code&amp;gt;get&amp;lt;/code&amp;gt;&#039;&#039;&#039; URL format. The new editor &#039;&#039;&#039;requires&#039;&#039;&#039; the &#039;&#039;&#039;&amp;lt;code&amp;gt;path&amp;lt;/code&amp;gt;&#039;&#039;&#039; URL format to be enabled. This article explains why, what the difference is, and how to make the switch safely.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Why is the URL format change required? ===&lt;br /&gt;
&lt;br /&gt;
The new React editor relies on modern browser routing and API calls that use &#039;&#039;&#039;path-based URLs&#039;&#039;&#039;. Internally, LimeSurvey checks whether the &amp;lt;code&amp;gt;path&amp;lt;/code&amp;gt; format is active before allowing the editor to be enabled. If your installation is still using the &amp;lt;code&amp;gt;get&amp;lt;/code&amp;gt; format, you will see the editor toggle either greyed out or accompanied by a warning message about the URL format requirement.&lt;br /&gt;
&lt;br /&gt;
In short: &#039;&#039;&#039;without switching to &amp;lt;code&amp;gt;path&amp;lt;/code&amp;gt;, the new editor cannot be activated.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== What is the difference between &amp;lt;code&amp;gt;get&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;path&amp;lt;/code&amp;gt; URL format? ===&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;get&amp;lt;/code&amp;gt; format (legacy default) ====&lt;br /&gt;
&lt;br /&gt;
Parameters are passed as HTTP query string arguments after a &amp;lt;code&amp;gt;?&amp;lt;/code&amp;gt; character.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Examples:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Page !! URL&lt;br /&gt;
|-&lt;br /&gt;
| Admin area || &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://example.com/limesurvey/index.php?r=admin&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Survey start || &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://example.com/limesurvey/index.php?r=survey/index&amp;amp;sid=123456&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Survey with token || &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://example.com/limesurvey/index.php?r=survey/index&amp;amp;sid=123456&amp;amp;token=abc123&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This format works on virtually all web server configurations without any special setup.&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;path&amp;lt;/code&amp;gt; format (required for the new editor) ====&lt;br /&gt;
&lt;br /&gt;
Parameters are embedded as segments of the URL path, separated by &amp;lt;code&amp;gt;/&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Examples:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Page !! URL&lt;br /&gt;
|-&lt;br /&gt;
| Admin area || &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://example.com/limesurvey/index.php/admin&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Survey start || &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://example.com/limesurvey/index.php/survey/index/sid/123456&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Survey with token || &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://example.com/limesurvey/index.php/survey/index/sid/123456/token/abc123&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This format produces cleaner, more readable URLs and is the standard for modern web applications. It requires the web server to support &#039;&#039;&#039;URL rewriting&#039;&#039;&#039; (Apache &amp;lt;code&amp;gt;mod_rewrite&amp;lt;/code&amp;gt;, nginx &amp;lt;code&amp;gt;try_files&amp;lt;/code&amp;gt;, or equivalent).&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;border-left: 4px solid #3a87ad; background-color: #d9edf7; padding: 8px 12px; width: 100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Note:&#039;&#039;&#039; With &amp;lt;code&amp;gt;showScriptName = true&amp;lt;/code&amp;gt; (the default), &amp;lt;code&amp;gt;index.php&amp;lt;/code&amp;gt; remains visible in the URL. Setting it to &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt; removes it entirely but requires additional server configuration and is not covered by this article.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== How to switch from &amp;lt;code&amp;gt;get&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;path&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Follow these steps carefully. It is important to &#039;&#039;&#039;log out and fully close LimeSurvey&#039;&#039;&#039; before editing the configuration, to avoid session inconsistencies.&lt;br /&gt;
&lt;br /&gt;
==== Step 1 – Verify your server supports URL rewriting ====&lt;br /&gt;
&lt;br /&gt;
Before making any changes, confirm that your web server has URL rewriting enabled:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Apache:&#039;&#039;&#039; The &amp;lt;code&amp;gt;mod_rewrite&amp;lt;/code&amp;gt; module must be enabled. Check that the &amp;lt;code&amp;gt;.htaccess&amp;lt;/code&amp;gt; file in your LimeSurvey root directory is being processed (&amp;lt;code&amp;gt;AllowOverride All&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;AllowOverride FileInfo Options&amp;lt;/code&amp;gt; must be set for your document root in the Apache configuration).&lt;br /&gt;
* &#039;&#039;&#039;nginx:&#039;&#039;&#039; Your &amp;lt;code&amp;gt;nginx.conf&amp;lt;/code&amp;gt; or site configuration must include a &amp;lt;code&amp;gt;try_files&amp;lt;/code&amp;gt; directive that forwards requests to &amp;lt;code&amp;gt;index.php&amp;lt;/code&amp;gt;.&lt;br /&gt;
* &#039;&#039;&#039;IIS:&#039;&#039;&#039; The URL Rewrite module must be installed and a &amp;lt;code&amp;gt;web.config&amp;lt;/code&amp;gt; rewrite rule must be in place.&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;border-left: 4px solid #d9534f; background-color: #f2dede; padding: 8px 12px; width: 100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Warning:&#039;&#039;&#039; If you are unsure whether URL rewriting works, try accessing a path-style URL after the change. If you get a 404 error, URL rewriting is not configured correctly. Consult your hosting provider before proceeding.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Step 2 – Log out of the LimeSurvey administration ====&lt;br /&gt;
&lt;br /&gt;
Log out from the LimeSurvey administration panel using the logout button. Do &#039;&#039;&#039;not&#039;&#039;&#039; simply close the browser tab.&lt;br /&gt;
&lt;br /&gt;
==== Step 3 – Close all LimeSurvey browser tabs ====&lt;br /&gt;
&lt;br /&gt;
Close all browser tabs or windows that have LimeSurvey open. This ensures that no old session data or cached URLs cause confusion after the configuration change.&lt;br /&gt;
&lt;br /&gt;
==== Step 4 – Edit &amp;lt;code&amp;gt;config.php&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
Open the file &amp;lt;code&amp;gt;application/config/config.php&amp;lt;/code&amp;gt; in a text editor on your server.&lt;br /&gt;
&lt;br /&gt;
Locate the &amp;lt;code&amp;gt;urlManager&amp;lt;/code&amp;gt; section. It will look similar to this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&#039;urlManager&#039; =&amp;gt; array(&lt;br /&gt;
    &#039;urlFormat&#039; =&amp;gt; &#039;get&#039;,   // &amp;lt;-- change this&lt;br /&gt;
    &#039;rules&#039; =&amp;gt; array(&lt;br /&gt;
        // You can add your own rules here&lt;br /&gt;
    ),&lt;br /&gt;
    &#039;showScriptName&#039; =&amp;gt; true,&lt;br /&gt;
),&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Change &amp;lt;code&amp;gt;&#039;get&#039;&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;&#039;path&#039;&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&#039;urlManager&#039; =&amp;gt; array(&lt;br /&gt;
    &#039;urlFormat&#039; =&amp;gt; &#039;path&#039;,  // &amp;lt;-- changed&lt;br /&gt;
    &#039;rules&#039; =&amp;gt; array(&lt;br /&gt;
        // You can add your own rules here&lt;br /&gt;
    ),&lt;br /&gt;
    &#039;showScriptName&#039; =&amp;gt; true,&lt;br /&gt;
),&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Save the file.&lt;br /&gt;
&lt;br /&gt;
==== Step 5 – Open the administration area with the correct URL ====&lt;br /&gt;
&lt;br /&gt;
Do &#039;&#039;&#039;not&#039;&#039;&#039; use a bookmark or browser history entry that still points to a &amp;lt;code&amp;gt;get&amp;lt;/code&amp;gt;-style URL. Instead, navigate manually to the path-style URL of your administration area:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;https://example.com/limesurvey/index.php/admin&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Replace &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://example.com/limesurvey&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; with your actual LimeSurvey base URL.&lt;br /&gt;
&lt;br /&gt;
Log in normally. The new editor can now be activated from the editor selection modal or from your account settings.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Risks and considerations when switching active surveys ===&lt;br /&gt;
&lt;br /&gt;
Switching the URL format is a &#039;&#039;&#039;breaking change&#039;&#039;&#039; for any URLs that were generated using the old &amp;lt;code&amp;gt;get&amp;lt;/code&amp;gt; format. Review the following points before proceeding.&lt;br /&gt;
&lt;br /&gt;
==== 1. Participant survey links will change ====&lt;br /&gt;
&lt;br /&gt;
If you have already distributed survey invitation links to participants — by email, SMS, or published on a website — those links use the old &amp;lt;code&amp;gt;get&amp;lt;/code&amp;gt;-style format and &#039;&#039;&#039;will stop working&#039;&#039;&#039; after the switch.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example of a broken old link:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;https://example.com/limesurvey/index.php?r=survey/index&amp;amp;sid=123456&amp;amp;token=abc123&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You have two options:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Update the links:&#039;&#039;&#039; Send participants the new path-style URL.&lt;br /&gt;
* &#039;&#039;&#039;Set up server-side redirects:&#039;&#039;&#039; Configure your web server to redirect old &amp;lt;code&amp;gt;?r=survey/index&amp;amp;sid=…&amp;lt;/code&amp;gt; URLs to the new path-style equivalent. This is the preferred approach when re-contacting participants is not practical.&lt;br /&gt;
&lt;br /&gt;
==== 2. Pending email invitations ====&lt;br /&gt;
&lt;br /&gt;
Email invitations already sent via the LimeSurvey token system contain embedded survey links. Those links are fixed in the email body and cannot be updated retroactively. Participants who have not yet opened their invitation will receive a broken link.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mitigation:&#039;&#039;&#039; Configure a server-side redirect as described above &#039;&#039;&#039;before&#039;&#039;&#039; making the switch.&lt;br /&gt;
&lt;br /&gt;
==== 3. Bookmarks and external integrations ====&lt;br /&gt;
&lt;br /&gt;
Any bookmarks saved by participants, or external systems (e.g., panel providers, CRM integrations) that call LimeSurvey using the old URL format, will break after the switch.&lt;br /&gt;
&lt;br /&gt;
Audit all known entry points to your surveys before switching.&lt;br /&gt;
&lt;br /&gt;
==== 4. Embedded surveys and iFrames ====&lt;br /&gt;
&lt;br /&gt;
If you have embedded surveys in external websites using &amp;lt;code&amp;gt;&amp;amp;lt;iframe&amp;amp;gt;&amp;lt;/code&amp;gt; or JavaScript embeds pointing to &amp;lt;code&amp;gt;get&amp;lt;/code&amp;gt;-style URLs, those embeds must be updated after the switch.&lt;br /&gt;
&lt;br /&gt;
==== 5. No impact on collected response data ====&lt;br /&gt;
&lt;br /&gt;
The URL format change does &#039;&#039;&#039;not&#039;&#039;&#039; affect your collected survey data, active survey configuration, question logic, or any other internal settings. The switch is purely about how URLs are structured externally.&lt;br /&gt;
&lt;br /&gt;
==== 6. Reverting is possible ====&lt;br /&gt;
&lt;br /&gt;
If you encounter problems, you can revert the change by setting &amp;lt;code&amp;gt;&#039;urlFormat&#039; =&amp;gt; &#039;get&#039;&amp;lt;/code&amp;gt; again in &amp;lt;code&amp;gt;config.php&amp;lt;/code&amp;gt; following the same steps above. The old &amp;lt;code&amp;gt;get&amp;lt;/code&amp;gt;-style URLs will work again immediately. Note that reverting will disable the new editor.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Summary checklist ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Step !! Action&lt;br /&gt;
|-&lt;br /&gt;
| ✅ || Verify web server URL rewriting is supported and enabled&lt;br /&gt;
|-&lt;br /&gt;
| ✅ || Log out of the LimeSurvey administration area&lt;br /&gt;
|-&lt;br /&gt;
| ✅ || Close all LimeSurvey browser tabs&lt;br /&gt;
|-&lt;br /&gt;
| ✅ || Edit &amp;lt;code&amp;gt;application/config/config.php&amp;lt;/code&amp;gt;: change &amp;lt;code&amp;gt;urlFormat&amp;lt;/code&amp;gt; from &amp;lt;code&amp;gt;&#039;get&#039;&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;&#039;path&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| ✅ || Open the admin area using the path-style URL: &amp;lt;code&amp;gt;…/index.php/admin&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| ✅ || Update or redirect any previously distributed survey links&lt;br /&gt;
|-&lt;br /&gt;
| ✅ || Update bookmarks and external integrations&lt;br /&gt;
|-&lt;br /&gt;
| ✅ || Activate the new editor from the editor selection modal&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Twilllig</name></author>
	</entry>
	<entry>
		<id>https://www.limesurvey.org/manual/index.php?title=QS:Answer_order&amp;diff=380667</id>
		<title>QS:Answer order</title>
		<link rel="alternate" type="text/html" href="https://www.limesurvey.org/manual/index.php?title=QS:Answer_order&amp;diff=380667"/>
		<updated>2025-11-20T13:47:35Z</updated>

		<summary type="html">&lt;p&gt;Twilllig: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===Answer options order (answer_order) / Subquestions order (subquestion_order) === &amp;lt;!--T:544--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:545--&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:546--&amp;gt;&lt;br /&gt;
&amp;quot;Answer options order&amp;quot; allows to set the order of answer options subquestions {{NewIn|5.5.0|b=221219}}&lt;br /&gt;
&amp;quot;Subquestions order&amp;quot; has the same purpose, but for question types with subquestions {{NewIn|6.16.0|b=251120}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:547--&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Available options&#039;&#039;&#039;&lt;br /&gt;
*Normal (default)&lt;br /&gt;
*Random - Randomize when participant enters survey&lt;br /&gt;
*Alphabetically&lt;br /&gt;
*Random A-Z/Z-A - Keep alphabetical order but randomize either from A-Z or Z-A when participant enters survey&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:550--&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Example for answer options&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:551--&amp;gt;&lt;br /&gt;
See [https://survey-consulting.com/how-to-randomize-items-at-limesurvey/#Randomizing_the_order_of_answersitems this example] (outside link) to better understand how to use different LimeSurvey randomization features. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:549--&amp;gt;&lt;br /&gt;
[[Category:Question Settings]][[Category:Question Display Options]]&lt;/div&gt;</summary>
		<author><name>Twilllig</name></author>
	</entry>
	<entry>
		<id>https://www.limesurvey.org/manual/index.php?title=QS:Answer_order&amp;diff=380666</id>
		<title>QS:Answer order</title>
		<link rel="alternate" type="text/html" href="https://www.limesurvey.org/manual/index.php?title=QS:Answer_order&amp;diff=380666"/>
		<updated>2025-11-20T13:35:40Z</updated>

		<summary type="html">&lt;p&gt;Twilllig: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===Answer options order (answer_order)=== &amp;lt;!--T:544--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:545--&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:546--&amp;gt;&lt;br /&gt;
This attribute allows to set the order of answer options. {{NewIn|5.5.0|b=221219}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:547--&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Available options&#039;&#039;&#039;&lt;br /&gt;
*Normal (default)&lt;br /&gt;
*Random - Randomize when participant enters survey&lt;br /&gt;
*Alphabetically&lt;br /&gt;
*Random A-Z/Z-A - Randomize alphabetical order either from A-Z or Z-A&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:550--&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:551--&amp;gt;&lt;br /&gt;
See [https://survey-consulting.com/how-to-randomize-items-at-limesurvey/#Randomizing_the_order_of_answersitems this example] (outside link) to better understand how to use different LimeSurvey randomization features. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:549--&amp;gt;&lt;br /&gt;
[[Category:Question Settings]][[Category:Question Display Options]]&lt;/div&gt;</summary>
		<author><name>Twilllig</name></author>
	</entry>
	<entry>
		<id>https://www.limesurvey.org/manual/index.php?title=Coding_guidelines&amp;diff=380571</id>
		<title>Coding guidelines</title>
		<link rel="alternate" type="text/html" href="https://www.limesurvey.org/manual/index.php?title=Coding_guidelines&amp;diff=380571"/>
		<updated>2025-10-06T09:36:32Z</updated>

		<summary type="html">&lt;p&gt;Twilllig: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
=General=&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;This is a free development, everything you do can be useful for others. If the feature is very personal there is a way to turn it into a universal solution. This is the challenge!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;simplebox&amp;quot;&amp;gt;&amp;quot;The difficulty within a solution is to solve it in a simple way&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(Lance Burton, magician)&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Some general rules:&lt;br /&gt;
*Be efficient and save resources (memory and runtime). Things might work for a small survey but also try out your new feature with a survey that has 400 question, 5 languages and 20,000 responses (Yes, there are surveys like this out there).&lt;br /&gt;
*Keep a fluid dialog with the others coders, they have their own thoughts about what you are doing.&lt;br /&gt;
*Ask if you are in doubt.&lt;br /&gt;
&lt;br /&gt;
=Documentation=&lt;br /&gt;
&lt;br /&gt;
Please document your source code - see this introduction: [[How to document your source code]].&lt;br /&gt;
&lt;br /&gt;
= Coding Standards and MVC Architecture in LimeSurvey Development =&lt;br /&gt;
&lt;br /&gt;
LimeSurvey is built on the &#039;&#039;&#039;Yii framework&#039;&#039;&#039;, which provides the foundation for its Model-View-Controller (MVC) structure. Yii has its own conventions and tools that influence how models, views, and controllers are implemented. While some areas of the LimeSurvey codebase predate the adoption of Yii or use older approaches, new development should always align with Yii’s MVC principles and the guidelines described below.&lt;br /&gt;
&lt;br /&gt;
As you probably know it is an &#039;&#039;&#039;open-source survey platform&#039;&#039;&#039; with contributions from developers around the world. Like many long-lived open-source projects, its codebase has evolved over time, and you may encounter different approaches to structuring the code. Some older parts of the system may not follow modern best practices or the &#039;&#039;&#039;Model-View-Controller (MVC)&#039;&#039;&#039; architecture as strictly as newer code.&lt;br /&gt;
&lt;br /&gt;
While this variety reflects the project’s history, new development should follow the current standards. Staying focused on the recommended guidelines helps keep LimeSurvey maintainable, testable, and easier to extend in the future—without being distracted by legacy approaches.&lt;br /&gt;
&lt;br /&gt;
== Understanding MVC in LimeSurvey ==&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;MVC pattern&#039;&#039;&#039; divides an application into three interconnected layers, each with a clear responsibility:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Models&#039;&#039;&#039; – Represent the data and contain business rules related to that data. Models handle database interactions, validations, and data transformations.  &lt;br /&gt;
* &#039;&#039;&#039;Views&#039;&#039;&#039; – Manage the presentation layer. They are responsible for displaying information to the user and should not contain business logic.  &lt;br /&gt;
* &#039;&#039;&#039;Controllers&#039;&#039;&#039; – Act as intermediaries, handling incoming requests, coordinating with models, and choosing the correct views to render.  &lt;br /&gt;
&lt;br /&gt;
By keeping these responsibilities separate, developers can more easily test, extend, and debug their code.&lt;br /&gt;
&lt;br /&gt;
== Where Business Logic Belongs ==&lt;br /&gt;
&lt;br /&gt;
One of the most common pitfalls in MVC development is misplacing business logic. In LimeSurvey development, the recommended approach is:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Models&#039;&#039;&#039;: Store business rules and perform operations directly related to the data, such as validations and relationships.  &lt;br /&gt;
* &#039;&#039;&#039;Service Classes&#039;&#039;&#039;: Handle more complex operations that span across multiple models or involve higher-level application logic. For example see: \LimeSurvey\Models\Services\QuestionAggregateService &lt;br /&gt;
&lt;br /&gt;
Controllers should remain as thin as possible. Their main role is to receive requests, pass data to the appropriate services or models, and return responses via the correct views.&lt;br /&gt;
&lt;br /&gt;
== Best Practices for Clean Code ==&lt;br /&gt;
&lt;br /&gt;
To keep your LimeSurvey contributions maintainable and consistent with the project’s standards, follow these practices:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Keep controllers lightweight&#039;&#039;&#039; – They should primarily manage request/response flow and delegate logic to models or services.  &lt;br /&gt;
* &#039;&#039;&#039;Move complex logic into service classes&#039;&#039;&#039; – If a piece of functionality requires multiple steps or involves multiple models, encapsulate it in a dedicated service.  &lt;br /&gt;
* &#039;&#039;&#039;Use models for data operations&#039;&#039;&#039; – Models should clearly represent data structures and provide methods for interacting with the database.  &lt;br /&gt;
* &#039;&#039;&#039;Keep views presentation-only&#039;&#039;&#039; – Views should focus on displaying data. They should not contain calculations, validations, or business rules.  &lt;br /&gt;
* &#039;&#039;&#039;Apply dependency injection&#039;&#039;&#039; – This improves testability and flexibility by avoiding hard-coded dependencies.  &lt;br /&gt;
&lt;br /&gt;
= Twig Templates in LimeSurvey =&lt;br /&gt;
&lt;br /&gt;
LimeSurvey uses the &#039;&#039;&#039;Twig templating engine&#039;&#039;&#039; for rendering much of the survey-taking interface. Twig provides a clean separation between logic and presentation, making it easier to customize themes and maintain a consistent look and feel across surveys.&lt;br /&gt;
&lt;br /&gt;
== What is Twig? ==&lt;br /&gt;
&lt;br /&gt;
Twig is a fast, secure, and flexible templating language for PHP. It allows developers and theme designers to write templates that are easy to read and extend, without mixing in raw PHP code.   &lt;br /&gt;
&lt;br /&gt;
== Where LimeSurvey Uses Twig ==&lt;br /&gt;
&lt;br /&gt;
Twig is primarily used in the survey-taking portion of LimeSurvey:&lt;br /&gt;
* &#039;&#039;&#039;Survey themes&#039;&#039;&#039; – Layout, structure, and style of the survey pages  &lt;br /&gt;
* &#039;&#039;&#039;Question rendering&#039;&#039;&#039; – How individual questions and groups are displayed  &lt;br /&gt;
* &#039;&#039;&#039;Template overrides&#039;&#039;&#039; – Custom themes can override core Twig templates for tailored designs  &lt;br /&gt;
&lt;br /&gt;
== Best Practices for Twig in LimeSurvey ==&lt;br /&gt;
&lt;br /&gt;
When working with Twig templates in LimeSurvey, follow these guidelines:&lt;br /&gt;
* &#039;&#039;&#039;Keep logic out of templates&#039;&#039;&#039; – Use Twig for presentation only, not business rules  &lt;br /&gt;
* &#039;&#039;&#039;Test in multiple themes&#039;&#039;&#039; – Ensure your changes work across different devices and survey layouts  &lt;br /&gt;
&lt;br /&gt;
== Developer Tips ==&lt;br /&gt;
&lt;br /&gt;
* Default Twig templates for survey-taking are located in the `application/views/survey/` and theme directories.  &lt;br /&gt;
* Custom survey themes should include a `twig` folder for template overrides.  &lt;br /&gt;
* Always clear LimeSurvey’s cache after making changes to Twig files to see updates.  &lt;br /&gt;
* Review the official [https://twig.symfony.com/doc/ Twig documentation] for the full syntax and feature set.  &lt;br /&gt;
&lt;br /&gt;
[[Category:Development guidelines]]&lt;br /&gt;
[[Category:Survey themes]]&lt;br /&gt;
&lt;br /&gt;
= JavaScript Packages in LimeSurvey =&lt;br /&gt;
&lt;br /&gt;
LimeSurvey includes several JavaScript packages that provide functionality for the administration interface as well as the survey-taking environment. These packages are organized under the `assets/packages/` directory and are built to keep front-end code modular, maintainable, and consistent.&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
JavaScript in LimeSurvey is mostly organized into &#039;&#039;&#039;packages&#039;&#039;&#039; that can include:&lt;br /&gt;
* JavaScript source files  &lt;br /&gt;
* Stylesheets (CSS/SCSS)  &lt;br /&gt;
* Build configuration (Webpack, npm/yarn dependencies)  &lt;br /&gt;
&lt;br /&gt;
When developing new js this package approach should be followed. &lt;br /&gt;
This ensures that front-end code can be bundled, minified, and versioned properly, while avoiding duplication and conflicts.&lt;br /&gt;
&lt;br /&gt;
== Building JavaScript Packages ==&lt;br /&gt;
&lt;br /&gt;
When a new feature requires JavaScript functionality, it is typically developed inside a dedicated package folder under `assets/packages/`. Each package can define:&lt;br /&gt;
* An `src/` directory for source files  &lt;br /&gt;
* A `dist/` or `build/` output for the compiled files  &lt;br /&gt;
* Dependencies declared in `package.json`  &lt;br /&gt;
&lt;br /&gt;
The build system (commonly Webpack or a similar bundler) compiles modern JavaScript (ES6+) and frameworks like Vue into browser-ready files. These are then registered in LimeSurvey’s asset manager to be loaded when needed.&lt;br /&gt;
&lt;br /&gt;
== Example: adminbasics ==&lt;br /&gt;
&lt;br /&gt;
The package `assets/packages/adminbasics` contains JavaScript and styles used across the LimeSurvey administration interface.  &lt;br /&gt;
&lt;br /&gt;
Typical functionality includes:&lt;br /&gt;
* General UI helpers  &lt;br /&gt;
* Event handlers for common actions in the admin panel   &lt;br /&gt;
&lt;br /&gt;
This package acts as a foundation layer for other admin UI features.&lt;br /&gt;
&lt;br /&gt;
The dependencies for adminbasics package need to be installed with the command yarn.&lt;br /&gt;
&lt;br /&gt;
There are the following commands available:&lt;br /&gt;
* dev to build a non minified version of the assets with rollup&lt;br /&gt;
* prod to build a minified version of the assets with rollup&lt;br /&gt;
* build to build a non minified and a minified version of the assets with rollup in one step&lt;br /&gt;
* test to run the test cases&lt;br /&gt;
&lt;br /&gt;
== Example: adminsidepanel (Vue.js) ==&lt;br /&gt;
&lt;br /&gt;
The package `assets/packages/adminsidepanel` provides the code for the collapsible side panel in the administration interface. Unlike other parts of LimeSurvey, this package is built with the &#039;&#039;&#039;Vue.js framework&#039;&#039;&#039;.  &lt;br /&gt;
&lt;br /&gt;
Key points:&lt;br /&gt;
* The side panel is a &#039;&#039;&#039;Vue single-page component&#039;&#039;&#039; embedded into the admin UI  &lt;br /&gt;
* Vue allows the panel to be reactive, updating its content dynamically without reloading the whole page  &lt;br /&gt;
* The build process compiles `.vue` files and JavaScript modules into a single bundle served by LimeSurvey  &lt;br /&gt;
&lt;br /&gt;
For building this package, you need to have node version 14 installed (not higher!)&lt;br /&gt;
The dependencies for adminsidepanel package need to be installed with the command yarn.&lt;br /&gt;
&lt;br /&gt;
There are the following commands:&lt;br /&gt;
    * serve to run the component with hot-reloading (all changes are visible without compiling again)&lt;br /&gt;
    * build to build a non minified and a minified version of the assets in one step&lt;br /&gt;
    * prod to build a minified version of the assets&lt;br /&gt;
    * dev to build a minified version of the assets with the development mode&lt;br /&gt;
&lt;br /&gt;
== Best Practices for Developing New Packages ==&lt;br /&gt;
&lt;br /&gt;
When adding or updating JavaScript functionality in LimeSurvey:&lt;br /&gt;
* Place your code inside a new or existing `assets/packages/` folder  &lt;br /&gt;
* Keep code modular and organized under `src/`  &lt;br /&gt;
* Use the build system (npm/yarn + Webpack) to compile assets into distributable bundles  &lt;br /&gt;
* Avoid inline JavaScript in views whenever possible  &lt;br /&gt;
* For complex interactive features, consider using modern frameworks like Vue (as with `adminsidepanel`)  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Development guidelines]]&lt;br /&gt;
[[Category:JavaScript]]&lt;br /&gt;
&lt;br /&gt;
= Bootstrap 5 and Gulp Build System in LimeSurvey Themes =&lt;br /&gt;
&lt;br /&gt;
LimeSurvey has upgraded to &#039;&#039;&#039;Bootstrap 5&#039;&#039;&#039; for both its administration and survey themes. This modern framework enhances consistency, responsiveness, and maintainability across the UI.&lt;br /&gt;
&lt;br /&gt;
To manage and generate theme-specific stylesheets and scripts, LimeSurvey uses a &#039;&#039;&#039;Gulp build system&#039;&#039;&#039; — defined in a `gulpfile.js` — that handles CSS/JS compilation, theme variations, and RTL support.&lt;br /&gt;
&lt;br /&gt;
== Gulp Tasks Overview ==&lt;br /&gt;
&lt;br /&gt;
The `gulpfile.js` orchestrates four main build areas:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Bootstrap 5 Assets&#039;&#039;&#039; – Compiles and minifies Bootstrap 5 JavaScript and SCSS files. Outputs both standard and RTL (Right-to-Left) versions.&lt;br /&gt;
&#039;&#039;&#039;Commands&#039;&#039;&#039;&lt;br /&gt;
* `gulp build` – Builds all Bootstrap 5 assets  &lt;br /&gt;
* `gulp watch` – Watches for changes and rebuilds automatically&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Admin Theme (&amp;quot;Sea Green&amp;quot;)&#039;&#039;&#039; – Processes SCSS files of the admin theme into CSS.&lt;br /&gt;
&#039;&#039;&#039;Commands:&#039;&#039;&#039;&lt;br /&gt;
* `gulp build_theme` – Builds the admin theme  &lt;br /&gt;
* `gulp watch_theme` – Watches for changes in admin theme files&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Fruity Survey Theme (Legacy)&#039;&#039;&#039; – Generates multiple color variations of the original Fruity survey theme.&lt;br /&gt;
&#039;&#039;&#039;Commands:&#039;&#039;&#039;&lt;br /&gt;
* `gulp build_survey_theme_fruity` – Builds all Fruity theme variations  &lt;br /&gt;
* `gulp watch_survey_theme_fruity` – Watches for changes to Fruity theme files&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;LS6 Survey Theme (&amp;quot;Fruity TwentyThree&amp;quot;)&#039;&#039;&#039; – Builds the newer LS6 survey theme (Fruity TwentyThree) along with its variations, including JavaScript processing.&lt;br /&gt;
&#039;&#039;&#039;Commands:&#039;&#039;&#039;&lt;br /&gt;
* `gulp build_survey_theme_ls6` – Builds all LS6 theme assets  &lt;br /&gt;
* `gulp watch_survey_theme_ls6` – Watches for changes to LS6 theme files&lt;br /&gt;
&lt;br /&gt;
== SCSS File Locations &amp;amp; Component-Based Structure ==&lt;br /&gt;
&lt;br /&gt;
SCSS files in LimeSurvey are organized to keep styling modular and maintainable.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Admin Theme – Sea Green&#039;&#039;&#039;  &lt;br /&gt;
  Located under:  &lt;br /&gt;
  `assets/admin_themes/Sea_Green/`  &lt;br /&gt;
  This directory contains SCSS source files arranged in components (e.g., `_variables.scss`, `_buttons.scss`, `_layout.scss`) and a main entry point SCSS file that brings them together for compilation.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Survey Theme – Fruity TwentyThree (LS6)&#039;&#039;&#039;  &lt;br /&gt;
  Located under:  &lt;br /&gt;
  `assets/survey_themes/fruity_twentythree/`  &lt;br /&gt;
  SCSS files here are similarly split into component files (e.g., typography, colors, forms), along with CSS or JS files as needed. The main SCSS file imports these components and is picked up by the Gulp task for building.&lt;br /&gt;
&lt;br /&gt;
This component-based approach allows for easier styling, overrides, and theme variation without duplicating code.&lt;br /&gt;
&lt;br /&gt;
== Why This Matters ==&lt;br /&gt;
&lt;br /&gt;
Using Bootstrap 5 along with Gulp-driven build automation ensures:&lt;br /&gt;
&lt;br /&gt;
* Consistent and responsive design across admin and survey interfaces.  &lt;br /&gt;
* Streamlined workflows for theme development and maintenance.  &lt;br /&gt;
* Flexibility to generate color variations and handle RTL languages cleanly.  &lt;br /&gt;
* Easier updates to design components — change one SCSS component, rebuild, and it&#039;s applied globally.&lt;br /&gt;
&lt;br /&gt;
== How to Contribute or Customize ==&lt;br /&gt;
&lt;br /&gt;
1. Navigate to the relevant theme folder (e.g. `assets/admin_themes/Sea_Green/` or `assets/survey_themes/fruity_twentythree/`).&lt;br /&gt;
2. Modify or add SCSS components as needed. &lt;br /&gt;
3. Run one of the Gulp build commands above to compile:&lt;br /&gt;
   * For example:  &lt;br /&gt;
     ```bash&lt;br /&gt;
     gulp build_survey_theme_ls6&lt;br /&gt;
     ```&lt;br /&gt;
4. Clear LimeSurvey’s asset cache (from the admin interface or manually) to see your changes live in the UI.&lt;br /&gt;
&lt;br /&gt;
Important: when you have to define sizes (fonts, margins, paddings, etc), use the variables we defined in the ...variables.scss (e.g.: assets/admin_themes/Sea_Green/sea_green_variables.scss) file.&lt;br /&gt;
&lt;br /&gt;
[[Category:Development guidelines]]&lt;br /&gt;
[[Category:Themes]]&lt;br /&gt;
[[Category:CSS/SCSS]]&lt;br /&gt;
&lt;br /&gt;
=HTML=&lt;br /&gt;
*As you will notice, a very customized HTML element can take a lot of lines (very expensive if you paid each one (:wink:) ) to avoid that, use &#039;CSS classes&#039;. In general, use classes to aesthetic related stuff: color, borders, backgrounds, font faces, sizes, etc.&lt;br /&gt;
*Respect W3C standards, and try to use the HTML understandable for all browsers. If one of them has a special feature, think if this feature is so special to break down the HTML in other browsers.&lt;br /&gt;
*Do not use PHP short tags &amp;lt;? ?&amp;gt;. Always use full PHP tags &amp;lt;?php ?&amp;gt;. Excluded from this is the echo shorthand &amp;lt;?=. Which is allowed as per PSR standard.&lt;br /&gt;
*Any rules of the mentioned before: about CSS, well closed HTML tags and JS respect XHTML standards. Give it a try!.&lt;br /&gt;
&lt;br /&gt;
=Localization=&lt;br /&gt;
&lt;br /&gt;
Moved to https://manual.limesurvey.org/Code_quality_guide#Localization&lt;br /&gt;
&lt;br /&gt;
=Bug tracker=&lt;br /&gt;
#First consider if the reported issue is really a bug. If it is a feature request please move it to the feature tracker.&lt;br /&gt;
#If you would like to work on a bug assign it to yourself.&lt;br /&gt;
#Try to reproduce the issue.&lt;br /&gt;
##If you cannot reproduce ask the user to provide a small example survey to demonstrate the issue. Then set the issue to &#039;Feedback&#039;. After the user added the necessary information it will automatically be set to &#039;Assigned&#039; again.&lt;br /&gt;
##If the user does not responds for more than a week ask once again for feedback by adding a comment. After a further week without feedback close the issue.&lt;br /&gt;
#After you resolved the issue set the status to resolved AND provide the &#039;Fixed in version&#039; information.&lt;br /&gt;
#After you committed a fix and use the proper GIt commit message naming the commit will be automatically assigned to your bug report.&lt;br /&gt;
#After a release the release technician will set all issues to &#039;Closed&#039; that were fixed for this release. That signals to the reporter that a fix is available in the version and it was just released. The release technicial will also add a comment to the close issue: &#039;Fixed in &amp;lt;Version&amp;gt; &amp;lt;Build number&amp;gt;&#039;&lt;br /&gt;
&lt;br /&gt;
=Cross-DB compatibility=&lt;br /&gt;
&lt;br /&gt;
LimeSurvey targets several database types it can run on: MySQL, Postgres and Microsoft SQL Server. This demands certain precautions when coding&lt;br /&gt;
&lt;br /&gt;
==Parameter binding==&lt;br /&gt;
&lt;br /&gt;
Yii/PDO supports parameter binding - use it. Don&#039;t inject variables directly into the query or into conditions because this might create a security issue.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&amp;lt;?php&lt;br /&gt;
$oResult = Yii::app()-&amp;gt;db&lt;br /&gt;
                    -&amp;gt;createCommand()&lt;br /&gt;
                    -&amp;gt;select(&#039;somefield&#039;)&lt;br /&gt;
                    -&amp;gt;where(&amp;quot;sid = :sid&amp;quot;)&lt;br /&gt;
                    -&amp;gt;from(&#039;{{sometable}}&#039;)&lt;br /&gt;
                    -&amp;gt;bindParam(&amp;quot;:sid&amp;quot;, $surveyid, PDO::PARAM_INT);&lt;br /&gt;
?&amp;gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you bind the same value several times do NOT use the same parameter name, instead use a different named parameter for each bind:&lt;br /&gt;
&lt;br /&gt;
WRONG:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&amp;lt;?php&lt;br /&gt;
$oResult = Yii::app()-&amp;gt;db&lt;br /&gt;
                    -&amp;gt;createCommand()&lt;br /&gt;
                    -&amp;gt;select(&#039;somefield&#039;)&lt;br /&gt;
                    -&amp;gt;where(&amp;quot;sid = :sid and parent_sid= :sid &amp;quot;)&lt;br /&gt;
                    -&amp;gt;from(&#039;{{sometable}}&#039;)&lt;br /&gt;
                    -&amp;gt;bindParam(&amp;quot;:sid&amp;quot;, $surveyid, PDO::PARAM_INT);&lt;br /&gt;
?&amp;gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
RIGHT:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&amp;lt;?php&lt;br /&gt;
$oResult = Yii::app()-&amp;gt;db&lt;br /&gt;
                    -&amp;gt;createCommand()&lt;br /&gt;
                    -&amp;gt;select(&#039;somefield&#039;)&lt;br /&gt;
                    -&amp;gt;where(&amp;quot;sid = :sid1 and parent_sid= :sid2 &amp;quot;)&lt;br /&gt;
                    -&amp;gt;from(&#039;{{sometable}}&#039;)&lt;br /&gt;
                    -&amp;gt;bindParam(&amp;quot;:sid1&amp;quot;, $surveyid, PDO::PARAM_INT)&lt;br /&gt;
                    -&amp;gt;bindParam(&amp;quot;:sid2&amp;quot;, $surveyid, PDO::PARAM_INT);&lt;br /&gt;
?&amp;gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Quote column name==&lt;br /&gt;
&lt;br /&gt;
Some column name must be quoted for DB compatibility. You can use [https://www.yiiframework.com/doc/api/1.1/CDbConnection#quoteColumnName-detail App()-&amp;gt;db-&amp;gt;quoteColumnName].&lt;br /&gt;
&lt;br /&gt;
Know column needed to be quoted :&lt;br /&gt;
&lt;br /&gt;
* Column name statring with number( column in survey database)&lt;br /&gt;
* Reserved &amp;lt;code&amp;gt;key&amp;lt;/code&amp;gt; word column name&lt;br /&gt;
&lt;br /&gt;
=Code complexity=&lt;br /&gt;
*If using an auxiliary variable makes clear the code or process, just do it. If you are coding a very complex expression, calling to functions with parameters that are other functions:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
WRONG:&lt;br /&gt;
&lt;br /&gt;
iAResult= fa(fb(p1,p2),fc(fd(p3),p4),p5)&lt;br /&gt;
&lt;br /&gt;
It will be more readable:&lt;br /&gt;
&lt;br /&gt;
iAuxB = fb(p1,p2)&lt;br /&gt;
iAuxD = fd(p3)&lt;br /&gt;
iAuxC = fc(iAuxD,p4)&lt;br /&gt;
iAResult = fa(iAuxB, iAuxC, p5)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anyway, if you are in doubt about someone missing the point or you are afraid that your expression is obscure, take the chance of writing it in a more simple way, even if that involves the use of one or more auxiliary variables.&lt;br /&gt;
&lt;br /&gt;
=Checklist for new features=&lt;br /&gt;
If you implement a new feature please make sure that you checked the following things before you create a pull request/commit your new feature:&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Localization&#039;&#039;&#039;: Do all texts (that are usually visible to the user) use the localization/translation system (gT, eT, etc.)?&lt;br /&gt;
*&#039;&#039;&#039;Permissions&#039;&#039;&#039;: Does the feature obey the permission system (global permissions, survey permissions)?&lt;br /&gt;
*&#039;&#039;&#039;Backward-compatibility&#039;&#039;&#039;: Does the feature still work when updating from any old version? Does it maybe break the update?&lt;br /&gt;
*&#039;&#039;&#039;Database compatibility&#039;&#039;&#039;: Does it work on all database types (MySQL, MSSQL, Postgres)?&lt;br /&gt;
*&#039;&#039;&#039;Scaling&#039;&#039;&#039;: Does your feature scale? For example; It will work fine with 10 surveys, does it still work performant with 10000?&lt;br /&gt;
*&#039;&#039;&#039;Performance&#039;&#039;&#039;: Does your feature use the minimal possible number of SQL queries (see also Scaling). &lt;br /&gt;
*&#039;&#039;&#039;QA&#039;&#039;&#039;: Did you test your code for all scenarios? Did you let someone else test or read your code?&lt;br /&gt;
*&#039;&#039;&#039;Acceptance tests&#039;&#039;&#039;: Did you write automatic acceptance tests for your specification?&lt;br /&gt;
*&#039;&#039;&#039;Discussions&#039;&#039;&#039;: Did you discuss the new feature with the team for feedback?&lt;br /&gt;
&lt;br /&gt;
Also see [https://manual.limesurvey.org/How_to_contribute_new_features How_to_contribute_new_features].&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>Twilllig</name></author>
	</entry>
	<entry>
		<id>https://www.limesurvey.org/manual/index.php?title=Coding_guidelines&amp;diff=380510</id>
		<title>Coding guidelines</title>
		<link rel="alternate" type="text/html" href="https://www.limesurvey.org/manual/index.php?title=Coding_guidelines&amp;diff=380510"/>
		<updated>2025-08-29T07:45:13Z</updated>

		<summary type="html">&lt;p&gt;Twilllig: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
=General=&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;This is a free development, everything you do can be useful for others. If the feature is very personal there is a way to turn it into a universal solution. This is the challenge!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;simplebox&amp;quot;&amp;gt;&amp;quot;The difficulty within a solution is to solve it in a simple way&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(Lance Burton, magician)&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Some general rules:&lt;br /&gt;
*Be efficient and save resources (memory and runtime). Things might work for a small survey but also try out your new feature with a survey that has 400 question, 5 languages and 20,000 responses (Yes, there are surveys like this out there).&lt;br /&gt;
*Keep a fluid dialog with the others coders, they have their own thoughts about what you are doing.&lt;br /&gt;
*Ask if you are in doubt.&lt;br /&gt;
&lt;br /&gt;
=Documentation=&lt;br /&gt;
&lt;br /&gt;
Please document your source code - see this introduction: [[How to document your source code]].&lt;br /&gt;
&lt;br /&gt;
= Coding Standards and MVC Architecture in LimeSurvey Development =&lt;br /&gt;
&lt;br /&gt;
LimeSurvey is built on the &#039;&#039;&#039;Yii framework&#039;&#039;&#039;, which provides the foundation for its Model-View-Controller (MVC) structure. Yii has its own conventions and tools that influence how models, views, and controllers are implemented. While some areas of the LimeSurvey codebase predate the adoption of Yii or use older approaches, new development should always align with Yii’s MVC principles and the guidelines described below.&lt;br /&gt;
&lt;br /&gt;
As you probably know it is an &#039;&#039;&#039;open-source survey platform&#039;&#039;&#039; with contributions from developers around the world. Like many long-lived open-source projects, its codebase has evolved over time, and you may encounter different approaches to structuring the code. Some older parts of the system may not follow modern best practices or the &#039;&#039;&#039;Model-View-Controller (MVC)&#039;&#039;&#039; architecture as strictly as newer code.&lt;br /&gt;
&lt;br /&gt;
While this variety reflects the project’s history, new development should follow the current standards. Staying focused on the recommended guidelines helps keep LimeSurvey maintainable, testable, and easier to extend in the future—without being distracted by legacy approaches.&lt;br /&gt;
&lt;br /&gt;
== Understanding MVC in LimeSurvey ==&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;MVC pattern&#039;&#039;&#039; divides an application into three interconnected layers, each with a clear responsibility:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Models&#039;&#039;&#039; – Represent the data and contain business rules related to that data. Models handle database interactions, validations, and data transformations.  &lt;br /&gt;
* &#039;&#039;&#039;Views&#039;&#039;&#039; – Manage the presentation layer. They are responsible for displaying information to the user and should not contain business logic.  &lt;br /&gt;
* &#039;&#039;&#039;Controllers&#039;&#039;&#039; – Act as intermediaries, handling incoming requests, coordinating with models, and choosing the correct views to render.  &lt;br /&gt;
&lt;br /&gt;
By keeping these responsibilities separate, developers can more easily test, extend, and debug their code.&lt;br /&gt;
&lt;br /&gt;
== Where Business Logic Belongs ==&lt;br /&gt;
&lt;br /&gt;
One of the most common pitfalls in MVC development is misplacing business logic. In LimeSurvey development, the recommended approach is:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Models&#039;&#039;&#039;: Store business rules and perform operations directly related to the data, such as validations and relationships.  &lt;br /&gt;
* &#039;&#039;&#039;Service Classes&#039;&#039;&#039;: Handle more complex operations that span across multiple models or involve higher-level application logic. For example see: \LimeSurvey\Models\Services\QuestionAggregateService &lt;br /&gt;
&lt;br /&gt;
Controllers should remain as thin as possible. Their main role is to receive requests, pass data to the appropriate services or models, and return responses via the correct views.&lt;br /&gt;
&lt;br /&gt;
== Best Practices for Clean Code ==&lt;br /&gt;
&lt;br /&gt;
To keep your LimeSurvey contributions maintainable and consistent with the project’s standards, follow these practices:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Keep controllers lightweight&#039;&#039;&#039; – They should primarily manage request/response flow and delegate logic to models or services.  &lt;br /&gt;
* &#039;&#039;&#039;Move complex logic into service classes&#039;&#039;&#039; – If a piece of functionality requires multiple steps or involves multiple models, encapsulate it in a dedicated service.  &lt;br /&gt;
* &#039;&#039;&#039;Use models for data operations&#039;&#039;&#039; – Models should clearly represent data structures and provide methods for interacting with the database.  &lt;br /&gt;
* &#039;&#039;&#039;Keep views presentation-only&#039;&#039;&#039; – Views should focus on displaying data. They should not contain calculations, validations, or business rules.  &lt;br /&gt;
* &#039;&#039;&#039;Apply dependency injection&#039;&#039;&#039; – This improves testability and flexibility by avoiding hard-coded dependencies.  &lt;br /&gt;
&lt;br /&gt;
= Twig Templates in LimeSurvey =&lt;br /&gt;
&lt;br /&gt;
LimeSurvey uses the &#039;&#039;&#039;Twig templating engine&#039;&#039;&#039; for rendering much of the survey-taking interface. Twig provides a clean separation between logic and presentation, making it easier to customize themes and maintain a consistent look and feel across surveys.&lt;br /&gt;
&lt;br /&gt;
== What is Twig? ==&lt;br /&gt;
&lt;br /&gt;
Twig is a fast, secure, and flexible templating language for PHP. It allows developers and theme designers to write templates that are easy to read and extend, without mixing in raw PHP code.   &lt;br /&gt;
&lt;br /&gt;
== Where LimeSurvey Uses Twig ==&lt;br /&gt;
&lt;br /&gt;
Twig is primarily used in the survey-taking portion of LimeSurvey:&lt;br /&gt;
* &#039;&#039;&#039;Survey themes&#039;&#039;&#039; – Layout, structure, and style of the survey pages  &lt;br /&gt;
* &#039;&#039;&#039;Question rendering&#039;&#039;&#039; – How individual questions and groups are displayed  &lt;br /&gt;
* &#039;&#039;&#039;Template overrides&#039;&#039;&#039; – Custom themes can override core Twig templates for tailored designs  &lt;br /&gt;
&lt;br /&gt;
== Best Practices for Twig in LimeSurvey ==&lt;br /&gt;
&lt;br /&gt;
When working with Twig templates in LimeSurvey, follow these guidelines:&lt;br /&gt;
* &#039;&#039;&#039;Keep logic out of templates&#039;&#039;&#039; – Use Twig for presentation only, not business rules  &lt;br /&gt;
* &#039;&#039;&#039;Test in multiple themes&#039;&#039;&#039; – Ensure your changes work across different devices and survey layouts  &lt;br /&gt;
&lt;br /&gt;
== Developer Tips ==&lt;br /&gt;
&lt;br /&gt;
* Default Twig templates for survey-taking are located in the `application/views/survey/` and theme directories.  &lt;br /&gt;
* Custom survey themes should include a `twig` folder for template overrides.  &lt;br /&gt;
* Always clear LimeSurvey’s cache after making changes to Twig files to see updates.  &lt;br /&gt;
* Review the official [https://twig.symfony.com/doc/ Twig documentation] for the full syntax and feature set.  &lt;br /&gt;
&lt;br /&gt;
[[Category:Development guidelines]]&lt;br /&gt;
[[Category:Survey themes]]&lt;br /&gt;
&lt;br /&gt;
= JavaScript Packages in LimeSurvey =&lt;br /&gt;
&lt;br /&gt;
LimeSurvey includes several JavaScript packages that provide functionality for the administration interface as well as the survey-taking environment. These packages are organized under the `assets/packages/` directory and are built to keep front-end code modular, maintainable, and consistent.&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
JavaScript in LimeSurvey is mostly organized into &#039;&#039;&#039;packages&#039;&#039;&#039; that can include:&lt;br /&gt;
* JavaScript source files  &lt;br /&gt;
* Stylesheets (CSS/SCSS)  &lt;br /&gt;
* Build configuration (Webpack, npm/yarn dependencies)  &lt;br /&gt;
&lt;br /&gt;
When developing new js this package approach should be followed. &lt;br /&gt;
This ensures that front-end code can be bundled, minified, and versioned properly, while avoiding duplication and conflicts.&lt;br /&gt;
&lt;br /&gt;
== Building JavaScript Packages ==&lt;br /&gt;
&lt;br /&gt;
When a new feature requires JavaScript functionality, it is typically developed inside a dedicated package folder under `assets/packages/`. Each package can define:&lt;br /&gt;
* An `src/` directory for source files  &lt;br /&gt;
* A `dist/` or `build/` output for the compiled files  &lt;br /&gt;
* Dependencies declared in `package.json`  &lt;br /&gt;
&lt;br /&gt;
The build system (commonly Webpack or a similar bundler) compiles modern JavaScript (ES6+) and frameworks like Vue into browser-ready files. These are then registered in LimeSurvey’s asset manager to be loaded when needed.&lt;br /&gt;
&lt;br /&gt;
== Example: adminbasics ==&lt;br /&gt;
&lt;br /&gt;
The package `assets/packages/adminbasics` contains JavaScript and styles used across the LimeSurvey administration interface.  &lt;br /&gt;
&lt;br /&gt;
Typical functionality includes:&lt;br /&gt;
* General UI helpers  &lt;br /&gt;
* Event handlers for common actions in the admin panel   &lt;br /&gt;
&lt;br /&gt;
This package acts as a foundation layer for other admin UI features.&lt;br /&gt;
&lt;br /&gt;
The dependencies for adminbasics package need to be installed with the command yarn.&lt;br /&gt;
&lt;br /&gt;
There are the following commands available:&lt;br /&gt;
* dev to build a non minified version of the assets with rollup&lt;br /&gt;
* prod to build a minified version of the assets with rollup&lt;br /&gt;
* build to build a non minified and a minified version of the assets with rollup in one step&lt;br /&gt;
* test to run the test cases&lt;br /&gt;
&lt;br /&gt;
== Example: adminsidepanel (Vue.js) ==&lt;br /&gt;
&lt;br /&gt;
The package `assets/packages/adminsidepanel` provides the code for the collapsible side panel in the administration interface. Unlike other parts of LimeSurvey, this package is built with the &#039;&#039;&#039;Vue.js framework&#039;&#039;&#039;.  &lt;br /&gt;
&lt;br /&gt;
Key points:&lt;br /&gt;
* The side panel is a &#039;&#039;&#039;Vue single-page component&#039;&#039;&#039; embedded into the admin UI  &lt;br /&gt;
* Vue allows the panel to be reactive, updating its content dynamically without reloading the whole page  &lt;br /&gt;
* The build process compiles `.vue` files and JavaScript modules into a single bundle served by LimeSurvey  &lt;br /&gt;
&lt;br /&gt;
For building this package, you need to have node version 14 installed (not higher!)&lt;br /&gt;
The dependencies for adminsidepanel package need to be installed with the command yarn.&lt;br /&gt;
&lt;br /&gt;
There are the following commands:&lt;br /&gt;
    * serve to run the component with hot-reloading (all changes are visible without compiling again)&lt;br /&gt;
    * build to build a non minified and a minified version of the assets in one step&lt;br /&gt;
    * prod to build a minified version of the assets&lt;br /&gt;
    * dev to build a minified version of the assets with the development mode&lt;br /&gt;
&lt;br /&gt;
== Best Practices for Developing New Packages ==&lt;br /&gt;
&lt;br /&gt;
When adding or updating JavaScript functionality in LimeSurvey:&lt;br /&gt;
* Place your code inside a new or existing `assets/packages/` folder  &lt;br /&gt;
* Keep code modular and organized under `src/`  &lt;br /&gt;
* Use the build system (npm/yarn + Webpack) to compile assets into distributable bundles  &lt;br /&gt;
* Avoid inline JavaScript in views whenever possible  &lt;br /&gt;
* For complex interactive features, consider using modern frameworks like Vue (as with `adminsidepanel`)  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Development guidelines]]&lt;br /&gt;
[[Category:JavaScript]]&lt;br /&gt;
&lt;br /&gt;
= Bootstrap 5 and Gulp Build System in LimeSurvey Themes =&lt;br /&gt;
&lt;br /&gt;
LimeSurvey has upgraded to &#039;&#039;&#039;Bootstrap 5&#039;&#039;&#039; for both its administration and survey themes. This modern framework enhances consistency, responsiveness, and maintainability across the UI.&lt;br /&gt;
&lt;br /&gt;
To manage and generate theme-specific stylesheets and scripts, LimeSurvey uses a &#039;&#039;&#039;Gulp build system&#039;&#039;&#039; — defined in a `gulpfile.js` — that handles CSS/JS compilation, theme variations, and RTL support.&lt;br /&gt;
&lt;br /&gt;
== Gulp Tasks Overview ==&lt;br /&gt;
&lt;br /&gt;
The `gulpfile.js` orchestrates four main build areas:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Bootstrap 5 Assets&#039;&#039;&#039; – Compiles and minifies Bootstrap 5 JavaScript and SCSS files. Outputs both standard and RTL (Right-to-Left) versions.&lt;br /&gt;
&#039;&#039;&#039;Commands&#039;&#039;&#039;&lt;br /&gt;
* `gulp build` – Builds all Bootstrap 5 assets  &lt;br /&gt;
* `gulp watch` – Watches for changes and rebuilds automatically&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Admin Theme (&amp;quot;Sea Green&amp;quot;)&#039;&#039;&#039; – Processes SCSS files of the admin theme into CSS.&lt;br /&gt;
&#039;&#039;&#039;Commands:&#039;&#039;&#039;&lt;br /&gt;
* `gulp build_theme` – Builds the admin theme  &lt;br /&gt;
* `gulp watch_theme` – Watches for changes in admin theme files&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Fruity Survey Theme (Legacy)&#039;&#039;&#039; – Generates multiple color variations of the original Fruity survey theme.&lt;br /&gt;
&#039;&#039;&#039;Commands:&#039;&#039;&#039;&lt;br /&gt;
* `gulp build_survey_theme_fruity` – Builds all Fruity theme variations  &lt;br /&gt;
* `gulp watch_survey_theme_fruity` – Watches for changes to Fruity theme files&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;LS6 Survey Theme (&amp;quot;Fruity TwentyThree&amp;quot;)&#039;&#039;&#039; – Builds the newer LS6 survey theme (Fruity TwentyThree) along with its variations, including JavaScript processing.&lt;br /&gt;
&#039;&#039;&#039;Commands:&#039;&#039;&#039;&lt;br /&gt;
* `gulp build_survey_theme_ls6` – Builds all LS6 theme assets  &lt;br /&gt;
* `gulp watch_survey_theme_ls6` – Watches for changes to LS6 theme files&lt;br /&gt;
&lt;br /&gt;
== SCSS File Locations &amp;amp; Component-Based Structure ==&lt;br /&gt;
&lt;br /&gt;
SCSS files in LimeSurvey are organized to keep styling modular and maintainable.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Admin Theme – Sea Green&#039;&#039;&#039;  &lt;br /&gt;
  Located under:  &lt;br /&gt;
  `assets/admin_themes/Sea_Green/`  &lt;br /&gt;
  This directory contains SCSS source files arranged in components (e.g., `_variables.scss`, `_buttons.scss`, `_layout.scss`) and a main entry point SCSS file that brings them together for compilation.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Survey Theme – Fruity TwentyThree (LS6)&#039;&#039;&#039;  &lt;br /&gt;
  Located under:  &lt;br /&gt;
  `assets/survey_themes/fruity_twentythree/`  &lt;br /&gt;
  SCSS files here are similarly split into component files (e.g., typography, colors, forms), along with CSS or JS files as needed. The main SCSS file imports these components and is picked up by the Gulp task for building.&lt;br /&gt;
&lt;br /&gt;
This component-based approach allows for easier styling, overrides, and theme variation without duplicating code.&lt;br /&gt;
&lt;br /&gt;
== Why This Matters ==&lt;br /&gt;
&lt;br /&gt;
Using Bootstrap 5 along with Gulp-driven build automation ensures:&lt;br /&gt;
&lt;br /&gt;
* Consistent and responsive design across admin and survey interfaces.  &lt;br /&gt;
* Streamlined workflows for theme development and maintenance.  &lt;br /&gt;
* Flexibility to generate color variations and handle RTL languages cleanly.  &lt;br /&gt;
* Easier updates to design components — change one SCSS component, rebuild, and it&#039;s applied globally.&lt;br /&gt;
&lt;br /&gt;
== How to Contribute or Customize ==&lt;br /&gt;
&lt;br /&gt;
1. Navigate to the relevant theme folder (e.g. `assets/admin_themes/Sea_Green/` or `assets/survey_themes/fruity_twentythree/`).&lt;br /&gt;
2. Modify or add SCSS components as needed.&lt;br /&gt;
3. Run one of the Gulp build commands above to compile:&lt;br /&gt;
   * For example:  &lt;br /&gt;
     ```bash&lt;br /&gt;
     gulp build_survey_theme_ls6&lt;br /&gt;
     ```&lt;br /&gt;
4. Clear LimeSurvey’s asset cache (from the admin interface or manually) to see your changes live in the UI.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Development guidelines]]&lt;br /&gt;
[[Category:Themes]]&lt;br /&gt;
[[Category:CSS/SCSS]]&lt;br /&gt;
&lt;br /&gt;
=HTML=&lt;br /&gt;
*As you will notice, a very customized HTML element can take a lot of lines (very expensive if you paid each one (:wink:) ) to avoid that, use &#039;CSS classes&#039;. In general, use classes to aesthetic related stuff: color, borders, backgrounds, font faces, sizes, etc.&lt;br /&gt;
*Respect W3C standards, and try to use the HTML understandable for all browsers. If one of them has a special feature, think if this feature is so special to break down the HTML in other browsers.&lt;br /&gt;
*Do not use PHP short tags &amp;lt;? ?&amp;gt;. Always use full PHP tags &amp;lt;?php ?&amp;gt;. Excluded from this is the echo shorthand &amp;lt;?=. Which is allowed as per PSR standard.&lt;br /&gt;
*Any rules of the mentioned before: about CSS, well closed HTML tags and JS respect XHTML standards. Give it a try!.&lt;br /&gt;
&lt;br /&gt;
=Localization=&lt;br /&gt;
&lt;br /&gt;
Moved to https://manual.limesurvey.org/Code_quality_guide#Localization&lt;br /&gt;
&lt;br /&gt;
=Bug tracker=&lt;br /&gt;
#First consider if the reported issue is really a bug. If it is a feature request please move it to the feature tracker.&lt;br /&gt;
#If you would like to work on a bug assign it to yourself.&lt;br /&gt;
#Try to reproduce the issue.&lt;br /&gt;
##If you cannot reproduce ask the user to provide a small example survey to demonstrate the issue. Then set the issue to &#039;Feedback&#039;. After the user added the necessary information it will automatically be set to &#039;Assigned&#039; again.&lt;br /&gt;
##If the user does not responds for more than a week ask once again for feedback by adding a comment. After a further week without feedback close the issue.&lt;br /&gt;
#After you resolved the issue set the status to resolved AND provide the &#039;Fixed in version&#039; information.&lt;br /&gt;
#After you committed a fix and use the proper GIt commit message naming the commit will be automatically assigned to your bug report.&lt;br /&gt;
#After a release the release technician will set all issues to &#039;Closed&#039; that were fixed for this release. That signals to the reporter that a fix is available in the version and it was just released. The release technicial will also add a comment to the close issue: &#039;Fixed in &amp;lt;Version&amp;gt; &amp;lt;Build number&amp;gt;&#039;&lt;br /&gt;
&lt;br /&gt;
=Cross-DB compatibility=&lt;br /&gt;
&lt;br /&gt;
LimeSurvey targets several database types it can run on: MySQL, Postgres and Microsoft SQL Server. This demands certain precautions when coding&lt;br /&gt;
&lt;br /&gt;
==Parameter binding==&lt;br /&gt;
&lt;br /&gt;
Yii/PDO supports parameter binding - use it. Don&#039;t inject variables directly into the query or into conditions because this might create a security issue.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&amp;lt;?php&lt;br /&gt;
$oResult = Yii::app()-&amp;gt;db&lt;br /&gt;
                    -&amp;gt;createCommand()&lt;br /&gt;
                    -&amp;gt;select(&#039;somefield&#039;)&lt;br /&gt;
                    -&amp;gt;where(&amp;quot;sid = :sid&amp;quot;)&lt;br /&gt;
                    -&amp;gt;from(&#039;{{sometable}}&#039;)&lt;br /&gt;
                    -&amp;gt;bindParam(&amp;quot;:sid&amp;quot;, $surveyid, PDO::PARAM_INT);&lt;br /&gt;
?&amp;gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you bind the same value several times do NOT use the same parameter name, instead use a different named parameter for each bind:&lt;br /&gt;
&lt;br /&gt;
WRONG:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&amp;lt;?php&lt;br /&gt;
$oResult = Yii::app()-&amp;gt;db&lt;br /&gt;
                    -&amp;gt;createCommand()&lt;br /&gt;
                    -&amp;gt;select(&#039;somefield&#039;)&lt;br /&gt;
                    -&amp;gt;where(&amp;quot;sid = :sid and parent_sid= :sid &amp;quot;)&lt;br /&gt;
                    -&amp;gt;from(&#039;{{sometable}}&#039;)&lt;br /&gt;
                    -&amp;gt;bindParam(&amp;quot;:sid&amp;quot;, $surveyid, PDO::PARAM_INT);&lt;br /&gt;
?&amp;gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
RIGHT:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&amp;lt;?php&lt;br /&gt;
$oResult = Yii::app()-&amp;gt;db&lt;br /&gt;
                    -&amp;gt;createCommand()&lt;br /&gt;
                    -&amp;gt;select(&#039;somefield&#039;)&lt;br /&gt;
                    -&amp;gt;where(&amp;quot;sid = :sid1 and parent_sid= :sid2 &amp;quot;)&lt;br /&gt;
                    -&amp;gt;from(&#039;{{sometable}}&#039;)&lt;br /&gt;
                    -&amp;gt;bindParam(&amp;quot;:sid1&amp;quot;, $surveyid, PDO::PARAM_INT)&lt;br /&gt;
                    -&amp;gt;bindParam(&amp;quot;:sid2&amp;quot;, $surveyid, PDO::PARAM_INT);&lt;br /&gt;
?&amp;gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Quote column name==&lt;br /&gt;
&lt;br /&gt;
Some column name must be quoted for DB compatibility. You can use [https://www.yiiframework.com/doc/api/1.1/CDbConnection#quoteColumnName-detail App()-&amp;gt;db-&amp;gt;quoteColumnName].&lt;br /&gt;
&lt;br /&gt;
Know column needed to be quoted :&lt;br /&gt;
&lt;br /&gt;
* Column name statring with number( column in survey database)&lt;br /&gt;
* Reserved &amp;lt;code&amp;gt;key&amp;lt;/code&amp;gt; word column name&lt;br /&gt;
&lt;br /&gt;
=Code complexity=&lt;br /&gt;
*If using an auxiliary variable makes clear the code or process, just do it. If you are coding a very complex expression, calling to functions with parameters that are other functions:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
WRONG:&lt;br /&gt;
&lt;br /&gt;
iAResult= fa(fb(p1,p2),fc(fd(p3),p4),p5)&lt;br /&gt;
&lt;br /&gt;
It will be more readable:&lt;br /&gt;
&lt;br /&gt;
iAuxB = fb(p1,p2)&lt;br /&gt;
iAuxD = fd(p3)&lt;br /&gt;
iAuxC = fc(iAuxD,p4)&lt;br /&gt;
iAResult = fa(iAuxB, iAuxC, p5)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anyway, if you are in doubt about someone missing the point or you are afraid that your expression is obscure, take the chance of writing it in a more simple way, even if that involves the use of one or more auxiliary variables.&lt;br /&gt;
&lt;br /&gt;
=Checklist for new features=&lt;br /&gt;
If you implement a new feature please make sure that you checked the following things before you create a pull request/commit your new feature:&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Localization&#039;&#039;&#039;: Do all texts (that are usually visible to the user) use the localization/translation system (gT, eT, etc.)?&lt;br /&gt;
*&#039;&#039;&#039;Permissions&#039;&#039;&#039;: Does the feature obey the permission system (global permissions, survey permissions)?&lt;br /&gt;
*&#039;&#039;&#039;Backward-compatibility&#039;&#039;&#039;: Does the feature still work when updating from any old version? Does it maybe break the update?&lt;br /&gt;
*&#039;&#039;&#039;Database compatibility&#039;&#039;&#039;: Does it work on all database types (MySQL, MSSQL, Postgres)?&lt;br /&gt;
*&#039;&#039;&#039;Scaling&#039;&#039;&#039;: Does your feature scale? For example; It will work fine with 10 surveys, does it still work performant with 10000?&lt;br /&gt;
*&#039;&#039;&#039;Performance&#039;&#039;&#039;: Does your feature use the minimal possible number of SQL queries (see also Scaling). &lt;br /&gt;
*&#039;&#039;&#039;QA&#039;&#039;&#039;: Did you test your code for all scenarios? Did you let someone else test or read your code?&lt;br /&gt;
*&#039;&#039;&#039;Acceptance tests&#039;&#039;&#039;: Did you write automatic acceptance tests for your specification?&lt;br /&gt;
*&#039;&#039;&#039;Discussions&#039;&#039;&#039;: Did you discuss the new feature with the team for feedback?&lt;br /&gt;
&lt;br /&gt;
Also see [https://manual.limesurvey.org/How_to_contribute_new_features How_to_contribute_new_features].&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>Twilllig</name></author>
	</entry>
	<entry>
		<id>https://www.limesurvey.org/manual/index.php?title=File:Notifications.png&amp;diff=379834</id>
		<title>File:Notifications.png</title>
		<link rel="alternate" type="text/html" href="https://www.limesurvey.org/manual/index.php?title=File:Notifications.png&amp;diff=379834"/>
		<updated>2025-04-14T09:15:46Z</updated>

		<summary type="html">&lt;p&gt;Twilllig: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Twilllig</name></author>
	</entry>
	<entry>
		<id>https://www.limesurvey.org/manual/index.php?title=Extra_menus_event&amp;diff=176326</id>
		<title>Extra menus event</title>
		<link rel="alternate" type="text/html" href="https://www.limesurvey.org/manual/index.php?title=Extra_menus_event&amp;diff=176326"/>
		<updated>2023-04-28T10:54:07Z</updated>

		<summary type="html">&lt;p&gt;Twilllig: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Description of the event to generate extra menus at top bar (besides configuration, logout, etc).&lt;br /&gt;
&lt;br /&gt;
Three types of menus:&lt;br /&gt;
* Dropdown&lt;br /&gt;
* Link&lt;br /&gt;
* Button (since LimeSurvey 5.4)&lt;br /&gt;
&lt;br /&gt;
For dropdown, we have two kinds of menu items:&lt;br /&gt;
* Link&lt;br /&gt;
* Divider&lt;br /&gt;
&lt;br /&gt;
The event itself is called &amp;lt;code&amp;gt;beforeAdminMenuRender&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Plugin will set property &amp;lt;code&amp;gt;extraMenus&amp;lt;/code&amp;gt;. Each element in that array must implement interface &amp;lt;code&amp;gt;ExtraMenuInterface&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
This example with create a dropdown menu with three empty menu items and one divider:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$event = $this-&amp;gt;getEvent();&lt;br /&gt;
$event-&amp;gt;set(&#039;extraMenus&#039;, array(&lt;br /&gt;
  new Menu(array(&lt;br /&gt;
    &#039;isDropDown&#039; =&amp;gt; true,&lt;br /&gt;
    &#039;menuItems&#039; =&amp;gt; array(&lt;br /&gt;
        new MenuItem(null),&lt;br /&gt;
        new MenuItem(null),&lt;br /&gt;
        new MenuItem(array(&#039;isDivider&#039; =&amp;gt; true)),&lt;br /&gt;
        new MenuItem(null)&lt;br /&gt;
    )&lt;br /&gt;
  ))&lt;br /&gt;
));&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
How it would look:&lt;br /&gt;
&lt;br /&gt;
[[File:extramenu.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
And this example shows how to add a button menu item on the left side of the admin menu (since LimeSurvey 5.4):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$event = $this-&amp;gt;getEvent();&lt;br /&gt;
$buttonTestOptions = [&lt;br /&gt;
  &#039;buttonId&#039; =&amp;gt; &#039;test-button&#039;,&lt;br /&gt;
  &#039;label&#039; =&amp;gt; &#039;Test button&#039;,&lt;br /&gt;
  &#039;href&#039; =&amp;gt; &#039;https://limesurvey.org&#039;,&lt;br /&gt;
  &#039;iconClass&#039; =&amp;gt; &#039;fa fa-link&#039;,&lt;br /&gt;
  &#039;openInNewTab&#039; =&amp;gt; true,&lt;br /&gt;
  &#039;isPrepended&#039; =&amp;gt; true,&lt;br /&gt;
  &#039;tooltip&#039; =&amp;gt; &#039;You can add a tooltip here&#039;,&lt;br /&gt;
];&lt;br /&gt;
&lt;br /&gt;
$menuTestButton = new \LimeSurvey\Menu\MenuButton($buttonTestOptions);&lt;br /&gt;
$event-&amp;gt;append(&#039;extraMenus&#039;, [$menuTestButton]);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Interfaces ==&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
! &amp;lt;b&amp;gt;Method&amp;lt;/b&amp;gt; !! &amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| isDropDown || Returns true if this menu is a dropdown menu&lt;br /&gt;
|-&lt;br /&gt;
| isSmallText || Returns true if this item is a small text header (uses label as text)&lt;br /&gt;
|-&lt;br /&gt;
| getLabel || Returns the actual name of the menu&lt;br /&gt;
|-&lt;br /&gt;
| getIconClass || Return CSS class for icon to display left of link&lt;br /&gt;
|-&lt;br /&gt;
| getHref || If it&#039;s not a dropdown menu, this is just for the link&lt;br /&gt;
|-&lt;br /&gt;
| getMenuItems || Return array of dropdown menu items&lt;br /&gt;
|-&lt;br /&gt;
| isInMiddleSection || Returns true if the item is displayed in the middle section of the admin menu (LS6)&lt;br /&gt;
|-&lt;br /&gt;
| isPrepended ||  Returns true if the item is displayed on the left side of the admin menu section&lt;br /&gt;
|-&lt;br /&gt;
| isButton ||  Returns true if the item is a button&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Each menu item returned by &amp;lt;code&amp;gt;getMenuItems&amp;lt;/code&amp;gt; must implement the interface &amp;lt;code&amp;gt;ExtraMenuItemInterface&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
! &amp;lt;b&amp;gt;Method&amp;lt;/b&amp;gt; !! &amp;lt;b&amp;gt;Description &amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| getHref || As above, used for link in dropdown item&lt;br /&gt;
|-&lt;br /&gt;
| getLabel || The text for the link&lt;br /&gt;
|-&lt;br /&gt;
| isDivider || Return true if the item is a divider&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Twilllig</name></author>
	</entry>
	<entry>
		<id>https://www.limesurvey.org/manual/index.php?title=Extra_menus_event&amp;diff=176325</id>
		<title>Extra menus event</title>
		<link rel="alternate" type="text/html" href="https://www.limesurvey.org/manual/index.php?title=Extra_menus_event&amp;diff=176325"/>
		<updated>2023-04-28T08:19:03Z</updated>

		<summary type="html">&lt;p&gt;Twilllig: /* Examples */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Description of the event to generate extra menus at top bar (besides configuration, logout, etc).&lt;br /&gt;
&lt;br /&gt;
Three types of menus:&lt;br /&gt;
* Dropdown&lt;br /&gt;
* Link&lt;br /&gt;
* Button (since LimeSurvey 5.4)&lt;br /&gt;
&lt;br /&gt;
For dropdown, we have two kinds of menu items:&lt;br /&gt;
* Link&lt;br /&gt;
* Divider&lt;br /&gt;
&lt;br /&gt;
The event itself is called &amp;lt;code&amp;gt;beforeAdminMenuRender&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Plugin will set property &amp;lt;code&amp;gt;extraMenus&amp;lt;/code&amp;gt;. Each element in that array must implement interface &amp;lt;code&amp;gt;ExtraMenuInterface&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
This example with create a dropdown menu with three empty menu items and one divider:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$event = $this-&amp;gt;getEvent();&lt;br /&gt;
$event-&amp;gt;set(&#039;extraMenus&#039;, array(&lt;br /&gt;
  new Menu(array(&lt;br /&gt;
    &#039;isDropDown&#039; =&amp;gt; true,&lt;br /&gt;
    &#039;menuItems&#039; =&amp;gt; array(&lt;br /&gt;
        new MenuItem(null),&lt;br /&gt;
        new MenuItem(null),&lt;br /&gt;
        new MenuItem(array(&#039;isDivider&#039; =&amp;gt; true)),&lt;br /&gt;
        new MenuItem(null)&lt;br /&gt;
    )&lt;br /&gt;
  ))&lt;br /&gt;
));&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
How it would look:&lt;br /&gt;
&lt;br /&gt;
[[File:extramenu.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
And this example shows how to add a button menu item on the left side of the admin menu (since LimeSurvey 5.4):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$event = $this-&amp;gt;getEvent();&lt;br /&gt;
$buttonTestOptions = [&lt;br /&gt;
  &#039;buttonId&#039; =&amp;gt; &#039;test-button&#039;,&lt;br /&gt;
  &#039;label&#039; =&amp;gt; &#039;Test button&#039;,&lt;br /&gt;
  &#039;href&#039; =&amp;gt; &#039;https://limesurvey.org&#039;,&lt;br /&gt;
  &#039;iconClass&#039; =&amp;gt; &#039;fa fa-link&#039;,&lt;br /&gt;
  &#039;openInNewTab&#039; =&amp;gt; true,&lt;br /&gt;
  &#039;isPrepended&#039; =&amp;gt; true,&lt;br /&gt;
  &#039;tooltip&#039; =&amp;gt; &#039;You can add a tooltip here&#039;,&lt;br /&gt;
];&lt;br /&gt;
&lt;br /&gt;
$menuTestButton = new \LimeSurvey\Menu\MenuButton($buttonTestOptions);&lt;br /&gt;
$event-&amp;gt;append(&#039;extraMenus&#039;, [$menuTestButton]);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Interfaces ==&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
! &amp;lt;b&amp;gt;Method&amp;lt;/b&amp;gt; !! &amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| isDropDown || Returns true if this menu is a dropdown menu&lt;br /&gt;
|-&lt;br /&gt;
| isSmallText || Returns true if this item is a small text header (uses label as text)&lt;br /&gt;
|-&lt;br /&gt;
| getLabel || Returns the actual name of the menu&lt;br /&gt;
|-&lt;br /&gt;
| getIconClass || Return CSS class for icon to display left of link&lt;br /&gt;
|-&lt;br /&gt;
| getHref || If it&#039;s not a dropdown menu, this is just for the link&lt;br /&gt;
|-&lt;br /&gt;
| getMenuItems || Return array of dropdown menu items&lt;br /&gt;
|-&lt;br /&gt;
| isPrepended ||  Returns true if the item is displayed on the left side of the admin menu&lt;br /&gt;
|-&lt;br /&gt;
| isButton ||  Returns true if the item is a button&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Each menu item returned by &amp;lt;code&amp;gt;getMenuItems&amp;lt;/code&amp;gt; must implement the interface &amp;lt;code&amp;gt;ExtraMenuItemInterface&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
! &amp;lt;b&amp;gt;Method&amp;lt;/b&amp;gt; !! &amp;lt;b&amp;gt;Description &amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| getHref || As above, used for link in dropdown item&lt;br /&gt;
|-&lt;br /&gt;
| getLabel || The text for the link&lt;br /&gt;
|-&lt;br /&gt;
| isDivider || Return true if the item is a divider&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Twilllig</name></author>
	</entry>
	<entry>
		<id>https://www.limesurvey.org/manual/index.php?title=Theme_editor&amp;diff=176216</id>
		<title>Theme editor</title>
		<link rel="alternate" type="text/html" href="https://www.limesurvey.org/manual/index.php?title=Theme_editor&amp;diff=176216"/>
		<updated>2023-04-18T10:10:15Z</updated>

		<summary type="html">&lt;p&gt;Twilllig: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;languages /&amp;gt; &amp;lt;translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Introduction== &amp;lt;!--T:1--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:2--&amp;gt;&lt;br /&gt;
LimeSurvey has an advanced theme and style system providing to developers an efficient way to customize the survey appearance. Since LS3, the term &#039;&#039;&#039;&amp;quot;templates&amp;quot;&#039;&#039;&#039; has been replaces with the term &#039;&#039;&#039;&amp;quot;themes&amp;quot;&#039;&#039;&#039;. &#039;&#039;&#039;Themes&#039;&#039;&#039; allow control over the style of the pages of a survey. A survey administrator can select a default theme that will be used for each survey to further personalize it. &#039;&#039;&#039;Themes&#039;&#039;&#039;  comes with options that provide an admin without coding skill a simple way to add a logo on the welcome page, change the background colors, select a font, etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:3--&amp;gt;&lt;br /&gt;
LimeSurvey comes with 3 themes.  These initial themes are defined by directories located in the LimeSurvey installation &amp;quot;themes/survey/&amp;quot; directory. Each theme has its own directory. Within the main directory of a theme you will find a configuration file in XML, and numerous directories containing the views &#039;&#039;&#039;themes (.twig)&#039;&#039;&#039;, &#039;&#039;&#039;cascading style sheets (.css)&#039;&#039;&#039;, &#039;&#039;&#039;scripts&#039;&#039;&#039;,  &#039;&#039;&#039;images&#039;&#039;&#039; (&#039;&#039;&#039;.jpg&#039;&#039;&#039; or &#039;&#039;&#039;.png&#039;&#039;&#039;), and maybe others. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:4--&amp;gt;&lt;br /&gt;
Since LimeSurvey 2.50, the theme engine uses [http://getbootstrap.com/docs/3.3/ Bootstrap 3]  as CSS framework. Since Bootstrap 3 is a standard framework, developers will find a lot of documentation, tutorials and forum threads about it on the internet. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:312--&amp;gt;&lt;br /&gt;
Since LimeSurvey 3, the theme engine uses [https://twig.symfony.com Twig], so the theme developers can change the logic of the survey rendering in a safe and easy way. Twig replace the old system of replacement keywords that was used in the previous versions. The logic that was used to generate the HTML of the keywords is now available inside the theme&#039;s views. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:313--&amp;gt;&lt;br /&gt;
Snippet from Vanilla Theme:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:5--&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;twig&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;{{ aSurveyInfo.class.answercontainer }} col-xs-12&amp;quot; {{ aSurveyInfo.attr.answercontainer }}&amp;gt;&lt;br /&gt;
    {# NOTE: If you want to customize the question rendering, use a question theme #}&lt;br /&gt;
    {{ aQuestion.answer | raw }}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:10--&amp;gt;&lt;br /&gt;
Themes, being HTML and Twig code, tend to define the positioning and type of text to be displayed and similar structural features of the page. They often reference or include other files. Most of them reference a common cascading style sheets (CSS) file that defines the font style, color, size, background, and similar parameters common to all pages in the survey. Style sheets reference HTML &#039;&#039;&#039;class&#039;&#039;&#039; parameters that are associated with the various types of objects in the HTML code. This allows the style sheet to define how to display each of the many types of text or other objects that may appear in multiple places. There are unique classes for each question type in LimeSurvey and thus giving detailed control over the appearance of each. Image files, like logos or special progress-bar constructors, may be referenced as well in the Theme file. Finally, special keywords in curly braces are replaced with text defined in the survey for each language translation correspondent (for example, the &#039;Survey Title&#039; or &#039;Question Text&#039; for each language defined).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:11--&amp;gt;&lt;br /&gt;
If you create a new custom theme, please consider contributing it back to the LimeSurvey community and make it available to others. With your help, we can grow our repository of themes, surveys, and other add-ons to make LimeSurvey even better! &lt;br /&gt;
See our [https://www.limesurvey.org/index.php?option=com_sobipro&amp;amp;sid=55:Templates&amp;amp;Itemid=729 LimeSurvey template repository] where you can share your templates.&lt;br /&gt;
&lt;br /&gt;
==Creating a new theme== &amp;lt;!--T:12--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:13--&amp;gt;&lt;br /&gt;
To be able to create a new theme (or edit an existing theme), you need [[Manage users#Set global permissions for a user|Template Editing user permission]] in LimeSurvey as well as permission to manipulate the files in the underlying operating system hosting your LimeSurvey installation.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:14--&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;simplebox&amp;quot;&amp;gt;&amp;lt;span style=&#039;color:red&#039;&amp;gt;&#039;&#039;&#039;Note of Warning:&#039;&#039;&#039;&amp;lt;/span&amp;gt;  If you change themes, you could also affect all the pre-existing surveys from your LimeSurvey installation. Themes are an advanced feature that require experience and HTML knowledge.&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:15--&amp;gt;&lt;br /&gt;
The preferred way to create a new theme is through the &#039;&#039;&#039;Theme Editor&#039;&#039;&#039; (see below), which is located under &#039;&#039;&#039;Configuration&#039;&#039;&#039; on the top toolbar. Some users prefer to work directly with theme files so that they can use their favorite text editor instead of the web interface. In this case, still use the Theme Editor to first create your new theme. This will create a new base theme with all the files you need in the &#039;&#039;LimeSurvey_web_root/upload/themes/survey/your_new_template&#039;&#039; directory. From there you can use your text editor to manually adjust the template files.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:16--&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;simplebox&amp;quot;&amp;gt;&#039;&#039;&#039;Permissions Note:&#039;&#039;&#039; on unix/linux systems, these theme files will be owned by the group and user where the web server is running (may be &amp;quot;www&amp;quot; for some systems). So, make sure you have the proper permisisons to edit these files, When you save them, make sure they don&#039;t change ownership! This way, you can still use the web Theme Editing interface if needed.&amp;lt;/div&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:18--&amp;gt;&lt;br /&gt;
A number of &#039;public&#039; elements of LimeSurvey can be adjusted by a series of themes. The next section provides a very brief explanation of these templates.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:17--&amp;gt;&lt;br /&gt;
{{Note|Themes files are a complex feature.  Besides HTML, you should also be familiar with CSS, Twig, and JavaScript.}}&lt;br /&gt;
&lt;br /&gt;
=The LimeSurvey theme editor= &amp;lt;!--T:19--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:20--&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Theme Editor&#039;&#039;&#039;: &#039;&#039;&#039;Configuration&#039;&#039;&#039; &amp;gt; &#039;&#039;&#039;Themes&#039;&#039;&#039;&amp;gt; &#039;&#039;&#039;Theme Editor&#039;&#039;&#039;&lt;br /&gt;
The Theme Editor is only available to users [[Manage users#Set global permissions for a user|with the Templates permission]] and to superadministrators. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:297--&amp;gt;&lt;br /&gt;
{{Alert|title=Attention|text=A theme that is not correctly constructed can cause a survey (that uses the respective template) to become inoperable. }}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:21--&amp;gt;&lt;br /&gt;
The LimeSurvey theme editor allows you to edit the contents of your themes online. To start the Theme Editor: click &#039;&#039;&#039;Themes&#039;&#039;&#039; in the &#039;&#039;&#039;Configuration&#039;&#039;&#039; menu, and then click the &#039;&#039;&#039;Theme editor&#039;&#039;&#039;  button next of the theme you want to edit or extend. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:285--&amp;gt;&lt;br /&gt;
[[File:Themes menu.png]]&lt;br /&gt;
[[File:Theme editor button.png|&#039;&#039;The button to access the theme editor for Bootswatch theme&#039;&#039;]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:286--&amp;gt;&lt;br /&gt;
The template editor page allows you to select the template you would like to edit/view. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:279--&amp;gt;&lt;br /&gt;
[[File:Template-editor-2013-7-10_11_38_16.png|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:298--&amp;gt;&lt;br /&gt;
The following options are available:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:280--&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Create&#039;&#039;&#039;: Allows you to create a new template. In order not to start from scratch, the template &#039;default&#039; is copied.&lt;br /&gt;
*&#039;&#039;&#039;Import&#039;&#039;&#039;: Allows you to import a template from a ZIP file.&lt;br /&gt;
*&#039;&#039;&#039;Export&#039;&#039;&#039;: Allows you to export the current template to a ZIP file.&lt;br /&gt;
*&#039;&#039;&#039;Copy&#039;&#039;&#039;: Allows you to make a new template by copying the current one.&lt;br /&gt;
*&#039;&#039;&#039;Rename&#039;&#039;&#039;: Allows you to change the name of the template. It is generally used after copying or importing a template.&lt;br /&gt;
*&#039;&#039;&#039;Template&#039;&#039;&#039;: A drop-down list that shows all the available templates that are located in your LimeSurvey installation.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:23--&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Screen&#039;&#039;&#039;: A drop-down list which allows you to choose which particular survey page of that template you want to view.&lt;br /&gt;
*&#039;&#039;&#039;Return to admin panel&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Import/Export/Copy a template=== &amp;lt;!--T:24--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:25--&amp;gt;&lt;br /&gt;
When you &#039;&#039;&#039;export &#039;&#039;&#039;a template, a ZIP-file archive with all template files your will be created (.pstpl files, images, css files, ...). You can &#039;&#039;&#039;import&#039;&#039;&#039; the exported zip-file into another LimeSurvey installation by using the import feature or you can manually copy the archive into another LimeSurvey installation and extract it into the corresponding [[Theme editor#Template files location|template directory there]]. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:288--&amp;gt;&lt;br /&gt;
However, it is best to use the LimeSurvey template import/export/copy functions in the template editor.&lt;br /&gt;
&lt;br /&gt;
===Page structure / Template use=== &amp;lt;!--T:27--&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;The Welcome Page:&#039;&#039;&#039; startpage.pstpl, welcome.pstpl, privacy.pstpl,  navigator.pstpl, endpage.pstpl&lt;br /&gt;
*&#039;&#039;&#039;The Questions Pages:&#039;&#039;&#039; startpage.pstpl, survey.pstpl, startgroup.pstpl, groupdescription.pstpl, question.pstpl, endgroup.pstpl, endpage.pstpl&lt;br /&gt;
*&#039;&#039;&#039;The Final Page:&#039;&#039;&#039; startpage.pstpl, assessment.pstpl, completed.pstpl, endpage.pstpl&lt;br /&gt;
&lt;br /&gt;
===Template files=== &amp;lt;!--T:28--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:29--&amp;gt;&lt;br /&gt;
The following template files are used to produce your public survey and must exist in any new template folder you create:&lt;br /&gt;
*&#039;&#039;&#039;startpage.pstpl:&#039;&#039;&#039; Produces the start of each html page. It starts at the &amp;quot;&amp;lt;head&amp;gt;&amp;quot; tag, and should not contain the &amp;quot;&amp;lt;html&amp;gt;&amp;quot; tag. This &#039;very beginning&#039; of a standard html page is written by the scripts. Please ensure that your startpage.pstpl files contains a &amp;lt;body&amp;gt; tag. Even though many browsers do not require strict adherence to the W3 HTML standards, the LimeSurvey script needs to find a &amp;lt;body&amp;gt; tag to run certain javascript elements. It is not common to see many &#039;keywords&#039; used in the startpage.pstpl file. However, you may wish to put the {SURVEYNAME} into the title. The startpage.pstpl file can contain code that ends in the corresponding endpage.pstpl file. For example, you can start a table in this file and close the table in the endpage.pstpl file. The startpage.pstpl and endpage.pstpl files wrap around every possible page used by LimeSurvey.&lt;br /&gt;
*&#039;&#039;&#039;survey.pstpl:&#039;&#039;&#039; This template is the second used on most pages and provides a space to put the survey name and description. This template does not have a corresponding &#039;closing&#039; template, and subsequently you should close all tags opened in this template file (i.e.: don&#039;t leave a table open here because there is nowhere else to close it).&lt;br /&gt;
*&#039;&#039;&#039;welcome.pstpl:&#039;&#039;&#039; This template is only used in the welcome screen (which is also on the main page for &#039;all in one&#039; surveys). You can use this to print out the welcome text, and other information that should be provided in the introduction. Like the &#039;survey.pstpl&#039; file, there is no corresponding &#039;closing&#039; template, so all tags opened in this template file should be closed as well.&lt;br /&gt;
*&#039;&#039;&#039;startgroup.pstpl:&#039;&#039;&#039; This template can provide a &#039;summary&#039; wrap around for questions within a group. It has a matching &#039;endgroup.pstpl&#039; template that can be used to close any opened tags in this file, so you can open a table within this.&lt;br /&gt;
*&#039;&#039;&#039;groupdescription.pstpl:&#039;&#039;&#039; This template file is used to display a description of a group. Please note that in the survey settings (access the &#039;&#039;Presentation &amp;amp; navigation settings&#039;&#039; by clicking the &#039;&#039;&#039;Presentation&#039;&#039;&#039; tab) you can set if the group description should be shown or not. If not, then this file is not included at all.&lt;br /&gt;
*&#039;&#039;&#039;question.pstpl:&#039;&#039;&#039; This file contains the question, answer, and help text sections of your survey. In the &amp;quot;group by group&amp;quot; and &amp;quot;all in one&amp;quot; surveys, this template is cycled repeatedly with each question. There is no corresponding closing file for this and all tags should be closed.&lt;br /&gt;
*&#039;&#039;&#039;question_start.pstpl:&#039;&#039;&#039; This file contains the individual elements found at the start of a question. It is included within &#039;question.pstpl&#039; via the {QUESTION} keyword. It is intended to allow template designers more control over the layout of a question. This template sits outside the normal templating system and &#039;&#039;&#039;was superseeded (as of LimeSurvey 1.87)&#039;&#039;&#039;. All keywords from this template are now available directly in question.pstpl. &lt;br /&gt;
*&#039;&#039;&#039;completed.pstpl:&#039;&#039;&#039; This page is displayed as the final page when the survey responses have been saved and the survey is over. It can be used to display a &amp;quot;forwarding link&amp;quot; as set in the survey setup.&lt;br /&gt;
*&#039;&#039;&#039;endgroup.pstpl:&#039;&#039;&#039; This file closes the group, and can be used to close off any tags opened in the startgroup.pstpl file&lt;br /&gt;
*&#039;&#039;&#039;navigator.pstpl:&#039;&#039;&#039; This file contains the buttons that navigate through the survey, &amp;quot;next&amp;quot;, &amp;quot;prev&amp;quot;, &amp;quot;last&amp;quot;, &amp;quot;submit&amp;quot;, &amp;quot;save so far&amp;quot;  and the &amp;quot;clear all&amp;quot; link. It is used in all pages except the completed page.&lt;br /&gt;
*&#039;&#039;&#039;printanswers.pstpl:&#039;&#039;&#039; This file has the HTML wrapper necessary for the print version of the survey.&lt;br /&gt;
*&#039;&#039;&#039;print_group.pstpl:&#039;&#039;&#039; This file is the same as startgroup.pstpl and endgroup.pstpl, but for the print version of the survey.&lt;br /&gt;
*&#039;&#039;&#039;print_question.pstpl:&#039;&#039;&#039; This file is the same as question.pstpl, but for the print version of the survey.&lt;br /&gt;
*&#039;&#039;&#039;print_survey.pstpl:&#039;&#039;&#039; This file is the same as survey.pstpl, but for the print version of the survey.&lt;br /&gt;
&lt;br /&gt;
=== CSS and Javascript=== &amp;lt;!--T:30--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:31--&amp;gt;&lt;br /&gt;
Two files that are always used in a template are template.css (for CSS) and template.js (for Javascript).&lt;br /&gt;
*&#039;&#039;&#039;{TEMPLATECSS}:&#039;&#039;&#039; Add lines for default css, template.css, and template-rtl.css for rtl language.&lt;br /&gt;
*&#039;&#039;&#039;{TEMPLATEJS}:&#039;&#039;&#039; Add lines for default javascript files, template.js, and all js files needed for LimeSurvey.&lt;br /&gt;
&lt;br /&gt;
=== Using Bootstrap=== &amp;lt;!--T:294--&amp;gt;&lt;br /&gt;
LimeSurvey has Bootstrap 3 embedded, so you can style all your templates with the well documented Bootstrap classes.&lt;br /&gt;
For more information please refer to the [https://getbootstrap.com Bootstrap documentation].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:295--&amp;gt;&lt;br /&gt;
The [https://github.com/flatlogic/awesome-bootstrap-checkbox Awesome-Bootstrap-Checkbox] plugin is also included. With it, you can use the typical Bootstrap color-classes (info,warning,danger,etc.) also with the suffix &amp;quot;-checkbox&amp;quot; or &amp;quot;-radio&amp;quot;, though styling checkboxes and radios as you prefer.&lt;br /&gt;
&lt;br /&gt;
==== Replacing default CSS or Javascript==== &amp;lt;!--T:32--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:33--&amp;gt;&lt;br /&gt;
Some questions use specific files for Javascript or CSS. If you need to replace a function, use a cascading system. For javascript function, the last function read is the function used.&lt;br /&gt;
&lt;br /&gt;
===Other template files=== &amp;lt;!--T:34--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:35--&amp;gt;&lt;br /&gt;
The &#039;&#039;&#039;privacy.pstpl&#039;&#039;&#039;, &#039;&#039;&#039;invitationemail.pstpl&#039;&#039;&#039;, &#039;&#039;&#039;reminderemail.pstpl&#039;&#039;&#039;, and &#039;&#039;&#039;confirmationemail.pstpl&#039;&#039;&#039; are no longer used by LimeSurvey and defaults are instead set in the applicable language files. The email messages can now be edited on a survey by survey basis.&lt;br /&gt;
&lt;br /&gt;
===Standard pages=== &amp;lt;!--T:36--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:37--&amp;gt;&lt;br /&gt;
There are ten standard pages that a survey participant may see in the course of taking or accessing the LimeSurvey application.  Each is constructed from a number of common &#039;&#039;&#039;Template&#039;&#039;&#039; files from the &#039;&#039;&#039;Template&#039;&#039;&#039; specified in the settings of the survey. The table below indicates which template files are used in constructing each of these pages.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:38--&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!  &#039;&#039;&#039;Survey Pages/&#039;&#039;&#039;&amp;lt;br /&amp;gt;&#039;&#039;&#039;Template Files&#039;&#039;&#039;!!Survey&amp;lt;br /&amp;gt;List!!Welcome!!Question!!Completed!!Clear All!!Register!!Load!!Save!!Print&amp;lt;br /&amp;gt;Answers!!Print&amp;lt;br /&amp;gt;Survey&lt;br /&gt;
|-&lt;br /&gt;
|SurveyList||align=&amp;quot;center&amp;quot; | [[File:check.gif]]|| || || || || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|Welcome|| ||align=&amp;quot;center&amp;quot; | [[File:check.gif]]|| || || || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|Privacy|| ||align=&amp;quot;center&amp;quot; | [[File:check.gif]]|| || || || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|Navigator|| ||align=&amp;quot;center&amp;quot; | [[File:check.gif]]||align=&amp;quot;center&amp;quot; | [[File:check.gif]]|| || || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|Survey|| || ||align=&amp;quot;center&amp;quot; | [[File:check.gif]]|| || ||align=&amp;quot;center&amp;quot; | [[File:check.gif]]|| || || ||&lt;br /&gt;
|-&lt;br /&gt;
|StartGroup|| || ||align=&amp;quot;center&amp;quot; | [[File:check.gif]]|| || || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|GroupDescription|| || ||align=&amp;quot;center&amp;quot; | [[File:check.gif]]|| || || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|Question&amp;lt;span style=&#039;color:red&#039;&amp;gt;&#039;&#039;&#039;*&#039;&#039;&#039;&amp;lt;/span&amp;gt;|| || ||align=&amp;quot;center&amp;quot; | [[File:check.gif]]|| || || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|EndGroup|| || ||align=&amp;quot;center&amp;quot; | [[File:check.gif]]|| || || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|Assessment|| || || ||align=&amp;quot;center&amp;quot; | [[File:check.gif]]|| || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|Completed|| || || ||align=&amp;quot;center&amp;quot; | [[File:check.gif]]|| || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|ClearAll|| || || || ||align=&amp;quot;center&amp;quot; | [[File:check.gif]]|| || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|Register|| || || || || ||align=&amp;quot;center&amp;quot; | [[File:check.gif]]|| || || ||&lt;br /&gt;
|-&lt;br /&gt;
|Load|| || || || || || ||align=&amp;quot;center&amp;quot; | [[File:check.gif]]|| || ||&lt;br /&gt;
|-&lt;br /&gt;
|Save|| || || || || || || ||align=&amp;quot;center&amp;quot; | [[File:check.gif]]|| ||&lt;br /&gt;
|-&lt;br /&gt;
|PrintAnswers|| || || || || || || || ||align=&amp;quot;center&amp;quot; | [[File:check.gif]]||&lt;br /&gt;
|-&lt;br /&gt;
|Print Survey || || || || || || || || || ||align=&amp;quot;center&amp;quot; | [[File:check.gif]]&lt;br /&gt;
|-&lt;br /&gt;
|Print Group || || || || || || || || || ||align=&amp;quot;center&amp;quot; | [[File:check.gif]]&lt;br /&gt;
|-&lt;br /&gt;
|Print Question || || || || || || || || || ||align=&amp;quot;center&amp;quot; | [[File:check.gif]]&lt;br /&gt;
|-&lt;br /&gt;
|StartPage&amp;lt;br /&amp;gt;EndPage&amp;lt;br /&amp;gt;Template.css||align=&amp;quot;center&amp;quot; | [[File:check.gif]]||align=&amp;quot;center&amp;quot; | [[File:check.gif]]||align=&amp;quot;center&amp;quot; | [[File:check.gif]]||align=&amp;quot;center&amp;quot; | [[File:check.gif]]||align=&amp;quot;center&amp;quot; | [[File:check.gif]]||align=&amp;quot;center&amp;quot; | [[File:check.gif]]||align=&amp;quot;center&amp;quot; | [[File:check.gif]]||align=&amp;quot;center&amp;quot; | [[File:check.gif]]||align=&amp;quot;center&amp;quot; | [[File:check.gif]]|| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:39--&amp;gt;&lt;br /&gt;
&amp;lt;span style=&#039;color:red&#039;&amp;gt;&#039;&#039;&#039;*&#039;&#039;&#039;&amp;lt;/span&amp;gt;NOTE: In version 1.90+, this replaces question.pstpl AND question_start.pstpl. If you are using an old custom template, you need to add the following line to the beginning of question.pstpl:&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&amp;lt;div {QUESTION_ESSENTIALS} class=&amp;quot;{QUESTION_CLASS}{QUESTION_MAN_CLASS}{QUESTION_INPUT_ERROR_CLASS}&amp;quot;&amp;gt;&amp;lt;/syntaxhighlight&amp;gt;And then add the corresponding closing tag to the end of question.pstpl:&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:40--&amp;gt;&lt;br /&gt;
&amp;lt;span style=&#039;color:red&#039;&amp;gt;&#039;&#039;&#039;*&#039;&#039;&#039;&amp;lt;/span&amp;gt;NOTE: In version 1.91 and earlier, LimeSurvey js files are not included in the template. In version 2, &#039;&#039;&#039;you have to use {TEMPLATEJS} in one of your template file&#039;&#039;&#039; to add the link to the js file. You can add it in startpage.pstpl or in endpage.pstpl. You can remove the {TEMPLATEURL}/template.js line and you have to replace with {TEMPLATEJS} to update a personal template.&lt;br /&gt;
&lt;br /&gt;
===The file control section=== &amp;lt;!--T:41--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:42--&amp;gt;&lt;br /&gt;
In the &amp;quot;file control&amp;quot; window on the left, you can click one of the template files that is used to compile the page. You can see the &#039;&#039;Screen part&#039;&#039;, JavaScript, and CSS files. The HTML code for that file will then appear in the &amp;quot;Now editing&amp;quot; window in the center. If the template is editable (determined by directory permissions) you can then make any changes and save them.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:299--&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:File Control Section.png|center]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:43--&amp;gt;&lt;br /&gt;
The &amp;quot;Other files&amp;quot; window shows a list of all other files from the template directory. You can use the right side to &#039;&#039;&#039;upload and select image files (your pics, logos,...) or other files needed to create your template&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:300--&amp;gt;&lt;br /&gt;
Instead of using a link for each picture, utilize the field string {TEMPLATEURL}. So, instead of:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:44--&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html4strict&amp;quot;&amp;gt;img src=&#039;/limesurvey/templates/yourtemplate/files/mypicture.jpg&#039;&amp;lt;/syntaxhighlight&amp;gt; &lt;br /&gt;
You can use {{NewIn|2.50}}:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html4strict&amp;quot;&amp;gt;img src=&#039;{TEMPLATEURL}files/mypicture.jpg&#039;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:287--&amp;gt;&lt;br /&gt;
In LimeSurvey versions before 2.50 use:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html4strict&amp;quot;&amp;gt;img src=&#039;{TEMPLATEURL}mypicture.jpg&#039;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:46--&amp;gt;&lt;br /&gt;
A &amp;quot;sample&amp;quot; of the template page you are editing will be visible in the bottom of the screen. There is no way to delete a template from the template editor. This must be done by accessing the underlying directory and deleting manually the files from there. You also have the possibility to select different screen resolutions in order to better evaluate the feel and look of the template.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:47--&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;simplebox&amp;quot;&amp;gt;&#039;&#039;&#039;Note:&#039;&#039;&#039; The shipped templates cannot be edited using the template editor. If you want to modify them, create a copy first and edit the copy.&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Template files location=== &amp;lt;!--T:48--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:49--&amp;gt;&lt;br /&gt;
LimeSurvey stores each of the &#039;standard&#039; templates in their own distinct sub-directory within the &#039;&#039;/templates&#039;&#039; directory that is kept in the public directory with the other LimeSurvey public files. Customized user templates are stored in the &#039;&#039;/upload/templates&#039;&#039; directory.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:51--&amp;gt;&lt;br /&gt;
There should &#039;&#039;&#039;ALWAYS&#039;&#039;&#039; be a &amp;quot;default&amp;quot; directory in the templates directory. This template is used by default and as a fall-back if a template folder doesn&#039;t exist, or can&#039;t be found. It comes installed by default.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:52--&amp;gt;&lt;br /&gt;
You can use any image files that you upload into the template management area with the help of this syntax:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:53--&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;{TEMPLATEURL}filename.xyz&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Styling questions with CSS== &amp;lt;!--T:54--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:55--&amp;gt;&lt;br /&gt;
Styling of questions in CSS has become much easier. Each question type has now a unique class. The mandatory questions have an additional mandatory class. For example, for a non-mandatory question:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:56--&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html4strict&amp;quot;&amp;gt;&amp;lt;div id=&amp;quot;question5&amp;quot; class=&amp;quot;gender&amp;quot;&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:59--&amp;gt;&lt;br /&gt;
and if the question is mandatory:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:60--&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html4strict&amp;quot;&amp;gt;&amp;lt;div id=&amp;quot;question5&amp;quot; class=&amp;quot;gender mandatory&amp;quot;&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:63--&amp;gt;&lt;br /&gt;
and if the question is mandatory, but the user didn&#039;t answer it or if there is validation on a question:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:64--&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html4strict&amp;quot;&amp;gt;&amp;lt;div id=&amp;quot;question5&amp;quot; class=&amp;quot;gender mandatory input-error&amp;quot;&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:67--&amp;gt;&lt;br /&gt;
and if the question has validation applied, but the user hasn&#039;t answered correctly:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:68--&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html4strict&amp;quot;&amp;gt;&amp;lt;div id=&amp;quot;question6&amp;quot; class=&amp;quot;text-short input-error&amp;quot;&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Global classes for question part== &amp;lt;!--T:273--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:274--&amp;gt;&lt;br /&gt;
These classes are used for each question type. Some question types use only one or two classes, while others may use much more.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:281--&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot;&lt;br /&gt;
|+ Global classes&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Class name&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Part&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Question type&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Examples&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Note&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | .question {{ObsoleteIn|3.0}}&lt;br /&gt;
| All question block&lt;br /&gt;
| All question type&lt;br /&gt;
|&amp;amp;lt;p class=&amp;quot;question&amp;quot;&amp;gt;, &amp;amp;lt;ul class=&amp;quot;question&amp;quot;&amp;gt;, &amp;amp;lt;table class=&amp;quot;question&amp;quot;&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | .ls-answers {{NewIn|3.0}}&lt;br /&gt;
| All question block&lt;br /&gt;
| All question type&lt;br /&gt;
|&amp;amp;lt;div class=&amp;quot;ls-answers &amp;quot;&amp;gt;, &amp;amp;lt;ul class=&amp;quot;ls-answers &amp;quot;&amp;gt;, &amp;amp;lt;table class=&amp;quot;ls-answers&amp;quot;&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | .subquestions-list&lt;br /&gt;
| List of subquestion&lt;br /&gt;
| Multi choice question, array question type&lt;br /&gt;
| &amp;amp;lt;ul class=&amp;quot;subquestions-list&amp;quot;&amp;gt;, &amp;amp;lt;table class=&amp;quot;subquestions-list&amp;quot;&amp;gt;&lt;br /&gt;
| .questions-list is used too&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | .answers-list&lt;br /&gt;
| List of answers&lt;br /&gt;
| Single choice question, array question type, Multi input text question&lt;br /&gt;
| &amp;amp;lt;ul class=&amp;quot;answers-list&amp;quot;&amp;gt;, &amp;amp;lt;table class=&amp;quot;answers-list&amp;quot;&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | .answer-item&lt;br /&gt;
| The answer part: one answer&lt;br /&gt;
| Single choice question, array question type, Multi input text question&lt;br /&gt;
| &amp;amp;lt;li class=&amp;quot;answer-item&amp;quot;&amp;gt;, &amp;amp;lt;td class=&amp;quot;answer-item&amp;quot;&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | .noanswer-item&lt;br /&gt;
| The answer part for no answer&lt;br /&gt;
| Single choice question, array question type&lt;br /&gt;
| &amp;amp;lt;li class=&amp;quot;noanswer-item&amp;quot;&amp;gt;, &amp;amp;lt;td class=&amp;quot;noanswer-item&amp;quot;&amp;gt;&lt;br /&gt;
| No answer is an answer too, then have double class noanswer-item and answer-item&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | .question-item&lt;br /&gt;
| The question part: one question&lt;br /&gt;
| Multi text question, array question type&lt;br /&gt;
| &amp;amp;lt;li class=&amp;quot;question-item&amp;quot;&amp;gt;, &amp;amp;lt;tr class=&amp;quot;question-item&amp;quot;&amp;gt;&lt;br /&gt;
| Some answers are questions too. Then we have a lot of class=&amp;quot;question-item answer-item&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | .button-list&lt;br /&gt;
| A list of button&lt;br /&gt;
| Yes no and Gender question&lt;br /&gt;
| &amp;amp;lt;ul class=&amp;quot;button-list&amp;quot;&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | .button-item&lt;br /&gt;
| The answer part with a button&lt;br /&gt;
| Yes no and Gender question&lt;br /&gt;
| &amp;amp;lt;li class=&amp;quot;button-item&amp;quot;&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | .checkbox-list&lt;br /&gt;
| A list of checkbox&lt;br /&gt;
| Multi choice question, array number (checkbox) question type&lt;br /&gt;
| &amp;amp;lt;ul class=&amp;quot;checkbox-list&amp;quot;&amp;gt;, &amp;amp;lt;tr class=&amp;quot;checkbox-list&amp;quot;&amp;gt;&lt;br /&gt;
| Some question types use multi-list class, like checkbox with comment: class=&amp;quot;checkbox-list text-list&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | .checkbox-array  {{NewIn|3.0}}&lt;br /&gt;
| A array of checkbox&lt;br /&gt;
| Array (numbers) with checkbox option&lt;br /&gt;
| &amp;amp;lt;table class=&amp;quot;checkbox-list&amp;quot;&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | .checkbox-item&lt;br /&gt;
| The answer part with a checkbox&lt;br /&gt;
| Multi choice question, array number (checkbox) question type&lt;br /&gt;
| &amp;amp;lt;li class=&amp;quot;checkbox-item&amp;quot;&amp;gt;, &amp;amp;lt;td class=&amp;quot;checkbox-item&amp;quot;&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | .radio-list&lt;br /&gt;
| A list of radio item&lt;br /&gt;
| Single choice question, array question type (each row)&lt;br /&gt;
| &amp;amp;lt;ul class=&amp;quot;radio-list&amp;quot;&amp;gt;, &amp;amp;lt;tr class=&amp;quot;radio-list&amp;quot;&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | .radio-array {{NewIn|3.0}}&lt;br /&gt;
| A array of radio item&lt;br /&gt;
| Array question type&lt;br /&gt;
| &amp;amp;lt;table class=&amp;quot;radio-array&amp;quot;&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | .radio-item&lt;br /&gt;
| The answer part with a radio&lt;br /&gt;
| Single choice question, array question type&lt;br /&gt;
| &amp;amp;lt;li class=&amp;quot;radio-item&amp;quot;&amp;gt;, &amp;lt;td class=&amp;quot;radio-item&amp;quot;&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | .text-list&lt;br /&gt;
| A list of text input&lt;br /&gt;
| Multi text question type, array of text&lt;br /&gt;
| &amp;amp;lt;ul class=&amp;quot;text-list&amp;quot;&amp;gt;, &amp;amp;lt;tr class=&amp;quot;text-list&amp;quot;&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | .text-item&lt;br /&gt;
| The answer part of a text input&lt;br /&gt;
| Multi text question type, array of text&lt;br /&gt;
| &amp;amp;lt;li class=&amp;quot;text-item&amp;quot;&amp;gt;, &amp;lt;td class=&amp;quot;text-item&amp;quot;&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | .numeric-list&lt;br /&gt;
| A list of text input with numeric only answer&lt;br /&gt;
| Multi numeric question type, array of number&lt;br /&gt;
| &amp;amp;lt;ul class=&amp;quot;text-list numeric-list&amp;quot;&amp;gt;, &amp;amp;lt;tr class=&amp;quot;text-list numeric-list&amp;quot;&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | .number-list&lt;br /&gt;
| A list of text input with numeric only answer (each row)&lt;br /&gt;
| Multi numeric question type, array of number&lt;br /&gt;
| &amp;amp;lt;ul class=&amp;quot;text-list numeric-list&amp;quot;&amp;gt;, &amp;amp;lt;tr class=&amp;quot;text-list numeric-list&amp;quot;&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | .number-array  {{NewIn|3.0}}&lt;br /&gt;
| The answer part of a numeric input&lt;br /&gt;
| Array of number&lt;br /&gt;
| &amp;amp;lt;table class=&amp;quot;number-array&amp;quot;&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | .select-list  {{ObsoleteIn|2.50}}&lt;br /&gt;
| A list of select&lt;br /&gt;
| Array numbers, Dual scale array (select)&lt;br /&gt;
| &amp;amp;lt;table class=&amp;quot;select-list&amp;quot;&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | .dropdown-list  {{NewIn|2.50}}&lt;br /&gt;
| A list of select&lt;br /&gt;
| Array numbers, Dual scale array (select) (each row)&lt;br /&gt;
| &amp;amp;lt;table class=&amp;quot;dropdown-list&amp;quot;&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | .dropdown-array  {{NewIn|3.0}}&lt;br /&gt;
| A array of dropdown&lt;br /&gt;
| Array numbers, Dual scale array (select)&lt;br /&gt;
| &amp;amp;lt;table class=&amp;quot;dropdown-array&amp;quot;&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | .select-item  {{ObsoleteIn|2.50}}&lt;br /&gt;
| The answer part of a select&lt;br /&gt;
| Array numbers, Dual scale array (select), single choice with select&lt;br /&gt;
| &amp;amp;lt;p class=&amp;quot;select-item&amp;quot;&amp;gt;, &amp;amp;lt;td class=&amp;quot;select-item&amp;quot;&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | .dropdown-item  {{NewIn|2.50}}&lt;br /&gt;
| The answer part of a select&lt;br /&gt;
| Array numbers, Dual scale array (select), single choice with select&lt;br /&gt;
| &amp;amp;lt;p class=&amp;quot;dropdown-item&amp;quot;&amp;gt;, &amp;amp;lt;td class=&amp;quot;dropdown-item&amp;quot;&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | .hide  {{ObsoleteIn|3.0}}&lt;br /&gt;
| Used for accessibility: hidden with css but read by screenreader, since 2.50 : you can use sr-only from bootstrap&lt;br /&gt;
| Short text question&lt;br /&gt;
| &amp;amp;lt;label class=&amp;quot;hide&amp;quot;&amp;gt;&lt;br /&gt;
| Can be used for other purposes&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | .ls-js-hidden {{NewIn|3.0}}&lt;br /&gt;
| Used for part to be hidden if javascript is activated&lt;br /&gt;
| Button for example&lt;br /&gt;
| &amp;amp;lt;div class=&amp;quot;ls-js-hidden&amp;quot;&amp;gt;&lt;br /&gt;
| LimeSurvey core used it, but you can use it too in your template&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | .ls-js-hidden-sr {{NewIn|3.0}}&lt;br /&gt;
| Used for accessibility: hide it if js is activated, but always show if user use a screenreader&lt;br /&gt;
| Button for example&lt;br /&gt;
| &amp;amp;lt;a class=&amp;quot;ls-js-hidden-sr&amp;quot;&amp;gt;&lt;br /&gt;
| Button&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | .ls-no-js-hidden {{NewIn|3.0}}&lt;br /&gt;
| Used for part to be hidden if javascript is not activated&lt;br /&gt;
| Link&lt;br /&gt;
| &amp;amp;lt;a class=&amp;quot;ls-no-js-hidden&amp;quot;&amp;gt;&lt;br /&gt;
| LimeSurvey core used it for inactive link if javascript is not activated&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | .ls-label-xs-visibility {{NewIn|3.0}}&lt;br /&gt;
|  Label to be hidden in big screen, but show with little screen (with no more table) and to screenreader&lt;br /&gt;
| label&lt;br /&gt;
| &amp;amp;lt;label class=&amp;quot;ls-no-js-hidden&amp;quot;&amp;gt;&lt;br /&gt;
| Used for label inside table cell of array question type&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | .ls-input-group-extra {{NewIn|3.0}}&lt;br /&gt;
| Same usage of boostrap input-group-addon, but without the border and the background.&lt;br /&gt;
| right suffix&lt;br /&gt;
| &amp;amp;lt;div class=&amp;quot;ls-input-group-extra&amp;quot;&amp;gt;&lt;br /&gt;
| Used for right and left suffix (global)&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | .checkbox {{ObsoleteIn|3.0}}&lt;br /&gt;
| input[type=checkbox]&lt;br /&gt;
| Question with checkbox&lt;br /&gt;
| &amp;amp;lt;input type=&amp;quot;checkbox&amp;quot; class=&amp;quot;checkbox&amp;quot;&amp;gt;&lt;br /&gt;
| With modern browser: not needed, but some old browser need this&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | .radio {{ObsoleteIn|3.0}}&lt;br /&gt;
| input[type=radio]&lt;br /&gt;
| Question with radio&lt;br /&gt;
| &amp;amp;lt;input type=&amp;quot;radio&amp;quot; class=&amp;quot;radio&amp;quot;&amp;gt;&lt;br /&gt;
| With modern browser: not needed, but some old browser need this&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | .text&lt;br /&gt;
| input[type=text]&lt;br /&gt;
| Question with input text, or textarea&lt;br /&gt;
| &amp;amp;lt;textarea class=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | .answertext&lt;br /&gt;
| Array question type&lt;br /&gt;
| Answer part of array question type&lt;br /&gt;
| &amp;amp;lt;th class=&amp;quot;answertext&amp;quot;&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | .col-answers&lt;br /&gt;
| Array question type&lt;br /&gt;
| Column of answers&lt;br /&gt;
| &amp;amp;lt;col class=&amp;quot;col-answers&amp;quot;&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | .odd .even {{ObsoleteIn|2.50}}&lt;br /&gt;
| Array question type&lt;br /&gt;
| Alternation for column&lt;br /&gt;
| &amp;amp;lt;col class=&amp;quot;odd&amp;quot;&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | .array1 .array2  {{ObsoleteIn|3.0}}&lt;br /&gt;
| Array question type&lt;br /&gt;
| Alternation for line&lt;br /&gt;
| &amp;amp;lt;tr class=&amp;quot;array1&amp;quot;&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | .ls-odd .ls-even  {{NewIn|3.0}}&lt;br /&gt;
| Array question type&lt;br /&gt;
| Alternation for subquestion and Y axis&lt;br /&gt;
| &amp;amp;lt;tr class=&amp;quot;ls-odd&amp;quot;&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Some examples of question part with classes==== &amp;lt;!--T:275--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:276--&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Text-short question type:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;question answer-item text-item &amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;label class=&amp;quot;hide label&amp;quot; for=&amp;quot;answerSGQA&amp;quot;&amp;gt;Answer&amp;lt;/label&amp;gt;&amp;lt;input type=&amp;quot;text&amp;quot; value=&amp;quot;&amp;quot; id=&amp;quot;answerSGQA&amp;quot; name=&amp;quot;SGQA&amp;quot; size=&amp;quot;50&amp;quot; class=&amp;quot;text  empty&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:277--&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Multiple short text&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;ul class=&amp;quot;subquestions-list questions-list text-list&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;li class=&amp;quot;question-item answer-item text-item&amp;quot; id=&amp;quot;javatbdSGQA&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;label for=&amp;quot;answerSGQA&amp;quot;&amp;gt;Some example subquestion&amp;lt;/label&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;&amp;lt;input type=&amp;quot;text&amp;quot; value=&amp;quot;&amp;quot; id=&amp;quot;answerSGQA&amp;quot; name=&amp;quot;SGQA&amp;quot; size=&amp;quot;20&amp;quot; class=&amp;quot;text empty&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:282--&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Array question type&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;table class=&amp;quot;question subquestion-list questions-list &amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;caption class=&amp;quot;hide read&amp;quot;&amp;gt;Some explanation for accessibility.&amp;lt;/caption&amp;gt;&lt;br /&gt;
	&amp;lt;colgroup class=&amp;quot;col-responses&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;col width=&amp;quot;50%&amp;quot; class=&amp;quot;col-answers&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;col width=&amp;quot;25%&amp;quot; class=&amp;quot;odd&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;col width=&amp;quot;13.3%&amp;quot; class=&amp;quot;col-no-answer even&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;/colgroup&amp;gt;&lt;br /&gt;
	&amp;lt;thead&amp;gt;&lt;br /&gt;
		&amp;lt;tr class=&amp;quot;array1 dontread&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
			&amp;lt;th&amp;gt;1&amp;lt;/th&amp;gt;&lt;br /&gt;
			&amp;lt;th&amp;gt;No answer&amp;lt;/th&amp;gt;&lt;br /&gt;
		&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;lt;/thead&amp;gt;&lt;br /&gt;
	&amp;lt;tbody&amp;gt;&lt;br /&gt;
		&amp;lt;tr class=&amp;quot;array2 answers-list radio-list&amp;quot; id=&amp;quot;javatbdSGQ&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;th width=&amp;quot;20%&amp;quot; class=&amp;quot;answertext&amp;quot;&amp;gt;Some example subquestion&lt;br /&gt;
			&amp;lt;/th&amp;gt;&lt;br /&gt;
			&amp;lt;td class=&amp;quot;answer_cell_001 answer-item radio-item&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;label for=&amp;quot;answerSGQA&amp;quot; class=&amp;quot;hide read&amp;quot;&amp;gt;1&amp;lt;/label&amp;gt;&lt;br /&gt;
				&amp;lt;input type=&amp;quot;radio&amp;quot; value=&amp;quot;1&amp;quot; id=&amp;quot;answerSGQA&amp;quot; name=&amp;quot;SGQA&amp;quot; class=&amp;quot;radio&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;/td&amp;gt;&lt;br /&gt;
			&amp;lt;td class=&amp;quot;answer-item radio-item noanswer-item&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;label for=&amp;quot;answerSGQA&amp;quot; class=&amp;quot;hide read&amp;quot;&amp;gt;No answer&amp;lt;/label&amp;gt;&lt;br /&gt;
				&amp;lt;input type=&amp;quot;radio&amp;quot; value=&amp;quot;&amp;quot; id=&amp;quot;answerSGQA&amp;quot; name=&amp;quot;SGQA&amp;quot; class=&amp;quot;radio&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;lt;/tbody&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===The full list of question classes=== &amp;lt;!--T:71--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:72--&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|&#039;&#039;&#039;Question Type&#039;&#039;&#039;||&#039;&#039;&#039;Question Class&#039;&#039;&#039;||&#039;&#039;&#039;Question ID&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|5 point choice||.choice-5-pt-radio||5&lt;br /&gt;
|-&lt;br /&gt;
|Array (10 point choice)||.array-10-pt||B&lt;br /&gt;
|-&lt;br /&gt;
|Array (5 point choice)||.array-5-pt||A&lt;br /&gt;
|-&lt;br /&gt;
|Array (Flexible Labels) dual scale||.array-flexible-duel-scale ||1&lt;br /&gt;
|-&lt;br /&gt;
|Array (Increase, Same, Decrease)||.array-increase-same-decrease||E&lt;br /&gt;
|-&lt;br /&gt;
|Array (Multi Flexible) (Numbers)||.array-multi-flexi ||:&lt;br /&gt;
|-&lt;br /&gt;
|Array (Multi Flexible) (Text)||.array-multi-flexi-text||;&lt;br /&gt;
|-&lt;br /&gt;
|Array (Yes/No/Uncertain)||.array-yes-uncertain-no||C&lt;br /&gt;
|-&lt;br /&gt;
|Array (flexible labels)||.array-flexible-row ||F&lt;br /&gt;
|-&lt;br /&gt;
|Array (flexible labels) by column||.array-flexible-column||H&lt;br /&gt;
|-&lt;br /&gt;
|Boilerplate question||.boilerplate||X&lt;br /&gt;
|-&lt;br /&gt;
|Date||.date||D&lt;br /&gt;
|-&lt;br /&gt;
|Equation||.equation||*&lt;br /&gt;
|-&lt;br /&gt;
|Gender||.gender||G&lt;br /&gt;
|-&lt;br /&gt;
|Huge free text||.text-huge||U&lt;br /&gt;
|-&lt;br /&gt;
|Language switch||.language||I&lt;br /&gt;
|-&lt;br /&gt;
|List (dropdown)||.list-dropdown||!&lt;br /&gt;
|-&lt;br /&gt;
|List (radio)||.list-radio||L&lt;br /&gt;
|-&lt;br /&gt;
|List with comment||.list-with-comment||O&lt;br /&gt;
|-&lt;br /&gt;
|Long free text||.text-long||T&lt;br /&gt;
|-&lt;br /&gt;
|Multiple numerical input||.numeric-multi||K&lt;br /&gt;
|-&lt;br /&gt;
|Multiple options||.multiple-opt||M&lt;br /&gt;
|-&lt;br /&gt;
|Multiple options with comments||.multiple-opt-comments||P&lt;br /&gt;
|-&lt;br /&gt;
|Multiple short text||.multiple-short-txt||Q&lt;br /&gt;
|-&lt;br /&gt;
|Numerical input||.numeric||N&lt;br /&gt;
|-&lt;br /&gt;
|Ranking||.ranking||R&lt;br /&gt;
|-&lt;br /&gt;
|Short free text||.text-short||S&lt;br /&gt;
|-&lt;br /&gt;
|Yes/No||.yes-no||Y&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===The full list of validation classes=== &amp;lt;!--T:73--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:74--&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;simplebox&amp;quot;&amp;gt;Note:  Prior to 1.92, only .mandatory and .input-error classes were available.&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:75--&amp;gt;&lt;br /&gt;
These apply to the help and/or validation tip messages so that each type can be individually styled.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:76--&amp;gt;&lt;br /&gt;
The .hide-tip option and .input-error options interact by default so that you can have validation tips hidden. However, they do appear when there are validation errors and disappear again when those errors are rectified.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:77--&amp;gt;&lt;br /&gt;
All of these are designed to eliminate the need for pop-up alert messages. Instead, tips can appear/disappear as needed and are color-coded to indicate whether the answers pass the validation criteria.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:78--&amp;gt;&lt;br /&gt;
Furthermore, when you first visit a page that has unmet validation criteria, you can color-code the tips in a pleasing color to show which validation criteria have not been met yet; then re-display the page using a harsher color if the person submits the page with lingering validation errors.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:79--&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|&#039;&#039;&#039;Purpose&#039;&#039;&#039;||&#039;&#039;&#039;CSS Class&#039;&#039;&#039;||&#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|Mandatory||.mandatory||the question is mandatory&lt;br /&gt;
|-&lt;br /&gt;
|User input error||.input-error||the question had at least one validation error&lt;br /&gt;
|-&lt;br /&gt;
|Hide Tip||.hide-tip||added if you use the hide_tip option&lt;br /&gt;
|-&lt;br /&gt;
|defrault type||.em_default||for default tip set ( numeric value etc …)&lt;br /&gt;
|-&lt;br /&gt;
|Num answers||.em_num_answers||for for min_answers and max_answers&lt;br /&gt;
|-&lt;br /&gt;
|Value range||.em_value_range||for min/max_num_value_n and multiflexible_min/max&lt;br /&gt;
|-&lt;br /&gt;
|Sum range||.em_sum_range||for min/max/equals_num_value&lt;br /&gt;
|-&lt;br /&gt;
|Regex validation||.em_regex_validation||for regular-expression validation of the question&lt;br /&gt;
|-&lt;br /&gt;
|Question-level validation function||.em_q_fn_validation||for the em_validation_q option&lt;br /&gt;
|-&lt;br /&gt;
|Subquestion-level validation function||.em_sq_fn_validation||for the em_validation_sq option&lt;br /&gt;
|-&lt;br /&gt;
|Other comment mandatory||.em_other_comment_mandatory||for other_comment_mandatory option - shows when &amp;quot;other&amp;quot; is selected but associated comment is missing.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Importing styles into your custom template=== &amp;lt;!--T:80--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:81--&amp;gt;&lt;br /&gt;
The custom question styles are near the bottom of each template&#039;s CSS file and start with:&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;/* --------------------------- START: Question styles  ------------------------------ */&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:83--&amp;gt;&lt;br /&gt;
If you&#039;re styling your own custom template, you should be able to copy everything after the above one from &#039;&#039;templates/default/template.css&#039;&#039; (for table-based layouts) or &#039;&#039;/templates/limespired/template.css&#039;&#039; (for CSS-based layouts) into your own style sheet without any impact on your other styles.&lt;br /&gt;
&lt;br /&gt;
===Internet Explorer Conditional Style Sheets=== &amp;lt;!--T:84--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:85--&amp;gt;&lt;br /&gt;
Because of the marked discrepancies in rendering between IE6 &amp;amp; IE7 and the other browsers, there are special IE conditional style sheets included for each template.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:86--&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!--[if IE]&amp;gt;&lt;br /&gt;
  &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; type=&amp;quot;text/css&amp;quot; href=&amp;quot;{TEMPLATEURL}IE_fix_all-versions.css&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;![endif]--&amp;gt;&lt;br /&gt;
&amp;lt;!--[if lt IE 7]&amp;gt;&lt;br /&gt;
  &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; type=&amp;quot;text/css&amp;quot; href=&amp;quot;{TEMPLATEURL}IE_fix_older-than-7.css&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;![endif]--&amp;gt;&lt;br /&gt;
&amp;lt;!--[if IE 8]&amp;gt;&lt;br /&gt;
		&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; type=&amp;quot;text/css&amp;quot; href=&amp;quot;{TEMPLATEURL}ie_fix_8.css&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;![endif]--&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:87--&amp;gt;&lt;br /&gt;
You should include the above code within your &#039;&#039;&#039;startpage.pstpl&#039;&#039;&#039; and copies of both the IE style sheets from either &#039;&#039;/templates/default/&#039;&#039; or &#039;&#039;/templates/limespired&#039;&#039; for Tables base layout and CSS based layout respectively.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:88--&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;simplebox&amp;quot;&amp;gt;&#039;&#039;&#039;Note:&#039;&#039;&#039; If you copy the styles into your own style sheet you will almost certainly need to tweak them.&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Alternative solution for internet explorer==== &amp;lt;!--T:89--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:90--&amp;gt;&lt;br /&gt;
You can put a conditional class for body in startpage.pstpl and use this class in your template.css. This method is used in the citronade template{{ObsoleteIn|2.06}}. Adding a js / no-js class to have javascript / no javascript system.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:91--&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&amp;lt;!--[if lt IE 7 ]&amp;gt; &amp;lt;body class=&amp;quot;lang-{SURVEYLANGUAGE} {SURVEYFORMAT} ie ie6 ielt7 ielt8 ielt9 no-js&amp;quot;&amp;gt; &amp;lt;![endif]--&amp;gt;&lt;br /&gt;
&amp;lt;!--[if IE 7 ]&amp;gt; &amp;lt;body class=&amp;quot;lang-{SURVEYLANGUAGE} {SURVEYFORMAT} ie ie7 ielt8 ielt9 no-js&amp;quot;&amp;gt; &amp;lt;![endif]--&amp;gt;&lt;br /&gt;
&amp;lt;!--[if IE 8 ]&amp;gt; &amp;lt;body class=&amp;quot;lang-{SURVEYLANGUAGE} {SURVEYFORMAT} ie ie8 ielt9  no-js&amp;quot;&amp;gt; &amp;lt;![endif]--&amp;gt;&lt;br /&gt;
&amp;lt;!--[if IE 9 ]&amp;gt; &amp;lt;body class=&amp;quot;lang-{SURVEYLANGUAGE} {SURVEYFORMAT} ie ie9 no-js&amp;quot;&amp;gt; &amp;lt;![endif]--&amp;gt;&lt;br /&gt;
&amp;lt;!--[if gt IE 9]&amp;gt;&amp;lt;!--&amp;gt;&amp;lt;body id=&amp;quot;body&amp;quot; class=&amp;quot;lang-{SURVEYLANGUAGE} {SURVEYFORMAT} no-js&amp;quot;&amp;gt;&amp;lt;!--&amp;lt;![endif]--&amp;gt;&lt;br /&gt;
&amp;lt;script type=&#039;text/javascript&#039;&amp;gt;/*&amp;lt;![CDATA[*/(function(H){ H.className=H.className.replace(/\bno-js\b/,&#039;js&#039;) })(document.getElementsByTagName(&#039;body&#039;)[0]);/*]]&amp;gt;*/&amp;lt;/script&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:93--&amp;gt;&lt;br /&gt;
And in template.css use:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:94--&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;css&amp;quot;&amp;gt;.ie6{/*specific for internet explorer 6*/}&lt;br /&gt;
.ielt8{/*specific for internet explorer 6 and 7*/}&lt;br /&gt;
.ie{/*specific for all internet explorer */}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Right-to-Left (RTL) languages and justify=== &amp;lt;!--T:97--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:98--&amp;gt;&lt;br /&gt;
The text editor within LimeSurvey is able to format RTL text. However, the editor itself shows the RTL language in a left to right format when justified. This is just an editor display issue. The RTL and justified question or text will display correctly from right to left, even when justified, in your survey or on preview.&lt;br /&gt;
&lt;br /&gt;
===Keywords=== &amp;lt;!--T:99--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:309--&amp;gt;&lt;br /&gt;
{{Deprecated|3.0}} &lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:100--&amp;gt;&lt;br /&gt;
Keywords within a template file get replaced by the current survey information. They are surrounded by curly brackets, for example: {SURVEYNAME}.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:101--&amp;gt;&lt;br /&gt;
The following strings will be replaced by LimeSurvey when parsing the template file and presenting it to survey users. These field strings will work on almost every template except for the &#039;Completed Page&#039;. (Most of these strings can be found in the common.php file. If it&#039;s not there, look in the index.php file.)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:102--&amp;gt;&lt;br /&gt;
{|class=wikitable&lt;br /&gt;
!&#039;&#039;&#039;Keyword&#039;&#039;&#039;!!&#039;&#039;&#039;Template files&#039;&#039;&#039;!!&#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|{SURVEYNAME}||All Files||The survey title&lt;br /&gt;
|-&lt;br /&gt;
|{SURVEYDESCRIPTION}||All Files||The survey description&lt;br /&gt;
|-&lt;br /&gt;
|{WELCOME}||All files (mainly for welcome.pstpl)||The survey &#039;welcome&#039; text&lt;br /&gt;
|-&lt;br /&gt;
|{PERCENTCOMPLETE}||survey.pstpl||A small graph showing the percentage of the survey completed&lt;br /&gt;
|-&lt;br /&gt;
|{GROUPNAME}||startgroup.pstpl, groupdescription.pstpl, endgroup.pstpl||Displays the current group name&lt;br /&gt;
|-&lt;br /&gt;
|{GROUPDESCRIPTION}||startgroup.pstpl, groupdescription.pstpl, endgroup.pstpl||Displays the current group description&lt;br /&gt;
|-&lt;br /&gt;
|{NUMBEROFQUESTIONS}||welcome.pstpl||Displays the total number of questions in the survey (just the number)&lt;br /&gt;
|-&lt;br /&gt;
|{THEREAREXQUESTIONS}||welcome.pstpl||Displays the sentence &amp;quot;There are X questions in this survey&amp;quot; - from the relevant language file. The X is replaced with the number of questions. Note that this will also work appropriately for singular or plural. If there is only 1 question, it will print &amp;quot;There is 1 question in this survey&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
|{CHECKJAVASCRIPT}||All files (mainly for welcome.pstpl)||Warning message when end-user browser have javascript disabled&lt;br /&gt;
|-&lt;br /&gt;
|{QUESTION}||Question.pstpl||(&#039;&#039;&#039;Has been superseeded as of LS1.87&#039;&#039;&#039;) Displays the current question text (The format of {QUESTION} can customised by editing &#039;question_start.pstpl&#039;) Use the following: {QUESTION_TEXT}, {QUESTION_MANDATORY}, {QUESTION_HELP}, {QUESTION_MAN_MESSAGE}, {QUESTION_VALID_MESSAGE}, {QUESTION_INPUT_ERROR_CLASS}, and appropriate wrapping HTML instead of {QUESTION}&lt;br /&gt;
|-&lt;br /&gt;
|{ANSWER}||question.pstpl, print_question.pstpl||presents the answer form for the current question&lt;br /&gt;
|-&lt;br /&gt;
|{SGQ}||question.pstpl, question text||Can be used in the question text itself to reference the input field of the question dynamically by displaying the Survey-Group-Question id for the current question. (as of svn build 9755)&lt;br /&gt;
|-&lt;br /&gt;
|{QUESTIONHELP}||question.pstpl, print_question.pstpl||Displays help text (predefined tip for question type) for the current question&lt;br /&gt;
|-&lt;br /&gt;
|{QUESTION_CLASS}||question.pstpl, print_question.pstpl||unique class for each question type. (To be included in the question&#039;s wrapping tag.)&lt;br /&gt;
|-&lt;br /&gt;
|{QUESTION_CODE}||question.pstpl, print_question.pstpl||Displays the current question code&lt;br /&gt;
|-&lt;br /&gt;
|{QUESTION_ESSENTIALS}||question.pstpl||the question ID and (if a question is conditional), &#039;style=&amp;quot;display:none;&amp;quot;&#039;. (To be included in the question&#039;s wrapping tag.)&lt;br /&gt;
|-&lt;br /&gt;
|{QUESTION_HELP}||question.pstp, question_start.pstpl||Displays the user defined help text for the current question&lt;br /&gt;
|-&lt;br /&gt;
|{QUESTION_TYPE_HELP}||print_question.pstp||Displays the user defined help text for the current question&lt;br /&gt;
|-&lt;br /&gt;
|{QUESTION_INPUT_ERROR_CLASS}||question.pstp, question_start.pstpl||Provides a class if there was user input error&lt;br /&gt;
|-&lt;br /&gt;
|{QUESTION_ID}||print_question.pstp||Provides a unique ID for each question to allow styling for specific questions&lt;br /&gt;
|-&lt;br /&gt;
|{QUESTION_TEXT}||question.pstp, print_question.pstp, question_start.pstpl||Displays the text for the current question&lt;br /&gt;
|-&lt;br /&gt;
|{QUESTION_MANDATORY}||question.pstp, print_question.pstp, question_start.pstpl||Displays the translated &#039;Mandatory&#039; text for the current question&lt;br /&gt;
|-&lt;br /&gt;
|{QUESTION_MAN_CLASS}||question.pstpl, print_question.pstpl||class if a question is mandatory. (To be included in the question&#039;s wrapping tag.)&lt;br /&gt;
|-&lt;br /&gt;
|{QUESTION_MAN_MESSAGE}||question.pstp, print_question.pstp, question_start.pstpl||Displays the translated &#039;Mandatory&#039; help message text for the current question&lt;br /&gt;
|-&lt;br /&gt;
|{QUESTION_NUMBER}||print_question.pstpl||Incremental count of questions.&lt;br /&gt;
|-&lt;br /&gt;
|{QUESTION_VALID_MESSAGE}||question.pstp, print_question.pstp, question_start.pstpl||Displays the translated valid help message text for the current question&lt;br /&gt;
|-&lt;br /&gt;
|{QUESTION_SCENARIO}||print_question.pstp||Prints out the &#039;scenario&#039; text for conditional questions.&lt;br /&gt;
|-&lt;br /&gt;
|{NAVIGATOR}||navigator.pstpl||Displays navigation buttons (next, prev, last)&lt;br /&gt;
|-&lt;br /&gt;
|{CLEARALL}||All files (but intended for navigator.pstpl)||Displays the &amp;quot;Exit and Clear Results&amp;quot; link&lt;br /&gt;
|-&lt;br /&gt;
|{COMPLETED}||completed.pstpl||Displays the &#039;completed&#039; message for registering, will change depending on whether the attribute_1 and attribute_2 fields are set.&lt;br /&gt;
|-&lt;br /&gt;
|{URL}||completed.pstpl||Displays the survey &#039;url&#039; and &#039;url text&#039;&lt;br /&gt;
|-&lt;br /&gt;
|{PRIVACYMESSAGE}||privacy.pstpl||The privacy message is shown if you set your survey to be anonymous. [[Translating LimeSurvey|The text can be edited/translated]] in the language files. This can also be changed manually by editing the privacy.pstpl template you wish to use.&lt;br /&gt;
|-&lt;br /&gt;
|{TEMPLATEURL}||All Files||The URL to the current template location (useful for referencing image files in your template)&lt;br /&gt;
|-&lt;br /&gt;
|{SURVEYRESOURCESURL}||All Files||The URL to the current uploaded files for this survey location (useful for referencing image files in your question, group, ....)&lt;br /&gt;
|-&lt;br /&gt;
|{SUBMITCOMPLETE}||endpage.pstpl||The statement (from the language files) that tells the user they have completed the survey, and to press the &amp;quot;Submit&amp;quot; button&lt;br /&gt;
|-&lt;br /&gt;
|{SUBMITREVIEW}||survey.pstpl||The statement (from the language files) that tells the user they can review/change the answers they have made by clicking &amp;quot;&amp;lt;&amp;lt; prev&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|{SAVEDID}||All Files||Displays &#039;Response ID&#039; of user&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|{QUEXMLPDF}||All Files||Displays button to export the queXML PDF of questionnaire including answers entered up until the point that has been completed in the survey.&lt;br /&gt;
|-&lt;br /&gt;
|{TOKEN:FIRSTNAME}||All Files||***If survey answers are NOT ANONYMOUS - gets replaced with the users first name from the tokens table&lt;br /&gt;
|-&lt;br /&gt;
|{TOKEN:LASTNAME}||All Files||***If survey answers are NOT ANONYMOUS - gets replaced with the users last name from the tokens table***&lt;br /&gt;
|-&lt;br /&gt;
|{TOKEN:EMAIL}||All Files||***If survey answers are NOT ANONYMOUS - gets replaced with the users email from the tokens table***&lt;br /&gt;
|-&lt;br /&gt;
|{TOKEN:ATTRIBUTE_1}||All Files||***If survey answers are NOT ANONYMOUS - gets replaced with the users attribute_1 from the tokens table***&lt;br /&gt;
|-&lt;br /&gt;
|{TOKEN:ATTRIBUTE_2}||All Files||***If survey answers are NOT ANONYMOUS - gets replaced with the users attribute_2 from the tokens table***&lt;br /&gt;
|-&lt;br /&gt;
|{ANSWERSCLEARED}||Preferably in navigator.pstpl||The &amp;quot;Answers Cleared&amp;quot; statement from the language files&lt;br /&gt;
|-&lt;br /&gt;
|{RESTART}||clearall.pstpl||URL to restart the survey&lt;br /&gt;
|-&lt;br /&gt;
|{REGISTERERROR}||register.pstpl||Shows any error messages in the register page (ie: &amp;quot;You must include an email address&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
|{REGISTERMESSAGE1}||register.pstpl||The statement &amp;quot;You must be registered to complete this survey&amp;quot; from the language files&lt;br /&gt;
|-&lt;br /&gt;
|{REGISTERMESSAGE2}||register.pstpl||Details about registering from the language files&lt;br /&gt;
|-&lt;br /&gt;
|{REGISTERFORM}||register.pstpl||The actual form for registering, will change depending on whether the attribute_1 and attribute_2 fields are set.&lt;br /&gt;
|-&lt;br /&gt;
|{SAVE}||Works suitable on navigator.pstpl||Displays the &#039;Save your responses so far&#039; button to offer the user to save and come back later to continue the survey. If the Save option is deactivated in the survey properties the tag will not be shown and ignored.&lt;br /&gt;
|-&lt;br /&gt;
|{LANGUAGECHANGER}||survey.pstpl||Displays a switch in multilingual surveys to change the question.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Input/Buttons=== &amp;lt;!--T:103--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:104--&amp;gt;&lt;br /&gt;
Each &amp;quot;input&amp;quot; type in a survey has been given its own class name, so that you can add CSS to your &amp;quot;startpage.pstpl&amp;quot; file and have some control over the appearance of form buttons and inputs. These class names are as follows:&lt;br /&gt;
*&#039;&#039;&#039;submit&#039;&#039;&#039; (Submit Buttons)&lt;br /&gt;
*&#039;&#039;&#039;text&#039;&#039;&#039; (Text Inputs - for short free text, date, and numerical type)&lt;br /&gt;
*&#039;&#039;&#039;answertext&#039;&#039;&#039; (Text of answers)&lt;br /&gt;
*&#039;&#039;&#039;radio&#039;&#039;&#039; (Radio Buttons)&lt;br /&gt;
*&#039;&#039;&#039;checkbox&#039;&#039;&#039; (Check Boxes)&lt;br /&gt;
*&#039;&#039;&#039;select&#039;&#039;&#039; (Select / List Boxes)&lt;br /&gt;
*&#039;&#039;&#039;textarea&#039;&#039;&#039; (Large text inputs - for long free text)&lt;br /&gt;
*&#039;&#039;&#039;clearall&#039;&#039;&#039; (The &amp;quot;Exit and Clear Survey&amp;quot; link)&lt;br /&gt;
*&#039;&#039;&#039;rank&#039;&#039;&#039; (The rank style question. Doesn&#039;t set the colour of the select box or the text boxes, but it does allow the changing of background colour, text colour, size etc., for the rest of the ranking question)&lt;br /&gt;
*&#039;&#039;&#039;graph&#039;&#039;&#039; (The &amp;quot;percentage completed&amp;quot; graph table)&lt;br /&gt;
*&#039;&#039;&#039;innergraph&#039;&#039;&#039; (The table inside the graph table - this contains the 0% and 100% text. Use this for changing the size of this text)&lt;br /&gt;
*&#039;&#039;&#039;question&#039;&#039;&#039; (General settings for any question that is displayed within a table. Generally, you should use this to make sure that their font size and color is the same as you have used elsewhere as a default)&lt;br /&gt;
*&#039;&#039;&#039;mandatory&#039;&#039;&#039;  (Mandatory questions)&lt;br /&gt;
*&#039;&#039;&#039;input-error&#039;&#039;&#039; (User input error - for if a user has made a mistake with a mandatory question or question with validation)&lt;br /&gt;
*&#039;&#039;&#039;array1&#039;&#039;&#039; and &#039;&#039;&#039;array2&#039;&#039;&#039; (These two styles are cycled when presenting the range of answers for an array type question. This allows you to set an alternating background color for these question types. &#039;&#039;&#039;Array1&#039;&#039;&#039; is also used for the column headings in these question types)&lt;br /&gt;
*&#039;&#039;&#039;errormandatory&#039;&#039;&#039; (Sets the color and style of the &amp;quot;This question is mandatory&amp;quot; error message)&lt;br /&gt;
*&#039;&#039;&#039;warningjs&#039;&#039;&#039; (Sets the color and style of the warning message displayed if the participant&#039;s browser has javascript disabled)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:105--&amp;gt;&lt;br /&gt;
There are also some elements that can be accessed using the ID of the element (&#039;&#039;&#039;#ID&#039;&#039;&#039; in CSS):&lt;br /&gt;
*&#039;&#039;&#039;surveycontact&#039;&#039;&#039; (The contact message shown on the start page)&lt;br /&gt;
*&#039;&#039;&#039;tokenmessage&#039;&#039;&#039; (used for messages inside the survey, e.g. the session expired error message)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:107--&amp;gt;&lt;br /&gt;
Because you can edit all the HTML aspects, there&#039;s no reason to surround your templates with a &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&amp;lt;div class=&#039;new_name&#039;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
and then define a css for that new_name class.&lt;br /&gt;
&lt;br /&gt;
==Styling the progress bar== &amp;lt;!--T:108--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:112--&amp;gt;&lt;br /&gt;
The progress bar appearance can be modified with CSS.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:113--&amp;gt;&lt;br /&gt;
To change the background color of the bar, add something like the following to the end of your custom.css file (example for fruity theme):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:114--&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;.fruity .progress-bar {&lt;br /&gt;
 background-color: #3300FF;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:117--&amp;gt;&lt;br /&gt;
To change the border color of the bar, add something like the following to the end of your custom.css file (example for fruity theme):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:118--&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;.fruity .progress-bar {&lt;br /&gt;
 border: 1px solid #FF0000;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Advanced features available to developers== &amp;lt;!--T:121--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:122--&amp;gt;&lt;br /&gt;
LimeSurvey has integrated some user-made patches that permits some special changes. These very advanced features (generally) require changes to the underlying code base of LimeSurvey and should be done carefully in order not to introduce security holes.&lt;br /&gt;
&lt;br /&gt;
====Support for your own Javascript functions==== &amp;lt;!--T:134--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:135--&amp;gt;&lt;br /&gt;
Some users may need to run Javascript on the survey pages, but calling &#039;&#039;&#039;checkconditions()&#039;&#039;&#039; in the BODY element made it impossible to do so. This call has been replaced with a small JavaScript function in the HEAD that sniffs for the existence of &#039;&#039;&#039;checkconditions()&#039;&#039;&#039; and &#039;&#039;&#039;template_onload()&#039;&#039;&#039; before calling them. In this way, a template author can create his or her own &#039;&#039;&#039;template_onload()&#039;&#039;&#039; function in the HEAD that replaces the default one.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:136--&amp;gt;&lt;br /&gt;
*Disable XSS filter - in Global settings -&amp;gt; Security, set &amp;quot;Filter HTML for XSS&amp;quot; to No.&lt;br /&gt;
*Enter your script in the source of a question or group description.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:301--&amp;gt;&lt;br /&gt;
{{Note|For further details, see the [[Workarounds: Manipulating a survey at runtime using Javascript#How to use Script (eg. JavaScript etc.) in LimeSurvey|workaround section]].}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Tips &amp;amp; tricks== &amp;lt;!--T:145--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Language specific element=== &amp;lt;!--T:146--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:147--&amp;gt;&lt;br /&gt;
If you want to have a language specific sentence in a survey, for example help at the end of each page, you can add a .pstl file a sentence and hide it for the other language. If we hide it in the template.css, we can use the pseudo selector :lang, but we use some class for better compatibility.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:148--&amp;gt;&lt;br /&gt;
Below, there are two help sentences, in French and English. Put this on endpage.pstpl:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:149--&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fr&amp;quot; lang=&amp;quot;fr&amp;quot;&amp;gt;Pour de l&#039;aide en direct appelez le 000000&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;en&amp;quot; lang=&amp;quot;en&amp;quot;&amp;gt;For some help, please call 000000&amp;lt;/div&amp;gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:151--&amp;gt;&lt;br /&gt;
and in template.css:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:152--&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;.lang-fr .en{display:none}&lt;br /&gt;
.lang-en .fr{display:none}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Change the layout of the survey page=== &amp;lt;!--T:155--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:156--&amp;gt;&lt;br /&gt;
After editing and saving a template, it applies to a survey list page only if it is selected from the settings of the survey. To make it the default template, go under the &#039;&#039;&#039;General tab&#039;&#039;&#039; located in the &#039;&#039;&#039;Global settings&#039;&#039;&#039; of your LimeSurvey installation and choose the desired template. From this point on, all the templates that use the &amp;quot;default&amp;quot; option as template, plus the ones that are going to be newly created, will use the newly selected default template.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:157--&amp;gt;&lt;br /&gt;
To use your current template for this page, you must change the appropriate setting from &#039;&#039;&#039;Global settings&#039;&#039;&#039;. In older versions, this change can be done by editing the $defaulttemplate setting from the config file: copy this setting from config-defaults.php to config.php which overrides config-defaults.php and edit this setting to &amp;lt;code lang=&amp;quot;html&amp;quot;&amp;gt;$defaulttemplate = &#039;yourtemplatename&#039;;&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Import/Export of templates: Mac users=== &amp;lt;!--T:158--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:159--&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;Mac users&amp;lt;/u&amp;gt;, please note that the Mac OSX default archive utility may have problems with zip folders &amp;quot;generated on the fly&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:160--&amp;gt;&lt;br /&gt;
A workaround is to unix&#039;es unzip from the command line:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:161--&amp;gt;&lt;br /&gt;
$ unzip template.zip -d template&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:162--&amp;gt;&lt;br /&gt;
Archive: template.zip&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:163--&amp;gt;&lt;br /&gt;
 inflating: template/startpage&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:164--&amp;gt;&lt;br /&gt;
 inflating: ...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:165--&amp;gt;&lt;br /&gt;
Another workaround is to use scripts in their mac-compiled counterparts.&lt;br /&gt;
&lt;br /&gt;
===Use the same template with different logos=== &amp;lt;!--T:214--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:215--&amp;gt;&lt;br /&gt;
If you want to use the same template for all surveys and just want to change the logo for each survey, you can use the {SID} placeholder in the template .pstpl file and thereby refer to different images:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:216--&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;{TEMPLATEURL}files/logoImage-{SID}.png&amp;quot;&amp;gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Display custom favicon=== &amp;lt;!--T:220--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:221--&amp;gt;&lt;br /&gt;
A favicon is the little icon you see in the browser&#039;s address bar, list of bookmarks or tab. You can display your own icon as follows:&lt;br /&gt;
#Create a favicon - You can use Google to find lots of free favicon generators.&lt;br /&gt;
#Name your new favicon &amp;quot;favicon.ico&amp;quot; and place it in your template /files directory.&lt;br /&gt;
#Add the following code to your &#039;&#039;&#039;startpage.pstpl&#039;&#039;&#039; before the &amp;lt;/head&amp;gt; tag.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:222--&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html4strict&amp;quot;&amp;gt;&amp;lt;link rel=&amp;quot;shortcut icon&amp;quot; href=&amp;quot;{TEMPLATEURL}files/favicon.ico&amp;quot; type=&amp;quot;image/x-icon&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;link rel=&amp;quot;icon&amp;quot; href=&amp;quot;{TEMPLATEURL}files/favicon.ico&amp;quot; type=&amp;quot;image/x-icon&amp;quot;&amp;gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Different appearance for survey-/question-pages=== &amp;lt;!--T:224--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:226--&amp;gt;&lt;br /&gt;
If you want LimeSurvey to change the appearance of every second page (i.e., even and odd survey pages), you can use &#039;&#039;&#039;.page-odd&#039;&#039;&#039; class in your CSS file to change the appearance of odd pages.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:227--&amp;gt;&lt;br /&gt;
An example from default template of LimeSurvey 1.91+:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:228--&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
.page-odd table.question-group {&lt;br /&gt;
 background-color: #D2F2D3;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:232--&amp;gt;&lt;br /&gt;
If you do &#039;&#039;&#039;not&#039;&#039;&#039; want differentiate even and odd pages, find all instances of &#039;&#039;.page-odd&#039;&#039; in template.css and remove those styles.&lt;br /&gt;
&lt;br /&gt;
===Create a vertical separator border for dual scale array=== &amp;lt;!--T:233--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:234--&amp;gt;&lt;br /&gt;
To create a vertical separator border for a dual scale array, you can add the following lines to your &#039;&#039;&#039;template.css&#039;&#039;&#039;-file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:235--&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
table.question thead td.header_separator,&lt;br /&gt;
table.question tbody td.dual_scale_separator&lt;br /&gt;
{&lt;br /&gt;
   border-right:solid 1px #00A8E1;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:242--&amp;gt;&lt;br /&gt;
&#039;&#039;header_separator&#039;&#039; is used to adress the separator for the header &amp;quot;td&amp;quot;. The &amp;quot;dual_scale_separator&amp;quot; is used to address the separator column in the dual scale array.&lt;br /&gt;
&lt;br /&gt;
===Adding your own logo to the survey list=== &amp;lt;!--T:310--&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:311--&amp;gt;&lt;br /&gt;
# First please open the theme editor for the theme you like to use. [[File:OpenThemeEditor.jpg]]&lt;br /&gt;
# We recommend to use fruity, it is our best theme currently. &lt;br /&gt;
# Then extend the theme and give it a name you will recognize. [[File:ExtendTheme.jpg]]&lt;br /&gt;
# In the following view you may upload the logo you want to use. [[File:UploadFileTheme.jpg]]&lt;br /&gt;
# Select the editor screen `Survey List´ in the Screen dropdown in the top right corner. [[File:OpenScreenSurveyList.jpg]]&lt;br /&gt;
# Then select `layout_survey_list.twig´ in the left side menu. [[File:EditLayoutSurveyListTwig.jpg]]&lt;br /&gt;
# In the editor scroll to line 126 and change the marked part to the filename of the image you uploaded to the theme before. [[File:ChangeSurveyListHeaderImageEditor.jpg]]&lt;br /&gt;
# Save your file. [[File:ThemeEditorSaveChanges.jpg]]&lt;br /&gt;
# Change default theme to your extended theme. [[File:ChangeDefaultTheme.jpg]]&lt;br /&gt;
&lt;br /&gt;
=== Align logo to the centre of the survey page=== &amp;lt;!--T:314--&amp;gt;&lt;br /&gt;
This example is for the &amp;quot;extends_fruity&amp;quot; template. For other templates the required CSS may be different.&lt;br /&gt;
# Login to the LimeSurvey admin area&lt;br /&gt;
# Browse to the theme editor: Configuration &amp;gt; Themes&lt;br /&gt;
# Find &amp;quot;LimeSurvey Fruity Theme&amp;quot; in the list and click the &amp;quot;Theme Editor&amp;quot; button&lt;br /&gt;
# Click &amp;quot;custom.css&amp;quot; in the files list on the left at near the bottom of the page&lt;br /&gt;
# Copy the following CSS into that file and press &amp;quot;Save Changes&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:315--&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
.navbar-fixed-top &amp;gt; div.navbar-header {&lt;br /&gt;
    width: 100% !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:316--&amp;gt;&lt;br /&gt;
.navbar-fixed-top &amp;gt; div.navbar-header &amp;gt; div {&lt;br /&gt;
    width: 100% !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:317--&amp;gt;&lt;br /&gt;
.navbar-fixed-top &amp;gt; div.navbar-header &amp;gt; div &amp;gt; img {&lt;br /&gt;
    margin: 0 auto 0 auto !important;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Custom question views {{NewIn|3.0}}== &amp;lt;!--T:289--&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:290--&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;simplebox&amp;quot;&amp;gt;&#039;&#039;&#039;Note:&#039;&#039;&#039; This is a temporary feature to be replaced in the future by question object (it will be very easy to move custom views to question object). It is disabled by default.&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:291--&amp;gt;&lt;br /&gt;
As of version 2.5, you can create template-specific custom views for questions and some of their incorporated elements. This is useful if you want to modify the HTML layout of a particular question type for one or more surveys.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:292--&amp;gt;&lt;br /&gt;
*In application/config/config.php, find &#039;config&#039;=&amp;gt;array and add this line to the array : &#039;allow_templates_to_overwrite_views&#039;=&amp;gt;1&lt;br /&gt;
*In /{your_template}/config.xml, set &amp;quot;overwrite_question_views&amp;quot; to true&lt;br /&gt;
*Copy application/views/survey/* to template/{your_view_directory}/survey/&lt;br /&gt;
*Note that you only need to copy the files that you intend to modify but the file structure must remain the same as in application/views/survey/&lt;br /&gt;
&lt;br /&gt;
==Insert custom CSS or JavaScript files for template== &amp;lt;!--T:296--&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:303--&amp;gt;&lt;br /&gt;
As of version 2.50, you can use the config.xml File to Automatically Load Plugin Files.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:304--&amp;gt;&lt;br /&gt;
*Upload your files to the template /css or /scripts folder&lt;br /&gt;
*In /{your_template}/config.xml, add the file paths to the &amp;lt;css&amp;gt; or &amp;lt;js&amp;gt; blocks, something like this:&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&amp;lt;css&amp;gt;&lt;br /&gt;
	&amp;lt;filename&amp;gt;css/jquery-ui-custom.css&amp;lt;/filename&amp;gt;&lt;br /&gt;
	&amp;lt;filename&amp;gt;css/bootstrap-slider.css&amp;lt;/filename&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;!--T:305--&amp;gt;&lt;br /&gt;
&amp;lt;filename&amp;gt;css/awesome-bootstrap-checkbox/awesome-bootstrap-checkbox.css&amp;lt;/filename&amp;gt;&lt;br /&gt;
	&amp;lt;filename&amp;gt;css/flat_and_modern.css&amp;lt;/filename&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;!--T:306--&amp;gt;&lt;br /&gt;
&amp;lt;filename&amp;gt;css/template.css&amp;lt;/filename&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;!--T:307--&amp;gt;&lt;br /&gt;
&amp;lt;filename&amp;gt;css/myCustomPlugin.css&amp;lt;/filename&amp;gt;&lt;br /&gt;
&amp;lt;/css&amp;gt;&lt;br /&gt;
&amp;lt;js&amp;gt;&lt;br /&gt;
	&amp;lt;filename&amp;gt;scripts/template.js&amp;lt;/filename&amp;gt;&lt;br /&gt;
	&amp;lt;filename&amp;gt;scripts/bootstrap-slider.js&amp;lt;/filename&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;!--T:308--&amp;gt;&lt;br /&gt;
&amp;lt;filename&amp;gt;scripts/myCustomPlugin.js&amp;lt;/filename&amp;gt;&lt;br /&gt;
&amp;lt;/js&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:309--&amp;gt;&lt;br /&gt;
==Class definitions (for Developers)==&lt;br /&gt;
&lt;br /&gt;
===radio-list===&lt;br /&gt;
{|class=wikitable &lt;br /&gt;
!&#039;&#039;&#039;Question&#039;&#039;&#039;!!&#039;&#039;&#039;Question Type&#039;&#039;&#039;!!&#039;&#039;&#039;elements&#039;&#039;&#039; &lt;br /&gt;
|-&lt;br /&gt;
| yesno || Y || ul&lt;br /&gt;
|-&lt;br /&gt;
|gender || G || ul&lt;br /&gt;
|-&lt;br /&gt;
|arrays/yesnouncertain || C || tr&lt;br /&gt;
|-&lt;br /&gt;
|arrays/increasesamedecrease || E || tr&lt;br /&gt;
|-&lt;br /&gt;
|arrays/dualscale || 1 || tr&lt;br /&gt;
|-&lt;br /&gt;
|arrays/5point || A || table and tr&lt;br /&gt;
|-&lt;br /&gt;
|arrays/10point || B || tr&lt;br /&gt;
|-&lt;br /&gt;
|arrays/array || F || tr&lt;br /&gt;
|-&lt;br /&gt;
|arrays/column || H || col&lt;br /&gt;
|-&lt;br /&gt;
|listradio || L || div&lt;br /&gt;
|-&lt;br /&gt;
|list_with_comment || O || div followed by ul&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===radio-item===&lt;br /&gt;
{|class=wikitable &lt;br /&gt;
!&#039;&#039;&#039;Question&#039;&#039;&#039;!!&#039;&#039;&#039;Question Type&#039;&#039;&#039;!!&#039;&#039;&#039;elements&#039;&#039;&#039; &lt;br /&gt;
|-&lt;br /&gt;
|arrays/yesnouncertain || C || td&lt;br /&gt;
|-&lt;br /&gt;
|5pointchoice || 5 || li&lt;br /&gt;
|-&lt;br /&gt;
|arrays/10point || B || td&lt;br /&gt;
|-&lt;br /&gt;
|arrays/5point || A || td&lt;br /&gt;
|-&lt;br /&gt;
|arrays/array || F || td&lt;br /&gt;
|-&lt;br /&gt;
|arrays/column || H || td&lt;br /&gt;
|-&lt;br /&gt;
|arrays/dualscale || 1 || td&lt;br /&gt;
|-&lt;br /&gt;
|arrays/increasesamedecrease || E || td&lt;br /&gt;
|-&lt;br /&gt;
|gender || G || li&lt;br /&gt;
|-&lt;br /&gt;
|listradio || L || li&lt;br /&gt;
|-&lt;br /&gt;
|yesno || Y || li&lt;br /&gt;
|-&lt;br /&gt;
|listradio || L || li and div&lt;br /&gt;
|-&lt;br /&gt;
|image_select-listradio || L || li and div&lt;br /&gt;
|-&lt;br /&gt;
|list_with_comment || 0 || li&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===list-group===&lt;br /&gt;
{|class=wikitable &lt;br /&gt;
!&#039;&#039;&#039;Question&#039;&#039;&#039;!!&#039;&#039;&#039;Question Type&#039;&#039;&#039;!!&#039;&#039;&#039;elements&#039;&#039;&#039; &lt;br /&gt;
|-&lt;br /&gt;
|yesno || Y || ul&lt;br /&gt;
|-&lt;br /&gt;
|5pointchoice || 5 || ul&lt;br /&gt;
|-&lt;br /&gt;
|gender || G || ul&lt;br /&gt;
|-&lt;br /&gt;
|ranking || R || ul&lt;br /&gt;
|-&lt;br /&gt;
|ranking_advanced || R || ul and div&lt;br /&gt;
|-&lt;br /&gt;
|question_index_group_buttons ||  || div&lt;br /&gt;
|-&lt;br /&gt;
|question_index_questions_buttons ||  || div&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===list-group-horizontal===&lt;br /&gt;
{|class=wikitable &lt;br /&gt;
!&#039;&#039;&#039;Question&#039;&#039;&#039;!!&#039;&#039;&#039;Question Type&#039;&#039;&#039;!!&#039;&#039;&#039;elements&#039;&#039;&#039; &lt;br /&gt;
|-&lt;br /&gt;
|yesno || Y || ul&lt;br /&gt;
|-&lt;br /&gt;
|5pointchoice || 5 || ul&lt;br /&gt;
|-&lt;br /&gt;
|gender || G || ul&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===list-unstyled===&lt;br /&gt;
{|class=wikitable &lt;br /&gt;
!&#039;&#039;&#039;Question&#039;&#039;&#039;!!&#039;&#039;&#039;Question Type&#039;&#039;&#039;!!&#039;&#039;&#039;elements&#039;&#039;&#039; &lt;br /&gt;
|-&lt;br /&gt;
|list_with_comment || 0 || ul&lt;br /&gt;
|-&lt;br /&gt;
|listradio|| L || ul&lt;br /&gt;
|-&lt;br /&gt;
|multiplechoice|| M || ul&lt;br /&gt;
|-&lt;br /&gt;
|multiplechoice_with_comments|| P || ul&lt;br /&gt;
|-&lt;br /&gt;
|multiplenumeric|| K || ul&lt;br /&gt;
|-&lt;br /&gt;
|multipleshorttext|| Q || ul&lt;br /&gt;
|-&lt;br /&gt;
|ranking|| R || ul&lt;br /&gt;
|-&lt;br /&gt;
|ranking_advanced|| R || ul&lt;br /&gt;
|-&lt;br /&gt;
|bootstrap_buttons_multi|| M || ul&lt;br /&gt;
|-&lt;br /&gt;
|image_select-multiplechoice|| M || ul&lt;br /&gt;
|-&lt;br /&gt;
|inputondemand/multipleshorttext || Q || ul&lt;br /&gt;
|-&lt;br /&gt;
|register_error||  || ul&lt;br /&gt;
|-&lt;br /&gt;
|register_message||  || ul&lt;br /&gt;
|-&lt;br /&gt;
|layout_survey_list ||  || ul&lt;br /&gt;
|-&lt;br /&gt;
|load||  || ul&lt;br /&gt;
|-&lt;br /&gt;
|save||  || ul&lt;br /&gt;
|-&lt;br /&gt;
|captcha||  || ul&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===select-list===&lt;br /&gt;
{|class=wikitable &lt;br /&gt;
!&#039;&#039;&#039;Question&#039;&#039;&#039;!!&#039;&#039;&#039;Question Type&#039;&#039;&#039;!!&#039;&#039;&#039;elements&#039;&#039;&#039; &lt;br /&gt;
|-&lt;br /&gt;
|ranking|| R || ul&lt;br /&gt;
|-&lt;br /&gt;
|ranking_advanced|| R || ul&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===checkbox-item===&lt;br /&gt;
{|class=wikitable &lt;br /&gt;
!&#039;&#039;&#039;Question&#039;&#039;&#039;!!&#039;&#039;&#039;Question Type&#039;&#039;&#039;!!&#039;&#039;&#039;elements&#039;&#039;&#039; &lt;br /&gt;
|-&lt;br /&gt;
|multiflexi (Array numbers)|| : || td&lt;br /&gt;
|-&lt;br /&gt;
|multiplechoice|| M || li&lt;br /&gt;
|-&lt;br /&gt;
|multiplechoice_with_comments|| P || div&lt;br /&gt;
|-&lt;br /&gt;
|image_select-listradio|| L || li&lt;br /&gt;
|-&lt;br /&gt;
|image_select-multiplechoice|| M || li and div&lt;br /&gt;
|-&lt;br /&gt;
|navigator||  || span&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===checkbox-text-item===&lt;br /&gt;
{|class=wikitable &lt;br /&gt;
!&#039;&#039;&#039;Question&#039;&#039;&#039;!!&#039;&#039;&#039;Question Type&#039;&#039;&#039;!!&#039;&#039;&#039;elements&#039;&#039;&#039; &lt;br /&gt;
|-&lt;br /&gt;
|multiplechoice_with_comments|| P || li&lt;br /&gt;
|-&lt;br /&gt;
|multiplechoice|| M || li&lt;br /&gt;
|-&lt;br /&gt;
|image_select-multiplechoice|| M || li&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
[[Category:Theme]]&lt;br /&gt;
[[Category:Twig]]&lt;/div&gt;</summary>
		<author><name>Twilllig</name></author>
	</entry>
	<entry>
		<id>https://www.limesurvey.org/manual/index.php?title=Theme_editor&amp;diff=176131</id>
		<title>Theme editor</title>
		<link rel="alternate" type="text/html" href="https://www.limesurvey.org/manual/index.php?title=Theme_editor&amp;diff=176131"/>
		<updated>2023-03-30T12:08:13Z</updated>

		<summary type="html">&lt;p&gt;Twilllig: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;languages /&amp;gt; &amp;lt;translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Introduction== &amp;lt;!--T:1--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:2--&amp;gt;&lt;br /&gt;
LimeSurvey has an advanced theme and style system providing to developers an efficient way to customize the survey appearance. Since LS3, the term &#039;&#039;&#039;&amp;quot;templates&amp;quot;&#039;&#039;&#039; has been replaces with the term &#039;&#039;&#039;&amp;quot;themes&amp;quot;&#039;&#039;&#039;. &#039;&#039;&#039;Themes&#039;&#039;&#039; allow control over the style of the pages of a survey. A survey administrator can select a default theme that will be used for each survey to further personalize it. &#039;&#039;&#039;Themes&#039;&#039;&#039;  comes with options that provide an admin without coding skill a simple way to add a logo on the welcome page, change the background colors, select a font, etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:3--&amp;gt;&lt;br /&gt;
LimeSurvey comes with 3 themes.  These initial themes are defined by directories located in the LimeSurvey installation &amp;quot;themes/survey/&amp;quot; directory. Each theme has its own directory. Within the main directory of a theme you will find a configuration file in XML, and numerous directories containing the views &#039;&#039;&#039;themes (.twig)&#039;&#039;&#039;, &#039;&#039;&#039;cascading style sheets (.css)&#039;&#039;&#039;, &#039;&#039;&#039;scripts&#039;&#039;&#039;,  &#039;&#039;&#039;images&#039;&#039;&#039; (&#039;&#039;&#039;.jpg&#039;&#039;&#039; or &#039;&#039;&#039;.png&#039;&#039;&#039;), and maybe others. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:4--&amp;gt;&lt;br /&gt;
Since LimeSurvey 2.50, the theme engine uses [http://getbootstrap.com/docs/3.3/ Bootstrap 3]  as CSS framework. Since Bootstrap 3 is a standard framework, developers will find a lot of documentation, tutorials and forum threads about it on the internet. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:312--&amp;gt;&lt;br /&gt;
Since LimeSurvey 3, the theme engine uses [https://twig.symfony.com Twig], so the theme developers can change the logic of the survey rendering in a safe and easy way. Twig replace the old system of replacement keywords that was used in the previous versions. The logic that was used to generate the HTML of the keywords is now available inside the theme&#039;s views. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:313--&amp;gt;&lt;br /&gt;
Snippet from Vanilla Theme:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:5--&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;twig&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;{{ aSurveyInfo.class.answercontainer }} col-xs-12&amp;quot; {{ aSurveyInfo.attr.answercontainer }}&amp;gt;&lt;br /&gt;
    {# NOTE: If you want to customize the question rendering, use a question theme #}&lt;br /&gt;
    {{ aQuestion.answer | raw }}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:10--&amp;gt;&lt;br /&gt;
Themes, being HTML and Twig code, tend to define the positioning and type of text to be displayed and similar structural features of the page. They often reference or include other files. Most of them reference a common cascading style sheets (CSS) file that defines the font style, color, size, background, and similar parameters common to all pages in the survey. Style sheets reference HTML &#039;&#039;&#039;class&#039;&#039;&#039; parameters that are associated with the various types of objects in the HTML code. This allows the style sheet to define how to display each of the many types of text or other objects that may appear in multiple places. There are unique classes for each question type in LimeSurvey and thus giving detailed control over the appearance of each. Image files, like logos or special progress-bar constructors, may be referenced as well in the Theme file. Finally, special keywords in curly braces are replaced with text defined in the survey for each language translation correspondent (for example, the &#039;Survey Title&#039; or &#039;Question Text&#039; for each language defined).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:11--&amp;gt;&lt;br /&gt;
If you create a new custom theme, please consider contributing it back to the LimeSurvey community and make it available to others. With your help, we can grow our repository of themes, surveys, and other add-ons to make LimeSurvey even better! &lt;br /&gt;
See our [https://www.limesurvey.org/index.php?option=com_sobipro&amp;amp;sid=55:Templates&amp;amp;Itemid=729 LimeSurvey template repository] where you can share your templates.&lt;br /&gt;
&lt;br /&gt;
==Creating a new theme== &amp;lt;!--T:12--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:13--&amp;gt;&lt;br /&gt;
To be able to create a new theme (or edit an existing theme), you need [[Manage users#Set global permissions for a user|Template Editing user permission]] in LimeSurvey as well as permission to manipulate the files in the underlying operating system hosting your LimeSurvey installation.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:14--&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;simplebox&amp;quot;&amp;gt;&amp;lt;span style=&#039;color:red&#039;&amp;gt;&#039;&#039;&#039;Note of Warning:&#039;&#039;&#039;&amp;lt;/span&amp;gt;  If you change themes, you could also affect all the pre-existing surveys from your LimeSurvey installation. Themes are an advanced feature that require experience and HTML knowledge.&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:15--&amp;gt;&lt;br /&gt;
The preferred way to create a new theme is through the &#039;&#039;&#039;Theme Editor&#039;&#039;&#039; (see below), which is located under &#039;&#039;&#039;Configuration&#039;&#039;&#039; on the top toolbar. Some users prefer to work directly with theme files so that they can use their favorite text editor instead of the web interface. In this case, still use the Theme Editor to first create your new theme. This will create a new base theme with all the files you need in the &#039;&#039;LimeSurvey_web_root/upload/themes/survey/your_new_template&#039;&#039; directory. From there you can use your text editor to manually adjust the template files.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:16--&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;simplebox&amp;quot;&amp;gt;&#039;&#039;&#039;Permissions Note:&#039;&#039;&#039; on unix/linux systems, these theme files will be owned by the group and user where the web server is running (may be &amp;quot;www&amp;quot; for some systems). So, make sure you have the proper permisisons to edit these files, When you save them, make sure they don&#039;t change ownership! This way, you can still use the web Theme Editing interface if needed.&amp;lt;/div&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:18--&amp;gt;&lt;br /&gt;
A number of &#039;public&#039; elements of LimeSurvey can be adjusted by a series of themes. The next section provides a very brief explanation of these templates.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:17--&amp;gt;&lt;br /&gt;
{{Note|Themes files are a complex feature.  Besides HTML, you should also be familiar with CSS, Twig, and JavaScript.}}&lt;br /&gt;
&lt;br /&gt;
=The LimeSurvey theme editor= &amp;lt;!--T:19--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:20--&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Theme Editor&#039;&#039;&#039;: &#039;&#039;&#039;Configuration&#039;&#039;&#039; &amp;gt; &#039;&#039;&#039;Themes&#039;&#039;&#039;&amp;gt; &#039;&#039;&#039;Theme Editor&#039;&#039;&#039;&lt;br /&gt;
The Theme Editor is only available to users [[Manage users#Set global permissions for a user|with the Templates permission]] and to superadministrators. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:297--&amp;gt;&lt;br /&gt;
{{Alert|title=Attention|text=A theme that is not correctly constructed can cause a survey (that uses the respective template) to become inoperable. }}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:21--&amp;gt;&lt;br /&gt;
The LimeSurvey theme editor allows you to edit the contents of your themes online. To start the Theme Editor: click &#039;&#039;&#039;Themes&#039;&#039;&#039; in the &#039;&#039;&#039;Configuration&#039;&#039;&#039; menu, and then click the &#039;&#039;&#039;Theme editor&#039;&#039;&#039;  button next of the theme you want to edit or extend. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:285--&amp;gt;&lt;br /&gt;
[[File:Themes menu.png]]&lt;br /&gt;
[[File:Theme editor button.png|&#039;&#039;The button to access the theme editor for Bootswatch theme&#039;&#039;]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:286--&amp;gt;&lt;br /&gt;
The template editor page allows you to select the template you would like to edit/view. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:279--&amp;gt;&lt;br /&gt;
[[File:Template-editor-2013-7-10_11_38_16.png|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:298--&amp;gt;&lt;br /&gt;
The following options are available:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:280--&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Create&#039;&#039;&#039;: Allows you to create a new template. In order not to start from scratch, the template &#039;default&#039; is copied.&lt;br /&gt;
*&#039;&#039;&#039;Import&#039;&#039;&#039;: Allows you to import a template from a ZIP file.&lt;br /&gt;
*&#039;&#039;&#039;Export&#039;&#039;&#039;: Allows you to export the current template to a ZIP file.&lt;br /&gt;
*&#039;&#039;&#039;Copy&#039;&#039;&#039;: Allows you to make a new template by copying the current one.&lt;br /&gt;
*&#039;&#039;&#039;Rename&#039;&#039;&#039;: Allows you to change the name of the template. It is generally used after copying or importing a template.&lt;br /&gt;
*&#039;&#039;&#039;Template&#039;&#039;&#039;: A drop-down list that shows all the available templates that are located in your LimeSurvey installation.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:23--&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;Screen&#039;&#039;&#039;: A drop-down list which allows you to choose which particular survey page of that template you want to view.&lt;br /&gt;
*&#039;&#039;&#039;Return to admin panel&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Import/Export/Copy a template=== &amp;lt;!--T:24--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:25--&amp;gt;&lt;br /&gt;
When you &#039;&#039;&#039;export &#039;&#039;&#039;a template, a ZIP-file archive with all template files your will be created (.pstpl files, images, css files, ...). You can &#039;&#039;&#039;import&#039;&#039;&#039; the exported zip-file into another LimeSurvey installation by using the import feature or you can manually copy the archive into another LimeSurvey installation and extract it into the corresponding [[Theme editor#Template files location|template directory there]]. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:288--&amp;gt;&lt;br /&gt;
However, it is best to use the LimeSurvey template import/export/copy functions in the template editor.&lt;br /&gt;
&lt;br /&gt;
===Page structure / Template use=== &amp;lt;!--T:27--&amp;gt;&lt;br /&gt;
*&#039;&#039;&#039;The Welcome Page:&#039;&#039;&#039; startpage.pstpl, welcome.pstpl, privacy.pstpl,  navigator.pstpl, endpage.pstpl&lt;br /&gt;
*&#039;&#039;&#039;The Questions Pages:&#039;&#039;&#039; startpage.pstpl, survey.pstpl, startgroup.pstpl, groupdescription.pstpl, question.pstpl, endgroup.pstpl, endpage.pstpl&lt;br /&gt;
*&#039;&#039;&#039;The Final Page:&#039;&#039;&#039; startpage.pstpl, assessment.pstpl, completed.pstpl, endpage.pstpl&lt;br /&gt;
&lt;br /&gt;
===Template files=== &amp;lt;!--T:28--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:29--&amp;gt;&lt;br /&gt;
The following template files are used to produce your public survey and must exist in any new template folder you create:&lt;br /&gt;
*&#039;&#039;&#039;startpage.pstpl:&#039;&#039;&#039; Produces the start of each html page. It starts at the &amp;quot;&amp;lt;head&amp;gt;&amp;quot; tag, and should not contain the &amp;quot;&amp;lt;html&amp;gt;&amp;quot; tag. This &#039;very beginning&#039; of a standard html page is written by the scripts. Please ensure that your startpage.pstpl files contains a &amp;lt;body&amp;gt; tag. Even though many browsers do not require strict adherence to the W3 HTML standards, the LimeSurvey script needs to find a &amp;lt;body&amp;gt; tag to run certain javascript elements. It is not common to see many &#039;keywords&#039; used in the startpage.pstpl file. However, you may wish to put the {SURVEYNAME} into the title. The startpage.pstpl file can contain code that ends in the corresponding endpage.pstpl file. For example, you can start a table in this file and close the table in the endpage.pstpl file. The startpage.pstpl and endpage.pstpl files wrap around every possible page used by LimeSurvey.&lt;br /&gt;
*&#039;&#039;&#039;survey.pstpl:&#039;&#039;&#039; This template is the second used on most pages and provides a space to put the survey name and description. This template does not have a corresponding &#039;closing&#039; template, and subsequently you should close all tags opened in this template file (i.e.: don&#039;t leave a table open here because there is nowhere else to close it).&lt;br /&gt;
*&#039;&#039;&#039;welcome.pstpl:&#039;&#039;&#039; This template is only used in the welcome screen (which is also on the main page for &#039;all in one&#039; surveys). You can use this to print out the welcome text, and other information that should be provided in the introduction. Like the &#039;survey.pstpl&#039; file, there is no corresponding &#039;closing&#039; template, so all tags opened in this template file should be closed as well.&lt;br /&gt;
*&#039;&#039;&#039;startgroup.pstpl:&#039;&#039;&#039; This template can provide a &#039;summary&#039; wrap around for questions within a group. It has a matching &#039;endgroup.pstpl&#039; template that can be used to close any opened tags in this file, so you can open a table within this.&lt;br /&gt;
*&#039;&#039;&#039;groupdescription.pstpl:&#039;&#039;&#039; This template file is used to display a description of a group. Please note that in the survey settings (access the &#039;&#039;Presentation &amp;amp; navigation settings&#039;&#039; by clicking the &#039;&#039;&#039;Presentation&#039;&#039;&#039; tab) you can set if the group description should be shown or not. If not, then this file is not included at all.&lt;br /&gt;
*&#039;&#039;&#039;question.pstpl:&#039;&#039;&#039; This file contains the question, answer, and help text sections of your survey. In the &amp;quot;group by group&amp;quot; and &amp;quot;all in one&amp;quot; surveys, this template is cycled repeatedly with each question. There is no corresponding closing file for this and all tags should be closed.&lt;br /&gt;
*&#039;&#039;&#039;question_start.pstpl:&#039;&#039;&#039; This file contains the individual elements found at the start of a question. It is included within &#039;question.pstpl&#039; via the {QUESTION} keyword. It is intended to allow template designers more control over the layout of a question. This template sits outside the normal templating system and &#039;&#039;&#039;was superseeded (as of LimeSurvey 1.87)&#039;&#039;&#039;. All keywords from this template are now available directly in question.pstpl. &lt;br /&gt;
*&#039;&#039;&#039;completed.pstpl:&#039;&#039;&#039; This page is displayed as the final page when the survey responses have been saved and the survey is over. It can be used to display a &amp;quot;forwarding link&amp;quot; as set in the survey setup.&lt;br /&gt;
*&#039;&#039;&#039;endgroup.pstpl:&#039;&#039;&#039; This file closes the group, and can be used to close off any tags opened in the startgroup.pstpl file&lt;br /&gt;
*&#039;&#039;&#039;navigator.pstpl:&#039;&#039;&#039; This file contains the buttons that navigate through the survey, &amp;quot;next&amp;quot;, &amp;quot;prev&amp;quot;, &amp;quot;last&amp;quot;, &amp;quot;submit&amp;quot;, &amp;quot;save so far&amp;quot;  and the &amp;quot;clear all&amp;quot; link. It is used in all pages except the completed page.&lt;br /&gt;
*&#039;&#039;&#039;printanswers.pstpl:&#039;&#039;&#039; This file has the HTML wrapper necessary for the print version of the survey.&lt;br /&gt;
*&#039;&#039;&#039;print_group.pstpl:&#039;&#039;&#039; This file is the same as startgroup.pstpl and endgroup.pstpl, but for the print version of the survey.&lt;br /&gt;
*&#039;&#039;&#039;print_question.pstpl:&#039;&#039;&#039; This file is the same as question.pstpl, but for the print version of the survey.&lt;br /&gt;
*&#039;&#039;&#039;print_survey.pstpl:&#039;&#039;&#039; This file is the same as survey.pstpl, but for the print version of the survey.&lt;br /&gt;
&lt;br /&gt;
=== CSS and Javascript=== &amp;lt;!--T:30--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:31--&amp;gt;&lt;br /&gt;
Two files that are always used in a template are template.css (for CSS) and template.js (for Javascript).&lt;br /&gt;
*&#039;&#039;&#039;{TEMPLATECSS}:&#039;&#039;&#039; Add lines for default css, template.css, and template-rtl.css for rtl language.&lt;br /&gt;
*&#039;&#039;&#039;{TEMPLATEJS}:&#039;&#039;&#039; Add lines for default javascript files, template.js, and all js files needed for LimeSurvey.&lt;br /&gt;
&lt;br /&gt;
=== Using Bootstrap=== &amp;lt;!--T:294--&amp;gt;&lt;br /&gt;
LimeSurvey has Bootstrap 3 embedded, so you can style all your templates with the well documented Bootstrap classes.&lt;br /&gt;
For more information please refer to the [https://getbootstrap.com Bootstrap documentation].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:295--&amp;gt;&lt;br /&gt;
The [https://github.com/flatlogic/awesome-bootstrap-checkbox Awesome-Bootstrap-Checkbox] plugin is also included. With it, you can use the typical Bootstrap color-classes (info,warning,danger,etc.) also with the suffix &amp;quot;-checkbox&amp;quot; or &amp;quot;-radio&amp;quot;, though styling checkboxes and radios as you prefer.&lt;br /&gt;
&lt;br /&gt;
==== Replacing default CSS or Javascript==== &amp;lt;!--T:32--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:33--&amp;gt;&lt;br /&gt;
Some questions use specific files for Javascript or CSS. If you need to replace a function, use a cascading system. For javascript function, the last function read is the function used.&lt;br /&gt;
&lt;br /&gt;
===Other template files=== &amp;lt;!--T:34--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:35--&amp;gt;&lt;br /&gt;
The &#039;&#039;&#039;privacy.pstpl&#039;&#039;&#039;, &#039;&#039;&#039;invitationemail.pstpl&#039;&#039;&#039;, &#039;&#039;&#039;reminderemail.pstpl&#039;&#039;&#039;, and &#039;&#039;&#039;confirmationemail.pstpl&#039;&#039;&#039; are no longer used by LimeSurvey and defaults are instead set in the applicable language files. The email messages can now be edited on a survey by survey basis.&lt;br /&gt;
&lt;br /&gt;
===Standard pages=== &amp;lt;!--T:36--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:37--&amp;gt;&lt;br /&gt;
There are ten standard pages that a survey participant may see in the course of taking or accessing the LimeSurvey application.  Each is constructed from a number of common &#039;&#039;&#039;Template&#039;&#039;&#039; files from the &#039;&#039;&#039;Template&#039;&#039;&#039; specified in the settings of the survey. The table below indicates which template files are used in constructing each of these pages.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:38--&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!  &#039;&#039;&#039;Survey Pages/&#039;&#039;&#039;&amp;lt;br /&amp;gt;&#039;&#039;&#039;Template Files&#039;&#039;&#039;!!Survey&amp;lt;br /&amp;gt;List!!Welcome!!Question!!Completed!!Clear All!!Register!!Load!!Save!!Print&amp;lt;br /&amp;gt;Answers!!Print&amp;lt;br /&amp;gt;Survey&lt;br /&gt;
|-&lt;br /&gt;
|SurveyList||align=&amp;quot;center&amp;quot; | [[File:check.gif]]|| || || || || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|Welcome|| ||align=&amp;quot;center&amp;quot; | [[File:check.gif]]|| || || || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|Privacy|| ||align=&amp;quot;center&amp;quot; | [[File:check.gif]]|| || || || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|Navigator|| ||align=&amp;quot;center&amp;quot; | [[File:check.gif]]||align=&amp;quot;center&amp;quot; | [[File:check.gif]]|| || || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|Survey|| || ||align=&amp;quot;center&amp;quot; | [[File:check.gif]]|| || ||align=&amp;quot;center&amp;quot; | [[File:check.gif]]|| || || ||&lt;br /&gt;
|-&lt;br /&gt;
|StartGroup|| || ||align=&amp;quot;center&amp;quot; | [[File:check.gif]]|| || || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|GroupDescription|| || ||align=&amp;quot;center&amp;quot; | [[File:check.gif]]|| || || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|Question&amp;lt;span style=&#039;color:red&#039;&amp;gt;&#039;&#039;&#039;*&#039;&#039;&#039;&amp;lt;/span&amp;gt;|| || ||align=&amp;quot;center&amp;quot; | [[File:check.gif]]|| || || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|EndGroup|| || ||align=&amp;quot;center&amp;quot; | [[File:check.gif]]|| || || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|Assessment|| || || ||align=&amp;quot;center&amp;quot; | [[File:check.gif]]|| || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|Completed|| || || ||align=&amp;quot;center&amp;quot; | [[File:check.gif]]|| || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|ClearAll|| || || || ||align=&amp;quot;center&amp;quot; | [[File:check.gif]]|| || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|Register|| || || || || ||align=&amp;quot;center&amp;quot; | [[File:check.gif]]|| || || ||&lt;br /&gt;
|-&lt;br /&gt;
|Load|| || || || || || ||align=&amp;quot;center&amp;quot; | [[File:check.gif]]|| || ||&lt;br /&gt;
|-&lt;br /&gt;
|Save|| || || || || || || ||align=&amp;quot;center&amp;quot; | [[File:check.gif]]|| ||&lt;br /&gt;
|-&lt;br /&gt;
|PrintAnswers|| || || || || || || || ||align=&amp;quot;center&amp;quot; | [[File:check.gif]]||&lt;br /&gt;
|-&lt;br /&gt;
|Print Survey || || || || || || || || || ||align=&amp;quot;center&amp;quot; | [[File:check.gif]]&lt;br /&gt;
|-&lt;br /&gt;
|Print Group || || || || || || || || || ||align=&amp;quot;center&amp;quot; | [[File:check.gif]]&lt;br /&gt;
|-&lt;br /&gt;
|Print Question || || || || || || || || || ||align=&amp;quot;center&amp;quot; | [[File:check.gif]]&lt;br /&gt;
|-&lt;br /&gt;
|StartPage&amp;lt;br /&amp;gt;EndPage&amp;lt;br /&amp;gt;Template.css||align=&amp;quot;center&amp;quot; | [[File:check.gif]]||align=&amp;quot;center&amp;quot; | [[File:check.gif]]||align=&amp;quot;center&amp;quot; | [[File:check.gif]]||align=&amp;quot;center&amp;quot; | [[File:check.gif]]||align=&amp;quot;center&amp;quot; | [[File:check.gif]]||align=&amp;quot;center&amp;quot; | [[File:check.gif]]||align=&amp;quot;center&amp;quot; | [[File:check.gif]]||align=&amp;quot;center&amp;quot; | [[File:check.gif]]||align=&amp;quot;center&amp;quot; | [[File:check.gif]]|| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:39--&amp;gt;&lt;br /&gt;
&amp;lt;span style=&#039;color:red&#039;&amp;gt;&#039;&#039;&#039;*&#039;&#039;&#039;&amp;lt;/span&amp;gt;NOTE: In version 1.90+, this replaces question.pstpl AND question_start.pstpl. If you are using an old custom template, you need to add the following line to the beginning of question.pstpl:&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&amp;lt;div {QUESTION_ESSENTIALS} class=&amp;quot;{QUESTION_CLASS}{QUESTION_MAN_CLASS}{QUESTION_INPUT_ERROR_CLASS}&amp;quot;&amp;gt;&amp;lt;/syntaxhighlight&amp;gt;And then add the corresponding closing tag to the end of question.pstpl:&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:40--&amp;gt;&lt;br /&gt;
&amp;lt;span style=&#039;color:red&#039;&amp;gt;&#039;&#039;&#039;*&#039;&#039;&#039;&amp;lt;/span&amp;gt;NOTE: In version 1.91 and earlier, LimeSurvey js files are not included in the template. In version 2, &#039;&#039;&#039;you have to use {TEMPLATEJS} in one of your template file&#039;&#039;&#039; to add the link to the js file. You can add it in startpage.pstpl or in endpage.pstpl. You can remove the {TEMPLATEURL}/template.js line and you have to replace with {TEMPLATEJS} to update a personal template.&lt;br /&gt;
&lt;br /&gt;
===The file control section=== &amp;lt;!--T:41--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:42--&amp;gt;&lt;br /&gt;
In the &amp;quot;file control&amp;quot; window on the left, you can click one of the template files that is used to compile the page. You can see the &#039;&#039;Screen part&#039;&#039;, JavaScript, and CSS files. The HTML code for that file will then appear in the &amp;quot;Now editing&amp;quot; window in the center. If the template is editable (determined by directory permissions) you can then make any changes and save them.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:299--&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;[[File:File Control Section.png|center]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:43--&amp;gt;&lt;br /&gt;
The &amp;quot;Other files&amp;quot; window shows a list of all other files from the template directory. You can use the right side to &#039;&#039;&#039;upload and select image files (your pics, logos,...) or other files needed to create your template&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:300--&amp;gt;&lt;br /&gt;
Instead of using a link for each picture, utilize the field string {TEMPLATEURL}. So, instead of:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:44--&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html4strict&amp;quot;&amp;gt;img src=&#039;/limesurvey/templates/yourtemplate/files/mypicture.jpg&#039;&amp;lt;/syntaxhighlight&amp;gt; &lt;br /&gt;
You can use {{NewIn|2.50}}:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html4strict&amp;quot;&amp;gt;img src=&#039;{TEMPLATEURL}files/mypicture.jpg&#039;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:287--&amp;gt;&lt;br /&gt;
In LimeSurvey versions before 2.50 use:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html4strict&amp;quot;&amp;gt;img src=&#039;{TEMPLATEURL}mypicture.jpg&#039;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:46--&amp;gt;&lt;br /&gt;
A &amp;quot;sample&amp;quot; of the template page you are editing will be visible in the bottom of the screen. There is no way to delete a template from the template editor. This must be done by accessing the underlying directory and deleting manually the files from there. You also have the possibility to select different screen resolutions in order to better evaluate the feel and look of the template.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:47--&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;simplebox&amp;quot;&amp;gt;&#039;&#039;&#039;Note:&#039;&#039;&#039; The shipped templates cannot be edited using the template editor. If you want to modify them, create a copy first and edit the copy.&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Template files location=== &amp;lt;!--T:48--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:49--&amp;gt;&lt;br /&gt;
LimeSurvey stores each of the &#039;standard&#039; templates in their own distinct sub-directory within the &#039;&#039;/templates&#039;&#039; directory that is kept in the public directory with the other LimeSurvey public files. Customized user templates are stored in the &#039;&#039;/upload/templates&#039;&#039; directory.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:51--&amp;gt;&lt;br /&gt;
There should &#039;&#039;&#039;ALWAYS&#039;&#039;&#039; be a &amp;quot;default&amp;quot; directory in the templates directory. This template is used by default and as a fall-back if a template folder doesn&#039;t exist, or can&#039;t be found. It comes installed by default.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:52--&amp;gt;&lt;br /&gt;
You can use any image files that you upload into the template management area with the help of this syntax:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:53--&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;{TEMPLATEURL}filename.xyz&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Styling questions with CSS== &amp;lt;!--T:54--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:55--&amp;gt;&lt;br /&gt;
Styling of questions in CSS has become much easier. Each question type has now a unique class. The mandatory questions have an additional mandatory class. For example, for a non-mandatory question:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:56--&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html4strict&amp;quot;&amp;gt;&amp;lt;div id=&amp;quot;question5&amp;quot; class=&amp;quot;gender&amp;quot;&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:59--&amp;gt;&lt;br /&gt;
and if the question is mandatory:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:60--&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html4strict&amp;quot;&amp;gt;&amp;lt;div id=&amp;quot;question5&amp;quot; class=&amp;quot;gender mandatory&amp;quot;&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:63--&amp;gt;&lt;br /&gt;
and if the question is mandatory, but the user didn&#039;t answer it or if there is validation on a question:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:64--&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html4strict&amp;quot;&amp;gt;&amp;lt;div id=&amp;quot;question5&amp;quot; class=&amp;quot;gender mandatory input-error&amp;quot;&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:67--&amp;gt;&lt;br /&gt;
and if the question has validation applied, but the user hasn&#039;t answered correctly:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:68--&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html4strict&amp;quot;&amp;gt;&amp;lt;div id=&amp;quot;question6&amp;quot; class=&amp;quot;text-short input-error&amp;quot;&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Global classes for question part== &amp;lt;!--T:273--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:274--&amp;gt;&lt;br /&gt;
These classes are used for each question type. Some question types use only one or two classes, while others may use much more.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:281--&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable alternance&amp;quot;&lt;br /&gt;
|+ Global classes&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Class name&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Part&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Question type&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Examples&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Note&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | .question {{ObsoleteIn|3.0}}&lt;br /&gt;
| All question block&lt;br /&gt;
| All question type&lt;br /&gt;
|&amp;amp;lt;p class=&amp;quot;question&amp;quot;&amp;gt;, &amp;amp;lt;ul class=&amp;quot;question&amp;quot;&amp;gt;, &amp;amp;lt;table class=&amp;quot;question&amp;quot;&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | .ls-answers {{NewIn|3.0}}&lt;br /&gt;
| All question block&lt;br /&gt;
| All question type&lt;br /&gt;
|&amp;amp;lt;div class=&amp;quot;ls-answers &amp;quot;&amp;gt;, &amp;amp;lt;ul class=&amp;quot;ls-answers &amp;quot;&amp;gt;, &amp;amp;lt;table class=&amp;quot;ls-answers&amp;quot;&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | .subquestions-list&lt;br /&gt;
| List of subquestion&lt;br /&gt;
| Multi choice question, array question type&lt;br /&gt;
| &amp;amp;lt;ul class=&amp;quot;subquestions-list&amp;quot;&amp;gt;, &amp;amp;lt;table class=&amp;quot;subquestions-list&amp;quot;&amp;gt;&lt;br /&gt;
| .questions-list is used too&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | .answers-list&lt;br /&gt;
| List of answers&lt;br /&gt;
| Single choice question, array question type, Multi input text question&lt;br /&gt;
| &amp;amp;lt;ul class=&amp;quot;answers-list&amp;quot;&amp;gt;, &amp;amp;lt;table class=&amp;quot;answers-list&amp;quot;&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | .answer-item&lt;br /&gt;
| The answer part: one answer&lt;br /&gt;
| Single choice question, array question type, Multi input text question&lt;br /&gt;
| &amp;amp;lt;li class=&amp;quot;answer-item&amp;quot;&amp;gt;, &amp;amp;lt;td class=&amp;quot;answer-item&amp;quot;&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | .noanswer-item&lt;br /&gt;
| The answer part for no answer&lt;br /&gt;
| Single choice question, array question type&lt;br /&gt;
| &amp;amp;lt;li class=&amp;quot;noanswer-item&amp;quot;&amp;gt;, &amp;amp;lt;td class=&amp;quot;noanswer-item&amp;quot;&amp;gt;&lt;br /&gt;
| No answer is an answer too, then have double class noanswer-item and answer-item&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | .question-item&lt;br /&gt;
| The question part: one question&lt;br /&gt;
| Multi text question, array question type&lt;br /&gt;
| &amp;amp;lt;li class=&amp;quot;question-item&amp;quot;&amp;gt;, &amp;amp;lt;tr class=&amp;quot;question-item&amp;quot;&amp;gt;&lt;br /&gt;
| Some answers are questions too. Then we have a lot of class=&amp;quot;question-item answer-item&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | .button-list&lt;br /&gt;
| A list of button&lt;br /&gt;
| Yes no and Gender question&lt;br /&gt;
| &amp;amp;lt;ul class=&amp;quot;button-list&amp;quot;&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | .button-item&lt;br /&gt;
| The answer part with a button&lt;br /&gt;
| Yes no and Gender question&lt;br /&gt;
| &amp;amp;lt;li class=&amp;quot;button-item&amp;quot;&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | .checkbox-list&lt;br /&gt;
| A list of checkbox&lt;br /&gt;
| Multi choice question, array number (checkbox) question type&lt;br /&gt;
| &amp;amp;lt;ul class=&amp;quot;checkbox-list&amp;quot;&amp;gt;, &amp;amp;lt;tr class=&amp;quot;checkbox-list&amp;quot;&amp;gt;&lt;br /&gt;
| Some question types use multi-list class, like checkbox with comment: class=&amp;quot;checkbox-list text-list&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | .checkbox-array  {{NewIn|3.0}}&lt;br /&gt;
| A array of checkbox&lt;br /&gt;
| Array (numbers) with checkbox option&lt;br /&gt;
| &amp;amp;lt;table class=&amp;quot;checkbox-list&amp;quot;&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | .checkbox-item&lt;br /&gt;
| The answer part with a checkbox&lt;br /&gt;
| Multi choice question, array number (checkbox) question type&lt;br /&gt;
| &amp;amp;lt;li class=&amp;quot;checkbox-item&amp;quot;&amp;gt;, &amp;amp;lt;td class=&amp;quot;checkbox-item&amp;quot;&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | .radio-list&lt;br /&gt;
| A list of radio item&lt;br /&gt;
| Single choice question, array question type (each row)&lt;br /&gt;
| &amp;amp;lt;ul class=&amp;quot;radio-list&amp;quot;&amp;gt;, &amp;amp;lt;tr class=&amp;quot;radio-list&amp;quot;&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | .radio-array {{NewIn|3.0}}&lt;br /&gt;
| A array of radio item&lt;br /&gt;
| Array question type&lt;br /&gt;
| &amp;amp;lt;table class=&amp;quot;radio-array&amp;quot;&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | .radio-item&lt;br /&gt;
| The answer part with a radio&lt;br /&gt;
| Single choice question, array question type&lt;br /&gt;
| &amp;amp;lt;li class=&amp;quot;radio-item&amp;quot;&amp;gt;, &amp;lt;td class=&amp;quot;radio-item&amp;quot;&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | .text-list&lt;br /&gt;
| A list of text input&lt;br /&gt;
| Multi text question type, array of text&lt;br /&gt;
| &amp;amp;lt;ul class=&amp;quot;text-list&amp;quot;&amp;gt;, &amp;amp;lt;tr class=&amp;quot;text-list&amp;quot;&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | .text-item&lt;br /&gt;
| The answer part of a text input&lt;br /&gt;
| Multi text question type, array of text&lt;br /&gt;
| &amp;amp;lt;li class=&amp;quot;text-item&amp;quot;&amp;gt;, &amp;lt;td class=&amp;quot;text-item&amp;quot;&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | .numeric-list&lt;br /&gt;
| A list of text input with numeric only answer&lt;br /&gt;
| Multi numeric question type, array of number&lt;br /&gt;
| &amp;amp;lt;ul class=&amp;quot;text-list numeric-list&amp;quot;&amp;gt;, &amp;amp;lt;tr class=&amp;quot;text-list numeric-list&amp;quot;&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | .number-list&lt;br /&gt;
| A list of text input with numeric only answer (each row)&lt;br /&gt;
| Multi numeric question type, array of number&lt;br /&gt;
| &amp;amp;lt;ul class=&amp;quot;text-list numeric-list&amp;quot;&amp;gt;, &amp;amp;lt;tr class=&amp;quot;text-list numeric-list&amp;quot;&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | .number-array  {{NewIn|3.0}}&lt;br /&gt;
| The answer part of a numeric input&lt;br /&gt;
| Array of number&lt;br /&gt;
| &amp;amp;lt;table class=&amp;quot;number-array&amp;quot;&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | .select-list  {{ObsoleteIn|2.50}}&lt;br /&gt;
| A list of select&lt;br /&gt;
| Array numbers, Dual scale array (select)&lt;br /&gt;
| &amp;amp;lt;table class=&amp;quot;select-list&amp;quot;&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | .dropdown-list  {{NewIn|2.50}}&lt;br /&gt;
| A list of select&lt;br /&gt;
| Array numbers, Dual scale array (select) (each row)&lt;br /&gt;
| &amp;amp;lt;table class=&amp;quot;dropdown-list&amp;quot;&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | .dropdown-array  {{NewIn|3.0}}&lt;br /&gt;
| A array of dropdown&lt;br /&gt;
| Array numbers, Dual scale array (select)&lt;br /&gt;
| &amp;amp;lt;table class=&amp;quot;dropdown-array&amp;quot;&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | .select-item  {{ObsoleteIn|2.50}}&lt;br /&gt;
| The answer part of a select&lt;br /&gt;
| Array numbers, Dual scale array (select), single choice with select&lt;br /&gt;
| &amp;amp;lt;p class=&amp;quot;select-item&amp;quot;&amp;gt;, &amp;amp;lt;td class=&amp;quot;select-item&amp;quot;&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | .dropdown-item  {{NewIn|2.50}}&lt;br /&gt;
| The answer part of a select&lt;br /&gt;
| Array numbers, Dual scale array (select), single choice with select&lt;br /&gt;
| &amp;amp;lt;p class=&amp;quot;dropdown-item&amp;quot;&amp;gt;, &amp;amp;lt;td class=&amp;quot;dropdown-item&amp;quot;&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | .hide  {{ObsoleteIn|3.0}}&lt;br /&gt;
| Used for accessibility: hidden with css but read by screenreader, since 2.50 : you can use sr-only from bootstrap&lt;br /&gt;
| Short text question&lt;br /&gt;
| &amp;amp;lt;label class=&amp;quot;hide&amp;quot;&amp;gt;&lt;br /&gt;
| Can be used for other purposes&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | .ls-js-hidden {{NewIn|3.0}}&lt;br /&gt;
| Used for part to be hidden if javascript is activated&lt;br /&gt;
| Button for example&lt;br /&gt;
| &amp;amp;lt;div class=&amp;quot;ls-js-hidden&amp;quot;&amp;gt;&lt;br /&gt;
| LimeSurvey core used it, but you can use it too in your template&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | .ls-js-hidden-sr {{NewIn|3.0}}&lt;br /&gt;
| Used for accessibility: hide it if js is activated, but always show if user use a screenreader&lt;br /&gt;
| Button for example&lt;br /&gt;
| &amp;amp;lt;a class=&amp;quot;ls-js-hidden-sr&amp;quot;&amp;gt;&lt;br /&gt;
| Button&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | .ls-no-js-hidden {{NewIn|3.0}}&lt;br /&gt;
| Used for part to be hidden if javascript is not activated&lt;br /&gt;
| Link&lt;br /&gt;
| &amp;amp;lt;a class=&amp;quot;ls-no-js-hidden&amp;quot;&amp;gt;&lt;br /&gt;
| LimeSurvey core used it for inactive link if javascript is not activated&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | .ls-label-xs-visibility {{NewIn|3.0}}&lt;br /&gt;
|  Label to be hidden in big screen, but show with little screen (with no more table) and to screenreader&lt;br /&gt;
| label&lt;br /&gt;
| &amp;amp;lt;label class=&amp;quot;ls-no-js-hidden&amp;quot;&amp;gt;&lt;br /&gt;
| Used for label inside table cell of array question type&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | .ls-input-group-extra {{NewIn|3.0}}&lt;br /&gt;
| Same usage of boostrap input-group-addon, but without the border and the background.&lt;br /&gt;
| right suffix&lt;br /&gt;
| &amp;amp;lt;div class=&amp;quot;ls-input-group-extra&amp;quot;&amp;gt;&lt;br /&gt;
| Used for right and left suffix (global)&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | .checkbox {{ObsoleteIn|3.0}}&lt;br /&gt;
| input[type=checkbox]&lt;br /&gt;
| Question with checkbox&lt;br /&gt;
| &amp;amp;lt;input type=&amp;quot;checkbox&amp;quot; class=&amp;quot;checkbox&amp;quot;&amp;gt;&lt;br /&gt;
| With modern browser: not needed, but some old browser need this&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | .radio {{ObsoleteIn|3.0}}&lt;br /&gt;
| input[type=radio]&lt;br /&gt;
| Question with radio&lt;br /&gt;
| &amp;amp;lt;input type=&amp;quot;radio&amp;quot; class=&amp;quot;radio&amp;quot;&amp;gt;&lt;br /&gt;
| With modern browser: not needed, but some old browser need this&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | .text&lt;br /&gt;
| input[type=text]&lt;br /&gt;
| Question with input text, or textarea&lt;br /&gt;
| &amp;amp;lt;textarea class=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | .answertext&lt;br /&gt;
| Array question type&lt;br /&gt;
| Answer part of array question type&lt;br /&gt;
| &amp;amp;lt;th class=&amp;quot;answertext&amp;quot;&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | .col-answers&lt;br /&gt;
| Array question type&lt;br /&gt;
| Column of answers&lt;br /&gt;
| &amp;amp;lt;col class=&amp;quot;col-answers&amp;quot;&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | .odd .even {{ObsoleteIn|2.50}}&lt;br /&gt;
| Array question type&lt;br /&gt;
| Alternation for column&lt;br /&gt;
| &amp;amp;lt;col class=&amp;quot;odd&amp;quot;&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | .array1 .array2  {{ObsoleteIn|3.0}}&lt;br /&gt;
| Array question type&lt;br /&gt;
| Alternation for line&lt;br /&gt;
| &amp;amp;lt;tr class=&amp;quot;array1&amp;quot;&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot; | .ls-odd .ls-even  {{NewIn|3.0}}&lt;br /&gt;
| Array question type&lt;br /&gt;
| Alternation for subquestion and Y axis&lt;br /&gt;
| &amp;amp;lt;tr class=&amp;quot;ls-odd&amp;quot;&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Some examples of question part with classes==== &amp;lt;!--T:275--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:276--&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Text-short question type:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;question answer-item text-item &amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;label class=&amp;quot;hide label&amp;quot; for=&amp;quot;answerSGQA&amp;quot;&amp;gt;Answer&amp;lt;/label&amp;gt;&amp;lt;input type=&amp;quot;text&amp;quot; value=&amp;quot;&amp;quot; id=&amp;quot;answerSGQA&amp;quot; name=&amp;quot;SGQA&amp;quot; size=&amp;quot;50&amp;quot; class=&amp;quot;text  empty&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:277--&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Multiple short text&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;ul class=&amp;quot;subquestions-list questions-list text-list&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;li class=&amp;quot;question-item answer-item text-item&amp;quot; id=&amp;quot;javatbdSGQA&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;label for=&amp;quot;answerSGQA&amp;quot;&amp;gt;Some example subquestion&amp;lt;/label&amp;gt;&lt;br /&gt;
     &amp;lt;span&amp;gt;&amp;lt;input type=&amp;quot;text&amp;quot; value=&amp;quot;&amp;quot; id=&amp;quot;answerSGQA&amp;quot; name=&amp;quot;SGQA&amp;quot; size=&amp;quot;20&amp;quot; class=&amp;quot;text empty&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:282--&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Array question type&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;/translate&amp;gt;&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;table class=&amp;quot;question subquestion-list questions-list &amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;caption class=&amp;quot;hide read&amp;quot;&amp;gt;Some explanation for accessibility.&amp;lt;/caption&amp;gt;&lt;br /&gt;
	&amp;lt;colgroup class=&amp;quot;col-responses&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;col width=&amp;quot;50%&amp;quot; class=&amp;quot;col-answers&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;col width=&amp;quot;25%&amp;quot; class=&amp;quot;odd&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;col width=&amp;quot;13.3%&amp;quot; class=&amp;quot;col-no-answer even&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;/colgroup&amp;gt;&lt;br /&gt;
	&amp;lt;thead&amp;gt;&lt;br /&gt;
		&amp;lt;tr class=&amp;quot;array1 dontread&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
			&amp;lt;th&amp;gt;1&amp;lt;/th&amp;gt;&lt;br /&gt;
			&amp;lt;th&amp;gt;No answer&amp;lt;/th&amp;gt;&lt;br /&gt;
		&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;lt;/thead&amp;gt;&lt;br /&gt;
	&amp;lt;tbody&amp;gt;&lt;br /&gt;
		&amp;lt;tr class=&amp;quot;array2 answers-list radio-list&amp;quot; id=&amp;quot;javatbdSGQ&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;th width=&amp;quot;20%&amp;quot; class=&amp;quot;answertext&amp;quot;&amp;gt;Some example subquestion&lt;br /&gt;
			&amp;lt;/th&amp;gt;&lt;br /&gt;
			&amp;lt;td class=&amp;quot;answer_cell_001 answer-item radio-item&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;label for=&amp;quot;answerSGQA&amp;quot; class=&amp;quot;hide read&amp;quot;&amp;gt;1&amp;lt;/label&amp;gt;&lt;br /&gt;
				&amp;lt;input type=&amp;quot;radio&amp;quot; value=&amp;quot;1&amp;quot; id=&amp;quot;answerSGQA&amp;quot; name=&amp;quot;SGQA&amp;quot; class=&amp;quot;radio&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;/td&amp;gt;&lt;br /&gt;
			&amp;lt;td class=&amp;quot;answer-item radio-item noanswer-item&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;label for=&amp;quot;answerSGQA&amp;quot; class=&amp;quot;hide read&amp;quot;&amp;gt;No answer&amp;lt;/label&amp;gt;&lt;br /&gt;
				&amp;lt;input type=&amp;quot;radio&amp;quot; value=&amp;quot;&amp;quot; id=&amp;quot;answerSGQA&amp;quot; name=&amp;quot;SGQA&amp;quot; class=&amp;quot;radio&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;/tr&amp;gt;&lt;br /&gt;
	&amp;lt;/tbody&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;translate&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===The full list of question classes=== &amp;lt;!--T:71--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:72--&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|&#039;&#039;&#039;Question Type&#039;&#039;&#039;||&#039;&#039;&#039;Question Class&#039;&#039;&#039;||&#039;&#039;&#039;Question ID&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|5 point choice||.choice-5-pt-radio||5&lt;br /&gt;
|-&lt;br /&gt;
|Array (10 point choice)||.array-10-pt||B&lt;br /&gt;
|-&lt;br /&gt;
|Array (5 point choice)||.array-5-pt||A&lt;br /&gt;
|-&lt;br /&gt;
|Array (Flexible Labels) dual scale||.array-flexible-duel-scale ||1&lt;br /&gt;
|-&lt;br /&gt;
|Array (Increase, Same, Decrease)||.array-increase-same-decrease||E&lt;br /&gt;
|-&lt;br /&gt;
|Array (Multi Flexible) (Numbers)||.array-multi-flexi ||:&lt;br /&gt;
|-&lt;br /&gt;
|Array (Multi Flexible) (Text)||.array-multi-flexi-text||;&lt;br /&gt;
|-&lt;br /&gt;
|Array (Yes/No/Uncertain)||.array-yes-uncertain-no||C&lt;br /&gt;
|-&lt;br /&gt;
|Array (flexible labels)||.array-flexible-row ||F&lt;br /&gt;
|-&lt;br /&gt;
|Array (flexible labels) by column||.array-flexible-column||H&lt;br /&gt;
|-&lt;br /&gt;
|Boilerplate question||.boilerplate||X&lt;br /&gt;
|-&lt;br /&gt;
|Date||.date||D&lt;br /&gt;
|-&lt;br /&gt;
|Equation||.equation||*&lt;br /&gt;
|-&lt;br /&gt;
|Gender||.gender||G&lt;br /&gt;
|-&lt;br /&gt;
|Huge free text||.text-huge||U&lt;br /&gt;
|-&lt;br /&gt;
|Language switch||.language||I&lt;br /&gt;
|-&lt;br /&gt;
|List (dropdown)||.list-dropdown||!&lt;br /&gt;
|-&lt;br /&gt;
|List (radio)||.list-radio||L&lt;br /&gt;
|-&lt;br /&gt;
|List with comment||.list-with-comment||O&lt;br /&gt;
|-&lt;br /&gt;
|Long free text||.text-long||T&lt;br /&gt;
|-&lt;br /&gt;
|Multiple numerical input||.numeric-multi||K&lt;br /&gt;
|-&lt;br /&gt;
|Multiple options||.multiple-opt||M&lt;br /&gt;
|-&lt;br /&gt;
|Multiple options with comments||.multiple-opt-comments||P&lt;br /&gt;
|-&lt;br /&gt;
|Multiple short text||.multiple-short-txt||Q&lt;br /&gt;
|-&lt;br /&gt;
|Numerical input||.numeric||N&lt;br /&gt;
|-&lt;br /&gt;
|Ranking||.ranking||R&lt;br /&gt;
|-&lt;br /&gt;
|Short free text||.text-short||S&lt;br /&gt;
|-&lt;br /&gt;
|Yes/No||.yes-no||Y&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===The full list of validation classes=== &amp;lt;!--T:73--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:74--&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;simplebox&amp;quot;&amp;gt;Note:  Prior to 1.92, only .mandatory and .input-error classes were available.&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:75--&amp;gt;&lt;br /&gt;
These apply to the help and/or validation tip messages so that each type can be individually styled.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:76--&amp;gt;&lt;br /&gt;
The .hide-tip option and .input-error options interact by default so that you can have validation tips hidden. However, they do appear when there are validation errors and disappear again when those errors are rectified.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:77--&amp;gt;&lt;br /&gt;
All of these are designed to eliminate the need for pop-up alert messages. Instead, tips can appear/disappear as needed and are color-coded to indicate whether the answers pass the validation criteria.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:78--&amp;gt;&lt;br /&gt;
Furthermore, when you first visit a page that has unmet validation criteria, you can color-code the tips in a pleasing color to show which validation criteria have not been met yet; then re-display the page using a harsher color if the person submits the page with lingering validation errors.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:79--&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
|&#039;&#039;&#039;Purpose&#039;&#039;&#039;||&#039;&#039;&#039;CSS Class&#039;&#039;&#039;||&#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|Mandatory||.mandatory||the question is mandatory&lt;br /&gt;
|-&lt;br /&gt;
|User input error||.input-error||the question had at least one validation error&lt;br /&gt;
|-&lt;br /&gt;
|Hide Tip||.hide-tip||added if you use the hide_tip option&lt;br /&gt;
|-&lt;br /&gt;
|defrault type||.em_default||for default tip set ( numeric value etc …)&lt;br /&gt;
|-&lt;br /&gt;
|Num answers||.em_num_answers||for for min_answers and max_answers&lt;br /&gt;
|-&lt;br /&gt;
|Value range||.em_value_range||for min/max_num_value_n and multiflexible_min/max&lt;br /&gt;
|-&lt;br /&gt;
|Sum range||.em_sum_range||for min/max/equals_num_value&lt;br /&gt;
|-&lt;br /&gt;
|Regex validation||.em_regex_validation||for regular-expression validation of the question&lt;br /&gt;
|-&lt;br /&gt;
|Question-level validation function||.em_q_fn_validation||for the em_validation_q option&lt;br /&gt;
|-&lt;br /&gt;
|Subquestion-level validation function||.em_sq_fn_validation||for the em_validation_sq option&lt;br /&gt;
|-&lt;br /&gt;
|Other comment mandatory||.em_other_comment_mandatory||for other_comment_mandatory option - shows when &amp;quot;other&amp;quot; is selected but associated comment is missing.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Importing styles into your custom template=== &amp;lt;!--T:80--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:81--&amp;gt;&lt;br /&gt;
The custom question styles are near the bottom of each template&#039;s CSS file and start with:&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;/* --------------------------- START: Question styles  ------------------------------ */&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:83--&amp;gt;&lt;br /&gt;
If you&#039;re styling your own custom template, you should be able to copy everything after the above one from &#039;&#039;templates/default/template.css&#039;&#039; (for table-based layouts) or &#039;&#039;/templates/limespired/template.css&#039;&#039; (for CSS-based layouts) into your own style sheet without any impact on your other styles.&lt;br /&gt;
&lt;br /&gt;
===Internet Explorer Conditional Style Sheets=== &amp;lt;!--T:84--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:85--&amp;gt;&lt;br /&gt;
Because of the marked discrepancies in rendering between IE6 &amp;amp; IE7 and the other browsers, there are special IE conditional style sheets included for each template.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:86--&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!--[if IE]&amp;gt;&lt;br /&gt;
  &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; type=&amp;quot;text/css&amp;quot; href=&amp;quot;{TEMPLATEURL}IE_fix_all-versions.css&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;![endif]--&amp;gt;&lt;br /&gt;
&amp;lt;!--[if lt IE 7]&amp;gt;&lt;br /&gt;
  &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; type=&amp;quot;text/css&amp;quot; href=&amp;quot;{TEMPLATEURL}IE_fix_older-than-7.css&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;![endif]--&amp;gt;&lt;br /&gt;
&amp;lt;!--[if IE 8]&amp;gt;&lt;br /&gt;
		&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; type=&amp;quot;text/css&amp;quot; href=&amp;quot;{TEMPLATEURL}ie_fix_8.css&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;![endif]--&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:87--&amp;gt;&lt;br /&gt;
You should include the above code within your &#039;&#039;&#039;startpage.pstpl&#039;&#039;&#039; and copies of both the IE style sheets from either &#039;&#039;/templates/default/&#039;&#039; or &#039;&#039;/templates/limespired&#039;&#039; for Tables base layout and CSS based layout respectively.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:88--&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;simplebox&amp;quot;&amp;gt;&#039;&#039;&#039;Note:&#039;&#039;&#039; If you copy the styles into your own style sheet you will almost certainly need to tweak them.&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Alternative solution for internet explorer==== &amp;lt;!--T:89--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:90--&amp;gt;&lt;br /&gt;
You can put a conditional class for body in startpage.pstpl and use this class in your template.css. This method is used in the citronade template{{ObsoleteIn|2.06}}. Adding a js / no-js class to have javascript / no javascript system.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:91--&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&amp;lt;!--[if lt IE 7 ]&amp;gt; &amp;lt;body class=&amp;quot;lang-{SURVEYLANGUAGE} {SURVEYFORMAT} ie ie6 ielt7 ielt8 ielt9 no-js&amp;quot;&amp;gt; &amp;lt;![endif]--&amp;gt;&lt;br /&gt;
&amp;lt;!--[if IE 7 ]&amp;gt; &amp;lt;body class=&amp;quot;lang-{SURVEYLANGUAGE} {SURVEYFORMAT} ie ie7 ielt8 ielt9 no-js&amp;quot;&amp;gt; &amp;lt;![endif]--&amp;gt;&lt;br /&gt;
&amp;lt;!--[if IE 8 ]&amp;gt; &amp;lt;body class=&amp;quot;lang-{SURVEYLANGUAGE} {SURVEYFORMAT} ie ie8 ielt9  no-js&amp;quot;&amp;gt; &amp;lt;![endif]--&amp;gt;&lt;br /&gt;
&amp;lt;!--[if IE 9 ]&amp;gt; &amp;lt;body class=&amp;quot;lang-{SURVEYLANGUAGE} {SURVEYFORMAT} ie ie9 no-js&amp;quot;&amp;gt; &amp;lt;![endif]--&amp;gt;&lt;br /&gt;
&amp;lt;!--[if gt IE 9]&amp;gt;&amp;lt;!--&amp;gt;&amp;lt;body id=&amp;quot;body&amp;quot; class=&amp;quot;lang-{SURVEYLANGUAGE} {SURVEYFORMAT} no-js&amp;quot;&amp;gt;&amp;lt;!--&amp;lt;![endif]--&amp;gt;&lt;br /&gt;
&amp;lt;script type=&#039;text/javascript&#039;&amp;gt;/*&amp;lt;![CDATA[*/(function(H){ H.className=H.className.replace(/\bno-js\b/,&#039;js&#039;) })(document.getElementsByTagName(&#039;body&#039;)[0]);/*]]&amp;gt;*/&amp;lt;/script&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:93--&amp;gt;&lt;br /&gt;
And in template.css use:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:94--&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;css&amp;quot;&amp;gt;.ie6{/*specific for internet explorer 6*/}&lt;br /&gt;
.ielt8{/*specific for internet explorer 6 and 7*/}&lt;br /&gt;
.ie{/*specific for all internet explorer */}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Right-to-Left (RTL) languages and justify=== &amp;lt;!--T:97--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:98--&amp;gt;&lt;br /&gt;
The text editor within LimeSurvey is able to format RTL text. However, the editor itself shows the RTL language in a left to right format when justified. This is just an editor display issue. The RTL and justified question or text will display correctly from right to left, even when justified, in your survey or on preview.&lt;br /&gt;
&lt;br /&gt;
===Keywords=== &amp;lt;!--T:99--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:309--&amp;gt;&lt;br /&gt;
{{Deprecated|3.0}} &lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:100--&amp;gt;&lt;br /&gt;
Keywords within a template file get replaced by the current survey information. They are surrounded by curly brackets, for example: {SURVEYNAME}.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:101--&amp;gt;&lt;br /&gt;
The following strings will be replaced by LimeSurvey when parsing the template file and presenting it to survey users. These field strings will work on almost every template except for the &#039;Completed Page&#039;. (Most of these strings can be found in the common.php file. If it&#039;s not there, look in the index.php file.)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:102--&amp;gt;&lt;br /&gt;
{|class=wikitable&lt;br /&gt;
!&#039;&#039;&#039;Keyword&#039;&#039;&#039;!!&#039;&#039;&#039;Template files&#039;&#039;&#039;!!&#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|{SURVEYNAME}||All Files||The survey title&lt;br /&gt;
|-&lt;br /&gt;
|{SURVEYDESCRIPTION}||All Files||The survey description&lt;br /&gt;
|-&lt;br /&gt;
|{WELCOME}||All files (mainly for welcome.pstpl)||The survey &#039;welcome&#039; text&lt;br /&gt;
|-&lt;br /&gt;
|{PERCENTCOMPLETE}||survey.pstpl||A small graph showing the percentage of the survey completed&lt;br /&gt;
|-&lt;br /&gt;
|{GROUPNAME}||startgroup.pstpl, groupdescription.pstpl, endgroup.pstpl||Displays the current group name&lt;br /&gt;
|-&lt;br /&gt;
|{GROUPDESCRIPTION}||startgroup.pstpl, groupdescription.pstpl, endgroup.pstpl||Displays the current group description&lt;br /&gt;
|-&lt;br /&gt;
|{NUMBEROFQUESTIONS}||welcome.pstpl||Displays the total number of questions in the survey (just the number)&lt;br /&gt;
|-&lt;br /&gt;
|{THEREAREXQUESTIONS}||welcome.pstpl||Displays the sentence &amp;quot;There are X questions in this survey&amp;quot; - from the relevant language file. The X is replaced with the number of questions. Note that this will also work appropriately for singular or plural. If there is only 1 question, it will print &amp;quot;There is 1 question in this survey&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
|{CHECKJAVASCRIPT}||All files (mainly for welcome.pstpl)||Warning message when end-user browser have javascript disabled&lt;br /&gt;
|-&lt;br /&gt;
|{QUESTION}||Question.pstpl||(&#039;&#039;&#039;Has been superseeded as of LS1.87&#039;&#039;&#039;) Displays the current question text (The format of {QUESTION} can customised by editing &#039;question_start.pstpl&#039;) Use the following: {QUESTION_TEXT}, {QUESTION_MANDATORY}, {QUESTION_HELP}, {QUESTION_MAN_MESSAGE}, {QUESTION_VALID_MESSAGE}, {QUESTION_INPUT_ERROR_CLASS}, and appropriate wrapping HTML instead of {QUESTION}&lt;br /&gt;
|-&lt;br /&gt;
|{ANSWER}||question.pstpl, print_question.pstpl||presents the answer form for the current question&lt;br /&gt;
|-&lt;br /&gt;
|{SGQ}||question.pstpl, question text||Can be used in the question text itself to reference the input field of the question dynamically by displaying the Survey-Group-Question id for the current question. (as of svn build 9755)&lt;br /&gt;
|-&lt;br /&gt;
|{QUESTIONHELP}||question.pstpl, print_question.pstpl||Displays help text (predefined tip for question type) for the current question&lt;br /&gt;
|-&lt;br /&gt;
|{QUESTION_CLASS}||question.pstpl, print_question.pstpl||unique class for each question type. (To be included in the question&#039;s wrapping tag.)&lt;br /&gt;
|-&lt;br /&gt;
|{QUESTION_CODE}||question.pstpl, print_question.pstpl||Displays the current question code&lt;br /&gt;
|-&lt;br /&gt;
|{QUESTION_ESSENTIALS}||question.pstpl||the question ID and (if a question is conditional), &#039;style=&amp;quot;display:none;&amp;quot;&#039;. (To be included in the question&#039;s wrapping tag.)&lt;br /&gt;
|-&lt;br /&gt;
|{QUESTION_HELP}||question.pstp, question_start.pstpl||Displays the user defined help text for the current question&lt;br /&gt;
|-&lt;br /&gt;
|{QUESTION_TYPE_HELP}||print_question.pstp||Displays the user defined help text for the current question&lt;br /&gt;
|-&lt;br /&gt;
|{QUESTION_INPUT_ERROR_CLASS}||question.pstp, question_start.pstpl||Provides a class if there was user input error&lt;br /&gt;
|-&lt;br /&gt;
|{QUESTION_ID}||print_question.pstp||Provides a unique ID for each question to allow styling for specific questions&lt;br /&gt;
|-&lt;br /&gt;
|{QUESTION_TEXT}||question.pstp, print_question.pstp, question_start.pstpl||Displays the text for the current question&lt;br /&gt;
|-&lt;br /&gt;
|{QUESTION_MANDATORY}||question.pstp, print_question.pstp, question_start.pstpl||Displays the translated &#039;Mandatory&#039; text for the current question&lt;br /&gt;
|-&lt;br /&gt;
|{QUESTION_MAN_CLASS}||question.pstpl, print_question.pstpl||class if a question is mandatory. (To be included in the question&#039;s wrapping tag.)&lt;br /&gt;
|-&lt;br /&gt;
|{QUESTION_MAN_MESSAGE}||question.pstp, print_question.pstp, question_start.pstpl||Displays the translated &#039;Mandatory&#039; help message text for the current question&lt;br /&gt;
|-&lt;br /&gt;
|{QUESTION_NUMBER}||print_question.pstpl||Incremental count of questions.&lt;br /&gt;
|-&lt;br /&gt;
|{QUESTION_VALID_MESSAGE}||question.pstp, print_question.pstp, question_start.pstpl||Displays the translated valid help message text for the current question&lt;br /&gt;
|-&lt;br /&gt;
|{QUESTION_SCENARIO}||print_question.pstp||Prints out the &#039;scenario&#039; text for conditional questions.&lt;br /&gt;
|-&lt;br /&gt;
|{NAVIGATOR}||navigator.pstpl||Displays navigation buttons (next, prev, last)&lt;br /&gt;
|-&lt;br /&gt;
|{CLEARALL}||All files (but intended for navigator.pstpl)||Displays the &amp;quot;Exit and Clear Results&amp;quot; link&lt;br /&gt;
|-&lt;br /&gt;
|{COMPLETED}||completed.pstpl||Displays the &#039;completed&#039; message for registering, will change depending on whether the attribute_1 and attribute_2 fields are set.&lt;br /&gt;
|-&lt;br /&gt;
|{URL}||completed.pstpl||Displays the survey &#039;url&#039; and &#039;url text&#039;&lt;br /&gt;
|-&lt;br /&gt;
|{PRIVACYMESSAGE}||privacy.pstpl||The privacy message is shown if you set your survey to be anonymous. [[Translating LimeSurvey|The text can be edited/translated]] in the language files. This can also be changed manually by editing the privacy.pstpl template you wish to use.&lt;br /&gt;
|-&lt;br /&gt;
|{TEMPLATEURL}||All Files||The URL to the current template location (useful for referencing image files in your template)&lt;br /&gt;
|-&lt;br /&gt;
|{SURVEYRESOURCESURL}||All Files||The URL to the current uploaded files for this survey location (useful for referencing image files in your question, group, ....)&lt;br /&gt;
|-&lt;br /&gt;
|{SUBMITCOMPLETE}||endpage.pstpl||The statement (from the language files) that tells the user they have completed the survey, and to press the &amp;quot;Submit&amp;quot; button&lt;br /&gt;
|-&lt;br /&gt;
|{SUBMITREVIEW}||survey.pstpl||The statement (from the language files) that tells the user they can review/change the answers they have made by clicking &amp;quot;&amp;lt;&amp;lt; prev&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|{SAVEDID}||All Files||Displays &#039;Response ID&#039; of user&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|{QUEXMLPDF}||All Files||Displays button to export the queXML PDF of questionnaire including answers entered up until the point that has been completed in the survey.&lt;br /&gt;
|-&lt;br /&gt;
|{TOKEN:FIRSTNAME}||All Files||***If survey answers are NOT ANONYMOUS - gets replaced with the users first name from the tokens table&lt;br /&gt;
|-&lt;br /&gt;
|{TOKEN:LASTNAME}||All Files||***If survey answers are NOT ANONYMOUS - gets replaced with the users last name from the tokens table***&lt;br /&gt;
|-&lt;br /&gt;
|{TOKEN:EMAIL}||All Files||***If survey answers are NOT ANONYMOUS - gets replaced with the users email from the tokens table***&lt;br /&gt;
|-&lt;br /&gt;
|{TOKEN:ATTRIBUTE_1}||All Files||***If survey answers are NOT ANONYMOUS - gets replaced with the users attribute_1 from the tokens table***&lt;br /&gt;
|-&lt;br /&gt;
|{TOKEN:ATTRIBUTE_2}||All Files||***If survey answers are NOT ANONYMOUS - gets replaced with the users attribute_2 from the tokens table***&lt;br /&gt;
|-&lt;br /&gt;
|{ANSWERSCLEARED}||Preferably in navigator.pstpl||The &amp;quot;Answers Cleared&amp;quot; statement from the language files&lt;br /&gt;
|-&lt;br /&gt;
|{RESTART}||clearall.pstpl||URL to restart the survey&lt;br /&gt;
|-&lt;br /&gt;
|{REGISTERERROR}||register.pstpl||Shows any error messages in the register page (ie: &amp;quot;You must include an email address&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
|{REGISTERMESSAGE1}||register.pstpl||The statement &amp;quot;You must be registered to complete this survey&amp;quot; from the language files&lt;br /&gt;
|-&lt;br /&gt;
|{REGISTERMESSAGE2}||register.pstpl||Details about registering from the language files&lt;br /&gt;
|-&lt;br /&gt;
|{REGISTERFORM}||register.pstpl||The actual form for registering, will change depending on whether the attribute_1 and attribute_2 fields are set.&lt;br /&gt;
|-&lt;br /&gt;
|{SAVE}||Works suitable on navigator.pstpl||Displays the &#039;Save your responses so far&#039; button to offer the user to save and come back later to continue the survey. If the Save option is deactivated in the survey properties the tag will not be shown and ignored.&lt;br /&gt;
|-&lt;br /&gt;
|{LANGUAGECHANGER}||survey.pstpl||Displays a switch in multilingual surveys to change the question.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Input/Buttons=== &amp;lt;!--T:103--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:104--&amp;gt;&lt;br /&gt;
Each &amp;quot;input&amp;quot; type in a survey has been given its own class name, so that you can add CSS to your &amp;quot;startpage.pstpl&amp;quot; file and have some control over the appearance of form buttons and inputs. These class names are as follows:&lt;br /&gt;
*&#039;&#039;&#039;submit&#039;&#039;&#039; (Submit Buttons)&lt;br /&gt;
*&#039;&#039;&#039;text&#039;&#039;&#039; (Text Inputs - for short free text, date, and numerical type)&lt;br /&gt;
*&#039;&#039;&#039;answertext&#039;&#039;&#039; (Text of answers)&lt;br /&gt;
*&#039;&#039;&#039;radio&#039;&#039;&#039; (Radio Buttons)&lt;br /&gt;
*&#039;&#039;&#039;checkbox&#039;&#039;&#039; (Check Boxes)&lt;br /&gt;
*&#039;&#039;&#039;select&#039;&#039;&#039; (Select / List Boxes)&lt;br /&gt;
*&#039;&#039;&#039;textarea&#039;&#039;&#039; (Large text inputs - for long free text)&lt;br /&gt;
*&#039;&#039;&#039;clearall&#039;&#039;&#039; (The &amp;quot;Exit and Clear Survey&amp;quot; link)&lt;br /&gt;
*&#039;&#039;&#039;rank&#039;&#039;&#039; (The rank style question. Doesn&#039;t set the colour of the select box or the text boxes, but it does allow the changing of background colour, text colour, size etc., for the rest of the ranking question)&lt;br /&gt;
*&#039;&#039;&#039;graph&#039;&#039;&#039; (The &amp;quot;percentage completed&amp;quot; graph table)&lt;br /&gt;
*&#039;&#039;&#039;innergraph&#039;&#039;&#039; (The table inside the graph table - this contains the 0% and 100% text. Use this for changing the size of this text)&lt;br /&gt;
*&#039;&#039;&#039;question&#039;&#039;&#039; (General settings for any question that is displayed within a table. Generally, you should use this to make sure that their font size and color is the same as you have used elsewhere as a default)&lt;br /&gt;
*&#039;&#039;&#039;mandatory&#039;&#039;&#039;  (Mandatory questions)&lt;br /&gt;
*&#039;&#039;&#039;input-error&#039;&#039;&#039; (User input error - for if a user has made a mistake with a mandatory question or question with validation)&lt;br /&gt;
*&#039;&#039;&#039;array1&#039;&#039;&#039; and &#039;&#039;&#039;array2&#039;&#039;&#039; (These two styles are cycled when presenting the range of answers for an array type question. This allows you to set an alternating background color for these question types. &#039;&#039;&#039;Array1&#039;&#039;&#039; is also used for the column headings in these question types)&lt;br /&gt;
*&#039;&#039;&#039;errormandatory&#039;&#039;&#039; (Sets the color and style of the &amp;quot;This question is mandatory&amp;quot; error message)&lt;br /&gt;
*&#039;&#039;&#039;warningjs&#039;&#039;&#039; (Sets the color and style of the warning message displayed if the participant&#039;s browser has javascript disabled)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:105--&amp;gt;&lt;br /&gt;
There are also some elements that can be accessed using the ID of the element (&#039;&#039;&#039;#ID&#039;&#039;&#039; in CSS):&lt;br /&gt;
*&#039;&#039;&#039;surveycontact&#039;&#039;&#039; (The contact message shown on the start page)&lt;br /&gt;
*&#039;&#039;&#039;tokenmessage&#039;&#039;&#039; (used for messages inside the survey, e.g. the session expired error message)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:107--&amp;gt;&lt;br /&gt;
Because you can edit all the HTML aspects, there&#039;s no reason to surround your templates with a &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&amp;lt;div class=&#039;new_name&#039;&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
and then define a css for that new_name class.&lt;br /&gt;
&lt;br /&gt;
==Styling the progress bar== &amp;lt;!--T:108--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:112--&amp;gt;&lt;br /&gt;
The progress bar appearance can be modified with CSS.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:113--&amp;gt;&lt;br /&gt;
To change the background color of the bar, add something like the following to the end of your custom.css file (example for fruity theme):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:114--&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;.fruity .progress-bar {&lt;br /&gt;
 background-color: #3300FF;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:117--&amp;gt;&lt;br /&gt;
To change the border color of the bar, add something like the following to the end of your custom.css file (example for fruity theme):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:118--&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;.fruity .progress-bar {&lt;br /&gt;
 border: 1px solid #FF0000;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Advanced features available to developers== &amp;lt;!--T:121--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:122--&amp;gt;&lt;br /&gt;
LimeSurvey has integrated some user-made patches that permits some special changes. These very advanced features (generally) require changes to the underlying code base of LimeSurvey and should be done carefully in order not to introduce security holes.&lt;br /&gt;
&lt;br /&gt;
====Support for your own Javascript functions==== &amp;lt;!--T:134--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:135--&amp;gt;&lt;br /&gt;
Some users may need to run Javascript on the survey pages, but calling &#039;&#039;&#039;checkconditions()&#039;&#039;&#039; in the BODY element made it impossible to do so. This call has been replaced with a small JavaScript function in the HEAD that sniffs for the existence of &#039;&#039;&#039;checkconditions()&#039;&#039;&#039; and &#039;&#039;&#039;template_onload()&#039;&#039;&#039; before calling them. In this way, a template author can create his or her own &#039;&#039;&#039;template_onload()&#039;&#039;&#039; function in the HEAD that replaces the default one.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:136--&amp;gt;&lt;br /&gt;
*Disable XSS filter - in Global settings -&amp;gt; Security, set &amp;quot;Filter HTML for XSS&amp;quot; to No.&lt;br /&gt;
*Enter your script in the source of a question or group description.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:301--&amp;gt;&lt;br /&gt;
{{Note|For further details, see the [[Workarounds: Manipulating a survey at runtime using Javascript#How to use Script (eg. JavaScript etc.) in LimeSurvey|workaround section]].}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Tips &amp;amp; tricks== &amp;lt;!--T:145--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Language specific element=== &amp;lt;!--T:146--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:147--&amp;gt;&lt;br /&gt;
If you want to have a language specific sentence in a survey, for example help at the end of each page, you can add a .pstl file a sentence and hide it for the other language. If we hide it in the template.css, we can use the pseudo selector :lang, but we use some class for better compatibility.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:148--&amp;gt;&lt;br /&gt;
Below, there are two help sentences, in French and English. Put this on endpage.pstpl:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:149--&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;fr&amp;quot; lang=&amp;quot;fr&amp;quot;&amp;gt;Pour de l&#039;aide en direct appelez le 000000&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;en&amp;quot; lang=&amp;quot;en&amp;quot;&amp;gt;For some help, please call 000000&amp;lt;/div&amp;gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:151--&amp;gt;&lt;br /&gt;
and in template.css:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:152--&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;.lang-fr .en{display:none}&lt;br /&gt;
.lang-en .fr{display:none}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Change the layout of the survey page=== &amp;lt;!--T:155--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:156--&amp;gt;&lt;br /&gt;
After editing and saving a template, it applies to a survey list page only if it is selected from the settings of the survey. To make it the default template, go under the &#039;&#039;&#039;General tab&#039;&#039;&#039; located in the &#039;&#039;&#039;Global settings&#039;&#039;&#039; of your LimeSurvey installation and choose the desired template. From this point on, all the templates that use the &amp;quot;default&amp;quot; option as template, plus the ones that are going to be newly created, will use the newly selected default template.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:157--&amp;gt;&lt;br /&gt;
To use your current template for this page, you must change the appropriate setting from &#039;&#039;&#039;Global settings&#039;&#039;&#039;. In older versions, this change can be done by editing the $defaulttemplate setting from the config file: copy this setting from config-defaults.php to config.php which overrides config-defaults.php and edit this setting to &amp;lt;code lang=&amp;quot;html&amp;quot;&amp;gt;$defaulttemplate = &#039;yourtemplatename&#039;;&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Import/Export of templates: Mac users=== &amp;lt;!--T:158--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:159--&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;Mac users&amp;lt;/u&amp;gt;, please note that the Mac OSX default archive utility may have problems with zip folders &amp;quot;generated on the fly&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:160--&amp;gt;&lt;br /&gt;
A workaround is to unix&#039;es unzip from the command line:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:161--&amp;gt;&lt;br /&gt;
$ unzip template.zip -d template&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:162--&amp;gt;&lt;br /&gt;
Archive: template.zip&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:163--&amp;gt;&lt;br /&gt;
 inflating: template/startpage&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:164--&amp;gt;&lt;br /&gt;
 inflating: ...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:165--&amp;gt;&lt;br /&gt;
Another workaround is to use scripts in their mac-compiled counterparts.&lt;br /&gt;
&lt;br /&gt;
===Use the same template with different logos=== &amp;lt;!--T:214--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:215--&amp;gt;&lt;br /&gt;
If you want to use the same template for all surveys and just want to change the logo for each survey, you can use the {SID} placeholder in the template .pstpl file and thereby refer to different images:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:216--&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;{TEMPLATEURL}files/logoImage-{SID}.png&amp;quot;&amp;gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Display custom favicon=== &amp;lt;!--T:220--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:221--&amp;gt;&lt;br /&gt;
A favicon is the little icon you see in the browser&#039;s address bar, list of bookmarks or tab. You can display your own icon as follows:&lt;br /&gt;
#Create a favicon - You can use Google to find lots of free favicon generators.&lt;br /&gt;
#Name your new favicon &amp;quot;favicon.ico&amp;quot; and place it in your template /files directory.&lt;br /&gt;
#Add the following code to your &#039;&#039;&#039;startpage.pstpl&#039;&#039;&#039; before the &amp;lt;/head&amp;gt; tag.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:222--&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html4strict&amp;quot;&amp;gt;&amp;lt;link rel=&amp;quot;shortcut icon&amp;quot; href=&amp;quot;{TEMPLATEURL}files/favicon.ico&amp;quot; type=&amp;quot;image/x-icon&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;link rel=&amp;quot;icon&amp;quot; href=&amp;quot;{TEMPLATEURL}files/favicon.ico&amp;quot; type=&amp;quot;image/x-icon&amp;quot;&amp;gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Different appearance for survey-/question-pages=== &amp;lt;!--T:224--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:226--&amp;gt;&lt;br /&gt;
If you want LimeSurvey to change the appearance of every second page (i.e., even and odd survey pages), you can use &#039;&#039;&#039;.page-odd&#039;&#039;&#039; class in your CSS file to change the appearance of odd pages.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:227--&amp;gt;&lt;br /&gt;
An example from default template of LimeSurvey 1.91+:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:228--&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
.page-odd table.question-group {&lt;br /&gt;
 background-color: #D2F2D3;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:232--&amp;gt;&lt;br /&gt;
If you do &#039;&#039;&#039;not&#039;&#039;&#039; want differentiate even and odd pages, find all instances of &#039;&#039;.page-odd&#039;&#039; in template.css and remove those styles.&lt;br /&gt;
&lt;br /&gt;
===Create a vertical separator border for dual scale array=== &amp;lt;!--T:233--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:234--&amp;gt;&lt;br /&gt;
To create a vertical separator border for a dual scale array, you can add the following lines to your &#039;&#039;&#039;template.css&#039;&#039;&#039;-file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:235--&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
table.question thead td.header_separator,&lt;br /&gt;
table.question tbody td.dual_scale_separator&lt;br /&gt;
{&lt;br /&gt;
   border-right:solid 1px #00A8E1;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:242--&amp;gt;&lt;br /&gt;
&#039;&#039;header_separator&#039;&#039; is used to adress the separator for the header &amp;quot;td&amp;quot;. The &amp;quot;dual_scale_separator&amp;quot; is used to address the separator column in the dual scale array.&lt;br /&gt;
&lt;br /&gt;
===Adding your own logo to the survey list=== &amp;lt;!--T:310--&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:311--&amp;gt;&lt;br /&gt;
# First please open the theme editor for the theme you like to use. [[File:OpenThemeEditor.jpg]]&lt;br /&gt;
# We recommend to use fruity, it is our best theme currently. &lt;br /&gt;
# Then extend the theme and give it a name you will recognize. [[File:ExtendTheme.jpg]]&lt;br /&gt;
# In the following view you may upload the logo you want to use. [[File:UploadFileTheme.jpg]]&lt;br /&gt;
# Select the editor screen `Survey List´ in the Screen dropdown in the top right corner. [[File:OpenScreenSurveyList.jpg]]&lt;br /&gt;
# Then select `layout_survey_list.twig´ in the left side menu. [[File:EditLayoutSurveyListTwig.jpg]]&lt;br /&gt;
# In the editor scroll to line 126 and change the marked part to the filename of the image you uploaded to the theme before. [[File:ChangeSurveyListHeaderImageEditor.jpg]]&lt;br /&gt;
# Save your file. [[File:ThemeEditorSaveChanges.jpg]]&lt;br /&gt;
# Change default theme to your extended theme. [[File:ChangeDefaultTheme.jpg]]&lt;br /&gt;
&lt;br /&gt;
=== Align logo to the centre of the survey page=== &amp;lt;!--T:314--&amp;gt;&lt;br /&gt;
This example is for the &amp;quot;extends_fruity&amp;quot; template. For other templates the required CSS may be different.&lt;br /&gt;
# Login to the LimeSurvey admin area&lt;br /&gt;
# Browse to the theme editor: Configuration &amp;gt; Themes&lt;br /&gt;
# Find &amp;quot;LimeSurvey Fruity Theme&amp;quot; in the list and click the &amp;quot;Theme Editor&amp;quot; button&lt;br /&gt;
# Click &amp;quot;custom.css&amp;quot; in the files list on the left at near the bottom of the page&lt;br /&gt;
# Copy the following CSS into that file and press &amp;quot;Save Changes&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:315--&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
.navbar-fixed-top &amp;gt; div.navbar-header {&lt;br /&gt;
    width: 100% !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:316--&amp;gt;&lt;br /&gt;
.navbar-fixed-top &amp;gt; div.navbar-header &amp;gt; div {&lt;br /&gt;
    width: 100% !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:317--&amp;gt;&lt;br /&gt;
.navbar-fixed-top &amp;gt; div.navbar-header &amp;gt; div &amp;gt; img {&lt;br /&gt;
    margin: 0 auto 0 auto !important;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Custom question views {{NewIn|3.0}}== &amp;lt;!--T:289--&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:290--&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;simplebox&amp;quot;&amp;gt;&#039;&#039;&#039;Note:&#039;&#039;&#039; This is a temporary feature to be replaced in the future by question object (it will be very easy to move custom views to question object). It is disabled by default.&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:291--&amp;gt;&lt;br /&gt;
As of version 2.5, you can create template-specific custom views for questions and some of their incorporated elements. This is useful if you want to modify the HTML layout of a particular question type for one or more surveys.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:292--&amp;gt;&lt;br /&gt;
*In application/config/config.php, find &#039;config&#039;=&amp;gt;array and add this line to the array : &#039;allow_templates_to_overwrite_views&#039;=&amp;gt;1&lt;br /&gt;
*In /{your_template}/config.xml, set &amp;quot;overwrite_question_views&amp;quot; to true&lt;br /&gt;
*Copy application/views/survey/* to template/{your_view_directory}/survey/&lt;br /&gt;
*Note that you only need to copy the files that you intend to modify but the file structure must remain the same as in application/views/survey/&lt;br /&gt;
&lt;br /&gt;
==Insert custom CSS or JavaScript files for template== &amp;lt;!--T:296--&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:303--&amp;gt;&lt;br /&gt;
As of version 2.50, you can use the config.xml File to Automatically Load Plugin Files.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--T:304--&amp;gt;&lt;br /&gt;
*Upload your files to the template /css or /scripts folder&lt;br /&gt;
*In /{your_template}/config.xml, add the file paths to the &amp;lt;css&amp;gt; or &amp;lt;js&amp;gt; blocks, something like this:&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&amp;lt;css&amp;gt;&lt;br /&gt;
	&amp;lt;filename&amp;gt;css/jquery-ui-custom.css&amp;lt;/filename&amp;gt;&lt;br /&gt;
	&amp;lt;filename&amp;gt;css/bootstrap-slider.css&amp;lt;/filename&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;!--T:305--&amp;gt;&lt;br /&gt;
&amp;lt;filename&amp;gt;css/awesome-bootstrap-checkbox/awesome-bootstrap-checkbox.css&amp;lt;/filename&amp;gt;&lt;br /&gt;
	&amp;lt;filename&amp;gt;css/flat_and_modern.css&amp;lt;/filename&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;!--T:306--&amp;gt;&lt;br /&gt;
&amp;lt;filename&amp;gt;css/template.css&amp;lt;/filename&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;!--T:307--&amp;gt;&lt;br /&gt;
&amp;lt;filename&amp;gt;css/myCustomPlugin.css&amp;lt;/filename&amp;gt;&lt;br /&gt;
&amp;lt;/css&amp;gt;&lt;br /&gt;
&amp;lt;js&amp;gt;&lt;br /&gt;
	&amp;lt;filename&amp;gt;scripts/template.js&amp;lt;/filename&amp;gt;&lt;br /&gt;
	&amp;lt;filename&amp;gt;scripts/bootstrap-slider.js&amp;lt;/filename&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;!--T:308--&amp;gt;&lt;br /&gt;
&amp;lt;filename&amp;gt;scripts/myCustomPlugin.js&amp;lt;/filename&amp;gt;&lt;br /&gt;
&amp;lt;/js&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/translate&amp;gt;&lt;br /&gt;
[[Category:Theme]]&lt;br /&gt;
[[Category:Twig]]&lt;/div&gt;</summary>
		<author><name>Twilllig</name></author>
	</entry>
	<entry>
		<id>https://www.limesurvey.org/manual/index.php?title=Extra_menus_event&amp;diff=174552</id>
		<title>Extra menus event</title>
		<link rel="alternate" type="text/html" href="https://www.limesurvey.org/manual/index.php?title=Extra_menus_event&amp;diff=174552"/>
		<updated>2022-10-07T06:34:00Z</updated>

		<summary type="html">&lt;p&gt;Twilllig: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Description of the event to generate extra menus at top bar (besides configuration, logout, etc).&lt;br /&gt;
&lt;br /&gt;
Three types of menus:&lt;br /&gt;
* Dropdown&lt;br /&gt;
* Link&lt;br /&gt;
* Button (since LimeSurvey 5.4)&lt;br /&gt;
&lt;br /&gt;
For dropdown, we have two kinds of menu items:&lt;br /&gt;
* Link&lt;br /&gt;
* Divider&lt;br /&gt;
&lt;br /&gt;
The event itself is called &amp;lt;code&amp;gt;beforeAdminMenuRender&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Plugin will set property &amp;lt;code&amp;gt;extraMenus&amp;lt;/code&amp;gt;. Each element in that array must implement interface &amp;lt;code&amp;gt;ExtraMenuInterface&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
This example with create a dropdown menu with three empty menu items and one divider:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$event = $this-&amp;gt;getEvent();&lt;br /&gt;
$event-&amp;gt;set(&#039;extraMenus&#039;, array(&lt;br /&gt;
  new ExtraMenu(array(&lt;br /&gt;
    &#039;isDropDown&#039; =&amp;gt; true,&lt;br /&gt;
    &#039;menuItems&#039; =&amp;gt; array(&lt;br /&gt;
        new ExtraMenuItem(null),&lt;br /&gt;
        new ExtraMenuItem(null),&lt;br /&gt;
        new ExtraMenuItem(array(&#039;isDivider&#039; =&amp;gt; true)),&lt;br /&gt;
        new ExtraMenuItem(null)&lt;br /&gt;
    )&lt;br /&gt;
  ))&lt;br /&gt;
));&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
How it would look:&lt;br /&gt;
&lt;br /&gt;
[[File:extramenu.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
And this example shows how to add a button menu item on the left side of the admin menu (since LimeSurvey 5.4):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$event = $this-&amp;gt;getEvent();&lt;br /&gt;
$buttonTestOptions = [&lt;br /&gt;
  &#039;buttonId&#039; =&amp;gt; &#039;test-button&#039;,&lt;br /&gt;
  &#039;label&#039; =&amp;gt; &#039;Test button&#039;,&lt;br /&gt;
  &#039;href&#039; =&amp;gt; &#039;https://limesurvey.org&#039;,&lt;br /&gt;
  &#039;iconClass&#039; =&amp;gt; &#039;fa fa-link&#039;,&lt;br /&gt;
  &#039;openInNewTab&#039; =&amp;gt; true,&lt;br /&gt;
  &#039;isPrepended&#039; =&amp;gt; true,&lt;br /&gt;
  &#039;tooltip&#039; =&amp;gt; &#039;You can add a tooltip here&#039;,&lt;br /&gt;
];&lt;br /&gt;
&lt;br /&gt;
$menuTestButton = new \LimeSurvey\Menu\MenuButton($buttonTestOptions);&lt;br /&gt;
$event-&amp;gt;append(&#039;extraMenus&#039;, [$menuTestButton]);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Interfaces ==&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
! &amp;lt;b&amp;gt;Method&amp;lt;/b&amp;gt; !! &amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| isDropDown || Returns true if this menu is a dropdown menu&lt;br /&gt;
|-&lt;br /&gt;
| isSmallText || Returns true if this item is a small text header (uses label as text)&lt;br /&gt;
|-&lt;br /&gt;
| getLabel || Returns the actual name of the menu&lt;br /&gt;
|-&lt;br /&gt;
| getIconClass || Return CSS class for icon to display left of link&lt;br /&gt;
|-&lt;br /&gt;
| getHref || If it&#039;s not a dropdown menu, this is just for the link&lt;br /&gt;
|-&lt;br /&gt;
| getMenuItems || Return array of dropdown menu items&lt;br /&gt;
|-&lt;br /&gt;
| isPrepended ||  Returns true if the item is displayed on the left side of the admin menu&lt;br /&gt;
|-&lt;br /&gt;
| isButton ||  Returns true if the item is a button&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Each menu item returned by &amp;lt;code&amp;gt;getMenuItems&amp;lt;/code&amp;gt; must implement the interface &amp;lt;code&amp;gt;ExtraMenuItemInterface&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
! &amp;lt;b&amp;gt;Method&amp;lt;/b&amp;gt; !! &amp;lt;b&amp;gt;Description &amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| getHref || As above, used for link in dropdown item&lt;br /&gt;
|-&lt;br /&gt;
| getLabel || The text for the link&lt;br /&gt;
|-&lt;br /&gt;
| isDivider || Return true if the item is a divider&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Twilllig</name></author>
	</entry>
	<entry>
		<id>https://www.limesurvey.org/manual/index.php?title=Extra_menus_event&amp;diff=174551</id>
		<title>Extra menus event</title>
		<link rel="alternate" type="text/html" href="https://www.limesurvey.org/manual/index.php?title=Extra_menus_event&amp;diff=174551"/>
		<updated>2022-10-06T15:11:16Z</updated>

		<summary type="html">&lt;p&gt;Twilllig: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Description of the event to generate extra menus at top bar (besides configuration, logout, etc).&lt;br /&gt;
&lt;br /&gt;
Three types of menus:&lt;br /&gt;
* Dropdown&lt;br /&gt;
* Link&lt;br /&gt;
* Button (since LimeSurvey 5.4)&lt;br /&gt;
&lt;br /&gt;
For dropdown, we have two kinds of menu items:&lt;br /&gt;
* Link&lt;br /&gt;
* Divider&lt;br /&gt;
&lt;br /&gt;
The event itself is called &amp;lt;code&amp;gt;beforeAdminMenuRender&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Plugin will set property &amp;lt;code&amp;gt;extraMenus&amp;lt;/code&amp;gt;. Each element in that array must implement interface &amp;lt;code&amp;gt;ExtraMenuInterface&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
This example with create a dropdown menu with three empty menu items and one divider:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$event = $this-&amp;gt;getEvent();&lt;br /&gt;
$event-&amp;gt;set(&#039;extraMenus&#039;, array(&lt;br /&gt;
  new ExtraMenu(array(&lt;br /&gt;
    &#039;isDropDown&#039; =&amp;gt; true,&lt;br /&gt;
    &#039;menuItems&#039; =&amp;gt; array(&lt;br /&gt;
        new ExtraMenuItem(null),&lt;br /&gt;
        new ExtraMenuItem(null),&lt;br /&gt;
        new ExtraMenuItem(array(&#039;isDivider&#039; =&amp;gt; true)),&lt;br /&gt;
        new ExtraMenuItem(null)&lt;br /&gt;
    )&lt;br /&gt;
  ))&lt;br /&gt;
));&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
How it would look:&lt;br /&gt;
&lt;br /&gt;
[[File:extramenu.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
And this example shows how to add a button menu item on the left side of the admin menu:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$event = $this-&amp;gt;getEvent();&lt;br /&gt;
$buttonTestOptions = [&lt;br /&gt;
  &#039;buttonId&#039; =&amp;gt; &#039;test-button&#039;,&lt;br /&gt;
  &#039;label&#039; =&amp;gt; &amp;quot;Test button&amp;quot;,&lt;br /&gt;
  &#039;href&#039; =&amp;gt; &#039;https://limesurvey.org&#039;,&lt;br /&gt;
  &#039;iconClass&#039; =&amp;gt; &#039;fa fa-link&#039;,&lt;br /&gt;
  &#039;openInNewTab&#039; =&amp;gt; true,&lt;br /&gt;
  &#039;isPrepended&#039; =&amp;gt; true,&lt;br /&gt;
  &#039;tooltip&#039; =&amp;gt; &amp;quot;You can add a tooltip here&amp;quot;,&lt;br /&gt;
];&lt;br /&gt;
&lt;br /&gt;
$menuTestButton = new \LimeSurvey\Menu\MenuButton($buttonTestOptions);&lt;br /&gt;
$event-&amp;gt;append(&#039;extraMenus&#039;, [$menuTestButton]);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Interfaces ==&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
! &amp;lt;b&amp;gt;Method&amp;lt;/b&amp;gt; !! &amp;lt;b&amp;gt;Description&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| isDropDown || Returns true if this menu is a dropdown menu&lt;br /&gt;
|-&lt;br /&gt;
| isSmallText || Returns true if this item is a small text header (uses label as text)&lt;br /&gt;
|-&lt;br /&gt;
| getLabel || Returns the actual name of the menu&lt;br /&gt;
|-&lt;br /&gt;
| getIconClass || Return CSS class for icon to display left of link&lt;br /&gt;
|-&lt;br /&gt;
| getHref || If it&#039;s not a dropdown menu, this is just for the link&lt;br /&gt;
|-&lt;br /&gt;
| getMenuItems || Return array of dropdown menu items&lt;br /&gt;
|-&lt;br /&gt;
| isPrepended ||  Returns true if the item is displayed on the left side of the admin menu&lt;br /&gt;
|-&lt;br /&gt;
| isButton ||  Returns true if the item is a button&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Each menu item returned by &amp;lt;code&amp;gt;getMenuItems&amp;lt;/code&amp;gt; must implement the interface &amp;lt;code&amp;gt;ExtraMenuItemInterface&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
! &amp;lt;b&amp;gt;Method&amp;lt;/b&amp;gt; !! &amp;lt;b&amp;gt;Description &amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| getHref || As above, used for link in dropdown item&lt;br /&gt;
|-&lt;br /&gt;
| getLabel || The text for the link&lt;br /&gt;
|-&lt;br /&gt;
| isDivider || Return true if the item is a divider&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Twilllig</name></author>
	</entry>
	<entry>
		<id>https://www.limesurvey.org/manual/index.php?title=BeforeTokenEmail&amp;diff=171993</id>
		<title>BeforeTokenEmail</title>
		<link rel="alternate" type="text/html" href="https://www.limesurvey.org/manual/index.php?title=BeforeTokenEmail&amp;diff=171993"/>
		<updated>2022-01-14T08:55:31Z</updated>

		<summary type="html">&lt;p&gt;Twilllig: Fixed &amp;quot;Usage&amp;quot; description,  because not all token emails are sent by the admin user in the admin panel&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{FeatureStarting|2.05 build 140404}} &lt;br /&gt;
&lt;br /&gt;
{{Alert|This feature change in 4.0.0. See [[beforeEmail]] event for the new evnt input and output and example.}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Usage&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This event can be used each time a token is send by the system. Token emails are of type reminder, invitation, confirm or register.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Input&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The event receives the following information:&lt;br /&gt;
* mailer : The mailer object {{NewIn|v=4.0}})&lt;br /&gt;
* type : Email type (reminder, invitation, confirm or register {{NewIn|v=2.06}})&lt;br /&gt;
* model : model used in survey_languagesettings table (remind, invite, confirm or register {{NewIn|v=2.51.5}})&lt;br /&gt;
* survey : The survey id {{NewIn|v=2.51.5}}&lt;br /&gt;
* subject : Email subject&lt;br /&gt;
* to : Recipient(s) &lt;br /&gt;
* body : Email body content&lt;br /&gt;
* from : Sender(s)&lt;br /&gt;
* token : Raw token data in an array .&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Possible output&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The following information can be set in the event:&lt;br /&gt;
* subject : Email subject&lt;br /&gt;
* to : Recipient(s)&lt;br /&gt;
* body : Email body content&lt;br /&gt;
* from : Sender(s)&lt;br /&gt;
* send : If true Limesurvey will send the email. Setting this to false will cause Limesurvey to assume the mail has been sent by the plugin.&lt;br /&gt;
* message : If send is true and call by register : a message to be shown to the user&lt;br /&gt;
* error : If set and &amp;quot;send&amp;quot; is true, log the error as failed email attempt.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [https://gitlab.com/SondagesPro/mailing/noMailToExample noMailToExample]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;See also&#039;&#039;&#039;&lt;br /&gt;
* [[beforeEmail]]&lt;br /&gt;
* [[beforeSurveyEmail]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Plugins events]]&lt;/div&gt;</summary>
		<author><name>Twilllig</name></author>
	</entry>
</feed>