runeblog 0.3.19 → 0.3.24
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 +80 -52
- data/data/global.lt3 +3 -3
- data/data/universal.lt3 +2 -0
- data/empty_view/data/GIT_IS_DUMB +0 -0
- data/empty_view/themes/standard/banner/top.lt3 +1 -1
- data/empty_view/themes/standard/blog/generate.lt3 +1 -1
- data/empty_view/themes/standard/etc/blog.css.lt3 +1 -1
- data/empty_view/themes/standard/etc/github.css +209 -0
- data/empty_view/themes/standard/post/generate.lt3 +8 -5
- data/empty_view/themes/standard/post/permalink.lt3 +1 -1
- data/lib/exceptions.rb +1 -1
- data/lib/helpers-blog.rb +6 -4
- data/lib/liveblog.rb +99 -20
- data/lib/lowlevel.rb +25 -8
- data/lib/menus.rb +5 -3
- data/lib/newpost.rb +82 -0
- data/lib/post.rb +3 -2
- data/lib/processing.rb +29 -1
- data/lib/publish.rb +3 -1
- data/lib/repl.rb +72 -18
- data/lib/runeblog.rb +86 -46
- data/lib/runeblog_version.rb +1 -1
- data/lib/view.rb +22 -3
- data/runeblog.gemspec +4 -2
- metadata +32 -9
@@ -8,12 +8,14 @@
|
|
8
8
|
<html>
|
9
9
|
<!-- Generated from $File on $$date; editing not recommended. -->
|
10
10
|
|
11
|
-
.
|
11
|
+
.include $ViewDir/data/global.lt3
|
12
|
+
|
13
|
+
.variables! post metadata.txt
|
12
14
|
|
13
15
|
. FIXME
|
14
16
|
.head
|
15
|
-
og:title $title
|
16
|
-
description $teaser
|
17
|
+
og:title $post.title
|
18
|
+
description $post.teaser
|
17
19
|
style blog.css
|
18
20
|
.end
|
19
21
|
|
@@ -23,7 +25,8 @@ style blog.css
|
|
23
25
|
<div class="recent-content">
|
24
26
|
$.post_toolbar
|
25
27
|
<table border=0 width=100%><tr>
|
26
|
-
<td align=left valign=bottom><h2 class="recent-title">$title</h2></td>
|
28
|
+
<td align=left valign=bottom><h2 class="recent-title">$post.title</h2></td>
|
29
|
+
. FIXME - longdate is passed in from outside
|
27
30
|
<td align=right valign=top><font size=-5><br></font>$longdate</td>
|
28
31
|
</tr></table><hr>
|
29
32
|
$.copy guts.html
|
@@ -31,6 +34,6 @@ style blog.css
|
|
31
34
|
</section>
|
32
35
|
|
33
36
|
<br>
|
34
|
-
.post_trailer
|
37
|
+
.post_trailer $post.num
|
35
38
|
</body>
|
36
39
|
</html>
|
data/lib/exceptions.rb
CHANGED
@@ -12,7 +12,7 @@ end
|
|
12
12
|
|
13
13
|
make_exception(:NotImplemented, "Feature not yet implemented")
|
14
14
|
make_exception(:CantOpen, "Can't open '%1'")
|
15
|
-
make_exception(:CantDelete, "Can't
|
15
|
+
make_exception(:CantDelete, "Can't delete '%1'")
|
16
16
|
make_exception(:InternalError, "Glitch: %1 got arg '%2'")
|
17
17
|
make_exception(:CantCopy, "Can't copy %1 to %2")
|
18
18
|
|
data/lib/helpers-blog.rb
CHANGED
@@ -24,6 +24,7 @@ module RuneBlog::Helpers
|
|
24
24
|
dir = root/:views/view/:settings
|
25
25
|
end
|
26
26
|
file = dir/"features.txt"
|
27
|
+
# puts "-- in #{Dir.pwd} trying to read #{file}"
|
27
28
|
pairs = read_pairs(file)
|
28
29
|
enabled = {}
|
29
30
|
pairs.each {|k,v| enabled[k] = (v == "1") }
|
@@ -54,11 +55,12 @@ module RuneBlog::Helpers
|
|
54
55
|
puts
|
55
56
|
end
|
56
57
|
|
57
|
-
def get_repo_config
|
58
|
+
def get_repo_config(root = ".blogs")
|
58
59
|
log!(enter: __method__, level: 3)
|
59
|
-
@editor = File.read("
|
60
|
-
@current_view = File.read("
|
61
|
-
@root = File.read("
|
60
|
+
@editor = File.read("#{root}/data/EDITOR").chomp
|
61
|
+
@current_view = File.read("#{root}/data/VIEW").chomp
|
62
|
+
@root = File.read("#{root}/data/ROOT").chomp
|
63
|
+
# Huh? Why not just @root = root? Hal.wtf?
|
62
64
|
rescue => err
|
63
65
|
puts "Can't read config: #{err}"
|
64
66
|
puts err.backtrace.join("\n")
|
data/lib/liveblog.rb
CHANGED
@@ -12,6 +12,7 @@ require 'processing'
|
|
12
12
|
|
13
13
|
|
14
14
|
def init_liveblog # FIXME - a lot of this logic sucks
|
15
|
+
log!(enter: __method__)
|
15
16
|
dir = Dir.pwd.sub(/\.blogs.*/, "")
|
16
17
|
@blog = nil
|
17
18
|
Dir.chdir(dir) { @blog = RuneBlog.new }
|
@@ -19,6 +20,8 @@ def init_liveblog # FIXME - a lot of this logic sucks
|
|
19
20
|
@view = @blog.view
|
20
21
|
@view_name = @blog.view.name unless @view.nil?
|
21
22
|
@vdir = @blog.view.dir rescue "NONAME"
|
23
|
+
setvar("View", @view_name)
|
24
|
+
setvar("ViewDir", @blog.root/:views/@view_name)
|
22
25
|
@version = RuneBlog::VERSION
|
23
26
|
@theme = @vdir/:themes/:standard
|
24
27
|
|
@@ -33,9 +36,10 @@ def init_liveblog # FIXME - a lot of this logic sucks
|
|
33
36
|
</a>
|
34
37
|
HTML
|
35
38
|
end
|
39
|
+
log!(str: "End of init_liveblog")
|
36
40
|
rescue => err
|
37
41
|
STDERR.puts "err = #{err}"
|
38
|
-
STDERR.puts err.backtrace.join("\n")
|
42
|
+
STDERR.puts err.backtrace.join("\n") if err.respond_to?(:backtrace)
|
39
43
|
end
|
40
44
|
|
41
45
|
##################
|
@@ -43,6 +47,7 @@ end
|
|
43
47
|
##################
|
44
48
|
|
45
49
|
def dropcap
|
50
|
+
log!(enter: __method__)
|
46
51
|
# Bad form: adds another HEAD
|
47
52
|
text = _data
|
48
53
|
_out " "
|
@@ -53,12 +58,15 @@ def dropcap
|
|
53
58
|
end
|
54
59
|
|
55
60
|
def post
|
61
|
+
log!(enter: __method__)
|
56
62
|
@meta = OpenStruct.new
|
57
63
|
@meta.num = _args[0]
|
64
|
+
setvar("post.num", @meta.num.to_i)
|
58
65
|
_out " <!-- Post number #{@meta.num} -->\n "
|
59
66
|
end
|
60
67
|
|
61
68
|
def _got_python?
|
69
|
+
log!(enter: __method__)
|
62
70
|
# Dumb - fix later - check up front as needed
|
63
71
|
# Should also check for praw lib
|
64
72
|
str = `which python3`
|
@@ -66,6 +74,7 @@ end
|
|
66
74
|
end
|
67
75
|
|
68
76
|
def _reddit_post_url(vdir, date, title, url)
|
77
|
+
log!(enter: __method__)
|
69
78
|
_got_python?
|
70
79
|
tmpfile = "/tmp/reddit-post-url.txt"
|
71
80
|
File.open(tmpfile, "w") do |tmp|
|
@@ -79,6 +88,7 @@ end
|
|
79
88
|
end
|
80
89
|
|
81
90
|
def post_toolbar
|
91
|
+
log!(enter: __method__)
|
82
92
|
back_icon = %[<img src="assets/back-icon.png" width=24 height=24 alt="Go back"></img>]
|
83
93
|
back = %[<a style="text-decoration: none" href="javascript:history.go(-1)">#{back_icon}</a>]
|
84
94
|
_out <<~HTML
|
@@ -87,21 +97,36 @@ def post_toolbar
|
|
87
97
|
end
|
88
98
|
|
89
99
|
def post_trailer
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
100
|
+
log!(enter: __method__)
|
101
|
+
# Not called from *inside* a post, therefore no @meta --
|
102
|
+
# can/must call read_metadata
|
103
|
+
num = _var("post.num").to_i
|
104
|
+
log! str: "post_trailer: num = #{num}"
|
105
|
+
vp = _post_lookup(num)
|
106
|
+
log! str: "post_trailer: lookup = #{vp.num} #{vp.title}"
|
107
|
+
dir = @blog.root/:posts/vp.nslug
|
108
|
+
log! str: " -- dir = #{dir}"
|
109
|
+
meta = Dir.chdir(dir) { @blog.read_metadata }
|
110
|
+
nslug = @blog.make_slug(meta)
|
111
|
+
aslug = nslug[5..-1]
|
112
|
+
proto = _var("publish.proto")
|
113
|
+
server = _var("publish.server")
|
114
|
+
path = _var("publish.path")
|
115
|
+
perma = "#{proto}://#{server}/#{path}/#{aslug}.html"
|
116
|
+
tags = meta.tags
|
94
117
|
taglist = tags.empty? ? "" : "Tags: #{tags}"
|
95
118
|
|
96
119
|
reddit_txt = ""
|
97
120
|
if @reddit_enabled
|
98
121
|
vdir = @blog.root/:views/@blog.view
|
99
|
-
|
100
|
-
date = _var("post.date")
|
122
|
+
date = meta.date
|
101
123
|
rid_file = vdir/:posts/nslug/"reddit.id"
|
102
|
-
|
103
|
-
|
104
|
-
|
124
|
+
if File.exist?(rid_file)
|
125
|
+
STDERR.puts " reading #{rid_file}"
|
126
|
+
rid = File.read(rid_file).chomp
|
127
|
+
else
|
128
|
+
STDERR.puts " creating #{rid_file}"
|
129
|
+
title = meta.title
|
105
130
|
rid = _reddit_post_url(vdir, date, title, perma)
|
106
131
|
dump(rid, rid_file)
|
107
132
|
end
|
@@ -112,6 +137,7 @@ def post_trailer
|
|
112
137
|
HTML
|
113
138
|
# damned syntax highlighting </>
|
114
139
|
end
|
140
|
+
# STDERR.print "Pausing... "; getch
|
115
141
|
_out <<~HTML
|
116
142
|
#{reddit_txt}
|
117
143
|
<hr>
|
@@ -123,6 +149,7 @@ def post_trailer
|
|
123
149
|
end
|
124
150
|
|
125
151
|
def faq
|
152
|
+
log!(enter: __method__)
|
126
153
|
@faq_count ||= 0
|
127
154
|
_out "<br>" if @faq_count == 0
|
128
155
|
@faq_count += 1
|
@@ -137,15 +164,18 @@ def faq
|
|
137
164
|
end
|
138
165
|
|
139
166
|
def backlink
|
167
|
+
log!(enter: __method__)
|
140
168
|
_out %[<br><a href="javascript:history.go(-1)">[Back]</a>]
|
141
169
|
end
|
142
170
|
|
143
171
|
def code
|
172
|
+
log!(enter: __method__)
|
144
173
|
lines = _body # _text
|
145
174
|
_out "<font size=+1><pre>\n#{lines}\n</pre></font>"
|
146
175
|
end
|
147
176
|
|
148
177
|
def _read_navbar_data
|
178
|
+
log!(enter: __method__)
|
149
179
|
vdir = @blog.root/:views/@blog.view
|
150
180
|
dir = vdir/"themes/standard/banner/navbar/"
|
151
181
|
datafile = dir/"list.data"
|
@@ -153,6 +183,7 @@ def _read_navbar_data
|
|
153
183
|
end
|
154
184
|
|
155
185
|
def banner
|
186
|
+
log!(enter: __method__)
|
156
187
|
count = 0
|
157
188
|
bg = "white" # outside loop
|
158
189
|
wide = nil
|
@@ -186,7 +217,7 @@ def banner
|
|
186
217
|
if ! File.exist?(file)
|
187
218
|
src = file.sub(/html$/, "lt3")
|
188
219
|
if File.exist?(src)
|
189
|
-
preprocess src: src, dst: file, call: ".nopara"
|
220
|
+
preprocess src: src, dst: file, call: ".nopara", vars: @blog.view.globals
|
190
221
|
else
|
191
222
|
raise FoundNeither(file, src)
|
192
223
|
end
|
@@ -212,11 +243,11 @@ def banner
|
|
212
243
|
_out navbar if navbar
|
213
244
|
rescue => err
|
214
245
|
STDERR.puts "err = #{err}"
|
215
|
-
STDERR.puts err.backtrace.join("\n")
|
216
|
-
gets
|
246
|
+
STDERR.puts err.backtrace.join("\n") if err.respond_to?(:backtrace)
|
217
247
|
end
|
218
248
|
|
219
249
|
def _svg_title(*args)
|
250
|
+
log!(enter: __method__)
|
220
251
|
width = "95%"
|
221
252
|
height = 90
|
222
253
|
bgcolor = "black"
|
@@ -272,6 +303,7 @@ def _svg_title(*args)
|
|
272
303
|
end
|
273
304
|
|
274
305
|
def quote
|
306
|
+
log!(enter: __method__)
|
275
307
|
_passthru "<blockquote>"
|
276
308
|
_passthru _body.join(" ")
|
277
309
|
_passthru "</blockquote>"
|
@@ -279,9 +311,11 @@ def quote
|
|
279
311
|
end
|
280
312
|
|
281
313
|
def categories # does nothing right now
|
314
|
+
log!(enter: __method__)
|
282
315
|
end
|
283
316
|
|
284
317
|
def style
|
318
|
+
log!(enter: __method__)
|
285
319
|
fname = _args[0]
|
286
320
|
_passthru %[<link rel="stylesheet" href="???/etc/#{fname}')">]
|
287
321
|
end
|
@@ -298,6 +332,7 @@ def h6; _passthru "<h6>#{@_data}</h6>"; end
|
|
298
332
|
def hr; _passthru "<hr>"; end
|
299
333
|
|
300
334
|
def nlist
|
335
|
+
log!(enter: __method__)
|
301
336
|
_out "<ol>"
|
302
337
|
_body {|line| _out "<li>#{line}</li>" }
|
303
338
|
_out "</ol>"
|
@@ -305,6 +340,7 @@ def nlist
|
|
305
340
|
end
|
306
341
|
|
307
342
|
def list
|
343
|
+
log!(enter: __method__)
|
308
344
|
_out "<ul>"
|
309
345
|
_body {|line| _out "<li>#{line}</li>" }
|
310
346
|
_out "</ul>"
|
@@ -312,6 +348,7 @@ def list
|
|
312
348
|
end
|
313
349
|
|
314
350
|
def list!
|
351
|
+
log!(enter: __method__)
|
315
352
|
_out "<ul>"
|
316
353
|
lines = _body.each
|
317
354
|
loop do
|
@@ -330,6 +367,7 @@ end
|
|
330
367
|
### inset
|
331
368
|
|
332
369
|
def inset
|
370
|
+
log!(enter: __method__)
|
333
371
|
lines = _body
|
334
372
|
box = ""
|
335
373
|
output = []
|
@@ -361,6 +399,7 @@ def inset
|
|
361
399
|
end
|
362
400
|
|
363
401
|
def title
|
402
|
+
log!(enter: __method__)
|
364
403
|
raise NoPostCall unless @meta
|
365
404
|
title = @_data.chomp
|
366
405
|
@meta.title = title
|
@@ -370,6 +409,7 @@ def title
|
|
370
409
|
end
|
371
410
|
|
372
411
|
def pubdate
|
412
|
+
log!(enter: __method__)
|
373
413
|
raise NoPostCall unless @meta
|
374
414
|
_debug "data = #@_data"
|
375
415
|
# Check for discrepancy?
|
@@ -382,6 +422,7 @@ def pubdate
|
|
382
422
|
end
|
383
423
|
|
384
424
|
def tags
|
425
|
+
log!(enter: __method__)
|
385
426
|
raise NoPostCall unless @meta
|
386
427
|
_debug "args = #{_args}"
|
387
428
|
@meta.tags = _args.dup || []
|
@@ -389,6 +430,7 @@ def tags
|
|
389
430
|
end
|
390
431
|
|
391
432
|
def views
|
433
|
+
log!(enter: __method__)
|
392
434
|
raise NoPostCall unless @meta
|
393
435
|
_debug "data = #{_args}"
|
394
436
|
@meta.views = _args.dup
|
@@ -396,6 +438,7 @@ def views
|
|
396
438
|
end
|
397
439
|
|
398
440
|
def pin
|
441
|
+
log!(enter: __method__)
|
399
442
|
raise NoPostCall unless @meta
|
400
443
|
_debug "data = #{_args}" # verify only valid views?
|
401
444
|
pinned = @_args
|
@@ -411,21 +454,22 @@ def pin
|
|
411
454
|
_optional_blank_line
|
412
455
|
rescue => err
|
413
456
|
STDERR.puts "err = #{err}"
|
414
|
-
STDERR.puts err.backtrace.join("\n")
|
415
|
-
gets
|
457
|
+
STDERR.puts err.backtrace.join("\n") if err.respond_to?(:backtrace)
|
416
458
|
end
|
417
459
|
|
418
460
|
def write_post
|
461
|
+
log!(enter: __method__)
|
419
462
|
raise NoPostCall unless @meta
|
420
463
|
@meta.views = @meta.views.join(" ") if @meta.views.is_a? Array
|
421
464
|
@meta.tags = @meta.tags.join(" ") if @meta.tags.is_a? Array
|
422
465
|
_write_metadata
|
423
466
|
rescue => err
|
424
467
|
puts "err = #{err}"
|
425
|
-
puts err.backtrace.join("\n")
|
468
|
+
puts err.backtrace.join("\n") if err.respond_to?(:backtrace)
|
426
469
|
end
|
427
470
|
|
428
471
|
def teaser
|
472
|
+
log!(enter: __method__)
|
429
473
|
raise NoPostCall unless @meta
|
430
474
|
text = _body.join("\n")
|
431
475
|
@meta.teaser = text
|
@@ -440,6 +484,7 @@ def teaser
|
|
440
484
|
end
|
441
485
|
|
442
486
|
def finalize
|
487
|
+
log!(str: "Now exiting livetext processing...")
|
443
488
|
return unless @meta
|
444
489
|
return @meta if @blog.nil?
|
445
490
|
|
@@ -451,6 +496,7 @@ def finalize
|
|
451
496
|
end
|
452
497
|
|
453
498
|
def head # Does NOT output <head> tags
|
499
|
+
log!(enter: __method__)
|
454
500
|
args = _args
|
455
501
|
args.each do |inc|
|
456
502
|
self.data = inc
|
@@ -506,6 +552,7 @@ end
|
|
506
552
|
########## newer stuff...
|
507
553
|
|
508
554
|
def meta
|
555
|
+
log!(enter: __method__)
|
509
556
|
args = _args
|
510
557
|
enum = args.each
|
511
558
|
str = "<meta"
|
@@ -525,6 +572,7 @@ def meta
|
|
525
572
|
end
|
526
573
|
|
527
574
|
def recent_posts # side-effect
|
575
|
+
log!(enter: __method__)
|
528
576
|
_out <<-HTML
|
529
577
|
<div class="col-lg-9 col-md-9 col-sm-9 col-xs-12">
|
530
578
|
<iframe id="main" style="width: 70vw; height: 100vh; position: relative;"
|
@@ -535,6 +583,7 @@ def recent_posts # side-effect
|
|
535
583
|
end
|
536
584
|
|
537
585
|
def _make_class_name(app)
|
586
|
+
log!(enter: __method__)
|
538
587
|
if app =~ /[-_]/
|
539
588
|
words = app.split(/[-_]/)
|
540
589
|
name = words.map(&:capitalize).join
|
@@ -545,6 +594,7 @@ def _make_class_name(app)
|
|
545
594
|
end
|
546
595
|
|
547
596
|
def _load_local(widget)
|
597
|
+
log!(enter: __method__)
|
548
598
|
Dir.chdir("../../widgets/#{widget}") do
|
549
599
|
rclass = _make_class_name(widget)
|
550
600
|
found = (require("./#{widget}") if File.exist?("#{widget}.rb"))
|
@@ -553,12 +603,13 @@ def _load_local(widget)
|
|
553
603
|
end
|
554
604
|
rescue => err
|
555
605
|
STDERR.puts err.to_s
|
556
|
-
STDERR.puts err.backtrace.join("\n")
|
606
|
+
STDERR.puts err.backtrace.join("\n") if err.respond_to?(:backtrace)
|
557
607
|
sleep 6; RubyText.stop
|
558
608
|
exit
|
559
609
|
end
|
560
610
|
|
561
611
|
def _handle_standard_widget(tag)
|
612
|
+
log!(enter: __method__)
|
562
613
|
wtag = "../../widgets"/tag
|
563
614
|
code = _load_local(tag)
|
564
615
|
if code
|
@@ -570,6 +621,7 @@ def _handle_standard_widget(tag)
|
|
570
621
|
end
|
571
622
|
|
572
623
|
def sidebar
|
624
|
+
log!(enter: __method__)
|
573
625
|
_debug "--- handling sidebar\r"
|
574
626
|
if _args.include? "off"
|
575
627
|
_body { } # iterate, do nothing
|
@@ -597,12 +649,13 @@ def sidebar
|
|
597
649
|
_out %[</div>]
|
598
650
|
rescue => err
|
599
651
|
puts "err = #{err}"
|
600
|
-
puts err.backtrace.join("\n")
|
652
|
+
puts err.backtrace.join("\n") if err.respond_to?(:backtrace)
|
601
653
|
sleep 6; RubyText.stop
|
602
654
|
exit
|
603
655
|
end
|
604
656
|
|
605
657
|
def stylesheet
|
658
|
+
log!(enter: __method__)
|
606
659
|
lines = _body
|
607
660
|
url = lines[0]
|
608
661
|
integ = lines[1]
|
@@ -611,6 +664,7 @@ def stylesheet
|
|
611
664
|
end
|
612
665
|
|
613
666
|
def script
|
667
|
+
log!(enter: __method__)
|
614
668
|
lines = _body
|
615
669
|
url = lines[0]
|
616
670
|
integ = lines[1]
|
@@ -660,6 +714,7 @@ end
|
|
660
714
|
|
661
715
|
|
662
716
|
def tag_cloud
|
717
|
+
log!(enter: __method__)
|
663
718
|
title = _data
|
664
719
|
title = "Tag Cloud" if title.empty?
|
665
720
|
open = <<-HTML
|
@@ -683,18 +738,22 @@ def tag_cloud
|
|
683
738
|
end
|
684
739
|
|
685
740
|
def vnavbar
|
741
|
+
log!(enter: __method__)
|
686
742
|
str = _make_navbar(:vert)
|
687
743
|
end
|
688
744
|
|
689
745
|
def hnavbar
|
746
|
+
log!(enter: __method__)
|
690
747
|
str = _make_navbar # horiz is default
|
691
748
|
end
|
692
749
|
|
693
750
|
def navbar
|
751
|
+
log!(enter: __method__)
|
694
752
|
str = _make_navbar # horiz is default
|
695
753
|
end
|
696
754
|
|
697
755
|
def _make_navbar(orient = :horiz)
|
756
|
+
log!(enter: __method__)
|
698
757
|
vdir = @root/:views/@blog.view
|
699
758
|
title = _var("view.title")
|
700
759
|
|
@@ -735,7 +794,7 @@ def _make_navbar(orient = :horiz)
|
|
735
794
|
else
|
736
795
|
dir = @blog.root/:views/@blog.view/"themes/standard/banner/navbar"
|
737
796
|
dest = vdir/"remote/banner/navbar"/basename+".html"
|
738
|
-
preprocess cwd: dir, src: basename, dst: dest, call: ".nopara" # , debug: true
|
797
|
+
preprocess cwd: dir, src: basename, dst: dest, call: ".nopara", vars: @blog.view.globals # , debug: true
|
739
798
|
output.puts %[#{li1} <a class="nav-link" #{href_main}>#{cdata}</a> #{li2}]
|
740
799
|
end
|
741
800
|
end
|
@@ -750,6 +809,7 @@ end
|
|
750
809
|
##################
|
751
810
|
|
752
811
|
def _html_body(file, css = nil)
|
812
|
+
log!(enter: __method__)
|
753
813
|
file.puts "<html>"
|
754
814
|
if css
|
755
815
|
file.puts " <head>"
|
@@ -762,10 +822,12 @@ def _html_body(file, css = nil)
|
|
762
822
|
end
|
763
823
|
|
764
824
|
def _errout(*args)
|
825
|
+
log!(enter: __method__)
|
765
826
|
::STDERR.puts *args
|
766
827
|
end
|
767
828
|
|
768
829
|
def _passthru(line)
|
830
|
+
log!(enter: __method__)
|
769
831
|
return if line.nil?
|
770
832
|
line = _format(line)
|
771
833
|
_out line + "\n"
|
@@ -773,6 +835,7 @@ def _passthru(line)
|
|
773
835
|
end
|
774
836
|
|
775
837
|
def _passthru_noline(line)
|
838
|
+
log!(enter: __method__)
|
776
839
|
return if line.nil?
|
777
840
|
line = _format(line)
|
778
841
|
_out line
|
@@ -780,6 +843,7 @@ def _passthru_noline(line)
|
|
780
843
|
end
|
781
844
|
|
782
845
|
def _write_metadata
|
846
|
+
log!(enter: __method__)
|
783
847
|
File.write("teaser.txt", @meta.teaser)
|
784
848
|
fields = [:num, :title, :date, :pubdate, :views, :tags, :pinned]
|
785
849
|
fname = "metadata.txt"
|
@@ -789,20 +853,32 @@ def _write_metadata
|
|
789
853
|
end
|
790
854
|
|
791
855
|
def _post_lookup(postid) # side-effect
|
856
|
+
log!(enter: __method__)
|
792
857
|
# .. = templates, ../.. = views/thisview
|
793
858
|
slug = title = date = teaser_text = nil
|
794
859
|
|
860
|
+
view = @blog.view
|
861
|
+
vdir = view.dir rescue "NONAME"
|
862
|
+
setvar("View", view.name)
|
863
|
+
setvar("ViewDir", @blog.root/:views/view.name)
|
864
|
+
tmp = File.new("/tmp/PL-#{Time.now.to_i}.txt", "w")
|
865
|
+
tmp.puts "_post_lookup: blog.view = #{@blog.view.inspect}"
|
866
|
+
tmp.puts "_post_lookup: vdir = #{vdir}"
|
795
867
|
dir_posts = @vdir/:posts
|
796
868
|
posts = Dir.entries(dir_posts).grep(/^\d\d\d\d/).map {|x| dir_posts/x }
|
797
869
|
posts.select! {|x| File.directory?(x) }
|
798
870
|
|
871
|
+
tmp.puts "_post_lookup: postid = #{postid}"
|
872
|
+
tmp.puts "_post_lookup: posts = \n#{posts.inspect}"
|
873
|
+
tmp.close
|
799
874
|
posts = posts.select {|x| File.basename(x).to_i == postid }
|
800
|
-
postdir = exactly_one(posts)
|
875
|
+
postdir = exactly_one(posts, posts.inspect)
|
801
876
|
vp = RuneBlog::ViewPost.new(@blog.view, postdir)
|
802
877
|
vp
|
803
878
|
end
|
804
879
|
|
805
880
|
def _card_generic(card_title:, middle:, extra: "")
|
881
|
+
log!(enter: __method__)
|
806
882
|
front = <<-HTML
|
807
883
|
<div class="card #{extra} mb-3">
|
808
884
|
<div class="card-body">
|
@@ -818,14 +894,17 @@ def _card_generic(card_title:, middle:, extra: "")
|
|
818
894
|
end
|
819
895
|
|
820
896
|
def _var(name) # FIXME scope issue!
|
897
|
+
log!(enter: __method__)
|
821
898
|
::Livetext::Vars[name] || "[:#{name} is undefined]"
|
822
899
|
end
|
823
900
|
|
824
901
|
def _main(url)
|
902
|
+
log!(enter: __method__)
|
825
903
|
%[href="javascript: void(0)" onclick="javascript:open_main('#{url}')"]
|
826
904
|
end
|
827
905
|
|
828
906
|
def _blank(url)
|
907
|
+
log!(enter: __method__)
|
829
908
|
%[href='#{url}' target='blank']
|
830
909
|
end
|
831
910
|
|