From a6f22d3b2500240adeaa85a53cee1320db9080ce Mon Sep 17 00:00:00 2001 From: Daniel Asher Resnick Date: Fri, 11 Aug 2023 17:46:45 -0500 Subject: [PATCH] . --- HexGrid/Image.pm | 15 ++++++++++++--- wiki-map.pl | 17 ++++++++++++++--- 2 files changed, 26 insertions(+), 6 deletions(-) diff --git a/HexGrid/Image.pm b/HexGrid/Image.pm index a0e7ac4..b94b6e4 100644 --- a/HexGrid/Image.pm +++ b/HexGrid/Image.pm @@ -20,11 +20,19 @@ has id => (is => 'rw', required => 1); has width => (is => 'rw', required => 1); has height => (is => 'rw', required => 1); +has _cached_data => (is => 'rw', default => undef); + sub render($this, $container) { - # hard coded into external URL mode + say STDERR $this->{_cached_data} if $DEBUG; my $image_element = $container->image(id => $this->{id}); - $image_element->{href} = $this->{fetch} ? $this->_fetch_base64() : $this->{source}; + my $href = $this->{source}; + if ($this->{fetch}) + { + $this->_fetch_base64 unless defined($this->{_cached_data}); + $href = $this->{_cached_data}; + } + $image_element->{href} = $href; $image_element->{width} = $this->{width} if defined($this->{width}); $image_element->{height} = $this->{height} if defined($this->{height}); return $image_element; @@ -37,7 +45,8 @@ sub _fetch_base64($this) my $response = $USER_AGENT->get($this->{source}); my $content_type = $response->headers->content_type; my $encoded_content = encode_base64($response->content); - return "data:$content_type;base64, $encoded_content"; + $this->{_cached_data} = "data:$content_type;base64, $encoded_content"; + return $this->{_cached_data}; } sub DEBUG { $DEBUG = 1; } diff --git a/wiki-map.pl b/wiki-map.pl index b865290..78e44ac 100644 --- a/wiki-map.pl +++ b/wiki-map.pl @@ -172,14 +172,24 @@ foreach my $page (values %{$location_query_results->{query}{pages}}) # $location_with_context->add_tile($grid->get_tile_at($1, $2)); push @coords_list, { nw => $1, sw => $2 }; } - $location_grids{$location->{name}} = $grid->subgrid_for_tiles(@coords_list); + my $location_grid = $grid->subgrid_for_tiles(@coords_list); + $location_grid->iter_tile( + sub($tile) + { + # if haven't added image to grid yet, do so + if($tile->image && !(exists $location_grid->{images}{$tile->image})) + { + $location_grid->{images}{$tile->image} = $grid->{images}{$tile->image}; + } + }); + $location_grids{$location->{name}} = $location_grid; } }; } -HexGrid::Image::DEBUG(); +# HexGrid::Image::DEBUG(); say STDERR "Getting Background image pages"; my $background_query_results = $mw->api({ action => 'query', @@ -314,7 +324,8 @@ if($regiondir) foreach my $image (@{$images_for_region_grids{$region}}) { # say STDERR Dumper($image); - $region_grid->add_image($image->{name}, $image->{source}); + $region_grid->{images}{$image->{name}} = $grid->{images}{$image->{name}}; + # $region_grid->add_image($image->{name}, $image->{source}); } }