Quail

A free and open-source browser for question banks

For Windows, Mac, and Linux

↓ Download Quail

↓ Sample QBank

Quail is BYOqB

Meaning, bring your own question bank.

Create

Question banks are made up of HTML files that can be created in graphical web editors or even word processors.

Share

Sharing a question bank is no harder than sharing a folder. Remember to avoid copyright infringement.

Sync

Progress is saved in a file within the question bank folder, so any sync service (Dropbox, Google Drive, etc) can be used.

Creating a Question Bank

Quail question banks are folders enclosing HTML files for questions and solutions. Each question/solution pair is defined by a numerical question ID that is the start of both filenames. Files for questions end in '-q.html' and files for solutions end in '-s.html'.

You can generate HTML from formatted text using a variety of software, including online tools (like this one) or even Microsoft Word (Save As > Web Page).

Example: create a new folder containing the files 001-q.html and 001-s.html for question #1 and solution #1. The next question/solution pair will be named 002-q.html and 002-s.html, and so on.

Media files such as images and audio can be included in the question bank folder. Embed the media inside the html files to have it display within questions or solutions. For example, 001-img-1.png can be embedded in  001-q.html  by including  <img src="./001-img-1.png">.

In question files, Quail will automatically detect answer choices if they have the following characteristics: (1) composed of a single capital letter (A, B, C, etc.), (2) begin on a new line, and (3) are followed by a ')' or '.' before the answer choice text. For example:

A) Quail
B) Cockatoo
C) Parakeet
D) Magpie


In solution files, Quail will automatically detect the correct answer if it is written in the following format:

Correct Answer: A


Optional:

Automatic detection can be unreliable, so having a choices.json file is a better way to include choice and correct answer information. This file is created using question IDs as keys, and includes each answer option as well as the correct answer.

{
  "001": {"options":["A","B","C","D"], "correct":"A"},
  "002": {"options":["A","B","C","D","E","F","G","H"], "correct":"D"},
  "003": {"options":["A","B","C","D"], "correct":"C"}
}


The example above defines answer options and correct answers for 3 questions with question IDs '001', '002', and '003'.

Tags and subtags allow for categorizing questions on multiple axes. For example, a question about the quail (bird) can be tagged as 'Animal Type': 'Bird', and 'Conservation Status': 'Least Concern".

Create a file tagnames.json that contains the names of top level tags in this format:
{
  "tagnames": {"0": "Animal Type", "1": "Conservation Status"}
}

Create a file index.json that contains question IDs as keys and the corresponding subtags for each tag. For example:
{
  "001": {"0":"Bird", "1":"Least Concern"},
  "002": {"0":"Mammal", "1":"Critically Endangered"},
  "003": {"0":"Reptile", "1":"Vulnerable"}
}

In this example, there are 3 questions with question IDs '001', '002', and '003', all of which are categorized by animal type and conservation status. 'Bird', 'Mammal', and 'Reptile' are all subtags of 'Animal Type' (indicated by key = '0'), and 'Least Concern', 'Critically Endangered', and 'Vulnerable' are all subtags of 'Conservation Status' (indicated by key = '1'). 

Question banks can define info panes that are available to the user during exam mode. Each question pane is an HTML file that opens in a popup. For example, we can create two panes, presidents.html and calculator.html

To allow quail to recognize these panes, create a file panes.json formatted as shown below. The key ("Presidents" or "Calculator") is used as the text for the button to open that pane. The corresponding HTML file is specified for each key, and an initial popup size (in pixels) may be defined as well.
{
  "Presidents": {
    "file": "presidents.html",
    "prefs": "width=400,height=800"
   },
  "Calculator": {
    "file": "calculator.html",
    "prefs": "width=300,height=450"
   }
}

Quail allows for ordered question groups that should be displayed sequentially. Any question can define a question ID to come before it, and another question ID to come after it.

For example, create a file groups.json formatted like this:

{
  "003": {"next": "004", "prev": null},
  "004": {"next": null, "prev": "003"}
}

The example above involves 2 questions with IDs '003' and '004'.

Question '003' uses "next": "004" to specify that question '004' should always appear next, and uses "prev": null to specify that there is not a question that should precede it.

Question '004' uses "next": null to specify there is no specific question that needs to appear next, and uses "prev": "003" to specify that question '003' should always appear before it.

Other questions ('001', '002', '005', etc.) are not affected by the groups defined above. Only question IDs involved in groups should be listed in this file. 

If you're trying to recreate a question set found online for use in Quail, the following tools may be helpful:

  • Selenium WebDriver - allows for programmatic control of a browser, including saving content to files

Remember that commercial materials are usually protected by copyright, and therefore should not be reproduced for use with Quail.