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 <-
listDirectory dir
& filterDepGenM (hasExtension (inject ["jpg"]))
& onToken sort
htmlBodyImages <- forDepGenM imageFilenames $ \filename -> do
path <- joinPaths dir filename
path `copyTo` outputDir
@ -149,7 +150,7 @@ generateSite = do
-- Handle images
imgDir <- inject "img"
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
-- Handle fonts

View File

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

View File

@ -1,4 +1,11 @@
{-# 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
( DepRunM
, runDeps

View File

@ -1,3 +1,4 @@
-- | All byg functions.
module Byg.Functions
( module Byg.Functions.Image
, 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 = 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 = onToken $ runPandoc . P.writeHtml5String P.def

View File

@ -1,13 +1,14 @@
-- | All byg types.
module Byg.Types
( module Byg.Types.Token
, module Byg.Types.Value
, module Byg.Types.Functions
, module Byg.Types.Date
, Dependency
, module Byg.Types.Dependency
) where
import Byg.Types.Token
import Byg.Types.Value
import Byg.Types.Functions
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
( Date(..)
, formatDate

View File

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

View File

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

View File

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

View File

@ -1,4 +1,6 @@
{-# LANGUAGE MonoLocalBinds #-}
-- | Small wrapper over the Dynamic type.
module Byg.Types.Value
( Value(..)
, 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å.
![Mig der holder en platte med hjemmesidens adresse på](/img/platte.jpg)
## Samarbejde?
@ -15,24 +17,26 @@ Da jeg i 2012 flyttede hjemmefra for at studere i København, begyndte jeg også
## 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
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
<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
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
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%;
}
}
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>
</head>
<body>
<div id="julekalender"></div>
<header><a href="/">&nbsp;Niels'&nbsp;mad&nbsp;</a></header>
<nav>