]> git.donarmstrong.com Git - debbugs.git/commitdiff
add xslate helper and serve xslate templates
authorDon Armstrong <don@donarmstrong.com>
Sun, 11 Aug 2019 17:07:08 +0000 (10:07 -0700)
committerDon Armstrong <don@donarmstrong.com>
Sun, 11 Aug 2019 17:07:25 +0000 (10:07 -0700)
lib/Debbugs/Mojo.pm
lib/Debbugs/Mojo/Controller/Bug.pm
lib/Debbugs/Mojo/Plugin/Xslate.pm [new file with mode: 0644]

index 779b83371474587eb8de12e191d5c6287f3e06bf..c8005ec739cb864efdf7c41c42ad84c0f1866896 100644 (file)
@@ -6,6 +6,7 @@ sub startup {
   my $self = shift;
 
   $self->plugin('Debbugs::Mojo::Plugin::DBI');
+  $self->plugin('Debbugs::Mojo::Plugin::Xslate');
   my $r = $self->routes;
   $r->namespaces(['Debbugs::Mojo::Controller']);
   $r->add_type(bug => qr/\d+/);
index 939169b44775fba78c4b0cfb25bfc93f371822e2..686e8bb7c233f012a855d36a723d5cc28c0102c6 100644 (file)
@@ -10,8 +10,13 @@ sub show {
     my $bug = Debbugs::Bug->new(bug => $id,
                                schema => $c->db
                               );
-    
-    return $c->render(text => 'Bug '.$bug->id);
+    return $c->reply->not_found if not $bug->exists;
+    $c->respond_to(json => {json => $bug->structure},
+                  any => sub {$c->render(template => 'cgi/bugreport',
+                                         handler => 'tx',
+                                         bug => $bug)},
+                 );
+
 }
 
 1;
diff --git a/lib/Debbugs/Mojo/Plugin/Xslate.pm b/lib/Debbugs/Mojo/Plugin/Xslate.pm
new file mode 100644 (file)
index 0000000..041d369
--- /dev/null
@@ -0,0 +1,26 @@
+package Debbugs::Mojo::Plugin::Xslate;
+
+use Mojo::Base 'Mojolicious::Plugin';
+
+use Debbugs::Text qw(:all);
+
+sub register {
+    my ($self,$app) = @_;
+
+    my $xslate = sub {
+       my ($renderer,$c,$output,$options) = @_;
+       my $template = $c->stash->{template_name} ||
+           $renderer->template_name($options);
+       my %params = (%{$c->stash},c => $c);
+       $$output =
+           fill_in_template(template => $template,
+                            variables => \%params,
+                           );
+    };
+    $app->renderer->add_handler(tx => $xslate);
+    return $self;
+}
+
+
+1;
+