diff options
author | stuebinm | 2024-01-13 00:35:13 +0100 |
---|---|---|
committer | stuebinm | 2024-01-13 00:35:13 +0100 |
commit | b2fc20fe8080e4c083b08354afdce287a91de0b7 (patch) | |
tree | 9cd539dd9b2f11515d8bc36ff86fb81256ba9d92 /pkgs/nomsring/Main.hs | |
parent | 3c752004c4a49319aa93eb586e77b563811a1217 (diff) |
nomsable webring
(just messing around for now)
Diffstat (limited to '')
-rw-r--r-- | pkgs/nomsring/Main.hs | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/pkgs/nomsring/Main.hs b/pkgs/nomsring/Main.hs new file mode 100644 index 0000000..5c70491 --- /dev/null +++ b/pkgs/nomsring/Main.hs @@ -0,0 +1,32 @@ +module Main where + +import Network.CGI (CGIResult, runCGI, getInput, output, redirect, pathInfo, CGI, outputNotFound, liftIO) +import Data.CircularList (CList, fromList, rotR, rotateTo, focus, rotL) +import Data.Maybe(fromJust, fromMaybe) +import Data.Functor ((<&>)) + +webring :: CList String +webring = fromList + [ "stuebinm.eu" + , "nwex.de" + ] + +main :: IO () +main = runCGI $ do + path <- pathInfo + case path of + "/" -> output "nomsable websites" + "/next" -> rotate True + "/previous" -> rotate False + _ -> outputNotFound path + +rotate :: Bool -> CGI CGIResult +rotate backwards = do + from <- getInput "from" <&> fromMaybe (focus' webring) + case rotateTo from webring of + Nothing -> redirect ("https://" <> focus' webring) + Just ring -> redirect ("https://" <> focus' (step ring)) + where step = if backwards then rotL else rotR + +focus' :: CList c -> c +focus' = fromJust . focus |