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 )