runeblog 0.2.89 → 0.2.94
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/blog +9 -6
- data/empty_view/themes/standard/{blog → banner}/banner.lt3 +0 -0
- data/empty_view/themes/standard/banner/{about.lt3 → navbar/about.lt3} +0 -0
- data/empty_view/themes/standard/banner/{contact.lt3 → navbar/contact.lt3} +0 -0
- data/empty_view/themes/standard/banner/navbar/faq.lt3 +1 -0
- data/empty_view/themes/standard/banner/{list.data → navbar/list.data} +0 -0
- data/empty_view/themes/standard/blog/generate.lt3 +1 -1
- data/empty_view/themes/standard/global.lt3 +1 -1
- data/empty_view/themes/standard/post/index.lt3 +8 -8
- data/empty_view/themes/standard/widgets/links/links.rb +1 -1
- data/empty_view/themes/standard/widgets/news/news.rb +1 -1
- data/empty_view/themes/standard/widgets/pages/pages.rb +2 -2
- data/empty_view/themes/standard/widgets/pinned/pinned.rb +1 -1
- data/lib/helpers-blog.rb +20 -56
- data/lib/helpers-repl.rb +3 -13
- data/lib/liveblog.rb +17 -37
- data/lib/lowlevel.rb +73 -0
- data/lib/publish.rb +6 -22
- data/lib/repl.rb +5 -15
- data/lib/runeblog.rb +43 -9
- data/lib/runeblog_version.rb +1 -16
- data/test/austin.rb +0 -1
- metadata +8 -9
- data/empty_view/remote/banner/austin-pano.jpg +0 -0
- data/empty_view/themes/standard/banner/faq.lt3 +0 -1
- data/lib/default.rb +0 -31
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7ed9580d074b2ce228aff385bbe22e907a9ae0c330f625aa2d42ee58464a1d3b
|
4
|
+
data.tar.gz: 0ce0642e8b2f0026cca4133916ff0dd3f992bb1ae8cb89e3304d90221d8195a8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 84d30bada582bd3393e075a1cba653ec11e719941c675d1a9753d6dbf921643137e6096205b5120c91f385e6d9cb4a1e823440607b1db5ee23232c87885128bc
|
7
|
+
data.tar.gz: 0b0207066da6493400d66e9473c00659bef4b4169fb26cdbe554d220a59778579bd06207643516a409df39247fa8b263ae77229c16344912e81a8befb0237c6b
|
data/bin/blog
CHANGED
@@ -25,8 +25,8 @@ end
|
|
25
25
|
def get_universal
|
26
26
|
univ = "#{@blog.root}/data/universal.lt3"
|
27
27
|
if yesno("Faster initial setup? (no: edit universal.lt3)")
|
28
|
-
author = ask("Author name: ")
|
29
|
-
site = ask("Site/domain: ")
|
28
|
+
author = ask!("Author name: ")
|
29
|
+
site = ask!("Site/domain: ")
|
30
30
|
# Now stash it...
|
31
31
|
str = File.read(univ)
|
32
32
|
str = str.gsub(/AUTHOR/, author)
|
@@ -41,8 +41,8 @@ def get_global
|
|
41
41
|
if yesno("Faster view setup? (no: edit global.lt3)")
|
42
42
|
view_name = ask("\nFilename: ")
|
43
43
|
@blog.create_view(view_name) # call change_view??
|
44
|
-
title = ask("View title: ")
|
45
|
-
subtitle = ask("Subtitle : ")
|
44
|
+
title = ask!("View title: ")
|
45
|
+
subtitle = ask!("Subtitle : ")
|
46
46
|
gname = "#{@blog.root}/views/#{view_name}/themes/standard/global.lt3"
|
47
47
|
text = File.read(gname)
|
48
48
|
text = text.gsub(/VIEW_NAME/, view_name)
|
@@ -50,7 +50,7 @@ def get_global
|
|
50
50
|
text = text.gsub(/VIEW_SUBTITLE/, subtitle)
|
51
51
|
File.write(gname, text)
|
52
52
|
else
|
53
|
-
view_name = ask("\nFilename: ")
|
53
|
+
view_name = ask!("\nFilename: ")
|
54
54
|
@blog.create_view(view_name) # call change_view??
|
55
55
|
vim_params = '-c ":set hlsearch" -c ":hi Search ctermfg=2 ctermbg=6" +/"\(VIEW_.*\|SITE.*\)"'
|
56
56
|
edit_file(@blog.view.dir/"themes/standard/global.lt3", vim: vim_params)
|
@@ -146,7 +146,10 @@ end
|
|
146
146
|
|
147
147
|
major, minor = RUBY_VERSION.split(".").values_at(0,1)
|
148
148
|
ver = major.to_i*10 + minor.to_i
|
149
|
-
|
149
|
+
unless ver >= 24
|
150
|
+
RubyText.stop
|
151
|
+
abort "Need Ruby 2.4 or greater"
|
152
|
+
end
|
150
153
|
|
151
154
|
include RuneBlog::Helpers # for try_read_config
|
152
155
|
|
File without changes
|
File without changes
|
File without changes
|
@@ -0,0 +1 @@
|
|
1
|
+
.include ../../widgets/pages/faq.lt3
|
File without changes
|
@@ -6,19 +6,19 @@
|
|
6
6
|
. likely be the place.
|
7
7
|
. --------------------------------------------------
|
8
8
|
|
9
|
-
.mixin liveblog
|
10
|
-
. ^ get rid of this later
|
11
|
-
|
12
9
|
.post 0
|
13
10
|
|
14
|
-
.title
|
11
|
+
.title This is my title
|
15
12
|
.pubdate 2019-07-09
|
16
|
-
.views
|
13
|
+
.views stuff
|
17
14
|
.tags
|
18
15
|
|
19
16
|
.teaser
|
20
|
-
|
21
|
-
|
17
|
+
This is only a short excerpt from the top of the blog post.
|
22
18
|
.end
|
23
|
-
|
19
|
+
|
20
|
+
And now we continue the post.
|
21
|
+
Do we have anything to say?
|
22
|
+
|
23
|
+
Apparently not much.
|
24
24
|
|
@@ -4,12 +4,12 @@
|
|
4
4
|
|
5
5
|
class ::RuneBlog::Widget
|
6
6
|
class Pages
|
7
|
-
Type, Title = "pages", "Pages"
|
7
|
+
Type, Title = "pages", "My Pages"
|
8
8
|
|
9
9
|
def initialize(repo)
|
10
10
|
@blog = repo
|
11
11
|
@datafile = "list.data"
|
12
|
-
@lines =
|
12
|
+
@lines = _get_data(@datafile)
|
13
13
|
@data = @lines.map {|x| x.chomp.split(/, */, 2) }
|
14
14
|
end
|
15
15
|
|
data/lib/helpers-blog.rb
CHANGED
@@ -3,20 +3,15 @@ require 'fileutils'
|
|
3
3
|
|
4
4
|
require 'processing'
|
5
5
|
|
6
|
-
|
6
|
+
require 'lowlevel'
|
7
7
|
|
8
|
-
|
9
|
-
log!(enter: __method__, args: [src, dst], level: 2)
|
10
|
-
cmd = "cp #{src} #{dst} 2>/dev/null"
|
11
|
-
rc = system!(cmd)
|
12
|
-
puts " Failed: #{cmd} - from #{caller[0]}" unless rc
|
13
|
-
end
|
8
|
+
module RuneBlog::Helpers
|
14
9
|
|
15
|
-
def
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
10
|
+
def quit_RubyText
|
11
|
+
return unless defined? RubyText
|
12
|
+
sleep 6
|
13
|
+
RubyText.stop
|
14
|
+
exit
|
20
15
|
end
|
21
16
|
|
22
17
|
def get_repo_config
|
@@ -54,7 +49,7 @@ module RuneBlog::Helpers
|
|
54
49
|
puts "Can't read vars file '#{file}': #{err}"
|
55
50
|
puts err.backtrace.join("\n")
|
56
51
|
puts "dir = #{Dir.pwd}"
|
57
|
-
|
52
|
+
stop_RubyText
|
58
53
|
end
|
59
54
|
|
60
55
|
def read_config(file, *syms)
|
@@ -80,7 +75,7 @@ module RuneBlog::Helpers
|
|
80
75
|
puts "Can't read config file '#{file}': #{err}"
|
81
76
|
puts err.backtrace.join("\n")
|
82
77
|
puts "dir = #{Dir.pwd}"
|
83
|
-
|
78
|
+
stop_RubyText
|
84
79
|
end
|
85
80
|
|
86
81
|
def try_read_config(file, hash)
|
@@ -98,26 +93,27 @@ module RuneBlog::Helpers
|
|
98
93
|
end
|
99
94
|
end
|
100
95
|
|
101
|
-
def
|
96
|
+
def retrieve_views # read from filesystem
|
102
97
|
log!(enter: __method__, level: 3)
|
103
98
|
dirs = subdirs("#@root/views/").sort
|
104
99
|
dirs.map {|name| RuneBlog::View.new(name) }
|
105
100
|
end
|
106
101
|
|
107
|
-
def write_repo_config(root: "#{Dir.pwd}/.blogs", view:
|
102
|
+
def write_repo_config(root: "#{Dir.pwd}/.blogs", view: nil, editor: "/usr/local/bin/vim")
|
103
|
+
view ||= File.read("#{root}/data/VIEW").chomp rescue "[no view]"
|
108
104
|
File.write(root + "/data/ROOT", root + "\n")
|
109
105
|
File.write(root + "/data/VIEW", view.to_s + "\n")
|
110
106
|
File.write(root + "/data/EDITOR", editor + "\n")
|
111
107
|
end
|
112
108
|
|
113
|
-
def new_dotfile(root: ".blogs", current_view: "test_view", editor: "vi")
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
end
|
109
|
+
# def new_dotfile(root: ".blogs", current_view: "test_view", editor: "vi")
|
110
|
+
# log!(enter: __method__, args: [root, current_view, editor], level: 3)
|
111
|
+
# root = Dir.pwd + "/" + root
|
112
|
+
# x = OpenStruct.new
|
113
|
+
# x.root, x.current_view, x.editor = root, current_view, editor
|
114
|
+
# write_config(x, root + "/" + RuneBlog::ConfigFile)
|
115
|
+
# write_repo_config
|
116
|
+
# end
|
121
117
|
|
122
118
|
def new_sequence
|
123
119
|
log!(enter: __method__, level: 3)
|
@@ -145,38 +141,6 @@ module RuneBlog::Helpers
|
|
145
141
|
files
|
146
142
|
end
|
147
143
|
|
148
|
-
def create_dirs(*dirs)
|
149
|
-
log!(enter: __method__, args: [*dirs], level: 3)
|
150
|
-
dirs.each do |dir|
|
151
|
-
dir = dir.to_s # symbols allowed
|
152
|
-
next if Dir.exist?(dir)
|
153
|
-
cmd = "mkdir -p #{dir} >/dev/null"
|
154
|
-
result = system!(cmd)
|
155
|
-
raise CantCreateDir(dir) unless result
|
156
|
-
end
|
157
|
-
end
|
158
|
-
|
159
|
-
def interpolate(str, bind)
|
160
|
-
log!(enter: __method__, args: [str, bind], level: 3)
|
161
|
-
wrap = "<<-EOS\n#{str}\nEOS"
|
162
|
-
eval wrap, bind
|
163
|
-
end
|
164
|
-
|
165
|
-
def error(err) # Hmm, this is duplicated
|
166
|
-
log!(str: "duplicated method", enter: __method__, args: [err], level: 2)
|
167
|
-
str = "\n Error: #{err}"
|
168
|
-
puts str
|
169
|
-
puts err.backtrace.join("\n")
|
170
|
-
end
|
171
|
-
|
172
|
-
def dump(obj, name)
|
173
|
-
log!(enter: __method__, args: [obj, name], level: 3)
|
174
|
-
File.write(name, obj)
|
175
|
-
end
|
176
144
|
end
|
177
145
|
|
178
|
-
def dump(obj, name) # FIXME scope
|
179
|
-
log!(str: "scope problem", enter: __method__, args: [obj, name], level: 3)
|
180
|
-
File.write(name, obj)
|
181
|
-
end
|
182
146
|
|
data/lib/helpers-repl.rb
CHANGED
@@ -109,26 +109,16 @@ module RuneBlog::REPL
|
|
109
109
|
end
|
110
110
|
meth = found || :cmd_INVALID
|
111
111
|
params = cmd if meth == :cmd_INVALID
|
112
|
-
# puts "choose: #{[meth, params].inspect}"
|
113
112
|
[meth, params]
|
114
113
|
end
|
115
114
|
|
116
|
-
def error(err) # Hmm, this is duplicated
|
117
|
-
str = "\n Error: #{err}"
|
118
|
-
puts str
|
119
|
-
puts err.backtrace.join("\n")
|
120
|
-
end
|
121
|
-
|
122
115
|
def ask(prompt, meth = :to_s)
|
123
116
|
print prompt
|
124
|
-
|
125
|
-
str.chomp!
|
126
|
-
str.send(meth)
|
117
|
+
gets.chomp.send(meth)
|
127
118
|
end
|
128
119
|
|
129
|
-
def
|
130
|
-
|
131
|
-
gets.chomp.upcase[0] == "Y"
|
120
|
+
def ask!(prompt, meth = :to_s)
|
121
|
+
ask(fx(prompt, :bold), meth)
|
132
122
|
end
|
133
123
|
|
134
124
|
def reset_output(initial = "")
|
data/lib/liveblog.rb
CHANGED
@@ -7,6 +7,9 @@ require 'runeblog'
|
|
7
7
|
require 'pathmagic'
|
8
8
|
require 'processing'
|
9
9
|
|
10
|
+
# top = Livetext::Path + "/../plugin/liveblog/"
|
11
|
+
# eval(File.read("#{top}/testing.rb"))
|
12
|
+
|
10
13
|
|
11
14
|
def init_liveblog # FIXME - a lot of this logic sucks
|
12
15
|
dir = Dir.pwd.sub(/\.blogs.*/, "")
|
@@ -44,7 +47,7 @@ end
|
|
44
47
|
|
45
48
|
def post_trailer
|
46
49
|
perma = _var("publish.proto") + "://" + _var("publish.server") +
|
47
|
-
"/" + _var("publish.path") + "/
|
50
|
+
"/" + _var("publish.path") + "/" + _var("post.aslug") +
|
48
51
|
".html"
|
49
52
|
tags = _var("post.tags")
|
50
53
|
if tags.empty?
|
@@ -85,9 +88,10 @@ def code
|
|
85
88
|
end
|
86
89
|
|
87
90
|
def _read_navbar_data
|
88
|
-
|
91
|
+
vdir = @blog.root/:views/@blog.view
|
92
|
+
dir = vdir/"themes/standard/banner/navbar/"
|
89
93
|
datafile = dir/"list.data"
|
90
|
-
|
94
|
+
_get_data(datafile)
|
91
95
|
end
|
92
96
|
|
93
97
|
def banner
|
@@ -97,6 +101,7 @@ def banner
|
|
97
101
|
high = 250
|
98
102
|
str2 = ""
|
99
103
|
navbar = nil
|
104
|
+
vdir = @blog.root/:views/@blog.view
|
100
105
|
lines = _body.to_a
|
101
106
|
|
102
107
|
lines.each do |line|
|
@@ -130,15 +135,9 @@ def banner
|
|
130
135
|
end
|
131
136
|
str2 << "<td>" + File.read(file) + "</td>" + "\n"
|
132
137
|
when "navbar"
|
133
|
-
|
134
|
-
_make_navbar # horiz is default
|
135
|
-
file = "banner/navbar.html"
|
136
|
-
navbar = File.read(file)
|
138
|
+
navbar = _make_navbar # horiz is default
|
137
139
|
when "vnavbar"
|
138
|
-
|
139
|
-
_make_navbar(:vert)
|
140
|
-
file = "banner/vnavbar.html"
|
141
|
-
navbar = File.read(file)
|
140
|
+
navbar = _make_navbar(:vert)
|
142
141
|
when "break"
|
143
142
|
str2 << " </tr>\n <tr>" + "\n"
|
144
143
|
else
|
@@ -347,7 +346,7 @@ def pin
|
|
347
346
|
pinned.each do |pinview|
|
348
347
|
dir = @blog.root/:views/pinview/"themes/standard/widgets/pinned/"
|
349
348
|
datafile = dir/"list.data"
|
350
|
-
pins =
|
349
|
+
pins = _get_data?(datafile)
|
351
350
|
pins << "#{@meta.num} #{@meta.title}\n"
|
352
351
|
pins.uniq!
|
353
352
|
File.open(datafile, "w") {|out| pins.each {|pin| out.puts pin } }
|
@@ -498,25 +497,10 @@ def _load_local(widget)
|
|
498
497
|
rescue => err
|
499
498
|
STDERR.puts err.to_s
|
500
499
|
STDERR.puts err.backtrace.join("\n")
|
500
|
+
sleep 6; RubyText.stop
|
501
501
|
exit
|
502
502
|
end
|
503
503
|
|
504
|
-
# def pinned_rebuild
|
505
|
-
# view = @blog.view
|
506
|
-
# view = _args[0] unless _args.empty?
|
507
|
-
# Dir.chdir(@blog.root/:views/view/"themes/standard/") do
|
508
|
-
# wtag = "widgets/pinned"
|
509
|
-
# code = _load_local("pinned")
|
510
|
-
# if code
|
511
|
-
# Dir.chdir(wtag) do
|
512
|
-
# widget = code.new(@blog)
|
513
|
-
# widget.build
|
514
|
-
# end
|
515
|
-
# # _include_file wtag/"pinned-card.html"
|
516
|
-
# end
|
517
|
-
# end
|
518
|
-
# end
|
519
|
-
|
520
504
|
def _handle_standard_widget(tag)
|
521
505
|
wtag = :widgets/tag
|
522
506
|
code = _load_local(tag)
|
@@ -564,6 +548,7 @@ def sidebar
|
|
564
548
|
rescue => err
|
565
549
|
puts "err = #{err}"
|
566
550
|
puts err.backtrace.join("\n")
|
551
|
+
sleep 6; RubyText.stop
|
567
552
|
exit
|
568
553
|
end
|
569
554
|
|
@@ -686,20 +671,20 @@ def _make_navbar(orient = :horiz)
|
|
686
671
|
</td></tr></table>
|
687
672
|
HTML
|
688
673
|
|
689
|
-
html_file = @blog.root/:views/@blog.view/"themes/standard/banner"/name
|
674
|
+
html_file = @blog.root/:views/@blog.view/"themes/standard/banner/navbar"/name
|
690
675
|
output = File.new(html_file, "w")
|
691
676
|
output.puts start
|
692
677
|
lines = _read_navbar_data
|
693
678
|
lines = ["index Home"] + lines unless _args.include?("nohome")
|
694
679
|
lines.each do |line|
|
695
680
|
basename, cdata = line.chomp.strip.split(" ", 2)
|
696
|
-
full = :banner/basename+".html"
|
681
|
+
full = :banner/:navbar/basename+".html"
|
697
682
|
href_main = _main(full)
|
698
683
|
if basename == "index" # special case
|
699
684
|
output.puts %[#{li1} <a class="nav-link" href="index.html">#{cdata}<span class="sr-only">(current)</span></a> #{li2}]
|
700
685
|
else
|
701
|
-
dir = @blog.root/:views/@blog.view/"themes/standard/banner"
|
702
|
-
dest = vdir/"remote/banner"/basename+".html"
|
686
|
+
dir = @blog.root/:views/@blog.view/"themes/standard/banner/navbar"
|
687
|
+
dest = vdir/"remote/banner/navbar"/basename+".html"
|
703
688
|
preprocess cwd: dir, src: basename, dst: dest, call: ".nopara" # , debug: true
|
704
689
|
output.puts %[#{li1} <a class="nav-link" #{href_main}>#{cdata}</a> #{li2}]
|
705
690
|
end
|
@@ -768,11 +753,6 @@ def _post_lookup(postid) # side-effect
|
|
768
753
|
vp
|
769
754
|
end
|
770
755
|
|
771
|
-
def _interpolate(str, context) # FIXME move this later
|
772
|
-
wrapped = "%[" + str.dup + "]" # could fail...
|
773
|
-
eval(wrapped, context)
|
774
|
-
end
|
775
|
-
|
776
756
|
def _card_generic(card_title:, middle:, extra: "")
|
777
757
|
front = <<-HTML
|
778
758
|
<div class="card #{extra} mb-3">
|
data/lib/lowlevel.rb
ADDED
@@ -0,0 +1,73 @@
|
|
1
|
+
|
2
|
+
def dump(obj, name)
|
3
|
+
File.write(name, obj)
|
4
|
+
end
|
5
|
+
|
6
|
+
def system!(str, show: false)
|
7
|
+
log!(enter: __method__, args: [str], level: 2)
|
8
|
+
STDERR.puts str if show
|
9
|
+
rc = system(str)
|
10
|
+
return rc if rc
|
11
|
+
STDERR.puts "FAILED: #{str.inspect}"
|
12
|
+
STDERR.puts "\ncaller = \n#{caller.join("\n ")}\n"
|
13
|
+
if defined?(RubyText)
|
14
|
+
sleep 6
|
15
|
+
RubyText.stop
|
16
|
+
exit
|
17
|
+
end
|
18
|
+
return rc
|
19
|
+
end
|
20
|
+
|
21
|
+
def _get_data?(file) # File need not exist
|
22
|
+
if File.exist?(file)
|
23
|
+
_get_data(file)
|
24
|
+
else
|
25
|
+
[]
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def _get_data(file)
|
30
|
+
lines = File.readlines(file)
|
31
|
+
lines.reject! {|line| line[0] == "-" } # allow rejection of lines
|
32
|
+
lines = lines.map do |line|
|
33
|
+
line.sub(/ *# .*$/, "") # allow trailing comments
|
34
|
+
end
|
35
|
+
lines
|
36
|
+
end
|
37
|
+
|
38
|
+
def copy(src, dst)
|
39
|
+
log!(enter: __method__, args: [src, dst], level: 2)
|
40
|
+
cmd = "cp #{src} #{dst} 2>/dev/null"
|
41
|
+
system!(cmd)
|
42
|
+
end
|
43
|
+
|
44
|
+
def copy!(src, dst)
|
45
|
+
log!(enter: __method__, args: [src, dst], level: 2)
|
46
|
+
cmd = "cp -r #{src} #{dst} 2>/dev/null"
|
47
|
+
system!(cmd)
|
48
|
+
end
|
49
|
+
|
50
|
+
def create_dirs(*dirs)
|
51
|
+
log!(enter: __method__, args: [*dirs], level: 3)
|
52
|
+
dirs.each do |dir|
|
53
|
+
dir = dir.to_s # symbols allowed
|
54
|
+
next if Dir.exist?(dir)
|
55
|
+
cmd = "mkdir -p #{dir} >/dev/null"
|
56
|
+
result = system!(cmd)
|
57
|
+
raise CantCreateDir(dir) unless result
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
def interpolate(str, bind)
|
62
|
+
log!(enter: __method__, args: [str, bind], level: 3)
|
63
|
+
wrap = "<<-EOS\n#{str}\nEOS"
|
64
|
+
eval wrap, bind
|
65
|
+
end
|
66
|
+
|
67
|
+
def error(err)
|
68
|
+
log!(str: err, enter: __method__, args: [err], level: 2)
|
69
|
+
str = "\n Error: #{err}"
|
70
|
+
puts str
|
71
|
+
puts err.backtrace.join("\n")
|
72
|
+
end
|
73
|
+
|
data/lib/publish.rb
CHANGED
@@ -37,31 +37,15 @@ class RuneBlog::Publishing
|
|
37
37
|
url = "#@proto://#@server/#@path" # /#{vname}"
|
38
38
|
end
|
39
39
|
|
40
|
-
def
|
41
|
-
log!(enter: __method__,
|
42
|
-
rc = system(str)
|
43
|
-
rc
|
44
|
-
end
|
45
|
-
|
46
|
-
def publish(files, assets=[])
|
47
|
-
log!(enter: __method__, args: [files, assets], level: 1)
|
40
|
+
def publish
|
41
|
+
log!(enter: __method__, level: 1)
|
48
42
|
dir = @docroot/@path
|
49
43
|
view_name = @blog.view.name
|
50
44
|
viewpath = dir # /view_name
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
cmd = "scp -r #{file} #{dest} >/dev/null 2>/tmp/wtf"
|
56
|
-
debug "cmd = #{cmd.inspect} - see /tmp/wtf"
|
57
|
-
result = system!(cmd) || puts("\n Could not copy #{file} to #{dest}")
|
58
|
-
end
|
59
|
-
unless assets.empty?
|
60
|
-
cmd = "scp #{assets.join(' ')} #@user@#@server:#{viewpath}/assets >/dev/null 2>/tmp/wtf2"
|
61
|
-
result = system!(cmd)
|
62
|
-
raise PublishError if !result
|
63
|
-
end
|
64
|
-
dump(files, "#{@blog.view.dir}/last_published")
|
45
|
+
# FIXME rsync doesn't work
|
46
|
+
cmd = "rsync -r -z #{@blog.root}/views/#{@blog.view}/remote/ #@user@#@server:#{viewpath}/"
|
47
|
+
system!(cmd)
|
48
|
+
dump("#{@blog.view} at #{Time.now}", "#{@blog.view.dir}/last_published")
|
65
49
|
true
|
66
50
|
end
|
67
51
|
|
data/lib/repl.rb
CHANGED
@@ -39,6 +39,7 @@ module RuneBlog::REPL
|
|
39
39
|
|
40
40
|
def cmd_config(arg, testing = false)
|
41
41
|
hash = {"global.lt3 Global configuration" => "global.lt3",
|
42
|
+
"banner/top.lt3 Text portion of banner" => "banner/top.lt3",
|
42
43
|
"blog/generate.lt3 Generator for view (usu not edited)" => "blog/generate.lt3",
|
43
44
|
".... head.lt3 HEAD info for view" => "blog/head.lt3",
|
44
45
|
".... banner.lt3 banner description" => "blog/banner.lt3",
|
@@ -75,10 +76,10 @@ module RuneBlog::REPL
|
|
75
76
|
end
|
76
77
|
|
77
78
|
def _manage_navbar(arg, testing = false) # cloned from manage_pages
|
78
|
-
dir = @blog.view.dir/"themes/standard/navbar"
|
79
|
+
dir = @blog.view.dir/"themes/standard/banner/navbar"
|
79
80
|
files = Dir.entries(dir) - %w[. .. navbar.lt3]
|
80
|
-
new_item = " [New item] "
|
81
81
|
main_file = "[ navbar.lt3 ]"
|
82
|
+
new_item = " [New item] "
|
82
83
|
files = [main_file] + files + [new_item]
|
83
84
|
num, fname = STDSCR.menu(title: "Edit navbar:", items: files)
|
84
85
|
return if fname.nil?
|
@@ -113,7 +114,7 @@ module RuneBlog::REPL
|
|
113
114
|
dir = @blog.view.dir/"themes/standard/widgets/pages"
|
114
115
|
# Assume child files already generated (and list.data??)
|
115
116
|
data = dir/"list.data"
|
116
|
-
lines =
|
117
|
+
lines = _get_data?(data)
|
117
118
|
hash = {}
|
118
119
|
lines.each do |line|
|
119
120
|
url, name = line.chomp.split(",")
|
@@ -192,19 +193,8 @@ module RuneBlog::REPL
|
|
192
193
|
return @out
|
193
194
|
end
|
194
195
|
|
195
|
-
# Need to check dirty/clean status first
|
196
|
-
dirty, all, assets = @blog.view.publishable_files
|
197
|
-
files = dirty
|
198
|
-
if dirty.empty?
|
199
|
-
puts fx("\n No files are out of date." + " "*20, :bold)
|
200
|
-
print " Publish anyway? "
|
201
|
-
yn = RubyText.gets.chomp
|
202
|
-
files = all if yn == "y"
|
203
|
-
end
|
204
|
-
return @out if files.empty?
|
205
|
-
|
206
196
|
ret = RubyText.spinner(label: " Publishing... ") do
|
207
|
-
@blog.view.publisher.publish
|
197
|
+
@blog.view.publisher.publish
|
208
198
|
end
|
209
199
|
return @out unless ret
|
210
200
|
|
data/lib/runeblog.rb
CHANGED
@@ -10,7 +10,6 @@ require 'logging'
|
|
10
10
|
|
11
11
|
require 'runeblog_version'
|
12
12
|
require 'helpers-blog'
|
13
|
-
require 'default'
|
14
13
|
require 'view'
|
15
14
|
require 'publish'
|
16
15
|
require 'post'
|
@@ -48,6 +47,34 @@ class RuneBlog
|
|
48
47
|
|
49
48
|
include Helpers
|
50
49
|
|
50
|
+
class Default
|
51
|
+
|
52
|
+
# This will all become much more generic later.
|
53
|
+
|
54
|
+
def RuneBlog.post_template(num: 0, title: "No title", date: nil, view: "test_view",
|
55
|
+
teaser: "No teaser", body: "No body", tags: ["untagged"],
|
56
|
+
views: [], back: "javascript:history.go(-1)", home: "no url")
|
57
|
+
log!(enter: __method__, args: [num, title, date, view, teaser, body, tags, views, back, home], level: 3)
|
58
|
+
viewlist = (views + [view.to_s]).join(" ")
|
59
|
+
taglist = ".tags " + tags.join(" ")
|
60
|
+
|
61
|
+
<<~TEXT
|
62
|
+
.post #{num}
|
63
|
+
|
64
|
+
.title #{title}
|
65
|
+
.pubdate #{date}
|
66
|
+
.views #{viewlist}
|
67
|
+
#{taglist}
|
68
|
+
|
69
|
+
.teaser
|
70
|
+
#{teaser}
|
71
|
+
.end
|
72
|
+
#{body}
|
73
|
+
TEXT
|
74
|
+
end
|
75
|
+
|
76
|
+
end
|
77
|
+
|
51
78
|
def _tmp_error(err) # FIXME move to helpers
|
52
79
|
out = "/tmp/blog#{rand(100)}.txt"
|
53
80
|
File.open(out, "w") do |f|
|
@@ -68,7 +95,7 @@ class RuneBlog
|
|
68
95
|
create_dirs(:data, :drafts, :views, :posts)
|
69
96
|
new_sequence
|
70
97
|
end
|
71
|
-
copy_data(:config, repo_root/:data)
|
98
|
+
copy_data(:config, repo_root/:data) unless File.exist?(repo_root/"data/VIEW")
|
72
99
|
write_repo_config(root: repo_root)
|
73
100
|
@blog = self.new
|
74
101
|
@blog
|
@@ -90,10 +117,11 @@ class RuneBlog
|
|
90
117
|
self.class.blog = self # Weird. Like a singleton - dumbass circular dependency?
|
91
118
|
|
92
119
|
@root = Dir.pwd/root_rel
|
93
|
-
|
120
|
+
# copy_data(:config, @root/:data) unless File.exist?(@root/"data/VIEW")
|
94
121
|
write_repo_config(root: @root)
|
95
122
|
get_repo_config
|
96
|
-
@views =
|
123
|
+
@views = retrieve_views
|
124
|
+
self.view = File.read(@root/"data/VIEW").chomp
|
97
125
|
md = Dir.pwd.match(%r[.*/views/(.*?)/])
|
98
126
|
if md
|
99
127
|
@view_name = md[1]
|
@@ -209,6 +237,9 @@ class RuneBlog
|
|
209
237
|
def view=(arg)
|
210
238
|
log!(enter: __method__, args: [arg], level: 2)
|
211
239
|
case arg
|
240
|
+
when "[no view]"
|
241
|
+
# puts "Warning: No current view set"
|
242
|
+
@view = nil
|
212
243
|
when RuneBlog::View
|
213
244
|
@view = arg
|
214
245
|
_set_publisher
|
@@ -472,7 +503,9 @@ class RuneBlog
|
|
472
503
|
preprocess cwd: vdir/"themes/standard", deps: depend, force: true,
|
473
504
|
src: "blog/generate.lt3", dst: vdir/:remote/"index.html",
|
474
505
|
call: ".nopara"
|
506
|
+
copy!("#{vdir}/themes/standard/banner/*", "#{vdir}/remote/banner/") # includes navbar/
|
475
507
|
copy("#{vdir}/assets/*", "#{vdir}/remote/assets/")
|
508
|
+
# rebuild widgets
|
476
509
|
copy_widget_html(view)
|
477
510
|
rescue => err
|
478
511
|
STDERR.puts err
|
@@ -484,8 +517,8 @@ class RuneBlog
|
|
484
517
|
log!(enter: __method__, args: [draft], level: 2)
|
485
518
|
# FIXME dumb code
|
486
519
|
view_line = File.readlines(draft).grep(/^.views /)
|
487
|
-
raise "More than one .views call
|
488
|
-
raise "No .views call
|
520
|
+
raise "More than one .views call in #{draft}" if view_line.size > 1
|
521
|
+
raise "No .views call in #{draft}" if view_line.size < 1
|
489
522
|
view_line = view_line.first
|
490
523
|
views = view_line[7..-1].split
|
491
524
|
views.uniq
|
@@ -593,10 +626,11 @@ class RuneBlog
|
|
593
626
|
preprocess cwd: @theme/:post, src: "generate.lt3", force: true,
|
594
627
|
dst: remote/ahtml, copy: @theme/:post,
|
595
628
|
call: ".nopara" # , debug: true
|
629
|
+
# copy(remote/ahtml, remote/permalink/ahtml)
|
596
630
|
# FIXME dependencies?
|
597
|
-
|
598
|
-
|
599
|
-
|
631
|
+
# preprocess cwd: @theme/:post, src: "permalink.lt3",
|
632
|
+
# dst: remote/:permalink/ahtml,
|
633
|
+
# mix: "liveblog" # , debug: true
|
600
634
|
copy_widget_html(view_name)
|
601
635
|
rescue => err
|
602
636
|
_tmp_error(err)
|
data/lib/runeblog_version.rb
CHANGED
@@ -3,7 +3,7 @@ if !defined?(RuneBlog::Path)
|
|
3
3
|
# if ! (Object.constants.include?(:RuneBlog) && RuneBlog.constants.include?(:Path))
|
4
4
|
|
5
5
|
class RuneBlog
|
6
|
-
VERSION = "0.2.
|
6
|
+
VERSION = "0.2.94"
|
7
7
|
|
8
8
|
path = Gem.find_files("runeblog").grep(/runeblog-/).first
|
9
9
|
Path = File.dirname(path)
|
@@ -41,21 +41,6 @@ def make_exception(sym, str)
|
|
41
41
|
end
|
42
42
|
end
|
43
43
|
|
44
|
-
def system!(str, show: false)
|
45
|
-
log!(enter: __method__, args: [str], level: 2)
|
46
|
-
STDERR.puts str if show
|
47
|
-
rc = system(str)
|
48
|
-
if rc
|
49
|
-
return rc
|
50
|
-
else
|
51
|
-
STDERR.puts "FAILED: #{str.inspect}"
|
52
|
-
STDERR.puts "\ncaller = \n#{caller.join("\n ")}\n"
|
53
|
-
exit
|
54
|
-
return rc
|
55
|
-
end
|
56
|
-
rc
|
57
|
-
end
|
58
|
-
|
59
44
|
def prefix(num)
|
60
45
|
log!(enter: __method__, args: [num], level: 3)
|
61
46
|
"#{'%04d' % num.to_i}"
|
data/test/austin.rb
CHANGED
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.94
|
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-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: livetext
|
@@ -91,7 +91,6 @@ files:
|
|
91
91
|
- empty_view/assets/sky2.jpg
|
92
92
|
- empty_view/posts/GIT_IS_DUMB
|
93
93
|
- empty_view/remote/assets/GIT_IS_DUMB
|
94
|
-
- empty_view/remote/banner/austin-pano.jpg
|
95
94
|
- empty_view/remote/etc/GIT_IS_DUMB
|
96
95
|
- empty_view/remote/permalink/GIT_IS_DUMB
|
97
96
|
- empty_view/remote/widgets/ad/GIT_IS_DUMB
|
@@ -100,12 +99,12 @@ files:
|
|
100
99
|
- empty_view/remote/widgets/pages/GIT_IS_DUMB
|
101
100
|
- empty_view/remote/widgets/pinned/GIT_IS_DUMB
|
102
101
|
- empty_view/themes/standard/README
|
103
|
-
- empty_view/themes/standard/banner/
|
104
|
-
- empty_view/themes/standard/banner/
|
105
|
-
- empty_view/themes/standard/banner/
|
106
|
-
- empty_view/themes/standard/banner/
|
102
|
+
- empty_view/themes/standard/banner/banner.lt3
|
103
|
+
- empty_view/themes/standard/banner/navbar/about.lt3
|
104
|
+
- empty_view/themes/standard/banner/navbar/contact.lt3
|
105
|
+
- empty_view/themes/standard/banner/navbar/faq.lt3
|
106
|
+
- empty_view/themes/standard/banner/navbar/list.data
|
107
107
|
- empty_view/themes/standard/banner/top.lt3
|
108
|
-
- empty_view/themes/standard/blog/banner.lt3
|
109
108
|
- empty_view/themes/standard/blog/generate.lt3
|
110
109
|
- empty_view/themes/standard/blog/head.lt3
|
111
110
|
- empty_view/themes/standard/blog/index.lt3
|
@@ -176,7 +175,6 @@ files:
|
|
176
175
|
- empty_view/themes/standard/widgets/tag-cloud/tag-cloud.lt3
|
177
176
|
- empty_view/themes/standard/widgets/tag-cloud/tag-cloud.rb
|
178
177
|
- lib/Javascript.stuff
|
179
|
-
- lib/default.rb
|
180
178
|
- lib/exper/2svg.lt3
|
181
179
|
- lib/exper/callout.js
|
182
180
|
- lib/exper/fbtw-js
|
@@ -188,6 +186,7 @@ files:
|
|
188
186
|
- lib/helpers-repl.rb
|
189
187
|
- lib/liveblog.rb
|
190
188
|
- lib/logging.rb
|
189
|
+
- lib/lowlevel.rb
|
191
190
|
- lib/pathmagic.rb
|
192
191
|
- lib/post.rb
|
193
192
|
- lib/processing.rb
|
Binary file
|
@@ -1 +0,0 @@
|
|
1
|
-
.include ../widgets/pages/faq.lt3
|
data/lib/default.rb
DELETED
@@ -1,31 +0,0 @@
|
|
1
|
-
class RuneBlog::Default
|
2
|
-
|
3
|
-
# This will all become much more generic later.
|
4
|
-
|
5
|
-
def RuneBlog.post_template(num: 0, title: "No title", date: nil, view: "test_view",
|
6
|
-
teaser: "No teaser", body: "No body", tags: ["untagged"],
|
7
|
-
views: [], back: "javascript:history.go(-1)", home: "no url")
|
8
|
-
log!(enter: __method__, args: [num, title, date, view, teaser, body, tags, views, back, home], level: 3)
|
9
|
-
viewlist = (views + [view.to_s]).join(" ")
|
10
|
-
taglist = ".tags " + tags.join(" ")
|
11
|
-
|
12
|
-
# .mixin liveblog
|
13
|
-
# . ^ get rid of this later
|
14
|
-
|
15
|
-
<<-TEXT
|
16
|
-
.post #{num}
|
17
|
-
|
18
|
-
.title #{title}
|
19
|
-
.pubdate #{date}
|
20
|
-
.views #{viewlist}
|
21
|
-
#{taglist}
|
22
|
-
|
23
|
-
.teaser
|
24
|
-
#{teaser}
|
25
|
-
.end
|
26
|
-
#{body}
|
27
|
-
TEXT
|
28
|
-
|
29
|
-
end
|
30
|
-
|
31
|
-
end
|