The on-screen keyboard layouts and AngularJS templates were previously
part of the Java webapp build, but are now part of the NPM/Webpack
build. Those files were incorrectly left out of the Webpack config,
causing the on-screen keyboard and automatic display resize to fail.
Display of the on-screen keyboard fails without these files as it relies
on loading the on-screen keyboard layouts dynamically via HTTP. Handling
of automatic display resize fails because this relies on a hidden
<object> element containing a blank HTML document, with that document
served statically over HTTP.
The default caret version notation that is already well-established in
the NPM community should be used except where there is reason not to.
Here, it makes sense to use the caret for all dependencies except:
1. "google-closure-compiler", which does not use semantic versioning
and does not guarantee a compatible API. We cannot know that a new
release is expected to be compatible and thus must specify an exact
version.
2. "blob-polyfill", which does not use semantic versioning BUT must
provide a compatible API by its own nature (it is a polyfill for an
API defined by a W3C standard). Any current, stable release should be
OK for "blob-polyfill", hence ">=".
Previously, the angular-touch library provided by AngularJS was used to
allow click interactions with UI components to work on touch devices
without an uncomfortable ~300ms delay. From AngularJS 1.7.x onward, this
feature of angular-touch is no longer present:
https://docs.angularjs.org/guide/migration#ngtouch
This should be OK - modern browsers will now recognize applications
aimed at touch support via the use of the "viewport" meta tag (which we
use), removing our original need for angular-touch. The same goes for
IE10+.
In previous versions of Pickr, catching exceptions during Pickr creation
was sufficient to detect whether Pickr can be used with the current
browser. This is no longer the case, and we must instead rely on the
lack of an "init" event.
This is particularly important for AngularJS 1.8.x and jQuery 3.5.0+,
which will no longer correct this automatically with their HTML
prefilters, resulting in unexpected nesting of tags when the browser
interprets something like "<div/>" as "<div>" (older versions of jQuery
would have corrected "<div/>" to "<div></div>").
See:
* https://docs.angularjs.org/guide/migration#migrating-from-1-7-to-1-8
* https://jquery.com/upgrade-guide/3.5/