From Unique Hamerkop, 10 Years ago, written in Plain Text.
Embed
  1. #!/usr/bin/env perl
  2. use Mojolicious::Lite;
  3. use URI::Title qw( title );
  4.  
  5. get '/' => sub {
  6.         my $c = shift;
  7.         $c->render(template => 'index');
  8. };
  9.  
  10. get '/comment' => sub {
  11.         my $c = shift;
  12.         my $v = $c->param('v');
  13.         if (! $v) {
  14.                 $c->render(template => 'error', error => 'No video specified!');
  15.         } elsif ($v =~ m! (?: \bv i? [/=] | be/ ) ([a-zA-Z_\-]+) !x) {
  16.                 $c = $c->redirect_to("/comment?v=$1");
  17.         } elsif ($v !~ /.........../) {
  18.                 $c->render(template => 'error', error => 'Invalid video ID!');
  19.         } else {
  20.                 my $title = title('http://youtube.com/watch?v='.$v);
  21.                 if (! $title) {
  22.                         $c->render(template => 'error', error => 'Invalid video, or could not fetch video.');
  23.                 } else {
  24.                         $title =~ s/(.*) - YouTube/$1/;
  25.                         $c->stash(title => $title);
  26.                         $c->stash(v => $v);
  27.                         $c->render(template => 'comment');
  28.                 }
  29.         }
  30. };
  31.  
  32. app->start;
  33.  
  34. __DATA__
  35.  
  36. @@ index.html.ep
  37. % layout 'default';
  38. % title 'Hello hello!';
  39. <!DOCTYPE html>
  40. <html>
  41.         <head><title><%= title %></title></head>
  42.         <body>
  43.                 <h1>OpinionsAllowed</h1>
  44.                 <p>Voice your opinion for any video, comments are <strong>never</strong> disabled!</p>
  45.                 %= form_for 'comment' => (method => 'GET') => begin
  46.                         %= label_for v => 'Video Link: '
  47.                         %= text_field 'v'
  48.                 % end
  49.                 <hr><p>OpinionsAllowed 2015 - Written in Mojolicious for Perl 5</p>
  50.         </body>
  51. </html>
  52.  
  53. @@ comment.html.ep
  54. <!DOCTYPE html>
  55. <html>
  56.         <head><title><%= $title %> - OpinionsAllowed</title></head>
  57.         <body>
  58.                 <div align='center'>
  59.                         <h1>Video</h1><h2><%= $title %></h2>
  60.                         <p><iframe id="ytplayer" type="text/html" width="640" height="390"
  61.                         src="http://www.youtube.com/embed/<%= $v %>?autoplay=1"
  62.                         frameborder="0"/></p>
  63.                 </div>
  64.                 <hr><p>OpinionsAllowed 2015 - Written in Mojolicious for Perl 5</p>
  65.         </body>
  66. </html>
  67.  
  68. @@ error.html.ep
  69. <!DOCTYPE html>
  70. <html>
  71.         <head><title>Error: <%= $error %></title></head><body><h1>Error</h1>
  72.         <p><%= $error %> <a href="/">Home.</a></p></body>
  73.         <hr><p>OpinionsAllowed 2015 - Written in Mojolicious for Perl 5</p>
  74. </html>