1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
|
import header, aside, footer, div, svg, script, g, circle, h1, span, b, a, img from require 'mmm.dom'
import navigate_to from (require 'mmm.mmmfs.util') require 'mmm.dom'
pick = (...) ->
num = select '#', ...
i = math.ceil math.random! * num
select i, ...
iconlink = (href, src, alt, style) -> a {
class: 'iconlink',
:href,
target: '_blank',
img :src, :alt, :style
}
logo = svg {
class: 'sun'
viewBox: '-0.75 -1 1.5 2'
xmlns: 'http://www.w3.org/2000/svg'
baseProfile: 'full'
version: '1.1'
g {
transform: 'translate(0 .18)'
g { class: 'circle out', circle r: '.6', fill: 'none', 'stroke-width': '.12' }
g { class: 'circle in', circle r: '.2', stroke: 'none' }
}
}
{
header: header {
div {
h1 {
logo
span {
span 'mmm', class: 'bold'
'​'
'.s‑ol.nu'
}
}
span "fun stuff with code and wires"
-- pick 'fun', 'cool', 'weird', 'interesting', 'new'
-- pick 'stuff', 'things', 'projects', 'experiments', 'news'
-- "with"
-- pick 'mostly code', 'code and wires', 'silicon', 'electronics'
}
aside {
navigate_to '/about', 'about me'
navigate_to '/portfolio', 'portfolio'
navigate_to '/games', 'games'
navigate_to '/projects', 'other'
a {
href: 'mailto:s%20[removethis]%20[at]%20s-ol.nu'
'contact'
script "
var l = document.currentScript.parentElement;
l.href = l.href.replace('%20[at]%20', '@');
l.href = l.href.replace('%20[removethis]', '') + '?subject=Hey there :)';
"
}
}
}
footer: footer {
span {
'made with \xe2\x98\xbd by '
a 's-ol', href: 'https://twitter.com/S0lll0s'
", #{os.date '%Y'}"
}
div {
class: 'icons',
iconlink 'https://github.com/s-ol/mmm', 'https://cdn.jsdelivr.net/npm/simple-icons@latest/icons/github.svg',
iconlink 'https://twitter.com/S0lll0s', 'https://cdn.jsdelivr.net/npm/simple-icons@latest/icons/twitter.svg',
iconlink 'https://webring.xxiivv.com/#random', 'https://webring.xxiivv.com/icon.black.svg', 'webring',
{ height: '1.3em', 'margin-left': '.3em', 'margin-top': '-0.12em' }
}
}
get_meta: =>
title = (@get 'title: text/plain') or @gett 'name: alpha'
l = (str) ->
str = str\gsub '[%s\\n]+$', ''
str\gsub '\\n', ' '
e = (str) -> string.format '%q', l str
meta = "
<meta charset=\"UTF-8\">
<title>#{l title}</title>
"
if page_meta = @get '_meta: mmm/dom'
meta ..= page_meta
else
meta ..= "
<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">
<meta property=\"og:title\" content=#{e title} />
<meta property=\"og:type\" content=\"website\" />
<meta property=\"og:url\" content=\"https://mmm.s-ol.nu#{@path}/\" />
<meta property=\"og:site_name\" content=\"mmm\" />"
if desc = @get 'description: text/plain'
meta ..= "
<meta property=\"og:description\" content=#{e desc} />"
meta
}
|