]>
iEval git - gruntmaster-page.git/blob - lib/Gruntmaster/Page/Base.pm
1 package Gruntmaster
::Page
::Base
;
7 use File
::Slurp qw
/read_file/;
8 use HTML
::Template
::Compiled
;
10 ##################################################
13 use Gruntmaster
::Data
();
17 my $ua = LWP
::UserAgent
->new;
21 my ($self, $name, $title) = @_;
23 Gruntmaster
::Data
->export_to_level(1, $caller);
24 List
::Util
->export_to_level(1, $caller, qw
/sum/);
27 *{"${caller}::strftime"} = \
&POSIX
::strftime
;
28 *{"${caller}::NAME"} = sub () { $name };
29 *{"${caller}::TITLE"} = sub () { $title };
30 *{"${caller}::debug"} = sub {
31 local $Log::Log4perl
::caller_depth
= $Log::Log4perl
::caller_depth
+ 1;
32 $_[0]->{'psgix.logger'}->({qw
/level debug message/ => $_[1]})
34 *{"${caller}::reply"} = sub { [200, ['Content-Type' => 'text/plain'], [ @_ ] ] };
35 *{"${caller}::purge"} = sub {
36 return unless $ENV{PURGE_HOST
};
37 my $req = HTTP
::Request
->new(PURGE
=> "http://$ENV{PURGE_HOST}$_[0]");
42 ##################################################
44 my %orig_header_templates = (
47 <title>TITLE_GOES_HERE</title>
48 <meta charset="utf-8">
49 <meta name="viewport" content="width=device-width, initial-scale=1.0">
51 <link rel="shortcut icon" href="/static/favicon.png">
52 <link rel="stylesheet" href="/css/cosmo" id="stylesheet">
53 <script src="/js" type="text/javascript"></script>
55 <nav class="navbar navbar-default navbar-static-top" role="navigation">
56 <div class="container-fluid">
57 <div class="navbar-header">
58 <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1"> <span class="sr-only">Toggle navigation</span><span class="icon-bar"></span><span class="icon-bar"></span><span class="icon-bar"></span></button>
59 <a class="navbar-brand" href="/"><div class="logo logo-sigla"></div></a>
62 <div class="collapse navbar-collapse">
63 <ul class="nav navbar-nav">
64 <li><a href="/pb/">Problems</a>
65 <li><a href="/ct/">Contests</a>
66 <li><a href="/account">Account</a>
69 <ul class="nav navbar-nav navbar-right">
70 <li><a class="dropdown-toggle" data-toggle="dropdown"> Theme <span class="caret"></span></a>
72 <ul class="dropdown-menu" role="menu">
73 <li><a href="#" id="theme_slate">Gunmetal gray</a>
74 <li><a href="#" id="theme_cyborg">Black</a>
75 <li><a href="#" id="theme_cerulean">White</a>
76 <li><a href="#" id="theme_cosmo">Metro</a>
79 <li><a href="/log/">Job log</a>
85 <div class="container-fluid">
87 <div class="logo logo-mindcoding center-block"></div>
89 <h1 id="title">TITLE_GOES_HERE | MindCoding</h1>
90 <div id="result"></div>
96 my %orig_footer_templates = (
102 <h3>Official sponsors</h3>
103 <div class="logo logo-yardi"></div>
108 <div class="col-md-6 column text-center">
109 <a class="logo logo-hermes" href="http://www.societatea-hermes.ro"></a>
112 <div class="col-md-6 column text-center">
113 <a class="logo logo-facebook" href="http://www.facebook.com/mindcodingcluj"></a>
118 <a href="http://cs.ubbcluj.ro" class="logo logo-csf"></a>
119 <a href="http://www.uniunea.ro" class="logo logo-usr"></a>
120 <a href="http://www.coscj.ro" class="logo logo-cos"></a>
121 <a href="http://www.cluj2015.ro/romana" class="logo logo-eyc"></a>
122 <h3> Media Partners </h3>
123 <a href="http://www.clujlife.com" class="logo logo-clujlife"></a>
124 <a href="http://www.vinsieu.ro/eveniment/cluj/cluj-napoca/alte-evenimente/mindcoding/88970/e.html" class="logo logo-vinsieu"></a>
125 <a href="http://www.welcome2cluj.com" class="logo logo-welcome2cluj"></a>
131 sub patch_templates
{
133 return %{$_[0]} unless -d
$root;
134 my ($templates, $name) = @_;
135 my %out = %$templates;
136 for (<$root/$name.*>) {
138 $out{$1} = read_file
$_
144 my %header_templates = patch_templates \
%orig_header_templates, 'header';
145 my %footer_templates = patch_templates \
%orig_footer_templates, 'footer';
148 my ($language, $title) = @_;
149 $header_templates{$language} =~ s/TITLE_GOES_HERE/$title/ger;
153 $footer_templates{$_[0]};
157 my ($templates, $name, $title) = @_;
159 my %out = patch_templates
$templates, $name;
160 $out{$_} = header
($_, $title) . $out{$_} for keys %out;
161 $out{$_} .= footer
$_ for keys %out;
166 ##################################################
171 my ($self, $lang, @args) = @_;
173 $templates{$self} = { cook_templates
$self->TEMPLATES, $self->NAME => $self->TITLE } unless exists $templates{$self};
175 my $htc = HTML
::Template
::Compiled
->new(scalarref
=> \
$templates{$self}{$lang}, default_escape
=> 'HTML',);
176 $self->_generate($htc, $lang, @args);
177 my $out = $htc->output;
178 utf8
::downgrade
($out);
179 [200, ['Content-Type' => 'text/html', 'Content-Language' => $_[1], 'Vary' => 'Accept-Language', 'X-Forever' => 1], [ $out ] ]
185 [ map { [ $_, 1, 'text/html', undef, undef, $_, undef ]} keys $_[0]->TEMPLATES ]
This page took 0.067796 seconds and 5 git commands to generate.