runeblog 0.2.83 → 0.2.88
Sign up to get free protection for your applications and to get access to all the features.
- 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>
|