VisioWeb 1.9.10



Here you will find the change log for the VisioWeb SDK, i.e in visioweb.js.
See CHANGELOG SAMPLE for changes in the sample code.
VisioWeb-1.9.10, 2021/07/26
[fixed] destroy API would not properly wait for internal calls to end and would not return a Promise.
[fixed] phantom bubble not removed when clicking during animation with another place already selected.
[fixed] with an existing bubble, when clicking on another place, the new bubble would not be interactive 
        until next mouse event if second interaction occurred during a camera animation.
[fixed] MultiBuildingView#goTo with 'place' option to be able refer to a Place, a POI or a POF/Footprint.
[fixed] in multi-floor routes, the pins and route segments on other floors (!= current) 
        would no longer be updated (floors were inactive)

VisioWeb-1.9.9, 2021/05/03
[fixed] delayCanvasCreation optimization combined with "split" bundles (separate floors) would lead to anomalies.
[fixed] animated path texture was not disposed of.

VisioWeb-1.9.9, 2021/04/21
[fixed] POI created while delayCanvasCreation option is enabled (default: true) would disappear if edited later.
[fixed] skybox would fail to load properly.

VisioWeb-1.9.9, 2021/03/30
[added] inertia for all gestures (pan, zoom, rotate, pitch). This adds a realistic feel to user
    interactions, as the movement goes on after the user releases the map, smoothly slowing down.
[added] 'style' option to POIs to allow setting font-style and font-weight CSS properties, 
    e.g. 'italic', 'bold' or 'italic bold'
[added] optimization setting to delay canvas creation when using texture atlases to batch render
    icons and texts. Before creating it, once all map content is loaded, its dimensions are re-computed
    to avoid wasting texture space.
    It is enabled by default, but it can be disabled using the optimizations parameters
    when calling mapviewer.initialize or mapviewer.load.

VisioWeb-1.9.8, 2020/10/06
[added] support for bundles composed of separate files for floors.
    This feature requires the web target to be configured adequately from VisioMapEditor.
[added] support for skyboxes chosen from a selection available in VisioMapEditor.
[added] support for 3D models that should remain visible on lower floors (e.g. terrace trees, furniture, etc).
[fixed] inactive state for floors did not mean users could not interact with them
[removed] deprecated APIs addRoutingPath (see addPath instead), addRoutingLink (see addFloorLink instead),
    addPostRenderListener, removePostRenderListener (see mapviewer.on/off('redraw', ...) instead),
    isLoaded (see graphicsLoading instead, beware the reversed logic)

Tested on:
- Google Chrome 86.0.4240.183 Windows 10 19041.572, OK
- Google Chrome 86.0.4240.111, Linux Desktop, OK
- Google Chrome 86.0.4240.193, MacOSX 10.15.7 (19H2), OK
- Google Chrome 86.0.4240.185, Android 10, OK
- Google Chrome 86.0.4240.93, iOS 14.1, OK
- Mozilla Firefox 82.0.3 (64-bit), Windows 10 19041.572, OK
- Mozilla Firefox 82.0 (64-bit), Linux Desktop, OK
- Mozilla Firefox 81.0.2 (64-bit), MacOSX 10.15.7 (19H2), OK
- Safari 14.0 (15610., 15610), MacOSX 10.15.7 (19H2), OK
- Safari Mobile 14, iOS 14.1, OK
- Microsoft Edge 44.19041.423.0, Microsoft EdgeHTML 18.19041, Windows 10 19041.572, OK

VisioWeb-1.9.7, 2020/05/08
[added] pathQuality option to visioweb.Route constructor. It helps reducing the number of faces
    generated for route paths. 
    Default value (0.8) introduces an optimization. Set it to 1 to get the previous behavior.
[added] load and setupView APIs to enable developers to initialize VisioWeb's Mapviewer in two steps.
    > mapviewer.load(parameters).then(() => mapviewer.setupView(container))
    is the same as
    > mapviewer.initialize(container, parameters) // preserved for backward compatibility
    This allows developers to:
    - use VisioWeb in a sort of headless mode, by querying the map data without showing the map view.
    - prepare the map data before starting to render, using APIs that are available right after calling load.
- the following APIs won't be available before initializeCompleted is triggered (i.e. setup or initialize has finished):
    start, resize, animateValue,
    addFloorLink(addRoutingLink), addPath(addRoutingPath), changeFloor, getCurrentFloor,
    convertPointToScreen, convertScreenToPoint, getViewpointPosition,
    setSkybox, setupMultiBuildingView, generatePOIClusters
- the following APIs will be available before initializeCompleted is triggered but their execution will be delayed 
to the end of the initialization process:
   addPOI, setPlaceColor, setPlaceIcon, setPlaceName

[added] unload and destroyView APIs to enable developers respectively to unload the map data or 
    destroy the view while keeping map data. Existing destroy API calls both unload and destroyView.
NB: unload, destroyView and destroy now return a Promise, resolving when data is properly unloaded 
    and/or view properly destroyed.

[deprecated] addPostRenderListener, removePostRenderListener, they were redundant with .on('redraw', ...).
[deprecated] isLoaded API and replaced it by graphicsLoading (beware the reversed logic) 
    to clarify its role w.r.t. actual map data loading workflow.
[renamed] addRoutingPath and addRoutingLink into resp. addPath and addFloorLink to make them more generic.
[renamed] 'MultiBuildingView.exploreStateWillChange' and 'MultiBuildingView.exploreStateChanged' 
    into 'exploreStateWillChange' and 'exploreStateChanged' for consistency's sake.
[removed] possibility to trigger base event types like 'initializeCompleted' or 'exploreStateChanged'.
    These can now only be triggered by VisioWeb. Developers still can trigger/listen to their own custom events.
[removed] getViewpointFromPositions API which was deprecated since 1.9.0. Please use getViewpointPosition instead.

VisioWeb-1.9.6, 2019/12/10
[added] getPlaceName and getPlaceIcon API to retrieve a name or icon url that has been set for a particular ID
    or just to check if it has been set.
[added] 'floorFilter' option to Route constructor. It enables developers to trigger a special display mode
    when a route is computed: floor involved or traversed by the route will be displayed in a multifloor-like
    stack while remaining consistent with the initial view type (singlefloor, multifloor, multibuilding).
    Everything comes back to normal upon hiding/removing the route.
[added] argument to displayPrevInstruction/displayNextInstruction to allow developers to disable the default camera
    animation when stepping in the navigation instructions.
[added] 'multifloorConfig' option to Mapviewer#setupMultiBuildingView. It enables developers to activate some
    user interactions (click, pitch, rotate, zoom) that were disabled by default in 'building' mode when choosing
    'multifloor' view type.
[added] 'stackGap' option to Mapviewer#setupMultiBuildingView to override the floor per floor stackGap values.
    Useful when integrating the same map in an interactive kiosk and a website. This parameter is also available
    as a public property in MultiBuildingView, thus enabling developers to edit/override the stack gap dynamically.
[added] pitch interaction for touch-enabled devices.
[fixed] in multifloor mode, it was impossible to click to go to floor mode on touch-enabled devices.
[fixed] on touch-enabled devices, a two-fingers interaction would sometimes cause a drifting of the viewpoint.
[fixed] on touch-enabled devices, when setting a first finger on the screen then another would cause a jump of the viewpoint.
[fixed] multiline labels: line splitting went one step too far in some cases.

VisioWeb-1.9.5, 2019/09/03
[fixed] creation of some POI referencing an image that is not loaded yet would result in a shifted position
[fixed] when updating some POI using options or setPlaceName, some text-related options (family, textTextureHeight, etc) 
    would be ignored if provided as a property of a parameters object.
[added] zoomScaleVisible option to allow developers to keep showing texts at the last possible scale 
    when the zoomScale value makes them exceed their assigned area.
[fixed] multiline computation when using the default behavior (i.e. without zoomScale)
[fixed] POI would be untimely culled after changing its position.
[fixed] POI using selector option would not be shown back after being hidden/culled.
[fixed] Texture Atlas for icons would not be properly filled in some cases

VisioWeb-1.9.4, 2019/07/16
[fixed] Routing paths would yield overdetailed geometry with default setting.
[added] pathSegments option to Route constructor to enable developers to tweak the routing path's triangulation.
[fixed] cluster generation would ignore POIs initial altitude.
[fixed] intermediate clusters were not shown temporarily when hiding children recursively.
[fixed] generating clusters with POIs perfectly aligned on one axis would not work as expected.
[removed] developers don't need to provide the position along with POI instances when generating clusters.
[fixed] getFootprint and getFootprintPoints now return a single-point footprint or array for POI-only IDs 
    instead of false or undefined.

VisioWeb-1.9.3, 2019/05/21
[new] APIs for Navigation: getInstructionHeading, getInstructionViewpointPosition.
[new] Navigation#displayNextInstruction/displayPrevInstruction now return a Promise 
    to allow developers to trigger actions after the camera animations.
[new] Route#show now returns a Promise to delay further actions to next frame.
[new] Route initialization now relies on track_arrow.png for the track aspect.
[new] setupNavigationTranslator API to create the NavigationTranslator instance.
[fixed] Mapviewer#show/hide methods now use CSS visibility property instead of display.
[renamed] Mapviewer#unloadMap into Mapviewer#destroy and improved memory management.
[added] options to customize the route aspect, in order to apply VisioMove Essential design guidelines for routes.
[added] support for HTML "tags" to illustrate floor transitions.
[moved] Navigation instantiation inside Route initialization.
    A Navigation instance is created if navigation data is available.

Migrating from 1.9.1 to 1.9.3:
    - Route initialization: make sure to check the new sample code and compare it to your own, especially the Route options:
    (see currentRoute = new visioweb.Route(mapviewer,, options);
    - Important note: new implementation for Mapviewer#destroy API (formerly named unloadMap) implies that
    Mapviewer instance should be re-initialized after this method has been called.
    The recommended path is now to use destroy/initialize rather than unloadMap/loadMap when integrating VisioWeb
    in a multi-page mobile application for example.

VisioWeb-1.9.2, 2019/05/02
[fixed] calling Mapviewer#unloadMap when some models weren't finished loading could lead to unhandled exceptions/crashes.

VisioWeb-1.9.1, 2019/04/15
[new] API: Mapviewer#generatePOIClusters to compute a hierarchy of clusters given a set of POIs.
[new] class POICluster to enable developers to manage the resulting clusters.
[fixed] POI with text and image, using zoomScale could not be initially hidden.
[fixed] Navigation#displayNextInstruction/displayPrevInstruction would throw an exception
    when multiBuildingView is not initialized.

VisioWeb-1.9.0, 2019/02/14
[new] VisioWeb's library is now packaged as a UMD module.
[renamed] VisioWeb's library file from vg.mapviewer.web.js into visioweb.js.
[renamed] VisioWeb's main namespace from vg.mapviewer.web (or even older vg.mapviewer) into visioweb.
[renamed] getViewpointFromPositions into getViewpointPosition for consistency w.r.t. its return type (position).
[fixed] Camera's maxRadius did not take into account the 'limits' footprint.
    If such a footprint exists, the maximum radius is computed from the optimal viewpoint to see
    the area covered by those limits. Otherwise it's computed as before using the canvas' size.
[added] Route, Navigation, NavigationTranslator classes inside VisioWeb. 
    These private classes correspond to the public classes MyRoute, MyNavigation, MyNavigationTranslator
    that were provided as sample code in previous versions of VisioWeb.
    They come with a comprehensive set of APIs that will most likely cover any application use case.
[added] Utils.getLanguageMatch to match a desired language (e.g. the browser's window.navigator.language)
    with the ones available in the map data or in NavigationTranslator.
[added] keepAspectRatio option for POIs to enable preserving the aspect ratio for non-square images 
    without having to know their dimensions beforehand.
[added] show/hide APIs to Mapviewer to enable developers to easily and safely handle visibility of the map view.

Tested on:
- Chromium 71.0.3578.98, Ubuntu 18.04 (64 bits) Desktop, OK
- Google Chrome 72.0.3626.109, Windows 10 17134.523 Desktop, OK
- Google Chrome 72.0.3626.109, MacOSX 10.14.2, OK
- Google Chrome 72.0.3626.105, Android 8.0, OK
- Google Chrome 72.0.3626.74, iOS 12.1.4, OK
- Mozilla Firefox 65.0.1, Windows 10 15063.332 Desktop, OK
- Mozilla Firefox 65.0.1, MacOSX 10.14.2, OK
- Safari 12.0.2 (14606.3.4), MacOSX 10.14.2, OK
- Safari Mobile 12.1.4, iOS 12.1.4, OK
- Microsoft Edge 42.17134.1.0, Microsoft EdgeHTML 17.17134, Windows 10 17134.523, OK
- Microsoft IE 11 11.523.17134.0, Windows 10 17134.523, OK

VisioWeb-1.8.12, 2018/12/05
[fixed] selector POIs were not properly updated when editing their position.

VisioWeb-1.8.11, 2018/10/17
[fixed] selector POIs were not properly hidden when changing floor.
[fixed] CameraDrivenExplorer was sometimes made useless by unterminated animation.

VisioWeb-1.8.10, 2018/06/20
[fixed] toggling rapidly between global and floor mode could cause target floor to disappear.
[fixed] text rendering inconsistency when batching text POIs.
    This technique consists in grouping objects to improve framerate. It is enabled by default.
[fixed] mapName was not properly set for some map bundles.

VisioWeb-1.8.9, 2018/05/09
[added] support for 'limits' footprint which allows to limit the camera moves
    from VisioMapEditor.
[added] getMapName API to obtain the complete map's name in VisioMapEditor (domain/map)
[added] support for a hybrid animation type when changing floor : they can now be animated
    both in opacity and translation with animation type 'both'.
[fixed] floor animations were not smooth enough.

VisioWeb-1.8.8, 2018/03/26
[added] support for an orthographic camera type.
[added] support for a new kind of floor animation when selecting floors. You can now 
        choose to make them appear/disappear by animating their opacity rather than sending
        them upwards or downwards.
[added] support for simple map vizualisation : display a 2d tiled raster generated from
        a PDF or DWG file.
[added] support for offline usage. It is now possible to load a map from a local directory 
        without a webserver, provided that the browser's same origin policy is disabled.
[fixed] camera radius was reset to maximum radius upon window resize.
VisioWeb-1.8.7, 2018/02/27
[fixed] surfaces were not interactive on some configurations (e.g. iOS through a cross-platform framework).

VisioWeb-1.8.6, 2018/02/14
[fixed] initial view would appear shifted in some rare cases with a square footprint and
        viewpoint aligned on the footprint's axis.
[fixed] statistics were not properly logged.
[fixed] minor issues in statistics logging.
[fixed] models were not properly removed.
[renamed] getPoi, getPois into getPOI, getPOIs for consistency.
[renamed] getPoint, getPoints into getPOF, getPOFs (as in Point Of Focus) for consistency and clarification.
[renamed] getAllPlaces into getPlaces for consistency.

Note: getPoi, getPois, getPoint, getPoints and getAllPlaces are still available
but will be removed in version 1.8.7.

VisioWeb-1.8.5, 2017/12/19
[added] support for maps built using BufferGeometry instead of regular Geometry instances.
        Switching to BufferGeometry allows to reduce the memory footprint of VisioWeb.
[added] setSkybox API to allow developers to specify a skybox for their scene.
[removed] highlight and removeHighlight. Please use setPlaceColor and resetPlaceColor which
        where introduced in VisioWeb 1.8.3.

Migrating from 1.8.4 to 1.8.5
    - Replace calls to highlight and removeHighlight API by setPlaceColor and resetPlaceColor.

VisioWeb-1.8.4, 2017/11/07
[fixed] mapviewer symbol undefined in some application uses

VisioWeb-1.8.4, 2017/11/06
[added] viewType concept to MultiBuildingView:
        - singlefloor, one floor at a time displayed within "outside" if it exists
        - multifloor, for a given building, shows all floors in a vertical carousel
        - multibuilding, the default view where floors are shown stacked upon lower floors
[removed] uses of jQuery on private side of VisioWeb
[replaced] deferred usage by Promise pattern using Bluebird library. Some APIs, like mapviewer.initialize, 
        mapviewer.goTo, mapviewer.computeRoute, multiBuildingView.goTo will therefore return Promise objects
        rather than jQuery.Deferred.
[renamed] CameraDrivenExplorer public properties from exploreFromUndergroundFloor and maxExploreRadius
        to panFromUndergroundFloor and maxExploreDistance. The first is meant to better describe that
        users are able (or not) to explore other buildings from underground floor. Whatever the value
        of this flag, users are able to "zoom out" from underground floors and display outside view.
        The second change is meant to improve consistency with VisioMove Essential.

Migrating from 1.8.3 to 1.8.4
    - .done/.fail jQuery Deferred handlers -> .then/.catch
    - CameraDrivenExplorer.exploreFromUndergroundFloor -> CameraDrivenExplorer.panFromUndergroundFloor
    - CameraDrivenExplorer.maxExploreRadius -> CameraDrivenExplorer.maxExploreDistance

VisioWeb-1.8.3, 2017/06/22
[renamed] MyMultiBuildingView into MultiBuildingView
[moved] MultiBuildingView on private side of VisioWeb
[added] CameraDrivenExplorer class to handle "zoom storyboard" mechanics
[added] skywalk/ramp management: on multi-building maps, buildings connected to current floor by skywalks or 
        ramps will now be automatically activated and the connected floor will be displayed
[added] support for animated models and models with animated textures
[added] getFootprintPoints API to mapviewer. Useful to compute viewpoints with getViewpointFromPositions.
[added] isInside2D and isInsideFootprint APIs to mapviewer. Useful for geofencing use cases.
[renamed] highlight and removeHighlight into resp. setPlaceColor and resetPlaceColor
        to improve consistency with VisioMove API

Migrating from 1.8.x to 1.8.3
    - New APIs were introduced for MultiBuildingView and CameraDrivenExplorer.
Tested on:
- Google Chrome 59.0.3071.86, Windows 10 15063.332 Desktop, OK
- Google Chrome 59.0.3071.86, Windows 8.1 Pro Desktop, OK
- Google Chrome 58.0.3029.110, MacOSX 10.12.5, OK
- Google Chrome 58.0.3029.83, Android 7.0, OK
- Google Chrome 58.0.3029.83, iOS 10.3.1, OK
- Mozilla Firefox 49.0.1, Windows 10 15063.332 Desktop, OK
- Mozilla Firefox 53.0.3, MacOSX 10.12.5, OK
- Safari 10.1.1 (12603.2.4), MacOSX 10.12.5, OK
- Safari Mobile 10.3.1, iOS 10.3.1, OK
- Microsoft Edge 40.15063.0.0, Microsoft EdgeHTML 15.15063, Windows 10 15063.332, OK
- Microsoft IE 11 11.332.15063.0, Windows 10 15063.332, OK
- Microsoft IE 11 11.0.9600.1866, Windows 8.1 Pro Desktop, OK
- Microsoft Edge 38.14393.1198.0, Microsoft EdgeHTML 14.14393, Windows 10 Mobile 10.0.14393.1198, OK

 Known Issues:
 - In multi-floor compatibility mode, on touch devices, a double tap is necessary 
 to go from building mode to floor mode. Potential workaround: manually detect a click on the container
 and force floor mode if the currentExploreState (MultiBuildingView.getExploreState()) is in building mode.

VisioWeb-1.8.2, 2017/03/22
[fixed] some models are turned upside down or 90°

VisioWeb-1.8.1, 2017/03/20
[added] automatic multiline management for labels. See 'multiline' option for POIs.
[added] uniform 3d character size through zoomScale options. When using zoomScale, POI's scale depends on
camera's radius.
[added] support for multiple footprints for a given ID.

[fixed] flipped labels with non-zero vertical alignment are shifted.
[fixed] mouse events are broken after some pan actions in multi-floor mode.
[fixed] 3D models packaged for target version 1.7.15 are not properly loaded.

 Known Issues:
 - Places are not clickable on iOS8. The fix introduced in 1.7.24 has side-effects on multi-floor mode.
VisioWeb-1.8.0, 2016/11/30
[renamed] VisioKiosk into VisioWeb to acknowledge its growing usage in web applications, websites in addition to
    interactive kiosks which were its original target. 
    Note: the sdkType value expected for bundles compatible with VisioWeb is now 'web' instead of 'kiosk'.
    However, to ensure backward compatibility, VisioWeb-1.8.0 will also accept bundles whose sdkType is 'kiosk'.

VisioKiosk-1.7.24, 2016/10/05
[fixed] Calling mapviewer.once('initializeCompleted',...) inside a handler mapviewer.once('initializeCompleted',...)
 would not be called (this only applies to sticky triggers). (#7841)
[fixed] Images whose orientation depends on camera aren't displayed at startup. (#7862)
[fixed] Places are not clickable on iOS8. (#7899)
[fixed] Elements behind non-clickable elements should not trigger click (mouseup) events (#7820)
[fixed] Routing from same start and destination gives an error, should return a simple route (#6945)
[fixed] Routing to/from a position does not work (#7901)

[added] Support for building models generated from VisioMapEditor (as opposed to ones designed by hand) (#7647)
[added] Support for background specified from VisioMapEditor (#6912)

[update] Performance improvement for POIs containing images as well as camera facing.
   6x frame rate improvement if you have ~1000 camera facing POIs on low end devices. (#7706, #7842)

 Known Issues:
 - POIs are not depth sorted (for performance reasons), thus it is possible for an icon to appear in front
   even if it is behind.

VisioKiosk-1.7.23, 2016/05/26
[fixed] javascript error when changing options of a empty POI (no images, text, model or selector). (#7827)

VisioKiosk-1.7.22, 2016/05/20
[fixed] Wall rendering to take into account style parameters, thus same look as VisioMove. (#7508)
[fixed] always removed the first handler of that type. (#7818)

[added] API mapviewer.once(), similar to mapviewer.on() but removes handler after first execution.
        reduces memory consumption and simplifies removing handler. (#7657)
[added] API mapviewer.getFootprints(), to be able to obtain all available footprints. (#7819)
[added] API mapviewer.getPoints(), to be able to obtain all available point data. (#7819)

[update] Performance improvement when creating (via setPlaceName or addPOI) and displaying
         large number of labels (2x load time, and 4x frame time on some datasets). (#7706)

VisioKiosk-1.7.21, 2016/04/27
[added] and camera.goTo can take position without radius, eg. ...position = {x:0,y:0} (#7753)

[fixed] animating the value of a POI whose image is only reference one makes image not visible. (#7790)
        eg. poi = mapviewer.addPOI({position:, overlay: true, url: '../media/test.png', fixed: true})
            mapviewer.animateValue(0,100,{step:function(v) { poi.options('heading',v);}})
[fixed] Model visibility did not get updated sometimes at load time.
[fixed] Model (old format) not visible.
[fixed] removed: certain map labels got set with their id when the map was loaded.
        ie. a Label that does not had an associated Place. (#7797)
[fixed] onObjectMouseUp called twice on Win10 Chrome 49. (#7799)
[fixed] On IE11 Win7, Win8.1 desktop and Firefox we get two onObjectMouseUp events when clicking on a place. (#7384)
[fixed] MouseOver and MouseOut events on Touch Devices when not using a mouse. (#7812)
[fixed] Google Chrome 50.0.2661.86 (64bit MacOSX), icons sometimes fail to load. (#7815)
[fixed] Icons not displayed on some large datasets. (#7813)
[fixed] Changing options on Path after its removal, caused high CPU usage. (#7814)

[update] documentation on mapviewer.addPOI options.scale and options.icon_scale.
[update] (and now always >= 0 and < 360. (#7816)
[update] mapviewer postRenderListeners and animateValue() are now called even if mapviewer's container is not attached to DOM.
[update] performance (20%) of camera facing icons.

Tested on (the official target are kiosk running Chrome or IE11)

- Firefox 45.0.2, MacOSX 10.11.4, OK
- Firefox 46.0, MacOSX 10.11.4, OK
- FireFox 46.0, Windows 8.1 Pro 32bit 5 touch points, No pinch/zoom with touch.
- Firefox 46.0, Windows 10 10586.104 Desktop, OK
- Chrome (64-bit), MacOSX 10.11.4, OK
- Chrome m, Windows 8.1 Pro 32bit 5 touch points, OK
- Chrome Android 4.4, OK
- Edge 25.10586.0.0, Windows 10 10586.104 Desktop  OK
- IE11 11.0.9600.18204. Windows 7 SP1 , OK
- IE11 Mobile, Windows Phone 8.1, OK
- IE 11 11.0.9600.17498, Windows 8.1 Pro 32bit 5 touch points, OK (with known issues of IE11)
- IE11 Mobile, Windows 10 Mobile, Nokia Lumia 735, 10.0.14295.1000 OK
- IE 11.103.10586.0, Windows 10 10586.104 Desktop, OK
- Safari Mobile 9.1.3, iOS 9.1.3, OK
- Safari 9.1 (11601.5.17.1), MacOSX 10.11.4, OK (rare issues with WebGL texture limitations, test 11)

Known Issues:
- Transparency issues between some overlapping icons. (#7345)
- On Windows Touch devices, pinch and rotate gestures don't work with FireFox.

VisioKiosk-1.7.20, 2016/03/31
[fixed] WebGL warnings, and not showing of labels on non-first instances.
        WebGL: INVALID_OPERATION: bindBuffer: object not from this context when using multiple viewers. (#7438)

VisioKiosk-1.7.19, 2016/03/11
[added] API mapviewer.isLoaded and mapviewer.getLoaderStatistics to determine if all models and textures are loaded. (#7446)
[added] API mapviewer.animateValue() which synchronises step function with screen refresh for better fluidity. (#7510)
        This is preferred over jQuery.animate which may call updates before they have been rendered on the screen (thus wasteful)
[added] API mapviewer.requestRedraw() to draw new frame and trigger postRenderListener listeners. (#7811)
[added] API mapviewer.getPoint() and mapviewer.getFootprint() also return .floor attribute. (#7629)
[added] POI.options can take attribute object poi.options({text: 'toto', visible: true}) as well as
        poi.options('text','toto'). (#7634)
[added] mapviewer.setPlaceName()/setPlaceIcon() can take options object like {text: 'toto', visibilityRampStartInvisible: 500})
        This can make labels visible when close, thus increasing frame rate. (#7635)
[added] API mapviewer.addPOI() can take options.heading (if you want your label facing north), and updated documentation
        on options.angle. (#7655)
[added] callback mapviewer.addPostRenderListener can be also accessed via mapviewer.on('redraw',function) API. (#7658)

[fixed] Starting camera position is not correct for very tall views. (#7438)
[fixed] Path.setInterpolatedStartEnd() memory leak. (#7439)
[fixed] mapviewer.addRoutingLink() may not be displayed on the next frame. (#7442)
[fixed] POI.remove() makes unavailable other POIs with the same id via mapviewer.getPoi(). (#7440)
[fixed] multibuilding goTo: does not take options.animationDuration into account. exploreState .noViewpoint not documented.
[fixed] multibuilding animationDuration should be 0 when using Web2D. (#7509)
[fixed] calling mapviewer.removePostRenderListener() from a postRenderListener could pose a problem in certain cases. (#7514)
[fixed] creating a Path with speed > 0 and not initially visible, we'll break render on demand (consume CPU). (#7583)
[fixed] mapviewer.getFloors() are sorted in ascending order of height. (#7630)
[fixed] Memory leak in setPlaceName, and POI.options('text'). (#7631)
[fixed] Windows Mobile 10, interactivity limited during display of animated route. (#7632)
[fixed] Warning .msie undefined on jquery.bbq.min.js when using more recent jQuery. (#7636)
[fixed] Camera can be unstable at = -90 and labels do not flip properly. (#7644)
[fixed] MyNavigation.js does not use the request language in the route request. (#7664)
[fixed] Updating also updates the far plane. (#6838)

[update] API mapviewer.trigger can send sticky notifications, these notifications will be transmitted to any .on handler
         registrations done later, this applies to 'resize', 'initializeCompleted' and 'initializeFailed' notifications.
         Any mapviewer.on('initializeCompleted') will be called on success. (#7546)
[update] optimized POI.options('position', new position). (#7443)
[update] major performance improvements (1.5-2x) rendering time, especially on low end platforms and in global view. (#7507)
[update] mapviewer.common.multibuilding.js with mapviewer.animateValue(). (#7510)
[update] A transparent texture is used while an image or model loads (and in case it fails), so it will not appear black
         before the update. (#7519)
[update] API mapviewer.computeRoute, parameter: pRouteRequest.navigationParameters.firstNodeAsIntersection (default false)
         Treats the first node (not the start) of the first instruction as an intersection after the start or a waypoint,
         used to force the generation of an instruction turn right or left when you leave a POI. (#7640)
[update] MyNavigation.js to display "using escalator|stairway|lift" when changing floors. (#7483)
[update] mapviewer.addPOI parameter options.size renamed to options.textTextureHeight. (#7696)

Migrating from 1.7.18 to 1.7.19
- update vg.mapviewer.kiosk.js to use the new APIs and to get better performance
- update jquery.bbq.min.js to avoid getting some warnings on modern browsers.
- update MyNavigation.js (as well as vg.mapviewer.kiosk.js) if you want to take display 'using stairways' for
  navigation instructions.
- update and change mapviewer.common.js if you want to change some of the parameters of mapviewer.setPlaceName().

Known Issues:
- Transparency issues between some overlapping icons. (#7345)
- On IE11 Win7, Win8.1 desktop and Firefox we get two onObjectMouseUp events when clicking on a place. (#7384)

VisioKiosk-1.7.18, 2016/01/05 (hotfix)
[update] queryNearPlaces documentation.

VisioKiosk-1.7.18, 2015/12/22

[added] mapviewer.computeDistance(point1,point2) to compute distance in meters between two points. (#7411)
[added] mapviewer.getRoutingNode(position...) result contains .position which is the original position and .routePosition
        which is position on routing network. (#7412)
[added] mapviewer.getRoutingNode(id...) result contains .id which is poiID, which can be used after a computeRoute
        to determine that the routeParameters.dst[3] corresponds to poiID routeParameters.dst[3].id, (#7412)
[added] mapviewer.getRoutingNode() result contains .floorName to determine exact layer of routing node. (#7412)
[added] mapviewer.computeRoute result has .destinationIndices to quickly find out the actual visit order or closest destination. (#7413)
[added] mapviewer.computeRoute destinationOrder 'closest' to compute the closest (be fastest or shortest) among many destinations.
        (#7413). For example:
        mapviewer.computeRoute({src: 'B2-UL0-ID0087',
                                dst: ['B4-UL05-ID0028','B4-UL05-ID0027','B4-UL05-ID0029'],
                                destinationOrder: 'closest'})
                                  console.log('The closest place is '+ request.dst[ data.destinationIndices[0] ] );
[added] mapviewer.computeRoute navigation part of result contains the original route in attribute .route, used in
        conjunction with the destination index allows to determine the id of intermediate destinations. (#7419)
[added] mapviewer.computeRoute result contains .request which contains the request parameters for the route.
        This is useful for determining the destinations (attribute request.dst).
        This allows to easily determine the poiID of different destinationIndices. (#7419,#7424)
[added] mapviewer.queryNearPlaces(position, parameters)  array {.id, .distance, .angle} of places near that position. (#7422)
[added] mapviewer.on('resize', function(ev) { ev.args.mapWidth, ev.args.mapHeight}) allows you to listen to map size changes. (#7423)
[added] Multi-floor compatibility mode (for maps that don't have multi-building configured within MapEditor) to be rendered
        with a stack view similar the multifloor version used in version 1.7.16 but using the VgMultiBuildingView framework. (#7426)

[fixed] Within the result of mapviewer.computeRoute(), the instruction's .length can be incorrect when using map with
        target 1.7.9 (map.svg).  The duration will be correct. (#7393)
[fixed] customPostManipulatorListener not working with middle and right mouse button. (#7420)
[fixed] old map formats (map.svg) to have the correct POI altitude. This fix can increase map load time.
        Workarounds to disable the correction are: using mapviewer_parameters.optimizations = {load1: true}; OR
        if using SDK 1.7.14 or greater, make sure your map is targeted to 1.7.14, ask your account manager for details. (#7432)

[update] MyNavigation.js to display waypoint and destination name using updated attributes in version requires 1.7.18. (#7419)
[update] MyNavigation, it will no longer display the near description (for example "near ID-23") if it cannot determine the name
         (you can uncomment one line for debugging).
[update] MyRoute.js use_links and add_go_back_pois to be used via prototype variable.

Migrating from 1.7.17 to 1.7.18
- update vg.mapviewer.kiosk.js if you want to use the new APIs
- update MyNavigation.js (as well as vg.mapviewer.kiosk.js) if you want to take display the placeIDs of the intermediate stops and destination.

Known Issues:
- Transparency issues between some overlapping icons. (#7345)
- On IE11 Win7, Win8.1 desktop and Firefox we get two onObjectMouseUp events when clicking on a place. (#7384)

VisioKiosk-1.7.17, 2015/11/18
IMPORTANT: if you are using Map Bundles that target VisioKiosk 1.7.14 (map.json) and your map has "camera facing" icons
        This SDK matches their display to that of VisioMove.

This version introduces Multi-Building Sample! (the previous multifloor has been removed)

[added] API mapviewer.computeRoute, new parameter: pRouteRequest.routingParameters.remapResultingModality
        Allows you to remap a modality, like "Travelator", or "vipline" to say "pedestrian" to avoid generating
        extra routing segments, and routing instructions for getting on and off a modality. (#7293)
[added] API mapviewer.computeRoute, new parameter: pRouteRequest.navigationParameters.algorithm='auto']
        by default 'auto', otherwise 'originalAlgorithm' or 'intersectionAlgorithm'
        'auto' will use 'intersection' algorithm where the intersections are explcitly described by the map if
        the 'intersection' attribute exists on the map (see mapviewer.getRoutingAttributes())
        otherwise it will use the 'original' algorithm. (#7293)
[added] API mapviewer.computeRoute, new parameter: pRouteRequest.navigationParameters.firstNodeAsIntersection (default false)
        Treats the first node (not the start) of the first instruction as an intersection,
        used to force the generation of an instruction turn right or left when you leave a POI. (#7293)
[added] API mapviewer.getViewpointFromPositions(), can take options.pitch and options.heading to compute
        best viewpoint from a different heading/pitch without modifying the camera.
[added] API mapviewer.getExtraData(), which returns any extra data embedded in the map, like venue layout for Multibuilding.
[added] API Floor.setAutoUpdateLOD, Floor.isAutoUpdateLOD to be able to control auto LOD per floor. (#7328)
[added] API Floor.setContentEnabled, Floor.isContentEnabled to be able to show/hide all POIs on a given floor. (#7335)
[added] API mapviewer.getPoi() and mapviewer.getPois(). These where used via "POI" plugin without full support. (#7364)
        if your code has mapviewer.plugin('poi').getPoi/s, please replace with mapviewer.getPoi/s
[added] mapviewer.addPOI option.clickable, if set to false, it will not call any onObject functions when clicking/mouseover the object. (#7365)

[fixed] Clicking on unnamed icons/labels/models (with names like mapIcon*) will not trigger callbacks. (#7365)
[fixed] Uniform behavior to VisioMove, shop labels are not clickable, only surface underneath.
[fixed] Behavior of map.json (VisioKiosk 1.7.14+) camera facing icons to match the of VisioMove
        to avoid being covered by the surface below. The POI will be slightly raised over the surface. (#7331)
[fixed] addPOI with .text was not taken into account overlay option. (note default is overlay=true for old maps, non-overlay for 1.7.14 maps and above). (#7314)
[fixed] changing poi options (e.g poi.options('text','foo')) on an invisible POI makes it visible. (#7332)
[fixed] Only on multi-point routes: Individual instruction.time not correct for instructions not belonging to first destination)
        Instruction.totalTime not correct, although route.duration is correct. (#7313)
[fixed] if mapviewer.on() handler returns false, it will not call other .on handlers or event handler (in the case of "mouseup" and "floorWillChange")
        mapviewer.trigger() will return false, if any handler returned false. (#7330, #6227)
[fixed] onObjectMouseUp/onObjectMouseOver/onObjectMouseOut events only sent to one object which is either a POI or a Place.
        It is the closest object to the camera, or an object drawn with "overlay: true" at that location.
        mouseOut event will be sent if the object ID (be it a Place or a POI) changes,
        this means that mouse over a Place and a POI with the same ID will not trigger a mouseOut event.
        Note in previous versions is was possible to receive an Array of objects. (#7329, #6206)

[update] mapviewer.computeRoute() updated default navigation parameters:
         mergeFloorChangeInstructions is now default to true and
         modalityParameters..straightAngleThreshold is set to 30
         modalityParameters..nearPlacesThreshold to 10
         to reduce number of instructions. (#7343)
[update] mapviewer.computeRoute() documentation
[update] MyNavigation.js to use the navigation parameter for mergeFloorChangeInstructions that was used by the system.
         this parameter has to match to generate the proper navigation instruction translation.
[update] mapviewer.initialize options.path will try first the given path (be it .json or .svg), and if not found, will try the other as a fallback before giving up. (#7334)
[update] mapviewer.common.js:openPlaceBubble to open bubble on Place or POI.
[update] mapviewer.kiosk.js:onObjectMouseUp() cleanup since mouse issues have been fixed.
[update] MyRoute.js options use_links (default false), and add_go_back_pois (new default false, shows POI to be able to click the floor the route comes from). (#7337)
[update] MyNavigation.js to see whole instruction, and hook for multibuilding for better stepping through instructions, fixed minor bug cStringTable without this
         as well as handling Waypoints when using mergeFloorChangeInstructions. (#7386)

Known Issues:
- Transparency issues between some overlapping icons. (#7345)
- On IE11 Win7, Win8.1 desktop and Firefox we get two onObjectMouseUp events when clicking on a place. (#7384)

Migrating from 1.7.16 to 1.7.17
- update mapviewer.kiosk.js
- navigation parameters: the default value for mergeFloorChangeInstructions has changed.
  If you do nothing, this change will not take into effect since this value is set already in
  mapviewer.common.js to false.
  mapviewer.common.js has been updated not to set these values and let the system use the defaults.
  MyNavigation.js has been updated so it can use the value that was used by the SDK (regardless of default or passed in).
  If you want to take advantage of this update both mapviewer.common.js and MyNavigation.js.
- MyRoute.js can be updated to avoid having certain POIs show a bubble when clicked.

Tested on (the official target are kiosk running Chrome or IE11)
- Windows Phone 8.1 Update 2 Lumia 640 IE OK for small dataset, multibuilding dataset too large.
- Windows 10, Edge, 20.10240.16384.0 on Touch Screen, OK
- Windows 10, IE11 11.0.10240.16431 on Touch Screen, OK
- Windows 8.1 IE11 11.0.9600.17905, on Touch Screen, OK
- Chrome 46.0.2490.86 (64-bit), MacOSX 10.11.1, OK
- Safari 9.0.1 (11601.2.7.2), MacOSX 10.11.1, OK
- Firefox 42.0, MacOSX 10.11.1, OK (known issue two onObjectMouseUp when clicking on place)
- Windows 7, SP1  IE11 11.0.9600.18059 desktop, OK (known issue two onObjectMouseUp when clicking on place)
- Windows 8.1 no service pack, IE11 11.0.9600.18053 desktop, OK (known issue two onObjectMouseUp when clicking on place)
- Safari iOS 9.1 (13B143), OK
- Android 4.4.4 Nexus 7, Chrome 35.0.1916.141, OK

VisioKiosk-1.7.16, 2015/10/07
[added] API, with 0 being North (preferred instaed of (#7277)
[added] mapviewer.addRoutingPath can take option "overlay" for the path to be drawn over surfaces. (#7278)
        NOTE: for old maps (map.svg, target 1.7.9 and below), the default is overlay=true.
[added] API mapviewer.offsetPosition and mapviewer.computeHeadingAngle, which allows to determine if points are behind/left/right/in front of others. (#7280)
[added] pre/postManipulatorListener for 'wheel' events has .delta attribute to determine wheel direction.
[fixed] mouse wheel issue on Firefox. (#7256)
[fixed] rendering order of Path's is function of creation order (last created first drawn), Path.setInterpolationStartEnd resets this order as well.
        The rendering order of Path's is now based on the .z of the first point. (#7257)
[fixed] Invisible POIs intersected clicks. (#7282)
[update] MyRoute.js to use overlay path for arrows, animated arrows are drawn with overlay to be able to see when path is behind a surface. (#7279)

Migrating from 1.7.15 to 1.7.16
- just update mapviewer.kiosk.js, like always you are not required to update the example.
- if you want to take advantage of the updated path rendering, you can update MyRoute.js with the overlay option for path_options and path_options_base

VisioKiosk-1.7.15, 2015/09/18
[added] Support for routes with multiple waypoints.
        Use an array for routeParameters.dst
        Use routeParameters.destinationOrder = 'inOrder'|'optimal'|'optimalFinishOnLast'. (#7131)
[added] Download maps via new map descriptor that allows the SDK to validate the map as
        well as easily implement your own map downloading scripts with full .zip downloading
        as well as map timestamp checking. Can also check other conditions like
        if the map format is too old, too new. (#7130)
[update] API .getRoutingNode now returns a RouteNodeObject or false.
[added] API .minimumDataSDKVersion allows to test if SDK can read data or if it has been deprecated (futureproofing). (#7198)
[added] API .sdkType which returns 'kiosk'
[update] SDK and Sample uses jQuery 1.11.3
[fixed] issue with reading VisioKiosk 1.4 map (circa 2013) bundle. now only accessible via json w/CORS (not JSONP). (#7203)

Sample mapviewer.kiosk.js:
[update] Separated common code with mapviewer.web.js into mapviewer.common.js
[update] removed *_stairs_up.png -> *_up.png (MyRoute.js and navigation icon).  Removed files track_stair_[down|up].png and transit_instruction_stairs_[down|up].png. Note the icon name in the navigation instructions changed, thus make sure you have transit_instruction_down.png and transit_instruction_up.png in your media. (#7135)
[update] MyRoute.js to check if mapviewer.addRoutingPath succeeded before saving the path.
[fixed] Sample download progress bar.

Note: The maps are now loaded via standard AJAX using Cross-Origin Resource Sharing (CORS).
For increased security, the maps should be hosted on an HTTPS site.

Migrating from 1.7.14 to 1.7.15
- just update mapviewer.kiosk.js, like always you are not required to update the example.
- if you want to take advantage of the multi-point routing, you will have to merge the changes to
  MyRoute.js as well as mapviewer.common.js
- to take advantage of the new map description, you need to have your map properly configure
  to publish using this format, and just update your mapURL.

VisioKiosk-1.7.14, 2015/06/03

IMPORTANT: This versions supports a new version of VisioKiosk Map Bundles
        which greatly improves the load time and framerate
        talk to your account manager to enable it on VisioMapEditor

[added] Support for precompiled map files (.json).  Download mechanism: if .json file given, searches just that file,
        if .svg file given, searches first .json file then .svg file.
[added] API .addPostRenderListener and .removePostRenderListener to be notified after each frame is rendered. (#7014)
[added] API mapviewer.on,.off, and .trigger to be notified of certain events:
        routeComputed,initializeCompleted,initializeFailed,floorWillChange,floorChanged,mouseup. (#7044)
[added] API, can be "none","map","trackball"
[added] API
        allows to intercept manipulator events before and after they happen
        to create your own custom interactions. (#7015)
[added] API Floor: set/getPosition to move floor layers around. (#7018)
[added] API Floor: setEnabled to display floor content. (#7018)
[added] API LOD: setEnabled to display a floor's given LOD (layer with shapes). (#7018)
[added] API mapviewer.setAutoUpdateLOD() to turn have manual or automatic LOD management.
[added] API mapviewer.getFootprint() to recover a POI footprint.
        API mapviewer.getPoint() to recover a POI point information.
        needs sdk.kiosk=1.7.14 version on VisioMapEditor. (#7020)
[fixed] documentation for Camera minPitch,maxPitch documentation did not match defaults.
[fixed] Manipulation not accurate when one has to scroll to view the map. (#7027)
[update] animation speed for Path's has been normalized, no longer dependent on framerate.
[update] display of POI's with selectors performance improved on IE Mobile
         (use of CSS transform translate).

Sample mapviewer.kiosk.js:
[update] uses local dataset, make sure for producation you update the mapURL with your map.
[update] MyRoute.js refactored to be able to easily create start and end pins
         added calls MyRoute.addStartPOI() and addStartPOI.addEndPOI() (using routeStartEnd object)
         added calls showLinks/hideLinks() to control Link (paths between floors) display.
[update] Clicking on a shop, does not move the camera to it.
[update] Commented onObjectMouseOver and onObjectMouseOut in mapviewer_parameters in mapviewer.kiosk.js
         not using mouse over behavior in sample, uncomment to use.
[update] Clicking bubble set origin or destination adds a Pin.
[update] route does not select start shop by default.
[update] routes that have same start and end are not even computed
[update] tweaked navigation instructions html/css.
[update] refactored use of updateActiveFloorLabel, by using mapviewer.on('floorChanged'...)
         avoids having this all places the floor changes.
[update] multifloor sample has simpler DOM structure and no sidebar.
[update] mapviewer.kiosk.js to be more robust and handle cases where the sidebar is not in the DOM.
[update] MyRoute.js to display a base track.
Added preliminary multi-floor storyboard, see mapviewer.kiosk.multifloor.js and mapviewer.kiosk.multifloor.html

Internet Explorer 11 on Windows Phone:
  We have noticed important performance difference the simpler the DOM is and the closer the
  map container is to the body.

Migrating from 1.7.12 to 1.7.14
- just update mapviewer.kiosk.js, like always you are not required to update the example.
- though we can recommendto compare the performance of your code and that of the sample
  the sample has been slightly optimized, e.g. string = a + b + c ==> string = [a,b,c].join('')
  the sidebar has been completely removed on the web samples, and the code has been updated to avoid
  updating the sidebar which is not optimal for mobile devices.

Tested on (the official target are kiosk running Chrome or IE11)
- Chrome 43.0.2357.81 (64-bit), MacOSX 10.10.3, OK
- Windows 8.1 IE11 11.0.9600.17801, OK
- Windows Phone 8.1 Update 2 Lumia 640 IE OK
- Safari iOS 8.1.3, OK
- Safari 8.0.6 (10600.6.3), MacOSX 10.10.3, OK
- Firefox 38.0.5, MacOSX 10.10.3, OK

VisioKiosk-1.7.12, 2015/03/31

[fixed] mapviewer.initialize stops with "Cannot read property 'addEventListener' of undefined". (#6927)
[update] handling of certain 3D models.

Migrating from 1.7.11 to 1.7.12
- just update mapviewer.kiosk.js

VisioKiosk-1.7.11, 2015/03/31

[update] VisioKiosk now absolutely requires WebGL support
         use mapviewer.kiosk.js::isWebGLSupported(). (#6779)
         mapviewer.isAccelerated is deprecated, always returns true.
[added] Much improved gesture handling including mobile devices. (#6844)
        - two finger rotates around its center and can pan
        - zoom will zoom in between fingers or on mouse pointer
[added] to turn on/off pan/drag manipulation. (#6886)
[added] API Camera.getBoundary, .setBoundary, initial boundary prevents moving map off screen. (#6885)
[added] API .convertScreenToPoint and .convertPointToScreen. (#6884)
[fixed] mapviewer.getViewpointFromPositions with one position did not return correct result
        for positions not near center of screen. (#6883)
[fixed] mapviewer.kiosk.js doing routes to pois with IDs containing '.'. (#6871)
        jQuery('option[value='+query.src+']',...==> jQuery('option[value="'+query.dst+'"]'
[fixed] map does not display on Windows Phone 8.1 version 8.10.12393.890. (#6877)
        see documentation for vg.mapviewer.kiosk.Mapviewer.initialize()
[fixed] IE11 on Windows 8.1 tablet (touch screen), clicking on bubble "set destination" does not work. (#6596)
[update] changed default maxPitch to -45

Migrating from 1.7.10 to 1.7.11
- If your IDs contain '.', you may need to update mapviewer.kiosk.js
  jQuery('option[value='+query.src+']',...==> jQuery('option[value="'+query.dst+'"]'
- use isWebGLSupported() instead of isCanvasSupported()
- removed code tied to mapviewer.isAccelerated == false, since it will always be true

Tested on (the official target are kiosk running Chrome or IE11)
- Windows 8.1 Pro 32bit 5 touch points 11.0.9600.17498, OK
- Windows 8.1 Pro 32bit 5 touch points Chrome 41.0.2272.101, OK
- Chrome 41.0.2272.104 (64-bit), MacOSX 10.10.2, OK
- Safari 8.0.4 (10600.4.10.7), MacOSX 10.10.2, OK
- Safari iOS 8.1.3, OK
- Chrome Android 4.0, OK
- Firefox 36.0.4, MacOSX 10.10.2, OK
- Windows 7 IE11 11.0.9600.17498,
- Windows Phone 8.1 IE (OS version 8.10.12219.341)

- Unexpected MouseOver event which "touching" a button on a bubble/selector over map.
  NOTE: It is impossible on javascript to determine if a page is touch only or if a mouse exists
  Do not install mouseOver and mouseOut handlers (mapviewer.initialize()) if you are on a touch only device.
- MouseEvents cannot be stopped (#6227).  The events are sent front to back.  To work around this issue you mark the "event" on the event handler as handled, and then ignore the event on other handlers if they are marked, for example:
    onObjectMouseUp: function(event, element) {
        if (event.myeventwashandled) { return; }
        event.myeventwashandled = true;
- MouseOver events sent multiple times (#6206) when moving over same surface, kept for backward compatibility and "easier" handling of overlapping surfaces.  The above work-around can mitigate this problem if two surfaces overlap and are highlighted on mouseover.

VisioKiosk-1.7.10, 2015/03/06

IMPORTANT: the mapURL for the sample Visio Island data set for VisioKiosk has been updated:
new mapURL = '//';

[added] Offline routing (active if getRoutingURL() returns '#javascript').  (#6707,#6708)
        Route data now contains .duration
[added] getRoutingNode(), getRoutingModalities(), getRoutingAttributes() API. (#6834)
[added] mapviewer.initialize() parameters mapContentString/mapContentDirectory that allows developer
        to manage the downloading of the map, and pass the map content directly to SDK. (#6824)
[added] mapviewer.getFloors()'s floorInfo object has .heightMin and .heightMax when available. (#6813)
[added] navigationParameters.modalityParameters.shuttle.straightAngleThreshold = 180.0 in sample code
        reduces to one the number of instructions for shuttle modality.
[added] MyRoute getInitialFloor(), getInitialViewpointPosition() which can allow you to see
        the whole segment on the route on the initial floor.
[update] documentation of mapviewer.addRoutingPath() to require 2 points or more.
[update] example mapviewer.kiosk.js openPlaceBubble() to disable "Set Origin"/"Set Destination" is place is not routable.
[update] MyNavigation.js with MyNavigationTranslation class to handle English and French offline navigation instructions. (#6842)
[update] navigation parameters straight angle threshold to 30 to reduce number of instructions
         controlled from within mapviewer.kiosk.js
[fixed] mapviewer.addRoutingPath() routing path missing last segment (only drawn half way). (#6812)
[fixed] far plane on very large maps. (#6823)
[fixed] .addPOI using url and overlay: true, are not properly refreshed (not visible if camera far away when inserted). (#6758)
[fixed] .addPOI using alignment: alignment was not properly taken into account. (#6759)

Migrating from 1.7.7 to 1.7.10
- update vg.mapviewer.kiosk.js
- if necessary, there are many small changes in mapviewer.kiosk.js
- update MyNavigation.js if you use routing/navigation for offline routing (lots of changes)
- MyRoute.js contains new methods

Known Issues:
- Unexpected MouseOver event which "touching" a button on a bubble/selector over map.
  NOTE: It is impossible on javascript to determine if a page is touch only or if a mouse exists
  Do not install mouseOver and mouseOut handlers (mapviewer.initialize()) if you are on a touch only device.
- MouseEvents cannot be stopped (#6227).  The events are sent front to back.  To work around this issue you mark the "event" on the event handler as handled, and then ignore the event on other handlers if they are marked, for example:
    onObjectMouseUp: function(event, element) {
        if (event.myeventwashandled) { return; }
        event.myeventwashandled = true;
- MouseOver events sent multiple times (#6206) when moving over same surface, kept for backward compatibility and "easier" handling of overlapping surfaces.  The above work-around can mitigate this problem if two surfaces overlap and are highlighted on mouseover.
- IE11 on Windows 8.1 tablet (touch screen), clicking on bubble "set destination" does not work (#6596)

versions 1.7.8 and 1.7.9 were internal.

Tested on (the official target are kiosk running Chrome or IE11)
- Windows 8.1 Pro 32bit 5 touch points 11.0.9600.17498, OK (with known issues of IE11)
- Chrome 41.0.2272.76 (64-bit), MacOSX 10.10.2, OK
- Safari 8.0.3 (10600.3.18), MacOSX 10.10.2, OK
- Safari iOS 8.1.3, OK
- Chrome Android 4.0, OK
- Firefox 36.0.1, MacOSX 10.10.2, OK
- Windows 7 IE11 11.0.9600.17498, OK
- Windows Phone 8.1 IE OK

VisioKiosk-1.7.7, 2014/11/17
[fixed] Bug where IDs containing '.' caused errors when choosing Origin or Destination in mapviewer
        FIX: jQuery('option[value="'+id+'"]',srcBox) ==> jQuery('option[value='+id+']',srcBox)
[fixed] Bug when clicking on a surface or shop on certain multi touch devices (#6543)
[update] Handles VisioMapEditor2 VisioKiosk maps.
         Trying to use VisioKiosk maps generated with VisioMapEditor 2 with a VisioKiosk SDK previous to
         this version will generate a javascript error (and stop your application from working)
[update] mapviewer.initialize().fail(result) takes an argument, with result.message possibly having information about
         the error (#6594)

Known Issues:
- Unexpected MouseOver event which "touching" a button on a bubble/selector over map.
  NOTE: It is impossible on javascript to determine if a page is touch only or if a mouse exists
  Do not install mouseOver and mouseOut handlers (mapviewer.initialize()) if you are on a touch only device.
- MouseEvents cannot be stopped (#6227).  The events are sent front to back.  To work around this issue you mark the "event" on the event handler as handled, and then ignore the event on other handlers if they are marked, for example:
    onObjectMouseUp: function(event, element) {
        if (event.myeventwashandled) { return; }
        event.myeventwashandled = true;
- MouseOver events sent multiple times (#6206) when moving over same surface, kept for backward compatibility and "easier" handling of overlapping surfaces.  The above work-around can mitigate this problem if two surfaces overlap and are highlighted on mouseover.
- IE11 on Windows 8.1 tablet (touch screen), clicking on bubble "set destination" does not work (#6596)

VisioKiosk-1.7.6, 2014/07
[rename] Product renamed VisioWebKitHTML5 -> VisioKiosk to better reflect target devices and not technology
[rename] vg.mapviewer.three class to vg.mapviewer.kiosk
[rename] mapviewer.* -> mapviewer.kiosk.*
[update] jQuery updated to 1.7.2
[update] example shows route from/to in a bubble
[update] example's initial floor can be activated via url e.g. mapviewer.html?initialfloor=2
[update] vg.mapviewer.kiosk.all.js easier to wrap for requirejs if needed
[fixed] minor problem when clicking on Icons. (#5802)
[fixed] mapviewer.addRoutingPath handling of certain parameters, e.g. speed=0 (#6178)
[fixed] mapviewer.addRoutingPath handling of turns (#6201)
[fixed] mapviewer.initialize onObjectMouseOut was not being called when moving between two adjacent shops (#6203)
[fixed] instructions text is no longer selectable, annoying on touch devices (#6221)
[fixed] floors labels are updated when changing floors via change floor pins on routes (#6224)

Migrating from 1.7.4 to 1.7.6
- replace your include script file from vg.mapviewer.all.js to vg.mapviewer.kiosk.js
- myRoute.js has been updated, lines saying:
        position: new THREE.Vector3(A, B, 0),
  need to be:
        position: {x: A, y: B, z: 0},
- if you are updating only the sdk, the library has been renamed from vg.mapviewer.all.js to vg.mapviewer.kiosk.all.js
- any use to vg.mapviewer.three need to be replaced with vg.mapviewer.kiosk

VisioWebKitHTML5-1.7.4, 2014/02
[fixed] mapviewer.computeRoute was not calling fail() when src and dst where the same.
[update] example, so routing can be activated via url e.g. mapviewer.html?src=125b&dst=13

VisioWebKitHTML5-1.7.3, 2014/01
[update] is now in meters to be able to better set the position.
[update] initial camera.position is such that one can see the whole map.
[update] initial camera.maxRadius is such that one can see the whole map, but not get too far back.
[update] MyNavigation uses value of MyNavigation.navigationInstructionRadius for the camera radius when stepping through instructions.
[update] moved javascript code outside of mapviewer.html into js/mapviewer.js

Migrating from 1.7.2 to 1.7.3
- If you are setting the initial position by hand, you will need to update the radius.

VisioWebKitHTML5-1.7.2, 2014/12
[update] vg.mapviewer.Mapviewer renamed to vg.mapviewer.three.Mapviewer to allow the creation of other types of mapviewers.
[update] MyRoute.js shows the start and end of route with pins (configurable) (#5239)
[fixed] IE11 loading problems (#5321)
[fixed] Layers would not be correctly positioned at the end of change floor animation (#5262, #5127, #5176)
[fixed] IE11 warnings (#5295)
[fixed] IE11 right click to rotate map (#5264)
[fixed] Clear search and route on Firefox. (#5320)
[added] Canvas feature detection on the example, to know ahead of time, if the VisioWebKit HTML5 will run or not (#5319)
        without Canvas (browsers like IE6,7,8), VisioWebKit HTML5 will not run.
        removed Google Chrome Frame detection code. (#5297)

Known Issues:
- Text labels in IE10 and IE11 are extremely slow to create, avoid using setPlaceName().

Tested on
- Chrome 31.0.1659.63, MacOSX 10.9, OK
- Safari 7.0 (9537.71) default (no webgl), OK
- Safari 7.0 (9537.71) webgl enabled, OK
- Firefox 26.0, OK
- Windows 7 IE9.0.8112.16421, OK
- Windows 8, IE10.0.9200.16736, OK
- Windows 8, Chrome, OK
- Windows 8.1 Pro IE11.0.9431.217, OK

VisioWebKitHTML5-1.7.1, 2013/10
[new] the computeRoute function can take routing requests with many more options.
[new] can compute routes between lat/lon positions.
[new] mapviewer.changeFloor can take animationDuration options.
[new] animationDuration options for changeFloor and camera.goTo can be 0 for synchronous and immediate action with no animation.
[fixed] Level of detail altitude changes are now closer to VisioDevKit.
[new] mapviewer.lodFactor can control when the level of detail change.
[fixed] addPOI can handle visibility ramps for selector type POIs.
[new] allows to disable the zoom manipulation.
[new] mapviewer.computeRoute() uses jQuery.Deferred like all other functions (goTo, changeFloor...)

Migrating from 1.5 to 1.6
- If you use navigation, it is no longer computed by default.  To use you must add the attribute "computeNavigation":"true" to the routing request.
- When computing a route, if you previously used .avoidAttribute you now need to use routingParameters.excludedAttributes

VisioWebKitHTML5-, 2013/05/30
 [new] Adds, (#4499)
 [new] Professional looking sample page, removed functions that were used for demo purposes.
 [new] Visioglobe's logo can be positionned at any corner during mapviewer.initialize
 [new] Accelerated render using antialiasing by default.
 [new] Sample shows multiple language support.  Navigation instructions only in English.
 [fixed] Problem on MyRoute.js where the wrong floor was used due.  Fixed by using a closure. (#4493)
 [fixed] Some memory leaks
 [fixed] Problems with POI callback after removing a POI (#4447)
 [fixed] Usage of setPlaceIcon/setPlaceName when an icon was present, you can use both at the same time if needed
 [fixed] Touch events when the map container did not have an id #
 [fixed] Compatibility with older map formats with single LOD (r1955)
 [fixed] Mapviewer.initialize error was not being called when using a bad URL for a map (#4491)
 [fixed] Issue where Map pitch changed a lot when doing a rotation gesture (#4460)
 [fixed] Routing on generic sample, it was using start points with '03' this was due to a problem on the source map. (#4449)
 [issue] On IE10 without GoogleChromeFrame, the mapviewer.setPlaceName function is very slow.  The creation of text labels is slow. use with parsimony.
 [issue] On IE10 on Windows 8 tablet, after refusing GoogleChromeFrame installation, the page goes into "Document Mode: IE7, Browser Mode: IE10 Compatibility".
         When not using ChromeFrame on IE10, it must load as "Browser Mode: IE10, Document Mode: Standards".  Also clicking on a shop does not work.
 [new] Better performance, better caching of textures (#4338)
 [note] On Windows 8 Tablet, the keyboard display behavior requires often the user to actively request to display the on-screen keyboard.

Tested on:
- Safari 6.0.4 on MacOSX 10.8.3, With WebGL
- Safari 6.0.4 on MacOSX 10.8.3, Without WebGL, some artefacts around label names
- Firefox 21 on MacOSX 10.8.3 (uses WebGL)
- Google Chrome 26.0.1410.65 on MacOSX 10.8.3. (uses WebGL)
- Firefox 21 Windows 7
- Google Chrome 27.0.1453.94 on Windows 7
- IE9 on Windows 7, ignoring Chrome Frame install
- IE9 on Windows 7, with Chrome Frame install.(uses WebGL)
- Chrome 27.0.1453.94 on Windows 8 Touch Screen, (uses WebGL)
- IE10 on Windows 8 Touch Screen with ChromeFame.  Note sometimes the ChromeFrame installation is not proposed.
- IE10 on Windows 8 Touch Screen  "Browser Mode: IE10, Document Mode: Standards": Clicking on stores does not work.  When selecting a text box, the keyboard does not appear, this is normal Microsoft Behavior, need to click display keyboard button.

VisioWebKitHTML5-1.5.1810-generic, 2013/04/23
 [fixed] "When display a route over multiple floors, the route pattern is stretched" (now working)
 [new] Better performances
 [new] Level Of Details (LODs) management
 [new] vg.mapviewer.Mapviewer.setPlaceName()/setPlaceIcon()
 [new] map legend layer (like street names) are now displayed.
 [new] it is possible to modify POIs information after they are created
 [issue] icons size is not correct when using mapeditor labels (i.e. using addPOI with width and height parameters)
 [issue] labels and legends may appear floting over surfaces roofs.
 [issue] vg.mapviewer.Mapviewer.POI.remove does not completely remove all the references.  It is possible for callbacks of
         previously added POI to be called. (#4321)
 [issue] on IE10/Win8/tablet, sometimes the camera position is bad and no shops are visible after doing camera.goTo's (#4322)

Migrating from 1.4 to 1.5:

'shop.originalColor' => ''
'shop.floor' => ''

onObjectMouseOver 'element' parameter can now be an array if the mouse is over several elements. The 'element' value can be a shop or a POI. So check the type (in 'setHighlightedShop' function for example)
	if (shop instanceof Array ||
		( &&

Tested on:
- Google Chrome on Windows 7
- Safari 6.0.4 on MacOSX 10.8.3
- Google Chrome 26.0.1410.65 on MacOSX 10.8.3
- Firefox 20 on MacOSX 10.8.3
- IE10 on Windows 8 Touch Screen (clicking does not work)
- Chrome on Windows 8 Touch Screen (cannot click on next/prev instruction), problem due to layout of div.
- IE9 on Windows 7, with Chrome Frame install.
- IE9 on Windows 7, ignoring Chrome Frame install.

VisioWebKitHTML5-1.4.1617-generic, 2013/03/08
- Adds routing and navigation turn by turn instructions support.  use setRoutingURL() or a map that is properly configured. This is a paid service, so make sure you have ordered it before enquiring.
- Separated routing and navigation helper classes into MyNavigation.js and MyRoute.js
- Adds support for multi-touch on Windows 8 tablets. (it is recommended to run on Chrome)
- Added Mapviewer.getAllPlaces(), function to retrieve available IDs.

Known Issues:
- Clicking on shops on IE10 is not working.
- When display a route over multiple floors, the route pattern is stretched.
  Workaround: use a single color pattern.  Change trackImage variable in MyRoute.js

Tested on:
- IE10 on Windows 8 Touch Screen (clicking does not work)
- Chrome on Windows 8 Touch Screen (cannot click on next/prev instruction), problem due to layout of div.
- IE9 on Windows 7, ignoring Chrome Frame install.
- IE9 on Windows 7, with Chrome Frame install.
- Safari 6.0.2 on MacOSX 10.8.2
- Google Chrome on MacOSX 10.8.2
- Firefox 14 on MacOSX 10.8.2

- Update
- Added Mapviewer.addPOI to be able to display labels on the screen.  Should be used with parsimony.

VisioWebKitHTML5-1.0-1018, 2012/08
- Initial release.