v1.2.0
  - [bugfix]   Fix a bug where markup [containers] weren't 100% high by default
               which caused some problems with slide layout.
  - [internal] Rewrite most web interface JavaScript files and clean them up.
  - [docs]     Add JSDoc documentation to web interface JavaScript.
  - [docs]     Improve documentation about Docker and about reverse proxy config.
  - [feature]  Implement support for passwordless users.
  - [feature]  Implement a bootstrap page for automating passwordless logins.
  - [bugfix]   Fix a bug where non-admin users couldn't change passwords.

v1.1.1
  - [feature]  Enable multiarch Docker image builds in the CI pipepline. Images
               are now built for AMD64, ARMv6, ARMv7 and ARM64.

v1.1.0
  - [internal] Separate private and public files in the directory tree
               to naturally prevent access to private files. (PR #56)
  - [feature]  Implement [bgimg] and [bgcolor] markup tags for styling
               slide backgrounds. (issue #75)
  - [feature]  Implement buttons for manual slide navigation in display.
  - [internal] Mostly rewrite the API system
  - [internal] Use PHP autoloading and namespaces instead of direct
               file includes.
  - [internal] Improve various classes and PHP files to make them more object
               oriented.
  - [internal] Implement a testing framework with PHPUnit and write tests
               for all API endpoints.
  - [bugfix]   Fix various bugs in the backend that were discovered while
               writing tests.
  - [build]    Make the build system more modular.
  - [build]    Write separate interactive and CLI versions of the apache2-debian
               target. (apache2-debian-interactive and apache2-debian)
  - [build]    Various improvements to the build system.
  - [docs]     Generate documentation with Doxygen.
  - [internal] Implement HTTP cache support for slide asset fetching endpoints.
               (issue #53)
  - [bugfix]   Fix a bug where uploading/removing slide assets was allowed even
               when the slide was not locked. (issue #81)
  - [bugfix]   Fix a bug where a slide could be deleted even when it was
               not locked. (issue #80)
  - [bugfix]   Fix a bug where an error was thrown when changing queues if an
               unsaved slide was open. (#86)
  - [feature]  Implement a data migration system for simplifying upgrades
               between different versions of LibreSignage.
  - [bugfix]   Fix outdated information in documentation.

v1.0.3
  - [bugfix]   Fix a bug where slide markup error indicators weren't cleared
               if the slide with the errors was removed. (issue #97)
  - [bugfix]   Attempt to fix a bug that caused a memory leak on the
               display page. (issue #101)

v1.0.2
  - [bugfix]   Apply a workaround for docker-library/php#865 which broke
               LibreSignage Docker image builds.
  - [bugfix]   Use rsvg-convert instead of ImageMagick's convert due to problems
               with convert crashing.
  - [bugfix]   Fix a bug that caused display users logged in with a (permament)
               display session to be logged out after a certain amount of time.

v1.0.1
  - [bugfix]   Fix a bug where using forward slashes in slide markup caused
               exceptions. (issue #66)
  - [bugfix]   Fix a bug where passing a NULL exception to error_handle() caused
               a fatal exception in some cases. (issue #61)
  - [feature]  Tag new Docker releases with the 'latest' tag.
  - [bugfix]   Fix standalone checks in the API interface module.
  - [bugfix]   Fix incompatible pandoc version in Travis CI. (issue #58)
  - [feature]  Implement the INITCHK_WARN make option for ignoring errors
               from initialization checks.
  - [bugfix]   Fix a bug where User::load() didn't properly check usernames.

v1.0.0
  - [internal] Modularize and improve the build system.
  - [feature]  Implement an improved configuration file loader that
               supports loading configuration from multiple files.
  - [feature]  Implement functionality for building LibreSignage
               Docker images.
  - [bugfix]   Fix a bug that prevented removing slide assets that didn't
               have a thumbnail.
  - [internal] Improve display animation performance by optimizing
               CSS and JavaScript. Browsers are now also hinted to use
               GPU acceleration for rendering the display.
  - [bugfix]   Fix a missing class definition that caused problems when
               uploading files.
  - [bugfix]   Fix a bug where the editor media uploader popup didn't
               close when the (X) button was clicked if an uploade had
               previously failed.
  - [feature]  Allow space characters in upload filenames.
  - [bugfix]   Implement automatic slide lock cleanup on logout.
  - [feature]  Rewrite the web interface to use a Model, View, Controller
               architecture. Various JavaScript components used in the
               interface were also rewritten in the process.
  - [feature]  Create a LibreSignage logo and use it throughout the
               web interface.
  - [bugfix]   Fix a bug where creating more slides than what's allowed
               by the slide quota caused invalid slides to be left in
               slide queues. (issue #34)
  - [feature]  Add a muted parameter to the [video] markup tag.
  - [internal] Implement EventData to pass data and hook functions to
               event handlers.
  - [bugfix]   Properly copy assets when duplicating slides (issue #33).
  - [internal] Remove non-working API unit tests.
  - [feature]  Redirect users to the originally requested URL after login.
               (issue #41)
  - [feature]  Check build dependency versions when building.
  - [feature]  Implement a startup splash screen for the display page.
  - [feature]  Implement automatic deployment of nightly builds to Docker
               Hub from Travis CI.
  - [internal] Speed up build scripts by changing how 'find' is used.
  - [bugfix]   Fix a bug where cloning a slide with no thumbnail resulted
               in an error. (issue #33)
  - [bugfix]   Fix 'Upload' button placement in the slide media uploader
               popup.
  - [bugfix]   Fix various bugs where doubleclicking controls caused JS
               errors in the web interface.
  - [bugfix]   Properly disable the 'Save' button after clearing password
               inputs in the user settings page.
  - [bugfix]   Fix a bug where certain filetypes couldn't be uploaded in
               the slide media uploader.

v0.2.2
  - [bugfix]   Fix a bug that prevented removing slide assets that didn't
               have a thumbnail.
  - [bugfix]   Fix dialogs not appearing correctly on the documentation
               pages.
  - [bugfix]   Fix a bug where adding media to user-created slides didn't
               work. (#27)
  - [feature]  Implement a new tag [font] in the markup transpiler for
               changing fonts in slides. (#28)
  - [bugfix]   Add a missing class definition that caused problems when
               uploading files.
  - [bugfix]   Fix a bug where the editor media uploader popup didn't
               close if the (X) button was clicked after an upload had
               failed.
  - [feature]  Allow space characters in upload filenames.
  - [bugfix]   Implement automatic slide lock cleanup on logout.

v0.2.1
  - [bugfix]   Fix a bug where the timeline didn't update after the
               selected queue was changed.
  - [bugfix]   Fix a server-side bug that prevented user creation from
               the user manager.

v0.2.0
  - [feature]  Implement keyboard shortcuts for the editor.
  - [feature]  Make it possible to preserve instance data when
               reinstalling.
  - [feature]  Implement a live slide preview in the editor.
  - [internal] Self host font files. (I actually don't particularly
               like including binary files in the GIT tree but I don't
               know of a better way so the font files are now included
               in the tree.)
  - [internal] Use SCSS instead of plain CSS for the stylesheets.
  - [internal] Import Bootstrap straight into the _default.scss file
               instead of including it in the HTML <head> tag.
  - [internal] Process CSS using PostCSS /w Autoprefixer.
  - [bugfix]   Fix a major security issue where the contents of the
               'data/' directory were accessible by requesting the
               different files with eg. a web browser. Even directory
               listings were enabled.
  - [feature]  Completely rewrite the markup transpiler system to
               improve its error detecting and reporting capabilities.
               The rewrite also introduced many other improvements. The
               transpiler now uses the familiar lexer-parser-evaluator
               architecture that most compilers use.
  - [feature]  Improve markup error reporting in the editor UI. Erroneous
               code lines are now highlighted in the editor input.
  - [bugfix]   Confirm before changing the queue if an unsaved slide
               is being edited in the editor (#17).
  - [bugfix]   Prevent creating duplicate queues in the editor.
  - [bugfix]   Don't show unstyled slide previews to users in the editor
               by making sure the necessary CSS is loaded before showing
               content.
  - [bugfix]   Fix a bug resulting in spurious slide changes on the
               display page.
  - [improve]  Make the login and user manager pages more mobile friendly.
  - [feature]  Implement a Quick Help view in the editor.
  - [Internal] Implement a new way of exporting PHP object data by using
               a class called Exportable.
  - [feature]  Implement slide locking to prevent simultaneous editing
               of slides (issue #18).
  - [internal] Rewrite most of the PHP session handling code. Implement
               a new class called Session for handling & storing session
               data.
  - [internal] Implement a simple assertion system in JavaScript.
  - [internal] Implement file uploading via the API system.
  - [feature]  Implement media storage & uploading in the backend and
               editor.
  - [feature]  Implement embedding video in slides using [video] tags.
