App-SD
view release on metacpan or search on metacpan
lib/App/SD/Server/View.pm view on Meta::CPAN
for my $prop (@BASIC_PROPS) {
next if $prop =~ /^(?:status|component|milestone|created|description)$/;
div { {class is 'widget '.$prop};
widget( function => $f, prop => $prop ) };
}
div { {class is 'widget description'};
widget( function => $f, prop => 'description', type => 'textarea', autocomplete => '0' ) };
}
};
div { class is 'submit';
input { attr { value => 'Save', type => 'submit' } };
};
div { class is 'comment-form';
h2 { 'Initial comments on this ticket' };
my $c = function(
record => App::SD::Model::Comment->new(
app_handle => $self->app_handle ),
action => 'create',
order => 2,
name => 'create-ticket-comment'
);
param_from_function(
function => $c,
prop => 'ticket',
from_function => $f,
from_result => 'record_uuid'
);
for my $prop (qw(content)) {
div { widget( function => $c, prop => $prop, type => 'textarea', autocomplete => 0)};
}
div { class is 'submit';
input { attr { value => 'Save', type => 'submit' } };
}
}
};
};
template footer => sub {
div { id is 'project-versions';
outs("SD $App::SD::VERSION - Issue tracking for the distributed age - ".
" Prophet $Prophet::VERSION");
}
};
template header => sub {
my $self = shift;
my $title = shift;
outs_raw($self->page_nav->render_as_menubar) if ($self->page_nav);
div{ class is 'logowrapper';
img { src is '/static/sd/images/sd.png';
alt is 'SD Logo',
class is 'logo'
};
};
div { class is 'project-name';
" for ".$self->app_handle->setting( label => 'project_name' )->get()->[0]};
h1 { $title };
};
template '/tickets/hot' => sub {
my $self = shift;
my $current_milestone = $self->app_handle->setting( label => 'default_milestone' )->get()->[0];
$self->show_tickets(
sub {
my $item = shift;
if ( $item->has_active_status
&& ( $item->prop('milestone') || '' ) eq $current_milestone
&& ( ( $item->prop('owner') || '' ) eq
( $item->app_handle->config->get(
key => 'user.email-address'
) || '') || !$item->prop('owner') )
)
{
return 1;
} else {
return undef;
}
}
);
};
template '/tickets/open' => sub {
my $self = shift;
$self->show_tickets (sub { my $item = shift; return $item->has_active_status ? 1 : 0; });
};
private template 'ticket_list' => sub {
my $self = shift;
my $tickets = shift;
my $id = substr(rand(10),2); # hack to get a unique id
div { { class is 'ticket-list'};
table {
{ class is 'tablesorter'; id is $id; };
thead {
row {
th { 'id'};
th {'Status'};
th {'Milestone'};
th {'Component'};
th {'Owner'};
th {'Reporter'};
th {'Due'};
th {'Created'};
}
};
tbody {
( run in 1.433 second using v1.01-cache-2.11-cpan-df04353d9ac )