From 38585f0b71c5f7099b1afdc85dd985f7ec715310 Mon Sep 17 00:00:00 2001 From: peteyboy Date: Wed, 20 Apr 2022 06:10:43 +0000 Subject: [PATCH] This is copying the mojo version to just wordle-life.cgi for the mojo branch --- wordle-life.cgi | 288 +++++++++++++++--------------------------------- 1 file changed, 88 insertions(+), 200 deletions(-) diff --git a/wordle-life.cgi b/wordle-life.cgi index 9f85bc5..12f64b6 100755 --- a/wordle-life.cgi +++ b/wordle-life.cgi @@ -1,102 +1,91 @@ -#!/usr/pkg/bin/perl -#Above is the particular location for system binaries in SDF's metaarray, not the usual spot +#!/usr/bin/perl use strict; use warnings; use utf8; -#add my user perl library path, this is particular to each person's setup -use lib qw( /usr/pkg/lib/perl5/5.24.0 /meta/p/peteyboy/perl5/lib/perl5 ); -#make request for all of the following -use CGI::Tiny; -use Mojo::Template; -use Mojo::Loader 'data_section'; -#use Routes::Tiny; #don't even need +use Mojolicious::Lite -signatures; use Readonly; use List::Util qw(first); +use experimental 'smartmatch'; + #=== # MAKE SURE ORIGIN PAGE MATCHES FILENAME (especially if you are testing changes)! # #=== - my $ORIGIN_PAGE = "/wordle-life.cgi"; - my $defaulttext = "Paste your wordle share here (replace this text)"; - my $WORDLE_INPUT_PARAM = "wordle-result"; - my $SHARENOTE_PARAM = "share-note"; +my $ORIGIN_PAGE = "/cgi-bin/wordle-life-mojo.cgi"; +my $defaulttext = "Paste your wordle share here (replace this text)"; +my $PATH_PARAM = "PATH_INFO"; +my $WORDLE_INPUT_PARAM = "wordle-result"; +my $SHARENOTE_PARAM = "share-note"; - cgi { +my $wordle; +my $rle = ""; +my $isshare = 0; #flag for sharing, default false +my $sharenote = ""; #a note someone can tack onto their share - #error handler from the CGI:Tiny cookbook - my $cgi = $_; +get '/' => sub ($cgi) { - $cgi->set_error_handler(sub { - my ($cgi, $error, $rendered) = @_; - warn $error; - unless ($rendered) { - if ($cgi->response_status_code == 413) { - $cgi->render(json => {error => 'Request body limit exceeded'}); - }elsif ($cgi->response_status_code == 400) { - $cgi->render(json => {error => 'Bad request'}); - } else { - $cgi->render(json => {error => 'Internal server error'}); - } - } - }); - - my $wordle; - my $method = $cgi->method; - my $rle = ""; - my $isshare = 0; #flag for sharing, default false - my $sharenote = ""; #a note someone can tack onto their share - - #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 'HEAD') { + #if there are sharing query parameters put them in $wordle and activate share page logic + if (first { $_ eq $WORDLE_INPUT_PARAM } @{$cgi->req->query_params} ){ + $wordle = $cgi->param($WORDLE_INPUT_PARAM); + $isshare = 1; #true + $sharenote = $cgi->param($SHARENOTE_PARAM); + }else{ $wordle = $defaulttext; + } - } elsif ($method eq 'GET') { - #TODO: if there are query parameters put them in $wordle and activate share page logic - if (first { $_ eq $WORDLE_INPUT_PARAM } @{$cgi->query_param_names} ){ - $wordle = $cgi->query_param($WORDLE_INPUT_PARAM); - $isshare = 1; #true - $sharenote = $cgi->query_param($SHARENOTE_PARAM); - }else{ - $wordle = $defaulttext; - } - } elsif ($method eq 'POST') { - #textarea name, pull the value from POST and reload into textarea - $wordle = $cgi->body_param($WORDLE_INPUT_PARAM); - #if input textarea not changed from default text, do nothing - unless ($wordle =~ /\Q$defaulttext\E/ or $wordle eq '') { - #[Cc] /){ #cheat, if they put in something that looks like an RLE, pass output through - if ($wordle =~ /^#[Cc] /){ + my $template_name = 'index'; + $cgi->stash( WORDLE_INPUT_PARAM => $WORDLE_INPUT_PARAM, ORIGIN_PAGE => $ORIGIN_PAGE, defaulttext => $defaulttext, wordle => $wordle, rle => $rle, isshare => $isshare, sharenote => $sharenote ); + $cgi->render(template => $template_name); + + +}; + +get '/*path_info' => sub ($cgi) { + my $template_name = $cgi->stash("path_info"); + #TODO: Check against a list of valid templates! + #if ( grep ( /^$template_name$/, ('index', 'about') )) { + if ( $template_name ~~ ['about'] ) { + $cgi->stash( ORIGIN_PAGE => $ORIGIN_PAGE); #this isn't general purpose, what template needs what variables? + }else{ #TODO: fix so as not to need copied code from the else below? + $template_name = 'index'; + $cgi->stash( WORDLE_INPUT_PARAM => $WORDLE_INPUT_PARAM, ORIGIN_PAGE => $ORIGIN_PAGE, defaulttext => $defaulttext, wordle => $wordle, rle => $rle, isshare => $isshare, sharenote => $sharenote ); + } + $cgi->render(template => $template_name); +}; + +post '/' => sub($cgi) { + #textarea name, pull the value from POST and reload into textarea + $wordle = $cgi->param($WORDLE_INPUT_PARAM); + #if input textarea not changed from default text, do nothing + unless ($wordle =~ /\Q$defaulttext\E/ or $wordle eq '') { + #if they put in something that looks like an RLE, pass output through, for share or to just use the life viewer + if ($wordle =~ /^#[Cc] /){ $rle = $wordle; #if none of that, do the thing: generate RLE - }else{ + }else{ $rle = generate_rle($wordle); - } - #$sharequery= "?" . $WORDLE_INPUT_PARAM . "=" . url_escape($rle); - #$template = data_section __PACKAGE__, 'sharepage.html.ep'; - #$output = $mt->render($template, { ORIGIN_PAGE =>$ORIGIN_PAGE, defaulttext => $defaulttext, wordle => $wordle, rle => $rle }); - } - #$output = $mt->render($template, { WORDLE_INPUT_PARAM => $WORDLE_INPUT_PARAM, ORIGIN_PAGE => $ORIGIN_PAGE, defaulttext => $defaulttext, wordle => $wordle, rle => $rle, sharenote => $sharenote }); - - } 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 $mt = Mojo::Template->new(vars => 1); - my $template = data_section __PACKAGE__, 'index.html.ep'; - my $output = $mt->render($template, { WORDLE_INPUT_PARAM => $WORDLE_INPUT_PARAM, ORIGIN_PAGE => $ORIGIN_PAGE, defaulttext => $defaulttext, wordle => $wordle, rle => $rle, isshare => $isshare, sharenote => $sharenote }); - #my $output = $mt->render($template, { ORIGIN_PAGE =>$ORIGIN_PAGE, defaulttext => $defaulttext, wordle => $wordle, rle => $rle }); - #my $output = $mt->render($template, {wordle => $wordle}); - - $cgi->render(html => $output ); - - }; + $cgi->stash( WORDLE_INPUT_PARAM => $WORDLE_INPUT_PARAM, ORIGIN_PAGE => $ORIGIN_PAGE, defaulttext => $defaulttext, wordle => $wordle, rle => $rle, isshare => $isshare, sharenote => $sharenote ); + $cgi->render(template =>'index'); +}; + +app->start; + + + +sub template_from_path_info { + my $template=''; + my $path = shift; + if ($path =~ /^\//){ + $template = $path; + $template =~ s/^.//; + $template =~ tr/\//./; + } + return $template; +} #Try to Generate the RLE. Makes a lot of assumptions sub generate_rle { @@ -177,17 +166,21 @@ __DATA__ - - + -

Wordle->Life

+ +

back to Site Home +

+

Wordle->Life

+

about

% if ($isshare) { @@ -315,144 +308,39 @@ GRID

- -

-

- -


-Disclaimer: I made this! People and/or corporations may own their marks or copyrights, etc, on words mentioned on this page I don't claim to - -

-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

-

-

-Hosted by SDF.org -

SDF.org -

-@@ viewer.html.ep +@@ about.html.ep -Play Conway's Life with your Wordle Score - - - - +About Wordle-Life +

Wordle->Life

-

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?

Glider image from Conwaylife.org, it looks like an 8-bit staple gun +

This is an about page.

-
    -
  1. -

    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 -

  2. +

    Click >here to return to Wordle-Life page

    +

    Click here to go to website Home

    - -

    - - - -

    -
    - - -
  3. -

    Click "Submit" and and RLE format file for Conway's Game of Life will appear below.

    - -
  4. -
- - - - - -
-
- - - -
- -
- - - - - - -

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: -

-

-#C Wordle 235 3/6
-x = 5,y = 3
-boobo$bobbo$ooooo$
-
- -

For details about the Life RLE file format above, read this. - -

-Next steps: - - - - - - - -

    -
  1. copy the contents of the Conway Life box above -
  2. go to a Conway's Life site, such as this one at copy.sh or this one at lazyslug.com and load and run your file.
  3. -
      -
    1. specifically for the one at copy.sh:
    2. -
    3. Press the [Import] button at the top
    4. -
    5. paste in your Life file contents in the box and press [Import]
    6. -
    7. It will put up a box telling you it loaded your Wordle, press [OK]
    8. -
    9. Press the [Run] button and watch your Wordle score play LIFE!
    10. -
    -
-

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 looks coolest! -

- - -

-

-


-Disclaimer: I made this! People and/or corporations may own their marks or copyrights, etc, on words mentioned on this page I don't claim to +Disclaimer: I made this! People and/or corporations may own their marks or copyrights, etc, on words mentioned on these pages I don't claim to -

-Questions, kudos or comments, mail me @sdf.org

Thanks to hankchizljaw for making his basic css publicly available -

Made in February 2022 +

Made in February 2022, revised April 2022 for this site, using Perl Mojolicious

-Hosted by SDF.org -

SDF.org +Hosted by Bisect Hosting +

bisecthosting.com

+