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 <-
|
||||
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
|
||||
|
|
|
@ -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'
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
-- | All byg functions.
|
||||
module Byg.Functions
|
||||
( module Byg.Functions.Image
|
||||
, module Byg.Functions.Pandoc
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
-- | Date functions.
|
||||
module Byg.Types.Date
|
||||
( Date(..)
|
||||
, formatDate
|
||||
|
|
|
@ -1,4 +1,6 @@
|
|||
{-# LANGUAGE GADTs #-}
|
||||
|
||||
-- | Keeps track of the graph of calculation dependencies.
|
||||
module Byg.Types.Dependency
|
||||
( Action(..)
|
||||
, F(..)
|
||||
|
|
|
@ -1,4 +1,6 @@
|
|||
{-# LANGUAGE FunctionalDependencies #-}
|
||||
|
||||
-- | Calculation function types.
|
||||
module Byg.Types.Functions
|
||||
( IsFunctionIO(..)
|
||||
) where
|
||||
|
|
|
@ -1,4 +1,6 @@
|
|||
{-# LANGUAGE GADTs #-}
|
||||
|
||||
-- | Tokens represent future values.
|
||||
module Byg.Types.Token
|
||||
( Token(..)
|
||||
) where
|
||||
|
|
|
@ -1,4 +1,6 @@
|
|||
{-# LANGUAGE MonoLocalBinds #-}
|
||||
|
||||
-- | Small wrapper over the Dynamic type.
|
||||
module Byg.Types.Value
|
||||
( Value(..)
|
||||
, 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å.
|
||||
|
||||
![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 |
|
@ -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%;
|
||||
}
|
||||
}
|
||||
|
||||
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>
|
||||
</head>
|
||||
<body>
|
||||
<div id="julekalender"></div>
|
||||
<header><a href="/"> Niels' mad </a></header>
|
||||
|
||||
<nav>
|
||||
|
|
Loading…
Reference in New Issue