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
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
|
#!/usr/bin/env ruby
ROOT = ARGV[0]
SNIPPETS = File.join(File.dirname(__FILE__), "snippets")
def nav cat
html = "<nav>"
html += "<a id='logo' href='/about.html'><img src='/pdp8.png' alt='pdp8'></a>"
["music", "pictures", "videos", "code", "contact"].each do |c|
c == cat ? cl = 'item current' : cl = 'item'
html += "<a class='#{cl}' href='/#{c}.html'>#{c}</a>"
end
html += "<a class='item' href='/rss.xml'>rss</a>"
html += "<a id='menu' href='#' onclick='show_vertical_menu()'>≡</a>"
html += "</nav>"
html
end
def file_html basename
path = File.join(SNIPPETS, basename + ".html")
html = File.read(File.join(SNIPPETS, "head.html"))
html += nav basename
html += "<div class='post'>"
html += File.read(path)
html += "</div>"
html += File.read(File.join(SNIPPETS, "tail.html"))
print_html basename, html
end
def print_html basename, html
out = File.join(ROOT, basename + ".html")
puts out
File.open(out, "w+") { |f| f.puts html }
puts `tidy -iqm -w 0 #{out} 2>&1`
end
def music_html
music = Dir[File.join(ROOT, "music", "*")].sort.reverse
html = File.read(File.join(SNIPPETS, "head.html"))
html += nav "music"
music.each_with_index do |dir, i|
date = File.basename(dir).split("_")[0]
html += "<div class='post' id='#{date}'>"
title = File.basename(dir).split("_")[1..-1].join(" ")
html += "<h1>#{title}</h1>"
html += File.read(File.join(dir, "README")) + "<p>"
cover = File.join("/", dir.sub(ROOT, ''), "cover.jpeg")
html += "<img class='cover' src='#{cover}' alt='cover'>"
html += "<table>"
Dir[File.join(dir, "*flac")].each do |flac|
flac = "/" + flac.sub(ROOT, '')
mp3 = flac.sub(".flac", ".mp3")
html += "<tr>"
html += "<td>#{File.basename(flac, '.flac')}</td>"
html += "<td>
<audio controls>
<source src='#{flac}' type='audio/flac'>
<source src='#{mp3}' type='audio/mpeg'>
</audio>
</td>
</tr>"
end
html += "</table>"
bc = "https://pdp8.bandcamp.com/#{title.gsub(' ', '-')}"
html += "<p>Bandcamp: <a href='#{bc}'>#{bc}</a>"
html += "</div>"
html += "<hr>"
end
html += '<p>© pdp8 <a rel="license" href="http://creativecommons.org/licenses/by/4.0/">Creative Commons Attribution 4.0 International License</a>'
html += File.read(File.join(SNIPPETS, "tail.html"))
print_html "music", html
end
def video_html
videos = Dir[File.join(ROOT, "videos", "*")].sort.reverse
html = File.read(File.join(SNIPPETS, "head.html"))
html += nav "videos"
videos.each_with_index do |dir, i|
date = File.basename(dir).split("_")[0]
html += "<div class='post' id='#{date}'>"
title = File.basename(dir).split("_")[1..-1].join(" ")
html += "<h1>#{title}</h1>"
txt = File.read(File.join(dir, "README"))
txt = txt.gsub(/(http\S*)/, '<a href="\1">\1</a>')
lines = txt.split("\n")
html += lines.shift + "<p>"
mp4 = File.join("/videos", File.basename(dir), title.gsub(" ", "_") + ".mp4")
webm = File.join("/videos", File.basename(dir), title.gsub(" ", "_") + ".webm")
poster = File.join("/videos", File.basename(dir), "poster.png")
html += "<video controls poster='#{poster}'>
<source src='#{webm}' type='video/webm'>
<source src='#{mp4}' type='video/mpeg'>
<a href='#{mp4}'>#{mp4}</a>
</video><p>
"
html += lines.join("<br>")
html += "</div>"
html += "<hr>"
end
html += '<p>© pdp8 <a rel="license" href="http://creativecommons.org/licenses/by/4.0/">Creative Commons Attribution 4.0 International License</a>'
html += File.read(File.join(SNIPPETS, "tail.html"))
print_html "videos", html
end
music_html
video_html
["about", "code", "pictures", "contact"].each do |basename|
file_html basename
end
last = (Dir[File.join(ROOT, "music", "*")] + Dir[File.join(ROOT, "videos", "*")]).sort_by { |d| File.basename(d) }.last.split("/")[-2] + '.html'
puts `cp "#{File.join(ROOT, last)}" "#{File.join(ROOT, "index.html")}"`
[
"pdp8.png",
"540px-PDP-8_.jpg",
"style.css",
"slideshow.js",
"robots.txt"
].each { |f| puts `rsync -av "#{File.join(SNIPPETS, f)}" "#{ROOT}"` }
puts `rsync -av #{File.join(SNIPPETS, "Fork-Awesome-1.2.0")} "#{ROOT}"`
|