Ctrl K
ComunidadGuías…

CHANGELOG.md

Rama master · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
# Change Log

## [1.10.15] - 2026-10-29

### Changed

- Upgraded Python dependencies other than `nltk`. Note that if you are
  using third-party Python packages, you may encounter dependency
  conflicts. It is possible that your interviews will need to be
  updated.
- Upgraded CodeMirror.

## [1.10.14] - 2026-10-22

### Changed

- Upgraded `CairoSVG`, `certifi`, `Mako`, `multidict`, `PyJWT`,
  `urllib3`, and `Werkzeug`.

### Fixed

- Avoid red shadow on signature images added to PDF files.

## [1.10.13] - 2026-10-01

### Fixed

- Issue with converting question to data when the `code` variant of
  `show if` caused a multiple choice question not to appear on the
  screen.
- The "Are you sure?" message was appearing when a new Playground
  interview was saved.

## [1.10.12] - 2026-09-27

### Added

- Configuration directive for setting a default value for the `send
  question data` feature.

### Fixed

- Adjusted the code that calls S3 so that it is compatible with
  servers that do not return `Content-Type`.
- Added `DBPORT` to `Docker/env.list`.

## [1.10.11] - 2026-09-20

### Fixed

- The address autocomplete feature was not actually as configurable as
  the documentation suggested.
- The `css class` of a radio or checkbox item was attached to the
  `<input>` but not to the `<label>`. It is now attached to both.

## [1.10.10] - 2026-09-12

### Fixed

- Input sanitization for LDAP login method.

## [1.10.9] - 2026-09-12

### Changed

- The `editable: False` option for `pdf template file` is implemented
  a different way, which should provide improved accessibility.
- For purposes of salutations and pronouns, gender is
  case-insensitive.

## [1.10.8] - 2026-09-07

### Changed

- The `_edit_button()` and `_delete_button()` methods now have a third
  positional argument, `item`. *Note that this is a breaking change*
  if you use `_edit_button()` or `_delete_button()`, so you will need
  to update your methods.
- Checkboxes and radio buttons no longer use JavaScript.
- Users of screen readers will hear "Deleted" after pressing a
  "Delete" button on a `table`.
- Changed aria settings of the elements containing flash messages, so
  that messages are announced to screen readers. If you have modified
  `alert container html` and/or `alert html`, you may want to make
  note of these changes.
- Users of screen readers now see a "Skip to main content" link that
  focuses the question, bypassing navigation.
- When the spinner appears, users of screen readers will hear
  "Please wait."
- When fields appear due to a `show if` being triggered, users of
  screen readers will hear "Additional fields have appeared."
- Users of screen readers will hear the list of sections in the
  navigation bar as separate items.
- The progress bar's `aria-valuenow` is now always an integer.
- Updated the progressive disclosure recipe to use
  `<details>`/`<summary>`.
- Changed the HTML of "terms" to add `role="button"` and to use a
  trigger based on focus.
- Removed `bootstrap-fileinput` plugin for styling file input
  elements.
- After a new screen is loaded, the focus will switch either to a form
  field or to the text of the `question`.
- Removed the unnecessary `visually-hidden` `<legend>` messages that
  provided context (e.g. "press one of the following buttons");
  replaced `<fieldset>` with `<div>`.
- The `log()` function now accepts a `priority` of `aria`, which shows
  a message in a `visually-hidden` `<div>` inside of `#daflash`.

### Fixed

- Fixed issue with the session id not being set in the global
  variables immediately after a `new_session` is created.
- Prevented error message appearing under some circumstances when a
  package is deleted.

## [1.10.7] - 2026-08-01

### Fixed

- Downgraded `nltk` in order to avoid requiring a system upgrade.

## [1.10.6] - 2026-08-01

### Added

- New permission `read_packages` so that users without
  `admin` or `developer` privileges can use the API to obtain a list
  of packages.

### Changed

- Upgraded Python dependencies. Note that if you are using third-party
  Python packages, you may encounter dependency conflicts. It is
  possible that your interviews will need to be updated.
- Python 3.12 or later is now required, so if you are running an old
  Docker container with Python 3.10 or earlier, you cannot upgrade
  beyond version 1.10.5.
- Upgraded Font Awesome and CodeMirror.
- `hide continue button` and `disable continue button` now accept a
  YAML boolean rather than only a Python expression.
- The `submit` screen part can be specified on a `question`.
- `DAOAuth` can be configured with `extra_auth_args` and
  `url_style_short`.
- The Package Management page shows the same report as the
  Configuration page.

### Fixed

- Action buttons were not listed in data version of a question.
- Bug where the use of `value()` could raise an exception.

## [1.10.5] - 2026-07-13

### Fixed

- Issue with `_reorder_buttons()`.
- `role="alert"` not added to flash messages that are part of the
  HTML.

## [1.10.4] - 2026-07-06

### Fixed

- Issue with the Playground variables list not being able to be
  generated.

## [1.10.3] - 2026-07-04

### Fixed

- Issue with `table css class`.
- Issue with Google Drive and OneDrive sync.

## [1.10.2] - 2026-07-01

### Added

- The `enable translation` Configuration directive.

### Changed

- If `enable playground` is false, the Playground page, the Utilities
  page, and other code associated with interview development will not
  be loaded.

### Fixed

- Problem with Celery not being fully configured.
- Bug in fax configuration.
- Added input santiation on admin-only endpoint /logfile.
- Added Twilio verification to /sms endpoint.

## [1.10.1] - 2026-06-29

### Fixed

- Errors related to add-on package installation.

## [1.10.0] - 2026-06-28

### Added

- The `enable api`, `enable email server`, `enable object storage`,
  `enable daglobal`, `enable json storage`, `enable sms interface`,
  `enable faxing`, and `enable tts` Configuration directives.
- The `pip trusted host` Configuration directive.

### Changed

- The internal organization of the source code has changed
  significantly. Documented functionality has not changed, but if your
  code imports undocumented names, you may find that the name has
  moved to another module. Testing your interviews on a development
  server is recommended before upgrading a production server.
- `pluggy` is now used to give `docassemble.base` access to
  functionality in `docassemble.webapp`.
- Flask blueprints are now used for features of
  `docassemble.webapp`. Configuration directives like `enable
  training` and `allow log viewing` will now prevent the importing of
  the code underlying the disabled features. Turning off these
  features can decrease uWSGI memory usage by 29%.
- SQLAlchemy models now inherit from `sqlalchemy.org.DeclarativeBase`
  rather than `db.model`.
- Celery tasks are now invoked using signatures.
- Added a dependency on `pyopenssl` not because it is needed, but
  because a version conflict with `cryptography` will prevent the
  web application from starting.

### Fixed

- Issue with `list collect` and `input type: hidden`.

## [1.9.13] - 2026-06-03

### Fixed

- Issue with converting fillable PDFs to PDF/A.

## [1.9.12] - 2026-05-11

### Fixed

- Issue with `Flask.SocketIO`.

## [1.9.11] - 2026-05-08

### Fixed

- Issue with `value()` and `undefine()` on systems running Python 3.13
  or above.

## [1.9.10] - 2026-05-03

### Fixed

- Pickle error introduced in 1.9.9.

## [1.9.9] - 2026-05-03

### Changed

- In the Docker image, the underlying operating system is upgraded
  from 24.04 to 26.04, the version of PostgreSQL in the image is
  upgraded from 16 to 18, and the version of Python in the image is
  upgraded from 3.12 to 3.14. Note that Python 3.14 may raise errors
  that Python 3.12 did not, or it may change which versions of
  third-party Python packages are available to be installed. (System
  upgrade required.)
- `unoconv` has been replaced with `unoserver`. The `enable unoconv`
  and `ENABLEUNOCONV` settings have not changed names. (System upgrade
  required.)
- When images are included in documents assembled using Pandoc or
  `docx template file`, alt text is included.
- The `prevent going back` modifier can now refer to a Python
  expression.

### Fixed

- The use of keymaps with CodeMirror was only functional for emacs; it
  is now functional for `emacs`, `vscode`, or `vim`.
- Raw attachments are now included when attachments are downloaded as
  a ZIP file.

## [1.9.8] - 2026-04-12

### Changed

- The instructions for writing Python modules that define `SQLObject`
  have changed.
- If you include a `variables snapshot db` item in your configuration,
  and there is any problem connecting to the database, the web
  application will not start, and you will need to fix the problem
  using command line tools, just as if you made a mistake in the `db`
  configuration.

### Fixed

- Typo in `setuptools` specification of packages generated by the
  Playground.
- Non-thread-safe methods of loading external databases in the
  `SQLObject` and `variables snapshot db` features.
- Issue with converting Markdown to PDF when the Markdown includes
  tables, with the latest version of Pandoc.
- Issue with `alembic` disabling `logging`.
- The `numpy` and `scipy` packages were inadvertently upgraded,
  preventing Python 3.10 users from upgrading.
- The `include_docx_template()` function did not handle non-string
  keyword arguments.

## [1.9.7] - 2026-04-05

### Changed

- Removed unnecessary Python dependencies from `docassemble.webapp`
  and `docassemble.base`.
- Removed all dependencies from `docassemble.demo`. If you want to be
  able to run all of the demo interviews, you will need to install
  `ics`, `openai`, `anthropic`, `gspread`, and `matplotlib` manually.
- Upgraded `setuptools`.
- Improved debugging of `CustomDataType` JavaScript.
- Made changes to the code for compatibility with Python 3.13.
- Changed the default value of `user can request developer account` to
  `False`.
- Allowed `auth0` configuration to set an `audience domain` different
  from the `domain`.

### Fixed

- Problem with NGINX log rotation.

## [1.9.6] - 2026-03-27

### Fixed

- Removed dependency on `telnyx`.

## [1.9.5] - 2026-03-24

### Fixed

- Issue with upgrade of `werkzeug` and `flask`.

## [1.9.4] - 2026-03-24

### Changed

- Upgraded `werkzeug` and `flask`.

### Fixed

- Issue introduced in 1.9.3 that prevented the `nltk` daemon from
  starting.

## [1.9.3] - 2026-03-23

### Added

- Files in `docassemble.demo` for the recipe in the documentation
  that demonstrates the `AIHelper` class.

### Changed

- The `objects from file` block and the `objects_from_file()` function
  now return a `DAList` instead of a `list` when `use_objects` is
  true and a list of items is encountered in the data structure.
- Downgraded `numpy`, `scipy`, and `scikit-learn` to allow Python 3.10
  to continue to be used.
- Upgraded `bootstrap-fileinput`.
- Migrated the websockets interface from `eventlet` to `gevent`.
- Moved code that depends on `nltk` into a daemon in order to optimize
  restart speed (system upgrade required).
- Moved some package loads from server start time to runtime in order
  to optimize restart speed.
- Updated restart process so that code runs in parallel.
- A restart after a Configuration change no longer runs
  `create_tables`.
- Applied security updates recommended by `dependabot`.
- Upgraded `docxcompose`.
- Updated documentation links and test scripts.
- Changed names of buttons in the Profile settings.

### Fixed

- Truncated `pip` logs to avoid errors during upgrade process.
- Issue with default values of custom data types after a `validation
  code` validation error.

## [1.9.2] - 2026-01-27

### Added

- The `allow external auth to bypass local auth` Configuration
  directive.

### Changed

- The `.bates_number()` method of `DAFile` now accepts parameters
  `offset_horizontal`, `offset_vertical`, and `font_size`.
- Upgraded `azure-core`, `wheel`, `numpy`, and `pyasn1`.
- Downgraded `contourpy` to avoid requiring Python 3.11.

## [1.9.1] - 2026-01-11

### Fixed

- Applied security-related patch upgrades.
- Issue with `include_docx_template()` used in a Celery process.

## [1.9.0] - 2025-12-31

### Added

- The `.cancel_add_or_edit()` method of `DADict`.
- The methods `_edit_button()`, `_delete_button()`, and
  `_add_action_button()` of the `DADict` class, so that `DADict` can
  be subclassed for customizing the appearance of these buttons.
- The `remove()` class method of `DAGlobal` that can be used to delete
  any key from the data store, for any given base.

### Changed

- Upgraded Python dependencies. Note that if you are using third-party
  Python packages, you may encounter dependency conflicts. It is
  possible that your interviews will need to be updated.
- Upgraded Font Awesome, Bootstrap, and CodeMirror.
- Use process-local rather than thread-local variables to store global
  information in the context of the Celery background task system.
- The `plain()`, `bold()`, and `italic()` functions will return the
  empty string if given blank space.
- Added additional information to Mako error messages.
- The `.complete_elements()` method of `DAList` and `DADict` now
  returns an object of the same class, rather than a pure Python data
  structure.
- The Google Drive sync and OneDrive sync result page now wait for
  the server to finish restarting.

### Fixed

- Avoided `KeyError` error messages related to `gathering_mode` and
  `save_status`.
- Avoided translation of non-user-facing Mako template text in field
  modifiers.
- Fix to dictionary gathering.
- The restart process from the Configuration page could show a 502
  error to the user when the Python app is behind a reverse proxy.
- The Microsoft Azure mail sending feature did not support sending to
  bcc recipients.

## [1.8.18] - 2025-11-01

### Fixed

- Bugs with the Monitor system introduced in 1.8.0.
- Bug where generated `pyproject.toml` files contained the license in
  the wrong place.

## [1.8.17] - 2025-10-05

### Added

- Support for using Basic Auth when using Gotenberg.

### Fixed

- Make symbolic links in `files` relative instead of absolute.
- Prevent the `temporary` and `once_temporary` parameters to
  `interview_url()` and `interview_url_action()` from passing through
  to the URL.
- When single-server mode is in use and the `db` database is remote,
  avoid creating or restoring the `db` database locally.
- The daily cron job should backup the local PostgreSQL database even
  if there is a non-PostgreSQL database as the main database.
- Only call `supervisorctl` if `supervisord` is in use.
- Incorrect output filename when using CloudConvert.

## [1.8.16] - 2025-09-27

### Fixed

- Issue introduced in 1.8.15 related to unpickling Celery return
  values.

## [1.8.15] - 2025-09-27

### Added

- The `celery task routes` Configuration directive.

### Changed

- The `mmdc()` function in `docassemble.base.mermaid` is
  deprecated. The module will be removed in a future version.

### Fixed

- The `continue button field` information was not submitted when
  `maximum image size` feature was used.
- If a signature image after trimming is very small, the trimmed
  version is not used.

## [1.8.14] - 2025-09-15

### Added

- The `login_method` and `phone_number` attributes of `user_info()`.
- The `log to std` Configuration directive to log all output to
  STDERR.
- The `enable training` Configuration directive for disabling the
  Train page.
- The `enable monitor` Configuration directive for disabling the
  Monitor page.

## [1.8.13] - 2025-09-07

### Added

- On the Playground Packages page, if the GitHub button is clicked,
  developers can deselect particular files from the commit.

### Changed

- The number of fonts installed in the underlying Ubuntu operating is
  reduced to the minimum fonts required by `libreoffice`, `texlive`,
  `ttf-mscorefonts-installer`, `fonts-liberation`, and
  `fonts-dejavu-core`. The removal of these fonts may affect DOCX to
  PDF conversion, especially if you are using languages other than
  English. If the environment variable `DAEXTRAFONTS` is `true`, then
  these additional fonts will be installed during container
  startup. You can also install particular fonts using the `PACKAGES`
  environment variable. This change only takes effect on new
  installations or system upgrades.
- Likewise, the Google Fonts will now be installed when the container
  starts, and only if the environment variable `DAGOOGLEFONTS` is
  `true`. This change only takes effect on new installations or system
  upgrades.

### Fixed

- Made `ruamel.yaml` objects thread-local due to issues on `arm64`
  architectures.

## [1.8.12] - 2025-09-01

### Added
- The `'wait'` option for the `command()` function, which causes the
  user's web browser to wait a number of seconds and then query the
  interview logic again.
- The `BackgroundAction` object for calling `background_action()` and
  retrieving the result transparently.
- The `[NO_EMOJIS]` command to turn off interpretation of inline icons
  (e.g. `:face-smile:`).

### Fixed
- Bug with `interview delete days by filename` when days are `0`.
- Service account authentication with `DAGoogleAPI` is now using a
  different method that does not cause `google-api-python-client` to
  trigger an exception.

## [1.8.11] - 2025-08-21

### Changed
- The `action_call` JavaScript function takes a fifth parameter
  (`readOnly`). If set to a true value, the server processes the
  action without saving any changes to the interview answers, and
  without preventing other concurrent processes from accessing the
  interview answers.
- The `/api/session/action` takes an optional data value `read_only`,
  which behaves similarly.
- The `run_action_in_session()` function takes an optional keyword
  parameter `read_only`, which behaves similarly.

### Fixed
- Issue with `use nginx to serve files` on the Logs page.
- Issue with input validation on the License field of the Playground
  Packages page.

## [1.8.10] - 2025-08-18

### Changed
- When `set_save_status('ignore')` is called, the lock on the
  interview answers will be released. After
  `set_save_status('ignore')` is called, the save status cannot be
  changed to something else.

### Fixed
- Issues with compatibility with Python 3.10.

## [1.8.9] - 2025-08-17

### Changed
- Incorporated `szimek/signature_pad` JavaScript into the operation of
  `datatype: signature`.

### Fixed
- Updated advanced usage of `address autocomplete` in light of the
  switch to the "Places API (New)" API.

## [1.8.8] - 2025-08-15

### Fixed
- Error when installing add-on packages created by earlier versions.

## [1.8.7] - 2025-08-14

### Added
- Support for single-sign-on with Authentik.
- Support for sending email with Microsoft Azure using the Graph API.

### Fixed
- On the Playground Packages page, adapted the input validation on the
  License field to better align with PEP 621 and PEP 639.

## [1.8.6] - 2025-08-12

### Fixed
- Issues with comboboxes.

## [1.8.5] - 2025-08-11

### Fixed
- Issue with pyproject.toml files.
- Issue with comboboxes.

## [1.8.4] - 2025-08-10

### Fixed
- Revised Redis code for compatibility with Redis servers.
- Revised datetime code for compatibility with Python 3.10.

## [1.8.3] - 2025-08-10

### Fixed
- Downgraded `scipy` and `contourpy` for compatibility with Python 3.10.

## [1.8.2] - 2025-08-10

### Fixed
- Downgraded `numpy` for compatibility with Python 3.10.

## [1.8.1] - 2025-08-10

### Fixed
- Dependency problem with 1.8.0.

## [1.8.0] - 2025-08-10

### Added
- The `javascript defer` Configuration directive. If set to `True`,
  then the `<script>` tags that load JavaScript files will have the
  `defer` tag set. This is recommended for speeding up the loading of
  the page.
- The `use nginx to serve files` Configuration directive. If set to
  `True`, then file downloads will be served in a more efficient
  manner, transferring the load from Python to NGINX to process the
  contents of the file. Since this feature requires a change to the
  NGINX configuration file template, a system upgrade is required if
  you want to enable this feature. Alternatively, you can manually
  edit the NGINX configuration file template.
- Methods `_reorder_buttons()`, `_edit_button()`, `_delete_button()`,
  and `_add_action_button()` of the `DAList` class, so that `DAList`
  can be subclassed for customizing the appearance of these buttons.
- The Configuration directive `use places api new` under `google` for
  enabling use of the Google "Places API (New)."

### Changed
- Upgraded Python dependencies. Note that if you are using third-party
  Python packages, you may encounter dependency conflicts. It is
  possible that your interviews will need to be updated.
- Upgraded Font Awesome, Bootstrap, and CodeMirror.
- The default action for the menu/navigation bar `exit link` is now
  `leave` (which leaves interview answers intact) instead of `exit`
  (which deletes interview answers).
- On the Playground Packages page, the License must now contain a
  valid SPDX identifier for a license, like `MIT` or `GPL-3.0`.
- Changed the behavior of the `.get()` method of `DADict` so that its
  behavior does not differ from the `.get()` method of `dict`.
- Packages created from the Playground will now have a
  `pyproject.toml` file as well as a `setup.py` file.
- When packages are imported, the `pyproject.toml` file will be
  parsed, if it is present.
- The Google "Places API (New)" is now supported for the `address
  autocomplete` feature. For backwards compatibility, this is not
  enabled by default. Set `use places api new: True` under the
  `google` directive in the Configuration to enable use of the new
  API. You will need to enable the API in your Google Cloud
  Console first.
- When `use places api new` is `True`, then when `address
  autocomplete` is used and there is a field for the `zip` attribute
  of the `Address`, it will be populated with the ZIP+4, if available.
- When `datatype: ajax` is used, the button on the input element is
  non-functional.
- When the `script` modifier on a `question` is used, the contents
  should no longer contain `<script>` and `</script>` tags; if present
  they will be stripped out. Using `script` modifiers is discouraged;
  it is better to use a JavaScript file and listen for the
  `daPageLoad` event.
- Replaced `variables_snapshot_connection()` with
  `variables_snapshot_connect()`. For backwards compatibility,
  `variables_snapshot_connection()` still works the same way.

### Fixed
- Adjusted for Sendgrid reversing order of attachments.

## [1.7.7] - 2025-06-10

### Added
- The `describe file types` attachment modifier.

### Fixed
- Issue with retrieving the JSON representation of `question` that
  uses `list collect` and `uncheck others`.

## [1.7.6] - 2025-05-23

### Added
- The `datalist` input type.

### Fixed
- Issue with `error page javascript` not running under some
  circumstances.
- Issue where `depends on` would not be triggered by changes to
  variables on a `list collect` screen unless the variable was the
  variable being sought.
- Using `.add_action()` on a `DADict` no longer requires that the
  interview logic runs `.gather()` on the `DADict`.

## [1.7.5] - 2025-05-11

### Added
- `error page` as a page type customizable in the Configuration.

### Fixed
- `rtf to docx` format did not work with standalone `attachment`
  blocks.
- Issue with popovers triggered by `focus` events.
- Issue with `list collect` and `show if`.

## [1.7.4] - 2025-04-30

### Fixed
- Accessibility issues with help icons.

## [1.7.3] - 2025-04-25

### Fixed
- Downgraded Python packages to adjust for a Google library being
  behind.

## [1.7.2] - 2025-04-24

### Fixed
- Issue with Convert API.
- Stack trace shown when not expected.

## [1.7.1] - 2025-04-13

### Added
- The `DASSLCIPHERS` environment variable and `nginx ssl ciphers`
  Configuration directive for controlling the `ssl_ciphers` NGINX
  configuration option.
### Fixed
- Problem when `valid formats` with `code` was used with `docx
  template file`.

## [1.7.0] - 2025-04-09

### Added
- Under `attachment`, `valid formats` can now contain `code`.

### Changed
- Upgraded Python dependencies. Note that if you are using third-party
  Python packages, you may encounter dependency conflicts. It is
  possible that your interviews will need to be updated.
- Upgraded Font Awesome, Bootstrap, and CodeMirror.
- In the container, upgraded Python version from 3.10 to 3.12.
- Dropped Twitter sign-on support.
- The Playground Packages page, when generating a package, will
  specify a dependency using a GitHub URL if the package was loaded on
  the server from a GitHub URL.

## [1.6.5] - 2025-03-04

### Fixed
- Bug introduced in 1.6.4, affecting miniOrange users only.

## [1.6.4] - 2025-03-01

### Added
- The `allow external auth with multiple methods` Configuration
  directive.
- The miniOrange WordPress plugin external authentication method.

### Changed
- Users who registered with one external authentication method cannot
  log in using a different authentication method connected to the same
  email address unless the `allow external auth with multiple methods`
  Configuration directive is set to `True`.

### Fixed
- Trapped exception where service account credentials contain invalid
  JSON.

## [1.6.3] - 2025-02-16

### Fixed
- Setting `label above field: False` did not work as intended.
- Running `.geocode()` will now set the `zip` attribute.

## [1.6.2] - 2024-12-24

### Fixed
- The `next` parameter on the registration page was not being
  followed.
- HTML generated by `add_action()` and `action_button_html()` was not
  consistent.

## [1.6.1] - 2024-12-07

### Fixed
- Rendering issue with radio buttons and checkboxes on Safari.

## [1.6.0] - 2024-11-30

### Added
- The `filter`, `sort key`, and `sort reverse` options for `table` to
  allow the presented table to be filtered and sorted.

### Changed
- Upgraded Python dependencies. Note that if you are using third-party
  Python packages, you may encounter dependency conflicts. It is
  possible that your interviews will need to be updated.
- Upgraded Font Awesome, CodeMirror, and Socket.IO.

### Fixed
- The Share button in the Playground provided a relative URL instead
  of an absolute URL.

## [1.5.16] - 2024-10-16

### Changed
- The `address autocomplete` will now populate the `.sublocality`
  field with `sublocality`, `sublocality_level_1`,
  `sublocality_level_2`, whichever is first available.
- URL parameters `utm_source`, `utm_medium`, `utm_campaign`,
  `utm_term`, and `utm_content` will be preserved when analytics is
  configured and the `/run` endpoint is used.
- Upgraded Pandoc to version 3.5.11 (system upgrade required).

## [1.5.15] - 2024-10-13

### Fixed
- Problem with the `wrap lines in playground` feature.

## [1.5.14] - 2024-10-03

### Fixed
- Issue with `objects` block when a variable name is index of an
  attribute.

## [1.5.13] - 2024-10-01

### Fixed
- Issue with `object_checkboxes` and `object_multiselect` when used as
  elements in a `DAList`.

## [1.5.12] - 2024-09-30

### Changed
- Upgraded pikepdf.

### Fixed
- Issue with `object_checkboxes` and `object_multiselect` when used as
  elements in a `DAList` or `DADict`.

## [1.5.11] - 2024-09-26

### Changed
- Different appearance when a document is reduced to a thumbnail
  image.

### Fixed
- When a new Playground is initialized, the name of the YAML file was
  missing in the sidebar dropdown and the share link.
- When a "flash" message with the Bootstap color "success" was shown
  at the top of the screen, the timeout for removing the message
  could remove messages that the user had not yet had the opportunity
  to read.
- In a `review` screen, error messages about invalid variable names
  were not shown in all cases where the variable name was invalid.

## [1.5.10] - 2024-09-19

### Added
- Option in the `/api/playground` GET endpoint for downloading the ZIP
  file of a Playground package.

## [1.5.9] - 2024-09-18

### Fixed
- Downgraded `pikepdf` to fix problem with populating PDF fields.

## [1.5.8] - 2024-09-16

### Added
- The `.cancel_add_or_edit()` method of `DAList`.

### Changed
- The browser's use of dark mode is now remembered as part of the
  session data, and screenshots in the Playground match the mode.
- Upgraded `cryptography` and `flask-cors`.
- When `docx template file` is used with `fields`, Jinja2 can now make
  changes to objects in the interview answers.

### Fixed
- Replaced `pycurl` with `requests` because it was causing problems
  for the `.from_url()` method of `DAFile`.
- Pressing Tab to navigate to the CodeMirror editor now focuses the
  editor appropriately.
- Problem with pushing to GitHub from Playground, introduced in last
  version.

## [1.5.7] - 2024-09-05

### Changed
- Migrated the text editor in the Playground and the Configuration
  from CodeMirror 5 to CodeMirror 6. Searching is now accomplished
  with Ctrl-f. Dark mode support is improved. The mixed-mode syntax
  highlighting of Python code in `code` blocks is no longer
  available. (CodeMirror 6 is a complete rewrite.) Pressing F11 for
  full-screen mode and Ctrl-space for autocomplete are still
  available.
- The `GoogleAPI` class can now be used with ARM processors.
- The "Share" button in the Playground now copies the hyperlink to the
  clipboard when you click it.

### Fixed
- The `floating label` labels are now visible on comboboxes.

## [1.5.6] - 2024-09-01

### Added
- The `auto jinja filter` option under `features`.

### Fixed
- Adapted `syslog-ng` to Ubuntu 24.04.

## [1.5.5] - 2024-08-20

### Fixed
- Adjusted for an issue with `python-docx` and/or `docxcompose`
  creating corrupt DOCX files when the DOCX template was created by
  LibreOffice.

## [1.5.4] - 2024-08-20

### Fixed
- Downgraded `uWSGI` due to issues with workers not being killed
  promptly during the restart process.

## [1.5.3] - 2024-08-18

### Fixed
- Upgraded `nltk` because version 3.8.2 was deleted from PyPI.
- Extended the wait time for server restarts to wait for all of the
  background processes to finish restarting.

## [1.5.2] - 2024-08-16

### Fixed
- Dark mode CSS visibility problem introduced by the fix in 1.5.0 that
  addressed the `focus-visible` problem.

## [1.5.1] - 2024-08-15

### Fixed
- Problem with sending email due to change in Flask-Mail.
- The effect of `sessions are unique` was changed to be more like
  the effect of `require login`.

## [1.5.0] - 2024-08-14

### Added
- The `max celery processes` Configuration directive.

### Changed
- Upgraded Python dependencies. Note that if you are using third-party
  Python packages, you may encounter dependency conflicts. Although
  these version upgrades did not require any changes to
  **docassemble** core code, it is possible that your interviews will
  need to be updated.
- Upgraded Font Awesome.
- If `ask_object_type` is used and `object_type` is also set, the
  `object_type` will be ignored.
- When converting PDF to PNG, the resolution will be what it would be
  if the long edge of each page was scaled to 11 inches.
- The `exit link` can be set to `exit_logout` in order to log the user
  out in addition to deleting the user's session.

### Fixed
- The Jinja2 `safe` filter can be used to insert content that contains
  Jinja2 templating features.
- Issue with keyboard navigation where the `focus-visible` indication
  was not appearing on radio buttons and checkboxes.
- On machines with a large number of CPU cores but limited memory, so
  many `celery` workers could be spawned that the system's memory
  could be exhausted, unless the Configuration sets a lower number of
  `celery processes`. Now, the number of `celery` workers spawned by
  default will not be greater than the number of gigabytes of total
  memory divided by two. This limit can be overridden by setting `max
  celery processes` to a different limit, or by setting `celery
  processes` to a specific number of workers.

## [1.4.112] - 2024-08-02

### Changed
- The default value of a non-`required` multiple-choice text field is
  now `''` instead of `'None'`. The default value when the field is
  not filled out is based on its `datatype`, e.g., `0` for `datatype:
  integer`. The default data type is `text`.

### Fixed
- The `rendering font` feature had been inadvertently disabled.
- Commas entered into numeric fields were causing the field not to
  validate; now any invalid characters are removed.

## [1.4.111] - 2024-07-23

### Fixed
- Word sidebar uploads did not save in the selected project.

## [1.4.110] - 2024-07-22

### Added
- The option of giving an item under `review` a `css class`.

### Changed
- The `bg-secondary-subtle` class is now used place of `bg-light`
  since it has a better appearance in dark mode.

### Fixed
- Actions in the `menu_items` were not launched using Ajax.
- If `ask_object_type` is used, the `object_type` will be set to
  `None`.
- When `hide corner interface` was used, the `navigation bar html` was
  not shown.

## [1.4.109] - 2024-07-12

### Fixed
- Bug related to Playground package generation, introduced in 1.4.108.

## [1.4.108] - 2024-07-10

### Changed
- The standard `.gitignore` can be customized with the Configuration
  directive `default gitignore`.
- When using `_use_jinja2=False`, the DOCX file is still processed for
  images and other global elements.

### Fixed
- Missing method `.age_in_months()`.
- The `get_user_info()` function returned `None` if the user was not
  logged in, even if anonymous users are given the permission to
  access user information.
- Text analysis algorithm received insufficient information when the
  `question` is represented as data.
- The `modtime` of entries created or modified by
  `store_variables_snapshot()` was inconsistent because initial
  entries used the default PostgreSQL datetime, and entries that were
  changed used `datetime.datetime.utcnow()`.
- An exception could arise in rare circumstances due to
  interview-specific settings being accessed by a function that was
  called outside of the context of a particular interview.

## [1.4.107] - 2024-06-10

### Changed
- The `attachment options` block now supports setting default
  `metadata` for attachments.
- ZIP files generated by the Packages page of the Playground contain a
  standard `.gitignore`.

### Fixed
- Problems with Google Fonts affecting Markdown document assembly
  (system upgrade required).
- Problem with form validation in the Packages folder of the
  Playground.

## [1.4.106] - 2024-06-08

### Added
- The `manual` feature of `attachment`, which allows a `DAFile` to be
  attached to an `attachment`.
- The `privileges` and `permissions` attributes of the `user_info()`
  function.
- The `request_url` attribute of `current_context()`. This returns a
  dictionary containing the elements of the URL of the currently
  executing request. Note that this URL does not always match the URL
  that the user sees in the navigation bar in the browser, because
  many requests are Ajax requests. The dictionary keys are `args`,
  `base_url`, `full_path`, `path`, `scheme`, `url`, `url_root`.
- A `__config__` variable is now available when using `# use jinja` in
  interview YAML files so that items in the Configuration are
  accessible.

### Changed
- The `validate()`, `transform()`, and `default_for()` methods of a
  `CustomDataType` are now called with a third positional parameter
  that is a dictionary containing the data attributes for the given
  field. This change is backwards-compatible, so if your method does
  not expect the additional positional parameter, it is not called
  with the additional positional parameter.

### Fixed
- In the Playground, variables representing errors defined by `except`
  statements showed up as undefined variables.
- If `# use jinja` is enabled and there were Jinja2 errors in the
  template, the Playground page could not load.

## [1.4.105] - 2024-06-01

### Changed
- The `validate()`, `transform()`, and `default_for()` methods of a
  `CustomDataType` are now called with an additional positional
  parameter that is the name of the variable as a string. This change
  is backwards-compatible, so if your method does not expect the
  additional positional parameter, it is not called with the
  additional positional parameter.
- When using a `datatype` that references a `CustomDataType`, `data`
  attributes will be added to the `<input>` element containing the
  values of field modifiers `minlength`, `maxlength`, `min`, `max`,
  `step`, `scale`, `currency symbol`, and `field metadata`, if those
  modifiers are present. The `field metadata` are available as a JSON
  string in the `field-metadata` data attribute.
### Fixed
- Bug that prevented the Configuration directive `initial dict` from
  functioning.
- Added `aria-required` and moved `role="radiogroup"` for
  accessibility compliance.
- Bug with `button style` Configuration parameter.

## [1.4.104] - 2024-05-06

### Changed
- Changes to HTML for accessibility purposes.
- Upgraded Bootstrap to version 5.3.3, jQuery to version 3.7.1, Font
  Awesome to verson 6.5.2, and Pillow to version 10.3.0.
- Upgraded Ubuntu to 24.04 and Pandoc to version 3.1.13 (system
  upgrade required).

### Fixed
- Bug with `progress bar multiplier`.
- CSS error with radio buttons and labels above fields.

## [1.4.103] - 2024-04-29

### Added
- Interface in the Word sidebar for changing the Playground project.
- Additional language functions accessible through methods on standard
  classes.
- `attachment` object of the result of `current_context()` containing
  information about the attachment currently being assembled.

### Changed
- Changes to HTML for accessibility purposes.

### Fixed
- PostgreSQL error in multiserver configuration when two servers try
  to delete a package at the same time.
- The `ask_object` feature did not work when `new_object_type` was
  used with `.using()`.

## [1.4.102] - 2024-03-18

### Fixed
- Bug with `ip address ban enabled`.

## [1.4.101] - 2024-03-15

### Added
- The `noun_is_singular` keyword parameter to the `noun_plural()`
  function.

### Changed
- The `date_difference()` function's `describe()` method will now
  describe times.
- In error messages from YAML parsing, fall back to displaying YAML
  with `repr()` if displaying the YAML as YAML fails.

### Fixed
- Bug with `ip address ban enabled`.
- Bug with displaying interview logic history.

## [1.4.100] - 2024-03-07

### Fixed
- Problems with comboboxes and `disable others`.
- Problem with TIFF to PDF conversion not using compression.
- Problem with `show if` when comparing a `variable` to the empty
  string.
- An empty `js show if` caused the field not to be shown, instead of
  being ignored.

## [1.4.99] - 2024-03-02

### Changed
- `DAWeb` no longer requires the `data` parameter to be a dictionary;
  it will pass the `data` parameter directly to `requests`.
- Upgraded `redis`, `celery`, `aiohttp`, and `Pillow`.

## [1.4.98] - 2024-02-29
### Fixed
- Issue with one of the fixes in 1.4.97.

## [1.4.97] - 2024-02-29

### Added
- The `pdftk` option under `attachment` and `features` for filling in
  `pdf template file` attachments using pdftk instead of pikepdf.
### Changed
- During the Docker image build process, `pandoc` will run once, so
  that the first user to assemble a document with `pandoc` will not
  experience slowness due to LaTeX needing to generate files.
- Appearance streams will be generated when using `pdf template file`.
- Error messages related to problems in the source code will no longer
  be displayed to the user unless the user is an administrator or
  developer. If you want these error messages to appear to all users,
  set `debug: True` and `development site is protected: True` in the
  Configuration. The error messages will be available in
  `docassemble.log`.
### Fixed
- Fixed security issue identified by Riyush Ghimire, affecting
  versions 1.4.53 to 1.4.96, that could cause contents of files in the
  filesystem to be revealed. This is a high severity issue and
  upgrading as soon as possible is recommended.
- Fixed security issue identified by Riyush Ghimire, affecting
  versions up to 1.4.96, that allowed an open redirect URL to be formed.
- Fixed security issue identified by Riyush Ghimire, affecting
  versions up to 1.4.96, that would allow HTML or JavaScript
  injection.

## [1.4.96] - 2024-02-14

### Fixed
- Issue with installation of SSL certificates stored on S3.

## [1.4.95] - 2024-02-04

### Fixed
- The `small screen navigation` option under `features` could not be
  overridden to `True`.
- The `nice_number()` function sometimes did not properly detect
  whether a number was an integer.

## [1.4.94] - 2024-01-23

### Added
- The `raw html` special field type under `fields` and `review`. This
  is similar to `html` but allows modification of the structure of the
  HTML in the list as a whole.

## [1.4.93] - 2024-01-20

### Added
- The `current_context()` function, which is the new function to use
  in place of `user_info()` for attributes that are not related to the
  logged in user. The object returned by `current_context()` also has
  a new attribute, `inside_of`, which can be used to detect whether
  the Python code that is currently executing is executing inside of a
  particular type of document assembly process.

### Changed
- The `user_info()` function had previously provided much of the
  information that the `current_context()` function now
  provides. However, the name `user_info()` was not suitable for that
  information. A deprecation warning will be logged if code accesses
  the attributes of `user_info()` that do not relate to the logged-in
  user. In a future version, accessing these attributes will raise an
  exception.
- The behavior of the object returned from `user_info()` is different,
  which might be a breaking change if you used `user_info()` in a
  certain way. Previously, `user_info()` returned an object with
  static attributes. Now, the attributes of the object returned by
  `user_info()` are dynamic attributes (using the `@property`
  decorator). If you set `u = user_info()` and `u` becomes a variable
  in the interview answers, `u.id` will always return the user id of
  the current logged-in user, not necessarily the user who was logged
  in when `u` was defined.
- The new function `current_context()` works the same way. If you set
  `c = current_context()` then `c.current_section` will be the current
  section at the time the attribute was accessed, not the time that
  `c` was defined.
- Another difference in the way that `user_info()` operates is that if
  the user is not logged in, the attributes other than `first_name`
  and `last_name` will exist, but will be `None`. Previously, those
  attributes did not exist, and accessing them would raise an
  `AttributeError`. If you want to test whether the user is logged in,
  use `user_logged_in()`.

### Fixed
- A non-`required` boolean field value that was not filled out was set
  to `False` instead of `None` as the documentation specified. The
  default value is now `None`.
- The `words` directive was unable to load translations from
  Playground packages.

## [1.4.92] - 2024-01-17

### Fixed
- The `reconsider` and `need` modifiers were not active on all
  `mandatory` blocks.
- The `depends on` and `on change` features did not work on all `code`
  blocks executed during `process_action()`.
- Playground raised exception if `playground examples` is an empty
  list.

## [1.4.91] - 2024-01-07

### Changed
- Improved error messages when Python code contains errors.

### Fixed
- Error when YAML parsing did not succeed.

## [1.4.90] - 2024-01-05

### Fixed
- Error when YAML parsing did not succeed.

## [1.4.89] - 2023-12-23

### Added
- The `invite_user()` function.

### Changed
- Upgraded dependencies.
- The `/api/user/<user_id>` PATCH endpoint now allows changing whether
  the user is `active`.
- Changed the background color of the signature canvas to grey when
  dark mode is in effect.

## [1.4.88] - 2023-12-03

### Changed
- When `min` or `max` is used with a `datatype: date` or `datatype:
  datetime`, the minimum and/or maximum are now indicated in the HTML
  so that browser widgets know what they are.
- When the browser uses dark mode, the red asterisk is less bright.
- When `grid` is used, items are aligned to the bottom of the row.

### Fixed
- Bug in `/api/playground_install`.
- Fixed formatting in `grid` mode when label is empty.
- When browsing other users' playgrounds, the Download and GitHub
  buttons in the Packages folder did not work as intended.

## [1.4.87] - 2023-11-28

### Changed
- Set a specific maximum number of open file descriptors (1048576) to
  avoid problems with `ulimit -n` being too high on some kernels
  (system update required).

## [1.4.86] - 2023-11-26

### Added
- The `disabled` field modifier for showing a field on the screen that
  is always disabled.
- The `under text` field modifier for showing help text under a form
  field in a smaller font.
- The `item grid` field modifier, which is similar to the `grid`
  modifier, but affects whether the choices in a list of radio buttons
  or checkboxes wrap.
- The `developer can install` Configuration directive.
- The `debug startup process` Configuration directive for logging the
  timing of the different parts of the `uwsgi` loading process.
- The `current_section` attribute of the output of `user_info()`.
- The `owner password` option under `attachment` for protecting a PDF
  file with an owner password.
- Support for login using Zitadel.

### Changed
- The CSS for `<code>` elements no longer collapses spaces.

### Fixed
- The UI of fields with `datatype: range` were not shown as disabled
  even if the underlying `<input>` was disabled.
- Sync and Run did not work correctly in some browsers because of a
  JavaScript timing issue.
- Module files in zipped packages were not detected unless a root
  directory was used.

## [1.4.85] - 2023-11-02

### Added
- The `run oauthlib on http` Configuration directive. You may need to
  set this to `True` if you use the `oauthlib` library on a server
  that uses `http://` instead of `https://`.

### Fixed
- If integration with GitHub goes wrong, the user could continue to
  see errors after correcting the configuration.

## [1.4.84] - 2023-10-26

### Fixed
- An incorrect `instanceName` was used when a variable name in an
  `objects`, `objects from file` or `data` block contained an iterator
  variable.

## [1.4.83] - 2023-10-25

### Added
- The `default rendering font` Configuration directive. This allows
  you to specify a system-wide font that should be used for rendering
  form fields when using an `attachment` with `pdf template file` and
  `editable: False`.

### Changed
- The feature from 1.4.79, described below as "`pdftk` will render
  form fields to text using the `msttcorefonts` version of Arial,
  which has better support for Unicode characters," has been removed
  because with this font, `pdftk` rendered text too small when the
  font size in the field was "Auto." To reenable this feature, specify
  a `default rendering font` in your Configuration, or specify a
  `rendering font` with each attachment.

### Fixed
- Error when non-`str` values are used as `datatype: checkboxes`
  values.
- The `css class` of a `question` persisted after the Continue button
  was pressed.

## [1.4.82] - 2023-10-15

### Changed
- Selected dependencies upgraded.
- Users whose accounts are made inactive will be immediately logged
  out.
- When a relative file reference is given to `bootstrap theme` in
  `features`, the reference will be resolved using the package in
  which the immediate YAML file is located, rather than the package of
  the main interview file.
- The `docassemble.webapp` package now depends on `certbot`,
  `certbot-apache`, `certbot-nginx`, and `acme`, even though it does
  not use these packages. This is because upgrades to
  `docassemble.webapp` may upgrade dependencies of `certbot` and cause
  `certbot` to fail.

### Fixed
- The web server that responds while docassemble is starting up no
  longer returns 404 errors (system upgrade required).
- Incorrect input validation of email field when editing profile of a
  user who uses the phone-based login method.

## [1.4.81] - 2023-10-03

### Fixed
- Test for appropriate system version before using a `rendering font`.

### Changed
- Added clipboard button next to API key.
- Avoid exceptions when invalid values are passed to `ordinal()` and
  `ordinal_number()`.

## [1.4.80] - 2023-10-01

### Changed
- Added error message if more than one of `show if`, `hide if`,
  `disable if`, or `enable if` is used on the same field. The only
  situation in which these can be combined on a single field is if one
  is using the `code` form and the other is not.

### Fixed
- Inefficient JavaScript for handling nested `show if` field
  modifiers.
- The input validation error message for entering a non-number did not
  appear if the validation failed on the regular expression pattern.

## [1.4.79] - 2023-09-18

### Added
- The `rendering font` option to `attachment`.

### Changed
- `pdftk` will render form fields to text using the `msttcorefonts`
  version of Arial, which has better support for Unicode characters.
- Updated the collection of Material Icons.

### Fixed
- Exception raised in certain circumstances when using `depends on`.
- When `hide corner interface` was used, on small screens the toggler
  still showed.

## [1.4.78] - 2023-09-16

### Added
- The `pen color` modifier for the `signature` block.
- The `file css class` field modifier for `datatype: file` and
  `datatype: files` fields. This can be set to `None` to disable the
  Bootstrap File Input plugin for the file upload input element.

### Fixed
- Errors with the Apache web server option (system upgrade required).
- Error with `js show if` when used in conjunction with `grid`.

## [1.4.77] - 2023-09-10

### Added
- The `hide continue button` and `disable continue button` modifiers
  for `question`.
- The `offset` option for the `grid` field modifier for inserting
  horizontal space before a field.

### Fixed
- Error when calling `.privilege_access()` on a `DAFile`.
- Error when using social logins.

## [1.4.76] - 2023-09-09

### Added
- The `grid` field modifier for displaying fields side-by-side in a
  responsive flexbox.
- The `tabular` modifier for the `review` block, which will cause the
  items to be displayed in an HTML `<table>`.
- The `abbreviate` optional keyword parameter of the `states_list()` function.

### Changed
- Altered the CSS of `radio`, `yesno`, `yesnowide`, and `checkboxes`
  labels so that the text will not wrap under the bullet.
- Configuration will not save if there are duplicate keys in the YAML.

### Fixed
- Avoided `KeyError` when combining `terms` and `autoterms`.

## [1.4.75] - 2023-09-05

- No changes, version advanced by accident.

## [1.4.74] - 2023-09-05

### Fixed
- Bug with `datatype: object`.

## [1.4.73] - 2023-09-04

### Added
- The `gotenberg url` Configuration directive, which allows for the
  use of an external Gotenberg server for DOCX to PDF
  conversion.
- The Docker environment variable `SUPERVISORLOGLEVEL`, which can be
  set to `debug` so that application log messages can be viewed with
  `docker logs` (system upgrade required).

### Changed
- Additional fonts are installed in the operating system to support
  a greater variety of languages (system upgrade required).
- Upgraded pdftk and Pandoc (system upgrade required).
- Disabled autocomplete on login and register pages.
- The `DAFileList` is now initialized with the `complete_attribute`
  set to `initialized` and the `object_type` of `DAFile`.

### Fixed
- Issue with JSON representation of the question when fields were
  generated by code.
- When using Keycloak, logging out resulted in an error message due to
  a change in the Keycloak code.

## [1.4.72] - 2023-08-23

### Changed
- The pseudo-fields `favorite_fruit[nota]` and `favorite_fruit[aota]`
  referring to the "None of the above" and "All of the above"
  checkboxes in a `datatype: checkboxes` field can now be used in a
  boolean `show if`.

## [1.4.71] - 2023-08-22

### Changed
- The `val()`, `getField()`, and `setField()` JavaScript functions can
  references pseudo-fields `favorite_fruit[nota]` and
  `favorite_fruit[aota]` to refer to the "None of the above" and "All
  of the above" checkboxes in a `datatype: checkboxes` field.

### Fixed
- Bug introduced in 1.4.70 relating to GitHub URLs.

## [1.4.70] - 2023-08-20

### Changed
- When installing a package with a GitHub URL, the
  `#egg=mypackagename` feature of GitHub URLs is now respected, and
  the name of the package will be extracted from `#egg` instead of
  from the GitHub repository name.
- Grouped the `initialize`, `postgres`, and `redis` Supervisor
  processes into a group called `main` so that they shut down
  simultaneously rather than sequentially.

### Fixed
- The `js show if` feature did not work correctly when an expression
  reference two different fields.
- The `auto terms` and `terms` features interfered with each other
  when the same term was referenced in each.
- Bug in locale-setting code.
- The system for forcing the admin user to change their password when
  the password is `password` introduced unnecessary delay on page
  loads.
- The "Please wait while docassemble starts . . ." page would refresh
  into an error rather than refresh into the default interview under
  some conditions.

## [1.4.69] - 2023-08-15

### Fixed
- The `val()` JavaScript function erroneously returned encoded values
  for `datatype: object` and `datatype: object_radio` fields. The
  function has been modified so that it returns the `instanceName` of
  the selected object.
- The combobox HTML did not set an `aria-label`.
- Markdown-to-HTML conversion in popover `help` text was not
  full-featured.

## [1.4.68] - 2023-08-10

### Changed
- The `ldap login` feature now supports TLS and anonymous binding.

### Fixed
- Error with exporting tables to Excel, caused by the upgrade of the
  Pandas dependency.
- The way that locale-related functions actually worked did not match
  the way they were documented; they have been fixed so that they
  match the way they are documented. The `update_locale()` function is
  also now imported by default.
- Bug with handling of non-required object fields that are not
  answered.

## [1.4.67] - 2023-07-28

### Changed
- Upgraded `webdriver_manager`.
- The `.delete()` method of `DAGlobal` will now exit silently if
  called on a `DAGlobal` object that has already been deleted.

## [1.4.66] - 2023-07-24

### Changed
- Upgraded dependencies. Packages that might require code changes
  include `selenium` (now at version 4) and `matplotlib` (see the
  "Generating a graph and inserting it into a document" recipe). Due
  to incompatibilities with the latest version of `markdown`, the
  `mdx_smartypants` extension is no longer being used. Instead the
  standard `smarty` extension is used. There are some differences
  between the two extensions, such as the transformation of ellipses.

### Fixed
- Adapted code so no error will be raised if docassemble tries to
  create a directory where one already exists. A race condition of
  some sort seemed to be causing such errors for some users.

## [1.4.65] - 2023-07-13

### Fixed
- The `navigation: horizontal` feature was not functional.

## [1.4.64] - 2023-07-11

### Fixed
- Issue with the `NameError` exception change in 1.4.63.

## [1.4.63] - 2023-07-02

### Changed
- If a `NameError` exception arises out of code in a module file,
  **docassemble** will raise an exception instead of treating the
  exception as a reference to an undefined variable.

### Fixed
- Issue with using `default admin account` to set a default API key if
  an external Redis server is not being used (requires system
  upgrade).

## [1.4.62] - 2023-06-21

### Fixed
- Issue with administrative interviews not appearing in the menu.
- Issue with unchecked checkbox fields subject to a `show if` not
  being located for purposes of placing an error message.
- Issue with failing to process false values of `object_checkboxes`.

## [1.4.61] - 2023-06-18

### Fixed
- Issues with the timing of `change` event triggers on the combobox.

## [1.4.60] - 2023-06-17

### Fixed
- Bug with `datatype: raw`.

## [1.4.59] - 2023-06-12

### Fixed
- Adapted the fix made in 1.4.58 to work correctly with objects with
  random instance names.

## [1.4.58] - 2023-06-10

### Added
- The optional keyword argument `evaluate` of `force_ask()`.

### Changed
- The CSS of `signature` screens was changed so that the compact mode
  only takes effect if the screen is small and has a landscape
  orientation.

### Fixed
- The `value()` function (which is used by `reconsider()` and the
  `reconsider` modifier) did not raise the correct undefined variable
  exceptions when the variable name included variable aliases. The
  code was fixed so that the exceptions raised correspond with the
  exceptions that would be raised if the expression was evaluated by
  Python. It is possible that interview logic in existing interviews
  may rely upon the quirks of the previous version of the code, so it
  is important (as it always is) to test interviews before deploying
  this version in production.
- The JSON representation of a `question` did not show fields that
  were generated by `code`.
- Error with the `rtf to docx` file type.
- The `instanceName` of a `DAFileCollection` object generated by an
  `attachment` or `attachments` block was set to the literal `variable
  name` without interpolation of variables.

## [1.4.57] - 2023-06-05

### Fixed
- Modified the change that 1.4.56 made to `force_ask()` and
  `reconsider()` to work better with objects with random instance
  names.

## [1.4.56] - 2023-06-04

### Added
- The `hide corner interface` option under `features`.

### Changed
- The `administrative interviews` Configuration directive now accepts
  items that add custom URLs to the menu.
- `force_ask()` or `reconsider()` will now attempt to act on the
  intrinsic name of the referenced variable rather than the literal
  string passed to the function.
- The functions `format_date()`, `format_datetime()`, `format_time()`,
  `month_of()`, `year_of()`, `day_of()`, `dow_of()`, `qr_code()` are
  now available as Jinja2 filters.
- The JavaScript functions `var()`, `getField()`, `setField()`, and
  `getFields()` were modified to work better with multiple choice
  fields. `getField()` now returns the `<fieldset>` parent element
  rather than the first input element. `val()` will return an array of
  answers for a checkbox or multiselect. Object-based fields use
  instance names as values.

### Fixed
- Items under `administrative interviews` will now appear for users
  who are not logged in if the permissions allow anonymous users to
  see the item.
- When a `datatype: checkboxes` field has `required: False`, the "None
  of the above" selection does not need to be selected.

## [1.4.55] - 2023-05-21

### Fixed
- Issue with the "Run" button in the variables sidebar in the
  Playground, introduced by the upgrade of Flask in 1.4.52.

## [1.4.54] - 2023-05-21

### Fixed
- Updated `setup.py` to require Python 3.10. Version 1.4.53 has been
  deleted from PyPI so that users with Python 3.8 cannot upgrade past
  1.4.52.

## [1.4.53] - 2023-05-21

### Added
- The `delete` keyword parameter to `set_session_variables()`.

### Changed
- Use `importlib.resources` instead of `pkg_resources`.

## [1.4.52] - 2023-05-17

### Changed
- Upgraded Flask.
- `depends on` will now invalidate dependencies.

### Fixed
- Allow use of True and False as radio button values in `pdf template
  file` document assembly.
- Allow `_use_jinja2` in `include_docx_template()`.

## [1.4.51] - 2023-05-08

### Fixed
- Bug introduced in 1.4.48.

## [1.4.50] - 2023-05-08

### Fixed
- Bug introduced in 1.4.48.

## [1.4.49] - 2023-05-07

### Changed
- A `unoconv` job will not be submitted while another `unoconv` job is
  still running.

## [1.4.48] - 2023-05-05

### Fixed
- Avoid exceptions based on invalid version names.
- Issue with Playground variable parser.

## [1.4.47] - 2023-04-29

### Changed
- Names for keys in the dictionary returned by
  `all_variables(special='title')` now correspond with the names used
  to set the values (with backward compatibility).
- Preserve capitalization when conjugating verbs.
- Upgrade `reportlab`, `docxtpl`, and `pikepdf` dependencies.

### Fixed
- Issue with file inputs not enabling and disabling.
- Bug that caused wrong exception to be raised if DOCX to PDF
  conversion failed.
- Replaced `description-file` with `description_file` in `setup.cfg`.
- Error with `/restart_session` endpoint when user not logged in.

## [1.4.46] - 2023-04-19

### Changed
- Added `all` and `any` as Jinja2 filters.

### Fixed
- Issue with placement of server-side validation messages when a
  custom data type has a `show if`.

## [1.4.45] - 2023-04-14

### Changed
- Failure to convert DOCX to PDF will raise an Exception.

### Fixed
- JavaScript issue with the "None of the above" checkboxes when
  choice-specific `help` is applied to a checkbox choice.

## [1.4.44] - 2023-04-09

### Added
- The `bearer` authentication option for `DAWeb`.
- The `sheets_service()` method of `DAGoogleAPI`.
- Google Fonts (system upgrade required).

### Changed
- Package versions in the Packages folder of the Playground must be
  valid Python version numbers.
- Upgraded `cryptography`, `redis`, and `pikepdf`.
- Upgraded Pandoc (system upgrade required).

### Fixed
- Issue with rotation of `supervisord.log`.
- Accessibility problem with toggler in the sections interface.

## [1.4.43] - 2023-03-24

### Added
- `navigation bar html` option for administrative page screen parts.

### Fixed
- Bug introduced in 1.4.42.
- Issue with `/api/resume_url` when URL parameters are provided.

## [1.4.42] - 2023-03-19

### Added
- The `revoke()` method of the object returned from
  `background_action()`.

### Changed
- When listing choices in a multiple choice question, you can use
  `show if` to conditionally include the choice in the list of
  choices.

## [1.4.41] - 2023-03-14

### Changed
- The `check in` feature now sends two additional action arguments,
  `_changed` and `_initial`. These arguments are not reported by
  `action_arguments()` but can be retrieved with `action_argument()`.
- The `defined()`, `value()`, and `showifdef()` functions now accept a
  keyword argument `prior` which can be set to `True` in order to
  correctly handle situations where the user has just clicked the Back
  button and it is necessary to know the value that a variable had
  prior to the user pressing the Back button. If `prior` is `True`,
  the set of interview answers that was just discarded will be
  accessed first, and then the current interview answers will be
  accessed. In situations where the user has not just pressed the Back
  button, setting `prior` to `True` has no effect.
- The `countries_list()` and `states_list()` functions now return
  alphabetically sorted results. `states_list()` returns an empty
  dictionary when the `country_code` is invalid.
- When the second argument of `background_response()` is `'fields'`,
  and the first argument is a dictionary of variable names and values,
  the value of a dropdown field can be set to a dictionary with keys
  `value` and `choices`. The `choices` will replace the options in the
  dropdown for that field.

### Fixed
- Upgraded `pikepdf` and fixed issue with way it is called.

## [1.4.40] - 2023-03-07

### Changed
- The `analytics id` subdirective of `google` can refer to a list of
  IDs, all of which will be configured.

### Fixed
- The `state_name()` function did not work with countries that lack
  "state" abbreviations.
- Cursor was not pointer over combobox drop-down items.
- Better handling of radio buttons in PDF files.
- Support for `/` characters in GitHub branch names.
- Better method of calling `git`.

## [1.4.39] - 2023-02-22

### Fixed
- Moved the `daPageLoad` event trigger until after the setup of the
  jQuery Validation Plugin.

## [1.4.38] - 2023-02-20

### Fixed
- Issue with SendGrid e-mail sending.

## [1.4.37] - 2023-02-17

### Added
- The `auto color scheme` Configuration directive.
### Fixed
- Issue with double quotation marks in variable names under `objects`
  and `objects from file`.

## [1.4.36] - 2023-02-08

### Fixed
- CSS issue on small screens.

## [1.4.35] - 2023-02-06

### Fixed
- Issue with package upgrading.

## [1.4.34] - 2023-02-06

### Fixed
- Small screen menu button had wrong color.
- E-mail sending bug introduced in 1.4.33.

## [1.4.33] - 2023-02-05

### Changed
- Updated Python and JavaScript dependencies.
- Upgraded Bootstrap to version 5.3.
- Added support for using `min` and `max` with `datatype: time` and
  `datatype: datetime`.
- The `data` and `data from code` blocks can be used with an `objects:
  objects` modifier, which will cause the data structure to be
  interpreted in the manner of `objects_from_file()`. A `gathered`
  modifier is also supported.
- `continue button field` can now be used with `buttons` where one of
  the items under `buttons` is `continue`.
- The Configuration directive `mail` now accepts a list of
  configurations, and `send_mail()` now accepts a `config` keyword
  parameter.
### Fixed
- Removed code that transformed `\\_` into `__` in Markdown.
- Ensured that dropdown options are free of HTML.
- Default values of object-based fields did not appear in all
  circumstances.
- The `editable: False` option for `pdf template file` now shows
  better formatting of fields.

## [1.4.32] - 2023-01-28

### Fixed
- Bug in 1.4.31.

## [1.4.31] - 2023-01-28

### Added
- The `all of the above` and `check others` modifiers for checkbox
  fields.
- The `celery modules` Configuration directive.
- Recipe for calling background tasks from Flask endpoints.
### Changed
- When setting up two factor authentication with the authenticator
  app, a code is shown in addition to a QR code.
- The way that `objects from file` works has changed; it is no longer
  treated as a `mandatory` block, but instead acts like an `objects`
  block that is called upon when a variable is needed.

## [1.4.30] - 2023-01-23

### Fixed
- Scrolling issue when moving from one screen to another.
- JavaScript bug.

## [1.4.29] - 2023-01-20

### Fixed
- Follow-up fix to 1.4.28 change regarding unicode values in
  `js show if`.

## [1.4.28] - 2023-01-19

### Fixed
- The "branch" drop-down on the Package Management page was not
  working on production servers.
- Follow-up fix to 1.4.26 change regarding unicode values in
  `datatype: checkboxes`.
- JavaScript warning message from Google API regarding a callback
  function.

## [1.4.27] - 2023-01-16

### Changed
- The `jQuery Validation Plugin` settings were adapted to always apply
  validation to hidden elements.

## [1.4.26] - 2023-01-15

### Fixed
- Removed dependency on `sklearn`.
- Issue with unicode values in `datatype: checkboxes`.

## [1.4.25] - 2023-01-05

### Fixed
- Rolling backup files on S3 were copied to the wrong directory during
  initialization.
- Issue with `objects from file` blocks being run repeatedly if they
  are not marked as `mandatory`.

## [1.4.24] - 2022-12-30

### Added
- Option for using `show if` in `action buttons`.
### Fixed
- Error with `pdf template file` and image inclusion introduced in
  1.4.21.
- Error with `.from_url()` method of `DAFile`.

## [1.4.23] - 2022-12-10

### Added
- The screen parts `continue button color`, `resume button color`,
  `help button color`, and `back button color`.
- The question modifiers `continue button color` and `resume button
  color`.
- Additional options `labelauty` and `labelauty nota` under the
  `button colors` Configuration directive.
### Changed
- Items in multiple choice lists, when expressed as a dictionary, can
  now include keys `css class` and `color`. The HTML element for the
  item will have the `css class` as a CSS class. The `color` is
  expected to be a Bootstrap color name. This will change the
  background color of the HTML element, unless the element is an
  `<option>` element. The `css class` and `color` keys have no effect
  on combobox items.
- Buttons in `action buttons` can be modified with a `css class`.

## [1.4.22] - 2022-12-08

### Fixed
- Error with the `.fix_up()` method of `DAFile` introduced in 1.4.21.

## [1.4.21] - 2022-12-07

### Added
- The `suppress autofill` directive under `features`.
- The `grid classes` Configuration directive.
- The `alert html` and `alert container html` Configuration
  directives.
### Changed
- Replaced `PyPDF2` with `pikepdf`.
- Bates numbering is more efficient.
- The `section` modifier now accepts Mako templating.
### Fixed
- Overzealous matching of `DAContext` variables in `data` blocks.
- Possibly remedied an inefficiency in labelauty.
- Not all object types were allowed in `data from code`.

## [1.4.20] - 2022-11-16

### Fixed
- Updated the CloudConvert API.
- Fixed typo affecting `/run/packagename/directoryname/filename`
  links.

## [1.4.19] - 2022-11-13

### Added
- The `wide side by side` directive under `features`.
### Changed
- Better example code for running Alembic from a package that uses
  `SQLObject`.
### Fixed
- UI error on administrative screens on mobile.
- Cancel button on Change Password page directed to the wrong place
  when `show profile link: False` is in the Configuration.

## [1.4.18] - 2022-11-06

### Added
- Ability to pass options directly to the Google Places JavaScript API
  when using `address autocomplete`.
- The `hidden` `input type` for defining variables that are populated
  by JavaScript.
### Fixed
- The YAML on the Configuration page can now be searched in its
  entirety using the web browser's search feature.

## [1.4.17] - 2022-11-03

### Added
- The `suppress login alerts` Configuration directive.

### Fixed
- Changed NGINX configuration so that requests for hostnames other
  than `external hostname` are redirected.
- Changed `list collect` behavior to prevent reaching circularity
  limit when quantity of items is very large.
- Issue with validation code on file fields with `show if`.

## [1.4.16] - 2022-11-01

### Fixed
- Issue with alembic not running properly during restart.

## [1.4.15] - 2022-10-31

### Fixed
- Problem with `authorized registration domains`.

## [1.4.14] - 2022-10-25

### Fixed
- Additional fix to allow the use of `table prefix` in `db`.

## [1.4.13] - 2022-10-24

### Changed
- The `include_internal` option of `store_variables_snapshot()`,
  `variables_as_json()`, and `all_variables()` now controls whether
  the `nav` variable is included in the output.
- The `authorized registration domains` Configuration directive now
  applies to social login methods as well as username/password login.
- Increased accessibility of the `datatype: combobox` interface.
### Fixed
- Problem with the exim4 mail configuration.
- Problem when `table prefix` in `db` was used.

## [1.4.12] - 2022-10-02

### Added
- The `mms attachments` option in the `twilio` configuration.

## [1.4.11] - 2022-10-01

### Fixed
- Issues with SMS interface.

## [1.4.10] - 2022-10-01

### Added
- The `signature pen thickness scaling factor` Configuration
  directive.
### Changed
- Upgraded Mako to version 1.2.2.
- The field modifiers `address autocomplete`, `label above field`, and
  `floating label` can now refer to Python expressions.
- Upgraded Google OAuth.
### Fixed
- Issue with exim4's overinclusive `dc_other_hostnames` setting.
- Error with images in Markdown to DOCX conversion.
- Error with `overlay_pdf()`.
- Error with `temporary session` when user is not logged in.

## [1.4.9] - 2022-09-10

### Added
- The `voices` option of the `voicerss` Configuration.
- The `voice` keyword parameter of the `set_language()` function.
- The `auto login` Configuration directive.
- The `output_to` keyword parameter of the `.convert_to()` method of `DAFile`.
- The `output_to` keyword parameter of the `.export()` method of
  `DALazyTableTemplate`.
- The `output_to` keyword parameter of `pdf_concatenate()`,
  `docx_concatenate()`, `zip_file()`, `overlay_pdf()`.
- The `extract_pages()` method of `DAFile`.
### Changed
- If an attempt is made to access the contents of a `DAFile` that is
  not yet initialized, the `.initialized` attribute will be
  sought. The `.initialize()` method sets `.initialized` to
  `True`. Thus, if you have a `code` block that calls `.initialize()`
  on a `DAFile` called `myfile`, you can attach `sets:
  myfile.initialized` to the `code` block and it will be called upon
  if the interview logic requires the contents of `myfile`.
- When an `attachment` that has a `name` creates a `DAFileCollection`
  object, the `DAFile` attributes will have their `alt_text` set to
  the `name` followed by the file type in parentheses.
### Fixed
- Adjusted the `Dockerfile` so that the server can start up even if
  the internet is not available.

## [1.4.8] - 2022-08-25

### Fixed
- Google Analytics JavaScript was being called in a way that used to
  work but does not work anymore.

## [1.4.7] - 2022-08-24

### Added
- The `module whitelist` and `module blacklist` Configuration
  directives.
- The `user profile fields` Configuration directive.
### Changed
- The `SQLObject` methods were changed so that they will raise
  exceptions if there is an unexpected error.
- Upgraded jQuery Validation Plugin.
### Fixed
- Fixes to multifactor authentication to make configuration easier.
- JavaScript issues with comboboxes.

## [1.4.6] - 2022-08-13

### Fixed
- Backwards-compatibility issue involving `backports.zoneinfo`. This
  is an important fix if you upgraded your system version from 1.3.x
  to 1.4.x.

## [1.4.5] - 2022-08-11

### Fixed
- Exception raised due to interaction of `SQLObject` and
  `create_session()`.

## [1.4.4] - 2022-08-11

### Fixed
- Bug with default values that evaluate to the empty string.

## [1.4.3] - 2022-08-09

### Fixed
- Bug in User List interface.

## [1.4.2] - 2022-08-08

### Fixed
- Unicode characters in the `id` of a `question` were not sent to the
  browser as Unicode.

## [1.4.1] - 2022-08-05

### Changed
- Upgraded `docxtpl`.
### Fixed
- Problem with restarting the server when using a single-server
  configuration.

## [1.4.0] - 2022-07-31

### Added
- The `floating labels` feature and the `floating label` field
  modifier.
- The `root owned` Configuration directive.
- Support in the Kubernetes implementation for using a read-only file
  system where all Configuration changes and package updates take
  place using Docker images and the only directories on the server
  that are writable are directories for storing runtime information
  (e.g. PID files) or log files.
- The `ip address ban enabled` Configuration directive.
- The `old_password` parameter for `set_user_info()` and the API
  endpoints for changing user information, so that the user's
  encrypted data can be migrated.
- The `transform_json_variables()` function.
- Support for server-side encryption when using S3.
### Changed
- In the Docker container, the operating system is upgraded to Ubuntu
  22.04 LTS and Python is upgraded to 3.10.
- `aloe` is no longer a required package. It has a dependency, `nose`,
  that is not compatible with Python 3.10. Instead, `behave` is now a
  required package.
- Switched to the Azure CLI for managing files in Azure Blob Storage
  from shell scripts.
- A restart (e.g., saving the Configuration, installing a package)
  will erase any IP address bans caused by failed login attempts.
- The API endpoints for changing information about existing users now
  work with `PATCH` as well as `POST`.
### Fixed
- Links in dropdown navigation menu for mobile devices were not
  clickable.
- The `session` parameter of `/api/resume_url` was not working (it was
  expecting `session_id`.
- Optimized `interview_list` for cases where `action='delete_all'` and
  `query` are used together.
- Unnecessary transmittal of background task result to web browser
  when the `refresh` option of `background_action()` is used.
- Migration of encrypted `DAStore` objects when password is changed.
- The `set_parts()` function did not support all of the screen parts.

## [1.3.52] - 2022-07-08

### Changed
- Upgraded `atomicwrites`.

## [1.3.51] - 2022-06-18

### Changed
- Upgraded jQuery to 3.6.0.
### Fixed
- Fixed issue with comboboxes introduced in 1.3.50.

## [1.3.50] - 2022-06-11

### Added
- The `enable shared playgrounds` Configuration directive.
### Changed
- Upgraded to Font Awesome 6.1.1.
### Fixed
- In a list of fields in a `review` screen item, the `invalidate`
  command was not available.

## [1.3.49] - 2022-06-09

### Added
- Example interviews relating to inserting graphs and cards.
### Changed
- Changed the name of the `explanation()` function to
  `logic_explanation()`. NOTE THAT THIS IS A BREAKING CHANGE. However,
  you are most likely not using the `explanation()` function, so this
  probably will not matter.
### Fixed
- Cleared spurious syslog-ng error message.
- Error getting the data format of a question when `debug` is false.

## [1.3.48] - 2022-06-05
### Fixed
- Error with user profile screen.

## [1.3.47] - 2022-06-04
### Fixed
- Error parsing hostname from Redis URL.
- Number of items not preserved when pressing Back button and arriving
  at a `list collect` question.

## [1.3.46] - 2022-06-03
### Added
- The `allow log viewing` (`DAALLOWLOGVIEWING`) Configuration
  directive.
- The `forget_prior` keyword parameter for `force_ask()` and
  `force_gather()`.
- The `_forget_prior` keyword parameter for `url_action()` and
  `interview_url_action()`.
- The `forgetPrior` parameter for the JavaScript functions
  `url_action()`, `action_call()`, and `action_perform()`.
- The `logoutpage` Configuration directive.
- The `allow changing password` directive.
### Changed
- Upgraded to Bootstrap 5.2.
- The `interview_url()` and `url_of('interview')` functions now accept
  unqualified `i` parameters, which will be interpreted as references
  to interview files in the current package.
### Fixed
- The HTML version of the error notification e-mail lacked some of the
  information in the plain text version.
- The `next` parameter of `url_of()` was not functional for `leave`,
  `logout`, `exit`, and `exit_logout`.

## [1.3.45] - 2022-05-27
### Added
- The `pip index url` (`PIPINDEXURL`) and `pip extra index urls`
  (`PIPEXTRAINDEXURLS`) Configuration directives.
- The `allow configuration editing` (`DAALLOWCONFIGURATIONEDITING`)
  Configuration directive.
- Docker environment variables `DADEBUG` (corresponding to `debug`)
  and `DAENABLEPLAYGROUND` (corresponding to `enable playground`).
- The `insertion_order` option for `.true_values()` and
  `.false_values()`.
### Changed
- API keys can now be passed in a header using the format
  `Authorization: Bearer H3PLMKJKIVATLDPWHJH3AGWEJPFU5GRT`.
- Removed `pathlib` as a dependency.
- If `allow updates` is set to false, the `/api/package` endpoint
  cannot be used to install or uninstall packages.
- If `enable playground` is set to false, the Playground-related APIs
  are disabled.
### Fixed
- When a `yesnoradio` or `yesnomaybe` field is not `required` and is
  not answered, the variable will now be set to `None` instead of
  `False`. THIS MAY BE A BREAKING CHANGE FOR YOU if you relied on
  variables being set to `False` when the user did not provide a value
  for a `yesnoradio` or `yesnomaybe` field. The documentation for
  `required` has always stated that the variable will be set to `None`
  if the user does not provide a value, so this change brings the code
  into line with the documentation.
- Error when `target_number` is not an `int` and an `.add_action()` is
  triggered.
- `docassemble.base.legal` did not import all of
  `docassemble.base.util`'s names.
- `set` and `follow up` were not recognized in all valid `review`
  block syntax forms.
- The `to` parameter of `send_email()` and `send_sms()` did not
  process a `DAList` the same way as a `list`.
- Under some circumstances, the navigation bar showed already-visited
  sections as not visited.
- `error action`s resulted in unnecessary contention for access to the
  interview answers.

## [1.3.44] - 2022-05-16
### Added
- The `temp_url` variant of `url_of()`, which functions like the
  `/api/temp_url` API endpoint.
- The `login_url` variant of `url_of()`, which functions like the
  `/api/login_url` API endpoint.
- The `overwrite` parameter for `/api/session/action`.
- The `run_action_in_session()` function.
- A Jinja2 filter called `chain` that concatenates lists or other
  iterables (`itertools.chain`).
### Changed
- The `/goto` and `/auto_login` endpoints return a blank page if the
  `User-Agent` header indicates that the HTTP client is a bot.
### Fixed
- Added a color conversion strategy to Ghostscript for PDF/A
  compliance.

## [1.3.43] - 2022-05-11
### Changed
- Accessibility improvements.

## [1.3.42] - 2022-05-10
### Fixed
- Error in `set_session_variables()`.

## [1.3.41] - 2022-05-09
### Fixed
- `action buttons` were not called using Ajax.
- `response()` was not functional when called from an action via Ajax.

## [1.3.40] - 2022-05-05
### Fixed
- Logged-in user could not delete own interview session using
  `interview_list()` without special permissions.

## [1.3.39] - 2022-04-30
### Changed
- Calling `all_variables(simplify=False, include_internal=False)` now
  omits `_internal`.
- The HTML now uses `required` and `aria-required="true"` to indicate
  required fields.
### Fixed
- `interview_url()` can now receive `session` without also receiving
  `i` and `i` will be set to the current filename without overwriting
  `session`.
- Calling `create_session()` and other functions for manipulating
  other sessions could disrupt `_internal` variables in some
  circumstances.
- `url_ask()` can now begin with an action.
- Error in session deletion that caused sessions not to be deleted in
  some circumstances.

## [1.3.38] - 2022-04-28
### Changed
- The `permissions` system can now give privileges to `anonymous`
  (non-logged in) users.
### Fixed
- Error with new Playground initialization.

## [1.3.37] - 2022-04-25
### Fixed
- Error with user registration.

## [1.3.36] - 2022-04-23
### Fixed
- Error with background tasks.
- Minor user experience issues in Playground.

## [1.3.35] - 2022-04-20
### Added
- Recipe for creating appointment invitations.
### Fixed
- Error with implicit instantiation of dictionary keys after certain
  uses of `defined()` or `showifdef()`.
- Issue with populating default values in `time` fields.
- Error with obtaining API keys for non-`admin` users.

## [1.3.34] - 2022-04-19
### Fixed
- Error that interferes with package updates.

## [1.3.33] - 2022-04-19
### Fixed
- Error introduced in 1.3.32 with filenames on download.

## [1.3.32] - 2022-04-19

### Added
- The `DAGlobal` class.
### Changed
- Upgraded dependencies.
### Fixed
- Issue with CSS classes and `disable others`.

## [1.3.31] - 2022-04-13

### Fixed
- Bug in `delete_all` feature of `interview_list()`.

## [1.3.30] - 2022-04-10

### Added
- The `query` option for `interview_list()` and API endpoints like
  `/api/interviews`.
- Recipes for setting screen parts and watermarking Markdown-to-PDF
  files.
- The `raw_result` keyword parameter for `ocr_file()` and
  `ocr_file_in_background()` when used with Google Cloud Vision.
### Changed
- SQL tables now use a uniqueness constraint on primary key columns.
- Errors with bookmarks in PDF templates will be ignored instead of
  raising exceptions.
### Fixed
- Problem with the processing of `metadata` in the Markdown-to-PDF
  feature.
- Issue with `__getattr__()` causing objects to be created as a result
  of testing for their existence.

## [1.3.29] - 2022-04-07
### Added
- The option for using Google Cloud Vision when using `ocr_file()` and
  `ocr_file_in_background()`.
### Changed
- When `new template markdown behavior: True` is set in the
  Configuration (which is now part of the default initial
  configuration), `template` variables do not have the `markdown`
  filter automatically applied when they are used in a DOCX template
  file. It is recommended that you add this to your Configuration,
  and then modify your `docx template file` templates that use
  `template` variables, adding ` | markdown` if necessary.
### Fixed
- Improved efficiency of system shutdown. (Requires a system upgrade.)
- Problem with Let's Encrypt certificates not renewing. (Requires a
  system upgrade.)
- The `single_worker.log` file was missing from log rotation.
- Erroneous exceptions could be raised if a `DAObject` attribute name
  began with `_`. Attributes can begin with `_` but they cannot begin
  with `__`.
- The `DBSSLMODE`, `DBSSLCERT`, `DBSSLKEY`, and `DBSSLROOTCERT`
  variables were not affected by `ENVIRONMENT_TAKES_PRECEDENCE`.

## [1.3.28] - 2022-03-26
### Added
- The `default language` specifier in `metadata`.
- Recipe for running reports.
### Fixed
- Some functions did not work in `on change` code.
- UI issue with comboboxes.

## [1.3.27] - 2022-03-20
### Changed
- Favicons not present will not be referenced in HTML.

## [1.3.26] - 2022-03-19
### Added
- The `favicon tile color` Configuration directive.
- The `favicon version` Configuration directive.
### Changed
- Favicon feature now uses the package version number when available.
- Favicon feature now supports `site.webmanifest`.
- Additional logging during server restart.
- UI accessibility improvements.
### Fixed
- Problem importing unclassified machine learning entries from JSON.

## [1.3.25] - 2022-03-16
### Changed
- `complete_attribute` can refer to a list of attributes.
### Fixed
- Markdown-to-HTML conversion was not being applied to the `pre` or
  `submit` screen parts.
- `[TARGET ...]` was not working in `html`.
- Issues with the Training page.

## [1.3.24] - 2022-03-14
### Added
- The `custom datatypes to load` directive under `features`.
- The `set_variables()` function.
- The `process_objects` parameter for `set_session_variables`.
### Changed
- Support for importing and exporting `datetime.date` and
  `datetime.time` objects in the JSON representation of objects.
- `input type: area` text boxes are resizable in both dimensions.
### Fixed
- Issue with `show if` and `labels above fields`.
- Issues with using SSL for external PostgreSQL and Redis connections.

## [1.3.23] - 2022-03-07
### Changed
- Upgraded CodeMirror.
### Fixed
- Error with `overlay_pdf()` introduced in the last version.

## [1.3.22] - 2022-03-05
### Added
- The `permissions` Configuration directive.
- Ability of `admin` users to create API keys with limited permissions.
- The `multi` option of `overlay_pdf()`.
- The `/api/user_invite` API endpoint.
- The `api key` option of `default admin account`.
- The `allow forgot password` Configuration directive.
### Changed
- Upgraded the `boto3` and `docxtpl` libraries.
- The Logs are now shown in a resizable `<textarea>`.
- Safer implementation of `exit link` and `exit url`.
- For safety reasons, `url_of('exit')` and similar URLs no longer
  accept `next` parameters.
- The JavaScript for `CustomDataType` objects will only be inserted if
  the interview uses the custom datatype.
### Fixed
- URL of exit link was being set to `/interview` in some
  circumstances.
- When server-side validation failed, the fields the user saw on the
  next screen were not always populated with the user's answers.
- HTML typos in `<form>` elements.
- Problem converting DOCX to PDF when `attachment` filename contained
  a space.
- Inaccurate exceptions were sometimes raised when `AttributeError` or
  `IndexError` exceptions arise during assembly of a DOCX file.
- Fixes to Google geocoding for situations where the latitude and
  longitude are undefined.

## [1.3.21] - 2022-02-05
### Added
- The `fax provider` Configuration directive.
- Option for faxing with Telnyx instead of ClickSend.
### Changed
- The server name of a `DAFile` can be changed using `.set_attributes()`.
- NLTK data files are downloaded during the building of the Docker
  image, so that the initial boot process does not require an internet
  connection.

## [1.3.20] - 2022-01-25
### Fixed
- Error with the `.convert_to()` method of `DAFile`.
- Issue with display of modules in the Playground variables.

## [1.3.19] - 2022-01-17
### Fixed
- Issue with the sizing of images inside of `terms` descriptions.

## [1.3.18] - 2022-01-15
### Added
- Support for using `md` as one of the `valid formats` in an
  `attachment` when using `content` or `content file`.
- The `enable unoconv` Configuration directive (requires system
  upgrade). This provides a faster method for converting DOCX files to
  PDF.
### Fixed
- When `raw: True` was enabled for an `attachment`, the file was not
  included in e-mails sent from the user interface of the `attachment`
  block.
- When `raw: True` was enabled for an `attachment`, and the
  `DAFileCollection` was passed to `send_email()` or `send_sms()`, the
  assembled file was not included.
- Fixed error from 1.3.17 relating to updating references.

## [1.3.17] - 2022-01-13
### Changed
- Environment variable for S3 region for use in shell scripts.

## [1.3.16] - 2022-01-08
### Changed
- Security updates to dependencies.
### Fixed
- Better support for including a variety of image types in documents
  by converting the image type to PNG or EPS as appropriate.
- Problem with order of table model module loading.

## [1.3.15] - 2022-01-06
### Added
- The `TestContext` object for testing **docassemble** code from the
  command line.
- The `.pngs_ready()` and `.page_path()` methods of `DAFile`, for use
  when the `DAFile` is a PDF.
- The `page` and `size` parameters for the `.url_for()` method of
  `DAfile`, for use when the `DAFile` is a PDF.
- The `authorized registration domains` Configuration directive.
### Fixed
- CSS error in active subsection headings.
- Error with getting status of background tasks.
- Error with videos included using `[FILE]`.
- Some API keys would not authenticate.
- Error with DAGoogleAPI.

## [1.3.14] - 2021-12-28
### Fixed
- Error in 1.3.11 related to Upgrade button.

## [1.3.13] - 2021-12-28
### Fixed
- Error in 1.3.11 related to oauth logins.

## [1.3.12] - 2021-12-27
### Fixed
- Error in 1.3.11 related to ClickSend.

## [1.3.11] - 2021-12-27
### Changed
- API keys can now only be viewed when initially obtained.
- Code that runs when a module is loading now runs in a context where
  the original `admin` user is logged in.
### Fixed
- Bootstrap typo affecting alignment of dropdown menu.
- Issue with machine learning sometimes returning no results when results exist.

## [1.3.10] - 2021-12-16
### Changed
- In the Playground, pressing buttons is disabled during Ajax
  requests.
- The Playground "Pull" process now uses SSH to clone repositories
  when GitHub integration is enabled, unless a personal access token
  is embedded in the URL.
### Fixed
- CSS error resulting in certain validation errors being invisible on
  administrative pages.

## [1.3.9] - 2021-12-11
### Added
- The `/api/playground_pull` endpoint for pulling a package into a
  Playground.
- The `/api/config` PATCH endpoint for updating specific Configuration
  directives.
- The `/api/restart` endpoint for triggering a server restart.
- The `/api/restart_status` endpoint for monitoring the status of a
  server restart.
### Changed
- The `/api/config` API endpoint now returns status code 200 on
  success, not 204. The response contains a code that can be passed to
  `/api/restart_status` to check on the status of the restart.
- The `/api/playground` POST and DELETE endpoints will now return
  status code 200 instead of 204 if the server needs to restart.  The
  response contains a code that can be passed to `/api/restart_status`
  to check on the status of the restart.
### Fixed
- NGINX configuration syntax.
- Better error message if Celery is used inside of Celery.
- Gave the single Celery process a unique name.
- Adjust for situation where Ajax request fails without a response.
- Fixed JavaScript errors in some Playground pages.
- Fixed issue where GitHub SSH only worked during a Playground pull if
  there was an active package.
- Miscellaneous undefined variables in rarely-run code.

## [1.3.8] - 2021-12-05
### Fixed
- Issues with `show if` and `list collect`.

## [1.3.7] - 2021-12-04
### Added
- The `footer css class` Configuration directive.
### Changed
- Upgraded `pip` from 20.1.1 to 21.1. Previously, `pip` had been
  deliberately downgraded because the new resolver caused `pip` to
  hang. Hopefully that issue does not appear again.
- The `docassemble-os` Docker repository, which is a dependency of
  this Docker repository, is now based on Ubuntu 21.10 rather than
  Debian `testing`.
### Fixed
- Bug related to deleting Playground "projects" when S3 or Azure blob
  storage is enabled.
- Improved method for detecting variable names in Jinja2 files.
- Increased threshold for detecting whether a server has become
  unresponsive during the restart process.

## [1.3.6] - 2021-11-26
### Fixed
- Adjustments to behavior of `skip undefined` with DOCX files.
- Security update of `reportlab` dependency; incorporated `marisol`
  into `docassemble.base` because of conflicting dependency.

## [1.3.5] - 2021-11-13
### Added
- Data parameters for `CustomDataType`.
- The `css class` field modifier.
### Fixed
- Adjusted CSS to fix navigation bar and required field CSS issues on
  small screens.
- Prevented the enter key from submitting the form in the Playground.

## [1.3.4] - 2021-11-11
### Changed
- Upgraded from Bootstrap 4 to Bootstrap 5. This changes the HTML and
  CSS significantly, so you may need to adjust your customizations and
  testing scripts.  Bootstrap 5 is not necessarily more "attractive"
  than Bootstrap 4, but it has better accessibility.
- The Source tab is now represented by a "code" icon.
- The administrative UI was adjusted for consistency.
- Changed the appearance of help on field labels.

## [1.3.3] - 2021-11-07
### Added
- The `short logo` screen part for specifying a different `logo` for
  small screens.
- The `navigation bar html` screen part for adding HTML to the
  navigation bar.
- The `_screen_size` option for `action_menu_item()` for hiding menu
  items depending on the screen size.
### Fixed
- Decreased the `max-width` of the interview title in the navigation
  bar to avoid problems with the navigation bar wrapping onto two
  lines.

## [1.3.2] - 2021-11-06
### Added
- The `DABreadCrumbs` class for displaying a breadcrumbs UI to the
  user when the current question is the result of a nested action.

## [1.3.1] - 2021-11-05
### Added
- The `button colors` Configuration directive for customizing the
  Bootstrap colors of buttons.
- The `label above field` modifer that puts the label above the field
  for a specific field, which is preferable to using `no label` in
  combination with a `note`.
- The `login link style` Configuration directive for enabling
  separate "Sign up" and "Sign in" buttons in the upper right corner
  instead of "Sign in or sign up to save answers."
### Changed
- Changed the default color of `review` screen edit buttons and the
  "add another" button from Bootstrap `success` (green) to `secondary`
  (grey).
- Added the Font Awesome pencil icon to `review` screen edit buttons.
- Substituted a different Font Awesome icon for the selected radio
  button option so that it is not the same as the icon for a selected
  checkbox option.
- Changed the left arrow icon in the "back to question" button so that
  it matches the left arrow icon of "Back."
- Added a light grey background color behind `review` screen `button`
  items to help differentiate the sections of a review screen.
- When `question help button` is used, the question-related help now
  appears below the buttons, and the navigation bar help only
  displays the `interview help` (if present).
- The `skip undefined` option now works with `docx template file`.
### Fixed
- Inactive sections in the `sections` sidebar are no longer `<a>`
  elements that screen readers may describe as clickable.

## [1.2.108] - 2021-10-29
### Fixed
- On reset, kill zombie LibreOffice processes that might prevent
  DOCX-to-PDF conversion from succeeding on the server.
- Changed order of backup to prioritize file storage over logs in case
  shutdown process is terminated.

## [1.2.107] - 2021-10-26
### Fixed
- Problem with spinner staying on the screen after certain types of URL
  redirects.

## [1.2.106] - 2021-10-22
### Fixed
- Fix to the filename security adjustment in 1.2.105.

## [1.2.105] - 2021-10-18
### Added
- ClickSend fax support.
### Changed
- Additional bracket expressions now valid with Jinja2 `markdown`
  filter.
- The blockquote Markdown format now indented on right and
  single-spaced when used the the Jinja2 `markdown` filter.
- Filename security in the Playground now allows reading existing
  Playground files with names that contain spaces, although the
  filename will be changed.

## [1.2.104] - 2021-10-11
### Fixed
- Issue with counting SQL results for non-admin developers.

## [1.2.103] - 2021-10-07
### Fixed
- `check in` actions were not aware of the current `x`, `i`, `j`, etc.
- Population of fields by address autocomplete did not trigger the
  `change` event on the fields.

## [1.2.102] - 2021-09-28
### Changed
- Added a check during startup to see if PostgreSQL primary key
  sequences have been reset and if so set their values to the maximum
  value id in the table.
### Fixed
- Error getting JSON version of question involving `list collect`.

## [1.2.101] - 2021-09-21
### Fixed
- `[BEGIN_CAPTION]` in HTML mode now behaves like `[BEGIN_TWOCOL]` in
  that the columns are converted from Markdown and inserted in the
  table as paragraphs.

## [1.2.100] - 2021-09-14
### Changed
- Added descriptive log messages to `initialize` service.
- Traceback now included in API when error message is "failure to
  assemble interview."
### Fixed
- Issue with package update screen being unresponsive under some
  conditions due to HTTP timeout.
- Issue with duplicative entries in `install` table.
- Default in multiple choice question not shown when selected value
  was `None`.
- Problem setting code-generated checkbox fields when `restrict input
  variables` in effect.

## [1.2.99] - 2021-08-30
### Changed
- The `on_success` and `on_failure` parameters of `DAWeb` methods can
  be set to `content`, `text`, or `status_code` in order to return the
  undecoded response, decoded response, or status code of the HTTP
  request.
### Fixed
- The `pdf_concatenate()` function will no longer try to guess an
  appropriate `instanceName` for the returned `DAFile` object.

## [1.2.98] - 2021-08-17
### Added
- Feature for using Jinja2 as a preprocessor to construct YAML.
### Changed
- Disabled `DAGoogleAPI` when the architecture is not `amd64`.
- Adjusted use of `\xspace` for new version of Pandoc.
- If an inactive server in the cluster is detected during the restart
  process, the server will be removed from the list of servers.

## [1.2.97] - 2021-08-13
### Added
- Feature for downloading the installed version of a package installed
  by uploading a ZIP file or installing a Playground package.
### Changed
- No restoration from backup files is performed if system had an
  unsafe shutdown (requires system upgrade).
### Fixed
- Error in `get_geocode_response()`.
- Missing entries in system phrases file for e-mails sent from Flask.

## [1.2.96] - 2021-08-05
### Fixed
- Exception with phone verification.
- Bad error message with OCR functions under certain circumstances.

## [1.2.95] - 2021-08-02
### Added
- API for managing Playground projects.
### Fixed
- Exception raised from cron job.
- Issue with newlines being converted to spaces when inline Markdown
  added to DOCX.
- Issue with numbering ordered lists with `markdown` filter.

## [1.2.94] - 2021-07-29
### Fixed
- Issue with `[SKIPLINE]` interfering with other formatting
  directives.
- `_internal` could not be set with `set_session_variables()`.
- `docassemble.webapp.createminio` was not updated for the latest
  version of the `minio` package.

## [1.2.93] - 2021-07-22
### Fixed
- Issue with `www-data` losing its shell.

## [1.2.92] - 2021-07-22
### Fixed
- Issue with `www-data` losing its shell.

## [1.2.91] - 2021-07-21
### Changed
- Re-ordering a list now triggers `hook_after_gather()`.
- The `inverse navbar` Configuration directive now affects
  administrative screens.
### Fixed
- Word-to-Markdown conversion now uses Pandoc's `markdown_phpextra`
  format.

## [1.2.90] - 2021-07-12
### Fixed
- Security improvements.

## [1.2.89] - 2021-07-11
### Added
- The `azure maps` and `geocoder service` Configuration directives.
### Changed
- Removed wait times and explicit application exit in LibreOffice PDF
  conversion macro.
### Fixed
- PyPDF2 raised exception when another package tried to issue a
  warning.
- Nested `show if` conditions did not always show the correct showing
  and hiding when the screen first loaded.
- Security issue with `next` parameters in URLs.

## [1.2.88] - 2021-07-04
### Changed
- If `behind https load balancer` is set, the IP address will be
  obtained from `X-Real-Ip` or `X-Forwarded-For` rather than from the
  remote IP address.
### Fixed
- The `DELETE` endpoint of `/api/interviews` did not delete sessions
  owned by non-logged-in users.
- The `refresh` button generated a spurious warning in some
  circumstances.

## [1.2.87] - 2021-06-27
### Added
- The `register_jinja_filter()` function.
- The `sv-words.yml` file in the `data/sources` folder of
  `docassemble.base` with system phrases in Swedish.

## [1.2.86] - 2021-06-24
### Fixed
- Missing `.delta` attribute of the output of `date_difference()`.
- Syntax error introduced in 1.2.85.

## [1.2.85] - 2021-06-24
### Added
- The `backup file storage` Configuration directive (requires system
  upgrade).
### Changed
- When using `docx template file` in combination with `fields` or
  `field code`, the interview answers will be used for any variables
  not defined in the `fields` or `field code`.
### Fixed
- Issue with exceptions being triggered because keycloak OAuth
  information not defined in the Configuration.
- Non-string values in `field code` raised exceptions.

## [1.2.84] - 2021-06-20
### Fixed
- Variable not marked as defined if defined by `code` block triggered
  by a different missing variable name.
- Instance names not reset after reordering.

## [1.2.83] - 2021-06-16
### Changed
- The `depends on` invalidation will now be triggered when a variable
  is defined while invalidated.
### Fixed
- Misplacement of buttons on desktop `signature` page when
  `subquestion` is lengthy.

## [1.2.82] - 2021-06-13
### Added
- Support for login using Keycloak.
### Fixed
- API sessions could not follow action paths.

## [1.2.81] - 2021-06-07
### Added
- Support for additional file types in `fix_up()`.

## [1.2.80] - 2021-06-02
### Added
- The methods `fix_up()` and `uses_acroform()` of `DAFile` and related
  classes.
### Changed
- If a PDF file cannot be opened by `PyPDF2`, an attempt will be made
  to convert the file with `qpdf`.

## [1.2.79] - 2021-06-01
### Added
- The methods `disable()`, `enable()`, and `enabled()` of the `nav`
  object.
### Fixed
- Adjusted `.get_pdf_fields()` so that it works with PDF files in
  which the dimensions of a form field are object references.

## [1.2.78] - 2021-05-27
### Fixed
- Error with `depends on` and `generic object` variables.
- Error with websockets.

## [1.2.77] - 2021-05-27
### Added
- The `current_package` and `current_filename` attributes of
  `user_info()`.
- The `progress can go backward` setting under `features`.

## [1.2.76] - 2021-05-24
### Added
- Support for using Azure Key Vault References in the Configuration.
### Fixed
- Internet Explorer issue with Word sidebar.
- Issue with Wizard and global variables.

## [1.2.75] - 2021-05-21
### Changed
- When specifying multiple choices using code containing dictionary
  items, you can use the keys `label` and `value` in a dictionary to
  represent the label that appears on the screen and the value to
  which the variable should be set.
- Widths in percentage format (e.g., `50%`) are now valid when
  inserting images into PDF files assembled from Markdown.

## [1.2.74] - 2021-05-17
### Added
- Support for using AWS Secrets Manager ARNs in the Configuration.
- The `config from` Configuration directive.
### Fixed
- Issues with the Active checkbox and the Roles multiselect on the edit
  user profile page.
- Issue with SQL query for finding a user.

## [1.2.73] - 2021-05-15
### Fixed
- Issue with the "none of the above" option when `uncheck others`
  refers to a list.
- Issue with `validate` and `list collect`.
- Issue with `pg_restore`.

## [1.2.72] - 2021-05-15
### Fixed
- Upgraded dependencies.

## [1.2.71] - 2021-05-14
### Changed
- The Docker image now uses Debian `testing` and Python 3.8.10 rather
  than `buster` and 3.8.6.
### Fixed
- Issue with validation of Playground Packages form.

## [1.2.70] - 2021-05-13
### Fixed
- Trap potential error in SQL statement when querying admin users for
  purposes of processing Modules in the Playground.

## [1.2.69] - 2021-05-13
### Fixed
- Issue with package system where duplicate entries in the package
  list cause the upgrade process to raise an exception.

## [1.2.68] - 2021-05-13
### Changed
- Upgraded various dependencies, including `docxtpl`,
  the new version of which allows images to be inserted into headers
  and footers of DOCX files.
- DO NOT ATTEMPT TO INSTALL 1.2.68 WITHOUT DOWNGRADING PIP FIRST.  The
  latest versions of `pip` will stall indefinitely or use up all of
  the memory in your system because of the way that `pip`'s new
  dependency resolution system works.  To downgrade `pip`, go to
  Package Management, enter `pip==20.1.1` into the "Package on PyPI"
  field, then click "Update."  Only then should you attempt to click
  "Upgrade" to upgrade docassemble to 1.2.68.
### Fixed
- Issue with `interview_url()` and related functions when `style` is
  used.

## [1.2.67] - 2021-05-08
### Fixed
- Possible fix to issue with `/interviews` page and `interview_list()`
  (this turned out to have been caused by a third-party package that
  some people were using).

## [1.2.66] - 2021-05-04
### Fixed
- Suppress Markdown deprecation warning.

## [1.2.65] - 2021-05-04
### Fixed
- A very serious security vulnerability was patched. Everyone should
  upgrade to this version AS SOON AS POSSIBLE (upgrade to 1.2.66,
  actually).  Upgrade by going to Package Management and clicking
  Upgrade.  If you are on the 1.1.x series, you can upgrade to 1.1.113
  with the Upgrade button or by entering `docassemble.webapp==1.1.113`
  into the PyPI field.  If you are using the `stable` branch, you can
  upgrade to 1.0.15.

## [1.2.64] - 2021-05-04
### Added
- The `popover trigger` feature.
### Fixed
- Added validation error on the edit user profile page when changing
  e-mail address to an address that is a case-insensitive match to an
  e-mail address that already exists.

## [1.2.63] - 2021-05-02
### Changed
- Optimizations for `interview_list()`.

## [1.2.62] - 2021-05-01
### Changed
- Optimizations for the restart process.

## [1.2.61] - 2021-05-01
### Added
- The `resume_existing` option for `login_url`.

## [1.2.60] - 2021-04-30
### Added
- The `multiselect` data type.

## [1.2.59] - 2021-04-28
### Fixed
- Problem with `reset_geolocation()`.

## [1.2.58] - 2021-04-27
### Fixed
- Bug with `list collect` and checkboxes.
### Changed
- The `<fieldset>` containing a question's buttons now has the class
  `da-button-set`.
- The `signature_of()` method of the `SigningProcess` class in the
  signature recipe now has a width parameter.

## [1.2.57] - 2021-04-26
### Added
- The `authorize()` method of `DAOAuth`, which adds OAuth2
  authorization headers to a `DAWeb` object.
### Changed
- The `.geolocate()` method has been renamed to `.geocode()` and other
  associated attributes have also been renamed.  Backwards
  compatibility will be maintained until the next minor version
  update.
### Fixed
- The `attachment code` specifier now accepts `DAList` objects.
- Interference between `help` and operation of `show if`.

## [1.2.56] - 2021-04-22
### Fixed
- Screen reader issue with lists.
- Problem with `DATemplate` when used in the context of a DOCX
  template.

## [1.2.55] - 2021-04-20
### Added
- `reload` option for `message()`.
### Fixed
- Error with protecting PDFs with password.

## [1.2.54] - 2021-04-15
### Changed
- `DAList` and `DASet` methods will now return objects of the same
  subclass.

## [1.2.53] - 2021-04-12
### Changed
- The GitHub integration feature now sets the name of the SSH key to
  the `appname` followed by the user ID.

## [1.2.52] - 2021-04-11
### Changed
- Added mechanism in classes `Person`, etc. for indicating what class
  should be used for attributes that are objects.
- Added support for QR codes when filling PDF files.
### Fixed
- The `.address_block()` method now supports the `international` and
  `show_country` keyword parameters.

## [1.2.51] - 2021-04-07
### Changed
- Added optimizations for network usage on first page load (requires
  system update).

## [1.2.50] - 2021-04-04
### Changed
- OCRing in background now uses one process per machine (requires
  system update).

## [1.2.49] - 2021-04-03
### Fixed
- Issue with SVM library.

## [1.2.48] - 2021-03-31
### Fixed
- Error with SMS interface.
- Better trapping of unicode errors in case of a YAML error.

## [1.2.47] - 2021-03-26
### Fixed
- Enter key on Playground Packages page.
- Word wrap on buttons.

## [1.2.46] - 2021-03-24
### Fixed
- Error with reading zip files.
- Error when the `complete_attribute` is a `@property`.

## [1.2.45] - 2021-03-19
### Fixed
- Error with `allow reordering`.

## [1.2.44] - 2021-03-16
### Changed
- The `possessify()` function and the object methods that use it will
  return a Unicode apostrophe when called from the context of a DOCX
  template.

## [1.2.43] - 2021-03-15
### Added
- The `/api/playground_install` endpoint.
- The `bold` and `italic` functions as Jinja2 filters.
### Changed
- As soon as the container starts, a dummy web server begins listening
  on port 80 (or `PORT`).  This web server turns off before NGINX
  starts.
- Verbose `pip` logs no longer saved to `worker.log`.

## [1.2.42] - 2021-03-13
### Changed
- The optional second positional parameter of `noun_plural()` and
  `noun_singular()` can now be a list, dictionary, set, or tuple, in
  which case the length is used.
- Elements with `aria-hidden="true"` or CSS class `sr-exclude` will
  be ignored by the VoiceRSS screen reader.
- `force_ask()`, `force_gather()`, `undefine()`, `forget_result_of()`,
  and `reconsider()` now accept generators as positional parameters.
- When given `Person` objects, `send_email()` will include names in
  To, Cc, and Bcc if the names are defined.
### Fixed
- A `fields` question with no variable-setting fields or a `continue
  button field` did not get marked as answered.

## [1.2.41] - 2021-03-09
### Fixed
- Bug in 1.2.40.

## [1.2.40] - 2021-03-08
### Added
- Support for the `PORT` Docker environment variable, which defaults
  to port 80.

## [1.2.39] - 2021-03-06
### Fixed
- Issues with Word add-in.

## [1.2.38] - 2021-03-04
### Fixed
- Default value on combobox fields.

## [1.2.37] - 2021-03-03
### Fixed
- Default value on combobox fields.

## [1.2.36] - 2021-03-02
### Fixed
- Package install errors not being sent to screen.

## [1.2.35] - 2021-02-27
### Added
- The `.item_name()` and `.delitem()` methods of `DAList`.
- The `.item_name()`, `.delitem()`, `.invalidate_item()`, and
  `.getitem_fresh()` methods of `DADict`.
- The `restart` option for `/api/package`.

## [1.2.34] - 2021-02-25
### Added
- The `.getattr_fresh()` method.
### Fixed
- Bug in `.from_url()`.

## [1.2.33] - 2021-02-20
### Changed
- When `datatype` is `password`, autocomplete will be turned off.
### Fixed
- `code` with `content file` in `raw` mode.
- `.get_pdf_fields()` raised exception when no fields present.

## [1.2.32] - 2021-02-17
### Fixed
- Issue with logging messages during post-update restart.

## [1.2.31] - 2021-02-16
### Added
- The `post` option for `need`.
### Changed
- Deleting a package in the Playground will now delete the memory of
  the last pull of that package.

## [1.2.30] - 2021-02-13
### Fixed
- False positive infinite loop detection with `objects` block.

## [1.2.29] - 2021-02-12
### Fixed
- Package Management issue with waiting for restart.

## [1.2.28] - 2021-02-09
### Changed
- In the question data, `decoration_url` and `decoration_name` have
  been converted to a `decoration` dictionary.
### Fixed
- The `title_case` function now converts its parameter to a string.
- Package Management issue with waiting for restart.

## [1.2.27] - 2021-02-05
### Fixed
- Restored default behavior of not converting to HTML in question
  data.

## [1.2.26] - 2021-02-04
### Changed
- Added `variable_name` to items under `attachments` in the JSON
  representation of a question.
### Fixed
- Removed use of `certbot-auto`.

## [1.2.25] - 2021-01-27
### Added
- The `region` parameter under the `google` Configuration directive,
  for biasing the address autocomplete feature.
### Fixed
- Unicode characters in PDF forms were altered if they were not part
  of `latin1`.

## [1.2.24] - 2021-01-24
### Not changed
- The license.  (Just in case you thought the 1/14/2021 @docassemble
  Twitter thread about the dystopian MIT-SAFE License was real.)
### Changed
- The `from_url()` method will now raise an exception if there is an
  error retrieving the URL.
- The `avconv` Configuration directive is now called `ffmpeg`.
- Uploading a video no longer runs a conversion to `.ogg`.
### Added
- Option for connecting to a PostgreSQL database using SSL with `db`
  and other database configurations.  A system update is required to
  use this feature.
### Fixed
- Problem writing error messages to the logs when Mailgun mail sending
  fails.
- Error in `pdf_concatenate()` when JavaScript in a PDF is text
  instead of bytes.
- Non-graceful failure on Google Drive configuration page when API for
  obtaining a file listing raises an exception.

## [1.2.23] - 2021-01-07
### Changed
- Expanded the information available in the data view of a question.
- Unicode passed in URL arguments is no longer escaped.
### Fixed
- The `next` parameter now contains the session ID upon attempting to
  access a session in an interview with `require login`.
- `depends on` and `on change` now can be used with generic object
  and/or index variables even when the fields being changed do not
  literally match the variable name specified in `depends on` or `on
  change`.
- Problem with `show if` when there are two fields with the same name
  visible on the screen at the same time.

## [1.2.22] - 2021-01-04
### Changed
- Expanded the information available in the data view of a question.
### Fixed
- Issue with combobox update triggers.
- Issue with `DADict` objects in `code` for multiple choice lists.

## [1.2.21] - 2020-12-29
### Changed
- The `list collect` feature will now show the `minimum_number` of
  entries if `minimum_number` is set.

## [1.2.20] - 2020-12-28
### Fixed
- Error with `generic object` inheritance.

## [1.2.19] - 2020-12-26
### Fixed
- Error in `.object_name()`.

## [1.2.18] - 2020-12-22
### Fixed
- Adapted to new version of `pip`.

## [1.2.17] - 2020-12-22
### Changed
- Different startup mechanism for `celery`.
- Removed `--force-reinstall` from `pip` invocation.

## [1.2.16] - 2020-12-15
### Added
- The `chain` function from `itertools`.
### Fixed
- Forced deletion of `Flask-User`.

## [1.2.15] - 2020-12-14
### Fixed
- Pinned dependencies of fork dependencies.

## [1.2.14] - 2020-12-09
### Fixed
- Problem with the way in which `pip` was invoked, given new version
  of `pip`.

## [1.2.13] - 2020-12-09
### Fixed
- Typo in `setup.py`.

## [1.2.12] - 2020-12-09
### Changed
- Dependencies on `aloe` and `selenium`.
### Fixed
- Interview filenames with spaces in the Configuration were disregarded.

## [1.2.11] - 2020-12-07
### Added
- XLIFF support.
- The `user can request developer account` Configuration directive.
### Fixed
- User information that non-privileged users are not allowed to edit
  in Profile but that was set with code was overwritten when user
  edited their user profile.
- Problem with `datereplace.js` in recipe.

## [1.2.10] - 2020-12-05
### Added
- The `raw` datatype.
### Changed
- Additional items colorized in spreadsheet translations.
- HTML stripped from fields with `datatype` of `text`.
### Fixed
- Issue with server-side validation where multiple `question` blocks
  have the same `id`.

## [1.2.9] - 2020-12-04
### Fixed
- Bug in `comma_and_list()`.

## [1.2.8] - 2020-12-03
### Changed
- Different limiting mechanism for the nested use of
  `include_docx_template()`.
- Enabled the `md_in_html` extension of the `Markdown` package.

## [1.2.7] - 2020-12-02
### Added
- The `new window` option to `action buttons`.
### Fixed
- Ajax error with xhr responses.

## [1.2.6] - 2020-12-01
### Fixed
- Error in `update_terms()`.

## [1.2.5] - 2020-11-30
### Fixed
- JavaScript error in Internet Explorer.

## [1.2.4] - 2020-11-29
### Changed
- The `setup.py` file created by the Playground now sets the minimum
  version of dependencies to the latest version on PyPI that is not
  more recent than the version installed on the server.
### Fixed
- Browser warning about Google Analytics cookies.

## [1.2.3] - 2020-11-29
### Fixed
- Upgraded to new version of Azure Blob Storage API.

## [1.2.2] - 2020-11-29
### Fixed
- Reverted Azure Blob Storage API version.

## [1.2.1] - 2020-11-28
### Fixed
- Error on Package Management page.

## [1.2.0] - 2020-11-28
### Changed
- Upgraded Python to version 3.8 and upgraded dependencies.  These
  changes require a system upgrade.  See
  https://docassemble.org/docs/docker.html#upgrading for instructions
  on how to perform a system upgrade.  Because Python changed between
  version 3.6 and and 3.8, you should test your code carefully to make
  sure it still works in Python 3.8.
- Among other upgrades, Bootstrap has been upgraded to version 4.5.3.
  If you are using Bootstrap themes, you may wish to upgrade your
  Bootstrap theme.
### Fixed
- Issue with user privileges.

## [1.1.113] - 2021-05-05
### Changed
- The Upgrade button has been restored but it is non-functional.
### Fixed
- Important security vulnerability.

## [1.1.112] - 2020-11-26
### Changed
- Upgrading through Package Management is turned off because the
  upgrade to 1.2.0 requires a system upgrade.

## [1.1.111] - 2020-11-26
### Fixed
- Some Jinja2 filters did not work correctly.

## [1.1.110] - 2020-11-25
### Changed
- The API can now be used to set variables to class names.
### Fixed
- The `sort` Jinja2 filter did not work correctly.

## [1.1.109] - 2020-11-24
### Added
- The `suppress error notificiations` Configuration directive.
- Error message if file upload will exceed `maximum content length`.
### Fixed
- Google Drive synchronization did not work with shortcuts to folders.

## [1.1.108] - 2020-11-22
### Changed
- The `markdown` and `inline_markdown` filters now respect the `type`
  and `start` attributes of `<ol>`.

## [1.1.107] - 2020-11-21
### Changed
- Upgraded LibreOffice (system upgrade required for this change).
### Fixed
- Bug in previous version.

## [1.1.106] - 2020-11-21
### Added
- The `change_numbering` keyword parameter to `include_docx_template()`.

## [1.1.105] - 2020-11-20
### Changed
- The `.make_ocr_pdf_in_background()` method can now handle mixed file
  types.
### Fixed
- Markdown internal anchor links now work in the web interface.

## [1.1.104] - 2020-11-20
### Added
- German translations of country names.
### Changed
- The `states_list()`, `state_name()`, and `subdivision_type()`
  functions now pass output through the `word()` translation system.
### Fixed
- The `language` modifier for an attachment did not work with `docx
  template file` attachments.

## [1.1.103] - 2020-11-19
### Added
- The `temporary session` specifier under `metadata`.
### Changed
- The `countries_list()` and `country_name()` functions will now pass
  country names through the `word()` translation system.

## [1.1.102] - 2020-11-19
### Fixed
- The local PostgreSQL database was being created with the default
  encoding, which did not allow UTF-8 strings to be saved in `jsonb`
  format.
- An `attachment` that uses a different language than the current
  language did not restore the correct language after an exception.

## [1.1.101] - 2020-11-14
### Fixed
- Issue with `interview_url()` and `interview_url_action()` with `i`
  parameter when short URL is in use.

## [1.1.100] - 2020-11-13
### Fixed
- Translation of phrases on registration page.

## [1.1.99] - 2020-11-12
### Changed
- Different logic for whether hyperlinks open in the same tab or a
  different tab.

## [1.1.98] - 2020-11-12
### Fixed
- Bug in `bates_number()`.

## [1.1.97] - 2020-11-10
### Added
- The `/api/clear_cache` endpoint.

## [1.1.96] - 2020-11-08
### Added
- The `lang` URL parameter for non-interview screens.

## [1.1.95] - 2020-11-06
### Fixed
- Unnecessary incrementing of PyPI version.
- Recent installations (since June 25, 2020, possibly) contained a
  Debian security update that disabled ImageMagick's ability to inject
  signature images onto PDFs.  Running `docker stop` and `docker
  start` is required to enable the PDF signature image feature.

## [1.1.94] - 2020-11-03
### Added
- The `set_object_type()` method of `DAList` and `DADict`.
- The `variable` attribute of the return value of `user_info()`.
- The `reset_geolocation()` method of `Address` and the `reset`
  keyword parameter of the `geolocate()` method.
### Fixed
- The `map` Jinja2 filter looked up dictionary items instead of
  attributes.
- Could not mix a Python-based `show if` with a JavaScript-based `hide
  if` or vice-versa.

## [1.1.93] - 2020-10-27
### Fixed
- Markdown in popover field help.

## [1.1.92] - 2020-10-24
### Added
- The `update_terms()` function.
### Changed
- When using `terms`, you can specify that text other than the term
  name should be displayed using `|`.
- When specifying `terms` and `auto terms`, you can use `phrases` and
  `definition` to indicate that multiple terms are associated with a
  single definition.

## [1.1.91] - 2020-10-24
### Fixed
- Bug in GitHub configuration.

## [1.1.90] - 2020-10-20
### Changed
- Enabled a variety of functions to operate as Jinja2 filters.
### Fixed
- Corrected operation of `selectattr` Jinja2 filter.

## [1.1.89] - 2020-10-19
### Added
- The `make_ocr_pdf()` and `make_ocr_pdf_in_background()`, and
  `bates_number()` methods of `DAFile` and `DAFileList`.
- The `reverse()`, `insert()`, and `count()` methods of `DAList`.

## [1.1.88] - 2020-10-16
### Added
- The `required privileges for initiating` specifier under `metadata`.
### Changed
- The JSON format of questions now includes analytics information.
### Fixed
- The `delete_variables` feature of `/api/session` did not work when
  passing the request in JSON format.

## [1.1.87] - 2020-10-14
### Fixed
- False error messages on package update screen.

## [1.1.86] - 2020-10-13
### Changed
- Monitor disabled when `checkin interval` is zero.
### Fixed
- Potential OAuth2 issue with Google Drive.

## [1.1.85] - 2020-10-12
### Added
- The `table css class` screen part.
- The `show_as_markdown()` method for `template`s.
- The `_inline` option for `include_docx_template()`.
- Ability to list multiple files under `docx template file`.
- Ability to set the `pre` and `post` screen parts directly on a
  `question`.
- The `enable if`, `disable if`, `js enable if`, and `js disable if`
  field modifiers.

## [1.1.84] - 2020-10-07
### Fixed
- GitHub commit issue.

## [1.1.83] - 2020-10-07
### Fixed
- `cross site domains` was not being used by CORS for web sockets.

## [1.1.82] - 2020-10-06
### Fixed
- GitHub commit error.

## [1.1.81] - 2020-10-05
### Fixed
- Tweak to focusing on first element.

## [1.1.80] - 2020-10-04
### Added
- The `middle_initial()` method of `Name`.
### Changed
- First input element on the screen is focused only if visible in the
  viewport.
- `[FILE ...]` can now be used with images declared in `images` or
  `image sets`.
### Fixed
- Issue with floating point/integer numbers and input validation.

## [1.1.79] - 2020-09-28
### Fixed
- Problem with using `[TARGET]` inside of `right`.

## [1.1.78] - 2020-09-25
### Fixed
- Issue with `get_info()`.
- Issue with `show if` `code` and generic objects/iterators.

## [1.1.77] - 2020-09-22
### Fixed
- Issue with fix in the previous version regarding group-level file permissions.

## [1.1.76] - 2020-09-22
### Added
- The `question_id` attribute of `user_info()`.
### Fixed
- Issue with group-level file permissions.

## [1.1.75] - 2020-09-20
### Fixed
- Issues with `show if` and `js show if` when multiple fields with the
  same name are on the screen.
- Issues with server-side validation not recreating values on the
  screen on error.

## [1.1.74] - 2020-09-18
### Changed
- Setting `url_args` without causing a change to the `url_args` does
  not cause a new step to be created.
### Fixed
- An empty string `min` or `max` was not being ignored.
- Issue with `generic object`.

## [1.1.73] - 2020-09-13
### Changed
- The `use_word` keyword attribute to `nice_number()` and `ordinal()`
  can be used to force a textual representation of any number.

## [1.1.72] - 2020-09-10
### Fixed
- Removal of `new_session` from URLs formed with `interview_url()`.

## [1.1.71] - 2020-09-07
### Fixed
- Better support for iterables in `comma_list()` and other places.
- Markdown table alignment in Bootstrap.
- Upgraded Pillow.

## [1.1.70] - 2020-09-05
### Added
- The `reply_to` option for `send_email()`.
### Changed
- The current section name is now the label of the `small screen
  navigation: dropdown` button.
- The breakpoint for the mobile signature view is now Bootstrap `xs`.
### Fixed
- Multiple choice fields with empty choices were being set to `None`
  despite `code`-based `show if` deselecting the field.

## [1.1.69] - 2020-09-02
### Added
- The `/api/stash_data` and `/api/retrieve_stashed_data` endpoints.
- The `stash_data()` and `retrieve_stashed_data()` functions.
- The `current` option for `referring_url()`.

## [1.1.68] - 2020-09-02
### Fixed
- Improper verb conjugation for non-English languages.

## [1.1.67] - 2020-09-01
### Fixed
- Issue with two POST requests being sent during inline file uploads.

## [1.1.66] - 2020-08-30
### Added
- The `small screen navigation` option under `features`.
- The `email template`, `email subject`, `email body`, and `email
  address default` options for customizing the functionality of the
  `attachment`/`attachment code` interface.
### Changed
- The horizontal section interface is no longer hidden on small
  screens.
- The vertical section interface becomes the horizontal section
  interface on small screens.
- The default body of the e-mail that the user can send from an
  `attachment`/`attachment code` interface is now translated using the
  phrases `Your document, %s, is attached.` and `Your documents, %s, are
  attached.`.

## [1.1.65] - 2020-08-28
### Added
- The `style` keyword parameter for `interview_url()`.
### Changed
- The `/start/` path for starting an interview now transforms into
  `/run` instead of `/interview`.  It also has a second form for
  referring to the package name and filename (without using
  `dispatch`).
### Fixed
- The Playground "Share" link did not update correctly based on the
  interview being run.

## [1.1.64] - 2020-08-26
### Fixed
- Issue with relative image URLs when embedding in a `<div>`.

## [1.1.63] - 2020-08-25
### Added
- The `corner back button label` screen part.
### Changed
- Upgraded bootstrap-fileupload.
### Fixed
- The `progress` modifier did not behave as described in the documentation.

## [1.1.62] - 2020-08-23
### Added
- The modifiers `include attachment notice`, `include download tab`,
  and `manual attachment list` for tweaking the display of attached
  documents.
### Fixed
- Step advanced when session started with URL parameters.
- The signature screen scrolled at submission.
- The `next` parameter was forgotten when using social login methods.
- The `reconsider` modifier did not work with iterator variables.

## [1.1.61] - 2020-08-20
### Fixed
- JavaScript error with `getField()`.

## [1.1.60] - 2020-08-19
### Changed
- Playground Packages page now reports local date and time of a commit.
### Fixed
- Issue with two file fields or two fields with a `validate` that have
  the same variable name and one is hidden by `show if`.

## [1.1.59] - 2020-08-18
### Fixed
- Cron problem introduced in 1.1.56.

## [1.1.58] - 2020-08-16
### Fixed
- Backwards-compatibility issue related to `DAEmpty` introduced in 1.1.54.

## [1.1.57] - 2020-08-16
### Fixed
- Backwards-compatibility issue related to `DAEmpty` introduced in 1.1.54.

## [1.1.56] - 2020-08-16
### Added
- The `session_local`, `device_local`, and `user_local` objects in the
  interview answers.
- The `require login` `metadata` directive.
### Changed
- When the API is in use, `interface()` will return `'api'`.
### Fixed
- `review` blocks were not compatible with iterator variables.
- `combobox` fields not working right in `list collect` mode.
- `address autocomplete` did not initialize when the address was
  hidden by a `show if`.
- Submission blocked when an empty non-required file upload field was
  present in an embedded interview.

## [1.1.55] - 2020-08-06
### Added
- The `create_session()` function.
- The `package` attribute of the output of `user_info()`.
- The `make_copy` keyword parameter for `all_variables()`.
- The `overwrite` keyword parameter for `set_session_variables()`.
- The `overwrite` parameter for the `/api/session` POST endpoint.
- The `persistent` option for the `/api/session/action` POST endpoint.
- Recipe for passing variables from one session to a newly created
  other session.

## [1.1.54] - 2020-08-04
### Added
- The `attr_name()` method of the `DAObject` class.
- The `dry_run` keyword parameter for `send_email()` and `send_sms()`.
### Changed
- The `str` keyword parameter when initializing a `DAEmpty` object.
- New recipe for gathering multiple signatures; uses a modular
  approach.
### Fixed
- Missing control for `capitalize` in some language functions.
- SendGrid fails when subject line is empty string.
- The `temporary` and `once_temporary` keyword parameters for
  `interview_url_action()` were not working.
- Problem with running interviews in a different tab in Playground on
  Chrome.

## [1.1.53] - 2020-07-29
### Fixed
- Error in Docassemble-Flask-User dependency.

## [1.1.52] - 2020-07-29
### Fixed
- Moved evaluation of section information to post-assembly when
  getting question data.

## [1.1.51] - 2020-07-28
### Added
- The `footer` screen part.
- `terms` and `autoterms` are now included in JSON question data.
### Fixed
- `signature` blocks did not support `continue button field`.
- System message translation system had gaps due to the integration
  with Flask-User's translation system not working as intended.
- Inconsistent behavior of `force_ask()` depending on whether an item
  was listed first or not.

## [1.1.50] - 2020-07-21
### Added
- Feature for viewing names in an interview and the YAML blocks
  associated with them.
### Fixed
- Missing `.copy()` method for `DAList`.
- The `init()` method of the `DAFileCollection` class did not accept
  arbitrary parameters.
- Fully qualified image URLs now work in e-mail HTML.

## [1.1.49] - 2020-07-07
### Fixed
- Additional input validation on parameters passed to APIs.

## [1.1.48] - 2020-07-06
### Fixed
- The `/api/user_info` API endpoint and the `get_user_info()` function
  now do case insensitive searches for e-mail addresses.

## [1.1.47] - 2020-07-05
### Added
- The `store_variables_snapshot()` function.

## [1.1.46] - 2020-07-05
### Fixed
- Error in restart module.

## [1.1.45] - 2020-07-05
### Fixed
- Error in table creation module.

## [1.1.44] - 2020-07-05
### Changed
- The `interview_list()` function, when called without an `action`,
  now uses pagination and returns a tuple instead of a list.  Note
  that this change is not backwards-compatible, so you will need to
  change any code that you have that calls `interview_list()`.
- The `get_user_list()` function now uses pagination and returns a
  tuple instead of a list.  Note that this change is not
  backwards-compatible, so you will need to change any code that you
  have that calls `interview_list()`.
- The `/api/interviews`, `/api/user/interviews`,
  `/api/user/<user_id>/interviews`, and `/api/user_list` GET endpoints
  of the API now use pagination and return a dictionary, not a list.
  Note that this change is not backwards-compatible, so you will need
  to change any code that you have that uses these APIs.
- Removed the `PY2`, `string_types`, and `text_type` names from
  `docassemble.base.util`.  Note that if you have used any of these,
  this change may break your code.
### Added
- The `persistent` optional keyword parameter for
  `mark_task_as_performed()` and related functions.
- The `task_persistent` optional keyword parameter for `send_email()`,
  `send_sms()`, and the `DAWeb` methods.
### Fixed
- Issue with encryption in functions launched during the loading of
  the first page of an interview session.
- Issue with multi-server configurations and the order in which
  container software is updated that can result in some containers
  unable to start.

## [1.1.43] - 2020-06-30
### Changed
- The `complete_elements()` method now returns a `DAList`.  Note that
  this may break existing code that uses `complete_elements()`.  To
  get a plain list of the complete elements, use
  `complete_elements().elements`.
- Spanish ordinal numbers removed.
- Upgraded jQuery and jQuery Validation Plugin.
### Fixed
- Possible fix to iframe reloading issue.

## [1.1.42] - 2020-06-25
### Added
- Aliases for JavaScript functions that have the `da` prefix.
### Fixed
- Jinja2 filter was converting Python built-in types to strings.

## [1.1.41] - 2020-06-22
### Fixed
- Bug in `recursive_eval_textobject()`.

## [1.1.40] - 2020-06-19
### Added
- `question metadata`, `field metadata`, and the `send question data`
  option under `features`.
- The `country` keyword parameter for `.sms_number()`.
- The `field` keyword parameter for `validation_error()`.

## [1.1.39] - 2020-06-17
### Fixed
- Issue with `interview_url_action()` and `force_ask()`.
- Upgraded `docxtpl` and `docx`.

## [1.1.38] - 2020-06-11
### Added
- The `add another label` option for `list collect`.
- The `manual_line_breaks` Jinja2 filter.
### Changed
- The `.all_false()` and related `DADict` methods reflect Python
  notions of true and false values rather than literal equivalence of
  the values to `True` or `False`.
- Sessions that were created using the API will now appear immediately
  in My Interviews.

## [1.1.37] - 2020-06-10
### Fixed
- Attempt to force reinstall of pdfminer.six.

## [1.1.36] - 2020-06-10
### Fixed
- Another attempt to force uninstall of pdfminer3k.

## [1.1.35] - 2020-06-08
### Fixed
- Force uninstall of pdfminer3k.

## [1.1.34] - 2020-06-08
### Fixed
- Error with `objects_from_file()`.

## [1.1.33] - 2020-06-04
### Changed
- `help` can be added to `note` and `html` fields.
### Fixed
- Support for icons in terms.

## [1.1.32] - 2020-05-30
### Fixed
- Issue with `objects_from_file()`.

## [1.1.31] - 2020-05-29
### Fixed
- Issue with nested question file inclusion change in 1.1.30.

## [1.1.30] - 2020-05-29
### Fixed
- Issue with screen reader and labels containing HTML codes.
- Issue with nested question file inclusion.

## [1.1.29] - 2020-05-27
### Fixed
- Issue with `set_save_status()`.
- Issue with checkbox validation text when the "none of the above"
  choice contained HTML.
- Bug prevented `admin` users from changing other users' information
  with the API.

## [1.1.28] - 2020-05-21
### Added
- The `skip undefined` option for `pdf template file`
### Fixed
- Issue with nested `datatype: object` fields in a `list collect`.
- Issue with `disable others` referring to a list in a `list collect`.

## [1.1.27] - 2020-05-19
### Fixed
- Issue with `js show if` and `list collect`.

## [1.1.26] - 2020-05-17
### Fixed
- Duplicative `under` text when `attachment` is used.
- Error when reading certain types of PDF files.

## [1.1.25] - 2020-05-07
### Added
- The `if_started` keyword parameter for the `number_gathered()`
  method.
### Changed
- If `ask_number` on a `DAList` or `DADict` is `True` and
  `target_number` is defined, removing an item using the table editing
  interface will decrease `target_number` by one.

## [1.1.24] - 2020-05-04
### Fixed
- Unicode problem with JSON sent from the browser.

## [1.1.23] - 2020-05-03
### Added
- The `getFields()` JavaScript function.
### Changed
- A `question` with `fields` that contains a single multiple choice
  field where the choices are empty is not skipped if the `question`
  has a `continue button field`.
- The branch and commit are shown in the Packages page of the
  Playground when GitHub integration is enabled and the package has a
  known presence on GitHub.
- Upgraded Font Awesome to 5.13.0.
### Fixed
- Infinite loop when a list is gathered and `object_type` is set to a
  class for which the textual representation or `complete_element` is
  pre-defined and a set number of items are to be gathered.
- The `sql ping` feature was not fully implemented.

## [1.1.22] - 2020-04-30
### Changed
- When a item is added to or removed from a group, the `there_are_any`
  attribute is updated even if `there_are_any` was not previously
  defined.
### Fixed
- Package update problem due to `pip freeze` changing behavior in
  version 20.1.

## [1.1.21] - 2020-04-30
### Fixed
- PDF export value issue where two export values are present in the
  PDF for a checkbox field.

## [1.1.20] - 2020-04-30
### Changed
- Upgraded LibreOffice to version 6.4.
### Fixed
- `review` screens shown as part of the interview logic were being
  treated as actions.

## [1.1.19] - 2020-04-29
### Changed
- If `help` accompanies a `yesno` field, it will be available as a
  popup accessed from an icon.
### Fixed
- GitHub issue when committing to a new branch.
- Exception when trying to edit a non-existent user.
- Bug in `comma_and_list()`.
- The `disable others` and `uncheck others` features did not work
  correctly in a `list collect`.

## [1.1.18] - 2020-04-28
### Changed
- The `checkbox export value` feature is no longer documented because
  PDF field filling now inspects the PDF for the export value.
### Fixed
- The `address autocomplete` feature was not compatible with `show
  if`.

## [1.1.17] - 2020-04-27
### Added
- The `hyperlink style` option for an `attachment`.
### Fixed
- Sendgrid API e-mails to multiple "To" recipients only reached the
  first recipient.

## [1.1.16] - 2020-04-26
### Added
- Test script screenshot mechanism.
### Changed
- Subfolder paths now allowed in URLs for static files.
### Fixed
- S3 file sync problem.

## [1.1.15] - 2020-04-23
### Added
- The `default date min` and `default date max` options under
  `features`.

## [1.1.14] - 2020-04-22
### Changed
- The GitHub button on the Playground Packages page will now respect
  the GitHub repository that was pulled and will make an initial
  commit when the repository exists on GitHub but is empty.

## [1.1.13] - 2020-04-21
### Added
 - The `title url` and `title url opens in other window` screen parts.
 - A "retry" button on the error screen.
### Changed
 - Auto-focus on page load will only be given to an element in the first non-`note`,
   non-`html` field.
### Fixed
 - Pressing enter key on the list collect screen clicked a hidden
   button.
 - Changes in 1.1.11 blocked certain types of uploads.

## [1.1.12] - 2020-04-20
### Fixed
 - Fields with an object-based `datatype` did not work when `list
   collect` was used.
 - Error with exporting tables to Excel.

## [1.1.11] - 2020-04-19
### Added
- Ability to download files by specifying a `filename` parameter to
  GET requests to `/api/playground`.
- The `use_word` keyword argument to `ordinal()`.
- The `always include editable files` specifier for omitting the
  checkbox in the attachment UI.
- The `nginx ssl protocols` Configuration directive.
### Changed
- If `use https` or `behind https load balancer` are enabled, a
  `Strict-Transport-Security` header is returned.
- If `allow embedding` is not set to `True`, the `X-Frame-Options` and
  `Content-Security-Policy` will block iframes.  If `allow embedding`
  is set to `True` and `cross site domains` is set, the list of
  domains will be used for the `Content-Security-Policy` header.
- More than one `address autocomplete` can now be used on a screen.
### Fixed
- Disconnecting from GitHub integration failed if the existing
  integration no longer functioned.

## [1.1.10] - 2020-04-15
### Added
- The `mailgun_variables` option for `send_email()`.
- The `docx_concatenate()` function.
### Changed
- When more than one file with the same name is added to a ZIP file,
  the files are renamed to avoid name collision.

## [1.1.9] - 2020-04-14
### Fixed
- Typo in `Address.on_one_line()`.

## [1.1.8] - 2020-04-13
### Fixed
- Error when `code` is used to generate `fields` and manually entered
  fields follow.
- Jinja2 index error converted to attribute error.
- Incorrect focus when first fields have `hide if`.

## [1.1.7] - 2020-04-13
### Fixed
- Error with serving files through `/uploadedfile/<number>`.

## [1.1.6] - 2020-04-12
### Added
- The `social` Configuration directive for meta tags.
- The `social` specifier under `metadata` for meta tags.
- The `allow robots` Configuration directive.
- Czech translation.

## [1.1.5] - 2020-04-09
### Added
- The `required` modifier for the `signature` block.
### Fixed
- Error message about blank signature not showing.

## [1.1.4] - 2020-04-08
### Changed
- `DAEmpty` now accepts index assignments.
- Obtaining a `new_session` during an interview now preserves
  `url_args` and the `referring_url()`, consistent with the behavior
  of `restart`.

## [1.1.3] - 2020-04-06
### Added
- The `use_familiar` attribute of the `Individual` class.
- The `familiar()` method of the `Name` class.
### Fixed
- Issue with too many flash messages on CSRF error.
- Issue with multiple DOCX documents and subdocuments.

## [1.1.2] - 2020-04-04
### Fixed
- Issue with file names and `.url_for()`.

## [1.1.1] - 2020-04-04
### Added
- The `attachment` keyword parameter for `.url_for()`.
- The `_attachment` keyword parameter for `url_of()`.
### Changed
- Securing of uploaded filenames less strict.

## [1.0.14] - 2021-05-05
### Fixed
- Missing file in setup.py.

## [1.0.13] - 2021-05-04
### Fixed
- Suppress Markdown deprecation warning.

## [1.0.12] - 2021-05-04
### Fixed
- Important security vulnerability.

## [1.0.11] - 2020-04-15
### Fixed
- Typo in `Address.on_one_line()`.
- Error when code is used to generate fields and manually entered
  fields follow.
- Jinja2 index error converted to attribute error.
- Incorrect focus when first fields have `hide if`.

## [1.0.10] - 2020-04-12
### Fixed
- Removed 302 redirects.
- Mako filter error.
- Inline upload error.

## [1.0.9] - 2020-04-06
### Fixed
- Issue with too many flash messages on CSRF error.
- Issue with multiple DOCX documents and subdocuments.

## [1.0.8] - 2020-04-05
### Added
- The `DASQLPING` Docker environment variable

## [1.0.7] - 2020-04-05
### Fixed
- Display of available version on Package Management page.

## [1.0.6] - 2020-04-04
### Added
- The `stable version` Configuration directive.

## [1.0.5] - 2020-04-02
### Fixed
- Apache initial certbot run used wrong syntax.
- Synchronizing local updates to files inside projects on OneDrive failed.

## [1.0.4] - 2020-03-31
### Fixed
- Error when `disable others` is used inside of a `show if` or `js
  show if`.

## [1.0.3] - 2020-03-30
### Fixed
- `update_ordinal_numbers()` and `update_ordinal_function` missing
  from `docassemble.base.util`.
- `sql ping` workaround for SQL connections being cut off.

## [1.0.2] - 2020-03-25
### Fixed
- Fixed issue with incomplete pull request by dependabot.

## [1.0.1] - 2020-03-25
### Fixed
- Deprecated use of access token in URL parameter when retrieving
  branch listing from GitHub API when repository reference uses an
  `oauth-basic` URL.

## [1.0.0] - 2020-03-22
### Added
- The `show_country` keyword parameter for the `.on_one_line()` and
  `.block()` methods of the `Address` class.
- The `international` keyword parameter for the `.block()` method of
  the `Address` class.
- The `assemble_docx()` function.
### Changed
- Switched to a different versioning system.  The `stable` branch on
  GitHub will be version 1.0.  Patch versions within version 1.0
  (1.0.1, 1.0.2, etc.) will be for bug fixes and security upgrades
  only.  The `master` branch on GitHub will be version 1.1.  Patch
  versions within version 1.1 will include bug fixes as well as
  feature enhancements.
- The `omit_default_country` parameter of the `.on_one_line()` method
  of the `Address` class is deprecated.
### Fixed
- Bug with `restrict input variables` and attachment e-mailing and
  downloading.
- `pip show` inefficiency unnecessarily slowed down initial start up
  time.

## [0.5.111] - 2020-03-20
### Added
- The `auto open` option for the `sections` block.
- The `pages()` method for Twilio fax status.
### Fixed
- The caret next to automatically closed subsections in the section
  navigation bar defaulted to the wrong setting.
- The `received()` method of the fax send status did not correctly
  respond `True` when the fax was in `'delivered'` status.
- Error message when clicking the back button under certain
  circumstances.

## [0.5.110] - 2020-03-17
### Fixed
- Bug affecting `raw global javascript`.

## [0.5.109] - 2020-03-11
### Changed
- Deleting an item in a table now undefines `there_is_another` when it is
  `True`.
### Fixed
- The `bootstrap theme` in the Configuration will apply to interviews
  if `bootstrap theme` in `features` is not set.
- Errors in global CSS and JS Configuration directives not intercepted
  and logged.

## [0.5.108] - 2020-03-08
### Fixed
- Issue with `bootstrap theme` and other Configuration directives that
  require Flask URL formation.

## [0.5.107] - 2020-03-03
### Changed
- More flexible handling of `default` values with `datatype: date`.
- The `allow embedding` Configuration directive now accepts the value
  `'Lax'`, which is the default.

## [0.5.106] - 2020-02-29
### Changed
- LibreOffice Word to PDF conversion no longer reduces image
  resolution.
### Fixed
- Log server in multi-server mode accessed on wrong port.
- URL parameters stripped when redirecting to login when `allow
  anonymous access` is `False`.

## [0.5.105] - 2020-02-26
### Changed
- If the database is PostgreSQL, the Alembic table alteration
  introduced in 0.5.97 for MySQL compatibility purposes is no longer
  applied by default because it might take too much time on a server
  with a large SQL database.  The discrepancy between the SQLAlchemy
  column type specification (varchar) and the actual PostgreSQL column
  types (text) is harmless.  If your SQL database is not large, you
  can set `force text to varchar upgrade: True` in your Configuration
  before upgrading to force the column type alteration to take place
  during the upgrade.  After upgrading to 0.5.105+, you can remove
  `force text to varchar upgrade` from the Configuration.  This is
  only applicable if upgrading from 0.5.96 or before; if you already
  upgraded to 0.5.97 - 0.5.104, then the alteration has already taken
  place.
### Fixed
- Upgraded `bleach` due to security vulnerability.

## [0.5.104] - 2020-02-25
### Fixed
- Error with `allow embedding`.

## [0.5.103] - 2020-02-23
### Fixed
- Error with `DAContext` variables.

## [0.5.102] - 2020-02-23
### Added
- The `user auto delete` Configuration directive.
- The `allow embedding` Configuration directive, which if `True` sets
  the `SameSite` flag in cookies to `None`.
### Changed
- The `SameSite` flag is now set to `Strict` in cookies by default.
  For the old behavior, set `allow embedding: True` in the
  Configuration.

## [0.5.101] - 2020-02-23
### Changed
- Playground syntax highlighting now highlights Python code as Python
  code.
### Fixed
- The `interview_menu()` function did not accept parameters.

## [0.5.100] - 2020-02-20
### Added
- The `.data_type_guess()` method of `DACatchAll`.
- The `.keys()` method of `DAStore`.
### Fixed
- Issue with default values after input validation fails and two
  fields set the same variable.

## [0.5.99] - 2020-02-19
### Added
- Catchall questions.
### Fixed
- When item under `edit` in a `table` has no question associated with
  it, an error was raised only if the item was first.

## [0.5.98] - 2020-02-18
### Fixed
- Typo causing `/playgroundstatic` file links to fail.

## [0.5.97] - 2020-02-17
### Added
- The `forget prior` option for `action buttons`.
### Changed
- Calls to subprocesses now have timeouts.
- Database columns used as indices changed from text to variable character.
### Fixed
- Bug with table export.

## [0.5.96] - 2020-02-15
### Changed
- `depends on` no longer implies `need`.

## [0.5.95] - 2020-02-14
### Added
- The `show incomplete` and `not available label` options for `table`
  blocks.
- The `gathering_started()` method of groups.

## [0.5.94] - 2020-02-13
### Added
- The `allow external auth with admin accounts` Configuration
  directive.
- The url parameter feature of `url_of()`.

## [0.5.93] - 2020-02-13
### Changed
- `code` blocks with `event` work with `depends on` now.
- Playground folders have download buttons now.
- `re` and `json` are now available inside the interview namespace.
### Fixed
- Let's Encrypt issue.

## [0.5.92] - 2020-02-11
### Added
- The `add_separators()` function.
- The `session error redirect url` Configuration directive.
### Changed
- Calling `as_noun()` on a group with one item will return the
  `noun_singular()` of the applicable noun.

## [0.5.91] - 2020-02-07
### Added
- The `/api/interview_data` API endpoint.
### Fixed
- Interview cache not cleared after Playground pull.

## [0.5.90] - 2020-02-06
### Added
- The `convert_to` method of `DAFile`.
### Changed
- Functionality of `depends on` extended to additional block types.

## [0.5.89] - 2020-02-04
### Changed
- Backend health monitor HTTP server moved to port 8082 from port
  8080.

## [0.5.88] - 2020-02-03
### Added
- The `response_code` option for `response()` and `json_response()`.
- The `sendgrid api key` Configuration directive for sending e-mail
  using the SendGrid API.
### Changed
- A `question` with a Continue button that sets a variable to `True`,
  or a `review` screen with a Continue button instead of a Resume
  button, can be indicated with `continue button field` instead of
  `field`.

## [0.5.87] - 2020-02-02
### Fixed
- Overwriting of README in Playground Packages when README.md is in
  a first level subfolder.
- Fields hidden by `show if` that uses `code` could prevent the
  display of a `question`.

## [0.5.86] - 2020-01-31
### Added
- The `default_for` class method and `is_object` attribute of
  `CustomDataType`.
### Changed
- The `datatype` of `area` should now be expressed as `input type:
  area`.  For backwards compatibility, `datatype: area` still works.
### Fixed
- Bug in `/api/file` introduced in 0.5.85.

## [0.5.85] - 2020-01-28
### Added
- CSS classes on HTML elements related to attachments.
### Fixed
- Missing static file in existing package generated exception instead
  of a 404 error.

## [0.5.84] - 2020-01-27
### Added
- The `restrict input variables` Configuration directive.
- The `allowed to set` question modifier.
### Fixed
- PDF image overlays failed with any image that contained a density in
  the metadata.

## [0.5.83] - 2020-01-26
### Added
- Input validation features for `CustomDataType` classes.
- Ability to use `DAOAuth` without being logged in.
### Fixed
- JavaScript failure on error screens during interviews.

## [0.5.82] - 2020-01-23
### Added
- Warnings in the logs if unrecognized keys used in interview YAML
  dictionaries.
### Fixed
- The `disable others` feature interfered with the `show if` feature.

## [0.5.81] - 2020-01-22
### Added
- The `allow updates` Configuration directive and `DAALLOWUPDATES`
  Docker environment variable.
### Fixed
- Google Drive issue with files reporting no size.
- Erroneous reference to text_type.

## [0.5.80] - 2020-01-20
### Fixed
- Variables with iterators or generic object references could not be
  set through the API or `set_session_variables()`.

## [0.5.79] - 2020-01-18
### Added
- The `convert_file` API endpoint.
### Fixed
- Incorrect tab order in Playground Pull.

## [0.5.78] - 2020-01-14
### Added
- The `depends on` modifier.
- The `on change` block.
- The `invalidate()` function.
- The `.invalidate_attr()` method of `DAObject`.
- The `invalidate` option in a `review` block.

## [0.5.77] - 2020-01-12
### Added
- Ability to convert DOCX to PDF using CloudConvert.
- The `cloudconvert secret` Configuration directive.

## [0.5.76] - 2020-01-08
### Fixed
- Playground variables sidebar did not always switch to the most
  recently-run interview.
- Restart process used IP address and port that may not be available
  internally.

## [0.5.75] - 2020-01-07
### Added
- The `date format`, `datetime format`, and `time format`
  interview-wide defaults.
### Fixed
- Line breaking issue with `terms` and `auto terms`.

## [0.5.74] - 2020-01-06
### Fixed
- Error when checkbox values are not strings.

## [0.5.73] - 2020-01-05
### Fixed
- Error in watchdog process launch.
- UI bug in list collect.

## [0.5.72] - 2020-01-05
### Added
- The `admin full width` Configuration directive.
- The `wrap lines in playground` Configuration directive.
### Changed
- Moved Download button to below the editor in the Playground.
### Fixed
- Bug in `legal.py`.
- Not safe to concatenate a `DAList` and a `DAEmpty`.

## [0.5.71] - 2020-01-05
### Changed
- Discontinued support for Python 2.7.

## [0.5.70] - 2019-12-30
### Added
- The `phone_number_formatted()` function.
- The `fr-words.yml` translation file in `docassemble.base`.
### Fixed
- Errors when building the Dockerfile on the ARM architecture.

## [0.5.69] - 2019-12-24
### Added
- The `.user_access()` and `.privilege_access()` methods of `DAFile`.
- The `persistent`, `private`, `allow users`, and `allow privileges`
  specifiers for `attachments` and field modifiers for `datatype:
  file` fields.
### Fixed
- User could not access a private and persistent file after the
  deletion of the session in which the file was created.
- Issue with `js show if` and `list collect`.

## [0.5.68] - 2019-12-21
### Fixed
- JQuery Validation Plugin message for integer and step input
  validation was not customizable.
- Dependency was incompatible with Python 3.5.

## [0.5.67] - 2019-12-19
### Added
- The `help generator` and `image generator` field modifiers.
### Fixed
- Error when `code` was used with `content file` and the code
  returned a list.
- Backup of Redis database when password is used.

## [0.5.66] - 2019-12-19
### Fixed
- Issue with Redis and passwords.

## [0.5.65] - 2019-12-19
### Added
- The `DAWeb` object.
- The Configuration page now reports the underlying Python version.
### Fixed
- The `PATCH` endpoints for API-related API calls only accepted URL
  parameters.
- The `step` specifier for `datatype: range` fields was not effective.
- The `re_run_logic()` function did not re-run from the start of the
  interview logic in all situations.
- The `redis` directive in the Configuration did not support
  passwords.
- A checkbox with the empty string as the value triggered an error.

## [0.5.64] - 2019-12-15
### Fixed
- Back button after `url_args` are set repeated the setting of the
  `url_args`.
- The `resume interview after login` feature did not work correctly
  with the default menu.

## [0.5.63] - 2019-12-14
### Added
- API endpoints for managing API keys.

## [0.5.62] - 2019-12-12
### Fixed
- JavaScript error, introduced in 0.5.31, impeded embedded field
  validation.
- The `default interview` was ignored if a `dispatch` directive
  existed.
- Error in package listing when installing from GitHub.

## [0.5.61] - 2019-12-11
### Fixed
- The `subtitle` screen part was not updated correctly by
  `set_parts()`.
- In the Playground, the "Share" link was not updated when the
  "Variables, etc." file name changed.

## [0.5.60] - 2019-12-09
### Fixed
- Issue with `supersedes`.

## [0.5.59] - 2019-12-09
### Fixed
- Issue with `supersedes`.

## [0.5.58] - 2019-12-09
### Fixed
- Modules included in YAML files with relative references were loading
  from the main YAML file's package, not in the package of the YAML
  file containing the `modules` or `imports` block.

## [0.5.57] - 2019-12-09
### Changed
- Different way of finding GitHub e-mail address.
### Fixed
- Cron issues.

## [0.5.56] - 2019-12-08
### Added
- The `action buttons` specifier for `question`s.

## [0.5.55] - 2019-12-06
### Fixed
- Styling of Font Awesome icons inside buttons.
- Some variables in Variables, etc. inappropriately flagged as undefined.

## [0.5.54] - 2019-12-05
### Added
- The `confirm registration` Configuration directive.
### Changed
- CSRF errors pop up in a "flash" box.
- Cron jobs run with nice 19 (system upgrade required for this
  change).
- Messages from Flask-User are now translated through the
  **docassemble** system phrase translation system.
### Fixed
- Styling of Font Awesome icons inside buttons.

## [0.5.53] - 2019-12-03
### Added
- The `hook_on_remove()` method.
- The `SQLObjectList`, `SQLRelationshipList`,
  `StandardRelationshipList`, and `SQLObjectRelationship` classes in
  `docassemble.base.sql`.
- The `.any()`, `all()`, and `.filter()` class methods of `SQLObject`.
- The `.has_child()`, `.add_child()`, `.get_child()`, `.del_child()`,
  `.has_parent()`, `.add_parent()`, `.get_parent()`, and `.del_parent()`
  methods of `SQLObject`.
- The `_session` attribute of `SQLObject`.
- The option to opt out of module pre-loading by adding `# do not
  pre-load` to a line at the top of the module file.
### Changed
- The `message` parameter of `.add_action()` has been renamed to
  `label` (backwards-compatibility is maintained).
- The `.get_session()` method of `SQLObject` has been removed in favor
  of the `._session` attribute.

## [0.5.52] - 2019-11-29
### Fixed
- Bug in package update script.

## [0.5.51] - 2019-11-28
### Changed
- The `pt-words.yml` file has been renamed to `pt-br-words.yml`.  If
  you are using this file, you will need to change your `words`
  configuration.
### Fixed
- HTML codes non-printable in dropdown lists.

## [0.5.50] - 2019-11-26
### Added
- The `inline_markdown` Jinja2 filter.
### Fixed
- Problem with XLSX translation file colorization.

## [0.5.49] - 2019-11-24
### Fixed
- Python 2.7 bug introduced in 0.5.47.

## [0.5.48] - 2019-11-24
### Added
- The `external` keyword parameter for the `.url_for()` method.
### Changed
- Access to files is now granted to users across sessions, whether the
  session was active in the browser's session or not.  Previously,
  access was restricted based on sessions that had been active in the
  browser's session.
- The `.url_for()` method when used with `temporary=True` now implies
  `external=True`, which means that the URL returned includes the
  protocol and hostname.  Use `external=False` to preserve the old
  behavior.
- A superscripted question mark icon is now shown in the green text
  when `help` is added to a field.
- When committing to GitHub from the Playground Packages screen, you
  can choose to also publish on PyPI and install the package on the
  server.
- When publishing to PyPI from the Playground Packages screen, you can
  choose to also install the package on the server.

## [0.5.47] - 2019-11-24
### Added
- The `prevent_dependency_satisfaction` decorator.
- The `interview delete days by filename` Configuration directive.
- The `review button color` and `review button icon` options under
  `features`.
- The `sleep` option for `response()` and `command()`.
### Fixed
- Cron job inefficiencies.
- JavaScript error when using `check in` and `list collect` at the
  same time.
- Error when `admin` user signs in with a social login.
- An `input type: ajax` in `list collect` did not allow adding
  additional items.
- Ampersands in Jinja2 code were converted to `&amp;`.

## [0.5.46] - 2019-11-21
### Fixed
- Possible race condition in `interview_list()`.

## [0.5.45] - 2019-11-20
### Added
- The `backup` directive under `db`.
### Fixed
- Problem converting some types of interview answers to JSON.

## [0.5.44] - 2019-11-20
### Fixed
- Cron job was overtaxing the SQL server.
- `does_verb()` used the wrong tense.

## [0.5.43] - 2019-11-18
### Added
- Ability to pass keyword parameters to the `show()` method of a
  template.
### Fixed
- Problem with object storage cache invalidation.

## [0.5.42] - 2019-11-17
### Fixed
- Problem unpickling from 2.7.

## [0.5.41] - 2019-11-16
### Fixed
- Problem with the Playground API using the Templates folder.
- Playground API did not support projects other than the default
  project.
- HTML typo that was introduced in 0.5.40.
- Problem unpickling from 2.7.

## [0.5.40] - 2019-11-15
### Added
- The `button style` Configuration directive.
- The `disable analytics` option under `features`.
### Fixed
- The LDAP login feature was not compatible with the new version of
  the `python-ldap` package.

## [0.5.39] - 2019-11-13
### Changed
- Multi-server syslog system improved.
- `objects_from_file()` now accepts `DAFile` and related objects.
### Fixed
- Problem with `DAStore` being used with the API.
- Logrotate not rotating all files.

## [0.5.38] - 2019-11-11
### Changed
- Testing scripts now support the `aloe` package as an alternative to
  `lettuce`.
### Fixed
- Web sockets logs not sent to syslog.
- `RABBITMQ` and `REDIS` not overridden when
  `ENVIRONMENT_TAKES_PRECEDENCE` is true.
- Reverted change made in 0.5.37 regarding HTML codes.

## [0.5.37] - 2019-11-09
### Added
- Method of initializing admin e-mail and password through volume
  mount.
- The `collect statistics` Configuration directive.
### Changed
- External PostgreSQL database created if it does not exist.
### Fixed
- Dependency on `mod_wsgi` caused problems when upgrading.
- HTML codes non-printable in dropdown lists.
- Potential problem with too-short RabbitMQ heartbeat.

## [0.5.36] - 2019-11-04
### Fixed
- Exceptions raised by syslog calls were not trapped.
- Problems with restarting server in multi-server configuration.

## [0.5.35] - 2019-10-31
### Changed
- The "remember me" feature removed.
### Fixed
- Deleted or renamed playground modules not culled from Python
  installation.
- Content of new file in Playground lost if filename blank.
- Erroneous `session` parameter added to result of
  `interview_url_action()` if `i` specified.

## [0.5.34] - 2019-10-30
### Fixed
- Erroneous dependency on `pkg-resources` in `docassemble.base` for
  Python 2.7.

## [0.5.33] - 2019-10-30
### Changed
- All Python dependencies have version numbers explicitly indicated.
- Backend server health check tests for completion of initialization.
- The `websockets ip` Configuration directive no longer defaults to localhost.
### Fixed
- Better handling of Markdown when passing values to a DOCX file
  directly.
- Ordinal functions now accept arbitrary keyword arguments.
- Some phrases for translation not detected.
- The `verbatim()` function did not escape formatting characters in
  some circumstances.

## [0.5.32] - 2019-10-25
### Added
- `ENVIRONMENT_TAKES_PRECEDENCE` Docker environment variable.
- The `use minio` Configuration directive.
- Added `account_type` as a response from `get_user_info().
### Changed
- Improved backup and logging in multi-server configuration.
- Any `admin` can upgrade or downgrade packages.
### Fixed
- The `subtitle` did not work with `set_parts()`.
- Certain PDF fields raised error.
- Not all language functions were compatible with keyword parameters.
- Manual newlines in Markdown not converted to line breaks.
- Double quotes in HTML input element values not properly escaped.

## [0.5.31] - 2019-10-13
### Added
- Ability to use `code` in `content file` specifiers of `template`s
  and `attachment`s.
### Changed
- When `labels above fields` is used, the input element will now be
  wrapped in a `<div>` with CSS class `dafieldpart`.
- Server-side validation errors are now scrolled to when the screen
  loads.
### Fixed
- Broken link to variables and values on error page.

## [0.5.30] - 2019-10-11
### Fixed
- Free disk space indicator not compatible with Python 2.7.

## [0.5.29] - 2019-10-11
### Added
- Ability to download all log files as a ZIP file.
- Free disk space indicator on Configuration page.
### Fixed
- Problem with Google Drive Sync and zero-byte files.

## [0.5.28] - 2019-10-10
### Fixed
- Problem with NGINX and `POSTURLROOT`.

## [0.5.27] - 2019-10-10
### Fixed
- Problem with session deletion.

## [0.5.26] - 2019-10-09
### Changed
- Limited data retrieved by Google address autocomplete feature.
### Fixed
- NGINX configuration omitted `POSTURLROOT`.

## [0.5.25] - 2019-10-09
### Changed
- Configuration page now shows a listing of errors in the
  Configuration, if there are any.
### Fixed
- Error with URLs to cloud-hosted files.

## [0.5.24] - 2019-10-08
### Fixed
- Error with Run button in Playground.
- Erroneous space in the CSS class names of some fieldsets.
- Error with non-cloud temporary URLs.

## [0.5.23] - 2019-10-08
### Added
- Additional cache invalidation headers.

## [0.5.22] - 2019-10-08
### Added
- The `/api/fields` endpoint.
- The `use cloud urls` directive in the Configuration.
### Fixed
- Miscellaneous problems with ajax field type.
- Syntax with Let's Encrypt renewal not compatible with all
  configuration types.
- Problem with obtaining JSON version of `question` where `js show if`
  is in use.
- Unnecessary saving of interview answers with the wrong encryption.

## [0.5.21] - 2019-10-04
### Fixed
- Error when Playground project name matched name of a Playground
  package.

## [0.5.20] - 2019-10-04
### Fixed
- Problem with office task pane.
- Problem with YAML in field scanner in utilities.
- Problem with `endpoint url` option.

## [0.5.19] - 2019-10-02
### Fixed
- Problem with background tasks and uploads.

## [0.5.18] - 2019-10-02
### Added
- Projects system in the Playground.
- The `verbatim()` function.

## [0.5.17] - 2019-09-26
### Added
- An option for assembling text files by setting `raw: True` under
  `attachment`.

## [0.5.16] - 2019-09-25
### Added
- Custom `datatype` feature.
### Fixed
- Session-related bug.
- Thumbnail generation bug.
- Image icon problems.
- External URLs calculated inconsistently.

## [0.5.15] - 2019-09-23
### Added
- The `css class` screen part.
- The `allow anonymous access` Configuration directive.
### Fixed
- Session-related bug.

## [0.5.14] - 2019-09-23
### Fixed
- Markdown of single-column `table`s not recognized.

## [0.5.13] - 2019-09-22
### Added
- The `use_objects` option for `objects_from_file()`
- The `use objects` option for `objects from file`.
### Changed
- The `objects_from_file()` function and the `objects from file` block
  now support JSON files as well as YAML files.
### Fixed
- Transitional error related to session upgrade.

## [0.5.12] - 2019-09-21
### Changed
- Users can run multiple sessions in different browser tabs.
- The `i` URL parameter is required for any endpoint that uses the
  current sesion.
- The `DAEmpty` class now supports comparison operators.
### Fixed
- IndexErrors appeared under some circumstances when using actions.
- Live Help bug.

## [0.5.11] - 2019-09-16
### Fixed
- Problem with checkbox object initialization inside of `DADict`.
- Error when trying to inspect functions to get usage information for
  the Playground sidebar.
- Renewal of Let's Encrypt included obsolete domains.

## [0.5.10] - 2019-09-15
### Added
- The `symbol` keyword parameter of `currency()`.
- The `currency_symbol` keyword parameter of `set_locale()`.
### Fixed
- Problem with `disable others` when `allow non-idempotent questions`
  was `False`.
- Problem with `reconsider` under certain circumstances.
- Error when `command()` used immediately after a file upload.
- Error when exporting dates in a table to Excel.

## [0.5.9] - 2019-09-12
### Fixed
- `NoneType` error when using `data` with `use objects`.
- Error when non-base64 dictionary keys happened to be valid base64.

## [0.5.8] - 2019-09-11
### Added
- The `delattr` method of the `DAObject` class.
### Changed
- Different behavior when `allow non-idempotent questions` is set to
  `False`.
### Fixed
- Unpickling errors in `user_interviews()` not trapped appropriately.

## [0.5.7] - 2019-09-10
### Changed
- The `url_action_perform()` and `url_action_call()` JavaScript
  functions are renamed to `action_perform()` and `action_call()`.
  Aliases are in place for backwards-compatibility.
- Widths of images inserted into DOCX files now support centimeters
  and twips as units.
- The `continue button field` can now be used with other types of
  `question`s that set variables, rather than just `fields`.
### Fixed
- Unpickling errors in `user_interviews()` not trapped.

## [0.5.6] - 2019-09-08
### Added
- Option in the JavaScript `flash()` function to clear existing
  messages.
### Fixed
- Error when displaying the JSON form of certain `question`s.
- Error when using `Value` objects in the `choices` of a `datatype:
  object` field.

## [0.5.5] - 2019-09-07
### Added
- The `require gathered` specifier for tables.
### Changed
- Running `.pop()` on a `DAList` no longer triggers list gathering.
- Every module file installed in the `docassemble` namespace that
  contains a class definition will be loaded when the server starts or
  restarts.
### Fixed
- Erroneous message about starting new interview was appearing on
  restart.
- Default values not appearing for some `datatype: object` fields.
- Unpickle errors when modules that contain classes are not loaded.
- Tooltips not showing up on sliders.

## [0.5.4] - 2019-09-05
### Fixed
- The `maximum content length` was being superseded by a NGINX content
  length limiter.
- Word add-in bug.

## [0.5.3] - 2019-09-04
### Added
- The `exit url` specifier under `metadata`.

## [0.5.2] - 2019-09-03
### Fixed
- S3 error.

## [0.5.1] - 2019-09-02
### Fixed
- `get_question_data()` and related functions raised exception.
- Let's Encrypt renewal error.

## [0.5.0] - 2019-09-02
### Added
- The `advance_progress_meter` option for the `/api/session` POST API
  endpoint.
- The `DAWEBSERVER` Docker environment variable and the `web server`
  Configuration directive.
- The `S3ENDPOINTURL` Docker environment variable and the `endpoint
  url` Configuration directive under `s3`.
### Changed
- Upgrade Docker OS to Debian buster.
- Upgrade Python from 3.5 to 3.6.
- The default web browser under Docker is now NGINX.
- The Docker image now builds in two parts.  The jhpyle/docassemble-os
  image is the base image for jhpyle/docassemble.
- The `get_session_variables()` and `set_session_variables()`
  functions use the current user's decryption key by default.

## [0.4.80] - 2019-08-22
### Fixed
- Setting of `__version__` in Python 2.7 raised Unicode error.
- Back button after action in URL repeated the action.
- The `progress` value was missing from the JSON representation of the
  question.

## [0.4.79] - 2019-08-21
### Added
- The `SQLObject` class.
- The `input type` called `ajax`.
- The `paragraphs` Jinja2 filter.
### Changed
- The `__version__` variable is now defined in packages generated from
  the Playground packages folder.
- UTM parameters are retained if an `analytics id` is defined under
  `google` in the Configuration, or a `segment id` directive is
  defined in the Configuration.
- The Playground packages folder GitHub commit process now uses `git
  merge` to merge changes, which means it might fail if a commit would
  overwrite changes.
- The Playground packages folder now allows for committing to a new
  remote branch.
### Fixed
- Incorrect behavior during initial visit to `/interview` when
  interview uses unique sessions.
- Interview advanced a step despite `validation code` raising an
  exception.

## [0.4.78] - 2019-08-15
### Added
- The `features` option `labels above fields`.
### Fixed
- Errors with `sessions are unique` and `required privileges`.

## [0.4.77] - 2019-08-14
### Added
- The `enable playground` Configuration directive.
### Changed
- The behavior of the `label` option of `list collect` no longer
  prints text before `1.`, `2.`, etc.  Now the `label` supplies the
  whole label for the item, and it can include the number by way of
  the index variable.
### Fixed
- The `list collect` feature raised an exception when the field
  definition included Mako substitution.
- Non-required upload fields were creating zero-byte files on some
  servers.

## [0.4.76] - 2019-08-12
### Changed
- The syslog-ng server is now started after the web server.
### Fixed
- Unhelpful error message when there was an interview parsing error.
- `DAStaticFile` objects not being included in DOCX files correctly.

## [0.4.75] - 2019-08-12
### Added
- The `administrative interviews` Configuration directive
- The `sessions are unique`, `required privileges for listing`, and
  `hidden` specifiers under `metadata`.
### Changed
- The `words` system no longer uses code names like `pdf_message` and
  `save_as_multiple`.
- The `required privileges` specifier under `metadata` now prevents
  users without a valid privilege from starting the interview.  The
  `required privileges for listing` now controls whether the interview
  is listed under `/list`.
### Fixed
- Passing an asterisk in a list to Flask-CORS resulted in a regular
  expression error.
- Not all Flask packages accept integers as the
  `PERMANENT_SESSION_LIFETIME`.

## [0.4.74] - 2019-08-09
### Fixed
- The `undefine()` function did not always find the interview
  answers.

## [0.4.73] - 2019-08-09
### Added
- Support for noun pluralizing and verb conjugation in Spanish,
  French, Italian, German, and Dutch.
- Additional methods for `DAOAuth` objects.
### Changed
- The output of the `interview_menu()` function, the `/api/list`
  endpoint, and the `/list?json=1` endpoint now include interview
  metadata.
- The `undefine()` function now accepts multiple variables names.
### Fixed
- `DAObject`s that are attributes of `DAList` items had their
  `instanceName`s rewritten when the parent list was altered.
- When an object that was already defined was edited using `fields`
  with `datatype: object` or `datatype: object_radio`, the default
  value was not showing.
- The office add-in was not using the best method to determine the
  full URL of the server.

## [0.4.72] - 2019-08-07
### Fixed
- Translation of metadata titles not compatible with `translations`.
- JavaScript evaluated in local context rather than global context.
- Language not set when e-mailing assembled document in the
  background.

## [0.4.71] - 2019-08-06
### Changed
- API for making user accounts inactive now supports permanent
  deletion.
- API for setting variables now supports initializing `DAObject`s.
- Multiple choice options specified with code can be specified with
  lists of tuples.
### Fixed
- Missing system phrase used in input validation.

## [0.4.70] - 2019-08-03
### Added
- Account deletion options.
- Options in the user profile for controlling which repositories will
  be considered when the Playground packages folder looks for and
  commits to GitHub repositories.
- Configuration directives `session lifetime seconds`, `babel dates
  map`, `admin can delete account`, `user can delete account`, and
  `delete account deletes shared`.
### Changed
- In tables, ordered dictionaries will use their built-in order.
- Base64 padding removed from field names.
### Fixed
- Poppler upgrade interfered with width of images in popups.
- File upload widget JavaScript bug.

## [0.4.69] - 2019-07-29
### Fixed
- Unnecessary file cache invalidation affected Playground performance
  when using cloud storage.
- Incorrect method of setting Debian timezone.

## [0.4.68] - 2019-07-28
### Added
- The `/api/resume_url`, `/api/temp_url`, `/api/config`,
  `/api/package`, and `/api/package_update_status` API endpoints.
- The `expire` and `session` parameters of `/api/login_url`.
- The `hook_on_gather()` and `hook_after_gather()` methods of
  `DAList`, `DADict`, and `DASet`.
### Fixed
- Bug in the `complete_elements()` method of `DADict`.
- Incomplete support for editing lists that have `auto_gather` turned
  off.

## [0.4.67] - 2019-07-25
### Added
- The `confirm` option for table editing.
### Changed
- The "Select..." option on a dropdown is omitted when the field is
  required and a default value is selected.
### Fixed
- The `keys()` method of `DADict` was removed when `keys` included in
  constructor.
- The language did not switch unless it did not match the default
  language.
- Restart buttons did not work from `event` screens.

## [0.4.66] - 2019-07-23
### Changed
- Allow sending multiple invite e-mails at once.
### Fixed
- Canceling phone live help availability failed.
- The 404 error from `/interview` did not use the 404 template.

## [0.4.65] - 2019-07-19
### Fixed
- Erasing phone number in Monitor raised an error.
- OneDrive synchronization error.

## [0.4.64] - 2019-07-17
### Changed
- Upgraded CSS and JavaScript dependencies.
### Fixed
- JavaScript for file uploads was incompatible with a Firefox add-on.
- Error during initialize process possibly caused by stderr being made
  non-blocking.
- Bug in `indent()` function.
- File upload previews shown twice under certain circumstances due to
  `show if` JavaScript.

## [0.4.63] - 2019-07-16
### Added
- The `/resume` endpoint.
### Fixed
- Unpickleable object added to the document cache in the internal
  variables.

## [0.4.62] - 2019-07-14
### Added
- The `temporary` and `once_temporary` options to the
  `interview_url()` and related functions.
### Fixed
- Too many monitor connections led to SQL error.
- Some functions did not work in actions.

## [0.4.61] - 2019-07-10
### Added
- The `set_status()` and `get_status()` functions.
### Changed
- Disabled `pip` cache.
- Restored pre-0.4.55 behavior allowing Mako in multiple choice
  values.

## [0.4.60] - 2019-07-09
### Changed
- More robust Docker scripts.
### Fixed
- Error with cloud cache.

## [0.4.59] - 2019-07-05
### Changed
- Changes manually made to `/etc/apache2/sites-available` files while
  the container is running will now be backed up upon shutdown and
  restored upon startup.
### Fixed
- Fatal error when invalid global javascript file referenced in
  Configuration.

## [0.4.58] - 2019-07-05
### Changed
- CORS headers now handled by Flask rather than Apache.
- The `cross site domain` Configuration directive is renamed to `cross
  site domains` and the value must be a list.
- Removed the `CROSSSITEDOMAIN` Docker environment variable.
- More frequent deletion of temporary files.

## [0.4.57] - 2019-07-01
### Added
- The `explain()`, `clear_explanations()`, and `explanation()`
  functions.
### Fixed
- Problems with Google sign-in on Python 3.

## [0.4.56] - 2019-06-29
### Added
- The `initializeObject` method of `DAList`.
### Fixed
- Error gathering `DAList` of `datatype: checkboxes` items.
- Error when using `default` and `list collect`.
- Errors with `DAStore`.

## [0.4.55] - 2019-06-28
### Added
- The `DAStore` object.
### Changed
- Mako no longer allowed in non-label items of `choices` or `buttons`.
- If `backup days` is `0`, no daily backups will be done.
### Fixed
- Error when `dialects` enabled under `voicerss`.

## [0.4.54] - 2019-06-26
### Added
- The `language map` directive under the `voicerss` Configuration
  directive.
### Changed
- Renamed `languages` under the `voicerss` Configuration directive to
  `dialects` (with backwards compatibility).
### Fixed
- `list collect` on empty non-object list did not show the first item.
- Wrong protection on some cells in translation spreadsheets.
- `nan` values appeared in translation spreadsheets.
- Terms with capital letters were not being translated.
- System terms were not appearing in translation YAML when Google
  Cloud Translation API was not configured.

## [0.4.53] - 2019-06-26
### Added
- Jinja2 filters `markdown` and `RichText`.
### Changed
- Ampersand correction for DOCX now happens in Jinja2 even if pipe
  already used.
### Fixed
- The `hint` was missing from the data representation of a field.
- The `note` and `html` were missing from the data representation of a
  field when not standalone.
- Group editing did not work with non-object lists and dictionaries.
- Buttons on `message()` screens did not work.

## [0.4.52] - 2019-06-18
### Added
- The `javascript` option for `log()`.
### Fixed
- Potential error in Playground sidebar if the same variable name is
  used for two different types of object.
- Error if `json` URL parameter is not an integer.

## [0.4.51] - 2019-06-13
### Changed
- Added the `initial` option for `update on start`.
- Using a different mechanism for restarting servers after a software
  update.
### Fixed
- LibreOffice failing when multiple instances of LibreOffice run
  simultaneously.

## [0.4.50] - 2019-06-12
### Added
- The `update on start` Configuration directive.
- The `expose websockets`, `websockets ip`, and `websockets port`
  Configuration directives.
### Changed
- The `include_docx_template()` function now includes images, shapes,
  styles, footnotes, etc. from the sub-document.
- Problem with websockets on servers with a `root` other than `/`.
- The `/api/session` POST API endpoint will now convert dates to
  `DADateTime` objects, unless the `raw` parameter is `1`.
### Fixed
- Triple spacing in RTF documents.
- Flask route ambiguity with `/api/user/new`.

## [0.4.49] - 2019-06-08
### Changed
- Revised the CSS classes for error messages.
### Fixed
- Word add-in did not work for servers with a `root` other than `/`.

## [0.4.48] - 2019-06-06
### Added
- The `.is_encrypted()` method of `DAFile` and other file objects.
### Fixed
- Dependency problems when `docassemble.base` was used without
  `docassemble.webapp`.
- Errors in the `DAFileCollection` version of `num_pages()` and
  `size_in_bytes()`.
- JavaScript used `.includes()` and `.startsWith()` methods, which are
  not universally supported.

## [0.4.47] - 2019-05-31
### Added
- Option for `'link'` style buttons with `action_button_html()`.
### Fixed
- Some types of `fields` gave errors with `list collect`.
- Error re `UserModel`.

## [0.4.46] - 2019-05-30
### Fixed
- Recursion error with `capitalize()` function.
- A CSS class was called `vspace` instead of `davspace`.
- Multiple choice options not included in translation spreadsheets.

## [0.4.45] - 2019-05-27
### Added
- The `DAOAuth` class.
### Changed
- Made modifications to facilitate embedding interviews in a `<div>`
  in another site.
- CSS and JavaScript files are now bundled.
### Fixed
- Errors from OneDrive integration.
- Error reading fields from PDF.
- Inserting certain types of images into RTF files resulted in a fatal
  error rather than a non-fatal error.

## [0.4.44] - 2019-05-21
### Added
- Version-specific caching of CSS and JavaScript files.
- The `sort()` and `sort_elements()` methods for `DAList`.
### Changed
- `terms` and `auto terms` are now compatible with the `translations`
  block.
- Files in the Playground will be served from server rather than block
  storage.
### Fixed
- `static_image()` did not work with unqualified file names.
- Some initial blocks were not included in side-by-side translation
  files.
- Orphaned translations did not receive syntax highlighting in
  translation files.
- Indented Mako was not receiving syntax highlighting in translation
  files.
- Translations containing emojis were being truncated in translation
  files.

## [0.4.43] - 2019-05-16
### Added
- The `tag` parameter for `/list`, `/api/list`, and
  `interview_menu()`.
- The `DAContext` object and the `use objects` option for the `data`
  and `data from code` blocks.
### Fixed
- HTML error when `hide standard menu` is in use.

## [0.4.42] - 2019-05-11
### Changed
- Many CSS classes and IDs renamed and given the `da` prefix.
### Fixed
- Errors with SMS interface.
- Subclasses of `DAList` were not allowed in `list collect`.
- Inefficiency with `last_access_time()`.

## [0.4.41] - 2019-05-02
### Added
- The `get_docx_variables()` method of `DAFile` and other file
  objects.
### Fixed
- ProxyFix settings for Docker containers behind reverse proxies.

## [0.4.40] - 2019-04-29
### Fixed
- Python 2.7 error.

## [0.4.39] - 2019-04-29
### Fixed
- Variables could not be converted to JSON where `None` used as
  dictionary key.
- Compile errors due to unused non-Python-3-compliant code in copy of
  rtfng.
- Playground package description formatted as text area, which
  resulted in newlines that caused problems when uploading to GitHub.

## [0.4.38] - 2019-04-25
### Added
- The `single_to_double_newlines()` function.
- The `get_pdf_fields()` method of `DAFile` and other file objects.
- The `playground examples` directive in the Configuration.
- The `new markdown to docx` directive in the Configuration.
### Changed
- Style of chat messages updated; content of message from the monitor
  is now contained in the notification received by the end user while
  looking at a question.
### Fixed
- Python 3.5 error in utility function for Azure Blob Storage.

## [0.4.37] - 2019-04-23
### Fixed
- Error affecting Python 2.7.

## [0.4.36] - 2019-04-23
### Changed
- Syntax highlighting and word wrap for interview phrase translation files.
- New style for chat messages.
### Fixed
- PAM failure in cron on Amazon Linux.
- Link to show help tab called wrong JavaScript function.

## [0.4.35] - 2019-04-20
### Added
- The `translations` block and the interview phrase translation file
  download utility.

## [0.4.34] - 2019-04-16
### Changed
- Downgraded s3cmd.

## [0.4.33] - 2019-04-16
### Added
- `XSENDFILE` Docker environment variable.
### Changed
- API will now process JSON as well as form-data.
- By default, `xsendfile` will be set to `False` in the initial
  Configuration if `BEHINDHTTPSLOADBALANCER` is true.
### Fixed
- New version of ProxyFix not called with arguments for processing
  HTTP scheme.

## [0.4.32] - 2019-04-15
### Added
- The `as_df()` method of a table.
- The `segment`, `segment id`, and `ga id` specifiers.
- The `log format` Configuration directive.
- German translations.
### Changed
- Upgraded s3cmd.
### Fixed
- Error when reading log files in multiple server configuration in
  Python 3.

## [0.4.31] - 2019-04-07
### Fixed
- Errors with `read_qr()`.

## [0.4.30] - 2019-04-07
### Added
- The `editable mimetypes` and `editable extensions` configuration
  directives.
### Changed
- The `worker.log` no longer exempt from backup.
- The Redis database now backed up to rolling backup.
- Relaxed some restrictions on multiple developers working on same
  package in their Playgrounds.
### Fixed
- Problem with `write()` method of `DAFile`.
- Problem with creating packages when author not defined.
- Problem with `source_code` when `debug` mode not in effect.

## [0.4.29] - 2019-03-28
### Added
- The `.size_in_bytes()` method for `DAFile`.
### Fixed
- Python3 could not write to S3.

## [0.4.28] - 2019-03-28
### Added
- Portuguese translations.
### Fixed
- Swagger-generated setup.py files in ZIP files could not be parsed.
- Error with gender set to "other"

## [0.4.27] - 2019-03-27
### Added
- The `list collect` feature for allowing users to add multiple items
  of `DAList` on one screen.
### Fixed
- GitHub error with packages that have dependency packages with null
  attributes.

## [0.4.26] - 2019-03-25
### Fixed
- Enter key caused browsers to press the `question back button`.
- Newest version of `textstat` not compatible with Python 2.7.

## [0.4.25] - 2019-03-22
### Changed
- When using Google Drive Sync, deleting file from Playground now
  permanently deletes file from Google Drive, rather than send it to
  the Trash.
### Fixed
- KeyError during initial GitHub repository creation.
- Exception could be raised if docstring in a dependency module was
  bytes.
- Methods not appearing in Playground sidebar in Python 3.
- File uploads failing in Internet Explorer.

## [0.4.24] - 2019-03-21
### Added
- The `maximum content length` configuration directive.
- The `image upload type` configuration directive, feature, and field
  specifier.
### Fixed
- Error in `log` service.
- A long interview title could cause wrapping in the navigation bar on
  mobile.

## [0.4.23] - 2019-03-19
### Added
- The `progress bar multiplier` and `progress bar method` features.
### Changed
- Embedded blocks can use generic objects and iterators.
- Help buttons are now "info" color instead of "secondary" color.
### Fixed
- Error when uploading files through the API.
- Error resulting from `add_action()` under some circumstances.

## [0.4.22] - 2019-03-17
### Fixed
- Section setting error.

## [0.4.21] - 2019-03-16
### Added
- The `nav.hide()`, `nav.unhide()`, and `nav.visible()` methods.
### Fixed
- Excessive memory usage while looking for cron tasks.
- Could not upload more than one module file to Playground at the same time.
- Playground Wizard errors.

## [0.4.20] - 2019-03-13
### Added
- The `set_save_status()` function.
- The `id_tag` option to `action_button_html()`.
- Field number in error messages.
### Changed
- Removed redirects after non-standard URL parameters.
- The `add_action()` button behaves more consistently with `.gather()`.
- The `new_window` option to `action_button_html()` can be used to set
  the `target` of the hyperlink.
### Fixed
- Field trim JavaScript was affecting file variables and triggering an
  error.

## [0.4.19] - 2019-03-10
### Added
- The `only sets` modifier.
### Changed
- The `allow non-idempotent questions` specifier in `metadata` was
  removed and replaced with a Configuration directive.
- The `allow non-idempotent questions` Configuration directive is set
  to `False` by default in the default Configuration.  This will
  affect new servers but not existing servers.
- The API validation `Referer` constraint checks against the `Origin` if
  there is no `Referer`.

## [0.4.18] - 2019-03-09
### Added
- Fullscreen option for code editing.
### Fixed
- Python 3 errors during GitHub integration process.

## [0.4.17] - 2019-03-08
### Added
- The `python packages` Configuration directive and the
  `PYTHONPACKAGES` Docker environment variable.
### Fixed
- Error when updating references in .docx file.
- `object_type_repr` error raised from Jinja2.
- `filter()` returning zero elements from non-empty list caused
  re-gathering.
- Dueling `uncheck others` fields had wrong CSS after unchecking.
- Thumbnails for .docx files.
- Blanking of dates in Firefox on blur.

## [0.4.16] - 2019-03-04
### Fixed
- Playground packages copied to wrong location on Python 3.

## [0.4.15] - 2019-03-04
### Fixed
- LuaLaTeX was not properly being detected.

## [0.4.14] - 2019-03-04
### Fixed
- LibreOffice initialization encountered circularity.

## [0.4.13] - 2019-03-03
### Changed
- The `none of the above` specifier can be used with `datatype:
  object_radio`.
- The `docassemble.base.util` is now loaded by default.
- Switched to LuaLaTeX for better Cyrillic support.  Requires server restart.

## [0.4.12] - 2019-03-01
### Added
- The `allow reordering` specifier in `table`.
### Fixed
- Unicode problem reading S3 keys as strings.

## [0.4.11] - 2019-02-28
### Added
- The `error action` specifier in `metadata`.

## [0.4.10] - 2019-02-27
### Added
- The `tagged pdf` option for `docx template file` document assembly.
### Changed
- The `pdf/a` options now create PDF/A documents directly with
  LibreOffice.
- The `comma_list()` and `comma_and_list()` now work with a wider
  variety of iterables.

## [0.4.9] - 2019-02-25
### Added
- Support for sending text messages using WhatsApp using `send_sms`.
### Changed
- Non-required file upload variables will be set to `None` instead of
  being ignored.
### Fixed
- Unicode error during package upgrade when `pip show` returns bytes
  that cannot be decoded as UTF-8.
- JavaScript error with Google Maps.

## [0.4.8] - 2019-02-24
### Changed
- Upgraded Font Awesome to 5.7.2.

## [0.4.7] - 2019-02-23
### Fixed
- Unicode problem with user names.
- Unicode problem with OCR.
- SQL concurrency problem with row updates.
- The `instanceName` on file uploads.

## [0.4.6] - 2019-02-19
### Changed
- The `error help` metadata specifier now accepts a dictionary of
  language codes and messages.
### Added
- The `verbose error messages` configuration directive.
### Fixed
- Unicode problem with Markdown documents.
- Deep copy error with `get_question_data()`.

## [0.4.5] - 2019-02-18
### Changed
- Group gathering with `ask_number=True` will use the value of
  `there_are_any` if it is defined and set to false.
- When editing list using a table, completeness of elements will be
  re-evaluated.
- Back button embedded in question is now "link" style.
### Added
- The `subject_as_html()` and `content_as_html()` methods of objects
  generated from a `template`.
- The `hide navbar` feature.
- The `js_target` URL parameter for embedding the **docassemble**
  interview into an element on another web site.
- The `gathered_and_complete()` method of the `DAList` and `DADict`.
### Fixed
- Error logging in with Auth0 in Python 3.
- The `comma_and_list()` function was not Unicode-friendly.
- Method of adjusting encryption of interviews in session after
  logging in was inefficient.
- API verification not working in Python 3.
- Screen reader in Python 3.
- Playground commit not pushing to organizational repositories.

## [0.4.4] - 2019-02-15
### Added
- The `convertapi secret` configuration directive.
- API endpoints for listing and deleting Playground files.
### Fixed
- JSON serialization with unusual dict keys.
- Screen scrolling problem in Playground folders.

## [0.4.3] - 2019-02-13
### Added
- The `string_types` and `PY2` names, imported from the `six` package.
- The `allow non-idempotent questions` specifier in `metadata`.
### Changed
- The `post` screen part is now positioned below the `right` screen
  part on small screens.
### Fixed
- The screen parts feature was not fully implemented and documented.
- The `required privileges` feature was not fully implemented.
- Editing yourself through `/userlist` would disable yourself.
- Error with text-to-speech cache.
- Non-required file upload variables were being set to `'None'`
  instead of being ignored.

## [0.4.2] - 2019-02-10
### Added
- Additional SQL indexes.
- The `default screen parts` block.
- The `required privileges` specifier in `metadata`.
### Changed
- The `set_title()` function was renamed to `set_parts()` and now
  supports setting any screen part.
### Fixed
- Error with OCR.
- Error with screen reader.
- Error with `concatenate_files()`.
- The current section when showing a `nav` in a question was not
  always current.
- Wrong formatting of subsections in sections sidebar under some
  circumstances.

## [0.4.1] - 2019-02-04
### Added
- Placeholder CSS classes for customization.
- Support for alternative Redis ports and database offsets.

## [0.4.0] - 2019-02-04
### Added
- The `DAPYTHONVERSION` Docker environment variable.
- The `text_type()` function.
### Changed
- The system is now compatible with Python 3.5.
- The `subdivision_type()` algorithm was improved.
### Fixed
- The update script failed under some circumstances due to a SQL
  error.

## [0.3.36] - 2019-01-24
### Fixed
- Not all login methods were redirecting the user back to the
  interview when they should have.

## [0.3.35] - 2019-01-22
### Added
- The `resume interview after login` configuration directive.
### Changed
- The `/api/session` API endpoint and the `set_session_variables()`
  function now accept the `event_list` parameter and can get past
  `force_ask()` diversions.
- More robust code injection detection mechanism.
### Fixed
- Unicode error with certain Spanish numbers.

## [0.3.34] - 2019-01-20
### Added
- Customizability of standard validation messages using the `validation
  messages` field modifier or the `default validation messages` block.
- Option to `.geolocate()` method to populate attributes of `Address`
  using a single-string address.
- Options for setting `alt_text` using `[FILE]`, `[QR]`, `.show()`,
  and the `.alt_text` attribute on `DAFile` or `DAStaticFile`.
- The `.set_alt_text()` and `.get_alt_text()` methods of file objects.
- The `template password` option for `pdf template file` (new `docker
  run` required).
### Changed
- Upgraded Pandoc to version 2.5.1 (new `docker run` required).
- UI changes for keyboard navigation of sections.
### Fixed
- Empty documents generated by Markdown were resulting in zero byte
  PDFs rather than one-page blank PDFs from Pandoc.
- The field names on some types of PDF files were not being identified
  correctly on the Utilities screen.

## [0.3.33] - 2019-01-16
### Changed
- API calls can be authenticated with an `X-API-Key` cookie or HTTP
  header.
- API responses contain CORS-friendly HTTP headers.
### Fixed
- JSON error when running `ocr_file_in_background()`.
- XML error when assembling DOCX files.

## [0.3.32] - 2019-01-16
### Changed
- UI and HTML changes for accessibility.
### Fixed
- Timing of initialization of Google autocomplete fields resulted in
  JavaScript error in some circumstances.
- OneDrive synchronization errors due to changes in the Microsoft Graph API.

## [0.3.31] - 2019-01-14
### Changed
- Additional information added to data representation of question.
- HTML more standards-compliant for accessibility.
### Fixed
- Package update process was not detecting missing packages.
- The watchdog's process terminations were causing unnecessary
  internal server errors under high system load, mistaking a busy
  Apache process for an out-of-control Apache process.  The threshold
  has been adjusted.  The change will only take effect after a `docker
  stop` and `docker start`.  Alternatively, `docker exec` into the
  container and run `supervisorctl restart watchdog`.

## [0.3.30] - 2019-01-05
### Added
- The `/api/login_url` API endpoint.
- The `/api/user_info` API endpoint.
### Changed
- The `/api/user/new` API endpoint will now create a random password
  if a password is not provided.
### Fixed
- The `/api/user/new` API endpoint used `email` when the correct
  parameter is `username`.

## [0.3.29] - 2019-01-03
### Added
- The `question_name` option for the POST method of the `/api/session`
  API endpoint and the `set_session_variables()` function.
### Fixed
- Unicode error from `/api/secret`.

## [0.3.28] - 2018-12-31
### Added
- The `accept` specifier for `datatype: file` fields.
- The `create_user()` function.
- The `/api/user/new` endpoint.

## [0.3.27] - 2018-12-24
### Changed
- Table edit attribute names treated as "follow up" actions.

## [0.3.26] - 2018-12-21
### Changed
- Reverted `reconsider()` to 0.3.24 version.

## [0.3.25] - 2018-12-20
### Changed
- Exception raised if unsafe filename used for a `DAFile`.
### Fixed
- Problem with caching of stand-alone `attachment` blocks.

## [0.3.24] - 2018-12-17
### Added
- The `inline` keyword parameter for the `url_for()` method.
- The `describe()` method of the output of `date_difference()`.
### Changed
- The result of `date_difference()` when reduced to text now runs the
  `describe()` method instead of stating the number of days.
- The `space_to_underscore()` function now uses
  `werkzeug.secure_filename()` and replaces more than just non-ASCII
  characters and spaces.
### Fixed
- Error in `.export()` method of tables.

## [0.3.23] - 2018-12-15
### Added
- The `get_question_data()` function.
### Fixed
- Error from Playground sidebar for interviews using `imports`.

## [0.3.22] - 2018-12-14
### Added
- Insertion of PDF files into DOCX files.
- Links in Playground sidebar to source code on GitHub.
### Changed
- Data representation of a question now includes plain attachment file
  numbers.
### Fixed
- Not all thread local variables were reset before request.
- Unicode error when exporting README.
- Azure Blob storage missing content type.

## [0.3.21] - 2018-12-10
### Added
- The `object labeler` option in `fields`.

## [0.3.20] - 2018-12-08
### Added
- The `exclude_privileges` keyword parameter of the
  `last_access_time()` function and related functions.
### Changed
- The `/api/user_list` API method and the `get_user_list()` function
  now return a user's privileges under a dictionary key called
  `privileges`.  Previously the key `roles` was used.
### Fixed
- The `update()` and `has_key()` methods of `DADict` did not work.
- Multiple `template`s on a screen using iterators did not work
  correctly.
- Browser back button sometimes required two clicks to go back one
  step.
- Unhelpful error when uploading invalid file type to Wizard.
- Temporary PDF files accumulating in `/tmp`.

## [0.3.19] - 2018-12-02
### Added
- The `DAOrderedDict` class.
### Changed
- Protections against adding non-modules to Modules folder.
- Keep memory of visited sections when the available sections change.
### Fixed
- Visiting `/user/sign-in` or `/user/register` while being signed in
  will now redirect to the `auto resume interview`, if any.

## [0.3.18] - 2018-11-30
### Fixed
- Unicode error in text to speech engine.

## [0.3.17] - 2018-11-30
### Added
- The `.show(editable=False)` option for tables.
- The `include_dict` option for `interview_list()`.
- The `formatted_unit()` method for `Address`.
### Changed
- Icons on the User List page highlighting users with special
  privileges.
- Admin users cannot take away their own admin privilege.
- Admin users cannot disable their own accounts.
### Fixed
- Validation error messages in admin pages were black when they should
  have been red.
- Typo in `.add_action()` method for `DADict()`.
- Error during `.export()` because `pandas` erroneously requires a
  nanosecond attribute in dates.
- Error in `instanceName` guessing in the context of a function.

## [0.3.16] - 2018-11-26
### Added
- The `export()` method of tables.

## [0.3.15] - 2018-11-26
### Added
- The `overlay_pdf()` function.

## [0.3.14] - 2018-11-25
### Added
- The `.filter()` method of the `DAList` class.
- The `mmdc()` function for generating diagrams and flowcharts with
  mermaid.  Requires system upgrade.

## [0.3.13] - 2018-11-23
### Added
- "Sync and Run" button in the Playground.

## [0.3.12] - 2018-11-22
### Fixed
- Problem with `value()` using a variable as an iterator.

## [0.3.11] - 2018-11-15
### Added
- The `/api/playground` file upload feature.

## [0.3.10] - 2018-11-13
### Added
- The `page after login` feature.

## [0.3.9] - 2018-11-10
### Added
- The `allow for`, `required for`, `allow sms`, and `allow app`
  options of `two factor authentication`.
- The `progressive` option for `sections`.

## [0.3.8] - 2018-11-04
### Added
- The `backup days` configuration directive.
### Fixed
- The `word()` function did not work on words with non-ASCII
  characters.
- Empty fields question skipping did not work where variable was
  attribute of a non-existent object.
- Interviews that changed the language changed the language of the Playground.

## [0.3.7] - 2018-10-28
### Fixed
- Error importing `textstat`.

## [0.3.6] - 2018-10-28
### Changed
- Validation is now applied in required fields so that spaces alone
  cannot bypass validation.
- Color of pressed button now "secondary" rather than "success" and
  colors of non-pressed buttons now "light" instead of "secondary."
### Fixed
- Problem with editing lists where the `complete_attribute` is not
  defined by a `code` block.
- No proper error message when a non-text string is used as a variable
  name in `fields`.
- Problems with locking-related changes from 0.3.5.
- Admin users were allowed to give `admin` privilege to users with
  social logins.
- Python error in cron.py.

## [0.3.5] - 2018-10-23
### Added
- The `edit_url_only` and `delete_url_only` parameters to the
  `item_actions()` methods.
- The `url_only` parameter to the `add_action()` method.
- The `url_ask()` and `action_button_html()` functions.
### Changed
- A `message` parameter to `add_action()` is now passed through
  `word()`.
- Removed the new feature from 0.3.3 where interview answers are saved
  before a `leave`.
- Different method of locking while copying playground modules.
### Fixed
- Percent signs in `number` fields may have avoided validation.
- Database access for chat log not protected by locking.

## [0.3.4] - 2018-10-20
### Fixed
- Links not appearing in the inline navigation bar.
- Toggle button not present in the vertical navigation bar.

## [0.3.3] - 2018-10-19
### Added
- The ability to set a `read only` attribute on a `table` to indicate
  that some rows cannot be deleted or edited.
### Changed
- Editing a table will cause the definition of the `complete_element`
  attribute, if any, to be recomputed after the `edit` attributes are
  sought.
- Interview answers saved before a `leave`.
- Background task callbacks that raise exceptions will no longer save
  interview answers.
### Fixed
- Dependencies not being properly scanned from `setup.py` files.
- Review screen resume button that set variable had unicode instead of
  boolean data type.
- Text was not scanned for emojis unless `images` were defined or the
  `default icons` directive was set.
- The `get()` method of `DADict` did not work.
- Random errors where dictionary cannot be retrieved (potential fix).
- The `minimum_number` feature introduced in 0.3.2 did not work on
  `table`s based on `DADict` objects.
- Elements could not be added through `add_action()` when the list was
  empty.
- The `rows` directive of a table resulted in an error if the
  expression used a compound operator (e.g., `+`).
- Changes to fields made by remote user not reflected in observer window.
- Back button did not work when remote controlling.
- Updated deprecated pandas code in the machine learning module.

## [0.3.2] - 2018-10-13
### Changed
- Using `table` with a `DADict` now sets `row_index` to the key and
  `row_item` to the value, and `DADict`s can be edited using tables.
- No delete buttons on a `table` when deletion would cause the number
  of items to fall below `minimum_number`.
- The `edit` option on a `table` can now use reference indices as well
  as attributes.
- The default `message` for the `add_action()` method on a group is
  "Add an item" if the group is empty.
- Clicking on a navigable section header empties the action queue,
  ensuring that clicking "Resume" puts the user back in the interview,
  rather than the screen they saw before they clicked the header.
### Added
- The `delete buttons` option when using `edit` on a `table`.
- The `only_if_empty` option on the `reset_gathered()` method.
- The `slice` method of the `DADict` class.
- The `re_gather` attribute of groups to `basic-questions.yml`.
- The `follow up` option in a `review` block `fields`.
- The `reconsider()` function.
- The `preloaded modules` configuration directive.
- The `action_button_html()` function.
### Fixed
- URL for restarting interview session conflicted with another URL
  when user logged in.
- `table`s could not appear inside of `review` blocks because they
  were always undefined.
- Navigable section headers not styled correctly.
- One of two processes simultaneously loading the playground modules at
  same time could encounter an empty directory.
- Screen loads through `url_action_perform()` did not show the
  spinner.
- Some thread variables were not reset between requests.
- The OCR background function did not work, so rolled back celery and
  kombu to 4.1.0.

## [0.3.1] - 2018-10-02
### Changed
- When a variable is force-asked or the goal of an action and a
  `question` is not found, no error will be raised.  This facilitates
  the use of optional follow-up questions in a `review` block.
### Fixed
- Aliased template variables generated pickle errors.

## [0.3.0] - 2018-09-28
### Changed
- Upgraded OS from Debian stretch from Debian jessie.  Upgraded pandoc
  to version 2.3.  LibreOffice upgraded to version in
  stretch-backports.  A system upgrade is required to realize these
  changes.
- Setting a `minlength` on a `datatype: checkboxes` field turns off the
  "None of the above" item.

## [0.2.102] - 2018-09-27
### Changed
- LibreOffice upgraded to version in jessie-backports.
### Added
- Options for `new_session` and `exit_logout` under buttons,
  `command()`, and `url_of()`.
### Fixed
- Logging in with e-mail and password where e-mail already used for a
  social login generated an exception.

## [0.2.101] - 2018-09-25
### Changed
- The `.copy_into()` method of `DAFile` now accepts `DAFile`,
  `DAStaticFile`, `DAFileList`, and `DAFileCollection` objects as
  the argument, as well as the direct file path of the other file.
### Fixed
- Problem with converting to PDF after `update references` for some
  tables of contents.
- The `.copy_into()` and `.from_url()` methods now update PDF and
  image information after the file contents change.

## [0.2.100] - 2018-09-23
### Added
- The `forget_result_of()` and `re_run_logic()` functions.
- Additional test interviews.
### Changed
- `note` and `html` can now be used to insert text in the right
  column, along side a field.
### Fixed
- The `minlength` and `maxlength` modifiers did not work on
  `checkboxes`.
- The `insert_docx_template()` function was not intercepting all
  parameters of class `DAObject` and passing them as objects.
- Too many line breaks in .docx address block.
- Static file videos did not work.
- Static file videos were static width.

## [0.2.99] - 2018-09-19
### Added
- The `back button` and `back button label` modifiers.
- The `show login` directive in interview `metadata`.

## [0.2.98] - 2018-09-18
### Fixed
- Error in Word manifest XML file.

## [0.2.97] - 2018-09-18
### Added
- Playground "Variables, etc." for the Word task pane.
### Changed
- It is no longer necessary to remove curly quotes from .docx Jinja2
  code.  They will be converted to straight quotes before processing.
### Fixed
- Google Maps JavaScript was loading synchronously, which slowed down
  loading.
- A `choices` list could not contain a list of numeric, boolean,
  or `NoneType` values.
- `DAStaticFile`s could not be inserted into .docx templates.

## [0.2.96] - 2018-09-12
### Added
- Integration between Microsoft OneDrive and the Playground.
- The `debug` directive inside `features`.
### Changed
- Upgraded Font Awesome to 5.3.1.

## [0.2.95] - 2018-09-08
### Added
- The `update references` setting on `attachment`s.

## [0.2.94] - 2018-09-05
### Added
- The `redact()` function and `redact` option on `attachment`s.
### Changed
- The `template` and `table` blocks now become `DALazyTemplate`
  objects rather than `DATemplate` objects.  Their contents are
  evaluated at the time they are reduced to text, not at the time they
  are created.
### Fixed
- Problem with `currency()` and other functions when used from a `docx
  template file` where undefined variables did not raise exceptions.
- The `create_new_interview()` function caused unnecessary 4 second delay.
- Users with `user` privileges could not access API key management.
- The `interview_url()` function was returning a URL based on how the
  current request was made, rather than the actual URL for getting to
  an interview.

## [0.2.93] - 2018-08-31
### Fixed
- Problem with `DATemplate` variables with string indices.

## [0.2.92] - 2018-08-27
### Added
- The `show progress bar percentage` feature.
### Changed
- The `background_response()` function can be called using
  `background_response('refresh')` to refresh the user's screen.

## [0.2.91] - 2018-08-25
### Added
- The `getField()` and `setField()` JavaScript functions.
### Fixed
- The `fields` version of `background_response()` could not set radio
  buttons.

## [0.2.90] - 2018-08-23
### Fixed
- Problem with checkboxes inside a `show if`.

## [0.2.89] - 2018-08-20
### Changed
- The `variables_as_json()` function now accepts `include_internal` as
  a keyword parameter.
- The `variables_as_json()` function now produces pretty-printed JSON
  output.
- Only ordinary users will see flash messages about switching to a
  different interview.
### Fixed
- Template and static file deletion in Playground.
- Setting the instance name of items that are already in a list.
- Non-mandatory questions were being marked as answered in the
  internal dictionary.

## [0.2.88] - 2018-08-20
### Fixed
- The recent version of WTForms is incompatible; set to 2.1.
- The `simplify` parameter of `get_session_variables()` was fixed to `True`.

## [0.2.87] - 2018-08-19
### Changed
- Moved interview HTML into a `<div>` to provide compatibility with
  add-ons.

## [0.2.86] - 2018-08-17
### Added
- The `js show if` and `js hide if` field modifiers.
- The `val()` JavaScript function.
- The `continue button field` feature.
### Changed
- Upgraded Font Awesome to 5.2.0.
- Two `DAList`s added together will yield a `DAList`.
### Fixed
- `zip_file()` returned an empty archive when given a
  `DAFileCollection`.

## [0.2.85] - 2018-08-15
### Fixed
- Problem with screen reader flagging help text with Markdown
  formatting as a defined term.
- Problem with Internet Explorer passing through commas in numeric
  values.

## [0.2.84] - 2018-08-13
### Changed
- Word processing files and text files can now be included in
  documents in the same way that images can.
- Reducing a `DAFileCollection` to text no longer attempts to show all
  versions in the collection, but only includes one.

## [0.2.83] - 2018-08-11
### Changed
- Playground UI highlights most recently edited files.
### Fixed
- Writing to `DAFile`s.

## [0.2.82] - 2018-08-08
### Changed
- Some exceptions raised by Jinja2 will now be accompanied by a
  snippet of document context.
### Added
- Initial support for Travis CI deployment.
- Method `.slurp()` for `DAFileList`.
### Fixed
- Setting of text fields to `None` when the value is the string
  `"None"`.
- Vertical alignment of section labels in horizontal mode.
- User text causing Pandoc to enter LaTeX math mode.
- Reconstruction of certain types of bookmarks after adding signature
  to PDF.
- Addresses that normalize without a street address.

## [0.2.81] - 2018-07-31
### Changed
- Interviews are now served from `/interview` rather than `/`.  This
  change is backward-compatible.
- Error notification e-mails will no longer include the interview
  variables as a JSON file unless `error notification variables` is
  set to true in the Configuration.
- Non-mandatory blocks no longer get tracked in the internal
  dictionary as having been answered.
### Added
- The `root redirect url` Configuration directive.
- The `include_internal` parameter of `all_variables()`.
- Warning if `mandatory` is used on a block that does not support the
  `mandatory` modifier.
### Fixed
- Missing unique IDs for API calls.
- HTML typo in Logs page.

## [0.2.80] - 2018-07-24
### Added
- The `/me` resource with information about the user.
### Changed
- JSON returned by API and `/vars` is now pretty-printed.
- Referencing a non-existent section no longer triggers an error.

## [0.2.79] - 2018-07-21
### Changed
- The `append` method to the `DAList` class now accepts an optional
  keyword argument `set_instance_name`.
### Fixed
- Any package name starting with `base` or `demo` was being blocked
  when `allow demo` was not set to `False`.

## [0.2.78] - 2018-07-17
### Added
- The `index()` method of the `DAList` class.
### Changed
- File uploads are now at the top of the screen in Playground folders.
### Fixed
- Problem with `datatype: checkboxes` and `show if`.

## [0.2.77] - 2018-07-13
### Fixed
- The `post` HTML was missing on signature pages.
- The `value()` function was not working properly.

## [0.2.76] - 2018-07-11
### Fixed
- Possible fix for "group by" SQL error in `user_interviews()`.

## [0.2.75] - 2018-07-11
### Added
- The `step` option for `datatype: number` and `datatype: currency`.
### Changed
- Fields with `datatype: number` are no longer limited to two decimal
  places.
### Fixed
- The "exit" command was logging the user out.

## [0.2.74] - 2018-07-11
### Added
- The `error help` configuration and metadata directives.
- The `.copy_shallow()` and `.copy_deep()` methods of `DAObject`s.
### Changed
- Error e-mails now attempt to attach the interview variables as a
  JSON file.
### Fixed
- Error in cron about missing `session_uid`.
- Auth0 login was erroneously enabled by default.

## [0.2.73] - 2018-07-07
### Added
- The `set_instance_name` option for use with `elements` when
  initializing a `DAList`.
- The `skip undefined` option for `review` blocks.
### Changed
- The `block()` method of `Address` now includes the word "Unit"
  before the unit, if the unit exists.
- On iOS mobile devices, an `<optgroup>` is now added to `<select>`
  via JavaScript.
### Fixed
- Vertical spacing between buttons in the Actions column of a table.
- Templates with variable names containing iterators were not being
  regenerated.
- Default date values were not displayed in `fields`.

## [0.2.72] - 2018-06-27
### Fixed
- Error message when publishing to PyPI.
- Unicode error in YAML dump.

## [0.2.71] - 2018-06-21
### Added
- The `undefine`, `recompute`, and `set` options inside of a `review`
  block.
### Changed
- To indicate that a multiple-choice under `fields` should use `radio`
  buttons, a `pulldown`, or a `combobox`, use `input type` instead of
  `datatype`.  The `datatype` can then be set to something else, like
  `number`.  This change is backwards compatible.
- Removed sublocality from normalized addresses.
### Fixed
- The `show if` JavaScript comparison is now more lenient when the
  values look like numbers.
- The `delete_all` function did not delete all interviews.
- The `defined` function did not work well with lists and dictionaries
  in the process of being gathered.

## [0.2.70] - 2018-06-14
### Changed
- Calls to `force_ask()` and calls to actions now result in more
  persistent variable seeking.
- Improved editing of lists.
### Fixed
- Using `show if` with `datatype: file`.
- Using `show if` with a value of `0`.

## [0.2.69] - 2018-06-12
### Fixed
- Section headers with hyperlinks.
- Google Drive with a large number of files.

## [0.2.68] - 2018-06-10
### Fixed
- Problems with Google Drive timestamps when cloud storage in use.
- Invalid use of echo in Dockerfile.

## [0.2.67] - 2018-06-09
### Changed
- When a non-text field is not required, and the user does not provide
  a value, the variable will be set to `None`.
- Required field markers show differently in some contexts.
- Additional log messages for Google Drive.
### Added
- New Debian dependencies `ttf-mscorefonts-installer`,
  `fonts-ebgaramond-extra`, `ttf-liberation`, and `fonts-liberation`
  in Docker.
### Fixed
- Problems with Google Drive initial set-up.

## [0.2.66] - 2018-06-07
### Changed
- Code editing boxes are now sized relative to screen size.

## [0.2.65] - 2018-06-06
### Added
- Login via Auth0.
### Fixed
- Better error handling after uploads.
- Better error handling during software updates.

## [0.2.64] - 2018-05-31
### Added
- Feature for uploading files through dataurls to the Template Folder
  of the Playground.
### Changed
- Comboboxes now accept free text input.
### Fixed
- PDF bookmarks restored after inserting images.

## [0.2.63] - 2018-05-25
### Added
- The `error notification email` configuration option.
### Fixed
- Error with PDF fields and signature overlay.

## [0.2.62] - 2018-05-23
### Added
- JSON interface to the "Variables, etc." and list of Playground
  files.
### Fixed
- Error during invitation and registration.

## [0.2.61] - 2018-05-19
### Changed
- The `disable others` directive now accepts a list of fields.
- Most natural language functions now accept an optional keyword
  parameter `language`.
- The `country` and `subdivisionfirst` database fields have longer
  allowable lengths.
- Additional system phrases are translatable.

## [0.2.60] - 2018-05-15
### Fixed
- Error on registration page.

## [0.2.59] - 2018-05-15
### Added
- Horizontal navigation bar option.
- Option for disabling the `pip` cache when installing a package.
- The `validation_error()` function and the `DAValidationError` error
  type.
### Changed
- The `interview_list()` function now returns `temp_user_id`.
### Fixed
- PDF assembly resulted in a missing AcroForm error in some circumstances.
- PyPI publishing code used out-of-date upload URL.
- Deleting session in multi-user interview deleted sessions for all
  users.
- Visiting registration page while logged in did not redirect to My
  Interviews page.
- An inappropriate error was raised about `validate` input validation
  functions for certain input types and values.

## [0.2.58] - 2018-05-08
### Added
- Version number on the Package Management page.
### Fixed
- Problem with checkboxes inside of `show if`.
- CSS problem with the "required" asterisk.

## [0.2.57] - 2018-05-07
### Added
- The `validation_error()` function.
- The `num_pages()` method on `DAFile`, `DAFileList`, and
  `DAFileCollection` objects.
### Changed
- On the mobile `signature` page, the "Clear" button is replaced with
  a "Back" button.
- Python `validate` code now works on document uploads.
### Fixed
- The `question back button` was missing from the buttons on the
  desktop `signature` page.
- Problem with spacing of the `question back button` next to other
  buttons.

## [0.2.56] - 2018-05-07
### Changed
- The `min` and `max` field modifiers on `datatype: date` fields now
  accept a wider range of date formats.

## [0.2.55] - 2018-05-06
### Changed
- The `DACloudStorage` object can now be initialized to use
  Configuration directives other than `s3` and `azure`.
- The `min` and `max` field modifiers now work with `datatype: date`.
### Added
- The `slurp()` method for `DAStaticFile` objects.
- Support for editing HTML and other text file formats in the Static
  Files folder of the Playground.
### Fixed
- List of branches in pull-down cut off at a certain length.
- Live Help had problems with encryption.
- Missing help button on `field` with `choices`.

## [0.2.54] - 2018-05-05
### Fixed
- Bug in `set_info()`.

## [0.2.53] - 2018-05-02
### Changed
- Social logins now populate first and last name in the user profile.
- The `all_variables()` function now has an optional keyword argument
  `special` that returns information about an interview that is not
  stored in the variables.
### Added
- Support for `long_description` in setup.py files.
### Fixed
- Update button in `/updatepackage` reverted package to `master`
  branch.
- Unicode problem in `/logs`.

## [0.2.52] - 2018-05-01
### Fixed
- The setup.py file for `docassemble.webapp` did not depend on
  particular versions of `docassemble.base` and `docassemble`.

## [0.2.51] - 2018-05-01
### Changed
- The `advocate` privilege grants access to see user information using
  the API.
- The `interview_list()` function and `/api/interviews` API now act
  upon interviews of anonymous users.
### Fixed
- Questions not centered on screen when navigation bar in use but empty.
- Google Places API populating `unit` with `subpremise` and leaving
  `city` blank.

## [0.2.50] - 2018-04-28
### Changed
- Upgraded user interface from Bootstrap 3.3 to Bootstrap 4.0.0.
- Headless Chrome now used by default in `lettuce` tests.
### Added
- The `show dispatch link` Configuration directive.
### Fixed
- Exception triggered by importation of word translation files with
  YAML errors.
- The `indefinite_article()` function used "a" for any capitalized
  word.
- Issue where Chrome extensions interfered with file uploads.

## [0.2.49] - 2018-04-15
### Fixed
- Use of deprecated flag when calling `pip`.

## [0.2.48] - 2018-04-14
### Changed
- The `Address` methods no longer require `.city` to be defined.
- The `Address` object and the `address autocomplete` feature now
  use more of the possible address components of addresses returned by
  the Google APIs.
### Fixed
- Bug in code for getting temporary URLs to cloud storage.

## [0.2.47] - 2018-04-12
### Fixed
- Problem with quoting glossary terms in HTML.

## [0.2.46] - 2018-04-11
### Fixed
- Bug in new `show if` code.

## [0.2.45] - 2018-04-11
### Fixed
- Identification of names of ZIP files uploaded through Package Management.
- Exception raised by Unicode non-breaking spaces in interview files.
- The `show if` JavaScript feature now works with checkbox values.

## [0.2.44] - 2018-03-31
### Added
- The `analytics id` subdirective of the `google` Configuration directive.
### Changed
- Nested `show if`s are supported.
### Fixed
- Exception caused by mandatory `review` blocks without an `event`,
  `field`, or `sets`.

## [0.2.43] - 2018-03-28
### Changed
- JavaScript specific to a question now executes after `raw global javascript`.
### Fixed
- Exception caused by ampersands in docx template field values.
- Exception caused by unicode in parameters passed to `include_docx_template()`.
- Place Autocomplete returning `undefined` for some address components.

## [0.2.42] - 2018-03-25
### Added
- The `zip_file()` function.
- The `allow downloading` modifier.
- The `centered` feature.
- The `right` question part.
### Changed
- The `allow emailing` modifier now accepts Python code.
- Margins in navigation bar.
### Fixed
- Version of `Flask-User`.

## [0.2.41] - 2018-03-24
### Added
- The `DACloudStorage` and `DAGoogleAPI` objects.
- The `/api/file/<file_number>` API.
- The `delete_variables` option for the POST operation of the `/api/session` API.
### Changed
- Less stringent input sanitation so that Playground files with
  parentheses can be deleted.
- Labels inside buttons will now wrap.
### Fixed
- Escaping of anchor text in `DALink`s.

## [0.2.40] - 2018-03-19
### Added
- The `.complete_elements()` method of `DAList` and `DADict`.
### Fixed
- Removed any dependency on `import pip`.

## [0.2.39] - 2018-03-15
### Changed
- The `review` block can now be used with `field` instead of `event`.
- Temporarily removed warning about `content file`.
### Fixed
- Issue with pressing enter causing two screens to submit.

## [0.2.38] - 2018-03-14
### Added
- The `show interviews link` configuration directive.
### Changed
- The user profile link in the menu will always be shown if the user
  has `admin` privileges.
- Different formatting of user list.
- Author name and e-mail in "Packages" folder of Playground.
### Fixed
- Problem with `show if` not recognizing `False` value of checkbox
  yes/no field.

## [0.2.37] - 2018-03-10
### Added
- Example for `user_logged_in()`.
- Example for appending a row to a Google Sheet.
- The `scale` option for the `range` datatype.
### Changed
- The `include_docx_template()` function accepts keyword parameters.
  This has the effect of including Jinja2 `set` commands at the
  beginning of the included sub-document.
### Fixed
- Error when registering.

## [0.2.36] - 2018-03-08
### Added
- The `DALink` object type, which allows hyperlinks to be inserted
  into .docx files.
### Changed
- The `showif()` and `showifdef()` functions can now be configured to
  return a default value other than the empty string.
### Fixed
- Cron jobs and environment variables.  This requires a system reset.

## [0.2.35] - 2018-03-06
### Changed
- Replaced Package Management with the former "Update a Package."
### Fixed
- Issues with unicode.

## [0.2.34] - 2018-03-06
### Added
- The `main page pre`, `main page submit`, and `main page post`
  configuration directives.
- The `pre`, `submit`, and `post` metadata items.
### Changed
- Pressing enter has effect of pressing Continue, even on pages
  without input elements.
### Fixed
- Issues with unicode.

## [0.2.33] - 2018-03-04
### Fixed
- Problem with using Upgrade button.

## [0.2.32] - 2018-03-04
### Added
- The `ldap login` configuration directive.  Using this feature will
  require a system upgrade (running a new instance), as the
  `libsasl2-dev` `libldap2-dev` Debian packages are required
  dependencies of the `python-ldap` Python module.

## [0.2.31] - 2018-03-02
### Added
- Configuration directives `use font awesome` and `default icons`.
- CSS support for Material Icons.
- The `question help button` feature.
- Ability to `label` the help tab.
### Fixed
- Reference to non-existent image file during image preloading.
- Error when reviving SMS session for which answers had been deleted.
- SMS interface bugs related to signatures and attachments.

## [0.2.30] - 2018-02-27
### Changed
- SVG instead of PNG for images in checkboxes and radio buttons.
### Fixed
- Page layout when side navigation bar in use.
- Slow submit time when many checkboxes are used.

## [0.2.29] - 2018-02-25
### Added
- The `define()` function.
- The features `question back button` and `navigation back button`.
- The `raw global css` and `raw global javascript` configuration
  directives.
### Changed
- Main content block for page is now centered on desktop.
### Fixed
- Problem with calling background action from code triggered by the API.
- Problem with including a table while gathering the rows of the table.

## [0.2.28] - 2018-02-08
### Added
- The `enable remember me` configuration directive.
### Changed
- The `repr()` of a `DAList`, `DADict`, or `DASet` is the `repr()` of
  its elements, and `repr()` triggers the gathering process.
- The `.salutation()` method of the `Individual` object now uses the
  optional attributes `.salutation_to_use` and `.is_doctor`.
### Fixed
- Problem with `exclude` on a manual list of choices.
- Lack of curly quote in "I don't know" buttons.
- JavaScript error introduced in 0.2.23 that interfered with `hide if`
  functionality.

## [0.2.27] - 2018-01-31
### Added
- The `start_time()` function.
- The `package protection` configuration option.
### Changed
- The `last_access_time()` now returns the last access time as a
  datetime object with a time zone; previously the object was "naive"
  with respect to time zone.
### Fixed
- Problem with branch name of new GitHub repository.
- Problem with `as_datetime()` converting times to midnight when the
  argument is already a datetime object.
- Problem with `noyes` and `noyeswide` checkbox fields.

## [0.2.26] - 2018-01-29
### Fixed
- Problem where `format_date()` was acting like `format_datetime()`.

## [0.2.25] - 2018-01-29
### Changed
- Tweaks to the `interview_url()` function.
### Fixed
- Unicode error on interview page after interview decryption failure.
- Problem with list gathering and `.there_is_another`.

## [0.2.24] - 2018-01-28
### Fixed
- Problem with missing uid in background tasks.

## [0.2.23] - 2018-01-28
### Added
- The `DADateTime` class.
- The `time` and `datetime` `datatype`s for fields.
- The `format_datetime()` function.
- The `/api/session/back` API and the `go_back_in_session()` function.
- The `/api/privileges` and `/api/user/<user_id>/privileges` APIs, and
  the `manage_privileges()` function.
- The `.as_serializable()` method of the `DAObject`.
### Changed
- The `/api/session` POST API now returns the current question, unless the
  `question` data value is set to `0`.
- The `/api/session` POST API now accepts file uploads.
- Changed the name "roles" to the name "privileges" in the
  user-related APIs.
- The `set_user_info()` function can now be used to change user
  privileges.
- Fields with `datatype: date` will now set a variable of type
  `DADateTime`, rather than a plain text variable.
- The `today()` now returns a `DADateTime` object if it is called
  without a `format` parameter.
- The JavaScript for the `show if` and `hide if` functionality now
  animates the showing and hiding of fields.

## [0.2.22] - 2018-01-23
### Added
- Configuration directive `allow demo` for allowing demonstration
  interviews in production mode.
- Ability to send e-mail using the Mailgun API instead of SMTP.
- The `decimal places` option for automatically formatting floating
  point numbers passed to DOCX and PDF forms using `field code`,
  `code`, or `field variables`.
### Changed
- If the `checkin interval` configuration directive is set to `0`, the
  browser will not "check in" at all.
- When the `/api/session/question` API encounters an undefined
  variable for which a definition is not available, it will no longer
  return an error code, but will return a success code and indicate
  what variable was not defined.
### Fixed
- Invalid HTML in navigation bar.
- Removed unnecessary invalidation of interview cache.
- Problem with address autocomplete when variable name contains a bracket.

## [0.2.21] - 2018-01-19
### Added
- The `get_chat_log()` function.
- An API interface.
- Administrative functions.
### Fixed
- Result of `user_interviews()` was reporting the wrong `utc_modtime`.
- Error with `google maps api key` when an `api key` alone was set under
  `google` in the Configuration.
- Problem with formatting of chat log after going back into a session.

## [0.2.20] - 2018-01-14
### Added
- The `send_fax()` function for sending faxes using Twilio.
- The `include_docx_template()` function for including .docx content
  within a .docx file.

## [0.2.19] - 2018-01-12
### Added
- Ability to run `interview_list()` on all users.  Additional keys
  `user_id` and `email` are included in results.
- Integrated the Place Autocomplete feature from the Google Places API.
### Fixed
- Bug in YAML parser triggered sometimes by fields with blank labels.
- Newline to space error in docx templates that affected Word but not LibreOffice.

## [0.2.18] - 2018-01-06
### Added
- The `user` and `environment` datatypes.
### Fixed
- Typo in HTML when `camera` and other HTML5 upload datatypes were used.

## [0.2.17] - 2018-01-04
### Changed
- Better features in background actions for handling exceptions.
### Added
- The `background_error_action()` function.

## [0.2.16] - 2018-01-01
### Fixed
- Problems with cron jobs, including an error in the documentation;
  the variable is not `use_cron`, but `allow_cron`.

## [0.2.15] - 2018-01-01
### Changed
- When filling a PDF form, the Document JavaScripts and Field
  Calculation Order of the template file will be reproduced in the
  resulting PDF file.
- When concatenating PDF files, the Document JavaScripts and Field
  Calculation Order of the first file will be reproduced in the
  resulting PDF file.
### Fixed
- Problem with using specific person as sender of an e-mail.

## [0.2.14] - 2017-12-27
### Added
- Customizable 404 error message.
- The `any_true()` and `all_true()` methods for the `DADict` object.
### Fixed
- Typo in password complexity error message.

## [0.2.13] - 2017-12-24
### Added
- Ability to change the `password complexity` requirements in the
  Configuration.
- Ability to control whether registering users must retype their
  passwords.

## [0.2.12] - 2017-12-24
### Fixed
- The `for` attributes of `<label>` elements were mislabeled when a
  field with `show if` defined the same variable.

## [0.2.11] - 2017-12-18
### Fixed
- Problem with validating fields inside `show if`.

## [0.2.10] - 2017-12-15
### Fixed
- Problem recognizing string indices in code.

## [0.2.9] - 2017-12-15
### Fixed
- Problem with dictionaries inside of dictionaries.
- Some of the administrative page customizations did not work.

## [0.2.8] - 2017-12-14
### Fixed
- Inserting images into PDFs using `field code`.

## [0.2.7] - 2017-12-13
### Added
- Configuration directives for inserting HTML, CSS, and JavaScript
  into administrative pages.

## [0.2.6] - 2017-12-12
### Fixed
- GitHub pagination problem with `links_from_header`.

## [0.2.5] - 2017-12-12
### Changed
- The `global css` and `global javascript` now apply to all pages on
  the site.
- Curly quote conversion is re-enabled.
### Added
- Password protection on generated PDF files.
### Fixed
- Documents with `variable name`s containing generic object or
  iterator references can now be used with `attachment code`
- Error when uploading Zip file to Playground packages folder.
- Problem setting boolean character of yesno variables that are
  specified using brackets.
- Problem with referring to `get_url_from_file_reference()` outside of
  request context.

## [0.2.4] - 2017-12-06
### Changed
- Automatically remove newlines from e-mail subject lines
- PDF thumbnails now have the filename as the "title."
- Background tasks no longer try to process responses if exception
  triggered.
### Added
- Ability to set `exit link` and `exit label` in metadata and
  `set_title()`.
### Fixed
- Error when pulling "master" branches of GitHub packages into the
  Playground.
- Flash message showing when interview YAML file changes and "allow
  login" is False.

## [0.2.3] - 2017-12-04
### Changed
- Turned off automatic curly quote conversion until Unicode error
  in textstat can be fixed.

## [0.2.2] - 2017-12-04
### Added
- Pulling and pushing using GitHub branches.
- The `.failed()` method on result of background task.

## [0.2.1] - 2017-11-30
### Changed
- The hard-coded limit on JSON nesting depth, which was mentioned
  in the 0.2.0 changes, has been changed from 6 to 20.
### Fixed
- Apache could not start unless Docker container started with a
  `DAHOSTNAME`.
- GitHub push using GitHub integration failed because of an SSH
  issue.

## [0.2.0] - 2017-11-29
### Added
- The `logo` option of `set_title()` and `metadata`.
### Changed
- The `all_variables()` and `variables_as_json()` functions now
  contain a limitation on nesting depth.  The limit is hard-coded at
  6 levels, after which values will be "null."  This is to prevent
  exceptions being triggered by circular references.
- Setting Google Drive Synchronization folder to "Do not link" will
  now erase the connection between the OAuth app and the user.
- When populating PDF checkboxes, passing `None` to the checkbox or to
  the `yesno()` or `noyes()` functions will result in the box not
  being checked.
- Apache web server variables are now reset after a restart (e.g.,
  after the Configuration is changed.
- When pulling the contents of a **docassemble** extension package
  into the Playground, it will now remember the GitHub URL or PyPI
  package name so that when you go to Pull again, you will not need to
  retype.  This works even if you have not enabled GitHub integration.
### Fixed
- PDF checkbox inconsistencies.
- Git pull into Playground packages without integration generated an
  error message.
- When datatype is object and variable existed, it would try to reduce
  the object to text in order to see if it should be highlighted as a
  pre-selected default value.

## [0.1.99] - 2017-11-23
### Added
- Option for changing the UID and GID of www-data within the Docker
  container, so that `/usr/share/docassemble/files` can be mounted as
  a Docker volume and the Playground files can be edited.
### Changed
- Multiple choice questions in `fields` will set boolean `True` or
  `False` if those are the only options.
- Additional headers are set to enable cross-site resource sharing
  if the CROSSSITEDOMAIN variable is set.
- Apache configuration files in Docker are configured differently;
  existing site configuration files will not be overwritten and
  configuration options are now implemented as Apache variables.
- `DAList` objects now work with the `+` operator; a regular list can
  be added to a `DAList` but not the other way around.
### Fixed
- The `uncheck others` feature triggered an error if it was not the
  last field.

## [0.1.98] - 2017-11-20
### Changed
- Going to "/exit" will now log out the user, if the user is logged
  in.
- When using `&json=1` for JSON responses, the `interface()` function
  will return `'json'`.
### Added
- Action for `logout`, which works like `exit` but also logs the user out.
### Fixed
- Default values in object choices.

## [0.1.97] - 2017-11-14
### Fixed
- JavaScript issue with buttons.
- Problem with Playground interviews not being decrypted.

## [0.1.96] - 2017-11-12
### Fixed
- JSON conversion problem when using `/interviews?json=1`.

## [0.1.95] - 2017-11-12
### Fixed
- Bug in 0.1.94 regarding detection of variable names.

## [0.1.94] - 2017-11-12
### Fixed
- Improved detection of variable names in code.

## [0.1.93] - 2017-11-10
### Changed
- The `Individual` class no longer initializes the `child`, `income`,
  `asset`, and `expense` attributes, but there are `objects` blocks in
  basic-questions.yml that will initialize these attributes.
- The `Organization` class no longer initializes the `office`
  attribute, unless `offices` is provided as a keyword parameter
  during object construction.
### Added
- Interview tags system and the `session_tags()` function.

## [0.1.92] - 2017-11-09
### Added
- The `checkbox export value` option when using `pdf template file`.
### Changed
- The Markdown to HTML converter now uses the Attribute Lists extension.
- The `server_capabilities()` function now has a `google_maps` item.
- When the server is not in `debug` mode, users must be logged in as
  with administrator or developer privileges to run interviews in
  `docassemble.base` and `docassemble.demo`.  In the SMS interface,
  interviews in these packages are always inoperable unless the server
  is in `debug` mode.
### Fixed
- The `server_capabilities()` was not recognizing the `enable`
  settings.

## [0.1.91] - 2017-11-07
### Changed
- Exceptions triggered during code block execution will now show the
  line, not just indicate the line number.
- The `server_capabilities()` function is now imported by default and
  it reports additional features.
- The `interview_list()` function now returns interview metadata.
### Added
- Dynamically-generated `fields` items.
- The `cross site domain` configuration directive and
  `CROSSSITEDOMAIN` environment variable, for enabling APIs to be
  used.
### Fixed
- Azure blob storage fixes.

## [0.1.90] - 2017-11-05
### Changed
- New features in the `Address.geolocate()` method.
### Added
- The `Address.normalize()` method.
- The `session list interview` and `dispatch interview` configuration
  directives.

## [0.1.89] - 2017-11-04
### Added
- Ability to use `json=1` with `/user/sign-in`, `/list`, and
  `/interviews` pages.
- `interview_list()` and `interview_menu()` functions.
- Twitter login.
### Fixed
- Thread unsafe language setting.

## [0.1.88] - 2017-11-02
### Fixed
- `object_name()` raised an exception.
- Including MP4 videos did not work when OGG not provided.

## [0.1.87] - 2017-11-02
### Fixed
- `docx template file` combined with `code` resulted in error
  due to recent change that attempted to provide better error
  messages.

## [0.1.86] - 2017-11-01
### Added
- `decoration size`, `decoration units`, `button icon size`,
  `button icon units`, and `button size` configuration options.
- `encode_name()` and `decode_name()`.
### Changed
- Clicking the back button when looking at question help will return
  the user to the question.
### Fixed
- Width of images in .docx files.

## [0.1.85] - 2017-10-29
### Added
- Option for `google maps api key` in the `google` section of the
  configuration.
### Changed
- A Google API key is now required for using `map_of()`.

## [0.1.84] - 2017-10-29
### Fixed
- UI issues when switching between help and questions tabs.
- Added `pop()` method to `DAList`.
- Machine learning errors when entries are blank.

## [0.1.83] - 2017-10-26
### Added
- The `log()` function.
- The `fields` option for `background_response()`.
### Changed
- Responses from `check in` events can use the `javascript` option of
  `background_response()` to communicate results to the browser.

## [0.1.82] - 2017-10-26
### Added
- The `pdf_concatenate()` function converts word processing files.
- The `flash()` JavaScript function.
### Changed
- When using `complete_attribute`, list gathering will not
  first seek a textual representation of the object.
### Fixed
- Inclusion of images in RTF when a width not specified.
- `value()`, `defined()`, and `undefine()` no longer raise exceptions
  when passed constants or internal Python names.
- Errors in list gathering.

## [0.1.81] - 2017-10-25
### Changed
- Google Drive synchronization is now handled as a background task so
  that it will not be interrupted by a web browser timeout.
### Fixed
- Uploads embedded in docx template files.

## [0.1.80] - 2017-10-23
### Added
- The `set_title()` function.
### Changed
- Interview title functionality in the `metadata` initial block.
### Fixed
- Image URLs to PDF page images with S3/Azure Blob Storage.

## [0.1.79] - 2017-10-23
### Fixed
- PDF page retrieval index error.
- File permissions issue in S3 that prevents server restart.  S3 users
  must upgrade the Docker image.
- Incorrect timestamps when downloading from persistent cloud storage.

## [0.1.78] - 2017-10-22
### Changed
- When using S3 or Azure Blob Storage, the files will now be cached
  on the server file system and updated when they change.
- When using the Playground and S3 or Azure Blob Storage is in use,
  and there are more than ten decorations, no preview images will be
  shown in "Variables, etc."
- The values of `SavedFile` objects will be cached in memory for the
  duration of a web request, so that when you create a new
  `SavedFile`, attributes will be set from memory.
- The first argument to a `MachineLearner` object will no longer be
  used as a literal `group_id`.  Rather, an argument `'fruit'` it will
  be converted into a group_id of the form
  `docassemble.packagename:data/sources/ml-interviewname.json:fruit`.
  You can still set a literal `group_id` using the keyword parameter
  `group_id`.
- When an `initial_file` is given to a `MachineLearner` object, two
  different formats can be used: an array, or a dictionary of arrays.
  If a dictionary of arrays, the keys will be checked and if the key
  matches the `group_id` (with the part before the final
  colon, if any, removed), the array corresponding to that key will be
  used.
### Fixed
- Playground wizard not including pdf and docx template files in package.
- Playground wizard not including static files in package.
- Playground wizard pickle error when using S3 or Azure blob storage.
- Bug where key 'sought' not found.

## [0.1.77] - 2017-10-20
### Added
- The `pdf_concatenate()` function.
### Fixed
- Missing dependencies for `RandomForestMachineLearner`.

## [0.1.76] - 2017-10-20
### Added
- `RandomForestMachineLearner` for machine learning with numeric and
  categorical values.
- Context for `SyntaxError`s.
### Fixed
- `code` to specify fields in docx template.
- S3 problems.

## [0.1.75] - 2017-10-18
### Added
- `inline width` field modifier for embedded fields.
- `DAStaticFile` object.
- `set_data()` and `get_data()` methods for `DARedis`.
### Fixed
- `DAFile` initialize function now handles keyword arguments as
  advertised.

## [0.1.74] - 2017-10-15
### Added
- `data` block.
### Changed
- Validation errors for embedded fill-in-the-blanks elements now
  appear under the fields.
- Embedded radio buttons and checkboxes now use standard HTML
  input elements.
- Embedded currency fields use standard text to represent the currency
  symbol.

## [0.1.73] - 2017-10-15
### Changed
- Referring to a non-existent DAList item after the list has been
  gathered will now generate an exception.
### Fixed
- Brought back gradients on buttons, which had been removed in 0.1.72.

## [0.1.72] - 2017-10-14
### Added
- `bootstrap theme` and `inverse navbar` features and configuration
  directives.
### Fixed
- CSS and JavaScript files imported through features without a
  specified package now use the package of the features block.
- Logout now deletes cookies.

## [0.1.71] - 2017-10-11
### Changed
- `currency()` now returns `''` on non-numeric input.
### Fixed
- AWS secret access codes with slashes.
- Recognition of iterators with constant integers.

## [0.1.70] - 2017-10-10
### Added
- Method `item()` for `DAList` and `DADict`.
- Lettuce tests in directory `tests`.
### Changed
- Playground variable detection now shows attributes.
- Playground variable detection now adjusts for temporary Mako variables.
- The `split()` function now splits on newlines.
- Playground no longer loads each example interview into memory.
### Fixed
- Template file Google Drive deletion.
- Problem with pickling result of `.using()`.
- Scanning for variable names involving patterns like `[i][j]`.

## [0.1.69] - 2017-10-05
### Added
- Class method `.using()` for adding parameters to object definitions.
### Changed
- Backups only kept now for 14 days.  Container upgrade necessary.
### Fixed
- Use of iterators and generic objects in `if` modifiers.
- Azure cron backup.  Container upgrade necessary.

## [0.1.68] - 2017-10-05
### Added
- `if` modifier.
### Changed
- Interview cache invalidation now handled through thread local
  variables and a redis counter, rather than by modification times on
  YAML files.  This may avoid potential problems with Google Drive
  sync.
- Google Drive sync now has a page that tells the user not to stop the
  web browser.
### Fixed
- Error on URL redirection.
- Playground package page asking for GitHub sign-in after expiration
  of credentials.
- History on error page restored.

## [0.1.67] - 2017-10-02
### Added
- Warnings in the Playground when use of a particular file name would
  overwrite an existing file.
- Functions `yesno`, `split`, `showif`, `showifdef`, and `phone_number_part`.
### Changed
- Fields in a PDF fill-in form can be specified as a list of dictionaries.
### Fixed
- When `maximum image size` in effect, files that got converted to PNG
  by the browser still had original file extensions.
- Typo introduced in 0.1.65 affecting the processing of lists of
  choices in multiple-choice questions.

## [0.1.66] - 2017-10-01
### Fixed
- Problem with empty upload fields.

## [0.1.65] - 2017-09-30
### Changed
- More consistent behavior in multiple choice listings.
- When a multiple choice question's choices are determined by code,
  the image can be an uploaded file.
### Added
- The `if` modifier.
- The `scan for variables` modifier.
- The `dispatch` function.
- The `has_been_gathered()` method on groups.
- More expansive error messages in debug mode.
### Fixed
- Errors if variable names in `question` blocks are invalid.
- Error in `date_difference()`.
- Layout problem when sections and progress meter both turned on.

## [0.1.64] - 2017-09-26
### Fixed
- Gathering of Asset items.

## [0.1.63] - 2017-09-26
### Added
- Example of editing a list after it has been gathered.
### Fixed
- Embedded fields where the variable names contain iterators.
- Lists instanceNames adjusting after removal of a list element.

## [0.1.62] - 2017-09-24
### Changed
- Fields can now be embedded in `note` text.
### Added
- Multiple choice type `combobox` and `datatype: combobox` for
  `fields`.
### Fixed
- Mandatory multiple-choices questions with embedded code blocks.
- `DAList` and `DADict` objects in choices lists.

## [0.1.61] - 2017-09-23
### Changed
- After back button is pressed, defaults will be populated on fields
  that accept defaults.
### Added
- Methods on `DAFileCollection` so that it can be used like a
  `DAFile`.
- `run_python_module()` function.
### Fixed
- Checkbox defaults specified as `DADict` objects not recognized.

## [0.1.60] - 2017-09-21
### Changed
- Added a new type of infinite loop detection.

## [0.1.59] - 2017-09-21
### Changed
- Added a different type of infinite loop detection.

## [0.1.58] - 2017-09-19
### Added
- Multiple choice type `dropdown`.
- Code example for `fields` dropdown.
### Fixed
- YouTube video widths not responsive.
- Javascript and CSS files in features not loading without full
  package/file references.

## [0.1.57] - 2017-09-19
### Fixed
- Bug that affected some file-related operations.
- Detection of infinite loops.

## [0.1.56] - 2017-09-17
### Changed
- The way that the `objects` block gets executed has changed.  It no
  longer executes as a mandatory block unless it is marked as
  mandatory.
- In addition, the way that questions are asked has changed
  accordingly.  If any fields that would be set by the question have
  attributes, **docassemble** will try to ensure that the underlying
  variable is already defined, which may trigger a process of defining
  the variable.  This will ensure that objects mentioned in object
  blocks will be created before they are necessary.
- These new changes enable the use of iterator variables like `i` in
 `objects` blocks.
### Fixed
- Problem with deletion of keys on S3.
- Problem with response() on second and subsequent screens.

## [0.1.55] - 2017-09-16
### Added
- The `id` and `precedence` modifiers and the `order` initial block.
- The JSON interface.

## [0.1.54] - 2017-09-16
### Fixed
- Upgraded from boto to boto3.
- Fixed issues with documents and cloud storage.

## [0.1.53] - 2017-09-15
### Fixed
- Problem with docassemble.base as a dependency in extension packages.

## [0.1.52] - 2017-09-15
### Fixed
- Problem with assembled documents on cloud storage.

## [0.1.51] - 2017-09-14
### Added
- JSON version of information on each screen.
### Fixed
- Problem with signatures in pdf fill documents.

## [0.1.50] - 2017-09-10
### Added
- Options for `maximum image size` to reduce size of uploaded images
  in the browser before uploading.
- Interview feature `cache documents` for disabling document caching.
### Fixed
- E-mailing of assembled documents.

## [0.1.49] - 2017-09-07
### Added
- Additional document caching feature.
### Fixed
- Problem with caching of certain document types.

## [0.1.48] - 2017-09-06
### Added
- Option for `go full screen` that limits behavior to mobile only.
- Caching of assembled documents.  Clicking on assembled documents
  will now open them in a new browser tab rather than offering them
  as attachment downloads.
### Changed
- In Google Drive synchronization, .tmp and .gdoc files are now
  ignored.
### Fixed
- Spinner did not appear on signature pages.
- Date validation forcing input even when date not required.
- Images included in terms not appearing unless fully qualified.

## [0.1.47] - 2017-09-04
### Added
- Function `referring_url()` for accessing the original "referer" URL.
- Feature `go full screen` for breaking out of iframes.
- Support in Docker for MySQL connections.
### Fixed
- Error accessing machine learning training area.
- Undefined mimetype error with e-mail receiving feature.
- "Next will be" message in SMS interface skipped `note` and `html`.

## [0.1.46] - 2017-09-02
### Added
- Methods `.true_values()` and `.false_values()` for `DADict`.
### Fixed
- Multiple choice questions where list of selections is empty.
- SMS interface for multiple choice questions where list of
  selections is empty.

## [0.1.45] - 2017-08-31
### Added
- Configuration directive `password login`, which will hide the
  username and password fields on the login screen.
### Fixed
- Better error messages when packages fail to install.
- Better error messages in `worker.log` when background processes
  do not complete.

## [0.1.44] - 2017-08-30
### Changed
- Datatype `object_checkboxes` will now create the variable if it does not
  exist.
### Fixed
- Control mode submitting clicks twice in some circumstances.
- Voice call forwarding.
- Duplicate checkbox validation error message.
- `send_email()` did not e-mail .docx files when given
  DAFileCollection objects.
- Inconsistency in handling of nested questions.

## [0.1.43] - 2017-08-27
### Fixed
- Extraneous call to checkin for chat log.
- Clicking elements in control mode in live chat.
- Problems with db table prefixes.
- Adjusted to changes in flask-user.
- Downgraded to Debian jessie because there was a problem with corrupt
  HTTP responses.

## [0.1.42] - 2017-08-24
### Added
- set_attributes() method for `DAFile` and `DAFileList` in order to
  allow uploaded files to be used across interview sessions and not be
  deleted when the session in which the file was uploaded is deleted.
- url_for() method for `DAFileList`.
### Changed
- Hyperlinks to actions (e.g., created through `url_action()` or
`action_menu_item()`) are now carried out through Ajax.
### Fixed
- Compatibility of UI elements with 'control' live help feature.
- Extraneous "Menu" entry in mobile menu when custom menu used.

## [0.1.41] - 2017-08-23
### Added
- Configuration directive `require referer` that allows users who use
  referer blockers to use **docassemble**.
- `.show()` method for `DATemplate` objects, for interchangability
  with images in `DAFile` objects.
### Fixed
- Error when `valid types` was set to `pdf` when `docx template file`
  was in use.
- Typo in HTML of monitor page.
- Auto-updating of version numbers in package listing.
- Updating of package table so that core packages are retrieved from
  pip, not GitHub.

## [0.1.40] - 2017-08-23
### Changed
- Upgraded from Debian jessie to Debian stretch
### Added
- Ability to specify filenames in `attachment` blocks using `code`.
### Fixed
- Error when GIFs inserted into RTF file.

## [0.1.39] - 2017-08-20
### Added
- Page where administrator can add users manually without going
  through invitation process.
### Fixed
- Non-ASCII characters in PDF field defaults no longer stripped out
  when scanning through utilities.

## [0.1.38] - 2017-08-16
### Fixed
- Bug in Alembic upgrade process

## [0.1.37] - 2017-08-16
### Changed
- Fields with `datatype: checkboxes` now have a "None of the above"
  option by default, and input validation ensures that something is
  checked.  The `none of the above` field modifer configures it.
- After registration, users will bypass the "Interviews" screen and
  go right back to their interview, if they have started an interview.
### Added
- Option in `fields` called `uncheck others` when `datatype` is
  `yesno`, `noyes`, `yesnowide`, or `noyeswide`.  Enables a yes/no
  field to act as a "None of the above" option.
- "Upgrade docassemble" button on the "Update a package" page.
### Fixed
- Automatic login after registration was not working, so users had to
  enter username and password information twice.
- Improved CSS for when name of interview on mobile is too long to fit
  in navigation bar.
- Non-ASCII characters in PDF fields when scanning through utilities
  no longer cause an error.
- Fixed problem introduced in 0.1.22 where interview data would be
  destroyed when switching back to an interview during the same session.

## [0.1.36] - 2017-08-13
### Fixed
- Small typo that made 0.1.35 unusable.

## [0.1.35] - 2017-08-13
### Added
- Support for help text next to choices in a multiple choice list.
### Changed
- Database upgrades now handled by alembic by default.  See the 'use
  alembic' configuration directive.
- Extension packages no longer depend on the docassemble.base or
  docassemble.webapp packages.  As a result, installation of an
  extension package will no longer trigger a total software update.
  If you want to upgrade docassemble, upgrade docassemble.webapp.
  Note that packages created in earlier versions will still have these
  dependencies until they are regenerated in the Playground.  You can
  always edit `install_requires` in the setup.py file.
### Fixed
- Bug fixes to SMS interface.

## [0.1.34] - 2017-08-10
### Fixed
- Checkboxes became `DADict`s a few weeks ago but the auto-gathering
  system on them was not turned off; it is turned off now.

## [0.1.33] - 2017-08-09
### Fixed
- Backwards compatibility for interviews started before `nav` added as
  a variable in the user dictionary.
- Extension packages now depend on `docassemble.webapp` so that when a
  package is updated, all of docassemble is updated, not just
  `docassemble.base`.

## [0.1.32] - 2017-08-08
### Changed
- `force_ask()` can ask a series of questions.
### Added
- Configuration directives for customization of global Javascript and
  CSS.
- Configuration directives for customization of start page and
  interview list.

## [0.1.31] - 2017-08-07
### Changed
- Review page buttons now Ajax.
- Screen reverts to review page after field edit.
### Fixed
- Problem with PDF/A due to old version of pdfx.

## [0.1.30] - 2017-08-07
### Added
- PDF/A support.
- Navigation bar option.
### Fixed
- Problem with files when user logged in.

## [0.1.29] - 2017-08-03
### Added
- Input validation with Python code.
- Input validation for dates, in addition to the limited Javascript validation.

## [0.1.28] - 2017-08-01
### Fixed
- DADict object now defines ask_object_type by default
- Bug with `using` combined with `ml`.

## [0.1.27] - 2017-07-31
### Added
- `ml` and `mlarea` data types and training system.
### Fixed
- Better error message in Playground when interview has a syntax error.
- Problem with temporary files introduced in 0.1.23 that was causing
  PDF fill-in to fail.

## [0.1.26] - 2017-07-25
### Fixed
- Minor git issue again.

## [0.1.25] - 2017-07-24
### Changed
- Back button style.
### Fixed
- labelauty issue.

## [0.1.24] - 2017-07-24
### Fixed
- Minor git issue.

## [0.1.23] - 2017-07-23
### Changed
- Additional deletion of temporary files through cron job.
### Fixed
- Improved performance by optimizing markdown and regex.
- Newer version of labelauty, with modifications to include benefits
  of older version, for compatibility with IE/Edge.

## [0.1.22] - 2017-07-22
### Added
- `read_qr()` function.
- `new_object_type` option for groups.
### Changed
- The default for the `debug` configuration directive is now `True`.
### Fixed
- The `disable others` field modifier can now be used on a field with
  the same variable name as that of another field on the same page.
- Term definition Markdown is now converted to HTML.
- Fixed bug with code blocks using iterators.
- Fixed problem with document attachments affecting data storage and
  multiple application servers.
- Playground run now resets page counter.

## [0.1.21] - 2017-07-14
### Changed
- Checkboxes now create `DADict` objects rather than `dict` objects.
### Added
- `all_true()` and `all_false()` methods for DADict.
### Fixed
- Fixed bug when user invitation e-mail fails to send.
- Error message when code and question blocks are combined.

## [0.1.20] - 2017-07-10
### Fixed
- Fixed another bug in edit user profile page.

## [0.1.19] - 2017-07-10
### Fixed
- Fixed bug in edit user profile page.

## [0.1.18] - 2017-06-28
### Added
- Pull package into Playground with PyPI.
### Changed
- `initial` directive now accepts code, just like `mandatory`.
- Error page now returns 404 instead of 501 when user tries to access
  an interview file that does not exist.
### Fixed
- Added MANIFEST.in so that README.md is included when packages are
  bundled using setup.py.
- Uploading files to Playground now checks to make sure the file is
  YAML and is readable.

## [0.1.17] - 2017-06-24
### Changed
- Updated the required system version to 0.1.17.
### Fixed
- If you updated the Python packages to 0.1.15 or 1.1.16 without
  updating the system, you may have experienced an error.  Now, if
  changes to the Python packages alter the necessary PostgreSQL
  columns or tables, those columns and tables will be changed upon
  reboot after the updating of the Python packages, and will not have
  to wait until an upgrade of the system.
- Fixed reference in Dockerfile to non-existent file.

## [0.1.16] - 2017-06-24
### Added
- GitHub integration.
- `dow_of()` function.
### Changed
- Changed PyPI username and passwords from a configuration setting to
  a user setting.
### Fixed
- More stable transition when transitioning server from non-cloud data
  storate to cloud data storage
- `month_of()` now uses defined language/locale rather than system
  locale when `word_of` is `True`.
- Executables that run as root no longer writable by www-data.
- Turned off auto-start on sync supervisor process.

## [0.1.15] - 2017-06-18
### Added
- SMS option for two-factor authentication.
- Option for requiring confirmation of user e-mail addresses.
### Fixed
- Problem with apt-get update at start of Dockerfile.

## [0.1.14] - 2017-06-17
### Changed
- Renamed configuration directives from "second factor" to "two factor."

## [0.1.13] - 2017-06-17
### Added
- Two-factor authentication.
- Phone login.

## [0.1.12] - 2017-06-06
### Changed
- To facilitate GitHub workflow, attempted to preserve timestamps on
  filenames in Zip files.

## [0.1.11] - 2017-06-04
### Changed
- Increased font size for better mobile experience.

## [0.1.10] - 2017-06-03
### Changed
- Look and feel of signature pages now match regular interface on
  larger screens,

## [0.1.9] - 2017-06-02
### Fixed
- Various bugs from previous version.

## [0.1.8] - 2017-06-01
### Fixed
- Bug with Google Drive integration.

## [0.1.7] - 2017-06-01
### Fixed
- Bug with server-side encryption.

## [0.1.6] - 2017-05-30
### Added
- Google Drive integration.

## [0.1.5] - 2017-05-28
### Fixed
- Bug with logins in the middle of interviews.

## [0.1.4] - 2017-05-27
### Changed
- New algorithm for generic variables and index variables.
### Added
- Additional examples.

## [Unreleased] - 2017-05-26
### Changed
- PDF fill-in files now editable.
- Started using bumpversion.
- Started a changelog.