runeblog 0.2.56 → 0.2.61
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/README.lt3 +164 -69
- data/README.md +176 -65
- data/bin/blog +52 -4
- data/empty_view/themes/standard/banner/list.data +3 -0
- data/empty_view/themes/standard/blog/index.lt3 +1 -1
- data/empty_view/themes/standard/widgets/links/links.rb +21 -7
- data/empty_view/themes/standard/widgets/news/news.rb +70 -0
- data/empty_view/themes/standard/widgets/pages/pages.rb +70 -3
- data/empty_view/themes/standard/widgets/pinned/pinned.rb +26 -22
- data/lib/liveblog.rb +87 -83
- data/lib/post.rb +6 -6
- data/lib/repl.rb +4 -17
- data/lib/runeblog.rb +32 -6
- data/lib/runeblog_version.rb +1 -1
- data/runeblog.gemspec +1 -1
- data/test/austin.rb +3 -2
- metadata +5 -10
- data/empty_view/remote/navbar/GIT_IS_DUMB +0 -1
- data/empty_view/themes/standard/banner/navbar.lt3 +0 -17
- data/empty_view/themes/standard/navbar/about.lt3 +0 -18
- data/empty_view/themes/standard/navbar/contact.lt3 +0 -18
- data/empty_view/themes/standard/navbar/faq.lt3 +0 -1
- data/empty_view/themes/standard/navbar/navbar.lt3 +0 -16
data/lib/post.rb
CHANGED
@@ -9,12 +9,12 @@ class RuneBlog::Post
|
|
9
9
|
|
10
10
|
include RuneBlog::Helpers
|
11
11
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
12
|
+
# def self.files(num, root)
|
13
|
+
# log!(enter: __method__, args: [num, root], level: 3)
|
14
|
+
# files = ::Find.find(root).to_a
|
15
|
+
# result = files.grep(/#{prefix(num)}-/)
|
16
|
+
# result
|
17
|
+
# end
|
18
18
|
|
19
19
|
def self.load(post)
|
20
20
|
log!(enter: __method__, args: [post], level: 3)
|
data/lib/repl.rb
CHANGED
@@ -15,7 +15,6 @@ module RuneBlog::REPL
|
|
15
15
|
end
|
16
16
|
|
17
17
|
def cmd_quit(arg, testing = false)
|
18
|
-
check_empty(arg)
|
19
18
|
RubyText.stop
|
20
19
|
sleep 0.1
|
21
20
|
cmd_clear(nil)
|
@@ -24,14 +23,12 @@ module RuneBlog::REPL
|
|
24
23
|
end
|
25
24
|
|
26
25
|
def cmd_clear(arg, testing = false)
|
27
|
-
check_empty(arg)
|
28
26
|
STDSCR.cwin.clear
|
29
27
|
STDSCR.cwin.refresh
|
30
28
|
end
|
31
29
|
|
32
30
|
def cmd_version(arg, testing = false)
|
33
31
|
reset_output
|
34
|
-
check_empty(arg)
|
35
32
|
output RuneBlog::VERSION
|
36
33
|
puts fx("\n RuneBlog", :bold), fx(" v #{RuneBlog::VERSION}\n", Red) unless testing
|
37
34
|
@out
|
@@ -64,14 +61,12 @@ module RuneBlog::REPL
|
|
64
61
|
end
|
65
62
|
|
66
63
|
def _manage_pinned(arg, testing = false) # cloned from manage_links
|
67
|
-
check_empty(arg)
|
68
64
|
dir = @blog.view.dir/"themes/standard/widgets/pinned"
|
69
65
|
data = dir/"list.data"
|
70
66
|
edit_file(data)
|
71
67
|
end
|
72
68
|
|
73
69
|
def _manage_navbar(arg, testing = false) # cloned from manage_pages
|
74
|
-
check_empty(arg)
|
75
70
|
dir = @blog.view.dir/"themes/standard/navbar"
|
76
71
|
files = Dir.entries(dir) - %w[. .. navbar.lt3]
|
77
72
|
new_item = " [New item] "
|
@@ -107,7 +102,6 @@ module RuneBlog::REPL
|
|
107
102
|
end
|
108
103
|
|
109
104
|
def _manage_pages(arg, testing = false)
|
110
|
-
check_empty(arg)
|
111
105
|
dir = @blog.view.dir/"themes/standard/widgets/pages"
|
112
106
|
# Assume child files already generated (and list.data??)
|
113
107
|
data = dir/"list.data"
|
@@ -143,14 +137,12 @@ module RuneBlog::REPL
|
|
143
137
|
end
|
144
138
|
|
145
139
|
def cmd_import(arg, testing = false)
|
146
|
-
check_empty(arg)
|
147
140
|
files = ask("\n File(s) = ")
|
148
141
|
system!("cp #{files} #{@blog.root}/views/#{@blog.view.name}/assets/")
|
149
142
|
end
|
150
143
|
|
151
144
|
def cmd_browse(arg, testing = false)
|
152
145
|
reset_output
|
153
|
-
check_empty(arg)
|
154
146
|
url = @blog.view.publisher.url
|
155
147
|
if url.nil?
|
156
148
|
output! "Publish first."
|
@@ -164,8 +156,11 @@ module RuneBlog::REPL
|
|
164
156
|
|
165
157
|
def cmd_preview(arg, testing = false)
|
166
158
|
reset_output
|
167
|
-
check_empty(arg)
|
168
159
|
local = @blog.view.local_index
|
160
|
+
unless File.exist?(local)
|
161
|
+
puts "\n No index. Rebuilding..."
|
162
|
+
cmd_rebuild(nil)
|
163
|
+
end
|
169
164
|
result = system!("open #{local}")
|
170
165
|
raise CantOpen(local) unless result
|
171
166
|
@out
|
@@ -182,7 +177,6 @@ module RuneBlog::REPL
|
|
182
177
|
# Future Hal says please refactor this
|
183
178
|
puts unless testing
|
184
179
|
reset_output
|
185
|
-
check_empty(arg)
|
186
180
|
unless @blog.view.can_publish?
|
187
181
|
msg = "Can't publish... see globals.lt3"
|
188
182
|
puts msg unless testing
|
@@ -225,7 +219,6 @@ module RuneBlog::REPL
|
|
225
219
|
def cmd_rebuild(arg, testing = false)
|
226
220
|
debug "Starting cmd_rebuild..."
|
227
221
|
reset_output
|
228
|
-
check_empty(arg)
|
229
222
|
puts unless testing
|
230
223
|
@blog.generate_view(@blog.view)
|
231
224
|
@blog.generate_index(@blog.view)
|
@@ -285,7 +278,6 @@ module RuneBlog::REPL
|
|
285
278
|
|
286
279
|
def cmd_new_post(arg, testing = false)
|
287
280
|
reset_output
|
288
|
-
check_empty(arg)
|
289
281
|
if @blog.views.empty?
|
290
282
|
puts "\n Create a view before creating the first post!\n "
|
291
283
|
return
|
@@ -358,7 +350,6 @@ module RuneBlog::REPL
|
|
358
350
|
|
359
351
|
def cmd_list_views(arg, testing = false)
|
360
352
|
reset_output("\n")
|
361
|
-
check_empty(arg)
|
362
353
|
puts unless testing
|
363
354
|
@blog.views.each do |v|
|
364
355
|
v = v.to_s
|
@@ -372,7 +363,6 @@ module RuneBlog::REPL
|
|
372
363
|
|
373
364
|
def cmd_list_posts(arg, testing = false)
|
374
365
|
reset_output
|
375
|
-
check_empty(arg)
|
376
366
|
posts = @blog.posts # current view
|
377
367
|
str = @blog.view.name + ":\n"
|
378
368
|
output str
|
@@ -395,7 +385,6 @@ module RuneBlog::REPL
|
|
395
385
|
|
396
386
|
def cmd_list_drafts(arg, testing = false)
|
397
387
|
reset_output
|
398
|
-
check_empty(arg)
|
399
388
|
drafts = @blog.drafts # current view
|
400
389
|
if drafts.empty?
|
401
390
|
output! "No drafts"
|
@@ -416,7 +405,6 @@ module RuneBlog::REPL
|
|
416
405
|
|
417
406
|
def cmd_list_assets(arg, testing = false)
|
418
407
|
reset_output
|
419
|
-
check_empty(arg)
|
420
408
|
dir = @blog.view.dir + "/assets"
|
421
409
|
assets = Dir[dir + "/*"]
|
422
410
|
if assets.empty?
|
@@ -512,7 +500,6 @@ module RuneBlog::REPL
|
|
512
500
|
|
513
501
|
def cmd_help(arg, testing = false)
|
514
502
|
reset_output
|
515
|
-
check_empty(arg)
|
516
503
|
msg = Help
|
517
504
|
output msg
|
518
505
|
msg.each_line do |line|
|
data/lib/runeblog.rb
CHANGED
@@ -331,8 +331,11 @@ class RuneBlog
|
|
331
331
|
text = nil
|
332
332
|
@theme = @view.dir/"themes/standard"
|
333
333
|
post_entry_name = @theme/"blog/post_entry.lt3"
|
334
|
+
# STDERR.puts "-- @pename = #{post_entry_name}"
|
335
|
+
# STDERR.puts "-- @pe = #{@_post_entry.inspect}"
|
334
336
|
depend = [post_entry_name]
|
335
|
-
xlate src: post_entry_name, dst: "/tmp/post_entry.html", deps: depend # , debug: true
|
337
|
+
xlate src: post_entry_name, dst: "/tmp/post_entry.html" # , deps: depend # , debug: true
|
338
|
+
# STDERR.puts "-- xlate result: #{`ls -l /tmp/post_entry.html`}"
|
336
339
|
@_post_entry ||= File.read("/tmp/post_entry.html")
|
337
340
|
vp = post_lookup(id)
|
338
341
|
nslug, aslug, title, date, teaser_text =
|
@@ -347,8 +350,7 @@ class RuneBlog
|
|
347
350
|
_tmp_error(err)
|
348
351
|
end
|
349
352
|
|
350
|
-
def
|
351
|
-
log!(enter: __method__, args: [file], level: 3)
|
353
|
+
def _sorted_posts
|
352
354
|
posts = nil
|
353
355
|
dir_posts = @vdir/:posts
|
354
356
|
entries = Dir.entries(dir_posts)
|
@@ -362,18 +364,31 @@ class RuneBlog
|
|
362
364
|
nb = b[bi..(bi+3)].to_i
|
363
365
|
nb <=> na
|
364
366
|
end # sort descending
|
365
|
-
|
367
|
+
return posts[0..19] # return 20 at most
|
368
|
+
end
|
369
|
+
|
370
|
+
def collect_recent_posts(file)
|
371
|
+
log!(enter: __method__, args: [file], level: 3)
|
366
372
|
text = <<-HTML
|
367
373
|
<html>
|
368
374
|
<head><link rel="stylesheet" href="etc/blog.css"></head>
|
369
375
|
<body>
|
370
376
|
HTML
|
377
|
+
posts = _sorted_posts
|
378
|
+
STDERR.puts "Posts = "
|
379
|
+
posts.each {|x| STDERR.puts " " + x }
|
371
380
|
wanted = [8, posts.size].min # estimate how many we want?
|
372
381
|
enum = posts.each
|
382
|
+
entries = []
|
373
383
|
wanted.times do
|
374
384
|
postid = File.basename(enum.next)
|
375
385
|
postid = postid.to_i
|
376
|
-
|
386
|
+
# STDERR.puts "-- postid = #{postid}"
|
387
|
+
# posts.each {|x| STDERR.puts " #{x}" }
|
388
|
+
entry = index_entry(postid)
|
389
|
+
# STDERR.puts "-- entry = #{entry.size} chars"
|
390
|
+
entries << entry
|
391
|
+
text << entry
|
377
392
|
end
|
378
393
|
text << "</body></html>"
|
379
394
|
File.write(@vdir/:remote/file, text)
|
@@ -432,18 +447,29 @@ class RuneBlog
|
|
432
447
|
_tmp_error(err)
|
433
448
|
end
|
434
449
|
|
450
|
+
def _hack_pinned_rebuild(view)
|
451
|
+
tmp = "/tmp/pinned.lt3"
|
452
|
+
File.open(tmp, "w") do |f|
|
453
|
+
f.puts ".mixin liveblog\n.pinned_rebuild #{view}"
|
454
|
+
end
|
455
|
+
xlate src: tmp, dst: "/tmp/junk.html"
|
456
|
+
system("rm -f #{tmp} /tmp/junk.html")
|
457
|
+
end
|
458
|
+
|
435
459
|
def generate_view(view) # huh?
|
436
460
|
log!(enter: __method__, args: [view])
|
437
461
|
vdir = @root/:views/view
|
438
462
|
@theme = @root/:views/view/:themes/:standard
|
439
463
|
depend = [vdir/"remote/etc/blog.css", @theme/"global.lt3",
|
440
|
-
@theme/"blog/head.lt3",
|
464
|
+
@theme/"blog/head.lt3",
|
465
|
+
# @theme/"navbar/navbar.lt3",
|
441
466
|
@theme/"blog/index.lt3"] # FIXME what about assets?
|
442
467
|
xlate cwd: vdir/"themes/standard/etc", deps: depend,
|
443
468
|
src: "blog.css.lt3", copy: vdir/"remote/etc/blog.css" # , debug: true
|
444
469
|
xlate cwd: vdir/"themes/standard", deps: depend, force: true,
|
445
470
|
src: "blog/generate.lt3", dst: vdir/:remote/"index.html"
|
446
471
|
copy("#{vdir}/assets/*", "#{vdir}/remote/assets/")
|
472
|
+
# _hack_pinned_rebuild(view) # FIXME experimental
|
447
473
|
copy_widget_html(view)
|
448
474
|
rescue => err
|
449
475
|
_tmp_error(err)
|
data/lib/runeblog_version.rb
CHANGED
data/runeblog.gemspec
CHANGED
@@ -20,7 +20,7 @@ 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.
|
23
|
+
s.add_runtime_dependency 'livetext', '~> 0.8', '>= 0.8.95'
|
24
24
|
s.add_runtime_dependency 'rubytext', '~> 0.1', '>= 0.1.16'
|
25
25
|
|
26
26
|
# Files...
|
data/test/austin.rb
CHANGED
@@ -78,7 +78,7 @@ x.generate_view("around_austin")
|
|
78
78
|
debug("-- change_view: #{bold('around_austin')}")
|
79
79
|
x.change_view("around_austin") # 1 2 7 8 9
|
80
80
|
|
81
|
-
make_post(x, "What's at Stubbs...", <<-EXCERPT, <<-BODY
|
81
|
+
make_post(x, "What's at Stubbs...", <<-EXCERPT, <<-BODY)
|
82
82
|
Stubbs has been around for longer than civilization.
|
83
83
|
EXCERPT
|
84
84
|
That's a good thing. But their music isn't always the greatest.
|
@@ -87,6 +87,7 @@ BODY
|
|
87
87
|
make_post(x, "The new amphitheatre is overrated", <<-EXCERPT, <<-BODY)
|
88
88
|
It used to be that all major concerts played the Erwin Center.
|
89
89
|
EXCERPT
|
90
|
+
.pin around_austin
|
90
91
|
Now, depending on what you consider "major," blah blah blah...
|
91
92
|
BODY
|
92
93
|
|
@@ -137,7 +138,7 @@ EXCERPT
|
|
137
138
|
This is about Sabine St, blah blah lorem ipsum dolor...
|
138
139
|
BODY
|
139
140
|
|
140
|
-
make_post(x, "Remember Modest Mouse?", <<-EXCERPT, <<-BODY
|
141
|
+
make_post(x, "Remember Modest Mouse?", <<-EXCERPT, <<-BODY)
|
141
142
|
They date to the 90s or before.
|
142
143
|
EXCERPT
|
143
144
|
But I first heard of them
|
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.61
|
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-
|
11
|
+
date: 2019-11-12 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.95
|
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.95
|
33
33
|
- !ruby/object:Gem::Dependency
|
34
34
|
name: rubytext
|
35
35
|
requirement: !ruby/object:Gem::Requirement
|
@@ -68,7 +68,6 @@ files:
|
|
68
68
|
- empty_view/remote/banner/austin-pano.jpg
|
69
69
|
- empty_view/remote/banner/top.html
|
70
70
|
- empty_view/remote/etc/GIT_IS_DUMB
|
71
|
-
- empty_view/remote/navbar/GIT_IS_DUMB
|
72
71
|
- empty_view/remote/permalink/GIT_IS_DUMB
|
73
72
|
- empty_view/themes/standard/README
|
74
73
|
- empty_view/themes/standard/banner/about.lt3
|
@@ -76,7 +75,7 @@ files:
|
|
76
75
|
- empty_view/themes/standard/banner/blog-banner.jpg
|
77
76
|
- empty_view/themes/standard/banner/contact.lt3
|
78
77
|
- empty_view/themes/standard/banner/faq.lt3
|
79
|
-
- empty_view/themes/standard/banner/
|
78
|
+
- empty_view/themes/standard/banner/list.data
|
80
79
|
- empty_view/themes/standard/banner/top.html
|
81
80
|
- empty_view/themes/standard/blog/generate.lt3
|
82
81
|
- empty_view/themes/standard/blog/head.lt3
|
@@ -87,10 +86,6 @@ files:
|
|
87
86
|
- empty_view/themes/standard/etc/favicon.ico
|
88
87
|
- empty_view/themes/standard/etc/misc.js
|
89
88
|
- empty_view/themes/standard/global.lt3
|
90
|
-
- empty_view/themes/standard/navbar/about.lt3
|
91
|
-
- empty_view/themes/standard/navbar/contact.lt3
|
92
|
-
- empty_view/themes/standard/navbar/faq.lt3
|
93
|
-
- empty_view/themes/standard/navbar/navbar.lt3
|
94
89
|
- empty_view/themes/standard/post/generate.lt3
|
95
90
|
- empty_view/themes/standard/post/head.lt3
|
96
91
|
- empty_view/themes/standard/post/index.lt3
|
@@ -1 +0,0 @@
|
|
1
|
-
meh
|
@@ -1,17 +0,0 @@
|
|
1
|
-
. --------------------------------------------------
|
2
|
-
. This defines the content of the navigation bar.
|
3
|
-
. The first one is a special case.
|
4
|
-
. The others are understood to refer to .lt3 files
|
5
|
-
. such as navbar/about.lt3 (which is processed into
|
6
|
-
. HTML).
|
7
|
-
. The title may be more than one word. Quotes are
|
8
|
-
. not needed.
|
9
|
-
. --------------------------------------------------
|
10
|
-
|
11
|
-
.navbar2
|
12
|
-
index Home
|
13
|
-
about About
|
14
|
-
contact Contact
|
15
|
-
faq FAQ
|
16
|
-
.end
|
17
|
-
|
@@ -1,18 +0,0 @@
|
|
1
|
-
. --------------------------------------------------
|
2
|
-
. This is a sample file typical of page referenced
|
3
|
-
. directly from the navigation bar.
|
4
|
-
. It is like a special case of a page in the "pages"
|
5
|
-
. widget.
|
6
|
-
. --------------------------------------------------
|
7
|
-
|
8
|
-
.set this.title="About me"
|
9
|
-
. make this better later
|
10
|
-
<html><body>
|
11
|
-
<div class="content container-fluid mt-4">
|
12
|
-
<div class="row">
|
13
|
-
<h1>$this.title</h1>
|
14
|
-
. content starts here...
|
15
|
-
Blah blah blah...
|
16
|
-
</div>
|
17
|
-
</div>
|
18
|
-
</body></html>
|
@@ -1,18 +0,0 @@
|
|
1
|
-
. --------------------------------------------------
|
2
|
-
. This is a sample file typical of page referenced
|
3
|
-
. directly from the navigation bar.
|
4
|
-
. It is like a special case of a page in the "pages"
|
5
|
-
. widget.
|
6
|
-
. --------------------------------------------------
|
7
|
-
|
8
|
-
.set this.title="Contact"
|
9
|
-
. make this better later
|
10
|
-
<html><body>
|
11
|
-
<div class="content container-fluid mt-4">
|
12
|
-
<div class="row">
|
13
|
-
<h1>$this.title</h1>
|
14
|
-
. content starts here...
|
15
|
-
How to contact me by email, smoke signals, ICBM, seance, ...
|
16
|
-
</div>
|
17
|
-
</div>
|
18
|
-
</body></html>
|
@@ -1 +0,0 @@
|
|
1
|
-
.include ../widgets/pages/faq.lt3
|
@@ -1,16 +0,0 @@
|
|
1
|
-
. --------------------------------------------------
|
2
|
-
. This defines the content of the navigation bar.
|
3
|
-
. The first one is a special case.
|
4
|
-
. The others are understood to refer to .lt3 files
|
5
|
-
. such as navbar/about.lt3 (which is processed into
|
6
|
-
. HTML).
|
7
|
-
. The title may be more than one word. Quotes are
|
8
|
-
. not needed.
|
9
|
-
. --------------------------------------------------
|
10
|
-
|
11
|
-
.navbar
|
12
|
-
about About
|
13
|
-
contact Contact
|
14
|
-
faq FAQ
|
15
|
-
.end
|
16
|
-
|