runeblog 0.3.22 → 0.3.23

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.
@@ -1,11 +1,17 @@
1
1
 
2
2
  def _tmp_error(err)
3
+ STDERR.puts err
4
+ STDERR.puts err.backtrace.join("\n") if err.respond_to?(:backtrace)
5
+ log!(str: "#{err} - see also stderr.out")
6
+ return
7
+
3
8
  out = "/tmp/blog#{rand(100)}.txt"
4
9
  File.open(out, "w") do |f|
5
10
  f.puts err.to_s + "\n--------"
6
11
  f.puts err.backtrace.join("\n")
7
12
  end
8
13
  puts "Error: See #{out}"
14
+ # sleep 3
9
15
  end
10
16
 
11
17
  def dump(obj, name)
@@ -20,6 +26,7 @@
20
26
  log!(enter: __method__, args: [str], level: 2)
21
27
  STDERR.puts str if show
22
28
  rc = system(str)
29
+ STDERR.puts " rc = #{rc.inspect}" if show
23
30
  return rc if rc
24
31
  STDERR.puts "FAILED: #{str.inspect}"
25
32
  STDERR.puts "\ncaller = \n#{caller.join("\n ")}\n"
@@ -32,10 +39,12 @@
32
39
  end
33
40
 
34
41
  def _get_data?(file) # File need not exist
42
+ log!(enter: __method__, args: [file], level: 2)
35
43
  File.exist?(file) ? _get_data(file) : []
36
44
  end
37
45
 
38
46
  def _get_data(file)
47
+ log!(enter: __method__, args: [file], level: 2)
39
48
  lines = File.readlines(file)
40
49
  lines = lines.map do |line|
41
50
  line = line.chomp.strip
@@ -46,6 +55,7 @@
46
55
  end
47
56
 
48
57
  def read_pairs(file) # returns a hash
58
+ log!(enter: __method__, args: [file], level: 2)
49
59
  lines = _get_data(file)
50
60
  hash = {}
51
61
  lines.each do |line|
@@ -57,6 +67,7 @@
57
67
  end
58
68
 
59
69
  def read_pairs!(file) # returns an openstruct
70
+ log!(enter: __method__, args: [file], level: 2)
60
71
  lines = _get_data(file)
61
72
  obj = OpenStruct.new
62
73
  lines.each do |line|
@@ -97,27 +108,32 @@
97
108
  end
98
109
 
99
110
  def error(err)
100
- # log!(str: err, enter: __method__, args: [err], level: 2)
101
- str = "\n Error: #{err}"
111
+ log!(str: err, enter: __method__, args: [err], level: 2)
112
+ str = "\n Error... #{err}"
102
113
  puts str
103
114
  puts err.backtrace.join("\n")
104
115
  end
105
116
 
106
117
  def find_item(list)
118
+ log!(enter: __method__, args: [list], level: 2)
107
119
  list2 = list.select(&block)
108
- exactly_one(list2)
120
+ exactly_one(list2, list.join("/"))
109
121
  end
110
122
 
111
123
  def find_item!(list, &block)
124
+ log!(enter: __method__, args: [list], level: 2)
125
+ list2 = list.select(&block)
112
126
  list2 = list.select(&block)
113
- item = exactly_one(list2)
127
+ item = exactly_one(list2, list.join("/"))
114
128
  n = list.index(&block)
115
129
  [n, item]
116
130
  end
117
131
 
118
- def exactly_one(list)
119
- raise "List: Zero instances" if list.empty?
120
- raise "List: More than one instance" if list.size > 1
132
+ def exactly_one(list, tag = nil)
133
+ log!(enter: __method__, args: [list], level: 2)
134
+ list2 = list.select(&block)
135
+ raise "List: Zero instances #{"- #{tag}" if tag}" if list.empty?
136
+ raise "List: More than one instance #{"- #{tag}" if tag}" if list.size > 1
121
137
  list.first
122
138
  end
123
139
 
@@ -18,9 +18,10 @@ top_help = proc { RubyText.splash(RuneBlog::REPL::Help.gsub(/[{}]/, " ")) }
18
18
  # dir = @blog.view.dir/"themes/standard/"
19
19
 
20
20
  std = "themes/standard"
21
+ data = "." # CHANGED
21
22
 
22
23
  Menu.top_config = {
23
- "Variables (general)" => edit("#{std}/global.lt3"),
24
+ "Variables (general)" => edit("#{data}/global.lt3"),
24
25
  " View-specific" => edit("settings/view.txt"),
25
26
  " Recent posts" => edit("settings/recent.txt"),
26
27
  " Publishing" => edit("settings/publish.txt"),
@@ -2,7 +2,7 @@ require 'rubytext'
2
2
 
3
3
  RubyText.start
4
4
 
5
- # IdeaL A special sub-environment for creating a post
5
+ # Idea: A special sub-environment for creating a post
6
6
  #
7
7
  # 1. Display: view, post number, date
8
8
  # 2. Menu?
@@ -15,44 +15,43 @@ RubyText.start
15
15
  # 9. - Quit
16
16
  # Edit body after save/quit
17
17
 
18
+ def ask(prompt) # elsewhere?
19
+ print prompt
20
+ str = gets
21
+ str.chomp! if str
22
+ str
23
+ end
24
+
18
25
  def enter_title
19
- STDSCR.puts __method__
20
- r = STDSCR.rows / 2 - 3
21
- @win = RubyText.window(1, 30, r: r, c: 30, border: false, bg: White, fg: Black)
22
- @win.home
23
- str = @win.gets
24
- STDSCR.puts str.inspect
25
- [__method__, 0]
26
+ puts __method__
27
+ str = ask("Title: ")
28
+ puts str.inspect
26
29
  end
27
30
 
28
31
  def edit_teaser
29
- STDSCR.puts __method__
30
- [__method__, 1]
32
+ puts __method__
33
+ str = ask("Teaser: ")
34
+ puts str.inspect
31
35
  end
32
36
 
33
37
  def add_views
34
- STDSCR.puts __method__
35
- [__method__, 2]
38
+ puts __method__
36
39
  end
37
40
 
38
41
  def add_tags
39
- STDSCR.puts __method__
40
- [__method__, 3]
42
+ puts __method__
41
43
  end
42
44
 
43
45
  def import_assets
44
- STDSCR.puts __method__
45
- [__method__, 4]
46
+ puts __method__
46
47
  end
47
48
 
48
49
  def save_post
49
- STDSCR.puts __method__
50
- [__method__, 5]
50
+ puts __method__
51
51
  end
52
52
 
53
53
  def quit_post
54
- STDSCR.puts __method__
55
- [__method__, 6]
54
+ puts __method__
56
55
  end
57
56
 
58
57
  items = {
@@ -65,9 +64,19 @@ items = {
65
64
  "Quit" => proc { quit_post }
66
65
  }
67
66
 
68
- curr = 0
69
- loop do
70
- str, curr = STDSCR.menu(c: 10, items: items, curr: curr, sticky: true)
71
- break if curr.nil?
72
- STDSCR.puts "str = #{str} curr = #{curr}"
73
- end
67
+ enter_title
68
+ edit_teaser
69
+ add_views
70
+ add_tags
71
+ import_assets
72
+ save_post
73
+ quit_post
74
+
75
+ # getch
76
+
77
+ # curr = 0
78
+ # loop do
79
+ # str, curr = menu(c: 10, items: items, curr: curr, sticky: true)
80
+ # break if curr.nil?
81
+ # puts "str = #{str} curr = #{curr}"
82
+ # end
@@ -66,7 +66,7 @@ class RuneBlog::Post
66
66
  end
67
67
 
68
68
  def edit
69
- # log!(enter: __method__)
69
+ log!(enter: __method__)
70
70
  edit_file(@draft, vim: "+8")
71
71
  build
72
72
  rescue => err
@@ -169,7 +169,8 @@ class RuneBlog::ViewPost
169
169
  @date = meta.pubdate
170
170
  end
171
171
  rescue => err
172
- STDERR.puts "--- #{err}\n #{err.backtrace.join("\n ")}"
172
+ STDERR.puts "--- #{err}"
173
+ STDERR.puts " #{err.backtrace.join("\n ")}" if err.respond_to?(:backtrace)
173
174
  end
174
175
 
175
176
  def get_dirs
@@ -23,7 +23,8 @@ end
23
23
  def preprocess(cwd: Dir.pwd, src:,
24
24
  dst: nil, strip: false,
25
25
  deps: [], copy: nil, debug: false, force: false,
26
- mix: [], call: [], vars: {})
26
+ mix: [], call: [],
27
+ vars: {})
27
28
  src += LEXT unless src.end_with?(LEXT)
28
29
  if strip
29
30
  dst = File.basename(src).sub(/.lt3$/,"")
@@ -31,6 +32,10 @@ def preprocess(cwd: Dir.pwd, src:,
31
32
  dst += ".html" unless dst.end_with?(".html")
32
33
  end
33
34
  sp = " "*12
35
+ # STDERR.puts "=== ls -l #{cwd} = "
36
+ # STDERR.puts `ls -l #{cwd}`
37
+ # STDERR.puts "=== going into #{cwd}"
38
+
34
39
  Dir.chdir(cwd) do
35
40
  if debug
36
41
  STDERR.puts "#{sp} -- preprocess "
@@ -44,6 +49,20 @@ def preprocess(cwd: Dir.pwd, src:,
44
49
  stale = stale?(src, dst, deps, force)
45
50
  if stale
46
51
  live = Livetext.customize(mix: "liveblog", call: call, vars: vars)
52
+ STDERR.puts <<~EOF
53
+ cwd = #{cwd.inspect}
54
+ src = #{src.inspect}
55
+ dst = #{dst.inspect}
56
+ strip = #{strip.inspect}
57
+ deps = #{deps.inspect}
58
+ copy = #{copy.inspect}
59
+ debug = #{debug.inspect}
60
+ force = #{force.inspect}
61
+ mix = #{mix.inspect}
62
+ call = #{call.inspect}
63
+ vars = #{vars.inspect}
64
+ EOF
65
+ log!(str: "Calling xform_file... src = #{src} pwd = #{Dir.pwd}")
47
66
  out = live.xform_file(src)
48
67
  File.write(dst, out)
49
68
  system!("cp #{dst} #{copy}") if copy
@@ -54,6 +73,8 @@ end
54
73
 
55
74
  def get_live_vars(src)
56
75
  live = Livetext.customize(call: [".nopara"])
76
+ # puts "glv: src = #{src.inspect}"
77
+ # STDERR.puts "glv: src = #{src.inspect}"
57
78
  live.xform_file(src)
58
79
  live
59
80
  end
@@ -14,7 +14,9 @@ class RuneBlog::Publishing
14
14
  def initialize(view)
15
15
  log!(enter: __method__, args: [view.to_s])
16
16
  @blog = RuneBlog.blog
17
- dir = @blog.root/:views/view/"themes/standard/"
17
+ dir0 = @blog.root/:views/view/"themes/standard/"
18
+ # CHANGED
19
+ dir = @blog.root/:views/view/:data
18
20
  gfile = dir/"global.lt3"
19
21
  return unless File.exist?(gfile) # FIXME Hackish as hell
20
22
 
@@ -206,14 +206,14 @@ module RuneBlog::REPL
206
206
 
207
207
  def regen_posts
208
208
  drafts = @blog.drafts # current view
209
- puts " Regenerating posts..." unless drafts.empty?
209
+ log! str: "=== Regenerating posts..." unless drafts.empty?
210
210
  drafts.each do |draft|
211
211
  orig = @blog.root/:drafts/draft
212
212
  postdir = @blog.root/:posts/draft.sub(/.lt3$/, "")
213
213
  content = postdir/"/guts.html"
214
214
  next if fresh?(orig, content)
215
215
 
216
- # puts "Calling generate_post(#{orig})"
216
+ log! str: "=== Calling generate_post(#{orig})"
217
217
  @blog.generate_post(orig) # rebuild post
218
218
  Dir.chdir(postdir) do
219
219
  meta = @blog.read_metadata
@@ -225,14 +225,14 @@ module RuneBlog::REPL
225
225
  end
226
226
 
227
227
  def cmd_rebuild
228
- debug "Starting cmd_rebuild..."
228
+ log! str: "=== Starting cmd_rebuild..."
229
229
  puts
230
230
  regen_posts
231
- puts " Generating view..."
231
+ log! str: "=== Generating view..."
232
232
  @blog.generate_view(@blog.view)
233
- puts " Generating index..."
233
+ log! str: "=== Generating index..."
234
234
  @blog.generate_index(@blog.view)
235
- puts " ...finished!"
235
+ log! str: "=== ...finished!"
236
236
  rescue => err
237
237
  _tmp_error(err)
238
238
  end
@@ -250,6 +250,7 @@ module RuneBlog::REPL
250
250
  name = @blog.view.name
251
251
  k, name = STDSCR.menu(title: "Views", items: viewnames, curr: n)
252
252
  return if name.nil?
253
+ log! str: "cv Setting to #{name.inspect}"
253
254
  @blog.view = name
254
255
  # puts "\n ", fx(name, :bold), "\n"
255
256
  return
@@ -261,19 +262,40 @@ module RuneBlog::REPL
261
262
  end
262
263
  end
263
264
 
265
+ # move to helpers
266
+ def modify_view_global(view_name)
267
+ gfile = "#{@blog.root}/views/#{view_name}/data/global.lt3"
268
+ lines = File.readlines(gfile).map(&:chomp)
269
+ vars = <<~EOF
270
+ .variables
271
+ View #{view_name}
272
+ ViewDir #{@blog.root}/views/#{view_name}
273
+ .end
274
+
275
+ EOF
276
+ # lines.insert(5, vars)
277
+ text = lines.join("\n")
278
+ File.write(gfile, text)
279
+ end
280
+
281
+ def modify_view_settings(name:, title:, subtitle:, domain:)
282
+ vfile = "#{@blog.root}/views/#{name}/settings/view.txt"
283
+ hash = {/VIEW_NAME/ => name,
284
+ /VIEW_TITLE/ => title,
285
+ /VIEW_SUBTITLE/ => subtitle,
286
+ /VIEW_DOMAIN/ => domain}
287
+ @blog.complete_file(vfile, nil, hash)
288
+ end
289
+
264
290
  def cmd_new_view(arg)
265
291
  view_name = ask!(" Filename: ")
266
292
  @blog.create_view(view_name) # call change_view??
267
293
  title = ask!(" View title: ")
268
294
  subtitle = ask!(" Subtitle : ")
269
295
  domain = ask!(" Domain : ")
270
-
271
- vfile = "#{@blog.root}/views/#{view_name}/settings/view.txt"
272
- hash = {/VIEW_NAME/ => view_name,
273
- /VIEW_TITLE/ => title,
274
- /VIEW_SUBTITLE/ => subtitle,
275
- /VIEW_DOMAIN/ => domain}
276
- @blog.complete_file(vfile, nil, hash)
296
+ modify_view_global(view_name)
297
+ modify_view_settings(name: view_name, title: title, subtitle: subtitle,
298
+ domain: domain)
277
299
  @blog.change_view(view_name)
278
300
  end
279
301
 
@@ -283,11 +305,13 @@ module RuneBlog::REPL
283
305
  puts
284
306
  end
285
307
  @blog.create_view(arg)
286
- text = File.read("#{@blog.root}/data/global.lt3")
287
- File.write("#{@blog.root}/views/#{@blog.view}/themes/standard/global.lt3",
308
+ lines = File.read("#{@blog.root}/data/global.lt3")
309
+ # File.write("#{@blog.root}/views/#{@blog.view}/themes/standard/global.lt3",
310
+ File.write("#{@blog.root}/views/#{@blog.view}/data/global.lt3",
288
311
  text.gsub(/VIEW_NAME/, @blog.view.to_s))
289
312
  vim_params = '-c ":set hlsearch" -c ":hi Search ctermfg=2 ctermbg=6" +/"\(VIEW_.*\|SITE.*\)"'
290
- edit_file(@blog.view.dir/"themes/standard/global.lt3", vim: vim_params)
313
+ # edit_file(@blog.view.dir/"themes/standard/global.lt3", vim: vim_params)
314
+ edit_file(@blog.view.dir/"data/global.lt3", vim: vim_params)
291
315
  @blog.change_view(arg)
292
316
  rescue ViewAlreadyExists
293
317
  puts 'Blog already exists'
@@ -328,7 +352,7 @@ module RuneBlog::REPL
328
352
  tag = "#{'%04d' % id}"
329
353
  files = ::Find.find(@blog.root/:drafts).to_a
330
354
  files = files.grep(/#{tag}-.*lt3/)
331
- draft = exactly_one(files)
355
+ draft = exactly_one(files, files.join("/"))
332
356
  result = edit_file(draft, vim: '-c$')
333
357
  @blog.generate_post(draft)
334
358
  rescue => err
@@ -97,7 +97,6 @@ class RuneBlog
97
97
  def self.create_new_blog_repo(root_rel = ".blogs")
98
98
  log!(enter: __method__, args: [root_rel])
99
99
  check_nonempty_string(root_rel)
100
- self.blog = self # Weird. Like a singleton - dumbass circular dependency?
101
100
  repo_root = Dir.pwd/root_rel
102
101
  check_error(BlogRepoAlreadyExists) { Dir.exist?(repo_root) }
103
102
 
@@ -113,16 +112,17 @@ class RuneBlog
113
112
  end
114
113
  # copy_data(:extra, repo_root/:config)
115
114
  write_repo_config(root: repo_root)
116
- @blog = self.new
117
- @blog
115
+ # Weird. Like a singleton - dumbass circular dependency?
116
+ self.blog = blog = self.new
117
+ blog
118
118
  rescue => err
119
119
  puts "Can't create blog repo: '#{repo_root}' - #{err}"
120
120
  puts err.backtrace.join("\n")
121
121
  end
122
122
 
123
123
  def self.open(root_rel = ".blogs")
124
+ raise "Not impl"
124
125
  log!(enter: __method__, args: [root_rel])
125
- self.blog = self # Weird. Like a singleton - dumbass circular dependency?
126
126
  blog = self.new(root_rel)
127
127
  rescue => err
128
128
  _tmp_error(err)
@@ -130,10 +130,11 @@ class RuneBlog
130
130
 
131
131
  def initialize(root_rel = ".blogs") # always assumes existing blog
132
132
  log!(enter: "initialize", args: [root_rel])
133
- self.class.blog = self # Weird. Like a singleton - dumbass circular dependency?
133
+ # Weird. Like a singleton - dumbass circular dependency?
134
+ self.class.blog = self
134
135
 
135
136
  @root = Dir.pwd/root_rel
136
- write_repo_config(root: @root) # ?? FIXME
137
+ # write_repo_config(root: @root) # ?? FIXME
137
138
  get_repo_config
138
139
  read_features # top level
139
140
  @views = retrieve_views
@@ -146,6 +147,11 @@ class RuneBlog
146
147
  @sequence = get_sequence
147
148
  @post_views = []
148
149
  @post_tags = []
150
+ rescue => err
151
+ puts "Error - see stdout.txt"
152
+ STDERR.puts err.inspect
153
+ STDERR.puts err.backtrace
154
+ sleep 3
149
155
  end
150
156
 
151
157
  def complete_file(name, vars, hash)
@@ -241,7 +247,7 @@ class RuneBlog
241
247
  create_dirs(dir)
242
248
  # FIXME dependencies?
243
249
  preprocess cwd: dir, src: @root/:drafts/sourcefile, dst: @root/:posts/sourcefile.sub(/.lt3/, ".html"), # ZZZ
244
- mix: "liveblog" # , debug: true
250
+ mix: "liveblog", vars: @view.globals # , debug: true
245
251
  _deploy_local(dir)
246
252
  rescue => err
247
253
  _tmp_error(err)
@@ -264,13 +270,13 @@ class RuneBlog
264
270
  views.any? {|x| x.name == name }
265
271
  end
266
272
 
267
- def view(name = nil)
268
- log!(enter: __method__, args: [name], level: 3)
269
- return @view if name.nil?
270
-
271
- check_nonempty_string(name)
272
- return str2view(name)
273
- end
273
+ # def view(name = nil)
274
+ # log!(enter: __method__, args: [name], level: 3)
275
+ # return @view if name.nil?
276
+ #
277
+ # check_nonempty_string(name)
278
+ # return str2view(name)
279
+ # end
274
280
 
275
281
  def str2view(str)
276
282
  log!(enter: __method__, args: [str], level: 3)
@@ -287,26 +293,28 @@ class RuneBlog
287
293
 
288
294
  def view=(arg)
289
295
  log!(enter: __method__, args: [arg], level: 2)
296
+ if arg == "[no view]"
297
+ @view = nil
298
+ return
299
+ end
300
+ # STDERR.puts "view= #{arg.inspect}"
301
+
290
302
  case arg
291
- when "[no view]"
292
- # puts "Warning: No current view set"
293
- @view = nil
294
303
  when RuneBlog::View
295
304
  @view = arg
296
- read_features(@view)
297
- @view.get_globals
298
- _set_publisher
305
+ @view.get_globals(true)
299
306
  when String
300
307
  new_view = str2view(arg)
301
- # puts "new_view = #{new_view} (#{new_view.class})"
308
+ # STDERR.puts "view= new view #{new_view.inspect}"
302
309
  check_error(NoSuchView, arg) { new_view.nil? }
303
310
  @view = new_view
304
- read_features(@view)
305
- @view.get_globals
306
- _set_publisher
307
311
  else
308
312
  raise CantAssignView(arg.class.to_s)
309
313
  end
314
+ read_features(@view)
315
+ @view.get_globals(true)
316
+ _set_publisher
317
+ File.write(@root/"data/VIEW", @view.to_s)
310
318
  rescue => err
311
319
  _tmp_error(err)
312
320
  end
@@ -327,7 +335,9 @@ class RuneBlog
327
335
  log!(enter: __method__, args: [v], level: 3)
328
336
  return @view if v.nil?
329
337
  check_nonempty_string(v)
330
- return @root/:views/v
338
+ dir = @root/:views/v
339
+ puts "Dir = #{dir}" # ; sleep 5
340
+ return dir
331
341
  end
332
342
 
333
343
  def self.exist?
@@ -375,8 +385,9 @@ class RuneBlog
375
385
  make_empty_view_tree(view_name)
376
386
  add_view(view_name)
377
387
  mark_last_published("Initial creation")
378
- system("cp #@root/data/global.lt3 #@root/views/#{view_name}/themes/standard/global.lt3")
379
- @view.get_globals
388
+ # system("cp #@root/data/global.lt3 #@root/views/#{view_name}/themes/standard/global.lt3")
389
+ system("cp #@root/data/global.lt3 #@root/views/#{view_name}/data/global.lt3")
390
+ @view.get_globals(true)
380
391
  rescue => err
381
392
  _tmp_error(err)
382
393
  end
@@ -408,7 +419,7 @@ class RuneBlog
408
419
  posts.select! {|x| File.directory?(x) }
409
420
 
410
421
  posts = posts.select {|x| File.basename(x).to_i == postid }
411
- postdir = exactly_one(posts)
422
+ postdir = exactly_one(posts, posts.join("/"))
412
423
  vp = RuneBlog::ViewPost.new(self.view, postdir)
413
424
  vp
414
425
  rescue => err
@@ -424,7 +435,7 @@ class RuneBlog
424
435
  depend = [post_entry_name]
425
436
  html = "/tmp/post_entry.html"
426
437
  preprocess src: post_entry_name, dst: html,
427
- call: ".nopara" # , deps: depend # , debug: true
438
+ call: ".nopara", vars: @view.globals # , deps: depend # , debug: true
428
439
  @_post_entry = File.read(html)
429
440
  vp = post_lookup(id)
430
441
  nslug, aslug, title, date, teaser_text =
@@ -566,15 +577,16 @@ class RuneBlog
566
577
  log!(enter: __method__, args: [view])
567
578
  vdir = @root/:views/view
568
579
  @theme = @root/:views/view/:themes/:standard
569
- depend = [vdir/"remote/etc/blog.css.lt3", @theme/"global.lt3",
580
+ @data = @root/:views/view/:data
581
+ depend = [vdir/"remote/etc/blog.css.lt3", @data/"global.lt3",
570
582
  @theme/"blog/head.lt3",
571
583
  # @theme/"navbar/navbar.lt3",
572
584
  @theme/"blog/index.lt3"] # FIXME what about assets?
573
585
  preprocess cwd: vdir/"themes/standard/etc", src: "blog.css.lt3",
574
- copy: vdir/"remote/etc/", call: [".nopara"], strip: true
586
+ copy: vdir/"remote/etc/", call: [".nopara"], strip: true , vars: @view.globals
575
587
  preprocess cwd: vdir/"themes/standard", deps: depend, force: true,
576
588
  src: "blog/generate.lt3", dst: vdir/:remote/"index.html",
577
- call: ".nopara"
589
+ call: ".nopara" , vars: @view.globals
578
590
  copy!("#{vdir}/themes/standard/banner/*", "#{vdir}/remote/banner/") # includes navbar/
579
591
  copy("#{vdir}/assets/*", "#{vdir}/remote/assets/")
580
592
  # rebuild widgets?
@@ -588,7 +600,7 @@ class RuneBlog
588
600
  def _get_views(draft)
589
601
  log!(enter: __method__, args: [draft], level: 2)
590
602
  # FIXME dumb code
591
- view_line = exactly_one(File.readlines(draft).grep(/^.views /))
603
+ view_line = exactly_one(File.readlines(draft).grep(/^.views /), ".view line")
592
604
  views = view_line[7..-1].split
593
605
  views.uniq
594
606
  rescue => err
@@ -626,11 +638,14 @@ class RuneBlog
626
638
  title = meta.title
627
639
  tags = meta.tags
628
640
  # FIXME simplify
629
- addvar(hash, "post.num" => pnum, "post.aslug" => aslug,
630
- "post.date" => date, title: title.chomp,
631
- teaser: excerpt.chomp, longdate: longdate,
632
- "post.nslug" => pnum + "-" + aslug,
633
- "post.tags" => tags.join(" "))
641
+ addvar(hash, "post.num" => pnum,
642
+ "post.aslug" => aslug,
643
+ "post.date" => date,
644
+ title: title.chomp,
645
+ teaser: excerpt.chomp,
646
+ longdate: longdate,
647
+ "post.nslug" => pnum + "-" + aslug,
648
+ "post.tags" => tags.join(" "))
634
649
  end
635
650
  hash
636
651
  rescue => err
@@ -639,19 +654,25 @@ class RuneBlog
639
654
 
640
655
  def copy_widget_html(view)
641
656
  log!(enter: __method__, level: 2)
657
+ log! str: "=== cwh cp 1"
642
658
  vdir = @root/:views/view
643
659
  remote = vdir/:remote
644
660
  wdir = vdir/:widgets
645
661
  widgets = Dir[wdir/"*"].select {|w| File.directory?(w) }
662
+ log! str: "=== cwh cp 2"
646
663
  widgets.each do |w|
647
664
  dir = File.basename(w)
648
665
  rem = w.sub(/widgets/, "remote/widgets")
666
+ log! str: "=== cwh cp 3 w = #{w.inspect}"
649
667
  create_dirs(rem)
650
668
  files = Dir[w/"*"]
651
669
  # files = files.select {|x| x =~ /(html|css)$/ }
652
670
  tag = File.basename(w)
653
- files.each {|file| system!("cp #{file} #{rem}", show: (tag == "zzz")) }
671
+ log! str: "=== cwh cp 4 tag = #{tag.inspect}"
672
+ files.each {|file| system!("cp #{file} #{rem}", show: true) }
673
+ log! str: "=== cwh cp 5 tag was #{tag.inspect}"
654
674
  end
675
+ log! str: "=== cwh cp 6"
655
676
  rescue => err
656
677
  _tmp_error(err)
657
678
  end
@@ -667,25 +688,42 @@ class RuneBlog
667
688
  pdraft = @root/:posts/nslug
668
689
  remote = @root/:views/view_name/:remote
669
690
  @theme = @root/:views/view_name/:themes/:standard
691
+ pmeta = @root/:views/view_name/:posts/nslug
692
+
693
+ log! str: "=== hpost cp 1"
670
694
 
671
695
  create_dirs(pdraft) # Step 1...
696
+ log! str: "=== hpost cp 2"
672
697
  preprocess cwd: pdraft, src: draft, # FIXME dependencies?
673
- dst: "guts.html", mix: "liveblog"
698
+ dst: "guts.html", mix: "liveblog", vars: (@view.globals || {})
699
+ log! str: "=== hpost cp 3"
674
700
  hash = _post_metadata(draft, pdraft)
701
+ log! str: "=== hpost cp 4"
702
+ hash[:CurrentPost] = pmeta
675
703
  vposts = @root/:views/view_name/:posts # Step 2...
676
- puts "-- hpost:"
677
- hash.each_pair {|k,v| puts " #{k}: #{v}" if k.is_a? Symbol }
678
- puts
704
+ # 5.times { STDERR.puts }
705
+ # STDERR.puts "-- hpost:"
706
+ # hash.each_pair {|k,v| STDERR.puts " #{k}: #{v}" if k.is_a? Symbol }
707
+ # 5.times { STDERR.puts }
679
708
  copy!(pdraft, vposts) # ??
680
- copy(pdraft/"guts.html", @theme/:post) # Step 3...
681
- preprocess cwd: @theme/:post, src: "generate.lt3", # Step 4...
682
- force: true, vars: hash,
683
- dst: remote/ahtml, call: ".nopara"
709
+ copy(pdraft/"guts.html", vposts/nslug) # Step 3...
710
+ # Step 4...
711
+ # preprocess cwd: @theme/:post, src: "generate.lt3",
712
+ log! str: "=== hpost cp 5"
713
+ # @view.dump_globals_stderr
714
+ preprocess cwd: pmeta, src: "../../themes/standard/post/generate.lt3",
715
+ force: true, vars: hash, debug: true,
716
+ dst: remote/ahtml, call: ".nopara"
717
+ log! str: "=== hpost cp 6"
684
718
  FileUtils.rm_f(remote/"published")
719
+ log! str: "=== hpost cp 7"
685
720
  timelog("Generated", remote/"history")
686
721
  copy_widget_html(view_name)
722
+ log! str: "=== hpost cp 8"
687
723
  rescue => err
724
+ log! str: "=== hpost cp 9"
688
725
  _tmp_error(err)
726
+ # puts err.backtrace.join("\n")
689
727
  end
690
728
 
691
729
  def _check_view?(view)
@@ -696,8 +734,11 @@ puts
696
734
 
697
735
  def generate_post(draft, force = false)
698
736
  log!(enter: __method__, args: [draft], level: 1)
737
+ log! str: "=== gpost cp 1"
699
738
  views = _get_views(draft)
739
+ log! str: "=== gpost cp 2"
700
740
  views.each {|view| _handle_post(draft, view) }
741
+ log! str: "=== gpost cp 3"
701
742
  # For current view:
702
743
  slug = File.basename(draft).sub(/.lt3$/, "")
703
744
  postdir = self.view.dir/"remote/post/"/slug