Beagle

 view release on metacpan or  search on metacpan

lib/Beagle/Web.pm  view on Meta::CPAN

            map { { label => $_, value => $_ } }
              qw/plain wiki markdown pod html/
        ],
    };
    push @list, draft => { type => 'boolean', } unless $type eq 'info';

    @list = _fill_values( $entry, @list );
    return wantarray ? @list : \@list;
}

sub _fill_values {
    my $entry  = shift;
    my @fields = @_;
    my @filled;
    while (@fields) {
        my $name = shift @fields;
        my $opt  = shift @fields;
        $opt->{default} = $entry->serialize_field($name);

        if ( $name eq 'author' && !$opt->{default} ) {
            $opt->{default} = current_user();
        }
        push @filled, $name, $opt;
    }
    return @filled;
}

use Plack::Builder;

sub app {
    require Beagle::Web::Router;

    builder {
        for my $root ( system_roots() ) {
            enable 'Static',
              path         => sub { s!^/system/!! },
              root         => $root,
              pass_through => 1;
        }

        \&handle_request;
    }
}

my ( $bh, %updated, %bh, $name, $names, $prefix, $static, $router, %xslate );
$prefix = '/';
my ( %css, %js );
my $req;

sub template_exists {
    shift @_ if @_ && $_[0] eq 'Beagle::Web';
    my $name = shift;
    return unless defined $name;
    $name .= '.tx' unless $name =~ /\.tx$/;
    my @roots = (
        map( { catdir( $_, $bh->info->layout ), } web_template_roots() ),
        map( { catdir( $_, 'base' ), } web_template_roots() )
    );
    my @parts = split /\//, $name;
    for my $root (@roots) {
        return 1 if -e encode( locale_fs => catfile( $root, @parts ) );
    }
    return;
}

sub system_file_exists {
    shift @_ if @_ && $_[0] eq 'Beagle::Web';
    my $name = shift;
    return unless defined $name;
    my @roots = system_roots();
    my @parts = split /\//, $name;
    for my $root (@roots) {
        return 1 if -e encode( locale_fs => catfile( $root, @parts ) );
    }
    return;
}

use Text::Xslate;

sub xslate {
    shift @_ if @_ && $_[0] eq 'Beagle::Web';
    my $n = shift   || $name;
    my $b = $bh{$n} || $bh;
    return $xslate{$n} if $xslate{$n};
    return $xslate{$n} = Text::Xslate->new(
        path => [
            map( { catdir( $_, $b->info->layout ) } web_template_roots() ),
            map( { catdir( $_, 'base' ) } web_template_roots() ),
        ],
        cache_dir   => catdir( File::Spec->tmpdir, 'beagle_web_cache' ),
        cache       => 1,
        input_layer => ':utf8',
        function    => {
            substr => sub {
                my ( $content, $number ) = @_;
                $number ||= 40;
                utf8::decode($content);
                if ( length $content > $number ) {
                    $content = substr( $content, 0, $number - 4 ) . '...';
                }
                utf8::encode($content);
                return $content;
            },
            length => sub {
                return length shift;
            },
            size => sub {
                my $value = shift;
                return 0 unless $value;
                return 1 unless ref $value;
                if ( ref $value eq 'ARRAY' ) {
                    return scalar @$value;
                }
                elsif ( ref $value eq 'HASH' ) {
                    my $size = 0;
                    for ( keys %$value ) {
                        if ( ref $value->{$_} && ref $value->{$_} eq 'ARRAY' ) {
                            $size += @{ $value->{$_} };
                        }
                        else {
                            $size += 1;
                        }
                    }
                    return $size;
                }
                return;
            },
            split_id => sub {
                join '/', split_id(shift);
            },
            email_name => sub {
                require Email::Address;
                my $value = shift;



( run in 0.887 second using v1.01-cache-2.11-cpan-ceb78f64989 )