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