runeblog 0.3.22 → 0.3.23

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