Revision history for HTML-OSM
0.12 Fri Oct 23 09:19:01 PM EDT 2026
[ Enhancements ]
- new(search => 0) leaves out the Nominatim search box, the "Clear search
markers" button and their script, so nothing typed on the page leaves
the reader's machine. The "Reset Map" button stays. The default is
still to include the search box
- new(max_zoom => N) sets maxZoom (0-28) on the tile layer, for tile
servers that have no tiles beyond a given zoom level
- New add_circle_marker() draws a filled circle with a radius in pixels
and a hex colour, for bubble maps. It takes the same points as
add_marker(), joins the cluster group when cluster => 1 is set, and
counts towards the map's bounds, so a map of circles alone needs no
center() call
- onload_render() checks max_zoom and the circle markers again, as it does
zoom, width and height
[ Tests ]
- Add t/options.t (search, max_zoom) and t/circle_marker.t
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
Keyboard Shortcuts
Global
s
Focus search bar
?
Bring up this help dialog
GitHub
gp
Go to pull requests
gi
Go to GitHub issues (only if GitHub is preferred repository)