Compare commits

...

10 Commits

19 changed files with 85 additions and 8 deletions

View File

@ -30,6 +30,7 @@ handleRecipeDir recipesDir outputDir htmlTemplate indexName recipeSubDirs name =
imageFilenames <- imageFilenames <-
listDirectory dir listDirectory dir
& filterDepGenM (hasExtension (inject ["jpg"])) & filterDepGenM (hasExtension (inject ["jpg"]))
& onToken sort
htmlBodyImages <- forDepGenM imageFilenames $ \filename -> do htmlBodyImages <- forDepGenM imageFilenames $ \filename -> do
path <- joinPaths dir filename path <- joinPaths dir filename
path `copyTo` outputDir path `copyTo` outputDir
@ -149,7 +150,7 @@ generateSite = do
-- Handle images -- Handle images
imgDir <- inject "img" imgDir <- inject "img"
makeDir $ joinPaths outputDir imgDir makeDir $ joinPaths outputDir imgDir
forM_ ["mad-icon.png", "mad-logo.png"] $ \name -> forM_ ["mad-icon.png", "mad-logo.png", "julekalender.png", "platte.jpg", "køkken.jpg"] $ \name ->
joinPaths imgDir (inject name) `copyTo` outputDir joinPaths imgDir (inject name) `copyTo` outputDir
-- Handle fonts -- Handle fonts

View File

@ -1,5 +1,8 @@
{-# LANGUAGE GADTs #-} {-# LANGUAGE GADTs #-}
{-# LANGUAGE FunctionalDependencies #-} {-# LANGUAGE FunctionalDependencies #-}
-- | Combinators for generating a list of dependencies between calculations, to
-- be executed later in DependencyRunner.
module Byg.DependencyGenerator module Byg.DependencyGenerator
( DepGenM ( DepGenM
, DepGenM' , DepGenM'

View File

@ -1,4 +1,11 @@
{-# LANGUAGE MonoLocalBinds #-} {-# LANGUAGE MonoLocalBinds #-}
-- | Run the actual operations from the generated dependencies from DependencyGenerator.
--
-- This does not work fully as intended right now (computes more than strictly
-- needed) and needs to be rewritten in a more testable way. The idea is to only
-- evaluate something if a future operation depends on it, which is reflected in
-- the ValueExistence type.
module Byg.DependencyRunner module Byg.DependencyRunner
( DepRunM ( DepRunM
, runDeps , runDeps

View File

@ -1,3 +1,4 @@
-- | All byg functions.
module Byg.Functions module Byg.Functions
( module Byg.Functions.Image ( module Byg.Functions.Image
, module Byg.Functions.Pandoc , module Byg.Functions.Pandoc

View File

@ -23,7 +23,10 @@ runPandoc m = case P.runPure m of
readMarkdown :: TokenableTo Text a => a -> DepGenM (Token Pandoc) readMarkdown :: TokenableTo Text a => a -> DepGenM (Token Pandoc)
readMarkdown = onToken $ runPandoc . P.readMarkdown settings readMarkdown = onToken $ runPandoc . P.readMarkdown settings
where settings = P.def { P.readerExtensions = P.extensionsFromList [ P.Ext_raw_html ] } where settings = P.def { P.readerExtensions = P.extensionsFromList
[ P.Ext_raw_html
, P.Ext_escaped_line_breaks
] }
writeHtml :: TokenableTo Pandoc a => a -> DepGenM (Token Text) writeHtml :: TokenableTo Pandoc a => a -> DepGenM (Token Text)
writeHtml = onToken $ runPandoc . P.writeHtml5String P.def writeHtml = onToken $ runPandoc . P.writeHtml5String P.def

View File

@ -1,13 +1,14 @@
-- | All byg types.
module Byg.Types module Byg.Types
( module Byg.Types.Token ( module Byg.Types.Token
, module Byg.Types.Value , module Byg.Types.Value
, module Byg.Types.Functions , module Byg.Types.Functions
, module Byg.Types.Date , module Byg.Types.Date
, Dependency , module Byg.Types.Dependency
) where ) where
import Byg.Types.Token import Byg.Types.Token
import Byg.Types.Value import Byg.Types.Value
import Byg.Types.Functions import Byg.Types.Functions
import Byg.Types.Date import Byg.Types.Date
import Byg.Types.Dependency (Dependency) import Byg.Types.Dependency

View File

@ -1,3 +1,4 @@
-- | Date functions.
module Byg.Types.Date module Byg.Types.Date
( Date(..) ( Date(..)
, formatDate , formatDate

View File

@ -1,4 +1,6 @@
{-# LANGUAGE GADTs #-} {-# LANGUAGE GADTs #-}
-- | Keeps track of the graph of calculation dependencies.
module Byg.Types.Dependency module Byg.Types.Dependency
( Action(..) ( Action(..)
, F(..) , F(..)

View File

@ -1,4 +1,6 @@
{-# LANGUAGE FunctionalDependencies #-} {-# LANGUAGE FunctionalDependencies #-}
-- | Calculation function types.
module Byg.Types.Functions module Byg.Types.Functions
( IsFunctionIO(..) ( IsFunctionIO(..)
) where ) where

View File

@ -1,4 +1,6 @@
{-# LANGUAGE GADTs #-} {-# LANGUAGE GADTs #-}
-- | Tokens represent future values.
module Byg.Types.Token module Byg.Types.Token
( Token(..) ( Token(..)
) where ) where

View File

@ -1,4 +1,6 @@
{-# LANGUAGE MonoLocalBinds #-} {-# LANGUAGE MonoLocalBinds #-}
-- | Small wrapper over the Dynamic type.
module Byg.Types.Value module Byg.Types.Value
( Value(..) ( Value(..)
, toValue , toValue

BIN
img/julekalender.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

BIN
img/køkken.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 125 KiB

BIN
img/platte.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 113 KiB

12
om.md
View File

@ -2,6 +2,8 @@
Jeg håber at du kan blive inspireret af de retter jeg har fundet på. Jeg håber at du kan blive inspireret af de retter jeg har fundet på.
![Mig der holder en platte med hjemmesidens adresse på](/img/platte.jpg)
## Samarbejde? ## Samarbejde?
@ -15,24 +17,26 @@ Da jeg i 2012 flyttede hjemmefra for at studere i København, begyndte jeg også
## Retter ## Retter
Klik på [Retter](/retter/)-fanen i toppen af siden for at se alle mine madretter. Klik på [Alle retter](/retter/)-fanen i toppen af siden for at se alle mine madretter.
## Atom-feed ## Atom-feed
Klik på [Feed](/atom.xml)-fanen i toppen af siden for at tilgå et Atom-feed med madretterne. Klik på [Feed](/atom.xml)-fanen i toppen af siden for at tilgå et Atom-feed med madretterne. (Læs mere om Atom på [RFC 4287](https://datatracker.ietf.org/doc/html/rfc4287).)
## Licens ## Licens
<p xmlns:cc="http://creativecommons.org/ns#" xmlns:dct="http://purl.org/dc/terms/"><span property="dct:title">Niels' mad</span> af <span property="cc:attributionName">Niels G. W. Serup</span> er licenseret under <a href="https://creativecommons.org/licenses/by-sa/4.0/?ref=chooser-v1" target="_blank" rel="license noopener noreferrer" style="display:inline-block;">CC BY-SA 4.0<img style="height:22px!important;margin-left:3px;vertical-align:text-bottom;" src="https://mirrors.creativecommons.org/presskit/icons/cc.svg?ref=chooser-v1" alt=""><img style="height:22px!important;margin-left:3px;vertical-align:text-bottom;" src="https://mirrors.creativecommons.org/presskit/icons/by.svg?ref=chooser-v1" alt=""><img style="height:22px!important;margin-left:3px;vertical-align:text-bottom;" src="https://mirrors.creativecommons.org/presskit/icons/sa.svg?ref=chooser-v1" alt=""></a></p> <p xmlns:cc="http://creativecommons.org/ns#" xmlns:dct="http://purl.org/dc/terms/"><span property="dct:title">Niels' mad</span> af <span property="cc:attributionName">Niels G. W. Serup</span> er licenseret under <a href="https://creativecommons.org/licenses/by-sa/4.0/deed.da" target="_blank" rel="license noopener noreferrer" style="display:inline-block;">CC BY-SA 4.0<img style="height:22px!important;margin-left:3px;vertical-align:text-bottom;" src="https://mirrors.creativecommons.org/presskit/icons/cc.svg?ref=chooser-v1" alt=""><img style="height:22px!important;margin-left:3px;vertical-align:text-bottom;" src="https://mirrors.creativecommons.org/presskit/icons/by.svg?ref=chooser-v1" alt=""><img style="height:22px!important;margin-left:3px;vertical-align:text-bottom;" src="https://mirrors.creativecommons.org/presskit/icons/sa.svg?ref=chooser-v1" alt=""></a>.</p>
## Hjemmesidegenerator ## Hjemmesidegenerator
For at lave denne madblog var jeg nødt til at skrive en ny statisk hjemmesidegenerator i programmeringssproget Haskell. Den har fokus på ergonomisk afhængighedsnedskrivning og effektiv generering af kun det nødvendige. Se mere her: For at lave denne madblog var jeg nødt til at skrive en ny statisk hjemmesidegenerator i programmeringssproget Haskell. Den har fokus på ergonomisk afhængighedsnedskrivning og effektiv regenerering af kun det nødvendige. Den er ikke helt færdig. Se mere her:
## English ## English
Hi, this is my food blog in Danish, but feel free to browse around even if you're new to the language. You can also look at the pictures. Hi, this is my food blog in Danish, but feel free to browse around even if you're new to the language. You can also look at the pictures.
![Mit gamle køkken](/img/køkken.jpg)

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 MiB

View File

@ -0,0 +1,25 @@
# Olivenkage
*Oprindelig dato: 2012*
## Ingredienser
- Oliven i glas
- Æg
## Inspirationer
- Længsler efter middelhavsstrøg
- "Think different"-kampagnesloganet fra Apple
## Opskrift
1. Bland sammen.
## Baggrund
Overrask dine venner med denne nyklassiker. Som penselsstrøg på panden formes æggene, og med velsmagende olivenbidder brydes monotonien, så der er to smage.
Under stegningen ændrer ens udvalgte oliven tekstur så de føles lidt anderledes at spise end hvis man spiser dem direkte ud af glasset.
Denne ret er essencen af følgende citat:
> Smil, og verden smiller til dig
>
> *Indsendt til <https://www.udvalgte-ordsprog.dk/kendte-citater.htm>*

View File

@ -128,3 +128,25 @@ p.image {
max-width: 100%; max-width: 100%;
} }
} }
blockquote {
background-color: #dddd31;
padding: 10px;
margin: 0;
p {
margin: 0;
}
em {
display: block;
text-align: right;
color: grey;
}
}
#julekalender {
height: 100px;
background-image: url('img/julekalender.png');
background-position: center;
}

View File

@ -8,6 +8,7 @@
<title>Niels' mad</title> <title>Niels' mad</title>
</head> </head>
<body> <body>
<div id="julekalender"></div>
<header><a href="/">&nbsp;Niels'&nbsp;mad&nbsp;</a></header> <header><a href="/">&nbsp;Niels'&nbsp;mad&nbsp;</a></header>
<nav> <nav>