runeblog 0.3.22 → 0.3.23
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 +77 -53
- 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 +3 -1
- data/empty_view/themes/standard/post/generate.lt3 +2 -2
- data/empty_view/themes/standard/post/permalink.lt3 +1 -1
- data/lib/helpers-blog.rb +5 -4
- data/lib/liveblog.rb +80 -17
- data/lib/lowlevel.rb +23 -7
- data/lib/menus.rb +2 -1
- data/lib/newpost.rb +35 -26
- data/lib/post.rb +3 -2
- data/lib/processing.rb +22 -1
- data/lib/publish.rb +3 -1
- data/lib/repl.rb +41 -17
- data/lib/runeblog.rb +88 -47
- data/lib/runeblog_version.rb +1 -1
- data/lib/view.rb +22 -3
- data/runeblog.gemspec +1 -1
- metadata +8 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e8c5908c63aea98d2cc29ab782e11b83361d3d866bda7d0c902afb1cfdc70226
|
4
|
+
data.tar.gz: 7740ee4f471a6addeaea6a48394e02aa53ae30be129b9761d1b1b9eb316de7a3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9421dacd34f38911af55054966a341563a70f791bc5fc080f949ad9f1724ae32b15b8163b30985546e3666a127ab87b3a33b731a31a21bf546c832011d006245
|
7
|
+
data.tar.gz: c1571f0a8f8109bc9ce3603142bb8f4b02117606aada8f8931eb9ec6e694ffe094ca2218ce618f37011ceea2da5291edfa8e83f9d7fa64e743bb8dd0483a31f1
|
data/bin/blog
CHANGED
@@ -27,8 +27,12 @@ end
|
|
27
27
|
def get_universal
|
28
28
|
univ = "#{@blog.root}/data/universal.lt3"
|
29
29
|
if yesno("Faster initial setup? (no: edit universal.lt3)")
|
30
|
-
|
31
|
-
|
30
|
+
# author = ask!(" Author name: ")
|
31
|
+
# site = ask!(" Site/domain: ")
|
32
|
+
# Temporarily, for speed:
|
33
|
+
author, site = "Hal Fulton", "somedomain.com"
|
34
|
+
puts " Author name: #{author}"
|
35
|
+
puts " Site/domain: #{site}"
|
32
36
|
# Now stash it...
|
33
37
|
str = File.read(univ)
|
34
38
|
str = str.gsub(/AUTHOR/, author)
|
@@ -41,22 +45,16 @@ def get_universal
|
|
41
45
|
end
|
42
46
|
|
43
47
|
def get_global
|
48
|
+
view_name = ask!(" Filename: ")
|
49
|
+
@blog.create_view(view_name) # call change_view??
|
44
50
|
if yesno("Faster view setup? (no: edit global.lt3)")
|
45
|
-
view_name = ask!(" Filename: ")
|
46
|
-
@blog.create_view(view_name) # call change_view??
|
47
51
|
title = ask!(" View title: ")
|
48
52
|
subtitle = ask!(" Subtitle : ")
|
49
53
|
domain = ask!(" Domain : ")
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
/VIEW_TITLE/ => title,
|
54
|
-
/VIEW_SUBTITLE/ => subtitle,
|
55
|
-
/VIEW_DOMAIN/ => domain}
|
56
|
-
@blog.complete_file(vfile, nil, hash)
|
54
|
+
modify_view_global(view_name)
|
55
|
+
modify_view_settings(name: view_name, title: title, subtitle: subtitle,
|
56
|
+
domain: domain)
|
57
57
|
else
|
58
|
-
view_name = ask!(" Filename: ")
|
59
|
-
@blog.create_view(view_name) # call change_view??
|
60
58
|
vim_params = '-c ":set hlsearch" -c ":hi Search ctermfg=2 ctermbg=6" +/"\(VIEW_.*\|SITE.*\)"'
|
61
59
|
edit_file(@blog.view.dir/"themes/standard/global.lt3", vim: vim_params)
|
62
60
|
end
|
@@ -109,7 +107,8 @@ def mainloop
|
|
109
107
|
puts "Don't understand '#{cmd.inspect}'\n "
|
110
108
|
end
|
111
109
|
rescue => err
|
112
|
-
puts err
|
110
|
+
puts err.to_s
|
111
|
+
puts "Pausing..."; gets
|
113
112
|
end
|
114
113
|
|
115
114
|
def cmdline_preview
|
@@ -159,57 +158,82 @@ def handle_cmdline
|
|
159
158
|
exit
|
160
159
|
end
|
161
160
|
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
ver
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
161
|
+
def check_ruby_version
|
162
|
+
major, minor = RUBY_VERSION.split(".").values_at(0,1)
|
163
|
+
ver = major.to_i*10 + minor.to_i
|
164
|
+
unless ver >= 24
|
165
|
+
RubyText.stop
|
166
|
+
sleep 0.2
|
167
|
+
puts "Needs Ruby 2.4 or greater"
|
168
|
+
exit
|
169
|
+
end
|
171
170
|
end
|
172
171
|
|
173
|
-
|
172
|
+
def reopen_stderr
|
173
|
+
errfile = File.new("stderr.out", "w")
|
174
|
+
STDERR.reopen(errfile)
|
175
|
+
end
|
174
176
|
|
175
|
-
|
177
|
+
def set_fgbg
|
178
|
+
# read a .rubytext file here?? Call it something else?
|
179
|
+
home = ENV['HOME']
|
180
|
+
@fg, @bg = Blue, White ## FIXME!! try_read_config("#{home}/.rubytext", fg: Blue, bg: White)
|
181
|
+
@fg = @fg.downcase.to_sym
|
182
|
+
@bg = @bg.downcase.to_sym
|
176
183
|
|
177
|
-
|
178
|
-
|
184
|
+
RubyText.start(:_echo, :keypad, scroll: true, log: "binblog.txt", fg: @fg, bg: @bg)
|
185
|
+
end
|
179
186
|
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
187
|
+
def create_new_repo?
|
188
|
+
new_repo = false
|
189
|
+
if ! RuneBlog.exist?
|
190
|
+
exit unless yesno("No blog repo found. Create new one?")
|
191
|
+
RuneBlog.create_new_blog_repo
|
192
|
+
puts fx(" Blog repo successfully created.", :bold)
|
193
|
+
new_repo = true
|
194
|
+
end
|
185
195
|
|
186
|
-
|
196
|
+
@blog = RuneBlog.new
|
197
|
+
get_started if new_repo
|
198
|
+
rescue => err
|
199
|
+
STDERR.puts "Error - #{err.to_s}"
|
200
|
+
STDERR.puts err.backtrace
|
201
|
+
end
|
187
202
|
|
203
|
+
def print_intro
|
204
|
+
print fx(" For help", :bold)
|
205
|
+
puts " type h or help.\n "
|
188
206
|
|
189
|
-
|
190
|
-
if ! RuneBlog.exist?
|
191
|
-
exit unless yesno("No blog repo found. Create new one?")
|
192
|
-
RuneBlog.create_new_blog_repo
|
193
|
-
puts fx(" Blog repo successfully created.", :bold)
|
194
|
-
new_repo = true
|
207
|
+
puts fx("\n RuneBlog", :bold), fx(" v #{RuneBlog::VERSION}\n", Red)
|
195
208
|
end
|
196
209
|
|
197
|
-
|
198
|
-
|
210
|
+
def cmd_history_etc
|
211
|
+
@cmdhist = []
|
212
|
+
@tabcom = RuneBlog::REPL::Patterns.keys.uniq - RuneBlog::REPL::Abbr.keys
|
213
|
+
@tabcom.map! {|x| x.sub(/ [\$\>].*/, "") + " " }
|
214
|
+
@tabcom.sort!
|
215
|
+
end
|
199
216
|
|
200
|
-
|
201
|
-
|
217
|
+
def exit_repl
|
218
|
+
# RubyText.stop
|
219
|
+
sleep 0.2
|
220
|
+
puts
|
221
|
+
end
|
202
222
|
|
203
|
-
|
223
|
+
### Main
|
204
224
|
|
205
|
-
|
206
|
-
@tabcom = RuneBlog::REPL::Patterns.keys.uniq - RuneBlog::REPL::Abbr.keys
|
207
|
-
@tabcom.map! {|x| x.sub(/ [\$\>].*/, "") + " " }
|
208
|
-
@tabcom.sort!
|
209
|
-
|
210
|
-
loop { mainloop }
|
225
|
+
include RuneBlog::Helpers # for try_read_config
|
211
226
|
|
212
|
-
|
213
|
-
sleep 0.2
|
214
|
-
puts
|
227
|
+
reopen_stderr
|
215
228
|
|
229
|
+
check_ruby_version
|
230
|
+
handle_cmdline unless ARGV.empty?
|
231
|
+
set_fgbg
|
232
|
+
print_intro
|
233
|
+
# STDERR.puts "cp 6 - pause"; gets
|
234
|
+
create_new_repo?
|
235
|
+
# STDERR.puts "cp 7 - pause"; gets
|
236
|
+
cmd_history_etc
|
237
|
+
# STDERR.puts "cp 8 - pause"; gets
|
238
|
+
loop { mainloop }
|
239
|
+
exit_repl
|
data/data/global.lt3
CHANGED
@@ -3,11 +3,11 @@
|
|
3
3
|
. <variable> <value>
|
4
4
|
. --------------------------------------------------
|
5
5
|
|
6
|
-
.variables view
|
6
|
+
.variables view ../settings/view.txt
|
7
7
|
|
8
|
-
.variables recent
|
8
|
+
.variables recent ../settings/recent.txt
|
9
9
|
|
10
|
-
.variables publish
|
10
|
+
.variables publish ../settings/publish.txt
|
11
11
|
|
12
12
|
.variables
|
13
13
|
host http://SITE
|
data/data/universal.lt3
CHANGED
File without changes
|
data/lib/helpers-blog.rb
CHANGED
@@ -55,11 +55,12 @@ module RuneBlog::Helpers
|
|
55
55
|
puts
|
56
56
|
end
|
57
57
|
|
58
|
-
def get_repo_config
|
58
|
+
def get_repo_config(root = ".blogs")
|
59
59
|
log!(enter: __method__, level: 3)
|
60
|
-
@editor = File.read("
|
61
|
-
@current_view = File.read("
|
62
|
-
@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?
|
63
64
|
rescue => err
|
64
65
|
puts "Can't read config: #{err}"
|
65
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,6 +58,7 @@ 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]
|
58
64
|
setvar("post.num", @meta.num.to_i)
|
@@ -60,6 +66,7 @@ def post
|
|
60
66
|
end
|
61
67
|
|
62
68
|
def _got_python?
|
69
|
+
log!(enter: __method__)
|
63
70
|
# Dumb - fix later - check up front as needed
|
64
71
|
# Should also check for praw lib
|
65
72
|
str = `which python3`
|
@@ -67,6 +74,7 @@ end
|
|
67
74
|
end
|
68
75
|
|
69
76
|
def _reddit_post_url(vdir, date, title, url)
|
77
|
+
log!(enter: __method__)
|
70
78
|
_got_python?
|
71
79
|
tmpfile = "/tmp/reddit-post-url.txt"
|
72
80
|
File.open(tmpfile, "w") do |tmp|
|
@@ -80,6 +88,7 @@ end
|
|
80
88
|
end
|
81
89
|
|
82
90
|
def post_toolbar
|
91
|
+
log!(enter: __method__)
|
83
92
|
back_icon = %[<img src="assets/back-icon.png" width=24 height=24 alt="Go back"></img>]
|
84
93
|
back = %[<a style="text-decoration: none" href="javascript:history.go(-1)">#{back_icon}</a>]
|
85
94
|
_out <<~HTML
|
@@ -88,14 +97,15 @@ def post_toolbar
|
|
88
97
|
end
|
89
98
|
|
90
99
|
def post_trailer
|
100
|
+
log!(enter: __method__)
|
91
101
|
# Not called from *inside* a post, therefore no @meta --
|
92
102
|
# can/must call read_metadata
|
93
103
|
num = _var("post.num").to_i
|
94
|
-
|
104
|
+
log! str: "post_trailer: num = #{num}"
|
95
105
|
vp = _post_lookup(num)
|
96
|
-
|
106
|
+
log! str: "post_trailer: lookup = #{vp.num} #{vp.title}"
|
97
107
|
dir = @blog.root/:posts/vp.nslug
|
98
|
-
|
108
|
+
log! str: " -- dir = #{dir}"
|
99
109
|
meta = Dir.chdir(dir) { @blog.read_metadata }
|
100
110
|
nslug = @blog.make_slug(meta)
|
101
111
|
aslug = nslug[5..-1]
|
@@ -112,10 +122,10 @@ puts " -- dir = #{dir}"
|
|
112
122
|
date = meta.date
|
113
123
|
rid_file = vdir/:posts/nslug/"reddit.id"
|
114
124
|
if File.exist?(rid_file)
|
115
|
-
puts " reading #{rid_file}"
|
125
|
+
STDERR.puts " reading #{rid_file}"
|
116
126
|
rid = File.read(rid_file).chomp
|
117
127
|
else
|
118
|
-
puts " creating #{rid_file}"
|
128
|
+
STDERR.puts " creating #{rid_file}"
|
119
129
|
title = meta.title
|
120
130
|
rid = _reddit_post_url(vdir, date, title, perma)
|
121
131
|
dump(rid, rid_file)
|
@@ -127,7 +137,7 @@ puts " -- dir = #{dir}"
|
|
127
137
|
HTML
|
128
138
|
# damned syntax highlighting </>
|
129
139
|
end
|
130
|
-
print "
|
140
|
+
# STDERR.print "Pausing... "; getch
|
131
141
|
_out <<~HTML
|
132
142
|
#{reddit_txt}
|
133
143
|
<hr>
|
@@ -139,6 +149,7 @@ print "Pause... "; getch
|
|
139
149
|
end
|
140
150
|
|
141
151
|
def faq
|
152
|
+
log!(enter: __method__)
|
142
153
|
@faq_count ||= 0
|
143
154
|
_out "<br>" if @faq_count == 0
|
144
155
|
@faq_count += 1
|
@@ -153,15 +164,18 @@ def faq
|
|
153
164
|
end
|
154
165
|
|
155
166
|
def backlink
|
167
|
+
log!(enter: __method__)
|
156
168
|
_out %[<br><a href="javascript:history.go(-1)">[Back]</a>]
|
157
169
|
end
|
158
170
|
|
159
171
|
def code
|
172
|
+
log!(enter: __method__)
|
160
173
|
lines = _body # _text
|
161
174
|
_out "<font size=+1><pre>\n#{lines}\n</pre></font>"
|
162
175
|
end
|
163
176
|
|
164
177
|
def _read_navbar_data
|
178
|
+
log!(enter: __method__)
|
165
179
|
vdir = @blog.root/:views/@blog.view
|
166
180
|
dir = vdir/"themes/standard/banner/navbar/"
|
167
181
|
datafile = dir/"list.data"
|
@@ -169,6 +183,7 @@ def _read_navbar_data
|
|
169
183
|
end
|
170
184
|
|
171
185
|
def banner
|
186
|
+
log!(enter: __method__)
|
172
187
|
count = 0
|
173
188
|
bg = "white" # outside loop
|
174
189
|
wide = nil
|
@@ -202,7 +217,7 @@ def banner
|
|
202
217
|
if ! File.exist?(file)
|
203
218
|
src = file.sub(/html$/, "lt3")
|
204
219
|
if File.exist?(src)
|
205
|
-
preprocess src: src, dst: file, call: ".nopara"
|
220
|
+
preprocess src: src, dst: file, call: ".nopara", vars: @blog.view.globals
|
206
221
|
else
|
207
222
|
raise FoundNeither(file, src)
|
208
223
|
end
|
@@ -228,11 +243,11 @@ def banner
|
|
228
243
|
_out navbar if navbar
|
229
244
|
rescue => err
|
230
245
|
STDERR.puts "err = #{err}"
|
231
|
-
STDERR.puts err.backtrace.join("\n")
|
232
|
-
gets
|
246
|
+
STDERR.puts err.backtrace.join("\n") if err.respond_to?(:backtrace)
|
233
247
|
end
|
234
248
|
|
235
249
|
def _svg_title(*args)
|
250
|
+
log!(enter: __method__)
|
236
251
|
width = "95%"
|
237
252
|
height = 90
|
238
253
|
bgcolor = "black"
|
@@ -288,6 +303,7 @@ def _svg_title(*args)
|
|
288
303
|
end
|
289
304
|
|
290
305
|
def quote
|
306
|
+
log!(enter: __method__)
|
291
307
|
_passthru "<blockquote>"
|
292
308
|
_passthru _body.join(" ")
|
293
309
|
_passthru "</blockquote>"
|
@@ -295,9 +311,11 @@ def quote
|
|
295
311
|
end
|
296
312
|
|
297
313
|
def categories # does nothing right now
|
314
|
+
log!(enter: __method__)
|
298
315
|
end
|
299
316
|
|
300
317
|
def style
|
318
|
+
log!(enter: __method__)
|
301
319
|
fname = _args[0]
|
302
320
|
_passthru %[<link rel="stylesheet" href="???/etc/#{fname}')">]
|
303
321
|
end
|
@@ -314,6 +332,7 @@ def h6; _passthru "<h6>#{@_data}</h6>"; end
|
|
314
332
|
def hr; _passthru "<hr>"; end
|
315
333
|
|
316
334
|
def nlist
|
335
|
+
log!(enter: __method__)
|
317
336
|
_out "<ol>"
|
318
337
|
_body {|line| _out "<li>#{line}</li>" }
|
319
338
|
_out "</ol>"
|
@@ -321,6 +340,7 @@ def nlist
|
|
321
340
|
end
|
322
341
|
|
323
342
|
def list
|
343
|
+
log!(enter: __method__)
|
324
344
|
_out "<ul>"
|
325
345
|
_body {|line| _out "<li>#{line}</li>" }
|
326
346
|
_out "</ul>"
|
@@ -328,6 +348,7 @@ def list
|
|
328
348
|
end
|
329
349
|
|
330
350
|
def list!
|
351
|
+
log!(enter: __method__)
|
331
352
|
_out "<ul>"
|
332
353
|
lines = _body.each
|
333
354
|
loop do
|
@@ -346,6 +367,7 @@ end
|
|
346
367
|
### inset
|
347
368
|
|
348
369
|
def inset
|
370
|
+
log!(enter: __method__)
|
349
371
|
lines = _body
|
350
372
|
box = ""
|
351
373
|
output = []
|
@@ -377,6 +399,7 @@ def inset
|
|
377
399
|
end
|
378
400
|
|
379
401
|
def title
|
402
|
+
log!(enter: __method__)
|
380
403
|
raise NoPostCall unless @meta
|
381
404
|
title = @_data.chomp
|
382
405
|
@meta.title = title
|
@@ -386,6 +409,7 @@ def title
|
|
386
409
|
end
|
387
410
|
|
388
411
|
def pubdate
|
412
|
+
log!(enter: __method__)
|
389
413
|
raise NoPostCall unless @meta
|
390
414
|
_debug "data = #@_data"
|
391
415
|
# Check for discrepancy?
|
@@ -398,6 +422,7 @@ def pubdate
|
|
398
422
|
end
|
399
423
|
|
400
424
|
def tags
|
425
|
+
log!(enter: __method__)
|
401
426
|
raise NoPostCall unless @meta
|
402
427
|
_debug "args = #{_args}"
|
403
428
|
@meta.tags = _args.dup || []
|
@@ -405,6 +430,7 @@ def tags
|
|
405
430
|
end
|
406
431
|
|
407
432
|
def views
|
433
|
+
log!(enter: __method__)
|
408
434
|
raise NoPostCall unless @meta
|
409
435
|
_debug "data = #{_args}"
|
410
436
|
@meta.views = _args.dup
|
@@ -412,6 +438,7 @@ def views
|
|
412
438
|
end
|
413
439
|
|
414
440
|
def pin
|
441
|
+
log!(enter: __method__)
|
415
442
|
raise NoPostCall unless @meta
|
416
443
|
_debug "data = #{_args}" # verify only valid views?
|
417
444
|
pinned = @_args
|
@@ -427,21 +454,22 @@ def pin
|
|
427
454
|
_optional_blank_line
|
428
455
|
rescue => err
|
429
456
|
STDERR.puts "err = #{err}"
|
430
|
-
STDERR.puts err.backtrace.join("\n")
|
431
|
-
gets
|
457
|
+
STDERR.puts err.backtrace.join("\n") if err.respond_to?(:backtrace)
|
432
458
|
end
|
433
459
|
|
434
460
|
def write_post
|
461
|
+
log!(enter: __method__)
|
435
462
|
raise NoPostCall unless @meta
|
436
463
|
@meta.views = @meta.views.join(" ") if @meta.views.is_a? Array
|
437
464
|
@meta.tags = @meta.tags.join(" ") if @meta.tags.is_a? Array
|
438
465
|
_write_metadata
|
439
466
|
rescue => err
|
440
467
|
puts "err = #{err}"
|
441
|
-
puts err.backtrace.join("\n")
|
468
|
+
puts err.backtrace.join("\n") if err.respond_to?(:backtrace)
|
442
469
|
end
|
443
470
|
|
444
471
|
def teaser
|
472
|
+
log!(enter: __method__)
|
445
473
|
raise NoPostCall unless @meta
|
446
474
|
text = _body.join("\n")
|
447
475
|
@meta.teaser = text
|
@@ -456,6 +484,7 @@ def teaser
|
|
456
484
|
end
|
457
485
|
|
458
486
|
def finalize
|
487
|
+
log!(str: "Now exiting livetext processing...")
|
459
488
|
return unless @meta
|
460
489
|
return @meta if @blog.nil?
|
461
490
|
|
@@ -467,6 +496,7 @@ def finalize
|
|
467
496
|
end
|
468
497
|
|
469
498
|
def head # Does NOT output <head> tags
|
499
|
+
log!(enter: __method__)
|
470
500
|
args = _args
|
471
501
|
args.each do |inc|
|
472
502
|
self.data = inc
|
@@ -522,6 +552,7 @@ end
|
|
522
552
|
########## newer stuff...
|
523
553
|
|
524
554
|
def meta
|
555
|
+
log!(enter: __method__)
|
525
556
|
args = _args
|
526
557
|
enum = args.each
|
527
558
|
str = "<meta"
|
@@ -541,6 +572,7 @@ def meta
|
|
541
572
|
end
|
542
573
|
|
543
574
|
def recent_posts # side-effect
|
575
|
+
log!(enter: __method__)
|
544
576
|
_out <<-HTML
|
545
577
|
<div class="col-lg-9 col-md-9 col-sm-9 col-xs-12">
|
546
578
|
<iframe id="main" style="width: 70vw; height: 100vh; position: relative;"
|
@@ -551,6 +583,7 @@ def recent_posts # side-effect
|
|
551
583
|
end
|
552
584
|
|
553
585
|
def _make_class_name(app)
|
586
|
+
log!(enter: __method__)
|
554
587
|
if app =~ /[-_]/
|
555
588
|
words = app.split(/[-_]/)
|
556
589
|
name = words.map(&:capitalize).join
|
@@ -561,6 +594,7 @@ def _make_class_name(app)
|
|
561
594
|
end
|
562
595
|
|
563
596
|
def _load_local(widget)
|
597
|
+
log!(enter: __method__)
|
564
598
|
Dir.chdir("../../widgets/#{widget}") do
|
565
599
|
rclass = _make_class_name(widget)
|
566
600
|
found = (require("./#{widget}") if File.exist?("#{widget}.rb"))
|
@@ -569,12 +603,13 @@ def _load_local(widget)
|
|
569
603
|
end
|
570
604
|
rescue => err
|
571
605
|
STDERR.puts err.to_s
|
572
|
-
STDERR.puts err.backtrace.join("\n")
|
606
|
+
STDERR.puts err.backtrace.join("\n") if err.respond_to?(:backtrace)
|
573
607
|
sleep 6; RubyText.stop
|
574
608
|
exit
|
575
609
|
end
|
576
610
|
|
577
611
|
def _handle_standard_widget(tag)
|
612
|
+
log!(enter: __method__)
|
578
613
|
wtag = "../../widgets"/tag
|
579
614
|
code = _load_local(tag)
|
580
615
|
if code
|
@@ -586,6 +621,7 @@ def _handle_standard_widget(tag)
|
|
586
621
|
end
|
587
622
|
|
588
623
|
def sidebar
|
624
|
+
log!(enter: __method__)
|
589
625
|
_debug "--- handling sidebar\r"
|
590
626
|
if _args.include? "off"
|
591
627
|
_body { } # iterate, do nothing
|
@@ -613,12 +649,13 @@ def sidebar
|
|
613
649
|
_out %[</div>]
|
614
650
|
rescue => err
|
615
651
|
puts "err = #{err}"
|
616
|
-
puts err.backtrace.join("\n")
|
652
|
+
puts err.backtrace.join("\n") if err.respond_to?(:backtrace)
|
617
653
|
sleep 6; RubyText.stop
|
618
654
|
exit
|
619
655
|
end
|
620
656
|
|
621
657
|
def stylesheet
|
658
|
+
log!(enter: __method__)
|
622
659
|
lines = _body
|
623
660
|
url = lines[0]
|
624
661
|
integ = lines[1]
|
@@ -627,6 +664,7 @@ def stylesheet
|
|
627
664
|
end
|
628
665
|
|
629
666
|
def script
|
667
|
+
log!(enter: __method__)
|
630
668
|
lines = _body
|
631
669
|
url = lines[0]
|
632
670
|
integ = lines[1]
|
@@ -676,6 +714,7 @@ end
|
|
676
714
|
|
677
715
|
|
678
716
|
def tag_cloud
|
717
|
+
log!(enter: __method__)
|
679
718
|
title = _data
|
680
719
|
title = "Tag Cloud" if title.empty?
|
681
720
|
open = <<-HTML
|
@@ -699,18 +738,22 @@ def tag_cloud
|
|
699
738
|
end
|
700
739
|
|
701
740
|
def vnavbar
|
741
|
+
log!(enter: __method__)
|
702
742
|
str = _make_navbar(:vert)
|
703
743
|
end
|
704
744
|
|
705
745
|
def hnavbar
|
746
|
+
log!(enter: __method__)
|
706
747
|
str = _make_navbar # horiz is default
|
707
748
|
end
|
708
749
|
|
709
750
|
def navbar
|
751
|
+
log!(enter: __method__)
|
710
752
|
str = _make_navbar # horiz is default
|
711
753
|
end
|
712
754
|
|
713
755
|
def _make_navbar(orient = :horiz)
|
756
|
+
log!(enter: __method__)
|
714
757
|
vdir = @root/:views/@blog.view
|
715
758
|
title = _var("view.title")
|
716
759
|
|
@@ -751,7 +794,7 @@ def _make_navbar(orient = :horiz)
|
|
751
794
|
else
|
752
795
|
dir = @blog.root/:views/@blog.view/"themes/standard/banner/navbar"
|
753
796
|
dest = vdir/"remote/banner/navbar"/basename+".html"
|
754
|
-
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
|
755
798
|
output.puts %[#{li1} <a class="nav-link" #{href_main}>#{cdata}</a> #{li2}]
|
756
799
|
end
|
757
800
|
end
|
@@ -766,6 +809,7 @@ end
|
|
766
809
|
##################
|
767
810
|
|
768
811
|
def _html_body(file, css = nil)
|
812
|
+
log!(enter: __method__)
|
769
813
|
file.puts "<html>"
|
770
814
|
if css
|
771
815
|
file.puts " <head>"
|
@@ -778,10 +822,12 @@ def _html_body(file, css = nil)
|
|
778
822
|
end
|
779
823
|
|
780
824
|
def _errout(*args)
|
825
|
+
log!(enter: __method__)
|
781
826
|
::STDERR.puts *args
|
782
827
|
end
|
783
828
|
|
784
829
|
def _passthru(line)
|
830
|
+
log!(enter: __method__)
|
785
831
|
return if line.nil?
|
786
832
|
line = _format(line)
|
787
833
|
_out line + "\n"
|
@@ -789,6 +835,7 @@ def _passthru(line)
|
|
789
835
|
end
|
790
836
|
|
791
837
|
def _passthru_noline(line)
|
838
|
+
log!(enter: __method__)
|
792
839
|
return if line.nil?
|
793
840
|
line = _format(line)
|
794
841
|
_out line
|
@@ -796,6 +843,7 @@ def _passthru_noline(line)
|
|
796
843
|
end
|
797
844
|
|
798
845
|
def _write_metadata
|
846
|
+
log!(enter: __method__)
|
799
847
|
File.write("teaser.txt", @meta.teaser)
|
800
848
|
fields = [:num, :title, :date, :pubdate, :views, :tags, :pinned]
|
801
849
|
fname = "metadata.txt"
|
@@ -805,20 +853,32 @@ def _write_metadata
|
|
805
853
|
end
|
806
854
|
|
807
855
|
def _post_lookup(postid) # side-effect
|
856
|
+
log!(enter: __method__)
|
808
857
|
# .. = templates, ../.. = views/thisview
|
809
858
|
slug = title = date = teaser_text = nil
|
810
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}"
|
811
867
|
dir_posts = @vdir/:posts
|
812
868
|
posts = Dir.entries(dir_posts).grep(/^\d\d\d\d/).map {|x| dir_posts/x }
|
813
869
|
posts.select! {|x| File.directory?(x) }
|
814
870
|
|
871
|
+
tmp.puts "_post_lookup: postid = #{postid}"
|
872
|
+
tmp.puts "_post_lookup: posts = \n#{posts.inspect}"
|
873
|
+
tmp.close
|
815
874
|
posts = posts.select {|x| File.basename(x).to_i == postid }
|
816
|
-
postdir = exactly_one(posts)
|
875
|
+
postdir = exactly_one(posts, posts.inspect)
|
817
876
|
vp = RuneBlog::ViewPost.new(@blog.view, postdir)
|
818
877
|
vp
|
819
878
|
end
|
820
879
|
|
821
880
|
def _card_generic(card_title:, middle:, extra: "")
|
881
|
+
log!(enter: __method__)
|
822
882
|
front = <<-HTML
|
823
883
|
<div class="card #{extra} mb-3">
|
824
884
|
<div class="card-body">
|
@@ -834,14 +894,17 @@ def _card_generic(card_title:, middle:, extra: "")
|
|
834
894
|
end
|
835
895
|
|
836
896
|
def _var(name) # FIXME scope issue!
|
897
|
+
log!(enter: __method__)
|
837
898
|
::Livetext::Vars[name] || "[:#{name} is undefined]"
|
838
899
|
end
|
839
900
|
|
840
901
|
def _main(url)
|
902
|
+
log!(enter: __method__)
|
841
903
|
%[href="javascript: void(0)" onclick="javascript:open_main('#{url}')"]
|
842
904
|
end
|
843
905
|
|
844
906
|
def _blank(url)
|
907
|
+
log!(enter: __method__)
|
845
908
|
%[href='#{url}' target='blank']
|
846
909
|
end
|
847
910
|
|