From: Marius Gavrilescu <marius@ieval.ro>
Date: Sat, 21 Mar 2015 17:04:21 +0000 (+0200)
Subject: Add static mode
X-Git-Url: http://git.ieval.ro/?a=commitdiff_plain;h=6533844f1a2ec6b162b696c31a623a4dc8ee72bb;p=plack-app-gruntmaster.git

Add static mode
---

diff --git a/lib/Plack/App/Gruntmaster.pm b/lib/Plack/App/Gruntmaster.pm
index 9284acc..c9965d0 100644
--- a/lib/Plack/App/Gruntmaster.pm
+++ b/lib/Plack/App/Gruntmaster.pm
@@ -114,10 +114,11 @@ sub dispatch_request{
 			response_filter {
 				my ($r) = @_;
 				return $r if ref $r ne 'Plack::App::Gruntmaster::Response';
-				my @hdrs = ('X-Forever' => 1, 'Cache-Control' => "$privacy, max-age=$r->{maxage}");
-				push @hdrs, Vary => 'Authorization' if $privacy eq 'private';
+				my $vary = 'X-Static';
+				$vary .= ', Authorization' if $privacy eq 'private';
+				my @hdrs = ('X-Forever' => 1, 'Cache-Control' => "$privacy, max-age=$r->{maxage}", Vary => $vary);
 				return [200, ['Content-Type' => 'application/json; charset=utf-8', @hdrs], [encode_json $r->{params}]] if $format eq 'json';
-				my $ret = render $r->{template}, 'en', title => $r->{title}, %{$r->{params}};
+				my $ret = render $r->{template}, 'en', title => $r->{title}, %{$r->{params}}, maybe static => $env->{HTTP_X_STATIC} + 1;
 				[200, ['Content-Type' => 'text/html; charset=utf-8', @hdrs], [encode 'UTF-8', $ret]]
 			},
 		},
@@ -182,7 +183,7 @@ sub dispatch_request{
 
 		sub (/) { redispatch_to '/index' },
 		sub (/favicon.ico) { redirect '/static/favicon.ico' },
-		sub (/:article) { [200, ['Content-Type' => 'text/html; charset=utf-8', 'Cache-Control' => 'public, max-age=3600', 'X-Forever' => 1], [render_article $_{article}, 'en']] }
+		sub (/:article) { [200, ['Content-Type' => 'text/html; charset=utf-8', 'Cache-Control' => 'public, max-age=3600', 'X-Forever' => 1, Vary => 'X-Static'], [render_article $_{article}, 'en', maybe static => $env->{HTTP_X_STATIC}]] }
 	},
 
 	sub (POST) {
diff --git a/lib/Plack/App/Gruntmaster/HTML.pm b/lib/Plack/App/Gruntmaster/HTML.pm
index 1e0f788..3195b62 100644
--- a/lib/Plack/App/Gruntmaster/HTML.pm
+++ b/lib/Plack/App/Gruntmaster/HTML.pm
@@ -50,11 +50,11 @@ sub render {
 }
 
 sub render_article {
-	my ($art, $lang) = @_;
+	my ($art, $lang, %args) = @_;
 	$lang //= 'en';
 	my $title = read_file "a/$art.$lang.title";
 	my $meat  = read_file "a/$art.$lang";
-	_render('skel', $lang, title => $title , meat => $meat)
+	_render('skel', $lang, title => $title , meat => $meat, %args)
 }
 
 sub _render {
@@ -66,6 +66,8 @@ sub _render {
 	$tree->defmap(smap => \%args);
 	my $process = __PACKAGE__->can("process_$tmpl");
 	$process->($tree, %args) if $process;
+	$_->detach for $tree->look_down(static => $args{static} ? 'no' : 'yes');
+	$_->attr('static', undef) for $tree->look_down(sub {$_[0]->attr('static')});
 	$tree->as_HTML;
 }
 
diff --git a/tmpl/pb_entry.en b/tmpl/pb_entry.en
index 8246c42..6398e63 100644
--- a/tmpl/pb_entry.en
+++ b/tmpl/pb_entry.en
@@ -16,14 +16,14 @@
 <a href="/log/?problem=problem_id" id="job_log">Job log</a><br>
 <a href="/sol/problem_id" id="solution" data-toggle="modal" data-target="#solution_modal">Solution</a>
 
-<h1>Submit solution</h1>
+<h1 static="no">Submit solution</h1>
 
 <div id="nosubmit">
 The contest has finished.<br>
 To submit solutions to this problem, please visit the problem <a href="/pb/id">outside&nbsp;the&nbsp;contest</a>.
 </div>
 
-<div id="submit">
+<div id="submit" static="no">
 <form id="submitform" action="/action/submit" method="POST" enctype="multipart/form-data" role="form">
 <input type="hidden" name="problem" value="problem_id">
 <input type="hidden" name="contest" value="contest_id">
diff --git a/tmpl/skel.en b/tmpl/skel.en
index 39b4dda..6ae836a 100644
--- a/tmpl/skel.en
+++ b/tmpl/skel.en
@@ -17,7 +17,7 @@
 <li id="nav-ct"><a href="/ct/">Contests</a>
 <li id="nav-log"><a href="/log/">Job log</a>
 <li id="nav-us"><a href="/us/">Users</a>
-<li id="nav-account"><a href="/account">Account</a>
+<li id="nav-account" static="no"><a href="/account">Account</a>
 <li id="nav-contribute"><a href="/contribute">Contribute!</a>
 
 </ul>
@@ -27,11 +27,13 @@
 <div class="container-fluid">
 
 <h1 id="title">TITLE</h1>
+<div id="static" class="alert alert-info" static="yes">This is a static version of Gruntmaster 6000.</div>
+
 <div id="result"></div>
 
 <div id="content">Content goes here</div>
 
-<div id="login" class="reqjs"><a href="#">Log in</a></div>
+<div id="login" class="reqjs" static="no"><a href="#">Log in</a></div>
 
 <div id="theme-selector" class="reqjs">
 Themes: