runeblog 0.2.53 → 0.2.58

Sign up to get free protection for your applications and to get access to all the features.
@@ -15,6 +15,7 @@ module RuneBlog::REPL
15
15
  "v" => :cmd_version,
16
16
  "list views" => :cmd_list_views,
17
17
  "lsv" => :cmd_list_views,
18
+ "clear" => :cmd_clear,
18
19
 
19
20
  "new view $name" => :cmd_new_view,
20
21
 
@@ -19,7 +19,7 @@ def init_liveblog # FIXME - a lot of this logic sucks
19
19
  @root = @blog.root
20
20
  @view = @blog.view
21
21
  @view_name = @blog.view.name unless @view.nil?
22
- @vdir = @blog.view.dir
22
+ @vdir = @blog.view.dir rescue "NONAME"
23
23
  @version = RuneBlog::VERSION
24
24
  @theme = @vdir/:themes/:standard
25
25
  end
@@ -87,36 +87,45 @@ def backlink
87
87
  end
88
88
 
89
89
  def banner # still experimental
90
- _out "<table>"
91
- _body do |line|
92
- pieces = line.split
93
- cols = pieces.size
94
- span = cols == 2 ? 1 : 2 # whaaat?
95
- _out " <tr>"
96
- pieces.each do |piece|
97
- _out " <td colspan=#{span}>"
98
- case
99
- when piece.start_with?("hnav")
100
- # horizontal navbar
101
- # _out "<center>hnav1 hnav2 hnav3 hnav4</center>"
102
- when piece.start_with?("vnav")
103
- # vertical navbar
104
- # _out "vnav1<br>vnav2<br>vnav3<br>vnav4<br>"
105
- when piece.start_with?("text")
106
- file = piece.split(":")[1]
107
- file ||= "banner/text.html"
108
- _out File.read(file)
109
- when piece.start_with?("image")
110
- image = piece.split(":")[1]
111
- image ||= "banner/banner.jpg"
112
- _out " <img src=#{image} height=100></img>"
113
- else
114
- _out " '#{piece}' isn't known"
115
- end
116
- _out " </td>"
90
+ _out "<table width=100% bgcolor=#101035>"
91
+ _out " <tr>"
92
+ enum = _args.each
93
+ count = 0
94
+ span = 1
95
+ loop do
96
+ count += 1
97
+ arg = enum.next
98
+ case arg
99
+ when "image"
100
+ image = "banner/banner.jpg"
101
+ _out " <td colspan=#{span}><img src=#{image} height=150></img></td>"
102
+ when "image:"
103
+ image = "banner/#{enum.next}"
104
+ _out " <td colspan=#{span}><img src=#{image} height=150></img></td>"
105
+ when "text"
106
+ file = "banner/text.html"
107
+ _out "<td colspan=#{span}>" + File.read(file) + "</td>"
108
+ when "text:"
109
+ file = "banner/#{enum.next}"
110
+ _out "<td colspan=#{span}>" + File.read(file) + "</td>"
111
+ when "navbar"
112
+ dir = @blog.root/:views/@blog.view/"themes/standard/navbar/"
113
+ xlate cwd: dir, src: "navbar.lt3", dst: "navbar.html" # , debug: true
114
+ file = "navbar/navbar.html"
115
+ _out "<td colspan=#{span}><div style='text-align: center'>" + File.read(file) + "</div></td>"
116
+ when "vnavbar"
117
+ dir = @blog.root/:views/@blog.view/"themes/standard/navbar/"
118
+ xlate cwd: dir, src: "vnavbar.lt3", dst: "vnavbar.html" # , debug: true
119
+ file = "navbar/vnavbar.html"
120
+ _out "<td colspan=#{span}>" + File.read(file) + "</td>"
121
+ when "//"
122
+ span = count - 1
123
+ _out " </tr>\n <tr>"
124
+ else
125
+ _out " '#{arg}' isn't known"
117
126
  end
118
- _out " </tr>"
119
127
  end
128
+ _out " </tr>"
120
129
  _out "</table>"
121
130
  end
122
131
 
@@ -268,22 +277,30 @@ end
268
277
 
269
278
  def pin
270
279
  raise "'post' was not called" unless @meta
271
- _debug "data = #{_args}"
272
- # verify only already-specified views?
273
- @meta.pinned = _args.dup
274
- dir = @blog.view.dir/"themes/standard/widgets/pinned/"
275
- datafile = dir/"list.data"
276
- pins = File.readlines(datafile) rescue []
277
- damn = File.new("/tmp/dammit", "w")
278
- pins << "#{@meta.num} #{@meta.title}\n"
279
- damn.puts pins
280
- pins.uniq!
281
- damn.puts pins
282
- damn.close
283
- File.open(datafile, "w") do
284
- pins.each {|pin| File.puts pin }
280
+ _debug "data = #{_args}" # verify only valid views?
281
+ pinned = @_args
282
+ @meta.pinned = pinned
283
+ pinned.each do |pinview|
284
+ dir = @blog.root/:views/pinview/"themes/standard/widgets/pinned/"
285
+ datafile = dir/"list.data"
286
+ if File.exist?(datafile)
287
+ pins = File.readlines(datafile)
288
+ else
289
+ pins = []
290
+ end
291
+ pins << "#{@meta.num} #{@meta.title}\n"
292
+ pins.uniq!
293
+ outfile = File.new(datafile, "w")
294
+ pins.each do |pin|
295
+ outfile.puts pin
296
+ end
297
+ outfile.close
285
298
  end
286
299
  _optional_blank_line
300
+ rescue => err
301
+ puts "err = #{err}"
302
+ puts err.backtrace.join("\n")
303
+ gets
287
304
  end
288
305
 
289
306
  def write_post
@@ -434,12 +451,16 @@ rescue => err
434
451
  end
435
452
 
436
453
  def sidebar
454
+ _debug "--- handling sidebar\r"
437
455
  if _args.include? "off"
438
456
  _body { } # iterate, do nothing
439
457
  return
440
458
  end
441
459
 
442
460
  _out %[<div class="col-lg-3 col-md-3 col-sm-3 col-xs-12">]
461
+
462
+ standard = %w[pinned pages links]
463
+
443
464
  _body do |token|
444
465
  tag = token.chomp.strip.downcase
445
466
  wtag = :widgets/tag
@@ -448,12 +469,14 @@ def sidebar
448
469
 
449
470
  code = _load_local(tag)
450
471
  if code
451
- if ["pages", "links"].include? tag
472
+ if ["news", "pages", "links", "pinned"].include? tag
452
473
  Dir.chdir(wtag) do
453
474
  widget = code.new(@blog)
454
475
  widget.build
455
476
  end
456
477
  end
478
+ _include_file wtag/tcard
479
+ next
457
480
  end
458
481
 
459
482
  if tag == "ad"
@@ -471,7 +494,8 @@ def sidebar
471
494
  depend += %w[pieces/card-head.lt3 pieces/card-tail.lt3]
472
495
  depend += %w[pieces/main-head.lt3 pieces/main-tail.lt3]
473
496
  depend.map! {|x| @blog.view.dir/"themes/standard/widgets"/wtag/x }
474
- xlate cwd: wtag, src: tag, dst: tcard, force: true, deps: depend , debug: (tag == "ad")
497
+ _debug "--- call xlate #{tag} src = #{tag} dst = #{tcard}\r"
498
+ xlate cwd: wtag, src: tag, dst: tcard, force: true, deps: depend # , debug: true
475
499
  _include_file wtag/tcard
476
500
  end
477
501
  _out %[</div>]
@@ -481,26 +505,6 @@ rescue => err
481
505
  exit
482
506
  end
483
507
 
484
- =begin
485
- ets/widgets/pages//card.css
486
- ets/widgets/pages//custom.rb
487
- ets/widgets/pages//disclaim.lt3
488
- ets/widgets/pages//faq.lt3
489
- ets/widgets/pages//like-dislike.lt3
490
- ets/widgets/pages//list.data
491
- ets/widgets/pages//local-vars.lt3
492
- ets/widgets/pages//local.rb
493
- ets/widgets/pages//main.css
494
- ets/widgets/pages//other-stuff.lt3
495
- ets/widgets/pages//pages.lt3
496
- ets/widgets/pages//pages.rb
497
- ets/widgets/pages//pieces
498
- ets/widgets/pages//pieces/card-head.lt3
499
- ets/widgets/pages//pieces/card-tail.lt3
500
- ets/widgets/pages//pieces/main-head.lt3
501
- ets/widgets/pages//pieces/main-tail.lt3
502
- =end
503
-
504
508
  def stylesheet
505
509
  lines = _body
506
510
  url = lines[0]
@@ -646,42 +650,55 @@ def tag_cloud
646
650
  end
647
651
 
648
652
  def vnavbar
653
+ _custom_navbar(:vert)
649
654
  end
650
655
 
651
- def navbar2
656
+ def hnavbar
657
+ _custom_navbar # horiz is default
658
+ end
659
+
660
+ def navbar
661
+ _custom_navbar # horiz is default
662
+ end
663
+
664
+ def _custom_navbar(orient = :horiz)
652
665
  vdir = @blog.view.dir
653
666
  title = _var(:blog)
654
667
 
655
- open = <<-HTML
656
- <nav class="navbar navbar-light bg-light">
657
- <a class="navbar-brand" href="index.html">#{title}</a>
658
- <ul class="navbar-nav mr-auto">
668
+ extra = ""
669
+ extra = "navbar-expand-lg" if orient == :horiz
670
+
671
+ start = <<-HTML
672
+ <!-- FIXME weird bug here!!! -->
673
+ <nav class="navbar #{extra} navbar-light bg-light">
674
+ <ul class="navbar-nav mr-auto">
659
675
  HTML
660
- close = <<-HTML
661
- </ul>
662
- </div>
676
+ finish = <<-HTML
677
+ </ul>
663
678
  </nav>
664
679
  HTML
665
680
 
666
- first = true
667
- _out open
668
- lines = _body
681
+ navdir = @blog.root/:views/@blog.view/:themes/:standard/:navbar
682
+ html_file = navdir/"navbar.html"
683
+ output = File.new(navdir/"navbar.html", "w")
684
+ output.puts start
685
+ lines = _body.to_a
686
+ lines = [" index Home"] + lines unless _args.include?("nohome")
669
687
  lines.each do |line|
670
688
  basename, cdata = line.chomp.strip.split(" ", 2)
671
- full = :navbar/basename+".html"
689
+ full = :navdir/basename+".html"
672
690
  href_main = _main(full)
673
- if first
674
- first = false # hardcode this part??
675
- _out %[<li class="nav-item active"> <a class="nav-link" href="index.html">#{cdata}<span class="sr-only">(current)</span></a> </li>]
691
+ if basename == "index" # special case
692
+ output.puts %[<li class="nav-item active"> <a class="nav-link" href="index.html">#{cdata}<span class="sr-only">(current)</span></a> </li>]
676
693
  else
677
- xlate cwd: "navbar", src: basename, dst: vdir/"remote/navbar"/basename+".html" # , debug: true
678
- _out %[<li class="nav-item"> <a class="nav-link" #{href_main}>#{cdata}</a> </li>]
694
+ xlate cwd: navdir, src: basename, dst: vdir/"remote/navbar"/basename+".html" # , debug: true
695
+ output.puts %[<li class="nav-item"> <a class="nav-link" #{href_main}>#{cdata}</a> </li>]
679
696
  end
680
697
  end
681
- _out close
698
+ output.puts finish
682
699
  end
683
700
 
684
- def navbar
701
+ def _old_navbar
685
702
  vdir = @blog.view.dir
686
703
  title = _var(:blog)
687
704
 
@@ -772,7 +789,7 @@ def _write_card(cardfile, mainfile, pairs, card_title, tag)
772
789
  wrapper = %[<li class="list-group-item">#{anchor}</li>]
773
790
  f.puts wrapper
774
791
  end
775
- _include_file cardfile+".html"
792
+ _include_file cardfile+".html"
776
793
  f.puts <<-EOS
777
794
  </div>
778
795
  </div>
@@ -9,12 +9,12 @@ class RuneBlog::Post
9
9
 
10
10
  include RuneBlog::Helpers
11
11
 
12
- def self.files(num, root)
13
- log!(enter: __method__, args: [num, root], level: 3)
14
- files = ::Find.find(root).to_a
15
- result = files.grep(/#{prefix(num)}-/)
16
- result
17
- end
12
+ # def self.files(num, root)
13
+ # log!(enter: __method__, args: [num, root], level: 3)
14
+ # files = ::Find.find(root).to_a
15
+ # result = files.grep(/#{prefix(num)}-/)
16
+ # result
17
+ # end
18
18
 
19
19
  def self.load(post)
20
20
  log!(enter: __method__, args: [post], level: 3)
@@ -54,7 +54,7 @@ module RuneBlog::REPL
54
54
 
55
55
  def cmd_manage(arg, testing = false)
56
56
  case arg
57
- when "pages"; _manage_pages(nil, testing = false)
57
+ when "pages"; _manage_pages(nil, testing = false)
58
58
  when "links"; _manage_links(nil, testing = false)
59
59
  when "navbar"; _manage_navbar(nil, testing = false)
60
60
  # when "pinned"; _manage_pinned(nil, testing = false) # ditch this??
@@ -71,7 +71,6 @@ module RuneBlog::REPL
71
71
  end
72
72
 
73
73
  def _manage_navbar(arg, testing = false) # cloned from manage_pages
74
- puts "Got to #{__method__}"
75
74
  check_empty(arg)
76
75
  dir = @blog.view.dir/"themes/standard/navbar"
77
76
  files = Dir.entries(dir) - %w[. .. navbar.lt3]
@@ -328,7 +327,7 @@ puts "Got to #{__method__}"
328
327
  id = get_integer(arg)
329
328
  # Simplify this
330
329
  tag = "#{'%04d' % id}"
331
- files = ::Find.find(@blog.root+"/drafts").to_a
330
+ files = ::Find.find(@blog.root/:drafts).to_a
332
331
  files = files.grep(/#{tag}-.*lt3/)
333
332
  files = files.map {|f| File.basename(f) }
334
333
  if files.size > 1
@@ -345,7 +344,7 @@ puts "Got to #{__method__}"
345
344
  end
346
345
 
347
346
  file = files.first
348
- draft = "#{file}" # FIXME ?
347
+ draft = @blog.root/:drafts/file
349
348
  result = edit_file(draft)
350
349
  @blog.generate_post(draft)
351
350
  rescue => err
@@ -478,10 +477,6 @@ puts "Got to #{__method__}"
478
477
  cmd = "cp #{name} #{@blog.root}/drafts/#@fname"
479
478
  result = system!(cmd)
480
479
  raise CantCopy(name, "#{@blog.root}/drafts/#@fname") unless result
481
- puts(`ls -l #{@blog.root}/drafts`)
482
- puts "@fname = #@fname"
483
- puts "Pause..."
484
- gets
485
480
  # post = Post.load(@slug)
486
481
  draft = "#{@blog.root}/drafts/#@fname"
487
482
  @meta = @blog.generate_post(draft)
@@ -499,9 +494,10 @@ gets
499
494
  {h, help} This message {change view VIEW} Change current view
500
495
  {q, quit} Exit the program {cv VIEW} Change current view
501
496
  {v, version} Print version information {new view} Create a new view
502
- {list views} List all views available
497
+ {clear} Clear screen {list views} List all views available
503
498
  {lsv} Same as: list views
504
499
 
500
+
505
501
  {Posts:} {Advanced:}
506
502
  ------------------------------------------- -------------------------------------------
507
503
  {p, post} Create a new post {config} Edit various system files
@@ -118,13 +118,10 @@ class RuneBlog
118
118
  Dir.chdir(dir) do
119
119
  views = _retrieve_metadata(:views)
120
120
  views.each do |v|
121
- puts "VIEW = #{v} dir = #{dir}"
122
121
  unless self.view?(v)
123
122
  puts "#{fx("Warning:", :red)} #{fx(v, :bold)} is not a view"
124
123
  next
125
124
  end
126
- puts "pwd = #{Dir.pwd}"
127
- puts "cp *html #@root/views/#{v}/remote"
128
125
  system!("cp *html #@root/views/#{v}/remote", show: true)
129
126
  end
130
127
  end
@@ -161,13 +158,9 @@ puts "cp *html #@root/views/#{v}/remote"
161
158
  log!(enter: __method__, args: [sourcefile], level: 2)
162
159
  nslug = sourcefile.sub(/.lt3/, "")
163
160
  dir = @root/:posts/nslug
164
- # puts "sourcefile = #{sourcefile}"
165
- puts "-- dir = #{dir}\n pwd = #{Dir.pwd}\n @root = #@root"
166
- gets
167
161
  create_dirs(dir)
168
162
  # FIXME dependencies?
169
163
  xlate cwd: dir, src: @root/:drafts/sourcefile # , debug: true
170
- # puts `ls -l #{dir}`
171
164
  _deploy_local(dir)
172
165
  rescue => err
173
166
  _tmp_error(err)
@@ -346,7 +339,6 @@ gets
346
339
  vp.nslug, vp.aslug, vp.title, vp.date, vp.teaser_text
347
340
  path = vp.path
348
341
  url = aslug + ".html"
349
- # puts "--- vp = #{[vp.nslug, vp.aslug, vp.title, vp.date, vp.teaser_text].inspect}"; gets
350
342
  date = ::Date.parse(date)
351
343
  date = date.strftime("%B %e<br><div style='float: right'>%Y</div>")
352
344
  text = interpolate(@_post_entry, binding)
@@ -447,11 +439,12 @@ gets
447
439
  depend = [vdir/"remote/etc/blog.css", @theme/"global.lt3",
448
440
  @theme/"blog/head.lt3", @theme/"navbar/navbar.lt3",
449
441
  @theme/"blog/index.lt3"] # FIXME what about assets?
450
- xlate cwd: vdir/"themes/standard/etc", deps: depend,
442
+ xlate cwd: vdir/"themes/standard/etc", deps: depend,
451
443
  src: "blog.css.lt3", copy: vdir/"remote/etc/blog.css" # , debug: true
452
- xlate cwd: vdir/"themes/standard", deps: depend,
444
+ xlate cwd: vdir/"themes/standard", deps: depend, force: true,
453
445
  src: "blog/generate.lt3", dst: vdir/:remote/"index.html"
454
446
  copy("#{vdir}/assets/*", "#{vdir}/remote/assets/")
447
+ copy_widget_html(view)
455
448
  rescue => err
456
449
  _tmp_error(err)
457
450
  end
@@ -459,7 +452,6 @@ gets
459
452
  def _get_views(draft)
460
453
  log!(enter: __method__, args: [draft], level: 2)
461
454
  # FIXME dumb code
462
- # view_line = File.readlines(self.root/:drafts/draft).grep(/^.views /)
463
455
  view_line = File.readlines(draft).grep(/^.views /)
464
456
  raise "More than one .views call!" if view_line.size > 1
465
457
  raise "No .views call!" if view_line.size < 1
@@ -2,7 +2,7 @@
2
2
  if ! (Object.constants.include?(:RuneBlog) && RuneBlog.constants.include?(:Path))
3
3
 
4
4
  class RuneBlog
5
- VERSION = "0.2.53"
5
+ VERSION = "0.2.58"
6
6
 
7
7
  path = Gem.find_files("runeblog").grep(/runeblog-/).first
8
8
  Path = File.dirname(path)
@@ -24,19 +24,18 @@ def xlate(cwd: Dir.pwd, src:,
24
24
  indent = " "*12
25
25
  Dir.chdir(cwd) do
26
26
  if debug
27
- STDERR.puts "#{indent} -- xlate #{src} >#{dst}"
28
- STDERR.puts "#{indent} in: #{Dir.pwd}"
29
- STDERR.puts "#{indent} from: #{caller[0]}"
30
- STDERR.puts "#{indent} copy: #{copy}" if copy
27
+ puts "#{indent} -- xlate #{src} >#{dst}"
28
+ puts "#{indent} in: #{Dir.pwd}"
29
+ puts "#{indent} from: #{caller[0]}"
30
+ puts "#{indent} copy: #{copy}" if copy
31
31
  end
32
32
  stale = stale?(src, dst, deps, force)
33
- # puts "stale? src = #{src}\n dst = #{dst}\n #{stale}"
34
33
  if stale
35
34
  rc = system("livetext #{src} >#{dst}")
36
- STDERR.puts "...completed (shell returned #{rc})" if debug
35
+ puts "...completed (shell returned #{rc})" if debug
37
36
  system!("cp #{dst} #{copy}") if copy
38
37
  else
39
- STDERR.puts "#{indent} -- ^ Already up to date!" if debug
38
+ puts "#{indent} -- ^ Already up to date!" if debug
40
39
  return
41
40
  end
42
41
  end