enketo-core
Version:
Extensible Enketo form engine
1,483 lines (868 loc) • 88.7 kB
Markdown
# Change Log
All notable changes to this project will be documented in this file.
This project adheres to [Semantic Versioning](http://semver.org/).
## [9.0.1] - 2025-02-25
- Prevent pasting values in read-only date questions
## [9.0.0] - 2024-12-09
⚠️ **BREAKING CHANGE**: if you use Enketo Core with a custom file manager implementation, you will need to read image data from cache. See [this example implementation](https://github.com/enketo/enketo/blob/1e8821e1d21e5c4730cbdc17d2ef49b8f172e42d/packages/enketo-core/src/js/file-manager.js#L146) and [this comment for context](https://github.com/enketo/enketo/pull/1335#issuecomment-2392168842).
- For signature, annotation and draw questions, don't scale image when canvas size changes
- Fix getter-only number-input properties to support JS strict mode
- Upgrade dependencies, particularly signature_pad used for signature, annotation and draw questions
- Support Node 20 and 22, drop support for older versions
## [8.3.1] - 2024-09-19
- Hide date widget fake input when rendering pdf (#1341)
- Fix issue with displaying image choices in translated form (#1353)
## [8.3.0] - 2024-07-12
- Update OSM URLs to one that supports HTTP/2 and HTTP/3 (#11)
- Add multi-argument support to distance function (#1328)
## [8.2.0] - 2024-04-19
- Fix \_isRelevant function in calculation module returns incorrect cached result after initialization
- URL-encode href attributes
- Remove handling of `bl` tag because it doesn't exist
- Only treat `_` as markdown italics if separated by whitespace
## [8.1.0] - 2024-01-25
- Fix: "for" attribute throws off ability to open to the right page upon load (#1286)
- Revert change from v7.2.0 to preserve high resolution annotated images (#1292)
## [8.0.0] - 2023-10-30
- Breaking change: in the move to a monorepo, some paths in Sass styles have been updated to reflect the new file structure. The impact should be minimal, but custom themes may need to be updated. Generally, paths which cross package boundaries (i.e. imports from Enketo Express to styles in Enketo Core, or imports of third party styles from NPM packages) should use absolute paths from the monorepo root. You may refer to existing theme styles for examples.
- Breaking change: Support Node 18 and 20, drop support for older versions
- Fix: ensure annotations/drawings on non-current pages are submitted
## [7.2.5] - 2023-08-18
- Fix: multiple "static" itemset datalists in the same repeat (#995)
- Fix: global initialization of widgets where repeat count is zero (#994)
- Use map instead of object for cached conversion of XPath expression
(#985)
- Fix: include widgets with 'form' selector (#993)
- Fix: don't display "ghost option" for itemsets with Likert appearance (#992)
- Temporarily roll back buggy optimizations of enabling/disabling widget instances (#990)
- Fix import error for enketo-transformer/web (enketo/enketo-transformer#184)
## [7.2.4] - 2023-07-03
- Performance improvements: do less redundant work, part 2 (#976)
- Fix: gracefully handle undefined key (#978)
- Fix: TOC navigation in pages theme (#983)
- Fix: Respect existing val of type='time' (#980)
## [7.2.3] - 2023-05-10
- Fix: focus first active input/widget on load, page navigation, user-added repeat (#969)
- Performance improvements: NumberInput widgets, `excludeNonRelevant` (#971)
- Fix: localized numeral entry by keyboard in number input widgets (#973)
## [7.2.2] - 2023-03-23
- Fix: ensure instance attachments are loaded in draw widget (#967)
## [7.2.1] - 2023-03-21
- Fix: revert jQuery upgrade to address regressions accessing jQuery extensions in Enketo Express (#964)
## [7.2.0] - 2023-03-20
- Reimplement draw/signature/annotate widget to preserve original image size when annotating and improve resize performance (#960)
## [7.1.0] - 2023-03-16
- Remove: analog-scale widget (#952)
_Note: now maintained by OpenClinica (https://github.com/OpenClinica/enketo-express-oc/tree/master/widget/analog-scale). Not considered a breaking change because usage outside of OpenClinica is not known_
- Fix: further simplify geopicker (#954)
- Fix: undesired newlines in print view in select/select1 labels (#957)
- Add Transformer web compatibility (enketo/enketo-transformer#171)
## [7.0.0] - 2023-02-08
- **BREAKING CHANGE**: Removed IE11 support (#946)
- Fix: rank widget on touch devices (#947)
- Fix: undesired autocompletion of manually entered incomplete month-year (#944)
- Optimize expensive XPath expressions in HTML transform (enketo-transformer#165)
## [6.1.7] - 2022-12-21
- Fix: integer and decimal widgets remain visible when form language changes (#937)
- Fix: don't clear decimals when switching French -> English (#941)
## [6.1.6] - 2022-12-15
- Do not update image file on blur if canvas is empty (#931)
- Fix calculation of nested repeat counts in >1 outer repeat instances (#935)
## [6.1.5] - 2022-12-06
- Fix: allow arbitrary precision decimal values (#932)
## [6.1.4] - 2022-11-28
- Fix: use simpler selector for geopicker widgets (#922)
- fix toggle or-appearance-compact with dynamic nested repeat group (#914)
- Fix: validate number input values (#926)
## [6.1.3] - 2022-10-27
- Fix timepicker in Finnish locales (#916)
- Fix special string.replace sequences in Markdown (enketo-transformer/153)
- Fix evaluating absolute nodeset expressions with an attribute context node (openrosa-xpath-evaluator/166)
## [6.1.2] - 2022-06-24
- Update meta selector used when setting deprecatedID (#900)
- Preserve geopicker zoom, center map on user location on load, no error clicking pin (#905)
- Don't use removed repeat instance as context for relevance (#909)
## [6.1.1] - 2022-06-01
- Fix: rendering unexpected geopoint widget for setvalue actions within an input (#896)
- Fix: ensure evaluation cascade additions receive form context and update arguments (#895)
## [6.1.0] - 2022-05-17
##### Changed
- Optionally exclude non-relevant values in calculations and submissions (#870)
- Fix map with hidden geo-inputs when "hide-input" class is active (#889)
- Optionally recompute the evaluation cascade asynchronously (#881)
- Improve form initialization performance by calculating repeats only once (#887)
- Fixed mangling of markdown-produced HTML next to top-level text nodes when a mediamap is provided (enketo-transformer#150)
- Improve test isolation (#885)
## [6.0.5] - 2022-04-21
##### Changed
- Fix: escape querySelector variables to avoid error. (#871)
- Fix: improve error messages for missing external instances (#873)
- Fix: don't randomize unrelated itemsets outside repeat (#876)
- Update datepicker-extended widget to properly unpack data from paste event (#878)
- Code style/formatting: Prettier + Airbnb ESLint preset (#866)
- Fix: unescaped HTML in CHANGELOG (#864)
- Update format-date to return empty string instead of 'Invalid Date' (openrosa-xpath-evaluator#155)
## [6.0.4] - 2022-02-04
##### Changed
- Fix: Disable `<option>`s for readonly `<select>`s with itemsets (#843)
## [6.0.3] - 2022-02-03
##### Changed
- Improve build speed (#838)
- Fix deprecatedID not added and populated properly if meta block is name-spaced with http://openrosa.org/xforms (#836)
- Fix outputs in labels of radiobutton/checkbox itemsets within grouped repeats (#846)
- Pause multimedia when switching pages (#817)
- Upgraded to [openrosa-xpath-evaluator 2.0.10](https://github.com/enketo/openrosa-xpath-evaluator/blob/master/CHANGELOG.md#2010---2022-02-01)
- Upgraded to [enketo-transformer 2.1.2](https://github.com/enketo/enketo-transformer/blob/master/CHANGELOG.md#212---2022-02-01)
## [6.0.2] - 2021-11-04
##### Changed
- Upgraded to [enketo-transformer 2.1.1](https://github.com/enketo/enketo-transformer/blob/master/CHANGELOG.md#211---2021-11-04)
## [6.0.1] - 2021-10-13
##### Changed
- Fix: randomizing options is not working (#821)
- Fix: question name collision when the same name is used in the same repeat but in a different group (#815)
- Fix: itemset inside first repeat is not evaluated correctly (#818)
- Upgraded to [openrosa-xpath-evaluator 2.0.9](https://github.com/enketo/openrosa-xpath-evaluator/blob/master/CHANGELOG.md#209---2021-10-11)
- Upgraded to [enketo-transformer 2.1.0](https://github.com/enketo/enketo-transformer/blob/master/CHANGELOG.md#210---2021-10-11)
## [6.0.0] - 2021-09-17
##### Changed
- Upgraded node, npm, and other dependencies
## [5.18.1] - 2021-07-13
##### Changed
- Increased maximum number of columns in Grid Theme from 10 to 13.
- Various big developer tooling improvements (e.g. faster testing, debugging, test watching).
##### Fixed
- When loading a long text default value into a multiline text widget, it doesn't expand automatically.
- When using "goto" on a comment question with a form divided into pages, it doesn't open the comment dialog.
- XPath inconsistencies with date-as-string result formats.
- XPath Result of if() is no longer cast to a string (recently updated ODK XForms spec).
## [5.18.0] - 2021-05-24
##### Added
- Support for odk:setgeopoint for odk-instance-first-load and xforms-value-changed events.
##### Fixed
- Range default or loaded value (number) not shown.
- Distresspicker default or loaded mercury level not shown.
- Radiobuttons value still shown in view after programmatic clearing (e.g. by a calculation).
- Triple-nested repeats and higher are not created properly.
## [5.17.6] - 2021-04-20
##### Removed
- `decimal-date()` function (as it was an accident and is not in the spec).
##### Changed
- Improved accessibility for screen readers.
- Improved performance.
##### Fixed
- Using `decimal-time()` with a node-set parameter fails.
- The not-equals operator fails when preceded by a node-set without a trailing space.
- Using `uuid()` with a node-set parameter fails.
## [5.17.5] - 2021-04-12
##### Fixed
- Using `node()` mid-axis, causes an exception.
- Using `ends-with()` with a node parameter causes an exception.
- Using `not()` with an empty node-set parameter returns `false`.
- Using `uuid()` with a node parameter fails.
- Using `exp()`, `exp10()`, `log()`, `log10()`, `sqrt()` with node-set parameters returns incorrect results.
- Using `randomize()` with a non-nodeset parameter does not throw an error.
## [5.17.4] - 2021-04-02
##### Fixed
- Forms containing select questions with very large lists of options become unbearably slow to validate.
- Some relevant groups will no longer ignore page break rules.
- Native XPath functions do not handle node-set arguments.
## [5.17.3] - 2021-03-18
##### Fixed
- Exception occurs with lazy evaluation of and-or statements.
## [5.17.2] - 2021-03-02
##### Fixed
- Setvalue/xforms-value-changed inside a select multiple question is not working (enketo-transformer).
- Setvalue/xforms-value-changed with trigger inside a repeat and target outside the repeat does not work.
- A calculation without form control inside a non-relevant repeat with 0 instances, fails to prune non-relevant nodes.
- Misplaced image-map when used in conjunction with complex custom comment widgets (OC).
- The function jr:choice-name causes an exception if the choices list of radiobuttons or checkboxes is empty.
- The function jr:choice-name causes an exception if the choices list of pulldown selects is empty.
## [5.17.1] - 2021-01-18
##### Changed
- The uuid() function implementation has improved with a reduced chance of collisions.
##### Fixed
- Action setvalue/odk-instance-first-load and setvalue/odk-new-repeat actions are not properly added for radiobutton and checkbox questions (in enketo-transformer).
- Lazy and/or evaluation within function arguments (in openrosa-xpath-evaluator).
- Action setvalue/odk-new-repeat does not run non-form-control actions before form controls (since 5.17.0).
- Static itemsets with radio buttons inside multiple repeat instances do not load correctly.
- Draw widget changes file name whenever browser window resizes.
- Draw widget updates file name when canvas loses focus if drawing hasn't changed.
- Nested XPath expressions with dead branches cause an exception (since 5.17.0).
## [5.17.0] - 2020-12-28
##### Changed
- Vastly improved performance for most slow forms by replacing the XPath evaluator. See [blog post to follow]().
## [5.16.16] - 2020-12-23
##### Fixed
- A form with a repeat count that has a relevant, will not create the required amount of repeats when loading an existing record.
## [5.16.15] - 2020-12-22
##### Fixed
- If the same repeat question has both a setvalue/odk-instance-first-load as well as a setvalue/xforms-value-changed, the output can get messed up (fixed in enketo-transformer).
## [5.16.14] - 2020-12-18
##### Fixed
- The setvalue/odk-instance-first-load default in the first repeat instance is not populated if that repeat or question is non-relevant upon load.
- If the result of a non-first setvalue/odk-new-repeat calculation is an empty string but the first repeat instance has a non-empty default for that question, the view will show the non-empty default (model is correct).
## [5.16.13] - 2020-12-16
##### Fixed
- An exception occurs when a repeat is deleted.
- When a calculation becomes non-relevant, values are sometimes cleared (they should stay).
- The input field of a readonly question without a calculation but with a triggered setvalue/xforms-value-changed action remains hidden.
- Calculation updates do not trigger setvalue/xforms-value-changed actions.
## [5.16.12] - 2020-12-04
##### Changed
- setvalue/odk-instance-first-load actions without form controls are evaluated (in form order) before setvalue/odk-instance-first-load actions with form controls (in form order)
## [5.16.11] - 2020-12-02
##### Fixed
- Print/pdf view creates image-map that overlaps in cell below with Grid theme (#744).
- In Safari on MacOS, dates are offset incorrectly by the UTC offset.
- Grid Theme designed for rows with 9 or 10 cells display 1 cell too many.
- Inconsistent and unsafe HTML rendering of select minimal labels and values.
- Primary instance node names starting with underscore followed by number, break autocomplete widget.
## [5.16.10] - 2020-11-18
##### Changed
- Improved timings of print script for Grid Theme forms
##### Fixed
- Geopicker on mobile devices won't show map any more after first map reveal.
- jr:choice-name not working for questions with radiobuttons.
- If a ref or nodeset attribute starts with a space, the absolute path is not determined correctly (enketo-transformer).
## [5.16.9] - 2020-09-28
##### Fixed
- In custom (OC) analog-scale widget, if the widget itself is a page (not its parent group), it is not hidden when it should be when the page is not current.
- When pasting an invalid number into a number field with an existing value, the existing value does not get cleared in the model.
## [5.16.8] - 2020-08-28
##### Added
- In custom (OC) analog-scale widget support for `show-scale` appearance for vertical widgets using int/decimal.
##### Changed
- Ordered markdown lists should always be preceded by a newline character because it's very common to number labels in forms(enketo-transformer).
## [5.16.7] - 2020-08-13
##### Changed
- Removed animation when removing a repeat.
##### Fixed
- When a `setvalue` element has no `value` attribute and no textContent, it does not work for resetting values(enketo-transformer fix).
- When nested repeats using jr:count have values that empty or 0, a nested repeat can never be created (exception)
## [5.16.6] - 2020-08-03
##### Fixed
- Readonly empty fields are displayed but should be invisible (recent regression).
## [5.16.5] - 2020-08-03
##### Changed
- Let cookie access attempt fail silently in context where document.cookie is not accessible and throws an exception.
##### Fixed
- Xforms-version check relies on specific namespace prefix.
- jr:choice-name() not working if parameters are relative paths.
## [5.16.4] - 2020-07-23
##### Changed
- Markdown lists no longer require preceding newline (enketo-transformer).
- Markdown ordered lists detect non-1 numbering start (enketo-transformer).
- Add rel="noopener" to markdown links (enketo-transformer).
- Focus date/time/datetime pickers when clicking label.
##### Fixed
- Pulldata fails to work when the search value looks like a number in scientific notation.
- Readonly text fields with overflowing text have invisible overflow on printouts.
- Textarea contains unnecessary space character (enketo-transformer).
- In Firefox the native datepicker launches when the question label is clicked.
## [5.16.3] - 2020-07-09
##### Changed
- Changed when dataupdate event is fired for setvalue/odk-instance-first-load actions to facilitate custom clients with field submission (like OpenClinica).
- Speed up loading.
## [5.16.2] - 2020-06-12
##### Changed
- Made fixed English geopicker warning translatable.
##### Fixed
- The "selected" message in the desktop select picker does not switch language immediately.
- Image-map widget is transparent, not visible but functional, when it is included on a non-first page.
## [5.16.1] - 2020-06-05
##### Fixed
- Readonly select-minimal widgets are not readonly.
- Readonly select-minimal widget get erroneously enabled when relevancy changes to positive.
- Calculation with form control fires input-update event upon load if the underlying model value doesn't change.
- Number mask do not work in non-first repeat instances.
## [5.16.0] - 2020-05-28
##### Removed
- Configuration option `clearIrrelevantImmediately`. Non-relevant values are never immediately cleared.
##### Changed
- Changed external instance XML document type check for Enketo Validate use.
## [5.15.5] - 2020-05-27
##### Fixed
- Date fields in Grid Theme do not show values in print view.
- Itemsets inside a non-relevant groups or questions are not updated when group becomes relevant if choice_filter condition does not include node that makes group/question relevant.
## [5.15.4] - 2020-05-15
##### Changed
- Code style
##### Fixed
- SVG image in image-map widget is not always displayed in its entirety. Any SVG-specified `viewBox` attribute is overwritten.
- SVG `<circle>` element with `id` attribute is not working in the image-map widget.
- SVG `<circle>` element with a parent `<g>` element with an id attribute is not working in the image-map widget.
- Geo widget update function doesn't redraw a map, e.g. when changing language.
## [5.15.3] - 2020-05-12
##### Fixed
- When printing long text it overflows into the question below.
## [5.15.2] - 2020-05-05
##### Fixed
- Textarea not resizing correctly when printing in pages mode.
## [5.15.1] - 2020-05-01
##### Changed
- The resetView method now returns the new form element.
## [5.15.0] - 2020-04-24
##### Added
- Support for multiple setvalue/xforms-value-changed actions under the same form control.
- A "goto-invisible" event to trigger when a "goto" instruction points to a field without a form control.
##### Fixed
- Border shown when printing a Grid Theme form.
## [5.14.3] - 2020-04-15
##### Fixed
- When instantiating a single-language form with an explicit language override, itemsets may fail to populate.
- Empty readonly text fields take up unnecessary space in the print view.
- Non-relevant questions in Grid theme are not getting the correct width in the print view.
## [5.14.2] - 2020-04-14
##### Changed
- Form instantiation now recommended with form Element instead of form selector.
- Prepared for language syncing feature in Enketo Express.
##### Fixed
- The dotted lines on Grid theme printouts are not positioned at the bottom of cells.
- A text question on Grid theme printouts that has only text questions on the same row (or nothing else), has too little space to write.
- Date/datetime/time questions take up too much vertical space on Grid theme printouts.
## [5.14.1] - 2020-03-31
##### Fixed
- Loading error if multiple autocomplete questions with static lists are used inside a repeat (regression in 5.14.0)
## [5.14.0] - 2020-03-27
##### Removed
- Example IE11 build tasks and loading tricks.
##### Changed
- Improved performance of autocomplete questions inside repeats that use static option lists.
##### Fixed
- Option label images in Likert widget are not centered below text.
## [5.13.2] - 2020-03-20
##### Fixed
- If last element of last row of form with Grid theme is hidden, the cells of that last row are not resized properly in the print view.
- Textareas not resizing in pages mode when loading large text values on non-first pages.
## [5.13.1] - 2020-02-28
##### Fixed
- `jr:count` does not work if number is provided instead of /path/to/count.
- Date calculations in readonly fields do not show a value if not loaded from record.
## [5.13.0] - 2020-02-14
##### Changed
- The odk:generated-by attribute check on the primary instance (introduced in 5.11.0), was changed to a check for odk:xforms-version on the model node.
##### Fixed
- Readonly date widgets can be edited or reset (regression in 5.12.0).
## [5.12.0] - 2020-02-12
##### Added
- Support for setvalue action with xforms-value-changed event.
- Basic support for "thousands-sep" appearance on integer and decimal fields.
##### Changed
- No longer trigger an inputupdate event when loading an existing itemset value.
- "valuechange" event was changed to "xforms-value-changed" (TBC!)
##### Fixed
- Text-print widget causes double URL to be shown in print view for URL widget.
- Last row of Grid Theme form may have incorrect cell heights.
- Readonly month-year or year inputs show full underlying value instead of month-year/year.
## [5.11.7] - 2020-01-28
##### Fixed
- Exception occurs when first repeat is created that contains a calculation if `validateContinuously` is set to `true`.
- Rows are not always stretching correctly when printing Grid Theme forms.
## [5.11.6] - 2020-01-22
##### Fixed
- Text-print widget is also instantiated for comment widgets, causing an issue for a customized Enketo Express application.
- If repeats are removed in pages mode, the pages get messed up.
- If repeats are added in pages mode during form load (default instances or loading existing record with multiple instances), the Next/Back buttons are not updated when they should be.
## [5.11.5] - 2020-01-21
##### Fixed
- Forms in pages mode sometimes do not show correct first page upon load (regression since 5.11.3).
- Forms in pages mode with groups or repeats without field-list appearance show empty pages (regression since 5.11.3).
## [5.11.4] - 2020-01-20
##### Fixed
- Radiobutton questions inside repeats allow multiple selections (regression since 5.11.0).
- Comment questions in a form in Pages mode without field-list appearances, add an empty page.
## [5.11.2] - 2020-01-10
##### Fixed
- Annotation and draw widget on mobile devices slightly decrease image size every time a switch between fullscreen (draw) view and full form view.
- Annotation widget on mobile devices reveals keyboard when the colorpicker is clicked.
## [5.11.1] - 2020-01-06
##### Changed
- No longer trigger an inputupdate event when setting default values in view.
##### Fixed
- Annotate widget broken when uploading new image.
## [5.11.0] - 2019-12-31
##### Added
- Support for setvalue action with odk-new-repeat and odk-instance-first-load events.
##### Fixed
- Forms with a `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).
## [5.10.0] - 2019-12-18
##### Added
- Support for default drawings in all 3 drawing widgets.
##### Fixed
- Some PDF viewers do not show radiobuttons with an opacity (e.g. a disabled radio button).
- MS Edge does not show any checkmarks in printouts of radiobuttons and checkboxes.
- Overflowing content in text form controls is not shown on printout.
## [5.9.2] - 2019-11-22
##### Fixed
- `current()` without a path, and `current()/path/to/node` without a step down do not work.
- Datetime picker does not load a midnight datetime value.
- Analog scale layout messed up in printout.
## [5.9.1] - 2019-11-04
##### Fixed
- If a predicate consists of parts that contain multiple `current()` calls, the expression is not evaluated correctly (noticeable inside repeats for multiple-choice questions with complex choice filters).
## [5.9.0] - 2019-10-23
##### Changed
- Now using native datetime picker on mobile browsers.
##### Fixed
- Option labels break in middle of word instead of a space.
- Readonly native date/time/datetime picker in iOS is fully functional when it should not be (re-introduced bug in iOS13).
- Exception in geo widget (though may not have had negative consequences).
## [5.8.0] - 2019-10-04
##### Added
- Rating widget!
##### Changed
- ToC now matches ODK Collect and shows all questions hierarchically.
##### Fixed
- time/datetime with time between 12:00 and 13:00 not set to PM.
- time picker in datetime shows empty value if the default value of datetime is at midnight.
- AM/PM notation broken in time/datetime picker for non-english languages.
## [5.7.2] - 2019-09-11
##### Changed
- Dependencies (maintenance).
## [5.7.1] - 2019-09-09
##### Changed
- XPath functions `decimal-time()` and `decimal-date-time()` now use maximum precision instead of rounding to 3 decimals.
##### Fixed
- Analog scale widget layout messed up in Grid Theme on IE11.
## [5.7.0] - 2019-09-05
##### Added
- Support for "picker" appearance on range question (100% in enketo-transformer actually)
##### Fixed
- Datepicker widget cause infinite loops with certain custom extensions that update values programmatically.
## [5.6.0] - 2019-08-20
##### Removed
- ESRI ArcGIS geopicker (moved [here]https://github.com/enketo/enketo-arcgis-geo-widget)
## [5.5.2] - 2019-08-07
##### Changed
- Show warning if select_multiple option contains spaces in value.
- Guidance hints are now displayed on screen as collapsible element.
##### Fixed
- Likert widget label in Grid Theme overlaps widget in print view.
## [5.5.1] - 2019-07-12
##### Changed
- Developer documentation update.
- Major dependencies update.
## [5.5.0] - 2019-07-09
##### Added
- Support for max-pixel attribute.
##### Changed
- Improvements to print style (group header size, opacity of disabled questions, line-height in Grid Theme)\
- Improved print style of select minimal widget.
##### Fixed
- Long words break out of cell in Grid Theme.
- Workaround for an iOS browser bug where a readonly date input is actually fully functional.
## [5.4.1] - 2019-06-10
##### Fixed
- Disabled analog-scale widget is still visible.
- Tests in enketo-express fail due to npm packaging issue.
## [5.4.0] - 2019-06-05
##### Added
- An option to override the default XForm language during form instantiation.
- Developer documentation.
##### Changed
- Made preparations for apps to dynamically switch the language of non-form-defined strings.
##### Fixed
- Dependency/build issue with 'sortable not defined'.
- Form control value getter for complex third-party widgets may get a false value.
## [5.3.0] - 2019-05-21
##### Removed
- Support for appearances "quick" and "quickcompact".
##### Added
- Support for appearances "columns", "columns-pack", "columns-n" all with an optional "no-buttons" modifier
##### Fixed
- Automatically enlarged multiline inputs cannot be manually resized to their original size.
## [5.2.8] - 2019-05-10
##### Fixed
- Analog scale widget without current value box, still firing excessive change events.
- Distress widget mercury is not reset properly.
## [5.2.7] - 2019-05-09
##### Fixed
- Range, Analog Scale, Datetime, and Time widgets fire an unnecessary change event when a new value is set that is equal to the existing value.
- Range widget fires an unnecessary change event when the value is empty, before the value is set, when the user clicks the widget.
- Issue with datepickers in Grid Theme in Firefox in apps using Enketo Core (Enketo Express) where the reset button is rendered outside the cell.
## [5.2.6] - 2019-05-01
##### Fixed
- Draw widgets loose drawing (or last stroke(s) in drawing) on mobile devices if clicking hide-full-screen button or switching device orientation within 1.5 sec after last change.
## [5.2.4] - 2019-04-25
##### Fixed
- Some forms with repeats fail to load in Safari.
## [5.2.3] - 2019-04-24
##### Fixed
- Failing to clone repeats that only contain calculations.
- Select one calculations not updating correctly.
- Non-relevant calculations inside non-first repeat instances run upon load.
- Range widgets do not work on touchscreen devices.
- Date strings without timezone component are not always converted correctly in timezones that have DST.
- Hand-typed/pasted dates with spaces or invalid characters are kept shown to user, but are not stored in model.
## [5.2.2] - 2019-04-01
##### Changed
- Hide reset button when question is readonly.
##### Fixed
- Readonly Draw/Signature widget updates with empty file when canvas looses focus.
- Readonly Select Minimal widget is not readonly.
- Readonly File widget becomes writeable if it becomes relevant.
## [5.2.1] - 2019-03-26
##### Changed
- The restriction on crossing paths in the geoshape widget was removed.
##### Fixed
- Radiobutton unselect functionality can cause infinite loops with certain custom extensions that update values programmatically.
## [5.2.0] - 2019-03-19
##### Added
- A configurable option to provide a maximum character length of a text field.
##### Fixed
- The output in an itemset option label is not populated upon load.
## [5.1.3] - 2019-02-26
##### Changed
- Partial rewrite of events.
- Improved accuracy of progress tracker.
##### Fixed
- On touchscreen devices, the draw widget download functionality does not work, and clicking the Draw button empties the canvas.
- XForms using geopoint, geotrace, geoshape, time, date, datetime, select minimal, rank, autocomplete calculations **without form control** (advanced) fail to load.
- Some widgets (such as all geo widgets) do not update view if a calculation changes the underlying value.
## [5.1.1] - 2019-02-21
##### Fixed
- Calculations using advanced count(/path/to/repeat/node1[text()="something"]) aren't recalculated when a node1 changes.
- Exception occurs when appearance 'horizontal' is added to group (which has no support for this appearance).
- If the window in an online-only multi-page form is resized, while a drawing is on a currently-not-shown page, the submission results in an empty drawing.
## [5.1.0] - 2019-02-18
##### Changed
- Readonly draw widgets no longer show drawings on grey background in Grid Theme, nor apply an opaqueness filter.
- Repeat deletion with "-" button now requires confirmation.
##### Fixed
- Loading image from record may show error even if it was loaded successfully.
- Generic file upload not working (cannot set property 'src' of null).
## [5.0.5] - 2019-02-07
##### Fixed
- New repeats are always shown in default language.
- Relative repeat-counts not working.
## [5.0.4] - 2019-01-10
##### Fixed
- Loading a form with a readonly file input throws an exception.
- Times and datetimes with meridian notation are set to empty in the model for times between 12:00 AM and 1:00 AM, and between 12:00 PM and 1:00 PM.
## [5.0.3] - 2019-01-07
##### Fixed
- Too much delay in saving drawings/signatures/annotations.
- Slider in vertical range widget not aligned properly in Grid Theme.
- Analog scale widget min/max labels not position properly in Grid Theme.
## [5.0.2] - 2019-01-07
##### Changed
- Fewer model updates during drawing using draw/signature/annotate widgets (performance).
##### Fixed
- Loading error in Pages mode when a page has no label.
- Itemsets not populating if inside an non-relevant group upon load.
- Download link not working for Draw/Signature/Annotate widgets.
- Broken autocomplete widget in Safari and all iOS browsers.
## [5.0.1] - 2018-12-20
##### Changed
- Support Document instance for external data.
##### Fixed
- Likert item option labels with unequal number of lines not lined up correctly in Grid Theme.
## [5.0.0] - 2018-12-17
##### Removed
- Deprecated methods.
-
##### Changed
- Converted to modern Javascript **WARNING: requires new build systems**
- Do not include time component for today().
- Converted to new widget format **WARNING: widgets in the old format are no longer supported**.
- Consistent JS filenames without capitalization and without camelCasing.
##### Fixed
- Default values not loaded in non-first repeat instances.
- Table widget option hover background is not centered around radiobutton/checkbox.
- Date calculations (e.g. today()) for number type questions do not return a number.
- RTL script detection failing with Sorani (Kurdish) and other languages (Enketo Transformer).
## [4.60.6] - 2016-10-26
##### Fixed
- Does not show select options from external data if form is not translated (Survey123 only).
## [4.60.5] - 2018-10-25
##### Fixed
- Autocomplete widget not updating when form language is changed.
- Failing to translate select options from external data (Survey123 only).
## [4.60.4] - 2018-10-19
##### Fixed
- If grid form starts with a disabled question, the first question has no top border.
- If first page in form is non-relevant upon load, it is still shown (in grayscale).
- Minimal select picker (pulldown) not updating model (regression in 4.60.3).
## [4.60.3] - 2018-10-16
##### Fixed
- Loading records not working in IE11. All node values are emptied when a record is supplied.
- In FF when a radiobutton or checkbox is clicked directly in a pulldown select, the URL fragment identifier is updated (and page scrolls to the top).
## [4.60.2] - 2018-10-05
##### Fixed
- Timepicker localized AM/PM strings not detected properly in Firefox and Safari.
## [4.60.1] - 2018-10-05
##### Fixed
- Timepicker meridian field not wide enough for Chinese AM/PM.
- Timepicker meridian detection not working in IE11.
- IE11 polyfill for .after not working on comment nodes.
## [4.60.0] - 2018-09-24
##### Changed
- Form model was refactored to remove jQuery dependency.
##### Fixed
- Cascading selections with radiobuttons/checkboxes do not show image labels.
- Loading error when record with repeat calculation was loaded and validateContinously was set to `true`.
## [4.59.0] - 2018-09-11
##### Added
- new `Form.prototype.getModelValue` function and made this available as a widget helper.
##### Changed
- Performance of engine (determining index).
- `FormModel.prototype.getVal` now returns a string. **WARNING: internal API change that may affect custom apps**
- Print hints are now guidance hints, and follow ODK XForms specification.
##### Fixed
- Range pickers not showing current value "thumb" on printouts.
- Distresspicker thumb not centered on Chrome and Safari.
- `jr:choice-name()` function not working with autocomplete questions.
- Language selector not populated in some Enketo-powered applications.
## [4.58.0] - 2018-08-28
##### Changed
- IE11 support is now enabled differently. See [readme.md](https://github.com/enketo/enketo-core#enabling-support-for-internet-explorer-11). **WARNING**
##### Fixed
- Calculation results inside repeats are shown incorrectly to user under certain conditions.
- When a repeat is removed, calculations inside sibling repeats (e.g. using `position(..)`) are not always re-calculated.
## [4.57.2] - 2018-08-24
##### Fixed
- Loaded year and month-year values not displayed correctly in date (desktop) widget.
## [4.57.1] - 2018-08-23
##### Changed
- Provide way to not apply 'empty' class to special readonly views.
##### Fixed
- Appearance "placement-map" not showing map in geowidgets.
- If form in Pages Mode has a repeat as the first page (with field-list), a blank first page is shown.
## [4.57.0] - 2018-08-13
##### Added
- Table of Contents to Pages mode that enables jumping to any page.
##### Fixed
- Questions with calculations do not re-validate immediately when the value is re-calculated (with `validateContinuously: true`).
- Labels with words longer the form width, overlap with other form elements.
- Readonly questions in newly cloned repeats in Grid Theme do not get the proper readonly styling.
- Whitespace only input triggers a `valuechange.enketo` event but should not.
## [4.56.0] - 2018-08-06
##### Added
- Enable/disable meridian in timepicker and datetimepicker based upon detected locale preferences.
## [4.55.2] - 2018-08-02
##### Fixed
- Download links in file input and draw widgets not working in IE11.
- The required asterisks (\*) do not update in real-time if `validateContinously` is set to `false`.
- If a required text input field has a non-whitespace value that is replaced by the user to a whitespace-only value the new whitespace-only value is saved and considered valid.
## [4.55.1] - 2018-07-25
##### Changed
- In Grid Theme readonly questions with value now have the same whole-cell background color as readonly questions without a value.
##### Fixed
- The external data property of the form data instantiation parameter changes to an empty XML Document after adding it to the model. This causes issues in applications that rely on that property to remain immutable.
## [4.55.0] - 2018-07-19
##### Added
- Support for 'no-ticks' appearance in range widget.
##### Changed
- ODK namespace for `<rank>` widget (in enketo-transformer) to http://www.opendatakit.org/xforms.
##### Fixed
- Range widget in FF, the ticks partially disappear when the widget has a value.
- Randomize() doesn't work for itemsets that use itext() labels (in enketo-transformer)
## [4.54.3] - 2018-07-11
##### Fixed
- Exceptions thrown with complex jr:choice-name() usage.
- Various Geo Widget styling issues with buttons, mobile (fullscreen) and RTL scripts.
## [4.54.2] - 2018-06-27
##### Fixed
- Autocomplete question inside a non-first repeat shows list from first repeat.
- Dates are now considered local to fix constraints such as ". < today()"
## [4.54.1] - 2018-06-20
##### Fixed
- In a form containing a group with a single child repeat (and no other repeat sibling questions), fails to load a record where that group is empty. When creating the first repeat after load an exception occurs.
- Output inside a group that is non-relevant upon loading does not get evaluated when the group becomes relevant.
## [4.54.0] - 2018-06-18
##### Added
- URL widget
##### Fixed
- When unfolding collapsed groups, the draw widgets are not functional until the window is resized.
- Various styling degradations of geo widgets.
## [4.53.0] - 2018-06-15
##### Added
- Support for ranking widget
## [4.52.4] - 2018-06-12
##### Fixed
- Range widget loading error if relevant is used.
## [4.52.3] - 2018-06-11
##### Fixed
- Readonly text inputs with a default value are hidden.
- Certain XPath function calls without parameters cause an infinite loop.
## [4.52.2] - 2018-06-06
##### Fixed
- IE11 hack is not focused enough (affecting EE modals).
- Coordinates around the international dateline (longitude < -180 degrees) are considered invalid in geo widgets.
## [4.52.1] - 2018-06-04
##### Fixed
- Range widget turns geopoint coordinate inputs into rangepickers if initialized after geo widget.
## [4.52.0] - 2018-06-04
##### Added
- Support to provide external data as XML Document. **Warning: providing an XML string is now considered deprecated usage.**
- Support for range widget (basic).
##### Changed
- Performance-optimized itemsets. Cutting-edge browsers can now deal well with documents containging 16,500 items (!).
## [4.51.6] - 2018-05-24
##### Changed
- Improved accessibility of buttons and links.
##### Fixed
- Styling interference occurs when an appearance is added to a question type that doesn't support it.
## [4.51.5] - 2018-05-23
##### Changed
- Facilitate custom apps with different calculation _types_ by making calculation.update overwritable.
## [4.51.4] - 2018-05-14
##### Fixed
- Appearance "horizontal" enlarges the last option if the remainder of the options modulo 3 is 1.
- If all repeats containing a question that has skip logic are removed, an exception occurs when obtaining the model as string without non-relevant nodes.
## [4.51.3] - 2018-05-02
##### Fixed
- When a record is loaded with an empty value for a node that has a default value in the XForm, all secondary instance values are emptied.
## [4.51.2] - 2018-05-01
##### Changed
- Added a hook for Enketo Validate to add custom XPath functions.
## [4.51.1] - 2018-04-27
##### Changed
- Hide disabled reset button in draw widget.
##### Fixed
- Comment icon overlaps long label in simple select/select1 questions.
- Pasted incorrect date value converts to today's date.
## [4.51.0] - 2018-04-25
##### Added
- Decimal-time() support.
- Distance() support.
##### Fixed
- In Safari, readonly checkboxes and radiobuttons can still be manipulated and WILL modify the record, even if the UI doesn't update.
- Decimal-date-time() not spec-compliant at all.
- Filepicker and drawing widgets have functional reset button when they are readonly.
## [4.50.0] - 2018-04-22
##### Added
- Basic randomize() support to shuffle nodesets (no support for itemsets with itext labels).
##### Changed
- GoTo function separated from form.init and should now be called separately with form.goTo(xpath). **WARNING: Update app if GoTo functionality was used.**
- Increased linespacing for labels of "select" questions.
##### Fixed
- Min() and max() ignore non-last arguments/nodes with value 0.
- Goto functionality throws exception if target is a comment question that is not inside a group and the form is in Pages Mode.
## [4.49.0] - 2018-04-14
##### Removed
- function `printForm` in print script **WARNING: Rewrite function call and use the `print` function as an example**.
##### Fixed
- Add-repeat (+) button not aligned properly in Grid theme when no repeats exist.
- Manual date input without hyphen (i.e. large number) is converted to non-sensible date.
## [4.48.1] - 2018-04-06
##### Fixed
- Grid theme print script does not size cells with images correctly causing overflow into neighboring cells.
## [4.48.0] - 2018-04-03
##### Changed
- Annotate widget will now no longer allow drawing until an image has been uploaded.
##### Fixed
- If the form starts with a lengthy group, the print view shows only the form title on the first page.
- Loading drawings from existing records, results in blank canvas after window resizing. **WARNING: Requires adding a getObjectURL function to the file manager module (in case this is overridden your app)**
- The image map widget shows 'SVG not found error' in Firefox sometimes, and if so, it fails to scale the image.
## [4.47.6] - 2018-03-23
##### Changed
- Print script has been reorganized. **WARNING: If your app is using the print script (for Grid Theme forms), update your code!**
##### Fixed
- Print view of Grid Theme form in Pages mode doesn't properly stretch cells in the current page.
- Print script for Grid Theme doesn't have a default for paper format and doesn't apply user-defined margin.
- Markdown headers in Grid Theme are overlapping in print view.
- Print script for Grid Theme doesn't correct width of last question in form.
## [4.47.5] - 2018-03-21
##### Changed
- Positioning of comment widget icon next to question label.
- Center media inside labels.
## [4.47.4] - 2018-03-14
##### Changed
- Enketo Transformer: In Markdown, make a distinction between paragraphs (2+ subsequent new lines) and simple new lines.
##### Fixed:
- Image Map widget inside repeat sometimes shows 'SVG image cannot be loaded' message when all is okay.
- Enketo Transformer: In Markdown, newline characters are not converted if they follow a heading.
## [4.47.3] - 2018-03-09
##### Fixed:
- If existing drawing/signature/annotion is loaded from a http URL, an exception occurs.
- When radiobutton or checkbox is cleared programmatically the `data-checked` attribute is not updated.
- Filenames of signature, annotation and drawing inputs are set to undefined-xx.png.
## [4.47.2] - 2018-03-02
##### Removed:
- File upload "no preview for this file type" message.
##### Fixed
- Cursor in Grid theme set to text for no seemingly good reason.
- Markdown headers not limited from h1-h6 as they should be (in Enketo Transformer)
## [4.47.1] - 2018-02-27
##### Changed
- Show separate custom reset messages for drawing, signature and annotation widgets.
##### Fixed
- Date format shown to user in readonly field is different from non-readonly field.
- Autocomplete widget does not accept options that have multiple subsequent spaces in their label.
- Draw widget draw color gets reset to the default color after undo-ing strokes.
## [4.47.0] - 2018-02-21
##### Added
- Download functionality to draw widgets.
- Support for "new", "new-front", "new-rear" on media inputs.
- Feature to undo drawing strokes in draw and annotate widgets.
##### Changed
- Show helpful error message if SVG image cannot be found with Image Map widget.
- Native month-year datepicker used on mobile devices when available.
##### Fixed
- In annotate widget loaded file disappears when screen is resized.
- Annotate widget not working on touchscreen devices.
- Annotate widget stretches uploaded image.
- Downloaded drawings have a different filename from the one stored in the record.
- Imagemap widget does not work for a group `<g>` of `<path>`s.
- Imagemap scaling issue when width and height defined in SVG file have units (pt).
## [4.46.0] - 2018-02-14
##### Added
- Full support for annotate widget.
##### Changed
- Draw/signature widget requires confirmation before reset.
- Modal dialogs can now be overridden in app
- Renamed 'enketo-config', 'translator', '../path/to/file-manager', and 'widgets' modules to 'enketo/config', 'enketo/translator', 'enketo/file-manager', 'enketo/widgets'. **WARNING: update overrides for these modules in your app!**
##### Fixed
- Printing: geo widget with appearance "maps" does not show coordinate fields.
## [4.45.0] - 2018-02-08
##### Added
- File pickers can now (only) be reset by reset button.
- Download functionality to file pickers.
##### Changed
- If repeat is completely empty it no longer takes up any visual space.
- Show upload placeholder with max file size.
- Error messages in geopicker are now translatable.
## [4.44.4] - 2018-01-31
##### Fixed
- Instances with special characters in instance id attributes fail to be queried.
- Namespaces not resolved for secondary instances.
## [4.44.3] - 2018-01-30
##### Fixed
- Instance('id' )/path/to/node does not work if 'id' is surrounded by whitespace.
- (In Enketo Transformer) Markdown headers preceded by whitespace fail to render as header and whitespace trimming is to aggresive.
- Datepicker with "month-year" and "year" appearance shows full value.
## [4.44.2] - 2018-01-23
##### Changed
- Upgraded to jQuery 3.3.x. **Warning: Likely requires the app that uses enketo-core to also upgrade to jQuery 3.3.x!**
##### Fixed
- Date strings returned by XPath evaluator for question with type 'date' are not considered valid dates and set to ''.
## [4.44.1] - 2018-01-18
##### Changed
- Reduced margins around markdown headers.
- (In Enketo Transformer) better markdown headers with escaping and inline hashtag use.
##### Fixed
- A top-level group with a relevant that refers to a node inside a repeat may not get re-evaluated when the node changes and multiple repeats exist.
- Editing a record with an empty group fails miserably.
## [4.44.0] - 2018-01-16
##### Added
- Option to turn off page-swipe support.
##### Fixed
- An output inside a group label that is the parent of a repeat with 0 instances, causes a loading exception.
- (In Enketo Transformer) Readonly question does not show constraint message.
## [4.43.0] - 2018-01-05
##### Changed
- Invalid dates (and datetimes) such as 2018-12-35 are no longer automically converted to a valid date. They convert to empty now.
##### Fixed
- Repeat with field-list and parent group with field-list does not show "+" button and both groups fail to collapse.
- Printing: datetime picker inputs print below each other in Chrome.
- Safari invalidates any valid date (and datetime) with segments < 10, e.g. 2018-01-06.
## [4.42.3] - 2017-12-29
##### Changed
- Modest performance improvement with large repeat counts.
##### Fixed
- The IE11 (optional) workaround for checkboxes/radiobuttons does not work when a table has image labels.
- RTL scripts not supported for the (optional) IE11 radiobutton/checkbox workaround.
- RTL scripts do not have centered checkboxes/radiobuttons in tables.
- If preload item is placed inside a repeat with a repeat-count of 0, an exception occurs.
- RTL scripts with Grid Theme have