view release on metacpan or search on metacpan
lib/App/GitHooks.pm view on Meta::CPAN
our $VERSION = '1.9.0';
=head1 DESCRIPTION
C<App::GitHooks> is an extensible and easy to configure git hooks framework that supports many plugins.
Here's an example of it in action, running the C<pre-commit> hook checks before
the commit message can be entered:
=begin html
view all matches for this distribution
view release on metacpan or search on metacpan
docs/index.html view on Meta::CPAN
margin: 0;
padding: 0;
box-sizing: border-box;
}
@keyframes float {
0% { transform: translateY(0px); }
50% { transform: translateY(-20px); }
100% { transform: translateY(0px); }
}
@keyframes glow {
0% { box-shadow: 0 0 20px rgba(102, 126, 234, 0.4); }
50% { box-shadow: 0 0 30px rgba(102, 126, 234, 0.8); }
100% { box-shadow: 0 0 20px rgba(102, 126, 234, 0.4); }
}
@keyframes fadeInUp {
from {
opacity: 0;
transform: translateY(30px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
@keyframes slideInLeft {
from {
opacity: 0;
transform: translateX(-50px);
}
to {
opacity: 1;
transform: translateX(0);
}
}
@keyframes slideInRight {
from {
opacity: 0;
transform: translateX(50px);
}
to {
opacity: 1;
transform: translateX(0);
}
}
@keyframes starfield {
0% { transform: translateY(0) rotate(0deg); }
100% { transform: translateY(-100vh) rotate(360deg); }
}
body {
docs/index.html view on Meta::CPAN
.shooting-star:nth-child(3n) {
animation-delay: -3s;
animation-duration: 3.5s;
}
@keyframes shootingStar {
0% {
opacity: 0;
transform: translateX(-100px) translateY(50px);
}
10% {
docs/index.html view on Meta::CPAN
const randomStartY = Math.random() * 100 - 50; // Entre -50px et +50px de variation
const randomEndY = Math.random() * 300 - 150; // Entre -150px et +150px de variation finale
// Créer une animation CSS personnalisée pour cette étoile
const animationName = `shootingStar${i}`;
const keyframes = `
@keyframes ${animationName} {
0% {
opacity: 0;
transform: translateX(-100px) translateY(${randomStartY}px);
}
10% {
docs/index.html view on Meta::CPAN
}
`;
// Ajouter l'animation personnalisée au document
const style = document.createElement('style');
style.textContent = keyframes;
document.head.appendChild(style);
// Appliquer l'animation personnalisée avec durée aléatoire
const duration = 3 + Math.random() * 3; // Entre 3 et 6 secondes
shootingStar.style.animation = `${animationName} ${duration}s linear infinite`;
view all matches for this distribution
view release on metacpan or search on metacpan
bin/gitc-pass view on Meta::CPAN
# and waits to be resumed. Once resumed, verify that the conflict
# was resolved and committed. If not, let the user try again or
# die.
#
# This code is very similar to code in gitc-promote. Unfortunately, there
# were enough differences that a common framework couldn't be factored out
# cleanly.
sub let_user_resolve_conflict {
my ($changeset, $again) = @_;
if ( not $again ) {
warn "There were conflicts merging '$changeset' to master.\n";
view all matches for this distribution
view release on metacpan or search on metacpan
lib/App/Greple/frame.pm view on Meta::CPAN
package App::Greple::frame;
our $VERSION = "1.03";
=encoding utf-8
=head1 NAME
App::Greple::frame - Greple frame output module
=head1 SYNOPSIS
greple -Mframe --frame ...
=head1 DESCRIPTION
Greple -Mframe module provide a capability to put surrounding frames
for each blocks.
C<top>, C<middle> and C<bottom> frames are printed for blocks.
By default B<--join-blocks> option is enabled to collect consecutive
lines into a single block. If you don't like this, override it by
B<--no-join-blocks> option.
=head1 OPTIONS
=over 7
=item B<--frame>
=for comment
=item B<--frame-fold>
=begin html
<p><img width="75%" src="https://raw.githubusercontent.com/kaz-utashiro/greple-frame/main/images/terminal-3.png">
=end html
Set frame and fold long lines with frame-friendly prefix string.
Folding width is taken from the terminal. Or you can specify the
width by calling B<set> function with module option.
=begin comment
=item B<--frame-simple>
Set frame without folding.
=end comment
=item B<--frame-cols>
Output results in multi-column format to fit the width of the
terminal. The number of columns is automatically calculated from the
terminal width.
=item B<--frame-pages>
Output results in multi-column and paginated format.
=begin html
<p><img width="75%" src="https://raw.githubusercontent.com/kaz-utashiro/greple-frame/main/images/terminal-frame-pages.png">
=end html
=item B<--set-frame-width>=I<#>
Set frame width. You have to put this option before B<--frame>
option. See B<set> function in L</FUNCTION> section.
=back
=begin comment
Put next line in your F<~/.greplerc> to autoload B<App::Greple::frame> module.
autoload -Mframe --frame
Then you can use B<--frame> option whenever you want.
=end comment
=head1 FUNCTION
lib/App/Greple/frame.pm view on Meta::CPAN
=item B<set>(B<width>=I<n>)
Set terminal width to I<n>. Use like this:
greple -Mframe::set(width=80) ...
greple -Mframe::set=width=80 ...
If non-digit character is found in the value part, it is considered as
a Reverse Polish Notation, starting terminal width pushed on the
stack. RPN C<2/3-> means C<terminal-width / 2 - 3>.
You can use like this:
greple -Mframe::set=width=2/3- --frame --uc '(\w+::)+\w+' --git | ansicolumn -PC2
=begin html
<p><img width="75%" src="https://raw.githubusercontent.com/kaz-utashiro/greple-frame/main/images/terminal-column.png">
=end html
=back
lib/App/Greple/frame.pm view on Meta::CPAN
sub finalize {
($mod, $argv) = @_;
}
my %frame_base = (
top => ' ââ' ,
middle => ' â® ââ¶' ,
bottom => 'âââââââ´â' ,
);
sub opt_frame {
my $pos = shift;
my $width = $param{width} //= terminal_width;
local $_ = $frame_base{$pos} or die;
if ((my $rest = $width - length) > 0) {
$_ .= (substr($_, -1, 1) x $rest);
}
$_;
}
lib/App/Greple/frame.pm view on Meta::CPAN
__DATA__
mode function
option --set-frame-width &set(width=$<shift>)
option --set-frame-column &set(column=$<shift>)
option --ansifold-with-width \
--pf "ansifold --expand --discard=EL --padding --prefix ' â ' $<shift> --width=$<shift>"
option --ansifold \
--ansifold-with-width &get(fold,width)
option --frame-color-filename \
--colormap FILE=555/CE --format FILE=' %s'
option --frame-simple \
--line-number --join-blocks \
--filestyle=once \
--colormap LINE= --format LINE='%5d â ' \
--blockend= \
--show-frame-middle
option --show-frame-top --frame_top &opt_frame(top)
option --show-frame-middle --frame_middle &opt_frame(middle)
option --show-frame-bottom --frame_bottom &opt_frame(bottom)
option --frame-plain --frame-color-filename --frame-simple
option --frame-fold --frame-plain --ansifold
option --frame --frame-fold
option --frame-classic-plain --frame-simple --show-frame-top --show-frame-bottom
option --frame-classic-fold --frame-classic-plain --ansifold
option --frame-classic --frame-classic-fold
##
## EXPERIMENTAL: --frame-pages, --frame-cols
##
# RPN
define @TEXT_WIDTH $ENV{GREPLE_FRAME_PAGES_WIDTH}
define @MARGIN $ENV{GREPLE_FRAME_PAGES_MARGIN}
lib/App/Greple/frame.pm view on Meta::CPAN
ansicolumn --border=box -U @COLUMN
define $PAGES \
ansicolumn --border=box -P -C @COLUMN
option --frame-set-params \
&set(width=@WIDTH)
option --frame-col \
--frame-set-params \
--pf "$FOLD" \
--frame-plain
option --frame-pages \
--frame-set-params \
--pf "$FOLD | $PAGES" \
--frame-plain
option --frame-cols \
--frame-set-params \
--pf "$FOLD | $COLS" \
--frame-plain
option --frame-columns --frame-cols
option --frame-pages-classic \
--frame-set-params \
--pf "$FOLD | $PAGES" \
--frame-classic-plain
view all matches for this distribution
view release on metacpan or search on metacpan
share/jtca-katakana-guide-3.pl view on Meta::CPAN
ãã£ããã£ã¼ capture ï¼ï¼ï¼
ãã£ã©ã¯ã¿ã¼ character ï¼ï¼ï¼
ãã£ã©ãã³ caravan ï¼
ãã£ãªãã¬ã¼ã·ã§ã³ calibration ï¼ï¼ï¼ãï¼ï¼ï¼
ãã¼ key ï¼ï¼ï¼
ãã¼ãã¬ã¼ã keyframe ï¼ï¼ï¼
ãã¼ãã¼ã keyboard ï¼ï¼ï¼
ãã¼ã¯ã¼ã keyword ï¼ï¼ï¼
ã®ã¢ gear ï¼ï¼ï¼ä¾å¤
ã¯ã¡ã«ããã quartet ï¼ï¼ï¼ä¾å¤
ã¯ã¢ãã cuatroï¼ã¹ãã¤ã³èªï¼ ï¼ï¼ï¼
share/jtca-katakana-guide-3.pl view on Meta::CPAN
ããªãã«ã¼ flicker ï¼ï¼ï¼
ããªã¼ã¦ã§ã¢ freeware ï¼ï¼ï¼ãï¼ï¼ï¼ãï¼ï¼ï¼
ããªã¼ãã³ã freehand ï¼ï¼ï¼
ããªã¼ã©ã³ãµã¼ freelancer ï¼ï¼ï¼ãï¼ï¼ï¼
ãã« full ï¼ï¼ï¼
ãã¬ã¼ã frame ï¼ï¼ï¼
ããããã¼ floppy ï¼ï¼ï¼
ãã©ã¦ã¶ã¼ browser ï¼ï¼ï¼
ãã©ã¤ãã·ã¼ privacy ï¼ï¼ï¼ãï¼
ãã©ã¤ãã¼ã private ï¼
ãã©ã¤ããªã¼ primary ï¼ï¼ï¼
view all matches for this distribution
view release on metacpan or search on metacpan
lib/App/Greple/wordle/NYT.pm view on Meta::CPAN
foils foins foist folds foley folia folic folie folio folks folky folly fomes
fonda fonds fondu fones fonio fonly fonts foods foody fools foots footy foram
foray forbs forby force fordo fords forel fores forex forge forgo forks forky
forma forme forms forte forth forts forty forum forza forze fossa fosse fouat
fouds fouer fouet foule fouls found fount fours fouth fovea fowls fowth foxed
foxes foxie foyer foyle foyne frabs frack fract frags frail fraim frais frame
franc frank frape fraps frass frate frati frats fraud fraus frays freak freed
freer frees freet freit fremd frena freon frere fresh frets friar fribs fried
frier fries frigs frill frise frisk frist frita frite frith frits fritt fritz
frize frizz frock froes frogs fromm frond frons front froom frore frorn frory
frosh frost froth frown frows frowy froyo froze frugs fruit frump frush frust
lib/App/Greple/wordle/NYT.pm view on Meta::CPAN
usher epoch triad break rhino viral conic masse sonic vital trace using peach
champ baton brake pluck craze gripe weary picky acute ferry aside tapir troll
unify rebus boost truss siege tiger banal slump crank gorge query drink favor
abbey tangy panic solar shire proxy point robot prick wince crimp knoll sugar
whack mount perky could wrung light those moist shard pleat aloft skill elder
frame humor pause ulcer ultra robin cynic aroma caulk shake dodge swill tacit
other thorn trove bloke vivid spill chant choke rupee nasty mourn ahead brine
cloth hoard sweet month lapse watch today focus smelt tease cater movie saute
allow renew their slosh purge chest depot epoxy nymph found shall stove lowly
snout trope fewer shawl natal comma foray scare stair black squad royal chunk
mince shame cheek ample flair foyer cargo oxide plant olive inert askew heist
view all matches for this distribution
view release on metacpan or search on metacpan
--filestyle=style how filenames are printed (once, separate, line)
--linestyle=style how line numbers are printed (separate, line)
--blockstyle=style how block numbers are printed (separate, line)
--separate set filestyle, linestyle, blockstyle "separate"
--format LABEL=... define the format for line number and file name
--frame-top top frame line
--frame-middle middle frame line
--frame-bottom bottom frame line
FILE
--glob=glob glob target files
--chdir=dir change directory before search
--readlist get filenames from stdin
COLOR
Next example will show line numbers in five digits with tab space:
--format LINE='%05d\t'
- **--frame-top**=_string_
- **--frame-middle**=_string_
- **--frame-bottom**=_string_
Print surrounding frames before and after each block. `top` frame is
printed at the beginning, `bottom` frame at the end, `middle` frame
between blocks.
**Related options:**
**--block**/**-p** (["BLOCKS"](#blocks)),
**--color**/**--colormap** (["COLORS"](#colors))
view all matches for this distribution
view release on metacpan or search on metacpan
lib/App/Guiio/stripes/editable_box2.pm view on Meta::CPAN
{
$title_width = max($title_width, length($title_line)) ;
push @title_lines, $title_line ;
}
my ($extra_width, $extra_height) = get_box_frame_size_overhead($box_type) ;
my $display_title = (defined $title_text and $title_text ne '') ? 1 : 0 ;
$text_width = max($text_width, $title_width) if $display_title;
#if($auto_shrink)
lib/App/Guiio/stripes/editable_box2.pm view on Meta::CPAN
# }
$end_x = max($end_x, $text_width + $extra_width, $title_width + $extra_width) ;
$end_y = max($end_y, scalar(@lines) + $extra_height + scalar(@title_lines)) ;
my ($box_top, $box_left, $box_right, $box_bottom, $title_separator, $title_left, $title_right) = get_box_frame_elements($box_type, $end_x) ;
my $text = $box_top ;
for my $title_line (@title_lines)
{
lib/App/Guiio/stripes/editable_box2.pm view on Meta::CPAN
Readonly my $NAME => 1 ;
Readonly my $LEFT => 2 ;
Readonly my $BODY => 3 ;
Readonly my $RIGHT => 4 ;
sub get_box_frame_size_overhead
{
my ($box_type) = @_ ;
my @displayed_elements = grep { $_->[$DISPLAY] } @{$box_type} ;
my $extra_width = max(0, map {length} map {$_->[$LEFT]}@displayed_elements)
lib/App/Guiio/stripes/editable_box2.pm view on Meta::CPAN
}
return($extra_width, $extra_height) ;
}
sub get_box_frame_elements
{
my ($box_type, $width) = @_ ;
my ($box_top, $box_left, $box_right, $box_bottom, $title_separator, $title_left, $title_right) = map {''} (1 .. 7) ;
view all matches for this distribution
view release on metacpan or search on metacpan
inc/Spiffy.pm view on Meta::CPAN
our @EXPORT = ();
our @EXPORT_BASE = qw(field const stub super);
our @EXPORT_OK = (@EXPORT_BASE, qw(id WWW XXX YYY ZZZ));
our %EXPORT_TAGS = (XXX => [qw(WWW XXX YYY ZZZ)]);
my $stack_frame = 0;
my $dump = 'yaml';
my $bases_map = {};
sub WWW; sub XXX; sub YYY; sub ZZZ;
inc/Spiffy.pm view on Meta::CPAN
unless grep /^XXX$/, @EXPORT_BASE;
}
spiffy_filter()
if ($args->{-selfless} or $args->{-Base}) and
not $filtered_files->{(caller($stack_frame))[1]}++;
my $caller_package = $args->{-package} || caller($stack_frame);
push @{"$caller_package\::ISA"}, $self_package
if $args->{-Base} or $args->{-base};
for my $class (@{all_my_bases($self_package)}) {
next unless $class->isa('Spiffy');
inc/Spiffy.pm view on Meta::CPAN
}
package Spiffy;
sub super {
my $method;
my $frame = 1;
while ($method = (caller($frame++))[3]) {
$method =~ s/.*::// and last;
}
my @args = DB::super_args($frame);
@_ = @_ ? ($args[0], @_) : @args;
my $class = ref $_[0] ? ref $_[0] : $_[0];
my $caller_class = caller;
my $seen = 0;
my @super_classes = reverse grep {
inc/Spiffy.pm view on Meta::CPAN
for my $base_class (@base_classes) {
next if $inheritor->isa($base_class);
croak "Can't mix Spiffy and non-Spiffy classes in 'use base'.\n",
"See the documentation of Spiffy.pm for details\n "
unless $base_class->isa('Spiffy');
$stack_frame = 1; # tell import to use different caller
import($base_class, '-base');
$stack_frame = 0;
}
}
sub mixin {
my $self = shift;
view all matches for this distribution
view release on metacpan or search on metacpan
lib/App/I18N.pm view on Meta::CPAN
I18N management utility, provides an command-line interface to parse /
translate / update mo file i18n messages.
App::I18N borrows some good stuff from L<Jifty::I18N> and L<Jifty::Script::Po>
and tries to provide a general po management script for all frameworks |
applications.
=head1 USAGE
=head2 Basic flow
view all matches for this distribution
view release on metacpan or search on metacpan
bin/ikachan view on Meta::CPAN
ikachan
<img src="data:image/png;base64,${logo}" />
</h1>
<h2>join channel list</h2>
<iframe src="/channel_list"></iframe>
<h2>API usage</u2>
<h3>channel join</h3>
<section>
bin/ikachan view on Meta::CPAN
.btn-mini .label,
.btn-mini .badge {
top: 0;
}
@-webkit-keyframes progress-bar-stripes {
from {
background-position: 40px 0;
}
to {
background-position: 0 0;
}
}
@-moz-keyframes progress-bar-stripes {
from {
background-position: 40px 0;
}
to {
background-position: 0 0;
}
}
@-ms-keyframes progress-bar-stripes {
from {
background-position: 40px 0;
}
to {
background-position: 0 0;
}
}
@-o-keyframes progress-bar-stripes {
from {
background-position: 0 0;
}
to {
background-position: 40px 0;
}
}
@keyframes progress-bar-stripes {
from {
background-position: 40px 0;
}
to {
background-position: 0 0;
view all matches for this distribution
view release on metacpan or search on metacpan
lib/App/Ikaros.pm view on Meta::CPAN
__END__
=head1 NAME
App::Ikaros - distributed testing framework for jenkins
=head1 SYNOPSIS
=head3 [EXECUTOR]
lib/App/Ikaros.pm view on Meta::CPAN
runner: prove # override executor of main command
workdir: $HOME/ikaros_workspace_3
=head1 DESCRIPTION
App::Ikaros is distributed testing framework for jenkins.
=head1 METHODS
=head1 AUTHOR
view all matches for this distribution
view release on metacpan or search on metacpan
lib/App/Install.pm view on Meta::CPAN
minimvc-install
Each of these scripts comes packaged with its respective distro
(Module::Starter, Catalyst::Helper, Kwiki, and MasonX::MiniMVC
respectively) and is used to install an application or create a
framework, stub, or starting point for your own application.
If you're not familiar with any of those modules and their installers,
imagine a theoretical module Foo::Bar, providing some kind of CGI
application, which comes with a foo-install script. When you run
foo-install, it creates a directory structure like this:
view all matches for this distribution
view release on metacpan or search on metacpan
lib/App/InvestSim/GUI.pm view on Meta::CPAN
my ($total_rent_text, $rent_cap_text, $pinel_worth_text, $notary_fees_text, $total_invested_text);
# How to format the various modes of the drop-down menu.
my @modes_format;
# Add in the given frame in column 0 and 1 a label and an entry text box in the
# given row that is incremented ($row is a ref to a scalar).
sub add_input_entry {
my ($frame, $row, $key, $text, $format, $tooltip) = @_;
my (undef, $validate) = @{$values_config{$key}};
my $var_ref = \$values{$key};
$frame->new_ttk__label(-text => "${text} :")
->g_grid(-column => 0, -row => $$row, -sticky => "e", -padx => "0 2");
my $e = $frame->new_ttk__entry(-width => ENTRY_WIDTH);
$e->g_grid(-column => 1, -row => $$row++, -sticky => "we", -pady => 2);
setup_entry($e, $var_ref, $format, $validate);
if ($tooltip) {
local $Text::Wrap::columns = 50;
$e->g_tooltip__tooltip(Text::Wrap::fill('', '', $tooltip));
lib/App/InvestSim/GUI.pm view on Meta::CPAN
Tkx::font('configure', $treeview_total_font, Tkx::SplitList(Tkx::font('configure', $default_treeview_font)));
Tkx::font('configure', $treeview_total_font, -weight => 'bold');
# Build the left bar with various parameters.
{
my $frame = $root->new_ttk__frame(-padding => 3);
$frame->g_grid(-column => 0, -row => 0, -rowspan => 3, -sticky => "we");
my $row = 0;
for my $c (['invested', "Valeur du bien", \&format_euro, "Prix d'achat du bien, hors frais de notaire."],
['tax_rate', "Taux d'imposition marginal", \&format_percent],
['base_rent', "Loyer brut initial", \&format_euro],
lib/App/InvestSim/GUI.pm view on Meta::CPAN
['duration', "Durée d'investissement", \&format_year],
['notary_fees', "Frais de notaire", \&format_percent],
['loan_insurance', "Assurance décès du prêt", \&format_percent],
['other_rate', "Taux de placement autre", \&format_percent],
['surface', "Superficie (pondérée)", \&format_surface, "Surface totale habitable, additionnée, le cas échéant, de la moitié des surfaces annexes dans la limite de 8m² (utilisée seulement pour l'application des plafonds 'Pinel')."]) {
add_input_entry($frame, \$row, @$c);
}
}
# Build the top bar with the loan duration and rate values.
my @loan_duration_texts; # Re-used in the core data table.
{
my $frame = $root->new_ttk__frame(-padding => 3);
$frame->g_grid(-column => 1, -row => 0, -sticky => "nwes");
$frame->g_grid_columnconfigure(0, -weight => 1);
$frame->new_ttk__label(-text => "Durée d'emprunt (années)")
->g_grid(-column => 0, -row => 0, -sticky => "e");
$frame->new_ttk__label(-text => "Taux d'emprunt")
->g_grid(-column => 0, -row => 1, -sticky => "e");
my $loan_durations = $values{loan_durations};
my $validate_duration = $values_config{loan_durations}[1];
my $loan_rates = $values{loan_rates};
my $validate_rate = $values_config{loan_rates}[1];
for my $i (0..NUM_LOAN_DURATION-1) {
my $d = $frame->new_ttk__entry(-width => ENTRY_WIDTH);
$d->g_grid(-column => $i + 1, -row => 0, -sticky => "we");
setup_entry($d, \$loan_durations->[$i], \&format_year, $validate_duration, \$loan_duration_texts[$i]);
my $r = $frame->new_ttk__entry(-width => ENTRY_WIDTH);
$r->g_grid(-column => $i + 1, -row => 1, -sticky => "we");
setup_entry($r, \$loan_rates->[$i], \&format_percent, $validate_rate);
}
}
# Build the combo-box with the list of possible values, in its own frame.
my @modes;
$modes[MONTHLY_PAYMENT] = "Mensualité de l'emprunt (assurance comprise)";
$modes_format[MONTHLY_PAYMENT] = \&format_euro;
$modes[LOAN_COST] = "Cout total de l'emprunt (assurance comprise)";
$modes_format[LOAN_COST] = \&format_euro;
lib/App/InvestSim/GUI.pm view on Meta::CPAN
$modes[NET_GAIN] = "Gain Net de l'opération";
$modes_format[NET_GAIN] = \&format_euro;
$modes[INVESTMENT_RETURN] = "Rendement de l'opération";
$modes_format[INVESTMENT_RETURN] = \&format_percent;
{
my $frame = $root->new_ttk__frame(-padding => 5);
$frame->g_grid(-column => 1, -row => 1, -sticky => "nwes");
$frame->g_grid_columnconfigure(0, -weight => 1); # So that it extends to the whole width.
$modes_combobox = $frame->new_ttk__combobox(-state => 'readonly', -values => \@modes, -justify => 'center');
$modes_combobox->g_grid(-column => 0, -row => 0, -sticky => "we");
$modes_combobox->m_current(MONTHLY_PAYMENT);
$modes_combobox->g_bind('<<ComboboxSelected>>', \&update_displayed_mode);
}
# Build the core table with the computation output.
{
my $frame = $root->new_ttk__frame(-padding => 3);
$frame->g_grid(-column => 1, -row => 2, -sticky => "nwes");
# So that it extends to the same width as column 0 of the top bar. All other
# columns have a fixed width that is the same as the matching column in the
# top bar.
$frame->g_grid_columnconfigure(0, -weight => 1);
$frame->new_ttk__label(-text => 'Emprunt \ Durée')
->g_grid(-column => 0, -row => 0);
for my $i (0..NUM_LOAN_DURATION-1) {
$frame->new_ttk__entry(-width => ENTRY_WIDTH, -textvariable => \$loan_duration_texts[$i], -state => 'readonly', -takefocus => 0)
->g_grid(-column => $i + 1, -row => 0, -sticky => "we");
}
my $loan_amounts = $values{loan_amounts};
my $validate_amount = $values_config{loan_amounts}[1];
for my $j (0..NUM_LOAN_AMOUNT-1) {
my $w = $frame->new_ttk__entry(-width => ENTRY_WIDTH, -justify => 'right');
$w->g_grid(-column => 0, -row => $j + 1, -sticky => "we");
setup_entry($w, \$loan_amounts->[$j], \&format_euro, $validate_amount);
}
for my $i (0..NUM_LOAN_DURATION-1) {
for my $j (0..NUM_LOAN_AMOUNT-1) {
my $e = $frame->new_ttk__entry(-width => ENTRY_WIDTH, -textvariable => \$core_display_values[$i][$j],
-state => 'readonly', -justify => 'right', -takefocus => 0,
-style => 'DataTable.TEntry');
$e->g_grid(-column => $i + 1, -row => $j + 1, -sticky => "we");
$e->g_bind('<FocusIn>', sub { set_core_table_selected_state($e);
update_displayed_table($i, $j) });
lib/App/InvestSim/GUI.pm view on Meta::CPAN
}
# Build the right bar with some other input values and the output values not
# depending on the loan parameters.
{
my $frame = $root->new_ttk__frame(-padding => 3);
$frame->g_grid(-column => 2, -row => 0, -rowspan => 3, -sticky => "we");
my $row = 0;
for my $c (['rent_delay', "Delai de mise en location", \&format_year],
['loan_delay', "Durée de franchise de l'emprunt", \&format_year],
['application_fees', "Frais de dossier du prêt", \&format_euro],
['mortgage_fees', "Frais d'hypothèque", \&format_percent],
['social_tax', "CSG + CRDS + Solidarité", \&format_percent]) {
add_input_entry($frame, \$row, @$c);
}
# Just some empty white-space between the inputs and the output fields.
$frame->g_grid_rowconfigure($row++, -minsize => 10);
$frame->new_ttk__label(-text => "Revenus total du loyer (net) :")
->g_grid(-column => 0, -row => $row, -sticky => "e", -padx => "0 2");
$frame->new_ttk__entry(-width => ENTRY_WIDTH, -state => 'readonly', -textvariable => \$total_rent_text, -takefocus => 0)
->g_grid(-column => 1, -row => $row++, -sticky => "we", -pady => 2);
$frame->new_ttk__label(-text => "Plafond du loyer :")
->g_grid(-column => 0, -row => $row, -sticky => "e", -padx => "0 2");
($rent_cap_entry = $frame->new_ttk__entry(-width => ENTRY_WIDTH, -state => 'readonly', -textvariable => \$rent_cap_text, -takefocus => 0))
->g_grid(-column => 1, -row => $row++, -sticky => "we", -pady => 2);
$frame->new_ttk__label(-text => "Valeur déductible du bien :")
->g_grid(-column => 0, -row => $row, -sticky => "e", -padx => "0 2");
$frame->new_ttk__entry(-width => ENTRY_WIDTH, -state => 'readonly', -textvariable => \$pinel_worth_text, -takefocus => 0)
->g_grid(-column => 1, -row => $row++, -sticky => "we", -pady => 2);
$frame->new_ttk__label(-text => "Frais de notaire :")
->g_grid(-column => 0, -row => $row, -sticky => "e", -padx => "0 2");
$frame->new_ttk__entry(-width => ENTRY_WIDTH, -state => 'readonly', -textvariable => \$notary_fees_text, -takefocus => 0)
->g_grid(-column => 1, -row => $row++, -sticky => "we", -pady => 2);
$frame->new_ttk__label(-text => "Montant total investi :")
->g_grid(-column => 0, -row => $row, -sticky => "e", -padx => "0 2");
$frame->new_ttk__entry(-width => ENTRY_WIDTH, -state => 'readonly', -textvariable => \$total_invested_text, -takefocus => 0)
->g_grid(-column => 1, -row => $row++, -sticky => "we", -pady => 2);
}
# Build the bottom table.
$root->g_grid_columnconfigure(1, -weight => 1);
$root->g_grid_rowconfigure(3, -weight => 1);
{
my $frame = $root->new_ttk__frame(-padding => 3, -height => 550);
$frame->g_grid_propagate(0);
$frame->g_grid(-column => 0, -row => 3, -columnspan => 3, -sticky => "nwes");
$frame->g_grid_columnconfigure(0, -weight => 1);
$frame->g_grid_rowconfigure(0, -weight => 1);
$display_table = $frame->new_ttk__treeview(-height => ($values{duration} // 20) + 2);
$display_table->g_grid(-column => 0, -row => 0, -rowspan => 2, -sticky => "nwes");
# We're setting a specific font for items with the tag 'total'.
$display_table->m_tag('configure', 'total', -font => $treeview_total_font);
#my $hscroll = $frame->new_tk__scrollbar(-orient => "horizontal", -command => [$display_table, "xview"]);
#$hscroll->g_grid(-column => 0, -row => 1, -sticky => "we");
my $vscroll = $frame->new_ttk__scrollbar(-orient => "vertical", -command => [$display_table, "yview"]);
$vscroll->g_grid(-column => 1, -row => 0, -sticky => "ns");
$frame->new_ttk__sizegrip()->g_grid(-column => 1, -row => 1, -sticky => "se");
$display_table->configure(-yscrollcommand => [$vscroll, "set"]);
#$display_table->configure(-xscrollcommand => [$hscroll, "set"]);
my @headings = ('Année', 'Loyer net', 'Placements', 'Principal du prêt', 'Intérêts du prêt', 'Frais du prêt', 'Revenus imposable', 'Déficit déductible', 'Impôt', 'Solde annuel', 'Capital');
# We're not using the name of the columns (c1, c2, ...) we're only using their
lib/App/InvestSim/GUI.pm view on Meta::CPAN
clear_displayed_table();
# We don't configure the height of the table unconditionnally because doing so
# will slightly change the width of the widget for some weird reason. Forcing
# the width does not work well (and yield some ugly redraw), so we don't do it.
# All this is unused anyway now that we have verticall scrolling and a set size
# for the enclosing frame.
my $current_height = (Tkx::SplitList($display_table->m_configure('-height')))[-1];
$display_table->m_configure(-height => $values{duration} || 1) if $values{duration} != $current_height;
my $table = $computed_values[$d][$a][TABLE_DATA];
for my $i (0..$#$table) {
my $text = $i ? $i : 'Achat';
view all matches for this distribution
view release on metacpan or search on metacpan
lib/App/JobLog/TimeGrammar.pm view on Meta::CPAN
=head1 DESCRIPTION
C<App::JobLog::TimeGrammar> converts natural language time expressions into pairs of
C<DateTime> objects representing intervals. This requires disambiguating ambiguous
terms such as 'yesterday', whose interpretation varies from day to day, and 'Friday', whose
interpretation must be fixed by some frame of reference. The heuristic used by this code
is to look first for a fixed date, either a fully specified date such as 2011/2/17 or
one fixed relative to the current moment such as 'now'. If such a date is present in the time
expression it determines the context for the other date, if it is present. Otherwise
it is assumed that the closest appropriate pair of dates immediately before the current
moment are intended.
view all matches for this distribution
view release on metacpan or search on metacpan
eg/kgb-client.conf.sample view on Meta::CPAN
timeout: 5 # no point in waiting longer for localhost
- uri: http://remotehost:9999/
password: "overrides the global one"
# status-dir is used to store the last successfully contacted server
# this information is used later in order to try to contact the same server
# again (if later contact is within some not very big time frame)
status-dir: /var/cache/kgb/client-status
# a commit URL template to send to the server
# ${module}, ${branch} and ${commit} are replaced with the data from the commit
# Examples:
# "http://svn.debian.org/viewvc/kgb?view=revision&revision=${commit}"
view all matches for this distribution
view release on metacpan or search on metacpan
kritika.fatpack view on Meta::CPAN
$fatpacked{"Test/Fatal.pm"} = '#line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'TEST_FATAL';
use strict;use warnings;package Test::Fatal;$Test::Fatal::VERSION='0.05';use Carp ();use Try::Tiny 0.07;use Exporter 5.57 'import';our@EXPORT=qw(exception);our@EXPORT_OK=qw(exception success dies_ok lives_ok);our ($REAL_TBL,$REAL_CALCULATED_TBL)=(1...
TEST_FATAL
$fatpacked{"Test/MonkeyMock.pm"} = '#line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'TEST_MONKEYMOCK';
package Test::MonkeyMock;use strict;use warnings;require Carp;our$VERSION='0.05';my$registry={};my$magic_counter=0;sub new {my$class=shift;$class=ref$class if ref$class;my ($instance)=@_;my$new_package;if ($instance){$new_package=__PACKAGE__ .'::' ...
TEST_MONKEYMOCK
$fatpacked{"Test/TempDir/Tiny.pm"} = '#line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'TEST_TEMPDIR_TINY';
use 5.006002;use strict;use warnings;package Test::TempDir::Tiny;our$VERSION='0.05';use Exporter 5.57 qw/import/;our@EXPORT=qw/tempdir in_tempdir/;use Carp qw/confess/;use Cwd qw/abs_path/;use Errno qw/EEXIST ENOENT/;{no warnings 'numeric';use File...
TEST_TEMPDIR_TINY
view all matches for this distribution
view release on metacpan or search on metacpan
lib/App/LXC/Container.pm view on Meta::CPAN
=head1 KNOWN BUGS
Currently the package only supports Debian based distributions. If you're
using something different please get in touch to extend the support. (The
framework is already there, but the specific commands are missing, and
that's where I need some help.) Everything derived from Debian should be
easy to add. For RPM based distributions I've also already some ideas.
Also only X11 graphic and pulseaudio/pipewire sound has been tested so far.
Wayland probably works as well but other sound systems most surely not.
view all matches for this distribution
view release on metacpan or search on metacpan
lib/App/MFILE/WWW.pm view on Meta::CPAN
=head1 DESCRIPTION
This distro contains a foundation/framework/toolkit for developing the "front
end" portion of web applications.
L<App::MFILE::WWW> is a L<Plack> application that provides a HTTP
request-response handler (based on L<Web::Machine>), CSS and HTML source code
for an in-browser "screen", and JavaScript code for displaying various
view all matches for this distribution
view release on metacpan or search on metacpan
lib/MHFS/Plugin/GetVideo.pm view on Meta::CPAN
return ['ffmpeg', '-i', $video->{"src_file"}{"filepath"}, '-f', 'mpegts', '-codec:v', 'mpeg1video', '-codec:a', 'mp2', '-b', '0', $video->{"out_filepath"}];
}, 'ext' => 'ts', 'player_html' => $settings->{'DOCUMENTROOT'} . '/static/jsmpeg_player.html', 'minsize' => '1048576'},
'mp4' => {'lock' => 1, 'create_cmd' => sub {
my ($video) = @_;
return ['ffmpeg', '-i', $video->{"src_file"}{"filepath"}, '-c:v', 'copy', '-c:a', 'aac', '-f', 'mp4', '-movflags', 'frag_keyframe+empty_moov', $video->{"out_filepath"}];
}, 'ext' => 'mp4', 'player_html' => $settings->{'DOCUMENTROOT'} . '/static/mp4_player.html', 'minsize' => '1048576'},
'noconv' => {'lock' => 0, 'ext' => '', 'player_html' => $settings->{'DOCUMENTROOT'} . '/static/noconv_player.html', },
'mkvinfo' => {'lock' => 0, 'ext' => ''},
lib/MHFS/Plugin/GetVideo.pm view on Meta::CPAN
my @command = ('ffmpeg', '-loglevel', 'fatal');
if($request->{'qs'}{'fmp4_time'}) {
my $formattedtime = hls_audio_formattime($request->{'qs'}{'fmp4_time'});
push @command, ('-ss', $formattedtime);
}
push @command, ('-i', $fileabspath, '-c:v', 'copy', '-c:a', 'aac', '-f', 'mp4', '-movflags', 'frag_keyframe+empty_moov', '-');
my $evp = $request->{'client'}{'server'}{'evp'};
my $sent;
print "$_ " foreach @command;
$request->{'outheaders'}{'Accept-Ranges'} = 'none';
lib/MHFS/Plugin/GetVideo.pm view on Meta::CPAN
}
my $rawts = substr($data, 0, 2, '');
my $rawflag = substr($data, 0, 1, '');
my $lacing = unpack('C', $rawflag) & 0x6;
my $framecnt;
my @sizes;
# XIPH
if($lacing == 0x2) {
$framecnt = unpack('C', substr($data, 0, 1, ''))+1;
my $firstframessize = 0;
for(my $i = 0; $i < ($framecnt-1); $i++) {
my $fsize = 0;
while(1) {
my $val = unpack('C', substr($data, 0, 1, ''));
$fsize += $val;
last if($val < 255);
}
push @sizes, $fsize;
$firstframessize += $fsize;
}
push @sizes, (length($data) - $firstframessize);
}
# EBML
elsif($lacing == 0x6) {
$framecnt = unpack('C', substr($data, 0, 1, ''))+1;
my $last = read_and_parse_vint_from_buf(\$data);
push @sizes, $last;
my $sum = $last;
for(my $i = 0; $i < ($framecnt - 2); $i++) {
my $width;
my $offset = read_and_parse_vint_from_buf(\$data, \$width);
# multiple by 2^bitwidth - 1 (with adjusted bitwidth)
my $desiredbits = (8 * $width) - ($width+1);
my $subtract = (1 << $desiredbits) - 1;
lib/MHFS/Plugin/GetVideo.pm view on Meta::CPAN
say "lastlast $lastlast";
push @sizes, $lastlast;
}
# fixed
elsif($lacing == 0x4) {
$framecnt = unpack('C', substr($data, 0, 1, ''))+1;
my $framesize = length($data) / $framecnt;
for(my $i = 0; $i < $framecnt; $i++) {
push @sizes, $framesize;
}
}
# no lacing
else {
push @sizes, length($data);
lib/MHFS/Plugin/GetVideo.pm view on Meta::CPAN
return {
'trackno' => $trackno,
'rawts' => $rawts,
'rawflag' => $rawflag,
'frame_lengths' => \@sizes,
'data' => $data,
'ts' => unpack('s>', $rawts)
};
}
lib/MHFS/Plugin/GetVideo.pm view on Meta::CPAN
if(scalar(@tracks) == 0) {
return undef;
}
my $segmentelm = $ebml->{'elements'}[0];
my %matroska = ('ebml' => $ebml, 'tsscale' => $tsval, 'rawduration' => $scaledduration, 'duration' => $duration, 'tracks' => \@tracks, 'segment_data_start' => {'size' => $segmentelm->{'size'}, 'id' => $segmentelm->{'id'}, 'fileoffset' => tell($eb...
return \%matroska;
}
sub matroska_get_audio_track {
my ($matroska) = @_;
lib/MHFS/Plugin/GetVideo.pm view on Meta::CPAN
return undef;
}
sub matroska_ts_to_sample {
my ($matroska, $samplerate, $ts) = @_;
my $curframe = int(($ts * $samplerate / 1000000000)+ 0.5);
return $curframe;
}
sub matroska_get_gop {
my ($matroska, $track, $timeinseconds) = @_;
my $tid = $track->{&EBMLID_TrackNumber}{'value'};
lib/MHFS/Plugin/GetVideo.pm view on Meta::CPAN
next;
}
$prevcluster = undef;
my $blockduration = ((1/24) * scalar(@{$block->{'frame_lengths'}}));
if($timeinseconds < ($blocktime + $blockduration)) {
say 'got GOP at ' . $matroska->{'dc'}{'firstblk'};
return {'goptime' => $matroska->{'dc'}{'firstblk'}};
last;
}
lib/MHFS/Plugin/GetVideo.pm view on Meta::CPAN
}
sub matroska_seek_track {
my ($matroska, $track, $pcmFrameIndex) = @_;
my $tid = $track->{&EBMLID_TrackNumber}{'value'};
$matroska->{'curframe'} = 0;
$matroska->{'curpaks'} = [];
my $samplerate = $track->{&EBMLID_AudioSampleRate};
my $pcmFrameLen = $track->{'PCMFrameLength'};
if(!$pcmFrameLen) {
warn("Unknown codec");
lib/MHFS/Plugin/GetVideo.pm view on Meta::CPAN
my $prevcluster;
my $desiredcluster;
while(1) {
my $cluster = matroska_read_cluster_metadata($matroska);
last if(!$cluster);
my $curframe = matroska_ts_to_sample($matroska, $samplerate, $cluster->{'ts'});
#$curframe = int(($curframe/$pcmFrameLen)+0.5)*$pcmFrameLen; # requires revert cluster
$curframe = ceil_div($curframe, $pcmFrameLen) * $pcmFrameLen;
# this cluster could contain our frame, save it's info
if($curframe <= $pcmFrameIndex) {
$prevcluster = $desiredcluster;
$desiredcluster = $cluster;
$desiredcluster->{'frameIndex'} = $curframe;
if($prevcluster) {
$prevcluster->{'prevcluster'} = undef;
$desiredcluster->{'prevcluster'} = $prevcluster;
}
}
# this cluster is at or past the frame, breakout
if($curframe >= $pcmFrameIndex){
last;
}
}
say "before dc check";
return undef if(! $desiredcluster);
lib/MHFS/Plugin/GetVideo.pm view on Meta::CPAN
ebml_set_cluster($ebml, $desiredcluster);
$matroska->{'dc'} = $desiredcluster;
# find a valid track block that includes pcmFrameIndex;
my $block;
my $blockframe;
while(1) {
$block = matroska_get_track_block($matroska, $tid);
if($block) {
$blockframe = matroska_block_calc_frame($matroska, $block, $samplerate, $pcmFrameLen);
if($blockframe > $pcmFrameIndex) {
$block = undef;
}
}
if(! $block) {
if(! $prevcluster) {
lib/MHFS/Plugin/GetVideo.pm view on Meta::CPAN
next;
}
$prevcluster = undef;
my $pcmSampleCount = ($pcmFrameLen * scalar(@{$block->{'frame_lengths'}}));
if($pcmFrameIndex < ($blockframe + $pcmSampleCount)) {
if((($pcmFrameIndex - $blockframe) % $pcmFrameLen) != 0) {
say "Frame index does not align with block!";
return undef;
}
last;
}
}
# add the data to packs
my $offset = 0;
while($blockframe < $pcmFrameIndex) {
my $len = shift @{$block->{'frame_lengths'}};
$offset += $len;
$blockframe += $pcmFrameLen;
}
$matroska->{'curframe'} = $pcmFrameIndex;
foreach my $len (@{$block->{'frame_lengths'}}) {
push @{$matroska->{'curpaks'}}, substr($block->{'data'}, $offset, $len);
$offset += $len;
}
return 1;
}
lib/MHFS/Plugin/GetVideo.pm view on Meta::CPAN
say 'blockts ' . $block->{'ts'};
my $time = ($matroska->{'dc'}->{'rawts'} + $block->{'ts'}) * $matroska->{'tsscale'};
return ($time/1000000000);
}
sub matroska_block_calc_frame {
my ($matroska, $block, $samplerate, $pcmFrameLen) = @_;
say 'clusterts ' . ($matroska->{'dc'}->{'ts'}/1000000000);
say 'blockts ' . $block->{'ts'};
my $time = ($matroska->{'dc'}->{'rawts'} + $block->{'ts'}) * $matroska->{'tsscale'};
say 'blocktime ' . ($time/1000000000);
my $calcframe = matroska_ts_to_sample($matroska, $samplerate, $time);
return round($calcframe/$pcmFrameLen)*$pcmFrameLen;
}
sub matroska_read_track {
my ($matroska, $track, $pcmFrameIndex, $numsamples, $formatpacket) = @_;
my $tid = $track->{&EBMLID_TrackNumber}{'value'};
lib/MHFS/Plugin/GetVideo.pm view on Meta::CPAN
warn("Unknown codec");
return undef;
}
# find the cluster that might have the start of our audio
if($matroska->{'curframe'} != $pcmFrameIndex) {
say "do seek";
if(!matroska_seek_track($matroska, $track, $pcmFrameIndex)) {
return undef;
}
}
my $outdata;
my $destframe = $matroska->{'curframe'} + $numsamples;
while(1) {
# add read audio
while(@{$matroska->{'curpaks'}}) {
my $pak = shift @{$matroska->{'curpaks'}};
$outdata .= $formatpacket->($pak, $samplerate);
$matroska->{'curframe'} += $pcmFrameLen;
if($matroska->{'curframe'} == $destframe) {
say "done, read enough";
return $outdata;
}
}
lib/MHFS/Plugin/GetVideo.pm view on Meta::CPAN
return $outdata;
}
# add the data to paks
my $offset = 0;
foreach my $len (@{$block->{'frame_lengths'}}) {
push @{$matroska->{'curpaks'}}, substr($block->{'data'}, $offset, $len);
$offset += $len;
}
}
}
view all matches for this distribution
view release on metacpan or search on metacpan
lib/App/MaMGal/MplayerWrapper.pm view on Meta::CPAN
App::MaMGal::MplayerWrapper::ExecutionFailureException->throw("Fork failed: $!");
} elsif ($pid == 0) {
# Child
open(STDOUT, ">${dir}/stdout") or App::MaMGal::MplayerWrapper::ExecutionFailureException->throw("Cannot open \"${dir}/stdout\" for writing: $!");
open(STDERR, ">${dir}/stderr") or App::MaMGal::MplayerWrapper::ExecutionFailureException->throw("Cannot open \"${dir}/stderr\" for writing: $!");
my @cmd = ('mplayer', $film_path, '-noautosub', '-nosound', '-vo', "jpeg:quality=100:outdir=${dir}", '-frames', '2');
{ # own scope to prevent a compile-time warning
exec(@cmd);
}
App::MaMGal::MplayerWrapper::ExecutionFailureException->throw("Cannot run mplayer: $!");
} else {
view all matches for this distribution
view release on metacpan or search on metacpan
lib/App/MatrixClient/RoomTab.pm view on Meta::CPAN
child => Tickit::Widget::Frame->new(
style => {
linetype => "none",
linetype_left => "single",
frame_fg => "white", frame_bg => "purple",
},
child => $vbox,
),
top => 0, bottom => -1, right => -1,
view all matches for this distribution
view release on metacpan or search on metacpan
script/mediapi view on Meta::CPAN
$wnd->g_wm_attribute(-fullscreen => 1, -topmost => 1);
$wnd->g_wm_resizable(0, 0);
$wnd->configure(-cursor => 'none');
$wnd->g_wm_geometry("${screen_x}x${screen_y}");
my $media_control_frame = $wnd->new_ttk__frame(-borderwidth => 5); # The border is here only to debug
$media_control_frame->g_grid(-column => 0, -row => 0, -sticky => 'nswe');
$wnd->g_grid_columnconfigure(0, -weight => 1);
$wnd->g_grid_rowconfigure(0, -weight => 1);
# The default font does not have the media control glyphs. So letâs create a
# style using Unifont that has almost all glyphs.
# Useful link: https://en.wikipedia.org/wiki/Media_control_symbols
Tkx::ttk__style_configure('Unicode.TButton', -font => 'Unifont 15');
$media_control_frame->g_grid_columnconfigure(0, -weight => 1);
$media_control_frame->g_grid_columnconfigure(1, -weight => 1);
$media_control_frame->g_grid_rowconfigure(0, -weight => 1);
$media_control_frame->g_grid_rowconfigure(1, -weight => 1);
my $vlc_in;
my $vlc_out;
# my $vlc = IPC::Run::start ['vlc', '--intf', 'rc', '--alsa-audio-device', 'dac'], $vlc_in;
my $vlc = IPC::Run::start ['vlc', '--intf', 'rc'], $vlc_in, \$vlc_out;
script/mediapi view on Meta::CPAN
(defined $track_length ? sprintf('%d:%02d', $track_length / 60, $track_length % 60) : '??'),
}
Tkx::after(200, \&get_status);
}
my $play_btn = $media_control_frame->new_ttk__button(-text => 'âµ', -style => 'Unicode.TButton', -command => sub { send_cmd('add cdda:///dev/cdrom') });
$play_btn->g_grid(-column => 0, -row => 0, -sticky => 'nswe', -padx => 10, -pady => 10);
my $pause_btn = $media_control_frame->new_ttk__button(-text => 'â¸', -style => 'Unicode.TButton',
-command => sub { send_cmd('pause') });
$pause_btn->g_grid(-column => 1, -row => 0, -sticky => 'nswe', -padx => 10, -pady => 10);
my $prev_btn = $media_control_frame->new_ttk__button(-text => 'â®', -style => 'Unicode.TButton',
-command => sub { send_cmd('prev') });
$prev_btn->g_grid(-column => 0, -row => 1, -sticky => 'nswe', -padx => 10, -pady => 10);
my $next_btn = $media_control_frame->new_ttk__button(-text => 'â', -style => 'Unicode.TButton',
-command => sub { send_cmd('next') });
$next_btn->g_grid(-column => 1, -row => 1, -sticky => 'nswe', -padx => 10, -pady => 10);
my $status_label = $media_control_frame->new_ttk__label(-textvariable => \$track_status, -anchor => 'center');
$status_label->g_grid(-column => 0, -columnspan => 2, -row => 2, -sticky => 'nswe');
# This remove the focus and "active" decoration of the button when they are selected.
# We might want some kind of feedback that they were selected though.
Tkx::bind('TButton', '<FocusIn>', [sub { $wnd->g_focus(); Tkx::widget->new($_[0])->state('!active'); }, Tkx::Ev('%W')]);
view all matches for this distribution
view release on metacpan or search on metacpan
lib/App/Milter/Limit.pm view on Meta::CPAN
$milter->register;
$milter->main
=head1 DESCRIPTION
This is a milter framework that limits the number of messages sent by SMTP
envelope sender within a specified time period. The number of messages and
length of time in which the maximum number of messages can be sent is
configurable in the configuration file. Once the limit is reached, messages
will be rejected from that sender until the time period has elapsed.
view all matches for this distribution
view release on metacpan or search on metacpan
## What is Mimosa written in?
Mimosa is written in Perl 5, HTML, CSS, and JavaScript. On the server side, it
uses Moose, BioPerl and the Catalyst web framework. On the client side, it uses
JQuery, JQuery UI.
## How can I help hack on Mimosa or otherwise get involved?
Please join our mailing list at <http://groups.google.com/group/gmod-mimosa> and
view all matches for this distribution
view release on metacpan or search on metacpan
lib/App/Modular.pm view on Meta::CPAN
#!/usr/bin/perl -w
#----------------------------------------------------------------------------
# App::Modular - perl program modularization framewok
# App::Modular.pm: module management class
#
# Copyright (c) 2003-2004 Baltasar Cevc
#
# This code is released under the L<perlartistic> Perl Artistic
lib/App/Modular.pm view on Meta::CPAN
##################################
=pod
=head1 NAME
B<App::Modular> - modularization framework for perl programs
=head1 SYNOPSIS
package App::Modular::Module::Test;
lib/App/Modular.pm view on Meta::CPAN
exit;
=head1 DESCRIPTION
App::Modular aims to provide a framework which should it make very
easy to programmes to create any kind of modular program.
It supports:
=over 4
view all matches for this distribution
view release on metacpan or search on metacpan
lib/App/MojoSlides/MoreTagHelpers.pm view on Meta::CPAN
head
header
hr
html
i
iframe
img
label
legend
li
noscript
lib/App/MojoSlides/MoreTagHelpers.pm view on Meta::CPAN
=item html
=item i
=item iframe
=item img
=item label
view all matches for this distribution
view release on metacpan or search on metacpan
* lib/Mowyw.pm: Add line number to error message
* *: Changed license to Artistic 2.0
mowyw (0.5.2)
* lib/Mowyw.pm: configurable filter for which files to process
* lib/Mowyw/Datasource/Result.pm: First shot at a more general result set
framework. Not yet used by the rest of the program.
mowyw (0.5.1)
* mowyw: make mowyw encoding aware, added --encoding option. Default is
utf-8
mowyw (0.5.0)
* mowyw: Moved nearly all functionally to a module to allow better testing
view all matches for this distribution
view release on metacpan or search on metacpan
lib/App/MultiModule/Core.pm view on Meta::CPAN
return;
}
=head2 named_recur(%args)
This is the preferred method to schedule recurring code in this framework.
Typically called from within set_config(), it automatically ensures
that only a single POE recurring event is setup, no matter how many times
named_recur() is called.
Simply put: if your tasks has code that needs to run on an interval,
lib/App/MultiModule/Core.pm view on Meta::CPAN
};
=head2 get_multimodules_info
This returns a hash reference that contains information about every
task that the MultiModule framework is aware of. 'aware of' is not
limited to running and/or loaded. A MultiModule task module that
exists in the configured search path, even though it is not referenced
or configured, will also be in this structure.
The key to the return hash is the task name. The value is a reference
view all matches for this distribution
view release on metacpan or search on metacpan
lib/ChordPro/Config.pm view on Meta::CPAN
my $i = {};
# Break out ;xx=yy properties.
while ( $v =~ s/\s*;\s*(\w+)\s*=\s*(.*?)\s*(;|$)/$3/ ) {
my ( $k, $v ) = ( $1, $2 );
if ( $k =~ /^(colou?r|background|frame|numbercolou?r|size)$/ ) {
$k =~ s/colour/color/;
$v =~ s/^(['"]?)(.*)\1$/$2/;
$i->{$k} = $v;
}
else {
view all matches for this distribution