summaryrefslogtreecommitdiff
path: root/html.rb
blob: c4a7a5de046416ad2e1b5fb20915c41e4ca1c1a7 (plain)
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
#!/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()'>&equiv;</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, "*mp3")].each do |mp3|
      mp3 = "/" + mp3.sub(ROOT, '')
      html += "<tr>"
      html += "<td>#{File.basename(mp3, '.mp3')}</td>"
      html += "<td>
        <audio controls>
        <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>&copy; 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/mp4'>
        </video><p>
        "
    html += lines.join("<br>")
    html += "</div>"
    html += "<hr>"
  end
  html += '<p>&copy; 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}"` }