runeblog 0.2.83 → 0.2.88
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/bin/blog +39 -17
- data/empty_view/posts/GIT_IS_DUMB +1 -0
- data/empty_view/themes/standard/banner/top.lt3 +19 -0
- data/empty_view/themes/standard/blog/banner.lt3 +0 -2
- data/lib/liveblog.rb +41 -119
- data/lib/processing.rb +2 -2
- data/lib/repl.rb +18 -19
- data/lib/runeblog.rb +20 -9
- data/lib/runeblog_version.rb +1 -1
- data/runeblog.gemspec +2 -2
- metadata +8 -8
- data/empty_view/remote/banner/top.html +0 -4
- data/empty_view/themes/standard/banner/top.html +0 -18
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 971964911d35242af990fce1bf3ac1e3227dd15726753f1224364781dd8d14ee
|
|
4
|
+
data.tar.gz: 1168fac5a9db55738abfcd02d2a05b6da4e35a7aca6739b982ad9f45ff1aa143
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 8d4d68cdfc991e83c6c1d4ed351b410803a276ccf296da6780f671851d9ec05b667adbb3ca23558e2a7e0cf896715391d07bc11e8c47fe2de3486e8f223513af
|
|
7
|
+
data.tar.gz: b60f9c6f1cd642499992d72a7727276c0e0daa2b0de3c987e98a607570e62c01c926310761c7db2a715e4c22c8820ac0d3362c822d851a7329e71ff622b2efd7
|
data/bin/blog
CHANGED
|
@@ -12,9 +12,7 @@ include RuneBlog::REPL
|
|
|
12
12
|
def yesno(question, noskip=false)
|
|
13
13
|
puts fx("\n #{question}", :bold)
|
|
14
14
|
puts unless noskip
|
|
15
|
-
|
|
16
|
-
num, str = STDSCR.menu(r: r, c: c+6, items: ["yes", "no"])
|
|
17
|
-
num == 0
|
|
15
|
+
STDSCR.yesno
|
|
18
16
|
end
|
|
19
17
|
|
|
20
18
|
def pick_editor
|
|
@@ -24,33 +22,57 @@ def pick_editor
|
|
|
24
22
|
file = `which #{name}`.chomp
|
|
25
23
|
end
|
|
26
24
|
|
|
25
|
+
def get_universal
|
|
26
|
+
univ = "#{@blog.root}/data/universal.lt3"
|
|
27
|
+
if yesno("Faster initial setup? (no: edit universal.lt3)")
|
|
28
|
+
author = ask("Author name: ")
|
|
29
|
+
site = ask("Site/domain: ")
|
|
30
|
+
# Now stash it...
|
|
31
|
+
str = File.read(univ)
|
|
32
|
+
str = str.gsub(/AUTHOR/, author)
|
|
33
|
+
str = str.gsub(/SITE_DOMAIN/, site)
|
|
34
|
+
else
|
|
35
|
+
vim_params = '-c ":set hlsearch" -c ":hi Search ctermfg=2 ctermbg=6" +/"\(AUTHOR.*\|SITE.*\)"'
|
|
36
|
+
edit_file(univ, vim: vim_params)
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def get_global
|
|
41
|
+
if yesno("Faster view setup? (no: edit global.lt3)")
|
|
42
|
+
view_name = ask("\nFilename: ")
|
|
43
|
+
@blog.create_view(view_name) # call change_view??
|
|
44
|
+
title = ask("View title: ")
|
|
45
|
+
subtitle = ask("Subtitle : ")
|
|
46
|
+
gname = "#{@blog.root}/views/#{view_name}/themes/standard/global.lt3"
|
|
47
|
+
text = File.read(gname)
|
|
48
|
+
text = text.gsub(/VIEW_NAME/, view_name)
|
|
49
|
+
text = text.gsub(/VIEW_TITLE/, title)
|
|
50
|
+
text = text.gsub(/VIEW_SUBTITLE/, subtitle)
|
|
51
|
+
File.write(gname, text)
|
|
52
|
+
else
|
|
53
|
+
view_name = ask("\nFilename: ")
|
|
54
|
+
@blog.create_view(view_name) # call change_view??
|
|
55
|
+
vim_params = '-c ":set hlsearch" -c ":hi Search ctermfg=2 ctermbg=6" +/"\(VIEW_.*\|SITE.*\)"'
|
|
56
|
+
edit_file(@blog.view.dir/"themes/standard/global.lt3", vim: vim_params)
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
|
|
27
60
|
def get_started
|
|
28
61
|
if yesno("Do you want to qo a quick setup?")
|
|
29
|
-
puts "
|
|
62
|
+
puts " First choose your editor."
|
|
30
63
|
@blog.editor = pick_editor
|
|
31
64
|
File.write("#{@blog.root}/data/EDITOR", @blog.editor)
|
|
32
65
|
|
|
33
|
-
|
|
34
|
-
fname = "#{@blog.root}/data/universal.lt3"
|
|
35
|
-
vim_params = '-c ":set hlsearch" -c ":hi Search ctermfg=2 ctermbg=6" +/"\(AUTHOR.*\|SITE.*\)"'
|
|
36
|
-
edit_file(fname, vim: vim_params)
|
|
37
|
-
end
|
|
66
|
+
get_universal
|
|
38
67
|
# Now create a custom global.lt3
|
|
39
68
|
@blog._generate_global
|
|
40
|
-
sleep 1
|
|
41
|
-
noview = true
|
|
42
69
|
puts fx("\n Quick setup complete!", :bold)
|
|
43
70
|
if yesno("Create your first view now?")
|
|
44
|
-
|
|
45
|
-
noview = false
|
|
46
|
-
sleep 1
|
|
71
|
+
get_global
|
|
47
72
|
puts "\n View #{@blog.view} created!\n "
|
|
48
73
|
end
|
|
49
|
-
system("cp #@root/data/global.lt3 #@root/views/#{@blog.view}/themes/standard/")
|
|
50
74
|
end
|
|
51
75
|
|
|
52
|
-
sleep 0.5
|
|
53
|
-
|
|
54
76
|
puts
|
|
55
77
|
print fx(" For help", :bold)
|
|
56
78
|
puts " type h or help."
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
meh
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
.nopara
|
|
2
|
+
<svg width="98%" height="120"
|
|
3
|
+
viewBox="0 0 98% 100">
|
|
4
|
+
<defs>
|
|
5
|
+
<linearGradient id="grad1" x1="100%" y1="100%" x2="0%" y2="100%">
|
|
6
|
+
<stop offset="0%" style="stop-color:rgb(198,198,228);stop-opacity:1" />
|
|
7
|
+
<stop offset="100%" style="stop-color:rgb(30,30,50);stop-opacity:1" />
|
|
8
|
+
</linearGradient>
|
|
9
|
+
</defs>
|
|
10
|
+
<style>
|
|
11
|
+
.small { font: 18px sans-serif; fill: #98baff }
|
|
12
|
+
.heavy { font: bold 52px sans-serif; fill: #76a9ff }
|
|
13
|
+
</style>
|
|
14
|
+
|
|
15
|
+
<rect x="20" y="20" rx="15" ry="15" width="98%" height="100" fill="url(#grad1)"/>
|
|
16
|
+
|
|
17
|
+
<text x="45" y="70" class=heavy>$blog</text>
|
|
18
|
+
<text x="45" y="98" class=small>$blog.desc</text>
|
|
19
|
+
</svg>
|
data/lib/liveblog.rb
CHANGED
|
@@ -91,7 +91,7 @@ end
|
|
|
91
91
|
def banner
|
|
92
92
|
count = 0
|
|
93
93
|
span = 1
|
|
94
|
-
|
|
94
|
+
bg = "white" # outside loop
|
|
95
95
|
wide = nil
|
|
96
96
|
high = 250
|
|
97
97
|
str2 = ""
|
|
@@ -103,12 +103,9 @@ def banner
|
|
|
103
103
|
tag, *data = line.split
|
|
104
104
|
data ||= []
|
|
105
105
|
case tag
|
|
106
|
-
when "width"
|
|
107
|
-
|
|
108
|
-
when "
|
|
109
|
-
high = data[0]
|
|
110
|
-
when "bgcolor"
|
|
111
|
-
@bg = data[0] || "white"
|
|
106
|
+
when "width"; wide = data[0]
|
|
107
|
+
when "height"; high = data[0]
|
|
108
|
+
when "bgcolor"; bg = data[0] || "white"
|
|
112
109
|
when "image"
|
|
113
110
|
image = data[0] || "banner.jpg"
|
|
114
111
|
image = "banner"/image
|
|
@@ -122,31 +119,39 @@ def banner
|
|
|
122
119
|
when "text"
|
|
123
120
|
data[0] ||= "top.html"
|
|
124
121
|
file = "banner"/data[0]
|
|
122
|
+
if ! File.exist?(file)
|
|
123
|
+
src = file.sub(/html$/, "lt3")
|
|
124
|
+
if File.exist?(src)
|
|
125
|
+
preprocess src: src, dst: file, vars: Livetext::Vars
|
|
126
|
+
else
|
|
127
|
+
raise "Neither #{file} nor #{src} found"
|
|
128
|
+
end
|
|
129
|
+
end
|
|
125
130
|
str2 << "<td colspan=#{span}>" + File.read(file) + "</td>" + "\n"
|
|
126
131
|
when "navbar"
|
|
127
132
|
dir = @blog.root/:views/@blog.view/"themes/standard/banner/" + "\n"
|
|
128
133
|
_make_navbar # horiz is default
|
|
129
134
|
file = "banner/navbar.html"
|
|
130
135
|
navbar = File.read(file)
|
|
131
|
-
# str2 << "<td colspan=#{span}><div style='text-align: center'>#{stuff}</div></td>" + "\n"
|
|
132
136
|
when "vnavbar"
|
|
133
137
|
dir = @blog.root/:views/@blog.view/"themes/standard/banner/"
|
|
134
138
|
_make_navbar(:vert)
|
|
135
139
|
file = "banner/vnavbar.html"
|
|
136
140
|
navbar = File.read(file)
|
|
137
|
-
# str2 << "<td colspan=#{span}>" + File.read(file) + "</td>" + "\n"
|
|
138
141
|
when "break"
|
|
139
|
-
|
|
142
|
+
# span = count - 1
|
|
140
143
|
str2 << " </tr>\n <tr>" + "\n"
|
|
141
144
|
else
|
|
142
145
|
str2 << " '#{tag}' isn't known" + "\n"
|
|
143
146
|
end
|
|
144
147
|
end
|
|
145
|
-
_out
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
148
|
+
_out <<~HTML
|
|
149
|
+
<table width=100% bgcolor=#{bg}>
|
|
150
|
+
<tr>
|
|
151
|
+
#{str2}
|
|
152
|
+
</tr>
|
|
153
|
+
</table>
|
|
154
|
+
HTML
|
|
150
155
|
_out navbar if navbar
|
|
151
156
|
rescue => err
|
|
152
157
|
STDERR.puts "err = #{err}"
|
|
@@ -154,32 +159,10 @@ rescue => err
|
|
|
154
159
|
gets
|
|
155
160
|
end
|
|
156
161
|
|
|
157
|
-
def _parse_colon_args(args, hash) # really belongs in livetext
|
|
158
|
-
h2 = hash.dup
|
|
159
|
-
e = args.each
|
|
160
|
-
loop do
|
|
161
|
-
arg = e.next.chop.to_sym
|
|
162
|
-
raise "_parse_args: #{arg} is unknown" unless hash.keys.include?(arg)
|
|
163
|
-
h2[arg] = e.next
|
|
164
|
-
end
|
|
165
|
-
h2 = h2.reject {|k,v| v.nil? }
|
|
166
|
-
h2.each_pair {|k, v| raise "#{k} has no value" if v.empty? }
|
|
167
|
-
h2
|
|
168
|
-
end
|
|
169
|
-
|
|
170
|
-
def _get_arg(name, args) # really belongs in livetext
|
|
171
|
-
raise "(#{name}) Expected an array" unless args.is_a? Array
|
|
172
|
-
raise "(#{name}) Expected an arg" if args.empty?
|
|
173
|
-
raise "(#{name}) Too many args: #{args.inspect}" if args.size > 1
|
|
174
|
-
val = args[0]
|
|
175
|
-
raise "Expected an argument '#{name}'" if val.nil?
|
|
176
|
-
val
|
|
177
|
-
end
|
|
178
|
-
|
|
179
162
|
def _svg_title(*args)
|
|
180
|
-
width =
|
|
181
|
-
height =
|
|
182
|
-
bgcolor = "
|
|
163
|
+
width = "95%"
|
|
164
|
+
height = 90
|
|
165
|
+
bgcolor = "black"
|
|
183
166
|
style = nil
|
|
184
167
|
size = ""
|
|
185
168
|
font = "sans-serif"
|
|
@@ -194,103 +177,43 @@ def _svg_title(*args)
|
|
|
194
177
|
align2 = "center"
|
|
195
178
|
|
|
196
179
|
e = args.each
|
|
197
|
-
hash = {}
|
|
180
|
+
hash = {} # TODO get rid of hash??
|
|
181
|
+
|
|
182
|
+
valid = %w[width height bgcolor style size font color xy
|
|
183
|
+
align style2 size2 font2 color2 xy2 align2]
|
|
184
|
+
os = OpenStruct.new
|
|
198
185
|
loop do
|
|
199
186
|
arg = e.next
|
|
200
187
|
arg = arg.chop
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
when "height"; height = e.next
|
|
204
|
-
when "bgcolor"; bgcolor = e.next
|
|
205
|
-
when "style"; style = e.next
|
|
206
|
-
when "size"; size = e.next
|
|
207
|
-
when "font"; font = e.next
|
|
208
|
-
when "color"; color = e.next
|
|
209
|
-
when "xy"; xy = e.next
|
|
210
|
-
when "align"; align = e.next
|
|
211
|
-
when "style2"; style2 = e.next
|
|
212
|
-
when "size2"; size2 = e.next
|
|
213
|
-
when "font2"; font2 = e.next
|
|
214
|
-
when "color2"; color2 = e.next
|
|
215
|
-
when "xy2"; xy2 = e.next
|
|
216
|
-
when "align2"; align2 = e.next
|
|
217
|
-
end
|
|
188
|
+
raise "Don't know '#{arg}'" unless valid.include?(arg)
|
|
189
|
+
os.send(arg+"=", e.next)
|
|
218
190
|
end
|
|
219
191
|
x, y = xy.split(",")
|
|
220
192
|
x2, y2 = xy2.split(",")
|
|
221
|
-
|
|
222
|
-
hash[
|
|
223
|
-
hash["x2"] = x2
|
|
224
|
-
hash["y2"] = y2
|
|
225
|
-
hash["width"] = width
|
|
226
|
-
hash["height"] = height
|
|
227
|
-
hash["bgcolor"] = bgcolor
|
|
228
|
-
hash["style"] = style
|
|
229
|
-
hash["size"] = size
|
|
230
|
-
hash["font"] = font
|
|
231
|
-
hash["color"] = color
|
|
232
|
-
hash["xy"] = xy
|
|
233
|
-
hash["align"] = align
|
|
234
|
-
hash["style2"] = style2
|
|
235
|
-
hash["size2"] = size2
|
|
236
|
-
hash["font2"] = font2
|
|
237
|
-
hash["color2"] = color2
|
|
238
|
-
hash["align2"] = align2
|
|
193
|
+
names = %w[x y x2 y2] + valid
|
|
194
|
+
names.each {|name| hash[name] = os.send(name) }
|
|
239
195
|
result = <<~HTML
|
|
240
196
|
<svg width="#{width}" height="#{height}"
|
|
241
197
|
viewBox="0 0 #{width} #{height}">
|
|
198
|
+
<defs>
|
|
199
|
+
<linearGradient id="grad1" x1="100%" y1="100%" x2="0%" y2="100%">
|
|
200
|
+
<stop offset="0%" style="stop-color:rgb(198,198,228);stop-opacity:1" />
|
|
201
|
+
<stop offset="100%" style="stop-color:rgb(30,30,50);stop-opacity:1" />
|
|
202
|
+
</linearGradient>
|
|
203
|
+
</defs>
|
|
242
204
|
<style>
|
|
243
205
|
.title { font: #{style} #{size} #{font}; fill: #{color} }
|
|
244
206
|
.subtitle { font: #{style2} #{size2} #{font2}; fill: #{color2} }
|
|
245
207
|
</style>
|
|
246
|
-
<rect x="10" y="10" rx="10" ry="10" width="#{width
|
|
208
|
+
<rect x="10" y="10" rx="10" ry="10" width="#{width}" height="#{height}" fill="url(#grad1)"/>
|
|
247
209
|
<text text-anchor="#{align}" x="#{x}" y="#{y}" class="title">#{Livetext::Vars[:blog]} </text>
|
|
248
210
|
<text text-anchor="#{align2}" x="#{x2}" y="#{y2}" class="subtitle">#{Livetext::Vars["blog.desc"]} </text>
|
|
249
|
-
</svg>
|
|
211
|
+
</svg>
|
|
212
|
+
<!-- ^ how does syntax highlighting get messed up? </svg> -->
|
|
250
213
|
HTML
|
|
251
214
|
[result, hash]
|
|
252
215
|
end
|
|
253
216
|
|
|
254
|
-
def svg_title_SOON
|
|
255
|
-
tstyle = tsize = tfont = tcolor = txy = talign = nil
|
|
256
|
-
t2style = t2size = t2font = t2color = t2xy = t2align = nil
|
|
257
|
-
wide, high, hue = 450, 150, "white"
|
|
258
|
-
_body do |line|
|
|
259
|
-
count += 1
|
|
260
|
-
tag, *data = line.split
|
|
261
|
-
data ||= []
|
|
262
|
-
title_params = {style: nil, size: "", font: "sans-serif", color: "white",
|
|
263
|
-
xy: "5,5", align: "left"}
|
|
264
|
-
case tag
|
|
265
|
-
when "title";
|
|
266
|
-
hash = _parse_colon_args(data, title_params)
|
|
267
|
-
tstyle, tsize, tfont, tcolor, txy, talign =
|
|
268
|
-
hash.values_at(:tstyle, :tsize, :tfont, :tcolor, :txy, :talign)
|
|
269
|
-
tx, ty = txy.split(",")
|
|
270
|
-
when "title2";
|
|
271
|
-
hash = _parse_colon_args(data, title_params)
|
|
272
|
-
t2style, t2size, t2font, t2color, t2xy, t2align =
|
|
273
|
-
hash.values_at(:t2style, :t2size, :t2font, :t2color, :t2xy, :t2align)
|
|
274
|
-
t2x, t2y = t2xy.split(",")
|
|
275
|
-
when "width"; wide = _get_arg(:width, data)
|
|
276
|
-
when "height"; high = _get_arg(:height, data)
|
|
277
|
-
when "bgcolor"; hue = _get_arg(:bgcolor, data)
|
|
278
|
-
end
|
|
279
|
-
end
|
|
280
|
-
<<~HTML
|
|
281
|
-
<svg width="#{wide}" height="#{high}"
|
|
282
|
-
viewBox="0 0 #{wide} #{high}">
|
|
283
|
-
<style>
|
|
284
|
-
.title { font: #{tstyle} #{tsize} #{tfont}; fill: #{tcolor} }
|
|
285
|
-
.subtitle { font: #{t2style} #{t2size} #{t2font}; fill: #{t2color} }
|
|
286
|
-
</style>
|
|
287
|
-
<rect x="0" y="0" rx="10" ry="10" width="#{wide}" height="#{height}" fill="#{bgcolor}"/>
|
|
288
|
-
<text text-anchor="#{talign}" x="#{tx}" y="#{tx}" class="title">$blog </text>
|
|
289
|
-
<text text-anchor="#{t2align}" x="#{t2x}" y="#{t2y}" class="subtitle">$blog.desc </text>
|
|
290
|
-
</svg>
|
|
291
|
-
HTML
|
|
292
|
-
end
|
|
293
|
-
|
|
294
217
|
def quote
|
|
295
218
|
_passthru "<blockquote>"
|
|
296
219
|
_passthru _body.join(" ")
|
|
@@ -753,7 +676,6 @@ def _make_navbar(orient = :horiz)
|
|
|
753
676
|
list1, list2 = '<l class="navbar-nav mr-auto">', "</ul>"
|
|
754
677
|
end
|
|
755
678
|
|
|
756
|
-
# <!-- FIXME weird bug here!!! -->
|
|
757
679
|
start = <<-HTML
|
|
758
680
|
<table><tr><td>
|
|
759
681
|
<nav class="navbar #{extra} navbar-light bg-light">
|
data/lib/processing.rb
CHANGED
|
@@ -22,7 +22,7 @@ end
|
|
|
22
22
|
|
|
23
23
|
def preprocess(cwd: Dir.pwd, src:,
|
|
24
24
|
dst: (strip = true; File.basename(src).sub(/.lt3$/,"")),
|
|
25
|
-
deps: [], copy: nil, debug: false, force: false)
|
|
25
|
+
deps: [], copy: nil, debug: false, force: false, vars: nil)
|
|
26
26
|
src += LEXT unless src.end_with?(LEXT)
|
|
27
27
|
dst += ".html" unless (dst.end_with?(".html") || strip)
|
|
28
28
|
sp = " "*12
|
|
@@ -38,7 +38,7 @@ def preprocess(cwd: Dir.pwd, src:,
|
|
|
38
38
|
stale = stale?(src, dst, deps, force)
|
|
39
39
|
if stale
|
|
40
40
|
live = Livetext.new
|
|
41
|
-
out = live.xform_file(src)
|
|
41
|
+
out = live.xform_file(src, vars: vars)
|
|
42
42
|
File.write(dst, out)
|
|
43
43
|
system!("cp #{dst} #{copy}") if copy
|
|
44
44
|
end
|
data/lib/repl.rb
CHANGED
|
@@ -39,27 +39,22 @@ module RuneBlog::REPL
|
|
|
39
39
|
end
|
|
40
40
|
|
|
41
41
|
def cmd_config(arg, testing = false)
|
|
42
|
-
|
|
43
|
-
"blog/generate.lt3 Generator for view (usu not edited)",
|
|
44
|
-
".... head.lt3 HEAD info for view",
|
|
45
|
-
".... banner.lt3 banner description",
|
|
46
|
-
".... index.lt3 User-edited detail for view",
|
|
47
|
-
".... post_entry.lt3 Generator for post entry in recent-posts",
|
|
48
|
-
"etc/blog.css.lt3 Global CSS",
|
|
49
|
-
"... externals.lt3 External JS/CSS (Bootstrap, etc.)",
|
|
50
|
-
"post/generate.lt3 Generator for a post",
|
|
51
|
-
".... head.lt3 HEAD info for post",
|
|
52
|
-
".... index.lt3 Content for post",
|
|
53
|
-
".... permalink.lt3 Generator for permalink"
|
|
54
|
-
|
|
55
|
-
name = ["global.lt3", "blog/generate.lt3", "blog/head.lt3", "blog/banner.lt3",
|
|
56
|
-
"blog/index.lt3", "blog/post_entry.lt3", "etc/blog.css.lt3",
|
|
57
|
-
"blog/externals.lt3", "post/generate.lt3", "post/head.lt3",
|
|
58
|
-
"post/index.lt3", "post/permalink.lt3"]
|
|
42
|
+
hash = {"global.lt3 Global configuration" => "global.lt3",
|
|
43
|
+
"blog/generate.lt3 Generator for view (usu not edited)" => "blog/generate.lt3",
|
|
44
|
+
".... head.lt3 HEAD info for view" => "blog/head.lt3",
|
|
45
|
+
".... banner.lt3 banner description" => "blog/banner.lt3",
|
|
46
|
+
".... index.lt3 User-edited detail for view" => "blog/index.lt3",
|
|
47
|
+
".... post_entry.lt3 Generator for post entry in recent-posts" => "blog/post_entry.lt3",
|
|
48
|
+
"etc/blog.css.lt3 Global CSS" => "etc/blog.css.lt3",
|
|
49
|
+
"... externals.lt3 External JS/CSS (Bootstrap, etc.)" => "/etc/externals.lt3",
|
|
50
|
+
"post/generate.lt3 Generator for a post" => "post/generate.lt3",
|
|
51
|
+
".... head.lt3 HEAD info for post" => "post/head.lt3",
|
|
52
|
+
".... index.lt3 Content for post" => "post/index.lt3",
|
|
53
|
+
".... permalink.lt3 Generator for permalink" => "post/permalink.lt3",
|
|
54
|
+
}
|
|
59
55
|
|
|
60
56
|
dir = @blog.view.dir/"themes/standard/"
|
|
61
|
-
num,
|
|
62
|
-
target = name[num]
|
|
57
|
+
num, target = STDSCR.menu(title: "Edit file:", items: hash)
|
|
63
58
|
edit_file(dir/target)
|
|
64
59
|
end
|
|
65
60
|
|
|
@@ -253,6 +248,7 @@ module RuneBlog::REPL
|
|
|
253
248
|
viewnames = @blog.views.map {|x| x.name }
|
|
254
249
|
n = viewnames.find_index(@blog.view.name)
|
|
255
250
|
name = @blog.view.name
|
|
251
|
+
# TODO: Add view description
|
|
256
252
|
k, name = STDSCR.menu(title: "Views", items: viewnames, curr: n) unless testing
|
|
257
253
|
return if name.nil?
|
|
258
254
|
@blog.view = name
|
|
@@ -276,6 +272,9 @@ module RuneBlog::REPL
|
|
|
276
272
|
puts
|
|
277
273
|
end
|
|
278
274
|
@blog.create_view(arg)
|
|
275
|
+
text = File.read("#{@blog.root}/data/global.lt3")
|
|
276
|
+
File.write("#{@blog.root}/views/#{@blog.view}/themes/standard/global.lt3",
|
|
277
|
+
text.gsub(/VIEW_NAME/, @blog.view.to_s))
|
|
279
278
|
vim_params = '-c ":set hlsearch" -c ":hi Search ctermfg=2 ctermbg=6" +/"\(VIEW_.*\|SITE.*\)"'
|
|
280
279
|
edit_file(@blog.view.dir/"themes/standard/global.lt3", vim: vim_params)
|
|
281
280
|
@blog.change_view(arg)
|
data/lib/runeblog.rb
CHANGED
|
@@ -376,15 +376,26 @@ class RuneBlog
|
|
|
376
376
|
<body>
|
|
377
377
|
HTML
|
|
378
378
|
posts = _sorted_posts
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
379
|
+
if posts.size > 0
|
|
380
|
+
wanted = [8, posts.size].min # estimate how many we want?
|
|
381
|
+
enum = posts.each
|
|
382
|
+
entries = []
|
|
383
|
+
wanted.times do
|
|
384
|
+
postid = File.basename(enum.next)
|
|
385
|
+
postid = postid.to_i
|
|
386
|
+
entry = index_entry(postid)
|
|
387
|
+
entries << entry
|
|
388
|
+
text << entry
|
|
389
|
+
end
|
|
390
|
+
else
|
|
391
|
+
text << <<-HTML
|
|
392
|
+
<svg width="95%" height="75%" viewBox="0 0 95% 95%">
|
|
393
|
+
<style> .huge { font: italic 90px sans-serif; fill: white } </style>
|
|
394
|
+
<rect x="0" y="0" rx="50" ry="50" width="95%" height="95%" fill="lightblue"/>
|
|
395
|
+
<text x="120" y="250" class=huge>No posts</text>
|
|
396
|
+
<text x="120" y="350" class=huge>here yet</text>
|
|
397
|
+
</svg>
|
|
398
|
+
HTML
|
|
388
399
|
end
|
|
389
400
|
text << "</body></html>"
|
|
390
401
|
File.write(@vdir/:remote/file, text)
|
data/lib/runeblog_version.rb
CHANGED
data/runeblog.gemspec
CHANGED
|
@@ -20,8 +20,8 @@ spec = Gem::Specification.new do |s|
|
|
|
20
20
|
s.authors = ["Hal Fulton"]
|
|
21
21
|
s.email = 'rubyhacker@gmail.com'
|
|
22
22
|
s.executables << "blog"
|
|
23
|
-
s.add_runtime_dependency 'livetext', '~> 0.8', '>= 0.8.
|
|
24
|
-
s.add_runtime_dependency 'rubytext', '~> 0.1', '>= 0.1.
|
|
23
|
+
s.add_runtime_dependency 'livetext', '~> 0.8', '>= 0.8.98'
|
|
24
|
+
s.add_runtime_dependency 'rubytext', '~> 0.1', '>= 0.1.19'
|
|
25
25
|
|
|
26
26
|
s.add_development_dependency 'minitest', '~> 5.10', '>= 5.10.0'
|
|
27
27
|
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: runeblog
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.2.
|
|
4
|
+
version: 0.2.88
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Hal Fulton
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2019-12-
|
|
11
|
+
date: 2019-12-18 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: livetext
|
|
@@ -19,7 +19,7 @@ dependencies:
|
|
|
19
19
|
version: '0.8'
|
|
20
20
|
- - ">="
|
|
21
21
|
- !ruby/object:Gem::Version
|
|
22
|
-
version: 0.8.
|
|
22
|
+
version: 0.8.98
|
|
23
23
|
type: :runtime
|
|
24
24
|
prerelease: false
|
|
25
25
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -29,7 +29,7 @@ dependencies:
|
|
|
29
29
|
version: '0.8'
|
|
30
30
|
- - ">="
|
|
31
31
|
- !ruby/object:Gem::Version
|
|
32
|
-
version: 0.8.
|
|
32
|
+
version: 0.8.98
|
|
33
33
|
- !ruby/object:Gem::Dependency
|
|
34
34
|
name: rubytext
|
|
35
35
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -39,7 +39,7 @@ dependencies:
|
|
|
39
39
|
version: '0.1'
|
|
40
40
|
- - ">="
|
|
41
41
|
- !ruby/object:Gem::Version
|
|
42
|
-
version: 0.1.
|
|
42
|
+
version: 0.1.19
|
|
43
43
|
type: :runtime
|
|
44
44
|
prerelease: false
|
|
45
45
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -49,7 +49,7 @@ dependencies:
|
|
|
49
49
|
version: '0.1'
|
|
50
50
|
- - ">="
|
|
51
51
|
- !ruby/object:Gem::Version
|
|
52
|
-
version: 0.1.
|
|
52
|
+
version: 0.1.19
|
|
53
53
|
- !ruby/object:Gem::Dependency
|
|
54
54
|
name: minitest
|
|
55
55
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -89,9 +89,9 @@ files:
|
|
|
89
89
|
- data/universal.lt3
|
|
90
90
|
- empty_view/assets/austin-pano.jpg
|
|
91
91
|
- empty_view/assets/sky2.jpg
|
|
92
|
+
- empty_view/posts/GIT_IS_DUMB
|
|
92
93
|
- empty_view/remote/assets/GIT_IS_DUMB
|
|
93
94
|
- empty_view/remote/banner/austin-pano.jpg
|
|
94
|
-
- empty_view/remote/banner/top.html
|
|
95
95
|
- empty_view/remote/etc/GIT_IS_DUMB
|
|
96
96
|
- empty_view/remote/permalink/GIT_IS_DUMB
|
|
97
97
|
- empty_view/remote/widgets/ad/GIT_IS_DUMB
|
|
@@ -104,7 +104,7 @@ files:
|
|
|
104
104
|
- empty_view/themes/standard/banner/contact.lt3
|
|
105
105
|
- empty_view/themes/standard/banner/faq.lt3
|
|
106
106
|
- empty_view/themes/standard/banner/list.data
|
|
107
|
-
- empty_view/themes/standard/banner/top.
|
|
107
|
+
- empty_view/themes/standard/banner/top.lt3
|
|
108
108
|
- empty_view/themes/standard/blog/banner.lt3
|
|
109
109
|
- empty_view/themes/standard/blog/generate.lt3
|
|
110
110
|
- empty_view/themes/standard/blog/head.lt3
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
<svg width="95%" height="55"
|
|
2
|
-
viewBox="0 0 95% 55">
|
|
3
|
-
<defs>
|
|
4
|
-
<linearGradient id="grad1" x1="100%" y1="100%" x2="0%" y2="100%">
|
|
5
|
-
<stop offset="0%" style="stop-color:rgb(198,198,228);stop-opacity:1" />
|
|
6
|
-
<stop offset="100%" style="stop-color:rgb(30,30,50);stop-opacity:1" />
|
|
7
|
-
</linearGradient>
|
|
8
|
-
</defs>
|
|
9
|
-
<style>
|
|
10
|
-
.small { font: 13px sans-serif; fill: #98baff }
|
|
11
|
-
.heavy { font: bold 35px sans-serif; fill: #76a9ff }
|
|
12
|
-
</style>
|
|
13
|
-
|
|
14
|
-
<rect x="0" y="0" rx="3" ry="3" width="95%" height="55" fill="url(#grad1)"/>
|
|
15
|
-
|
|
16
|
-
<text x="5" y="33" class=heavy>$blog</text>
|
|
17
|
-
<text x="5" y="48" class=small>$blog.desc</text>
|
|
18
|
-
</svg>
|