Mojito
view release on metacpan or search on metacpan
lib/Mojito.pm view on Meta::CPAN
# Load some parts to the page_struct
$page_struct->{default_format} = $params->{wiki_language};
$page_struct->{page_html} = $self->render_page($page_struct);
$page_struct->{body_html} = $self->render_body($page_struct);
$page_struct->{title} = $self->intro_text( $page_struct->{body_html} );
if ($params->{public}) {
$page_struct->{public} = 1;
}
my $id = $self->create($page_struct);
$params->{id} = $id;
# Put into repo
$params->{username} = $self->username;
$self->commit_page($page_struct, $params);
return $self->base_url . 'page/' . $id . '/edit';
}
=head2 preview_page
AJAX preview of a page (parse and render, save when button pressed)
=cut
sub preview_page {
my ( $self, $params ) = @_;
$self->parser->page($params->{content});
$self->parser->default_format($params->{wiki_language});
my $page_struct = $self->page_structure;
if ( $params->{extra_action}
&& ( $params->{extra_action} eq 'save' )
&& ( $params->{'mongo_id'} ) )
{
$page_struct->{page_html} = $self->render_page($page_struct);
$page_struct->{body_html} = $self->render_body($page_struct);
$page_struct->{title} = $self->intro_text( $page_struct->{body_html} );
$self->update( $params->{'mongo_id'}, $page_struct );
}
elsif ( $params->{'mongo_id'} ) {
# Auto update this stuff so the user doesn't have to even think about clicking save button
# TODO: add title, page and body html to page_struct like above.
# Do we even need these two branches given that we're autosaving now.
# TODO: on new page, insert to get an id then update to that from the start
$page_struct->{title} = $params->{page_title}||'no title';
$self->update( $params->{'mongo_id'}, $page_struct );
}
my $rendered_content = $self->render_body($page_struct);
my $response_href = { rendered_content => $rendered_content, message => $page_struct->{message} };
return $response_href;
}
=head2 update_page
Update a page given: content, id and base_url
=cut
sub update_page {
my ( $self, $params ) = @_;
$self->parser->page($params->{content});
$self->parser->default_format($params->{wiki_language});
my $page = $self->page_structure;
# Store rendered parts as well. May as well until proven wrong.
$page->{page_html} = $self->render_page($page);
$page->{body_html} = $self->render_body($page);
$page->{title} = $self->intro_text( $page->{body_html} );
# Add a feed if there is such a param
if (my $feeds = $params->{feeds}) {
# Allow : to separate multiple feeds. e.g. ?feeds=ironman:chatterbox
my @feeds = split ':', $feeds;
$page->{feeds} = [@feeds];
# A document that is part of a feed is considered public by default
$page->{public} = 1;
}
if ($params->{public}) {
$page->{public} = 1;
}
# Update the list of collections to which this doc belongs
$self->collector->editer->update_collection_membership($params);
# Save page to db
$self->update( $params->{id}, $page );
# Commit revison to git repo
# add username to params so it can used in the commit
$params->{username} = $self->username;
$self->commit_page($page, $params);
return $self->base_url . 'page/' . $params->{id};
}
=head2 edit_page_form
Present the form with a page ready to be edited.
=cut
sub edit_page_form {
my ( $self, $params ) = @_;
my $page = $self->read( $params->{id} );
my $rendered_content = $self->render_body($page);
return $self->fillin_edit_page( $page, $rendered_content, $params->{id} );
}
=head2 view_page
Given a page id, we retrieve its page from the db and return
the HTML form of the page to the browser.
=cut
sub view_page {
my ( $self, $params ) = @_;
( run in 0.980 second using v1.01-cache-2.11-cpan-364913b4093 )