runeblog 0.3.26 → 0.3.28

Sign up to get free protection for your applications and to get access to all the features.
data/lib/liveblog.rb CHANGED
@@ -49,20 +49,20 @@ end
49
49
  def dropcap
50
50
  log!(enter: __method__)
51
51
  # Bad form: adds another HEAD
52
- text = _data
53
- _out " "
52
+ text = api.data
53
+ api.out " "
54
54
  letter = text[0]
55
55
  remain = text[1..-1]
56
- _out %[<div class='mydrop'>#{letter}</div>]
57
- _out %[<div style="padding-top: 1px">#{remain}]
56
+ api.out %[<div class='mydrop'>#{letter}</div>]
57
+ api.out %[<div style="padding-top: 1px">#{remain}]
58
58
  end
59
59
 
60
60
  def post
61
61
  log!(enter: __method__)
62
62
  @meta = OpenStruct.new
63
- @meta.num = _args[0]
63
+ @meta.num = api.args[0]
64
64
  setvar("post.num", @meta.num.to_i)
65
- _out " <!-- Post number #{@meta.num} -->\n "
65
+ api.out " <!-- Post number #{@meta.num} -->\n "
66
66
  end
67
67
 
68
68
  def _got_python?
@@ -91,7 +91,7 @@ def post_toolbar
91
91
  log!(enter: __method__)
92
92
  back_icon = %[<img src="assets/back-icon.png" width=24 height=24 alt="Go back"></img>]
93
93
  back = %[<a style="text-decoration: none" href="javascript:history.go(-1)">#{back_icon}</a>]
94
- _out <<~HTML
94
+ api.out <<~HTML
95
95
  <div align='right'>#{back} #@reddit_comments</div>
96
96
  HTML
97
97
  end
@@ -138,7 +138,7 @@ log! str: " -- dir = #{dir}"
138
138
  # damned syntax highlighting </>
139
139
  end
140
140
  # STDERR.print "Pausing... "; getch
141
- _out <<~HTML
141
+ api.out <<~HTML
142
142
  #{reddit_txt}
143
143
  <hr>
144
144
  <table width=100%><tr>
@@ -151,27 +151,27 @@ end
151
151
  def faq
152
152
  log!(enter: __method__)
153
153
  @faq_count ||= 0
154
- _out "<br>" if @faq_count == 0
154
+ api.out "<br>" if @faq_count == 0
155
155
  @faq_count += 1
156
- ques = _data.chomp
157
- ans = _body.join("\n")
156
+ ques = api.data.chomp
157
+ ans = api.body.join("\n")
158
158
  id = "faq#@faq_count"
159
- _out %[&nbsp;<a data-toggle="collapse" href="##{id}" role="button" aria-expanded="false" aria-controls="collapseExample"><font size=+3>&#8964;</font></a>]
160
- _out %[&nbsp;<b>#{ques}</b>]
161
- _out %[<div class="collapse" id="#{id}"><br><font size=+1>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#{ans}</font></div>\n]
162
- _out "<br>" # unless @faq_count == 1
163
- _optional_blank_line
159
+ api.out %[&nbsp;<a data-toggle="collapse" href="##{id}" role="button" aria-expanded="false" aria-controls="collapseExample"><font size=+3>&#8964;</font></a>]
160
+ api.out %[&nbsp;<b>#{ques}</b>]
161
+ api.out %[<div class="collapse" id="#{id}"><br><font size=+1>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#{ans}</font></div>\n]
162
+ api.out "<br>" # unless @faq_count == 1
163
+ api.optional_blank_line
164
164
  end
165
165
 
166
166
  def backlink
167
167
  log!(enter: __method__)
168
- _out %[<br><a href="javascript:history.go(-1)">[Back]</a>]
168
+ api.out %[<br><a href="javascript:history.go(-1)">[Back]</a>]
169
169
  end
170
170
 
171
171
  def code
172
172
  log!(enter: __method__)
173
- lines = _body # _text
174
- _out "<font size=+1><pre>\n#{lines}\n</pre></font>"
173
+ lines = api.body # _text
174
+ api.out "<font size=+1><pre>\n#{lines}\n</pre></font>"
175
175
  end
176
176
 
177
177
  def _read_navbar_data
@@ -191,7 +191,7 @@ def banner
191
191
  str2 = ""
192
192
  navbar = nil
193
193
  vdir = @blog.root/:views/@blog.view
194
- lines = _body.to_a
194
+ lines = api.body.to_a
195
195
 
196
196
  lines.each do |line|
197
197
  count += 1
@@ -234,14 +234,14 @@ def banner
234
234
  str2 << " '#{tag}' isn't known" + "\n"
235
235
  end
236
236
  end
237
- _out <<~HTML
237
+ api.out <<~HTML
238
238
  <table width=100% bgcolor=#{bg}>
239
239
  <tr>
240
240
  #{str2}
241
241
  </tr>
242
242
  </table>
243
243
  HTML
244
- _out navbar if navbar
244
+ api.out navbar if navbar
245
245
  rescue => err
246
246
  STDERR.puts "err = #{err}"
247
247
  STDERR.puts err.backtrace.join("\n") if err.respond_to?(:backtrace)
@@ -306,7 +306,7 @@ end
306
306
  def quote
307
307
  log!(enter: __method__)
308
308
  _passthru "<blockquote>"
309
- _passthru _body.join(" ")
309
+ _passthru api.body.join(" ")
310
310
  _passthru "</blockquote>"
311
311
  _optional_blank_line
312
312
  end
@@ -317,7 +317,7 @@ end
317
317
 
318
318
  def style
319
319
  log!(enter: __method__)
320
- fname = _args[0]
320
+ fname = api.args[0]
321
321
  _passthru %[<link rel="stylesheet" href="???/etc/#{fname}')">]
322
322
  end
323
323
 
@@ -333,43 +333,43 @@ def h6; _passthru "<h6>#{@_data}</h6>"; end
333
333
  def hr; _passthru "<hr>"; end
334
334
 
335
335
  def nlist
336
- log!(enter: __method__)
337
- _out "<ol>"
338
- _body {|line| _out "<li>#{line}</li>" }
339
- _out "</ol>"
340
- _optional_blank_line
336
+ log!(enter: api._method__)
337
+ api.out "<ol>"
338
+ api.body {|line| api.out "<li>#{line}</li>" }
339
+ api.out "</ol>"
340
+ api.optional_blank_line
341
341
  end
342
342
 
343
343
  def list
344
344
  log!(enter: __method__)
345
- _out "<ul>"
346
- _body {|line| _out "<li>#{line}</li>" }
347
- _out "</ul>"
348
- _optional_blank_line
345
+ api.out "<ul>"
346
+ api.body {|line| api.out "<li>#{line}</li>" }
347
+ api.out "</ul>"
348
+ api.optional_blank_line
349
349
  end
350
350
 
351
351
  def list!
352
352
  log!(enter: __method__)
353
- _out "<ul>"
354
- lines = _body.each
353
+ api.out "<ul>"
354
+ lines = api.body.each
355
355
  loop do
356
356
  line = lines.next
357
- line = _format(line)
357
+ line = api.format(line)
358
358
  if line[0] == " "
359
- _out line
359
+ api.out line
360
360
  else
361
- _out "<li>#{line}</li>"
361
+ api.out "<li>#{line}</li>"
362
362
  end
363
363
  end
364
- _out "</ul>"
365
- _optional_blank_line
364
+ api.out "</ul>"
365
+ api.optional_blank_line
366
366
  end
367
367
 
368
368
  ### inset
369
369
 
370
370
  def inset
371
371
  log!(enter: __method__)
372
- lines = _body
372
+ lines = api.body
373
373
  box = ""
374
374
  output = []
375
375
  lines.each do |line|
@@ -387,16 +387,16 @@ def inset
387
387
  output << line
388
388
  end
389
389
  end
390
- lr = _args.first
391
- wide = _args[1] || "25"
390
+ lr = api.args.first
391
+ wide = api.args[1] || "25"
392
392
  stuff = "<div style='float:#{lr}; width: #{wide}%; padding:8px; padding-right:12px'>"
393
393
  stuff << '<b><i>' + box + '</i></b></div>'
394
- _out "</p>" # kludge!! nopara
394
+ api.out "</p>" # kludge!! nopara
395
395
  0.upto(2) {|i| _passthru output[i] }
396
396
  _passthru stuff
397
397
  3.upto(output.length-1) {|i| _passthru output[i] }
398
- _out "<p>" # kludge!! para
399
- _optional_blank_line
398
+ api.out "<p>" # kludge!! para
399
+ api.optional_blank_line
400
400
  end
401
401
 
402
402
  def title
@@ -406,42 +406,42 @@ def title
406
406
  @meta.title = title
407
407
  setvar :title, title
408
408
  # FIXME refactor -- just output variables for a template
409
- _optional_blank_line
409
+ api.optional_blank_line
410
410
  end
411
411
 
412
412
  def pubdate
413
413
  log!(enter: __method__)
414
414
  raise NoPostCall unless @meta
415
- _debug "data = #@_data"
415
+ api.debug "data = #@_data"
416
416
  # Check for discrepancy?
417
417
  match = /(\d{4}).(\d{2}).(\d{2})/.match @_data
418
418
  junk, y, m, d = match.to_a
419
419
  y, m, d = y.to_i, m.to_i, d.to_i
420
420
  @meta.date = ::Date.new(y, m, d)
421
421
  @meta.pubdate = "%04d-%02d-%02d" % [y, m, d]
422
- _optional_blank_line
422
+ api.optional_blank_line
423
423
  end
424
424
 
425
425
  def tags
426
426
  log!(enter: __method__)
427
427
  raise NoPostCall unless @meta
428
- _debug "args = #{_args}"
429
- @meta.tags = _args.dup || []
430
- _optional_blank_line
428
+ api.debug "args = #{_args}"
429
+ @meta.tags = api.args.dup || []
430
+ api.optional_blank_line
431
431
  end
432
432
 
433
433
  def views
434
434
  log!(enter: __method__)
435
435
  raise NoPostCall unless @meta
436
- _debug "data = #{_args}"
437
- @meta.views = _args.dup
438
- _optional_blank_line
436
+ api.debug "data = #{_args}"
437
+ @meta.views = api.args.dup
438
+ api.optional_blank_line
439
439
  end
440
440
 
441
441
  def pin
442
442
  log!(enter: __method__)
443
443
  raise NoPostCall unless @meta
444
- _debug "data = #{_args}" # verify only valid views?
444
+ api.debug "data = #{_args}" # verify only valid views?
445
445
  pinned = @_args
446
446
  @meta.pinned = pinned
447
447
  pinned.each do |pinview|
@@ -452,7 +452,7 @@ def pin
452
452
  pins.uniq!
453
453
  File.open(datafile, "w") {|out| pins.each {|pin| out.puts pin } }
454
454
  end
455
- _optional_blank_line
455
+ api.optional_blank_line
456
456
  rescue => err
457
457
  STDERR.puts "err = #{err}"
458
458
  STDERR.puts err.backtrace.join("\n") if err.respond_to?(:backtrace)
@@ -472,15 +472,15 @@ end
472
472
  def teaser
473
473
  log!(enter: __method__)
474
474
  raise NoPostCall unless @meta
475
- text = _body.join("\n")
475
+ text = api.body.join("\n")
476
476
  @meta.teaser = text
477
477
  setvar :teaser, @meta.teaser
478
- if _args[0] == "dropcap" # FIXME doesn't work yet!
478
+ if api.args[0] == "dropcap" # FIXME doesn't work yet!
479
479
  letter, remain = text[0], text[1..-1]
480
- _out %[<div class='mydrop'>#{letter}</div>]
481
- _out %[<div style="padding-top: 1px">#{remain}] + "\n"
480
+ api.out %[<div class='mydrop'>#{letter}</div>]
481
+ api.out %[<div style="padding-top: 1px">#{remain}] + "\n"
482
482
  else
483
- _out @meta.teaser + "\n"
483
+ api.out @meta.teaser + "\n"
484
484
  end
485
485
  end
486
486
 
@@ -498,10 +498,10 @@ end
498
498
 
499
499
  def head # Does NOT output <head> tags
500
500
  log!(enter: __method__)
501
- args = _args
501
+ args = api.args
502
502
  args.each do |inc|
503
503
  self.data = inc
504
- _include
504
+ dot_include
505
505
  end
506
506
  # Depends on vars: title, desc, host
507
507
  defaults = {}
@@ -522,7 +522,7 @@ def head # Does NOT output <head> tags
522
522
  "favicon" => %[<link rel="shortcut icon" type="image/x-icon" href="etc/favicon.ico">\n <link rel="apple-touch-icon" href="etc/favicon.ico">]
523
523
  }
524
524
  result = {}
525
- lines = _body
525
+ lines = api.body
526
526
  lines.each do |line|
527
527
  line.chomp
528
528
  word, remain = line.split(" ", 2)
@@ -547,14 +547,14 @@ def head # Does NOT output <head> tags
547
547
  end
548
548
  hash = defaults.dup.update(result) # FIXME collisions?
549
549
 
550
- hash.each_value {|x| _out " " + x }
550
+ hash.each_value {|x| api.out " " + x }
551
551
  end
552
552
 
553
553
  ########## newer stuff...
554
554
 
555
555
  def meta
556
556
  log!(enter: __method__)
557
- args = _args
557
+ args = api.args
558
558
  enum = args.each
559
559
  str = "<meta"
560
560
  arg = enum.next
@@ -569,12 +569,12 @@ def meta
569
569
  arg = enum.next
570
570
  end
571
571
  str << ">"
572
- _out str
572
+ api.out str
573
573
  end
574
574
 
575
575
  def recent_posts # side-effect
576
576
  log!(enter: __method__)
577
- _out <<-HTML
577
+ api.out <<-HTML
578
578
  <div class="col-lg-9 col-md-9 col-sm-9 col-xs-12">
579
579
  <iframe id="main" style="width: 70vw; height: 100vh; position: relative;"
580
580
  src='recent.html' width=100% frameborder="0" allowfullscreen>
@@ -623,17 +623,18 @@ end
623
623
 
624
624
  def sidebar
625
625
  log!(enter: __method__)
626
- _debug "--- handling sidebar\r"
627
- if _args.include? "off"
628
- _body { } # iterate, do nothing
626
+ api.debug "--- handling sidebar\r"
627
+ if api.args.include? "off"
628
+ api.body { } # iterate, do nothing
629
629
  return
630
630
  end
631
631
 
632
- _out %[<div class="col-lg-3 col-md-3 col-sm-3 col-xs-12">]
632
+ api.out %[<div class="col-lg-3 col-md-3 col-sm-3 col-xs-12">]
633
633
 
634
634
  standard = %w[pinned pages links news]
635
635
 
636
- _body do |token|
636
+ lines = api.body.to_a
637
+ lines.each do |token|
637
638
  tag = token.chomp.strip.downcase
638
639
  wtag = "../../widgets"/tag
639
640
  raise CantFindWidgetDir(wtag) unless Dir.exist?(wtag)
@@ -645,9 +646,9 @@ def sidebar
645
646
  raise "Nonstandard widget?"
646
647
  end
647
648
 
648
- _include_file wtag/tcard
649
+ api.include_file wtag/tcard
649
650
  end
650
- _out %[</div>]
651
+ api.out %[</div>]
651
652
  rescue => err
652
653
  puts "err = #{err}"
653
654
  puts err.backtrace.join("\n") if err.respond_to?(:backtrace)
@@ -657,20 +658,20 @@ end
657
658
 
658
659
  def stylesheet
659
660
  log!(enter: __method__)
660
- lines = _body
661
+ lines = api.body
661
662
  url = lines[0]
662
663
  integ = lines[1]
663
664
  cross = lines[2] || "anonymous"
664
- _out %[<link rel="stylesheet" href="#{url}" integrity="#{integ}" crossorigin="#{cross}"></link>]
665
+ api.out %[<link rel="stylesheet" href="#{url}" integrity="#{integ}" crossorigin="#{cross}"></link>]
665
666
  end
666
667
 
667
668
  def script
668
669
  log!(enter: __method__)
669
- lines = _body
670
+ lines = api.body
670
671
  url = lines[0]
671
672
  integ = lines[1]
672
673
  cross = lines[2] || "anonymous"
673
- _out %[<script src="#{url}" integrity="#{integ}" crossorigin="#{cross}"></script>]
674
+ api.out %[<script src="#{url}" integrity="#{integ}" crossorigin="#{cross}"></script>]
674
675
  end
675
676
 
676
677
  $Dot = self # Clunky! for dot commands called from Functions class
@@ -716,7 +717,7 @@ end
716
717
 
717
718
  def tag_cloud
718
719
  log!(enter: __method__)
719
- title = _data
720
+ title = api.data
720
721
  title = "Tag Cloud" if title.empty?
721
722
  open = <<-HTML
722
723
  <div class="card mb-3">
@@ -727,15 +728,15 @@ def tag_cloud
727
728
  </h5>
728
729
  <div class="collapse" id="tag-cloud">
729
730
  HTML
730
- _out open
731
- _body do |line|
731
+ api.out open
732
+ api.body do |line|
732
733
  line.chomp!
733
734
  url, classname, cdata = line.split(",", 3)
734
735
  main = _main(url)
735
- _out %[<a #{main} class="#{classname}">#{cdata}</a>]
736
+ api.out %[<a #{main} class="#{classname}">#{cdata}</a>]
736
737
  end
737
738
  close = %[ </div>\n </div>\n </div>]
738
- _out close
739
+ api.out close
739
740
  end
740
741
 
741
742
  def vnavbar
@@ -785,7 +786,7 @@ def _make_navbar(orient = :horiz)
785
786
  output = File.new(html_file, "w")
786
787
  output.puts start
787
788
  lines = _read_navbar_data
788
- lines = ["index Home"] + lines unless _args.include?("nohome")
789
+ lines = ["index Home"] + lines unless api.args.include?("nohome")
789
790
  lines.each do |line|
790
791
  basename, cdata = line.chomp.strip.split(" ", 2)
791
792
  full = :banner/:navbar/basename+".html"
@@ -831,16 +832,16 @@ def _passthru(line)
831
832
  log!(enter: __method__)
832
833
  return if line.nil?
833
834
  line = _format(line)
834
- _out line + "\n"
835
- _out "<p>" if line.empty? && ! @_nopara
835
+ api.out line + "\n"
836
+ api.out "<p>" if line.empty? && ! @_nopara
836
837
  end
837
838
 
838
839
  def _passthru_noline(line)
839
840
  log!(enter: __method__)
840
841
  return if line.nil?
841
842
  line = _format(line)
842
- _out line
843
- _out "<p>" if line.empty? && ! @_nopara
843
+ api.out line
844
+ api.out "<p>" if line.empty? && ! @_nopara
844
845
  end
845
846
 
846
847
  def _write_metadata
@@ -891,7 +892,7 @@ def _card_generic(card_title:, middle:, extra: "")
891
892
  </div>
892
893
  HTML
893
894
  text = front + middle + tail
894
- _out text + "\n "
895
+ api.out text + "\n "
895
896
  end
896
897
 
897
898
  def _var(name) # FIXME scope issue!
data/lib/lowlevel.rb CHANGED
@@ -23,13 +23,14 @@
23
23
  File.open(file, "a") {|f| f.puts "#{Time.now} #{line}" }
24
24
  end
25
25
 
26
- def system!(str, show: false)
27
- log!(enter: __method__, args: [str], level: 2)
28
- STDERR.puts str if show
29
- rc = system(str)
26
+ def system!(os_cmd, show: false)
27
+ log!(enter: __method__, args: [os_cmd], level: 2)
28
+ caller.each {|x| print "::: "; p x }
29
+ STDERR.puts os_cmd if show
30
+ rc = system(os_cmd)
30
31
  STDERR.puts " rc = #{rc.inspect}" if show
31
32
  return rc if rc
32
- STDERR.puts "FAILED: #{str.inspect}"
33
+ STDERR.puts "FAILED: #{os_cmd.inspect}"
33
34
  STDERR.puts "\ncaller = \n#{caller.join("\n ")}\n"
34
35
  if defined?(RubyText)
35
36
  sleep 6
data/lib/menus.rb CHANGED
@@ -14,33 +14,107 @@ notimp = proc { RubyText.splash("Not implemented yet") }
14
14
  top_about = proc { RubyText.splash("RuneBlog v #{RuneBlog::VERSION}") }
15
15
  top_help = proc { RubyText.splash(RuneBlog::REPL::Help.gsub(/[{}]/, " ")) }
16
16
 
17
+ def edit_blog_generate
18
+ edit_file("#@std/blog/generate.lt3")
19
+ end
20
+
21
+ def edit_blog_head
22
+ edit_file("#@std/blog/head.lt3")
23
+ end
24
+
25
+ def edit_blog_index
26
+ edit_file("#@std/blog/index.lt3")
27
+ end
28
+
29
+ def edit_post_entry
30
+ edit_file("#@std/blog/post_entry.lt3")
31
+ end
32
+
33
+ def edit_blog_banner
34
+ edit_file("#@std/banner/banner.lt3")
35
+ end
36
+
37
+ def edit_blog_navbar
38
+ edit_file("#@std/navbar/navbar.lt3")
39
+ end
40
+
41
+ def edit_post_generate
42
+ edit_file("#@std/post/generate.lt3")
43
+ end
44
+
45
+ def edit_post_head
46
+ edit_file("#@std/post/head.lt3")
47
+ end
48
+
49
+ def edit_post_index
50
+ edit_file("#@std/post/index.lt3")
51
+ end
52
+
53
+ def edit_view_global
54
+ edit_file("#@data/global.lt3")
55
+ end
56
+
57
+ def edit_settings_view
58
+ edit_file("settings/view.txt")
59
+ end
60
+
61
+ def edit_settings_recent
62
+ edit_file("settings/recent.txt")
63
+ end
64
+
65
+ def edit_settings_publish
66
+ edit_file("settings/publish.txt")
67
+ end
68
+
69
+ def edit_settings_features
70
+ edit_file("settings/features.txt")
71
+ end
72
+
73
+ def edit_config_reddit
74
+ edit_file("config/reddit/credentials.txt")
75
+ end
76
+
77
+ def edit_config_facebook
78
+ edit_file("config/facebook/credentials.txt")
79
+ end
80
+
81
+ def edit_config_twitter
82
+ edit_file("config/twitter/credentials.txt")
83
+ end
84
+
85
+ def edit_etc_blog_css
86
+ edit_file("#@std/etc/blog.css.lt3")
87
+ end
88
+
89
+ def edit_etc_externals
90
+ edit_file("#@std/etc/externals.lt3")
91
+ end
17
92
 
18
93
  # dir = @blog.view.dir/"themes/standard/"
19
94
 
20
- std = "themes/standard"
21
- data = "." # CHANGED
95
+ @std = "themes/standard"
96
+ @data = "." # CHANGED
22
97
 
23
98
  Menu.top_config = {
24
- "View: generator" => edit("#{std}/blog/generate.lt3"),
25
- " HEAD info" => edit("#{std}/blog/head.lt3"),
26
- " Layout " => edit("#{std}/blog/index.lt3"),
27
- " Recent-posts entry" => edit("#{std}/blog/post_entry.lt3"),
28
- " Banner: Description" => edit("#{std}/banner/banner.lt3"),
29
- " Navbar" => edit("#{std}/navbar/navbar.lt3"),
30
- # " Text portion" => edit("#{std}/banner/top.lt3"),
31
- "Generator for a post" => edit("#{std}/post/generate.lt3"),
32
- " HEAD info for post" => edit("#{std}/post/head.lt3"),
33
- " Content for post" => edit("#{std}/post/index.lt3"),
34
- "Variables (general)" => edit("#{data}/global.lt3"),
35
- " View-specific" => edit("settings/view.txt"),
36
- " Recent posts" => edit("settings/recent.txt"),
37
- " Publishing" => edit("settings/publish.txt"),
38
- "Configuration: enable/disable" => edit("settings/features.txt"),
39
- " Reddit" => edit("config/reddit/credentials.txt"),
40
- " Facebook" => edit("config/facebook/credentials.txt"),
41
- " Twitter" => edit("config/twitter/credentials.txt"),
42
- "Global CSS" => edit("#{std}/etc/blog.css.lt3"),
43
- "External JS/CSS (Bootstrap, etc.)" => edit("/etc/externals.lt3")
99
+ "View: generator" => proc { edit_blog_generate },
100
+ " HEAD info" => proc { edit_blog_head },
101
+ " Layout " => proc { edit_blog/index },
102
+ " Recent-posts entry" => proc { edit_post_entry },
103
+ " Banner: Description" => proc { edit_banner },
104
+ " Navbar" => proc { edit_navbar },
105
+ "Generator for a post" => proc { edit_post_generate },
106
+ " HEAD info for post" => proc { edit_post_head },
107
+ " Content for post" => proc { edit_post_index },
108
+ "Variables (general)" => proc { edit_view_global },
109
+ " View-specific" => proc { edit_settings_view },
110
+ " Recent posts" => proc { edit_settings_recent },
111
+ " Publishing" => proc { edit_settings_publish },
112
+ "Configuration: enable/disable" => proc { edit_settings_features },
113
+ " Reddit" => proc { edit_config_reddit },
114
+ " Facebook" => proc { edit_config_facebook },
115
+ " Twitter" => proc { edit_config_twitter },
116
+ "Global CSS" => proc { edit_etc_blog_css },
117
+ "External JS/CSS (Bootstrap, etc.)" => proc { edit_etc_externals }
44
118
  }
45
119
 
46
120
  Menu.top_build = {
data/lib/processing.rb CHANGED
@@ -77,11 +77,14 @@ rescue => err
77
77
  end
78
78
 
79
79
  def get_live_vars(src)
80
+ dir, base = File.dirname(src), File.basename(src)
80
81
  live = Livetext.customize(call: [".nopara"])
81
- # puts "glv: src = #{src.inspect}"
82
- # STDERR.puts "glv: src = #{src.inspect}"
83
- live.xform_file(src)
82
+ Dir.chdir(dir) { live.xform_file(base) }
84
83
  live
84
+ rescue => e
85
+ puts e
86
+ puts $!
87
+ gets
85
88
  end
86
89
 
87
90
  end