Compare commits
10 Commits
67fb3f8871
...
8263d01b86
Author | SHA1 | Date |
---|---|---|
Niels G. W. Serup | 8263d01b86 | |
Niels G. W. Serup | bb2cd7fc46 | |
Niels G. W. Serup | a471e5d0e4 | |
Niels G. W. Serup | 30bf917e1c | |
Niels G. W. Serup | 3c393b525b | |
Niels G. W. Serup | c694baca81 | |
Niels G. W. Serup | 67d4303548 | |
Niels G. W. Serup | ee9db4873b | |
Niels G. W. Serup | 6f612c243b | |
Niels G. W. Serup | 06d5dbb2d7 |
|
@ -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
|
||||||
|
|
|
@ -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'
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
-- | Date functions.
|
||||||
module Byg.Types.Date
|
module Byg.Types.Date
|
||||||
( Date(..)
|
( Date(..)
|
||||||
, formatDate
|
, formatDate
|
||||||
|
|
|
@ -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(..)
|
||||||
|
|
|
@ -1,4 +1,6 @@
|
||||||
{-# LANGUAGE FunctionalDependencies #-}
|
{-# LANGUAGE FunctionalDependencies #-}
|
||||||
|
|
||||||
|
-- | Calculation function types.
|
||||||
module Byg.Types.Functions
|
module Byg.Types.Functions
|
||||||
( IsFunctionIO(..)
|
( IsFunctionIO(..)
|
||||||
) where
|
) where
|
||||||
|
|
|
@ -1,4 +1,6 @@
|
||||||
{-# LANGUAGE GADTs #-}
|
{-# LANGUAGE GADTs #-}
|
||||||
|
|
||||||
|
-- | Tokens represent future values.
|
||||||
module Byg.Types.Token
|
module Byg.Types.Token
|
||||||
( Token(..)
|
( Token(..)
|
||||||
) where
|
) where
|
||||||
|
|
|
@ -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
|
||||||
|
|
Binary file not shown.
After Width: | Height: | Size: 15 KiB |
Binary file not shown.
After Width: | Height: | Size: 125 KiB |
Binary file not shown.
After Width: | Height: | Size: 113 KiB |
12
om.md
12
om.md
|
@ -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 |
|
@ -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>*
|
22
style.css
22
style.css
|
@ -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;
|
||||||
|
}
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
<title>Niels' mad</title>
|
<title>Niels' mad</title>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
<div id="julekalender"></div>
|
||||||
<header><a href="/"> Niels' mad </a></header>
|
<header><a href="/"> Niels' mad </a></header>
|
||||||
|
|
||||||
<nav>
|
<nav>
|
||||||
|
|
Loading…
Reference in New Issue