A bunch of work.

master
Blog Manager Robot 3 years ago
parent 158fe3bc66
commit cfb803cda6
  1. 2
      Web/lib/MJB/Web.pm
  2. 29
      Web/lib/MJB/Web/Controller/Dashboard.pm
  3. 29
      Web/templates/dashboard/blog.html.ep
  4. 52
      Web/templates/dashboard/blog_post.html.ep
  5. 52
      Web/templates/dashboard/blog_post_create.html.ep
  6. 38
      Web/templates/dashboard/blog_posts.html.ep
  7. 8
      libs/MJB-Backend-Jekyll/lib/MJB/Backend/Jekyll.pm
  8. 13
      libs/MJB-Backend-Jekyll/lib/MJB/Backend/Jekyll/MarkdownFile.pm

@ -117,6 +117,8 @@ sub startup ($self) {
$auth->get ( '/dashboard' )->to('Dashboard#index' )->name('show_dashboard' ); $auth->get ( '/dashboard' )->to('Dashboard#index' )->name('show_dashboard' );
$auth->get ( '/dashboard/blog/:id' )->to('Dashboard#blog' )->name('show_dashboard_blog' ); $auth->get ( '/dashboard/blog/:id' )->to('Dashboard#blog' )->name('show_dashboard_blog' );
$auth->get ( '/dashboard/blog/:id/posts' )->to('Dashboard#blog_posts' )->name('show_dashboard_blog_posts' ); $auth->get ( '/dashboard/blog/:id/posts' )->to('Dashboard#blog_posts' )->name('show_dashboard_blog_posts' );
$auth->get ( '/dashboard/blog/:id/post/*mdfile' )->to('Dashboard#blog_post' )->name('show_dashboard_blog_post' );
$auth->get ( '/dashboard/blog/:id/post' )->to('Dashboard#blog_post_create' )->name('show_dashboard_blog_post_create' );
# Blog Management # Blog Management
$auth->get ( '/blog/create' )->to('Blog#create' )->name('show_blog_create' ); $auth->get ( '/blog/create' )->to('Blog#create' )->name('show_blog_create' );

@ -39,4 +39,33 @@ sub blog_posts ( $c ) {
my $blog_posts = $c->stash->{blog_posts} = [ map { $_->read } @{$c->jekyll($blog->domain->name)->list_posts} ]; my $blog_posts = $c->stash->{blog_posts} = [ map { $_->read } @{$c->jekyll($blog->domain->name)->list_posts} ];
} }
sub blog_post ( $c ) {
my $blog = $c->stash->{blog} = $c->db->blog( $c->param('id') );
if ( $blog->person->id ne $c->stash->{person}->id ) {
$c->render(
text => "Error: This blog isn't owned by you.",
status => 404,
format => 'txt',
);
return;
}
my $post = $c->stash->{post} = $c->jekyll($blog->domain->name)->get_post( $c->param('mdfile') );
}
sub blog_post_create ( $c ) {
my $blog = $c->stash->{blog} = $c->db->blog( $c->param('id') );
if ( $blog->person->id ne $c->stash->{person}->id ) {
$c->render(
text => "Error: This blog isn't owned by you.",
status => 404,
format => 'txt',
);
return;
}
}
1; 1;

@ -7,6 +7,35 @@
</ol> </ol>
</nav> </nav>
<h3 class="h3 mt-4 mb-4"><a target="_blank" style="text-decoration: none" href="https://<%= $blog->domain->name %>"><%= $blog->domain->name %></h3>
<div class="row">
<div class="col">
<div class="float-end">
<a style="text-decoration: none;" href="<%= $c->url_for( 'show_dashboard_blog_post_create' ) %>">
<span style="color: green; width: 32px; height: 32px;" data-feather="plus-circle"></span>
<cpan style="color: black; vertical-align: 30%; font-size: 16px">New Post</span>
</a>
</div>
</div>
</div>
<ul class="nav nav-tabs">
<li class="nav-item">
<a class="nav-link active" aria-current="page" href="<%= $c->url_for( 'show_dashboard_blog' ) %>">Info</a>
</li>
<li class="nav-item">
<a class="nav-link" href="<%= $c->url_for( 'show_dashboard_blog_posts' ) %>">Posts</a>
</li>
<li class="nav-item">
<a class="nav-link" href="<%= $c->url_for( 'show_dashboard_blog_settings' ) %>">Settings</a>
</li>
<li class="nav-item">
<a class="nav-link" href="<%= $c->url_for( 'show_dashboard_blog_hooks' ) %>">Hooks</a>
</li>
</ul>
% if ( $blog ) { % if ( $blog ) {
<h3 class="h3 mt-5 mb-3">My Websites</h3> <h3 class="h3 mt-5 mb-3">My Websites</h3>
<table style="border: 1px solid #ccc" class="table mb-5"> <table style="border: 1px solid #ccc" class="table mb-5">

@ -0,0 +1,52 @@
% layout 'standard', title => 'Dashboard', sb_active => 'dashboard';
<nav aria-label="breadcrumb" class="mt-3 mb-3">
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="<%= $c->url_for( 'show_dashboard' ) %>">Dashboard</a></li>
<li class="breadcrumb-item active" aria-current="page"><%= $blog->domain->name %></li>
</ol>
</nav>
<h3 class="h3 mt-4 mb-4"><a target="_blank" style="text-decoration: none" href="https://<%= $blog->domain->name %>"><%= $blog->domain->name %></h3>
<ul class="nav nav-tabs">
<li class="nav-item">
<a class="nav-link" aria-current="page" href="<%= $c->url_for( 'show_dashboard_blog' ) %>">Info</a>
</li>
<li class="nav-item">
<a class="nav-link" href="<%= $c->url_for( 'show_dashboard_blog_posts' ) %>">Posts</a>
</li>
<li class="nav-item">
<a class="nav-link active" href="#">Post Editor</a>
</li>
<li class="nav-item">
<a class="nav-link" href="<%= $c->url_for( 'show_dashboard_blog_settings' ) %>">Settings</a>
</li>
<li class="nav-item">
<a class="nav-link" href="<%= $c->url_for( 'show_dashboard_blog_hooks' ) %>">Hooks</a>
</li>
</ul>
<form>
<div class="mt-3 mb-3">
<label for="postTitle" class="col-sm-2 col-form-label">Title</label>
<input type="text" class="form-control" id="postTitle" name="postTitle" value="<%= $post->headers->{title} %>">
</div>
<div class="mb-3">
<label for="postDate" class="col-sm-2 col-form-label">Date</label>
<input type="text" class="form-control" id="postDate" name="postDate" value="<%= $post->headers->{date} %>">
</div>
<div class="mb-3">
<label for="postContent" class="form-label">Post Content</label>
<textarea class="form-control" id="postContent" name="postContent" rows="25"><%= $post->markdown %></textarea>
</div>
<div class="mb-3">
<input type="submit" class="btn btn-primary btn-sm float-end" width="100%" value="Update Post">
</div>
</form>

@ -0,0 +1,52 @@
% layout 'standard', title => 'Dashboard', sb_active => 'dashboard';
<nav aria-label="breadcrumb" class="mt-3 mb-3">
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="<%= $c->url_for( 'show_dashboard' ) %>">Dashboard</a></li>
<li class="breadcrumb-item active" aria-current="page"><%= $blog->domain->name %></li>
</ol>
</nav>
<h3 class="h3 mt-4 mb-4"><a target="_blank" style="text-decoration: none" href="https://<%= $blog->domain->name %>"><%= $blog->domain->name %></h3>
<ul class="nav nav-tabs">
<li class="nav-item">
<a class="nav-link" aria-current="page" href="<%= $c->url_for( 'show_dashboard_blog' ) %>">Info</a>
</li>
<li class="nav-item">
<a class="nav-link" href="<%= $c->url_for( 'show_dashboard_blog_posts' ) %>">Posts</a>
</li>
<li class="nav-item">
<a class="nav-link active" href="#">Post Creator</a>
</li>
<li class="nav-item">
<a class="nav-link" href="<%= $c->url_for( 'show_dashboard_blog_settings' ) %>">Settings</a>
</li>
<li class="nav-item">
<a class="nav-link" href="<%= $c->url_for( 'show_dashboard_blog_hooks' ) %>">Hooks</a>
</li>
</ul>
<form>
<div class="mt-3 mb-3">
<label for="postTitle" class="col-sm-2 col-form-label">Title</label>
<input type="text" class="form-control" id="postTitle" name="postTitle" value="<%= $c->stash->{form_title} %>">
</div>
<div class="mb-3">
<label for="postDate" class="col-sm-2 col-form-label">Date</label>
<input type="text" class="form-control" id="postDate" name="postDate" value="<%= $c->stash->{form_date} %>">
</div>
<div class="mb-3">
<label for="postContent" class="form-label">Post Content</label>
<textarea class="form-control" id="postContent" name="postContent" rows="25"><%= $c->stash->{form_content} %></textarea>
</div>
<div class="mb-3">
<input type="submit" class="btn btn-primary btn-sm float-end" width="100%" value="Update Post">
</div>
</form>

@ -7,31 +7,30 @@
</ol> </ol>
</nav> </nav>
% if ( $blog ) { <h3 class="h3 mt-4 mb-4"><a target="_blank" style="text-decoration: none" href="https://<%= $blog->domain->name %>"><%= $blog->domain->name %></h3>
<h3 class="h3 mt-5 mb-3">My Websites</h3>
<table style="border: 1px solid #ccc" class="table mb-5"> <ul class="nav nav-tabs">
<tbody> <li class="nav-item">
<tr> <a class="nav-link" aria-current="page" href="<%= $c->url_for( 'show_dashboard_blog' ) %>">Info</a>
<th class="text-nowrap">Domain</th> </li>
<th class="text-nowrap">Status Link</th> <li class="nav-item">
</tr> <a class="nav-link active" href="<%= $c->url_for( 'show_dashboard_blog_posts' ) %>">Posts</a>
</thead> </li>
<tbody> <li class="nav-item">
<tr> <a class="nav-link" href="<%= $c->url_for( 'show_dashboard_blog_settings' ) %>">Settings</a>
<td><a href="https://<%= $blog->domain->name %>"><%= $blog->domain->name %></a></td> </li>
<td><a href="<%= $c->url_for( 'show_dashboard_blog', { id => $blog->id } ) %>">Manage Blog</a></td> <li class="nav-item">
</tr> <a class="nav-link" href="<%= $c->url_for( 'show_dashboard_blog_hooks' ) %>">Hooks</a>
</tbody> </li>
</table> </ul>
% }
% if ( $blog_posts ) { % if ( $blog_posts ) {
<h3 class="h3 mt-5 mb-3">My Posts</h3> <table style="border: 1px solid #ccc" class="table mt-5">
<table style="border: 1px solid #ccc" class="table mb-5">
<tbody> <tbody>
<tr> <tr>
<th class="text-nowrap">Title</th> <th class="text-nowrap">Title</th>
<th class="text-nowrap">Date</th> <th class="text-nowrap">Date</th>
<th class="text-nowrap">Edit</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
@ -39,6 +38,7 @@
<tr> <tr>
<td><a href="<%= $c->url_for( 'show_dashboard_blog', { id => $blog->id } ) %>"><%= $post->headers->{title} %></a></td> <td><a href="<%= $c->url_for( 'show_dashboard_blog', { id => $blog->id } ) %>"><%= $post->headers->{title} %></a></td>
<td><a href="<%= $c->url_for( 'show_dashboard_blog', { id => $blog->id } ) %>"><%= $post->headers->{date} %></a></td> <td><a href="<%= $c->url_for( 'show_dashboard_blog', { id => $blog->id } ) %>"><%= $post->headers->{date} %></a></td>
<td><a href="<%= $c->url_for( 'show_dashboard_blog_post', { id => $blog->id, mdfile => $post->filename } ) %>">Edit Post</a></td>
</tr> </tr>
% } % }
</tbody> </tbody>

@ -97,6 +97,14 @@ sub list_posts {
return [ @files ]; return [ @files ];
} }
sub get_post {
my ( $self, $filename ) = @_;
return MJB::Backend::Jekyll::MarkdownFile->new(
path => $self->repo_path . "/_posts/" . $filename,
)->read;
}
sub get_title_of_post { sub get_title_of_post {
my ( $self, $file ) = @_; my ( $self, $file ) = @_;

@ -8,6 +8,16 @@ has path => (
required => 1, required => 1,
); );
has filename => (
is => 'lazy',
);
sub _build_filename {
my ( $self ) = @_;
return (split( /\//, $self->path ))[-1];
}
has headers => ( has headers => (
is => 'rw', is => 'rw',
default => sub { return +{} }, default => sub { return +{} },
@ -31,13 +41,14 @@ sub read {
my ( $yaml, $markdown ) = ( undef, undef ); my ( $yaml, $markdown ) = ( undef, undef );
while ( defined( my $line = <$lf> ) ) { while ( defined( my $line = <$lf> ) ) {
$sep_count++ if $line =~ /^---$/;
if ( $sep_count < 2 ) { if ( $sep_count < 2 ) {
$yaml .= $line; $yaml .= $line;
} else { } else {
$markdown .= $line; $markdown .= $line;
} }
$sep_count++ if $line =~ /^---$/;
} }
$self->headers( Load($yaml) ); $self->headers( Load($yaml) );

Loading…
Cancel
Save