--- /dev/null
+package Newslash::Plugin::Sidebar;
+
+use Mojo::Base 'Mojolicious::Plugin';
+use Mojo::Util 'dumper';
+use Mojo::JSON qw(decode_json encode_json);
+
+use Template;
+
+sub register {
+ my ($self, $app, $conf) = @_;
+
+ $app->hook(before_render => sub {
+ my ($c, $args) = @_;
+ if ($args->{sidebar}) {
+ my $boxes = $c->model('boxes');
+ my $users = $c->model('users');
+
+ my $user = $c->stash("user");
+ my $user_boxes = $users->sidebar_items(uid => $user->{uid});
+
+ my $items = [];
+ my $tt = Template->new();
+
+ for my $box (@$user_boxes) {
+ if (!$box->{query_params}) {
+ push @$items, $box->{template};
+ next;
+ }
+ my $q_params = decode_json($box->{query_params});
+ $q_params->{limit} = $box->{limit};
+ my $model = $c->model($box->{model});
+ next if !$model;
+ my $rs = $model->select(%$q_params);
+ my $result = '';
+ my $template = $box->{template};
+ if ($tt->process(\$template, {items => $rs}, \$result)) {
+ push @$items, $result;
+ }
+ }
+ $c->stash("boxes" => $items);
+ }
+ });
+}
+
+1;
sub root {
my $c = shift;
my $stories = $c->model('stories')->latest;
- my $boxes = $c->model('boxes');
-
- my $user = $c->stash("user");
- my $users = $c->model('users');
- my $items = $users->sidebar_items(uid => $user->{uid});
-
- my $sidebar_items = [];
- my $tt = Template->new();
-
- for my $box (@$items) {
- if (!$box->{query_params}) {
- push @$sidebar_items, $box->{template};
- next;
- }
- my $q_params = decode_json($box->{query_params});
- my $model = $c->model($box->{model});
- next if !$model;
- my $rs = $model->select(%$q_params);
- my $result = '';
- my $template = $box->{template};
- if ($tt->process(\$template, {items => $rs}, \$result)) {
- push @$sidebar_items, $result;
- }
- }
- $c->app->log->debug(dumper($sidebar_items));
- #$c->app->log->debug(dumper($stories));
- $c->render(stories => $stories, boxes => $sidebar_items);
+ $c->render(stories => $stories, sidebar => 1);
}
sub journals {