diff --git a/HexGrid/Dynamic.pm b/HexGrid/Dynamic.pm index fc6c890..880a151 100644 --- a/HexGrid/Dynamic.pm +++ b/HexGrid/Dynamic.pm @@ -9,16 +9,21 @@ use feature "signatures"; no warnings "experimental::signatures"; $HexGrid::Dynamic::click_pin = <use(href => "#$this->{icon}_symbol", x => $x, y => $y, width => $w, height => $h); $element->{id} = "$this->{id}-use"; - $element->{onclick} = "clickPin('$this->{id}', '$pin_container->{id}');" + $element->{onclick} = "clickPin('$this->{id}', event);" if $this->popup; my $center_x = $x + $w/2; my $center_y = $y + $h/2; diff --git a/HexGrid/Region.pm b/HexGrid/Region.pm index 2ca0cd9..ad6f4b4 100644 --- a/HexGrid/Region.pm +++ b/HexGrid/Region.pm @@ -63,8 +63,12 @@ sub render($this, $svg, $grid, $layers) { my $tile_group = $this->{tiles}{$nw}{$sw}->render($g, $grid->tile_width, $grid->tile_height, $layers); $tile_group->{transform} = "translate($x_translate, $y_translate)"; - $tile_group->{onclick} = "clickRegion('$this->{name}', $x_translate, $y_translate);" - if ($this->popup); + if ($this->popup) + { + my $popup_x = $x_translate + $grid->tile_width / 2; + my $popup_y = $y_translate - $this->{popup}{height} + $grid->tile_height / 2; + $tile_group->{onclick} = "clickRegion('$base_id', $popup_x, $popup_y, event);"; + } }; $min_x = $x_translate if $x_translate < $min_x; @@ -78,14 +82,9 @@ sub render($this, $svg, $grid, $layers) push @{$layers->{popups}}, sub ($popup_container) { my $popup_scaler = $popup_container-> - g( - id => "$base_id-popup", - # transform => $transform, - class => $this->{popup_class} - )->svg(id => "$base_id-scaler"); - my $popup_element = $this->{popup}->render($popup_scaler); - $popup_element->{x} = 0; - $popup_element->{y} = 0; + g(id => "$base_id-popup", class => $this->{popup_class}, transform => "translate(0,0)") + ->svg(id => "$base_id-scaler"); + $this->{popup}->render($popup_scaler); }; } return { min_x => $min_x,min_y => $min_y,max_x => $max_x,max_y => $max_y, group => $g }; diff --git a/wiki-map.pl b/wiki-map.pl index 02630ad..3579d7b 100644 --- a/wiki-map.pl +++ b/wiki-map.pl @@ -98,13 +98,15 @@ foreach my $page (values %{$region_query_results->{query}{pages}}) $region->{defaults}{colour} = $parsed_template->{named_params}{colour}; $region->{defaults}{coords_colour} = $parsed_template->{named_params}{coordinates_colour} if $parsed_template->{named_params}{coordinates_colour}; - #TODO - $region->{popup} = HexGrid::PopUp->new - ( - name => $region->{name}, - description => "foo", - link => $page->{canonicalurl} - ); + if($html_document) + { + $region->{popup} = HexGrid::PopUp->new + ( + name => $region->{name}, + description => $parsed_template->{named_params}{abstract}, + link => $page->{canonicalurl} + ); + } if($regiondir) { $regions_by_subregion{$region->{name}} = $region->{name}; @@ -138,13 +140,15 @@ foreach my $page (values %{$subregion_query_results->{query}{pages}}) $subregion->{defaults}{colour} = $parsed_template->{named_params}{colour}; $subregion->{defaults}{coords_colour} = $parsed_template->{named_params}{coordinates_colour} if $parsed_template->{named_params}{coordinates_colour}; - #TODO - $subregion->{popup} = HexGrid::PopUp->new - ( - name => $subregion->{name}, - description => "foo", - link => $page->{canonicalurl} - ); + if($html_document) + { + $subregion->{popup} = HexGrid::PopUp->new + ( + name => $subregion->{name}, + description => $parsed_template->{named_params}{abstract}, + link => $page->{canonicalurl} + ); + } if($regiondir) { my $region_name = $parsed_template->{positional_params}[0]; @@ -468,37 +472,3 @@ if($regiondir) close $location_fh; } } - - -# Puts the rendered SVG inside an html document, -# along with a bit of javascript to show popups for sites and to toggle coordinates visibility -sub wrap_in_html($grid) -{ - my $html_builder = ""; - $html_builder .= "\n\n"; - $html_builder .= "\n" . < - function clickPin(pinId, containerId) { - let popup = document.getElementById(pinId + '-popup'); - popup.style.visibility = popup.style.visibility == 'visible' ? 'hidden' : 'visible'; - } - -EOS - if($show_coords) - { - $html_builder .= < - function toggleCoords(show) { - for (var elem of document.getElementsByClassName('coords')) { - elem.style.visibility = show ? 'visible' : 'hidden'; - } - } - - - -EOS - } - $html_builder .= "\n" . $grid->render; - $html_builder .= "\n\n"; - return $html_builder; -}