Release Notes 4.14
What’s New
New Result Center
With this release, a new table component is introduced that replaces the old result center.
Both the user interface and the API working underneath are completely reworked and provided as new bundles (result-ui
and result-api
).
With the new result center, results from different sources, such as spatial selections, can be displayed in a modernized, highly configurable user interface. Data may be added programmatically as well, allowing an easy integration with other query or selection operations such as the query builder . Actions can be used to interact with individual or multiple entries in the table. With an API it is possible to add actions programmatically. Several actions for standard use cases like "Zoom to" or "CSV Export" are already available.
The bundles resultcenter
and selection-resultcenter
are still available, but we recommend to use the new ones.
Accessibility improvements
The accessibility of UI elements has been improved in several aspects. These include better keyboard navigation options and accessibility for screen readers.
App Editor improvements
Bundles are now suggested in the App Editor in map.apps Manager based on their metadata. Additionally, bundles can be deprecated via metadata and are marked accordingly in the editor. This allows bundle developers to decide how their bundles are handled in the app editor.
Log level for apps
It is now possible to globally configure bundle log levels for the browser console. This configuration can be overridden per app.
Innovations for developers
New request bundle
The bundle apprt-fetch
was introduced to replace the old apprt-request
bundle in upcoming releases.
The new bundle uses the native browser Fetch API instead of Dojo/request.
Typescript
Several bundles have been migrated to typescript resulting in better API documentation and type definitions for bundle developers.
Rollup
All bundles are now built with Rollup, resulting in more specific entry points for bundles. Note, that not all possible files can be imported anymore. This results in more clear, specific and stable interfaces.
Map actions
The map actions for "highlight" and "zoom" are now able to handle multiple geometries. It is also possible to define an order in which different map actions are executed.
Further new functions and improvements
-
The ArcGIS API for JavaScript used by map.apps as technical basis is updated to version 4.24 with this release. This results in numerous improvements and bug fixes in the base technology.
-
A search started via a URL parameter can now display multiple results. This behavior must be enabled by configuration.
-
You can now configure a typing delay for the
search-ui
bundle to prevent too many server requests. -
For TileLayers that offer a query interface, stores (e.g. for search or selection) can now also be registered.
-
A new configuration option
autoExpandLegend
can be used to automatically expand the legend in the TOC.
A complete list of all changes can be found in Changelog.
Update Notes
If you skip several versions during the update, please also follow all update notes of the intervening versions. |
Updated default app
The template for the default app is updated.
If you have not made any customizations, remove the file default-app-4.zip
from the working directory.
The path to this directory is defined in the parameter data.directory.location
in the file %TOMCAT%\webapps\mapapps\WEB-INF\classes\custom-application.properties
.
Editor widget
With the upgrade of the Esri ArcGIS API for JavaScript the editing
bundle of map.apps will provide a completely new Editor widget.
Accordingly, the config option allowedWorkflows:["create"]
is deprecated and should not be used in favor of allowedWorkflows:["create-features"]
.
DGrid
DGrid was affected by a design flaw in its API that could be used as an attack vector for JavaScript injection. The dependency was updated to version 1.3.3 which includes a fix for this problem.
This update comes with a breaking change concerning custom formatters: whereas values
returned from a formatter were previously always interpreted as HTML, return values will now be escaped appropriately by default.
Only when explicitly returning { html: "…string…" }
will the value be interpreted as HTML.
More details are described in this Github issue .
Example:
// Before:
function makeRed(value) {
// Was vulnerable before, will now be escaped:
return `<span class="red">${value}</span>`
}
// After:
function makeRed(value) {
// Ensure that value is either trusted or escaped correctly!
return {
html: `<span class="red">${escapeHtml(value)}</span>`
}
}
Note that map.apps installations are safe against this vulnerability when using default settings:
the Content-Security-Policy headers prevent execution of inline scripts (unsafe-inline
).
seasons-template
Removing Dijit Layout Containers
The Dijit BorderContainer/ContentPane-based layout has been replaced by a modern CSS-Grid .
This gives much more possibilities to customize the layout via CSS (also later via app.css
) without having to change the underlying HTML.
The change described above also removes the CSS classes .dijitContentPane
and dijitBorderContainer
.
If you use an app.css
, check if there are corresponding style statements.
There are two cases to distinguish:
-
The style statement is no longer necessary (paddings of
.dijitContentPane
and.dijitBorderContainer
). -
The style statement no longer applies because it contains
.dijitContentPane
or.dijitBorderContainer
in the selector.
/*before*/
.ctAppRoot .ct-application-footer.dijitContentPane {
height: 80px;
}
/*after*/
.ctAppRoot .ct-application-footer {
height: 80px;
}
Harmonization of attach-points for widgets
The naming of attach-points for widgets has been revised.
As a result, all attach-points are available under the same name in all sub-layouts.
In the mobile landscape layout (mobile_landscape
), the dockingbarLeft
has been renamed to dockingbarBottomLeft
.
You can update app.json
files by search and replace.
Without this adjustment, tools may not be displayed in the mobile landscape view.
Themes and theme-extensions
The naming of the manifest.json
properties CSS-Themes
and CSS-Themes-Extension
was changed to cssThemes
and cssThemesExtension
. The old values are deprecated and should be replaced with the new ones.
This is only relevant when you have custom bundles, that provide their own css, theme bundles or theme-extension bundles.
Discontinued Features
The following features are discontinued with this release:
-
The
aceeditor
bundle has been removed.
Deprecated Features
The following are deprecated and will be removed in a future release. Also note the additional information in the system requirements.
-
map.apps Manager and app configuration:
-
Live configuration is no longer being developed and will be removed in an upcoming release. Instead, use the app-editor to configure apps. You can already hide the live configuration for your users by setting the configuration option
manager.config.editor.showLiveConfigButton
tofalse
. -
Compatibility mode in map.apps Manager has been deprecated since version 4.6 and will be removed in version 4.15.
-
App and app template synchronization has been deprecated since version 4.8 and will be removed in version 4.15. Use domain-bundles instead.
-
The
allowedWorkflows:["create"]
configuration option in theediting
bundle will be removed soon. UseallowedWorkflows:["create-features"]
instead.
-
-
Bundles:
-
The
js-beautify
bundle will be removed in an upcoming release. -
The
app-uitest-support
bundle will be removed in an upcoming release. -
The
omnisearch
bundle is no longer developed. Use thesearch-ui
bundle instead. -
The
resultcenter
andselection-resultcenter
bundles are no longer developed. Use theresult-ui
bundle instead. -
The
locateme-gpsgate
bundle will be removed in map.apps 4.15.
-
-
Development:
-
Support for
module.exports
in JavaScript files will be removed soon. Use the ECMAScript keywordsexport
orexport default
instead. -
To simplify a future migration from AMD to another module system, JavaScript files should be written as ECMAScript modules only, if possible, and then transpiled.
-
Support for
cancel
in return values of store queries (QueryResult) will be removed soon. The goal is to simplify thestore-api.Store
interface. Please use a AbortController , described in Usage of an AsyncStore to cancel pending queries.```js const aborter = new AbortController(); store.query({name: "Test"}, { signal: aborter.signal }) .then((resultItems)=>{ ... }, (e)=>{ if (e.name === "AbortError"){ // aborted } }) // trigger abort aborter.abort(); ```
-
The class
ct/mapping/store/MapServerLayerStore
is replaced by a new classLayerStore
in the agssearch bundle. TheLayerStore
class is stored with an ArcGIS FeatureLayer instance and is therefore consistent with the map content. The agssearch bundle now createsLayerStore
instances by default in theAGSStoreFactory
class and theAutoStoreRegistration
andAGSStore
configuration options. The old behavior can be restored during the transition phase with thelegacyImplementation
option. -
The use of
data-template-window
anddata-template-window-events
in template files will not be supported in the future. Instead, make window definitions inmanifest.json
files. -
The following classes will be removed in one of the next releases:
-
Deprecated class | Alternative |
---|---|
|
native JavaScript Funktionen |
|
apprt-core/async |
|
apprt-core/when |
|
apprt-core/comparators |
|
AGSStoreFactory.createStore |
|
store-api/rest/BaseWriteableRestStore |
|
store-api/InMemoryStore |
|
store-api/ComplexQuery |
|
store-api/utils.createComplexQueryEngine |
|
store-api/rest/RQLStore |
|
store-api/rest/ComplexQueryToSolrQL |
|
store-api/rest/ComplexQueryToSQL |
|
store-api/utils.mergeMetadata |
|
store-api/rest/RQLStore |
|
store-api/SpatialQuery |
|
store-api/rest/SQLStore |
|
store-api/utils |
|
- |
Known Limitations
|
[Map] Zoom via mousewheel does not allow to zoom to the full max or min extent in some situations |
|
[Printing] Printing of line measurement not possible with PrintTask published from ArcMap |
Dependencies
-
Esri ArcGIS API for JavaScript 4.24.7
-
ArcGIS Arcade 1.17
-
Moment.js 2.29.4
-
Vue.js 2.7.8
-
Vuetify.js 1.5.24
Changelog
4.14.3
Fixed Issues
|
[Documentation] Incorrect cross-reference in map.apps documentation ("Filtering of references") |
|
[integration-map] Bundle depends on fixed version |
|
[Layout] Opening a window by toggle tool breaks layout |
|
[Layout] Sublayout templates for iOS Safari and Chrome are not selected correctly |
|
[TOC] Context menu is not fully visible in some situations when opened for the first time |
4.14.2
Fixed Issues
|
[Accessibility] Missing focus indicator in printing dialog |
|
[Accessibility] Poor screenreader support for drop down and update checker buttons in manager |
|
[Accessibility] Some content not well recognizable in high contrast mode |
|
[Accessibility] TOC expand/collapse button loses focus when toggling in screen reader mode |
|
[apprt-fetch] ct-identity token not send on early requests |
|
[Domain Bundles] Timing issue when loading basemaps via domain-system |
|
[Manager] Test bundles not assigned to map.apps product group |
|
[Manager] Update hints for certain bundles may not be displayed |
|
[result-ui] Autofocus opens keyboard on mobile devices |
|
[result-ui] FormattingInfo align center not working |
|
[v-tooltip] Missing z-index for vuetify-tooltips base element |
4.14.1
New Features
|
[Accessibility] Add tooltips in TOC |
|
[Accessibility] Improve layer options menu in TOC |
|
[Accessibility] Increase accessibility for keyboard navigation and screen reader in selection UI |
|
[LayerStore] Add support for Tile-Layers |
|
[TOC] Do not show icon with visibility hints as disabled icon |
|
[TOC] Initially expand the layer legend |
Fixed Issues
|
[apprt-binding] Model change on Mutable when bound to Vue model is not effective under certain condition |
|
[apprt-fetch] Unexpected proxy fallback on same site requests |
|
[apprt-tokens] No token looked up, when relative url is used inside apprt-request |
|
[apprt] Errors during bundle start are not logged |
|
[Coordinate Conversion] Coordinate search not working in some coordinate systems |
|
[jsregistry] Brace detection and comment removal broken by regular expression |
|
[Map] Browser window freezes when switching SRS with WMTS service |
|
[search-ui] Search-UI with main-app-menu is missaligned with default window configurations |
|
[search-ui] Special characters are not supported in searchLabel fields |
4.14.0
New Features
|
[Accessibility] Allow to set alt text for image in banner widget |
|
[Accessibility] Improve HTML element heading structure |
|
[Accessibility] Make login dialog accessible via screenreader |
|
[Accessibility] Make notifier information accessible via screenreader |
|
[Accessibility] Make Vuetify select element readable and useable in a screenreader |
|
[Accessibility] Remove focus from empty tool container in toolbar in window widget |
|
[Accessibility] Use checkboxes instead of buttons in TOC for proper recognition in screen readers |
|
[Accessibility] v-select/v-menu/v-list: backport aria improvements from Vuetify 2.x |
|
[AGS Search] Set default search attribute/ title attribute for search-ui |
|
[App Editor] Exclude bundles from autocompletion in allowedBundles based on bundle metadata |
|
[App Editor] Introduce mechanism to deprecate bundles and show hints in editor |
|
[apprt-core] Add utility to encode/decode base64 strings |
|
[apprt-core] Locale support conversion into Intl.Locale and access to locale string |
|
[apprt-dom] Add getMarginBox, setMarginBox and getMarginSize helpers |
|
[apprt-esri-init] Strip https?:// prefix from proxy rule if configured |
|
[ct-proxy] Support configuration of additional HTTP headers to forward to proxied services |
|
[Documentation] Add reference to bundle "parametersearch" |
|
[Documentation] Describe visibilityMode exclusive |
|
[Documentation] Typo in measurement-3d constraints |
|
[jsregistry] Add 'jsregistry.sourcemaps.enabled' config option to prevent delivering of '.js.map' files |
|
[Manager] Hide Live Configuration by configuration property |
|
[map-actions] Execute actions in order and sequentially by default |
|
[map-actions] Highlight and zoom to actions should react to multiple results |
|
[Map] Allow to disable sandbox flag on WMS layers |
|
[maven-plugin] Add includePattern option to deployApps goal |
|
[Native Export] Add |
|
[Parameter Search] Add config option that only first result is used |
|
[Popups] Allow promise as return value in getTypes() method of popups.ActionFactory |
|
[Result Center] Action to create PDF report |
|
[Result Center] Add results to existing result set |
|
[Result Center] Configure highlight colors |
|
[Result Center] Do not show store selection pane when only results from one store are shown |
|
[Result Center] Ensure that popup is not hidden by result center |
|
[Result Center] Export data from result center |
|
[Result Center] Filter results of one store |
|
[Result Center] Hide empty result topics |
|
[Result Center] Highlight object when hovering table row |
|
[Result Center] Provide API to show results |
|
[Result Center] Remove results from existing result set |
|
[Result Center] Remove single result |
|
[Result Center] Show or hide actions based on rules |
|
[Result Center] Show result items of spatial selection in map |
|
[Result Center] Show results of spatial selection |
|
[Result Center] Zoom to selected items |
|
[Result Center] Zoom to single result |
|
[rollup-build] Emit error when importing a JavaScript module from a bundle that is not listed as a dependency |
|
[Search UI] Add screen reader support for result list |
|
[Search UI] Add tooltip to delete button |
|
[Search UI] Configurable Typing Delay |
|
[System] Update ArcGIS API for JavaScript to version 4.24 |
|
Allow to configure log level for apps globally |
|
Provide license-folder as separate artefact |
|
Support sub path in proxy.use.rules to control more explicitly for which services the proxy is required |
Fixed Issues
|
[AGS Search] Configuring filterOptions has no effect |
|
[AGS Search] popupEnabled on AGSStore triggers default popup on search and spatial selection |
|
[apprt-core/Mutable] A watch handler should not be informed about pending change events |
|
[apprt-esri-init] Error code 'identity-manager:unknown-resource' thrown instead of real request error |
|
[apprt-request] Endless loop with certain URLs when falling back from CORS to proxy servlet |
|
[AppsOverview] Switching to POST leads to failed requests |
|
[ct-proxy] X-Forwarded-For Header has missing space after comma |
|
[Documentation] Incomplete documentation for implementing a custom ToolRuleProcessor |
|
[Domain Bundles] Timing issue when registering AGSStore via domain-system |
|
[Integration API] Map manipulation methods not available on app start |
|
[Layout] Sublayout templates for iPad Safari and Chrome are not selected correctly |
|
[Layout] UI can be broken by tabbing |
|
[Manager] Obsolete $ in bundle delete dialog |
|
[Map] ID of basemap layer is interpreted as well known basemap name |
|
[Map] Inconsistent removal of blocked layers between different browsers |
|
[Map] WMS GetFeatureInfo not routed over /roxy |
|
[Measurement] Copy to clipboard button has no tool tip |
|
[Measurement] Tools not working in map views other than WebMercator or WGS84 based |
|
[OAuth] Cross Domain Login not possible |
|
[Parameter Search] Esri Locator items not correctly displayed |
|
[Reporting] Static report fails for non MapServerLayerStores |
|
[Result Center] No update if values in store change and fireDataChanged is called |
|
[Search UI] Wrong mobile result layout when switching from portrait to landscape |
|
[Search] SearchServiceImpl does not ensure that event service is available |
|
[TOC] supportsSublayerVisibility not handled |
|
[TOC] Tooltip not correctly read from screen reader |
|
Compressed build introduces unsupported javascript constructs |
|
Deadlock on bundle upload |
|
Languages with country codes like de-CH are not supported correctly |
|
LayerStore created for MapServer sublayer does not honor definition expression |
|
Layout issues with tool tips in embedded integration |
|
Whole app does not start if one bundle fails to start |