Primo Commit
This commit is contained in:
commit
6b38083052
78
README.md
Normal file
78
README.md
Normal file
|
@ -0,0 +1,78 @@
|
|||
# Based Cooking Website
|
||||
|
||||
[Ricette Basate](https://octosrv.me/ricette-basate)
|
||||
|
||||
## To-do
|
||||
|
||||
- get many recipes
|
||||
- make and take pictures of recipes
|
||||
- decide on CSS/styling, something good-looking and readable, but nothing too complicated
|
||||
- search function? See below
|
||||
- keep it simple
|
||||
|
||||
## Rules for submission
|
||||
|
||||
Add reciples as `.md` files to the `src/` directory.
|
||||
Look at already existing `.md` files for examples
|
||||
or see [example](example.md).
|
||||
|
||||
Recipe must be based, i.e. good traditional and substantial food. Nothing
|
||||
ironic, meme-tier hyper-sugary, meat-substitute, etc.
|
||||
|
||||
### Minor rules
|
||||
|
||||
- Don't include salt and pepper and other uniquitous things in the ingredients list.
|
||||
- If measurements are used, include metric and American measurements. Do not use decimals in American; round or use fractions.
|
||||
|
||||
## Images
|
||||
|
||||
Each recipe can have a title image at the top and perhaps
|
||||
several instructional images as absolutely necessary.
|
||||
|
||||
Do not add stock images you found on the internet.
|
||||
Take a good picture yourself of the actual dish created.
|
||||
If you see a bad or substandard image, you may submit a better one.
|
||||
|
||||
Images should be in `.webp` format.
|
||||
If you submit an image for say, `chicken-parmesan.md`, it should be added as `pix/chicken-parmesan.webp`.
|
||||
I will create smaller images from that which is seen on the page,
|
||||
and upon being clicked, the user will see the full-size image.
|
||||
|
||||
If you would like to add additional directional images,
|
||||
they should be numbered with two digits like: `pix/chicken-parmesan-01.webp`, etc.
|
||||
|
||||
## About the site
|
||||
|
||||
The front page, for now, will just be a list of recipes
|
||||
and when adding a `.md` page, please manually add a link to it in the list.
|
||||
As more articles are added, the site will be reorganized, categorized
|
||||
or will implement server-side scripting or searches.
|
||||
This is not necessary yet though.
|
||||
|
||||
I don't really want images of recipes on the mainpage yet.
|
||||
I'll think about how best to do it to minimize bandwidth if possible.
|
||||
|
||||
This site is generated with [Roman Zolotarev](https://www.romanzolotarev.com/)'s
|
||||
[ssg5](https://www.romanzolotarev.com/ssg.html) which is also included in this
|
||||
repo for replicability.
|
||||
|
||||
## curl/Search function in the future
|
||||
|
||||
I eventually want a command-line/curl interface to this site.
|
||||
Part of this would be an implicit search function.
|
||||
|
||||
So suppose someone wants a recipe with chicken, I'd like
|
||||
`curl based.cooking/chicken` to return articles with that title.
|
||||
If there is only one result, that page is opened.
|
||||
|
||||
Just something to think about.
|
||||
Then people could make a simple two or three character alias to get a simple text recipe.
|
||||
|
||||
## License
|
||||
|
||||
This website and all its content is in the public domain.
|
||||
By submitting text or images or anything else to this repository,
|
||||
you waive any pretense of ownership to it,
|
||||
although you are welcome and recommended to give yourself credit
|
||||
at the bottom of a submitted page for you adding it
|
||||
(including personal or donation links).
|
1
src/.ssgignore
Normal file
1
src/.ssgignore
Normal file
|
@ -0,0 +1 @@
|
|||
template.md
|
8
src/_footer.html
Normal file
8
src/_footer.html
Normal file
|
@ -0,0 +1,8 @@
|
|||
|
||||
<footer>
|
||||
<a href="index.html">🏡 È TUTTO BASATO</a> </br>
|
||||
All site content is in the Public Domain.
|
||||
</footer>
|
||||
|
||||
</body>
|
||||
</html>
|
12
src/_header.html
Normal file
12
src/_header.html
Normal file
|
@ -0,0 +1,12 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang=en">
|
||||
|
||||
<head>
|
||||
<title></title>
|
||||
<meta charset=UTF-8>
|
||||
<link rel=stylesheet href=style.css>
|
||||
<link rel="shortcut icon" type="image/x-icon" href="favicon.png">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
</head>
|
||||
|
||||
<body>
|
21
src/index.md
Normal file
21
src/index.md
Normal file
|
@ -0,0 +1,21 @@
|
|||
# 🍳 Basatissimo 🍲
|
||||
|
||||
Solo ricette basate, divieto di bloat
|
||||
|
||||
## Ricette
|
||||
|
||||
- [Pasta al forno](pasta-al-forno.html)
|
||||
- [Pane con la macchina del pane](pane-in-macchina.html)
|
||||
|
||||
## Più informazioni
|
||||
|
||||
|
||||
## In verità vi dico
|
||||
|
||||
Forza Inter
|
||||
|
||||
### Manca la vostra ricetta preferita?
|
||||
È facile aggiungere la vostra!
|
||||
|
||||
- Proponete le vostre ricette sul nostro [Git](https://git.octosrv.me/marco/ricette-basate)
|
||||
- Per informazioni scrivete a [Marco](mailto:marco@octosrv.me)
|
22
src/pane-in-macchina.md
Normal file
22
src/pane-in-macchina.md
Normal file
|
@ -0,0 +1,22 @@
|
|||
# Pane in macchina del pane
|
||||
|
||||
Pane in macchina - Clatronic
|
||||
|
||||
## Ingredients
|
||||
|
||||
- Acqua - 300ml
|
||||
- Olio - 1,5 cucchiai
|
||||
- Sale - 1 cucchiaino
|
||||
- Zucchero - 1 cucchiaio
|
||||
- Farina tipo0 e/o integrale - 540g
|
||||
- Lievito secco - un pacchetto / 7g
|
||||
|
||||
## Directions
|
||||
|
||||
1. Butta tutto in macchina del pane
|
||||
2. Fai partire con programma 1 (completo) oppure 8 (solo impasto per infornare a parte)
|
||||
|
||||
|
||||
## Contribution
|
||||
|
||||
- Mr. Clatronic
|
24
src/pasta-al-forno.md
Normal file
24
src/pasta-al-forno.md
Normal file
|
@ -0,0 +1,24 @@
|
|||
# Pasta Al Forno
|
||||
|
||||
È della pasta, è al forno
|
||||
|
||||
## Ingredients
|
||||
|
||||
- Pasta
|
||||
- Mozzarella
|
||||
- Ragù
|
||||
- Ma in realtà tutte le cose che stanno bene in forno
|
||||
|
||||
## Directions
|
||||
|
||||
1. Cuoci pasta
|
||||
2. Metti mozzarella cubetti in teglia
|
||||
3. Metti sugo
|
||||
4. Inforna finchè mozzarella sciolta
|
||||
5. ???
|
||||
6. Profit
|
||||
|
||||
|
||||
## Contribution
|
||||
|
||||
- Tipo chiunque
|
43
src/style.css
Normal file
43
src/style.css
Normal file
|
@ -0,0 +1,43 @@
|
|||
body {
|
||||
max-width: 800px ;
|
||||
margin: auto ;
|
||||
padding: 0 16px ;
|
||||
margin-bottom: 500px ;
|
||||
}
|
||||
|
||||
h1 {
|
||||
text-align: center ;
|
||||
}
|
||||
|
||||
footer {
|
||||
text-align: center ;
|
||||
}
|
||||
|
||||
img {
|
||||
max-width: 600px ;
|
||||
margin: auto ;
|
||||
display: block ;
|
||||
}
|
||||
|
||||
@media (prefers-color-scheme: dark) {
|
||||
body {
|
||||
background: #151515 ;
|
||||
color: white ;
|
||||
}
|
||||
a {
|
||||
color: lightblue ;
|
||||
}
|
||||
a:visited {
|
||||
color: gray ;
|
||||
}
|
||||
h2 {
|
||||
color: tomato ;
|
||||
}
|
||||
}
|
||||
|
||||
@media print {
|
||||
a[href] {
|
||||
text-decoration: none ;
|
||||
color: black ;
|
||||
}
|
||||
}
|
24
src/template.md
Normal file
24
src/template.md
Normal file
|
@ -0,0 +1,24 @@
|
|||
# Nome ricetta
|
||||
|
||||
Aggiungete una breve descrizione
|
||||
|
||||
|
||||
## Ingredienti
|
||||
|
||||
- Basta
|
||||
- Una semplice
|
||||
- lista
|
||||
- in markdown
|
||||
|
||||
## Procedura
|
||||
|
||||
1. Qua
|
||||
2. Un bell'elenco
|
||||
3. Numerato
|
||||
4. Perchè ci piacciono le cose belle
|
||||
|
||||
## Crediti
|
||||
|
||||
- **Vostro Nome** -- [Vostro sito](https://se-volete.com)
|
||||
|
||||
P.S. non dimenticate di aggiungere il link ne file index.md!
|
263
ssg5
Executable file
263
ssg5
Executable file
|
@ -0,0 +1,263 @@
|
|||
#!/bin/sh -e
|
||||
#
|
||||
# https://rgz.ee/bin/ssg5
|
||||
# Copyright 2018-2019 Roman Zolotarev <hi@romanzolotarev.com>
|
||||
#
|
||||
# Permission to use, copy, modify, and/or distribute this software for any
|
||||
# purpose with or without fee is hereby granted, provided that the above
|
||||
# copyright notice and this permission notice appear in all copies.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||
# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||
# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||
# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||
# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
#
|
||||
|
||||
main() {
|
||||
test -n "$1" || usage
|
||||
test -n "$2" || usage
|
||||
test -n "$3" || usage
|
||||
test -n "$4" || usage
|
||||
test -d "$1" || no_dir "$1"
|
||||
test -d "$2" || no_dir "$2"
|
||||
|
||||
src=$(readlink_f "$1")
|
||||
dst=$(readlink_f "$2")
|
||||
|
||||
IGNORE=$(
|
||||
if ! test -f "$src/.ssgignore"
|
||||
then
|
||||
printf ' ! -path "*/.*"'
|
||||
return
|
||||
fi
|
||||
while read -r x
|
||||
do
|
||||
test -n "$x" || continue
|
||||
printf ' ! -path "*/%s*"' "$x"
|
||||
done < "$src/.ssgignore"
|
||||
)
|
||||
|
||||
# files
|
||||
|
||||
title="$3"
|
||||
|
||||
h_file="$src/_header.html"
|
||||
f_file="$src/_footer.html"
|
||||
test -f "$f_file" && FOOTER=$(cat "$f_file") && export FOOTER
|
||||
test -f "$h_file" && HEADER=$(cat "$h_file") && export HEADER
|
||||
|
||||
list_dirs "$src" |
|
||||
(cd "$src" && cpio -pdu "$dst")
|
||||
|
||||
fs=$(
|
||||
if test -f "$dst/.files"
|
||||
then list_affected_files "$src" "$dst/.files"
|
||||
else list_files "$1"
|
||||
fi
|
||||
)
|
||||
|
||||
if test -n "$fs"
|
||||
then
|
||||
echo "$fs" | tee "$dst/.files"
|
||||
|
||||
if echo "$fs" | grep -q '\.md$'
|
||||
then
|
||||
if test -x "$(which lowdown 2> /dev/null)"
|
||||
then
|
||||
echo "$fs" | grep '\.md$' |
|
||||
render_md_files_lowdown "$src" "$dst" "$title"
|
||||
else
|
||||
if test -x "$(which Markdown.pl 2> /dev/null)"
|
||||
then
|
||||
echo "$fs" | grep '\.md$' |
|
||||
render_md_files_Markdown_pl "$src" "$dst" "$title"
|
||||
else
|
||||
echo "couldn't find lowdown nor Markdown.pl"
|
||||
exit 3
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
echo "$fs" | grep '\.html$' |
|
||||
render_html_files "$src" "$dst" "$title"
|
||||
|
||||
echo "$fs" | grep -Ev '\.md$|\.html$' |
|
||||
(cd "$src" && cpio -pu "$dst")
|
||||
fi
|
||||
|
||||
printf '[ssg] ' >&2
|
||||
print_status 'file, ' 'files, ' "$fs" >&2
|
||||
|
||||
|
||||
# sitemap
|
||||
|
||||
base_url="$4"
|
||||
date=$(date +%Y-%m-%d)
|
||||
urls=$(list_pages "$src")
|
||||
|
||||
test -n "$urls" &&
|
||||
render_sitemap "$urls" "$base_url" "$date" > "$dst/sitemap.xml"
|
||||
|
||||
print_status 'url' 'urls' "$urls" >&2
|
||||
echo >&2
|
||||
}
|
||||
|
||||
|
||||
readlink_f() {
|
||||
file="$1"
|
||||
cd "$(dirname "$file")"
|
||||
file=$(basename "$file")
|
||||
while test -L "$file"
|
||||
do
|
||||
file=$(readlink "$file")
|
||||
cd "$(dirname "$file")"
|
||||
file=$(basename "$file")
|
||||
done
|
||||
dir=$(pwd -P)
|
||||
echo "$dir/$file"
|
||||
}
|
||||
|
||||
|
||||
print_status() {
|
||||
test -z "$3" && printf 'no %s' "$2" && return
|
||||
|
||||
echo "$3" | awk -v singular="$1" -v plural="$2" '
|
||||
END {
|
||||
if (NR==1) printf NR " " singular
|
||||
if (NR>1) printf NR " " plural
|
||||
}'
|
||||
}
|
||||
|
||||
|
||||
usage() {
|
||||
echo "usage: ${0##*/} src dst title base_url" >&2
|
||||
exit 1
|
||||
}
|
||||
|
||||
|
||||
no_dir() {
|
||||
echo "${0##*/}: $1: No such directory" >&2
|
||||
exit 2
|
||||
}
|
||||
|
||||
list_dirs() {
|
||||
cd "$1" && eval "find . -type d ! -name '.' ! -path '*/_*' $IGNORE"
|
||||
}
|
||||
|
||||
|
||||
list_files() {
|
||||
cd "$1" && eval "find . -type f ! -name '.' ! -path '*/_*' $IGNORE"
|
||||
}
|
||||
|
||||
|
||||
list_dependant_files () {
|
||||
e="\\( -name '*.html' -o -name '*.md' -o -name '*.css' -o -name '*.js' \\)"
|
||||
cd "$1" && eval "find . -type f ! -name '.' ! -path '*/_*' $IGNORE $e"
|
||||
}
|
||||
|
||||
list_newer_files() {
|
||||
cd "$1" && eval "find . -type f ! -name '.' $IGNORE -newer $2"
|
||||
}
|
||||
|
||||
|
||||
has_partials() {
|
||||
grep -qE '^./_.*\.html$|^./_.*\.js$|^./_.*\.css$'
|
||||
}
|
||||
|
||||
|
||||
list_affected_files() {
|
||||
fs=$(list_newer_files "$1" "$2")
|
||||
|
||||
if echo "$fs" | has_partials
|
||||
then list_dependant_files "$1"
|
||||
else echo "$fs"
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
render_html_files() {
|
||||
while read -r f
|
||||
do render_html_file "$3" < "$1/$f" > "$2/$f"
|
||||
done
|
||||
}
|
||||
|
||||
|
||||
render_md_files_lowdown() {
|
||||
while read -r f
|
||||
do
|
||||
lowdown \
|
||||
< "$1/$f" |
|
||||
render_html_file "$3" \
|
||||
> "$2/${f%\.md}.html"
|
||||
done
|
||||
}
|
||||
|
||||
|
||||
render_md_files_Markdown_pl() {
|
||||
while read -r f
|
||||
do
|
||||
Markdown.pl < "$1/$f" |
|
||||
render_html_file "$3" \
|
||||
> "$2/${f%\.md}.html"
|
||||
done
|
||||
}
|
||||
|
||||
|
||||
render_html_file() {
|
||||
# h/t Devin Teske
|
||||
awk -v title="$1" '
|
||||
{ body = body "\n" $0 }
|
||||
END {
|
||||
body = substr(body, 2)
|
||||
if (body ~ /<[Hh][Tt][Mm][Ll]/) {
|
||||
print body
|
||||
exit
|
||||
}
|
||||
if (match(body, /<[[:space:]]*[Hh]1(>|[[:space:]][^>]*>)/)) {
|
||||
t = substr(body, RSTART + RLENGTH)
|
||||
sub("<[[:space:]]*/[[:space:]]*[Hh]1.*", "", t)
|
||||
gsub(/^[[:space:]]*|[[:space:]]$/, "", t)
|
||||
if (t) title = t " — " title
|
||||
}
|
||||
n = split(ENVIRON["HEADER"], header, /\n/)
|
||||
for (i = 1; i <= n; i++) {
|
||||
if (match(tolower(header[i]), "<title></title>")) {
|
||||
head = substr(header[i], 1, RSTART - 1)
|
||||
tail = substr(header[i], RSTART + RLENGTH)
|
||||
print head "<title>" title "</title>" tail
|
||||
} else print header[i]
|
||||
}
|
||||
print body
|
||||
print ENVIRON["FOOTER"]
|
||||
}'
|
||||
}
|
||||
|
||||
|
||||
list_pages() {
|
||||
e="\\( -name '*.html' -o -name '*.md' \\)"
|
||||
cd "$1" && eval "find . -type f ! -path '*/.*' ! -path '*/_*' $IGNORE $e" |
|
||||
sed 's#^./##;s#.md$#.html#;s#/index.html$#/#'
|
||||
}
|
||||
|
||||
|
||||
render_sitemap() {
|
||||
urls="$1"
|
||||
base_url="$2"
|
||||
date="$3"
|
||||
|
||||
echo '<?xml version="1.0" encoding="UTF-8"?>'
|
||||
echo '<urlset'
|
||||
echo 'xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"'
|
||||
echo 'xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9'
|
||||
echo 'http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd"'
|
||||
echo 'xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">'
|
||||
echo "$urls" |
|
||||
sed -E 's#^(.*)$#<url><loc>'"$base_url"'/\1</loc><lastmod>'\
|
||||
"$date"'</lastmod><priority>1.0</priority></url>#'
|
||||
echo '</urlset>'
|
||||
}
|
||||
|
||||
main "$@"
|
Loading…
Reference in New Issue
Block a user