Enketo Express for KoboToolbox is running! Please access Enketo forms from your KoboToolbox installation.
version: 4.1.3
All notable changes to this project will be documented in this file. This project adheres to Semantic Versioning.
survey.media
is available in view mode (#484)Fixed a duplicate record name issue in offline-capable views if more than 1 form with the same title exist in the local database, closes (#417)
Breaking change: once users visit a form in offline-capable mode, the offline form cache IndexedDB schema will be upgraded, which is irreversible.
Add max processes config value (#415)
Breaking change: the previous default was to fork one process for every logical CPU core on the host, the new default is limited to 16 processes by default.
Fix: missing media healing offline (#419)
Show a less cryptic error message when form loading fails with missing external instances (#421, #400)
Allow client csrf cookie name to be configurable (#420)
Don't disable the upload button so much (#410)
Add configurable security headers (#402)
Fix: depend on transformer and core releases in lockfile (#413)
Optionally exclude non-relevant values in calculations (enketo-core#870)
Fix map with hidden geo-inputs when "hide-input" class is active (enketo-core#889)
Optionally recompute the evaluation cascade asynchronously (enketo-core#881)
Improve form initialization performance by calculating repeats only once (enketo-core#887)
Fixed mangling of markdown-produced HTML next to top-level text nodes when a mediamap is provided (enketo-transformer#150)
Improve test isolation (enketo-core#885)
grunt
only when building image; remove config and commit logic from start-up script; update to node 14grunt
expects missing esbuild
dev dependencydecimal-date()
function (as it was an accident and is not in the spec).decimal-time()
with a node-set parameter fails.uuid()
with a node-set parameter fails.node()
mid-axis, causes an exception.ends-with()
with a node parameter causes an exception.not()
with an empty node-set parameter returns false
.uuid()
with a node parameter fails.exp()
, exp10()
, log()
, log10()
, sqrt()
with node-set parameters returns incorrect results.randomize()
with a non-nodeset parameter does not throw an error.form
query parameter) fail to load.setvalue
element has no value
attribute and no textContent, it does not work to reset a value.create_config.py
script stored encryption key
in the wrong placeviewBox
attribute is overwritten.<circle>
element with id
attribute is not working in the image-map widget.<circle>
element with a parent <g>
element with an id attribute is not working in the image-map widget.form
query parameter show a submit button instead of a validate button.WARNING: IT IS HIGHLY RECOMMENDED TO DEPLOY THIS VERSION BEFORE CHROME 83 IS RELEASED SOME TIME IN APRIL 2020 AND PREFERABLY AFTER VERSION 1.86.x HAS BEEN DEPLOYED. READ MORE HERE.
form
queryparameter are broken.WARNING: IT IS HIGHLY RECOMMENDED TO DEPLOY ONE OF THE 1.86.x VERSIONS BEFORE MARCH 31ST, 2020. READ MORE HERE.
jr:count
does not work if number is provided instead of /path/to/count.odk:generated-by
attribute check on the primary instance (introduced in 1.83.0), was changed to a check for odk:xforms-version
on the model node.grunt build-ie11
task does not build minified javascript files, causing everything to fail in production mode.grunt build-ie11
).preview_iframe_url
property.validateContinuously
is set to true
.odk:generated-by
attribute on the primary instance child, will always have absolute repeat node references evaluated correctly (e.g. for forms generated by pyxform 1.0.0 onwards).current()
without a path, and current()/path/to/node
without a step down do not work.current()
calls, the expression is not evaluated correctly (noticeable inside repeats for multiple-choice questions with complex choice filters).decimal-time()
and decimal-date-time()
now use maximum precision instead of rounding to 3 decimals."compact" -> "select-media"
and "horizontal-choices" -> "columns"
).true
.jr:choice-name()
function not working with autocomplete questions.position(..)
) are not always re-calculated.validateContinuously: true
).valuechange.enketo
event but should not.Dockerfile
specifies NodeJS 6.validateContinously
is set to false
.form
query parameter with a URL value that contains ":" in the path, get stuck in an infinite loop (!).HEAD
request to the form URL responds with the correct X-Openrosa-Accept-Content-Length
header.<sup>
and <sub>
(superscript and subscript).decimal-time()
support.distance()
support.decimal-date-time()
not spec-compliant at all.randomize()
support to shuffle nodesets (no support for itemsets with itext labels).min()
and max()
ignore non-last arguments/nodes with value 0.data-checked
attribute is not updated.<g>
of <path>
s.style
attribute with fill and stroke the 'selected' state is not shown.Accept-Language
header contains a dialect such as sv-SE
.ref
attribute is not revealed when relevant becomes true.true
.false
, block page navigation for some milliseconds if required to ensure that user sees new error message.true
.false
.