runeblog 0.2.99 → 0.3.05
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 +24 -18
- data/data/features.txt +18 -0
- data/data/global.lt3 +6 -24
- data/data/universal.lt3 +2 -5
- data/empty_view/remote/banner/navbar/GIT_IS_DUMB +0 -0
- data/empty_view/settings/features.txt +18 -0
- data/empty_view/settings/publish.txt +5 -0
- data/empty_view/settings/recent.txt +11 -0
- data/empty_view/settings/view.txt +4 -0
- data/empty_view/themes/standard/banner/top.lt3 +2 -2
- data/lib/helpers-blog.rb +26 -20
- data/lib/helpers-repl.rb +3 -41
- data/lib/liveblog.rb +11 -11
- data/lib/lowlevel.rb +9 -0
- data/lib/publish.rb +2 -0
- data/lib/repl.rb +104 -177
- data/lib/runeblog.rb +106 -48
- data/lib/runeblog_version.rb +1 -1
- data/lib/view.rb +6 -0
- data/runeblog.gemspec +1 -1
- data/test/austin.rb +15 -18
- metadata +12 -8
- data/empty_view/themes/standard/global.lt3 +0 -32
- data/empty_view/themes/standard/recent.txt +0 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4c6fa9176107c58120ebb4753221228bfe0d031f08f21a20dc2f7f86d6b2c6af
|
4
|
+
data.tar.gz: c3bf5183cbeddb2cc3c9022695fcd9aa9ba50cf0e5364afd4632fac8a837e315
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0bb8f0fb6b1a59ac69eabdcb0c50a20bf20308e4155fb1d305be5a19ab8eece7ffa7aecdbff3d4cfc48000dbbb891c3a2777068608a1e28750d8751b39a39af8
|
7
|
+
data.tar.gz: 113a34a9fba90a9f8b9d9bc47cab433b00359a0c8f159b8fbf807e7609b50056ebf4e0e368d6b369256083a7a6c25316dd2c710297ea4bbccfa7fadd85bbf458
|
data/bin/blog
CHANGED
@@ -25,13 +25,14 @@ 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)
|
33
33
|
str = str.gsub(/SITE_DOMAIN/, site)
|
34
34
|
File.write(univ, str)
|
35
|
+
# STDERR.puts "------ universal ------\n#{`cat #{univ}`}\n------------------------"
|
35
36
|
else
|
36
37
|
vim_params = '-c ":set hlsearch" -c ":hi Search ctermfg=2 ctermbg=6" +/"\(AUTHOR.*\|SITE.*\)"'
|
37
38
|
edit_file(univ, vim: vim_params)
|
@@ -40,18 +41,20 @@ end
|
|
40
41
|
|
41
42
|
def get_global
|
42
43
|
if yesno("Faster view setup? (no: edit global.lt3)")
|
43
|
-
view_name = ask!("\
|
44
|
+
view_name = ask!("\n Filename: ")
|
44
45
|
@blog.create_view(view_name) # call change_view??
|
45
|
-
title = ask!("View title: ")
|
46
|
-
subtitle = ask!("Subtitle : ")
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
46
|
+
title = ask!(" View title: ")
|
47
|
+
subtitle = ask!(" Subtitle : ")
|
48
|
+
domain = ask!(" Domain : ")
|
49
|
+
|
50
|
+
vfile = "#{@blog.root}/views/#{view_name}/settings/view.txt"
|
51
|
+
hash = {/VIEW_NAME/ => view_name,
|
52
|
+
/VIEW_TITLE/ => title,
|
53
|
+
/VIEW_SUBTITLE/ => subtitle,
|
54
|
+
/VIEW_DOMAIN/ => domain}
|
55
|
+
@blog.complete_file(vfile, nil, hash)
|
53
56
|
else
|
54
|
-
view_name = ask!("\
|
57
|
+
view_name = ask!("\n Filename: ")
|
55
58
|
@blog.create_view(view_name) # call change_view??
|
56
59
|
vim_params = '-c ":set hlsearch" -c ":hi Search ctermfg=2 ctermbg=6" +/"\(VIEW_.*\|SITE.*\)"'
|
57
60
|
edit_file(@blog.view.dir/"themes/standard/global.lt3", vim: vim_params)
|
@@ -63,6 +66,8 @@ def get_started
|
|
63
66
|
puts " First choose your editor."
|
64
67
|
@blog.editor = pick_editor
|
65
68
|
File.write("#{@blog.root}/data/EDITOR", @blog.editor)
|
69
|
+
print " Default editor is "
|
70
|
+
puts fx(@blog.editor, :bold)
|
66
71
|
|
67
72
|
get_universal
|
68
73
|
# Now create a custom global.lt3
|
@@ -87,11 +92,11 @@ def mainloop
|
|
87
92
|
info = @blog.view || "no view"
|
88
93
|
print fx("[#{info}] ", Red, :bold)
|
89
94
|
cmd = STDSCR.gets(history: @cmdhist, tab: @tabcom)
|
90
|
-
cmd_quit
|
95
|
+
cmd_quit if cmd.nil? # ^D
|
91
96
|
cmd.chomp!
|
92
97
|
return if cmd.empty? # CR does nothing
|
93
|
-
|
94
|
-
ret
|
98
|
+
invoking = RuneBlog::REPL.choose_method(cmd)
|
99
|
+
ret = send(*invoking)
|
95
100
|
rescue => err
|
96
101
|
puts err
|
97
102
|
end
|
@@ -103,7 +108,7 @@ def cmdline_preview
|
|
103
108
|
end
|
104
109
|
|
105
110
|
def cmdline_publish
|
106
|
-
abort "
|
111
|
+
abort "Not implemented yet"
|
107
112
|
_need_view
|
108
113
|
end
|
109
114
|
|
@@ -149,7 +154,8 @@ major, minor = RUBY_VERSION.split(".").values_at(0,1)
|
|
149
154
|
ver = major.to_i*10 + minor.to_i
|
150
155
|
unless ver >= 24
|
151
156
|
RubyText.stop
|
152
|
-
|
157
|
+
sleep 0.2
|
158
|
+
abort "Needs Ruby 2.4 or greater"
|
153
159
|
end
|
154
160
|
|
155
161
|
include RuneBlog::Helpers # for try_read_config
|
@@ -191,7 +197,7 @@ puts fx("\n RuneBlog", :bold), fx(" v #{RuneBlog::VERSION}\n", Red)
|
|
191
197
|
|
192
198
|
loop { mainloop }
|
193
199
|
|
194
|
-
system("tput clear")
|
200
|
+
# system("tput clear")
|
195
201
|
sleep 0.2
|
196
202
|
puts
|
197
203
|
|
data/data/features.txt
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
# 0 = disabled (installed but disabled)
|
2
|
+
# 1 = enabled (implies installed)
|
3
|
+
# x = excluded (not installed; does it even exist?)
|
4
|
+
|
5
|
+
reddit 0 # autopost, embed thread after blog post
|
6
|
+
facebook 0 # reader-like, reader post, autopost?
|
7
|
+
twitter 0 # reader-tweet, reader-follow, autotweet?
|
8
|
+
|
9
|
+
links 1 # widget: external links
|
10
|
+
news 1 # widget: news (external)
|
11
|
+
pages 1 # widget: internal pages
|
12
|
+
pinned 1 # widget: pinned posts
|
13
|
+
|
14
|
+
ad x # widget: embed advertising
|
15
|
+
bydates x # widget: browse posts by date
|
16
|
+
search x # widget: search posts
|
17
|
+
sitemap x # widget: site map
|
18
|
+
tag_cloud x # widget: tag cloud (clickable)
|
data/data/global.lt3
CHANGED
@@ -3,12 +3,13 @@
|
|
3
3
|
. <variable> <value>
|
4
4
|
. --------------------------------------------------
|
5
5
|
|
6
|
-
.variables
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
6
|
+
.variables view ../../settings/view.txt
|
7
|
+
|
8
|
+
.variables recent ../../settings/recent.txt
|
9
|
+
|
10
|
+
.variables publish ../../settings/publish.txt
|
11
11
|
|
12
|
+
.variables
|
12
13
|
host http://SITE
|
13
14
|
charset utf-8
|
14
15
|
url http://SITE
|
@@ -17,22 +18,3 @@ locale en_US
|
|
17
18
|
font.family verdana
|
18
19
|
.end
|
19
20
|
|
20
|
-
.variables recent
|
21
|
-
title.color #010101
|
22
|
-
title.size 28px
|
23
|
-
|
24
|
-
text.color #0101a1
|
25
|
-
text.size 22px
|
26
|
-
|
27
|
-
date.color #9a9a9a
|
28
|
-
date.size 15px
|
29
|
-
.end
|
30
|
-
|
31
|
-
.variables publish
|
32
|
-
user root
|
33
|
-
server SITE
|
34
|
-
docroot /var/www/
|
35
|
-
path VIEW_NAME
|
36
|
-
proto http
|
37
|
-
.end
|
38
|
-
|
data/data/universal.lt3
CHANGED
File without changes
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# 0 = disabled (installed but disabled)
|
2
|
+
# 1 = enabled (implies installed)
|
3
|
+
# x = excluded (not installed; does it even exist?)
|
4
|
+
|
5
|
+
reddit 0 # autopost, embed thread after blog post
|
6
|
+
facebook 0 # reader-like, reader post, autopost?
|
7
|
+
twitter 0 # reader-tweet, reader-follow, autotweet?
|
8
|
+
|
9
|
+
links 1 # widget: external links
|
10
|
+
news 1 # widget: news (external)
|
11
|
+
pages 1 # widget: internal pages
|
12
|
+
pinned 1 # widget: pinned posts
|
13
|
+
|
14
|
+
ad x # widget: embed advertising
|
15
|
+
bydates x # widget: browse posts by date
|
16
|
+
search x # widget: search posts
|
17
|
+
sitemap x # widget: site map
|
18
|
+
tag_cloud x # widget: tag cloud (clickable)
|
@@ -15,6 +15,6 @@
|
|
15
15
|
|
16
16
|
<rect x="20" y="20" rx="15" ry="15" width="98%" height="100" fill="url(#grad1)"/>
|
17
17
|
|
18
|
-
<text x="45" y="70" class=heavy>$
|
19
|
-
<text x="45" y="98" class=small>$
|
18
|
+
<text x="45" y="70" class=heavy>$view.title</text>
|
19
|
+
<text x="45" y="98" class=small>$view.subtitle</text>
|
20
20
|
</svg>
|
data/lib/helpers-blog.rb
CHANGED
@@ -14,6 +14,26 @@ module RuneBlog::Helpers
|
|
14
14
|
exit
|
15
15
|
end
|
16
16
|
|
17
|
+
def read_features(view = nil)
|
18
|
+
hash = {}
|
19
|
+
if view.nil? # toplevel default
|
20
|
+
dir = @root/"data"
|
21
|
+
else
|
22
|
+
dir = @root/:views/self.view/:settings
|
23
|
+
end
|
24
|
+
file = dir/"features.txt"
|
25
|
+
lines = File.readlines(file)
|
26
|
+
lines.each do |line|
|
27
|
+
line = line.strip
|
28
|
+
line.sub!(/ #.*/, "") # trailing
|
29
|
+
next if line =~ /^ *#/ # leading
|
30
|
+
next if line.empty?
|
31
|
+
name, status = line.split
|
32
|
+
hash[name] = (status == "1") # enabled
|
33
|
+
end
|
34
|
+
@features = hash
|
35
|
+
end
|
36
|
+
|
17
37
|
def get_repo_config
|
18
38
|
log!(enter: __method__, level: 3)
|
19
39
|
@editor = File.read(".blogs/data/EDITOR").chomp
|
@@ -27,15 +47,9 @@ module RuneBlog::Helpers
|
|
27
47
|
|
28
48
|
def copy_data(tag, dest)
|
29
49
|
data = RuneBlog::Path + "/../data" # files kept inside gem
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
when :config
|
34
|
-
files = %w[ROOT VIEW EDITOR universal.lt3 global.lt3]
|
35
|
-
files.each {|file| copy(data + "/" + file, dest) }
|
36
|
-
when :extra # FIXME remove later
|
37
|
-
# copy!(extra, dest)
|
38
|
-
end
|
50
|
+
# FIXME tag no longer used
|
51
|
+
files = %w[ROOT VIEW EDITOR universal.lt3 global.lt3 features.txt]
|
52
|
+
files.each {|file| copy(data + "/" + file, dest) unless File.exist?(dest/file) }
|
39
53
|
end
|
40
54
|
|
41
55
|
def read_vars(file)
|
@@ -47,14 +61,15 @@ module RuneBlog::Helpers
|
|
47
61
|
line = line.strip
|
48
62
|
next if skip.include?(line[0])
|
49
63
|
key, val = line.split(" ", 2)
|
50
|
-
|
64
|
+
next if key.nil?
|
65
|
+
hash[key] = hash[key.to_sym] = val
|
51
66
|
end
|
52
67
|
hash
|
53
68
|
rescue => err
|
54
69
|
puts "Can't read vars file '#{file}': #{err}"
|
55
70
|
puts err.backtrace.join("\n")
|
56
71
|
puts "dir = #{Dir.pwd}"
|
57
|
-
stop_RubyText
|
72
|
+
stop_RubyText rescue nil
|
58
73
|
end
|
59
74
|
|
60
75
|
def read_config(file, *syms)
|
@@ -111,15 +126,6 @@ module RuneBlog::Helpers
|
|
111
126
|
File.write(root + "/data/EDITOR", editor + "\n")
|
112
127
|
end
|
113
128
|
|
114
|
-
# def new_dotfile(root: ".blogs", current_view: "test_view", editor: "vi")
|
115
|
-
# log!(enter: __method__, args: [root, current_view, editor], level: 3)
|
116
|
-
# root = Dir.pwd + "/" + root
|
117
|
-
# x = OpenStruct.new
|
118
|
-
# x.root, x.current_view, x.editor = root, current_view, editor
|
119
|
-
# write_config(x, root + "/" + RuneBlog::ConfigFile)
|
120
|
-
# write_repo_config
|
121
|
-
# end
|
122
|
-
|
123
129
|
def new_sequence
|
124
130
|
log!(enter: __method__, level: 3)
|
125
131
|
dump(0, "data/sequence")
|
data/lib/helpers-repl.rb
CHANGED
@@ -109,7 +109,9 @@ module RuneBlog::REPL
|
|
109
109
|
end
|
110
110
|
meth = found || :cmd_INVALID
|
111
111
|
params = cmd if meth == :cmd_INVALID
|
112
|
-
[meth
|
112
|
+
result = [meth]
|
113
|
+
result << params unless params.nil?
|
114
|
+
result
|
113
115
|
end
|
114
116
|
|
115
117
|
def ask(prompt, meth = :to_s)
|
@@ -121,42 +123,6 @@ module RuneBlog::REPL
|
|
121
123
|
ask(fx(prompt, :bold), meth)
|
122
124
|
end
|
123
125
|
|
124
|
-
def reset_output(initial = "")
|
125
|
-
@out ||= ""
|
126
|
-
@out.replace initial
|
127
|
-
end
|
128
|
-
|
129
|
-
def flush_output(initial = "")
|
130
|
-
CantOpen
|
131
|
-
@out ||= ""
|
132
|
-
puts @out
|
133
|
-
reset_output
|
134
|
-
end
|
135
|
-
|
136
|
-
def output(str) # \n and indent
|
137
|
-
@out ||= ""
|
138
|
-
@out << " " + str.to_s
|
139
|
-
end
|
140
|
-
|
141
|
-
def outstr(str) # indent
|
142
|
-
@out ||= ""
|
143
|
-
@out << str
|
144
|
-
end
|
145
|
-
|
146
|
-
def output!(str) # \n and indent
|
147
|
-
@out ||= ""
|
148
|
-
@out << " " + str
|
149
|
-
end
|
150
|
-
|
151
|
-
def output_newline(n = 1)
|
152
|
-
@out ||= ""
|
153
|
-
n.times { @out << "\n" }
|
154
|
-
end
|
155
|
-
|
156
|
-
def check_empty(arg)
|
157
|
-
raise InternalError(caller[0], arg.inspect) unless arg.nil?
|
158
|
-
end
|
159
|
-
|
160
126
|
def get_integer(arg)
|
161
127
|
Integer(arg)
|
162
128
|
rescue
|
@@ -176,10 +142,6 @@ module RuneBlog::REPL
|
|
176
142
|
end
|
177
143
|
end
|
178
144
|
|
179
|
-
def colored_slug(slug)
|
180
|
-
slug[0..3] + slug[4..-1]
|
181
|
-
end
|
182
|
-
|
183
145
|
def tags_for_view(vname = @blog.view)
|
184
146
|
Dir.chdir(vname) do
|
185
147
|
fname = "tagpool"
|
data/lib/liveblog.rb
CHANGED
@@ -72,7 +72,7 @@ def post_trailer
|
|
72
72
|
tags = _var("post.tags")
|
73
73
|
taglist = tags.empty? ? "" : "Tags: #{tags}"
|
74
74
|
|
75
|
-
reddit_enabled =
|
75
|
+
reddit_enabled = @blog.features["reddit"]
|
76
76
|
reddit_txt = ""
|
77
77
|
if reddit_enabled
|
78
78
|
vdir = @blog.root/:views/@blog.view
|
@@ -110,7 +110,7 @@ def faq
|
|
110
110
|
_out %[ <a data-toggle="collapse" href="##{id}" role="button" aria-expanded="false" aria-controls="collapseExample"><font size=+3>⌄</font></a>]
|
111
111
|
_out %[ <b>#{ques}</b>]
|
112
112
|
_out %[<div class="collapse" id="#{id}"><br><font size=+1> #{ans}</font></div>\n]
|
113
|
-
_out "<br>" unless @faq_count == 1
|
113
|
+
_out "<br>" # unless @faq_count == 1
|
114
114
|
_optional_blank_line
|
115
115
|
end
|
116
116
|
|
@@ -241,8 +241,8 @@ def _svg_title(*args)
|
|
241
241
|
.subtitle { font: #{style2} #{size2} #{font2}; fill: #{color2} }
|
242
242
|
</style>
|
243
243
|
<rect x="10" y="10" rx="10" ry="10" width="#{width}" height="#{height}" fill="url(#grad1)"/>
|
244
|
-
<text text-anchor="#{align}" x="#{x}" y="#{y}" class="title">#{Livetext::Vars[
|
245
|
-
<text text-anchor="#{align2}" x="#{x2}" y="#{y2}" class="subtitle">#{Livetext::Vars["
|
244
|
+
<text text-anchor="#{align}" x="#{x}" y="#{y}" class="title">#{Livetext::Vars["view.title"]} </text>
|
245
|
+
<text text-anchor="#{align2}" x="#{x2}" y="#{y2}" class="subtitle">#{Livetext::Vars["view.subtitle"]} </text>
|
246
246
|
</svg>
|
247
247
|
<!-- ^ how does syntax highlighting get messed up? </svg> -->
|
248
248
|
HTML
|
@@ -446,18 +446,18 @@ def head # Does NOT output tags
|
|
446
446
|
defaults = {}
|
447
447
|
defaults = { "charset" => %[<meta charset="utf-8">],
|
448
448
|
"http-equiv" => %[<meta http-equiv="X-UA-Compatible" content="IE=edge">],
|
449
|
-
"title" => %[<title>\n #{_var(
|
449
|
+
"title" => %[<title>\n #{_var("view.title")} | #{_var("view.subtitle")}\n </title>],
|
450
450
|
"generator" => %[<meta name="generator" content="Runeblog v #@version">],
|
451
|
-
"og:title" => %[<meta property="og:title" content="#{_var(
|
451
|
+
"og:title" => %[<meta property="og:title" content="#{_var("view.title")}">],
|
452
452
|
"og:locale" => %[<meta property="og:locale" content="#{_var(:locale)}">],
|
453
|
-
"description" => %[<meta name="description" content="#{_var("
|
454
|
-
"og:description" => %[<meta property="og:description" content="#{_var("
|
453
|
+
"description" => %[<meta name="description" content="#{_var("view.subtitle")}">],
|
454
|
+
"og:description" => %[<meta property="og:description" content="#{_var("view.subtitle")}">],
|
455
455
|
"linkc" => %[<link rel="canonical" href="#{_var(:host)}">],
|
456
456
|
"og:url" => %[<meta property="og:url" content="#{_var(:host)}">],
|
457
|
-
"og:site_name" => %[<meta property="og:site_name" content="#{_var(
|
457
|
+
"og:site_name" => %[<meta property="og:site_name" content="#{_var("view.title")}">],
|
458
458
|
# "style" => %[<link rel="stylesheet" href="etc/blog.css">],
|
459
459
|
# ^ FIXME
|
460
|
-
"feed" => %[<link type="application/atom+xml" rel="alternate" href="#{_var(:host)}/feed.xml" title="#{_var(
|
460
|
+
"feed" => %[<link type="application/atom+xml" rel="alternate" href="#{_var(:host)}/feed.xml" title="#{_var("view.title")}">],
|
461
461
|
"favicon" => %[<link rel="shortcut icon" type="image/x-icon" href="etc/favicon.ico">\n <link rel="apple-touch-icon" href="etc/favicon.ico">]
|
462
462
|
}
|
463
463
|
result = {}
|
@@ -689,7 +689,7 @@ end
|
|
689
689
|
|
690
690
|
def _make_navbar(orient = :horiz)
|
691
691
|
vdir = @root/:views/@blog.view
|
692
|
-
title = _var(
|
692
|
+
title = _var("view.title")
|
693
693
|
|
694
694
|
if orient == :horiz
|
695
695
|
name = "navbar.html"
|