Revision history for HTML-OSM

0.11	Mon Oct 19 09:48:31 PM EDT 2026
	[ Bug Fixes ]
	- Heatmap radius and blur are now forced to positive numbers, so they can
	  no longer inject JavaScript
	- onload_render() checks zoom, width and height again (values from a
	  config file or a clone skip new()'s checks) and falls back to the
	  defaults with a warning
	- CDN URLs are HTML-escaped in the <head> fragment
	- A lone carriage return in a label no longer breaks the JavaScript
	- add_marker('') and center('') return 0 instead of croaking from a
	  private helper; a coordinate with no lat/lon and no address is skipped
	- A user agent passed in by the caller is no longer reconfigured
	- Some perls (seen with 5.38.0 on macOS) print and read numbers with the
	  locale's decimal point, so under de_DE 51.5074 printed as "51,5074" and
	  "51.5074" was read as 51.  Coordinates were rejected, and the computed
	  map centre lost its fractions.  Coordinates are now always written with
	  a '.', converted to numbers without the locale, and range-checked
	  correctly ("90.5" was read as 90 and accepted).  JSON layers are
	  encoded under the C numeric locale, and heatmap radius/blur accept
	  decimals such as "12.5"
	  Fixes https://matrix.perl-magpie.org/results/97965e64-9dc9-11f1-963c-fccfcb508d96

	[ Enhancements ]
	- new(tile_url => ...) replaces the OpenStreetMap tile layer, so maps can
	  use an internal tile server or run on an air-gapped network
	- new(tile_attribution => ...) replaces the map credit; the default now
	  links to the OpenStreetMap copyright page
	- new(email => ...) adds a contact address to Nominatim requests, as the
	  Nominatim usage policy asks

	[ Documentation ]
	- Add a DESCRIPTION section
	- MESSAGES tables now match the exact croak text and list the warnings
	- Document that only one map can be rendered per page

	[ Build ]
	- Declare IPC::System::Simple as a runtime prerequisite: autodie qw(:all)
	  needs it when the module loads
	- Set MIN_PERL_VERSION to 5.010
	- Remove ExtUtils::MakeMaker from PREREQ_PM (it stays in CONFIGURE_REQUIRES)
	- Declare HTTP::Response for tests; drop unused Test::JSON,
	  Test::HTML::Lint and Test::Warnings

	[ Tests ]
	- Cover the default tile URL, a configured tile URL and JS-string escaping
	- Cover tile_attribution, email, the render-time checks and the new
	  escaping helpers
	- Simulate comma-decimal number printing so the locale fix is tested on
	  every platform, and check the rendered output under real locales

0.10	Sun Jul 12 21:23:33 EDT 2026
	[ Bug Fixes ]
	- Don't try to call a method on an uninitialized variable
	- Use consistent default sizes
	- Bump minimum versions
	- Set maximum zoom to 19
	- Fix function-style HTML::OSM::new() with arguments blessing into wrong package

	[ Enhancements ]
	- Re-enable search box and reset button in rendered map
	- Add "Clear search markers" button to remove dynamically-added markers
	- add_geojson(): render GeoJSON layers via Leaflet-native L.geoJSON()
	- add_heatmap(): render heatmap layers via Leaflet.heat plugin
	- add_gpx(): render GPX tracks from a URL via leaflet-gpx plugin
	- add_choropleth(): data-driven colour-fill layers; colours pre-computed in Perl
	- new(cluster=>1): group markers with Leaflet.markercluster plugin
	- onload_render() no longer requires point markers when GeoJSON/heatmap/GPX/choropleth data is present
	- Use Params::Validate::Strict on new()
	- Added the test dashboard at https://nigelhorne.github.io/HTML-OSM/coverage/

	[ Tests ]
	- Started fuzz testing
	- Extend new() fuzz schema with zoom, height, width and min_interval inputs

0.09	Thu Jul 31 11:15:55 EDT 2025
	Remove unused module: File::Slurp
	Use Params::Get, Object::Configure
	Don't test URLs on smokers

0.08	Wed Apr  2 07:51:24 EDT 2025
	Added css_url and js_url arguments to new()
	Default Leaflet bumped from 1.7.1 to 1.9.4
	Added config_file argument to new()

0.07	Fri Feb 28 15:07:03 EST 2025
	Center() was being ignored
	Changed default zoom to 12

0.06	Wed Feb 19 08:20:29 EST 2025
	Remove unwanted <head> and <title> information

0.05	Mon Feb 17 20:24:18 EST 2025
	More compatiblity with Geo::Coder::* modules
	Allow coordinates to start with a decimal point, e.g. "-.516667"
	Changed the default zoom to 17

0.04	Mon Feb 17 14:32:21 EST 2025
	Allow center() to be given a location string

0.03	Sun Feb 16 21:36:35 EST 2025
	Change the default size to be the same as HTML::GoogleMaps::V3
	Improved handling when an ARRAY is returned by Nominatim
	Remove the search and reset buttons
	Use %20 rather than ' ' in the URL

0.02	Sun Feb 16 14:44:32 EST 2025
	Added rate-limiting and caching support

0.01	Sun Feb 16 12:46:54 EST 2025
        First draft
