runeblog 0.2.99 → 0.3.05

Sign up to get free protection for your applications and to get access to all the features.
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"