Game-TextMapper
view release on metacpan or search on metacpan
lib/Game/TextMapper.pm view on Meta::CPAN
#!/usr/bin/env perl
# License: AGPL 3 (see below)
package Game::TextMapper;
our $VERSION = 1.09;
use Game::TextMapper::Log;
use Game::TextMapper::Point;
use Game::TextMapper::Line;
use Game::TextMapper::Mapper::Hex;
use Game::TextMapper::Mapper::Square;
use Game::TextMapper::Smale;
use Game::TextMapper::Apocalypse;
use Game::TextMapper::Gridmapper;
use Game::TextMapper::Schroeder::Alpine;
use Game::TextMapper::Schroeder::Archipelago;
use Game::TextMapper::Schroeder::Island;
use Game::TextMapper::Traveller;
use Game::TextMapper::Folkesten;
use Game::TextMapper::Solo;
use Modern::Perl '2018';
use Mojolicious::Lite;
use Mojo::DOM;
use Mojo::Util qw(url_escape xml_escape);
use File::ShareDir 'dist_dir';
use Pod::Simple::HTML;
use Pod::Simple::Text;
use List::Util qw(none);
use Cwd;
# Commands for the command line!
push @{app->commands->namespaces}, 'Game::TextMapper::Command';
# Change scheme if "X-Forwarded-Proto" header is set (presumably to HTTPS)
app->hook(before_dispatch => sub {
my $c = shift;
$c->req->url->base->scheme('https')
if $c->req->headers->header('X-Forwarded-Proto') } );
plugin Config => {
default => {
loglevel => 'warn',
logfile => undef,
contrib => undef,
},
file => getcwd() . '/text-mapper.conf',
};
my $log = Game::TextMapper::Log->get;
$log->level(app->config('loglevel'));
$log->path(app->config('logfile'));
$log->info($log->path ? "Logfile is " . $log->path : "Logging to stderr");
my $dist_dir = app->config('contrib') // dist_dir('Game-TextMapper');
$log->debug("Reading contrib files from $dist_dir");
get '/' => sub {
my $c = shift;
my $param = $c->param('map');
if ($param) {
my $mapper;
if ($c->param('type') and $c->param('type') eq 'square') {
$mapper = Game::TextMapper::Mapper::Square->new(dist_dir => $dist_dir);
} else {
$mapper = Game::TextMapper::Mapper::Hex->new(dist_dir => $dist_dir);
}
$mapper->initialize($param);
$c->render(text => $mapper->svg, format => 'svg');
} else {
my $mapper = new Game::TextMapper::Mapper;
my $map = $mapper->initialize('')->example();
$c->render(template => 'edit', map => $map);
}
};
any '/edit' => sub {
my $c = shift;
my $mapper = new Game::TextMapper::Mapper;
my $map = $c->param('map') || $mapper->initialize('')->example();
$c->render(map => $map);
};
( run in 0.594 second using v1.01-cache-2.11-cpan-75ffa21a3d4 )