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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0d65eb398cbd787046ff303ec0d045c6f3abac93b31c165bf102e54d4239f23c
4
- data.tar.gz: 036b16fbc5c3aeae33dd0483f1e5415f93f1cbc8852c78d43c79c87458b233e8
3
+ metadata.gz: 4c6fa9176107c58120ebb4753221228bfe0d031f08f21a20dc2f7f86d6b2c6af
4
+ data.tar.gz: c3bf5183cbeddb2cc3c9022695fcd9aa9ba50cf0e5364afd4632fac8a837e315
5
5
  SHA512:
6
- metadata.gz: 87c32ca6cb9ed8c7245178726cac650ebd1f2470f09f59cc89b3705496a7dd88503f3dce7fdd78ba26052894861aa69cc3dbf0f8be462699f7bfbe3738f2fc7f
7
- data.tar.gz: 968b1a74bac6320060a1ffa4bdc0d3e747c450dcdd032842533f3f4d05815eecfdbada1a71c211e07b81cc1b0be3c8d0dc65d7326bbcfe3a4dcd7c062fae32fb
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!("\nFilename: ")
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
- gname = "#{@blog.root}/views/#{view_name}/themes/standard/global.lt3"
48
- text = File.read(gname)
49
- text = text.gsub(/VIEW_NAME/, view_name)
50
- text = text.gsub(/VIEW_TITLE/, title)
51
- text = text.gsub(/VIEW_SUBTITLE/, subtitle)
52
- File.write(gname, text)
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!("\nFilename: ")
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(nil) if cmd.nil? # ^D
95
+ cmd_quit if cmd.nil? # ^D
91
96
  cmd.chomp!
92
97
  return if cmd.empty? # CR does nothing
93
- meth, params = RuneBlog::REPL.choose_method(cmd)
94
- ret, str = send(meth, params)
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 "Nor implemented yet"
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
- abort "Need Ruby 2.4 or greater"
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
 
@@ -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)
@@ -3,12 +3,13 @@
3
3
  . <variable> <value>
4
4
  . --------------------------------------------------
5
5
 
6
- .variables
7
- author AUTHOR
8
- blog VIEW_TITLE
9
- blog.desc VIEW_SUBTITLE
10
- site SITE
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
-
@@ -8,14 +8,11 @@
8
8
  .nopara
9
9
 
10
10
  .variables
11
- . Identity
12
- author AUTHOR
13
- site SITE_DOMAIN
11
+ univ.author AUTHOR
12
+ univ.site SITE_DOMAIN
14
13
 
15
- . Style
16
14
  font.family verdana
17
15
 
18
- . Details
19
16
  charset utf-8
20
17
  locale en_US
21
18
  .end
@@ -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)
@@ -0,0 +1,5 @@
1
+ user root
2
+ server SITE
3
+ docroot /var/www/html
4
+ path VIEW_NAME # can be different
5
+ proto https
@@ -0,0 +1,11 @@
1
+ title.color #010101
2
+ title.size 28px
3
+
4
+ text.color #0101a1
5
+ text.size 22px
6
+
7
+ date.color #9a9a9a
8
+ date.size 15px
9
+
10
+ bgcolor #ffffff # white
11
+ count 10 # max number of recent entries
@@ -0,0 +1,4 @@
1
+ author VIEW_AUTHOR
2
+ title VIEW_TITLE
3
+ subtitle VIEW_SUBTITLE
4
+ site VIEW_SITE
@@ -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>$blog</text>
19
- <text x="45" y="98" class=small>$blog.desc</text>
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>
@@ -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
- extra = RuneBlog::Path + "/../config" # files kept inside gem
31
- # FIXME names are confusing
32
- case tag
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
- hash[key] = val
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")
@@ -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, params]
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"
@@ -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 = false # FIXME
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 %[&nbsp;<a data-toggle="collapse" href="##{id}" role="button" aria-expanded="false" aria-controls="collapseExample"><font size=+3>&#8964;</font></a>]
111
111
  _out %[&nbsp;<b>#{ques}</b>]
112
112
  _out %[<div class="collapse" id="#{id}"><br><font size=+1>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#{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[:blog]} </text>
245
- <text text-anchor="#{align2}" x="#{x2}" y="#{y2}" class="subtitle">#{Livetext::Vars["blog.desc"]} </text>
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(:blog)} | #{_var("blog.desc")}\n </title>],
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(:blog)}">],
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("blog.desc")}">],
454
- "og:description" => %[<meta property="og:description" content="#{_var("blog.desc")}">],
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(:blog)}">],
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(:blog)}">],
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(:blog)
692
+ title = _var("view.title")
693
693
 
694
694
  if orient == :horiz
695
695
  name = "navbar.html"