<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://docs.moodle.org/dev/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Bawjaws</id>
	<title>MoodleDocs - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://docs.moodle.org/dev/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Bawjaws"/>
	<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/Special:Contributions/Bawjaws"/>
	<updated>2026-07-30T15:22:33Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.5</generator>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Running_acceptance_test&amp;diff=57572</id>
		<title>Running acceptance test</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Running_acceptance_test&amp;diff=57572"/>
		<updated>2020-06-08T09:00:18Z</updated>

		<summary type="html">&lt;p&gt;Bawjaws: Add non-selenium instructions.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Short version ==&lt;br /&gt;
&lt;br /&gt;
...or how I got it to work on Ubuntu and some of the problems encountered. &lt;br /&gt;
&lt;br /&gt;
You need a bunch of browsers and terminal windows open to do this.&lt;br /&gt;
&lt;br /&gt;
==== 1. Background ====  &lt;br /&gt;
&lt;br /&gt;
# I am using the desktop version of Ubuntu 17.04 so there are no issues about running this software in headless mode. Running in headless mode was not tested.&lt;br /&gt;
# Moodle is version 3.3 and is a fully installed and working version using the &#039;standard&#039; Ubuntu LAMP stack.&lt;br /&gt;
&lt;br /&gt;
==== 2. Set up Selenium ====&lt;br /&gt;
First, you should have a look at [[Acceptance_testing/Browsers/Working_combinations_of_OS%2BBrowser%2Bselenium#Working_combinations_of_OS.2BBrowser.2Bselenium|working combinations of OS+Browser+selenium]].&lt;br /&gt;
&lt;br /&gt;
# Download the Selenium Standalone Server from [http://www.seleniumhq.org/download/ http://www.seleniumhq.org/download/]. It&#039;s a single JAR file, put it anywhere handy.&lt;br /&gt;
# Download the Chrome driver from [https://sites.google.com/a/chromium.org/chromedriver/ https://sites.google.com/a/chromium.org/chromedriver/]. Ensure you have the right version of the Chrome driver - see [[#Trouble_shooting| Trouble shooting]]. (Firefox is currently problematic. See [[Actual_Selenium_with_old_Firefox_47.0.1]] if you need to try to make it work.)&lt;br /&gt;
# Unzip the driver (it&#039;s a single file) and copy to /usr/local/bin (should work anywhere on the path)&lt;br /&gt;
# If not installed already, &#039;&amp;lt;tt&amp;gt;sudo apt install default-jre&amp;lt;/tt&amp;gt;&#039;&lt;br /&gt;
# Start Selenium - &#039;&amp;lt;tt&amp;gt;java -jar /path/to/your/selenium/server/selenium-server-standalone-N.NN.N.jar -port 4444&amp;lt;/tt&amp;gt;&#039;&lt;br /&gt;
# check it works, access &#039;localhost:4444/wd/hub/&#039; in your browser and check you can create a new Chrome session.&lt;br /&gt;
&lt;br /&gt;
If running headless or the above doesn&#039;t work (&amp;quot;Selenium server is not running&amp;quot; when running the behat tests). Try the following&lt;br /&gt;
# Run &#039;&amp;lt;tt&amp;gt;Xvfb -ac :99 -screen 0 1280x1024x16 &amp;amp;&amp;lt;/tt&amp;gt;&#039;&lt;br /&gt;
# Then immediately, &#039;&amp;lt;tt&amp;gt;export DISPLAY=:99&amp;lt;/tt&amp;gt;&#039;&lt;br /&gt;
# The run the Selenium command as above&lt;br /&gt;
&lt;br /&gt;
==== 3. Set up Moodle ====&lt;br /&gt;
&lt;br /&gt;
# Create a new &#039;dataroot&#039; area for files especially for behat adjusting permissions accordingly. &lt;br /&gt;
# If not there already, add Section 11 from config-dist.php to your config.php file and review the settings. &lt;br /&gt;
# $CFG-&amp;gt;behat_wwwroot needs to point to your Moodle site yet be different from the &#039;normal&#039; wwwroot (e.g. if you used localhost for wwwroot use 127.0.0.1 for the behat_wwwroot). Whatever you choose, make sure it works. &lt;br /&gt;
# $CFG-&amp;gt;behat_dataroot should point to the directory you created above&lt;br /&gt;
# $CFG-&amp;gt;behat_prefix should be fine. &lt;br /&gt;
# Set up $CFG-&amp;gt;behat_profiles to select Chrome as the browser...&lt;br /&gt;
&lt;br /&gt;
     $CFG-&amp;gt;behat_profiles = [&lt;br /&gt;
         &#039;default&#039; =&amp;gt; [&lt;br /&gt;
             &#039;browser&#039; =&amp;gt; &#039;chrome&#039;,&lt;br /&gt;
             &#039;extensions&#039; =&amp;gt; [&lt;br /&gt;
                 &#039;Behat\MinkExtension&#039; =&amp;gt; [&lt;br /&gt;
                     &#039;selenium2&#039; =&amp;gt; [&lt;br /&gt;
                         &#039;browser&#039; =&amp;gt; &#039;chrome&#039;,&lt;br /&gt;
                     ]&lt;br /&gt;
                 ]&lt;br /&gt;
             ]&lt;br /&gt;
         ]&lt;br /&gt;
     ];&lt;br /&gt;
&lt;br /&gt;
==== 4. Configure Behat for Moodle ====&lt;br /&gt;
&lt;br /&gt;
# Run &#039;&amp;lt;tt&amp;gt;php admin/tool/behat/cli/init.php&amp;lt;/tt&amp;gt;&#039; (from the root of your Moodle install). This installs all the required software and creates the test version of Moodle. &lt;br /&gt;
&lt;br /&gt;
==== 5. Run Behat tests ====&lt;br /&gt;
&lt;br /&gt;
# Run &#039;&amp;lt;tt&amp;gt;vendor/bin/behat&amp;lt;/tt&amp;gt;&#039;. If you don&#039;t want to run all the tests add &#039;&amp;lt;tt&amp;gt;--tags=&amp;quot;@something&amp;quot;&amp;lt;/tt&amp;gt;&#039; where the @something refers to the tags at the top of most feature files. Use comma-separated list like &#039;&amp;lt;tt&amp;gt;@some_thing,@some_thing_else&amp;lt;/tt&amp;gt;&#039; to run tests from multiple areas. See upstream documentation on Gherkin filters for advanced syntax and more complex examples.&lt;br /&gt;
# After some initial setup dots should start to go by. It&#039;s a while before Selenium is first accessed. On the Linux desktop a new Chrome window appears and the testing process &#039;remote control&#039; starts (hopefully!)&lt;br /&gt;
&lt;br /&gt;
== Prerequisite ==&lt;br /&gt;
Before initializing acceptance test environment for running behat, you should ensure:&lt;br /&gt;
# [[Acceptance_testing#Requirements Meet min. system requirements for running tests]]&lt;br /&gt;
# [[Acceptance_testing#Installation Have set min. config variable in config.php for behat]]&lt;br /&gt;
# [[Acceptance_testing#Installation Downloaded composer dependencies]]&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
Acceptance tests (also known as behat), use [http://www.seleniumhq.org/download/ Selenium server] and can be run as:&lt;br /&gt;
# &#039;&#039;&#039;Single run:&#039;&#039;&#039; In single run, only one behat run is executed. So all features are executed in this single run.&lt;br /&gt;
# &#039;&#039;&#039;Parallel runs:&#039;&#039;&#039; (Since Moodle 3.0) Parallel runs allow dev&#039;s to execute multiple behat runs together. This was introduced to get acceptance tests results faster. To achieve this:&lt;br /&gt;
#* Features are divided between multiple behat runs&lt;br /&gt;
#* Symlinks behatrun{x} (x being the run process number), are created pointing to moodle directory, so site for run 1 is accessible via https://localhost/moodle/behatrun1&lt;br /&gt;
#* Process number is included as suffix to $CFG-&amp;gt;behat_prefix.&lt;br /&gt;
#* Process number is suffixed to $CFG-&amp;gt;behat_dataroot.&lt;br /&gt;
&lt;br /&gt;
== Step 1: Initialise acceptance test environment ==&lt;br /&gt;
Before running acceptance tests, environment needs to be initialised for acceptance testing.&lt;br /&gt;
&lt;br /&gt;
=== Single run ===&lt;br /&gt;
For initialising acceptance tests for single run, above command is sufficient.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
php admin/tool/behat/cli/init.php&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Parallel runs ===&lt;br /&gt;
For initialising acceptance tests for parallel runs, you can use one of the following options&lt;br /&gt;
# &#039;&#039;&#039;-j=&amp;lt;number&amp;gt; or --parallel=&amp;lt;number&amp;gt;&#039;&#039;&#039; (required) Number of parallel behat run to initialise&lt;br /&gt;
# &#039;&#039;&#039;-m=&amp;lt;number&amp;gt; or --maxruns=&amp;lt;number&amp;gt;&#039;&#039;&#039;  (optional) Max parallel site which should be initialised at one time. If your system is slow, then you can initialise sites in chucks.&lt;br /&gt;
# &#039;&#039;&#039;--fromrun=&amp;lt;number&amp;gt;&#039;&#039;&#039; (optional) Initialise site to run specified run from. Used for running acceptance tests on different vms&lt;br /&gt;
# &#039;&#039;&#039;--torun=&amp;lt;number&amp;gt;&#039;&#039;&#039; (optional) Initialise site to run specified run till. Used for running acceptance tests on different vms&lt;br /&gt;
# &#039;&#039;&#039;-o or --optimize-runs&#039;&#039;&#039; (optional) This option will split features with specified tags in all parallel runs, so they are executed first when parallel run gets executed.&lt;br /&gt;
# &#039;&#039;&#039;-a=&amp;lt;name&amp;gt; or --add-core-features-to-theme=&amp;lt;name&amp;gt;&#039;&#039;&#039; (optional) Since Moodle 3.2. Use this option to add all core features to specified themes (comma separated list of themes)&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
// Below command will initialise moodle to run 2 parallel tests.&lt;br /&gt;
php admin/tool/behat/cli/init.php --parallel=2&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Step 2: Running acceptance test environment ==&lt;br /&gt;
=== Single run ===&lt;br /&gt;
Run either of the following commands. For more options &#039;&#039;&#039;vendor/bin/behat --help&#039;&#039;&#039; or http://docs.behat.org/guides/6.cli.html&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
vendor/bin/behat --config /path/to/your/CFG_behat_dataroot/behatrun/behat/behat.yml&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You almost always want to limit the number of tests that are run. To run all the tests in one plugin:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
vendor/bin/behat --config /path/to/your/CFG_behat_dataroot/behatrun/behat/behat.yml --tags mod_myplugin&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To run all the tests in one .feature file:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
vendor/bin/behat --config /path/to/your/CFG_behat_dataroot/behatrun/behat/behat.yml /path/to/moodle/mod/myplugin/tests/behat/testsomething.feature&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To run a single scenario:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
vendor/bin/behat --config /path/to/your/CFG_behat_dataroot/behatrun/behat/behat.yml /path/to/moodle/mod/myplugin/tests/behat/testsomething.feature:40&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here, &#039;40&#039; is the line-number of the feature file where the Scenario starts.&lt;br /&gt;
&lt;br /&gt;
=== Parallel runs ===&lt;br /&gt;
For running parallel runs, use following command&lt;br /&gt;
&lt;br /&gt;
 php admin/tool/behat/cli/run.php&lt;br /&gt;
&lt;br /&gt;
Following optional options are available for custom run:&lt;br /&gt;
# &#039;&#039;&#039;--feature&#039;&#039;&#039; Only execute specified feature file (Absolute path of feature file).&lt;br /&gt;
# &#039;&#039;&#039;--suite&#039;&#039;&#039; Features for specified theme will be executed.&lt;br /&gt;
# &#039;&#039;&#039;--replace&#039;&#039;&#039; Replace args string with run process number, useful for output and reruns.&lt;br /&gt;
# &#039;&#039;&#039;--fromrun&#039;&#039;&#039; Execute run starting from (Used for parallel runs on different vms)&lt;br /&gt;
# &#039;&#039;&#039;--torun&#039;&#039;&#039; Execute run till (Used for parallel runs on different vms)&lt;br /&gt;
# Behat options can be passed for filtering features/scenarios:&lt;br /&gt;
#* In case you don&#039;t want to run Javascript tests, use the Behat tags option to skip them, &#039;&#039;&#039;--tags=&amp;quot;~@javascript&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
#* In case you want to run specific scenario, use the Behat name option to run it, &#039;&#039;&#039;--name=&amp;quot;Filter user accounts by role and cohort&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
#* In case you want to run specific feature file, use the Behat feature option to run it, &#039;&#039;&#039;--feature=&amp;quot;/PATH/TO/MOODLE/admin/tests/behat/filter_users.feature&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Example: Initialise and run Behat tests for a custom plugin under a custom theme:&lt;br /&gt;
&lt;br /&gt;
 php admin/tool/behat/cli/init.php --parallel=3 --add-core-features-to-theme=&amp;quot;mytheme&amp;quot;&lt;br /&gt;
 php admin/tool/behat/cli/run.php --tags=&amp;quot;@tool_myplugin&amp;quot; --suite=&amp;quot;mytheme&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Common options for running tests ===&lt;br /&gt;
==== Tests filters ====&lt;br /&gt;
With the &#039;&#039;&#039;--tags&#039;&#039;&#039; or the &#039;&#039;&#039;-name&#039;&#039;&#039; Behat options you can filter which tests are going to run or which ones are going to be skipped. There are a few tags that you might be interested in:&lt;br /&gt;
* &#039;&#039;&#039;@javascript&#039;&#039;&#039;: All the tests that runs in a browser using Javascript; they require Selenium to be running, otherwise an exception will be thrown.&lt;br /&gt;
* &#039;&#039;&#039;@_file_upload&#039;&#039;&#039;: All the tests that involves file uploading or any OS feature that is not 100% part of the browser. They should only be executed when Selenium is running in the same machine where the tests are running.&lt;br /&gt;
* &#039;&#039;&#039;@_alert&#039;&#039;&#039;: All the tests that involves Javascript dialogs (alerts, confirms...) are using a feature that is OS-dependant and out of the browser scope, so they should be tag appropriately as not all browsers manage them properly.&lt;br /&gt;
* &#039;&#039;&#039;@_switch_window&#039;&#039;&#039;: All the tests that are using the &#039;&#039;&#039;I switch to &amp;quot;NAME&amp;quot; window&#039;&#039;&#039; step should be tagged as not all browsers manage them properly.&lt;br /&gt;
* &#039;&#039;&#039;@_switch_iframe&#039;&#039;&#039;: All the tests that are using the &#039;&#039;&#039;I switch to &amp;quot;NAME&amp;quot; iframe&#039;&#039;&#039; steps should be tagged as it is an advanced feature and some browsers may have problems dealing with them&lt;br /&gt;
* &#039;&#039;&#039;@_cross_browser&#039;&#039;&#039;: All the tests that should run against multiple combinations of browsers + OS in a regular basis. The features that are sensitive to different combinations of OS and browsers should be tagges as @_cross_browser.&lt;br /&gt;
* &#039;&#039;&#039;@componentname&#039;&#039;&#039;: Moodle features uses the [https://docs.moodle.org/dev/Frankenstyle Frankenstyle] component name to tag the features according to the Moodle subsystem they belong to.&lt;br /&gt;
&lt;br /&gt;
==== Output formats ====&lt;br /&gt;
Since Moodle 3.1 option for output is:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
--format=pretty --out=/path/to/pretty.txt --format=moodle_progress --out=std&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Before Moodle 3.1 option for output was:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
--format=&#039;moodle_progress,pretty&#039; --out=&#039;,/path/to/pretty.txt&#039;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Following output formats are supported:&lt;br /&gt;
# &#039;&#039;&#039;progress&#039;&#039;&#039;: Prints one character per step.&lt;br /&gt;
# &#039;&#039;&#039;pretty&#039;&#039;&#039;: Prints the feature as is.&lt;br /&gt;
# &#039;&#039;&#039;junit&#039;&#039;&#039;: Outputs the failures in JUnit compatible files.&lt;br /&gt;
# &#039;&#039;&#039;moodle_progress&#039;&#039;&#039;: Prints Moodle branch information and dots for each step.&lt;br /&gt;
# &#039;&#039;&#039;moodle_list&#039;&#039;&#039;: List all scenarios.&lt;br /&gt;
# &#039;&#039;&#039;moodle_stepcount&#039;&#039;&#039;: List all features with total steps in each feature file. Used for parallel run.&lt;br /&gt;
# &#039;&#039;&#039;moodle_screenshot&#039;&#039;&#039;: (since Moodle 3.1) Take screenshot and core dump of each step. With following options you can dump either or both.&lt;br /&gt;
## --format-settings &#039;{&amp;quot;formats&amp;quot;: &amp;quot;image&amp;quot;}&#039;**: will dump image only&lt;br /&gt;
## --format-settings &#039;{&amp;quot;formats&amp;quot;: &amp;quot;html&amp;quot;}&#039;**: will dump html only.&lt;br /&gt;
## --format-settings &#039;{&amp;quot;formats&amp;quot;: &amp;quot;html,image&amp;quot;}&#039;**: will dump both.&lt;br /&gt;
## --format-settings &#039;{&amp;quot;formats&amp;quot;: &amp;quot;html&amp;quot;, &amp;quot;dir_permissions&amp;quot;: &amp;quot;0777&amp;quot;}&#039;**&lt;br /&gt;
If you want to see the failures immediately (rather than waiting ~3 hours for all the tests to finish) then either use the -v option to output a bit more information, or change the output format using --format. Format &#039;pretty&#039; (&#039;&#039;&#039;-f pretty&#039;&#039;&#039;) is sufficient for most cases, as it outputs each step outcomes in the command line making easier to see the progress.&lt;br /&gt;
&lt;br /&gt;
== Advance usage ==&lt;br /&gt;
=== Rerun failed scenarios ===&lt;br /&gt;
With slow systems or parallel run you might see some random failures, to rerun only failed scenarios (to eliminate random failures), use --rerun option&lt;br /&gt;
# &#039;&#039;&#039;Single run:&#039;&#039;&#039; --run=&amp;quot;absolute_path_to_empty_file&amp;quot; (Behat will record failed scenarios in this file, and when run again only failed scenarios will be run)&lt;br /&gt;
# &#039;&#039;&#039;Parallel run:&#039;&#039;&#039; --rerun=&amp;quot;absolute_path_to_empty_file_{runprocess}.txt --replace=&amp;quot;{runprocess}&amp;quot; ({runprocess} will be replaced with the process number for recording fails in the specific run process).&lt;br /&gt;
&#039;&#039;&#039;Since Moodle 3.1 --rerun option don&#039;t accept any value, as it is handled internally by behat&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Running behat with specified theme (Since Moodle 3.2) ===&lt;br /&gt;
You can run behat with any theme installed. To execute behat with specified theme use &#039;&#039;&#039;--suite={THEME_NAME}&#039;&#039;&#039; option, while running behat. By default the features in theme behat folder will be executed for the suite. But if you want to run all core features with the specific theme then initialise acceptance test with --add-core-features-to-theme={THEME_NAME}, e.g.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
php admin/tool/behat/cli/init.php --add-core-features-to-theme=clean&lt;br /&gt;
vendor/bin/behat --suite=clean --tags=&amp;quot;@enrol_foobar&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That is a core theme but it will work with custom theme. No = or quotes needed around the theme name.&lt;br /&gt;
&lt;br /&gt;
Make sure that &amp;lt;tt&amp;gt;$CFG-&amp;gt;theme&amp;lt;/tt&amp;gt; is &#039;&#039;&#039;not set&#039;&#039;&#039; in your config.php.&lt;br /&gt;
&lt;br /&gt;
==== Override behat core context for theme suite ====&lt;br /&gt;
To override behat step definitions so as to run behat with specified theme, you should create a contexts within &#039;&#039;&#039;/theme/{MYTHEME}/tests/behat/&#039;&#039;&#039; with prefix behat_theme_{MYTHEME}_ and suffixed with the context being overridden. For example, if you want to override behat_mod_forum context, then you should create a class /theme/{MYTHEME}/tests/behat/mod_forum/behat_theme_{MYTHEME}_behat_mod_forum.php&lt;br /&gt;
&lt;br /&gt;
==== Blacklist behat context or features to run in theme suite ====&lt;br /&gt;
To blacklist contexts/ features to be executed by theme suite you should create a /theme/{MYTHEME}/tests/behat/blacklist.json file with following format. Following will not use step_definitions from  behat_grade and behat_navigation while running theme suite. Also, scenarios in auth/tests/behat/login.feature and grade/tests/behat/grade_hidden_items.feature won&#039;t be executed with theme suite.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;contexts&amp;quot;: [&lt;br /&gt;
    &amp;quot;behat_grade&amp;quot;,&lt;br /&gt;
    &amp;quot;behat_navigation&amp;quot;,&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;features&amp;quot;: [&lt;br /&gt;
    &amp;quot;auth/tests/behat/login.feature&amp;quot;,&lt;br /&gt;
    &amp;quot;grade/tests/behat/grade_hidden_items.feature&amp;quot;,&lt;br /&gt;
   ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
==== Override core behat selectors ====&lt;br /&gt;
To override behat selectors in specific theme, you should create a class behat_theme_{MYTHEME}_behat_selectors in /theme/{MYTHEME}/tests/behat/behat_theme_{MYTHEME}_behat_selectors.php extending behat_selectors.&lt;br /&gt;
&lt;br /&gt;
=== Use php built in web server ===&lt;br /&gt;
You can use php built-in-web server for executing behat runs. To do so:&lt;br /&gt;
# Open a command line interface and &#039;&#039;&#039;cd /to/your/moodle/dirroot&#039;&#039;&#039;&lt;br /&gt;
# &#039;&#039;&#039;php -S localhost:8000&#039;&#039;&#039; (This is the test site URL that moodle uses by default, if you want to use another one you can override it in config.php with $CFG-&amp;gt;behat_wwwroot attribute; more info in https://docs.moodle.org/dev/Acceptance_testing#Advanced_usage or config-dist.php)&lt;br /&gt;
# Update $CFG-&amp;gt;behat_wwwroot = localhost:8000; in config.php&lt;br /&gt;
&lt;br /&gt;
=== Define custom options for parallel runs ===&lt;br /&gt;
You can set following custom config options for parallel runs via $CFG-&amp;gt;behat_parallel_run. It&#039;s an array of options where 1st array is for 1st run and so on.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
       array (&lt;br /&gt;
           &#039;dbtype&#039; =&amp;gt; &#039;mysqli&#039;,&lt;br /&gt;
           &#039;dblibrary&#039; =&amp;gt; &#039;native&#039;,&lt;br /&gt;
           &#039;dbhost&#039; =&amp;gt; &#039;localhost&#039;,&lt;br /&gt;
           &#039;dbname&#039; =&amp;gt; &#039;moodletest&#039;,&lt;br /&gt;
           &#039;dbuser&#039; =&amp;gt; &#039;moodle&#039;,&lt;br /&gt;
           &#039;dbpass&#039; =&amp;gt; &#039;moodle&#039;,&lt;br /&gt;
           &#039;behat_prefix&#039; =&amp;gt; &#039;mdl_&#039;,&lt;br /&gt;
           &#039;wd_host&#039; =&amp;gt; &#039;http://127.0.0.1:4444/wd/hub&#039;,&lt;br /&gt;
           &#039;behat_wwwroot&#039; =&amp;gt; &#039;http://127.0.0.1/moodle&#039;,&lt;br /&gt;
           &#039;behat_dataroot&#039; =&amp;gt; &#039;/home/example/bht_moodledata&#039;&lt;br /&gt;
       )&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To set different selenium servers for parallel runs, you can use following. NOTE: Running parallel (headless) runs on different selenium servers avoid random focus failures.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    $CFG-&amp;gt;behat_parallel_run = array (&lt;br /&gt;
        array (&#039;wd_host&#039; =&amp;gt; &#039;http://127.0.0.1:4444/wd/hub&#039;),&lt;br /&gt;
        array (&#039;wd_host&#039; =&amp;gt; &#039;http://127.0.0.1:4445/wd/hub&#039;),&lt;br /&gt;
        array (&#039;wd_host&#039; =&amp;gt; &#039;http://127.0.0.1:4446/wd/hub&#039;),&lt;br /&gt;
    );&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Write new tests and behat methods ===&lt;br /&gt;
&lt;br /&gt;
If you want to write tests for your own integration, you can do so by creating new tests with format .feature. Follow instructions in [[Writing_acceptance_tests|this page]] to write new tests. &lt;br /&gt;
&lt;br /&gt;
It is also possible to add new steps the moodle behat integration. In order to do so, you will have to create a new .php class with the prefix &#039;&#039;&#039;behat_&#039;&#039;&#039;. Copy the format from &#039;&#039;&#039;lib\behat\behat_base.php&#039;&#039;&#039;, but set your class to extend the behat_base class instead of the MinkExtension. You can define new behat steps by declaring functions with the appropriate heading. &lt;br /&gt;
&lt;br /&gt;
You will not be  able to use these steps and features right away. Check [[Running_acceptance_test#New_step_definitions_or_features_are_not_executed|this section]] for instructions on how to update the behat integration. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For further information on how to create new steps definitions, check [[Acceptance testing/Custom acceptance steps]].&lt;br /&gt;
&lt;br /&gt;
=== Running acceptance tests with different browser ===&lt;br /&gt;
&lt;br /&gt;
If you follow the steps above, Behat will run with Chrome.&lt;br /&gt;
&lt;br /&gt;
You can get it to run with other browsers. The basic idea is to expand the $CFG-&amp;gt;behat_profiles array in config.php to list more browsers.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
$CFG-&amp;gt;behat_profiles = array(&lt;br /&gt;
   &#039;chrome&#039; =&amp;gt; array(&lt;br /&gt;
       &#039;browser&#039; =&amp;gt; &#039;chrome&#039;,&lt;br /&gt;
       &#039;tags&#039; =&amp;gt; &#039;@javascript&#039;,&lt;br /&gt;
   )&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Acceptance_testing/Browsers|More info about alternative browsers]]&lt;br /&gt;
&lt;br /&gt;
=== Start multiple selenium servers ===&lt;br /&gt;
From command line Start selenium servers at different ports (say 4444, 4445, 4446 for 3 parallel runs)&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
java -jar /path/to/your/selenium/server/selenium-server-standalone-2.NN.N.jar -port 4444 &amp;amp;&lt;br /&gt;
java -jar /path/to/your/selenium/server/selenium-server-standalone-2.NN.N.jar -port 4445 &amp;amp;&lt;br /&gt;
java -jar /path/to/your/selenium/server/selenium-server-standalone-2.NN.N.jar -port 4446&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alternative way of running three Selenium servers in parallel:&lt;br /&gt;
&lt;br /&gt;
 $ printf %d\\n {4444..4446} | xargs -n 1 -P 3 java -jar /path/to/your/selenium/server/selenium-server-standalone-2.NN.N.jar -port&lt;br /&gt;
&lt;br /&gt;
=== Run tests directly in Chrome, with no Selenium ===&lt;br /&gt;
&lt;br /&gt;
Historically, the tests would talk to a Selenium server, which would then tell the target browser what to do. More and more, the browsers themselves contain such a server and you can talk to them directly, which is faster and easier. Work was done to get this working with Chrome in MDL-58948, but it still needs some further setup to get it working, which is detailed in the bug ticket, and which I&#039;ll copy below:&lt;br /&gt;
&lt;br /&gt;
Replace your current behat config with the abve, the api_url is where you&#039;ll talk directly to your Chrome browser.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
$CFG-&amp;gt;behat_config = [&lt;br /&gt;
    &#039;default&#039; =&amp;gt; [&lt;br /&gt;
        &#039;extensions&#039; =&amp;gt; [&lt;br /&gt;
            &#039;DMore\ChromeExtension\Behat\ServiceContainer\ChromeExtension&#039; =&amp;gt; [],&lt;br /&gt;
            &#039;Behat\MinkExtension&#039;                                          =&amp;gt; [&lt;br /&gt;
                &#039;browser_name&#039; =&amp;gt; &#039;chrome&#039;,&lt;br /&gt;
                &#039;base_url&#039;     =&amp;gt; $CFG-&amp;gt;behat_wwwroot,&lt;br /&gt;
                &#039;goutte&#039;       =&amp;gt; null,&lt;br /&gt;
                &#039;selenium2&#039;    =&amp;gt; null,&lt;br /&gt;
                &#039;sessions&#039;     =&amp;gt; [&lt;br /&gt;
                    &#039;javascript&#039; =&amp;gt; [&lt;br /&gt;
                        &#039;chrome&#039; =&amp;gt; [&lt;br /&gt;
                            &#039;api_url&#039; =&amp;gt; &#039;http://localhost:9222&#039;&lt;br /&gt;
                        ]&lt;br /&gt;
                    ]&lt;br /&gt;
                ]&lt;br /&gt;
            ]&lt;br /&gt;
        ]&lt;br /&gt;
    ],&lt;br /&gt;
];&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Use composer to install two more required libraries:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
composer require --dev dmore/behat-chrome-extension&lt;br /&gt;
composer require --dev dmore/chrome-mink-driver&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you try to run the tests it will tell you that Chrome isn&#039;t running, in a second tab run the following to start Chrome (or chromium-browser on Ubuntu)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;chrome --disable-gpu --headless --remote-debugging-address=0.0.0.0 --remote-debugging-port=9222&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is running headless so you won&#039;t see any windows pop up as the tests run, though it runs in the other mode too.&lt;br /&gt;
&lt;br /&gt;
Behat should now run as before, but faster.&lt;br /&gt;
&lt;br /&gt;
=== Using Docker to start selenium server ===&lt;br /&gt;
==== What is Docker ====&lt;br /&gt;
Docker is a app container,  it&#039;s a kind of virtual machine, but only for one app, service,  so you can download&lt;br /&gt;
a docker image and run a selenium server without worry in how to configure selenium in your machine, one for chrome, others for firefox, you either don&#039;t need to install the browsers in your machine&lt;br /&gt;
To install docker follow this link; https://docs.docker.com/engine/installation/&lt;br /&gt;
&lt;br /&gt;
==== Selenium docker images ====&lt;br /&gt;
There is many docker images available,  for many browser, the complete list is in https://hub.docker.com/u/selenium/&lt;br /&gt;
for moodle you can use standalone version.&lt;br /&gt;
You can download  specific selenium version too,  for example,  for firefox,  moodle recommend selenium 2.53.1, see: [https://docs.moodle.org/dev/Acceptance_testing/Browsers/Working_combinations_of_OS%2BBrowser%2Bselenium What version do I need?]&lt;br /&gt;
&lt;br /&gt;
so  the command will be:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
docker run -d -p4444:4444 selenium/standalone-firefox:2.53.1-beryllium&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
to see all available version click in tags.   For firefox you can find at: https://hub.docker.com/r/selenium/standalone-firefox/tags/&lt;br /&gt;
&lt;br /&gt;
==== Change config.php file ====&lt;br /&gt;
In config.php file you must change the $CFG-&amp;gt;behat_wwwroot=   to your network card (NIC) ip address,  you can&#039;t use &lt;br /&gt;
localhost , 127.0.0.1, ...  or selenium docker server  will fail&lt;br /&gt;
&lt;br /&gt;
=== Increasing timeouts ===&lt;br /&gt;
&lt;br /&gt;
You may see errors such as:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
Javascript code and/or AJAX requests are not ready after 10 seconds. &lt;br /&gt;
There is a Javascript error or the code is extremely slow.&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sometimes this indicates a genuine problem with the code, but if you are using a slow computer, it could just mean that the browser was not yet ready. You may find that the test works if you run it again. If you get this error frequently, it might be useful to increase the timeout.&lt;br /&gt;
&lt;br /&gt;
It is possible to increase this timeout by adding a line in your config.php. (Requires Moodle versions 3.5 (from 3.5.6), 3.6 (from 3.6.4), or 3.7+.)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
$CFG-&amp;gt;behat_increasetimeout = 2;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will increase all the timeouts by a factor of 2; if that isn&#039;t sufficient, you could use 3. &lt;br /&gt;
&lt;br /&gt;
Increasing timeouts will make tests run a bit slower (because there are points where Behat waits up to a timeout to make sure something doesn&#039;t happen) so don&#039;t do this unless you need to.&lt;br /&gt;
&lt;br /&gt;
== NOTE ==&lt;br /&gt;
# Start the Selenium server (in case you want to run tests that involves Javascript)&lt;br /&gt;
#* (See http://www.installationpage.com/selenium/how-to-run-selenium-headless-firefox-in-ubuntu/ for running &#039;headless&#039; Firefox and xvfm in a server environment)&lt;br /&gt;
#* Open another command line interface and &#039;&#039;&#039;java -jar /path/to/your/selenium/server/selenium-server-standalone-2.NN.N.jar&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Disable acceptance test environment ===&lt;br /&gt;
if you want to prevent access to test environment&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
php admin/tool/behat/cli/util.php --disable&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Note that if you have the HTTP_PROXY environment variable set, which you may have had to do to run composer, then you also need to set NO_PROXY=localhost.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Trouble shooting ==&lt;br /&gt;
&lt;br /&gt;
=== New step definitions or features are not executed === &lt;br /&gt;
If you are adding new tests or steps definitions update the tests list&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
php admin/tool/behat/cli/util.php --enable&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&#039;&#039;&#039; For parallel runs, all options for initialising parallel runs are valid &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Tests are failing ===&lt;br /&gt;
&lt;br /&gt;
If you followed all the steps and you receive an unknown weird error probably your browser version is not compatible with the Selenium version you are running.  Please refer Working combinations to ensure you have correct [[Acceptance_testing/Browsers#Working_combinations_of_OS.2BBrowser.2Bselenium]] of them to run acceptance test.&lt;br /&gt;
&lt;br /&gt;
=== The tests are failing, and the error message is completely useless ===&lt;br /&gt;
&lt;br /&gt;
For example, it just says &amp;quot;Error writing to database&amp;quot; with no stack trace.&lt;br /&gt;
&lt;br /&gt;
Add -vv command-line option to get very verbose output.&lt;br /&gt;
&lt;br /&gt;
=== Errors during setup (before test are launched) ===&lt;br /&gt;
Typical errors are:&lt;br /&gt;
* Behat requirement not satisfied: http://127.0.0.1/m/stable_master is not available, ensure you specified correct url and that the server is set up and started.&lt;br /&gt;
* Behat is configured but not enabled on this test site.&lt;br /&gt;
&lt;br /&gt;
In order to fix those errors please check that: the behat_dataroot has correct write permissions and that the $CFG-&amp;gt;behat* variables are placed before the lib/setup.php include:&lt;br /&gt;
 require_once(__DIR__ . &#039;/lib/setup.php&#039;);&lt;br /&gt;
&lt;br /&gt;
=== Selenium server is not running ===&lt;br /&gt;
==== Chrome specific ====&lt;br /&gt;
&lt;br /&gt;
If you are using chrome, you need to ensure that the driver matches the version of the installed chrome browser – which may change on OS updates/upgrades.  Moodle or Selenium will not give the appropriate message – see [https://tracker.moodle.org/browse/MDL-67659/ MDL-67659].  One solution is the one suggested in the issue and use Andrew Nicols’ [https://github.com/andrewnicols/chromedriver-wrapper/  Chromedriver Wrapper] which will ensure you have the appropriate driver before running the tests.&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
* Vagrant profile with Moodle and Behat preconfigured: https://github.com/mackensen/moodle-hat&lt;br /&gt;
* Docker containers for Moodle Developers and Behat: https://github.com/moodlehq/moodle-docker&lt;br /&gt;
* Docker environment with Behat preconfigured : https://github.com/tobiga/docker_moodle_environment&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[Acceptance testing for the mobile app]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Quality Assurance]][[Category:Behat]]&lt;/div&gt;</summary>
		<author><name>Bawjaws</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Grunt&amp;diff=50974</id>
		<title>Grunt</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Grunt&amp;diff=50974"/>
		<updated>2016-10-07T09:03:56Z</updated>

		<summary type="html">&lt;p&gt;Bawjaws: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Moodle 2.9}}&lt;br /&gt;
&lt;br /&gt;
Grunt is a command line tool used to prepare our javascript and less-generated css for production usage. After making any change to javascript or less files in Moodle, you must run grunt to lint, minify and package the javascript/css properly so that it can be served by Moodle.&lt;br /&gt;
&lt;br /&gt;
== Install grunt ==&lt;br /&gt;
The Javascript modules (AMD and YUI) and less css in Moodle must be processed by some build tools before they will be visible to your web browser. We use &amp;quot;[http://gruntjs.com/ grunt]&amp;quot; as a build tool to wrap our different processes. Grunt is a build tool written in Javascript that runs in the &amp;quot;[http://nodejs.org/ nodejs]&amp;quot; environment. This means you first have to install nodejs - and it&#039;s package manager &amp;quot;[https://www.npmjs.com/ npm]&amp;quot;. The details of how to install those packages will vary by operating system, but on Linux it&#039;s likely to be: &lt;br /&gt;
 apt-get install nodejs npm&lt;br /&gt;
See also: [http://askubuntu.com/questions/594656/how-to-install-the-latest-versions-of-nodejs-and-npm-for-ubuntu-14-04-lts/711976 how to install the latest version of nodejs and npm for ubuntu 14.04]&lt;br /&gt;
&lt;br /&gt;
There are downloadable packages for other operating systems here: http://nodejs.org/download/. &lt;br /&gt;
&lt;br /&gt;
Once this is done, you can run the command: &lt;br /&gt;
 npm install&lt;br /&gt;
from the top of the Moodle directory to install all of the required tools.&lt;br /&gt;
&lt;br /&gt;
You also need to install the grunt-cli package globally in order to have a &amp;quot;grunt&amp;quot; command in your path. To do this run:&lt;br /&gt;
 npm install -g grunt-cli&lt;br /&gt;
&lt;br /&gt;
== Running grunt ==&lt;br /&gt;
Typical commands:&lt;br /&gt;
&lt;br /&gt;
 grunt amd               # Short-cut for grunt jshit uglify, rebuild all AMD modules.&lt;br /&gt;
 grunt shifter           # Run shifter&lt;br /&gt;
 grunt js                # Short-cut for grunt amd shifter&lt;br /&gt;
 &lt;br /&gt;
 grunt css               # Run less&lt;br /&gt;
 grunt                   # Try to do the right thing:&lt;br /&gt;
                         # * If you are in a folder called amd, do grunt amd&lt;br /&gt;
                         # * If you are in a folder called yui/src/something, do grunt shifter&lt;br /&gt;
                         # * Otherwise build everything (grunt css js).&lt;br /&gt;
 &lt;br /&gt;
 grunt watch             # Watch for changes and re-run grunt tasks depending on what file changes&lt;br /&gt;
&lt;br /&gt;
On Linux/Mac it will build everything in the current folder and below. On Windows, you need to specify the path on the command line like &amp;lt;tt&amp;gt;--root=admin/tool/templatelibrary&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Using Grunt in additional plugins ==&lt;br /&gt;
&lt;br /&gt;
You may want to use Grunt for performing tasks in your custom Moodle plugins. For building AMD and YUI modules in your plugin, the standard configuration Gruntfile.js located in the Moodle root should work well. For building CSS files from LESS templates, you will have to set up a separate Grunt installation in the root of your plugin.&lt;br /&gt;
&lt;br /&gt;
If you do not have it yet, create the package.json file in the root of your plugin:&lt;br /&gt;
&lt;br /&gt;
    {&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;moodle-plugintype_pluginname&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
Install grunt, grunt less and grunt watch modules. Note that you should put the folder node_modules into your plugin&#039;s .gitignore file, too.&lt;br /&gt;
&lt;br /&gt;
    $ cd /path/to/your/plugin/root&lt;br /&gt;
    $ npm install --save-dev grunt grunt-contrib-less grunt-contrib-watch grunt-load-gruntfile&lt;br /&gt;
&lt;br /&gt;
Create a Gruntfile.js in the root of your plugin and configure the task for building CSS files from LESS:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code javascript&amp;gt;&lt;br /&gt;
&amp;quot;use strict&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
module.exports = function (grunt) {&lt;br /&gt;
&lt;br /&gt;
    // We need to include the core Moodle grunt file too, otherwise we can&#039;t run tasks like &amp;quot;amd&amp;quot;.&lt;br /&gt;
    require(&amp;quot;grunt-load-gruntfile&amp;quot;)(grunt);&lt;br /&gt;
    grunt.loadGruntfile(&amp;quot;../../Gruntfile.js&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    // Load all grunt tasks.&lt;br /&gt;
    grunt.loadNpmTasks(&amp;quot;grunt-contrib-less&amp;quot;);&lt;br /&gt;
    grunt.loadNpmTasks(&amp;quot;grunt-contrib-watch&amp;quot;);&lt;br /&gt;
    grunt.loadNpmTasks(&amp;quot;grunt-contrib-clean&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    grunt.initConfig({&lt;br /&gt;
        watch: {&lt;br /&gt;
            // If any .less file changes in directory &amp;quot;less&amp;quot; then run the &amp;quot;less&amp;quot; task.&lt;br /&gt;
            files: &amp;quot;less/*.less&amp;quot;,&lt;br /&gt;
            tasks: [&amp;quot;less&amp;quot;]&lt;br /&gt;
        },&lt;br /&gt;
        less: {&lt;br /&gt;
            // Production config is also available.&lt;br /&gt;
            development: {&lt;br /&gt;
                options: {&lt;br /&gt;
                    // Specifies directories to scan for @import directives when parsing.&lt;br /&gt;
                    // Default value is the directory of the source, which is probably what you want.&lt;br /&gt;
                    paths: [&amp;quot;less/&amp;quot;],&lt;br /&gt;
                    compress: true&lt;br /&gt;
                },&lt;br /&gt;
                files: {&lt;br /&gt;
                    &amp;quot;styles.css&amp;quot;: &amp;quot;less/styles.less&amp;quot;&lt;br /&gt;
                }&lt;br /&gt;
            },&lt;br /&gt;
        }&lt;br /&gt;
    });&lt;br /&gt;
    // The default task (running &amp;quot;grunt&amp;quot; in console).&lt;br /&gt;
    grunt.registerTask(&amp;quot;default&amp;quot;, [&amp;quot;less&amp;quot;]);&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now running &amp;quot;grunt&amp;quot; or &amp;quot;grunt less&amp;quot; in your plugin root folder will compile the file less/styles.less and saves it as styles.css. Running &amp;quot;grunt watch&amp;quot; will watch the less/*.less files and if some is changed, it will immediately rebuild the CSS file.&lt;br /&gt;
&lt;br /&gt;
If you are working on a custom theme, you may have multiple less/*.less files that you want to compile to their style/*.css counterparts. You can either define an explicit list all such file pairs, or let that list be created for you by making use of [http://gruntjs.com/configuring-tasks#building-the-files-object-dynamically expand:true feature] of gruntfile.js:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code javascript&amp;gt;&lt;br /&gt;
// This dynamically creates the list of files to be processed.&lt;br /&gt;
files: [&lt;br /&gt;
    {   &lt;br /&gt;
        expand: true,&lt;br /&gt;
        cwd: &amp;quot;less/&amp;quot;,&lt;br /&gt;
        src: &amp;quot;*.less&amp;quot;,&lt;br /&gt;
        dest: &amp;quot;style/&amp;quot;,&lt;br /&gt;
        ext: &amp;quot;.css&amp;quot;&lt;br /&gt;
    }   &lt;br /&gt;
]   &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[YUI/Shifter]]&lt;br /&gt;
* [[Javascript Modules]]&lt;br /&gt;
* [[LESS]]&lt;br /&gt;
&lt;br /&gt;
[[Category:AJAX]]&lt;br /&gt;
[[Category:Javascript]]&lt;/div&gt;</summary>
		<author><name>Bawjaws</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Grunt&amp;diff=50972</id>
		<title>Grunt</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Grunt&amp;diff=50972"/>
		<updated>2016-10-06T17:01:36Z</updated>

		<summary type="html">&lt;p&gt;Bawjaws: /* Using Grunt in additional plugins */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Moodle 2.9}}&lt;br /&gt;
&lt;br /&gt;
Grunt is a command line tool used to prepare our javascript and less-generated css for production usage. After making any change to javascript or less files in Moodle, you must run grunt to lint, minify and package the javascript/css properly so that it can be served by Moodle.&lt;br /&gt;
&lt;br /&gt;
== Install grunt ==&lt;br /&gt;
The Javascript modules (AMD and YUI) and less css in Moodle must be processed by some build tools before they will be visible to your web browser. We use &amp;quot;[http://gruntjs.com/ grunt]&amp;quot; as a build tool to wrap our different processes. Grunt is a build tool written in Javascript that runs in the &amp;quot;[http://nodejs.org/ nodejs]&amp;quot; environment. This means you first have to install nodejs - and it&#039;s package manager &amp;quot;[https://www.npmjs.com/ npm]&amp;quot;. The details of how to install those packages will vary by operating system, but on Linux it&#039;s likely to be: &lt;br /&gt;
 apt-get install nodejs npm&lt;br /&gt;
See also: [http://askubuntu.com/questions/594656/how-to-install-the-latest-versions-of-nodejs-and-npm-for-ubuntu-14-04-lts/711976 how to install the latest version of nodejs and npm for ubuntu 14.04]&lt;br /&gt;
&lt;br /&gt;
There are downloadable packages for other operating systems here: http://nodejs.org/download/. &lt;br /&gt;
&lt;br /&gt;
Once this is done, you can run the command: &lt;br /&gt;
 npm install&lt;br /&gt;
from the top of the Moodle directory to install all of the required tools.&lt;br /&gt;
&lt;br /&gt;
You also need to install the grunt-cli package globally in order to have a &amp;quot;grunt&amp;quot; command in your path. To do this run:&lt;br /&gt;
 npm install -g grunt-cli&lt;br /&gt;
&lt;br /&gt;
== Running grunt ==&lt;br /&gt;
Typical commands:&lt;br /&gt;
&lt;br /&gt;
 grunt amd               # Short-cut for grunt jshit uglify, rebuild all AMD modules.&lt;br /&gt;
 grunt shifter           # Run shifter&lt;br /&gt;
 grunt js                # Short-cut for grunt amd shifter&lt;br /&gt;
 &lt;br /&gt;
 grunt css               # Run less&lt;br /&gt;
 grunt                   # Try to do the right thing:&lt;br /&gt;
                         # * If you are in a folder called amd, do grunt amd&lt;br /&gt;
                         # * If you are in a folder called yui/src/something, do grunt shifter&lt;br /&gt;
                         # * Otherwise build everything (grunt css js).&lt;br /&gt;
 &lt;br /&gt;
 grunt watch             # Watch for changes and re-run grunt tasks depending on what file changes&lt;br /&gt;
&lt;br /&gt;
On Linux/Mac it will build everything in the current folder and below. On Windows, you need to specify the path on the command line like &amp;lt;tt&amp;gt;--root=admin/tool/templatelibrary&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Using Grunt in additional plugins ==&lt;br /&gt;
&lt;br /&gt;
You may want to use Grunt for performing tasks in your custom Moodle plugins. For building AMD and YUI modules in your plugin, the standard configuration Gruntfile.js located in the Moodle root should work well. For building CSS files from LESS templates, you will have to set up a separate Grunt installation in the root of your plugin.&lt;br /&gt;
&lt;br /&gt;
If you do not have it yet, create the package.json file in the root of your plugin:&lt;br /&gt;
&lt;br /&gt;
    {&lt;br /&gt;
        &amp;quot;name&amp;quot;: &amp;quot;moodle-plugintype_pluginname&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
Install grunt, grunt less and grunt watch modules. Note that you should put the folder node_modules into your plugin&#039;s .gitignore file, too.&lt;br /&gt;
&lt;br /&gt;
    $ cd /path/to/your/plugin/root&lt;br /&gt;
    $ npm install --save-dev grunt grunt-contrib-less grunt-contrib-watch&lt;br /&gt;
&lt;br /&gt;
Create a Gruntfile.js in the root of your plugin and configure the task for building CSS files from LESS:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code javascript&amp;gt;&lt;br /&gt;
&amp;quot;use strict&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
module.exports = function (grunt) {&lt;br /&gt;
&lt;br /&gt;
    // We need to include the core Moodle grunt file too, otherwise we can&#039;t run tasks like &amp;quot;amd&amp;quot;.&lt;br /&gt;
    require(&amp;quot;grunt-load-gruntfile&amp;quot;)(grunt);&lt;br /&gt;
    grunt.loadGruntfile(&amp;quot;../../Gruntfile.js&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    // Load all grunt tasks.&lt;br /&gt;
    grunt.loadNpmTasks(&amp;quot;grunt-contrib-less&amp;quot;);&lt;br /&gt;
    grunt.loadNpmTasks(&amp;quot;grunt-contrib-watch&amp;quot;);&lt;br /&gt;
    grunt.loadNpmTasks(&amp;quot;grunt-contrib-clean&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    grunt.initConfig({&lt;br /&gt;
        watch: {&lt;br /&gt;
            // If any .less file changes in directory &amp;quot;less&amp;quot; then run the &amp;quot;less&amp;quot; task.&lt;br /&gt;
            files: &amp;quot;less/*.less&amp;quot;,&lt;br /&gt;
            tasks: [&amp;quot;less&amp;quot;]&lt;br /&gt;
        },&lt;br /&gt;
        less: {&lt;br /&gt;
            // Production config is also available.&lt;br /&gt;
            development: {&lt;br /&gt;
                options: {&lt;br /&gt;
                    // Specifies directories to scan for @import directives when parsing.&lt;br /&gt;
                    // Default value is the directory of the source, which is probably what you want.&lt;br /&gt;
                    paths: [&amp;quot;less/&amp;quot;],&lt;br /&gt;
                    compress: true&lt;br /&gt;
                },&lt;br /&gt;
                files: {&lt;br /&gt;
                    &amp;quot;styles.css&amp;quot;: &amp;quot;less/styles.less&amp;quot;&lt;br /&gt;
                }&lt;br /&gt;
            },&lt;br /&gt;
        }&lt;br /&gt;
    });&lt;br /&gt;
    // The default task (running &amp;quot;grunt&amp;quot; in console).&lt;br /&gt;
    grunt.registerTask(&amp;quot;default&amp;quot;, [&amp;quot;less&amp;quot;]);&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now running &amp;quot;grunt&amp;quot; or &amp;quot;grunt less&amp;quot; in your plugin root folder will compile the file less/styles.less and saves it as styles.css. Running &amp;quot;grunt watch&amp;quot; will watch the less/*.less files and if some is changed, it will immediately rebuild the CSS file.&lt;br /&gt;
&lt;br /&gt;
If you are working on a custom theme, you may have multiple less/*.less files that you want to compile to their style/*.css counterparts. You can either define an explicit list all such file pairs, or let that list be created for you by making use of [http://gruntjs.com/configuring-tasks#building-the-files-object-dynamically expand:true feature] of gruntfile.js:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code javascript&amp;gt;&lt;br /&gt;
// This dynamically creates the list of files to be processed.&lt;br /&gt;
files: [&lt;br /&gt;
    {   &lt;br /&gt;
        expand: true,&lt;br /&gt;
        cwd: &amp;quot;less/&amp;quot;,&lt;br /&gt;
        src: &amp;quot;*.less&amp;quot;,&lt;br /&gt;
        dest: &amp;quot;style/&amp;quot;,&lt;br /&gt;
        ext: &amp;quot;.css&amp;quot;&lt;br /&gt;
    }   &lt;br /&gt;
]   &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[YUI/Shifter]]&lt;br /&gt;
* [[Javascript Modules]]&lt;br /&gt;
* [[LESS]]&lt;br /&gt;
&lt;br /&gt;
[[Category:AJAX]]&lt;br /&gt;
[[Category:Javascript]]&lt;/div&gt;</summary>
		<author><name>Bawjaws</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Collaborate&amp;diff=48485</id>
		<title>Collaborate</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Collaborate&amp;diff=48485"/>
		<updated>2015-08-31T16:15:12Z</updated>

		<summary type="html">&lt;p&gt;Bawjaws: Initial placeholder text for installing, configuration.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A module for integration  with Blackboard Collaborate.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== How to Install the Collaborate Module ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Before you can install Collaborate, you must download the zip file.&lt;br /&gt;
&lt;br /&gt;
# Go to http://behind.blackboard.com.&lt;br /&gt;
# Sign in with your Behind the Blackboard account. Note: If you have a pre-existing account in our Bb Support Portal, use your email address to sign in. If you are a new client, we have setup access for your email address that we have on file.&lt;br /&gt;
# Once logged in, select Collaborate from the What’s New for… drop-down list.&lt;br /&gt;
# In the Self Service panel click Downloads.&lt;br /&gt;
# Select your Collaborate product.&lt;br /&gt;
# Select the appropriate integration component file for your CMS type and Blackboard Collaborate product to download.&lt;br /&gt;
# Select the appropriate installation guide for your integration under Related Documentation.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
== How to Configure the Collaborate Module ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# From the Moodle Admin Menu Select : Site Administration &amp;gt; Plugins &amp;gt; Activity Modules &amp;gt; Collaborate&lt;br /&gt;
# Use the information provided to you to complete the configuration&lt;/div&gt;</summary>
		<author><name>Bawjaws</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Collaborate&amp;diff=48484</id>
		<title>Collaborate</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Collaborate&amp;diff=48484"/>
		<updated>2015-08-31T16:04:05Z</updated>

		<summary type="html">&lt;p&gt;Bawjaws: Initial page creation, for linking from readme&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A module for integration  with Blackboard Collaborate.&lt;/div&gt;</summary>
		<author><name>Bawjaws</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=HTML5_player&amp;diff=47520</id>
		<title>HTML5 player</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=HTML5_player&amp;diff=47520"/>
		<updated>2015-03-19T12:18:35Z</updated>

		<summary type="html">&lt;p&gt;Bawjaws: /* Comparison Matrix */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Work in progress}}&lt;br /&gt;
{{Infobox Project&lt;br /&gt;
|name = HTML5 Player with flash fallback&lt;br /&gt;
|state = In Development&lt;br /&gt;
|tracker = https://tracker.moodle.org/browse/MDL-38158&lt;br /&gt;
|discussion = https://moodle.org/mod/forum/discuss.php?d=222753#p1110024&lt;br /&gt;
|assignee = [https://tracker.moodle.org/secure/ViewProfile.jspa?name=kabalin Ruslan Kabalin]&lt;br /&gt;
}}&lt;br /&gt;
{{Moodle 2.x}}&lt;br /&gt;
&lt;br /&gt;
== Project goals ==&lt;br /&gt;
&lt;br /&gt;
The purpose of this document is to choose HTML5 player with flash fallback for integration in Moodle and plan its implementation.&lt;br /&gt;
&lt;br /&gt;
The aim of this change is to reach a consistent look of the player among different platforms and browsers, as well as making sure that player starts using flash if html5 is not supported by browser for the given format. Another aim is to improve accessibility and usability, enhance customisation.&lt;br /&gt;
&lt;br /&gt;
== Considerations ==&lt;br /&gt;
&lt;br /&gt;
* Usability of the player - is it easy to use it and intuitively understand how to use controls?&lt;br /&gt;
* Accessibility of the player - possibility of keyboard navigation, subtitles, support?&lt;br /&gt;
* Appearance of the player - can its interface be modified, themes support, RTL?&lt;br /&gt;
* Consistency among browsers - does player look the same?&lt;br /&gt;
* Audio support - can player handle HTML5 &amp;lt;audio&amp;gt; tag?&lt;br /&gt;
* Mobile platforms support - does player also work on iOS and Android?&lt;br /&gt;
* Streaming media support (including adaptive-bitrate delivery) - can player handle RTMP, Apple HLS, Adobe HDS, Microsoft HSS?&lt;br /&gt;
* Plugins support - can we use or develop community plugins easily?&lt;br /&gt;
* Embedding support - so users could post media content outside Moodle, if permitted.&lt;br /&gt;
* Maintainability of the links between the player and Moodle - how much work will we need to do every time we upgrade?&lt;br /&gt;
&lt;br /&gt;
== Candidates ==&lt;br /&gt;
&lt;br /&gt;
* [http://flowplayer.org/ Flowplayer HTML5]&lt;br /&gt;
* [http://www.videojs.com/ Video.JS]&lt;br /&gt;
* [http://www.projekktor.com/ Projekktor]&lt;br /&gt;
* [http://mediaelementjs.com/ MediaElement.js]&lt;br /&gt;
* ?Are there other alternatives?&lt;br /&gt;
&lt;br /&gt;
== Comparison Matrix ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;nicetable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
! [[#Flowplayer_HTML5|Flowplayer HTML5]]&lt;br /&gt;
! [[#Video.JS|Video.JS]]&lt;br /&gt;
! [[#Projekktor|Projekktor]]&lt;br /&gt;
! [[#MediaElement.js|MediaElement.js]]&lt;br /&gt;
! No Player&lt;br /&gt;
|-&lt;br /&gt;
! Accessible Player:&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Keyboard control&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes (http://accessibility.oit.ncsu.edu/blog/2013/05/09/accessible-video-js-player-available-on-global-accessibility-awareness-day/) This was instructed by Greg Krause, one of the key accessibility advisors for Moodle.&lt;br /&gt;
| Yes (configurable)&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Subtitles support&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes (via plugin)&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes (see http://caniuse.com/webvtt)&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Touch interface&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
! Appearance:&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Skins&lt;br /&gt;
| Yes (via CSS)&lt;br /&gt;
| Yes (via CSS)&lt;br /&gt;
| Yes (via CSS)&lt;br /&gt;
| Yes (via CSS)&lt;br /&gt;
| Yes (via CSS)&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* CSS customisation&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* RTL support&lt;br /&gt;
| Yes&lt;br /&gt;
| No&lt;br /&gt;
| No&lt;br /&gt;
| Unknown (CSS, so I guess so...)&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
! Mobile platforms:&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* iOS&lt;br /&gt;
| Yes&lt;br /&gt;
| No&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Android&lt;br /&gt;
| Yes&lt;br /&gt;
| No&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
! Streaming protocols:&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* RTMP&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes (via playlist)&lt;br /&gt;
| Yes&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Adaptive HTTP&lt;br /&gt;
| HLS&lt;br /&gt;
| HLS (via plugin)&lt;br /&gt;
| HLS (via playlist)&lt;br /&gt;
| HLS&lt;br /&gt;
| via Media Source Extension&lt;br /&gt;
|-&lt;br /&gt;
! Audio player&lt;br /&gt;
| No&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border-bottom: 2px solid;&amp;quot; | Embedding support&lt;br /&gt;
| style=&amp;quot;border-bottom: 2px solid;&amp;quot; | Yes (configurable)&lt;br /&gt;
| style=&amp;quot;border-bottom: 2px solid;&amp;quot; | Yes (via addThis plugin)&lt;br /&gt;
| style=&amp;quot;border-bottom: 2px solid;&amp;quot; | Yes (via plugin)&lt;br /&gt;
| style=&amp;quot;border-bottom: 2px solid;&amp;quot; | Yes&lt;br /&gt;
| style=&amp;quot;border-bottom: 2px solid;&amp;quot; | No&lt;br /&gt;
|-&lt;br /&gt;
! License&lt;br /&gt;
| GPL v3 (with additional terms)&lt;br /&gt;
| Apache 2&lt;br /&gt;
| GPL v3&lt;br /&gt;
| MIT&lt;br /&gt;
| no extra code needed&lt;br /&gt;
|-&lt;br /&gt;
! JS library&lt;br /&gt;
| jQuery&lt;br /&gt;
| -&lt;br /&gt;
| jQuery&lt;br /&gt;
| jQuery&lt;br /&gt;
| none required&lt;br /&gt;
|-&lt;br /&gt;
! Plugins infrastructure&lt;br /&gt;
| No&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
! Flash fallback player&lt;br /&gt;
| Flowplayer Flash&lt;br /&gt;
| video-js flash&lt;br /&gt;
| StobeMediaPlayback (but can be jarisplayer or some other).&lt;br /&gt;
| Flash and Silverlight (for .wmv support) fallback, used to provide the HTML5 video/audio elements.&lt;br /&gt;
| The Video tag can contain fallback content (e.g. Flash object) for browsers that don&#039;t support it at all (http://camendesign.com/code/video_for_everybody), but not based on codec support.&lt;br /&gt;
|-&lt;br /&gt;
! API&lt;br /&gt;
| Yes (plus window.flowplayer object)&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Flowplayer HTML5 ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Pros:&#039;&#039;&#039;&lt;br /&gt;
* Good looking player, resembles existing flash flowplayer in Moodle (with &amp;quot;functional&amp;quot; skin)&lt;br /&gt;
* Extensive customisation (via CSS3 skins and configuration object)&lt;br /&gt;
* Streaming support (RTMP, HLS)&lt;br /&gt;
* Good accessibility features&lt;br /&gt;
* Configurable embedding functionality&lt;br /&gt;
* Existing flash flowplayer can be configured for fallback (the appearance of player will not be affected).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Cons:&#039;&#039;&#039;&lt;br /&gt;
* Require jQuery for functioning&lt;br /&gt;
* Flowplayer logo remains on screen&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Technical notes (lessons learned from the prototypes)&#039;&#039;&#039;&lt;br /&gt;
* Player initialisation is done using wrapper around &amp;lt;video&amp;gt;.&lt;br /&gt;
* width and height attributes in video tag are ignored, player size is configured via wrapper size only.&lt;br /&gt;
* RTMP server connection is configured via data-rtmp attribute in wrapper or player init config parameter, actual path the file specified in src attribute of source item.&lt;br /&gt;
* &amp;lt;source type=&amp;quot;video/flash&amp;quot;... dummy MIME type to force using plash player for whatever content.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Missing features&#039;&#039;&#039;&lt;br /&gt;
* Plugins infrastructure&lt;br /&gt;
* No audio support&lt;br /&gt;
&lt;br /&gt;
=== Video.JS ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Pros:&#039;&#039;&#039;&lt;br /&gt;
* No logo on screen.&lt;br /&gt;
* Extensive API.&lt;br /&gt;
* No extra JS library needed.&lt;br /&gt;
* Many plugins.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Cons:&#039;&#039;&#039;&lt;br /&gt;
* Poor documentation&lt;br /&gt;
* RTMP requires non-standard MIME.&lt;br /&gt;
* Android and iOS override Video.JS with own player, when not overridden, content is not playing.&lt;br /&gt;
* No RTL.&lt;br /&gt;
* HLS support via plugin (many files to include, external contributor see https://github.com/videojs/videojs-contrib-hls).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Technical notes (lessons learned from the prototypes)&#039;&#039;&#039;&lt;br /&gt;
* Player initialisation is done using &amp;lt;video&amp;gt; tag directly (no wrapper needed).&lt;br /&gt;
* RTMP server connection and path specified as single URI in src attribute of source item, &#039;&amp;amp;&#039; character is used as server connection and path divider.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Missing features&#039;&#039;&#039;&lt;br /&gt;
* Embedded HLS support.&lt;br /&gt;
&lt;br /&gt;
=== MediaElement.js ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Pros:&#039;&#039;&#039;&lt;br /&gt;
* Flash fall-forward - uses Flash/Silverlight to provide the HTML5 MediaElement API.&lt;br /&gt;
* Consistent HTML/CSS Player&lt;br /&gt;
* No logo on screen.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Cons:&#039;&#039;&#039;&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Technical notes (lessons learned from the prototypes)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Missing features&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
=== Projekktor ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Pros:&#039;&#039;&#039;&lt;br /&gt;
* No logo on screen.&lt;br /&gt;
* Well documented API.&lt;br /&gt;
* Media RSS support.&lt;br /&gt;
* Possibility to choose flash player for fallback (included by default are StrobeMediaPlayback and Jarisplayer, both Open Source).&lt;br /&gt;
* Platform preference order selection (e.g. browser, ios, android, flash, native).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Cons:&#039;&#039;&#039;&lt;br /&gt;
* Uses flash where it is not supposed to (e.g. mp4 in Chrome).&lt;br /&gt;
* Issues on ios and android (suggests to download file when play button is pressed).&lt;br /&gt;
* RTMP only work if defined via playlist rather than in &amp;lt;source&amp;gt; tags.&lt;br /&gt;
* Subtitles plugin is not free.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Technical notes (lessons learned from the prototypes)&#039;&#039;&#039;&lt;br /&gt;
* Player initialisation is done using &amp;lt;video&amp;gt; tag directly (no wrapper needed).&lt;br /&gt;
* Make sure &amp;lt;video&amp;gt; tag has class attribute with &#039;projekktor&#039; value (even if you initialise it by ID of the element), player will not work properly otherwise.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Missing features&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== HTML5 browser native ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Pros:&#039;&#039;&#039;&lt;br /&gt;
* Simple&lt;br /&gt;
* Standard on mobile&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Cons:&#039;&#039;&#039;&lt;br /&gt;
* IE8 has no support&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Technical notes&#039;&#039;&#039;&lt;br /&gt;
* &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Missing features&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Cross-browser support ==&lt;br /&gt;
&lt;br /&gt;
=== Method ===&lt;br /&gt;
Compatibility checks were done manually by accessing the sample page using different browsers and platforms. Sample page contained the list of identical player instances, initialised for each &amp;lt;video&amp;gt; definition with a &amp;lt;source&amp;gt; of particular format: mp4, webm, ogg, flv. Streaming support was checked by setting up a &amp;lt;video&amp;gt; container with two sources of the same video, one was HLS (Apple HTTP Live Streaming) stream for browsers and platforms that support html5 video streaming, another one was RTMP which is played using flash engine and supposed to be used in case if HLS is not supported.&lt;br /&gt;
&lt;br /&gt;
=== Sample Pages ===&lt;br /&gt;
&lt;br /&gt;
* [https://dev.mle.lancs.ac.uk/videotest/players.php?player=flowplayer Flowplayer HTML5] version 5.4.6.&lt;br /&gt;
* [https://dev.mle.lancs.ac.uk/videotest/players.php?player=videojs Video.JS] version 4.4.1.&lt;br /&gt;
* [https://dev.mle.lancs.ac.uk/videotest/players.php?player=projekktor Projekktor] version 1.3.09.&lt;br /&gt;
* [https://dev.mle.lancs.ac.uk/videotest/players.php?player=mediaelementjs MediaElement.js] version 2.6.14&lt;br /&gt;
* [https://dev.mle.lancs.ac.uk/videotest/players.php?player=native Native browser support].&lt;br /&gt;
&lt;br /&gt;
=== Source ===&lt;br /&gt;
&lt;br /&gt;
Source of testing page is hosted on [https://github.com/kabalin/test-html5-players/blob/master/players.php github]. The actual source of the html page can be viewed in browser.&lt;br /&gt;
&lt;br /&gt;
=== Discussion ===&lt;br /&gt;
&lt;br /&gt;
The players comparison that has been carried out demonstrated that &amp;quot;least hassle&amp;quot; player is Flowplayer. Despite some drawbacks listed in [[#Flowplayer_HTML5|corresponding section above]], it is clearly a winner as it works as expected and according to documentation for all browsers and platforms I had chance to test it. This is the only player that supports RTL layout, display platform incompatibility message prior to attempt to play, and was simple to configure (no undocumented tricks that I had to figure out to make it work). Both VideoJS and Projekktor do now perform properly in all cases. Among those two, I personally prefer Projekktor more for its extensive API, plugins infrastructure and configuration flexibility. However problems on mobile platforms and flash fallback inconsistency make them unreliable at this stage.&lt;br /&gt;
&lt;br /&gt;
=== Compatibility results ===&lt;br /&gt;
&lt;br /&gt;
The table was populated using Flowplayer as others do not perform good enough with some formats and platforms, e.g. VideoJS allow mobile platform player to override itself, Projekktor does not always use HTML5 where browser clearly can handle it (supported in native mode and Flowplayer).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;nicetable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Browser&lt;br /&gt;
! mp4&lt;br /&gt;
! webm&lt;br /&gt;
! ogg&lt;br /&gt;
! flv&lt;br /&gt;
! RTMP/HLS*&lt;br /&gt;
|-&lt;br /&gt;
! Windows 7&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Chrome 33.0.1750.117&lt;br /&gt;
| html5&lt;br /&gt;
| html5&lt;br /&gt;
| html5&lt;br /&gt;
| flash&lt;br /&gt;
| flash&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Firefox 27.0.1&lt;br /&gt;
| html5&lt;br /&gt;
| html5&lt;br /&gt;
| html5&lt;br /&gt;
| flash&lt;br /&gt;
| flash&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Opera 12.16&lt;br /&gt;
| flash&lt;br /&gt;
| html5&lt;br /&gt;
| -&lt;br /&gt;
| flash&lt;br /&gt;
| flash&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Safari 5.1.7&lt;br /&gt;
| flash&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| flash&lt;br /&gt;
| flash&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Internet Explorer 11.0.9600.x&lt;br /&gt;
| html5&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| flash&lt;br /&gt;
| flash&lt;br /&gt;
|-&lt;br /&gt;
! Linux (Debian Wheezy)&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Chrome 33.0.1750.115&lt;br /&gt;
| html5&lt;br /&gt;
| html5&lt;br /&gt;
| html5&lt;br /&gt;
| flash&lt;br /&gt;
| flash&lt;br /&gt;
|-&lt;br /&gt;
! OSX 10.9&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Safari 7.0 (9537.71)&lt;br /&gt;
| html5&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| flash&lt;br /&gt;
| html5&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Chrome 33.0.1750.117&lt;br /&gt;
| html5&lt;br /&gt;
| html5&lt;br /&gt;
| html5&lt;br /&gt;
| flash&lt;br /&gt;
| flash&lt;br /&gt;
|-&lt;br /&gt;
! Android 4.2.2 phone (CyanogenMod, no flash)&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Chrome 32.0.1700.99&lt;br /&gt;
| html5&lt;br /&gt;
| html5&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Browser 4.2.2 (com.android.browser)&lt;br /&gt;
| html5&lt;br /&gt;
| html5&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| html5&lt;br /&gt;
|-&lt;br /&gt;
! Android 4.2.2 tablet (GalaxyTab2, flash app 11.1.115.36)&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Chrome 32.0.1700.99&lt;br /&gt;
| html5&lt;br /&gt;
| html5&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Browser 4.2.2 (com.android.browser)&lt;br /&gt;
| html5&lt;br /&gt;
| html5&lt;br /&gt;
| -&lt;br /&gt;
| flash&lt;br /&gt;
| html5&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Opera 19.0.1340.x&lt;br /&gt;
| html5&lt;br /&gt;
| html5&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
! iPhone 4S (6.1.3)&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Safari&lt;br /&gt;
| html5&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| html5&lt;br /&gt;
|-&lt;br /&gt;
! iPad 4 (7.0.6)&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Safari&lt;br /&gt;
| html5&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| html5&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;small&amp;gt;* For HLS/RTMP, html5 in the table means HLS has been used, flash means player fell back and used RTMP.&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sub Tasks ==&lt;br /&gt;
&lt;br /&gt;
In initial stage FlowPlayer HTML5 (or any other) will handle all existing HTML5 Video extensions as per core_media_player_html5video class, plus m3u8 (HLS). It will also be possible optionally to make flash files handled by HTML5 Video player as well (possibility of using existing flash FlowPlayer for flv files will remain).&lt;br /&gt;
&lt;br /&gt;
== Mock-Ups/Prototypes ==&lt;br /&gt;
&lt;br /&gt;
See [[#Sample_Pages|Sample pages]] section.&lt;br /&gt;
&lt;br /&gt;
== Workaround ==&lt;br /&gt;
&lt;br /&gt;
As intermediate solution, if you require player consistency throughout all browsers and platforms, you may consider using JW Player filter: https://github.com/lucisgit/moodle-filter_jwplayer Notice, that JW Player is not free for commercial use.&lt;br /&gt;
&lt;br /&gt;
== Related Tracker Issues ==&lt;br /&gt;
* MDL-38158&lt;br /&gt;
&lt;br /&gt;
== Useful links ==&lt;br /&gt;
* http://praegnanz.de/html5video/&lt;br /&gt;
* http://html5video.org/wiki/HTML5_Video_Player_Comparison&lt;br /&gt;
* http://www.streamingmedia.com/Articles/Editorial/Featured-Articles/Choosing-a-Video-Player-Features-and-Specs-for-the-Top-Five-94188.aspx&lt;br /&gt;
&lt;br /&gt;
[[Category:Project]]&lt;/div&gt;</summary>
		<author><name>Bawjaws</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=HTML5_player&amp;diff=44502</id>
		<title>HTML5 player</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=HTML5_player&amp;diff=44502"/>
		<updated>2014-04-18T21:40:20Z</updated>

		<summary type="html">&lt;p&gt;Bawjaws: /* Sample Pages */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Work in progress}}&lt;br /&gt;
{{Infobox Project&lt;br /&gt;
|name = HTML5 Player with flash fallback&lt;br /&gt;
|state = In Development&lt;br /&gt;
|tracker = https://tracker.moodle.org/browse/MDL-38158&lt;br /&gt;
|discussion = https://moodle.org/mod/forum/discuss.php?d=222753#p1110024&lt;br /&gt;
|assignee = [https://tracker.moodle.org/secure/ViewProfile.jspa?name=kabalin Ruslan Kabalin]&lt;br /&gt;
}}&lt;br /&gt;
{{Moodle 2.x}}&lt;br /&gt;
&lt;br /&gt;
== Project goals ==&lt;br /&gt;
&lt;br /&gt;
The purpose of this document is to choose HTML5 player with flash fallback for integration in Moodle and plan its implementation.&lt;br /&gt;
&lt;br /&gt;
The aim of this change is to reach a consistent look of the player among different platforms and browsers, as well as making sure that player starts using flash if html5 is not supported by browser for the given format. Another aim is to improve accessibility and usability, enhance customisation.&lt;br /&gt;
&lt;br /&gt;
== Considerations ==&lt;br /&gt;
&lt;br /&gt;
* Usability of the player - is it easy to use it and intuitively understand how to use controls?&lt;br /&gt;
* Accessibility of the player - possibility of keyboard navigation, subtitles, support?&lt;br /&gt;
* Appearance of the player - can its interface be modified, themes support, RTL?&lt;br /&gt;
* Consistency among browsers - does player look the same?&lt;br /&gt;
* Audio support - can player handle HTML5 &amp;lt;audio&amp;gt; tag?&lt;br /&gt;
* Mobile platforms support - does player also work on iOS and Android?&lt;br /&gt;
* Streaming media support (including adaptive-bitrate delivery) - can player handle RTMP, Apple HLS, Adobe HDS, Microsoft HSS?&lt;br /&gt;
* Plugins support - can we use or develop community plugins easily?&lt;br /&gt;
* Embedding support - so users could post media content outside Moodle, if permitted.&lt;br /&gt;
* Maintainability of the links between the player and Moodle - how much work will we need to do every time we upgrade?&lt;br /&gt;
&lt;br /&gt;
== Candidates ==&lt;br /&gt;
&lt;br /&gt;
* [http://flowplayer.org/ Flowplayer HTML5]&lt;br /&gt;
* [http://www.videojs.com/ Video.JS]&lt;br /&gt;
* [http://www.projekktor.com/ Projekktor]&lt;br /&gt;
* ?Are there other alternatives?&lt;br /&gt;
&lt;br /&gt;
== Comparison Matrix ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;nicetable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
! [[#Flowplayer_HTML5|Flowplayer HTML5]]&lt;br /&gt;
! [[#Video.JS|Video.JS]]&lt;br /&gt;
! [[#Projekktor|Projekktor]]&lt;br /&gt;
! No Player&lt;br /&gt;
|-&lt;br /&gt;
! Accessible Player:&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Keyboard control&lt;br /&gt;
| Yes&lt;br /&gt;
| No&lt;br /&gt;
| Yes (configurable)&lt;br /&gt;
| unknown&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Subtitles support&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes (via plugin)&lt;br /&gt;
| Yes (see http://caniuse.com/webvtt)&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Touch interface&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
! Appearance:&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Skins&lt;br /&gt;
| Yes (via CSS)&lt;br /&gt;
| Yes (via CSS)&lt;br /&gt;
| Yes (via CSS)&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* CSS customisation&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| unknown&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* RTL support&lt;br /&gt;
| Yes&lt;br /&gt;
| No&lt;br /&gt;
| No&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
! Mobile platforms:&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* iOS&lt;br /&gt;
| Yes&lt;br /&gt;
| No&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Android&lt;br /&gt;
| Yes&lt;br /&gt;
| No&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
! Streaming protocols:&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* RTMP&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes (via playlist)&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Adaptive HTTP&lt;br /&gt;
| HLS&lt;br /&gt;
| HLS (via plugin)&lt;br /&gt;
| HLS (via playlist)&lt;br /&gt;
| Only in Chrome so far (Media Source Extension)&lt;br /&gt;
|-&lt;br /&gt;
! Audio player&lt;br /&gt;
| No&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border-bottom: 2px solid;&amp;quot; | Embedding support&lt;br /&gt;
| style=&amp;quot;border-bottom: 2px solid;&amp;quot; | Yes (configurable)&lt;br /&gt;
| style=&amp;quot;border-bottom: 2px solid;&amp;quot; | Yes (via addThis plugin)&lt;br /&gt;
| style=&amp;quot;border-bottom: 2px solid;&amp;quot; | Yes (via plugin)&lt;br /&gt;
| style=&amp;quot;border-bottom: 2px solid;&amp;quot; | No&lt;br /&gt;
|-&lt;br /&gt;
! License&lt;br /&gt;
| GPL v3 (with additional terms)&lt;br /&gt;
| Apache 2&lt;br /&gt;
| GPL v3&lt;br /&gt;
| no extra code needed&lt;br /&gt;
|-&lt;br /&gt;
! JS library&lt;br /&gt;
| jQuery&lt;br /&gt;
| -&lt;br /&gt;
| jQuery&lt;br /&gt;
| none required&lt;br /&gt;
|-&lt;br /&gt;
! Plugins infrastructure&lt;br /&gt;
| No&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
! Flash fallback player&lt;br /&gt;
| Flowplayer Flash&lt;br /&gt;
| video-js flash&lt;br /&gt;
| StobeMediaPlayback (but can be jarisplayer or some other).&lt;br /&gt;
| The Video tag can contain fallback content (e.g. Flash object) for browsers that don&#039;t support it at all (http://camendesign.com/code/video_for_everybody), but not based on codec support.&lt;br /&gt;
|-&lt;br /&gt;
! API&lt;br /&gt;
| Yes (plus window.flowplayer object)&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Flowplayer HTML5 ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Pros:&#039;&#039;&#039;&lt;br /&gt;
* Good looking player, resembles existing flash flowplayer in Moodle (with &amp;quot;functional&amp;quot; skin)&lt;br /&gt;
* Extensive customisation (via CSS3 skins and configuration object)&lt;br /&gt;
* Streaming support (RTMP, HLS)&lt;br /&gt;
* Good accessibility features&lt;br /&gt;
* Configurable embedding functionality&lt;br /&gt;
* Existing flash flowplayer can be configured for fallback (the appearance of player will not be affected).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Cons:&#039;&#039;&#039;&lt;br /&gt;
* Require jQuery for functioning&lt;br /&gt;
* Flowplayer logo remains on screen&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Technical notes (lessons learned from the prototypes)&#039;&#039;&#039;&lt;br /&gt;
* Player initialisation is done using wrapper around &amp;lt;video&amp;gt;.&lt;br /&gt;
* width and height attributes in video tag are ignored, player size is configured via wrapper size only.&lt;br /&gt;
* RTMP server connection is configured via data-rtmp attribute in wrapper or player init config parameter, actual path the file specified in src attribute of source item.&lt;br /&gt;
* &amp;lt;source type=&amp;quot;video/flash&amp;quot;... dummy MIME type to force using plash player for whatever content.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Missing features&#039;&#039;&#039;&lt;br /&gt;
* Plugins infrastructure&lt;br /&gt;
* No audio support&lt;br /&gt;
&lt;br /&gt;
=== Video.JS ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Pros:&#039;&#039;&#039;&lt;br /&gt;
* No logo on screen.&lt;br /&gt;
* Extensive API.&lt;br /&gt;
* No extra JS library needed.&lt;br /&gt;
* Many plugins.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Cons:&#039;&#039;&#039;&lt;br /&gt;
* Poor documentation&lt;br /&gt;
* RTMP requires non-standard MIME.&lt;br /&gt;
* Android and iOS override Video.JS with own player, when not overridden, content is not playing.&lt;br /&gt;
* No RTL.&lt;br /&gt;
* HLS support via plugin (many files to include, external contributor see https://github.com/videojs/videojs-contrib-hls).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Technical notes (lessons learned from the prototypes)&#039;&#039;&#039;&lt;br /&gt;
* Player initialisation is done using &amp;lt;video&amp;gt; tag directly (no wrapper needed).&lt;br /&gt;
* RTMP server connection and path specified as single URI in src attribute of source item, &#039;&amp;amp;&#039; character is used as server connection and path divider.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Missing features&#039;&#039;&#039;&lt;br /&gt;
* Embedded HLS support.&lt;br /&gt;
&lt;br /&gt;
=== Projekktor ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Pros:&#039;&#039;&#039;&lt;br /&gt;
* No logo on screen.&lt;br /&gt;
* Well documented API.&lt;br /&gt;
* Media RSS support.&lt;br /&gt;
* Possibility to choose flash player for fallback (included by default are StrobeMediaPlayback and Jarisplayer, both Open Source).&lt;br /&gt;
* Platform preference order selection (e.g. browser, ios, android, flash, native).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Cons:&#039;&#039;&#039;&lt;br /&gt;
* Uses flash where it is not supposed to (e.g. mp4 in Chrome).&lt;br /&gt;
* Issues on ios and android (suggests to download file when play button is pressed).&lt;br /&gt;
* RTMP only work if defined via playlist rather than in &amp;lt;source&amp;gt; tags.&lt;br /&gt;
* Subtitles plugin is not free.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Technical notes (lessons learned from the prototypes)&#039;&#039;&#039;&lt;br /&gt;
* Player initialisation is done using &amp;lt;video&amp;gt; tag directly (no wrapper needed).&lt;br /&gt;
* Make sure &amp;lt;video&amp;gt; tag has class attribute with &#039;projekktor&#039; value (even if you initialise it by ID of the element), player will not work properly otherwise.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Missing features&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== HTML5 browser native ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Pros:&#039;&#039;&#039;&lt;br /&gt;
* Simple&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Cons:&#039;&#039;&#039;&lt;br /&gt;
* IE8 has no support&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Technical notes&#039;&#039;&#039;&lt;br /&gt;
* &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Missing features&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Cross-browser support ==&lt;br /&gt;
&lt;br /&gt;
=== Method ===&lt;br /&gt;
Compatibility checks were done manually by accessing the sample page using different browsers and platforms. Sample page contained the list of identical player instances, initialised for each &amp;lt;video&amp;gt; definition with a &amp;lt;source&amp;gt; of particular format: mp4, webm, ogg, flv. Streaming support was checked by setting up a &amp;lt;video&amp;gt; container with two sources of the same video, one was HLS (Apple HTTP Live Streaming) stream for browsers and platforms that support html5 video streaming, another one was RTMP which is played using flash engine and supposed to be used in case if HLS is not supported.&lt;br /&gt;
&lt;br /&gt;
=== Sample Pages ===&lt;br /&gt;
&lt;br /&gt;
* [https://dev.mle.lancs.ac.uk/videotest/players.php?player=flowplayer Flowplayer HTML5] version 5.4.6.&lt;br /&gt;
* [https://dev.mle.lancs.ac.uk/videotest/players.php?player=videojs Video.JS] version 4.4.1.&lt;br /&gt;
* [https://dev.mle.lancs.ac.uk/videotest/players.php?player=projekktor Projekktor] version 1.3.09.&lt;br /&gt;
* [https://dev.mle.lancs.ac.uk/videotest/players.php?player=native Native browser support].&lt;br /&gt;
&lt;br /&gt;
=== Source ===&lt;br /&gt;
&lt;br /&gt;
Source of testing page is hosted on [https://github.com/kabalin/test-html5-players/blob/master/players.php github]. The actual source of the html page can be viewed in browser.&lt;br /&gt;
&lt;br /&gt;
=== Discussion ===&lt;br /&gt;
&lt;br /&gt;
The players comparison that has been carried out demonstrated that &amp;quot;least hassle&amp;quot; player is Flowplayer. Despite some drawbacks listed in [[#Flowplayer_HTML5|corresponding section above]], it is clearly a winner as it works as expected and according to documentation for all browsers and platforms I had chance to test it. This is the only player that supports RTL layout, display platform incompatibility message prior to attempt to play, and was simple to configure (no undocumented tricks that I had to figure out to make it work). Both VideoJS and Projekktor do now perform properly in all cases. Among those two, I personally prefer Projekktor more for its extensive API, plugins infrastructure and configuration flexibility. However problems on mobile platforms and flash fallback inconsistency make them unreliable at this stage.&lt;br /&gt;
&lt;br /&gt;
=== Compatibility results ===&lt;br /&gt;
&lt;br /&gt;
The table was populated using Flowplayer as others do not perform good enough with some formats and platforms, e.g. VideoJS allow mobile platform player to override itself, Projekktor does not always use HTML5 where browser clearly can handle it (supported in native mode and Flowplayer).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;nicetable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Browser&lt;br /&gt;
! mp4&lt;br /&gt;
! webm&lt;br /&gt;
! ogg&lt;br /&gt;
! flv&lt;br /&gt;
! RTMP/HLS*&lt;br /&gt;
|-&lt;br /&gt;
! Windows 7&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Chrome 33.0.1750.117&lt;br /&gt;
| html5&lt;br /&gt;
| html5&lt;br /&gt;
| html5&lt;br /&gt;
| flash&lt;br /&gt;
| flash&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Firefox 27.0.1&lt;br /&gt;
| html5&lt;br /&gt;
| html5&lt;br /&gt;
| html5&lt;br /&gt;
| flash&lt;br /&gt;
| flash&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Opera 12.16&lt;br /&gt;
| flash&lt;br /&gt;
| html5&lt;br /&gt;
| -&lt;br /&gt;
| flash&lt;br /&gt;
| flash&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Safari 5.1.7&lt;br /&gt;
| flash&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| flash&lt;br /&gt;
| flash&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Internet Explorer 11.0.9600.x&lt;br /&gt;
| html5&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| flash&lt;br /&gt;
| flash&lt;br /&gt;
|-&lt;br /&gt;
! Linux (Debian Wheezy)&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Chrome 33.0.1750.115&lt;br /&gt;
| html5&lt;br /&gt;
| html5&lt;br /&gt;
| html5&lt;br /&gt;
| flash&lt;br /&gt;
| flash&lt;br /&gt;
|-&lt;br /&gt;
! OSX 10.9&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Safari 7.0 (9537.71)&lt;br /&gt;
| html5&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| flash&lt;br /&gt;
| html5&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Chrome 33.0.1750.117&lt;br /&gt;
| html5&lt;br /&gt;
| html5&lt;br /&gt;
| html5&lt;br /&gt;
| flash&lt;br /&gt;
| flash&lt;br /&gt;
|-&lt;br /&gt;
! Android 4.2.2 phone (CyanogenMod, no flash)&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Chrome 32.0.1700.99&lt;br /&gt;
| html5&lt;br /&gt;
| html5&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Browser 4.2.2 (com.android.browser)&lt;br /&gt;
| html5&lt;br /&gt;
| html5&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| html5&lt;br /&gt;
|-&lt;br /&gt;
! Android 4.2.2 tablet (GalaxyTab2, flash app 11.1.115.36)&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Chrome 32.0.1700.99&lt;br /&gt;
| html5&lt;br /&gt;
| html5&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Browser 4.2.2 (com.android.browser)&lt;br /&gt;
| html5&lt;br /&gt;
| html5&lt;br /&gt;
| -&lt;br /&gt;
| flash&lt;br /&gt;
| html5&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Opera 19.0.1340.x&lt;br /&gt;
| html5&lt;br /&gt;
| html5&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
! iPhone 4S (6.1.3)&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Safari&lt;br /&gt;
| html5&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| html5&lt;br /&gt;
|-&lt;br /&gt;
! iPad 4 (7.0.6)&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Safari&lt;br /&gt;
| html5&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| html5&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;small&amp;gt;* For HLS/RTMP, html5 in the table means HLS has been used, flash means player fell back and used RTMP.&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sub Tasks ==&lt;br /&gt;
&lt;br /&gt;
In initial stage FlowPlayer HTML5 (or any other) will handle all existing HTML5 Video extensions as per core_media_player_html5video class, plus m3u8 (HLS). It will also be possible optionally to make flash files handled by HTML5 Video player as well (possibility of using existing flash FlowPlayer for flv files will remain).&lt;br /&gt;
&lt;br /&gt;
== Mock-Ups/Prototypes ==&lt;br /&gt;
&lt;br /&gt;
See [[#Sample_Pages|Sample pages]] section.&lt;br /&gt;
&lt;br /&gt;
== Workaround ==&lt;br /&gt;
&lt;br /&gt;
As intermediate solution, if you require player consistency throughout all browsers and platforms, you may consider using JW Player filter: https://github.com/lucisgit/moodle-filter_jwplayer Notice, that JW Player is not free for commercial use.&lt;br /&gt;
&lt;br /&gt;
== Related Tracker Issues ==&lt;br /&gt;
* MDL-38158&lt;br /&gt;
&lt;br /&gt;
== Useful links ==&lt;br /&gt;
* http://praegnanz.de/html5video/&lt;br /&gt;
* http://html5video.org/wiki/HTML5_Video_Player_Comparison&lt;br /&gt;
* http://www.streamingmedia.com/Articles/Editorial/Featured-Articles/Choosing-a-Video-Player-Features-and-Specs-for-the-Top-Five-94188.aspx&lt;br /&gt;
&lt;br /&gt;
[[Category:Project]]&lt;/div&gt;</summary>
		<author><name>Bawjaws</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=HTML5_player&amp;diff=44493</id>
		<title>HTML5 player</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=HTML5_player&amp;diff=44493"/>
		<updated>2014-04-18T09:19:01Z</updated>

		<summary type="html">&lt;p&gt;Bawjaws: /* Sample Pages */  add Native HTML link&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Work in progress}}&lt;br /&gt;
{{Infobox Project&lt;br /&gt;
|name = HTML5 Player with flash fallback&lt;br /&gt;
|state = In Development&lt;br /&gt;
|tracker = https://tracker.moodle.org/browse/MDL-38158&lt;br /&gt;
|discussion = https://moodle.org/mod/forum/discuss.php?d=222753#p1110024&lt;br /&gt;
|assignee = [https://tracker.moodle.org/secure/ViewProfile.jspa?name=kabalin Ruslan Kabalin]&lt;br /&gt;
}}&lt;br /&gt;
{{Moodle 2.x}}&lt;br /&gt;
&lt;br /&gt;
== Project goals ==&lt;br /&gt;
&lt;br /&gt;
The purpose of this document is to choose HTML5 player with flash fallback for integration in Moodle and plan its implementation.&lt;br /&gt;
&lt;br /&gt;
The aim of this change is to reach a consistent look of the player among different platforms and browsers, as well as making sure that player starts using flash if html5 is not supported by browser for the given format. Another aim is to improve accessibility and usability, enhance customisation.&lt;br /&gt;
&lt;br /&gt;
== Considerations ==&lt;br /&gt;
&lt;br /&gt;
* Usability of the player - is it easy to use it and intuitively understand how to use controls?&lt;br /&gt;
* Accessibility of the player - possibility of keyboard navigation, subtitles, support?&lt;br /&gt;
* Appearance of the player - can its interface be modified, themes support, RTL?&lt;br /&gt;
* Consistency among browsers - does player look the same?&lt;br /&gt;
* Audio support - can player handle HTML5 &amp;lt;audio&amp;gt; tag?&lt;br /&gt;
* Mobile platforms support - does player also work on iOS and Android?&lt;br /&gt;
* Streaming media support (including adaptive-bitrate delivery) - can player handle RTMP, Apple HLS, Adobe HDS, Microsoft HSS?&lt;br /&gt;
* Plugins support - can we use or develop community plugins easily?&lt;br /&gt;
* Embedding support - so users could post media content outside Moodle, if permitted.&lt;br /&gt;
* Maintainability of the links between the player and Moodle - how much work will we need to do every time we upgrade?&lt;br /&gt;
&lt;br /&gt;
== Candidates ==&lt;br /&gt;
&lt;br /&gt;
* [http://flowplayer.org/ Flowplayer HTML5]&lt;br /&gt;
* [http://www.videojs.com/ Video.JS]&lt;br /&gt;
* [http://www.projekktor.com/ Projekktor]&lt;br /&gt;
* ?Are there other alternatives?&lt;br /&gt;
&lt;br /&gt;
== Comparison Matrix ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;nicetable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
! [[#Flowplayer_HTML5|Flowplayer HTML5]]&lt;br /&gt;
! [[#Video.JS|Video.JS]]&lt;br /&gt;
! [[#Projekktor|Projekktor]]&lt;br /&gt;
! No Player&lt;br /&gt;
|-&lt;br /&gt;
! Accessible Player:&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Keyboard control&lt;br /&gt;
| Yes&lt;br /&gt;
| No&lt;br /&gt;
| Yes (configurable)&lt;br /&gt;
| unknown&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Subtitles support&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes (via plugin)&lt;br /&gt;
| Yes (see http://caniuse.com/webvtt)&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Touch interface&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
! Appearance:&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Skins&lt;br /&gt;
| Yes (via CSS)&lt;br /&gt;
| Yes (via CSS)&lt;br /&gt;
| Yes (via CSS)&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* CSS customisation&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| unknown&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* RTL support&lt;br /&gt;
| Yes&lt;br /&gt;
| No&lt;br /&gt;
| No&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
! Mobile platforms:&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* iOS&lt;br /&gt;
| Yes&lt;br /&gt;
| No&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Android&lt;br /&gt;
| Yes&lt;br /&gt;
| No&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
! Streaming protocols:&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* RTMP&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes (via playlist)&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Adaptive HTTP&lt;br /&gt;
| HLS&lt;br /&gt;
| HLS (via plugin)&lt;br /&gt;
| HLS (via playlist)&lt;br /&gt;
| Only in Chrome so far (Media Source Extension)&lt;br /&gt;
|-&lt;br /&gt;
! Audio player&lt;br /&gt;
| No&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border-bottom: 2px solid;&amp;quot; | Embedding support&lt;br /&gt;
| style=&amp;quot;border-bottom: 2px solid;&amp;quot; | Yes (configurable)&lt;br /&gt;
| style=&amp;quot;border-bottom: 2px solid;&amp;quot; | Yes (via addThis plugin)&lt;br /&gt;
| style=&amp;quot;border-bottom: 2px solid;&amp;quot; | Yes (via plugin)&lt;br /&gt;
| style=&amp;quot;border-bottom: 2px solid;&amp;quot; | No&lt;br /&gt;
|-&lt;br /&gt;
! License&lt;br /&gt;
| GPL v3 (with additional terms)&lt;br /&gt;
| Apache 2&lt;br /&gt;
| GPL v3&lt;br /&gt;
| no extra code needed&lt;br /&gt;
|-&lt;br /&gt;
! JS library&lt;br /&gt;
| jQuery&lt;br /&gt;
| -&lt;br /&gt;
| jQuery&lt;br /&gt;
| none required&lt;br /&gt;
|-&lt;br /&gt;
! Plugins infrastructure&lt;br /&gt;
| No&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
! Flash fallback player&lt;br /&gt;
| Flowplayer Flash&lt;br /&gt;
| video-js flash&lt;br /&gt;
| StobeMediaPlayback (but can be jarisplayer or some other).&lt;br /&gt;
| The Video tag can contain fallback content (e.g. Flash object) for browsers that don&#039;t support it at all (http://camendesign.com/code/video_for_everybody), but not based on codec support.&lt;br /&gt;
|-&lt;br /&gt;
! API&lt;br /&gt;
| Yes (plus window.flowplayer object)&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Flowplayer HTML5 ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Pros:&#039;&#039;&#039;&lt;br /&gt;
* Good looking player, resembles existing flash flowplayer in Moodle (with &amp;quot;functional&amp;quot; skin)&lt;br /&gt;
* Extensive customisation (via CSS3 skins and configuration object)&lt;br /&gt;
* Streaming support (RTMP, HLS)&lt;br /&gt;
* Good accessibility features&lt;br /&gt;
* Configurable embedding functionality&lt;br /&gt;
* Existing flash flowplayer can be configured for fallback (the appearance of player will not be affected).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Cons:&#039;&#039;&#039;&lt;br /&gt;
* Require jQuery for functioning&lt;br /&gt;
* Flowplayer logo remains on screen&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Technical notes (lessons learned from the prototypes)&#039;&#039;&#039;&lt;br /&gt;
* Player initialisation is done using wrapper around &amp;lt;video&amp;gt;.&lt;br /&gt;
* width and height attributes in video tag are ignored, player size is configured via wrapper size only.&lt;br /&gt;
* RTMP server connection is configured via data-rtmp attribute in wrapper or player init config parameter, actual path the file specified in src attribute of source item.&lt;br /&gt;
* &amp;lt;source type=&amp;quot;video/flash&amp;quot;... dummy MIME type to force using plash player for whatever content.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Missing features&#039;&#039;&#039;&lt;br /&gt;
* Plugins infrastructure&lt;br /&gt;
* No audio support&lt;br /&gt;
&lt;br /&gt;
=== Video.JS ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Pros:&#039;&#039;&#039;&lt;br /&gt;
* No logo on screen.&lt;br /&gt;
* Extensive API.&lt;br /&gt;
* No extra JS library needed.&lt;br /&gt;
* Many plugins.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Cons:&#039;&#039;&#039;&lt;br /&gt;
* Poor documentation&lt;br /&gt;
* RTMP requires non-standard MIME.&lt;br /&gt;
* Android and iOS override Video.JS with own player, when not overridden, content is not playing.&lt;br /&gt;
* No RTL.&lt;br /&gt;
* HLS support via plugin (many files to include, external contributor see https://github.com/videojs/videojs-contrib-hls).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Technical notes (lessons learned from the prototypes)&#039;&#039;&#039;&lt;br /&gt;
* Player initialisation is done using &amp;lt;video&amp;gt; tag directly (no wrapper needed).&lt;br /&gt;
* RTMP server connection and path specified as single URI in src attribute of source item, &#039;&amp;amp;&#039; character is used as server connection and path divider.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Missing features&#039;&#039;&#039;&lt;br /&gt;
* Embedded HLS support.&lt;br /&gt;
&lt;br /&gt;
=== Projekktor ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Pros:&#039;&#039;&#039;&lt;br /&gt;
* No logo on screen.&lt;br /&gt;
* Well documented API.&lt;br /&gt;
* Media RSS support.&lt;br /&gt;
* Possibility to choose flash player for fallback (included by default are StrobeMediaPlayback and Jarisplayer, both Open Source).&lt;br /&gt;
* Platform preference order selection (e.g. browser, ios, android, flash, native).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Cons:&#039;&#039;&#039;&lt;br /&gt;
* Uses flash where it is not supposed to (e.g. mp4 in Chrome).&lt;br /&gt;
* Issues on ios and android (suggests to download file when play button is pressed).&lt;br /&gt;
* RTMP only work if defined via playlist rather than in &amp;lt;source&amp;gt; tags.&lt;br /&gt;
* Subtitles plugin is not free.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Technical notes (lessons learned from the prototypes)&#039;&#039;&#039;&lt;br /&gt;
* Player initialisation is done using &amp;lt;video&amp;gt; tag directly (no wrapper needed).&lt;br /&gt;
* Make sure &amp;lt;video&amp;gt; tag has class attribute with &#039;projekktor&#039; value (even if you initialise it by ID of the element), player will not work properly otherwise.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Missing features&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== HTML5 browser native ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Pros:&#039;&#039;&#039;&lt;br /&gt;
* Simple&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Cons:&#039;&#039;&#039;&lt;br /&gt;
* IE8 has no support&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Technical notes&#039;&#039;&#039;&lt;br /&gt;
* &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Missing features&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Cross-browser support ==&lt;br /&gt;
&lt;br /&gt;
=== Method ===&lt;br /&gt;
Compatibility checks were done manually by accessing the sample page using different browsers and platforms. Sample page contained the list of identical player instances, initialised for each &amp;lt;video&amp;gt; definition with a &amp;lt;source&amp;gt; of particular format: mp4, webm, ogg, flv. Streaming support was checked by setting up a &amp;lt;video&amp;gt; container with two sources of the same video, one was HLS (Apple HTTP Live Streaming) stream for browsers and platforms that support html5 video streaming, another one was RTMP which is played using flash engine and supposed to be used in case if HLS is not supported.&lt;br /&gt;
&lt;br /&gt;
=== Sample Pages ===&lt;br /&gt;
&lt;br /&gt;
* [https://dev.mle.lancs.ac.uk/videotest/players.php?player=flowplayer Flowplayer HTML5] version 5.4.6.&lt;br /&gt;
* [https://dev.mle.lancs.ac.uk/videotest/players.php?player=videojs Video.JS] version 4.4.1.&lt;br /&gt;
* [https://dev.mle.lancs.ac.uk/videotest/players.php?player=projekktor Projekktor] version 1.3.09.&lt;br /&gt;
* [https://dev.mle.lancs.ac.uk/videotest/players.php?player=native] Native in your browser.&lt;br /&gt;
&lt;br /&gt;
=== Source ===&lt;br /&gt;
&lt;br /&gt;
Source of testing page is hosted on [https://github.com/kabalin/test-html5-players/blob/master/players.php github]. The actual source of the html page can be viewed in browser.&lt;br /&gt;
&lt;br /&gt;
=== Discussion ===&lt;br /&gt;
&lt;br /&gt;
The players comparison that has been carried out demonstrated that &amp;quot;least hassle&amp;quot; player is Flowplayer. Despite some drawbacks listed in [[#Flowplayer_HTML5|corresponding section above]], it is clearly a winner as it works as expected and according to documentation for all browsers and platforms I had chance to test it. This is the only player that supports RTL layout, display platform incompatibility message prior to attempt to play, and was simple to configure (no undocumented tricks that I had to figure out to make it work). Both VideoJS and Projekktor do now perform properly in all cases. Among those two, I personally prefer Projekktor more for its extensive API, plugins infrastructure and configuration flexibility. However problems on mobile platforms and flash fallback inconsistency make them unreliable at this stage.&lt;br /&gt;
&lt;br /&gt;
=== Compatibility results ===&lt;br /&gt;
&lt;br /&gt;
The table was populated using Flowplayer as others do not perform good enough with some formats and platforms, e.g. VideoJS allow mobile platform player to override itself, Projekktor does not always use HTML5 where browser clearly can handle it (supported in native mode and Flowplayer).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;nicetable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Browser&lt;br /&gt;
! mp4&lt;br /&gt;
! webm&lt;br /&gt;
! ogg&lt;br /&gt;
! flv&lt;br /&gt;
! RTMP/HLS*&lt;br /&gt;
|-&lt;br /&gt;
! Windows 7&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Chrome 33.0.1750.117&lt;br /&gt;
| html5&lt;br /&gt;
| html5&lt;br /&gt;
| html5&lt;br /&gt;
| flash&lt;br /&gt;
| flash&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Firefox 27.0.1&lt;br /&gt;
| html5&lt;br /&gt;
| html5&lt;br /&gt;
| html5&lt;br /&gt;
| flash&lt;br /&gt;
| flash&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Opera 12.16&lt;br /&gt;
| flash&lt;br /&gt;
| html5&lt;br /&gt;
| -&lt;br /&gt;
| flash&lt;br /&gt;
| flash&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Safari 5.1.7&lt;br /&gt;
| flash&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| flash&lt;br /&gt;
| flash&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Internet Explorer 11.0.9600.x&lt;br /&gt;
| html5&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| flash&lt;br /&gt;
| flash&lt;br /&gt;
|-&lt;br /&gt;
! Linux (Debian Wheezy)&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Chrome 33.0.1750.115&lt;br /&gt;
| html5&lt;br /&gt;
| html5&lt;br /&gt;
| html5&lt;br /&gt;
| flash&lt;br /&gt;
| flash&lt;br /&gt;
|-&lt;br /&gt;
! OSX 10.9&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Safari 7.0 (9537.71)&lt;br /&gt;
| html5&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| flash&lt;br /&gt;
| html5&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Chrome 33.0.1750.117&lt;br /&gt;
| html5&lt;br /&gt;
| html5&lt;br /&gt;
| html5&lt;br /&gt;
| flash&lt;br /&gt;
| flash&lt;br /&gt;
|-&lt;br /&gt;
! Android 4.2.2 phone (CyanogenMod, no flash)&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Chrome 32.0.1700.99&lt;br /&gt;
| html5&lt;br /&gt;
| html5&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Browser 4.2.2 (com.android.browser)&lt;br /&gt;
| html5&lt;br /&gt;
| html5&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| html5&lt;br /&gt;
|-&lt;br /&gt;
! Android 4.2.2 tablet (GalaxyTab2, flash app 11.1.115.36)&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Chrome 32.0.1700.99&lt;br /&gt;
| html5&lt;br /&gt;
| html5&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Browser 4.2.2 (com.android.browser)&lt;br /&gt;
| html5&lt;br /&gt;
| html5&lt;br /&gt;
| -&lt;br /&gt;
| flash&lt;br /&gt;
| html5&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Opera 19.0.1340.x&lt;br /&gt;
| html5&lt;br /&gt;
| html5&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
! iPhone 4S (6.1.3)&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Safari&lt;br /&gt;
| html5&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| html5&lt;br /&gt;
|-&lt;br /&gt;
! iPad 4 (7.0.6)&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Safari&lt;br /&gt;
| html5&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| html5&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;small&amp;gt;* For HLS/RTMP, html5 in the table means HLS has been used, flash means player fell back and used RTMP.&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sub Tasks ==&lt;br /&gt;
&lt;br /&gt;
In initial stage FlowPlayer HTML5 (or any other) will handle all existing HTML5 Video extensions as per core_media_player_html5video class, plus m3u8 (HLS). It will also be possible optionally to make flash files handled by HTML5 Video player as well (possibility of using existing flash FlowPlayer for flv files will remain).&lt;br /&gt;
&lt;br /&gt;
== Mock-Ups/Prototypes ==&lt;br /&gt;
&lt;br /&gt;
See [[#Sample_Pages|Sample pages]] section.&lt;br /&gt;
&lt;br /&gt;
== Workaround ==&lt;br /&gt;
&lt;br /&gt;
As intermediate solution, if you require player consistency throughout all browsers and platforms, you may consider using JW Player filter: https://github.com/lucisgit/moodle-filter_jwplayer Notice, that JW Player is not free for commercial use.&lt;br /&gt;
&lt;br /&gt;
== Related Tracker Issues ==&lt;br /&gt;
* MDL-38158&lt;br /&gt;
&lt;br /&gt;
== Useful links ==&lt;br /&gt;
* http://praegnanz.de/html5video/&lt;br /&gt;
* http://html5video.org/wiki/HTML5_Video_Player_Comparison&lt;br /&gt;
* http://www.streamingmedia.com/Articles/Editorial/Featured-Articles/Choosing-a-Video-Player-Features-and-Specs-for-the-Top-Five-94188.aspx&lt;br /&gt;
&lt;br /&gt;
[[Category:Project]]&lt;/div&gt;</summary>
		<author><name>Bawjaws</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=HTML5_player&amp;diff=44492</id>
		<title>HTML5 player</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=HTML5_player&amp;diff=44492"/>
		<updated>2014-04-18T09:17:21Z</updated>

		<summary type="html">&lt;p&gt;Bawjaws: /* Comparison Matrix */  add link to http://caniuse.com/webvtt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Work in progress}}&lt;br /&gt;
{{Infobox Project&lt;br /&gt;
|name = HTML5 Player with flash fallback&lt;br /&gt;
|state = In Development&lt;br /&gt;
|tracker = https://tracker.moodle.org/browse/MDL-38158&lt;br /&gt;
|discussion = https://moodle.org/mod/forum/discuss.php?d=222753#p1110024&lt;br /&gt;
|assignee = [https://tracker.moodle.org/secure/ViewProfile.jspa?name=kabalin Ruslan Kabalin]&lt;br /&gt;
}}&lt;br /&gt;
{{Moodle 2.x}}&lt;br /&gt;
&lt;br /&gt;
== Project goals ==&lt;br /&gt;
&lt;br /&gt;
The purpose of this document is to choose HTML5 player with flash fallback for integration in Moodle and plan its implementation.&lt;br /&gt;
&lt;br /&gt;
The aim of this change is to reach a consistent look of the player among different platforms and browsers, as well as making sure that player starts using flash if html5 is not supported by browser for the given format. Another aim is to improve accessibility and usability, enhance customisation.&lt;br /&gt;
&lt;br /&gt;
== Considerations ==&lt;br /&gt;
&lt;br /&gt;
* Usability of the player - is it easy to use it and intuitively understand how to use controls?&lt;br /&gt;
* Accessibility of the player - possibility of keyboard navigation, subtitles, support?&lt;br /&gt;
* Appearance of the player - can its interface be modified, themes support, RTL?&lt;br /&gt;
* Consistency among browsers - does player look the same?&lt;br /&gt;
* Audio support - can player handle HTML5 &amp;lt;audio&amp;gt; tag?&lt;br /&gt;
* Mobile platforms support - does player also work on iOS and Android?&lt;br /&gt;
* Streaming media support (including adaptive-bitrate delivery) - can player handle RTMP, Apple HLS, Adobe HDS, Microsoft HSS?&lt;br /&gt;
* Plugins support - can we use or develop community plugins easily?&lt;br /&gt;
* Embedding support - so users could post media content outside Moodle, if permitted.&lt;br /&gt;
* Maintainability of the links between the player and Moodle - how much work will we need to do every time we upgrade?&lt;br /&gt;
&lt;br /&gt;
== Candidates ==&lt;br /&gt;
&lt;br /&gt;
* [http://flowplayer.org/ Flowplayer HTML5]&lt;br /&gt;
* [http://www.videojs.com/ Video.JS]&lt;br /&gt;
* [http://www.projekktor.com/ Projekktor]&lt;br /&gt;
* ?Are there other alternatives?&lt;br /&gt;
&lt;br /&gt;
== Comparison Matrix ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;nicetable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
! [[#Flowplayer_HTML5|Flowplayer HTML5]]&lt;br /&gt;
! [[#Video.JS|Video.JS]]&lt;br /&gt;
! [[#Projekktor|Projekktor]]&lt;br /&gt;
! No Player&lt;br /&gt;
|-&lt;br /&gt;
! Accessible Player:&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Keyboard control&lt;br /&gt;
| Yes&lt;br /&gt;
| No&lt;br /&gt;
| Yes (configurable)&lt;br /&gt;
| unknown&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Subtitles support&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes (via plugin)&lt;br /&gt;
| Yes (see http://caniuse.com/webvtt)&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Touch interface&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
! Appearance:&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Skins&lt;br /&gt;
| Yes (via CSS)&lt;br /&gt;
| Yes (via CSS)&lt;br /&gt;
| Yes (via CSS)&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* CSS customisation&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| unknown&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* RTL support&lt;br /&gt;
| Yes&lt;br /&gt;
| No&lt;br /&gt;
| No&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
! Mobile platforms:&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* iOS&lt;br /&gt;
| Yes&lt;br /&gt;
| No&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Android&lt;br /&gt;
| Yes&lt;br /&gt;
| No&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
! Streaming protocols:&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* RTMP&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes (via playlist)&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Adaptive HTTP&lt;br /&gt;
| HLS&lt;br /&gt;
| HLS (via plugin)&lt;br /&gt;
| HLS (via playlist)&lt;br /&gt;
| Only in Chrome so far (Media Source Extension)&lt;br /&gt;
|-&lt;br /&gt;
! Audio player&lt;br /&gt;
| No&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border-bottom: 2px solid;&amp;quot; | Embedding support&lt;br /&gt;
| style=&amp;quot;border-bottom: 2px solid;&amp;quot; | Yes (configurable)&lt;br /&gt;
| style=&amp;quot;border-bottom: 2px solid;&amp;quot; | Yes (via addThis plugin)&lt;br /&gt;
| style=&amp;quot;border-bottom: 2px solid;&amp;quot; | Yes (via plugin)&lt;br /&gt;
| style=&amp;quot;border-bottom: 2px solid;&amp;quot; | No&lt;br /&gt;
|-&lt;br /&gt;
! License&lt;br /&gt;
| GPL v3 (with additional terms)&lt;br /&gt;
| Apache 2&lt;br /&gt;
| GPL v3&lt;br /&gt;
| no extra code needed&lt;br /&gt;
|-&lt;br /&gt;
! JS library&lt;br /&gt;
| jQuery&lt;br /&gt;
| -&lt;br /&gt;
| jQuery&lt;br /&gt;
| none required&lt;br /&gt;
|-&lt;br /&gt;
! Plugins infrastructure&lt;br /&gt;
| No&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
! Flash fallback player&lt;br /&gt;
| Flowplayer Flash&lt;br /&gt;
| video-js flash&lt;br /&gt;
| StobeMediaPlayback (but can be jarisplayer or some other).&lt;br /&gt;
| The Video tag can contain fallback content (e.g. Flash object) for browsers that don&#039;t support it at all (http://camendesign.com/code/video_for_everybody), but not based on codec support.&lt;br /&gt;
|-&lt;br /&gt;
! API&lt;br /&gt;
| Yes (plus window.flowplayer object)&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Flowplayer HTML5 ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Pros:&#039;&#039;&#039;&lt;br /&gt;
* Good looking player, resembles existing flash flowplayer in Moodle (with &amp;quot;functional&amp;quot; skin)&lt;br /&gt;
* Extensive customisation (via CSS3 skins and configuration object)&lt;br /&gt;
* Streaming support (RTMP, HLS)&lt;br /&gt;
* Good accessibility features&lt;br /&gt;
* Configurable embedding functionality&lt;br /&gt;
* Existing flash flowplayer can be configured for fallback (the appearance of player will not be affected).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Cons:&#039;&#039;&#039;&lt;br /&gt;
* Require jQuery for functioning&lt;br /&gt;
* Flowplayer logo remains on screen&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Technical notes (lessons learned from the prototypes)&#039;&#039;&#039;&lt;br /&gt;
* Player initialisation is done using wrapper around &amp;lt;video&amp;gt;.&lt;br /&gt;
* width and height attributes in video tag are ignored, player size is configured via wrapper size only.&lt;br /&gt;
* RTMP server connection is configured via data-rtmp attribute in wrapper or player init config parameter, actual path the file specified in src attribute of source item.&lt;br /&gt;
* &amp;lt;source type=&amp;quot;video/flash&amp;quot;... dummy MIME type to force using plash player for whatever content.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Missing features&#039;&#039;&#039;&lt;br /&gt;
* Plugins infrastructure&lt;br /&gt;
* No audio support&lt;br /&gt;
&lt;br /&gt;
=== Video.JS ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Pros:&#039;&#039;&#039;&lt;br /&gt;
* No logo on screen.&lt;br /&gt;
* Extensive API.&lt;br /&gt;
* No extra JS library needed.&lt;br /&gt;
* Many plugins.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Cons:&#039;&#039;&#039;&lt;br /&gt;
* Poor documentation&lt;br /&gt;
* RTMP requires non-standard MIME.&lt;br /&gt;
* Android and iOS override Video.JS with own player, when not overridden, content is not playing.&lt;br /&gt;
* No RTL.&lt;br /&gt;
* HLS support via plugin (many files to include, external contributor see https://github.com/videojs/videojs-contrib-hls).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Technical notes (lessons learned from the prototypes)&#039;&#039;&#039;&lt;br /&gt;
* Player initialisation is done using &amp;lt;video&amp;gt; tag directly (no wrapper needed).&lt;br /&gt;
* RTMP server connection and path specified as single URI in src attribute of source item, &#039;&amp;amp;&#039; character is used as server connection and path divider.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Missing features&#039;&#039;&#039;&lt;br /&gt;
* Embedded HLS support.&lt;br /&gt;
&lt;br /&gt;
=== Projekktor ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Pros:&#039;&#039;&#039;&lt;br /&gt;
* No logo on screen.&lt;br /&gt;
* Well documented API.&lt;br /&gt;
* Media RSS support.&lt;br /&gt;
* Possibility to choose flash player for fallback (included by default are StrobeMediaPlayback and Jarisplayer, both Open Source).&lt;br /&gt;
* Platform preference order selection (e.g. browser, ios, android, flash, native).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Cons:&#039;&#039;&#039;&lt;br /&gt;
* Uses flash where it is not supposed to (e.g. mp4 in Chrome).&lt;br /&gt;
* Issues on ios and android (suggests to download file when play button is pressed).&lt;br /&gt;
* RTMP only work if defined via playlist rather than in &amp;lt;source&amp;gt; tags.&lt;br /&gt;
* Subtitles plugin is not free.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Technical notes (lessons learned from the prototypes)&#039;&#039;&#039;&lt;br /&gt;
* Player initialisation is done using &amp;lt;video&amp;gt; tag directly (no wrapper needed).&lt;br /&gt;
* Make sure &amp;lt;video&amp;gt; tag has class attribute with &#039;projekktor&#039; value (even if you initialise it by ID of the element), player will not work properly otherwise.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Missing features&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== HTML5 browser native ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Pros:&#039;&#039;&#039;&lt;br /&gt;
* Simple&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Cons:&#039;&#039;&#039;&lt;br /&gt;
* IE8 has no support&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Technical notes&#039;&#039;&#039;&lt;br /&gt;
* &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Missing features&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Cross-browser support ==&lt;br /&gt;
&lt;br /&gt;
=== Method ===&lt;br /&gt;
Compatibility checks were done manually by accessing the sample page using different browsers and platforms. Sample page contained the list of identical player instances, initialised for each &amp;lt;video&amp;gt; definition with a &amp;lt;source&amp;gt; of particular format: mp4, webm, ogg, flv. Streaming support was checked by setting up a &amp;lt;video&amp;gt; container with two sources of the same video, one was HLS (Apple HTTP Live Streaming) stream for browsers and platforms that support html5 video streaming, another one was RTMP which is played using flash engine and supposed to be used in case if HLS is not supported.&lt;br /&gt;
&lt;br /&gt;
=== Sample Pages ===&lt;br /&gt;
&lt;br /&gt;
* [https://dev.mle.lancs.ac.uk/videotest/players.php?player=flowplayer Flowplayer HTML5] version 5.4.6.&lt;br /&gt;
* [https://dev.mle.lancs.ac.uk/videotest/players.php?player=videojs Video.JS] version 4.4.1.&lt;br /&gt;
* [https://dev.mle.lancs.ac.uk/videotest/players.php?player=projekktor Projekktor] version 1.3.09.&lt;br /&gt;
&lt;br /&gt;
=== Source ===&lt;br /&gt;
&lt;br /&gt;
Source of testing page is hosted on [https://github.com/kabalin/test-html5-players/blob/master/players.php github]. The actual source of the html page can be viewed in browser.&lt;br /&gt;
&lt;br /&gt;
=== Discussion ===&lt;br /&gt;
&lt;br /&gt;
The players comparison that has been carried out demonstrated that &amp;quot;least hassle&amp;quot; player is Flowplayer. Despite some drawbacks listed in [[#Flowplayer_HTML5|corresponding section above]], it is clearly a winner as it works as expected and according to documentation for all browsers and platforms I had chance to test it. This is the only player that supports RTL layout, display platform incompatibility message prior to attempt to play, and was simple to configure (no undocumented tricks that I had to figure out to make it work). Both VideoJS and Projekktor do now perform properly in all cases. Among those two, I personally prefer Projekktor more for its extensive API, plugins infrastructure and configuration flexibility. However problems on mobile platforms and flash fallback inconsistency make them unreliable at this stage.&lt;br /&gt;
&lt;br /&gt;
=== Compatibility results ===&lt;br /&gt;
&lt;br /&gt;
The table was populated using Flowplayer as others do not perform good enough with some formats and platforms, e.g. VideoJS allow mobile platform player to override itself, Projekktor does not always use HTML5 where browser clearly can handle it (supported in native mode and Flowplayer).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;nicetable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Browser&lt;br /&gt;
! mp4&lt;br /&gt;
! webm&lt;br /&gt;
! ogg&lt;br /&gt;
! flv&lt;br /&gt;
! RTMP/HLS*&lt;br /&gt;
|-&lt;br /&gt;
! Windows 7&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Chrome 33.0.1750.117&lt;br /&gt;
| html5&lt;br /&gt;
| html5&lt;br /&gt;
| html5&lt;br /&gt;
| flash&lt;br /&gt;
| flash&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Firefox 27.0.1&lt;br /&gt;
| html5&lt;br /&gt;
| html5&lt;br /&gt;
| html5&lt;br /&gt;
| flash&lt;br /&gt;
| flash&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Opera 12.16&lt;br /&gt;
| flash&lt;br /&gt;
| html5&lt;br /&gt;
| -&lt;br /&gt;
| flash&lt;br /&gt;
| flash&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Safari 5.1.7&lt;br /&gt;
| flash&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| flash&lt;br /&gt;
| flash&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Internet Explorer 11.0.9600.x&lt;br /&gt;
| html5&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| flash&lt;br /&gt;
| flash&lt;br /&gt;
|-&lt;br /&gt;
! Linux (Debian Wheezy)&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Chrome 33.0.1750.115&lt;br /&gt;
| html5&lt;br /&gt;
| html5&lt;br /&gt;
| html5&lt;br /&gt;
| flash&lt;br /&gt;
| flash&lt;br /&gt;
|-&lt;br /&gt;
! OSX 10.9&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Safari 7.0 (9537.71)&lt;br /&gt;
| html5&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| flash&lt;br /&gt;
| html5&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Chrome 33.0.1750.117&lt;br /&gt;
| html5&lt;br /&gt;
| html5&lt;br /&gt;
| html5&lt;br /&gt;
| flash&lt;br /&gt;
| flash&lt;br /&gt;
|-&lt;br /&gt;
! Android 4.2.2 phone (CyanogenMod, no flash)&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Chrome 32.0.1700.99&lt;br /&gt;
| html5&lt;br /&gt;
| html5&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Browser 4.2.2 (com.android.browser)&lt;br /&gt;
| html5&lt;br /&gt;
| html5&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| html5&lt;br /&gt;
|-&lt;br /&gt;
! Android 4.2.2 tablet (GalaxyTab2, flash app 11.1.115.36)&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Chrome 32.0.1700.99&lt;br /&gt;
| html5&lt;br /&gt;
| html5&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Browser 4.2.2 (com.android.browser)&lt;br /&gt;
| html5&lt;br /&gt;
| html5&lt;br /&gt;
| -&lt;br /&gt;
| flash&lt;br /&gt;
| html5&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Opera 19.0.1340.x&lt;br /&gt;
| html5&lt;br /&gt;
| html5&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
! iPhone 4S (6.1.3)&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Safari&lt;br /&gt;
| html5&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| html5&lt;br /&gt;
|-&lt;br /&gt;
! iPad 4 (7.0.6)&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Safari&lt;br /&gt;
| html5&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| html5&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;small&amp;gt;* For HLS/RTMP, html5 in the table means HLS has been used, flash means player fell back and used RTMP.&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sub Tasks ==&lt;br /&gt;
&lt;br /&gt;
In initial stage FlowPlayer HTML5 (or any other) will handle all existing HTML5 Video extensions as per core_media_player_html5video class, plus m3u8 (HLS). It will also be possible optionally to make flash files handled by HTML5 Video player as well (possibility of using existing flash FlowPlayer for flv files will remain).&lt;br /&gt;
&lt;br /&gt;
== Mock-Ups/Prototypes ==&lt;br /&gt;
&lt;br /&gt;
See [[#Sample_Pages|Sample pages]] section.&lt;br /&gt;
&lt;br /&gt;
== Workaround ==&lt;br /&gt;
&lt;br /&gt;
As intermediate solution, if you require player consistency throughout all browsers and platforms, you may consider using JW Player filter: https://github.com/lucisgit/moodle-filter_jwplayer Notice, that JW Player is not free for commercial use.&lt;br /&gt;
&lt;br /&gt;
== Related Tracker Issues ==&lt;br /&gt;
* MDL-38158&lt;br /&gt;
&lt;br /&gt;
== Useful links ==&lt;br /&gt;
* http://praegnanz.de/html5video/&lt;br /&gt;
* http://html5video.org/wiki/HTML5_Video_Player_Comparison&lt;br /&gt;
* http://www.streamingmedia.com/Articles/Editorial/Featured-Articles/Choosing-a-Video-Player-Features-and-Specs-for-the-Top-Five-94188.aspx&lt;br /&gt;
&lt;br /&gt;
[[Category:Project]]&lt;/div&gt;</summary>
		<author><name>Bawjaws</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=HTML5_player&amp;diff=44483</id>
		<title>HTML5 player</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=HTML5_player&amp;diff=44483"/>
		<updated>2014-04-17T14:53:47Z</updated>

		<summary type="html">&lt;p&gt;Bawjaws: /* Comparison Matrix */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Work in progress}}&lt;br /&gt;
{{Infobox Project&lt;br /&gt;
|name = HTML5 Player with flash fallback&lt;br /&gt;
|state = In Development&lt;br /&gt;
|tracker = https://tracker.moodle.org/browse/MDL-38158&lt;br /&gt;
|discussion = https://moodle.org/mod/forum/discuss.php?d=222753#p1110024&lt;br /&gt;
|assignee = [https://tracker.moodle.org/secure/ViewProfile.jspa?name=kabalin Ruslan Kabalin]&lt;br /&gt;
}}&lt;br /&gt;
{{Moodle 2.x}}&lt;br /&gt;
&lt;br /&gt;
== Project goals ==&lt;br /&gt;
&lt;br /&gt;
The purpose of this document is to choose HTML5 player with flash fallback for integration in Moodle and plan its implementation.&lt;br /&gt;
&lt;br /&gt;
The aim of this change is to reach a consistent look of the player among different platforms and browsers, as well as making sure that player starts using flash if html5 is not supported by browser for the given format. Another aim is to improve accessibility and usability, enhance customisation.&lt;br /&gt;
&lt;br /&gt;
== Considerations ==&lt;br /&gt;
&lt;br /&gt;
* Usability of the player - is it easy to use it and intuitively understand how to use controls?&lt;br /&gt;
* Accessibility of the player - possibility of keyboard navigation, subtitles, support?&lt;br /&gt;
* Appearance of the player - can its interface be modified, themes support, RTL?&lt;br /&gt;
* Consistency among browsers - does player look the same?&lt;br /&gt;
* Audio support - can player handle HTML5 &amp;lt;audio&amp;gt; tag?&lt;br /&gt;
* Mobile platforms support - does player also work on iOS and Android?&lt;br /&gt;
* Streaming media support (including adaptive-bitrate delivery) - can player handle RTMP, Apple HLS, Adobe HDS, Microsoft HSS?&lt;br /&gt;
* Plugins support - can we use or develop community plugins easily?&lt;br /&gt;
* Embedding support - so users could post media content outside Moodle, if permitted.&lt;br /&gt;
* Maintainability of the links between the player and Moodle - how much work will we need to do every time we upgrade?&lt;br /&gt;
&lt;br /&gt;
== Candidates ==&lt;br /&gt;
&lt;br /&gt;
* [http://flowplayer.org/ Flowplayer HTML5]&lt;br /&gt;
* [http://www.videojs.com/ Video.JS]&lt;br /&gt;
* [http://www.projekktor.com/ Projekktor]&lt;br /&gt;
* ?Are there other alternatives?&lt;br /&gt;
&lt;br /&gt;
== Comparison Matrix ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;nicetable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
! [[#Flowplayer_HTML5|Flowplayer HTML5]]&lt;br /&gt;
! [[#Video.JS|Video.JS]]&lt;br /&gt;
! [[#Projekktor|Projekktor]]&lt;br /&gt;
! No Player&lt;br /&gt;
|-&lt;br /&gt;
! Accessible Player:&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Keyboard control&lt;br /&gt;
| Yes&lt;br /&gt;
| No&lt;br /&gt;
| Yes (configurable)&lt;br /&gt;
| unknown&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Subtitles support&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes (via plugin)&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Touch interface&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
! Appearance:&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Skins&lt;br /&gt;
| Yes (via CSS)&lt;br /&gt;
| Yes (via CSS)&lt;br /&gt;
| Yes (via CSS)&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* CSS customisation&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| unknown&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* RTL support&lt;br /&gt;
| Yes&lt;br /&gt;
| No&lt;br /&gt;
| No&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
! Mobile platforms:&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* iOS&lt;br /&gt;
| Yes&lt;br /&gt;
| No&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Android&lt;br /&gt;
| Yes&lt;br /&gt;
| No&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
! Streaming protocols:&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* RTMP&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes (via playlist)&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Adaptive HTTP&lt;br /&gt;
| HLS&lt;br /&gt;
| HLS (via plugin)&lt;br /&gt;
| HLS (via playlist)&lt;br /&gt;
| Only in Chrome so far (Media Source Extension)&lt;br /&gt;
|-&lt;br /&gt;
! Audio player&lt;br /&gt;
| No&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border-bottom: 2px solid;&amp;quot; | Embedding support&lt;br /&gt;
| style=&amp;quot;border-bottom: 2px solid;&amp;quot; | Yes (configurable)&lt;br /&gt;
| style=&amp;quot;border-bottom: 2px solid;&amp;quot; | Yes (via addThis plugin)&lt;br /&gt;
| style=&amp;quot;border-bottom: 2px solid;&amp;quot; | Yes (via plugin)&lt;br /&gt;
|-&lt;br /&gt;
! License&lt;br /&gt;
| GPL v3 (with additional terms)&lt;br /&gt;
| Apache 2&lt;br /&gt;
| GPL v3&lt;br /&gt;
| no extra code needed&lt;br /&gt;
|-&lt;br /&gt;
! JS library&lt;br /&gt;
| jQuery&lt;br /&gt;
| -&lt;br /&gt;
| jQuery&lt;br /&gt;
| none required&lt;br /&gt;
|-&lt;br /&gt;
! Plugins infrastructure&lt;br /&gt;
| No&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
! Flash fallback player&lt;br /&gt;
| Flowplayer Flash&lt;br /&gt;
| video-js flash&lt;br /&gt;
| StobeMediaPlayback (but can be jarisplayer or some other).&lt;br /&gt;
| VideoForEverybody can allow you to use any Flash player as fallback.&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! API&lt;br /&gt;
| Yes (plus window.flowplayer object)&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Flowplayer HTML5 ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Pros:&#039;&#039;&#039;&lt;br /&gt;
* Good looking player, resembles existing flash flowplayer in Moodle (with &amp;quot;functional&amp;quot; skin)&lt;br /&gt;
* Extensive customisation (via CSS3 skins and configuration object)&lt;br /&gt;
* Streaming support (RTMP, HLS)&lt;br /&gt;
* Good accessibility features&lt;br /&gt;
* Configurable embedding functionality&lt;br /&gt;
* Existing flash flowplayer can be configured for fallback (the appearance of player will not be affected).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Cons:&#039;&#039;&#039;&lt;br /&gt;
* Require jQuery for functioning&lt;br /&gt;
* Flowplayer logo remains on screen&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Technical notes (lessons learned from the prototypes)&#039;&#039;&#039;&lt;br /&gt;
* Player initialisation is done using wrapper around &amp;lt;video&amp;gt;.&lt;br /&gt;
* width and height attributes in video tag are ignored, player size is configured via wrapper size only.&lt;br /&gt;
* RTMP server connection is configured via data-rtmp attribute in wrapper or player init config parameter, actual path the file specified in src attribute of source item.&lt;br /&gt;
* &amp;lt;source type=&amp;quot;video/flash&amp;quot;... dummy MIME type to force using plash player for whatever content.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Missing features&#039;&#039;&#039;&lt;br /&gt;
* Plugins infrastructure&lt;br /&gt;
* No audio support&lt;br /&gt;
&lt;br /&gt;
=== Video.JS ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Pros:&#039;&#039;&#039;&lt;br /&gt;
* No logo on screen.&lt;br /&gt;
* Extensive API.&lt;br /&gt;
* No extra JS library needed.&lt;br /&gt;
* Many plugins.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Cons:&#039;&#039;&#039;&lt;br /&gt;
* Poor documentation&lt;br /&gt;
* RTMP requires non-standard MIME.&lt;br /&gt;
* Android and iOS override Video.JS with own player, when not overridden, content is not playing.&lt;br /&gt;
* No RTL.&lt;br /&gt;
* HLS support via plugin (many files to include, external contributor see https://github.com/videojs/videojs-contrib-hls).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Technical notes (lessons learned from the prototypes)&#039;&#039;&#039;&lt;br /&gt;
* Player initialisation is done using &amp;lt;video&amp;gt; tag directly (no wrapper needed).&lt;br /&gt;
* RTMP server connection and path specified as single URI in src attribute of source item, &#039;&amp;amp;&#039; character is used as server connection and path divider.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Missing features&#039;&#039;&#039;&lt;br /&gt;
* Embedded HLS support.&lt;br /&gt;
&lt;br /&gt;
=== Projekktor ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Pros:&#039;&#039;&#039;&lt;br /&gt;
* No logo on screen.&lt;br /&gt;
* Well documented API.&lt;br /&gt;
* Media RSS support.&lt;br /&gt;
* Possibility to choose flash player for fallback (included by default are StrobeMediaPlayback and Jarisplayer, both Open Source).&lt;br /&gt;
* Platform preference order selection (e.g. browser, ios, android, flash, native).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Cons:&#039;&#039;&#039;&lt;br /&gt;
* Uses flash where it is not supposed to (e.g. mp4 in Chrome).&lt;br /&gt;
* Issues on ios and android (suggests to download file when play button is pressed).&lt;br /&gt;
* RTMP only work if defined via playlist rather than in &amp;lt;source&amp;gt; tags.&lt;br /&gt;
* Subtitles plugin is not free.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Technical notes (lessons learned from the prototypes)&#039;&#039;&#039;&lt;br /&gt;
* Player initialisation is done using &amp;lt;video&amp;gt; tag directly (no wrapper needed).&lt;br /&gt;
* Make sure &amp;lt;video&amp;gt; tag has class attribute with &#039;projekktor&#039; value (even if you initialise it by ID of the element), player will not work properly otherwise.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Missing features&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== HTML5 browser native ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Pros:&#039;&#039;&#039;&lt;br /&gt;
* Simple&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Cons:&#039;&#039;&#039;&lt;br /&gt;
* IE8 has no support&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Technical notes&#039;&#039;&#039;&lt;br /&gt;
* &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Missing features&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Cross-browser support ==&lt;br /&gt;
&lt;br /&gt;
=== Method ===&lt;br /&gt;
Compatibility checks were done manually by accessing the sample page using different browsers and platforms. Sample page contained the list of identical player instances, initialised for each &amp;lt;video&amp;gt; definition with a &amp;lt;source&amp;gt; of particular format: mp4, webm, ogg, flv. Streaming support was checked by setting up a &amp;lt;video&amp;gt; container with two sources of the same video, one was HLS (Apple HTTP Live Streaming) stream for browsers and platforms that support html5 video streaming, another one was RTMP which is played using flash engine and supposed to be used in case if HLS is not supported.&lt;br /&gt;
&lt;br /&gt;
=== Sample Pages ===&lt;br /&gt;
&lt;br /&gt;
* [https://dev.mle.lancs.ac.uk/videotest/players.php?player=flowplayer Flowplayer HTML5] version 5.4.6.&lt;br /&gt;
* [https://dev.mle.lancs.ac.uk/videotest/players.php?player=videojs Video.JS] version 4.4.1.&lt;br /&gt;
* [https://dev.mle.lancs.ac.uk/videotest/players.php?player=projekktor Projekktor] version 1.3.09.&lt;br /&gt;
&lt;br /&gt;
=== Source ===&lt;br /&gt;
&lt;br /&gt;
Source of testing page is hosted on [https://github.com/kabalin/test-html5-players/blob/master/players.php github]. The actual source of the html page can be viewed in browser.&lt;br /&gt;
&lt;br /&gt;
=== Discussion ===&lt;br /&gt;
&lt;br /&gt;
The players comparison that has been carried out demonstrated that &amp;quot;least hassle&amp;quot; player is Flowplayer. Despite some drawbacks listed in [[#Flowplayer_HTML5|corresponding section above]], it is clearly a winner as it works as expected and according to documentation for all browsers and platforms I had chance to test it. This is the only player that supports RTL layout, display platform incompatibility message prior to attempt to play, and was simple to configure (no undocumented tricks that I had to figure out to make it work). Both VideoJS and Projekktor do now perform properly in all cases. Among those two, I personally prefer Projekktor more for its extensive API, plugins infrastructure and configuration flexibility. However problems on mobile platforms and flash fallback inconsistency make them unreliable at this stage.&lt;br /&gt;
&lt;br /&gt;
=== Compatibility results ===&lt;br /&gt;
&lt;br /&gt;
The table was populated using Flowplayer as others do not perform good enough with some formats and platforms, e.g. VideoJS allow mobile platform player to override itself, Projekktor does not always use HTML5 where browser clearly can handle it (supported in native mode and Flowplayer).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;nicetable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Browser&lt;br /&gt;
! mp4&lt;br /&gt;
! webm&lt;br /&gt;
! ogg&lt;br /&gt;
! flv&lt;br /&gt;
! RTMP/HLS*&lt;br /&gt;
|-&lt;br /&gt;
! Windows 7&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Chrome 33.0.1750.117&lt;br /&gt;
| html5&lt;br /&gt;
| html5&lt;br /&gt;
| html5&lt;br /&gt;
| flash&lt;br /&gt;
| flash&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Firefox 27.0.1&lt;br /&gt;
| html5&lt;br /&gt;
| html5&lt;br /&gt;
| html5&lt;br /&gt;
| flash&lt;br /&gt;
| flash&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Opera 12.16&lt;br /&gt;
| flash&lt;br /&gt;
| html5&lt;br /&gt;
| -&lt;br /&gt;
| flash&lt;br /&gt;
| flash&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Safari 5.1.7&lt;br /&gt;
| flash&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| flash&lt;br /&gt;
| flash&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Internet Explorer 11.0.9600.x&lt;br /&gt;
| html5&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| flash&lt;br /&gt;
| flash&lt;br /&gt;
|-&lt;br /&gt;
! Linux (Debian Wheezy)&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Chrome 33.0.1750.115&lt;br /&gt;
| html5&lt;br /&gt;
| html5&lt;br /&gt;
| html5&lt;br /&gt;
| flash&lt;br /&gt;
| flash&lt;br /&gt;
|-&lt;br /&gt;
! OSX 10.9&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Safari 7.0 (9537.71)&lt;br /&gt;
| html5&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| flash&lt;br /&gt;
| html5&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Chrome 33.0.1750.117&lt;br /&gt;
| html5&lt;br /&gt;
| html5&lt;br /&gt;
| html5&lt;br /&gt;
| flash&lt;br /&gt;
| flash&lt;br /&gt;
|-&lt;br /&gt;
! Android 4.2.2 phone (CyanogenMod, no flash)&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Chrome 32.0.1700.99&lt;br /&gt;
| html5&lt;br /&gt;
| html5&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Browser 4.2.2 (com.android.browser)&lt;br /&gt;
| html5&lt;br /&gt;
| html5&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| html5&lt;br /&gt;
|-&lt;br /&gt;
! Android 4.2.2 tablet (GalaxyTab2, flash app 11.1.115.36)&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Chrome 32.0.1700.99&lt;br /&gt;
| html5&lt;br /&gt;
| html5&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Browser 4.2.2 (com.android.browser)&lt;br /&gt;
| html5&lt;br /&gt;
| html5&lt;br /&gt;
| -&lt;br /&gt;
| flash&lt;br /&gt;
| html5&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Opera 19.0.1340.x&lt;br /&gt;
| html5&lt;br /&gt;
| html5&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
! iPhone 4S (6.1.3)&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Safari&lt;br /&gt;
| html5&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| html5&lt;br /&gt;
|-&lt;br /&gt;
! iPad 4 (7.0.6)&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Safari&lt;br /&gt;
| html5&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| html5&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;small&amp;gt;* For HLS/RTMP, html5 in the table means HLS has been used, flash means player fell back and used RTMP.&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sub Tasks ==&lt;br /&gt;
&lt;br /&gt;
In initial stage FlowPlayer HTML5 (or any other) will handle all existing HTML5 Video extensions as per core_media_player_html5video class, plus m3u8 (HLS). It will also be possible optionally to make flash files handled by HTML5 Video player as well (possibility of using existing flash FlowPlayer for flv files will remain).&lt;br /&gt;
&lt;br /&gt;
== Mock-Ups/Prototypes ==&lt;br /&gt;
&lt;br /&gt;
See [[#Sample_Pages|Sample pages]] section.&lt;br /&gt;
&lt;br /&gt;
== Workaround ==&lt;br /&gt;
&lt;br /&gt;
As intermediate solution, if you require player consistency throughout all browsers and platforms, you may consider using JW Player filter: https://github.com/lucisgit/moodle-filter_jwplayer Notice, that JW Player is not free for commercial use.&lt;br /&gt;
&lt;br /&gt;
== Related Tracker Issues ==&lt;br /&gt;
* MDL-38158&lt;br /&gt;
&lt;br /&gt;
== Useful links ==&lt;br /&gt;
* http://praegnanz.de/html5video/&lt;br /&gt;
* http://html5video.org/wiki/HTML5_Video_Player_Comparison&lt;br /&gt;
* http://www.streamingmedia.com/Articles/Editorial/Featured-Articles/Choosing-a-Video-Player-Features-and-Specs-for-the-Top-Five-94188.aspx&lt;br /&gt;
&lt;br /&gt;
[[Category:Project]]&lt;/div&gt;</summary>
		<author><name>Bawjaws</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=HTML5_player&amp;diff=44482</id>
		<title>HTML5 player</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=HTML5_player&amp;diff=44482"/>
		<updated>2014-04-17T14:38:45Z</updated>

		<summary type="html">&lt;p&gt;Bawjaws: /* Comparison Matrix */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Work in progress}}&lt;br /&gt;
{{Infobox Project&lt;br /&gt;
|name = HTML5 Player with flash fallback&lt;br /&gt;
|state = In Development&lt;br /&gt;
|tracker = https://tracker.moodle.org/browse/MDL-38158&lt;br /&gt;
|discussion = https://moodle.org/mod/forum/discuss.php?d=222753#p1110024&lt;br /&gt;
|assignee = [https://tracker.moodle.org/secure/ViewProfile.jspa?name=kabalin Ruslan Kabalin]&lt;br /&gt;
}}&lt;br /&gt;
{{Moodle 2.x}}&lt;br /&gt;
&lt;br /&gt;
== Project goals ==&lt;br /&gt;
&lt;br /&gt;
The purpose of this document is to choose HTML5 player with flash fallback for integration in Moodle and plan its implementation.&lt;br /&gt;
&lt;br /&gt;
The aim of this change is to reach a consistent look of the player among different platforms and browsers, as well as making sure that player starts using flash if html5 is not supported by browser for the given format. Another aim is to improve accessibility and usability, enhance customisation.&lt;br /&gt;
&lt;br /&gt;
== Considerations ==&lt;br /&gt;
&lt;br /&gt;
* Usability of the player - is it easy to use it and intuitively understand how to use controls?&lt;br /&gt;
* Accessibility of the player - possibility of keyboard navigation, subtitles, support?&lt;br /&gt;
* Appearance of the player - can its interface be modified, themes support, RTL?&lt;br /&gt;
* Consistency among browsers - does player look the same?&lt;br /&gt;
* Audio support - can player handle HTML5 &amp;lt;audio&amp;gt; tag?&lt;br /&gt;
* Mobile platforms support - does player also work on iOS and Android?&lt;br /&gt;
* Streaming media support (including adaptive-bitrate delivery) - can player handle RTMP, Apple HLS, Adobe HDS, Microsoft HSS?&lt;br /&gt;
* Plugins support - can we use or develop community plugins easily?&lt;br /&gt;
* Embedding support - so users could post media content outside Moodle, if permitted.&lt;br /&gt;
* Maintainability of the links between the player and Moodle - how much work will we need to do every time we upgrade?&lt;br /&gt;
&lt;br /&gt;
== Candidates ==&lt;br /&gt;
&lt;br /&gt;
* [http://flowplayer.org/ Flowplayer HTML5]&lt;br /&gt;
* [http://www.videojs.com/ Video.JS]&lt;br /&gt;
* [http://www.projekktor.com/ Projekktor]&lt;br /&gt;
* ?Are there other alternatives?&lt;br /&gt;
&lt;br /&gt;
== Comparison Matrix ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;nicetable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
! [[#Flowplayer_HTML5|Flowplayer HTML5]]&lt;br /&gt;
! [[#Video.JS|Video.JS]]&lt;br /&gt;
! [[#Projekktor|Projekktor]]&lt;br /&gt;
! No Player&lt;br /&gt;
|-&lt;br /&gt;
! Accessible Player:&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Keyboard control&lt;br /&gt;
| Yes&lt;br /&gt;
| No&lt;br /&gt;
| Yes (configurable)&lt;br /&gt;
| unknown&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Subtitles support&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes (via plugin)&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Touch interface&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
! Appearance:&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Skins&lt;br /&gt;
| Yes (via CSS)&lt;br /&gt;
| Yes (via CSS)&lt;br /&gt;
| Yes (via CSS)&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* CSS customisation&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| unknown&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* RTL support&lt;br /&gt;
| Yes&lt;br /&gt;
| No&lt;br /&gt;
| No&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
! Mobile platforms:&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* iOS&lt;br /&gt;
| Yes&lt;br /&gt;
| No&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Android&lt;br /&gt;
| Yes&lt;br /&gt;
| No&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
! Streaming protocols:&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* RTMP&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes (via playlist)&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Adaptive HTTP&lt;br /&gt;
| HLS&lt;br /&gt;
| HLS (via plugin)&lt;br /&gt;
| HLS (via playlist)&lt;br /&gt;
| Only in Chrome so far (Media Source Extension)&lt;br /&gt;
|-&lt;br /&gt;
! Audio player&lt;br /&gt;
| No&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border-bottom: 2px solid;&amp;quot; | Embedding support&lt;br /&gt;
| style=&amp;quot;border-bottom: 2px solid;&amp;quot; | Yes (configurable)&lt;br /&gt;
| style=&amp;quot;border-bottom: 2px solid;&amp;quot; | Yes (via addThis plugin)&lt;br /&gt;
| style=&amp;quot;border-bottom: 2px solid;&amp;quot; | Yes (via plugin)&lt;br /&gt;
|-&lt;br /&gt;
! License&lt;br /&gt;
| GPL v3 (with additional terms)&lt;br /&gt;
| Apache 2&lt;br /&gt;
| GPL v3&lt;br /&gt;
| no extra code needed&lt;br /&gt;
|-&lt;br /&gt;
! JS library&lt;br /&gt;
| jQuery&lt;br /&gt;
| -&lt;br /&gt;
| jQuery&lt;br /&gt;
| none required&lt;br /&gt;
|-&lt;br /&gt;
! Plugins infrastructure&lt;br /&gt;
| No&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
! Flash fallback player&lt;br /&gt;
| Flowplayer Flash&lt;br /&gt;
| video-js flash&lt;br /&gt;
| StobeMediaPlayback (but can be jarisplayer or some other).&lt;br /&gt;
| VideoForEverybody can allow you to use any Flash player as fallback.&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! API&lt;br /&gt;
| Yes (plus window.flowplayer object)&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Flowplayer HTML5 ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Pros:&#039;&#039;&#039;&lt;br /&gt;
* Good looking player, resembles existing flash flowplayer in Moodle (with &amp;quot;functional&amp;quot; skin)&lt;br /&gt;
* Extensive customisation (via CSS3 skins and configuration object)&lt;br /&gt;
* Streaming support (RTMP, HLS)&lt;br /&gt;
* Good accessibility features&lt;br /&gt;
* Configurable embedding functionality&lt;br /&gt;
* Existing flash flowplayer can be configured for fallback (the appearance of player will not be affected).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Cons:&#039;&#039;&#039;&lt;br /&gt;
* Require jQuery for functioning&lt;br /&gt;
* Flowplayer logo remains on screen&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Technical notes (lessons learned from the prototypes)&#039;&#039;&#039;&lt;br /&gt;
* Player initialisation is done using wrapper around &amp;lt;video&amp;gt;.&lt;br /&gt;
* width and height attributes in video tag are ignored, player size is configured via wrapper size only.&lt;br /&gt;
* RTMP server connection is configured via data-rtmp attribute in wrapper or player init config parameter, actual path the file specified in src attribute of source item.&lt;br /&gt;
* &amp;lt;source type=&amp;quot;video/flash&amp;quot;... dummy MIME type to force using plash player for whatever content.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Missing features&#039;&#039;&#039;&lt;br /&gt;
* Plugins infrastructure&lt;br /&gt;
* No audio support&lt;br /&gt;
&lt;br /&gt;
=== Video.JS ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Pros:&#039;&#039;&#039;&lt;br /&gt;
* No logo on screen.&lt;br /&gt;
* Extensive API.&lt;br /&gt;
* No extra JS library needed.&lt;br /&gt;
* Many plugins.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Cons:&#039;&#039;&#039;&lt;br /&gt;
* Poor documentation&lt;br /&gt;
* RTMP requires non-standard MIME.&lt;br /&gt;
* Android and iOS override Video.JS with own player, when not overridden, content is not playing.&lt;br /&gt;
* No RTL.&lt;br /&gt;
* HLS support via plugin (many files to include, external contributor see https://github.com/videojs/videojs-contrib-hls).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Technical notes (lessons learned from the prototypes)&#039;&#039;&#039;&lt;br /&gt;
* Player initialisation is done using &amp;lt;video&amp;gt; tag directly (no wrapper needed).&lt;br /&gt;
* RTMP server connection and path specified as single URI in src attribute of source item, &#039;&amp;amp;&#039; character is used as server connection and path divider.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Missing features&#039;&#039;&#039;&lt;br /&gt;
* Embedded HLS support.&lt;br /&gt;
&lt;br /&gt;
=== Projekktor ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Pros:&#039;&#039;&#039;&lt;br /&gt;
* No logo on screen.&lt;br /&gt;
* Well documented API.&lt;br /&gt;
* Media RSS support.&lt;br /&gt;
* Possibility to choose flash player for fallback (included by default are StrobeMediaPlayback and Jarisplayer, both Open Source).&lt;br /&gt;
* Platform preference order selection (e.g. browser, ios, android, flash, native).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Cons:&#039;&#039;&#039;&lt;br /&gt;
* Uses flash where it is not supposed to (e.g. mp4 in Chrome).&lt;br /&gt;
* Issues on ios and android (suggests to download file when play button is pressed).&lt;br /&gt;
* RTMP only work if defined via playlist rather than in &amp;lt;source&amp;gt; tags.&lt;br /&gt;
* Subtitles plugin is not free.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Technical notes (lessons learned from the prototypes)&#039;&#039;&#039;&lt;br /&gt;
* Player initialisation is done using &amp;lt;video&amp;gt; tag directly (no wrapper needed).&lt;br /&gt;
* Make sure &amp;lt;video&amp;gt; tag has class attribute with &#039;projekktor&#039; value (even if you initialise it by ID of the element), player will not work properly otherwise.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Missing features&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Cross-browser support ==&lt;br /&gt;
&lt;br /&gt;
=== Method ===&lt;br /&gt;
Compatibility checks were done manually by accessing the sample page using different browsers and platforms. Sample page contained the list of identical player instances, initialised for each &amp;lt;video&amp;gt; definition with a &amp;lt;source&amp;gt; of particular format: mp4, webm, ogg, flv. Streaming support was checked by setting up a &amp;lt;video&amp;gt; container with two sources of the same video, one was HLS (Apple HTTP Live Streaming) stream for browsers and platforms that support html5 video streaming, another one was RTMP which is played using flash engine and supposed to be used in case if HLS is not supported.&lt;br /&gt;
&lt;br /&gt;
=== Sample Pages ===&lt;br /&gt;
&lt;br /&gt;
* [https://dev.mle.lancs.ac.uk/videotest/players.php?player=flowplayer Flowplayer HTML5] version 5.4.6.&lt;br /&gt;
* [https://dev.mle.lancs.ac.uk/videotest/players.php?player=videojs Video.JS] version 4.4.1.&lt;br /&gt;
* [https://dev.mle.lancs.ac.uk/videotest/players.php?player=projekktor Projekktor] version 1.3.09.&lt;br /&gt;
&lt;br /&gt;
=== Source ===&lt;br /&gt;
&lt;br /&gt;
Source of testing page is hosted on [https://github.com/kabalin/test-html5-players/blob/master/players.php github]. The actual source of the html page can be viewed in browser.&lt;br /&gt;
&lt;br /&gt;
=== Discussion ===&lt;br /&gt;
&lt;br /&gt;
The players comparison that has been carried out demonstrated that &amp;quot;least hassle&amp;quot; player is Flowplayer. Despite some drawbacks listed in [[#Flowplayer_HTML5|corresponding section above]], it is clearly a winner as it works as expected and according to documentation for all browsers and platforms I had chance to test it. This is the only player that supports RTL layout, display platform incompatibility message prior to attempt to play, and was simple to configure (no undocumented tricks that I had to figure out to make it work). Both VideoJS and Projekktor do now perform properly in all cases. Among those two, I personally prefer Projekktor more for its extensive API, plugins infrastructure and configuration flexibility. However problems on mobile platforms and flash fallback inconsistency make them unreliable at this stage.&lt;br /&gt;
&lt;br /&gt;
=== Compatibility results ===&lt;br /&gt;
&lt;br /&gt;
The table was populated using Flowplayer as others do not perform good enough with some formats and platforms, e.g. VideoJS allow mobile platform player to override itself, Projekktor does not always use HTML5 where browser clearly can handle it (supported in native mode and Flowplayer).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;nicetable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Browser&lt;br /&gt;
! mp4&lt;br /&gt;
! webm&lt;br /&gt;
! ogg&lt;br /&gt;
! flv&lt;br /&gt;
! RTMP/HLS*&lt;br /&gt;
|-&lt;br /&gt;
! Windows 7&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Chrome 33.0.1750.117&lt;br /&gt;
| html5&lt;br /&gt;
| html5&lt;br /&gt;
| html5&lt;br /&gt;
| flash&lt;br /&gt;
| flash&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Firefox 27.0.1&lt;br /&gt;
| html5&lt;br /&gt;
| html5&lt;br /&gt;
| html5&lt;br /&gt;
| flash&lt;br /&gt;
| flash&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Opera 12.16&lt;br /&gt;
| flash&lt;br /&gt;
| html5&lt;br /&gt;
| -&lt;br /&gt;
| flash&lt;br /&gt;
| flash&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Safari 5.1.7&lt;br /&gt;
| flash&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| flash&lt;br /&gt;
| flash&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Internet Explorer 11.0.9600.x&lt;br /&gt;
| html5&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| flash&lt;br /&gt;
| flash&lt;br /&gt;
|-&lt;br /&gt;
! Linux (Debian Wheezy)&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Chrome 33.0.1750.115&lt;br /&gt;
| html5&lt;br /&gt;
| html5&lt;br /&gt;
| html5&lt;br /&gt;
| flash&lt;br /&gt;
| flash&lt;br /&gt;
|-&lt;br /&gt;
! OSX 10.9&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Safari 7.0 (9537.71)&lt;br /&gt;
| html5&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| flash&lt;br /&gt;
| html5&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Chrome 33.0.1750.117&lt;br /&gt;
| html5&lt;br /&gt;
| html5&lt;br /&gt;
| html5&lt;br /&gt;
| flash&lt;br /&gt;
| flash&lt;br /&gt;
|-&lt;br /&gt;
! Android 4.2.2 phone (CyanogenMod, no flash)&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Chrome 32.0.1700.99&lt;br /&gt;
| html5&lt;br /&gt;
| html5&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Browser 4.2.2 (com.android.browser)&lt;br /&gt;
| html5&lt;br /&gt;
| html5&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| html5&lt;br /&gt;
|-&lt;br /&gt;
! Android 4.2.2 tablet (GalaxyTab2, flash app 11.1.115.36)&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Chrome 32.0.1700.99&lt;br /&gt;
| html5&lt;br /&gt;
| html5&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Browser 4.2.2 (com.android.browser)&lt;br /&gt;
| html5&lt;br /&gt;
| html5&lt;br /&gt;
| -&lt;br /&gt;
| flash&lt;br /&gt;
| html5&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Opera 19.0.1340.x&lt;br /&gt;
| html5&lt;br /&gt;
| html5&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
! iPhone 4S (6.1.3)&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Safari&lt;br /&gt;
| html5&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| html5&lt;br /&gt;
|-&lt;br /&gt;
! iPad 4 (7.0.6)&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Safari&lt;br /&gt;
| html5&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| html5&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;small&amp;gt;* For HLS/RTMP, html5 in the table means HLS has been used, flash means player fell back and used RTMP.&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sub Tasks ==&lt;br /&gt;
&lt;br /&gt;
In initial stage FlowPlayer HTML5 (or any other) will handle all existing HTML5 Video extensions as per core_media_player_html5video class, plus m3u8 (HLS). It will also be possible optionally to make flash files handled by HTML5 Video player as well (possibility of using existing flash FlowPlayer for flv files will remain).&lt;br /&gt;
&lt;br /&gt;
== Mock-Ups/Prototypes ==&lt;br /&gt;
&lt;br /&gt;
See [[#Sample_Pages|Sample pages]] section.&lt;br /&gt;
&lt;br /&gt;
== Workaround ==&lt;br /&gt;
&lt;br /&gt;
As intermediate solution, if you require player consistency throughout all browsers and platforms, you may consider using JW Player filter: https://github.com/lucisgit/moodle-filter_jwplayer Notice, that JW Player is not free for commercial use.&lt;br /&gt;
&lt;br /&gt;
== Related Tracker Issues ==&lt;br /&gt;
* MDL-38158&lt;br /&gt;
&lt;br /&gt;
== Useful links ==&lt;br /&gt;
* http://praegnanz.de/html5video/&lt;br /&gt;
* http://html5video.org/wiki/HTML5_Video_Player_Comparison&lt;br /&gt;
* http://www.streamingmedia.com/Articles/Editorial/Featured-Articles/Choosing-a-Video-Player-Features-and-Specs-for-the-Top-Five-94188.aspx&lt;br /&gt;
&lt;br /&gt;
[[Category:Project]]&lt;/div&gt;</summary>
		<author><name>Bawjaws</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=HTML5_player&amp;diff=44481</id>
		<title>HTML5 player</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=HTML5_player&amp;diff=44481"/>
		<updated>2014-04-17T14:35:53Z</updated>

		<summary type="html">&lt;p&gt;Bawjaws: /* Candidates */  HTML native player&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Work in progress}}&lt;br /&gt;
{{Infobox Project&lt;br /&gt;
|name = HTML5 Player with flash fallback&lt;br /&gt;
|state = In Development&lt;br /&gt;
|tracker = https://tracker.moodle.org/browse/MDL-38158&lt;br /&gt;
|discussion = https://moodle.org/mod/forum/discuss.php?d=222753#p1110024&lt;br /&gt;
|assignee = [https://tracker.moodle.org/secure/ViewProfile.jspa?name=kabalin Ruslan Kabalin]&lt;br /&gt;
}}&lt;br /&gt;
{{Moodle 2.x}}&lt;br /&gt;
&lt;br /&gt;
== Project goals ==&lt;br /&gt;
&lt;br /&gt;
The purpose of this document is to choose HTML5 player with flash fallback for integration in Moodle and plan its implementation.&lt;br /&gt;
&lt;br /&gt;
The aim of this change is to reach a consistent look of the player among different platforms and browsers, as well as making sure that player starts using flash if html5 is not supported by browser for the given format. Another aim is to improve accessibility and usability, enhance customisation.&lt;br /&gt;
&lt;br /&gt;
== Considerations ==&lt;br /&gt;
&lt;br /&gt;
* Usability of the player - is it easy to use it and intuitively understand how to use controls?&lt;br /&gt;
* Accessibility of the player - possibility of keyboard navigation, subtitles, support?&lt;br /&gt;
* Appearance of the player - can its interface be modified, themes support, RTL?&lt;br /&gt;
* Consistency among browsers - does player look the same?&lt;br /&gt;
* Audio support - can player handle HTML5 &amp;lt;audio&amp;gt; tag?&lt;br /&gt;
* Mobile platforms support - does player also work on iOS and Android?&lt;br /&gt;
* Streaming media support (including adaptive-bitrate delivery) - can player handle RTMP, Apple HLS, Adobe HDS, Microsoft HSS?&lt;br /&gt;
* Plugins support - can we use or develop community plugins easily?&lt;br /&gt;
* Embedding support - so users could post media content outside Moodle, if permitted.&lt;br /&gt;
* Maintainability of the links between the player and Moodle - how much work will we need to do every time we upgrade?&lt;br /&gt;
&lt;br /&gt;
== Candidates ==&lt;br /&gt;
&lt;br /&gt;
* [http://flowplayer.org/ Flowplayer HTML5]&lt;br /&gt;
* [http://www.videojs.com/ Video.JS]&lt;br /&gt;
* [http://www.projekktor.com/ Projekktor]&lt;br /&gt;
* ?Are there other alternatives?&lt;br /&gt;
&lt;br /&gt;
== Comparison Matrix ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;nicetable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
! [[#Flowplayer_HTML5|Flowplayer HTML5]]&lt;br /&gt;
! [[#Video.JS|Video.JS]]&lt;br /&gt;
! [[#Projekktor|Projekktor]]&lt;br /&gt;
! No Player&lt;br /&gt;
|-&lt;br /&gt;
! Accessible Player:&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Keyboard control&lt;br /&gt;
| Yes&lt;br /&gt;
| No&lt;br /&gt;
| Yes (configurable)&lt;br /&gt;
| unknown&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Subtitles support&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes (via plugin)&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Touch interface&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
! Appearance:&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Skins&lt;br /&gt;
| Yes (via CSS)&lt;br /&gt;
| Yes (via CSS)&lt;br /&gt;
| Yes (via CSS)&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* CSS customisation&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| unknown&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* RTL support&lt;br /&gt;
| Yes&lt;br /&gt;
| No&lt;br /&gt;
| No&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
! Mobile platforms:&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* iOS&lt;br /&gt;
| Yes&lt;br /&gt;
| No&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Android&lt;br /&gt;
| Yes&lt;br /&gt;
| No&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
! Streaming protocols:&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* RTMP&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes (via playlist)&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Adaptive HTTP&lt;br /&gt;
| HLS&lt;br /&gt;
| HLS (via plugin)&lt;br /&gt;
| HLS (via playlist)&lt;br /&gt;
| Only in Chrome so far (Media Source Extension)&lt;br /&gt;
|-&lt;br /&gt;
! Audio player&lt;br /&gt;
| No&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border-bottom: 2px solid;&amp;quot; | Embedding support&lt;br /&gt;
| style=&amp;quot;border-bottom: 2px solid;&amp;quot; | Yes (configurable)&lt;br /&gt;
| style=&amp;quot;border-bottom: 2px solid;&amp;quot; | Yes (via addThis plugin)&lt;br /&gt;
| style=&amp;quot;border-bottom: 2px solid;&amp;quot; | Yes (via plugin)&lt;br /&gt;
|-&lt;br /&gt;
! License&lt;br /&gt;
| GPL v3 (with additional terms)&lt;br /&gt;
| Apache 2&lt;br /&gt;
| GPL v3&lt;br /&gt;
| no extra code needed&lt;br /&gt;
|-&lt;br /&gt;
! JS library&lt;br /&gt;
| jQuery&lt;br /&gt;
| -&lt;br /&gt;
| jQuery&lt;br /&gt;
| none required&lt;br /&gt;
|-&lt;br /&gt;
! Plugins infrastructure&lt;br /&gt;
| No&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
! Flash fallback player&lt;br /&gt;
| Flowplayer Flash&lt;br /&gt;
| video-js flash&lt;br /&gt;
| StobeMediaPlayback (but can be jarisplayer or some other).&lt;br /&gt;
| VideoForEverybody can allow you to use any Flash player as fallback.&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! API&lt;br /&gt;
| Yes (plus window.flowplayer object)&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Flowplayer HTML5 ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Pros:&#039;&#039;&#039;&lt;br /&gt;
* Good looking player, resembles existing flash flowplayer in Moodle (with &amp;quot;functional&amp;quot; skin)&lt;br /&gt;
* Extensive customisation (via CSS3 skins and configuration object)&lt;br /&gt;
* Streaming support (RTMP, HLS)&lt;br /&gt;
* Good accessibility features&lt;br /&gt;
* Configurable embedding functionality&lt;br /&gt;
* Existing flash flowplayer can be configured for fallback (the appearance of player will not be affected).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Cons:&#039;&#039;&#039;&lt;br /&gt;
* Require jQuery for functioning&lt;br /&gt;
* Flowplayer logo remains on screen&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Technical notes (lessons learned from the prototypes)&#039;&#039;&#039;&lt;br /&gt;
* Player initialisation is done using wrapper around &amp;lt;video&amp;gt;.&lt;br /&gt;
* width and height attributes in video tag are ignored, player size is configured via wrapper size only.&lt;br /&gt;
* RTMP server connection is configured via data-rtmp attribute in wrapper or player init config parameter, actual path the file specified in src attribute of source item.&lt;br /&gt;
* &amp;lt;source type=&amp;quot;video/flash&amp;quot;... dummy MIME type to force using plash player for whatever content.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Missing features&#039;&#039;&#039;&lt;br /&gt;
* Plugins infrastructure&lt;br /&gt;
* No audio support&lt;br /&gt;
&lt;br /&gt;
=== Video.JS ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Pros:&#039;&#039;&#039;&lt;br /&gt;
* No logo on screen.&lt;br /&gt;
* Extensive API.&lt;br /&gt;
* No extra JS library needed.&lt;br /&gt;
* Many plugins.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Cons:&#039;&#039;&#039;&lt;br /&gt;
* Poor documentation&lt;br /&gt;
* RTMP requires non-standard MIME.&lt;br /&gt;
* Android and iOS override Video.JS with own player, when not overridden, content is not playing.&lt;br /&gt;
* No RTL.&lt;br /&gt;
* HLS support via plugin (many files to include, external contributor see https://github.com/videojs/videojs-contrib-hls).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Technical notes (lessons learned from the prototypes)&#039;&#039;&#039;&lt;br /&gt;
* Player initialisation is done using &amp;lt;video&amp;gt; tag directly (no wrapper needed).&lt;br /&gt;
* RTMP server connection and path specified as single URI in src attribute of source item, &#039;&amp;amp;&#039; character is used as server connection and path divider.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Missing features&#039;&#039;&#039;&lt;br /&gt;
* Embedded HLS support.&lt;br /&gt;
&lt;br /&gt;
=== Projekktor ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Pros:&#039;&#039;&#039;&lt;br /&gt;
* No logo on screen.&lt;br /&gt;
* Well documented API.&lt;br /&gt;
* Media RSS support.&lt;br /&gt;
* Possibility to choose flash player for fallback (included by default are StrobeMediaPlayback and Jarisplayer, both Open Source).&lt;br /&gt;
* Platform preference order selection (e.g. browser, ios, android, flash, native).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Cons:&#039;&#039;&#039;&lt;br /&gt;
* Uses flash where it is not supposed to (e.g. mp4 in Chrome).&lt;br /&gt;
* Issues on ios and android (suggests to download file when play button is pressed).&lt;br /&gt;
* RTMP only work if defined via playlist rather than in &amp;lt;source&amp;gt; tags.&lt;br /&gt;
* Subtitles plugin is not free.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Technical notes (lessons learned from the prototypes)&#039;&#039;&#039;&lt;br /&gt;
* Player initialisation is done using &amp;lt;video&amp;gt; tag directly (no wrapper needed).&lt;br /&gt;
* Make sure &amp;lt;video&amp;gt; tag has class attribute with &#039;projekktor&#039; value (even if you initialise it by ID of the element), player will not work properly otherwise.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Missing features&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Cross-browser support ==&lt;br /&gt;
&lt;br /&gt;
=== Method ===&lt;br /&gt;
Compatibility checks were done manually by accessing the sample page using different browsers and platforms. Sample page contained the list of identical player instances, initialised for each &amp;lt;video&amp;gt; definition with a &amp;lt;source&amp;gt; of particular format: mp4, webm, ogg, flv. Streaming support was checked by setting up a &amp;lt;video&amp;gt; container with two sources of the same video, one was HLS (Apple HTTP Live Streaming) stream for browsers and platforms that support html5 video streaming, another one was RTMP which is played using flash engine and supposed to be used in case if HLS is not supported.&lt;br /&gt;
&lt;br /&gt;
=== Sample Pages ===&lt;br /&gt;
&lt;br /&gt;
* [https://dev.mle.lancs.ac.uk/videotest/players.php?player=flowplayer Flowplayer HTML5] version 5.4.6.&lt;br /&gt;
* [https://dev.mle.lancs.ac.uk/videotest/players.php?player=videojs Video.JS] version 4.4.1.&lt;br /&gt;
* [https://dev.mle.lancs.ac.uk/videotest/players.php?player=projekktor Projekktor] version 1.3.09.&lt;br /&gt;
&lt;br /&gt;
=== Source ===&lt;br /&gt;
&lt;br /&gt;
Source of testing page is hosted on [https://github.com/kabalin/test-html5-players/blob/master/players.php github]. The actual source of the html page can be viewed in browser.&lt;br /&gt;
&lt;br /&gt;
=== Discussion ===&lt;br /&gt;
&lt;br /&gt;
The players comparison that has been carried out demonstrated that &amp;quot;least hassle&amp;quot; player is Flowplayer. Despite some drawbacks listed in [[#Flowplayer_HTML5|corresponding section above]], it is clearly a winner as it works as expected and according to documentation for all browsers and platforms I had chance to test it. This is the only player that supports RTL layout, display platform incompatibility message prior to attempt to play, and was simple to configure (no undocumented tricks that I had to figure out to make it work). Both VideoJS and Projekktor do now perform properly in all cases. Among those two, I personally prefer Projekktor more for its extensive API, plugins infrastructure and configuration flexibility. However problems on mobile platforms and flash fallback inconsistency make them unreliable at this stage.&lt;br /&gt;
&lt;br /&gt;
=== Compatibility results ===&lt;br /&gt;
&lt;br /&gt;
The table was populated using Flowplayer as others do not perform good enough with some formats and platforms, e.g. VideoJS allow mobile platform player to override itself, Projekktor does not always use HTML5 where browser clearly can handle it (supported in native mode and Flowplayer).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;nicetable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Browser&lt;br /&gt;
! mp4&lt;br /&gt;
! webm&lt;br /&gt;
! ogg&lt;br /&gt;
! flv&lt;br /&gt;
! RTMP/HLS*&lt;br /&gt;
|-&lt;br /&gt;
! Windows 7&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Chrome 33.0.1750.117&lt;br /&gt;
| html5&lt;br /&gt;
| html5&lt;br /&gt;
| html5&lt;br /&gt;
| flash&lt;br /&gt;
| flash&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Firefox 27.0.1&lt;br /&gt;
| html5&lt;br /&gt;
| html5&lt;br /&gt;
| html5&lt;br /&gt;
| flash&lt;br /&gt;
| flash&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Opera 12.16&lt;br /&gt;
| flash&lt;br /&gt;
| html5&lt;br /&gt;
| -&lt;br /&gt;
| flash&lt;br /&gt;
| flash&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Safari 5.1.7&lt;br /&gt;
| flash&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| flash&lt;br /&gt;
| flash&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Internet Explorer 11.0.9600.x&lt;br /&gt;
| html5&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| flash&lt;br /&gt;
| flash&lt;br /&gt;
|-&lt;br /&gt;
! Linux (Debian Wheezy)&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Chrome 33.0.1750.115&lt;br /&gt;
| html5&lt;br /&gt;
| html5&lt;br /&gt;
| html5&lt;br /&gt;
| flash&lt;br /&gt;
| flash&lt;br /&gt;
|-&lt;br /&gt;
! OSX 10.9&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Safari 7.0 (9537.71)&lt;br /&gt;
| html5&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| flash&lt;br /&gt;
| html5&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Chrome 33.0.1750.117&lt;br /&gt;
| html5&lt;br /&gt;
| html5&lt;br /&gt;
| html5&lt;br /&gt;
| flash&lt;br /&gt;
| flash&lt;br /&gt;
|-&lt;br /&gt;
! Android 4.2.2 phone (CyanogenMod, no flash)&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Chrome 32.0.1700.99&lt;br /&gt;
| html5&lt;br /&gt;
| html5&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Browser 4.2.2 (com.android.browser)&lt;br /&gt;
| html5&lt;br /&gt;
| html5&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| html5&lt;br /&gt;
|-&lt;br /&gt;
! Android 4.2.2 tablet (GalaxyTab2, flash app 11.1.115.36)&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Chrome 32.0.1700.99&lt;br /&gt;
| html5&lt;br /&gt;
| html5&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Browser 4.2.2 (com.android.browser)&lt;br /&gt;
| html5&lt;br /&gt;
| html5&lt;br /&gt;
| -&lt;br /&gt;
| flash&lt;br /&gt;
| html5&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Opera 19.0.1340.x&lt;br /&gt;
| html5&lt;br /&gt;
| html5&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
! iPhone 4S (6.1.3)&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Safari&lt;br /&gt;
| html5&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| html5&lt;br /&gt;
|-&lt;br /&gt;
! iPad 4 (7.0.6)&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
* Safari&lt;br /&gt;
| html5&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| html5&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;small&amp;gt;* For HLS/RTMP, html5 in the table means HLS has been used, flash means player fell back and used RTMP.&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sub Tasks ==&lt;br /&gt;
&lt;br /&gt;
In initial stage FlowPlayer HTML5 (or any other) will handle all existing HTML5 Video extensions as per core_media_player_html5video class, plus m3u8 (HLS). It will also be possible optionally to make flash files handled by HTML5 Video player as well (possibility of using existing flash FlowPlayer for flv files will remain).&lt;br /&gt;
&lt;br /&gt;
== Mock-Ups/Prototypes ==&lt;br /&gt;
&lt;br /&gt;
See [[#Sample_Pages|Sample pages]] section.&lt;br /&gt;
&lt;br /&gt;
== Workaround ==&lt;br /&gt;
&lt;br /&gt;
As intermediate solution, if you require player consistency throughout all browsers and platforms, you may consider using JW Player filter: https://github.com/lucisgit/moodle-filter_jwplayer Notice, that JW Player is not free for commercial use.&lt;br /&gt;
&lt;br /&gt;
== Related Tracker Issues ==&lt;br /&gt;
* MDL-38158&lt;br /&gt;
&lt;br /&gt;
== Useful links ==&lt;br /&gt;
* http://praegnanz.de/html5video/&lt;br /&gt;
* http://html5video.org/wiki/HTML5_Video_Player_Comparison&lt;br /&gt;
* http://www.streamingmedia.com/Articles/Editorial/Featured-Articles/Choosing-a-Video-Player-Features-and-Specs-for-the-Top-Five-94188.aspx&lt;br /&gt;
&lt;br /&gt;
[[Category:Project]]&lt;/div&gt;</summary>
		<author><name>Bawjaws</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Common_unit_test_problems&amp;diff=43328</id>
		<title>Common unit test problems</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Common_unit_test_problems&amp;diff=43328"/>
		<updated>2013-11-29T12:28:31Z</updated>

		<summary type="html">&lt;p&gt;Bawjaws: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== General Issues ==&lt;br /&gt;
&lt;br /&gt;
=== Unit tests are taking more than 10 mins to run ===&lt;br /&gt;
This problem is under investigation. We are hoping to find the soluton. On a typical system all tests complete in under 6 mins.--[[User:Dan Poltawski|Dan Poltawski]] 12:43, 15 May 2012 (WST)&lt;br /&gt;
&lt;br /&gt;
You maybe find much better performance on psql as a workaround for now if not doing DB dependent tests.&lt;br /&gt;
&lt;br /&gt;
If using linux on an EXT4 file system, disabling barriers by adding barrier=0 to the end of the options in /etc/fstab for the drive should offer HUGE speed improvements. Note that this is very dangerous for system stability and in the event of a power failure can cause permanent and irrecoverable data loss.&lt;br /&gt;
&lt;br /&gt;
=== Segfaults on Oracle ===&lt;br /&gt;
&lt;br /&gt;
When I was running tests on oracle I was getting phpunit sefaulting.. --[[User:Dan Poltawski|Dan Poltawski]] 00:29, 16 May 2012 (WST)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Solution&#039;&#039;&#039; Set statement_cache_size in php.ini: &amp;lt;code&amp;gt;oci8.statement_cache_size = 0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Specific failures ==&lt;br /&gt;
&lt;br /&gt;
=== dml_testcase::test_unique_index_collation_trouble===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Unique index is accent insensitive, this may cause problems for non-ascii languages. This is usually caused by accent insensitive default collation.&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Solution&#039;&#039;&#039; This is expected to fail if you are running MySQL. These tests should pass if you use the &amp;lt;code&amp;gt;utf8_bin&amp;lt;/code&amp;gt; collation on your database for unit tests, but we recommend &amp;lt;code&amp;gt;utf8_unicode_ci&amp;lt;/code&amp;gt; for actual live Moodle sites. Work is being done to resolve this issue, read more about the [[Database collation issue]] for further info.&lt;br /&gt;
&lt;br /&gt;
=== dml_testcase::test_sql_binary_equal ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;SQL operator &amp;quot;=&amp;quot; is expected to be case sensitive Failed asserting that 1 matches expected 2.&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Solution&#039;&#039;&#039; This is expected to fail if you are running MySQL. These tests should pass if you use the &amp;lt;code&amp;gt;utf8_bin&amp;lt;/code&amp;gt; collation on your database for unit tests, but we recommend &amp;lt;code&amp;gt;utf8_unicode_ci&amp;lt;/code&amp;gt; for actual live Moodle sites. Work is being done to resolve this issue, read more about the [[Database collation issue]] for further info.&lt;br /&gt;
&lt;br /&gt;
=== grading_manager_testcase::test_tokenize===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;A test using UTF-8 characters has failed. Consider updating PHP and PHP&#039;s PCRE or INTL extensions (MDL-30494) Failed asserting that false is true.&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Solution&#039;&#039;&#039; This is expected to fail if you are running MySQL. These tests should pass if you use the &amp;lt;code&amp;gt;utf8_bin&amp;lt;/code&amp;gt; collation on your database for unit tests, but we recommend &amp;lt;code&amp;gt;utf8_unicode_ci&amp;lt;/code&amp;gt; for actual live Moodle sites. Work is being done to resolve this issue, read more about the [[Database collation issue]] for further info.&lt;br /&gt;
&lt;br /&gt;
=== moodlesimplepie_testcase::test_getfeed ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Failed to load the sample RSS file. Please check your proxy settings in Moodle. %s&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Solution&#039;&#039;&#039; Your moodle needs network connectivity, please check proxy settings.&lt;br /&gt;
&lt;br /&gt;
=== moodlesimplepie_testcase::test_redirect ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Failed asserting that &#039;cURL Error: Operation timed out after 2000 milliseconds with 0 bytes received&#039; is null.&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Solution&#039;&#039;&#039; Your moodle needs network connectivity, please check proxy settings&lt;br /&gt;
&lt;br /&gt;
=== collatorlib_testcase::test_asort_objects_by_method ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Collation aware sorting not supported, PHP extension &amp;quot;intl&amp;quot; is not available.&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Solution&#039;&#039;&#039; Install php intl extension.&lt;br /&gt;
&lt;br /&gt;
Note that, on Windows, this extension does not seem to be included in the installer, but you can get it by downloading the zip, and copying the right DLLs across. If you Google, there are more detailed instructions on Stack Exchange.&lt;br /&gt;
&lt;br /&gt;
===  moodlelib_testcase::test_fix_utf8 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Failed asserting that false is identical to &#039;aaabbb&#039;.&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Solution&#039;&#039;&#039; This problem indicates buggy iconv. See [http://tracker.moodle.org/browse/MDL-33007] for discussion.  So this is a real problem, to be fixed in a future integration cycle&lt;br /&gt;
&lt;br /&gt;
=== filestoragelib_testcase::test_get_file_preview ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Failed asserting that false is an instance of class &amp;quot;stored_file&amp;quot;.&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Solution&#039;&#039;&#039; Unfortunately, the php GD extension is a requirement for this test (see MDL-36447).&lt;br /&gt;
&lt;br /&gt;
Go to your Moodle directory and type &amp;lt;code&amp;gt;php admin/tool/phpunit/cli/util.php --drop&amp;lt;/code&amp;gt;, then reinitialise PHPunit and run the test again.&lt;br /&gt;
&lt;br /&gt;
=== MSSQL failures with core_course_externallib_testcase===&lt;br /&gt;
&lt;br /&gt;
On the MSSQL database driver, some problems occur with  core_course_externallib_testcase, for example:&lt;br /&gt;
&lt;br /&gt;
core_course_externallib_testcase::test_duplicate_course&lt;br /&gt;
&lt;br /&gt;
unserialize(): Error at offset 24191 of 24192 bytes&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Solution&#039;&#039;&#039; Ensure that the correct configuration is set in freedts.conf (from https://docs.moodle.org/26/en/FreeTDS), e.g.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;text size = 20971520&lt;br /&gt;
client charset = UTF8&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== PHP Warning: include_once(PHPUnit/Extensions/Database/Autoload.php): failed to open stream ===&lt;br /&gt;
&lt;br /&gt;
This occurs on Mac installs from experience. The reason this occurs is because DBUnit was not installed during the PHPUnit installation via PEAR.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Solution&#039;&#039;&#039; In terminal type: &amp;lt;code&amp;gt;sudo pear install -f phpunit/DbUnit&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== !!! Error reading from database !!!!! Unicode data in a Unicode-only collation or ntext data cannot be sent to clients using DB-Library (such as ISQL) or ODBC version 3.7 or earlier. ===&lt;br /&gt;
&lt;br /&gt;
If running unit tests under FreeTDS, remember that without a valid FREETDS environment variable, PHP won&#039;t be able to find the freetds.conf file and will default to version 5.0 which has poor support for unicode collations.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Solution&#039;&#039;&#039; Ensure a FREETDS environment variable is set prior to running the automated tests, which points to a valid path that contains a freetds.conf file. Also ensure the tds version element is set to a recent enough version (8.0)&lt;br /&gt;
&lt;br /&gt;
Note: Another potential solution may be to set TDSVER (http://freetds.schemamania.org/userguide/freetdsconf.htm)&lt;br /&gt;
&lt;br /&gt;
[[Category:Unit testing]]&lt;/div&gt;</summary>
		<author><name>Bawjaws</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Common_unit_test_problems&amp;diff=43327</id>
		<title>Common unit test problems</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Common_unit_test_problems&amp;diff=43327"/>
		<updated>2013-11-29T12:27:01Z</updated>

		<summary type="html">&lt;p&gt;Bawjaws: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== General Issues ==&lt;br /&gt;
&lt;br /&gt;
=== Unit tests are taking more than 10 mins to run ===&lt;br /&gt;
This problem is under investigation. We are hoping to find the soluton. On a typical system all tests complete in under 6 mins.--[[User:Dan Poltawski|Dan Poltawski]] 12:43, 15 May 2012 (WST)&lt;br /&gt;
&lt;br /&gt;
You maybe find much better performance on psql as a workaround for now if not doing DB dependent tests.&lt;br /&gt;
&lt;br /&gt;
If using linux on an EXT4 file system, disabling barriers by adding barrier=0 to the end of the options in /etc/fstab for the drive should offer HUGE speed improvements. Note that this is very dangerous for system stability and in the event of a power failure can cause permanent and irrecoverable data loss.&lt;br /&gt;
&lt;br /&gt;
=== Segfaults on Oracle ===&lt;br /&gt;
&lt;br /&gt;
When I was running tests on oracle I was getting phpunit sefaulting.. --[[User:Dan Poltawski|Dan Poltawski]] 00:29, 16 May 2012 (WST)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Solution&#039;&#039;&#039; Set statement_cache_size in php.ini: &amp;lt;code&amp;gt;oci8.statement_cache_size = 0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Specific failures ==&lt;br /&gt;
&lt;br /&gt;
=== dml_testcase::test_unique_index_collation_trouble===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Unique index is accent insensitive, this may cause problems for non-ascii languages. This is usually caused by accent insensitive default collation.&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Solution&#039;&#039;&#039; This is expected to fail if you are running MySQL. These tests should pass if you use the &amp;lt;code&amp;gt;utf8_bin&amp;lt;/code&amp;gt; collation on your database for unit tests, but we recommend &amp;lt;code&amp;gt;utf8_unicode_ci&amp;lt;/code&amp;gt; for actual live Moodle sites. Work is being done to resolve this issue, read more about the [[Database collation issue]] for further info.&lt;br /&gt;
&lt;br /&gt;
=== dml_testcase::test_sql_binary_equal ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;SQL operator &amp;quot;=&amp;quot; is expected to be case sensitive Failed asserting that 1 matches expected 2.&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Solution&#039;&#039;&#039; This is expected to fail if you are running MySQL. These tests should pass if you use the &amp;lt;code&amp;gt;utf8_bin&amp;lt;/code&amp;gt; collation on your database for unit tests, but we recommend &amp;lt;code&amp;gt;utf8_unicode_ci&amp;lt;/code&amp;gt; for actual live Moodle sites. Work is being done to resolve this issue, read more about the [[Database collation issue]] for further info.&lt;br /&gt;
&lt;br /&gt;
=== grading_manager_testcase::test_tokenize===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;A test using UTF-8 characters has failed. Consider updating PHP and PHP&#039;s PCRE or INTL extensions (MDL-30494) Failed asserting that false is true.&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Solution&#039;&#039;&#039; This is expected to fail if you are running MySQL. These tests should pass if you use the &amp;lt;code&amp;gt;utf8_bin&amp;lt;/code&amp;gt; collation on your database for unit tests, but we recommend &amp;lt;code&amp;gt;utf8_unicode_ci&amp;lt;/code&amp;gt; for actual live Moodle sites. Work is being done to resolve this issue, read more about the [[Database collation issue]] for further info.&lt;br /&gt;
&lt;br /&gt;
=== moodlesimplepie_testcase::test_getfeed ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Failed to load the sample RSS file. Please check your proxy settings in Moodle. %s&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Solution&#039;&#039;&#039; Your moodle needs network connectivity, please check proxy settings.&lt;br /&gt;
&lt;br /&gt;
=== moodlesimplepie_testcase::test_redirect ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Failed asserting that &#039;cURL Error: Operation timed out after 2000 milliseconds with 0 bytes received&#039; is null.&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Solution&#039;&#039;&#039; Your moodle needs network connectivity, please check proxy settings&lt;br /&gt;
&lt;br /&gt;
=== collatorlib_testcase::test_asort_objects_by_method ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Collation aware sorting not supported, PHP extension &amp;quot;intl&amp;quot; is not available.&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Solution&#039;&#039;&#039; Install php intl extension.&lt;br /&gt;
&lt;br /&gt;
Note that, on Windows, this extension does not seem to be included in the installer, but you can get it by downloading the zip, and copying the right DLLs across. If you Google, there are more detailed instructions on Stack Exchange.&lt;br /&gt;
&lt;br /&gt;
===  moodlelib_testcase::test_fix_utf8 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Failed asserting that false is identical to &#039;aaabbb&#039;.&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Solution&#039;&#039;&#039; This problem indicates buggy iconv. See [http://tracker.moodle.org/browse/MDL-33007] for discussion.  So this is a real problem, to be fixed in a future integration cycle&lt;br /&gt;
&lt;br /&gt;
=== filestoragelib_testcase::test_get_file_preview ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Failed asserting that false is an instance of class &amp;quot;stored_file&amp;quot;.&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Solution&#039;&#039;&#039; Unfortunately, the php GD extension is a requirement for this test (see MDL-36447).&lt;br /&gt;
&lt;br /&gt;
Go to your Moodle directory and type &amp;lt;code&amp;gt;php admin/tool/phpunit/cli/util.php --drop&amp;lt;/code&amp;gt;, then reinitialise PHPunit and run the test again.&lt;br /&gt;
&lt;br /&gt;
=== MSSQL failures with core_course_externallib_testcase===&lt;br /&gt;
&lt;br /&gt;
On the MSSQL database driver, some problems occur with  core_course_externallib_testcase, for example:&lt;br /&gt;
&lt;br /&gt;
core_course_externallib_testcase::test_duplicate_course&lt;br /&gt;
&lt;br /&gt;
unserialize(): Error at offset 24191 of 24192 bytes&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Solution&#039;&#039;&#039; Ensure that the correct configuration is set in freedts.conf (from https://docs.moodle.org/26/en/FreeTDS), e.g.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;text size = 20971520&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;client charset = UTF8&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== PHP Warning: include_once(PHPUnit/Extensions/Database/Autoload.php): failed to open stream ===&lt;br /&gt;
&lt;br /&gt;
This occurs on Mac installs from experience. The reason this occurs is because DBUnit was not installed during the PHPUnit installation via PEAR.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Solution&#039;&#039;&#039; In terminal type: &amp;lt;code&amp;gt;sudo pear install -f phpunit/DbUnit&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== !!! Error reading from database !!!!! Unicode data in a Unicode-only collation or ntext data cannot be sent to clients using DB-Library (such as ISQL) or ODBC version 3.7 or earlier. ===&lt;br /&gt;
&lt;br /&gt;
If running unit tests under FreeTDS, remember that without a valid FREETDS environment variable, PHP won&#039;t be able to find the freetds.conf file and will default to version 5.0 which has poor support for unicode collations.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Solution&#039;&#039;&#039; Ensure a FREETDS environment variable is set prior to running the automated tests, which points to a valid path that contains a freetds.conf file. Also ensure the tds version element is set to a recent enough version (8.0)&lt;br /&gt;
&lt;br /&gt;
Note: Another potential solution may be to set TDSVER (http://freetds.schemamania.org/userguide/freetdsconf.htm)&lt;br /&gt;
&lt;br /&gt;
[[Category:Unit testing]]&lt;/div&gt;</summary>
		<author><name>Bawjaws</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Common_unit_test_problems&amp;diff=43326</id>
		<title>Common unit test problems</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Common_unit_test_problems&amp;diff=43326"/>
		<updated>2013-11-29T12:17:38Z</updated>

		<summary type="html">&lt;p&gt;Bawjaws: General formatting and tidy up&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== General Issues ==&lt;br /&gt;
&lt;br /&gt;
=== Unit tests are taking more than 10 mins to run ===&lt;br /&gt;
This problem is under investigation. We are hoping to find the soluton. On a typical system all tests complete in under 6 mins.--[[User:Dan Poltawski|Dan Poltawski]] 12:43, 15 May 2012 (WST)&lt;br /&gt;
&lt;br /&gt;
You maybe find much better performance on psql as a workaround for now if not doing DB dependent tests.&lt;br /&gt;
&lt;br /&gt;
If using linux on an EXT4 file system, disabling barriers by adding barrier=0 to the end of the options in /etc/fstab for the drive should offer HUGE speed improvements. Note that this is very dangerous for system stability and in the event of a power failure can cause permanent and irrecoverable data loss.&lt;br /&gt;
&lt;br /&gt;
=== Segfaults on Oracle ===&lt;br /&gt;
&lt;br /&gt;
When I was running tests on oracle I was getting phpunit sefaulting.. --[[User:Dan Poltawski|Dan Poltawski]] 00:29, 16 May 2012 (WST)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Solution&#039;&#039;&#039; Set statement_cache_size in php.ini: &amp;lt;code&amp;gt;oci8.statement_cache_size = 0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Specific failures ==&lt;br /&gt;
&lt;br /&gt;
=== dml_testcase::test_unique_index_collation_trouble===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Unique index is accent insensitive, this may cause problems for non-ascii languages. This is usually caused by accent insensitive default collation.&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Solution&#039;&#039;&#039; This is expected to fail if you are running MySQL. These tests should pass if you use the &amp;lt;code&amp;gt;utf8_bin&amp;lt;/code&amp;gt; collation on your database for unit tests, but we recommend &amp;lt;code&amp;gt;utf8_unicode_ci&amp;lt;/code&amp;gt; for actual live Moodle sites. Work is being done to resolve this issue, read more about the [[Database collation issue]] for further info.&lt;br /&gt;
&lt;br /&gt;
=== dml_testcase::test_sql_binary_equal ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;SQL operator &amp;quot;=&amp;quot; is expected to be case sensitive Failed asserting that 1 matches expected 2.&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Solution&#039;&#039;&#039; This is expected to fail if you are running MySQL. These tests should pass if you use the &amp;lt;code&amp;gt;utf8_bin&amp;lt;/code&amp;gt; collation on your database for unit tests, but we recommend &amp;lt;code&amp;gt;utf8_unicode_ci&amp;lt;/code&amp;gt; for actual live Moodle sites. Work is being done to resolve this issue, read more about the [[Database collation issue]] for further info.&lt;br /&gt;
&lt;br /&gt;
=== grading_manager_testcase::test_tokenize===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;A test using UTF-8 characters has failed. Consider updating PHP and PHP&#039;s PCRE or INTL extensions (MDL-30494) Failed asserting that false is true.&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Solution&#039;&#039;&#039; This is expected to fail if you are running MySQL. These tests should pass if you use the &amp;lt;code&amp;gt;utf8_bin&amp;lt;/code&amp;gt; collation on your database for unit tests, but we recommend &amp;lt;code&amp;gt;utf8_unicode_ci&amp;lt;/code&amp;gt; for actual live Moodle sites. Work is being done to resolve this issue, read more about the [[Database collation issue]] for further info.&lt;br /&gt;
&lt;br /&gt;
=== moodlesimplepie_testcase::test_getfeed ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Failed to load the sample RSS file. Please check your proxy settings in Moodle. %s&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Solution&#039;&#039;&#039; Your moodle needs network connectivity, please check proxy settings.&lt;br /&gt;
&lt;br /&gt;
=== moodlesimplepie_testcase::test_redirect ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Failed asserting that &#039;cURL Error: Operation timed out after 2000 milliseconds with 0 bytes received&#039; is null.&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Solution&#039;&#039;&#039; Your moodle needs network connectivity, please check proxy settings&lt;br /&gt;
&lt;br /&gt;
=== collatorlib_testcase::test_asort_objects_by_method ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Collation aware sorting not supported, PHP extension &amp;quot;intl&amp;quot; is not available.&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Solution&#039;&#039;&#039; Install php intl extension.&lt;br /&gt;
&lt;br /&gt;
Note that, on Windows, this extension does not seem to be included in the installer, but you can get it by downloading the zip, and copying the right DLLs across. If you Google, there are more detailed instructions on Stack Exchange.&lt;br /&gt;
&lt;br /&gt;
===  moodlelib_testcase::test_fix_utf8 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Failed asserting that false is identical to &#039;aaabbb&#039;.&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Solution&#039;&#039;&#039; This problem indicates buggy iconv. See [http://tracker.moodle.org/browse/MDL-33007] for discussion.  So this is a real problem, to be fixed in a future integration cycle&lt;br /&gt;
&lt;br /&gt;
=== filestoragelib_testcase::test_get_file_preview ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Failed asserting that false is an instance of class &amp;quot;stored_file&amp;quot;.&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Solution&#039;&#039;&#039; Unfortunately, the php GD extension is a requirement for this test (see MDL-36447).&lt;br /&gt;
&lt;br /&gt;
Go to your Moodle directory and type &amp;lt;code&amp;gt;php admin/tool/phpunit/cli/util.php --drop&amp;lt;/code&amp;gt;, then reinitialise PHPunit and run the test again.&lt;br /&gt;
&lt;br /&gt;
=== MSSQL failures with core_course_externallib_testcase===&lt;br /&gt;
&lt;br /&gt;
On the MSSQL database driver, some problems occur with  core_course_externallib_testcase, for example:&lt;br /&gt;
&lt;br /&gt;
core_course_externallib_testcase::test_duplicate_course&lt;br /&gt;
&lt;br /&gt;
unserialize(): Error at offset 24191 of 24192 bytes&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Solution&#039;&#039;&#039; Ensure that the correct configuration is set in freedts.conf (from https://docs.moodle.org/26/en/FreeTDS), e.g.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;text size = 20971520&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;client charset = UTF8&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== PHP Warning: include_once(PHPUnit/Extensions/Database/Autoload.php): failed to open stream ===&lt;br /&gt;
&lt;br /&gt;
This occurs on Mac installs from experience. The reason this occurs is because DBUnit was not installed during the PHPUnit installation via PEAR.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Solution&#039;&#039;&#039; In terminal type: &amp;lt;code&amp;gt;sudo pear install -f phpunit/DbUnit&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== !!! Error reading from database !!!!! Unicode data in a Unicode-only collation or ntext data cannot be sent to clients using DB-Library (such as ISQL) or ODBC version 3.7 or earlier. ===&lt;br /&gt;
&lt;br /&gt;
If running unit tests under FreeTDS, remember that without a valid FREETDS environment variable, PHP won&#039;t be able to find the freetds.conf file and will default to version 5.0 which has poor support for unicode collations.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Solution&#039;&#039;&#039; Ensure a FREETDS environment variable is set prior to running the automated tests, which points to a valid path that contains a freetds.conf file. Also ensure the tds version element is set to a recent enough version (8.0)&lt;br /&gt;
&lt;br /&gt;
Note: Another potential solution may be to set TDSVER (http://freetds.schemamania.org/userguide/freetdsconf.htm)&lt;br /&gt;
&lt;br /&gt;
[[Category:Unit testing]]&lt;/div&gt;</summary>
		<author><name>Bawjaws</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Common_unit_test_problems&amp;diff=43325</id>
		<title>Common unit test problems</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Common_unit_test_problems&amp;diff=43325"/>
		<updated>2013-11-29T12:04:16Z</updated>

		<summary type="html">&lt;p&gt;Bawjaws: /* Solution */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Unit tests are taking more than 10 mins to run ===&lt;br /&gt;
This problem is under investigation. We are hoping to find the soluton. On a typical system all tests complete in under 6 mins.--[[User:Dan Poltawski|Dan Poltawski]] 12:43, 15 May 2012 (WST)&lt;br /&gt;
&lt;br /&gt;
You maybe find much better performance on psql as a workaround for now if not doing DB dependent tests.&lt;br /&gt;
&lt;br /&gt;
If using linux on an EXT4 file system, disabling barriers by adding barrier=0 to the end of the options in /etc/fstab for the drive should offer HUGE speed improvements. Note that this is very dangerous for system stability and in the event of a power failure can cause permanent and irrecoverable data loss.&lt;br /&gt;
&lt;br /&gt;
=== dml_testcase::test_unique_index_collation_trouble===&lt;br /&gt;
&amp;quot;Unique index is accent insensitive, this may cause problems for non-ascii languages. This is usually caused by accent insensitive default collation.&amp;quot;&lt;br /&gt;
==== Solution ====&lt;br /&gt;
This is expected to fail if you are running MySQL. These tests should pass if you use the &amp;lt;code&amp;gt;utf8_bin&amp;lt;/code&amp;gt; collation on your database for unit tests, but we recommend &amp;lt;code&amp;gt;utf8_unicode_ci&amp;lt;/code&amp;gt; for actual live Moodle sites. Work is being done to resolve this issue, read more about the [[Database collation issue]] for further info.&lt;br /&gt;
&lt;br /&gt;
=== dml_testcase::test_sql_binary_equal ===&lt;br /&gt;
&amp;quot;SQL operator &amp;quot;=&amp;quot; is expected to be case sensitive Failed asserting that 1 matches expected 2.&amp;quot;&lt;br /&gt;
==== Solution ====&lt;br /&gt;
This is expected to fail if you are running MySQL. These tests should pass if you use the &amp;lt;code&amp;gt;utf8_bin&amp;lt;/code&amp;gt; collation on your database for unit tests, but we recommend &amp;lt;code&amp;gt;utf8_unicode_ci&amp;lt;/code&amp;gt; for actual live Moodle sites. Work is being done to resolve this issue, read more about the [[Database collation issue]] for further info.&lt;br /&gt;
&lt;br /&gt;
=== moodlesimplepie_testcase::test_getfeed ===&lt;br /&gt;
&amp;quot;Failed to load the sample RSS file. Please check your proxy settings in Moodle. %s&amp;quot;&lt;br /&gt;
==== Solution ====&lt;br /&gt;
Your moodle needs network connectivity, please check proxy settings.&lt;br /&gt;
&lt;br /&gt;
=== moodlesimplepie_testcase::test_redirect ===&lt;br /&gt;
Failed asserting that &#039;cURL Error: Operation timed out after 2000 milliseconds with 0 bytes received&#039; is null.&lt;br /&gt;
==== Solution ====&lt;br /&gt;
Your moodle needs network connectivity, please check proxy settings&lt;br /&gt;
&lt;br /&gt;
=== collatorlib_testcase::test_asort_objects_by_method ===&lt;br /&gt;
Collation aware sorting not supported, PHP extension &amp;quot;intl&amp;quot; is not available.&lt;br /&gt;
==== Solution ====&lt;br /&gt;
Install php intl extension.&lt;br /&gt;
&lt;br /&gt;
Note that, on Windows, this extension does not seem to be included in the installer, but you can get it by downloading the zip, and copying the right DLLs across. If you Google, there are more detailed instructions on Stack Exchange.&lt;br /&gt;
&lt;br /&gt;
=== grading_manager_testcase::test_tokenize===&lt;br /&gt;
A test using UTF-8 characters has failed. Consider updating PHP and PHP&#039;s PCRE or INTL extensions (MDL-30494) Failed asserting that false is true.&lt;br /&gt;
==== Solution ====&lt;br /&gt;
Your Database is incorrectly configured. You probably are running MySQL and need to switch to utf8_bin collation.&lt;br /&gt;
&lt;br /&gt;
===  moodlelib_testcase::test_fix_utf8 ===&lt;br /&gt;
Failed asserting that false is identical to &#039;aaabbb&#039;.&lt;br /&gt;
==== Solution ====&lt;br /&gt;
This problem indicates buggy iconv. See [http://tracker.moodle.org/browse/MDL-33007] for discussion.  So this is a real problem, to be fixed in a future integration cycle&lt;br /&gt;
&lt;br /&gt;
=== Segfaults on Oracle ===&lt;br /&gt;
When I was running tests on oracle I was getting phpunit sefaulting.. --[[User:Dan Poltawski|Dan Poltawski]] 00:29, 16 May 2012 (WST)&lt;br /&gt;
==== Solution ====&lt;br /&gt;
Set statement_cache_size in php.ini:&lt;br /&gt;
oci8.statement_cache_size = 0&lt;br /&gt;
&lt;br /&gt;
=== filestoragelib_testcase::test_get_file_preview ===&lt;br /&gt;
Failed asserting that false is an instance of class &amp;quot;stored_file&amp;quot;.&lt;br /&gt;
==== Solution ====&lt;br /&gt;
Unfortunately, the php GD extension is a requirement for this test (see MDL-36447).&lt;br /&gt;
&lt;br /&gt;
Go to your Moodle directory and type &#039;php admin/tool/phpunit/cli/util.php --drop&#039;, then reinitialise PHPunit and run the test again.&lt;br /&gt;
&lt;br /&gt;
=== MSSQL failures with core_course_externallib_testcase===&lt;br /&gt;
&lt;br /&gt;
On the MSSQL database driver, some problems occur with  core_course_externallib_testcase, for example:&lt;br /&gt;
core_course_externallib_testcase::test_duplicate_course&lt;br /&gt;
unserialize(): Error at offset 24191 of 24192 bytes&lt;br /&gt;
==== Solution ====&lt;br /&gt;
&lt;br /&gt;
Ensure that the correct configuration is set in freedts.conf (from https://docs.moodle.org/26/en/FreeTDS), e.g.&lt;br /&gt;
&lt;br /&gt;
 text size = 20971520&lt;br /&gt;
 client charset = UTF8&lt;br /&gt;
&lt;br /&gt;
=== PHP Warning: include_once(PHPUnit/Extensions/Database/Autoload.php): failed to open stream ===&lt;br /&gt;
This occurs on Mac installs from experience. The reason this occurs is because DBUnit was not installed during the PHPUnit installation via PEAR.&lt;br /&gt;
==== Solution ====&lt;br /&gt;
In terminal type: sudo pear install -f phpunit/DbUnit&lt;br /&gt;
&lt;br /&gt;
=== !!! Error reading from database !!!!! Unicode data in a Unicode-only collation or ntext data cannot be sent to clients using DB-Library (such as ISQL) or ODBC version 3.7 or earlier. ===&lt;br /&gt;
If running unit tests under FreeTDS, remember that without a valid FREETDS environment variable, PHP won&#039;t be able to find the freetds.conf file and will default to version 5.0 which has poor support for unicode collations.&lt;br /&gt;
==== Solution ====&lt;br /&gt;
Ensure a FREETDS environment variable is set prior to running the automated tests, which points to a valid path that contains a freetds.conf file. Also ensure the tds version element is set to a recent enough version (8.0)&lt;br /&gt;
Note: Another potential solution may be to set TDSVER (http://freetds.schemamania.org/userguide/freetdsconf.htm)&lt;br /&gt;
[[Category:Unit testing]]&lt;/div&gt;</summary>
		<author><name>Bawjaws</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Common_unit_test_problems&amp;diff=43324</id>
		<title>Common unit test problems</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Common_unit_test_problems&amp;diff=43324"/>
		<updated>2013-11-29T12:03:41Z</updated>

		<summary type="html">&lt;p&gt;Bawjaws: /* Solution */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Unit tests are taking more than 10 mins to run ===&lt;br /&gt;
This problem is under investigation. We are hoping to find the soluton. On a typical system all tests complete in under 6 mins.--[[User:Dan Poltawski|Dan Poltawski]] 12:43, 15 May 2012 (WST)&lt;br /&gt;
&lt;br /&gt;
You maybe find much better performance on psql as a workaround for now if not doing DB dependent tests.&lt;br /&gt;
&lt;br /&gt;
If using linux on an EXT4 file system, disabling barriers by adding barrier=0 to the end of the options in /etc/fstab for the drive should offer HUGE speed improvements. Note that this is very dangerous for system stability and in the event of a power failure can cause permanent and irrecoverable data loss.&lt;br /&gt;
&lt;br /&gt;
=== dml_testcase::test_unique_index_collation_trouble===&lt;br /&gt;
&amp;quot;Unique index is accent insensitive, this may cause problems for non-ascii languages. This is usually caused by accent insensitive default collation.&amp;quot;&lt;br /&gt;
==== Solution ====&lt;br /&gt;
This is expected to fail if you are running MySQL. These tests should pass if you use the &amp;lt;code&amp;gt;utf8_bin&amp;lt;/code&amp;gt; collation on your database for unit tests, but we recommend &amp;lt;code&amp;gt;utf8_unicode_ci&amp;lt;/code&amp;gt; for actual live Moodle sites. Work is being done to resolve this issue, read more about the [[Database collation issue]] for further info.&lt;br /&gt;
&lt;br /&gt;
=== dml_testcase::test_sql_binary_equal ===&lt;br /&gt;
&amp;quot;SQL operator &amp;quot;=&amp;quot; is expected to be case sensitive Failed asserting that 1 matches expected 2.&amp;quot;&lt;br /&gt;
==== Solution ====&lt;br /&gt;
Your Database is incorrectly configured. You probably are running MySQL and need to switch to utf8_bin collation.&lt;br /&gt;
&lt;br /&gt;
=== moodlesimplepie_testcase::test_getfeed ===&lt;br /&gt;
&amp;quot;Failed to load the sample RSS file. Please check your proxy settings in Moodle. %s&amp;quot;&lt;br /&gt;
==== Solution ====&lt;br /&gt;
Your moodle needs network connectivity, please check proxy settings.&lt;br /&gt;
&lt;br /&gt;
=== moodlesimplepie_testcase::test_redirect ===&lt;br /&gt;
Failed asserting that &#039;cURL Error: Operation timed out after 2000 milliseconds with 0 bytes received&#039; is null.&lt;br /&gt;
==== Solution ====&lt;br /&gt;
Your moodle needs network connectivity, please check proxy settings&lt;br /&gt;
&lt;br /&gt;
=== collatorlib_testcase::test_asort_objects_by_method ===&lt;br /&gt;
Collation aware sorting not supported, PHP extension &amp;quot;intl&amp;quot; is not available.&lt;br /&gt;
==== Solution ====&lt;br /&gt;
Install php intl extension.&lt;br /&gt;
&lt;br /&gt;
Note that, on Windows, this extension does not seem to be included in the installer, but you can get it by downloading the zip, and copying the right DLLs across. If you Google, there are more detailed instructions on Stack Exchange.&lt;br /&gt;
&lt;br /&gt;
=== grading_manager_testcase::test_tokenize===&lt;br /&gt;
A test using UTF-8 characters has failed. Consider updating PHP and PHP&#039;s PCRE or INTL extensions (MDL-30494) Failed asserting that false is true.&lt;br /&gt;
==== Solution ====&lt;br /&gt;
Your Database is incorrectly configured. You probably are running MySQL and need to switch to utf8_bin collation.&lt;br /&gt;
&lt;br /&gt;
===  moodlelib_testcase::test_fix_utf8 ===&lt;br /&gt;
Failed asserting that false is identical to &#039;aaabbb&#039;.&lt;br /&gt;
==== Solution ====&lt;br /&gt;
This problem indicates buggy iconv. See [http://tracker.moodle.org/browse/MDL-33007] for discussion.  So this is a real problem, to be fixed in a future integration cycle&lt;br /&gt;
&lt;br /&gt;
=== Segfaults on Oracle ===&lt;br /&gt;
When I was running tests on oracle I was getting phpunit sefaulting.. --[[User:Dan Poltawski|Dan Poltawski]] 00:29, 16 May 2012 (WST)&lt;br /&gt;
==== Solution ====&lt;br /&gt;
Set statement_cache_size in php.ini:&lt;br /&gt;
oci8.statement_cache_size = 0&lt;br /&gt;
&lt;br /&gt;
=== filestoragelib_testcase::test_get_file_preview ===&lt;br /&gt;
Failed asserting that false is an instance of class &amp;quot;stored_file&amp;quot;.&lt;br /&gt;
==== Solution ====&lt;br /&gt;
Unfortunately, the php GD extension is a requirement for this test (see MDL-36447).&lt;br /&gt;
&lt;br /&gt;
Go to your Moodle directory and type &#039;php admin/tool/phpunit/cli/util.php --drop&#039;, then reinitialise PHPunit and run the test again.&lt;br /&gt;
&lt;br /&gt;
=== MSSQL failures with core_course_externallib_testcase===&lt;br /&gt;
&lt;br /&gt;
On the MSSQL database driver, some problems occur with  core_course_externallib_testcase, for example:&lt;br /&gt;
core_course_externallib_testcase::test_duplicate_course&lt;br /&gt;
unserialize(): Error at offset 24191 of 24192 bytes&lt;br /&gt;
==== Solution ====&lt;br /&gt;
&lt;br /&gt;
Ensure that the correct configuration is set in freedts.conf (from https://docs.moodle.org/26/en/FreeTDS), e.g.&lt;br /&gt;
&lt;br /&gt;
 text size = 20971520&lt;br /&gt;
 client charset = UTF8&lt;br /&gt;
&lt;br /&gt;
=== PHP Warning: include_once(PHPUnit/Extensions/Database/Autoload.php): failed to open stream ===&lt;br /&gt;
This occurs on Mac installs from experience. The reason this occurs is because DBUnit was not installed during the PHPUnit installation via PEAR.&lt;br /&gt;
==== Solution ====&lt;br /&gt;
In terminal type: sudo pear install -f phpunit/DbUnit&lt;br /&gt;
&lt;br /&gt;
=== !!! Error reading from database !!!!! Unicode data in a Unicode-only collation or ntext data cannot be sent to clients using DB-Library (such as ISQL) or ODBC version 3.7 or earlier. ===&lt;br /&gt;
If running unit tests under FreeTDS, remember that without a valid FREETDS environment variable, PHP won&#039;t be able to find the freetds.conf file and will default to version 5.0 which has poor support for unicode collations.&lt;br /&gt;
==== Solution ====&lt;br /&gt;
Ensure a FREETDS environment variable is set prior to running the automated tests, which points to a valid path that contains a freetds.conf file. Also ensure the tds version element is set to a recent enough version (8.0)&lt;br /&gt;
Note: Another potential solution may be to set TDSVER (http://freetds.schemamania.org/userguide/freetdsconf.htm)&lt;br /&gt;
[[Category:Unit testing]]&lt;/div&gt;</summary>
		<author><name>Bawjaws</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=CSS_Coding_Style&amp;diff=43209</id>
		<title>CSS Coding Style</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=CSS_Coding_Style&amp;diff=43209"/>
		<updated>2013-11-18T11:50:16Z</updated>

		<summary type="html">&lt;p&gt;Bawjaws: link to issue to make these official&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Work in progress}}&lt;br /&gt;
&lt;br /&gt;
The Moodle CSS coding style (a Work in Progress, see MDLSITE-1796 for the effort to make it official)&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
=== Scope ===&lt;br /&gt;
&lt;br /&gt;
This document describes style guidelines for developers working on or with Moodle code. It talks purely about the mechanics of code layout and the choices we have made for Moodle. &lt;br /&gt;
&lt;br /&gt;
=== Goals ===&lt;br /&gt;
&lt;br /&gt;
Consistent coding style is important in any development project, and particularly when many developers are involved. A standard style helps to ensure that the code is easier to read and understand, which helps overall quality.&lt;br /&gt;
&lt;br /&gt;
Abstract goals we strive for: &lt;br /&gt;
&lt;br /&gt;
* simplicity&lt;br /&gt;
* readability&lt;br /&gt;
* tool friendliness&lt;br /&gt;
&lt;br /&gt;
== Naming Conventions ==&lt;br /&gt;
&lt;br /&gt;
Within plugins, CSS files are normally named &amp;lt;code&amp;gt;styles.css&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
In the theme, files can be named according to the theme designer&#039;s wishes but should:&lt;br /&gt;
&lt;br /&gt;
* use lowercase letters only&lt;br /&gt;
* be as short as possible&lt;br /&gt;
&lt;br /&gt;
== Block Style ==&lt;br /&gt;
&lt;br /&gt;
* Each selector should be on its own line. If there is a comma in a selector list, follow it with a line break.&lt;br /&gt;
* Property-value pairs should be on their own line, with four spaces of indentation and an ending semicolon.&lt;br /&gt;
* The closing brace should use the same level of indentation as the opening selector.&lt;br /&gt;
* Leave one line between blocks.&lt;br /&gt;
&lt;br /&gt;
=== Correct ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code css&amp;gt;@media only screen and (min-width: 768px) {&lt;br /&gt;
    .selector_one,&lt;br /&gt;
    .selector_two {&lt;br /&gt;
        color: #fff;&lt;br /&gt;
        background-color: #000;&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Incorrect ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code css&amp;gt;.selector_one, .selector_two { color: #fff; background-color: #000; }&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Selectors ==&lt;br /&gt;
&lt;br /&gt;
* Follow Moodle [[Coding style]] for naming selectors.&lt;br /&gt;
* Names should be simple English lowercase words.&lt;br /&gt;
* Words should be separated by underscores or hyphens.&lt;br /&gt;
* Verbosity is encouraged: names should be as illustrative as is practical to enhance understanding.&lt;br /&gt;
* Use [http://css-tricks.com/semantic-class-names/ semantic names]: names tell what this is instead of what should it look like.&lt;br /&gt;
* Avoid using IDs as selectors wherever possible. IDs are a tad faster, but far more difficult to maintain and override. If you can&#039;t write the needed selectors successfully without using an ID, then submit a [http://tracker.moodle.org Tracker ticket] to have classnames added.  &lt;br /&gt;
&lt;br /&gt;
=== Correct ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code css&amp;gt;.selector_name {&lt;br /&gt;
    color: #fff;&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code css&amp;gt;.selector-name {&lt;br /&gt;
    color: #fff;&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Incorrect ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code css&amp;gt;#selName {&lt;br /&gt;
    color: #fff;&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code css&amp;gt;#Sel-Name {&lt;br /&gt;
    color: #fff;&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Properties and Values ==&lt;br /&gt;
&lt;br /&gt;
* Properties and values should be seperated by a colon and a single space&lt;br /&gt;
* All properties and values should be lowercase, except for font names and vendor-specific properties.&lt;br /&gt;
* For color codes, lowercase is preferred &lt;br /&gt;
* For color codes, use of the shorthand version where possible is preferred, (e.g: &amp;lt;code&amp;gt;#fff&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;#ffffff&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;#c06&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;#cc0066&amp;lt;/code&amp;gt;). &lt;br /&gt;
* For color codes, if you use HSLA or RGBA, always provide a hex fallback.&lt;br /&gt;
* Use shorthand (except when overriding styles) for background, border, font, list-style, margin, and padding values.&lt;br /&gt;
* Prefixed vendor-specific properties pairs should appear directly before the generic property they refer to.&lt;br /&gt;
* Do not use &amp;lt;code&amp;gt;!important&amp;lt;/code&amp;gt;. If you need to use &amp;lt;code&amp;gt;!important&amp;lt;/code&amp;gt;, something is wrong with the CSS you are trying to override. Rather than adding more problematic CSS, submit a [http://tracker.moodle.org Tracker ticket] to get the existing problem fixed. &lt;br /&gt;
&lt;br /&gt;
=== Correct ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code css&amp;gt;.selector {&lt;br /&gt;
    color: #fff;&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code css&amp;gt;.selector {&lt;br /&gt;
    color: #fff;&lt;br /&gt;
    color: hsla(0, 0%, 100%, 1);&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Incorrect ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code css&amp;gt;#selector {&lt;br /&gt;
    color: hsla(0, 0%, 100%, 1);&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code css&amp;gt;#selector {&lt;br /&gt;
    color: #FFFFFF !important;&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Documentation and Comments ==&lt;br /&gt;
&lt;br /&gt;
A block-style comment at the top of the CSS file should explain the purpose of the rules in the file.&lt;br /&gt;
&amp;lt;code css&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
* base.css&lt;br /&gt;
* Contains base styles for theme basic.&lt;br /&gt;
*/&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Block-style comments can also be used to denote a section in a CSS file where all rules pertain to a specific component, view, or functionality:&lt;br /&gt;
&amp;lt;code css&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
* SCORM Navigation Sidebar&lt;br /&gt;
*/&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Use single-line comments to provide more information to other developers about a single rule or small subset of rules:&lt;br /&gt;
&amp;lt;code css&amp;gt;&lt;br /&gt;
/* Required because YUI resets add a black border to all tables */&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Progressive Enhancement ==&lt;br /&gt;
&lt;br /&gt;
* Code should follow the Moodle principle of progressive enhancement for all supported browsers for that specific version of Moodle. Supported browsers are listed in the [https://docs.moodle.org/dev/Releases Release notes] for the Moodle version.&lt;br /&gt;
* Fallbacks should always be provided. For example, provide a background color fallback to background images and gradients.&lt;br /&gt;
* Use vendor prefixes only when the supported browser in question does not support the unprefixed property. Outdated vendor prefixes can be removed. Use  [http://caniuse.com/ Can I use] or like resource to determine what&#039;s supported. &lt;br /&gt;
* The standard property should preferably come after the vendor-prefixed property.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code css&amp;gt;.selector {&lt;br /&gt;
    background-color: #444; /* Fallback for browsers that don&#039;t support gradients */&lt;br /&gt;
    filter: progid:DXImageTransform.Microsoft.gradient(startColorStr=&#039;#444&#039;, EndColorStr=&#039;#999&#039;); /* IE6-IE9 */&lt;br /&gt;
    background-image: -webkit-gradient(linear, left top, left bottom, from(#444), to(#999)); /* Safari 4+, Chrome */&lt;br /&gt;
    background-image: -webkit-linear-gradient(top, #444, #999); /* Chrome 10+, Safari 5.1+, iOS 5+ */&lt;br /&gt;
    background-image: -moz-linear-gradient(top, #444, #999); /* Firefox 3.6 */&lt;br /&gt;
    background-image: -ms-linear-gradient(top, #444, #999); /* IE10 */&lt;br /&gt;
    background-image: -o-linear-gradient(top, #444, #999); /* Opera 11.10+ */&lt;br /&gt;
    background-image: linear-gradient(top, #444, #999); /* W3C Standard */&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Browser Hacks ===&lt;br /&gt;
&lt;br /&gt;
* Do not use any browser-specific hacks. Moodle provides a more appropriate way to write browser-specific CSS using classes that are added to the body element. For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code css&amp;gt;&lt;br /&gt;
.ie7 .forum-post {&lt;br /&gt;
    min-height: 1px;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* It is not necessary to include hacks for versions of browsers that Moodle Core does not provide support for (e.g. IE6 in Moodle 2, except legacy theme).&lt;br /&gt;
&lt;br /&gt;
=== LESS and Other CSS Preprocessors ===&lt;br /&gt;
[http://lesscss.org/ LESS] is not CSS. LESS will be evaluated according to the [http://lesscss.org/#docs LESS documentation]. If the LESS is valid according to the LESS documentation, and does not result in invalid CSS when compiled, it does not need to be further changed, revised, updated, or documented. The same goes for SASS and any other preprocessor languages coming down the pike.  It&#039;s important that your LESS or SASS files be clear and accessible to others, and where the rules above apply, for example, with regard to line breaks and syntax, please follow them. &lt;br /&gt;
&lt;br /&gt;
Some additional features allowed in LESS or SASS conflict with CSS usage. One example is inline comments in LESS. However, these inline comments do not appear in the compiled CSS file. The rule of thumb is that so long as the feature is part of the documented LESS or SASS feature set, is clear and usable by other developers (who have read the LESS or SASS documentation), and does not break or interfere with the functioning of the compressed CSS file, we let it stand in peer review.&lt;br /&gt;
&lt;br /&gt;
== Credits ==&lt;br /&gt;
&lt;br /&gt;
This document was drawn from the following sources:&lt;br /&gt;
&lt;br /&gt;
# The [http://codex.wordpress.org/CSS_Coding_Standards WordPress CSS Coding Standards] &lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
* [[Coding]]&lt;br /&gt;
* [[Coding_style|Coding style]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Coding guidelines|CSS Coding style]]&lt;/div&gt;</summary>
		<author><name>Bawjaws</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=CSS_Coding_Style&amp;diff=42794</id>
		<title>CSS Coding Style</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=CSS_Coding_Style&amp;diff=42794"/>
		<updated>2013-10-30T15:40:00Z</updated>

		<summary type="html">&lt;p&gt;Bawjaws: minor improvment to the Table of Contents, removing repitition of headers&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Work in progress}}&lt;br /&gt;
&lt;br /&gt;
The Moodle CSS coding style &lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
=== Scope ===&lt;br /&gt;
&lt;br /&gt;
This document describes style guidelines for developers working on or with Moodle code. It talks purely about the mechanics of code layout and the choices we have made for Moodle. &lt;br /&gt;
&lt;br /&gt;
=== Goals ===&lt;br /&gt;
&lt;br /&gt;
Consistent coding style is important in any development project, and particularly when many developers are involved. A standard style helps to ensure that the code is easier to read and understand, which helps overall quality.&lt;br /&gt;
&lt;br /&gt;
Abstract goals we strive for: &lt;br /&gt;
&lt;br /&gt;
* simplicity&lt;br /&gt;
* readability&lt;br /&gt;
* tool friendliness&lt;br /&gt;
&lt;br /&gt;
== Naming Conventions ==&lt;br /&gt;
&lt;br /&gt;
Within plugins, CSS files are normally named &amp;lt;code&amp;gt;styles.css&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
In the theme, files can be named according to the theme designer&#039;s wishes but should:&lt;br /&gt;
&lt;br /&gt;
* use lowercase letters only&lt;br /&gt;
* be as short as possible&lt;br /&gt;
&lt;br /&gt;
== Block Style ==&lt;br /&gt;
&lt;br /&gt;
* Each selector should be on its own line. If there is a comma in a selector list, follow it with a line break.&lt;br /&gt;
* Property-value pairs should be on their own line, with four spaces of indentation and an ending semicolon.&lt;br /&gt;
* The closing brace should use the same level of indentation as the opening selector.&lt;br /&gt;
* Leave one line between blocks.&lt;br /&gt;
&lt;br /&gt;
=== Correct ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code css&amp;gt;@media only screen and (min-width: 768px) {&lt;br /&gt;
    .selector_one,&lt;br /&gt;
    .selector_two {&lt;br /&gt;
        color: #fff;&lt;br /&gt;
        background-color: #000;&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Incorrect ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code css&amp;gt;.selector_one, .selector_two { color: #fff; background-color: #000; }&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Selectors ==&lt;br /&gt;
&lt;br /&gt;
* Follow Moodle [[Coding style]] for naming selectors.&lt;br /&gt;
* Names should be simple English lowercase words.&lt;br /&gt;
* Words should be separated by underscores or hyphens.&lt;br /&gt;
* Verbosity is encouraged: names should be as illustrative as is practical to enhance understanding.&lt;br /&gt;
* Use [http://css-tricks.com/semantic-class-names/ semantic names]: names tell what this is instead of what should it look like.&lt;br /&gt;
* Avoid using IDs as selectors wherever possible. IDs are a tad faster, but far more difficult to maintain and override. If you can&#039;t write the needed selectors successfully without using an ID, then submit a [http://tracker.moodle.org Tracker ticket] to have classnames added.  &lt;br /&gt;
&lt;br /&gt;
=== Correct ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code css&amp;gt;.selector_name {&lt;br /&gt;
    color: #fff;&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code css&amp;gt;.selector-name {&lt;br /&gt;
    color: #fff;&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Incorrect ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code css&amp;gt;#selName {&lt;br /&gt;
    color: #fff;&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code css&amp;gt;#Sel-Name {&lt;br /&gt;
    color: #fff;&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Properties and Values ==&lt;br /&gt;
&lt;br /&gt;
* Properties and values should be seperated by a colon and a single space&lt;br /&gt;
* All properties and values should be lowercase, except for font names and vendor-specific properties.&lt;br /&gt;
* For color codes, lowercase is preferred &lt;br /&gt;
* For color codes, use of the shorthand version where possible is preferred, (e.g: &amp;lt;code&amp;gt;#fff&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;#ffffff&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;#c06&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;#cc0066&amp;lt;/code&amp;gt;). &lt;br /&gt;
* For color codes, if you use HSLA or RGBA, always provide a hex fallback.&lt;br /&gt;
* Use shorthand (except when overriding styles) for background, border, font, list-style, margin, and padding values.&lt;br /&gt;
* Prefixed vendor-specific properties pairs should appear directly before the generic property they refer to.&lt;br /&gt;
* Do not use &amp;lt;code&amp;gt;!important&amp;lt;/code&amp;gt;. If you need to use &amp;lt;code&amp;gt;!important&amp;lt;/code&amp;gt;, something is wrong with the CSS you are trying to override. Rather than adding more problematic CSS, submit a [http://tracker.moodle.org Tracker ticket] to get the existing problem fixed. &lt;br /&gt;
&lt;br /&gt;
=== Correct ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code css&amp;gt;.selector {&lt;br /&gt;
    color: #fff;&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code css&amp;gt;.selector {&lt;br /&gt;
    color: #fff;&lt;br /&gt;
    color: hsla(0, 0%, 100%, 1);&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Incorrect ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code css&amp;gt;#selector {&lt;br /&gt;
    color: hsla(0, 0%, 100%, 1);&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code css&amp;gt;#selector {&lt;br /&gt;
    color: #FFFFFF !important;&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Documentation and Comments ==&lt;br /&gt;
&lt;br /&gt;
A block-style comment at the top of the CSS file should explain the purpose of the rules in the file.&lt;br /&gt;
&amp;lt;code css&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
* base.css&lt;br /&gt;
* Contains base styles for theme basic.&lt;br /&gt;
*/&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Block-style comments can also be used to denote a section in a CSS file where all rules pertain to a specific component, view, or functionality:&lt;br /&gt;
&amp;lt;code css&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
* SCORM Navigation Sidebar&lt;br /&gt;
*/&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Use single-line comments to provide more information to other developers about a single rule or small subset of rules:&lt;br /&gt;
&amp;lt;code css&amp;gt;&lt;br /&gt;
/* Required because YUI resets add a black border to all tables */&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Progressive Enhancement ==&lt;br /&gt;
&lt;br /&gt;
* Code should follow the Moodle principle of progressive enhancement for all supported browsers for that specific version of Moodle. Supported browsers are listed in the [https://docs.moodle.org/dev/Releases Release notes] for the Moodle version.&lt;br /&gt;
* Fallbacks should always be provided. For example, provide a background color fallback to background images and gradients.&lt;br /&gt;
* Use vendor prefixes only when the supported browser in question does not support the unprefixed property. Outdated vendor prefixes can be removed. Use  [http://caniuse.com/ Can I use] or like resource to determine what&#039;s supported. &lt;br /&gt;
* The standard property should preferably come after the vendor-prefixed property.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code css&amp;gt;.selector {&lt;br /&gt;
    background-color: #444; /* Fallback for browsers that don&#039;t support gradients */&lt;br /&gt;
    filter: progid:DXImageTransform.Microsoft.gradient(startColorStr=&#039;#444&#039;, EndColorStr=&#039;#999&#039;); /* IE6-IE9 */&lt;br /&gt;
    background-image: -webkit-gradient(linear, left top, left bottom, from(#444), to(#999)); /* Safari 4+, Chrome */&lt;br /&gt;
    background-image: -webkit-linear-gradient(top, #444, #999); /* Chrome 10+, Safari 5.1+, iOS 5+ */&lt;br /&gt;
    background-image: -moz-linear-gradient(top, #444, #999); /* Firefox 3.6 */&lt;br /&gt;
    background-image: -ms-linear-gradient(top, #444, #999); /* IE10 */&lt;br /&gt;
    background-image: -o-linear-gradient(top, #444, #999); /* Opera 11.10+ */&lt;br /&gt;
    background-image: linear-gradient(top, #444, #999); /* W3C Standard */&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Browser Hacks ===&lt;br /&gt;
&lt;br /&gt;
* Do not use any browser-specific hacks. Moodle provides a more appropriate way to write browser-specific CSS using classes that are added to the body element. For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code css&amp;gt;&lt;br /&gt;
.ie7 .forum-post {&lt;br /&gt;
    min-height: 1px;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* It is not necessary to include hacks for versions of browsers that Moodle Core does not provide support for (e.g. IE6 in Moodle 2, except legacy theme).&lt;br /&gt;
&lt;br /&gt;
=== LESS and Other CSS Preprocessors ===&lt;br /&gt;
[http://lesscss.org/ LESS] is not CSS. LESS will be evaluated according to the [http://lesscss.org/#docs LESS documentation]. If the LESS is valid according to the LESS documentation, and does not result in invalid CSS when compiled, it does not need to be further changed, revised, updated, or documented. The same goes for SASS and any other preprocessor languages coming down the pike.  It&#039;s important that your LESS or SASS files be clear and accessible to others, and where the rules above apply, for example, with regard to line breaks and syntax, please follow them. &lt;br /&gt;
&lt;br /&gt;
Some additional features allowed in LESS or SASS conflict with CSS usage. One example is inline comments in LESS. However, these inline comments do not appear in the compiled CSS file. The rule of thumb is that so long as the feature is part of the documented LESS or SASS feature set, is clear and usable by other developers (who have read the LESS or SASS documentation), and does not break or interfere with the functioning of the compressed CSS file, we let it stand in peer review.&lt;br /&gt;
&lt;br /&gt;
== Credits ==&lt;br /&gt;
&lt;br /&gt;
This document was drawn from the following sources:&lt;br /&gt;
&lt;br /&gt;
# The [http://codex.wordpress.org/CSS_Coding_Standards WordPress CSS Coding Standards] &lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
* [[Coding]]&lt;br /&gt;
* [[Coding_style|Coding style]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Coding guidelines|CSS Coding style]]&lt;/div&gt;</summary>
		<author><name>Bawjaws</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=CSS_Coding_Style&amp;diff=42793</id>
		<title>CSS Coding Style</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=CSS_Coding_Style&amp;diff=42793"/>
		<updated>2013-10-30T15:38:49Z</updated>

		<summary type="html">&lt;p&gt;Bawjaws: Undo revision 42792 by Bawjaws (talk)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Work in progress}}&lt;br /&gt;
&lt;br /&gt;
The Moodle CSS coding style &lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
=== Scope ===&lt;br /&gt;
&lt;br /&gt;
This document describes style guidelines for developers working on or with Moodle code. It talks purely about the mechanics of code layout and the choices we have made for Moodle. &lt;br /&gt;
&lt;br /&gt;
=== Goals ===&lt;br /&gt;
&lt;br /&gt;
Consistent coding style is important in any development project, and particularly when many developers are involved. A standard style helps to ensure that the code is easier to read and understand, which helps overall quality.&lt;br /&gt;
&lt;br /&gt;
Abstract goals we strive for: &lt;br /&gt;
&lt;br /&gt;
* simplicity&lt;br /&gt;
* readability&lt;br /&gt;
* tool friendliness&lt;br /&gt;
&lt;br /&gt;
== Naming Conventions ==&lt;br /&gt;
&lt;br /&gt;
Within plugins, CSS files are normally named &amp;lt;code&amp;gt;styles.css&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
In the theme, files can be named according to the theme designer&#039;s wishes but should:&lt;br /&gt;
&lt;br /&gt;
* use lowercase letters only&lt;br /&gt;
* be as short as possible&lt;br /&gt;
&lt;br /&gt;
== Block Style ==&lt;br /&gt;
&lt;br /&gt;
* Each selector should be on its own line. If there is a comma in a selector list, follow it with a line break.&lt;br /&gt;
* Property-value pairs should be on their own line, with four spaces of indentation and an ending semicolon.&lt;br /&gt;
* The closing brace should use the same level of indentation as the opening selector.&lt;br /&gt;
* Leave one line between blocks.&lt;br /&gt;
&lt;br /&gt;
***Correct***&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code css&amp;gt;@media only screen and (min-width: 768px) {&lt;br /&gt;
    .selector_one,&lt;br /&gt;
    .selector_two {&lt;br /&gt;
        color: #fff;&lt;br /&gt;
        background-color: #000;&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Incorrect ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code css&amp;gt;.selector_one, .selector_two { color: #fff; background-color: #000; }&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Selectors ==&lt;br /&gt;
&lt;br /&gt;
* Follow Moodle [[Coding style]] for naming selectors.&lt;br /&gt;
* Names should be simple English lowercase words.&lt;br /&gt;
* Words should be separated by underscores or hyphens.&lt;br /&gt;
* Verbosity is encouraged: names should be as illustrative as is practical to enhance understanding.&lt;br /&gt;
* Use [http://css-tricks.com/semantic-class-names/ semantic names]: names tell what this is instead of what should it look like.&lt;br /&gt;
* Avoid using IDs as selectors wherever possible. IDs are a tad faster, but far more difficult to maintain and override. If you can&#039;t write the needed selectors successfully without using an ID, then submit a [http://tracker.moodle.org Tracker ticket] to have classnames added.  &lt;br /&gt;
&lt;br /&gt;
=== Correct ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code css&amp;gt;.selector_name {&lt;br /&gt;
    color: #fff;&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code css&amp;gt;.selector-name {&lt;br /&gt;
    color: #fff;&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Incorrect ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code css&amp;gt;#selName {&lt;br /&gt;
    color: #fff;&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code css&amp;gt;#Sel-Name {&lt;br /&gt;
    color: #fff;&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Properties and Values ==&lt;br /&gt;
&lt;br /&gt;
* Properties and values should be seperated by a colon and a single space&lt;br /&gt;
* All properties and values should be lowercase, except for font names and vendor-specific properties.&lt;br /&gt;
* For color codes, lowercase is preferred &lt;br /&gt;
* For color codes, use of the shorthand version where possible is preferred, (e.g: &amp;lt;code&amp;gt;#fff&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;#ffffff&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;#c06&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;#cc0066&amp;lt;/code&amp;gt;). &lt;br /&gt;
* For color codes, if you use HSLA or RGBA, always provide a hex fallback.&lt;br /&gt;
* Use shorthand (except when overriding styles) for background, border, font, list-style, margin, and padding values.&lt;br /&gt;
* Prefixed vendor-specific properties pairs should appear directly before the generic property they refer to.&lt;br /&gt;
* Do not use &amp;lt;code&amp;gt;!important&amp;lt;/code&amp;gt;. If you need to use &amp;lt;code&amp;gt;!important&amp;lt;/code&amp;gt;, something is wrong with the CSS you are trying to override. Rather than adding more problematic CSS, submit a [http://tracker.moodle.org Tracker ticket] to get the existing problem fixed. &lt;br /&gt;
&lt;br /&gt;
=== Correct ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code css&amp;gt;.selector {&lt;br /&gt;
    color: #fff;&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Correct ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code css&amp;gt;.selector {&lt;br /&gt;
    color: #fff;&lt;br /&gt;
    color: hsla(0, 0%, 100%, 1);&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Incorrect ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code css&amp;gt;#selector {&lt;br /&gt;
    color: hsla(0, 0%, 100%, 1);&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Incorrect ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code css&amp;gt;#selector {&lt;br /&gt;
    color: #FFFFFF !important;&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Documentation and Comments ==&lt;br /&gt;
&lt;br /&gt;
A block-style comment at the top of the CSS file should explain the purpose of the rules in the file.&lt;br /&gt;
&amp;lt;code css&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
* base.css&lt;br /&gt;
* Contains base styles for theme basic.&lt;br /&gt;
*/&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Block-style comments can also be used to denote a section in a CSS file where all rules pertain to a specific component, view, or functionality:&lt;br /&gt;
&amp;lt;code css&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
* SCORM Navigation Sidebar&lt;br /&gt;
*/&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Use single-line comments to provide more information to other developers about a single rule or small subset of rules:&lt;br /&gt;
&amp;lt;code css&amp;gt;&lt;br /&gt;
/* Required because YUI resets add a black border to all tables */&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Progressive Enhancement ==&lt;br /&gt;
&lt;br /&gt;
* Code should follow the Moodle principle of progressive enhancement for all supported browsers for that specific version of Moodle. Supported browsers are listed in the [https://docs.moodle.org/dev/Releases Release notes] for the Moodle version.&lt;br /&gt;
* Fallbacks should always be provided. For example, provide a background color fallback to background images and gradients.&lt;br /&gt;
* Use vendor prefixes only when the supported browser in question does not support the unprefixed property. Outdated vendor prefixes can be removed. Use  [http://caniuse.com/ Can I use] or like resource to determine what&#039;s supported. &lt;br /&gt;
* The standard property should preferably come after the vendor-prefixed property.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code css&amp;gt;.selector {&lt;br /&gt;
    background-color: #444; /* Fallback for browsers that don&#039;t support gradients */&lt;br /&gt;
    filter: progid:DXImageTransform.Microsoft.gradient(startColorStr=&#039;#444&#039;, EndColorStr=&#039;#999&#039;); /* IE6-IE9 */&lt;br /&gt;
    background-image: -webkit-gradient(linear, left top, left bottom, from(#444), to(#999)); /* Safari 4+, Chrome */&lt;br /&gt;
    background-image: -webkit-linear-gradient(top, #444, #999); /* Chrome 10+, Safari 5.1+, iOS 5+ */&lt;br /&gt;
    background-image: -moz-linear-gradient(top, #444, #999); /* Firefox 3.6 */&lt;br /&gt;
    background-image: -ms-linear-gradient(top, #444, #999); /* IE10 */&lt;br /&gt;
    background-image: -o-linear-gradient(top, #444, #999); /* Opera 11.10+ */&lt;br /&gt;
    background-image: linear-gradient(top, #444, #999); /* W3C Standard */&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Browser Hacks ===&lt;br /&gt;
&lt;br /&gt;
* Do not use any browser-specific hacks. Moodle provides a more appropriate way to write browser-specific CSS using classes that are added to the body element. For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code css&amp;gt;&lt;br /&gt;
.ie7 .forum-post {&lt;br /&gt;
    min-height: 1px;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* It is not necessary to include hacks for versions of browsers that Moodle Core does not provide support for (e.g. IE6 in Moodle 2, except legacy theme).&lt;br /&gt;
&lt;br /&gt;
=== LESS and Other CSS Preprocessors ===&lt;br /&gt;
[http://lesscss.org/ LESS] is not CSS. LESS will be evaluated according to the [http://lesscss.org/#docs LESS documentation]. If the LESS is valid according to the LESS documentation, and does not result in invalid CSS when compiled, it does not need to be further changed, revised, updated, or documented. The same goes for SASS and any other preprocessor languages coming down the pike.  It&#039;s important that your LESS or SASS files be clear and accessible to others, and where the rules above apply, for example, with regard to line breaks and syntax, please follow them. &lt;br /&gt;
&lt;br /&gt;
Some additional features allowed in LESS or SASS conflict with CSS usage. One example is inline comments in LESS. However, these inline comments do not appear in the compiled CSS file. The rule of thumb is that so long as the feature is part of the documented LESS or SASS feature set, is clear and usable by other developers (who have read the LESS or SASS documentation), and does not break or interfere with the functioning of the compressed CSS file, we let it stand in peer review.&lt;br /&gt;
&lt;br /&gt;
== Credits ==&lt;br /&gt;
&lt;br /&gt;
This document was drawn from the following sources:&lt;br /&gt;
&lt;br /&gt;
# The [http://codex.wordpress.org/CSS_Coding_Standards WordPress CSS Coding Standards] &lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
* [[Coding]]&lt;br /&gt;
* [[Coding_style|Coding style]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Coding guidelines|CSS Coding style]]&lt;/div&gt;</summary>
		<author><name>Bawjaws</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=CSS_Coding_Style&amp;diff=42792</id>
		<title>CSS Coding Style</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=CSS_Coding_Style&amp;diff=42792"/>
		<updated>2013-10-30T15:35:13Z</updated>

		<summary type="html">&lt;p&gt;Bawjaws: /* Block Style */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Work in progress}}&lt;br /&gt;
&lt;br /&gt;
The Moodle CSS coding style &lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
=== Scope ===&lt;br /&gt;
&lt;br /&gt;
This document describes style guidelines for developers working on or with Moodle code. It talks purely about the mechanics of code layout and the choices we have made for Moodle. &lt;br /&gt;
&lt;br /&gt;
=== Goals ===&lt;br /&gt;
&lt;br /&gt;
Consistent coding style is important in any development project, and particularly when many developers are involved. A standard style helps to ensure that the code is easier to read and understand, which helps overall quality.&lt;br /&gt;
&lt;br /&gt;
Abstract goals we strive for: &lt;br /&gt;
&lt;br /&gt;
* simplicity&lt;br /&gt;
* readability&lt;br /&gt;
* tool friendliness&lt;br /&gt;
&lt;br /&gt;
== Naming Conventions ==&lt;br /&gt;
&lt;br /&gt;
Within plugins, CSS files are normally named &amp;lt;code&amp;gt;styles.css&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
In the theme, files can be named according to the theme designer&#039;s wishes but should:&lt;br /&gt;
&lt;br /&gt;
* use lowercase letters only&lt;br /&gt;
* be as short as possible&lt;br /&gt;
&lt;br /&gt;
== Block Style ==&lt;br /&gt;
&lt;br /&gt;
* Each selector should be on its own line. If there is a comma in a selector list, follow it with a line break.&lt;br /&gt;
* Property-value pairs should be on their own line, with four spaces of indentation and an ending semicolon.&lt;br /&gt;
* The closing brace should use the same level of indentation as the opening selector.&lt;br /&gt;
* Leave one line between blocks.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Correct&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code css&amp;gt;@media only screen and (min-width: 768px) {&lt;br /&gt;
    .selector_one,&lt;br /&gt;
    .selector_two {&lt;br /&gt;
        color: #fff;&lt;br /&gt;
        background-color: #000;&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Incorrect&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code css&amp;gt;.selector_one, .selector_two { color: #fff; background-color: #000; }&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Selectors ==&lt;br /&gt;
&lt;br /&gt;
* Follow Moodle [[Coding style]] for naming selectors.&lt;br /&gt;
* Names should be simple English lowercase words.&lt;br /&gt;
* Words should be separated by underscores or hyphens.&lt;br /&gt;
* Verbosity is encouraged: names should be as illustrative as is practical to enhance understanding.&lt;br /&gt;
* Use [http://css-tricks.com/semantic-class-names/ semantic names]: names tell what this is instead of what should it look like.&lt;br /&gt;
* Avoid using IDs as selectors wherever possible. IDs are a tad faster, but far more difficult to maintain and override. If you can&#039;t write the needed selectors successfully without using an ID, then submit a [http://tracker.moodle.org Tracker ticket] to have classnames added.  &lt;br /&gt;
&lt;br /&gt;
=== Correct ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code css&amp;gt;.selector_name {&lt;br /&gt;
    color: #fff;&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code css&amp;gt;.selector-name {&lt;br /&gt;
    color: #fff;&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Incorrect ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code css&amp;gt;#selName {&lt;br /&gt;
    color: #fff;&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code css&amp;gt;#Sel-Name {&lt;br /&gt;
    color: #fff;&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Properties and Values ==&lt;br /&gt;
&lt;br /&gt;
* Properties and values should be seperated by a colon and a single space&lt;br /&gt;
* All properties and values should be lowercase, except for font names and vendor-specific properties.&lt;br /&gt;
* For color codes, lowercase is preferred &lt;br /&gt;
* For color codes, use of the shorthand version where possible is preferred, (e.g: &amp;lt;code&amp;gt;#fff&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;#ffffff&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;#c06&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;#cc0066&amp;lt;/code&amp;gt;). &lt;br /&gt;
* For color codes, if you use HSLA or RGBA, always provide a hex fallback.&lt;br /&gt;
* Use shorthand (except when overriding styles) for background, border, font, list-style, margin, and padding values.&lt;br /&gt;
* Prefixed vendor-specific properties pairs should appear directly before the generic property they refer to.&lt;br /&gt;
* Do not use &amp;lt;code&amp;gt;!important&amp;lt;/code&amp;gt;. If you need to use &amp;lt;code&amp;gt;!important&amp;lt;/code&amp;gt;, something is wrong with the CSS you are trying to override. Rather than adding more problematic CSS, submit a [http://tracker.moodle.org Tracker ticket] to get the existing problem fixed. &lt;br /&gt;
&lt;br /&gt;
=== Correct ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code css&amp;gt;.selector {&lt;br /&gt;
    color: #fff;&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Correct ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code css&amp;gt;.selector {&lt;br /&gt;
    color: #fff;&lt;br /&gt;
    color: hsla(0, 0%, 100%, 1);&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Incorrect ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code css&amp;gt;#selector {&lt;br /&gt;
    color: hsla(0, 0%, 100%, 1);&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Incorrect ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code css&amp;gt;#selector {&lt;br /&gt;
    color: #FFFFFF !important;&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Documentation and Comments ==&lt;br /&gt;
&lt;br /&gt;
A block-style comment at the top of the CSS file should explain the purpose of the rules in the file.&lt;br /&gt;
&amp;lt;code css&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
* base.css&lt;br /&gt;
* Contains base styles for theme basic.&lt;br /&gt;
*/&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Block-style comments can also be used to denote a section in a CSS file where all rules pertain to a specific component, view, or functionality:&lt;br /&gt;
&amp;lt;code css&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
* SCORM Navigation Sidebar&lt;br /&gt;
*/&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Use single-line comments to provide more information to other developers about a single rule or small subset of rules:&lt;br /&gt;
&amp;lt;code css&amp;gt;&lt;br /&gt;
/* Required because YUI resets add a black border to all tables */&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Progressive Enhancement ==&lt;br /&gt;
&lt;br /&gt;
* Code should follow the Moodle principle of progressive enhancement for all supported browsers for that specific version of Moodle. Supported browsers are listed in the [https://docs.moodle.org/dev/Releases Release notes] for the Moodle version.&lt;br /&gt;
* Fallbacks should always be provided. For example, provide a background color fallback to background images and gradients.&lt;br /&gt;
* Use vendor prefixes only when the supported browser in question does not support the unprefixed property. Outdated vendor prefixes can be removed. Use  [http://caniuse.com/ Can I use] or like resource to determine what&#039;s supported. &lt;br /&gt;
* The standard property should preferably come after the vendor-prefixed property.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code css&amp;gt;.selector {&lt;br /&gt;
    background-color: #444; /* Fallback for browsers that don&#039;t support gradients */&lt;br /&gt;
    filter: progid:DXImageTransform.Microsoft.gradient(startColorStr=&#039;#444&#039;, EndColorStr=&#039;#999&#039;); /* IE6-IE9 */&lt;br /&gt;
    background-image: -webkit-gradient(linear, left top, left bottom, from(#444), to(#999)); /* Safari 4+, Chrome */&lt;br /&gt;
    background-image: -webkit-linear-gradient(top, #444, #999); /* Chrome 10+, Safari 5.1+, iOS 5+ */&lt;br /&gt;
    background-image: -moz-linear-gradient(top, #444, #999); /* Firefox 3.6 */&lt;br /&gt;
    background-image: -ms-linear-gradient(top, #444, #999); /* IE10 */&lt;br /&gt;
    background-image: -o-linear-gradient(top, #444, #999); /* Opera 11.10+ */&lt;br /&gt;
    background-image: linear-gradient(top, #444, #999); /* W3C Standard */&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Browser Hacks ===&lt;br /&gt;
&lt;br /&gt;
* Do not use any browser-specific hacks. Moodle provides a more appropriate way to write browser-specific CSS using classes that are added to the body element. For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code css&amp;gt;&lt;br /&gt;
.ie7 .forum-post {&lt;br /&gt;
    min-height: 1px;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* It is not necessary to include hacks for versions of browsers that Moodle Core does not provide support for (e.g. IE6 in Moodle 2, except legacy theme).&lt;br /&gt;
&lt;br /&gt;
=== LESS and Other CSS Preprocessors ===&lt;br /&gt;
[http://lesscss.org/ LESS] is not CSS. LESS will be evaluated according to the [http://lesscss.org/#docs LESS documentation]. If the LESS is valid according to the LESS documentation, and does not result in invalid CSS when compiled, it does not need to be further changed, revised, updated, or documented. The same goes for SASS and any other preprocessor languages coming down the pike.  It&#039;s important that your LESS or SASS files be clear and accessible to others, and where the rules above apply, for example, with regard to line breaks and syntax, please follow them. &lt;br /&gt;
&lt;br /&gt;
Some additional features allowed in LESS or SASS conflict with CSS usage. One example is inline comments in LESS. However, these inline comments do not appear in the compiled CSS file. The rule of thumb is that so long as the feature is part of the documented LESS or SASS feature set, is clear and usable by other developers (who have read the LESS or SASS documentation), and does not break or interfere with the functioning of the compressed CSS file, we let it stand in peer review.&lt;br /&gt;
&lt;br /&gt;
== Credits ==&lt;br /&gt;
&lt;br /&gt;
This document was drawn from the following sources:&lt;br /&gt;
&lt;br /&gt;
# The [http://codex.wordpress.org/CSS_Coding_Standards WordPress CSS Coding Standards] &lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
* [[Coding]]&lt;br /&gt;
* [[Coding_style|Coding style]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Coding guidelines|CSS Coding style]]&lt;/div&gt;</summary>
		<author><name>Bawjaws</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=CSS_Coding_Style&amp;diff=42791</id>
		<title>CSS Coding Style</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=CSS_Coding_Style&amp;diff=42791"/>
		<updated>2013-10-30T15:33:21Z</updated>

		<summary type="html">&lt;p&gt;Bawjaws: /* Correct */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Work in progress}}&lt;br /&gt;
&lt;br /&gt;
The Moodle CSS coding style &lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
=== Scope ===&lt;br /&gt;
&lt;br /&gt;
This document describes style guidelines for developers working on or with Moodle code. It talks purely about the mechanics of code layout and the choices we have made for Moodle. &lt;br /&gt;
&lt;br /&gt;
=== Goals ===&lt;br /&gt;
&lt;br /&gt;
Consistent coding style is important in any development project, and particularly when many developers are involved. A standard style helps to ensure that the code is easier to read and understand, which helps overall quality.&lt;br /&gt;
&lt;br /&gt;
Abstract goals we strive for: &lt;br /&gt;
&lt;br /&gt;
* simplicity&lt;br /&gt;
* readability&lt;br /&gt;
* tool friendliness&lt;br /&gt;
&lt;br /&gt;
== Naming Conventions ==&lt;br /&gt;
&lt;br /&gt;
Within plugins, CSS files are normally named &amp;lt;code&amp;gt;styles.css&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
In the theme, files can be named according to the theme designer&#039;s wishes but should:&lt;br /&gt;
&lt;br /&gt;
* use lowercase letters only&lt;br /&gt;
* be as short as possible&lt;br /&gt;
&lt;br /&gt;
== Block Style ==&lt;br /&gt;
&lt;br /&gt;
* Each selector should be on its own line. If there is a comma in a selector list, follow it with a line break.&lt;br /&gt;
* Property-value pairs should be on their own line, with four spaces of indentation and an ending semicolon.&lt;br /&gt;
* The closing brace should use the same level of indentation as the opening selector.&lt;br /&gt;
* Leave one line between blocks.&lt;br /&gt;
&lt;br /&gt;
***Correct***&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code css&amp;gt;@media only screen and (min-width: 768px) {&lt;br /&gt;
    .selector_one,&lt;br /&gt;
    .selector_two {&lt;br /&gt;
        color: #fff;&lt;br /&gt;
        background-color: #000;&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Incorrect ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code css&amp;gt;.selector_one, .selector_two { color: #fff; background-color: #000; }&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Selectors ==&lt;br /&gt;
&lt;br /&gt;
* Follow Moodle [[Coding style]] for naming selectors.&lt;br /&gt;
* Names should be simple English lowercase words.&lt;br /&gt;
* Words should be separated by underscores or hyphens.&lt;br /&gt;
* Verbosity is encouraged: names should be as illustrative as is practical to enhance understanding.&lt;br /&gt;
* Use [http://css-tricks.com/semantic-class-names/ semantic names]: names tell what this is instead of what should it look like.&lt;br /&gt;
* Avoid using IDs as selectors wherever possible. IDs are a tad faster, but far more difficult to maintain and override. If you can&#039;t write the needed selectors successfully without using an ID, then submit a [http://tracker.moodle.org Tracker ticket] to have classnames added.  &lt;br /&gt;
&lt;br /&gt;
=== Correct ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code css&amp;gt;.selector_name {&lt;br /&gt;
    color: #fff;&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code css&amp;gt;.selector-name {&lt;br /&gt;
    color: #fff;&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Incorrect ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code css&amp;gt;#selName {&lt;br /&gt;
    color: #fff;&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code css&amp;gt;#Sel-Name {&lt;br /&gt;
    color: #fff;&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Properties and Values ==&lt;br /&gt;
&lt;br /&gt;
* Properties and values should be seperated by a colon and a single space&lt;br /&gt;
* All properties and values should be lowercase, except for font names and vendor-specific properties.&lt;br /&gt;
* For color codes, lowercase is preferred &lt;br /&gt;
* For color codes, use of the shorthand version where possible is preferred, (e.g: &amp;lt;code&amp;gt;#fff&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;#ffffff&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;#c06&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;#cc0066&amp;lt;/code&amp;gt;). &lt;br /&gt;
* For color codes, if you use HSLA or RGBA, always provide a hex fallback.&lt;br /&gt;
* Use shorthand (except when overriding styles) for background, border, font, list-style, margin, and padding values.&lt;br /&gt;
* Prefixed vendor-specific properties pairs should appear directly before the generic property they refer to.&lt;br /&gt;
* Do not use &amp;lt;code&amp;gt;!important&amp;lt;/code&amp;gt;. If you need to use &amp;lt;code&amp;gt;!important&amp;lt;/code&amp;gt;, something is wrong with the CSS you are trying to override. Rather than adding more problematic CSS, submit a [http://tracker.moodle.org Tracker ticket] to get the existing problem fixed. &lt;br /&gt;
&lt;br /&gt;
=== Correct ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code css&amp;gt;.selector {&lt;br /&gt;
    color: #fff;&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Correct ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code css&amp;gt;.selector {&lt;br /&gt;
    color: #fff;&lt;br /&gt;
    color: hsla(0, 0%, 100%, 1);&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Incorrect ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code css&amp;gt;#selector {&lt;br /&gt;
    color: hsla(0, 0%, 100%, 1);&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Incorrect ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code css&amp;gt;#selector {&lt;br /&gt;
    color: #FFFFFF !important;&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Documentation and Comments ==&lt;br /&gt;
&lt;br /&gt;
A block-style comment at the top of the CSS file should explain the purpose of the rules in the file.&lt;br /&gt;
&amp;lt;code css&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
* base.css&lt;br /&gt;
* Contains base styles for theme basic.&lt;br /&gt;
*/&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Block-style comments can also be used to denote a section in a CSS file where all rules pertain to a specific component, view, or functionality:&lt;br /&gt;
&amp;lt;code css&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
* SCORM Navigation Sidebar&lt;br /&gt;
*/&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Use single-line comments to provide more information to other developers about a single rule or small subset of rules:&lt;br /&gt;
&amp;lt;code css&amp;gt;&lt;br /&gt;
/* Required because YUI resets add a black border to all tables */&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Progressive Enhancement ==&lt;br /&gt;
&lt;br /&gt;
* Code should follow the Moodle principle of progressive enhancement for all supported browsers for that specific version of Moodle. Supported browsers are listed in the [https://docs.moodle.org/dev/Releases Release notes] for the Moodle version.&lt;br /&gt;
* Fallbacks should always be provided. For example, provide a background color fallback to background images and gradients.&lt;br /&gt;
* Use vendor prefixes only when the supported browser in question does not support the unprefixed property. Outdated vendor prefixes can be removed. Use  [http://caniuse.com/ Can I use] or like resource to determine what&#039;s supported. &lt;br /&gt;
* The standard property should preferably come after the vendor-prefixed property.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code css&amp;gt;.selector {&lt;br /&gt;
    background-color: #444; /* Fallback for browsers that don&#039;t support gradients */&lt;br /&gt;
    filter: progid:DXImageTransform.Microsoft.gradient(startColorStr=&#039;#444&#039;, EndColorStr=&#039;#999&#039;); /* IE6-IE9 */&lt;br /&gt;
    background-image: -webkit-gradient(linear, left top, left bottom, from(#444), to(#999)); /* Safari 4+, Chrome */&lt;br /&gt;
    background-image: -webkit-linear-gradient(top, #444, #999); /* Chrome 10+, Safari 5.1+, iOS 5+ */&lt;br /&gt;
    background-image: -moz-linear-gradient(top, #444, #999); /* Firefox 3.6 */&lt;br /&gt;
    background-image: -ms-linear-gradient(top, #444, #999); /* IE10 */&lt;br /&gt;
    background-image: -o-linear-gradient(top, #444, #999); /* Opera 11.10+ */&lt;br /&gt;
    background-image: linear-gradient(top, #444, #999); /* W3C Standard */&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Browser Hacks ===&lt;br /&gt;
&lt;br /&gt;
* Do not use any browser-specific hacks. Moodle provides a more appropriate way to write browser-specific CSS using classes that are added to the body element. For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code css&amp;gt;&lt;br /&gt;
.ie7 .forum-post {&lt;br /&gt;
    min-height: 1px;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* It is not necessary to include hacks for versions of browsers that Moodle Core does not provide support for (e.g. IE6 in Moodle 2, except legacy theme).&lt;br /&gt;
&lt;br /&gt;
=== LESS and Other CSS Preprocessors ===&lt;br /&gt;
[http://lesscss.org/ LESS] is not CSS. LESS will be evaluated according to the [http://lesscss.org/#docs LESS documentation]. If the LESS is valid according to the LESS documentation, and does not result in invalid CSS when compiled, it does not need to be further changed, revised, updated, or documented. The same goes for SASS and any other preprocessor languages coming down the pike.  It&#039;s important that your LESS or SASS files be clear and accessible to others, and where the rules above apply, for example, with regard to line breaks and syntax, please follow them. &lt;br /&gt;
&lt;br /&gt;
Some additional features allowed in LESS or SASS conflict with CSS usage. One example is inline comments in LESS. However, these inline comments do not appear in the compiled CSS file. The rule of thumb is that so long as the feature is part of the documented LESS or SASS feature set, is clear and usable by other developers (who have read the LESS or SASS documentation), and does not break or interfere with the functioning of the compressed CSS file, we let it stand in peer review.&lt;br /&gt;
&lt;br /&gt;
== Credits ==&lt;br /&gt;
&lt;br /&gt;
This document was drawn from the following sources:&lt;br /&gt;
&lt;br /&gt;
# The [http://codex.wordpress.org/CSS_Coding_Standards WordPress CSS Coding Standards] &lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
* [[Coding]]&lt;br /&gt;
* [[Coding_style|Coding style]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Coding guidelines|CSS Coding style]]&lt;/div&gt;</summary>
		<author><name>Bawjaws</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=CSS_Coding_Style&amp;diff=42790</id>
		<title>CSS Coding Style</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=CSS_Coding_Style&amp;diff=42790"/>
		<updated>2013-10-30T15:32:56Z</updated>

		<summary type="html">&lt;p&gt;Bawjaws: /* Correct */  testing hiding some headings from TOC&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Work in progress}}&lt;br /&gt;
&lt;br /&gt;
The Moodle CSS coding style &lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
=== Scope ===&lt;br /&gt;
&lt;br /&gt;
This document describes style guidelines for developers working on or with Moodle code. It talks purely about the mechanics of code layout and the choices we have made for Moodle. &lt;br /&gt;
&lt;br /&gt;
=== Goals ===&lt;br /&gt;
&lt;br /&gt;
Consistent coding style is important in any development project, and particularly when many developers are involved. A standard style helps to ensure that the code is easier to read and understand, which helps overall quality.&lt;br /&gt;
&lt;br /&gt;
Abstract goals we strive for: &lt;br /&gt;
&lt;br /&gt;
* simplicity&lt;br /&gt;
* readability&lt;br /&gt;
* tool friendliness&lt;br /&gt;
&lt;br /&gt;
== Naming Conventions ==&lt;br /&gt;
&lt;br /&gt;
Within plugins, CSS files are normally named &amp;lt;code&amp;gt;styles.css&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
In the theme, files can be named according to the theme designer&#039;s wishes but should:&lt;br /&gt;
&lt;br /&gt;
* use lowercase letters only&lt;br /&gt;
* be as short as possible&lt;br /&gt;
&lt;br /&gt;
== Block Style ==&lt;br /&gt;
&lt;br /&gt;
* Each selector should be on its own line. If there is a comma in a selector list, follow it with a line break.&lt;br /&gt;
* Property-value pairs should be on their own line, with four spaces of indentation and an ending semicolon.&lt;br /&gt;
* The closing brace should use the same level of indentation as the opening selector.&lt;br /&gt;
* Leave one line between blocks.&lt;br /&gt;
&lt;br /&gt;
==== Correct ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code css&amp;gt;@media only screen and (min-width: 768px) {&lt;br /&gt;
    .selector_one,&lt;br /&gt;
    .selector_two {&lt;br /&gt;
        color: #fff;&lt;br /&gt;
        background-color: #000;&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Incorrect ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code css&amp;gt;.selector_one, .selector_two { color: #fff; background-color: #000; }&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Selectors ==&lt;br /&gt;
&lt;br /&gt;
* Follow Moodle [[Coding style]] for naming selectors.&lt;br /&gt;
* Names should be simple English lowercase words.&lt;br /&gt;
* Words should be separated by underscores or hyphens.&lt;br /&gt;
* Verbosity is encouraged: names should be as illustrative as is practical to enhance understanding.&lt;br /&gt;
* Use [http://css-tricks.com/semantic-class-names/ semantic names]: names tell what this is instead of what should it look like.&lt;br /&gt;
* Avoid using IDs as selectors wherever possible. IDs are a tad faster, but far more difficult to maintain and override. If you can&#039;t write the needed selectors successfully without using an ID, then submit a [http://tracker.moodle.org Tracker ticket] to have classnames added.  &lt;br /&gt;
&lt;br /&gt;
=== Correct ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code css&amp;gt;.selector_name {&lt;br /&gt;
    color: #fff;&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code css&amp;gt;.selector-name {&lt;br /&gt;
    color: #fff;&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Incorrect ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code css&amp;gt;#selName {&lt;br /&gt;
    color: #fff;&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code css&amp;gt;#Sel-Name {&lt;br /&gt;
    color: #fff;&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Properties and Values ==&lt;br /&gt;
&lt;br /&gt;
* Properties and values should be seperated by a colon and a single space&lt;br /&gt;
* All properties and values should be lowercase, except for font names and vendor-specific properties.&lt;br /&gt;
* For color codes, lowercase is preferred &lt;br /&gt;
* For color codes, use of the shorthand version where possible is preferred, (e.g: &amp;lt;code&amp;gt;#fff&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;#ffffff&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;#c06&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;#cc0066&amp;lt;/code&amp;gt;). &lt;br /&gt;
* For color codes, if you use HSLA or RGBA, always provide a hex fallback.&lt;br /&gt;
* Use shorthand (except when overriding styles) for background, border, font, list-style, margin, and padding values.&lt;br /&gt;
* Prefixed vendor-specific properties pairs should appear directly before the generic property they refer to.&lt;br /&gt;
* Do not use &amp;lt;code&amp;gt;!important&amp;lt;/code&amp;gt;. If you need to use &amp;lt;code&amp;gt;!important&amp;lt;/code&amp;gt;, something is wrong with the CSS you are trying to override. Rather than adding more problematic CSS, submit a [http://tracker.moodle.org Tracker ticket] to get the existing problem fixed. &lt;br /&gt;
&lt;br /&gt;
=== Correct ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code css&amp;gt;.selector {&lt;br /&gt;
    color: #fff;&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Correct ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code css&amp;gt;.selector {&lt;br /&gt;
    color: #fff;&lt;br /&gt;
    color: hsla(0, 0%, 100%, 1);&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Incorrect ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code css&amp;gt;#selector {&lt;br /&gt;
    color: hsla(0, 0%, 100%, 1);&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Incorrect ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code css&amp;gt;#selector {&lt;br /&gt;
    color: #FFFFFF !important;&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Documentation and Comments ==&lt;br /&gt;
&lt;br /&gt;
A block-style comment at the top of the CSS file should explain the purpose of the rules in the file.&lt;br /&gt;
&amp;lt;code css&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
* base.css&lt;br /&gt;
* Contains base styles for theme basic.&lt;br /&gt;
*/&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Block-style comments can also be used to denote a section in a CSS file where all rules pertain to a specific component, view, or functionality:&lt;br /&gt;
&amp;lt;code css&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
* SCORM Navigation Sidebar&lt;br /&gt;
*/&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Use single-line comments to provide more information to other developers about a single rule or small subset of rules:&lt;br /&gt;
&amp;lt;code css&amp;gt;&lt;br /&gt;
/* Required because YUI resets add a black border to all tables */&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Progressive Enhancement ==&lt;br /&gt;
&lt;br /&gt;
* Code should follow the Moodle principle of progressive enhancement for all supported browsers for that specific version of Moodle. Supported browsers are listed in the [https://docs.moodle.org/dev/Releases Release notes] for the Moodle version.&lt;br /&gt;
* Fallbacks should always be provided. For example, provide a background color fallback to background images and gradients.&lt;br /&gt;
* Use vendor prefixes only when the supported browser in question does not support the unprefixed property. Outdated vendor prefixes can be removed. Use  [http://caniuse.com/ Can I use] or like resource to determine what&#039;s supported. &lt;br /&gt;
* The standard property should preferably come after the vendor-prefixed property.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code css&amp;gt;.selector {&lt;br /&gt;
    background-color: #444; /* Fallback for browsers that don&#039;t support gradients */&lt;br /&gt;
    filter: progid:DXImageTransform.Microsoft.gradient(startColorStr=&#039;#444&#039;, EndColorStr=&#039;#999&#039;); /* IE6-IE9 */&lt;br /&gt;
    background-image: -webkit-gradient(linear, left top, left bottom, from(#444), to(#999)); /* Safari 4+, Chrome */&lt;br /&gt;
    background-image: -webkit-linear-gradient(top, #444, #999); /* Chrome 10+, Safari 5.1+, iOS 5+ */&lt;br /&gt;
    background-image: -moz-linear-gradient(top, #444, #999); /* Firefox 3.6 */&lt;br /&gt;
    background-image: -ms-linear-gradient(top, #444, #999); /* IE10 */&lt;br /&gt;
    background-image: -o-linear-gradient(top, #444, #999); /* Opera 11.10+ */&lt;br /&gt;
    background-image: linear-gradient(top, #444, #999); /* W3C Standard */&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Browser Hacks ===&lt;br /&gt;
&lt;br /&gt;
* Do not use any browser-specific hacks. Moodle provides a more appropriate way to write browser-specific CSS using classes that are added to the body element. For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code css&amp;gt;&lt;br /&gt;
.ie7 .forum-post {&lt;br /&gt;
    min-height: 1px;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* It is not necessary to include hacks for versions of browsers that Moodle Core does not provide support for (e.g. IE6 in Moodle 2, except legacy theme).&lt;br /&gt;
&lt;br /&gt;
=== LESS and Other CSS Preprocessors ===&lt;br /&gt;
[http://lesscss.org/ LESS] is not CSS. LESS will be evaluated according to the [http://lesscss.org/#docs LESS documentation]. If the LESS is valid according to the LESS documentation, and does not result in invalid CSS when compiled, it does not need to be further changed, revised, updated, or documented. The same goes for SASS and any other preprocessor languages coming down the pike.  It&#039;s important that your LESS or SASS files be clear and accessible to others, and where the rules above apply, for example, with regard to line breaks and syntax, please follow them. &lt;br /&gt;
&lt;br /&gt;
Some additional features allowed in LESS or SASS conflict with CSS usage. One example is inline comments in LESS. However, these inline comments do not appear in the compiled CSS file. The rule of thumb is that so long as the feature is part of the documented LESS or SASS feature set, is clear and usable by other developers (who have read the LESS or SASS documentation), and does not break or interfere with the functioning of the compressed CSS file, we let it stand in peer review.&lt;br /&gt;
&lt;br /&gt;
== Credits ==&lt;br /&gt;
&lt;br /&gt;
This document was drawn from the following sources:&lt;br /&gt;
&lt;br /&gt;
# The [http://codex.wordpress.org/CSS_Coding_Standards WordPress CSS Coding Standards] &lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
* [[Coding]]&lt;br /&gt;
* [[Coding_style|Coding style]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Coding guidelines|CSS Coding style]]&lt;/div&gt;</summary>
		<author><name>Bawjaws</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=CSS_Coding_Style&amp;diff=42789</id>
		<title>CSS Coding Style</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=CSS_Coding_Style&amp;diff=42789"/>
		<updated>2013-10-30T10:10:22Z</updated>

		<summary type="html">&lt;p&gt;Bawjaws: /* Properties and Values */  rewrote the colon space rule to be more explicit.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Work in progress}}&lt;br /&gt;
&lt;br /&gt;
The Moodle CSS coding style &lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
=== Scope ===&lt;br /&gt;
&lt;br /&gt;
This document describes style guidelines for developers working on or with Moodle code. It talks purely about the mechanics of code layout and the choices we have made for Moodle. &lt;br /&gt;
&lt;br /&gt;
=== Goals ===&lt;br /&gt;
&lt;br /&gt;
Consistent coding style is important in any development project, and particularly when many developers are involved. A standard style helps to ensure that the code is easier to read and understand, which helps overall quality.&lt;br /&gt;
&lt;br /&gt;
Abstract goals we strive for: &lt;br /&gt;
&lt;br /&gt;
* simplicity&lt;br /&gt;
* readability&lt;br /&gt;
* tool friendliness&lt;br /&gt;
&lt;br /&gt;
== Naming Conventions ==&lt;br /&gt;
&lt;br /&gt;
Within plugins, CSS files are normally named &amp;lt;code&amp;gt;styles.css&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
In the theme, files can be named according to the theme designer&#039;s wishes but should:&lt;br /&gt;
&lt;br /&gt;
* use lowercase letters only&lt;br /&gt;
* be as short as possible&lt;br /&gt;
&lt;br /&gt;
== Block Style ==&lt;br /&gt;
&lt;br /&gt;
* Each selector should be on its own line. If there is a comma in a selector list, follow it with a line break.&lt;br /&gt;
* Property-value pairs should be on their own line, with four spaces of indentation and an ending semicolon.&lt;br /&gt;
* The closing brace should use the same level of indentation as the opening selector.&lt;br /&gt;
* Leave one line between blocks.&lt;br /&gt;
&lt;br /&gt;
=== Correct ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code css&amp;gt;@media only screen and (min-width: 768px) {&lt;br /&gt;
    .selector_one,&lt;br /&gt;
    .selector_two {&lt;br /&gt;
        color: #fff;&lt;br /&gt;
        background-color: #000;&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Incorrect ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code css&amp;gt;.selector_one, .selector_two { color: #fff; background-color: #000; }&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Selectors ==&lt;br /&gt;
&lt;br /&gt;
* Follow Moodle [[Coding style]] for naming selectors.&lt;br /&gt;
* Names should be simple English lowercase words.&lt;br /&gt;
* Words should be separated by underscores or hyphens.&lt;br /&gt;
* Verbosity is encouraged: names should be as illustrative as is practical to enhance understanding.&lt;br /&gt;
* Use [http://css-tricks.com/semantic-class-names/ semantic names]: names tell what this is instead of what should it look like.&lt;br /&gt;
* Avoid using IDs as selectors wherever possible. IDs are a tad faster, but far more difficult to maintain and override. If you can&#039;t write the needed selectors successfully without using an ID, then submit a [http://tracker.moodle.org Tracker ticket] to have classnames added.  &lt;br /&gt;
&lt;br /&gt;
=== Correct ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code css&amp;gt;.selector_name {&lt;br /&gt;
    color: #fff;&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code css&amp;gt;.selector-name {&lt;br /&gt;
    color: #fff;&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Incorrect ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code css&amp;gt;#selName {&lt;br /&gt;
    color: #fff;&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code css&amp;gt;#Sel-Name {&lt;br /&gt;
    color: #fff;&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Properties and Values ==&lt;br /&gt;
&lt;br /&gt;
* Properties and values should be seperated by a colon and a single space&lt;br /&gt;
* All properties and values should be lowercase, except for font names and vendor-specific properties.&lt;br /&gt;
* For color codes, lowercase is preferred &lt;br /&gt;
* For color codes, use of the shorthand version where possible is preferred, (e.g: &amp;lt;code&amp;gt;#fff&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;#ffffff&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;#c06&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;#cc0066&amp;lt;/code&amp;gt;). &lt;br /&gt;
* For color codes, if you use HSLA or RGBA, always provide a hex fallback.&lt;br /&gt;
* Use shorthand (except when overriding styles) for background, border, font, list-style, margin, and padding values.&lt;br /&gt;
* Prefixed vendor-specific properties pairs should appear directly before the generic property they refer to.&lt;br /&gt;
* Do not use &amp;lt;code&amp;gt;!important&amp;lt;/code&amp;gt;. If you need to use &amp;lt;code&amp;gt;!important&amp;lt;/code&amp;gt;, something is wrong with the CSS you are trying to override. Rather than adding more problematic CSS, submit a [http://tracker.moodle.org Tracker ticket] to get the existing problem fixed. &lt;br /&gt;
&lt;br /&gt;
=== Correct ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code css&amp;gt;.selector {&lt;br /&gt;
    color: #fff;&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Correct ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code css&amp;gt;.selector {&lt;br /&gt;
    color: #fff;&lt;br /&gt;
    color: hsla(0, 0%, 100%, 1);&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Incorrect ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code css&amp;gt;#selector {&lt;br /&gt;
    color: hsla(0, 0%, 100%, 1);&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Incorrect ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code css&amp;gt;#selector {&lt;br /&gt;
    color: #FFFFFF !important;&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Documentation and Comments ==&lt;br /&gt;
&lt;br /&gt;
A block-style comment at the top of the CSS file should explain the purpose of the rules in the file.&lt;br /&gt;
&amp;lt;code css&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
* base.css&lt;br /&gt;
* Contains base styles for theme basic.&lt;br /&gt;
*/&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Block-style comments can also be used to denote a section in a CSS file where all rules pertain to a specific component, view, or functionality:&lt;br /&gt;
&amp;lt;code css&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
* SCORM Navigation Sidebar&lt;br /&gt;
*/&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Use single-line comments to provide more information to other developers about a single rule or small subset of rules:&lt;br /&gt;
&amp;lt;code css&amp;gt;&lt;br /&gt;
/* Required because YUI resets add a black border to all tables */&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Progressive Enhancement ==&lt;br /&gt;
&lt;br /&gt;
* Code should follow the Moodle principle of progressive enhancement for all supported browsers for that specific version of Moodle. Supported browsers are listed in the [https://docs.moodle.org/dev/Releases Release notes] for the Moodle version.&lt;br /&gt;
* Fallbacks should always be provided. For example, provide a background color fallback to background images and gradients.&lt;br /&gt;
* Use vendor prefixes only when the supported browser in question does not support the unprefixed property. Outdated vendor prefixes can be removed. Use  [http://caniuse.com/ Can I use] or like resource to determine what&#039;s supported. &lt;br /&gt;
* The standard property should preferably come after the vendor-prefixed property.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code css&amp;gt;.selector {&lt;br /&gt;
    background-color: #444; /* Fallback for browsers that don&#039;t support gradients */&lt;br /&gt;
    filter: progid:DXImageTransform.Microsoft.gradient(startColorStr=&#039;#444&#039;, EndColorStr=&#039;#999&#039;); /* IE6-IE9 */&lt;br /&gt;
    background-image: -webkit-gradient(linear, left top, left bottom, from(#444), to(#999)); /* Safari 4+, Chrome */&lt;br /&gt;
    background-image: -webkit-linear-gradient(top, #444, #999); /* Chrome 10+, Safari 5.1+, iOS 5+ */&lt;br /&gt;
    background-image: -moz-linear-gradient(top, #444, #999); /* Firefox 3.6 */&lt;br /&gt;
    background-image: -ms-linear-gradient(top, #444, #999); /* IE10 */&lt;br /&gt;
    background-image: -o-linear-gradient(top, #444, #999); /* Opera 11.10+ */&lt;br /&gt;
    background-image: linear-gradient(top, #444, #999); /* W3C Standard */&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Browser Hacks ===&lt;br /&gt;
&lt;br /&gt;
* Do not use any browser-specific hacks. Moodle provides a more appropriate way to write browser-specific CSS using classes that are added to the body element. For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code css&amp;gt;&lt;br /&gt;
.ie7 .forum-post {&lt;br /&gt;
    min-height: 1px;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* It is not necessary to include hacks for versions of browsers that Moodle Core does not provide support for (e.g. IE6 in Moodle 2, except legacy theme).&lt;br /&gt;
&lt;br /&gt;
=== LESS and Other CSS Preprocessors ===&lt;br /&gt;
[http://lesscss.org/ LESS] is not CSS. LESS will be evaluated according to the [http://lesscss.org/#docs LESS documentation]. If the LESS is valid according to the LESS documentation, and does not result in invalid CSS when compiled, it does not need to be further changed, revised, updated, or documented. The same goes for SASS and any other preprocessor languages coming down the pike.  It&#039;s important that your LESS or SASS files be clear and accessible to others, and where the rules above apply, for example, with regard to line breaks and syntax, please follow them. &lt;br /&gt;
&lt;br /&gt;
Some additional features allowed in LESS or SASS conflict with CSS usage. One example is inline comments in LESS. However, these inline comments do not appear in the compiled CSS file. The rule of thumb is that so long as the feature is part of the documented LESS or SASS feature set, is clear and usable by other developers (who have read the LESS or SASS documentation), and does not break or interfere with the functioning of the compressed CSS file, we let it stand in peer review.&lt;br /&gt;
&lt;br /&gt;
== Credits ==&lt;br /&gt;
&lt;br /&gt;
This document was drawn from the following sources:&lt;br /&gt;
&lt;br /&gt;
# The [http://codex.wordpress.org/CSS_Coding_Standards WordPress CSS Coding Standards] &lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
* [[Coding]]&lt;br /&gt;
* [[Coding_style|Coding style]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Coding guidelines|CSS Coding style]]&lt;/div&gt;</summary>
		<author><name>Bawjaws</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Talk:CSS_Coding_Style&amp;diff=42788</id>
		<title>Talk:CSS Coding Style</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Talk:CSS_Coding_Style&amp;diff=42788"/>
		<updated>2013-10-30T10:07:08Z</updated>

		<summary type="html">&lt;p&gt;Bawjaws: Some reasoning for my recent changes&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; &lt;br /&gt;
== Removed &amp;quot;unless it is the last rule in the list of CSS mark-up.&amp;quot; ==&lt;br /&gt;
&lt;br /&gt;
https://docs.moodle.org/dev/index.php?title=CSS_coding_style&amp;amp;diff=42786&amp;amp;oldid=42785&lt;br /&gt;
&lt;br /&gt;
I don&#039;t think this made any sense. Possibly someone was getting colons and semi-colons mixed up? You always need the colon, and while you **can** leave the semi-colon off the last one, and it&#039;s a common minification technique, that&#039;s something the CSS minifier should take care of automatically (note to myself, should really check the Moodle minifier does this, but I think it does). Otherwise it introduces noise into the diffs since you need to change two lines if you add or remove the line at the end and gives the person writing the CSS a weird, subtle manual rule to be aware of. (In PHP we recommend the opposite and add a comma at the end of arrays even though it&#039;s not necessary.)&lt;br /&gt;
&lt;br /&gt;
== Leave one line between blocks ==&lt;br /&gt;
&lt;br /&gt;
https://docs.moodle.org/dev/index.php?title=CSS_coding_style&amp;amp;diff=42785&amp;amp;oldid=42784&lt;br /&gt;
&lt;br /&gt;
Changed this from recommending no empty line between CSS blocks, except for signalling sections to a standard one line between all blocks. The old rule is hard to enforce or check automatically since the tool won&#039;t know about what is and isn&#039;t a section.&lt;br /&gt;
&lt;br /&gt;
I also checked the Wordpress CSS guides that this was based on and they (at least currently) say &amp;quot;Add two blank lines between sections and one blank line between blocks in a section.&amp;quot; which seems a bit more reasonable (I think one line is fairly standard) but still suffers from not being able to run a formatter or linter over the file without losing info. If people want to have section breaks they should use comments, which are covered later in the doc.&lt;br /&gt;
&lt;br /&gt;
== A few questions ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A few questions about these style guidelines, as they seem a bit outdated: &lt;br /&gt;
# Do we need to restrict color settings to only HEX? This probably made sense when there was only HEX &amp;amp; RGB, but we now have really cool stuff like HSLA which is supported in all the browsers we support except IE8. It&#039;s also very easy to provide fallback to HEX:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  .selector {&lt;br /&gt;
    background-color: #hex;&lt;br /&gt;
    background-color: hsla(170, 50%, 45%, 1);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
# For many properties, browser prefixes are no longer needed for our supported browsers. Shouldn&#039;t we be recommending that browser prefixes be added for supported browsers which need them, only? (Also, to make sure there is a background-color fallback for things like gradients?)&lt;br /&gt;
# What about !important being a bad thing? If you can&#039;t override existing rules without !important, that indicates that existing selectors are too aggressive (usually using IDs rather than classes and elements).&lt;br /&gt;
# How about we recommend OOCSS and where you can&#039;t use it request classes added to Moodle&#039;s markup so you can?&lt;/div&gt;</summary>
		<author><name>Bawjaws</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=CSS_Coding_Style&amp;diff=42787</id>
		<title>CSS Coding Style</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=CSS_Coding_Style&amp;diff=42787"/>
		<updated>2013-10-30T09:56:11Z</updated>

		<summary type="html">&lt;p&gt;Bawjaws: /* Properties and Values */  don&amp;#039;t use !important full stop. also minor formatting&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Work in progress}}&lt;br /&gt;
&lt;br /&gt;
The Moodle CSS coding style &lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
=== Scope ===&lt;br /&gt;
&lt;br /&gt;
This document describes style guidelines for developers working on or with Moodle code. It talks purely about the mechanics of code layout and the choices we have made for Moodle. &lt;br /&gt;
&lt;br /&gt;
=== Goals ===&lt;br /&gt;
&lt;br /&gt;
Consistent coding style is important in any development project, and particularly when many developers are involved. A standard style helps to ensure that the code is easier to read and understand, which helps overall quality.&lt;br /&gt;
&lt;br /&gt;
Abstract goals we strive for: &lt;br /&gt;
&lt;br /&gt;
* simplicity&lt;br /&gt;
* readability&lt;br /&gt;
* tool friendliness&lt;br /&gt;
&lt;br /&gt;
== Naming Conventions ==&lt;br /&gt;
&lt;br /&gt;
Within plugins, CSS files are normally named &amp;lt;code&amp;gt;styles.css&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
In the theme, files can be named according to the theme designer&#039;s wishes but should:&lt;br /&gt;
&lt;br /&gt;
* use lowercase letters only&lt;br /&gt;
* be as short as possible&lt;br /&gt;
&lt;br /&gt;
== Block Style ==&lt;br /&gt;
&lt;br /&gt;
* Each selector should be on its own line. If there is a comma in a selector list, follow it with a line break.&lt;br /&gt;
* Property-value pairs should be on their own line, with four spaces of indentation and an ending semicolon.&lt;br /&gt;
* The closing brace should use the same level of indentation as the opening selector.&lt;br /&gt;
* Leave one line between blocks.&lt;br /&gt;
&lt;br /&gt;
=== Correct ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code css&amp;gt;@media only screen and (min-width: 768px) {&lt;br /&gt;
    .selector_one,&lt;br /&gt;
    .selector_two {&lt;br /&gt;
        color: #fff;&lt;br /&gt;
        background-color: #000;&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Incorrect ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code css&amp;gt;.selector_one, .selector_two { color: #fff; background-color: #000; }&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Selectors ==&lt;br /&gt;
&lt;br /&gt;
* Follow Moodle [[Coding style]] for naming selectors.&lt;br /&gt;
* Names should be simple English lowercase words.&lt;br /&gt;
* Words should be separated by underscores or hyphens.&lt;br /&gt;
* Verbosity is encouraged: names should be as illustrative as is practical to enhance understanding.&lt;br /&gt;
* Use [http://css-tricks.com/semantic-class-names/ semantic names]: names tell what this is instead of what should it look like.&lt;br /&gt;
* Avoid using IDs as selectors wherever possible. IDs are a tad faster, but far more difficult to maintain and override. If you can&#039;t write the needed selectors successfully without using an ID, then submit a [http://tracker.moodle.org Tracker ticket] to have classnames added.  &lt;br /&gt;
&lt;br /&gt;
=== Correct ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code css&amp;gt;.selector_name {&lt;br /&gt;
    color: #fff;&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code css&amp;gt;.selector-name {&lt;br /&gt;
    color: #fff;&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Incorrect ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code css&amp;gt;#selName {&lt;br /&gt;
    color: #fff;&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code css&amp;gt;#Sel-Name {&lt;br /&gt;
    color: #fff;&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Properties and Values ==&lt;br /&gt;
&lt;br /&gt;
* Properties should be followed by a colon and a space&lt;br /&gt;
* All properties and values should be lowercase, except for font names and vendor-specific properties.&lt;br /&gt;
* For color codes, lowercase is preferred &lt;br /&gt;
* For color codes, use of the shorthand version where possible is preferred, (e.g: &amp;lt;code&amp;gt;#fff&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;#ffffff&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;#c06&amp;lt;/code&amp;gt; instead of &amp;lt;code&amp;gt;#cc0066&amp;lt;/code&amp;gt;). &lt;br /&gt;
* For color codes, if you use HSLA or RGBA, provide a hex fallback (always).&lt;br /&gt;
* Use shorthand (except when overriding styles) for background, border, font, list-style, margin, and padding values.&lt;br /&gt;
* Prefixed vendor-specific properties pairs should appear directly before the generic property they refer to.&lt;br /&gt;
* Do not use &amp;lt;code&amp;gt;!important&amp;lt;/code&amp;gt;. If you need to use !important, something is wrong with the CSS you are trying to override. Rather than adding more problematic CSS, submit a [http://tracker.moodle.org Tracker ticket] to get the existing problem fixed. &lt;br /&gt;
&lt;br /&gt;
=== Correct ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code css&amp;gt;.selector {&lt;br /&gt;
    color: #fff;&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Correct ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code css&amp;gt;.selector {&lt;br /&gt;
    color: #fff;&lt;br /&gt;
    color: hsla(0, 0%, 100%, 1);&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Incorrect ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code css&amp;gt;#selector {&lt;br /&gt;
    color: hsla(0, 0%, 100%, 1);&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Incorrect ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code css&amp;gt;#selector {&lt;br /&gt;
    color: #FFFFFF !important;&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Documentation and Comments ==&lt;br /&gt;
&lt;br /&gt;
A block-style comment at the top of the CSS file should explain the purpose of the rules in the file.&lt;br /&gt;
&amp;lt;code css&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
* base.css&lt;br /&gt;
* Contains base styles for theme basic.&lt;br /&gt;
*/&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Block-style comments can also be used to denote a section in a CSS file where all rules pertain to a specific component, view, or functionality:&lt;br /&gt;
&amp;lt;code css&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
* SCORM Navigation Sidebar&lt;br /&gt;
*/&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Use single-line comments to provide more information to other developers about a single rule or small subset of rules:&lt;br /&gt;
&amp;lt;code css&amp;gt;&lt;br /&gt;
/* Required because YUI resets add a black border to all tables */&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Progressive Enhancement ==&lt;br /&gt;
&lt;br /&gt;
* Code should follow the Moodle principle of progressive enhancement for all supported browsers for that specific version of Moodle. Supported browsers are listed in the [https://docs.moodle.org/dev/Releases Release notes] for the Moodle version.&lt;br /&gt;
* Fallbacks should always be provided. For example, provide a background color fallback to background images and gradients.&lt;br /&gt;
* Use vendor prefixes only when the supported browser in question does not support the unprefixed property. Outdated vendor prefixes can be removed. Use  [http://caniuse.com/ Can I use] or like resource to determine what&#039;s supported. &lt;br /&gt;
* The standard property should preferably come after the vendor-prefixed property.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code css&amp;gt;.selector {&lt;br /&gt;
    background-color: #444; /* Fallback for browsers that don&#039;t support gradients */&lt;br /&gt;
    filter: progid:DXImageTransform.Microsoft.gradient(startColorStr=&#039;#444&#039;, EndColorStr=&#039;#999&#039;); /* IE6-IE9 */&lt;br /&gt;
    background-image: -webkit-gradient(linear, left top, left bottom, from(#444), to(#999)); /* Safari 4+, Chrome */&lt;br /&gt;
    background-image: -webkit-linear-gradient(top, #444, #999); /* Chrome 10+, Safari 5.1+, iOS 5+ */&lt;br /&gt;
    background-image: -moz-linear-gradient(top, #444, #999); /* Firefox 3.6 */&lt;br /&gt;
    background-image: -ms-linear-gradient(top, #444, #999); /* IE10 */&lt;br /&gt;
    background-image: -o-linear-gradient(top, #444, #999); /* Opera 11.10+ */&lt;br /&gt;
    background-image: linear-gradient(top, #444, #999); /* W3C Standard */&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Browser Hacks ===&lt;br /&gt;
&lt;br /&gt;
* Do not use any browser-specific hacks. Moodle provides a more appropriate way to write browser-specific CSS using classes that are added to the body element. For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code css&amp;gt;&lt;br /&gt;
.ie7 .forum-post {&lt;br /&gt;
    min-height: 1px;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* It is not necessary to include hacks for versions of browsers that Moodle Core does not provide support for (e.g. IE6 in Moodle 2, except legacy theme).&lt;br /&gt;
&lt;br /&gt;
=== LESS and Other CSS Preprocessors ===&lt;br /&gt;
[http://lesscss.org/ LESS] is not CSS. LESS will be evaluated according to the [http://lesscss.org/#docs LESS documentation]. If the LESS is valid according to the LESS documentation, and does not result in invalid CSS when compiled, it does not need to be further changed, revised, updated, or documented. The same goes for SASS and any other preprocessor languages coming down the pike.  It&#039;s important that your LESS or SASS files be clear and accessible to others, and where the rules above apply, for example, with regard to line breaks and syntax, please follow them. &lt;br /&gt;
&lt;br /&gt;
Some additional features allowed in LESS or SASS conflict with CSS usage. One example is inline comments in LESS. However, these inline comments do not appear in the compiled CSS file. The rule of thumb is that so long as the feature is part of the documented LESS or SASS feature set, is clear and usable by other developers (who have read the LESS or SASS documentation), and does not break or interfere with the functioning of the compressed CSS file, we let it stand in peer review.&lt;br /&gt;
&lt;br /&gt;
== Credits ==&lt;br /&gt;
&lt;br /&gt;
This document was drawn from the following sources:&lt;br /&gt;
&lt;br /&gt;
# The [http://codex.wordpress.org/CSS_Coding_Standards WordPress CSS Coding Standards] &lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
* [[Coding]]&lt;br /&gt;
* [[Coding_style|Coding style]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Coding guidelines|CSS Coding style]]&lt;/div&gt;</summary>
		<author><name>Bawjaws</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=CSS_Coding_Style&amp;diff=42786</id>
		<title>CSS Coding Style</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=CSS_Coding_Style&amp;diff=42786"/>
		<updated>2013-10-30T09:53:49Z</updated>

		<summary type="html">&lt;p&gt;Bawjaws: /* Properties and Values */  remove &amp;quot;unless it is the last rule in the list of CSS mark-up.&amp;quot; see talk page for rationale&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Work in progress}}&lt;br /&gt;
&lt;br /&gt;
The Moodle CSS coding style &lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
=== Scope ===&lt;br /&gt;
&lt;br /&gt;
This document describes style guidelines for developers working on or with Moodle code. It talks purely about the mechanics of code layout and the choices we have made for Moodle. &lt;br /&gt;
&lt;br /&gt;
=== Goals ===&lt;br /&gt;
&lt;br /&gt;
Consistent coding style is important in any development project, and particularly when many developers are involved. A standard style helps to ensure that the code is easier to read and understand, which helps overall quality.&lt;br /&gt;
&lt;br /&gt;
Abstract goals we strive for: &lt;br /&gt;
&lt;br /&gt;
* simplicity&lt;br /&gt;
* readability&lt;br /&gt;
* tool friendliness&lt;br /&gt;
&lt;br /&gt;
== Naming Conventions ==&lt;br /&gt;
&lt;br /&gt;
Within plugins, CSS files are normally named &amp;lt;code&amp;gt;styles.css&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
In the theme, files can be named according to the theme designer&#039;s wishes but should:&lt;br /&gt;
&lt;br /&gt;
* use lowercase letters only&lt;br /&gt;
* be as short as possible&lt;br /&gt;
&lt;br /&gt;
== Block Style ==&lt;br /&gt;
&lt;br /&gt;
* Each selector should be on its own line. If there is a comma in a selector list, follow it with a line break.&lt;br /&gt;
* Property-value pairs should be on their own line, with four spaces of indentation and an ending semicolon.&lt;br /&gt;
* The closing brace should use the same level of indentation as the opening selector.&lt;br /&gt;
* Leave one line between blocks.&lt;br /&gt;
&lt;br /&gt;
=== Correct ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code css&amp;gt;@media only screen and (min-width: 768px) {&lt;br /&gt;
    .selector_one,&lt;br /&gt;
    .selector_two {&lt;br /&gt;
        color: #fff;&lt;br /&gt;
        background-color: #000;&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Incorrect ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code css&amp;gt;.selector_one, .selector_two { color: #fff; background-color: #000; }&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Selectors ==&lt;br /&gt;
&lt;br /&gt;
* Follow Moodle [[Coding style]] for naming selectors.&lt;br /&gt;
* Names should be simple English lowercase words.&lt;br /&gt;
* Words should be separated by underscores or hyphens.&lt;br /&gt;
* Verbosity is encouraged: names should be as illustrative as is practical to enhance understanding.&lt;br /&gt;
* Use [http://css-tricks.com/semantic-class-names/ semantic names]: names tell what this is instead of what should it look like.&lt;br /&gt;
* Avoid using IDs as selectors wherever possible. IDs are a tad faster, but far more difficult to maintain and override. If you can&#039;t write the needed selectors successfully without using an ID, then submit a [http://tracker.moodle.org Tracker ticket] to have classnames added.  &lt;br /&gt;
&lt;br /&gt;
=== Correct ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code css&amp;gt;.selector_name {&lt;br /&gt;
    color: #fff;&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code css&amp;gt;.selector-name {&lt;br /&gt;
    color: #fff;&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Incorrect ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code css&amp;gt;#selName {&lt;br /&gt;
    color: #fff;&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code css&amp;gt;#Sel-Name {&lt;br /&gt;
    color: #fff;&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Properties and Values ==&lt;br /&gt;
&lt;br /&gt;
* Properties should be followed by a colon and a space&lt;br /&gt;
* All properties and values should be lowercase, except for font names and vendor-specific properties.&lt;br /&gt;
* For color codes, lowercase is preferred &lt;br /&gt;
* For color codes, use of the shorthand version where possible is preferred, (e.g: #fff instead of #ffffff or #c06 instead of #cc0066). &lt;br /&gt;
* For color codes, if you use HSLA or RGBA, provide a HEX fallback (always).&lt;br /&gt;
* Use shorthand (except when overriding styles) for background, border, font, list-style, margin, and padding values.&lt;br /&gt;
* Prefixed vendor-specific properties pairs should appear directly before the generic property they refer to.&lt;br /&gt;
* Do not use !important unless the is a good reason! If you need to use !important, something is wrong with the CSS you are trying to override. Rather than adding more problematic CSS, submit a [http://tracker.moodle.org Tracker ticket] to get the existing problem fixed. &lt;br /&gt;
&lt;br /&gt;
=== Correct ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code css&amp;gt;.selector {&lt;br /&gt;
    color: #fff;&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Correct ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code css&amp;gt;.selector {&lt;br /&gt;
    color: #fff;&lt;br /&gt;
    color: hsla(0, 0%, 100%, 1);&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Incorrect ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code css&amp;gt;#selector {&lt;br /&gt;
    color: hsla(0, 0%, 100%, 1);&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Incorrect ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code css&amp;gt;#selector {&lt;br /&gt;
    color: #FFFFFF !important;&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Documentation and Comments ==&lt;br /&gt;
&lt;br /&gt;
A block-style comment at the top of the CSS file should explain the purpose of the rules in the file.&lt;br /&gt;
&amp;lt;code css&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
* base.css&lt;br /&gt;
* Contains base styles for theme basic.&lt;br /&gt;
*/&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Block-style comments can also be used to denote a section in a CSS file where all rules pertain to a specific component, view, or functionality:&lt;br /&gt;
&amp;lt;code css&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
* SCORM Navigation Sidebar&lt;br /&gt;
*/&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Use single-line comments to provide more information to other developers about a single rule or small subset of rules:&lt;br /&gt;
&amp;lt;code css&amp;gt;&lt;br /&gt;
/* Required because YUI resets add a black border to all tables */&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Progressive Enhancement ==&lt;br /&gt;
&lt;br /&gt;
* Code should follow the Moodle principle of progressive enhancement for all supported browsers for that specific version of Moodle. Supported browsers are listed in the [https://docs.moodle.org/dev/Releases Release notes] for the Moodle version.&lt;br /&gt;
* Fallbacks should always be provided. For example, provide a background color fallback to background images and gradients.&lt;br /&gt;
* Use vendor prefixes only when the supported browser in question does not support the unprefixed property. Outdated vendor prefixes can be removed. Use  [http://caniuse.com/ Can I use] or like resource to determine what&#039;s supported. &lt;br /&gt;
* The standard property should preferably come after the vendor-prefixed property.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code css&amp;gt;.selector {&lt;br /&gt;
    background-color: #444; /* Fallback for browsers that don&#039;t support gradients */&lt;br /&gt;
    filter: progid:DXImageTransform.Microsoft.gradient(startColorStr=&#039;#444&#039;, EndColorStr=&#039;#999&#039;); /* IE6-IE9 */&lt;br /&gt;
    background-image: -webkit-gradient(linear, left top, left bottom, from(#444), to(#999)); /* Safari 4+, Chrome */&lt;br /&gt;
    background-image: -webkit-linear-gradient(top, #444, #999); /* Chrome 10+, Safari 5.1+, iOS 5+ */&lt;br /&gt;
    background-image: -moz-linear-gradient(top, #444, #999); /* Firefox 3.6 */&lt;br /&gt;
    background-image: -ms-linear-gradient(top, #444, #999); /* IE10 */&lt;br /&gt;
    background-image: -o-linear-gradient(top, #444, #999); /* Opera 11.10+ */&lt;br /&gt;
    background-image: linear-gradient(top, #444, #999); /* W3C Standard */&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Browser Hacks ===&lt;br /&gt;
&lt;br /&gt;
* Do not use any browser-specific hacks. Moodle provides a more appropriate way to write browser-specific CSS using classes that are added to the body element. For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code css&amp;gt;&lt;br /&gt;
.ie7 .forum-post {&lt;br /&gt;
    min-height: 1px;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* It is not necessary to include hacks for versions of browsers that Moodle Core does not provide support for (e.g. IE6 in Moodle 2, except legacy theme).&lt;br /&gt;
&lt;br /&gt;
=== LESS and Other CSS Preprocessors ===&lt;br /&gt;
[http://lesscss.org/ LESS] is not CSS. LESS will be evaluated according to the [http://lesscss.org/#docs LESS documentation]. If the LESS is valid according to the LESS documentation, and does not result in invalid CSS when compiled, it does not need to be further changed, revised, updated, or documented. The same goes for SASS and any other preprocessor languages coming down the pike.  It&#039;s important that your LESS or SASS files be clear and accessible to others, and where the rules above apply, for example, with regard to line breaks and syntax, please follow them. &lt;br /&gt;
&lt;br /&gt;
Some additional features allowed in LESS or SASS conflict with CSS usage. One example is inline comments in LESS. However, these inline comments do not appear in the compiled CSS file. The rule of thumb is that so long as the feature is part of the documented LESS or SASS feature set, is clear and usable by other developers (who have read the LESS or SASS documentation), and does not break or interfere with the functioning of the compressed CSS file, we let it stand in peer review.&lt;br /&gt;
&lt;br /&gt;
== Credits ==&lt;br /&gt;
&lt;br /&gt;
This document was drawn from the following sources:&lt;br /&gt;
&lt;br /&gt;
# The [http://codex.wordpress.org/CSS_Coding_Standards WordPress CSS Coding Standards] &lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
* [[Coding]]&lt;br /&gt;
* [[Coding_style|Coding style]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Coding guidelines|CSS Coding style]]&lt;/div&gt;</summary>
		<author><name>Bawjaws</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=CSS_Coding_Style&amp;diff=42785</id>
		<title>CSS Coding Style</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=CSS_Coding_Style&amp;diff=42785"/>
		<updated>2013-10-30T09:52:01Z</updated>

		<summary type="html">&lt;p&gt;Bawjaws: /* Block Style */  leave one line between blocks, see talk page for rationale&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Work in progress}}&lt;br /&gt;
&lt;br /&gt;
The Moodle CSS coding style &lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
=== Scope ===&lt;br /&gt;
&lt;br /&gt;
This document describes style guidelines for developers working on or with Moodle code. It talks purely about the mechanics of code layout and the choices we have made for Moodle. &lt;br /&gt;
&lt;br /&gt;
=== Goals ===&lt;br /&gt;
&lt;br /&gt;
Consistent coding style is important in any development project, and particularly when many developers are involved. A standard style helps to ensure that the code is easier to read and understand, which helps overall quality.&lt;br /&gt;
&lt;br /&gt;
Abstract goals we strive for: &lt;br /&gt;
&lt;br /&gt;
* simplicity&lt;br /&gt;
* readability&lt;br /&gt;
* tool friendliness&lt;br /&gt;
&lt;br /&gt;
== Naming Conventions ==&lt;br /&gt;
&lt;br /&gt;
Within plugins, CSS files are normally named &amp;lt;code&amp;gt;styles.css&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
In the theme, files can be named according to the theme designer&#039;s wishes but should:&lt;br /&gt;
&lt;br /&gt;
* use lowercase letters only&lt;br /&gt;
* be as short as possible&lt;br /&gt;
&lt;br /&gt;
== Block Style ==&lt;br /&gt;
&lt;br /&gt;
* Each selector should be on its own line. If there is a comma in a selector list, follow it with a line break.&lt;br /&gt;
* Property-value pairs should be on their own line, with four spaces of indentation and an ending semicolon.&lt;br /&gt;
* The closing brace should use the same level of indentation as the opening selector.&lt;br /&gt;
* Leave one line between blocks.&lt;br /&gt;
&lt;br /&gt;
=== Correct ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code css&amp;gt;@media only screen and (min-width: 768px) {&lt;br /&gt;
    .selector_one,&lt;br /&gt;
    .selector_two {&lt;br /&gt;
        color: #fff;&lt;br /&gt;
        background-color: #000;&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Incorrect ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code css&amp;gt;.selector_one, .selector_two { color: #fff; background-color: #000; }&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Selectors ==&lt;br /&gt;
&lt;br /&gt;
* Follow Moodle [[Coding style]] for naming selectors.&lt;br /&gt;
* Names should be simple English lowercase words.&lt;br /&gt;
* Words should be separated by underscores or hyphens.&lt;br /&gt;
* Verbosity is encouraged: names should be as illustrative as is practical to enhance understanding.&lt;br /&gt;
* Use [http://css-tricks.com/semantic-class-names/ semantic names]: names tell what this is instead of what should it look like.&lt;br /&gt;
* Avoid using IDs as selectors wherever possible. IDs are a tad faster, but far more difficult to maintain and override. If you can&#039;t write the needed selectors successfully without using an ID, then submit a [http://tracker.moodle.org Tracker ticket] to have classnames added.  &lt;br /&gt;
&lt;br /&gt;
=== Correct ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code css&amp;gt;.selector_name {&lt;br /&gt;
    color: #fff;&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code css&amp;gt;.selector-name {&lt;br /&gt;
    color: #fff;&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Incorrect ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code css&amp;gt;#selName {&lt;br /&gt;
    color: #fff;&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code css&amp;gt;#Sel-Name {&lt;br /&gt;
    color: #fff;&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Properties and Values ==&lt;br /&gt;
&lt;br /&gt;
* Properties should be followed by a colon and a space, unless it is the last rule in the list of CSS mark-up.&lt;br /&gt;
* All properties and values should be lowercase, except for font names and vendor-specific properties.&lt;br /&gt;
* For color codes, lowercase is preferred &lt;br /&gt;
* For color codes, use of the shorthand version where possible is preferred, (e.g: #fff instead of #ffffff or #c06 instead of #cc0066). &lt;br /&gt;
* For color codes, if you use HSLA or RGBA, provide a HEX fallback (always).&lt;br /&gt;
* Use shorthand (except when overriding styles) for background, border, font, list-style, margin, and padding values.&lt;br /&gt;
* Prefixed vendor-specific properties pairs should appear directly before the generic property they refer to.&lt;br /&gt;
* Do not use !important unless the is a good reason! If you need to use !important, something is wrong with the CSS you are trying to override. Rather than adding more problematic CSS, submit a [http://tracker.moodle.org Tracker ticket] to get the existing problem fixed. &lt;br /&gt;
&lt;br /&gt;
=== Correct ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code css&amp;gt;.selector {&lt;br /&gt;
    color: #fff;&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Correct ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code css&amp;gt;.selector {&lt;br /&gt;
    color: #fff;&lt;br /&gt;
    color: hsla(0, 0%, 100%, 1);&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Incorrect ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code css&amp;gt;#selector {&lt;br /&gt;
    color: hsla(0, 0%, 100%, 1);&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Incorrect ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code css&amp;gt;#selector {&lt;br /&gt;
    color: #FFFFFF !important;&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Documentation and Comments ==&lt;br /&gt;
&lt;br /&gt;
A block-style comment at the top of the CSS file should explain the purpose of the rules in the file.&lt;br /&gt;
&amp;lt;code css&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
* base.css&lt;br /&gt;
* Contains base styles for theme basic.&lt;br /&gt;
*/&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Block-style comments can also be used to denote a section in a CSS file where all rules pertain to a specific component, view, or functionality:&lt;br /&gt;
&amp;lt;code css&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
* SCORM Navigation Sidebar&lt;br /&gt;
*/&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Use single-line comments to provide more information to other developers about a single rule or small subset of rules:&lt;br /&gt;
&amp;lt;code css&amp;gt;&lt;br /&gt;
/* Required because YUI resets add a black border to all tables */&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Progressive Enhancement ==&lt;br /&gt;
&lt;br /&gt;
* Code should follow the Moodle principle of progressive enhancement for all supported browsers for that specific version of Moodle. Supported browsers are listed in the [https://docs.moodle.org/dev/Releases Release notes] for the Moodle version.&lt;br /&gt;
* Fallbacks should always be provided. For example, provide a background color fallback to background images and gradients.&lt;br /&gt;
* Use vendor prefixes only when the supported browser in question does not support the unprefixed property. Outdated vendor prefixes can be removed. Use  [http://caniuse.com/ Can I use] or like resource to determine what&#039;s supported. &lt;br /&gt;
* The standard property should preferably come after the vendor-prefixed property.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code css&amp;gt;.selector {&lt;br /&gt;
    background-color: #444; /* Fallback for browsers that don&#039;t support gradients */&lt;br /&gt;
    filter: progid:DXImageTransform.Microsoft.gradient(startColorStr=&#039;#444&#039;, EndColorStr=&#039;#999&#039;); /* IE6-IE9 */&lt;br /&gt;
    background-image: -webkit-gradient(linear, left top, left bottom, from(#444), to(#999)); /* Safari 4+, Chrome */&lt;br /&gt;
    background-image: -webkit-linear-gradient(top, #444, #999); /* Chrome 10+, Safari 5.1+, iOS 5+ */&lt;br /&gt;
    background-image: -moz-linear-gradient(top, #444, #999); /* Firefox 3.6 */&lt;br /&gt;
    background-image: -ms-linear-gradient(top, #444, #999); /* IE10 */&lt;br /&gt;
    background-image: -o-linear-gradient(top, #444, #999); /* Opera 11.10+ */&lt;br /&gt;
    background-image: linear-gradient(top, #444, #999); /* W3C Standard */&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Browser Hacks ===&lt;br /&gt;
&lt;br /&gt;
* Do not use any browser-specific hacks. Moodle provides a more appropriate way to write browser-specific CSS using classes that are added to the body element. For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code css&amp;gt;&lt;br /&gt;
.ie7 .forum-post {&lt;br /&gt;
    min-height: 1px;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* It is not necessary to include hacks for versions of browsers that Moodle Core does not provide support for (e.g. IE6 in Moodle 2, except legacy theme).&lt;br /&gt;
&lt;br /&gt;
=== LESS and Other CSS Preprocessors ===&lt;br /&gt;
[http://lesscss.org/ LESS] is not CSS. LESS will be evaluated according to the [http://lesscss.org/#docs LESS documentation]. If the LESS is valid according to the LESS documentation, and does not result in invalid CSS when compiled, it does not need to be further changed, revised, updated, or documented. The same goes for SASS and any other preprocessor languages coming down the pike.  It&#039;s important that your LESS or SASS files be clear and accessible to others, and where the rules above apply, for example, with regard to line breaks and syntax, please follow them. &lt;br /&gt;
&lt;br /&gt;
Some additional features allowed in LESS or SASS conflict with CSS usage. One example is inline comments in LESS. However, these inline comments do not appear in the compiled CSS file. The rule of thumb is that so long as the feature is part of the documented LESS or SASS feature set, is clear and usable by other developers (who have read the LESS or SASS documentation), and does not break or interfere with the functioning of the compressed CSS file, we let it stand in peer review.&lt;br /&gt;
&lt;br /&gt;
== Credits ==&lt;br /&gt;
&lt;br /&gt;
This document was drawn from the following sources:&lt;br /&gt;
&lt;br /&gt;
# The [http://codex.wordpress.org/CSS_Coding_Standards WordPress CSS Coding Standards] &lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
* [[Coding]]&lt;br /&gt;
* [[Coding_style|Coding style]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Coding guidelines|CSS Coding style]]&lt;/div&gt;</summary>
		<author><name>Bawjaws</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=CSS_Coding_Style&amp;diff=42784</id>
		<title>CSS Coding Style</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=CSS_Coding_Style&amp;diff=42784"/>
		<updated>2013-10-30T09:50:33Z</updated>

		<summary type="html">&lt;p&gt;Bawjaws: /* Naming Conventions */  style exemplar filename as monospace&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Work in progress}}&lt;br /&gt;
&lt;br /&gt;
The Moodle CSS coding style &lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
=== Scope ===&lt;br /&gt;
&lt;br /&gt;
This document describes style guidelines for developers working on or with Moodle code. It talks purely about the mechanics of code layout and the choices we have made for Moodle. &lt;br /&gt;
&lt;br /&gt;
=== Goals ===&lt;br /&gt;
&lt;br /&gt;
Consistent coding style is important in any development project, and particularly when many developers are involved. A standard style helps to ensure that the code is easier to read and understand, which helps overall quality.&lt;br /&gt;
&lt;br /&gt;
Abstract goals we strive for: &lt;br /&gt;
&lt;br /&gt;
* simplicity&lt;br /&gt;
* readability&lt;br /&gt;
* tool friendliness&lt;br /&gt;
&lt;br /&gt;
== Naming Conventions ==&lt;br /&gt;
&lt;br /&gt;
Within plugins, CSS files are normally named &amp;lt;code&amp;gt;styles.css&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
In the theme, files can be named according to the theme designer&#039;s wishes but should:&lt;br /&gt;
&lt;br /&gt;
* use lowercase letters only&lt;br /&gt;
* be as short as possible&lt;br /&gt;
&lt;br /&gt;
== Block Style ==&lt;br /&gt;
&lt;br /&gt;
* Each selector should be on its own line. If there is a comma in a selector list, follow it with a line break.&lt;br /&gt;
* Property-value pairs should be on their own line, with four spaces of indentation and an ending semicolon.&lt;br /&gt;
* The closing brace should use the same level of indentation as the opening selector.&lt;br /&gt;
* Add a blank line between sections, but leave no lines between blocks in a section.&lt;br /&gt;
&lt;br /&gt;
=== Correct ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code css&amp;gt;@media only screen and (min-width: 768px) {&lt;br /&gt;
    .selector_one,&lt;br /&gt;
    .selector_two {&lt;br /&gt;
        color: #fff;&lt;br /&gt;
        background-color: #000;&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Incorrect ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code css&amp;gt;.selector_one, .selector_two { color: #fff; background-color: #000; }&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Selectors ==&lt;br /&gt;
&lt;br /&gt;
* Follow Moodle [[Coding style]] for naming selectors.&lt;br /&gt;
* Names should be simple English lowercase words.&lt;br /&gt;
* Words should be separated by underscores or hyphens.&lt;br /&gt;
* Verbosity is encouraged: names should be as illustrative as is practical to enhance understanding.&lt;br /&gt;
* Use [http://css-tricks.com/semantic-class-names/ semantic names]: names tell what this is instead of what should it look like.&lt;br /&gt;
* Avoid using IDs as selectors wherever possible. IDs are a tad faster, but far more difficult to maintain and override. If you can&#039;t write the needed selectors successfully without using an ID, then submit a [http://tracker.moodle.org Tracker ticket] to have classnames added.  &lt;br /&gt;
&lt;br /&gt;
=== Correct ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code css&amp;gt;.selector_name {&lt;br /&gt;
    color: #fff;&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code css&amp;gt;.selector-name {&lt;br /&gt;
    color: #fff;&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Incorrect ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code css&amp;gt;#selName {&lt;br /&gt;
    color: #fff;&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code css&amp;gt;#Sel-Name {&lt;br /&gt;
    color: #fff;&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Properties and Values ==&lt;br /&gt;
&lt;br /&gt;
* Properties should be followed by a colon and a space, unless it is the last rule in the list of CSS mark-up.&lt;br /&gt;
* All properties and values should be lowercase, except for font names and vendor-specific properties.&lt;br /&gt;
* For color codes, lowercase is preferred &lt;br /&gt;
* For color codes, use of the shorthand version where possible is preferred, (e.g: #fff instead of #ffffff or #c06 instead of #cc0066). &lt;br /&gt;
* For color codes, if you use HSLA or RGBA, provide a HEX fallback (always).&lt;br /&gt;
* Use shorthand (except when overriding styles) for background, border, font, list-style, margin, and padding values.&lt;br /&gt;
* Prefixed vendor-specific properties pairs should appear directly before the generic property they refer to.&lt;br /&gt;
* Do not use !important unless the is a good reason! If you need to use !important, something is wrong with the CSS you are trying to override. Rather than adding more problematic CSS, submit a [http://tracker.moodle.org Tracker ticket] to get the existing problem fixed. &lt;br /&gt;
&lt;br /&gt;
=== Correct ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code css&amp;gt;.selector {&lt;br /&gt;
    color: #fff;&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Correct ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code css&amp;gt;.selector {&lt;br /&gt;
    color: #fff;&lt;br /&gt;
    color: hsla(0, 0%, 100%, 1);&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Incorrect ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code css&amp;gt;#selector {&lt;br /&gt;
    color: hsla(0, 0%, 100%, 1);&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Incorrect ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code css&amp;gt;#selector {&lt;br /&gt;
    color: #FFFFFF !important;&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Documentation and Comments ==&lt;br /&gt;
&lt;br /&gt;
A block-style comment at the top of the CSS file should explain the purpose of the rules in the file.&lt;br /&gt;
&amp;lt;code css&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
* base.css&lt;br /&gt;
* Contains base styles for theme basic.&lt;br /&gt;
*/&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Block-style comments can also be used to denote a section in a CSS file where all rules pertain to a specific component, view, or functionality:&lt;br /&gt;
&amp;lt;code css&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
* SCORM Navigation Sidebar&lt;br /&gt;
*/&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Use single-line comments to provide more information to other developers about a single rule or small subset of rules:&lt;br /&gt;
&amp;lt;code css&amp;gt;&lt;br /&gt;
/* Required because YUI resets add a black border to all tables */&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Progressive Enhancement ==&lt;br /&gt;
&lt;br /&gt;
* Code should follow the Moodle principle of progressive enhancement for all supported browsers for that specific version of Moodle. Supported browsers are listed in the [https://docs.moodle.org/dev/Releases Release notes] for the Moodle version.&lt;br /&gt;
* Fallbacks should always be provided. For example, provide a background color fallback to background images and gradients.&lt;br /&gt;
* Use vendor prefixes only when the supported browser in question does not support the unprefixed property. Outdated vendor prefixes can be removed. Use  [http://caniuse.com/ Can I use] or like resource to determine what&#039;s supported. &lt;br /&gt;
* The standard property should preferably come after the vendor-prefixed property.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code css&amp;gt;.selector {&lt;br /&gt;
    background-color: #444; /* Fallback for browsers that don&#039;t support gradients */&lt;br /&gt;
    filter: progid:DXImageTransform.Microsoft.gradient(startColorStr=&#039;#444&#039;, EndColorStr=&#039;#999&#039;); /* IE6-IE9 */&lt;br /&gt;
    background-image: -webkit-gradient(linear, left top, left bottom, from(#444), to(#999)); /* Safari 4+, Chrome */&lt;br /&gt;
    background-image: -webkit-linear-gradient(top, #444, #999); /* Chrome 10+, Safari 5.1+, iOS 5+ */&lt;br /&gt;
    background-image: -moz-linear-gradient(top, #444, #999); /* Firefox 3.6 */&lt;br /&gt;
    background-image: -ms-linear-gradient(top, #444, #999); /* IE10 */&lt;br /&gt;
    background-image: -o-linear-gradient(top, #444, #999); /* Opera 11.10+ */&lt;br /&gt;
    background-image: linear-gradient(top, #444, #999); /* W3C Standard */&lt;br /&gt;
}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Browser Hacks ===&lt;br /&gt;
&lt;br /&gt;
* Do not use any browser-specific hacks. Moodle provides a more appropriate way to write browser-specific CSS using classes that are added to the body element. For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code css&amp;gt;&lt;br /&gt;
.ie7 .forum-post {&lt;br /&gt;
    min-height: 1px;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* It is not necessary to include hacks for versions of browsers that Moodle Core does not provide support for (e.g. IE6 in Moodle 2, except legacy theme).&lt;br /&gt;
&lt;br /&gt;
=== LESS and Other CSS Preprocessors ===&lt;br /&gt;
[http://lesscss.org/ LESS] is not CSS. LESS will be evaluated according to the [http://lesscss.org/#docs LESS documentation]. If the LESS is valid according to the LESS documentation, and does not result in invalid CSS when compiled, it does not need to be further changed, revised, updated, or documented. The same goes for SASS and any other preprocessor languages coming down the pike.  It&#039;s important that your LESS or SASS files be clear and accessible to others, and where the rules above apply, for example, with regard to line breaks and syntax, please follow them. &lt;br /&gt;
&lt;br /&gt;
Some additional features allowed in LESS or SASS conflict with CSS usage. One example is inline comments in LESS. However, these inline comments do not appear in the compiled CSS file. The rule of thumb is that so long as the feature is part of the documented LESS or SASS feature set, is clear and usable by other developers (who have read the LESS or SASS documentation), and does not break or interfere with the functioning of the compressed CSS file, we let it stand in peer review.&lt;br /&gt;
&lt;br /&gt;
== Credits ==&lt;br /&gt;
&lt;br /&gt;
This document was drawn from the following sources:&lt;br /&gt;
&lt;br /&gt;
# The [http://codex.wordpress.org/CSS_Coding_Standards WordPress CSS Coding Standards] &lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
* [[Coding]]&lt;br /&gt;
* [[Coding_style|Coding style]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Coding guidelines|CSS Coding style]]&lt;/div&gt;</summary>
		<author><name>Bawjaws</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Bootstrap&amp;diff=39348</id>
		<title>Bootstrap</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Bootstrap&amp;diff=39348"/>
		<updated>2013-04-24T14:15:00Z</updated>

		<summary type="html">&lt;p&gt;Bawjaws: /* Overview */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Themes}}&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
Bootstrap (http://getbootstrap.com) is a &amp;quot;sleek, intuitive, and powerful front-end framework for faster and easier web development&amp;quot;. Moodle now has some themes that build upon the best practices, documentation, tools and resources that it provides.&lt;br /&gt;
&lt;br /&gt;
If you&#039;re new to Bootstrap we&#039;d suggest starting by reading through the documentation. Not only is it well written and informative, it uses Bootstrap itself and so is a live demonstration too.&lt;br /&gt;
&lt;br /&gt;
http://getbootstrap/getting-started.html&lt;br /&gt;
&lt;br /&gt;
A common complaint about Bootstrap is that all Bootstrap-built sites look the same, since people like the defaults so much they just don&#039;t bother to change them. It is however not designed to be a final look, just a platform to build on. Some examples of what can be done can be found at http://builtwithbootstrap.com/ and http://expo.getbootstrap.com&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Responsive design ===&lt;br /&gt;
&lt;br /&gt;
A key feature of Bootstrap is responsive design. This means that the look of the page changes based on the width of your screen and allows you to alter the presentation so that iPhones, iPads, Netbooks &amp;amp; Desktops get subtly (or radically) different views of the same page.&lt;br /&gt;
&lt;br /&gt;
http://getbootstrap.com/scaffolding.html#responsive&lt;br /&gt;
&lt;br /&gt;
=== Less ===&lt;br /&gt;
&lt;br /&gt;
Bootstrap&#039;s stylesheets are written in a variant of CSS called LESS. It is possible to use Bootstrap without LESS as they provide the compiled output as CSS too, but for integration with existing Moodle HTML it is (at least currently) necessary for Moodle Bootstrap&#039;s core styles to be compiled after any changes. See the [[LESS]] page for more on this.&lt;br /&gt;
&lt;br /&gt;
=== Glyphicons ===&lt;br /&gt;
&lt;br /&gt;
Bootstrap provides an set of icons called Glyphicons. These are not used for the core Moodle icons as there aren&#039;t enough suitable icons to cover Moodle&#039;s needs. But they are available for use in content by applying simple CSS classes via the HTML editor. (Note in the next version of Bootstrap this &amp;quot;icon sprite&amp;quot; is replaced with an icon font. It is hoped that Moodle can merge it&#039;s SVG icons into this font and all icons will be applied in the same manner)&lt;br /&gt;
&lt;br /&gt;
http://getbootstrap.com/base-css.html#icons&lt;br /&gt;
&lt;br /&gt;
=== Grids ===&lt;br /&gt;
&lt;br /&gt;
Bootstrap uses CSS grids where previously web developers would have used floats (or before that tables). A key feature of grids is that they can &amp;quot;collapse&amp;quot; at smaller widths and so items that would be in a row will appear as a single column on smaller devices like iPhones.&lt;br /&gt;
&lt;br /&gt;
http://getbootstrap.com/scaffolding.html#fluidGridSystem&lt;br /&gt;
&lt;br /&gt;
=== Layouts ===&lt;br /&gt;
&lt;br /&gt;
The core Bootstrap theme uses a &amp;quot;Fluid Grid System&amp;quot;. (Note that in the next version of Bootstrap, there is only one grid system and it is fluid, though it is no longer called that since it is the only grid system.)&lt;br /&gt;
&lt;br /&gt;
http://twitter.github.io/bootstrap/scaffolding.html#fluidGridSystem&lt;/div&gt;</summary>
		<author><name>Bawjaws</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=LESS&amp;diff=38893</id>
		<title>LESS</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=LESS&amp;diff=38893"/>
		<updated>2013-04-12T14:15:09Z</updated>

		<summary type="html">&lt;p&gt;Bawjaws: /* The bootstrap theme */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Overview ==&lt;br /&gt;
&lt;br /&gt;
LESS ([http://lesscss.org lesscss.org]) extends CSS with dynamic behavior such as variables, mixins, operations and functions.  It&#039;s an advanced way of writing CSS that we use in some themes within Moodle.&lt;br /&gt;
&lt;br /&gt;
Browsers don&#039;t interpret it themselves, however, so LESS files need to be converted into normal CSS before use.&lt;br /&gt;
&lt;br /&gt;
Recess is one tool used to compile and compress LESS into CSS under *nix based systems.  There are [https://github.com/cloudhead/less.js/wiki/GUI-compilers-that-use-LESS.js many others tools for LESS].&lt;br /&gt;
&lt;br /&gt;
== The bootstrap theme ==&lt;br /&gt;
&lt;br /&gt;
Moodle&#039;s [[Bootstrap]] base theme has rules written using LESS.&lt;br /&gt;
&lt;br /&gt;
The main LESS file is &#039;&#039;&#039;theme/bootstrap/less/moodle.less&#039;&#039;&#039;, with additional files  in &#039;&#039;&#039;theme/bootstrap/less/moodle/&#039;&#039;&#039; imported by the main file. &lt;br /&gt;
&lt;br /&gt;
After compiling the LESS files, CSS ends up in &#039;&#039;&#039;theme/bootstrap/style/generated.css&#039;&#039;&#039;.  This file should not be edited manually.&lt;br /&gt;
&lt;br /&gt;
== Compilers ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Recess ===&lt;br /&gt;
==== Installing Recess under Ubuntu ====&lt;br /&gt;
The following commands should be run to install Recess&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install npm node&lt;br /&gt;
npm install recess -g&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;npm&amp;lt;/code&amp;gt; stands for Node Package Manager, and is the equivalent of apt-get for node.js packages.&lt;br /&gt;
&lt;br /&gt;
==== Installing Recess on Mac OS X ====&lt;br /&gt;
1. Install the basic node packages from the web site: [http://nodejs.org http://nodejs.org]   (or use your favourite package manager to install &amp;lt;code&amp;gt;node&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;npm&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
2. On the command line, install recess like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    npm install recess -g&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Using Recess ====&lt;br /&gt;
&lt;br /&gt;
After editing the LESS files, compile your CSS as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd theme/boostrap/less/&lt;br /&gt;
recess --compile --compress moodle.less &amp;gt; ../style/generated.css&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will compile and compress the moodle.less file (and all the LESS and CSS files it imports) into a single file, generated.css, and store it in the style folder of the bootstrap theme.&lt;br /&gt;
&lt;br /&gt;
NOTE: if you are getting empty generated.css files, this is being caused by a parsing error in your LESS code. A bug in &amp;lt;code&amp;gt;recess&amp;lt;/code&amp;gt; currently prevents it giving you helpful error messages in many cases. You will need to examine what you have altered or written to make sure it is complete and the syntax is correct. The &amp;lt;code&amp;gt;lessc&amp;lt;/code&amp;gt; compiler is what is used by &amp;lt;code&amp;gt;recess&amp;lt;/code&amp;gt; to do the actual compiling and will have been installed automatically along with it. If you call it directly as &amp;lt;code&amp;gt;lessc moodle.less&amp;lt;/code&amp;gt; it should give you a helpful error message that points you to where the problem is.&lt;br /&gt;
&lt;br /&gt;
=== WinLess ===&lt;br /&gt;
Download [http://winless.org/ WinLess] and install it.&lt;br /&gt;
&lt;br /&gt;
==== Using WinLess ====&lt;br /&gt;
1. Click the &#039;&#039;&#039;Add folder&#039;&#039;&#039; button.&lt;br /&gt;
&lt;br /&gt;
2. Select &#039;&#039;&#039;theme\bootstrap\less\&#039;&#039;&#039; as the folder to add.&lt;br /&gt;
&lt;br /&gt;
3. Deselect all the LESS files by ticking, then unticking the tick box up in the column header.&lt;br /&gt;
&lt;br /&gt;
4. Select &#039;&#039;&#039;moodle.less&#039;&#039;&#039; from the list by ticking the checkbox beside it.&lt;br /&gt;
&lt;br /&gt;
5. Right click on the &#039;&#039;&#039;moodle.less&#039;&#039;&#039; row and click &#039;&#039;&#039;Select output file&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
6. Browse to &#039;&#039;&#039;theme\bootstrap\style\&#039;&#039;&#039; and select generated.css as the output file.&lt;br /&gt;
&lt;br /&gt;
7. Click the &#039;&#039;&#039;Compile&#039;&#039;&#039; button.&lt;br /&gt;
&lt;br /&gt;
8. Swap to the &#039;&#039;&#039;Compiler&#039;&#039;&#039; tab to check the result of the process.&lt;br /&gt;
&lt;br /&gt;
[[Category:Developer tools]]&lt;/div&gt;</summary>
		<author><name>Bawjaws</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Bootstrap&amp;diff=38892</id>
		<title>Bootstrap</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Bootstrap&amp;diff=38892"/>
		<updated>2013-04-12T09:02:01Z</updated>

		<summary type="html">&lt;p&gt;Bawjaws: Make a start&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Overview ==&lt;br /&gt;
&lt;br /&gt;
Bootstrap (http://getbootstrap.com) is a &amp;quot;sleek, intuitive, and powerful front-end framework for faster and easier web development&amp;quot;. Moodle now has some themes that build upon the best practices, documentation, tools and resources that it provides.&lt;br /&gt;
&lt;br /&gt;
If you&#039;re new to Bootstrap we&#039;d suggest starting by reading through the documentation. Not only is it well written and informative, it uses Bootstrap itself and so is a live demonstration too.&lt;br /&gt;
&lt;br /&gt;
http://getbootstrap/getting-started.html&lt;br /&gt;
&lt;br /&gt;
A common complaint about Bootstrap is that all Bootstrap-built sites look the same, since people like the defaults so much they just don&#039;t bother to change them. It is however not designed to be a final look, just a platform to build on. Some examples of what can be done can be found at http://builtwithbootstrap.com/&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Responsive design ===&lt;br /&gt;
&lt;br /&gt;
A key feature of Bootstrap is responsive design. This means that the look of the page changes based on the width of your screen and allows you to alter the presentation so that iPhones, iPads, Netbooks &amp;amp; Desktops get subtly (or radically) different views of the same page.&lt;br /&gt;
&lt;br /&gt;
http://getbootstrap.com/scaffolding.html#responsive&lt;br /&gt;
&lt;br /&gt;
=== Less ===&lt;br /&gt;
&lt;br /&gt;
Bootstrap&#039;s stylesheets are written in a variant of CSS called LESS. It is possible to use Bootstrap without LESS as they provide the compiled output as CSS too, but for integration with existing Moodle HTML it is (at least currently) necessary for Moodle Bootstrap&#039;s core styles to be compiled after any changes. See the [[LESS]] page for more on this.&lt;br /&gt;
&lt;br /&gt;
=== Glyphicons ===&lt;br /&gt;
&lt;br /&gt;
Bootstrap provides an set of icons called Glyphicons. These are not used for the core Moodle icons as there aren&#039;t enough suitable icons to cover Moodle&#039;s needs. But they are available for use in content by applying simple CSS classes via the HTML editor. (Note in the next version of Bootstrap this &amp;quot;icon sprite&amp;quot; is replaced with an icon font. It is hoped that Moodle can merge it&#039;s SVG icons into this font and all icons will be applied in the same manner)&lt;br /&gt;
&lt;br /&gt;
http://getbootstrap.com/base-css.html#icons&lt;br /&gt;
&lt;br /&gt;
=== Grids ===&lt;br /&gt;
&lt;br /&gt;
Bootstrap uses CSS grids where previously web developers would have used floats (or before that tables). A key feature of grids is that they can &amp;quot;collapse&amp;quot; at smaller widths and so items that would be in a row will appear as a single column on smaller devices like iPhones.&lt;br /&gt;
&lt;br /&gt;
http://getbootstrap.com/scaffolding.html#fluidGridSystem&lt;br /&gt;
&lt;br /&gt;
=== Layouts ===&lt;br /&gt;
&lt;br /&gt;
The core Bootstrap theme uses a &amp;quot;Fluid Grid System&amp;quot;. (Note that in the next version of Bootstrap, there is only one grid system and it is fluid, though it is no longer called that since it is the only grid system.)&lt;br /&gt;
&lt;br /&gt;
http://twitter.github.io/bootstrap/scaffolding.html#fluidGridSystem&lt;/div&gt;</summary>
		<author><name>Bawjaws</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=LESS&amp;diff=38891</id>
		<title>LESS</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=LESS&amp;diff=38891"/>
		<updated>2013-04-12T08:30:01Z</updated>

		<summary type="html">&lt;p&gt;Bawjaws: /* Installing Recess under Ubuntu */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Overview ==&lt;br /&gt;
&lt;br /&gt;
LESS ([http://lesscss.org lesscss.org]) extends CSS with dynamic behavior such as variables, mixins, operations and functions.  It&#039;s an advanced way of writing CSS that we use in some themes within Moodle.&lt;br /&gt;
&lt;br /&gt;
Browsers don&#039;t interpret it themselves, however, so LESS files need to be converted into normal CSS before use.&lt;br /&gt;
&lt;br /&gt;
Recess is one tool used to compile and compress LESS into CSS under *nix based systems.  There are [https://github.com/cloudhead/less.js/wiki/GUI-compilers-that-use-LESS.js many others tools for LESS].&lt;br /&gt;
&lt;br /&gt;
== The bootstrap theme ==&lt;br /&gt;
&lt;br /&gt;
Moodle&#039;s bootstrap base theme has rules written using LESS.&lt;br /&gt;
&lt;br /&gt;
The main LESS file is &#039;&#039;&#039;theme/bootstrap/less/moodle.less&#039;&#039;&#039;, with additional files  in &#039;&#039;&#039;theme/bootstrap/less/moodle/&#039;&#039;&#039; imported by the main file. &lt;br /&gt;
&lt;br /&gt;
After compiling the LESS files, CSS ends up in &#039;&#039;&#039;theme/bootstrap/style/generated.css&#039;&#039;&#039;.  This file should not be edited manually.&lt;br /&gt;
&lt;br /&gt;
== Compilers ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Recess ===&lt;br /&gt;
==== Installing Recess under Ubuntu ====&lt;br /&gt;
The following commands should be run to install Recess&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install npm node&lt;br /&gt;
npm install recess -g&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;npm&amp;lt;/code&amp;gt; stands for Node Package Manager, and is the equivalent of apt-get for node.js packages.&lt;br /&gt;
&lt;br /&gt;
==== Installing Recess on Mac OS X ====&lt;br /&gt;
1. Install the basic node packages from the web site: [http://nodejs.org http://nodejs.org]   (or use your favourite package manager to install &amp;lt;code&amp;gt;node&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;npm&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
2. On the command line, install recess like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    npm install recess -g&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Using Recess ====&lt;br /&gt;
&lt;br /&gt;
After editing the LESS files, compile your CSS as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd theme/boostrap/less/&lt;br /&gt;
recess --compile --compress moodle.less &amp;gt; ../style/generated.css&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will compile and compress the moodle.less file (and all the LESS and CSS files it imports) into a single file, generated.css, and store it in the style folder of the bootstrap theme.&lt;br /&gt;
&lt;br /&gt;
NOTE: if you are getting empty generated.css files, this is being caused by a parsing error in your LESS code. A bug in &amp;lt;code&amp;gt;recess&amp;lt;/code&amp;gt; currently prevents it giving you helpful error messages in many cases. You will need to examine what you have altered or written to make sure it is complete and the syntax is correct. The &amp;lt;code&amp;gt;lessc&amp;lt;/code&amp;gt; compiler is what is used by &amp;lt;code&amp;gt;recess&amp;lt;/code&amp;gt; to do the actual compiling and will have been installed automatically along with it. If you call it directly as &amp;lt;code&amp;gt;lessc moodle.less&amp;lt;/code&amp;gt; it should give you a helpful error message that points you to where the problem is.&lt;br /&gt;
&lt;br /&gt;
=== WinLess ===&lt;br /&gt;
Download [http://winless.org/ WinLess] and install it.&lt;br /&gt;
&lt;br /&gt;
==== Using WinLess ====&lt;br /&gt;
1. Click the &#039;&#039;&#039;Add folder&#039;&#039;&#039; button.&lt;br /&gt;
&lt;br /&gt;
2. Select &#039;&#039;&#039;theme\bootstrap\less\&#039;&#039;&#039; as the folder to add.&lt;br /&gt;
&lt;br /&gt;
3. Deselect all the LESS files by ticking, then unticking the tick box up in the column header.&lt;br /&gt;
&lt;br /&gt;
4. Select &#039;&#039;&#039;moodle.less&#039;&#039;&#039; from the list by ticking the checkbox beside it.&lt;br /&gt;
&lt;br /&gt;
5. Right click on the &#039;&#039;&#039;moodle.less&#039;&#039;&#039; row and click &#039;&#039;&#039;Select output file&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
6. Browse to &#039;&#039;&#039;theme\bootstrap\style\&#039;&#039;&#039; and select generated.css as the output file.&lt;br /&gt;
&lt;br /&gt;
7. Click the &#039;&#039;&#039;Compile&#039;&#039;&#039; button.&lt;br /&gt;
&lt;br /&gt;
8. Swap to the &#039;&#039;&#039;Compiler&#039;&#039;&#039; tab to check the result of the process.&lt;br /&gt;
&lt;br /&gt;
[[Category:Developer tools]]&lt;/div&gt;</summary>
		<author><name>Bawjaws</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=LESS&amp;diff=38890</id>
		<title>LESS</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=LESS&amp;diff=38890"/>
		<updated>2013-04-12T08:27:59Z</updated>

		<summary type="html">&lt;p&gt;Bawjaws: /* Using Recess */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Overview ==&lt;br /&gt;
&lt;br /&gt;
LESS ([http://lesscss.org lesscss.org]) extends CSS with dynamic behavior such as variables, mixins, operations and functions.  It&#039;s an advanced way of writing CSS that we use in some themes within Moodle.&lt;br /&gt;
&lt;br /&gt;
Browsers don&#039;t interpret it themselves, however, so LESS files need to be converted into normal CSS before use.&lt;br /&gt;
&lt;br /&gt;
Recess is one tool used to compile and compress LESS into CSS under *nix based systems.  There are [https://github.com/cloudhead/less.js/wiki/GUI-compilers-that-use-LESS.js many others tools for LESS].&lt;br /&gt;
&lt;br /&gt;
== The bootstrap theme ==&lt;br /&gt;
&lt;br /&gt;
Moodle&#039;s bootstrap base theme has rules written using LESS.&lt;br /&gt;
&lt;br /&gt;
The main LESS file is &#039;&#039;&#039;theme/bootstrap/less/moodle.less&#039;&#039;&#039;, with additional files  in &#039;&#039;&#039;theme/bootstrap/less/moodle/&#039;&#039;&#039; imported by the main file. &lt;br /&gt;
&lt;br /&gt;
After compiling the LESS files, CSS ends up in &#039;&#039;&#039;theme/bootstrap/style/generated.css&#039;&#039;&#039;.  This file should not be edited manually.&lt;br /&gt;
&lt;br /&gt;
== Compilers ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Recess ===&lt;br /&gt;
==== Installing Recess under Ubuntu ====&lt;br /&gt;
The following commands should be run to install Recess&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install npm node&lt;br /&gt;
npm install recess -g&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Installing Recess on Mac OS X ====&lt;br /&gt;
1. Install the basic node packages from the web site: [http://nodejs.org http://nodejs.org]   (or use your favourite package manager to install &amp;lt;code&amp;gt;node&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;npm&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
2. On the command line, install recess like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    npm install recess -g&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Using Recess ====&lt;br /&gt;
&lt;br /&gt;
After editing the LESS files, compile your CSS as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd theme/boostrap/less/&lt;br /&gt;
recess --compile --compress moodle.less &amp;gt; ../style/generated.css&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will compile and compress the moodle.less file (and all the LESS and CSS files it imports) into a single file, generated.css, and store it in the style folder of the bootstrap theme.&lt;br /&gt;
&lt;br /&gt;
NOTE: if you are getting empty generated.css files, this is being caused by a parsing error in your LESS code. A bug in &amp;lt;code&amp;gt;recess&amp;lt;/code&amp;gt; currently prevents it giving you helpful error messages in many cases. You will need to examine what you have altered or written to make sure it is complete and the syntax is correct. The &amp;lt;code&amp;gt;lessc&amp;lt;/code&amp;gt; compiler is what is used by &amp;lt;code&amp;gt;recess&amp;lt;/code&amp;gt; to do the actual compiling and will have been installed automatically along with it. If you call it directly as &amp;lt;code&amp;gt;lessc moodle.less&amp;lt;/code&amp;gt; it should give you a helpful error message that points you to where the problem is.&lt;br /&gt;
&lt;br /&gt;
=== WinLess ===&lt;br /&gt;
Download [http://winless.org/ WinLess] and install it.&lt;br /&gt;
&lt;br /&gt;
==== Using WinLess ====&lt;br /&gt;
1. Click the &#039;&#039;&#039;Add folder&#039;&#039;&#039; button.&lt;br /&gt;
&lt;br /&gt;
2. Select &#039;&#039;&#039;theme\bootstrap\less\&#039;&#039;&#039; as the folder to add.&lt;br /&gt;
&lt;br /&gt;
3. Deselect all the LESS files by ticking, then unticking the tick box up in the column header.&lt;br /&gt;
&lt;br /&gt;
4. Select &#039;&#039;&#039;moodle.less&#039;&#039;&#039; from the list by ticking the checkbox beside it.&lt;br /&gt;
&lt;br /&gt;
5. Right click on the &#039;&#039;&#039;moodle.less&#039;&#039;&#039; row and click &#039;&#039;&#039;Select output file&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
6. Browse to &#039;&#039;&#039;theme\bootstrap\style\&#039;&#039;&#039; and select generated.css as the output file.&lt;br /&gt;
&lt;br /&gt;
7. Click the &#039;&#039;&#039;Compile&#039;&#039;&#039; button.&lt;br /&gt;
&lt;br /&gt;
8. Swap to the &#039;&#039;&#039;Compiler&#039;&#039;&#039; tab to check the result of the process.&lt;br /&gt;
&lt;br /&gt;
[[Category:Developer tools]]&lt;/div&gt;</summary>
		<author><name>Bawjaws</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=LESS&amp;diff=38889</id>
		<title>LESS</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=LESS&amp;diff=38889"/>
		<updated>2013-04-12T08:25:13Z</updated>

		<summary type="html">&lt;p&gt;Bawjaws: /* Installing Recess on Mac OS X */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Overview ==&lt;br /&gt;
&lt;br /&gt;
LESS ([http://lesscss.org lesscss.org]) extends CSS with dynamic behavior such as variables, mixins, operations and functions.  It&#039;s an advanced way of writing CSS that we use in some themes within Moodle.&lt;br /&gt;
&lt;br /&gt;
Browsers don&#039;t interpret it themselves, however, so LESS files need to be converted into normal CSS before use.&lt;br /&gt;
&lt;br /&gt;
Recess is one tool used to compile and compress LESS into CSS under *nix based systems.  There are [https://github.com/cloudhead/less.js/wiki/GUI-compilers-that-use-LESS.js many others tools for LESS].&lt;br /&gt;
&lt;br /&gt;
== The bootstrap theme ==&lt;br /&gt;
&lt;br /&gt;
Moodle&#039;s bootstrap base theme has rules written using LESS.&lt;br /&gt;
&lt;br /&gt;
The main LESS file is &#039;&#039;&#039;theme/bootstrap/less/moodle.less&#039;&#039;&#039;, with additional files  in &#039;&#039;&#039;theme/bootstrap/less/moodle/&#039;&#039;&#039; imported by the main file. &lt;br /&gt;
&lt;br /&gt;
After compiling the LESS files, CSS ends up in &#039;&#039;&#039;theme/bootstrap/style/generated.css&#039;&#039;&#039;.  This file should not be edited manually.&lt;br /&gt;
&lt;br /&gt;
== Compilers ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Recess ===&lt;br /&gt;
==== Installing Recess under Ubuntu ====&lt;br /&gt;
The following commands should be run to install Recess&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install npm node&lt;br /&gt;
npm install recess -g&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Installing Recess on Mac OS X ====&lt;br /&gt;
1. Install the basic node packages from the web site: [http://nodejs.org http://nodejs.org]   (or use your favourite package manager to install &amp;lt;code&amp;gt;node&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;npm&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
2. On the command line, install recess like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    npm install recess -g&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Using Recess ====&lt;br /&gt;
&lt;br /&gt;
After editing the LESS files, compile your CSS as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd theme/boostrap/less/&lt;br /&gt;
recess --compile --compress moodle.less &amp;gt; ../style/generated.css&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will compile and compress the moodle.less file (and all the LESS and CSS files it imports) into a single file, generated.css, and store it in the style folder of the bootstrap theme.&lt;br /&gt;
&lt;br /&gt;
NOTE: if you are getting empty generated.css files, this is being caused by a parsing error in your LESS code. You will need to examine what you have altered or written to make sure it is complete and the syntax is correct.&lt;br /&gt;
&lt;br /&gt;
=== WinLess ===&lt;br /&gt;
Download [http://winless.org/ WinLess] and install it.&lt;br /&gt;
&lt;br /&gt;
==== Using WinLess ====&lt;br /&gt;
1. Click the &#039;&#039;&#039;Add folder&#039;&#039;&#039; button.&lt;br /&gt;
&lt;br /&gt;
2. Select &#039;&#039;&#039;theme\bootstrap\less\&#039;&#039;&#039; as the folder to add.&lt;br /&gt;
&lt;br /&gt;
3. Deselect all the LESS files by ticking, then unticking the tick box up in the column header.&lt;br /&gt;
&lt;br /&gt;
4. Select &#039;&#039;&#039;moodle.less&#039;&#039;&#039; from the list by ticking the checkbox beside it.&lt;br /&gt;
&lt;br /&gt;
5. Right click on the &#039;&#039;&#039;moodle.less&#039;&#039;&#039; row and click &#039;&#039;&#039;Select output file&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
6. Browse to &#039;&#039;&#039;theme\bootstrap\style\&#039;&#039;&#039; and select generated.css as the output file.&lt;br /&gt;
&lt;br /&gt;
7. Click the &#039;&#039;&#039;Compile&#039;&#039;&#039; button.&lt;br /&gt;
&lt;br /&gt;
8. Swap to the &#039;&#039;&#039;Compiler&#039;&#039;&#039; tab to check the result of the process.&lt;br /&gt;
&lt;br /&gt;
[[Category:Developer tools]]&lt;/div&gt;</summary>
		<author><name>Bawjaws</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Plan_to_improve_ability_to_delegate_administer_tasks_to_course_category_level&amp;diff=6807</id>
		<title>Plan to improve ability to delegate administer tasks to course category level</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Plan_to_improve_ability_to_delegate_administer_tasks_to_course_category_level&amp;diff=6807"/>
		<updated>2007-07-19T09:20:16Z</updated>

		<summary type="html">&lt;p&gt;Bawjaws: Development:Plan to improve ability to delegate administer tasks to course category level moved to Development:Plan to improve ability to delegate administrator tasks to course category level: typo&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#redirect [[Plan to improve ability to delegate administrator tasks to course category level]]&lt;/div&gt;</summary>
		<author><name>Bawjaws</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Plan_to_improve_ability_to_delegate_administrator_tasks_to_course_category_level&amp;diff=6804</id>
		<title>Plan to improve ability to delegate administrator tasks to course category level</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Plan_to_improve_ability_to_delegate_administrator_tasks_to_course_category_level&amp;diff=6804"/>
		<updated>2007-07-19T09:20:16Z</updated>

		<summary type="html">&lt;p&gt;Bawjaws: Development:Plan to improve ability to delegate administer tasks to course category level moved to Development:Plan to improve ability to delegate administrator tasks to course category level&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Motivation==&lt;br /&gt;
&lt;br /&gt;
In a large organisation it is likely that course categories will repesent (in some sense) departments. It would be useful to be able to, effectively, have administrators assigned at the category context and to expect them to have rights to create/delete/edit subcategories and create/delete/edit courses. Some parts of this work, but a lack of underlying original functionality make this inconsistent and incomplete. Roles was mostly a wrapper around existing functionality, so the concept of being able to administer all the courses within a particular role didn&#039;t exist but now it becomes possible (and desirable) to assign the administrator role in the Category context.&lt;br /&gt;
&lt;br /&gt;
The main problem area is in the course and category editing screen. This is split across two scripts - course/index.php and course/category.php. The former displays the entire tree and allows new categories to be added and existing ones to be moved, deleted and edited. The latter shows the contents of categories (and subcategories) but allows no editing. It does, however, allow new courses to be added. In an ideal world this would have been a single script providing editing ability within any category level but this would now require a substantial rewrite.&lt;br /&gt;
&lt;br /&gt;
This plan is to make a few small changes to provide a better level of functionality without major changes, rewrites, or refactoring.&lt;br /&gt;
&lt;br /&gt;
==Partial Workaround==&lt;br /&gt;
&lt;br /&gt;
Creating a new role with a single capability allowed - moodle/category:update - and assigning the user to this at the site level gives them access the category and course editing screen (or it should). They will *also* be assigned to the administrator (or equivalent) role in the appropriate category context.&lt;br /&gt;
&lt;br /&gt;
This gives them access to the course/index.php screen enabling them to manipulate categories. The roles system (mostly) controls the rights appropriately to the category editing functions.&lt;br /&gt;
&lt;br /&gt;
==Issues==&lt;br /&gt;
&lt;br /&gt;
Some of these were clearly bugs anyway and have been fixed, but they are noted for completeness.&lt;br /&gt;
&lt;br /&gt;
===Courses item in Administration not tied to capability===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;This has been fixed&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Giving somebody the capability moodle/category:update did not give the option in the Administration menu. This has been fixed.&lt;br /&gt;
&lt;br /&gt;
===No capability for moving categories===&lt;br /&gt;
&lt;br /&gt;
Creating and deleting categories are both covered by capabilities and this is correctly reflected in the course/index.php code. However, the ability to move categories is only controlled by the moodle/category:update capability - the same one that gives you access to the page at all. There is no finer grain control available. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Proposal:&#039;&#039;&#039; Add a new capability &#039;&#039;&#039;moodle/category:move&#039;&#039;&#039; along with apropriate code in course/index.php to enforce it. &lt;br /&gt;
&lt;br /&gt;
===No ability to add subcategories directly===&lt;br /&gt;
&lt;br /&gt;
You can only add a new category at the top level even though you can assign the create permission at the category context.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Proposal:&#039;&#039;&#039;  Factor out the code for this out of course/index.php into course/lib.php (functions exist for display already) and add aditionaly to course/category.php with appropriate permissions checking.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Caveat&amp;quot;&#039;&#039;&#039; This isn&#039;t ideal as the course/category.php script does not allow further manipulation of the category; you would have to return to the course/index.php page. However, it&#039;s much better than nothing and is an order of magnitude easier to do than a complete rewrite of the two scripts to combine them (which would be the ideal solution)&lt;br /&gt;
&lt;br /&gt;
==Scope==&lt;br /&gt;
&lt;br /&gt;
I don&#039;t think there&#039;s anything too complex or critical in here and would like to get this into 1.8.3.&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
&lt;br /&gt;
The following tracker reports are related:&lt;br /&gt;
* [http://tracker.moodle.org/browse/MDL-10049 MDL-10049]&lt;br /&gt;
* [http://tracker.moodle.org/browse/MDL-10496 MDL-10496]&lt;br /&gt;
* [http://tracker.moodle.org/browse/MDL-10093 MDL-10093]&lt;br /&gt;
* [http://tracker.moodle.org/browse/MDL-10031 MDL-10031]&lt;br /&gt;
* [http://tracker.moodle.org/browse/MDL-10029 MDL-10029]&lt;br /&gt;
&lt;br /&gt;
Discussion&lt;br /&gt;
* [http://moodle.org/mod/forum/discuss.php?d=76226 http://moodle.org/mod/forum/discuss.php?d=76226]&lt;/div&gt;</summary>
		<author><name>Bawjaws</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Talk:Moodle_Accessibility_Specification&amp;diff=27072</id>
		<title>Talk:Moodle Accessibility Specification</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Talk:Moodle_Accessibility_Specification&amp;diff=27072"/>
		<updated>2006-09-19T17:26:38Z</updated>

		<summary type="html">&lt;p&gt;Bawjaws: extra square bracket&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Was going to add this link:&lt;br /&gt;
&lt;br /&gt;
* [http://www.websemantics.co.uk/tutorials/accessible_forms/ Accessible Forms: Guidelines, examples and accessible JavaScript tricks] Mike Foskett, 9th August 2006&lt;br /&gt;
&lt;br /&gt;
but noticed the [[Moodle Accessibility Specification]] page is protected, so I&#039;ll just note it here. Recommend it highly, seems based on a great deal of knowledge and practical experience and has some very good advice on usability, accessiblity and legality (UK) of web forms, written in a very clear manner. --[[User:David Scotson|David Scotson]] 08:29, 6 September 2006 (CDT)&lt;/div&gt;</summary>
		<author><name>Bawjaws</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Talk:Moodle_Accessibility_Specification&amp;diff=27071</id>
		<title>Talk:Moodle Accessibility Specification</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Talk:Moodle_Accessibility_Specification&amp;diff=27071"/>
		<updated>2006-09-19T17:26:22Z</updated>

		<summary type="html">&lt;p&gt;Bawjaws: minor clarification&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Was going to add this link:&lt;br /&gt;
&lt;br /&gt;
* [http://www.websemantics.co.uk/tutorials/accessible_forms/ Accessible Forms: Guidelines, examples and accessible JavaScript tricks] Mike Foskett, 9th August 2006]&lt;br /&gt;
&lt;br /&gt;
but noticed the [[Moodle Accessibility Specification]] page is protected, so I&#039;ll just note it here. Recommend it highly, seems based on a great deal of knowledge and practical experience and has some very good advice on usability, accessiblity and legality (UK) of web forms, written in a very clear manner. --[[User:David Scotson|David Scotson]] 08:29, 6 September 2006 (CDT)&lt;/div&gt;</summary>
		<author><name>Bawjaws</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Talk:Moodle_Accessibility_Specification&amp;diff=27070</id>
		<title>Talk:Moodle Accessibility Specification</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Talk:Moodle_Accessibility_Specification&amp;diff=27070"/>
		<updated>2006-09-06T13:29:11Z</updated>

		<summary type="html">&lt;p&gt;Bawjaws: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Was going to add this link:&lt;br /&gt;
&lt;br /&gt;
* [http://www.websemantics.co.uk/tutorials/accessible_forms/ Accessible Forms: Guidelines, examples and accessible JavaScript tricks] Mike Foskett, 9th August 2006]&lt;br /&gt;
&lt;br /&gt;
but noticed page is protected. Recommend it highly, seems based on a great deal of knowledge and practical experience and has some very good advice on usability, accessiblity and legality (UK) of web forms, written in a very clear manner. --[[User:David Scotson|David Scotson]] 08:29, 6 September 2006 (CDT)&lt;/div&gt;</summary>
		<author><name>Bawjaws</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Moodle_Accessibility_Specification&amp;diff=4156</id>
		<title>Moodle Accessibility Specification</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Moodle_Accessibility_Specification&amp;diff=4156"/>
		<updated>2006-09-06T13:26:00Z</updated>

		<summary type="html">&lt;p&gt;Bawjaws: whoop, didn&amp;#039;t realise this page was protected, reverting my own edit&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;These are DRAFT specifications that are being authored by a joint [http://www.open.ac.uk Open University] (IET-OCI-VLE) working group. The document specifies improvements to the &#039;&#039;&#039;accessibility of the Moodle course management system&#039;&#039;&#039; for version 1.7.&lt;br /&gt;
&lt;br /&gt;
Please post comments in the [http://moodle.org/mod/forum/discuss.php?d=48603 RFC - Moodle Accessibility Specification] forum discussion.&lt;br /&gt;
&lt;br /&gt;
(Also, see an earlier document in the forum discussion, [http://moodle.org/mod/forum/discuss.php?d=40484 RFC - Accessibility Proposal].)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== People ==&lt;br /&gt;
&lt;br /&gt;
Working group members:&lt;br /&gt;
* [[User:Cc933|Chetz Colwell]], [http://iet.open.ac.uk/about/index.cfm?id=5087 Accessibility in Educational Media (AEM)], [http://iet.open.ac.uk/ Institute of Educational Technology].&lt;br /&gt;
* [[User:MartynCooper|Martyn Cooper]], IET, AEM.&lt;br /&gt;
* [[User:Jim Ellis|Jim Ellis]], Learning &amp;amp; Teaching Solutions (LTS) – Staff and Projects.&lt;br /&gt;
* Jenny Gray, LTS – Strategic, [http://oci.open.ac.uk/ Open Content Initiative] (OCI).&lt;br /&gt;
* [[User:Ndf42|Nick Freear]], LTS – Strategic, Virtual Learning Environment (VLE) project. [mailto:N.D.Freear_at_Open.ac.uk Email N.D.Freear]&lt;br /&gt;
&lt;br /&gt;
Other interested people:&lt;br /&gt;
* Stephen Bradley, LTS – Media, OCI.&lt;br /&gt;
* Jason Cole, LTS – Strategic, VLE.&lt;br /&gt;
* Howard Taylor, [http://www.corous.com/ COROUS], Open University Worldwide Ltd.&lt;br /&gt;
* Martin Dougiamas, [http://moodle.com Moodle.com].&lt;br /&gt;
&lt;br /&gt;
== Diary ==&lt;br /&gt;
&lt;br /&gt;
# Initial meeting, Thursday 8 June, afternoon.&lt;br /&gt;
# Working meeting, Thursday 15 June, all day.&lt;br /&gt;
# Submit to M.Dougiamas, and forums for review, Friday 23 June 2006.&lt;br /&gt;
&lt;br /&gt;
==Moodle Accessibility Specification ==&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
This accessibility specification has been developed by accessibility experts and Moodle developers at the Open University (OU), UK.  The OU has adopted Moodle as a core component of its VLE and is contributing to the continued Open Source (OS) development of Moodle.  Accessibility is an important for the OU because: it currently has over 9,300 disabled students; it has long standing aspirations to promote widening participation in higher education; and because of its legal obligations.  Further it is important for the whole Moodle community as further discussed under “Rationale” below.&lt;br /&gt;
&lt;br /&gt;
Accessibility is a term that has particular meanings in different contexts; here it refers to design qualities that endeavour to make online learning available to all by ensuring that the way it is implemented does not create unnecessary barriers however the student may interact with their computer.  Virtually anyone, irrespective of any disability, can be enabled to interact effectively with a computer.  Some people with disabilities interact with the computer using methods other than the conventional monitor, keyboard and mouse, some require special tools, usually referred to as “assistive technology”, and some need the way content is presented to them by the computer to be appropriate to their needs (for example in terms of font sizes and/or colour contrast).  &lt;br /&gt;
&lt;br /&gt;
There are well established design principles for accessibility in software design and electronic content. These promote compatibility with assistive technology and ensure that different ways of interacting with the computer can be accommodated.  This specification highlights further development work required in Moodle if these principles are to be considered effectively implemented across its various tools and modules. &lt;br /&gt;
&lt;br /&gt;
This Accessibility Specification is concerned with meeting the needs of disabled people who may be users of Moodle in whatever role they have, student, teacher, systems administrator, etc. However many accessibility approaches also yield benefits to all users and some help those working in particular circumstances such as working on a small screen PDA or over a low bandwidth link. &lt;br /&gt;
&lt;br /&gt;
==== Scope ====&lt;br /&gt;
The intended scope of this document is to set out an accessibility specification that applies to all elements of Moodle. This follows from the fact that all potential users of Moodle, whether they are students, teachers, administrators or developers, may be people with a disability. Moodle v1.6 had just been released at the time of writing and the specific comments are mainly based on a review of this version. &lt;br /&gt;
&lt;br /&gt;
The guidance set out under [[#Principles of Accessibility]] applies generically to all elements of Moodle that implement the features concerned and indeed any software development.    Under [[#Current Status Moodle Accessibility]] specific issues are reported where the current version of Moodle is at odds with these principles.  This has been done by a rapid cycle of review of most Moodle elements.   &lt;br /&gt;
&lt;br /&gt;
An initial test of the Open University&#039;s instantiation of a Moodle 1.6 development version was undertaken in January and February 2006.  The tests were confined to the Moodle modules and blocks that were then planned for the May 2006 release of OU Moodle course sites:&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
* Modules:  Resource page, quiz, forum.&lt;br /&gt;
&lt;br /&gt;
* Blocks:  Course summary, latest news.&lt;br /&gt;
&lt;br /&gt;
: Note, the calendar block and page were not to be used and therefore were not tested.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These tests were undertaken with IE6, Jaws 7 (screen-reader), ZoomText 8.1 (screen-magnifier), Dragon 7 (voice recognition software), and various browser and operating system settings.&lt;br /&gt;
&lt;br /&gt;
Many of the high priority issues from this evaluation were addressed and then adopted in the Moodle v 1.6 release.  Outstanding issues from this evaluation are reported under [[#Results from Initial OU Jan/Feb 2006 Evaluation]].&lt;br /&gt;
&lt;br /&gt;
The subsequent testing for compiling this specification has been based on Moodle v 1.6 but in various instantiations to enable access to examples of the modules in question.  An installed Moodle Features Demo and a demo OU course (CT505) were mainly used for the testing, plus some features on Moodle.org.  These sources are noted throughout the specification.&lt;br /&gt;
&lt;br /&gt;
The decision was taken to concentrate initially on screen-reader access.  This can be justified in that screen-reader access is usually the most problematic. Further, key issues for screen reader access (e.g. appropriate text labelling of interface elements and focus control) are also issues for voice recognition software and screen-magnifiers.  Therefore all available/relevant blocks and modules have been tested with a screenreader (Jaws 7).  In addition key features that were judged to be potentially problematic have also been tested with voice recognition software (Dragon 8), a screen magnifier (ZoomText 8), IE&#039;s &#039;largest&#039; text size, and Windows display setting &#039;High Contrast Black #1&#039;. (Note: the tester is not an expert Dragon user and so uses the tool &#039;out of the box&#039; and relies on Help for techniques.  It is possible that there are &#039;tricks&#039; for dealing with some of the access issues that have been identified, but these are unknown to the tester.)&lt;br /&gt;
&lt;br /&gt;
===== Priorities =====&lt;br /&gt;
The priority of issues is indicated using the WCAG priorities and are marked &#039;&#039;&#039;P1, P2, P3&#039;&#039;&#039;.  There are some cases in which it is considered that an issue is of higher priority for Moodle than the guidelines state and this is indicated accordingly.  The testing has raised additional issues that are not referred to in the Guidelines which are indicated as having &#039;&#039;&#039;High, Medium&#039;&#039;&#039; or &#039;&#039;&#039;Low&#039;&#039;&#039; priority.  Other issues that were picked up but are not strictly accessibility issues are labelled &#039;&#039;&#039;Usability&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
For some issues the ideal solution is not yet known and these are marked as &#039;&#039;needs further consideration&#039;&#039; (or similar).  Ideally various potential solutions need to be built into prototypes and tested, including testing with users.&lt;br /&gt;
&lt;br /&gt;
It has not been possible to do a detailed accessibility evaluation of all current Moodle Modules and Blocks in compiling this specification mainly because good examples of all were not available for testing.  Specifically it was not possible to do a full evaluation of the Quiz Module prior to the release of this specification but further work on this is planned in the near future.  Most Modules and Blocks however have been tested.  Where they have not been tested they are included in the lists under [[#Issues with different Moodle components]] with a note to this effect.  There are many generic issues that apply across many modules and these have been separately listed.  The focus for testing has been modules that generate interface elements that are student facing.&lt;br /&gt;
&lt;br /&gt;
===== The onward process of review and action =====&lt;br /&gt;
The exact process of response to this Accessibility Specification is still subject to negotiation.  However broadly it will consist of a period of review (principally via the [http://moodle.org/mod/forum/view.php?id=5752 Moodle Accessibility Forum]), then action on the recommendations followed by evaluation and then iteration as required.  The target is to have all priority 1 and priority 2 issues addressed by September 2006.&lt;br /&gt;
&lt;br /&gt;
==== Rationale for Moodle accessibility ====&lt;br /&gt;
There are moral, legal and market reasons why accessibility for disabled users is important for Moodle.  &lt;br /&gt;
&lt;br /&gt;
===== The moral argument =====&lt;br /&gt;
In any software product, or content item, if you fail to address issues of accessibility you will exclude or disadvantage significant numbers of people:  &lt;br /&gt;
&lt;br /&gt;
* Disabled people represent about 10-15% of the general population&lt;br /&gt;
* At the Open University 5.5% of students declare a disability&lt;br /&gt;
* [http://download.microsoft.com/download/0/1/f/01f506eb-2d1e-42a6-bc7b-1f33d25fd40f/ResearchReport.doc  The Wide Range of Abilities and Its Impact on Computer Technology],  a recent Microsoft commissioned market research report, shows: 57% of working age computer users are likely to benefit from accessible technology (where accessible technology is understood as technical responses to promote access for disabled people to computer hardware and software).&lt;br /&gt;
&lt;br /&gt;
So the moral argument is one of inclusion as opposed to discrimination.  Further it is repeatedly demonstrated that good design for disabled people is good design for all.  Considering the needs of disabled students, for example, facilitates reflection on the interactions that support the learning objectives or related tasks and addressing the accessibility agenda promotes usability for all.   &lt;br /&gt;
&lt;br /&gt;
===== The legal argument =====&lt;br /&gt;
Many countries are introducing legislation, making it illegal to discriminate against disabled people in education. Examples from 3 jurisdictions are given here. &lt;br /&gt;
&lt;br /&gt;
The USA led the way with antidiscrimination legislation effecting education with the introduction of [http://www.hhs.gov/ocr/504.html Section 504 of the Rehabilitation Act 1973] and [http://www.ada.gov/ Americans with Disabilities Act (ADA) 1990]. Also of particular relevance is [http://www.section508.gov/index.cfm Section 508 of the Rehabilitation Act 1998].  This requires Federal agencies to make their electronic and information technology accessible to people with disabilities. The law applies to all Federal agencies when they develop, procure, maintain, or use electronic and information technology. This applies to the public school sector and the state funded universities and colleges.  These agencies must give disabled employees and members of the public, including students, access to information that is comparable to the access available to others.&lt;br /&gt;
&lt;br /&gt;
In the UK the key legislation is the [http://www.opsi.gov.uk/acts/acts1995/1995050.htm Disability Discrimination Act (DDA) 1995] This was amended by the   [http://www.opsi.gov.uk/acts/acts2001/20010010.htm Special Educational Needs and Disability Act (SENDA) 2001] and in April 2005 a new [http://www.opsi.gov.uk/acts/acts2005/20050013.htm Disability Discrimination Act (DDA) 2005].  Now, Part 4 of the DDA specifically applies to the education sector.  This legislates that education providers must not treat a disabled person less favourably for any reason that relates to the person’s disability. Further, the education provider is required to make reasonable adjustments to enable a disabled person to participate in its courses. Access to the online elements of its courses is an important area where, by considering the needs of disabled students, discrimination can be prevented.  An important feature of the Act is that the needs of disabled students need to be anticipated and that it is therefore not sufficient for an educational establishment just to attempt to deal with the needs of a disabled student as they arise.&lt;br /&gt;
&lt;br /&gt;
In Australia, state equal opportunity laws were revised to prohibit discrimination on the grounds of disability in the early 1980s. These laws were harmonised at the federal level by the [http://www.austlii.edu.au/au/legis/cth/consol_act/dda1992264/ Disability Discrimination Act (DDA) 1992]. This Act specifically prohibits discrimination against disabled students. &lt;br /&gt;
&lt;br /&gt;
The laws in different countries have different scopes and are applied in different ways but all broadly leave any educational institution open to legal challenge if they discriminate against disabled students in their provision of online elements of  courses. Hence in many jurisdictions there is a legal reason for Moodle to address accessibility issues for disabled students.&lt;br /&gt;
&lt;br /&gt;
===== The market argument =====&lt;br /&gt;
The market argument follows directly from the moral and legal ones. Globally education institutions are increasingly adopting tools to enable them to deliver components of their teaching and learning online. However many have institutional values that mean they that they wish to do so in a way that is non-discriminatory towards students with disabilities. In most countries educational institutions find themselves working within a legal framework that now enshrines such anti-discriminatory ideals. Thus when an educational institution is considering adopting a technology for the online delivery of course elements the accessibility of these tools should be a key criterion in its decision making. If Moodle is able to demonstrate its commitment to accessibility and, further than that, by having invested in the accessibility of its component elements show that it is able to reduce the overhead for the institution in implementing its online course elements accessibly, it will be well placed in this market place.&lt;br /&gt;
&lt;br /&gt;
==== Organisation of this specification ====&lt;br /&gt;
&lt;br /&gt;
[To be written when final structure of the specification is agreed including whether it is to be a single article or a set of linked articles.]&lt;br /&gt;
&lt;br /&gt;
=== Principles of Accessibility ===&lt;br /&gt;
&lt;br /&gt;
==== The Checklist Issue ====&lt;br /&gt;
Many developers express a desire for a set of check points to enable them to work in a way that results in products that are accessible to disabled users.  Such checklists have their place but have been demonstrated over the years not to be effective on their own in promoting accessible design.  The essence of accessible design is for the developer to constantly bear in mind that the not all the users of their developments will interact with the computer environment in the same way that they do.  The purpose of this section of this Accessibility Specification is to give the developers who have to respond to it an overview of the information they need to work in this way.  This is kept deliberately brief but more comprehensive resources are referred to.&lt;br /&gt;
&lt;br /&gt;
==== General Principles of Accessibility ====&lt;br /&gt;
A summary of the main accessibility principles that underlay the more detailed points of the various accessibility guidelines and the comments specifically on current Moodle accessibility challenges is presented here. It is recommended that all developers understand these to enable them to effectively take on their responsibilities for accessibility in the design of Web and related software components.&lt;br /&gt;
&lt;br /&gt;
There are various published guidelines that are applicable here that give more detailed information but of particular relevance are:&lt;br /&gt;
&lt;br /&gt;
* [http://www.w3.org/TR/WAI-WEBCONTENT/ W3C Web Content Accessibility Guidelines 1.0 (WCAG 1.0)], 5 May 1999.&lt;br /&gt;
* [http://www.imsglobal.org/accessibility/accmdv1p0/imsaccmd_oviewv1p0.html IMS Guidelines for Developing Accessible Learning Applications], 12 July 2004&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[Note - [http://www.w3.org/TR/2006/WD-WCAG20-20060427/ A Last Call Working Draft of the Web Content Accessibility Guidelines 2.0 (WCAG 2.0)] was published on 27 April 2006. The extended deadline for comment on these was 22 June 2006.  So these are anticipated to supersede WCAG 1.0 soon.]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;So in summary the main accessibility principles are:&#039;&#039;&#039;&lt;br /&gt;
===== Allow for user customisation: =====&lt;br /&gt;
User customisation is a key tool in addressing the diversity of needs represented across a full set of users.  Many different disabled people, including those with a visual impairment and dyslexia, find online content and interface elements can be made more readable if they are able to choose particular font styles and sizes and use different background and foreground colours.  Because of the wide diversity in what different people would select as their optimally readable configuration, this is best addressed by allowing them to choose their own settings. This is usually most readily done by enabling the web pages or software to inherit user set parameters from the browser or computer operating system.&lt;br /&gt;
&lt;br /&gt;
===== Provide equivalents for visual and auditory content and interface elements: =====&lt;br /&gt;
Text is the most readily accessible form of online content. It can be rendered into synthetic speech by screen readers and configured for different presentation. Text descriptions should be provided for all images, graphics and video content, and text labelling of interface elements should be included.  Text transcriptions of auditory content should be provided.&lt;br /&gt;
&lt;br /&gt;
===== Use different ways of presenting information in an interface: =====&lt;br /&gt;
Different people are able to access information from an interface in different ways.  Presenting such information in one way alone will thus probably exclude some people from the effective use of that interface.  Therefore present important information in multiple ways.  For example if the status of a control is indicated by colour, also indicate it by an appropriate text label that can be seen and is accessible to a screen-reader.  This will ensure that it is accessible to those with colour-blindness as well as those who use such assistive technologies.&lt;br /&gt;
&lt;br /&gt;
===== Provide compatibility with assistive technologies: =====&lt;br /&gt;
This simple statement hides a multitude of technical issues but, by following set web or software standards, the opportunities for this being adequately addressed are maximised as the assistive technologies are to a large part developed with these same standards in mind. This includes to adhering to standards for web mark-up e.g. mark up headings as headings (and nest correctly), lists as lists and use tables for tabular information. This principle is expanded on in the section  [[#Compatibility with Assistive Technologies]] below.&lt;br /&gt;
&lt;br /&gt;
===== Allow access to all functionality from keyboard alone: =====&lt;br /&gt;
Many disabled people are unable or prefer not to use a mouse. This includes blind people and those with some physical disabilities.  By ensuring that software can be fully used without a mouse, the needs of these users are met but also generally more efficient interaction with the software is offered to all users.&lt;br /&gt;
&lt;br /&gt;
===== Provide context and orientation information: =====&lt;br /&gt;
It is important to consider the accessibility issues of navigating around the content as well as the content itself. This is an area often neglected.  Support should be provided for efficient navigation by informing the user of where they are, taking into account that some users may be using screen-readers or other assistive technologies. This is another case where thinking about the needs of disabled users often yields benefits for all users by promoting usability generally.&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Compatibility with Assistive Technologies ====&lt;br /&gt;
There is a range of assistive technologies that are widely employed by people with different disabilities to enable them to effectively interact with a computer environment.  Brief points on the implication of the most common forms of such assistive technology for web and software developers are listed here.   &lt;br /&gt;
&lt;br /&gt;
[Adapted from [http://www.imsglobal.org/accessibility/accmdv1p0/imsaccmd_oviewv1p0.html IMS Guidelines for Developing Accessible Learning Applications]]&lt;br /&gt;
&lt;br /&gt;
===== Screen-readers =====&lt;br /&gt;
Screen-readers are software based tools that enable the user to locate text based information on the computer screen and then vocalize it using speech synthesis software and audio hardware, or they can present it in a refreshable braille display.  Most screen-readers work in close concert with the operating system, relying on the computer&#039;s built-in functionality.  Screen-readers are used by all blind computer uses some with other degrees of visual impairment and some people with dyslexia.  They possibly present the most challenging set of issues of all the major assistive technologies for developers of web content or application or other software.&lt;br /&gt;
&lt;br /&gt;
To support screen reading software developers can: &lt;br /&gt;
* Use standard system tools to draw and erase all on-screen text and to display all cursors and pointers. &lt;br /&gt;
* Use system standard on-screen controls whenever possible. &lt;br /&gt;
* Define tools in toolbars, palettes, and menus as separate items. Do not create single graphics containing multiple objects. By keeping tools and other objects separate, the screen reader is better able to identify and name each tool for the user. &lt;br /&gt;
* Embed descriptive text in graphic images in such a way as to make the text known to screen reading software. This addresses the problems that can arise when text is rendered as a graphic image and cannot be read by software. &lt;br /&gt;
* Assign logical names to controls, even if the name is not visible on the screen. Screen readers can access this information and use it to describe the type and function of the control on the screen. &lt;br /&gt;
* Track the system cursor with the mouse, even if the cursor is invisible. This allows the screen reading software to detect the mouse position when customized highlighting or focusing techniques are in use. &lt;br /&gt;
* Use consistent and predictable screen and dialog layouts. &lt;br /&gt;
* Avoid the use of &amp;quot;help&amp;quot; balloons that disappear whenever the hot spot or focus of the mouse changes. Try instead to lock the &amp;quot;help&amp;quot; balloon in place so that the user can move the cursor and continue to read the balloon. &lt;br /&gt;
* Use single column text whenever possible. &lt;br /&gt;
* Provide keyboard equivalents for all tools, menus, and dialog boxes. &lt;br /&gt;
* Ensure that links can be understood out of context, screen-readers can display a list of links to speed up navigation. For example, avoid &amp;quot;more ...&amp;quot; use &amp;quot;more about x&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Since screen readers can only read text (or give names to separately identifiable icons or tools), it is a good idea to: &lt;br /&gt;
* Avoid assigning unlabeled &amp;quot;hot spots&amp;quot; to pictures for use as controls, unless they are duplicated with menu selections. &lt;br /&gt;
* Avoid non-text menu items when possible or at least incorporate visible or invisible text cues to accompany these items. Screen readers can see text even if that text is written to the screen invisibly. &lt;br /&gt;
* Avoid graphic tool bars that are not duplicated. Make any tool bar command available in a menu. &lt;br /&gt;
Finally, documentation and training materials are always more accessible when: &lt;br /&gt;
* Documentation and online help can be understood independent of graphics. Text descriptions should stand on their own. &lt;br /&gt;
* Synchronized audio descriptions are available to play alongside animated graphics or movies.&lt;br /&gt;
&lt;br /&gt;
===== Screen-magnifiers ===== &lt;br /&gt;
Screen-magnifiers are software solutions for users with low-vision. These products allow the user to enlarge the size of images and text displayed on screen. Screen-magnifiers may also permit the user to change the default colours of the display. For example, reversing the colours and blacks of the video signal can make the text more readable for some users.&lt;br /&gt;
&lt;br /&gt;
Compatibility between screen-magnifiers and software can be an issue for developers. Typical screen magnifiers track the cursor or the active region of the screen and will automatically enlarge that portion of the display. Applications that use a custom cursor design may cause the magnifier to enlarge the wrong portion of the screen. Developers can avoid this problem by relying on standard interface practices, particularly those that apply to cursor control and display.  Other compatibility issues include:&lt;br /&gt;
* Managing simultaneous events on a screen – the screen magnifier will only display a small portion of the screen at one time.  Hence avoid need to simultaneously monitor two or more events occurring far apart from each other on the screen&lt;br /&gt;
* Use the system pointers whenever possible, as well as the system caret or insertion bar, if available. &lt;br /&gt;
* Include a highlight or focus indicator when dragging the system cursor, even at those times when the cursor is invisible. This adjustment will help screen enlargement software using &amp;quot;pan and zoom&amp;quot; features to track the user&#039;s movements more accurately. &lt;br /&gt;
* Add support for a &amp;quot;high contrast&amp;quot; setting.&lt;br /&gt;
&lt;br /&gt;
===== Alternative keyboards and mice =====&lt;br /&gt;
There is a very wide range of alternative keyboards and mice or other pointing devices available to disabled users.  Most of these do not have any implications for the developer of web application or other because they are used as direct replacements (electronically speaking) for the standard keyboard and mouse. However some people use virtual keyboards.&lt;br /&gt;
* Managing simultaneous events on a screen may be a problem for people using virtual keyboards which display a simulation of a keyboard on the screen for selection using a limited input device, for example a foot switch. The issue is similar to that for screen magnifiers above). There is a need to avoid having to  monitor two or more simultaneous events occurring far apart from each other on the screen&lt;br /&gt;
* Avoid timed responses or when they cannot be avoided, lengthen the time allowed for a user to respond. Because some alternative keyboard users may be slow to type entries or navigate the screen&lt;br /&gt;
* Provide keyboard access to all toolbars, menus, and dialog boxes.&lt;br /&gt;
&lt;br /&gt;
===== Voice recognition software =====&lt;br /&gt;
* Generally, web applications and software that allow full access through keyboard commands are well suited for use with voice-recognition software.&lt;br /&gt;
* Ensure all windows with text editing functionality are accessible to voice recognition software (currently Moodle Editor for example is not fully accessible).&lt;br /&gt;
* Ensure all interface elements have appropriate alt-texts.  &lt;br /&gt;
* There are issues to address around how to make the alt-text to a button command or other interface element known to the users when it may not be appropriate to display this text on the interface element  (e.g. Expand/Collapse on Moodle blocks).  However, a workaround is for the Dragon user to say &#039;click image&#039; and then select from a list that is created by Dragon.  This assumes that the user is aware of this technique.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Evaluation ====&lt;br /&gt;
Evaluation, both by experts and with users, plays an essential role in ensuring the accessibility of any software development.  However well crafted and detailed, guidelines and specifications alone will never be sufficient to guarantee that widespread accessibility is achieved.  In drawing up this specification, accessibility experts at the Open University have tested most of the elements of Moodle with some key examples of assistive technology and applied their expert judgement and knowledge of the published guidelines and the needs and preferences of disabled users to determine where issues exist.  However they would fully advocate that this work should be supplemented by user testing. &lt;br /&gt;
 &lt;br /&gt;
There is a planed period of extensive usability and accessibility testing of Moodle with both disabled and non-disabled users at the Open University in the autumn of 2006.  It is hoped many of the issue of accessibility highlighted in this specification will have been addressed in subsequent releases of Moodle before then and thus there will be the opportunity to confirm or otherwise the effectiveness of the responses made to this specification.  Such end-user evaluations will doubtless surface new issues not covered in this specification which will need addressing at a later date.  But then to quote Martin Dougiamas: “Accessibility is a process”.&lt;br /&gt;
&lt;br /&gt;
==== Note on Accessibility in Open Source developments ====&lt;br /&gt;
Accessibility is used as a weapon by both sides in the Open Source vs. Propriety Software debate.  The water is very muddy here and it is not the purpose of this brief note to contribute to this debate.  However a few notes on the Pros and Cons of addressing the accessibility agenda in an Open Source context are given.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Pros:&#039;&#039;&#039;&lt;br /&gt;
* When a “customer” detects an accessibility problem in an OS application they can generally affect a fix more readily that they can with propriety software.&lt;br /&gt;
* A wide range of accessibility and developer expertise can usually be rapidly and effectively brought to bear on an accessibility issue.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Cons:&#039;&#039;&#039;&lt;br /&gt;
* The inherent attribute of OS development of making software publicly available in early versions so the “community” can contribute to its further development often means that products are released with accessibility poorly addressed. (This can happen with proprietary software too.)&lt;br /&gt;
* Key accessibility benefits follow from consistency of interface design and behaviour across an application.  With a more loosely co-ordinated and distributed team of developers contributing to an OS product there is a risk that this consistency is not achieved.   However this is not judged a fundamental challenge in OS developments but one to be addressed in their co-ordination.  Proprietary developments undertaken by large developer teams too can suffer from such inconsistencies.&lt;br /&gt;
* Where and OS development results in the rapid release of updated versions of the software, changes in interface design and behaviour can be more problematic for some disabled users as it may take them longer to discover and understand such changes. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Current Status Moodle Accessibility ===&lt;br /&gt;
==== Results from Initial OU Jan/Feb 2006 Evaluation ====&lt;br /&gt;
An initial test of the Open University&#039;s instantiation of Moodle a 1.6 development version was undertaken in January and February 2006. The tests were confined to the Moodle modules and blocks that were then planned for the May 2006 release of OU Moodle course sites: &lt;br /&gt;
* Modules: Resource page, quiz, forum. &lt;br /&gt;
* Blocks: Course summary, latest news. &lt;br /&gt;
Note, the calendar block and page were not to be used and therefore were not tested. &lt;br /&gt;
These tests were undertaken with IE6, Jaws 7 (screen-reader), ZoomText 8.1 (screen-magnifier), Dragon 7 (voice recognition software), and various browser and operating system settings. &lt;br /&gt;
&lt;br /&gt;
A summary of the results from this evaluation are included here.  Many issues raised in this evaluation were addressed prior to the release of Moodle v. 1.6.  So the issue reported here are principally the ones yet to be resolved.&lt;br /&gt;
&lt;br /&gt;
Positive aspects with regard to accessibility in Moodle from this evaluation were:&lt;br /&gt;
* Most aspects are keyboard only accessible (exceptions are text editors and automated drop down menu selections).&lt;br /&gt;
* Site inherits users’ Windows settings for colour and font size, e.g. ‘Windows High Contrast Large’.&lt;br /&gt;
* Mini calendar is marked up with table headers.&lt;br /&gt;
* Calendar days of week marked up as table headers.&lt;br /&gt;
* Forms appear to be (mostly) marked up correctly.&lt;br /&gt;
&lt;br /&gt;
===== Responses to date =====&lt;br /&gt;
A proposal to fix accessibility problems identified in the Jan/Feb 2006 evaluation was posted to the Moodle forums as, [http://moodle.org/mod/forum/discuss.php?d=40484 RFC - Accessibility Proposal]. Following discussion, changes were made by OU developers to code in the Moodle CVS repository on Sourceforge.&lt;br /&gt;
&lt;br /&gt;
With limited resources, most work was done on the core Moodle code and style sheets for the Standard theme. The changes included adding and improving ALT text for significant images; removing tables, improving heading and list mark-up for Moodle side blocks; developing a new &#039;weekscss&#039; course format which just uses style-sheets for layout, not tables; and improving colour contrast and non-visual cues in the calendar block and page.&lt;br /&gt;
&lt;br /&gt;
===== Outstanding issues =====&lt;br /&gt;
&lt;br /&gt;
====== General/global issues ======&lt;br /&gt;
&lt;br /&gt;
Outstanding issues:&lt;br /&gt;
# Headings - check all text that acts as a heading, e.g. ‘general news and announcements’ in news forum and ‘study week x’ on course home pages.  Screenreader users can use headings to navigate around the page. &#039;&#039;&#039;P2&#039;&#039;&#039;&lt;br /&gt;
# Tables are used for layout. Suggest: investigate use of CSS for some if not all layout (it is acknowledged that this is not a perfect science). About 80% complete on main pages seen by students... Outstanding including, Moodle bug tracker 4943 &amp;quot;print_simple_box behaviour changed&amp;quot; Moodle 1.7. &#039;&#039;&#039;P2&#039;&#039;&#039;&lt;br /&gt;
# There are no ‘skip to content’ or ‘skip navigation’ links. These enable screenreader users and keyboard only users to jump over navigation links.  Suggest these links are provided on every page, and are invisible until the user tabs to them. Implemented for OU theme, outstanding for generic Moodle (difficult to guarantee the destination ID). [http://www.webaim.org/techniques/skipnav/ Useful discussion, including the IE focus bug]. &#039;&#039;&#039;P3&#039;&#039;&#039; (should be higher). &lt;br /&gt;
# The [http://moodle.org/help.php?file=accessibility.html generic accessibility help page] is in Moodle CVS. Outstanding: sitemap; help link still to be provided; the document seems too technical for the ‘average’ student.  Suggest it is re-written without the references to HTML tags, explain how skip links work, and to correct the info about accesskeys which are now provided.  (Good to see request for feedback.) &#039;&#039;&#039;P2&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
====== Page header ======&lt;br /&gt;
&lt;br /&gt;
Outstanding issues:&lt;br /&gt;
# Language drop down menu does not have a label which means users, particularly screenreader users, will not understand its purpose.  Suggest label such as ‘select preferred language’. &#039;&#039;&#039;P2&#039;&#039;&#039;&lt;br /&gt;
# Suggest the language codes be removed from the list, e.g. ‘en’ because they are not meaningful to most users.  The issue of screenreader access to different languages requires further consideration. &#039;&#039;&#039;Usability&#039;&#039;&#039;&lt;br /&gt;
# Drop down menu is not (easily) keyboard accessible: cannot use arrow keys to scroll through because first option is automatically selected.  (Can use ALT+down arrow to open list, but few students will know this.)  Suggest remove automation and provide a ‘go’ button or similar. &#039;&#039;&#039;P2&#039;&#039;&#039; (should be higher)  &lt;br /&gt;
# ‘»’ in breadcrumb trail is read by screenreader as “greater than greater than” or “double right angle bracket”.  Suggest replace with ‘/’ or ‘:’ or ‘-‘, or with a graphic of an arrow with the alt text ‘/’ or ‘:’ or similar. Fixed, with image (incidental image, no ALT text), and list; &amp;quot;bullet&amp;quot; be vocalised. I’m not sure this is an ideal solution. &#039;&#039;&#039;Medium&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
====== Login page ======&lt;br /&gt;
&lt;br /&gt;
Outstanding issues:&lt;br /&gt;
* The automatic placing of the cursor in the ‘username’ field is useful for sighted users (including dyslexic, partially sighted, hearing impaired etc) who will see that it is there, but for screenreaders this can be difficult because the screenreader focus does not start at the top of the page and will miss any instructional text such as ‘Login here using your username and password’.  It is difficult to know how to resolve this conflict of needs and so this requires further consideration. &#039;&#039;&#039;Medium&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
====== Edit profile page ======&lt;br /&gt;
&lt;br /&gt;
Outstanding issues:&lt;br /&gt;
# The ‘new picture’ field is not marked up correctly so that the label is not read by a screenreader. &#039;&#039;&#039;P2&#039;&#039;&#039;	&lt;br /&gt;
# Suggest users are encouraged to provide a brief description of their image to convey the same message as the image, and include this as ALT text for the image. Alternative, suggest that on the Show/ Edit profile page ALT text is auto-generated; &amp;quot;User image, none supplied&amp;quot; or &amp;quot;User image for [NAME]&amp;quot; as applicable. &#039;&#039;&#039;Low&#039;&#039;&#039; &lt;br /&gt;
# In some drop down boxes the default item is last in the list when it would be expected to be the first item, so when down arrow it seems that there are no other options.  Suggest default item is first in the list. &#039;&#039;&#039;Usability&#039;&#039;&#039;  &lt;br /&gt;
# The purpose of the ‘description’ field is not clear.  If it is for user to provide a description of themselves, suggest ‘description of me’ or similar. &#039;&#039;&#039;Usability&#039;&#039;&#039;  &lt;br /&gt;
# Ideally the question mark icon should appear before the editor, otherwise a screenreader has to tab through some of the editor controls before getting to the help button. Suggest it is placed between the field label and the start of the editor. &#039;&#039;&#039;P3&#039;&#039;&#039; (should be higher)  &lt;br /&gt;
# Text that appears after an edit field (or other form control) will not be read by a screenreader (due to a limitation in screenreaders).  Suggest all such text (‘for the teacher only’ and ‘max size 2MB’ is moved to the end of the label for the field, e.g. “ID number (for the teacher only)”. &#039;&#039;&#039;P2&#039;&#039;&#039;	&lt;br /&gt;
# Screenreader users are unlikely to continue reading further than the first ‘update profile’ button because they are likely to think this is the end of the page, and will therefore not be aware of the optional items below.  Furthermore the text ‘The following items are optional:’ is not marked up as part of the form and so will not be read by a screenreader (screenreader will move from first ‘update profile’ button to ‘new picture’ field).  Suggest alternative designs are explored so that there is just one ‘update’ button and optional fields are labelled individually as such. &#039;&#039;&#039;Usability&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Further issue&lt;br /&gt;
* Dragon does not recognise the &#039;browse&#039; button, either when say &amp;quot;click browse&amp;quot; or &amp;quot;click button&amp;quot;.  This may be because the button does not have it&#039;s own label because it is part of the &#039;file&#039; form control.  Dragon users can access the field by saying &amp;quot;type text&amp;quot; but may not know to do this.  Suggest if possible provide an explicit label for the button.  &#039;&#039;May require further investigation/testing&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
====== Course weekly view ======&lt;br /&gt;
&lt;br /&gt;
Outstanding issues, &#039;weeks&#039; course format:&lt;br /&gt;
# Search button has ‘&amp;gt;’ label, spoken as &amp;quot;greater than&amp;quot;.  Suggest change to ‘go’, ‘search’ or similar. Fixed, with resizable image of &#039;&amp;gt;&#039; (may need work), and text hidden from graphical browsers. &#039;&#039;&#039;P1&#039;&#039;&#039;&lt;br /&gt;
# Having left hand and right hand menus may be difficult for screenreaders because they come both before and after the main content of the page.  This requires further consideration as to how to make it useful for sighted and blind users alike. &#039;&#039;&#039;P3&#039;&#039;&#039; (should be higher)  &lt;br /&gt;
&lt;br /&gt;
====== My courses view ======&lt;br /&gt;
&lt;br /&gt;
Outstanding issues:&lt;br /&gt;
# The user’s image and the text link both go to the same destination but are separate links.  Suggest remove the link from the picture, or combine the image and text link in the same link. &#039;&#039;&#039;P2&#039;&#039;&#039;	&lt;br /&gt;
# Suggest mark up list as a list. &#039;&#039;&#039;P2&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
====== All courses list ======&lt;br /&gt;
&lt;br /&gt;
Outstanding issues:&lt;br /&gt;
# Suggest drop down menu is labelled “choose a course category” rather than just “course categories” so that the control is more meaningful. &#039;&#039;&#039;P2&#039;&#039;&#039;	&lt;br /&gt;
# Suggest mark up as list. &#039;&#039;&#039;P2&#039;&#039;&#039;&lt;br /&gt;
# Enrolment key icon: suggest the label for this is reduced to “course requires enrolment key” or “enrolment key required” rather than “this course requires an enrolment key” to reduce the number of syllables read by a screenreader, particularly is many courses are likely to require this. &#039;&#039;&#039;Low&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Global Issues from June 2006 OU Evaluation ====&lt;br /&gt;
The issues listed in this section and the subsequent section entitled [[#Issues with different Moodle components]] were discovered in the June 2006 evaluation of accessibility issues in Moodle undertaken at the OU specifically to inform this specification.  This testing was undertaken with only Jaws 7 (screen-reader) and Internet Explorer 6 as explained under [[#Scope]].&lt;br /&gt;
&lt;br /&gt;
Note on roles: accessibility issues apply whether it is material only available to students, or other material available to administrators/teachers/course creators.&lt;br /&gt;
&lt;br /&gt;
* do not rely on the title attribute to convey information to screen-readers because this is not read under default screen-reader settings. &#039;&#039;&#039;High.&#039;&#039;&#039;&lt;br /&gt;
* provide &#039;skip to content&#039; links on all pages that link from the very top of the page to the start of the content of the page. &#039;&#039;&#039;P3 (ideally should be P2).&#039;&#039;&#039;&lt;br /&gt;
* ensure styles allow a visual indication of the browser focus: in IE the indication of the focus is not visible, e.g. on tabbed panes, the breadcrumb trail, etc. &#039;&#039;&#039;High.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===== Lists =====&lt;br /&gt;
Mark up lists of items as HTML lists, e.g. alphabetical list in glossary. &#039;&#039;&#039;P2.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===== Tabs (tabbed panes) =====&lt;br /&gt;
E.g. in glossary and user profile.&lt;br /&gt;
* ensure title of tab is marked up as heading, or add a heading in tab. &#039;&#039;&#039;P2.&#039;&#039;&#039;&lt;br /&gt;
* remove link from current tab, e.g. in database when &#039;view list&#039; tab is selected, remove link from &#039;view link&#039;. &#039;&#039;&#039;Low.&#039;&#039;&#039;&lt;br /&gt;
* Ensure that tabs wrap when the window is resized so that users do not have to scroll horizontally.  &#039;&#039;&#039;Medium&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===== Use of Colours =====&lt;br /&gt;
* use colours with good contrast between background and foreground. &#039;&#039;&#039;P3 (ideally should be P1).&#039;&#039;&#039;&lt;br /&gt;
* ensure information conveyed with colour also conveyed is alternative way. &#039;&#039;&#039;P1&#039;&#039;&#039;&lt;br /&gt;
* new themes should not break existing fixes regarding colour&lt;br /&gt;
* tools for checking colour contrast are available: &lt;br /&gt;
** Colour Contrast Check.  Allows you to specify a foreground and a background colour using sliders and determine if they provide enough contrast. http://www.snook.ca/technical/colour_contrast/colour.html&lt;br /&gt;
** Juicy Studio Colour contrast analyser. Online tool which analyses the colours you want to use for text and background (using hexadecimal format) and tells you whether they have sufficient contrast with each other. http://www.juicystudio.com/services/colourcontrast.asp&lt;br /&gt;
** Juicy Studio Luminosity Contrast Ratio Analyser. Online tool which analyses the luminosity of colours to help developers ensure they have sufficient contrast. http://juicystudio.com/services/luminositycontrastratio.php&lt;br /&gt;
** NILS Colour contrast analyser. Tool which includes colour picker feature to pick the colours from an existing web page and analyse their contrast. http://www.nils.org.au/ais/web/resources/contrast_analyser/index.html&lt;br /&gt;
&lt;br /&gt;
===== Links =====&lt;br /&gt;
Ensure all link text is meaningful when read out of context, e.g. &#039;special&#039; and &#039;all&#039; in Glossary would be more meaningful as &#039;non-alphabetic entries&#039; and &#039;all entries&#039;. &#039;&#039;&#039;P2 (perhaps should be P1)&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===== Form Elements =====&lt;br /&gt;
* remove automation from drop down menus, e.g. glossary &#039;all categories&#039; as they are not controllable with the keyboard only, and provide a &#039;go&#039; button or similar to operate the control. &#039;&#039;&#039;P2 (ideally should be P1).&#039;&#039;&#039;&lt;br /&gt;
* &#039;jump to&#039; menu: replace &#039;&amp;lt;&#039; and &#039;&amp;gt;&#039; with labels such as &#039;previous section&#039; and &#039;next section&#039; or similar. &#039;&#039;&#039;High.&#039;&#039;&#039;&lt;br /&gt;
* do not use colour alone for indication of errors - refer to global issues on colour. &#039;&#039;&#039;P1.&#039;&#039;&#039;&lt;br /&gt;
* ensure all forms contain HTML mark-up for labels of controls - do not rely on just providing a text label - ensure labels are explicitly associated with controls (&#039;label&#039; and &#039;for&#039; tags). &#039;&#039;&#039;P2 (ideally should be P1)&#039;&#039;&#039;.&lt;br /&gt;
* consider the use of &#039;fielset&#039; and &#039;legend&#039; tags to group controls together.  There is differing advice about how these tags should be used and so examples need to be implemented and tested: &#039;&#039;requires further investigation&#039;&#039;.  &#039;&#039;&#039;High&#039;&#039;&#039;.&lt;br /&gt;
* place information before controls so that screen-reader reads it before reading the control, e.g. on &#039;add glossary term&#039; form place &#039;max size&#039; before upload edit field: &amp;quot;attachment (optional, max size xxkb), help button, file input field, browse button&amp;quot;. &#039;&#039;&#039;High.&#039;&#039;&#039;&lt;br /&gt;
* remove alt text from radio buttons and checkboxes as they are not necessary and are read by screen-readers as well as the text associated with the control. &#039;&#039;&#039;Medium&#039;&#039;&#039;.&lt;br /&gt;
* Best practice with horizontal radio buttons &#039;&#039;needs to be further investigated&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===== Images =====&lt;br /&gt;
* all images that convey information should have alt text to convey that information (do not rely on &amp;lt;title&amp;gt; for this because it is not read by default by screen-readers). &#039;&#039;&#039;P1.&#039;&#039;&#039;&lt;br /&gt;
* all images that are decorative and do not convey information should have null alt text, i.e. alt=&amp;quot;&amp;quot;. &#039;&#039;&#039;Medium.&#039;&#039;&#039;&lt;br /&gt;
* help icons should have alt text that indicates the content of the Help link.  &amp;quot;Help with xyz&amp;quot; would be preferable to &amp;quot;Help, xyz&amp;quot; because for screen-readers the comma within the latter causes the screen-reader to pause making &amp;quot;help&amp;quot; and &amp;quot;xyz&amp;quot; sound like separate items. &#039;&#039;&#039;High.&#039;&#039;&#039;&lt;br /&gt;
* in forums users&#039; images have null alt text but Jaws still reads the filename associated with it.  This may be because it is an image link. Perhaps the link could be removed as there is the same link from the person&#039;s name. &#039;&#039;This requires further investigation&#039;&#039;. &#039;&#039;&#039;Medium&#039;&#039;&#039;.&lt;br /&gt;
* There is a question as to whether users&#039; images should have meaningful alt text that conveys the content of the image, in particular when people use images of e.g. their pet or baby or some other icon.  These images help to build a sense of community and convey something about the person which should perhaps be conveyed to blind users. &#039;&#039;This requires further consideration and discussion.&#039;&#039; &#039;&#039;&#039;P1&#039;&#039;&#039;.&lt;br /&gt;
* where icons are used to indicate the type of resource or the destination of a link this needs to be conveyed to screen-reader users in the link text.  E.g. &amp;lt;pdf icon&amp;gt; &amp;lt;link: interesting article (PDF)&amp;gt;. (It is not necessary to add anything when it is clear from the text link, e.g. &amp;quot;news forum&amp;quot;.) &#039;&#039;&#039;P1.&#039;&#039;&#039; Note it is not sufficient to just add alt text to these icons to convey this information because when screen-readers create a list of links the images will not be included and so the information will not be available in that context.&lt;br /&gt;
* it can be useful when image links and text links are used together to the same destination to combine them into the same link as suggested on the [http://trace.wisc.edu/wcag_wiki/index.php?title=Combining_adjacent_image_and_text_links_for_the_same_resource WCAG-wiki], e.g. from wiki: &amp;lt;a href=&amp;quot;products.html&amp;quot;&amp;gt;  &amp;lt;img src=&amp;quot;icon.gif&amp;quot; alt=&amp;quot;&amp;quot; /&amp;gt;Products page&amp;lt;/a&amp;gt;.  This creates one &#039;clickable&#039; area for mouse users and just one link is read by screen-readers.  Example is list of online users: the image and text links are separate but could be combined. &#039;&#039;&#039;Medium.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===== Headings ===== &lt;br /&gt;
* ensure all headings are marked-up as HTML headings, and nest them appropriately, e.g. H1, H2, H3 etc. &#039;&#039;&#039;P2.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===== Scripting =====&lt;br /&gt;
All user interfaces and functions created or provided via scripting should be made accessible. &#039;&#039;&#039;High&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===== Layout =====&lt;br /&gt;
Use stylesheets for layout instead of tables. &#039;&#039;&#039;P2&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===== Pop-up windows =====&lt;br /&gt;
* pop-up windows can cause difficulties for all users, including those who have pop-ups blocked in their browser, but particularly visually impaired people (both blind and partially sighted): newer screen-readers announce when a new window opens, but older screen-readers do not, and screen magnifier users may not notice that a new window has opened.  WCAG 1.0 says users should be warned in the link text that a new window will open ([http://www.w3.org/TR/WAI-WEBCONTENT/#gl-interim-accessibility checkpoint 10.1, Priority 2]) (e.g. link: &amp;quot;messages: opens new window&amp;quot;) but this practice can become cumbersome if it needs to be applied to many links.  It therefore may be preferable in the long term to offer users a global setting for pop-ups to prevent or allow them. &#039;&#039;This requires further consideration&#039;&#039;. &#039;&#039;&#039;P2&#039;&#039;&#039;.&lt;br /&gt;
===== Language =====&lt;br /&gt;
* changes in language should be marked up appropriately, especially e.g. in language teaching.  This will allow screenreaders to switch languages accordingly and speak with the correct pronunciation. &#039;&#039;&#039;P1&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===== Tables =====&lt;br /&gt;
* ensure all table headers are marked up with &#039;th&#039;. &#039;&#039;&#039;P1&#039;&#039;&#039;.&lt;br /&gt;
* do not use &#039;th&#039; just to create bold text in a table if it is not a header (use &#039;strong&#039; instead). &#039;&#039;&#039;Medium&#039;&#039;&#039;.&lt;br /&gt;
* where possible avoid headers that span more than one column/row. &#039;&#039;&#039;Medium&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===== Note on Accesskeys =====&lt;br /&gt;
WCAG 1.0 recommends providing keyboard shortcuts to important links using the Accesskey tag (Checkpoint 9.5, priority 3), which moves the browser focus to the link so that the user can then select it. A number of implementation problems have been identified, which are summarised in the following articles.  The main problem is that there are so many keys reserved by browsers and assistive technologies (particularly screenreaders) that there are few keys available for use with Accesskey, and these would not be at all intuitive.&lt;br /&gt;
&lt;br /&gt;
* [http://www.wats.ca/show.php?contentid=32 Using Accesskeys - Is it worth it?] &lt;br /&gt;
* [http://www.wats.ca/show.php?contentid=43 Accesskeys and Reserved Keystroke Combinations]&lt;br /&gt;
&lt;br /&gt;
The draft specification for XHTML 2.0 includes a different approach for keyboard shortcuts - see: http://www.w3.org/TR/2005/WD-xhtml2-20050527/mod-role.html#s_rolemodule&lt;br /&gt;
&lt;br /&gt;
It is therefore recommended that Moodle does not adopt Accesskeys until alternative methods are established.&lt;br /&gt;
&lt;br /&gt;
===== Scrolling via voice recognition =====&lt;br /&gt;
Moodle pages do not respond to the Dragon command to scroll down.  This command works on other web sites, but it is not clear if something is preventing it in Moodle.  &#039;&#039;This requires further investigation&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== Issues with different Moodle components ====&lt;br /&gt;
&lt;br /&gt;
===== Core components =====&lt;br /&gt;
&lt;br /&gt;
====== User account ======&lt;br /&gt;
* user (including student) creates an account; logs in.&lt;br /&gt;
* user edits their profile.&lt;br /&gt;
* refer to global issues on forms and editor.&lt;br /&gt;
&lt;br /&gt;
====== Jump-to menu ======&lt;br /&gt;
Tested on Moodle Features.&lt;br /&gt;
* refer to global issues on forms&lt;br /&gt;
* ensure drop down menu and buttons have HTML labels. &#039;&#039;&#039;P2&#039;&#039;&#039;&lt;br /&gt;
* provide meaningful labels to replace &#039;&amp;lt;&#039; and &#039;&amp;gt;&#039;. &#039;&#039;&#039;P2, ideally should be P1&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
====== Language menu ======&lt;br /&gt;
* requires admin configuration.&lt;br /&gt;
* refer to global issues on forms.&lt;br /&gt;
* ensure drop down menu and buttons have HTML labels. &#039;&#039;&#039;P2&#039;&#039;&#039;.&lt;br /&gt;
* changes in language should be marked up appropriately, especially e.g. in language teaching.  This will allow screenreaders to switch languages accordingly and speak with the correct pronunciation. &#039;&#039;&#039;P1&#039;&#039;&#039;.&lt;br /&gt;
* remove language codes, e.g. &#039;en&#039;, &#039;fa&#039;, &#039;fr&#039; from menu items because not meaningful to users and not read in useful way by screenreaders. &#039;&#039;&#039;Medium&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
====== Help (for both students and course authors) ======&lt;br /&gt;
* refer to global issues on images (for &#039;question mark&#039; logo), and on pop-up windows.&lt;br /&gt;
* new &#039;Moodle Docs for this page&#039; links in page footer (not student-facing).&lt;br /&gt;
* mark up headings in help pages as HTML headings. &#039;&#039;&#039;P2&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
====== Error messages in form processing ======&lt;br /&gt;
* refer to issues on colour&lt;br /&gt;
* provide meaningful heading, e.g. &#039;error in xyz&#039;. &#039;&#039;&#039;P2&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
====== Site/course administration ======&lt;br /&gt;
Not tested as not student facing.&lt;br /&gt;
* installation, upgrade, maintenance.&lt;br /&gt;
* module, block, filter, language configuration.&lt;br /&gt;
&lt;br /&gt;
====== Skip block links ======&lt;br /&gt;
Tested on Moodle Features.&lt;br /&gt;
These links are provided because when blocks are collapsed screenreaders still read them even though they are not visible.&lt;br /&gt;
* these links need to include the name of the block they are skipping, rather than the block number, e.g. &amp;quot;skip messages block&amp;quot;. &#039;&#039;&#039;P2&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
====== Expand/collapse block buttons ======&lt;br /&gt;
* See issues on colour.&lt;br /&gt;
* These buttons are not visible under Windows High Contrast Black settings.  Need to ensure that these are visible under all settings.  &#039;&#039;&#039;High&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===== Misc / Library elements =====&lt;br /&gt;
====== Editors ======&lt;br /&gt;
Tested on early OU Moodle instantiation [[#Vledemo]].&lt;br /&gt;
&lt;br /&gt;
These are the [[#Outstanding issues]] for the &#039;&#039;HTMLArea&#039;&#039; editor (3rd party):&lt;br /&gt;
* Editor toolbar is not fully keyboard accessible: the three drop-down menus are in the tab order, but the other buttons are not.  Standard keyboard shortcuts are available (ctrl+b, ctrl+i, ctrl+u etc) but users are not informed of this.  There are not shortcuts for all buttons, e.g. create link, insert image etc. NOTE: the editor can be configured/ disabled on a per-user/ site-wide basis.  &#039;&#039;&#039;P1&#039;&#039;&#039;&lt;br /&gt;
* Dragon can dictate into the editor, and can &#039;tab&#039; out of it, but it cannot operate the toolbar.&lt;br /&gt;
* Jaws announces the editor as “Untitled 1 frame edit”.  Suggest if possible add a meaningful label for this. &#039;&#039;&#039;Medium&#039;&#039;&#039;  &lt;br /&gt;
* The purpose of the links at the bottom of the editor made of the HTML codes is not clear.  However they are within the tab order of the page and would be indicated as links to a screenreader and would not be meaningful.  Suggest these could be hidden from all users to reduce complexity. &#039;&#039;&#039;P2&#039;&#039;&#039;.&lt;br /&gt;
* The drop down menus do not have explicit labels.  Suggest they are labelled ‘font’, ‘font size’ ‘style’ etc.  &#039;&#039;&#039;P2&#039;&#039;&#039;	&lt;br /&gt;
* The default state of the 3rd drop down is blank.  Suggest ‘normal’ is displayed by default. &#039;&#039;&#039;Low&#039;&#039;&#039;&lt;br /&gt;
* Access to the editor for keyboard only users, screenreader users and Dragon users requires further consideration.  The W3C’s [http://www.w3.org/TR/ATAG10 Authoring Tool Accessibility Guidelines] may be useful here. &#039;&#039;&#039;High&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
* Accessibility/usability of &#039;&#039;TinyMCE editor&#039;&#039; - UNKNOWN (not integrated for Moodle 1.6). &lt;br /&gt;
* Essential: keyboard and screen-reader accessibility.&lt;br /&gt;
&lt;br /&gt;
====== Main calendar ======&lt;br /&gt;
Tested on early OU Moodle instantiation. &lt;br /&gt;
&lt;br /&gt;
[issues to be copied from report] &lt;br /&gt;
* refer to global issues on colour, meaningful links, headings&lt;br /&gt;
* keep table mark-up, and use appropriate table header mark-up.&lt;br /&gt;
* note new fixes regarding colour&lt;br /&gt;
&lt;br /&gt;
===== Modules (/mod) =====&lt;br /&gt;
&lt;br /&gt;
====== Blog ======&lt;br /&gt;
* no blog available so not tested at this stage.&lt;br /&gt;
* generic issues with blogs: &lt;br /&gt;
** screen-reader management of information; &lt;br /&gt;
** need to develop support information for students &lt;br /&gt;
** text-based and so therefore should be technically accessible, as long as headings and meaningful link text used.&lt;br /&gt;
&lt;br /&gt;
====== quiz ====== &lt;br /&gt;
Known issues (prior to June 06 testing):&lt;br /&gt;
* refer to generic issues regarding forms, layout and headings.&lt;br /&gt;
* ensure all form controls have explicit HTML labels. &#039;&#039;&#039;P2, ideally should be P1&#039;&#039;&#039;.&lt;br /&gt;
* avoid the use of colour on its own to indicate the correct answer, because this information is not available to screenreader users.  Provide the equivalent information in the form of text and/or icons. &#039;&#039;&#039;P1&#039;&#039;&#039;.&lt;br /&gt;
* ensure layout allows appropriate wrapping when feedback is displayed. &#039;&#039;&#039;Usability&#039;&#039;&#039;.&lt;br /&gt;
* &#039;fill in the gap&#039; questions are difficult for screenreaders when the gap is in the middle of a sentence because in &#039;forms mode&#039; it may not read beyond the gap.  There is no technical solution to this so screenreader users may need guidance and support on how best to deal with this type of question. &#039;&#039;&#039;High&#039;&#039;&#039;.&lt;br /&gt;
* allow any time limits that are set to be overridden where appropriate (roles issue?). &#039;&#039;&#039;High&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
June 06 testing:&lt;br /&gt;
&lt;br /&gt;
Three types of question interface were tested as this is what was available at the OU: radio buttons, text edit fields and &#039;fill in the gap&#039;.  Tested on course &#039;GM001&#039; with Jaws 7.&lt;br /&gt;
&lt;br /&gt;
======= Vertical radio buttons (‘Introduction’ quiz) =======&lt;br /&gt;
* Non forms mode: reads fine, but RBs in a 3-column table (only 1 column needed)&lt;br /&gt;
* Forms mode: reads fine, but don’t need forms mode to select a RB with space.&lt;br /&gt;
&lt;br /&gt;
======= Horizontal radio buttons (‘Introduction’ quiz) =======&lt;br /&gt;
* Non forms mode: reads fine&lt;br /&gt;
* Forms mode: reads fine, but don’t need forms mode to select a RB.&lt;br /&gt;
&lt;br /&gt;
======= Edit field (‘Introduction’ quiz) =======&lt;br /&gt;
* Non forms mode: reads fine&lt;br /&gt;
* Forms mode: need forms mode to enter answer. &lt;br /&gt;
* When tab out of field get straight to next form control (the answer field to the next question) and just reads ‘answer:’ without reading the question.  Therefore need to mark up the whole question with &amp;lt;label&amp;gt; and &amp;lt;for&amp;gt; tags to make sure it is associated with the edit field. &#039;&#039;&#039;P2, ideally should be P1&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
======= Answer page for radio buttons and edit fields ======= &lt;br /&gt;
* Gives correct statement, followed by “correct answer: *xyz* ” followed by “incorrect”.  Suggest this is reduced to “incorrect: the correct answer is: xyz” (without asterisks). &#039;&#039;&#039;Usability&#039;&#039;&#039;.&lt;br /&gt;
* ‘incorrect’ is read almost last – needs to be said first. &#039;&#039;&#039;High&#039;&#039;&#039;.&lt;br /&gt;
* The feedback provided on vertical radio buttons is often squashed into the narrow right hand column.  Suggest allowing this text to use a proportionate space. &#039;&#039;&#039;Usability&#039;&#039;&#039;.&lt;br /&gt;
* There is no structural indication that this text is feedback.  Suggest include a heading or text to indicate this, e.g. “feedback” or similar. &#039;&#039;&#039;Medium&#039;&#039;&#039;.&lt;br /&gt;
* There is no non-visual equivalent to the green highlight on correct answers.  Suggest consider icons such as red crosses and green ticks (with appropriate alt text: ‘incorrect’ and ‘correct’) to indicate wrong and right answers, or some other indication of the correct answers, e.g. an asterisk. &#039;&#039;&#039;P1&#039;&#039;&#039;.&lt;br /&gt;
* There seems no need to include “marks x” if also include “marks for this submission: x/y”.  Suggest replace with “marks for this question: x out of y” or similar (‘submission’ does not seem a meaningful term in this context). &#039;&#039;&#039;Usability&#039;&#039;&#039;.&lt;br /&gt;
* (Note the green highlight used here (#AAFFAA) has sufficient contrast with the black text.)&lt;br /&gt;
&lt;br /&gt;
======= Fill in the gap (‘Doing systems integration’ quiz) =======&lt;br /&gt;
* Non forms mode: reads fine – just says ‘edit’ at each field.&lt;br /&gt;
* Need forms mode to enter text.  Jaws reads the text since the last edit field with each edit field (and this could be a whole paragraph), but does not read beyond the edit field, so with examples such as “She details a number of &amp;lt;edit field&amp;gt; procedure calls…” the user does not know what the ‘number of’ refers to because ‘procedure calls’ is not read because it is not seen by the screenreader as belonging to that edit field.  As there is no technical solution &#039;&#039;this requires further consideration&#039;&#039; see next section. &#039;&#039;&#039;High&#039;&#039;&#039;.&lt;br /&gt;
* Suggest change ‘submit all and finish’ to ‘submit answers’ or similar. &#039;&#039;&#039;P2&#039;&#039;&#039;.&lt;br /&gt;
* Suggest dialogue box gives instructions for how to save answers if don’t want to submit them now. &#039;&#039;&#039;Usability&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
======= Fill in the gap answer page =======&lt;br /&gt;
* The function of the ‘continue’ button is not clear: suggest re-label. &#039;&#039;&#039;P2&#039;&#039;&#039;.&lt;br /&gt;
* Keyboard-only users cannot access feedback because it is only available via mouseovers.  It is possible to move the cursor using ‘MouseKeys’ but this is a laborious process.  In addition Dragon cannot easily reveal the feedback: the only way is to use voice commands to move the mouse pointer, but this is labourious. Need to find a Dragon/keyboard accessible way of providing feedback - &#039;&#039;needs further consideration&#039;&#039;. &#039;&#039;&#039;High&#039;&#039;&#039;.&lt;br /&gt;
* There is no non-visual equivalent of the red and green highlights - need to provide an equivalent via text or icon with alt text. &#039;&#039;&#039;P1&#039;&#039;&#039;.&lt;br /&gt;
* Screenreader users cannot access the feedback.  It is possible to operate the mouse cursor with a screenreader but it is not an easy process and involves switching Jaws cursors, which means that when the mouseover window appears, Jaws cannot distinguish between it and the rest of the text on the page, and so reads them together.  It is difficult to suggest an elegant solution to this because there is not a problem with the design: it is a screenreader problem.  One option might be to provide &amp;lt;option&amp;gt; controls on incorrect answers and mark one option as ‘your answer: abc’ and the other option as ‘the correct answer: xyz’.  &#039;&#039;This issue requires development and testing of different prototype solutions.&#039;&#039; &#039;&#039;&#039;High&#039;&#039;&#039;. &lt;br /&gt;
** &#039;&#039;Update&#039;&#039;: Jaws has a function to read mouseovers, but this does not work with the example quiz question tested, and it is not known why.  There is an example that does work at http://www.freedomscientific.com/fs_products/Surfs_Up/MouseOver.htm which might offer guidance.&lt;br /&gt;
* According to the colour contrast analyser, there is insufficient contrast between the black text of the answers and the red (#FF0000) and green (#00FF00) backgrounds.  Suggest just place coloured highlight around the edit field, rather than as a background, or use a lighter green such as #80FF80 and red such as #FF8080. &#039;&#039;&#039;High&#039;&#039;&#039;.&lt;br /&gt;
* On subsequent attempts the correct answers that the student has entered should be retained so that they do not have to retype them – &#039;&#039;&#039;Usability&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
====== hotpot ======&lt;br /&gt;
Tested on Moodle [[#Features]] course.&lt;br /&gt;
* refer to global issues on forms&lt;br /&gt;
* remove list mark-up from question as it is not a list item (leave answers in a list). &#039;&#039;&#039;Low&#039;&#039;&#039;.&lt;br /&gt;
* buttons require meaningful labels, such as &amp;quot;previous question&amp;quot; and &amp;quot;next question&amp;quot;. &#039;&#039;&#039;P2&#039;&#039;&#039;.&lt;br /&gt;
* &amp;quot;1 / 22&amp;quot; would be more meaningful as &amp;quot;1 of 22&amp;quot; or &amp;quot;1 of 22 questions&amp;quot;. &#039;&#039;&#039;Low&#039;&#039;&#039;.&lt;br /&gt;
* place the answer button after the answer text so that it appears as &amp;quot;A. 10 times as much as the force... &amp;lt;answer button&amp;gt;. &#039;&#039;&#039;Usability&#039;&#039;&#039;.&lt;br /&gt;
* label answer buttons as &amp;quot;select answer A&amp;quot;, &amp;quot;select answer B&amp;quot; etc. &#039;&#039;&#039;P1&#039;&#039;&#039;.&lt;br /&gt;
* remove frames from hotpot pages.  If frames need to be kept for some reason provide meaningful and useful frame titles, such as &amp;quot;navigation&amp;quot; and &amp;quot;quiz&amp;quot;.  &#039;&#039;&#039;P1&#039;&#039;&#039;. Note: Screen-readers will announce the word &amp;quot;frame&amp;quot; so this does not need to be included in the frame title.&lt;br /&gt;
* remove invisible &amp;quot;OK&amp;quot; button: it is not visible but it is announced by Jaws, and does not seem to be necessary in this context. &#039;&#039;&#039;Medium&#039;&#039;&#039;.&lt;br /&gt;
* Dragon cannnot operate the &amp;lt;- and -&amp;gt; buttons, even with &amp;quot;click button&amp;quot; command.  It is assumed that this is because the buttons do not have text labels, but this &#039;&#039;requires further investigation&#039;&#039;. &#039;&#039;&#039;High&#039;&#039;&#039;.&lt;br /&gt;
** It is possible to operate the &#039;show all Qs&#039; button.&lt;br /&gt;
&lt;br /&gt;
====== forum ====== &lt;br /&gt;
Tested on moodle.org open social forum.&lt;br /&gt;
* refer to generic issues: images, lists, headings, links, forms, editor. - for all aspects of forums, including new topic and reply.&lt;br /&gt;
* suggest change &#039;next&#039; link to &#039;next page&#039; to ensure it is fully understood. &#039;&#039;&#039;P2.&#039;&#039;&#039;&lt;br /&gt;
* re-order the &#039;Everyone can choose to be subscribed&#039; text and the help button so that they are read in a meaningful order. &#039;&#039;&#039;Medium&#039;&#039;&#039;.&lt;br /&gt;
* Change the alt and title of the button from &amp;quot;Help, Everyone can choose to be subscribed&amp;quot; to &amp;quot;help with subscriptions&amp;quot; or similar so that it does not repeat the on-screen text. &#039;&#039;&#039;P1&#039;&#039;&#039;.&lt;br /&gt;
* mark up all message subjects as headings so that screen-readers can easily move from message to message. &#039;&#039;&#039;P2&#039;&#039;&#039;.&lt;br /&gt;
* the nesting of messages is not conveyed non-visually, although how to best do this &#039;&#039;requires further consideration&#039;&#039;. &#039;&#039;&#039;Medium&#039;&#039;&#039;.&lt;br /&gt;
* remove the automation from the drop down menu to choose how messages are displayed because it cannot be used with just the keyboard. &#039;&#039;&#039;P2, ideally should be P1.&#039;&#039;&#039;&lt;br /&gt;
* in list of topics, user images are in a separate column, which shares its heading with &#039;started by&#039; which spans two columns.  Suggest remove the images column and place the images ahead of users&#039; names.  This will reduce the number of columns to be navigated by a screen-reader and avoid having a column without its own header. &#039;&#039;&#039;Medium&#039;&#039;&#039;.&lt;br /&gt;
* within topics (nested and flat) each message is within its own table.  It may be best to place all messages within one table and provide table headers (Subject, sender, date) -  this &#039;&#039;requires further consideration&#039;&#039;. &#039;&#039;&#039;Medium&#039;&#039;&#039;.&lt;br /&gt;
* &#039;add a new discussion topic&#039; is a form submit button, although there is no form, and so does not appear in screen-reader list of links.  Suggest change to a text or button link. &#039;&#039;&#039;Low&#039;&#039;&#039;.&lt;br /&gt;
* &#039;reply&#039;: suggest remove list of links to other messages on same topic from this page as they are not necessary in this context and creates much extra reading for screen-readers, or place the &#039;reply&#039; section directly after the original message. &#039;&#039;&#039;Usability&#039;&#039;&#039;.&lt;br /&gt;
* provide label for &#039;display replies...&#039; menu, e.g. &#039;select layout of messages&#039; or similar. &#039;&#039;&#039;P2&#039;&#039;&#039;.&lt;br /&gt;
* provide label for &#039;rate&#039; menu, e.g. &#039;rate this message&#039;, and remove the first option &#039;rate...&#039; from the menu. &#039;&#039;&#039;P2&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
====== exercise ====== &lt;br /&gt;
* not checked - full example not yet available.&lt;br /&gt;
* refer to generic issues on forms, links, headings.&lt;br /&gt;
* authors need support in using in an accessible way.&lt;br /&gt;
&lt;br /&gt;
====== database ====== &lt;br /&gt;
Tested on [[#CT505]] and LTSECW courses.&lt;br /&gt;
* new in Moodle 1.6; can be used for student data entry.&lt;br /&gt;
* refer to global issues re tabs, editor, forms, images.&lt;br /&gt;
* refer to content authoring guidelines to support course authors in making database accessible&lt;br /&gt;
* retain meaningful names in field name entries, i.e. don&#039;t replace spaces in names with underscores. &#039;&#039;&#039;Medium&#039;&#039;&#039;.&lt;br /&gt;
* provide alt text for magnifying glass icon. &#039;&#039;&#039;P1&#039;&#039;&#039;.&lt;br /&gt;
* in table of entries mark up table headers, such as &#039;date found&#039;, &#039;name&#039; etc with &amp;lt;th&amp;gt; tag.  &#039;&#039;&#039;P1&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
====== workshop  ======&lt;br /&gt;
Tested on Moodle [[#Features]] course.&lt;br /&gt;
* a peer assessment activity module.&lt;br /&gt;
* need to support students in authoring accessible content for review by peers.&lt;br /&gt;
* refer to issues regarding [[#Editors]], forms, headings.&lt;br /&gt;
&lt;br /&gt;
====== label (adds text, headings) ======&lt;br /&gt;
No specific example tested.&lt;br /&gt;
* authors need support in using this in an accessible way.&lt;br /&gt;
&lt;br /&gt;
====== choice (a quick poll question) ======&lt;br /&gt;
Tested on Moodle Features.&lt;br /&gt;
* refer to global issues on forms (particularly labels)&lt;br /&gt;
* &#039;Anonymous choice&#039; and &#039;update anytime&#039;: present results in a table with table headings so that data can be associated with column headings by a screen-reader. &#039;&#039;&#039;P1&#039;&#039;&#039;.&lt;br /&gt;
*&#039;limited number of resources&#039;: include &#039;taken&#039; and &#039;limit&#039; in the results table so that screen-reader can associate them with the column headings. &#039;&#039;&#039;High&#039;&#039;&#039;.&lt;br /&gt;
* No issues found for Dragon or ZoomText.&lt;br /&gt;
&lt;br /&gt;
====== survey ======&lt;br /&gt;
Tested on Moodle Features. &lt;br /&gt;
* screen-readers cannot easily convey the layout of questions with two alternative beginnings, such as those at http://moodle.org/mod/survey/view.php?id=2332.  It may be best to avoid alternative beginnings and repeat each question with its alternative beginnings, and give each separate question a number. &#039;&#039;&#039;High&#039;&#039;&#039;.&lt;br /&gt;
* ensure submit buttons convey their function, e.g. &amp;quot;submit answers&amp;quot; is preferable to &amp;quot;click here to check and continue&amp;quot; which sees to imply that answers will be checked and that there are more questions to come. &#039;&#039;&#039;Usability&#039;&#039;&#039;.&lt;br /&gt;
* explicitly associate radio buttons with the relevant labels, e.g. &#039;almost never&#039; etc., using &amp;lt;label&amp;gt; and &amp;lt;for&amp;gt; tags. &#039;&#039;&#039;P2, ideally should be P1&#039;&#039;&#039;.&lt;br /&gt;
* ensure all radio buttons have a label to be associated with them: if an &#039;unanswered&#039; option is required, provide this text as a label. &#039;&#039;&#039;P2, ideally should be P1&#039;&#039;&#039;.&lt;br /&gt;
* Best practice with horizontal radio buttons &#039;&#039;needs to be further investigated&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
====== glossary ====== &lt;br /&gt;
June &#039;06: Empty glossary tested on Moodle Features. July &#039;06: Glossary tested on OU Example of course web site (LTSECW).&lt;br /&gt;
* refer to generic issues: lists, headings, tabs, links, images.&lt;br /&gt;
* Change &#039;special&#039; link to &#039;non alphabetic entries&#039; or similar. &#039;&#039;&#039;P2&#039;&#039;&#039;.&lt;br /&gt;
* Change &#039;all&#039; link to &#039;all entries&#039; or similar. &#039;&#039;&#039;P2&#039;&#039;&#039;.&lt;br /&gt;
* provide alt text for printer icon, e.g. &amp;quot;printable version&amp;quot; or similar. &#039;&#039;&#039;P1.&#039;&#039;&#039;&lt;br /&gt;
* remove heading mark-up from printer icon as it is not a heading. &#039;&#039;&#039;Low&#039;&#039;&#039;.&lt;br /&gt;
* the printer icon becomes almost invisible under Windows High contrast black setting.  Suggest making it larger and/or provide a text link combined with it.  &#039;&#039;&#039;Medium&#039;&#039;&#039;.&lt;br /&gt;
* remove link from current &#039;sort&#039; selection, e.g. when &#039;by last update&#039; is selected remove the link from this text. &#039;&#039;&#039;Medium&#039;&#039;&#039;.&lt;br /&gt;
* provide alt text for the &#039;ascending&#039; and &#039;descending&#039; icons as this information is currently not available to a screen-reader. Combine the text link with the image link so that they are read together by a screen-reader. Note: Do not rely on &amp;lt;title&amp;gt; to convey this information because this is not read by default by screen-readers. &#039;&#039;&#039;P1&#039;&#039;&#039;.&lt;br /&gt;
* label the search edit field and re-order the search controls: place edit field first, followed by &#039;search full text&#039; checkbox, followed by &#039;search&#039; button. &#039;&#039;&#039;P2 and usability&#039;&#039;&#039;.&lt;br /&gt;
* There is no explicit label for the &#039;rate&#039; menu which means Jaws has to guess the text that belongs to it when in forms mode.  Therefore provide a label, eg. &amp;quot;rate this entry&amp;quot;. &#039;&#039;&#039;P2&#039;&#039;&#039;.&lt;br /&gt;
* Provide instructions for the &#039;rate&#039; feature because users, particularly screenreader users, may not realise that they need to operate the button at the bottom of the page to submit their ratings. &#039;&#039;&#039;Usability&#039;&#039;&#039;.&lt;br /&gt;
* When more than one page on entries, change the &#039;all&#039; link to &amp;quot;all pages&amp;quot; so that link is meaningful.  &#039;&#039;&#039;P2&#039;&#039;&#039;.&lt;br /&gt;
* Avoid opening new windows, e.g. if follow auto-link in glossary entry which opens a new window, and then follow link to its parent glossary, can end up with 3 glossary windows open. &#039;&#039;&#039;P2&#039;&#039;&#039;.&lt;br /&gt;
* In list of glossary entries mark up A, B C etc as headings. &#039;&#039;&#039;P2&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
======= add new entry =======&lt;br /&gt;
* the &#039;browse&#039; button on the upload file control is not read by Jaws in &#039;forms mode&#039;.  It is not clear why this is and it &#039;&#039;requires further investigation.&#039;&#039; &#039;&#039;&#039;High.&#039;&#039;&#039;&lt;br /&gt;
* change &#039;revert&#039; button to &amp;quot;cancel entry&amp;quot; or similar. &#039;&#039;&#039;P2&#039;&#039;&#039;.&lt;br /&gt;
* remove alt text from checkboxes because it repeats the text of the control and is therefore repeated by Jaws: alt text is not required for checkboxes, radio buttons etc, but &amp;lt;label&amp;gt; and &amp;lt;for&amp;gt; tags are required. &#039;&#039;&#039;P2&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
======= Browse by category =======&lt;br /&gt;
* Provide label for drop down menu, such as &#039;choose category&#039;. &#039;&#039;&#039;P2&#039;&#039;&#039;.&lt;br /&gt;
* remove automation from drop down menu as it is not controllable with the keyboard only, and provide a &#039;go&#039; button or similar. Note: this may be an IE problem as it does not seem to occur in Firefox and therefore &#039;&#039;needs further testing&#039;&#039;.&#039;&#039;&#039;P2, ideally should be P1&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
====== lams ======&lt;br /&gt;
lams server required - developer issue therefore not tested&lt;br /&gt;
&lt;br /&gt;
====== wiki ======&lt;br /&gt;
no content available yet therefore cannot be tested.&lt;br /&gt;
* generic issues with blogs: &lt;br /&gt;
** screen-reader management of information; &lt;br /&gt;
** need to develop support information for students &lt;br /&gt;
** text-based and so therefore should be technically accessible, as long as headings and meaningful link text used.&lt;br /&gt;
&lt;br /&gt;
====== assignment ======&lt;br /&gt;
Tested on Moodle Features. &lt;br /&gt;
* refer to generic issues on forms, editor.&lt;br /&gt;
* Upload file: ensure label explicitly associated with upload field. &#039;&#039;&#039;P2, ideally should be P1&#039;&#039;&#039;.&lt;br /&gt;
* Upload file: Dragon does not recognise the &#039;browse&#039; button, either when say &amp;quot;click browse&amp;quot; or &amp;quot;click button&amp;quot;.  This may be because the button does not have it&#039;s own label because it is part of the &#039;file&#039; form control.  Dragon users can access the field by saying &amp;quot;type text&amp;quot; but may not know to do this.  Suggest if possible provide an explicit label for the button.  &#039;&#039;May require further investigation/testing&#039;&#039;.&lt;br /&gt;
* online text assignment: on re-edit submission page provide a label for field so that screen-reader knows what it is for. &#039;&#039;&#039;P2, ideally should be P1&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
====== scorm======&lt;br /&gt;
Developer/author facing tool therefore not tested.&lt;br /&gt;
&lt;br /&gt;
====== resource ======&lt;br /&gt;
Developer/author facing tool therefore not tested.&lt;br /&gt;
Authors require support in using in an accessible way.&lt;br /&gt;
&lt;br /&gt;
====== chat ======&lt;br /&gt;
&#039;open chat event&#039; tested on Moodle features demo.&lt;br /&gt;
* the constant refreshing means that screen-readers cannot use this chat feature: it is impossible to type in the edit field because &#039;forms mode&#039; keeps being switched off.  &#039;&#039;Needs further consideration&#039;&#039;.  Auto-refresh = &#039;&#039;&#039;P2, ideally should be P1&#039;&#039;&#039;.&lt;br /&gt;
* suggest change order of text on chat-launch page to read: &amp;quot;an open chat event... this is a chat room with...click here to enter...&amp;quot;.  &#039;&#039;&#039;Medium&#039;&#039;&#039;.&lt;br /&gt;
* suggest change &#039;click here to enter the chat now&#039; to &#039;enter the chat now&#039;.&#039;&#039;&#039;P2&#039;&#039;&#039;.&lt;br /&gt;
* Dragon cannot dictate words into the edit field - can only dictate letter by letter.  The reason for this is not known and &#039;&#039;needs further investigation&#039;&#039;. &#039;&#039;&#039;High&#039;&#039;&#039;.&lt;br /&gt;
* Dragon user has to say &amp;quot;press enter&amp;quot; to send their message because there is no button to operate.  &lt;br /&gt;
* It may not be clear to other users that they have to press enter to send a message.  Suggest provide a &#039;send&#039; button which will make this clear, and would be operable by Dragon.  &#039;&#039;Usability&#039;&#039;.&lt;br /&gt;
* Dragon cannot select the &#039;help&#039; button, even when using the &amp;quot;click image&amp;quot; command. The reason for this is not known and &#039;&#039;needs further investigation&#039;&#039;. &#039;&#039;&#039;High&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
====== lesson ======&lt;br /&gt;
Not tested because can be used in a variety of different ways.  &lt;br /&gt;
Authors require support for using in an accessible way.&lt;br /&gt;
* Refer to global issues regarding forms and headings.&lt;br /&gt;
&lt;br /&gt;
====== journal ====== &lt;br /&gt;
* no content available and so not tested&lt;br /&gt;
&lt;br /&gt;
===== Blocks =====&lt;br /&gt;
&lt;br /&gt;
====== activity_modules ======&lt;br /&gt;
Tested on Features.&lt;br /&gt;
&#039;Activities&#039;, block on course page is list of text links with icons - see global issues on images/icons.&lt;br /&gt;
&lt;br /&gt;
The pages linked to from the activity block were all checked.  All were found to have the correct markup for tables and headings.  The following pages do not have any accessibility issues: Assignments, Chats, Glossaries, Lessons, Quizzes, SCORMs/AICCs, Surveys, Wikis, Workshops.  &lt;br /&gt;
&lt;br /&gt;
There are some issues with the following pages:&lt;br /&gt;
&lt;br /&gt;
======= Forums page =======&lt;br /&gt;
* ensure all columns have a table header, e.g. &#039;learning forums&#039; table has an unheaded column with the digit &#039;5&#039; in it. &#039;&#039;&#039;P1&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
======= Hot Potatoes Quizzes page =======&lt;br /&gt;
* it is not clear why there is a &#039;show/hide topic&#039; link in this table on the Features demo. &#039;&#039;&#039;Usability&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
======= Resources page =======&lt;br /&gt;
* Jaws does not annouce the &#039;tabledividers&#039; used in this table.  If topic numbers are only used at the beginning of the section of the table it may be best to create separate tables for each topic, and remove the &#039;topic&#039; column. &#039;&#039;&#039;Low&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
====== admin ======&lt;br /&gt;
* On the site homepage this gives access to site administration; on course pages it gives access to course administration.&lt;br /&gt;
* Admin/editing-teacher facing generally, and for the OU VLE project.&lt;br /&gt;
* Student-facing for the Open University OCI project.&lt;br /&gt;
&lt;br /&gt;
Tested on CT505.&lt;br /&gt;
* On course page block is list of text links with icons - see global issues on images/icons.&lt;br /&gt;
* Asterisk indicating missing profile description is not part of the &#039;edit profile&#039; link text and therefore is only read by screenreader when reviewing the page, and is not read when tabbing through links.  It therefore may be missed depending on how the page is being read.  The extent to which this is a problem cannot be predicted and so &#039;&#039;this requires further consideration&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
======= Change password =======&lt;br /&gt;
* remove all alt text from form fields because screerneaders read this as well as the onscreen text.  Alt text is not necessary in these situations. &#039;&#039;&#039;High&#039;&#039;&#039;.&lt;br /&gt;
* See also global issues on forms (provision of &amp;lt;label&amp;gt; on all controls). &#039;&#039;&#039;P2.&#039;&#039;&#039;&lt;br /&gt;
* Suggest move &#039;change password&#039; button to be left-aligned so that it is easy to find with screen magnifier (or at least be centred). &#039;&#039;&#039;High&#039;&#039;&#039;.&lt;br /&gt;
* Page confirming change of password has no accessibility issues.&lt;br /&gt;
&lt;br /&gt;
======= Unenrol from course =======&lt;br /&gt;
No accessibility issues.&lt;br /&gt;
&lt;br /&gt;
======= Grades =======&lt;br /&gt;
Tested on Moodle Features.&lt;br /&gt;
Presented as a horizontal table in which titles of activities often wrap onto several lines.&lt;br /&gt;
* Suggest reformat into vertical table so that titles of activities do not have to wrap. &#039;&#039;&#039;Usability&#039;&#039;&#039;.&lt;br /&gt;
* Provide Table Headers such as &#039;activity&#039;, &#039;maximum grade&#039;, &#039;your grade&#039; with columns beneath. &#039;&#039;&#039;P1&#039;&#039;&#039;.&lt;br /&gt;
* remove links from dashes (indicating no grade yet) and from grade numbers, as these are not meaningful links, they repeat the text links to the activities, and do not seem to be necessary.&lt;br /&gt;
* Remove &amp;lt;th&amp;gt; tags from data that is not a table header, e.g. the title of activities and the maximum grade numbers. &#039;&#039;&#039;Medium&#039;&#039;&#039;.&lt;br /&gt;
* Replace &#039;stats&#039; with &#039;Statistics&#039; or &#039;statistics on grades&#039; to convey the meaning. &#039;&#039;&#039;P2&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
====== blog_menu ======&lt;br /&gt;
Not yet tested - to be tested with blogs.&lt;br /&gt;
&lt;br /&gt;
====== blog_tags ======&lt;br /&gt;
Not yet tested - to be tested with blogs&lt;br /&gt;
&lt;br /&gt;
====== calendar_month (Mini calendar) ======&lt;br /&gt;
Tested on early OU Moodle instantiation. &lt;br /&gt;
* [[#Outstanding issues]]. The link ‘January 2006’ does not really indicate that the link goes to a month view. This text also acts as a heading but is not marked up as one. Suggest use [[#Hidden text]]/ link title, &amp;quot;Goto month view&amp;quot;. &#039;&#039;&#039;P2&#039;&#039;&#039; &lt;br /&gt;
* refer to generic issues on links (date link to be meaningful).&lt;br /&gt;
* Also refer to main calendar issues.&lt;br /&gt;
&lt;br /&gt;
====== calendar_upcoming (Upcoming events) ====== &lt;br /&gt;
Tested on early OU Moodle instantiation. &lt;br /&gt;
* List of events from calendar, should be marked up as a list. &#039;&#039;&#039;P2&#039;&#039;&#039;&lt;br /&gt;
* Poor colour contrast for &#039;&#039;dimmed text&#039;&#039; for example, &amp;quot;Today (12:00 AM)&amp;quot;. &#039;&#039;&#039;P3, ideally should be P1&#039;&#039;&#039;.&lt;br /&gt;
* Refer to main calendar issues.&lt;br /&gt;
&lt;br /&gt;
====== course_list (My courses) ======&lt;br /&gt;
Tested on Moodle Features.&lt;br /&gt;
* My courses (student view)/Course categories (admin view).&lt;br /&gt;
* List of text links marked up OK - no accessibility issues.&lt;br /&gt;
&lt;br /&gt;
====== course_summary ======&lt;br /&gt;
* This is an anonymous block (no title).&lt;br /&gt;
* Site description on site homepage; course summary on course pages.&lt;br /&gt;
* Authors need support in using in an accessible way.&lt;br /&gt;
&lt;br /&gt;
====== glossary_random ======&lt;br /&gt;
No example available so not tested.&lt;br /&gt;
&lt;br /&gt;
====== html ======&lt;br /&gt;
Authors need support in using in an accessible way.&lt;br /&gt;
&lt;br /&gt;
====== loancalc ======&lt;br /&gt;
No example available - not tested.&lt;br /&gt;
&lt;br /&gt;
====== login ======&lt;br /&gt;
Tested on [[#Ndf-Moodle]] site.&lt;br /&gt;
* Table used for layout; suggest replace with ordered list &amp;lt;code&amp;gt;&amp;amp;lt;ol&amp;gt;&amp;lt;/code&amp;gt;. &#039;&#039;&#039;P2&#039;&#039;&#039;.&lt;br /&gt;
* General [[#Form Elements]] issues, use &amp;lt;code&amp;gt;&amp;amp;lt;label&amp;gt;&amp;lt;/code&amp;gt;. &#039;&#039;&#039;P2&#039;&#039;&#039;.&lt;br /&gt;
* Note, the block is only visible when user is &#039;&#039;not&#039;&#039; logged in.&lt;br /&gt;
&lt;br /&gt;
====== messages ======&lt;br /&gt;
tested on CT505&lt;br /&gt;
* Message block: ensure all links are meaningful, e.g. the number that follows the name of the sender is not meaningful.  &#039;&#039;&#039;P2, ideally should be P1&#039;&#039;&#039;.&lt;br /&gt;
* auto-refresh in various message-related windows causes problems for screen-readers, in particular it turns &#039;forms mode&#039; off which in turn prevents students from entering text. &#039;&#039;&#039;P2, ideally should be P1&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
======= Contact window =======&lt;br /&gt;
* provide alt text for &#039;add contact&#039;, &#039;block contact&#039; and &#039;message history&#039; instead of, or as well as titles, because screen-readers read alt text only in their default settings. &#039;&#039;&#039;P1&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
======= Message window =======&lt;br /&gt;
* auto-refresh does not seem to be necessary in this window, because user is just reading the current message. &#039;&#039;&#039;P2, ideally should be P1&#039;&#039;&#039;.&lt;br /&gt;
* provide an explicit label for the edit field, e.g. &#039;reply&#039;, or similar. &#039;&#039;&#039;P2&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
======= Send message window =======&lt;br /&gt;
* provide an explicit label for the edit field. &#039;&#039;&#039;P2&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
====== news_items ======&lt;br /&gt;
Tested on Moodle.org.&lt;br /&gt;
* &#039;more...&#039; links are read by screen-readers as &amp;quot;more dot dot dot&amp;quot;, also this link text is not meaningful in its own right, therefore remove the &#039;more&#039; link and make the subject of the news item the link text. &#039;&#039;&#039;P2&#039;&#039;&#039;.&lt;br /&gt;
* items in block should be marked up as a list to support screen-reader users. &#039;&#039;&#039;P2&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
====== online_users ======&lt;br /&gt;
Tested on Moodle Features.&lt;br /&gt;
* See generic issues regarding images: icon links and text links should be combined.&lt;br /&gt;
&lt;br /&gt;
====== participants (people) ======&lt;br /&gt;
Tested on Moodle.org&lt;br /&gt;
* image link to show/hide facilitators should be given a more meaningful label, such as &#039;show facilitators&#039; and &#039;hide facilitators&#039;. &#039;&#039;&#039;P2&#039;&#039;&#039;.&lt;br /&gt;
* links to order lists by different headings, and in ascending or descending order, are not conveyed non-visually.  Best practice for this feature &#039;&#039;needs to be considered further.&#039;&#039; &#039;&#039;&#039;High&#039;&#039;&#039;.&lt;br /&gt;
* provide a table heading at the top of the &#039;user picture&#039; column, e.g. &#039;picture&#039; or &#039;user picture&#039; or similar so that screen-readers can identify the content in that column. &#039;&#039;&#039;P1&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
====== quiz_results ======&lt;br /&gt;
See quizzes.&lt;br /&gt;
&lt;br /&gt;
====== recent_activity ======&lt;br /&gt;
(Was mistakenly under &#039;activity modules&#039; - see above.)&lt;br /&gt;
Tested on Moodle Features. &lt;br /&gt;
* New users - OK, marked up as a list.&lt;br /&gt;
* New forum posts - should be marked up as a list. &#039;&#039;&#039;P2&#039;&#039;&#039;.&lt;br /&gt;
* The linked document, &#039;Full report of recent activity&#039; contains repeating validation errors &#039;&#039;&#039;P2&#039;&#039;&#039;, misformed lists &#039;&#039;&#039;P2&#039;&#039;&#039;, and nested layout tables &#039;&#039;&#039;P2&#039;&#039;&#039;. &lt;br /&gt;
* See [http://moodle.org/course/view.php?id=5 Using Moodle], [http://moodle.org/course/recent.php?id=5  Full report...].&lt;br /&gt;
&lt;br /&gt;
====== rss_client ======&lt;br /&gt;
Tested on CT505.&lt;br /&gt;
* A list of links generated from an (external) RSS (XML-based) news feed.&lt;br /&gt;
* The quality of the link text is dependent on the quality of the feed.&lt;br /&gt;
* Links should open in the same window, or warn the user where they do not. &#039;&#039;&#039;P2&#039;&#039;&#039;.&lt;br /&gt;
* The unordered list should be marked up as such, using &amp;amp;lt;ul&amp;gt;. &#039;&#039;&#039;P2&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
====== search_forums ======&lt;br /&gt;
Tested on moodle.org.&lt;br /&gt;
* refer to generic issues on forms, headings&lt;br /&gt;
* provide explicit label for edit field. &#039;&#039;&#039;P2&#039;&#039;&#039;.&lt;br /&gt;
======= Results page: =======&lt;br /&gt;
* to support screen-reader navigation the location/subject of each result could be marked up as a heading so that screen-readers could jump from one to the next easily. &#039;&#039;&#039;P2&#039;&#039;&#039;.&lt;br /&gt;
* the presentation of the location of the message will be difficult for screen-readers to convey but how to do this more easily &#039;&#039;needs further consideration&#039;&#039;. &#039;&#039;&#039;Medium&#039;&#039;&#039;.&lt;br /&gt;
* the separators in the location/subject are &amp;quot;-&amp;gt;&amp;quot; which is announced by a screen-reader as &amp;quot;dash greater than&amp;quot; or &amp;quot;dash greater&amp;quot;, which is not meaningful.  Suggest replacing with a colon or slash. &#039;&#039;&#039;Medium&#039;&#039;&#039;.&lt;br /&gt;
* the highlight of the search term is not available non-visually.  However an immediate solution is not known.  Perhaps it is sufficient that screen-reader users can do a &#039;find on page&#039; to search for their search term in the results.  This &#039;&#039;needs further consideration&#039;&#039;. &#039;&#039;&#039;Low&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
====== section_links ======&lt;br /&gt;
* This block can only appear on course pages, not the site homepage.&lt;br /&gt;
* List of links to weeks/topics.&lt;br /&gt;
* should be marked up as a list. &#039;&#039;&#039;P2&#039;&#039;&#039;.&lt;br /&gt;
* Links &amp;quot;1, 2, 3...&amp;quot; are not very meaningful on own when read by screenreader. Suggest include title of sections.  &#039;&#039;&#039;P2&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
====== site_main_menu ======&lt;br /&gt;
Authors need support in using in an accessible way.&lt;br /&gt;
&lt;br /&gt;
====== social_activities ======&lt;br /&gt;
No example available so not tested.&lt;br /&gt;
&lt;br /&gt;
===== Authentication modules (/auth) =====&lt;br /&gt;
&lt;br /&gt;
# Note, the user requires &#039;&#039;admin&#039;&#039; privileges to switch between the different authentication methods for testing. &lt;br /&gt;
# Many of the authentication modules do not have a student-facing user-interface – they defer to the  main &#039;&#039;/login&#039;&#039; scripts.&lt;br /&gt;
&lt;br /&gt;
cas&lt;br /&gt;
db&lt;br /&gt;
email&lt;br /&gt;
fc&lt;br /&gt;
imap&lt;br /&gt;
ldap&lt;br /&gt;
manual&lt;br /&gt;
nntp&lt;br /&gt;
none&lt;br /&gt;
pam&lt;br /&gt;
pop3&lt;br /&gt;
radius&lt;br /&gt;
shibboleth&lt;br /&gt;
&lt;br /&gt;
===== Course Format (/course/format) =====&lt;br /&gt;
Course formats control the display of an individual course, including the arrangement of Moodle blocks in the left and right columns. All the course formats use a table to lay out the columns, except in the &#039;weekscss&#039; format. The course is divided into sections which may be time-period or topic based - again a layout table is used, except in &#039;weekscss&#039;.&lt;br /&gt;
&lt;br /&gt;
====== lams ======&lt;br /&gt;
* 2-column table-based layout; uses the LAMS module.&lt;br /&gt;
* Not tested.&lt;br /&gt;
&lt;br /&gt;
====== scorm ======&lt;br /&gt;
* Not tested; requires SCORM content.&lt;br /&gt;
&lt;br /&gt;
====== social ======&lt;br /&gt;
* 3-column table-based layout.&lt;br /&gt;
* Contains an embedded forum - see &#039;&#039;forum&#039;&#039; tests.&lt;br /&gt;
* Recommendation, should become a table-less layout. &#039;&#039;&#039;P2&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
====== topics ======&lt;br /&gt;
* Recommendation, should become a table-less layout. &#039;&#039;&#039;P2&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
====== weeks ======&lt;br /&gt;
* Recommendation, should become a table-less layout. &#039;&#039;&#039;P2&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
====== weekscss ======&lt;br /&gt;
* A copy of the weeks course format, to demonstrate a layout without tables.&lt;br /&gt;
* The CSS is in the Standard theme style sheets. The left and right columns are floated. Each week is a list item.&lt;br /&gt;
* To be superseded by &#039;&#039;weeks&#039;&#039;, above.&lt;br /&gt;
&lt;br /&gt;
===== Themes (/themes) =====&lt;br /&gt;
* standard theme has been most tested and improved.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
formal_white&lt;br /&gt;
standard&lt;br /&gt;
standardlogo&lt;br /&gt;
oceanblue&lt;br /&gt;
wood&lt;br /&gt;
chameleon&lt;br /&gt;
metal&lt;br /&gt;
standardgreen&lt;br /&gt;
orangewhite&lt;br /&gt;
cornflower&lt;br /&gt;
standardwhite&lt;br /&gt;
standardred&lt;br /&gt;
standardblue&lt;br /&gt;
orangewhitepda&lt;br /&gt;
&lt;br /&gt;
=== Generic Forms in Moodle ===&lt;br /&gt;
&lt;br /&gt;
This section discusses the benefits and possible solutions for implementing generic forms in Moodle.&lt;br /&gt;
&lt;br /&gt;
HTML forms are widely used in Moodle to enable students, and teachers and administrators to interact with the system and each other. The forms are either produced by core Moodle code, Moodle extensions (modules, blocks and so on) or third-party libraries (for example, the HTML-Area editor).&lt;br /&gt;
&lt;br /&gt;
As part of the Moodle Accessibility Specification, generic and specific accessibility problems are being identified for forms throughout Moodle. There are also widely accepted limitations to HTML forms – notably, the requirement for client and server-side scripting (Javascript and PHP, in the case of Moodle), to initialise form data, validate, calculate and handle user input errors. This causes complexity and maintenance issues for large forms.&lt;br /&gt;
&lt;br /&gt;
XForms is a W3C recommendation that will form part of XHTML 2.0 and other XML specifications. It addresses the problems inherent in HTML forms, by separating data, logic and presentation:&lt;br /&gt;
# Form data – XML instance data – initial, transitional and final data. A separate XML document.&lt;br /&gt;
# Logic – XForms Model – validation, constraints, required values.&lt;br /&gt;
# Presentation – XForms User Interface – visible form controls, equivalent elements for each HTML form element, with additions. Can be styled with CSS. &lt;br /&gt;
&lt;br /&gt;
The logic and presentation components require a host XML document. The XForms Model can be placed in the &amp;amp;lt;head&amp;gt; of a XHTML document, while the User Interface should be in the &amp;amp;lt;body&amp;gt;. The &#039;scripting&#039; built-in to XForms is not procedural, but declarative in a similar manner to XSL-Transformations.&lt;br /&gt;
&lt;br /&gt;
XForms are not at present supported natively by any widely used Web browser. There are a number of client and server-side implementations. Most client-side solutions require a browser-plugin, the one that does not uses Javascript to transform to HTML [ www.formfaces.com ]. A medium-term solution will require a transformation from XForms to XHTML forms, and at present the only server-side implementations for this are in Java.&lt;br /&gt;
&lt;br /&gt;
It would be a significant and time-consuming project to implement a server-side implementation for all of XForms 1.0 to XHTML in PHP. To be worthwhile, the project should be loosely coupled to Moodle, so that non-Moodle developers can use the software. In the short-term, careful consideration would be required to select the most useful subset of XForms for an initial implementation. Also, this approach is only as useful as the quality of the XHTML that is produced.&lt;br /&gt;
&lt;br /&gt;
An alternative would be – &#039;&#039;&#039;TODO&#039;&#039;&#039; [S.Marshall&#039;s code].&lt;br /&gt;
&lt;br /&gt;
Accessible and usable XHTML forms:&lt;br /&gt;
# Appropriate use of &amp;lt;code&amp;gt;&amp;amp;lt;label&amp;gt;&amp;lt;/code&amp;gt; and &#039;for&#039; to describe &#039;&#039;every&#039;&#039; form control (for example, the day, month and year select-(drop-down) lists in a date of birth form). Labels (or parts of labels) that are useful to none-visual users, but superfluous to many visual users may be &#039;hidden&#039; using CSS &amp;lt;code&amp;gt;{ position:absolute; top:-1000px }&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Appropriate use of &amp;lt;code&amp;gt;&amp;amp;lt;fieldset&amp;gt;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;amp;lt;legend&amp;gt;&amp;lt;/code&amp;gt; to structure, group and summarise form controls.&lt;br /&gt;
# Do not use scripting to submit a form, for example using the &amp;lt;code&amp;gt;&#039;onchange&#039;&amp;lt;/code&amp;gt; event in a select-(drop-down) list. Or to change the keyboard focus, for example with auto-refresh.&lt;br /&gt;
# Use minimal scripting to aid usability, and allow it to be disabled (or provide an alternative) for accessibility.&lt;br /&gt;
# Minimal and semantic use of non-form mark-up in forms. So prefer an ordered list &amp;lt;code&amp;gt;&amp;amp;lt;ol&amp;gt;&amp;lt;/code&amp;gt;, in place of a table for layout.&lt;br /&gt;
# A consistent, clear and multi-modal way to indicate required/mandatory fields (so, not just using colour or an un-explained asterisk).&lt;br /&gt;
# A consistent, clear and multi-modal way to display error messages (make it clear if the user, or system is at fault).&lt;br /&gt;
&lt;br /&gt;
== Issues for supporting course authors ==&lt;br /&gt;
This section has been included to &amp;quot;park&amp;quot; issues that emerged while undertaking the evaluations that do not require technical responses but may need to be included in guidance notes for course authors.&lt;br /&gt;
=== usability ===&lt;br /&gt;
* automatic month selection? e.g. when select June in one field automatically select June in following field instead of leaving it as Jan?? (but find accessible solution too)&lt;br /&gt;
* prevent creation of Moodle &#039;labels&#039; that are inappropriate, e.g. prevent an H2 if there is not already an H1.  Support authors in using &#039;label&#039; in an accessible way.&lt;br /&gt;
* Where ordered lists are styled to be labelled A, B, C etc the Jaws screen-reader reads the labels as 1, 2, 3 (i.e. it does not recognise the visual styling).&lt;br /&gt;
&lt;br /&gt;
=== authoring accessible material ===&lt;br /&gt;
* meaningful labels in database&lt;br /&gt;
&lt;br /&gt;
== Issues for supporting disabled students ==&lt;br /&gt;
This section has been included to &amp;quot;park&amp;quot; issues that emerged while undertaking the evaluations that do not require or can not be resolved by technical responses but may need to be included in guidance notes for disabled students.&lt;br /&gt;
* Where ordered lists are styled to be labelled A, B, C etc the Jaws screen-reader reads the labels as 1, 2, 3 (i.e. it does not recognise the visual styling).&lt;br /&gt;
* Screen-readers are designed to read forms that only contain form controls (edit fields, checkboxes etc) they therefore can fail to read forms that contain links and paragraphs in a meaningful way, and it may miss certain aspects.  Quizzes with &#039;fill in the gap&#039; in the middle of sentences may be particularly problematic.  The best way for screen-reader users to interact with a page containing a form is to review the page before completing the form - in this way any other content, such as links and paragraphs, will also be read out.&lt;br /&gt;
&lt;br /&gt;
== Resources ==&lt;br /&gt;
&lt;br /&gt;
=== Checklists, Recommendations ===&lt;br /&gt;
&lt;br /&gt;
* OU internal, SQAPI PAT 8.1.1, Resources and guidelines for accessible software. Marion Edwards et al, 17 March 2003.&lt;br /&gt;
* BSI/DRC, [http://www.drc-gb.org/default.aspx?page=3364 PAS 78:2006, Guide to good practice in commissioning accessible websites]. British Standards Institute, 2006. (Available from the Disability Rights Commission or the BSI, PDF, 66 pages.)&lt;br /&gt;
* [http://www.webaim.org/standards/508/508checklist.pdf WebAIM, Section 508 Web Accessibility Checklist for HTML] (PDF, 4 pages), Paul Bohman, updated 29 March  2001. &lt;br /&gt;
* [http://www.usdoj.gov/crt/508/archive/oldsoftware.html US Department of Justice, Software Accessibility Checklist, Section 508], date unknown (2004).&lt;br /&gt;
* [http://www.w3.org/TR/WAI-WEBCONTENT/full-checklist.html W3C, Checklist... for Web Content Accessibility Guidelines 1.0], 5 May 1999.&lt;br /&gt;
* [http://www.imsglobal.org/accessibility/accmdv1p0/imsaccmd_oviewv1p0.html IMS Guidelines for Developing Accessible Learning Applications], 12 July 2004&lt;br /&gt;
* [http://www.bbc.co.uk/guidelines/newmedia/accessibility/ BBC, Accessibility Checklist v0.20], 29 March 2005, Jonathan Hassell. (Relatively short list but with lots of links to more comprehensive BBC guidelines.)&lt;br /&gt;
* [http://www-306.ibm.com/able/guidelines/web/accessweb.html IBM, Web accessibility], last updated 06 August 2004 (Similar approach to the BBC).&lt;br /&gt;
* [http://www.w3.org/TR/WCAG20/ WCAG 2.0] Working Draft 27 April 2006.&lt;br /&gt;
* [http://www.w3.org/TR/2006/WD-WCAG20-20060427/appendixB.html WCAG 2.0 Checklist]&lt;br /&gt;
* [http://www.w3.org/TR/WCAG20/appendixD.html Comparison of WCAG 1.0 Checkpoints to WCAG 2.0]&lt;br /&gt;
* [http://www.w3.org/WAI/intro/atag.php Authoring Tool Accessibility Guidelines (ATAG)]&lt;br /&gt;
* [http://www.w3.org/WAI/EO/Drafts/PWD-Use-Web/ How People with Disabilities Use the Web], Working-Group Internal Draft, 5 May 2005.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Forms Resources ===&lt;br /&gt;
&lt;br /&gt;
* [http://www.alistapart.com/articles/prettyaccessibleforms Prettier Accessible Forms], A List Apart/ Nick Rigby, 20 June 2006.&lt;br /&gt;
* [http://www.alistapart.com/articles/sensibleforms Sensible Forms: A Form Usability Checklist], A List Apart/ Brian Crescimanno, 19 December 2005.&lt;br /&gt;
* [http://www.w3.org/MarkUp/Forms/ The Next Generation of Web Forms] W3C forms activity.&lt;br /&gt;
* [http://www.w3.org/TR/2006/REC-xforms-20060314/ XForms 1.0 Second Edition], W3C Recommendation, 2006.&lt;br /&gt;
* [http://xformsinstitute.com/essentials/ XForms Institute presents: O&#039;Reilly XForms Essentials], Micah Dubinko (2003).&lt;br /&gt;
* [http://www.ics.uci.edu/~rohit/IEEE-L7-XForms.html Can XForms Transform the Web?] Rohit Khare, 9 March 2000.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Sites Tested ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;em id=&amp;quot;Soc-Forum&amp;quot;&amp;gt;Soc-Forum&amp;lt;/em&amp;gt;: hosted at Moodle.org, [http://moodle.org/mod/forum/view.php?f=147 Open Social Forum].&lt;br /&gt;
* &amp;lt;em id=&amp;quot;Features&amp;quot;&amp;gt;Features&amp;lt;/em&amp;gt;: hosted at Moodle.org, [http://moodle.org/course/view.php?id=34 Features Demo Course].&lt;br /&gt;
* &amp;lt;em id=&amp;quot;OU-Features&amp;quot;&amp;gt;OU-Features&amp;lt;/em&amp;gt;: hosted internally at OU (Ndf-Moodle), copy of the &#039;Features Demo Course&#039;.&lt;br /&gt;
* &amp;lt;em id=&amp;quot;CT505&amp;quot;&amp;gt;CT505&amp;lt;/em&amp;gt;: hosted internally at OU (Ndf-Moodle), generic Moodle 1.6 demo/developer site, Topics-format course, demonstration modules including &#039;database&#039;.&lt;br /&gt;
* &amp;lt;em id=&amp;quot;Ndf-Moodle&amp;quot;&amp;gt;Ndf-Moodle&amp;lt;/em&amp;gt;: hosted internally at OU, generic Moodle 1.6 demo/developer site (cvs: MOODLE_16_STABLE), with example blocks and courses.&lt;br /&gt;
* &amp;lt;em id=&amp;quot;Vledemo&amp;quot;&amp;gt;Vledemo&amp;lt;/em&amp;gt;: hosted internally at OU, was a Moodle 1.5/1.6-development sandbox in Jan/Feb 2006.&lt;br /&gt;
&lt;br /&gt;
=== See also ===&lt;br /&gt;
&lt;br /&gt;
* http://www.pubbliaccesso.gov.it/normative/Italian_Legislation_on_Accessibility.doc&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Accessibility]]&lt;/div&gt;</summary>
		<author><name>Bawjaws</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Moodle_Accessibility_Specification&amp;diff=4155</id>
		<title>Moodle Accessibility Specification</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Moodle_Accessibility_Specification&amp;diff=4155"/>
		<updated>2006-09-06T13:24:39Z</updated>

		<summary type="html">&lt;p&gt;Bawjaws: adding really nice writeup of usability, accessibility and legal (UK) implications of form design&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;p class=&amp;quot;note&amp;quot;&amp;gt;These are DRAFT specifications that are being authored by a joint [http://www.open.ac.uk Open University] (IET-OCI-VLE) working group. The document specifies improvements to the &#039;&#039;&#039;accessibility of the Moodle course management system&#039;&#039;&#039; for version 1.7.&lt;br /&gt;
&lt;br /&gt;
Please post comments in the [http://moodle.org/mod/forum/discuss.php?d=48603 RFC - Moodle Accessibility Specification] forum discussion.&lt;br /&gt;
&lt;br /&gt;
(Also, see an earlier document in the forum discussion, [http://moodle.org/mod/forum/discuss.php?d=40484 RFC - Accessibility Proposal].)&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== People ==&lt;br /&gt;
&lt;br /&gt;
Working group members:&lt;br /&gt;
* [[User:Cc933|Chetz Colwell]], [http://iet.open.ac.uk/about/index.cfm?id=5087 Accessibility in Educational Media (AEM)], [http://iet.open.ac.uk/ Institute of Educational Technology].&lt;br /&gt;
* [[User:MartynCooper|Martyn Cooper]], IET, AEM.&lt;br /&gt;
* [[User:Jim Ellis|Jim Ellis]], Learning &amp;amp; Teaching Solutions (LTS) – Staff and Projects.&lt;br /&gt;
* Jenny Gray, LTS – Strategic, [http://oci.open.ac.uk/ Open Content Initiative] (OCI).&lt;br /&gt;
* [[User:Ndf42|Nick Freear]], LTS – Strategic, Virtual Learning Environment (VLE) project. [mailto:N.D.Freear_at_Open.ac.uk Email N.D.Freear]&lt;br /&gt;
&lt;br /&gt;
Other interested people:&lt;br /&gt;
* Stephen Bradley, LTS – Media, OCI.&lt;br /&gt;
* Jason Cole, LTS – Strategic, VLE.&lt;br /&gt;
* Howard Taylor, [http://www.corous.com/ COROUS], Open University Worldwide Ltd.&lt;br /&gt;
* Martin Dougiamas, [http://moodle.com Moodle.com].&lt;br /&gt;
&lt;br /&gt;
== Diary ==&lt;br /&gt;
&lt;br /&gt;
# Initial meeting, Thursday 8 June, afternoon.&lt;br /&gt;
# Working meeting, Thursday 15 June, all day.&lt;br /&gt;
# Submit to M.Dougiamas, and forums for review, Friday 23 June 2006.&lt;br /&gt;
&lt;br /&gt;
==Moodle Accessibility Specification ==&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
This accessibility specification has been developed by accessibility experts and Moodle developers at the Open University (OU), UK.  The OU has adopted Moodle as a core component of its VLE and is contributing to the continued Open Source (OS) development of Moodle.  Accessibility is an important for the OU because: it currently has over 9,300 disabled students; it has long standing aspirations to promote widening participation in higher education; and because of its legal obligations.  Further it is important for the whole Moodle community as further discussed under “Rationale” below.&lt;br /&gt;
&lt;br /&gt;
Accessibility is a term that has particular meanings in different contexts; here it refers to design qualities that endeavour to make online learning available to all by ensuring that the way it is implemented does not create unnecessary barriers however the student may interact with their computer.  Virtually anyone, irrespective of any disability, can be enabled to interact effectively with a computer.  Some people with disabilities interact with the computer using methods other than the conventional monitor, keyboard and mouse, some require special tools, usually referred to as “assistive technology”, and some need the way content is presented to them by the computer to be appropriate to their needs (for example in terms of font sizes and/or colour contrast).  &lt;br /&gt;
&lt;br /&gt;
There are well established design principles for accessibility in software design and electronic content. These promote compatibility with assistive technology and ensure that different ways of interacting with the computer can be accommodated.  This specification highlights further development work required in Moodle if these principles are to be considered effectively implemented across its various tools and modules. &lt;br /&gt;
&lt;br /&gt;
This Accessibility Specification is concerned with meeting the needs of disabled people who may be users of Moodle in whatever role they have, student, teacher, systems administrator, etc. However many accessibility approaches also yield benefits to all users and some help those working in particular circumstances such as working on a small screen PDA or over a low bandwidth link. &lt;br /&gt;
&lt;br /&gt;
==== Scope ====&lt;br /&gt;
The intended scope of this document is to set out an accessibility specification that applies to all elements of Moodle. This follows from the fact that all potential users of Moodle, whether they are students, teachers, administrators or developers, may be people with a disability. Moodle v1.6 had just been released at the time of writing and the specific comments are mainly based on a review of this version. &lt;br /&gt;
&lt;br /&gt;
The guidance set out under [[#Principles of Accessibility]] applies generically to all elements of Moodle that implement the features concerned and indeed any software development.    Under [[#Current Status Moodle Accessibility]] specific issues are reported where the current version of Moodle is at odds with these principles.  This has been done by a rapid cycle of review of most Moodle elements.   &lt;br /&gt;
&lt;br /&gt;
An initial test of the Open University&#039;s instantiation of a Moodle 1.6 development version was undertaken in January and February 2006.  The tests were confined to the Moodle modules and blocks that were then planned for the May 2006 release of OU Moodle course sites:&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
* Modules:  Resource page, quiz, forum.&lt;br /&gt;
&lt;br /&gt;
* Blocks:  Course summary, latest news.&lt;br /&gt;
&lt;br /&gt;
: Note, the calendar block and page were not to be used and therefore were not tested.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These tests were undertaken with IE6, Jaws 7 (screen-reader), ZoomText 8.1 (screen-magnifier), Dragon 7 (voice recognition software), and various browser and operating system settings.&lt;br /&gt;
&lt;br /&gt;
Many of the high priority issues from this evaluation were addressed and then adopted in the Moodle v 1.6 release.  Outstanding issues from this evaluation are reported under [[#Results from Initial OU Jan/Feb 2006 Evaluation]].&lt;br /&gt;
&lt;br /&gt;
The subsequent testing for compiling this specification has been based on Moodle v 1.6 but in various instantiations to enable access to examples of the modules in question.  An installed Moodle Features Demo and a demo OU course (CT505) were mainly used for the testing, plus some features on Moodle.org.  These sources are noted throughout the specification.&lt;br /&gt;
&lt;br /&gt;
The decision was taken to concentrate initially on screen-reader access.  This can be justified in that screen-reader access is usually the most problematic. Further, key issues for screen reader access (e.g. appropriate text labelling of interface elements and focus control) are also issues for voice recognition software and screen-magnifiers.  Therefore all available/relevant blocks and modules have been tested with a screenreader (Jaws 7).  In addition key features that were judged to be potentially problematic have also been tested with voice recognition software (Dragon 8), a screen magnifier (ZoomText 8), IE&#039;s &#039;largest&#039; text size, and Windows display setting &#039;High Contrast Black #1&#039;. (Note: the tester is not an expert Dragon user and so uses the tool &#039;out of the box&#039; and relies on Help for techniques.  It is possible that there are &#039;tricks&#039; for dealing with some of the access issues that have been identified, but these are unknown to the tester.)&lt;br /&gt;
&lt;br /&gt;
===== Priorities =====&lt;br /&gt;
The priority of issues is indicated using the WCAG priorities and are marked &#039;&#039;&#039;P1, P2, P3&#039;&#039;&#039;.  There are some cases in which it is considered that an issue is of higher priority for Moodle than the guidelines state and this is indicated accordingly.  The testing has raised additional issues that are not referred to in the Guidelines which are indicated as having &#039;&#039;&#039;High, Medium&#039;&#039;&#039; or &#039;&#039;&#039;Low&#039;&#039;&#039; priority.  Other issues that were picked up but are not strictly accessibility issues are labelled &#039;&#039;&#039;Usability&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
For some issues the ideal solution is not yet known and these are marked as &#039;&#039;needs further consideration&#039;&#039; (or similar).  Ideally various potential solutions need to be built into prototypes and tested, including testing with users.&lt;br /&gt;
&lt;br /&gt;
It has not been possible to do a detailed accessibility evaluation of all current Moodle Modules and Blocks in compiling this specification mainly because good examples of all were not available for testing.  Specifically it was not possible to do a full evaluation of the Quiz Module prior to the release of this specification but further work on this is planned in the near future.  Most Modules and Blocks however have been tested.  Where they have not been tested they are included in the lists under [[#Issues with different Moodle components]] with a note to this effect.  There are many generic issues that apply across many modules and these have been separately listed.  The focus for testing has been modules that generate interface elements that are student facing.&lt;br /&gt;
&lt;br /&gt;
===== The onward process of review and action =====&lt;br /&gt;
The exact process of response to this Accessibility Specification is still subject to negotiation.  However broadly it will consist of a period of review (principally via the [http://moodle.org/mod/forum/view.php?id=5752 Moodle Accessibility Forum]), then action on the recommendations followed by evaluation and then iteration as required.  The target is to have all priority 1 and priority 2 issues addressed by September 2006.&lt;br /&gt;
&lt;br /&gt;
==== Rationale for Moodle accessibility ====&lt;br /&gt;
There are moral, legal and market reasons why accessibility for disabled users is important for Moodle.  &lt;br /&gt;
&lt;br /&gt;
===== The moral argument =====&lt;br /&gt;
In any software product, or content item, if you fail to address issues of accessibility you will exclude or disadvantage significant numbers of people:  &lt;br /&gt;
&lt;br /&gt;
* Disabled people represent about 10-15% of the general population&lt;br /&gt;
* At the Open University 5.5% of students declare a disability&lt;br /&gt;
* [http://download.microsoft.com/download/0/1/f/01f506eb-2d1e-42a6-bc7b-1f33d25fd40f/ResearchReport.doc  The Wide Range of Abilities and Its Impact on Computer Technology],  a recent Microsoft commissioned market research report, shows: 57% of working age computer users are likely to benefit from accessible technology (where accessible technology is understood as technical responses to promote access for disabled people to computer hardware and software).&lt;br /&gt;
&lt;br /&gt;
So the moral argument is one of inclusion as opposed to discrimination.  Further it is repeatedly demonstrated that good design for disabled people is good design for all.  Considering the needs of disabled students, for example, facilitates reflection on the interactions that support the learning objectives or related tasks and addressing the accessibility agenda promotes usability for all.   &lt;br /&gt;
&lt;br /&gt;
===== The legal argument =====&lt;br /&gt;
Many countries are introducing legislation, making it illegal to discriminate against disabled people in education. Examples from 3 jurisdictions are given here. &lt;br /&gt;
&lt;br /&gt;
The USA led the way with antidiscrimination legislation effecting education with the introduction of [http://www.hhs.gov/ocr/504.html Section 504 of the Rehabilitation Act 1973] and [http://www.ada.gov/ Americans with Disabilities Act (ADA) 1990]. Also of particular relevance is [http://www.section508.gov/index.cfm Section 508 of the Rehabilitation Act 1998].  This requires Federal agencies to make their electronic and information technology accessible to people with disabilities. The law applies to all Federal agencies when they develop, procure, maintain, or use electronic and information technology. This applies to the public school sector and the state funded universities and colleges.  These agencies must give disabled employees and members of the public, including students, access to information that is comparable to the access available to others.&lt;br /&gt;
&lt;br /&gt;
In the UK the key legislation is the [http://www.opsi.gov.uk/acts/acts1995/1995050.htm Disability Discrimination Act (DDA) 1995] This was amended by the   [http://www.opsi.gov.uk/acts/acts2001/20010010.htm Special Educational Needs and Disability Act (SENDA) 2001] and in April 2005 a new [http://www.opsi.gov.uk/acts/acts2005/20050013.htm Disability Discrimination Act (DDA) 2005].  Now, Part 4 of the DDA specifically applies to the education sector.  This legislates that education providers must not treat a disabled person less favourably for any reason that relates to the person’s disability. Further, the education provider is required to make reasonable adjustments to enable a disabled person to participate in its courses. Access to the online elements of its courses is an important area where, by considering the needs of disabled students, discrimination can be prevented.  An important feature of the Act is that the needs of disabled students need to be anticipated and that it is therefore not sufficient for an educational establishment just to attempt to deal with the needs of a disabled student as they arise.&lt;br /&gt;
&lt;br /&gt;
In Australia, state equal opportunity laws were revised to prohibit discrimination on the grounds of disability in the early 1980s. These laws were harmonised at the federal level by the [http://www.austlii.edu.au/au/legis/cth/consol_act/dda1992264/ Disability Discrimination Act (DDA) 1992]. This Act specifically prohibits discrimination against disabled students. &lt;br /&gt;
&lt;br /&gt;
The laws in different countries have different scopes and are applied in different ways but all broadly leave any educational institution open to legal challenge if they discriminate against disabled students in their provision of online elements of  courses. Hence in many jurisdictions there is a legal reason for Moodle to address accessibility issues for disabled students.&lt;br /&gt;
&lt;br /&gt;
===== The market argument =====&lt;br /&gt;
The market argument follows directly from the moral and legal ones. Globally education institutions are increasingly adopting tools to enable them to deliver components of their teaching and learning online. However many have institutional values that mean they that they wish to do so in a way that is non-discriminatory towards students with disabilities. In most countries educational institutions find themselves working within a legal framework that now enshrines such anti-discriminatory ideals. Thus when an educational institution is considering adopting a technology for the online delivery of course elements the accessibility of these tools should be a key criterion in its decision making. If Moodle is able to demonstrate its commitment to accessibility and, further than that, by having invested in the accessibility of its component elements show that it is able to reduce the overhead for the institution in implementing its online course elements accessibly, it will be well placed in this market place.&lt;br /&gt;
&lt;br /&gt;
==== Organisation of this specification ====&lt;br /&gt;
&lt;br /&gt;
[To be written when final structure of the specification is agreed including whether it is to be a single article or a set of linked articles.]&lt;br /&gt;
&lt;br /&gt;
=== Principles of Accessibility ===&lt;br /&gt;
&lt;br /&gt;
==== The Checklist Issue ====&lt;br /&gt;
Many developers express a desire for a set of check points to enable them to work in a way that results in products that are accessible to disabled users.  Such checklists have their place but have been demonstrated over the years not to be effective on their own in promoting accessible design.  The essence of accessible design is for the developer to constantly bear in mind that the not all the users of their developments will interact with the computer environment in the same way that they do.  The purpose of this section of this Accessibility Specification is to give the developers who have to respond to it an overview of the information they need to work in this way.  This is kept deliberately brief but more comprehensive resources are referred to.&lt;br /&gt;
&lt;br /&gt;
==== General Principles of Accessibility ====&lt;br /&gt;
A summary of the main accessibility principles that underlay the more detailed points of the various accessibility guidelines and the comments specifically on current Moodle accessibility challenges is presented here. It is recommended that all developers understand these to enable them to effectively take on their responsibilities for accessibility in the design of Web and related software components.&lt;br /&gt;
&lt;br /&gt;
There are various published guidelines that are applicable here that give more detailed information but of particular relevance are:&lt;br /&gt;
&lt;br /&gt;
* [http://www.w3.org/TR/WAI-WEBCONTENT/ W3C Web Content Accessibility Guidelines 1.0 (WCAG 1.0)], 5 May 1999.&lt;br /&gt;
* [http://www.imsglobal.org/accessibility/accmdv1p0/imsaccmd_oviewv1p0.html IMS Guidelines for Developing Accessible Learning Applications], 12 July 2004&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[Note - [http://www.w3.org/TR/2006/WD-WCAG20-20060427/ A Last Call Working Draft of the Web Content Accessibility Guidelines 2.0 (WCAG 2.0)] was published on 27 April 2006. The extended deadline for comment on these was 22 June 2006.  So these are anticipated to supersede WCAG 1.0 soon.]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;So in summary the main accessibility principles are:&#039;&#039;&#039;&lt;br /&gt;
===== Allow for user customisation: =====&lt;br /&gt;
User customisation is a key tool in addressing the diversity of needs represented across a full set of users.  Many different disabled people, including those with a visual impairment and dyslexia, find online content and interface elements can be made more readable if they are able to choose particular font styles and sizes and use different background and foreground colours.  Because of the wide diversity in what different people would select as their optimally readable configuration, this is best addressed by allowing them to choose their own settings. This is usually most readily done by enabling the web pages or software to inherit user set parameters from the browser or computer operating system.&lt;br /&gt;
&lt;br /&gt;
===== Provide equivalents for visual and auditory content and interface elements: =====&lt;br /&gt;
Text is the most readily accessible form of online content. It can be rendered into synthetic speech by screen readers and configured for different presentation. Text descriptions should be provided for all images, graphics and video content, and text labelling of interface elements should be included.  Text transcriptions of auditory content should be provided.&lt;br /&gt;
&lt;br /&gt;
===== Use different ways of presenting information in an interface: =====&lt;br /&gt;
Different people are able to access information from an interface in different ways.  Presenting such information in one way alone will thus probably exclude some people from the effective use of that interface.  Therefore present important information in multiple ways.  For example if the status of a control is indicated by colour, also indicate it by an appropriate text label that can be seen and is accessible to a screen-reader.  This will ensure that it is accessible to those with colour-blindness as well as those who use such assistive technologies.&lt;br /&gt;
&lt;br /&gt;
===== Provide compatibility with assistive technologies: =====&lt;br /&gt;
This simple statement hides a multitude of technical issues but, by following set web or software standards, the opportunities for this being adequately addressed are maximised as the assistive technologies are to a large part developed with these same standards in mind. This includes to adhering to standards for web mark-up e.g. mark up headings as headings (and nest correctly), lists as lists and use tables for tabular information. This principle is expanded on in the section  [[#Compatibility with Assistive Technologies]] below.&lt;br /&gt;
&lt;br /&gt;
===== Allow access to all functionality from keyboard alone: =====&lt;br /&gt;
Many disabled people are unable or prefer not to use a mouse. This includes blind people and those with some physical disabilities.  By ensuring that software can be fully used without a mouse, the needs of these users are met but also generally more efficient interaction with the software is offered to all users.&lt;br /&gt;
&lt;br /&gt;
===== Provide context and orientation information: =====&lt;br /&gt;
It is important to consider the accessibility issues of navigating around the content as well as the content itself. This is an area often neglected.  Support should be provided for efficient navigation by informing the user of where they are, taking into account that some users may be using screen-readers or other assistive technologies. This is another case where thinking about the needs of disabled users often yields benefits for all users by promoting usability generally.&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Compatibility with Assistive Technologies ====&lt;br /&gt;
There is a range of assistive technologies that are widely employed by people with different disabilities to enable them to effectively interact with a computer environment.  Brief points on the implication of the most common forms of such assistive technology for web and software developers are listed here.   &lt;br /&gt;
&lt;br /&gt;
[Adapted from [http://www.imsglobal.org/accessibility/accmdv1p0/imsaccmd_oviewv1p0.html IMS Guidelines for Developing Accessible Learning Applications]]&lt;br /&gt;
&lt;br /&gt;
===== Screen-readers =====&lt;br /&gt;
Screen-readers are software based tools that enable the user to locate text based information on the computer screen and then vocalize it using speech synthesis software and audio hardware, or they can present it in a refreshable braille display.  Most screen-readers work in close concert with the operating system, relying on the computer&#039;s built-in functionality.  Screen-readers are used by all blind computer uses some with other degrees of visual impairment and some people with dyslexia.  They possibly present the most challenging set of issues of all the major assistive technologies for developers of web content or application or other software.&lt;br /&gt;
&lt;br /&gt;
To support screen reading software developers can: &lt;br /&gt;
* Use standard system tools to draw and erase all on-screen text and to display all cursors and pointers. &lt;br /&gt;
* Use system standard on-screen controls whenever possible. &lt;br /&gt;
* Define tools in toolbars, palettes, and menus as separate items. Do not create single graphics containing multiple objects. By keeping tools and other objects separate, the screen reader is better able to identify and name each tool for the user. &lt;br /&gt;
* Embed descriptive text in graphic images in such a way as to make the text known to screen reading software. This addresses the problems that can arise when text is rendered as a graphic image and cannot be read by software. &lt;br /&gt;
* Assign logical names to controls, even if the name is not visible on the screen. Screen readers can access this information and use it to describe the type and function of the control on the screen. &lt;br /&gt;
* Track the system cursor with the mouse, even if the cursor is invisible. This allows the screen reading software to detect the mouse position when customized highlighting or focusing techniques are in use. &lt;br /&gt;
* Use consistent and predictable screen and dialog layouts. &lt;br /&gt;
* Avoid the use of &amp;quot;help&amp;quot; balloons that disappear whenever the hot spot or focus of the mouse changes. Try instead to lock the &amp;quot;help&amp;quot; balloon in place so that the user can move the cursor and continue to read the balloon. &lt;br /&gt;
* Use single column text whenever possible. &lt;br /&gt;
* Provide keyboard equivalents for all tools, menus, and dialog boxes. &lt;br /&gt;
* Ensure that links can be understood out of context, screen-readers can display a list of links to speed up navigation. For example, avoid &amp;quot;more ...&amp;quot; use &amp;quot;more about x&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Since screen readers can only read text (or give names to separately identifiable icons or tools), it is a good idea to: &lt;br /&gt;
* Avoid assigning unlabeled &amp;quot;hot spots&amp;quot; to pictures for use as controls, unless they are duplicated with menu selections. &lt;br /&gt;
* Avoid non-text menu items when possible or at least incorporate visible or invisible text cues to accompany these items. Screen readers can see text even if that text is written to the screen invisibly. &lt;br /&gt;
* Avoid graphic tool bars that are not duplicated. Make any tool bar command available in a menu. &lt;br /&gt;
Finally, documentation and training materials are always more accessible when: &lt;br /&gt;
* Documentation and online help can be understood independent of graphics. Text descriptions should stand on their own. &lt;br /&gt;
* Synchronized audio descriptions are available to play alongside animated graphics or movies.&lt;br /&gt;
&lt;br /&gt;
===== Screen-magnifiers ===== &lt;br /&gt;
Screen-magnifiers are software solutions for users with low-vision. These products allow the user to enlarge the size of images and text displayed on screen. Screen-magnifiers may also permit the user to change the default colours of the display. For example, reversing the colours and blacks of the video signal can make the text more readable for some users.&lt;br /&gt;
&lt;br /&gt;
Compatibility between screen-magnifiers and software can be an issue for developers. Typical screen magnifiers track the cursor or the active region of the screen and will automatically enlarge that portion of the display. Applications that use a custom cursor design may cause the magnifier to enlarge the wrong portion of the screen. Developers can avoid this problem by relying on standard interface practices, particularly those that apply to cursor control and display.  Other compatibility issues include:&lt;br /&gt;
* Managing simultaneous events on a screen – the screen magnifier will only display a small portion of the screen at one time.  Hence avoid need to simultaneously monitor two or more events occurring far apart from each other on the screen&lt;br /&gt;
* Use the system pointers whenever possible, as well as the system caret or insertion bar, if available. &lt;br /&gt;
* Include a highlight or focus indicator when dragging the system cursor, even at those times when the cursor is invisible. This adjustment will help screen enlargement software using &amp;quot;pan and zoom&amp;quot; features to track the user&#039;s movements more accurately. &lt;br /&gt;
* Add support for a &amp;quot;high contrast&amp;quot; setting.&lt;br /&gt;
&lt;br /&gt;
===== Alternative keyboards and mice =====&lt;br /&gt;
There is a very wide range of alternative keyboards and mice or other pointing devices available to disabled users.  Most of these do not have any implications for the developer of web application or other because they are used as direct replacements (electronically speaking) for the standard keyboard and mouse. However some people use virtual keyboards.&lt;br /&gt;
* Managing simultaneous events on a screen may be a problem for people using virtual keyboards which display a simulation of a keyboard on the screen for selection using a limited input device, for example a foot switch. The issue is similar to that for screen magnifiers above). There is a need to avoid having to  monitor two or more simultaneous events occurring far apart from each other on the screen&lt;br /&gt;
* Avoid timed responses or when they cannot be avoided, lengthen the time allowed for a user to respond. Because some alternative keyboard users may be slow to type entries or navigate the screen&lt;br /&gt;
* Provide keyboard access to all toolbars, menus, and dialog boxes.&lt;br /&gt;
&lt;br /&gt;
===== Voice recognition software =====&lt;br /&gt;
* Generally, web applications and software that allow full access through keyboard commands are well suited for use with voice-recognition software.&lt;br /&gt;
* Ensure all windows with text editing functionality are accessible to voice recognition software (currently Moodle Editor for example is not fully accessible).&lt;br /&gt;
* Ensure all interface elements have appropriate alt-texts.  &lt;br /&gt;
* There are issues to address around how to make the alt-text to a button command or other interface element known to the users when it may not be appropriate to display this text on the interface element  (e.g. Expand/Collapse on Moodle blocks).  However, a workaround is for the Dragon user to say &#039;click image&#039; and then select from a list that is created by Dragon.  This assumes that the user is aware of this technique.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Evaluation ====&lt;br /&gt;
Evaluation, both by experts and with users, plays an essential role in ensuring the accessibility of any software development.  However well crafted and detailed, guidelines and specifications alone will never be sufficient to guarantee that widespread accessibility is achieved.  In drawing up this specification, accessibility experts at the Open University have tested most of the elements of Moodle with some key examples of assistive technology and applied their expert judgement and knowledge of the published guidelines and the needs and preferences of disabled users to determine where issues exist.  However they would fully advocate that this work should be supplemented by user testing. &lt;br /&gt;
 &lt;br /&gt;
There is a planed period of extensive usability and accessibility testing of Moodle with both disabled and non-disabled users at the Open University in the autumn of 2006.  It is hoped many of the issue of accessibility highlighted in this specification will have been addressed in subsequent releases of Moodle before then and thus there will be the opportunity to confirm or otherwise the effectiveness of the responses made to this specification.  Such end-user evaluations will doubtless surface new issues not covered in this specification which will need addressing at a later date.  But then to quote Martin Dougiamas: “Accessibility is a process”.&lt;br /&gt;
&lt;br /&gt;
==== Note on Accessibility in Open Source developments ====&lt;br /&gt;
Accessibility is used as a weapon by both sides in the Open Source vs. Propriety Software debate.  The water is very muddy here and it is not the purpose of this brief note to contribute to this debate.  However a few notes on the Pros and Cons of addressing the accessibility agenda in an Open Source context are given.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Pros:&#039;&#039;&#039;&lt;br /&gt;
* When a “customer” detects an accessibility problem in an OS application they can generally affect a fix more readily that they can with propriety software.&lt;br /&gt;
* A wide range of accessibility and developer expertise can usually be rapidly and effectively brought to bear on an accessibility issue.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Cons:&#039;&#039;&#039;&lt;br /&gt;
* The inherent attribute of OS development of making software publicly available in early versions so the “community” can contribute to its further development often means that products are released with accessibility poorly addressed. (This can happen with proprietary software too.)&lt;br /&gt;
* Key accessibility benefits follow from consistency of interface design and behaviour across an application.  With a more loosely co-ordinated and distributed team of developers contributing to an OS product there is a risk that this consistency is not achieved.   However this is not judged a fundamental challenge in OS developments but one to be addressed in their co-ordination.  Proprietary developments undertaken by large developer teams too can suffer from such inconsistencies.&lt;br /&gt;
* Where and OS development results in the rapid release of updated versions of the software, changes in interface design and behaviour can be more problematic for some disabled users as it may take them longer to discover and understand such changes. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Current Status Moodle Accessibility ===&lt;br /&gt;
==== Results from Initial OU Jan/Feb 2006 Evaluation ====&lt;br /&gt;
An initial test of the Open University&#039;s instantiation of Moodle a 1.6 development version was undertaken in January and February 2006. The tests were confined to the Moodle modules and blocks that were then planned for the May 2006 release of OU Moodle course sites: &lt;br /&gt;
* Modules: Resource page, quiz, forum. &lt;br /&gt;
* Blocks: Course summary, latest news. &lt;br /&gt;
Note, the calendar block and page were not to be used and therefore were not tested. &lt;br /&gt;
These tests were undertaken with IE6, Jaws 7 (screen-reader), ZoomText 8.1 (screen-magnifier), Dragon 7 (voice recognition software), and various browser and operating system settings. &lt;br /&gt;
&lt;br /&gt;
A summary of the results from this evaluation are included here.  Many issues raised in this evaluation were addressed prior to the release of Moodle v. 1.6.  So the issue reported here are principally the ones yet to be resolved.&lt;br /&gt;
&lt;br /&gt;
Positive aspects with regard to accessibility in Moodle from this evaluation were:&lt;br /&gt;
* Most aspects are keyboard only accessible (exceptions are text editors and automated drop down menu selections).&lt;br /&gt;
* Site inherits users’ Windows settings for colour and font size, e.g. ‘Windows High Contrast Large’.&lt;br /&gt;
* Mini calendar is marked up with table headers.&lt;br /&gt;
* Calendar days of week marked up as table headers.&lt;br /&gt;
* Forms appear to be (mostly) marked up correctly.&lt;br /&gt;
&lt;br /&gt;
===== Responses to date =====&lt;br /&gt;
A proposal to fix accessibility problems identified in the Jan/Feb 2006 evaluation was posted to the Moodle forums as, [http://moodle.org/mod/forum/discuss.php?d=40484 RFC - Accessibility Proposal]. Following discussion, changes were made by OU developers to code in the Moodle CVS repository on Sourceforge.&lt;br /&gt;
&lt;br /&gt;
With limited resources, most work was done on the core Moodle code and style sheets for the Standard theme. The changes included adding and improving ALT text for significant images; removing tables, improving heading and list mark-up for Moodle side blocks; developing a new &#039;weekscss&#039; course format which just uses style-sheets for layout, not tables; and improving colour contrast and non-visual cues in the calendar block and page.&lt;br /&gt;
&lt;br /&gt;
===== Outstanding issues =====&lt;br /&gt;
&lt;br /&gt;
====== General/global issues ======&lt;br /&gt;
&lt;br /&gt;
Outstanding issues:&lt;br /&gt;
# Headings - check all text that acts as a heading, e.g. ‘general news and announcements’ in news forum and ‘study week x’ on course home pages.  Screenreader users can use headings to navigate around the page. &#039;&#039;&#039;P2&#039;&#039;&#039;&lt;br /&gt;
# Tables are used for layout. Suggest: investigate use of CSS for some if not all layout (it is acknowledged that this is not a perfect science). About 80% complete on main pages seen by students... Outstanding including, Moodle bug tracker 4943 &amp;quot;print_simple_box behaviour changed&amp;quot; Moodle 1.7. &#039;&#039;&#039;P2&#039;&#039;&#039;&lt;br /&gt;
# There are no ‘skip to content’ or ‘skip navigation’ links. These enable screenreader users and keyboard only users to jump over navigation links.  Suggest these links are provided on every page, and are invisible until the user tabs to them. Implemented for OU theme, outstanding for generic Moodle (difficult to guarantee the destination ID). [http://www.webaim.org/techniques/skipnav/ Useful discussion, including the IE focus bug]. &#039;&#039;&#039;P3&#039;&#039;&#039; (should be higher). &lt;br /&gt;
# The [http://moodle.org/help.php?file=accessibility.html generic accessibility help page] is in Moodle CVS. Outstanding: sitemap; help link still to be provided; the document seems too technical for the ‘average’ student.  Suggest it is re-written without the references to HTML tags, explain how skip links work, and to correct the info about accesskeys which are now provided.  (Good to see request for feedback.) &#039;&#039;&#039;P2&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
====== Page header ======&lt;br /&gt;
&lt;br /&gt;
Outstanding issues:&lt;br /&gt;
# Language drop down menu does not have a label which means users, particularly screenreader users, will not understand its purpose.  Suggest label such as ‘select preferred language’. &#039;&#039;&#039;P2&#039;&#039;&#039;&lt;br /&gt;
# Suggest the language codes be removed from the list, e.g. ‘en’ because they are not meaningful to most users.  The issue of screenreader access to different languages requires further consideration. &#039;&#039;&#039;Usability&#039;&#039;&#039;&lt;br /&gt;
# Drop down menu is not (easily) keyboard accessible: cannot use arrow keys to scroll through because first option is automatically selected.  (Can use ALT+down arrow to open list, but few students will know this.)  Suggest remove automation and provide a ‘go’ button or similar. &#039;&#039;&#039;P2&#039;&#039;&#039; (should be higher)  &lt;br /&gt;
# ‘»’ in breadcrumb trail is read by screenreader as “greater than greater than” or “double right angle bracket”.  Suggest replace with ‘/’ or ‘:’ or ‘-‘, or with a graphic of an arrow with the alt text ‘/’ or ‘:’ or similar. Fixed, with image (incidental image, no ALT text), and list; &amp;quot;bullet&amp;quot; be vocalised. I’m not sure this is an ideal solution. &#039;&#039;&#039;Medium&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
====== Login page ======&lt;br /&gt;
&lt;br /&gt;
Outstanding issues:&lt;br /&gt;
* The automatic placing of the cursor in the ‘username’ field is useful for sighted users (including dyslexic, partially sighted, hearing impaired etc) who will see that it is there, but for screenreaders this can be difficult because the screenreader focus does not start at the top of the page and will miss any instructional text such as ‘Login here using your username and password’.  It is difficult to know how to resolve this conflict of needs and so this requires further consideration. &#039;&#039;&#039;Medium&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
====== Edit profile page ======&lt;br /&gt;
&lt;br /&gt;
Outstanding issues:&lt;br /&gt;
# The ‘new picture’ field is not marked up correctly so that the label is not read by a screenreader. &#039;&#039;&#039;P2&#039;&#039;&#039;	&lt;br /&gt;
# Suggest users are encouraged to provide a brief description of their image to convey the same message as the image, and include this as ALT text for the image. Alternative, suggest that on the Show/ Edit profile page ALT text is auto-generated; &amp;quot;User image, none supplied&amp;quot; or &amp;quot;User image for [NAME]&amp;quot; as applicable. &#039;&#039;&#039;Low&#039;&#039;&#039; &lt;br /&gt;
# In some drop down boxes the default item is last in the list when it would be expected to be the first item, so when down arrow it seems that there are no other options.  Suggest default item is first in the list. &#039;&#039;&#039;Usability&#039;&#039;&#039;  &lt;br /&gt;
# The purpose of the ‘description’ field is not clear.  If it is for user to provide a description of themselves, suggest ‘description of me’ or similar. &#039;&#039;&#039;Usability&#039;&#039;&#039;  &lt;br /&gt;
# Ideally the question mark icon should appear before the editor, otherwise a screenreader has to tab through some of the editor controls before getting to the help button. Suggest it is placed between the field label and the start of the editor. &#039;&#039;&#039;P3&#039;&#039;&#039; (should be higher)  &lt;br /&gt;
# Text that appears after an edit field (or other form control) will not be read by a screenreader (due to a limitation in screenreaders).  Suggest all such text (‘for the teacher only’ and ‘max size 2MB’ is moved to the end of the label for the field, e.g. “ID number (for the teacher only)”. &#039;&#039;&#039;P2&#039;&#039;&#039;	&lt;br /&gt;
# Screenreader users are unlikely to continue reading further than the first ‘update profile’ button because they are likely to think this is the end of the page, and will therefore not be aware of the optional items below.  Furthermore the text ‘The following items are optional:’ is not marked up as part of the form and so will not be read by a screenreader (screenreader will move from first ‘update profile’ button to ‘new picture’ field).  Suggest alternative designs are explored so that there is just one ‘update’ button and optional fields are labelled individually as such. &#039;&#039;&#039;Usability&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Further issue&lt;br /&gt;
* Dragon does not recognise the &#039;browse&#039; button, either when say &amp;quot;click browse&amp;quot; or &amp;quot;click button&amp;quot;.  This may be because the button does not have it&#039;s own label because it is part of the &#039;file&#039; form control.  Dragon users can access the field by saying &amp;quot;type text&amp;quot; but may not know to do this.  Suggest if possible provide an explicit label for the button.  &#039;&#039;May require further investigation/testing&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
====== Course weekly view ======&lt;br /&gt;
&lt;br /&gt;
Outstanding issues, &#039;weeks&#039; course format:&lt;br /&gt;
# Search button has ‘&amp;gt;’ label, spoken as &amp;quot;greater than&amp;quot;.  Suggest change to ‘go’, ‘search’ or similar. Fixed, with resizable image of &#039;&amp;gt;&#039; (may need work), and text hidden from graphical browsers. &#039;&#039;&#039;P1&#039;&#039;&#039;&lt;br /&gt;
# Having left hand and right hand menus may be difficult for screenreaders because they come both before and after the main content of the page.  This requires further consideration as to how to make it useful for sighted and blind users alike. &#039;&#039;&#039;P3&#039;&#039;&#039; (should be higher)  &lt;br /&gt;
&lt;br /&gt;
====== My courses view ======&lt;br /&gt;
&lt;br /&gt;
Outstanding issues:&lt;br /&gt;
# The user’s image and the text link both go to the same destination but are separate links.  Suggest remove the link from the picture, or combine the image and text link in the same link. &#039;&#039;&#039;P2&#039;&#039;&#039;	&lt;br /&gt;
# Suggest mark up list as a list. &#039;&#039;&#039;P2&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
====== All courses list ======&lt;br /&gt;
&lt;br /&gt;
Outstanding issues:&lt;br /&gt;
# Suggest drop down menu is labelled “choose a course category” rather than just “course categories” so that the control is more meaningful. &#039;&#039;&#039;P2&#039;&#039;&#039;	&lt;br /&gt;
# Suggest mark up as list. &#039;&#039;&#039;P2&#039;&#039;&#039;&lt;br /&gt;
# Enrolment key icon: suggest the label for this is reduced to “course requires enrolment key” or “enrolment key required” rather than “this course requires an enrolment key” to reduce the number of syllables read by a screenreader, particularly is many courses are likely to require this. &#039;&#039;&#039;Low&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Global Issues from June 2006 OU Evaluation ====&lt;br /&gt;
The issues listed in this section and the subsequent section entitled [[#Issues with different Moodle components]] were discovered in the June 2006 evaluation of accessibility issues in Moodle undertaken at the OU specifically to inform this specification.  This testing was undertaken with only Jaws 7 (screen-reader) and Internet Explorer 6 as explained under [[#Scope]].&lt;br /&gt;
&lt;br /&gt;
Note on roles: accessibility issues apply whether it is material only available to students, or other material available to administrators/teachers/course creators.&lt;br /&gt;
&lt;br /&gt;
* do not rely on the title attribute to convey information to screen-readers because this is not read under default screen-reader settings. &#039;&#039;&#039;High.&#039;&#039;&#039;&lt;br /&gt;
* provide &#039;skip to content&#039; links on all pages that link from the very top of the page to the start of the content of the page. &#039;&#039;&#039;P3 (ideally should be P2).&#039;&#039;&#039;&lt;br /&gt;
* ensure styles allow a visual indication of the browser focus: in IE the indication of the focus is not visible, e.g. on tabbed panes, the breadcrumb trail, etc. &#039;&#039;&#039;High.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===== Lists =====&lt;br /&gt;
Mark up lists of items as HTML lists, e.g. alphabetical list in glossary. &#039;&#039;&#039;P2.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===== Tabs (tabbed panes) =====&lt;br /&gt;
E.g. in glossary and user profile.&lt;br /&gt;
* ensure title of tab is marked up as heading, or add a heading in tab. &#039;&#039;&#039;P2.&#039;&#039;&#039;&lt;br /&gt;
* remove link from current tab, e.g. in database when &#039;view list&#039; tab is selected, remove link from &#039;view link&#039;. &#039;&#039;&#039;Low.&#039;&#039;&#039;&lt;br /&gt;
* Ensure that tabs wrap when the window is resized so that users do not have to scroll horizontally.  &#039;&#039;&#039;Medium&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===== Use of Colours =====&lt;br /&gt;
* use colours with good contrast between background and foreground. &#039;&#039;&#039;P3 (ideally should be P1).&#039;&#039;&#039;&lt;br /&gt;
* ensure information conveyed with colour also conveyed is alternative way. &#039;&#039;&#039;P1&#039;&#039;&#039;&lt;br /&gt;
* new themes should not break existing fixes regarding colour&lt;br /&gt;
* tools for checking colour contrast are available: &lt;br /&gt;
** Colour Contrast Check.  Allows you to specify a foreground and a background colour using sliders and determine if they provide enough contrast. http://www.snook.ca/technical/colour_contrast/colour.html&lt;br /&gt;
** Juicy Studio Colour contrast analyser. Online tool which analyses the colours you want to use for text and background (using hexadecimal format) and tells you whether they have sufficient contrast with each other. http://www.juicystudio.com/services/colourcontrast.asp&lt;br /&gt;
** Juicy Studio Luminosity Contrast Ratio Analyser. Online tool which analyses the luminosity of colours to help developers ensure they have sufficient contrast. http://juicystudio.com/services/luminositycontrastratio.php&lt;br /&gt;
** NILS Colour contrast analyser. Tool which includes colour picker feature to pick the colours from an existing web page and analyse their contrast. http://www.nils.org.au/ais/web/resources/contrast_analyser/index.html&lt;br /&gt;
&lt;br /&gt;
===== Links =====&lt;br /&gt;
Ensure all link text is meaningful when read out of context, e.g. &#039;special&#039; and &#039;all&#039; in Glossary would be more meaningful as &#039;non-alphabetic entries&#039; and &#039;all entries&#039;. &#039;&#039;&#039;P2 (perhaps should be P1)&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===== Form Elements =====&lt;br /&gt;
* remove automation from drop down menus, e.g. glossary &#039;all categories&#039; as they are not controllable with the keyboard only, and provide a &#039;go&#039; button or similar to operate the control. &#039;&#039;&#039;P2 (ideally should be P1).&#039;&#039;&#039;&lt;br /&gt;
* &#039;jump to&#039; menu: replace &#039;&amp;lt;&#039; and &#039;&amp;gt;&#039; with labels such as &#039;previous section&#039; and &#039;next section&#039; or similar. &#039;&#039;&#039;High.&#039;&#039;&#039;&lt;br /&gt;
* do not use colour alone for indication of errors - refer to global issues on colour. &#039;&#039;&#039;P1.&#039;&#039;&#039;&lt;br /&gt;
* ensure all forms contain HTML mark-up for labels of controls - do not rely on just providing a text label - ensure labels are explicitly associated with controls (&#039;label&#039; and &#039;for&#039; tags). &#039;&#039;&#039;P2 (ideally should be P1)&#039;&#039;&#039;.&lt;br /&gt;
* consider the use of &#039;fielset&#039; and &#039;legend&#039; tags to group controls together.  There is differing advice about how these tags should be used and so examples need to be implemented and tested: &#039;&#039;requires further investigation&#039;&#039;.  &#039;&#039;&#039;High&#039;&#039;&#039;.&lt;br /&gt;
* place information before controls so that screen-reader reads it before reading the control, e.g. on &#039;add glossary term&#039; form place &#039;max size&#039; before upload edit field: &amp;quot;attachment (optional, max size xxkb), help button, file input field, browse button&amp;quot;. &#039;&#039;&#039;High.&#039;&#039;&#039;&lt;br /&gt;
* remove alt text from radio buttons and checkboxes as they are not necessary and are read by screen-readers as well as the text associated with the control. &#039;&#039;&#039;Medium&#039;&#039;&#039;.&lt;br /&gt;
* Best practice with horizontal radio buttons &#039;&#039;needs to be further investigated&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===== Images =====&lt;br /&gt;
* all images that convey information should have alt text to convey that information (do not rely on &amp;lt;title&amp;gt; for this because it is not read by default by screen-readers). &#039;&#039;&#039;P1.&#039;&#039;&#039;&lt;br /&gt;
* all images that are decorative and do not convey information should have null alt text, i.e. alt=&amp;quot;&amp;quot;. &#039;&#039;&#039;Medium.&#039;&#039;&#039;&lt;br /&gt;
* help icons should have alt text that indicates the content of the Help link.  &amp;quot;Help with xyz&amp;quot; would be preferable to &amp;quot;Help, xyz&amp;quot; because for screen-readers the comma within the latter causes the screen-reader to pause making &amp;quot;help&amp;quot; and &amp;quot;xyz&amp;quot; sound like separate items. &#039;&#039;&#039;High.&#039;&#039;&#039;&lt;br /&gt;
* in forums users&#039; images have null alt text but Jaws still reads the filename associated with it.  This may be because it is an image link. Perhaps the link could be removed as there is the same link from the person&#039;s name. &#039;&#039;This requires further investigation&#039;&#039;. &#039;&#039;&#039;Medium&#039;&#039;&#039;.&lt;br /&gt;
* There is a question as to whether users&#039; images should have meaningful alt text that conveys the content of the image, in particular when people use images of e.g. their pet or baby or some other icon.  These images help to build a sense of community and convey something about the person which should perhaps be conveyed to blind users. &#039;&#039;This requires further consideration and discussion.&#039;&#039; &#039;&#039;&#039;P1&#039;&#039;&#039;.&lt;br /&gt;
* where icons are used to indicate the type of resource or the destination of a link this needs to be conveyed to screen-reader users in the link text.  E.g. &amp;lt;pdf icon&amp;gt; &amp;lt;link: interesting article (PDF)&amp;gt;. (It is not necessary to add anything when it is clear from the text link, e.g. &amp;quot;news forum&amp;quot;.) &#039;&#039;&#039;P1.&#039;&#039;&#039; Note it is not sufficient to just add alt text to these icons to convey this information because when screen-readers create a list of links the images will not be included and so the information will not be available in that context.&lt;br /&gt;
* it can be useful when image links and text links are used together to the same destination to combine them into the same link as suggested on the [http://trace.wisc.edu/wcag_wiki/index.php?title=Combining_adjacent_image_and_text_links_for_the_same_resource WCAG-wiki], e.g. from wiki: &amp;lt;a href=&amp;quot;products.html&amp;quot;&amp;gt;  &amp;lt;img src=&amp;quot;icon.gif&amp;quot; alt=&amp;quot;&amp;quot; /&amp;gt;Products page&amp;lt;/a&amp;gt;.  This creates one &#039;clickable&#039; area for mouse users and just one link is read by screen-readers.  Example is list of online users: the image and text links are separate but could be combined. &#039;&#039;&#039;Medium.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===== Headings ===== &lt;br /&gt;
* ensure all headings are marked-up as HTML headings, and nest them appropriately, e.g. H1, H2, H3 etc. &#039;&#039;&#039;P2.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===== Scripting =====&lt;br /&gt;
All user interfaces and functions created or provided via scripting should be made accessible. &#039;&#039;&#039;High&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===== Layout =====&lt;br /&gt;
Use stylesheets for layout instead of tables. &#039;&#039;&#039;P2&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===== Pop-up windows =====&lt;br /&gt;
* pop-up windows can cause difficulties for all users, including those who have pop-ups blocked in their browser, but particularly visually impaired people (both blind and partially sighted): newer screen-readers announce when a new window opens, but older screen-readers do not, and screen magnifier users may not notice that a new window has opened.  WCAG 1.0 says users should be warned in the link text that a new window will open ([http://www.w3.org/TR/WAI-WEBCONTENT/#gl-interim-accessibility checkpoint 10.1, Priority 2]) (e.g. link: &amp;quot;messages: opens new window&amp;quot;) but this practice can become cumbersome if it needs to be applied to many links.  It therefore may be preferable in the long term to offer users a global setting for pop-ups to prevent or allow them. &#039;&#039;This requires further consideration&#039;&#039;. &#039;&#039;&#039;P2&#039;&#039;&#039;.&lt;br /&gt;
===== Language =====&lt;br /&gt;
* changes in language should be marked up appropriately, especially e.g. in language teaching.  This will allow screenreaders to switch languages accordingly and speak with the correct pronunciation. &#039;&#039;&#039;P1&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===== Tables =====&lt;br /&gt;
* ensure all table headers are marked up with &#039;th&#039;. &#039;&#039;&#039;P1&#039;&#039;&#039;.&lt;br /&gt;
* do not use &#039;th&#039; just to create bold text in a table if it is not a header (use &#039;strong&#039; instead). &#039;&#039;&#039;Medium&#039;&#039;&#039;.&lt;br /&gt;
* where possible avoid headers that span more than one column/row. &#039;&#039;&#039;Medium&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===== Note on Accesskeys =====&lt;br /&gt;
WCAG 1.0 recommends providing keyboard shortcuts to important links using the Accesskey tag (Checkpoint 9.5, priority 3), which moves the browser focus to the link so that the user can then select it. A number of implementation problems have been identified, which are summarised in the following articles.  The main problem is that there are so many keys reserved by browsers and assistive technologies (particularly screenreaders) that there are few keys available for use with Accesskey, and these would not be at all intuitive.&lt;br /&gt;
&lt;br /&gt;
* [http://www.wats.ca/show.php?contentid=32 Using Accesskeys - Is it worth it?] &lt;br /&gt;
* [http://www.wats.ca/show.php?contentid=43 Accesskeys and Reserved Keystroke Combinations]&lt;br /&gt;
&lt;br /&gt;
The draft specification for XHTML 2.0 includes a different approach for keyboard shortcuts - see: http://www.w3.org/TR/2005/WD-xhtml2-20050527/mod-role.html#s_rolemodule&lt;br /&gt;
&lt;br /&gt;
It is therefore recommended that Moodle does not adopt Accesskeys until alternative methods are established.&lt;br /&gt;
&lt;br /&gt;
===== Scrolling via voice recognition =====&lt;br /&gt;
Moodle pages do not respond to the Dragon command to scroll down.  This command works on other web sites, but it is not clear if something is preventing it in Moodle.  &#039;&#039;This requires further investigation&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== Issues with different Moodle components ====&lt;br /&gt;
&lt;br /&gt;
===== Core components =====&lt;br /&gt;
&lt;br /&gt;
====== User account ======&lt;br /&gt;
* user (including student) creates an account; logs in.&lt;br /&gt;
* user edits their profile.&lt;br /&gt;
* refer to global issues on forms and editor.&lt;br /&gt;
&lt;br /&gt;
====== Jump-to menu ======&lt;br /&gt;
Tested on Moodle Features.&lt;br /&gt;
* refer to global issues on forms&lt;br /&gt;
* ensure drop down menu and buttons have HTML labels. &#039;&#039;&#039;P2&#039;&#039;&#039;&lt;br /&gt;
* provide meaningful labels to replace &#039;&amp;lt;&#039; and &#039;&amp;gt;&#039;. &#039;&#039;&#039;P2, ideally should be P1&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
====== Language menu ======&lt;br /&gt;
* requires admin configuration.&lt;br /&gt;
* refer to global issues on forms.&lt;br /&gt;
* ensure drop down menu and buttons have HTML labels. &#039;&#039;&#039;P2&#039;&#039;&#039;.&lt;br /&gt;
* changes in language should be marked up appropriately, especially e.g. in language teaching.  This will allow screenreaders to switch languages accordingly and speak with the correct pronunciation. &#039;&#039;&#039;P1&#039;&#039;&#039;.&lt;br /&gt;
* remove language codes, e.g. &#039;en&#039;, &#039;fa&#039;, &#039;fr&#039; from menu items because not meaningful to users and not read in useful way by screenreaders. &#039;&#039;&#039;Medium&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
====== Help (for both students and course authors) ======&lt;br /&gt;
* refer to global issues on images (for &#039;question mark&#039; logo), and on pop-up windows.&lt;br /&gt;
* new &#039;Moodle Docs for this page&#039; links in page footer (not student-facing).&lt;br /&gt;
* mark up headings in help pages as HTML headings. &#039;&#039;&#039;P2&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
====== Error messages in form processing ======&lt;br /&gt;
* refer to issues on colour&lt;br /&gt;
* provide meaningful heading, e.g. &#039;error in xyz&#039;. &#039;&#039;&#039;P2&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
====== Site/course administration ======&lt;br /&gt;
Not tested as not student facing.&lt;br /&gt;
* installation, upgrade, maintenance.&lt;br /&gt;
* module, block, filter, language configuration.&lt;br /&gt;
&lt;br /&gt;
====== Skip block links ======&lt;br /&gt;
Tested on Moodle Features.&lt;br /&gt;
These links are provided because when blocks are collapsed screenreaders still read them even though they are not visible.&lt;br /&gt;
* these links need to include the name of the block they are skipping, rather than the block number, e.g. &amp;quot;skip messages block&amp;quot;. &#039;&#039;&#039;P2&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
====== Expand/collapse block buttons ======&lt;br /&gt;
* See issues on colour.&lt;br /&gt;
* These buttons are not visible under Windows High Contrast Black settings.  Need to ensure that these are visible under all settings.  &#039;&#039;&#039;High&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===== Misc / Library elements =====&lt;br /&gt;
====== Editors ======&lt;br /&gt;
Tested on early OU Moodle instantiation [[#Vledemo]].&lt;br /&gt;
&lt;br /&gt;
These are the [[#Outstanding issues]] for the &#039;&#039;HTMLArea&#039;&#039; editor (3rd party):&lt;br /&gt;
* Editor toolbar is not fully keyboard accessible: the three drop-down menus are in the tab order, but the other buttons are not.  Standard keyboard shortcuts are available (ctrl+b, ctrl+i, ctrl+u etc) but users are not informed of this.  There are not shortcuts for all buttons, e.g. create link, insert image etc. NOTE: the editor can be configured/ disabled on a per-user/ site-wide basis.  &#039;&#039;&#039;P1&#039;&#039;&#039;&lt;br /&gt;
* Dragon can dictate into the editor, and can &#039;tab&#039; out of it, but it cannot operate the toolbar.&lt;br /&gt;
* Jaws announces the editor as “Untitled 1 frame edit”.  Suggest if possible add a meaningful label for this. &#039;&#039;&#039;Medium&#039;&#039;&#039;  &lt;br /&gt;
* The purpose of the links at the bottom of the editor made of the HTML codes is not clear.  However they are within the tab order of the page and would be indicated as links to a screenreader and would not be meaningful.  Suggest these could be hidden from all users to reduce complexity. &#039;&#039;&#039;P2&#039;&#039;&#039;.&lt;br /&gt;
* The drop down menus do not have explicit labels.  Suggest they are labelled ‘font’, ‘font size’ ‘style’ etc.  &#039;&#039;&#039;P2&#039;&#039;&#039;	&lt;br /&gt;
* The default state of the 3rd drop down is blank.  Suggest ‘normal’ is displayed by default. &#039;&#039;&#039;Low&#039;&#039;&#039;&lt;br /&gt;
* Access to the editor for keyboard only users, screenreader users and Dragon users requires further consideration.  The W3C’s [http://www.w3.org/TR/ATAG10 Authoring Tool Accessibility Guidelines] may be useful here. &#039;&#039;&#039;High&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
* Accessibility/usability of &#039;&#039;TinyMCE editor&#039;&#039; - UNKNOWN (not integrated for Moodle 1.6). &lt;br /&gt;
* Essential: keyboard and screen-reader accessibility.&lt;br /&gt;
&lt;br /&gt;
====== Main calendar ======&lt;br /&gt;
Tested on early OU Moodle instantiation. &lt;br /&gt;
&lt;br /&gt;
[issues to be copied from report] &lt;br /&gt;
* refer to global issues on colour, meaningful links, headings&lt;br /&gt;
* keep table mark-up, and use appropriate table header mark-up.&lt;br /&gt;
* note new fixes regarding colour&lt;br /&gt;
&lt;br /&gt;
===== Modules (/mod) =====&lt;br /&gt;
&lt;br /&gt;
====== Blog ======&lt;br /&gt;
* no blog available so not tested at this stage.&lt;br /&gt;
* generic issues with blogs: &lt;br /&gt;
** screen-reader management of information; &lt;br /&gt;
** need to develop support information for students &lt;br /&gt;
** text-based and so therefore should be technically accessible, as long as headings and meaningful link text used.&lt;br /&gt;
&lt;br /&gt;
====== quiz ====== &lt;br /&gt;
Known issues (prior to June 06 testing):&lt;br /&gt;
* refer to generic issues regarding forms, layout and headings.&lt;br /&gt;
* ensure all form controls have explicit HTML labels. &#039;&#039;&#039;P2, ideally should be P1&#039;&#039;&#039;.&lt;br /&gt;
* avoid the use of colour on its own to indicate the correct answer, because this information is not available to screenreader users.  Provide the equivalent information in the form of text and/or icons. &#039;&#039;&#039;P1&#039;&#039;&#039;.&lt;br /&gt;
* ensure layout allows appropriate wrapping when feedback is displayed. &#039;&#039;&#039;Usability&#039;&#039;&#039;.&lt;br /&gt;
* &#039;fill in the gap&#039; questions are difficult for screenreaders when the gap is in the middle of a sentence because in &#039;forms mode&#039; it may not read beyond the gap.  There is no technical solution to this so screenreader users may need guidance and support on how best to deal with this type of question. &#039;&#039;&#039;High&#039;&#039;&#039;.&lt;br /&gt;
* allow any time limits that are set to be overridden where appropriate (roles issue?). &#039;&#039;&#039;High&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
June 06 testing:&lt;br /&gt;
&lt;br /&gt;
Three types of question interface were tested as this is what was available at the OU: radio buttons, text edit fields and &#039;fill in the gap&#039;.  Tested on course &#039;GM001&#039; with Jaws 7.&lt;br /&gt;
&lt;br /&gt;
======= Vertical radio buttons (‘Introduction’ quiz) =======&lt;br /&gt;
* Non forms mode: reads fine, but RBs in a 3-column table (only 1 column needed)&lt;br /&gt;
* Forms mode: reads fine, but don’t need forms mode to select a RB with space.&lt;br /&gt;
&lt;br /&gt;
======= Horizontal radio buttons (‘Introduction’ quiz) =======&lt;br /&gt;
* Non forms mode: reads fine&lt;br /&gt;
* Forms mode: reads fine, but don’t need forms mode to select a RB.&lt;br /&gt;
&lt;br /&gt;
======= Edit field (‘Introduction’ quiz) =======&lt;br /&gt;
* Non forms mode: reads fine&lt;br /&gt;
* Forms mode: need forms mode to enter answer. &lt;br /&gt;
* When tab out of field get straight to next form control (the answer field to the next question) and just reads ‘answer:’ without reading the question.  Therefore need to mark up the whole question with &amp;lt;label&amp;gt; and &amp;lt;for&amp;gt; tags to make sure it is associated with the edit field. &#039;&#039;&#039;P2, ideally should be P1&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
======= Answer page for radio buttons and edit fields ======= &lt;br /&gt;
* Gives correct statement, followed by “correct answer: *xyz* ” followed by “incorrect”.  Suggest this is reduced to “incorrect: the correct answer is: xyz” (without asterisks). &#039;&#039;&#039;Usability&#039;&#039;&#039;.&lt;br /&gt;
* ‘incorrect’ is read almost last – needs to be said first. &#039;&#039;&#039;High&#039;&#039;&#039;.&lt;br /&gt;
* The feedback provided on vertical radio buttons is often squashed into the narrow right hand column.  Suggest allowing this text to use a proportionate space. &#039;&#039;&#039;Usability&#039;&#039;&#039;.&lt;br /&gt;
* There is no structural indication that this text is feedback.  Suggest include a heading or text to indicate this, e.g. “feedback” or similar. &#039;&#039;&#039;Medium&#039;&#039;&#039;.&lt;br /&gt;
* There is no non-visual equivalent to the green highlight on correct answers.  Suggest consider icons such as red crosses and green ticks (with appropriate alt text: ‘incorrect’ and ‘correct’) to indicate wrong and right answers, or some other indication of the correct answers, e.g. an asterisk. &#039;&#039;&#039;P1&#039;&#039;&#039;.&lt;br /&gt;
* There seems no need to include “marks x” if also include “marks for this submission: x/y”.  Suggest replace with “marks for this question: x out of y” or similar (‘submission’ does not seem a meaningful term in this context). &#039;&#039;&#039;Usability&#039;&#039;&#039;.&lt;br /&gt;
* (Note the green highlight used here (#AAFFAA) has sufficient contrast with the black text.)&lt;br /&gt;
&lt;br /&gt;
======= Fill in the gap (‘Doing systems integration’ quiz) =======&lt;br /&gt;
* Non forms mode: reads fine – just says ‘edit’ at each field.&lt;br /&gt;
* Need forms mode to enter text.  Jaws reads the text since the last edit field with each edit field (and this could be a whole paragraph), but does not read beyond the edit field, so with examples such as “She details a number of &amp;lt;edit field&amp;gt; procedure calls…” the user does not know what the ‘number of’ refers to because ‘procedure calls’ is not read because it is not seen by the screenreader as belonging to that edit field.  As there is no technical solution &#039;&#039;this requires further consideration&#039;&#039; see next section. &#039;&#039;&#039;High&#039;&#039;&#039;.&lt;br /&gt;
* Suggest change ‘submit all and finish’ to ‘submit answers’ or similar. &#039;&#039;&#039;P2&#039;&#039;&#039;.&lt;br /&gt;
* Suggest dialogue box gives instructions for how to save answers if don’t want to submit them now. &#039;&#039;&#039;Usability&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
======= Fill in the gap answer page =======&lt;br /&gt;
* The function of the ‘continue’ button is not clear: suggest re-label. &#039;&#039;&#039;P2&#039;&#039;&#039;.&lt;br /&gt;
* Keyboard-only users cannot access feedback because it is only available via mouseovers.  It is possible to move the cursor using ‘MouseKeys’ but this is a laborious process.  In addition Dragon cannot easily reveal the feedback: the only way is to use voice commands to move the mouse pointer, but this is labourious. Need to find a Dragon/keyboard accessible way of providing feedback - &#039;&#039;needs further consideration&#039;&#039;. &#039;&#039;&#039;High&#039;&#039;&#039;.&lt;br /&gt;
* There is no non-visual equivalent of the red and green highlights - need to provide an equivalent via text or icon with alt text. &#039;&#039;&#039;P1&#039;&#039;&#039;.&lt;br /&gt;
* Screenreader users cannot access the feedback.  It is possible to operate the mouse cursor with a screenreader but it is not an easy process and involves switching Jaws cursors, which means that when the mouseover window appears, Jaws cannot distinguish between it and the rest of the text on the page, and so reads them together.  It is difficult to suggest an elegant solution to this because there is not a problem with the design: it is a screenreader problem.  One option might be to provide &amp;lt;option&amp;gt; controls on incorrect answers and mark one option as ‘your answer: abc’ and the other option as ‘the correct answer: xyz’.  &#039;&#039;This issue requires development and testing of different prototype solutions.&#039;&#039; &#039;&#039;&#039;High&#039;&#039;&#039;. &lt;br /&gt;
** &#039;&#039;Update&#039;&#039;: Jaws has a function to read mouseovers, but this does not work with the example quiz question tested, and it is not known why.  There is an example that does work at http://www.freedomscientific.com/fs_products/Surfs_Up/MouseOver.htm which might offer guidance.&lt;br /&gt;
* According to the colour contrast analyser, there is insufficient contrast between the black text of the answers and the red (#FF0000) and green (#00FF00) backgrounds.  Suggest just place coloured highlight around the edit field, rather than as a background, or use a lighter green such as #80FF80 and red such as #FF8080. &#039;&#039;&#039;High&#039;&#039;&#039;.&lt;br /&gt;
* On subsequent attempts the correct answers that the student has entered should be retained so that they do not have to retype them – &#039;&#039;&#039;Usability&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
====== hotpot ======&lt;br /&gt;
Tested on Moodle [[#Features]] course.&lt;br /&gt;
* refer to global issues on forms&lt;br /&gt;
* remove list mark-up from question as it is not a list item (leave answers in a list). &#039;&#039;&#039;Low&#039;&#039;&#039;.&lt;br /&gt;
* buttons require meaningful labels, such as &amp;quot;previous question&amp;quot; and &amp;quot;next question&amp;quot;. &#039;&#039;&#039;P2&#039;&#039;&#039;.&lt;br /&gt;
* &amp;quot;1 / 22&amp;quot; would be more meaningful as &amp;quot;1 of 22&amp;quot; or &amp;quot;1 of 22 questions&amp;quot;. &#039;&#039;&#039;Low&#039;&#039;&#039;.&lt;br /&gt;
* place the answer button after the answer text so that it appears as &amp;quot;A. 10 times as much as the force... &amp;lt;answer button&amp;gt;. &#039;&#039;&#039;Usability&#039;&#039;&#039;.&lt;br /&gt;
* label answer buttons as &amp;quot;select answer A&amp;quot;, &amp;quot;select answer B&amp;quot; etc. &#039;&#039;&#039;P1&#039;&#039;&#039;.&lt;br /&gt;
* remove frames from hotpot pages.  If frames need to be kept for some reason provide meaningful and useful frame titles, such as &amp;quot;navigation&amp;quot; and &amp;quot;quiz&amp;quot;.  &#039;&#039;&#039;P1&#039;&#039;&#039;. Note: Screen-readers will announce the word &amp;quot;frame&amp;quot; so this does not need to be included in the frame title.&lt;br /&gt;
* remove invisible &amp;quot;OK&amp;quot; button: it is not visible but it is announced by Jaws, and does not seem to be necessary in this context. &#039;&#039;&#039;Medium&#039;&#039;&#039;.&lt;br /&gt;
* Dragon cannnot operate the &amp;lt;- and -&amp;gt; buttons, even with &amp;quot;click button&amp;quot; command.  It is assumed that this is because the buttons do not have text labels, but this &#039;&#039;requires further investigation&#039;&#039;. &#039;&#039;&#039;High&#039;&#039;&#039;.&lt;br /&gt;
** It is possible to operate the &#039;show all Qs&#039; button.&lt;br /&gt;
&lt;br /&gt;
====== forum ====== &lt;br /&gt;
Tested on moodle.org open social forum.&lt;br /&gt;
* refer to generic issues: images, lists, headings, links, forms, editor. - for all aspects of forums, including new topic and reply.&lt;br /&gt;
* suggest change &#039;next&#039; link to &#039;next page&#039; to ensure it is fully understood. &#039;&#039;&#039;P2.&#039;&#039;&#039;&lt;br /&gt;
* re-order the &#039;Everyone can choose to be subscribed&#039; text and the help button so that they are read in a meaningful order. &#039;&#039;&#039;Medium&#039;&#039;&#039;.&lt;br /&gt;
* Change the alt and title of the button from &amp;quot;Help, Everyone can choose to be subscribed&amp;quot; to &amp;quot;help with subscriptions&amp;quot; or similar so that it does not repeat the on-screen text. &#039;&#039;&#039;P1&#039;&#039;&#039;.&lt;br /&gt;
* mark up all message subjects as headings so that screen-readers can easily move from message to message. &#039;&#039;&#039;P2&#039;&#039;&#039;.&lt;br /&gt;
* the nesting of messages is not conveyed non-visually, although how to best do this &#039;&#039;requires further consideration&#039;&#039;. &#039;&#039;&#039;Medium&#039;&#039;&#039;.&lt;br /&gt;
* remove the automation from the drop down menu to choose how messages are displayed because it cannot be used with just the keyboard. &#039;&#039;&#039;P2, ideally should be P1.&#039;&#039;&#039;&lt;br /&gt;
* in list of topics, user images are in a separate column, which shares its heading with &#039;started by&#039; which spans two columns.  Suggest remove the images column and place the images ahead of users&#039; names.  This will reduce the number of columns to be navigated by a screen-reader and avoid having a column without its own header. &#039;&#039;&#039;Medium&#039;&#039;&#039;.&lt;br /&gt;
* within topics (nested and flat) each message is within its own table.  It may be best to place all messages within one table and provide table headers (Subject, sender, date) -  this &#039;&#039;requires further consideration&#039;&#039;. &#039;&#039;&#039;Medium&#039;&#039;&#039;.&lt;br /&gt;
* &#039;add a new discussion topic&#039; is a form submit button, although there is no form, and so does not appear in screen-reader list of links.  Suggest change to a text or button link. &#039;&#039;&#039;Low&#039;&#039;&#039;.&lt;br /&gt;
* &#039;reply&#039;: suggest remove list of links to other messages on same topic from this page as they are not necessary in this context and creates much extra reading for screen-readers, or place the &#039;reply&#039; section directly after the original message. &#039;&#039;&#039;Usability&#039;&#039;&#039;.&lt;br /&gt;
* provide label for &#039;display replies...&#039; menu, e.g. &#039;select layout of messages&#039; or similar. &#039;&#039;&#039;P2&#039;&#039;&#039;.&lt;br /&gt;
* provide label for &#039;rate&#039; menu, e.g. &#039;rate this message&#039;, and remove the first option &#039;rate...&#039; from the menu. &#039;&#039;&#039;P2&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
====== exercise ====== &lt;br /&gt;
* not checked - full example not yet available.&lt;br /&gt;
* refer to generic issues on forms, links, headings.&lt;br /&gt;
* authors need support in using in an accessible way.&lt;br /&gt;
&lt;br /&gt;
====== database ====== &lt;br /&gt;
Tested on [[#CT505]] and LTSECW courses.&lt;br /&gt;
* new in Moodle 1.6; can be used for student data entry.&lt;br /&gt;
* refer to global issues re tabs, editor, forms, images.&lt;br /&gt;
* refer to content authoring guidelines to support course authors in making database accessible&lt;br /&gt;
* retain meaningful names in field name entries, i.e. don&#039;t replace spaces in names with underscores. &#039;&#039;&#039;Medium&#039;&#039;&#039;.&lt;br /&gt;
* provide alt text for magnifying glass icon. &#039;&#039;&#039;P1&#039;&#039;&#039;.&lt;br /&gt;
* in table of entries mark up table headers, such as &#039;date found&#039;, &#039;name&#039; etc with &amp;lt;th&amp;gt; tag.  &#039;&#039;&#039;P1&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
====== workshop  ======&lt;br /&gt;
Tested on Moodle [[#Features]] course.&lt;br /&gt;
* a peer assessment activity module.&lt;br /&gt;
* need to support students in authoring accessible content for review by peers.&lt;br /&gt;
* refer to issues regarding [[#Editors]], forms, headings.&lt;br /&gt;
&lt;br /&gt;
====== label (adds text, headings) ======&lt;br /&gt;
No specific example tested.&lt;br /&gt;
* authors need support in using this in an accessible way.&lt;br /&gt;
&lt;br /&gt;
====== choice (a quick poll question) ======&lt;br /&gt;
Tested on Moodle Features.&lt;br /&gt;
* refer to global issues on forms (particularly labels)&lt;br /&gt;
* &#039;Anonymous choice&#039; and &#039;update anytime&#039;: present results in a table with table headings so that data can be associated with column headings by a screen-reader. &#039;&#039;&#039;P1&#039;&#039;&#039;.&lt;br /&gt;
*&#039;limited number of resources&#039;: include &#039;taken&#039; and &#039;limit&#039; in the results table so that screen-reader can associate them with the column headings. &#039;&#039;&#039;High&#039;&#039;&#039;.&lt;br /&gt;
* No issues found for Dragon or ZoomText.&lt;br /&gt;
&lt;br /&gt;
====== survey ======&lt;br /&gt;
Tested on Moodle Features. &lt;br /&gt;
* screen-readers cannot easily convey the layout of questions with two alternative beginnings, such as those at http://moodle.org/mod/survey/view.php?id=2332.  It may be best to avoid alternative beginnings and repeat each question with its alternative beginnings, and give each separate question a number. &#039;&#039;&#039;High&#039;&#039;&#039;.&lt;br /&gt;
* ensure submit buttons convey their function, e.g. &amp;quot;submit answers&amp;quot; is preferable to &amp;quot;click here to check and continue&amp;quot; which sees to imply that answers will be checked and that there are more questions to come. &#039;&#039;&#039;Usability&#039;&#039;&#039;.&lt;br /&gt;
* explicitly associate radio buttons with the relevant labels, e.g. &#039;almost never&#039; etc., using &amp;lt;label&amp;gt; and &amp;lt;for&amp;gt; tags. &#039;&#039;&#039;P2, ideally should be P1&#039;&#039;&#039;.&lt;br /&gt;
* ensure all radio buttons have a label to be associated with them: if an &#039;unanswered&#039; option is required, provide this text as a label. &#039;&#039;&#039;P2, ideally should be P1&#039;&#039;&#039;.&lt;br /&gt;
* Best practice with horizontal radio buttons &#039;&#039;needs to be further investigated&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
====== glossary ====== &lt;br /&gt;
June &#039;06: Empty glossary tested on Moodle Features. July &#039;06: Glossary tested on OU Example of course web site (LTSECW).&lt;br /&gt;
* refer to generic issues: lists, headings, tabs, links, images.&lt;br /&gt;
* Change &#039;special&#039; link to &#039;non alphabetic entries&#039; or similar. &#039;&#039;&#039;P2&#039;&#039;&#039;.&lt;br /&gt;
* Change &#039;all&#039; link to &#039;all entries&#039; or similar. &#039;&#039;&#039;P2&#039;&#039;&#039;.&lt;br /&gt;
* provide alt text for printer icon, e.g. &amp;quot;printable version&amp;quot; or similar. &#039;&#039;&#039;P1.&#039;&#039;&#039;&lt;br /&gt;
* remove heading mark-up from printer icon as it is not a heading. &#039;&#039;&#039;Low&#039;&#039;&#039;.&lt;br /&gt;
* the printer icon becomes almost invisible under Windows High contrast black setting.  Suggest making it larger and/or provide a text link combined with it.  &#039;&#039;&#039;Medium&#039;&#039;&#039;.&lt;br /&gt;
* remove link from current &#039;sort&#039; selection, e.g. when &#039;by last update&#039; is selected remove the link from this text. &#039;&#039;&#039;Medium&#039;&#039;&#039;.&lt;br /&gt;
* provide alt text for the &#039;ascending&#039; and &#039;descending&#039; icons as this information is currently not available to a screen-reader. Combine the text link with the image link so that they are read together by a screen-reader. Note: Do not rely on &amp;lt;title&amp;gt; to convey this information because this is not read by default by screen-readers. &#039;&#039;&#039;P1&#039;&#039;&#039;.&lt;br /&gt;
* label the search edit field and re-order the search controls: place edit field first, followed by &#039;search full text&#039; checkbox, followed by &#039;search&#039; button. &#039;&#039;&#039;P2 and usability&#039;&#039;&#039;.&lt;br /&gt;
* There is no explicit label for the &#039;rate&#039; menu which means Jaws has to guess the text that belongs to it when in forms mode.  Therefore provide a label, eg. &amp;quot;rate this entry&amp;quot;. &#039;&#039;&#039;P2&#039;&#039;&#039;.&lt;br /&gt;
* Provide instructions for the &#039;rate&#039; feature because users, particularly screenreader users, may not realise that they need to operate the button at the bottom of the page to submit their ratings. &#039;&#039;&#039;Usability&#039;&#039;&#039;.&lt;br /&gt;
* When more than one page on entries, change the &#039;all&#039; link to &amp;quot;all pages&amp;quot; so that link is meaningful.  &#039;&#039;&#039;P2&#039;&#039;&#039;.&lt;br /&gt;
* Avoid opening new windows, e.g. if follow auto-link in glossary entry which opens a new window, and then follow link to its parent glossary, can end up with 3 glossary windows open. &#039;&#039;&#039;P2&#039;&#039;&#039;.&lt;br /&gt;
* In list of glossary entries mark up A, B C etc as headings. &#039;&#039;&#039;P2&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
======= add new entry =======&lt;br /&gt;
* the &#039;browse&#039; button on the upload file control is not read by Jaws in &#039;forms mode&#039;.  It is not clear why this is and it &#039;&#039;requires further investigation.&#039;&#039; &#039;&#039;&#039;High.&#039;&#039;&#039;&lt;br /&gt;
* change &#039;revert&#039; button to &amp;quot;cancel entry&amp;quot; or similar. &#039;&#039;&#039;P2&#039;&#039;&#039;.&lt;br /&gt;
* remove alt text from checkboxes because it repeats the text of the control and is therefore repeated by Jaws: alt text is not required for checkboxes, radio buttons etc, but &amp;lt;label&amp;gt; and &amp;lt;for&amp;gt; tags are required. &#039;&#039;&#039;P2&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
======= Browse by category =======&lt;br /&gt;
* Provide label for drop down menu, such as &#039;choose category&#039;. &#039;&#039;&#039;P2&#039;&#039;&#039;.&lt;br /&gt;
* remove automation from drop down menu as it is not controllable with the keyboard only, and provide a &#039;go&#039; button or similar. Note: this may be an IE problem as it does not seem to occur in Firefox and therefore &#039;&#039;needs further testing&#039;&#039;.&#039;&#039;&#039;P2, ideally should be P1&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
====== lams ======&lt;br /&gt;
lams server required - developer issue therefore not tested&lt;br /&gt;
&lt;br /&gt;
====== wiki ======&lt;br /&gt;
no content available yet therefore cannot be tested.&lt;br /&gt;
* generic issues with blogs: &lt;br /&gt;
** screen-reader management of information; &lt;br /&gt;
** need to develop support information for students &lt;br /&gt;
** text-based and so therefore should be technically accessible, as long as headings and meaningful link text used.&lt;br /&gt;
&lt;br /&gt;
====== assignment ======&lt;br /&gt;
Tested on Moodle Features. &lt;br /&gt;
* refer to generic issues on forms, editor.&lt;br /&gt;
* Upload file: ensure label explicitly associated with upload field. &#039;&#039;&#039;P2, ideally should be P1&#039;&#039;&#039;.&lt;br /&gt;
* Upload file: Dragon does not recognise the &#039;browse&#039; button, either when say &amp;quot;click browse&amp;quot; or &amp;quot;click button&amp;quot;.  This may be because the button does not have it&#039;s own label because it is part of the &#039;file&#039; form control.  Dragon users can access the field by saying &amp;quot;type text&amp;quot; but may not know to do this.  Suggest if possible provide an explicit label for the button.  &#039;&#039;May require further investigation/testing&#039;&#039;.&lt;br /&gt;
* online text assignment: on re-edit submission page provide a label for field so that screen-reader knows what it is for. &#039;&#039;&#039;P2, ideally should be P1&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
====== scorm======&lt;br /&gt;
Developer/author facing tool therefore not tested.&lt;br /&gt;
&lt;br /&gt;
====== resource ======&lt;br /&gt;
Developer/author facing tool therefore not tested.&lt;br /&gt;
Authors require support in using in an accessible way.&lt;br /&gt;
&lt;br /&gt;
====== chat ======&lt;br /&gt;
&#039;open chat event&#039; tested on Moodle features demo.&lt;br /&gt;
* the constant refreshing means that screen-readers cannot use this chat feature: it is impossible to type in the edit field because &#039;forms mode&#039; keeps being switched off.  &#039;&#039;Needs further consideration&#039;&#039;.  Auto-refresh = &#039;&#039;&#039;P2, ideally should be P1&#039;&#039;&#039;.&lt;br /&gt;
* suggest change order of text on chat-launch page to read: &amp;quot;an open chat event... this is a chat room with...click here to enter...&amp;quot;.  &#039;&#039;&#039;Medium&#039;&#039;&#039;.&lt;br /&gt;
* suggest change &#039;click here to enter the chat now&#039; to &#039;enter the chat now&#039;.&#039;&#039;&#039;P2&#039;&#039;&#039;.&lt;br /&gt;
* Dragon cannot dictate words into the edit field - can only dictate letter by letter.  The reason for this is not known and &#039;&#039;needs further investigation&#039;&#039;. &#039;&#039;&#039;High&#039;&#039;&#039;.&lt;br /&gt;
* Dragon user has to say &amp;quot;press enter&amp;quot; to send their message because there is no button to operate.  &lt;br /&gt;
* It may not be clear to other users that they have to press enter to send a message.  Suggest provide a &#039;send&#039; button which will make this clear, and would be operable by Dragon.  &#039;&#039;Usability&#039;&#039;.&lt;br /&gt;
* Dragon cannot select the &#039;help&#039; button, even when using the &amp;quot;click image&amp;quot; command. The reason for this is not known and &#039;&#039;needs further investigation&#039;&#039;. &#039;&#039;&#039;High&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
====== lesson ======&lt;br /&gt;
Not tested because can be used in a variety of different ways.  &lt;br /&gt;
Authors require support for using in an accessible way.&lt;br /&gt;
* Refer to global issues regarding forms and headings.&lt;br /&gt;
&lt;br /&gt;
====== journal ====== &lt;br /&gt;
* no content available and so not tested&lt;br /&gt;
&lt;br /&gt;
===== Blocks =====&lt;br /&gt;
&lt;br /&gt;
====== activity_modules ======&lt;br /&gt;
Tested on Features.&lt;br /&gt;
&#039;Activities&#039;, block on course page is list of text links with icons - see global issues on images/icons.&lt;br /&gt;
&lt;br /&gt;
The pages linked to from the activity block were all checked.  All were found to have the correct markup for tables and headings.  The following pages do not have any accessibility issues: Assignments, Chats, Glossaries, Lessons, Quizzes, SCORMs/AICCs, Surveys, Wikis, Workshops.  &lt;br /&gt;
&lt;br /&gt;
There are some issues with the following pages:&lt;br /&gt;
&lt;br /&gt;
======= Forums page =======&lt;br /&gt;
* ensure all columns have a table header, e.g. &#039;learning forums&#039; table has an unheaded column with the digit &#039;5&#039; in it. &#039;&#039;&#039;P1&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
======= Hot Potatoes Quizzes page =======&lt;br /&gt;
* it is not clear why there is a &#039;show/hide topic&#039; link in this table on the Features demo. &#039;&#039;&#039;Usability&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
======= Resources page =======&lt;br /&gt;
* Jaws does not annouce the &#039;tabledividers&#039; used in this table.  If topic numbers are only used at the beginning of the section of the table it may be best to create separate tables for each topic, and remove the &#039;topic&#039; column. &#039;&#039;&#039;Low&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
====== admin ======&lt;br /&gt;
* On the site homepage this gives access to site administration; on course pages it gives access to course administration.&lt;br /&gt;
* Admin/editing-teacher facing generally, and for the OU VLE project.&lt;br /&gt;
* Student-facing for the Open University OCI project.&lt;br /&gt;
&lt;br /&gt;
Tested on CT505.&lt;br /&gt;
* On course page block is list of text links with icons - see global issues on images/icons.&lt;br /&gt;
* Asterisk indicating missing profile description is not part of the &#039;edit profile&#039; link text and therefore is only read by screenreader when reviewing the page, and is not read when tabbing through links.  It therefore may be missed depending on how the page is being read.  The extent to which this is a problem cannot be predicted and so &#039;&#039;this requires further consideration&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
======= Change password =======&lt;br /&gt;
* remove all alt text from form fields because screerneaders read this as well as the onscreen text.  Alt text is not necessary in these situations. &#039;&#039;&#039;High&#039;&#039;&#039;.&lt;br /&gt;
* See also global issues on forms (provision of &amp;lt;label&amp;gt; on all controls). &#039;&#039;&#039;P2.&#039;&#039;&#039;&lt;br /&gt;
* Suggest move &#039;change password&#039; button to be left-aligned so that it is easy to find with screen magnifier (or at least be centred). &#039;&#039;&#039;High&#039;&#039;&#039;.&lt;br /&gt;
* Page confirming change of password has no accessibility issues.&lt;br /&gt;
&lt;br /&gt;
======= Unenrol from course =======&lt;br /&gt;
No accessibility issues.&lt;br /&gt;
&lt;br /&gt;
======= Grades =======&lt;br /&gt;
Tested on Moodle Features.&lt;br /&gt;
Presented as a horizontal table in which titles of activities often wrap onto several lines.&lt;br /&gt;
* Suggest reformat into vertical table so that titles of activities do not have to wrap. &#039;&#039;&#039;Usability&#039;&#039;&#039;.&lt;br /&gt;
* Provide Table Headers such as &#039;activity&#039;, &#039;maximum grade&#039;, &#039;your grade&#039; with columns beneath. &#039;&#039;&#039;P1&#039;&#039;&#039;.&lt;br /&gt;
* remove links from dashes (indicating no grade yet) and from grade numbers, as these are not meaningful links, they repeat the text links to the activities, and do not seem to be necessary.&lt;br /&gt;
* Remove &amp;lt;th&amp;gt; tags from data that is not a table header, e.g. the title of activities and the maximum grade numbers. &#039;&#039;&#039;Medium&#039;&#039;&#039;.&lt;br /&gt;
* Replace &#039;stats&#039; with &#039;Statistics&#039; or &#039;statistics on grades&#039; to convey the meaning. &#039;&#039;&#039;P2&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
====== blog_menu ======&lt;br /&gt;
Not yet tested - to be tested with blogs.&lt;br /&gt;
&lt;br /&gt;
====== blog_tags ======&lt;br /&gt;
Not yet tested - to be tested with blogs&lt;br /&gt;
&lt;br /&gt;
====== calendar_month (Mini calendar) ======&lt;br /&gt;
Tested on early OU Moodle instantiation. &lt;br /&gt;
* [[#Outstanding issues]]. The link ‘January 2006’ does not really indicate that the link goes to a month view. This text also acts as a heading but is not marked up as one. Suggest use [[#Hidden text]]/ link title, &amp;quot;Goto month view&amp;quot;. &#039;&#039;&#039;P2&#039;&#039;&#039; &lt;br /&gt;
* refer to generic issues on links (date link to be meaningful).&lt;br /&gt;
* Also refer to main calendar issues.&lt;br /&gt;
&lt;br /&gt;
====== calendar_upcoming (Upcoming events) ====== &lt;br /&gt;
Tested on early OU Moodle instantiation. &lt;br /&gt;
* List of events from calendar, should be marked up as a list. &#039;&#039;&#039;P2&#039;&#039;&#039;&lt;br /&gt;
* Poor colour contrast for &#039;&#039;dimmed text&#039;&#039; for example, &amp;quot;Today (12:00 AM)&amp;quot;. &#039;&#039;&#039;P3, ideally should be P1&#039;&#039;&#039;.&lt;br /&gt;
* Refer to main calendar issues.&lt;br /&gt;
&lt;br /&gt;
====== course_list (My courses) ======&lt;br /&gt;
Tested on Moodle Features.&lt;br /&gt;
* My courses (student view)/Course categories (admin view).&lt;br /&gt;
* List of text links marked up OK - no accessibility issues.&lt;br /&gt;
&lt;br /&gt;
====== course_summary ======&lt;br /&gt;
* This is an anonymous block (no title).&lt;br /&gt;
* Site description on site homepage; course summary on course pages.&lt;br /&gt;
* Authors need support in using in an accessible way.&lt;br /&gt;
&lt;br /&gt;
====== glossary_random ======&lt;br /&gt;
No example available so not tested.&lt;br /&gt;
&lt;br /&gt;
====== html ======&lt;br /&gt;
Authors need support in using in an accessible way.&lt;br /&gt;
&lt;br /&gt;
====== loancalc ======&lt;br /&gt;
No example available - not tested.&lt;br /&gt;
&lt;br /&gt;
====== login ======&lt;br /&gt;
Tested on [[#Ndf-Moodle]] site.&lt;br /&gt;
* Table used for layout; suggest replace with ordered list &amp;lt;code&amp;gt;&amp;amp;lt;ol&amp;gt;&amp;lt;/code&amp;gt;. &#039;&#039;&#039;P2&#039;&#039;&#039;.&lt;br /&gt;
* General [[#Form Elements]] issues, use &amp;lt;code&amp;gt;&amp;amp;lt;label&amp;gt;&amp;lt;/code&amp;gt;. &#039;&#039;&#039;P2&#039;&#039;&#039;.&lt;br /&gt;
* Note, the block is only visible when user is &#039;&#039;not&#039;&#039; logged in.&lt;br /&gt;
&lt;br /&gt;
====== messages ======&lt;br /&gt;
tested on CT505&lt;br /&gt;
* Message block: ensure all links are meaningful, e.g. the number that follows the name of the sender is not meaningful.  &#039;&#039;&#039;P2, ideally should be P1&#039;&#039;&#039;.&lt;br /&gt;
* auto-refresh in various message-related windows causes problems for screen-readers, in particular it turns &#039;forms mode&#039; off which in turn prevents students from entering text. &#039;&#039;&#039;P2, ideally should be P1&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
======= Contact window =======&lt;br /&gt;
* provide alt text for &#039;add contact&#039;, &#039;block contact&#039; and &#039;message history&#039; instead of, or as well as titles, because screen-readers read alt text only in their default settings. &#039;&#039;&#039;P1&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
======= Message window =======&lt;br /&gt;
* auto-refresh does not seem to be necessary in this window, because user is just reading the current message. &#039;&#039;&#039;P2, ideally should be P1&#039;&#039;&#039;.&lt;br /&gt;
* provide an explicit label for the edit field, e.g. &#039;reply&#039;, or similar. &#039;&#039;&#039;P2&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
======= Send message window =======&lt;br /&gt;
* provide an explicit label for the edit field. &#039;&#039;&#039;P2&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
====== news_items ======&lt;br /&gt;
Tested on Moodle.org.&lt;br /&gt;
* &#039;more...&#039; links are read by screen-readers as &amp;quot;more dot dot dot&amp;quot;, also this link text is not meaningful in its own right, therefore remove the &#039;more&#039; link and make the subject of the news item the link text. &#039;&#039;&#039;P2&#039;&#039;&#039;.&lt;br /&gt;
* items in block should be marked up as a list to support screen-reader users. &#039;&#039;&#039;P2&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
====== online_users ======&lt;br /&gt;
Tested on Moodle Features.&lt;br /&gt;
* See generic issues regarding images: icon links and text links should be combined.&lt;br /&gt;
&lt;br /&gt;
====== participants (people) ======&lt;br /&gt;
Tested on Moodle.org&lt;br /&gt;
* image link to show/hide facilitators should be given a more meaningful label, such as &#039;show facilitators&#039; and &#039;hide facilitators&#039;. &#039;&#039;&#039;P2&#039;&#039;&#039;.&lt;br /&gt;
* links to order lists by different headings, and in ascending or descending order, are not conveyed non-visually.  Best practice for this feature &#039;&#039;needs to be considered further.&#039;&#039; &#039;&#039;&#039;High&#039;&#039;&#039;.&lt;br /&gt;
* provide a table heading at the top of the &#039;user picture&#039; column, e.g. &#039;picture&#039; or &#039;user picture&#039; or similar so that screen-readers can identify the content in that column. &#039;&#039;&#039;P1&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
====== quiz_results ======&lt;br /&gt;
See quizzes.&lt;br /&gt;
&lt;br /&gt;
====== recent_activity ======&lt;br /&gt;
(Was mistakenly under &#039;activity modules&#039; - see above.)&lt;br /&gt;
Tested on Moodle Features. &lt;br /&gt;
* New users - OK, marked up as a list.&lt;br /&gt;
* New forum posts - should be marked up as a list. &#039;&#039;&#039;P2&#039;&#039;&#039;.&lt;br /&gt;
* The linked document, &#039;Full report of recent activity&#039; contains repeating validation errors &#039;&#039;&#039;P2&#039;&#039;&#039;, misformed lists &#039;&#039;&#039;P2&#039;&#039;&#039;, and nested layout tables &#039;&#039;&#039;P2&#039;&#039;&#039;. &lt;br /&gt;
* See [http://moodle.org/course/view.php?id=5 Using Moodle], [http://moodle.org/course/recent.php?id=5  Full report...].&lt;br /&gt;
&lt;br /&gt;
====== rss_client ======&lt;br /&gt;
Tested on CT505.&lt;br /&gt;
* A list of links generated from an (external) RSS (XML-based) news feed.&lt;br /&gt;
* The quality of the link text is dependent on the quality of the feed.&lt;br /&gt;
* Links should open in the same window, or warn the user where they do not. &#039;&#039;&#039;P2&#039;&#039;&#039;.&lt;br /&gt;
* The unordered list should be marked up as such, using &amp;amp;lt;ul&amp;gt;. &#039;&#039;&#039;P2&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
====== search_forums ======&lt;br /&gt;
Tested on moodle.org.&lt;br /&gt;
* refer to generic issues on forms, headings&lt;br /&gt;
* provide explicit label for edit field. &#039;&#039;&#039;P2&#039;&#039;&#039;.&lt;br /&gt;
======= Results page: =======&lt;br /&gt;
* to support screen-reader navigation the location/subject of each result could be marked up as a heading so that screen-readers could jump from one to the next easily. &#039;&#039;&#039;P2&#039;&#039;&#039;.&lt;br /&gt;
* the presentation of the location of the message will be difficult for screen-readers to convey but how to do this more easily &#039;&#039;needs further consideration&#039;&#039;. &#039;&#039;&#039;Medium&#039;&#039;&#039;.&lt;br /&gt;
* the separators in the location/subject are &amp;quot;-&amp;gt;&amp;quot; which is announced by a screen-reader as &amp;quot;dash greater than&amp;quot; or &amp;quot;dash greater&amp;quot;, which is not meaningful.  Suggest replacing with a colon or slash. &#039;&#039;&#039;Medium&#039;&#039;&#039;.&lt;br /&gt;
* the highlight of the search term is not available non-visually.  However an immediate solution is not known.  Perhaps it is sufficient that screen-reader users can do a &#039;find on page&#039; to search for their search term in the results.  This &#039;&#039;needs further consideration&#039;&#039;. &#039;&#039;&#039;Low&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
====== section_links ======&lt;br /&gt;
* This block can only appear on course pages, not the site homepage.&lt;br /&gt;
* List of links to weeks/topics.&lt;br /&gt;
* should be marked up as a list. &#039;&#039;&#039;P2&#039;&#039;&#039;.&lt;br /&gt;
* Links &amp;quot;1, 2, 3...&amp;quot; are not very meaningful on own when read by screenreader. Suggest include title of sections.  &#039;&#039;&#039;P2&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
====== site_main_menu ======&lt;br /&gt;
Authors need support in using in an accessible way.&lt;br /&gt;
&lt;br /&gt;
====== social_activities ======&lt;br /&gt;
No example available so not tested.&lt;br /&gt;
&lt;br /&gt;
===== Authentication modules (/auth) =====&lt;br /&gt;
&lt;br /&gt;
# Note, the user requires &#039;&#039;admin&#039;&#039; privileges to switch between the different authentication methods for testing. &lt;br /&gt;
# Many of the authentication modules do not have a student-facing user-interface – they defer to the  main &#039;&#039;/login&#039;&#039; scripts.&lt;br /&gt;
&lt;br /&gt;
cas&lt;br /&gt;
db&lt;br /&gt;
email&lt;br /&gt;
fc&lt;br /&gt;
imap&lt;br /&gt;
ldap&lt;br /&gt;
manual&lt;br /&gt;
nntp&lt;br /&gt;
none&lt;br /&gt;
pam&lt;br /&gt;
pop3&lt;br /&gt;
radius&lt;br /&gt;
shibboleth&lt;br /&gt;
&lt;br /&gt;
===== Course Format (/course/format) =====&lt;br /&gt;
Course formats control the display of an individual course, including the arrangement of Moodle blocks in the left and right columns. All the course formats use a table to lay out the columns, except in the &#039;weekscss&#039; format. The course is divided into sections which may be time-period or topic based - again a layout table is used, except in &#039;weekscss&#039;.&lt;br /&gt;
&lt;br /&gt;
====== lams ======&lt;br /&gt;
* 2-column table-based layout; uses the LAMS module.&lt;br /&gt;
* Not tested.&lt;br /&gt;
&lt;br /&gt;
====== scorm ======&lt;br /&gt;
* Not tested; requires SCORM content.&lt;br /&gt;
&lt;br /&gt;
====== social ======&lt;br /&gt;
* 3-column table-based layout.&lt;br /&gt;
* Contains an embedded forum - see &#039;&#039;forum&#039;&#039; tests.&lt;br /&gt;
* Recommendation, should become a table-less layout. &#039;&#039;&#039;P2&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
====== topics ======&lt;br /&gt;
* Recommendation, should become a table-less layout. &#039;&#039;&#039;P2&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
====== weeks ======&lt;br /&gt;
* Recommendation, should become a table-less layout. &#039;&#039;&#039;P2&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
====== weekscss ======&lt;br /&gt;
* A copy of the weeks course format, to demonstrate a layout without tables.&lt;br /&gt;
* The CSS is in the Standard theme style sheets. The left and right columns are floated. Each week is a list item.&lt;br /&gt;
* To be superseded by &#039;&#039;weeks&#039;&#039;, above.&lt;br /&gt;
&lt;br /&gt;
===== Themes (/themes) =====&lt;br /&gt;
* standard theme has been most tested and improved.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
formal_white&lt;br /&gt;
standard&lt;br /&gt;
standardlogo&lt;br /&gt;
oceanblue&lt;br /&gt;
wood&lt;br /&gt;
chameleon&lt;br /&gt;
metal&lt;br /&gt;
standardgreen&lt;br /&gt;
orangewhite&lt;br /&gt;
cornflower&lt;br /&gt;
standardwhite&lt;br /&gt;
standardred&lt;br /&gt;
standardblue&lt;br /&gt;
orangewhitepda&lt;br /&gt;
&lt;br /&gt;
=== Generic Forms in Moodle ===&lt;br /&gt;
&lt;br /&gt;
This section discusses the benefits and possible solutions for implementing generic forms in Moodle.&lt;br /&gt;
&lt;br /&gt;
HTML forms are widely used in Moodle to enable students, and teachers and administrators to interact with the system and each other. The forms are either produced by core Moodle code, Moodle extensions (modules, blocks and so on) or third-party libraries (for example, the HTML-Area editor).&lt;br /&gt;
&lt;br /&gt;
As part of the Moodle Accessibility Specification, generic and specific accessibility problems are being identified for forms throughout Moodle. There are also widely accepted limitations to HTML forms – notably, the requirement for client and server-side scripting (Javascript and PHP, in the case of Moodle), to initialise form data, validate, calculate and handle user input errors. This causes complexity and maintenance issues for large forms.&lt;br /&gt;
&lt;br /&gt;
XForms is a W3C recommendation that will form part of XHTML 2.0 and other XML specifications. It addresses the problems inherent in HTML forms, by separating data, logic and presentation:&lt;br /&gt;
# Form data – XML instance data – initial, transitional and final data. A separate XML document.&lt;br /&gt;
# Logic – XForms Model – validation, constraints, required values.&lt;br /&gt;
# Presentation – XForms User Interface – visible form controls, equivalent elements for each HTML form element, with additions. Can be styled with CSS. &lt;br /&gt;
&lt;br /&gt;
The logic and presentation components require a host XML document. The XForms Model can be placed in the &amp;amp;lt;head&amp;gt; of a XHTML document, while the User Interface should be in the &amp;amp;lt;body&amp;gt;. The &#039;scripting&#039; built-in to XForms is not procedural, but declarative in a similar manner to XSL-Transformations.&lt;br /&gt;
&lt;br /&gt;
XForms are not at present supported natively by any widely used Web browser. There are a number of client and server-side implementations. Most client-side solutions require a browser-plugin, the one that does not uses Javascript to transform to HTML [ www.formfaces.com ]. A medium-term solution will require a transformation from XForms to XHTML forms, and at present the only server-side implementations for this are in Java.&lt;br /&gt;
&lt;br /&gt;
It would be a significant and time-consuming project to implement a server-side implementation for all of XForms 1.0 to XHTML in PHP. To be worthwhile, the project should be loosely coupled to Moodle, so that non-Moodle developers can use the software. In the short-term, careful consideration would be required to select the most useful subset of XForms for an initial implementation. Also, this approach is only as useful as the quality of the XHTML that is produced.&lt;br /&gt;
&lt;br /&gt;
An alternative would be – &#039;&#039;&#039;TODO&#039;&#039;&#039; [S.Marshall&#039;s code].&lt;br /&gt;
&lt;br /&gt;
Accessible and usable XHTML forms:&lt;br /&gt;
# Appropriate use of &amp;lt;code&amp;gt;&amp;amp;lt;label&amp;gt;&amp;lt;/code&amp;gt; and &#039;for&#039; to describe &#039;&#039;every&#039;&#039; form control (for example, the day, month and year select-(drop-down) lists in a date of birth form). Labels (or parts of labels) that are useful to none-visual users, but superfluous to many visual users may be &#039;hidden&#039; using CSS &amp;lt;code&amp;gt;{ position:absolute; top:-1000px }&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Appropriate use of &amp;lt;code&amp;gt;&amp;amp;lt;fieldset&amp;gt;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;amp;lt;legend&amp;gt;&amp;lt;/code&amp;gt; to structure, group and summarise form controls.&lt;br /&gt;
# Do not use scripting to submit a form, for example using the &amp;lt;code&amp;gt;&#039;onchange&#039;&amp;lt;/code&amp;gt; event in a select-(drop-down) list. Or to change the keyboard focus, for example with auto-refresh.&lt;br /&gt;
# Use minimal scripting to aid usability, and allow it to be disabled (or provide an alternative) for accessibility.&lt;br /&gt;
# Minimal and semantic use of non-form mark-up in forms. So prefer an ordered list &amp;lt;code&amp;gt;&amp;amp;lt;ol&amp;gt;&amp;lt;/code&amp;gt;, in place of a table for layout.&lt;br /&gt;
# A consistent, clear and multi-modal way to indicate required/mandatory fields (so, not just using colour or an un-explained asterisk).&lt;br /&gt;
# A consistent, clear and multi-modal way to display error messages (make it clear if the user, or system is at fault).&lt;br /&gt;
&lt;br /&gt;
== Issues for supporting course authors ==&lt;br /&gt;
This section has been included to &amp;quot;park&amp;quot; issues that emerged while undertaking the evaluations that do not require technical responses but may need to be included in guidance notes for course authors.&lt;br /&gt;
=== usability ===&lt;br /&gt;
* automatic month selection? e.g. when select June in one field automatically select June in following field instead of leaving it as Jan?? (but find accessible solution too)&lt;br /&gt;
* prevent creation of Moodle &#039;labels&#039; that are inappropriate, e.g. prevent an H2 if there is not already an H1.  Support authors in using &#039;label&#039; in an accessible way.&lt;br /&gt;
* Where ordered lists are styled to be labelled A, B, C etc the Jaws screen-reader reads the labels as 1, 2, 3 (i.e. it does not recognise the visual styling).&lt;br /&gt;
&lt;br /&gt;
=== authoring accessible material ===&lt;br /&gt;
* meaningful labels in database&lt;br /&gt;
&lt;br /&gt;
== Issues for supporting disabled students ==&lt;br /&gt;
This section has been included to &amp;quot;park&amp;quot; issues that emerged while undertaking the evaluations that do not require or can not be resolved by technical responses but may need to be included in guidance notes for disabled students.&lt;br /&gt;
* Where ordered lists are styled to be labelled A, B, C etc the Jaws screen-reader reads the labels as 1, 2, 3 (i.e. it does not recognise the visual styling).&lt;br /&gt;
* Screen-readers are designed to read forms that only contain form controls (edit fields, checkboxes etc) they therefore can fail to read forms that contain links and paragraphs in a meaningful way, and it may miss certain aspects.  Quizzes with &#039;fill in the gap&#039; in the middle of sentences may be particularly problematic.  The best way for screen-reader users to interact with a page containing a form is to review the page before completing the form - in this way any other content, such as links and paragraphs, will also be read out.&lt;br /&gt;
&lt;br /&gt;
== Resources ==&lt;br /&gt;
&lt;br /&gt;
=== Checklists, Recommendations ===&lt;br /&gt;
&lt;br /&gt;
* OU internal, SQAPI PAT 8.1.1, Resources and guidelines for accessible software. Marion Edwards et al, 17 March 2003.&lt;br /&gt;
* BSI/DRC, [http://www.drc-gb.org/default.aspx?page=3364 PAS 78:2006, Guide to good practice in commissioning accessible websites]. British Standards Institute, 2006. (Available from the Disability Rights Commission or the BSI, PDF, 66 pages.)&lt;br /&gt;
* [http://www.webaim.org/standards/508/508checklist.pdf WebAIM, Section 508 Web Accessibility Checklist for HTML] (PDF, 4 pages), Paul Bohman, updated 29 March  2001. &lt;br /&gt;
* [http://www.usdoj.gov/crt/508/archive/oldsoftware.html US Department of Justice, Software Accessibility Checklist, Section 508], date unknown (2004).&lt;br /&gt;
* [http://www.w3.org/TR/WAI-WEBCONTENT/full-checklist.html W3C, Checklist... for Web Content Accessibility Guidelines 1.0], 5 May 1999.&lt;br /&gt;
* [http://www.imsglobal.org/accessibility/accmdv1p0/imsaccmd_oviewv1p0.html IMS Guidelines for Developing Accessible Learning Applications], 12 July 2004&lt;br /&gt;
* [http://www.bbc.co.uk/guidelines/newmedia/accessibility/ BBC, Accessibility Checklist v0.20], 29 March 2005, Jonathan Hassell. (Relatively short list but with lots of links to more comprehensive BBC guidelines.)&lt;br /&gt;
* [http://www-306.ibm.com/able/guidelines/web/accessweb.html IBM, Web accessibility], last updated 06 August 2004 (Similar approach to the BBC).&lt;br /&gt;
* [http://www.w3.org/TR/WCAG20/ WCAG 2.0] Working Draft 27 April 2006.&lt;br /&gt;
* [http://www.w3.org/TR/2006/WD-WCAG20-20060427/appendixB.html WCAG 2.0 Checklist]&lt;br /&gt;
* [http://www.w3.org/TR/WCAG20/appendixD.html Comparison of WCAG 1.0 Checkpoints to WCAG 2.0]&lt;br /&gt;
* [http://www.w3.org/WAI/intro/atag.php Authoring Tool Accessibility Guidelines (ATAG)]&lt;br /&gt;
* [http://www.w3.org/WAI/EO/Drafts/PWD-Use-Web/ How People with Disabilities Use the Web], Working-Group Internal Draft, 5 May 2005.&lt;br /&gt;
* [http://www.websemantics.co.uk/tutorials/accessible_forms/ Accessible Forms: Guidelines, examples and accessible JavaScript tricks] Mike Foskett, 9th August 2006]&lt;br /&gt;
&lt;br /&gt;
=== Forms Resources ===&lt;br /&gt;
&lt;br /&gt;
* [http://www.alistapart.com/articles/prettyaccessibleforms Prettier Accessible Forms], A List Apart/ Nick Rigby, 20 June 2006.&lt;br /&gt;
* [http://www.alistapart.com/articles/sensibleforms Sensible Forms: A Form Usability Checklist], A List Apart/ Brian Crescimanno, 19 December 2005.&lt;br /&gt;
* [http://www.w3.org/MarkUp/Forms/ The Next Generation of Web Forms] W3C forms activity.&lt;br /&gt;
* [http://www.w3.org/TR/2006/REC-xforms-20060314/ XForms 1.0 Second Edition], W3C Recommendation, 2006.&lt;br /&gt;
* [http://xformsinstitute.com/essentials/ XForms Institute presents: O&#039;Reilly XForms Essentials], Micah Dubinko (2003).&lt;br /&gt;
* [http://www.ics.uci.edu/~rohit/IEEE-L7-XForms.html Can XForms Transform the Web?] Rohit Khare, 9 March 2000.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Sites Tested ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;em id=&amp;quot;Soc-Forum&amp;quot;&amp;gt;Soc-Forum&amp;lt;/em&amp;gt;: hosted at Moodle.org, [http://moodle.org/mod/forum/view.php?f=147 Open Social Forum].&lt;br /&gt;
* &amp;lt;em id=&amp;quot;Features&amp;quot;&amp;gt;Features&amp;lt;/em&amp;gt;: hosted at Moodle.org, [http://moodle.org/course/view.php?id=34 Features Demo Course].&lt;br /&gt;
* &amp;lt;em id=&amp;quot;OU-Features&amp;quot;&amp;gt;OU-Features&amp;lt;/em&amp;gt;: hosted internally at OU (Ndf-Moodle), copy of the &#039;Features Demo Course&#039;.&lt;br /&gt;
* &amp;lt;em id=&amp;quot;CT505&amp;quot;&amp;gt;CT505&amp;lt;/em&amp;gt;: hosted internally at OU (Ndf-Moodle), generic Moodle 1.6 demo/developer site, Topics-format course, demonstration modules including &#039;database&#039;.&lt;br /&gt;
* &amp;lt;em id=&amp;quot;Ndf-Moodle&amp;quot;&amp;gt;Ndf-Moodle&amp;lt;/em&amp;gt;: hosted internally at OU, generic Moodle 1.6 demo/developer site (cvs: MOODLE_16_STABLE), with example blocks and courses.&lt;br /&gt;
* &amp;lt;em id=&amp;quot;Vledemo&amp;quot;&amp;gt;Vledemo&amp;lt;/em&amp;gt;: hosted internally at OU, was a Moodle 1.5/1.6-development sandbox in Jan/Feb 2006.&lt;br /&gt;
&lt;br /&gt;
=== See also ===&lt;br /&gt;
&lt;br /&gt;
* http://www.pubbliaccesso.gov.it/normative/Italian_Legislation_on_Accessibility.doc&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Accessibility]]&lt;/div&gt;</summary>
		<author><name>Bawjaws</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Progressive_enhancement&amp;diff=4252</id>
		<title>Progressive enhancement</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Progressive_enhancement&amp;diff=4252"/>
		<updated>2006-07-30T10:33:32Z</updated>

		<summary type="html">&lt;p&gt;Bawjaws: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Progressive enhancement&#039;&#039;&#039; is a new spin on the popular web design concept of &#039;&#039;graceful degredation&#039;&#039;. While the latter focuses on the visual presentation of a web page for the mainstream audience, progressive enhancement prioritises  delivering the content and functionality to everyone. By ensuring that it works for every user regardless of technology platform and then adding any non-essential functionality that requires certain capabilities in the browser (or its user) onto that baseline it ensures [[Usability|usability]] and [[accessibility]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Progressive enhancement and Moodle ==&lt;br /&gt;
&lt;br /&gt;
=== YUI ===&lt;br /&gt;
Moodle has adopted the [[Yahoo! user interface library]] as a platform to build [[AJAX]] and [[DHTML]] enhancements with. Yahoo! have adopted progressive enhancement as one of their key design goals for the library.&lt;br /&gt;
&lt;br /&gt;
=== Hijax ===&lt;br /&gt;
&lt;br /&gt;
Many of most popular AJAX applications were written from scratch with that goal in mind. While that may have saved them time and effort, it also makes it very easy to not support progressive enhancement. Coding for the mainstream audience first may make it very difficult to add support for everyone later. Moodle on the other hand was designed and built in a pre-AJAX age and so already has that infrastructure. [[Hijax]] is the name given to the technique of adding AJAX without removing or replacing the fall-back for less capable browsers. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [[Javascript]]&lt;br /&gt;
* [[AJAX]]&lt;br /&gt;
* [[Hijax]]&lt;br /&gt;
&lt;br /&gt;
* [http://hesketh.com/publications/inclusive_web_design_for_the_future/ &#039;&#039;Inclusive Web Design For the Future with Progressive Enhancement&#039;&#039; presentation]&lt;br /&gt;
* [http://adactio.com/journal/959 &#039;&#039;Progressive enhancement with Ajax&#039;&#039; blog post]&lt;br /&gt;
* [http://hesketh.com/publications/progressive_enhancement_paving_way_for_future.html &#039;&#039;Progressive Enhancement: Paving the Way for Future Web Design&#039;&#039; article]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Javascript]]&lt;br /&gt;
[[Category:AJAX]]&lt;br /&gt;
[[Category:Accessibility]]&lt;/div&gt;</summary>
		<author><name>Bawjaws</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=User_talk:David_Scotson&amp;diff=23291</id>
		<title>User talk:David Scotson</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=User_talk:David_Scotson&amp;diff=23291"/>
		<updated>2006-07-18T11:10:06Z</updated>

		<summary type="html">&lt;p&gt;Bawjaws: /* Moodle Docs stats */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==User group pages==&lt;br /&gt;
&lt;br /&gt;
Hi David, I hope it&#039;s ok to combine the contents of the user group pages you created, in order to focus on the documentation of standard Moodle features. --[[User:Helen Foster|Helen Foster]] 21:48, 21 February 2006 (WST)&lt;br /&gt;
&lt;br /&gt;
Hello Helen. I&#039;m confused as to whether you&#039;re asking permission or forgiveness. I thought at first you&#039;d already combined the pages, but they still seem in place. I suppose the third option is that your asking me to make the change myself.&lt;br /&gt;
&lt;br /&gt;
I had thought about asking whether MoodleDocs was intended for only for &#039;documentation&#039; in the strict sense, but it appeared that the Wiki was already being used to collate and present a variety of other Moodle-related info, and that made a great deal of sense to me. Similarly to the list of big adopters I thought that one of the first steps for people new to Moodle would be to find out who&#039;s using it locally/nationally, people who would theoretically &#039;sell&#039; Moodle with their success stories etc.&lt;br /&gt;
&lt;br /&gt;
I kind of hoped that I&#039;d finish writing this response and be less confused as to what you were asking, but I&#039;m not. My best guess is that my use of several pages linked by Categories is &#039;polluting&#039; the namespace for the core documentation content. If so, do you want me to collate the info onto a single page for the time being?&lt;br /&gt;
&lt;br /&gt;
If so no problem, let me know and I&#039;ll get to it tomorrow afternoon. It may (hopefully) grow beyond one page later (I still have another 8 JISC user groups to add, and that&#039;s just one organisation in one country) but we can cross that bridge when we come to it. --[[User:David Scotson|David Scotson]] 04:12, 22 February 2006 (WST)&lt;br /&gt;
&lt;br /&gt;
:Hi David, apologies for not explaining things clearly. I was confused by the number of redirects and category pages you had created and wondered whether this was intentional or not. Please start by collating the information onto a single page. Thanks! :-) --[[User:Helen Foster|Helen Foster]] 07:41, 22 February 2006 (WST)&lt;br /&gt;
&lt;br /&gt;
I&#039;ll do that, but there is a method to my madness which I will explain:&lt;br /&gt;
&lt;br /&gt;
redirects: the purpose of my adding the redirects is so that people get taken to the right page even if there are several equally valid titles, e.g. SMUG, Scottish Moodle User Group, Scottish Moodle User*s* Group. If people type these exact terms in the search box and click &#039;go&#039; (as opposed to &#039;search&#039;) and the redirects are set up they all get taken to the same page automatically. If the redirects don&#039;t exist then you get taken to a page that says &amp;quot;there is no exact match etc.&amp;quot; and displays the search results for the entered term. Usually one of the first few entries is going to be relevant, but it&#039;s just a little less smooth. (Note the same system applies if people enter these terms at the end of URLs). &lt;br /&gt;
&lt;br /&gt;
categories: these are my favourite feature of MediaWiki, the Wikipedia has literally [http://en.wikipedia.org/wiki/Special:Allpages/Category:A thousands of them] which very rarely get in your way unless you are actually navigating the a subset of the hierarchy that interests you. My general feeling is the more the merrier, and criss-crossing categories would add a lot of value. We should therefore expect and plan for many Categories to be added. They also have a role to play in my next point.&lt;br /&gt;
&lt;br /&gt;
wiki philosophy: I&#039;d always read that what you leave out of a wiki is as important as what you add. Since part of the point of using a wiki is to invite community participation, it&#039;s sometimes recommended to leave things half done, to encourage people to jump in and finish it off. This applies to stub pages, links that don&#039;t go anywhere, and to a certain extent not worrying about the quality of your English (particularly if it&#039;s not your first language) as all these things present opportunities for others to join in, while on the other hand editing or adding to a tight core of well written documentation may seem intimidating as a first step to someone with only a little time or information to offer. Categories are important pointers in this direction as seeing a list of UK user groups would surely prompt others to add their own countries, at some point you begin to feel left out if your country isn&#039;t listed. And the same occurs within each country as each User Group doesn&#039;t want to be left out. I thought that because people feel a sense of ownership of their user groups they would therefore feel comfortable writing the pages about them. Also because of the kind of people that are involved in them, I thought they would be ideal first steps for the kind of people who should be editing MoodleDocs. Once they&#039;ve got that first page under their belt then further participation should be easy. --[[User:David Scotson|David Scotson]] 18:56, 22 February 2006 (WST)&lt;br /&gt;
&lt;br /&gt;
:Hi David, thanks for your explanation - much appreciated :-) --[[User:Helen Foster|Helen Foster]] 01:05, 23 February 2006 (WST)&lt;br /&gt;
&lt;br /&gt;
==Marking pages for deletion==&lt;br /&gt;
&lt;br /&gt;
I&#039;ve moved the info into a single page called [[list of user groups]] but I&#039;m confused about how to mark the old pages for deletion --[[User:David Scotson|David Scotson]] 19:15, 22 February 2006 (WST)&lt;br /&gt;
&lt;br /&gt;
:I see you&#039;ve noticed that [[:Template:Delete|Template:Delete]] is yet to be created ;-) --[[User:Helen Foster|Helen Foster]] 01:05, 23 February 2006 (WST)&lt;br /&gt;
&lt;br /&gt;
==Thank you==&lt;br /&gt;
&lt;br /&gt;
Hi Dave, just wanted to say how interesting your user page is - a big thank you for your contributions to Moodle Docs :-) --[[User:Helen Foster|Helen Foster]] 19:27, 28 April 2006 (WST)&lt;br /&gt;
&lt;br /&gt;
==Moodle Docs stats==&lt;br /&gt;
&lt;br /&gt;
Re. [[Special:Statistics|Statistics]] for registered users, I recall Eloy mentioning a bug resulting in the stats not updating properly ;-) I don&#039;t know if it&#039;s been fixed yet. --[[User:Helen Foster|Helen Foster]] 19:31, 28 April 2006 (WST)&lt;br /&gt;
&lt;br /&gt;
:Update: I&#039;ve used Eloy&#039;s work-around for updating registered users. --[[User:Helen Foster|Helen Foster]] 18:30, 18 July 2006 (WST)&lt;br /&gt;
&lt;br /&gt;
:: Great stuff, I wasn&#039;t sure whether the integration with Moodle.org was throwing the number out. 3.5K registered users is pretty good going --[[User:David Scotson|David Scotson]] 19:10, 18 July 2006 (WST)&lt;br /&gt;
&lt;br /&gt;
==Module page names==&lt;br /&gt;
&lt;br /&gt;
Just thinking that it seems a good plan to rename module pages to &#039;&#039;Whatever&#039;&#039; module (e.g. Wiki module) in the same way that block pages have been renamed &#039;&#039;Whatever&#039;&#039; block. Thanks for your suggestion :-) --[[User:Helen Foster|Helen Foster]] 19:17, 8 May 2006 (WST)&lt;/div&gt;</summary>
		<author><name>Bawjaws</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=User:David_Scotson&amp;diff=19579</id>
		<title>User:David Scotson</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=User:David_Scotson&amp;diff=19579"/>
		<updated>2006-07-16T17:03:53Z</updated>

		<summary type="html">&lt;p&gt;Bawjaws: /* stats */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;An E-learning Technologist / software developer working for the [http://www.gla.ac.uk University of Glasgow] as part of the newly formed Learning and Teaching Centre.&lt;br /&gt;
&lt;br /&gt;
[http://moodle.org/user/view.php?id=3152&amp;amp;course=5 My profile at Moodle.org]&lt;br /&gt;
&lt;br /&gt;
== Me and MoodleDocs ==&lt;br /&gt;
&lt;br /&gt;
I gave a talk about Moodle recently to some of our IT support teams, one of the main points of which was was a great project MoodleDocs was (or at that time &#039;was going to be&#039;), and how it could be a &#039;killer app&#039; for Moodle i.e. so good that people use Moodle rather than alternatives simply because the documentation is so good. It&#039;s certainly the case that when we evaluated Moodle, the strong community support was a key deciding factor (it&#039;s a fruitless chicken and egg question whether the quality of Moodle attracted the strong community or the strong community contributed to the quality of Moodle, obviously they re-inforce each other). Having a commited, passionate community building documentation in a wiki just seemed like such a great idea, especially as I was aware of how much great info was &#039;hidden&#039; within the postings of the Using Moodle forums, and the shared urge to teach/share that drives much of that. As I&#039;m one of those people who loves to say &#039;I told you so!&#039; when things turn out as I predict them to and, more importantly, because I think lack of good documentation is one of the areas holding back widespread adoption of e-learning/Moodle, I thought I&#039;d get involved.&lt;br /&gt;
&lt;br /&gt;
I&#039;m particularly interested in:&lt;br /&gt;
&lt;br /&gt;
* the social/community aspects of the project (including it&#039;s role as a community of practice)&lt;br /&gt;
* how the documentation caters to different audiences (dev/admin/teacher/student) while at the same time supporting/encouraging people to move between (or at least understand) different roles&lt;br /&gt;
* effective use of hypertext/web/wiki medium (meaning both collaborative text writing and using hyperlinks to break up and interwingle content)&lt;br /&gt;
* the interaction between the project websites, forums, databases, and this wiki&lt;br /&gt;
&lt;br /&gt;
== Things I&#039;ve learned, realised or had brought home to me through contributing to this Wiki  ==&lt;br /&gt;
&lt;br /&gt;
=== prose versus lists ===&lt;br /&gt;
&lt;br /&gt;
Short version: lists win every time. They:&lt;br /&gt;
* allow others to easily interject, add to or edit your contributions, without having to untangle your text. Even editing your own text as you add things can turn into a scene reminiscent of Monty Python: &amp;quot;NOBODY expects the Spanish Inquisition! Our chief weapon is surprise...surprise and fear...fear and surprise.... Our two weapons are fear and surprise...and ruthless efficiency.... Our *three* weapons are fear, surprise, and ruthless efficiency...and an almost fanatical devotion to the Pope.... Our *four*...no... *Amongst* our weapons.... Amongst our weaponry...are such elements as fear, surprise.... I&#039;ll come in again.&amp;quot;&lt;br /&gt;
* make following step-by-step lists easy, aiding readability and scan-ability&lt;br /&gt;
* act as an open invite for other others to contribute (I think at least part of this is to do with depersonalisation, which sounds bad, but in a collaborative wiki text is necessary for effective copy-editing for clarity, length etc.)&lt;br /&gt;
* can be easily scannable indexes, into various documentation sub-topics.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== singular versus plural ===&lt;br /&gt;
&lt;br /&gt;
* MediaWiki seems to have a slight technical preference for singular names of articles. You can use &amp;lt;nowiki&amp;gt;[[Module]]s and &lt;br /&gt;
[[Quiz]]zes when you need to use a plural in a sentence instead of [[Modules|Module]] and [[Quizzes|Quiz]] if the page is pluralised&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
* Categories, when used as lists, make more sense (to me at least) as plurals, but means possibly having two similar very terms e.g. if themes is a list of Moodle Themes, then what do you use for Theme related content? &#039;&#039;Themeing&#039;&#039;?&lt;br /&gt;
&lt;br /&gt;
=== stats ===&lt;br /&gt;
&lt;br /&gt;
The [[Special:Statistics|stats]] page linked off the frontpage is very cool, particularly the number of registered users. I&#039;d love it if these could be graphed over time.&lt;br /&gt;
&lt;br /&gt;
The [http://www.alexa.com/data/details/traffic_details?&amp;amp;compare_sites=&amp;amp;y=t&amp;amp;q=&amp;amp;size=medium&amp;amp;range=6m&amp;amp;url=http://moodle.org/ Alexa] (recently bought by Amazon) stats are also interesting, showing 14% of traffic to moodle.org going to the docs.moodle subdomain. Again graphing this over time would be interesting I might make manual notes myself for a rough tally. Current standings are:&lt;br /&gt;
&lt;br /&gt;
* moodle.org ~ 70%&lt;br /&gt;
* docs.moodle.org ~ 14%&lt;br /&gt;
* download.moodle.org ~ 7%&lt;br /&gt;
* demo.moodle.com ~ 4%&lt;br /&gt;
* moodle.com ~ 3%&lt;br /&gt;
* Other websites ~ 2%&lt;br /&gt;
&lt;br /&gt;
== Mediawiki supports RSS and Atom ==&lt;br /&gt;
&lt;br /&gt;
The RSS and Atom feeds are a good way to keep up with what&#039;s going on, though they don&#039;t seem very discoverable and the Atom feed, which I would generally prefer doesn&#039;t seem to display as nicely and the RSS one, at least on Safari.&lt;br /&gt;
&lt;br /&gt;
* [https://docs.moodle.org/en/index.php?title=Special:Recentchanges&amp;amp;feed=rss RSS feed of recent changes]&lt;br /&gt;
* [https://docs.moodle.org/en/index.php?title=Special:Recentchanges&amp;amp;feed=atom Atom feed of recent changes]&lt;br /&gt;
&lt;br /&gt;
[http://meta.wikimedia.org/wiki/Syndication_feeds more info, and a list of other available feeds e.g new pages]&lt;br /&gt;
&lt;br /&gt;
== To-do list ==&lt;br /&gt;
&lt;br /&gt;
A list of things for me to think/do something about in MoodleDocs:&lt;br /&gt;
&lt;br /&gt;
* highlighted article category (like Wikipedia)&lt;br /&gt;
* list of standards that Moodle supports&lt;br /&gt;
* more info on ways to contribute&lt;br /&gt;
* Jargon page&lt;br /&gt;
* fix the database so searches for three-letter words work&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
== Docs topics for Uk MoodleMoot 06 ==&lt;br /&gt;
&lt;br /&gt;
* Search stuff&lt;br /&gt;
** how to recompile MySQL to fix searching for 3 letter words&lt;br /&gt;
** adding OpenSearch to Mediawiki&lt;br /&gt;
** Google Sitemaps&lt;br /&gt;
* usage statistics&lt;br /&gt;
** why 3,605 registered users in [[Special:Listusers]] but 1,060 registered users in [[Special:Statistics]]?&lt;br /&gt;
** How many non-registered users does the 2% increase in share of moodle.org visitors (from 14-16% in last few months according to [http://www.alexa.com/data/details/traffic_details?q=&amp;amp;url=moodle.org]) represent in actual no. of people?&lt;br /&gt;
** How popular are our [[Special:Popularpages]] and how meaningful are those numbers (tangent: long tail graph for pages?)&lt;br /&gt;
** How do we measure success? Are our users finding what they are looking for? Are we helping people to help themselves?&lt;br /&gt;
* Misc&lt;br /&gt;
** redirect docs.moodle.org/Stuff to docs.moodle.org/en/Stuff?&lt;br /&gt;
** personally thank contributors&lt;/div&gt;</summary>
		<author><name>Bawjaws</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=User:David_Scotson&amp;diff=19578</id>
		<title>User:David Scotson</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=User:David_Scotson&amp;diff=19578"/>
		<updated>2006-07-16T16:50:01Z</updated>

		<summary type="html">&lt;p&gt;Bawjaws: stuff for MoodleMoot&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;An E-learning Technologist / software developer working for the [http://www.gla.ac.uk University of Glasgow] as part of the newly formed Learning and Teaching Centre.&lt;br /&gt;
&lt;br /&gt;
[http://moodle.org/user/view.php?id=3152&amp;amp;course=5 My profile at Moodle.org]&lt;br /&gt;
&lt;br /&gt;
== Me and MoodleDocs ==&lt;br /&gt;
&lt;br /&gt;
I gave a talk about Moodle recently to some of our IT support teams, one of the main points of which was was a great project MoodleDocs was (or at that time &#039;was going to be&#039;), and how it could be a &#039;killer app&#039; for Moodle i.e. so good that people use Moodle rather than alternatives simply because the documentation is so good. It&#039;s certainly the case that when we evaluated Moodle, the strong community support was a key deciding factor (it&#039;s a fruitless chicken and egg question whether the quality of Moodle attracted the strong community or the strong community contributed to the quality of Moodle, obviously they re-inforce each other). Having a commited, passionate community building documentation in a wiki just seemed like such a great idea, especially as I was aware of how much great info was &#039;hidden&#039; within the postings of the Using Moodle forums, and the shared urge to teach/share that drives much of that. As I&#039;m one of those people who loves to say &#039;I told you so!&#039; when things turn out as I predict them to and, more importantly, because I think lack of good documentation is one of the areas holding back widespread adoption of e-learning/Moodle, I thought I&#039;d get involved.&lt;br /&gt;
&lt;br /&gt;
I&#039;m particularly interested in:&lt;br /&gt;
&lt;br /&gt;
* the social/community aspects of the project (including it&#039;s role as a community of practice)&lt;br /&gt;
* how the documentation caters to different audiences (dev/admin/teacher/student) while at the same time supporting/encouraging people to move between (or at least understand) different roles&lt;br /&gt;
* effective use of hypertext/web/wiki medium (meaning both collaborative text writing and using hyperlinks to break up and interwingle content)&lt;br /&gt;
* the interaction between the project websites, forums, databases, and this wiki&lt;br /&gt;
&lt;br /&gt;
== Things I&#039;ve learned, realised or had brought home to me through contributing to this Wiki  ==&lt;br /&gt;
&lt;br /&gt;
=== prose versus lists ===&lt;br /&gt;
&lt;br /&gt;
Short version: lists win every time. They:&lt;br /&gt;
* allow others to easily interject, add to or edit your contributions, without having to untangle your text. Even editing your own text as you add things can turn into a scene reminiscent of Monty Python: &amp;quot;NOBODY expects the Spanish Inquisition! Our chief weapon is surprise...surprise and fear...fear and surprise.... Our two weapons are fear and surprise...and ruthless efficiency.... Our *three* weapons are fear, surprise, and ruthless efficiency...and an almost fanatical devotion to the Pope.... Our *four*...no... *Amongst* our weapons.... Amongst our weaponry...are such elements as fear, surprise.... I&#039;ll come in again.&amp;quot;&lt;br /&gt;
* make following step-by-step lists easy, aiding readability and scan-ability&lt;br /&gt;
* act as an open invite for other others to contribute (I think at least part of this is to do with depersonalisation, which sounds bad, but in a collaborative wiki text is necessary for effective copy-editing for clarity, length etc.)&lt;br /&gt;
* can be easily scannable indexes, into various documentation sub-topics.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== singular versus plural ===&lt;br /&gt;
&lt;br /&gt;
* MediaWiki seems to have a slight technical preference for singular names of articles. You can use &amp;lt;nowiki&amp;gt;[[Module]]s and &lt;br /&gt;
[[Quiz]]zes when you need to use a plural in a sentence instead of [[Modules|Module]] and [[Quizzes|Quiz]] if the page is pluralised&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
* Categories, when used as lists, make more sense (to me at least) as plurals, but means possibly having two similar very terms e.g. if themes is a list of Moodle Themes, then what do you use for Theme related content? &#039;&#039;Themeing&#039;&#039;?&lt;br /&gt;
&lt;br /&gt;
=== stats ===&lt;br /&gt;
&lt;br /&gt;
The [[Special:Statistics|stats]] page linked off the frontpage is very cool, particularly the number of registered users. I&#039;d love it if these could be graphed over time.&lt;br /&gt;
&lt;br /&gt;
The [http://www.alexa.com/data/details/traffic_details?&amp;amp;compare_sites=&amp;amp;y=t&amp;amp;q=&amp;amp;size=medium&amp;amp;range=6m&amp;amp;url=http://moodle.org/ Alexa] (recently bought by Amazon) stats are also interesting, showing 14% of traffic to moodle.org going to the docs.moodle subdomain. Again graphing this over time would be interesting I might make manual notes myself for a rough tally. Current standings are:&lt;br /&gt;
&lt;br /&gt;
* moodle.org ~ 70%&lt;br /&gt;
* docs.moodle.org ~ 14%&lt;br /&gt;
* download.moodle.org ~ 7%&lt;br /&gt;
* demo.moodle.com ~ 4%&lt;br /&gt;
* moodle.com ~ 3%&lt;br /&gt;
* Other websites ~ 2%&lt;br /&gt;
&lt;br /&gt;
== To-do list ==&lt;br /&gt;
&lt;br /&gt;
A list of things for me to think/do something about in MoodleDocs:&lt;br /&gt;
&lt;br /&gt;
* highlighted article category (like Wikipedia)&lt;br /&gt;
* list of standards that Moodle supports&lt;br /&gt;
* more info on ways to contribute&lt;br /&gt;
* Jargon page&lt;br /&gt;
* fix the database so searches for three-letter words work&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
== Docs topics for Uk MoodleMoot 06 ==&lt;br /&gt;
&lt;br /&gt;
* Search stuff&lt;br /&gt;
** how to recompile MySQL to fix searching for 3 letter words&lt;br /&gt;
** adding OpenSearch to Mediawiki&lt;br /&gt;
** Google Sitemaps&lt;br /&gt;
* usage statistics&lt;br /&gt;
** why 3,605 registered users in [[Special:Listusers]] but 1,060 registered users in [[Special:Statistics]]?&lt;br /&gt;
** How many non-registered users does the 2% increase in share of moodle.org visitors (from 14-16% in last few months according to [http://www.alexa.com/data/details/traffic_details?q=&amp;amp;url=moodle.org]) represent in actual no. of people?&lt;br /&gt;
** How popular are our [[Special:Popularpages]] and how meaningful are those numbers (tangent: long tail graph for pages?)&lt;br /&gt;
** How do we measure success? Are our users finding what they are looking for? Are we helping people to help themselves?&lt;br /&gt;
* Misc&lt;br /&gt;
** redirect docs.moodle.org/Stuff to docs.moodle.org/en/Stuff?&lt;br /&gt;
** personally thank contributors&lt;/div&gt;</summary>
		<author><name>Bawjaws</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=UK_MoodleMoot_06_hackfest&amp;diff=4223</id>
		<title>UK MoodleMoot 06 hackfest</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=UK_MoodleMoot_06_hackfest&amp;diff=4223"/>
		<updated>2006-07-12T17:35:18Z</updated>

		<summary type="html">&lt;p&gt;Bawjaws: /* Performance profiling */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Monday 24th July, 2006&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Welcommen zum Hackfest&#039;&#039; (OK - I&#039;ve been watching too much WorldCup on TV). &lt;br /&gt;
&lt;br /&gt;
The first MoodleMoot hackfest is nearly upon us... and we don&#039;t have an agenda!&lt;br /&gt;
&lt;br /&gt;
This is an open source agenda for the hackfest. We&#039;ll have a day before the Moot to geek out on some code, maybe develop a feature or two, fix some bugs and generally make our favorite learning system a happier place. But I leave it up to you to tell me exactly what we should do. We have four or five rooms with internet connections, a few projectors, and I&#039;ll try to get pizza. &lt;br /&gt;
&lt;br /&gt;
Let&#039;s start by brainstorming some ideas here for a few days. If someone posts something you&#039;re interested in, put your name under it as a vote. The top votes become our central organizing ideas. For example&lt;br /&gt;
&lt;br /&gt;
==1 Bug fixing==&lt;br /&gt;
&lt;br /&gt;
Let&#039;s spend a few hours and hunt down as many outstanding bugs in 1.6 as possible. Bounties for most bugs killed, trickiest bug killed, and most unusual bug killed.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;I&#039;m Interested:&#039;&#039;&lt;br /&gt;
# Jason Cole&lt;br /&gt;
# skodak&lt;br /&gt;
# martin langhoff (auth &amp;amp; enrolment specifically).&lt;br /&gt;
# Martin Dougiamas&lt;br /&gt;
# Juliette White (arriving late though!)&lt;br /&gt;
# Dan Stowell&lt;br /&gt;
&lt;br /&gt;
(iarenaza) I won&#039;t be there, but here are a couple of bugs for Martin L., related to auth: #4648 and #5373. Very easy to fix :-)&lt;br /&gt;
&lt;br /&gt;
==2 What next for the quiz module?==&lt;br /&gt;
&lt;br /&gt;
If any other quizzy people are there, we should have a talk about where we see the quiz module going.&lt;br /&gt;
&lt;br /&gt;
I/the OU have the following priorities:&lt;br /&gt;
&lt;br /&gt;
# Make question type plugins really plug-in-able. At the moment there are some limitations:&lt;br /&gt;
#* All the lang strings are still in lang/en_utf8/quiz.php.&lt;br /&gt;
#* qtype plugins cannot easily feed CSS and Javascript into the page.&lt;br /&gt;
#* pluggable qtypes and pluggable inport/export filters don&#039;t play nicely together.&lt;br /&gt;
# Write some new question types.&lt;br /&gt;
# Make some improvements to existing question types.&lt;br /&gt;
# Get RQP working again, so our in-house question engine can talk to Moodle.&lt;br /&gt;
&lt;br /&gt;
I&#039;m not going to be there, but I think it would be helpful if you were to discuss ways in which the teacher&#039;s usage of the quiz module could be made more efficient, more in terms of grading than in creating quizzes (as there have already been a lot of improvements in that respect in 1.6). I&#039;ve submitted a lot of bug reports about this already but personally efficiency would be more of a priority to me than new question types.--[[User:N Hansen|N Hansen]] 08:27, 12 July 2006 (WST)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;I&#039;m Interested:&#039;&#039;&lt;br /&gt;
# Tim Hunt&lt;br /&gt;
# Jamie Pratt&lt;br /&gt;
&lt;br /&gt;
==Performance profiling==&lt;br /&gt;
&lt;br /&gt;
Pick a (memory|database) hog and put it on a diet. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;I&#039;m interested&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# martin langhoff&lt;br /&gt;
# dave scotson (particularly the TinyMCE performance issues mentioned recently by Martin D)&lt;br /&gt;
&lt;br /&gt;
(iarenaza) Once again, I won&#039;t be there, but here&#039;s an unfixed bug in 1.6.x and HEAD (was fixed in 1.5.x, but not applied to HEAD at the moment): bug #4591&lt;br /&gt;
&lt;br /&gt;
==Hacking on the OLPC Board==&lt;br /&gt;
&lt;br /&gt;
MartinL will be bringing the OLPC board (if it is booting, and customs allows!) for people to have a play with it. If we have any Mozilla/XUL experts in the house, he will want to explore building a limited cached Moodle UI with it for offline work.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; We will need some spare parts &amp;amp; hardware to get the board going. I will bring a power supply, but a VGA monitor, USB mouse + keyboard, USB ext disk, USB hub, and open wifi (no ethernet on the board) will be needed. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;JC: We&#039;ll make sure you have the appropriate stuff. I need a USB disk anyway.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;I&#039;m interested:&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# martin langhoff&lt;br /&gt;
# Jason Cole&lt;br /&gt;
&lt;br /&gt;
==How to save/retrieve a complete section from stock?==&lt;br /&gt;
Now the sections become more and more accepted as the tasksets for a week, our teachers wish to have topic oriented stores (courses for the moment) as section stores and want to copy one/more sections form that task store to a clean course..&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;(In the end we wish that students can select sections from the store to compose their own courses, until the teacher freezes their choice set and the learning game can begin.)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;I&#039;m interested:&#039;&#039;&lt;br /&gt;
# Ger Tielemans (I arrive a little later, so start with the bugs first, please :))&lt;br /&gt;
# Jan Kater (same arrival=same message as Ger T.)&lt;br /&gt;
&lt;br /&gt;
==How to reveale files outside a course without using datadir for course 1?==&lt;br /&gt;
Can someone explain the right setup and use of the exception array: &lt;br /&gt;
- we want to show a student (after login) only his own file from that store&lt;br /&gt;
- we want to show a teacher/tutor only the files from the students in his course(s)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;I&#039;m interested:&#039;&#039;&lt;br /&gt;
# Ger Tielemans&lt;br /&gt;
# Jan Kater&lt;br /&gt;
&lt;br /&gt;
==How to repair the last bug in the old bookmark option ?==&lt;br /&gt;
We changed William&#039;s bookmark in a student only note-taking tool and (thanks Chardelle!) almost repaired the complete bookmark for 1.6. (and it can be accessed from My Page)&lt;br /&gt;
Bug: Only when the user tries to sort the heder in the overview, the text of the headers disappear.&lt;br /&gt;
Code clean-up: how to remove obsolete code and make the bookmark pages secure?&lt;br /&gt;
(Wish for new code: categories are privat, so allow a student to delete a self created category)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;I&#039;m interested:&#039;&#039;&lt;br /&gt;
Ger Tielemans&lt;br /&gt;
&lt;br /&gt;
==How to insert a HTML-editor in old code block and make it secure ?==&lt;br /&gt;
To make the set of student note-taking tools complete, I found old code to have a global private notebook.&lt;br /&gt;
(I group this with bookmarks in the calender, so the student has: 1. privat time-related-notes in the calendar, 2. a button for the overview of the privat page-related-notes under the calendar and 3. a global privat notebook for other scribbles..) &lt;br /&gt;
On this moment this piece of code has a flat text editor, would be nice to have HTML or even the new (Ajax?) miniWiki?) &lt;br /&gt;
&lt;br /&gt;
With the new &amp;quot;View as student button&amp;quot; check like if isstudent() {..show..} offers teachers and admins empty - only for real student - spots (so an error)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;I&#039;m interested:&#039;&#039;&lt;br /&gt;
# Ger Tielemans&lt;br /&gt;
# Jan Kater&lt;br /&gt;
&lt;br /&gt;
== Improve the way we integrate Rubrics in Moodle, like... ==&lt;br /&gt;
http://docs.subjectivemetrics.com/User/cam/rubistar/rs_overview.html&lt;br /&gt;
&lt;br /&gt;
maybe with some flavors of...&lt;br /&gt;
&lt;br /&gt;
http://ipeer.apsc.ubc.ca/ipeer_site/&lt;br /&gt;
&lt;br /&gt;
==Add your suggestion here ...==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Go on, you know you want to.&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
* [http://moodlemoot.org/ http://moodlemoot.org/]&lt;/div&gt;</summary>
		<author><name>Bawjaws</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=Unit_test_API&amp;diff=3932</id>
		<title>Unit test API</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=Unit_test_API&amp;diff=3932"/>
		<updated>2006-06-19T14:54:28Z</updated>

		<summary type="html">&lt;p&gt;Bawjaws: /* More about unit testing in general */  small typo plus category&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The purpose of unit testing is to test the individual parts of the program (functions, and methods of classes) to make sure that each individually does the right thing. Once unit testing has given you the confidence that each part works, then you should use other forms of testing to ensure that the different parts work together properly.&lt;br /&gt;
&lt;br /&gt;
The unit testing framework is based on the [http://www.lastcraft.com/simple_test.php SimpleTest] framework. It was incorporated into Moodle by Nick Freear and Tim Hunt from [http://www.open.ac.uk/ The Open University].&lt;br /&gt;
&lt;br /&gt;
== Running the unit tests in Moodle ==&lt;br /&gt;
&lt;br /&gt;
=== Running the basic tests ===&lt;br /&gt;
&lt;br /&gt;
# Log in with an admin account. &lt;br /&gt;
# Go to the admin screen.&lt;br /&gt;
# Near the bottom of the menu, there is a link to run the unit tests.&lt;br /&gt;
# Wait for the tests to run.&lt;br /&gt;
&lt;br /&gt;
=== Options for running the tests ===&lt;br /&gt;
&lt;br /&gt;
At the bottom of the tests page there is form that lets you adjust the options used when running the tests.&lt;br /&gt;
&lt;br /&gt;
==== Show passes as well as fails ====&lt;br /&gt;
&lt;br /&gt;
Normally, only details of the tests that have failed are printed. Turning on this options shows details of all the passes too.&lt;br /&gt;
&lt;br /&gt;
==== Show the search for test files ====&lt;br /&gt;
&lt;br /&gt;
The tests to run are found automatically be searching the codebase for files whose names match &#039;&#039;&#039;test*.php&#039;&#039;&#039; in directories called &#039;&#039;&#039;simpletest&#039;&#039;&#039;. Turning on this option will print a list of the folders searched and the test files found. This is sometimes useful for debugging.&lt;br /&gt;
&lt;br /&gt;
This option is particularly useful when one of your test files gives a syntax error. When this happens, you sometimes just get a blank page with no error message. Turning on the show search option lets you see which test file it was that gave the error. If necessary, you can enable this option manually by adding &amp;quot;showsearch=1&amp;quot; to the end of the URL.&lt;br /&gt;
&lt;br /&gt;
==== Run a thorough test (may be slow) ====&lt;br /&gt;
&lt;br /&gt;
If you turn on this option, then as well as looking for files called &#039;&#039;&#039;test*.php&#039;&#039;&#039;, the search also looks for files called &#039;&#039;&#039;slowtest*.php&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
To be useful, the full test run should find most bugs, but not take too long to complete. So if you have very, very detailed tests of an area of the code, it may be better to select a subset for everday testing, and only use the more detailed tests when a bug is reported, or you are doing new development in that area of the code.&lt;br /&gt;
&lt;br /&gt;
This option is most useful when combined with the next option.&lt;br /&gt;
&lt;br /&gt;
==== Only run tests in ====&lt;br /&gt;
&lt;br /&gt;
Normally, tests from all parts of the codebase are run. However, when you are just doing development of one part of the code, that is a waste of time. You can type the name of a folder (for example &#039;&#039;&#039;mod/quiz&#039;&#039;&#039;) or a particular test file (for example &#039;&#039;&#039;lib/simpletest/testdatalib.php&#039;&#039;&#039;) and then only those tests will be run.&lt;br /&gt;
&lt;br /&gt;
[[Image:RunOnlyTheseTests.png|right]] Instead of typing a path into this box, there is an easier way. Whenever a pass or fail is displayed, the name of the test file is printed. Each section of the path name is a link to run only the tests in that folder or file.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Writing new tests ==&lt;br /&gt;
&lt;br /&gt;
As an example, suppose we wanted to start writing tests for the functions in the file &#039;question/editlib.php&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Were to put the tests ===&lt;br /&gt;
&lt;br /&gt;
If you have read the first half of this page and were paying attention, you can probably work out that you should create a folder called &#039;&#039;&#039;question/testeditlib&#039;&#039;&#039;, and in there, create a file called something like &#039;&#039;&#039;testeditlib.php&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
The skeleton of this file should look like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;?php&lt;br /&gt;
/**&lt;br /&gt;
 * Unit tests for (some of) question/editlib.php.&lt;br /&gt;
 *&lt;br /&gt;
 * @copyright &amp;amp;copy; 2006 The Open University&lt;br /&gt;
 * @author T.J.Hunt@open.ac.uk&lt;br /&gt;
 * @license http://www.gnu.org/copyleft/gpl.html GNU Public License&lt;br /&gt;
 * @package question&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
/** */&lt;br /&gt;
require_once(dirname(__FILE__) . &#039;/../../config.php&#039;);&lt;br /&gt;
&lt;br /&gt;
global $CFG;&lt;br /&gt;
require_once($CFG-&amp;gt;libdir . &#039;/simpletestlib.php&#039;); // Include the test libraries&lt;br /&gt;
require_once($CFG-&amp;gt;dirroot . &#039;/question/editlib.php&#039;); // Include the code to test&lt;br /&gt;
&lt;br /&gt;
/** This class contains the test cases for the functions in editlib.php. */&lt;br /&gt;
class question_editlib_test extends UnitTestCase {&lt;br /&gt;
    function test_get_default_question_category() {&lt;br /&gt;
        // Do the test here/&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That is, you have a class called something_test, and in that class you have lots of methods called test_something. Normally, you have one test method for each function you want to test, and you may as well called the test method &#039;&#039;&#039;test_name_of_function_being_tested&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Inside a test function ===&lt;br /&gt;
&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
=== Test data ===&lt;br /&gt;
&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
=== Further information ===&lt;br /&gt;
&lt;br /&gt;
The simpletest documentation is at: http://simpletest.sourceforge.net/.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Changes to your existing code to make it work with unit testing ==&lt;br /&gt;
&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== More about unit testing in general ==&lt;br /&gt;
&lt;br /&gt;
The best book I know about unit testing is &#039;&#039;&#039;Pragmatic Unit Testing in Java with JUnit&#039;&#039; by Andrew Hunt and David Thomas. I know, this book is not called Pragmatic Unit Testing in PHP with SimpleTest. However, it is an excellent book - short, to the point, and very practical. Most of what it says is not specific to Java and JUnit and it is obvious how to apply it in our testing setup.&lt;/div&gt;</summary>
		<author><name>Bawjaws</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=User_talk:Helen_Foster&amp;diff=22975</id>
		<title>User talk:Helen Foster</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=User_talk:Helen_Foster&amp;diff=22975"/>
		<updated>2006-05-27T09:40:26Z</updated>

		<summary type="html">&lt;p&gt;Bawjaws: /* Moodle Docs Wiki accidentally switched to Portuguese? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== More hierarchy ==&lt;br /&gt;
&lt;br /&gt;
Hi Helen, I think this wiki is very useful and I would like to thank you for the work you are putting into it. I like your navigation boxes on the module pages. I have a suggestion for extending these: I think it would be nice to have an extra link that allows one to go higher up in the hierarcy to [[Teacher_documentation]]. What do you think? --[[User:Delius|Delius]] 17:48, 26 January 2006 (WST)&lt;br /&gt;
&lt;br /&gt;
:Hi Gustav, thanks for your kind words. Your contributions to the documentation are most welcome. Please feel free to edit [[Template:Quizzes]] or any other template page. You may also wish to consider further use of category pages e.g. [[:Category:Teacher]] for navigation. -- [[User:Helen|Helen]] 18:26, 26 January 2006 (WST)&lt;br /&gt;
&lt;br /&gt;
== Do you monitor all talk pages? ==&lt;br /&gt;
&lt;br /&gt;
Helen, I have posted another question for you on [[Talk:mod/quiz/index]]. Do you get alerted to anything I put on any talk page or should I post on this page if I want you to see it? --[[User:Delius|Delius]] 18:01, 26 January 2006 (WST)&lt;br /&gt;
&lt;br /&gt;
:Hi Gustav, please note that I often check [[Special:Recentchanges|Recent changes]] or the rss feed. --[[User:Helen|Helen]] 18:26, 26 January 2006 (WST)&lt;br /&gt;
&lt;br /&gt;
::Yes, the [[Special:Recentchanges|Recent changes]] page is very useful. You can tell that I have never used a wiki intensively before. Thanks for your tips. --[[User:Gustav|Gustav]] 18:35, 26 January 2006 (WST)&lt;br /&gt;
&lt;br /&gt;
:::Hey, let&#039;s discover the wiki way together! :-) --[[User:Helen|Helen]] 00:24, 27 January 2006 (WST)&lt;br /&gt;
&lt;br /&gt;
==Moodle profile==&lt;br /&gt;
&lt;br /&gt;
Helen- I think you should link to your moodle profile like Martin does (assuming you have one, which I assume &amp;lt;grin&amp;gt;). -- D.I. 29Jan06&lt;br /&gt;
Wow, you&#039;re fast.. .or I&#039;m confused. --D.I. 29Jan06&lt;br /&gt;
&lt;br /&gt;
:Hi D.I. thanks for your suggestion, which [[User:UrsHunkler|someone else]] seem to be following up! ;-) --[[User:Helen|Helen]] 05:00, 30 January 2006 (WST)&lt;br /&gt;
&lt;br /&gt;
== German moodle docs possible? ==&lt;br /&gt;
&lt;br /&gt;
Hello Helen,&lt;br /&gt;
&lt;br /&gt;
thank you very much for these nice and structured doc pages.&lt;br /&gt;
When do you plan to launch a german part of the docs.moodle.org pages?&lt;br /&gt;
I ask these question because i can translate some of the english doc pages to german.&lt;br /&gt;
&lt;br /&gt;
Greetings Christoph&lt;br /&gt;
&lt;br /&gt;
:Hi Christoph, thanks for your kind offer of translation. Please email &#039;&#039;docs AT moodle DOT org&#039;&#039; so I may get in touch with you easily when the German Moodle documentation is launched. --[[User:Helen|Helen]] 05:17, 30 January 2006 (WST)&lt;br /&gt;
&lt;br /&gt;
== German User Docs ==&lt;br /&gt;
&lt;br /&gt;
Thanks a lot, Helen, for all your work. &lt;br /&gt;
I would also like to help with the German version. &lt;br /&gt;
&lt;br /&gt;
Ulrike&lt;br /&gt;
&lt;br /&gt;
:Hi Ulrike, thanks for your kind offer too. MoodleDocs in other languages will happen soon, for sure! --[[User:Helen|Helen]] 08:30, 31 January 2006 (WST)&lt;br /&gt;
&lt;br /&gt;
== Documentation for different versions ==&lt;br /&gt;
&lt;br /&gt;
Helen&lt;br /&gt;
&lt;br /&gt;
Is there a mechanism for specifying which version of Moodle a particular document refers to?  If, for instance, a feature is only available in version 1.6, how would a 1.5.3 user know they couldn&#039;t follow these instructions?&lt;br /&gt;
&lt;br /&gt;
Equally, if something is done differently in two versions, how would we stop an edit war breaking out between 1.5.3 and 1.6 users?&lt;br /&gt;
&lt;br /&gt;
I appreciate this probably isn&#039;t an issue just yet, but it&#039;s possible it may become one in later versions.&lt;br /&gt;
&lt;br /&gt;
Cheers,&lt;br /&gt;
&lt;br /&gt;
[[User:CHRISF|CHRISF]] 19:20, 1 February 2006 (WST)&lt;br /&gt;
&lt;br /&gt;
:Hi ChrisF, thanks for highlighting the issue of differences in Moodle versions. Perhaps a Moodle 1.6 template, inserted using the code &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{Moodle 1.6}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;, may be used to show features specific to Moodle 1.6. What do you think? --[[User:Helen|Helen]] 04:22, 4 February 2006 (WST)&lt;br /&gt;
&lt;br /&gt;
::Good idea.  I think that would clear it up nicely.  [[User:CHRISF|CHRISF]] 18:08, 7 February 2006 (WST)&lt;br /&gt;
&lt;br /&gt;
==Hungarian Moodle Docs==&lt;br /&gt;
&lt;br /&gt;
Hello Helen,&lt;br /&gt;
I may be knocking at the wrong door.&lt;br /&gt;
Could you please create a folder for me to start Moodle documentation in Hungarian please?&lt;br /&gt;
Thanks a lot.&lt;br /&gt;
Karoly&lt;br /&gt;
&lt;br /&gt;
(Karoly Fabricz, kfabricz AT vnet DOT hu)&lt;br /&gt;
&lt;br /&gt;
:Hi Karoly, thanks for your kind offer. Please read the information on [[MoodleDocs:Starting MoodleDocs|starting Moodle Docs in another language]]. I&#039;ll be in touch soon. --[[User:Helen Foster|Helen Foster]] 17:09, 15 March 2006 (WST)&lt;br /&gt;
&lt;br /&gt;
== Belarusian Docs is possible? ==&lt;br /&gt;
&lt;br /&gt;
Dear Helen,&lt;br /&gt;
&lt;br /&gt;
I would like to manage Moodle documentation on Belarusian. Could you create a folder for me to start Moodle documentation in Belarusian, please? Аlphabetic acronym of Belarusian language is be.&lt;br /&gt;
&lt;br /&gt;
Sincerely,&lt;br /&gt;
Maryia Davidouskaia&lt;br /&gt;
(maryia at iatp dot by)&lt;br /&gt;
&lt;br /&gt;
:Hi Maryia, thanks for your kind offer. As I said to Karoly, please read the information on [[MoodleDocs:Starting MoodleDocs|starting Moodle Docs in another language]], and remember that the more people that are involved in creating the documentation, the better it will be. I&#039;ll be in touch soon. --[[User:Helen Foster|Helen Foster]] 17:09, 15 March 2006 (WST)&lt;br /&gt;
&lt;br /&gt;
Ok, You are a STAR!&lt;br /&gt;
&lt;br /&gt;
== Template styles ==&lt;br /&gt;
Hi Helen! I noticed that you reverted my edits on [[Template:Book]] and [[Template:Assignments]]. You were right -- I didn&#039;t realise that the [[MoodleDocs:Styling|style]] doesn&#039;t match [[MoodleDocs:Style guide|moodle.org style]]. However, the current template doesn&#039;t look right either. It should float to the right instead of occupying a substantial part of the upper screen (for eg. on [[Calculated question developer docs]] page) -- this wil provide easier navigation. Also, the tempalate should be colorful and/or bordered -- this looks more attractive and the reader can understand that it is not a part of the article. May be we can have orange or similar colored templates (such as [[Template:Large Installations]] and [[Template:excerpted from Jason Cole]]) that match with moodle.org style? Is there any official style documentation? Is there a moodle.org style guide which describes styles for templates -- I couldn&#039;t find one? [[User:Utkarshraj Atmaram|Utkarshraj Atmaram]] 17:40, 30 March 2006 (WST)&lt;br /&gt;
&lt;br /&gt;
:Hi Utkarshraj, thanks for your contributions to Moodle Docs. As you&#039;ve found, [[MoodleDocs:Style guide]] and [[MoodleDocs:Styling]] contain all the Moodle Docs styling documentation to-date. Please add your comments about template styling to [[MoodleDocs talk:Styling]]. --[[User:Helen Foster|Helen Foster]] 17:26, 31 March 2006 (WST)&lt;br /&gt;
&lt;br /&gt;
::Thank you! I&#039;ve started the discussion at [[MoodleDocs talk:Styling]]. [[User:Utkarshraj Atmaram|Utkarshraj Atmaram]] 19:14, 31 March 2006 (WST)&lt;br /&gt;
&lt;br /&gt;
:::LoL, I just realized that the problem is not with the templates, but with themes. Templates just look find with the MoodleDocs theme, but when I am logged in, I use MonoBook theme -- it doesn&#039;t display them as right-aligned (at Wikipedia, we explicity make the templates right-aligned). Sorry for wasting your time! [[User:Utkarshraj Atmaram|Utkarshraj Atmaram]] 14:44, 18 April 2006 (WST)&lt;br /&gt;
&lt;br /&gt;
== Slovak Moodle Documentation ==&lt;br /&gt;
&lt;br /&gt;
Hi, Helen. We would like to start work on translation on Moodle Slovak (sk) documentation. Please, do you think is it possible? Thank you.&lt;br /&gt;
&lt;br /&gt;
Sincerely, Juraj Chlebec&lt;br /&gt;
havran@gmail.com&lt;br /&gt;
&lt;br /&gt;
:Hi Juraj, thanks for your offer. Please note that, for non iso-8859-1 languages we need to wait for moodle.org to be converted to UTF-8 (since Moodle Docs authenticates against moodle.org) before setting things up. I&#039;ll be in contact when this is done. --[[User:Helen Foster|Helen Foster]] 22:05, 10 April 2006 (WST)&lt;br /&gt;
&lt;br /&gt;
== Polish Moodle Documentation ==&lt;br /&gt;
&lt;br /&gt;
Hello, Helen. I saw Your comments to Juraj&#039;s post, so just want to let you know that we are ready to start polish translation. Hope the situation will change soon.&lt;br /&gt;
&lt;br /&gt;
== Removing erroneous pages ==&lt;br /&gt;
&lt;br /&gt;
How can unsuitable pages be removed? I just found [[RHLANGUAGE]] which is not documentation-quality...&lt;br /&gt;
Maybe you could do it (please) Helen? Not sure.&lt;br /&gt;
&lt;br /&gt;
Best, Dan&lt;br /&gt;
--[[User:Dan Stowell|Dan Stowell]] 04:24, 4 May 2006 (WST)&lt;br /&gt;
&lt;br /&gt;
:Thanks Dan, for future reference please add the deletion template, &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{Deletion}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;, to any unsuitable page you find. --[[User:Helen Foster|Helen Foster]] 04:45, 5 May 2006 (WST)&lt;br /&gt;
&lt;br /&gt;
== Request for help (check) ==&lt;br /&gt;
&lt;br /&gt;
Hi, Sun, could you check this page: https://docs.moodle.org/en/Release_Notes &lt;br /&gt;
all the info written both in 1.6 and 1.5.4 relative to the Authorize plugin? Ethem Evlice requested me to do so, but you know, I&#039;m not the best English checker in the world! ;-) [[User:Eloy Lafuente (stronk7)|Eloy Lafuente (stronk7)]] 17:35, 11 May 2006 (WST)&lt;br /&gt;
&lt;br /&gt;
:NP Sol, I&#039;ve done as requested :-) --[[User:Helen Foster|Helen Foster]] 19:51, 15 May 2006 (WST)&lt;br /&gt;
&lt;br /&gt;
== Moodle Doc Is Great ==&lt;br /&gt;
&lt;br /&gt;
You have done a great job and inspired me to use Media Wiki!&lt;br /&gt;
&lt;br /&gt;
:Thanks Martin, though it&#039;s everyone&#039;s contributions that make Moodle Docs a great resource! --[[User:Helen Foster|Helen Foster]] 06:36, 24 May 2006 (WST)&lt;br /&gt;
&lt;br /&gt;
== Moodle Docs Wiki accidentally switched to Portuguese? ==&lt;br /&gt;
&lt;br /&gt;
Hi Helen, all of the built in Mediawiki content is appearing in Portuguese for me, both before and after I log in. Perhaps an admin setting that&#039;s been accidentally changed? --[[User:David Scotson|David Scotson]] 17:36, 27 Maio 2006 (WST)&lt;br /&gt;
&lt;br /&gt;
:To clarify, only some of the Mediawiki content is in Portuguese. If I go to to the user preferences and choose Portuguese it changes even more text. Changing back to English only returns some text to English. However, choosing French changes all Mediawiki text to French. From this I&#039;m guessing that someone may have overwritten some of the english language files on the server with Portuguese ones. --[[User:David Scotson|David Scotson]] 17:40, 27 Maio 2006 (WST)&lt;/div&gt;</summary>
		<author><name>Bawjaws</name></author>
	</entry>
	<entry>
		<id>https://docs.moodle.org/dev/index.php?title=User_talk:Helen_Foster&amp;diff=22974</id>
		<title>User talk:Helen Foster</title>
		<link rel="alternate" type="text/html" href="https://docs.moodle.org/dev/index.php?title=User_talk:Helen_Foster&amp;diff=22974"/>
		<updated>2006-05-27T09:36:01Z</updated>

		<summary type="html">&lt;p&gt;Bawjaws: /*  Moodle Docs Wiki accidentally switched to Portuguese? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== More hierarchy ==&lt;br /&gt;
&lt;br /&gt;
Hi Helen, I think this wiki is very useful and I would like to thank you for the work you are putting into it. I like your navigation boxes on the module pages. I have a suggestion for extending these: I think it would be nice to have an extra link that allows one to go higher up in the hierarcy to [[Teacher_documentation]]. What do you think? --[[User:Delius|Delius]] 17:48, 26 January 2006 (WST)&lt;br /&gt;
&lt;br /&gt;
:Hi Gustav, thanks for your kind words. Your contributions to the documentation are most welcome. Please feel free to edit [[Template:Quizzes]] or any other template page. You may also wish to consider further use of category pages e.g. [[:Category:Teacher]] for navigation. -- [[User:Helen|Helen]] 18:26, 26 January 2006 (WST)&lt;br /&gt;
&lt;br /&gt;
== Do you monitor all talk pages? ==&lt;br /&gt;
&lt;br /&gt;
Helen, I have posted another question for you on [[Talk:mod/quiz/index]]. Do you get alerted to anything I put on any talk page or should I post on this page if I want you to see it? --[[User:Delius|Delius]] 18:01, 26 January 2006 (WST)&lt;br /&gt;
&lt;br /&gt;
:Hi Gustav, please note that I often check [[Special:Recentchanges|Recent changes]] or the rss feed. --[[User:Helen|Helen]] 18:26, 26 January 2006 (WST)&lt;br /&gt;
&lt;br /&gt;
::Yes, the [[Special:Recentchanges|Recent changes]] page is very useful. You can tell that I have never used a wiki intensively before. Thanks for your tips. --[[User:Gustav|Gustav]] 18:35, 26 January 2006 (WST)&lt;br /&gt;
&lt;br /&gt;
:::Hey, let&#039;s discover the wiki way together! :-) --[[User:Helen|Helen]] 00:24, 27 January 2006 (WST)&lt;br /&gt;
&lt;br /&gt;
==Moodle profile==&lt;br /&gt;
&lt;br /&gt;
Helen- I think you should link to your moodle profile like Martin does (assuming you have one, which I assume &amp;lt;grin&amp;gt;). -- D.I. 29Jan06&lt;br /&gt;
Wow, you&#039;re fast.. .or I&#039;m confused. --D.I. 29Jan06&lt;br /&gt;
&lt;br /&gt;
:Hi D.I. thanks for your suggestion, which [[User:UrsHunkler|someone else]] seem to be following up! ;-) --[[User:Helen|Helen]] 05:00, 30 January 2006 (WST)&lt;br /&gt;
&lt;br /&gt;
== German moodle docs possible? ==&lt;br /&gt;
&lt;br /&gt;
Hello Helen,&lt;br /&gt;
&lt;br /&gt;
thank you very much for these nice and structured doc pages.&lt;br /&gt;
When do you plan to launch a german part of the docs.moodle.org pages?&lt;br /&gt;
I ask these question because i can translate some of the english doc pages to german.&lt;br /&gt;
&lt;br /&gt;
Greetings Christoph&lt;br /&gt;
&lt;br /&gt;
:Hi Christoph, thanks for your kind offer of translation. Please email &#039;&#039;docs AT moodle DOT org&#039;&#039; so I may get in touch with you easily when the German Moodle documentation is launched. --[[User:Helen|Helen]] 05:17, 30 January 2006 (WST)&lt;br /&gt;
&lt;br /&gt;
== German User Docs ==&lt;br /&gt;
&lt;br /&gt;
Thanks a lot, Helen, for all your work. &lt;br /&gt;
I would also like to help with the German version. &lt;br /&gt;
&lt;br /&gt;
Ulrike&lt;br /&gt;
&lt;br /&gt;
:Hi Ulrike, thanks for your kind offer too. MoodleDocs in other languages will happen soon, for sure! --[[User:Helen|Helen]] 08:30, 31 January 2006 (WST)&lt;br /&gt;
&lt;br /&gt;
== Documentation for different versions ==&lt;br /&gt;
&lt;br /&gt;
Helen&lt;br /&gt;
&lt;br /&gt;
Is there a mechanism for specifying which version of Moodle a particular document refers to?  If, for instance, a feature is only available in version 1.6, how would a 1.5.3 user know they couldn&#039;t follow these instructions?&lt;br /&gt;
&lt;br /&gt;
Equally, if something is done differently in two versions, how would we stop an edit war breaking out between 1.5.3 and 1.6 users?&lt;br /&gt;
&lt;br /&gt;
I appreciate this probably isn&#039;t an issue just yet, but it&#039;s possible it may become one in later versions.&lt;br /&gt;
&lt;br /&gt;
Cheers,&lt;br /&gt;
&lt;br /&gt;
[[User:CHRISF|CHRISF]] 19:20, 1 February 2006 (WST)&lt;br /&gt;
&lt;br /&gt;
:Hi ChrisF, thanks for highlighting the issue of differences in Moodle versions. Perhaps a Moodle 1.6 template, inserted using the code &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{Moodle 1.6}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;, may be used to show features specific to Moodle 1.6. What do you think? --[[User:Helen|Helen]] 04:22, 4 February 2006 (WST)&lt;br /&gt;
&lt;br /&gt;
::Good idea.  I think that would clear it up nicely.  [[User:CHRISF|CHRISF]] 18:08, 7 February 2006 (WST)&lt;br /&gt;
&lt;br /&gt;
==Hungarian Moodle Docs==&lt;br /&gt;
&lt;br /&gt;
Hello Helen,&lt;br /&gt;
I may be knocking at the wrong door.&lt;br /&gt;
Could you please create a folder for me to start Moodle documentation in Hungarian please?&lt;br /&gt;
Thanks a lot.&lt;br /&gt;
Karoly&lt;br /&gt;
&lt;br /&gt;
(Karoly Fabricz, kfabricz AT vnet DOT hu)&lt;br /&gt;
&lt;br /&gt;
:Hi Karoly, thanks for your kind offer. Please read the information on [[MoodleDocs:Starting MoodleDocs|starting Moodle Docs in another language]]. I&#039;ll be in touch soon. --[[User:Helen Foster|Helen Foster]] 17:09, 15 March 2006 (WST)&lt;br /&gt;
&lt;br /&gt;
== Belarusian Docs is possible? ==&lt;br /&gt;
&lt;br /&gt;
Dear Helen,&lt;br /&gt;
&lt;br /&gt;
I would like to manage Moodle documentation on Belarusian. Could you create a folder for me to start Moodle documentation in Belarusian, please? Аlphabetic acronym of Belarusian language is be.&lt;br /&gt;
&lt;br /&gt;
Sincerely,&lt;br /&gt;
Maryia Davidouskaia&lt;br /&gt;
(maryia at iatp dot by)&lt;br /&gt;
&lt;br /&gt;
:Hi Maryia, thanks for your kind offer. As I said to Karoly, please read the information on [[MoodleDocs:Starting MoodleDocs|starting Moodle Docs in another language]], and remember that the more people that are involved in creating the documentation, the better it will be. I&#039;ll be in touch soon. --[[User:Helen Foster|Helen Foster]] 17:09, 15 March 2006 (WST)&lt;br /&gt;
&lt;br /&gt;
Ok, You are a STAR!&lt;br /&gt;
&lt;br /&gt;
== Template styles ==&lt;br /&gt;
Hi Helen! I noticed that you reverted my edits on [[Template:Book]] and [[Template:Assignments]]. You were right -- I didn&#039;t realise that the [[MoodleDocs:Styling|style]] doesn&#039;t match [[MoodleDocs:Style guide|moodle.org style]]. However, the current template doesn&#039;t look right either. It should float to the right instead of occupying a substantial part of the upper screen (for eg. on [[Calculated question developer docs]] page) -- this wil provide easier navigation. Also, the tempalate should be colorful and/or bordered -- this looks more attractive and the reader can understand that it is not a part of the article. May be we can have orange or similar colored templates (such as [[Template:Large Installations]] and [[Template:excerpted from Jason Cole]]) that match with moodle.org style? Is there any official style documentation? Is there a moodle.org style guide which describes styles for templates -- I couldn&#039;t find one? [[User:Utkarshraj Atmaram|Utkarshraj Atmaram]] 17:40, 30 March 2006 (WST)&lt;br /&gt;
&lt;br /&gt;
:Hi Utkarshraj, thanks for your contributions to Moodle Docs. As you&#039;ve found, [[MoodleDocs:Style guide]] and [[MoodleDocs:Styling]] contain all the Moodle Docs styling documentation to-date. Please add your comments about template styling to [[MoodleDocs talk:Styling]]. --[[User:Helen Foster|Helen Foster]] 17:26, 31 March 2006 (WST)&lt;br /&gt;
&lt;br /&gt;
::Thank you! I&#039;ve started the discussion at [[MoodleDocs talk:Styling]]. [[User:Utkarshraj Atmaram|Utkarshraj Atmaram]] 19:14, 31 March 2006 (WST)&lt;br /&gt;
&lt;br /&gt;
:::LoL, I just realized that the problem is not with the templates, but with themes. Templates just look find with the MoodleDocs theme, but when I am logged in, I use MonoBook theme -- it doesn&#039;t display them as right-aligned (at Wikipedia, we explicity make the templates right-aligned). Sorry for wasting your time! [[User:Utkarshraj Atmaram|Utkarshraj Atmaram]] 14:44, 18 April 2006 (WST)&lt;br /&gt;
&lt;br /&gt;
== Slovak Moodle Documentation ==&lt;br /&gt;
&lt;br /&gt;
Hi, Helen. We would like to start work on translation on Moodle Slovak (sk) documentation. Please, do you think is it possible? Thank you.&lt;br /&gt;
&lt;br /&gt;
Sincerely, Juraj Chlebec&lt;br /&gt;
havran@gmail.com&lt;br /&gt;
&lt;br /&gt;
:Hi Juraj, thanks for your offer. Please note that, for non iso-8859-1 languages we need to wait for moodle.org to be converted to UTF-8 (since Moodle Docs authenticates against moodle.org) before setting things up. I&#039;ll be in contact when this is done. --[[User:Helen Foster|Helen Foster]] 22:05, 10 April 2006 (WST)&lt;br /&gt;
&lt;br /&gt;
== Polish Moodle Documentation ==&lt;br /&gt;
&lt;br /&gt;
Hello, Helen. I saw Your comments to Juraj&#039;s post, so just want to let you know that we are ready to start polish translation. Hope the situation will change soon.&lt;br /&gt;
&lt;br /&gt;
== Removing erroneous pages ==&lt;br /&gt;
&lt;br /&gt;
How can unsuitable pages be removed? I just found [[RHLANGUAGE]] which is not documentation-quality...&lt;br /&gt;
Maybe you could do it (please) Helen? Not sure.&lt;br /&gt;
&lt;br /&gt;
Best, Dan&lt;br /&gt;
--[[User:Dan Stowell|Dan Stowell]] 04:24, 4 May 2006 (WST)&lt;br /&gt;
&lt;br /&gt;
:Thanks Dan, for future reference please add the deletion template, &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{Deletion}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;, to any unsuitable page you find. --[[User:Helen Foster|Helen Foster]] 04:45, 5 May 2006 (WST)&lt;br /&gt;
&lt;br /&gt;
== Request for help (check) ==&lt;br /&gt;
&lt;br /&gt;
Hi, Sun, could you check this page: https://docs.moodle.org/en/Release_Notes &lt;br /&gt;
all the info written both in 1.6 and 1.5.4 relative to the Authorize plugin? Ethem Evlice requested me to do so, but you know, I&#039;m not the best English checker in the world! ;-) [[User:Eloy Lafuente (stronk7)|Eloy Lafuente (stronk7)]] 17:35, 11 May 2006 (WST)&lt;br /&gt;
&lt;br /&gt;
:NP Sol, I&#039;ve done as requested :-) --[[User:Helen Foster|Helen Foster]] 19:51, 15 May 2006 (WST)&lt;br /&gt;
&lt;br /&gt;
== Moodle Doc Is Great ==&lt;br /&gt;
&lt;br /&gt;
You have done a great job and inspired me to use Media Wiki!&lt;br /&gt;
&lt;br /&gt;
:Thanks Martin, though it&#039;s everyone&#039;s contributions that make Moodle Docs a great resource! --[[User:Helen Foster|Helen Foster]] 06:36, 24 May 2006 (WST)&lt;br /&gt;
&lt;br /&gt;
== Moodle Docs Wiki accidentally switched to Portuguese? ==&lt;br /&gt;
&lt;br /&gt;
Hi Helen, all of the built in Mediawiki content is appearing in Portuguese for me, both before and after I log in. Perhaps an admin setting that&#039;s been accidentally changed? --[[User:David Scotson|David Scotson]] 17:36, 27 Maio 2006 (WST)&lt;/div&gt;</summary>
		<author><name>Bawjaws</name></author>
	</entry>
</feed>