Put html generation into HexGrid module

Doesn't really belong in the script
main
parent 8c2d5fc6c2
commit 749602c097
  1. 56
      HexGrid/Dynamic.pm
  2. 10
      wiki-map.pl

@ -0,0 +1,56 @@
package HexGrid::Dynamic;
use v5.30;
use Carp;
use Data::Dumper;
use feature "signatures";
no warnings "experimental::signatures";
$HexGrid::Dynamic::click_pin = <<EOS;
function clickPin(pinId, containerId) {
let popup = document.getElementById(pinId + '-popup');
popup.style.visibility = popup.style.visibility == 'visible' ? 'hidden' : 'visible';
}
EOS
$HexGrid::Dynamic::toggle_coords = <<EOS;
function toggleCoords(show) {
for (var elem of document.getElementsByClassName('coords')) {
elem.style.visibility = show ? 'visible' : 'hidden';
}
}
EOS
$HexGrid::Dynamic::coords_toggler = <<EOS;
<label for="show-coords-checkbox">Show coordinates</label>
<input type="checkbox" checked id="show-coords-checkbox" onclick="toggleCoords(event.srcElement.checked)" />
EOS
sub render_html($svg, $options = undef)
{
my $document = "<!DOCTYPE html>";
$document .= "\n<html>\n<body>";
if($options)
{
if (ref $options eq 'HASH')
{
$document .= "\n<script>\n";
$document .= $HexGrid::Dynamic::click_pin if $options->{pin_popups};
$document .= $HexGrid::Dynamic::toggle_coords if $options->{toggle_coords};
$document .= "\n</script>\n";
$document .= $HexGrid::Dynamic::coords_toggler if $options->{toggle_coords};
}
else
{
carp("Options passed to HexGrid::Dynamic::render_html must be a hash ref");
return;
}
}
$document .= "\n" . $svg;
$document .= "\n</body>\n</html>";
return $document;
}
1;

@ -3,6 +3,7 @@ use rlib '.';
use HexGrid;
use HexGrid::Pin;
use HexGrid::Dynamic;
use MWTemplate;
use MediaWiki::API;
@ -410,7 +411,8 @@ foreach my $page (values %{$site_icon_query_results->{query}{pages}})
# Render and output
open (my $fh, "> $outfile") or croak "Couldn't open $outfile for writing: $!";
say $fh ($html_document ? wrap_in_html($grid) : $grid->render);
say $fh ($html_document ? HexGrid::Dynamic::render_html($grid->render,
{ toggle_coords => $show_coords, pin_popups => 1 }) : $grid->render);
close $fh;
if($regiondir)
@ -436,7 +438,8 @@ if($regiondir)
say STDERR "Rendering Region $region\'s grid";
open (my $region_fh, "> $region.$extension")
or croak "Couldn't open $region.extension for writing: $!";
say $region_fh ($html_document ? wrap_in_html($region_grid) : $region_grid->render);
say $region_fh ($html_document ? HexGrid::Dynamic::render_html($grid->render,
{ toggle_coords => $show_coords, pin_popups => 1 }) : $region_grid->render);
close $region_fh;
}
# TODO: Location grids need to import images
@ -445,7 +448,8 @@ if($regiondir)
say STDERR "Rendering Location $location_name\'s grid";
open (my $location_fh, "> $location_name.$extension")
or croak "Couldn't open $location_name.$extension for writing: $!";
say $location_fh ($html_document ? wrap_in_html($location_grid) : $location_grid->render);
say $location_fh ($html_document ? HexGrid::Dynamic::render_html($grid->render,
{ toggle_coords => $show_coords, pin_popups => 1 }) : $location_grid->render);
close $location_fh;
}
}

Loading…
Cancel
Save