diff --git a/wordle-life.cgi b/wordle-life.cgi index acd55bb..28ed5d2 100755 --- a/wordle-life.cgi +++ b/wordle-life.cgi @@ -7,13 +7,15 @@ use lib qw( /usr/pkg/lib/perl5/5.24.0 /meta/p/peteyboy/perl5/lib/perl5 ); use CGI::Tiny; use Mojo::Template; use Mojo::Loader 'data_section'; -#use Routes::Tiny; +#use Routes::Tiny; #don't even need use Readonly; - my $ORIGIN_PAGE = "/wordle-life.cgi"; + my $ORIGIN_PAGE = "/wordle-life-f.cgi"; my $defaulttext = "Paste your wordle share here"; cgi { + + #error handler from the CGI:Tiny cookbook my $cgi = $_; $cgi->set_error_handler(sub { @@ -34,22 +36,34 @@ use Readonly; my $method = $cgi->method; my $rle = ""; + #Simple switch: make a one page app, and always go back to the same page. + #GET or HEAD loads the page blank, POST runs the Life file maker if ($method eq 'GET' or $method eq 'HEAD') { - $wordle = $defaulttext; - } elsif ($method eq 'POST') { - $wordle = $cgi->body_param('wordle-result'); #textarea name - if ($wordle =~ /\Q$defaulttext\E/){ - - }else{ - $rle = generate_rle($wordle); + $wordle = $defaulttext; + #$wordle = ""; + } elsif ($method eq 'POST') { + #textarea name, pull the value from POST and reload into textarea + $wordle = $cgi->body_param('wordle-result'); + + #if input textarea not changed from default text, do nothing + unless ($wordle =~ /\Q$defaulttext\E/) { + #[Cc] /){ #cheat, if they put in something that looks like an RLE, pass output through + if ($wordle =~ /^#[Cc] /){ + $rle = $wordle; + #if none of that, do the thing: generate RLE + }else{ + $rle = generate_rle($wordle); } + } - } else { - $cgi->set_response_status(405)->render; - exit; - } + } else { #some other request? PUT, DELETE? + $cgi->set_response_status(405)->render; + exit; + } die "Invalid wordle parameter" unless length $wordle; + + #Load template from DATA section and output my $mt = Mojo::Template->new(auto_escape => 1, vars => 1); my $template = data_section __PACKAGE__, 'index.html.ep'; my $output = $mt->render($template, { ORIGIN_PAGE =>$ORIGIN_PAGE, defaulttext => $defaulttext, wordle => $wordle, rle => $rle }); @@ -59,7 +73,7 @@ use Readonly; }; - +#Try to Generate the RLE. Makes a lot of assumptions sub generate_rle { my $headline = ""; @@ -101,14 +115,14 @@ sub generate_rle { $myline =~ s/green_square/o/g; - + #skip blank lines, count rows added if(length($myline) > 1){ $rowcount += 1; $rleline= $rleline . $myline; } } } - + #this is the format with b,o, and $. Done lazily because I don't compress the repeated b or o. return "$headline\n$row_prefix$col_prefix$rowcount\n$rleline"; } @@ -119,7 +133,134 @@ __DATA__
Play your Wordle Share score in Conway's Life!
++
Hey, nerds, isn't it funny how the Wordle Scores can look like a glider in that old computer programming exercise, Conway's Life?
+ +Paste your wordle share below and submit to convert it to a Conway's Life file so you can run it (to learn more about Conway's Life, read this).
+ + +Click "Submit" and and RLE format file for Conway's Game of Life will appear in the box below and get loaded into the Life Viewer.
+ + +Watch your Wordle score play LIFE!
+If the RLE is correct, it should be loaded in the Life Viewer, and so you are ready to go!
+ +For best results with the Life Viewer, adjust the Zoom and the playback speed (from "1x", slide left to "3/s" or so) and press the Play button:
+Press "[Pause]" when it seems stable.
++ +
This should work with the share/copy button in wordle, or copy/pasting your friends' wordles out of Discord or wherever as well. See whose Wordle Score runs the coolest! + +
+If it doesn't seem to be working: +
If there is extra text or lines in your paste, you might not get a valid file in the box above, so look and make sure it looks like a proper RLE file, for example: +
+
+#C Wordle 235 3/6 +x = 5,y = 3 +boobo$bobbo$ooooo$ ++ +
For details about the Life RLE file format above, read this. + +
+ + +
+
+ +
+Questions, kudos or comments, mail me @sdf.org +
+Thanks to the community at conwaylife.com, and the friendly folks in the forums there, + and for their Javascript Life Viewer, which I use here. +
+ ++Thanks to hankchizljaw for making his basic css publicly available +
+Made in February 2022
++
if there is extra text or lines in your paste, you might not get a valid file here, so look and make sure it looks like a proper RLE file, for example: @@ -171,6 +327,13 @@ boobo$bobbo$ooooo$
Next steps: + + + + + + +
Thanks to hankchizljaw for making his basic css publicly available +
Made in February 2022