runeblog 0.2.60 → 0.2.65

Sign up to get free protection for your applications and to get access to all the features.
Files changed (65) hide show
  1. checksums.yaml +4 -4
  2. data/README.lt3 +48 -11
  3. data/README.md +50 -11
  4. data/bin/blog +4 -3
  5. data/bin/mkwidget +65 -110
  6. data/empty_view/remote/widgets/ad/GIT_IS_DUMB +2 -0
  7. data/empty_view/remote/widgets/links/GIT_IS_DUMB +2 -0
  8. data/empty_view/remote/widgets/news/GIT_IS_DUMB +2 -0
  9. data/empty_view/remote/widgets/pages/GIT_IS_DUMB +2 -0
  10. data/empty_view/remote/widgets/pinned/GIT_IS_DUMB +2 -0
  11. data/empty_view/themes/standard/blog/generate.lt3 +1 -1
  12. data/empty_view/themes/standard/widgets/pinned/pinned.rb +1 -4
  13. data/lib/liveblog.rb +38 -259
  14. data/lib/repl.rb +4 -0
  15. data/lib/runeblog.rb +6 -17
  16. data/lib/runeblog_version.rb +1 -1
  17. data/test/austin.rb +4 -5
  18. metadata +7 -49
  19. data/empty_view/themes/standard/widgets/bydates/bydates.lt3 +0 -2
  20. data/empty_view/themes/standard/widgets/bydates/local-vars.lt3 +0 -12
  21. data/empty_view/themes/standard/widgets/bydates/pieces/card-head.lt3 +0 -8
  22. data/empty_view/themes/standard/widgets/bydates/pieces/card-tail.lt3 +0 -4
  23. data/empty_view/themes/standard/widgets/bydates/pieces/main-head.lt3 +0 -10
  24. data/empty_view/themes/standard/widgets/bydates/pieces/main-tail.lt3 +0 -4
  25. data/empty_view/themes/standard/widgets/links/links.lt3 +0 -2
  26. data/empty_view/themes/standard/widgets/links/local-vars.lt3 +0 -12
  27. data/empty_view/themes/standard/widgets/links/pieces/card-head.lt3 +0 -8
  28. data/empty_view/themes/standard/widgets/links/pieces/card-tail.lt3 +0 -4
  29. data/empty_view/themes/standard/widgets/links/pieces/main-head.lt3 +0 -10
  30. data/empty_view/themes/standard/widgets/links/pieces/main-tail.lt3 +0 -4
  31. data/empty_view/themes/standard/widgets/news/local-vars.lt3 +0 -12
  32. data/empty_view/themes/standard/widgets/news/news.lt3 +0 -2
  33. data/empty_view/themes/standard/widgets/news/pieces/card-head.lt3 +0 -8
  34. data/empty_view/themes/standard/widgets/news/pieces/card-tail.lt3 +0 -4
  35. data/empty_view/themes/standard/widgets/news/pieces/main-head.lt3 +0 -10
  36. data/empty_view/themes/standard/widgets/news/pieces/main-tail.lt3 +0 -4
  37. data/empty_view/themes/standard/widgets/pages/local-vars.lt3 +0 -12
  38. data/empty_view/themes/standard/widgets/pages/pages.lt3 +0 -2
  39. data/empty_view/themes/standard/widgets/pages/pieces/card-head.lt3 +0 -1
  40. data/empty_view/themes/standard/widgets/pages/pieces/card-tail.lt3 +0 -1
  41. data/empty_view/themes/standard/widgets/pages/pieces/main-head.lt3 +0 -10
  42. data/empty_view/themes/standard/widgets/pages/pieces/main-tail.lt3 +0 -2
  43. data/empty_view/themes/standard/widgets/pinned/local-vars.lt3 +0 -12
  44. data/empty_view/themes/standard/widgets/pinned/pieces/card-head.lt3 +0 -8
  45. data/empty_view/themes/standard/widgets/pinned/pieces/card-tail.lt3 +0 -4
  46. data/empty_view/themes/standard/widgets/pinned/pieces/main-head.lt3 +0 -10
  47. data/empty_view/themes/standard/widgets/pinned/pieces/main-tail.lt3 +0 -4
  48. data/empty_view/themes/standard/widgets/pinned/pinned.lt3 +0 -2
  49. data/empty_view/themes/standard/widgets/search/local-vars.lt3 +0 -12
  50. data/empty_view/themes/standard/widgets/search/pieces/card-head.lt3 +0 -8
  51. data/empty_view/themes/standard/widgets/search/pieces/card-tail.lt3 +0 -4
  52. data/empty_view/themes/standard/widgets/search/pieces/main-head.lt3 +0 -10
  53. data/empty_view/themes/standard/widgets/search/pieces/main-tail.lt3 +0 -4
  54. data/empty_view/themes/standard/widgets/search/search.lt3 +0 -2
  55. data/empty_view/themes/standard/widgets/sitemap/local-vars.lt3 +0 -12
  56. data/empty_view/themes/standard/widgets/sitemap/pieces/card-head.lt3 +0 -8
  57. data/empty_view/themes/standard/widgets/sitemap/pieces/card-tail.lt3 +0 -4
  58. data/empty_view/themes/standard/widgets/sitemap/pieces/main-head.lt3 +0 -10
  59. data/empty_view/themes/standard/widgets/sitemap/pieces/main-tail.lt3 +0 -4
  60. data/empty_view/themes/standard/widgets/sitemap/sitemap.lt3 +0 -2
  61. data/empty_view/themes/standard/widgets/tag-cloud/local-vars.lt3 +0 -12
  62. data/empty_view/themes/standard/widgets/tag-cloud/pieces/card-head.lt3 +0 -8
  63. data/empty_view/themes/standard/widgets/tag-cloud/pieces/card-tail.lt3 +0 -4
  64. data/empty_view/themes/standard/widgets/tag-cloud/pieces/main-head.lt3 +0 -10
  65. data/empty_view/themes/standard/widgets/tag-cloud/pieces/main-tail.lt3 +0 -4
@@ -14,7 +14,7 @@
14
14
  .include blog/head.lt3
15
15
  <body>
16
16
 
17
- $.banner text: top.html image: austin-pano.jpg // navbar
17
+ $.banner bgcolor: 101035 text: top.html image: austin-pano.jpg // navbar
18
18
  <div class="content container-fluid mt-4">
19
19
  <div class="row">
20
20
  $.include blog/index.lt3
@@ -7,10 +7,7 @@ class ::RuneBlog::Widget
7
7
  def initialize(repo)
8
8
  @blog = repo
9
9
  @datafile = "list.data"
10
- # f = File.new("/tmp/mehhh", "w")
11
10
  @lines = File.exist?(@datafile) ? File.readlines(@datafile) : []
12
- # f.puts #{@lines.inspect} in #{Dir.pwd}"
13
- File.open("/tmp/mehhh", "w") {|f| f.puts "#{@lines.inspect} in #{Dir.pwd}" }
14
11
  end
15
12
 
16
13
  def _html_body(file, css = nil) # FIXME
@@ -50,7 +47,7 @@ class ::RuneBlog::Widget
50
47
  mainfile = "#{tag}-main"
51
48
  File.open("#{mainfile}.html", "w") do |f|
52
49
  _html_body(f, css) do
53
- f.puts "<!-- #{@lines.inspect} in #{Dir.pwd} -->"
50
+ f.puts "<!-- #{@lines.inspect} in #{Dir.pwd} -->"
54
51
  f.puts "<h1>#{card_title}</h1><br><hr>"
55
52
  @links.each do |title, file|
56
53
  title = title.gsub(/\\/, "") # kludge
@@ -7,8 +7,6 @@ require 'runeblog'
7
7
  require 'pathmagic'
8
8
  require 'xlate'
9
9
 
10
- # errfile = File.new("/tmp/liveblog.out", "w")
11
- # STDERR.reopen(errfile)
12
10
 
13
11
  def init_liveblog # FIXME - a lot of this logic sucks
14
12
  here = Dir.pwd
@@ -28,8 +26,6 @@ end
28
26
  # "dot" commands
29
27
  ##################
30
28
 
31
-
32
-
33
29
  def dropcap
34
30
  # Bad form: adds another HEAD
35
31
  text = _data
@@ -72,11 +68,8 @@ def faq
72
68
  ques = _data.chomp
73
69
  ans = _body_text
74
70
  id = "faq#@faq_count"
75
- # _out %[&nbsp;<a class="btn btn-default btn-xs" data-toggle="collapse" href="##{id}" role="button" aria-expanded="false" aria-controls="collapseExample">+</a>]
76
71
  _out %[&nbsp;<a data-toggle="collapse" href="##{id}" role="button" aria-expanded="false" aria-controls="collapseExample"><font size=+3>&#8964;</font></a>]
77
72
  _out %[&nbsp;<b>#{ques}</b>]
78
- # _out "<font size=-2><br></font>" if @faq_count == 1
79
- # _out "<br>" unless @faq_count == 1
80
73
  _out %[<div class="collapse" id="#{id}"><br><font size=+1>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#{ans}</font></div>\n]
81
74
  _out "<br>" unless @faq_count == 1
82
75
  _optional_blank_line
@@ -93,11 +86,21 @@ def _read_navbar_data
93
86
  end
94
87
 
95
88
  def banner # still experimental
96
- _out "<table width=100% bgcolor=#101035>"
97
- _out " <tr>"
98
89
  enum = _args.each
99
90
  count = 0
100
91
  span = 1
92
+ first = enum.peek
93
+ if first.start_with?("bgcolor:")
94
+ enum.next
95
+ bg = enum.next
96
+ else
97
+ bg = nil # bg = white - do nothing
98
+ end
99
+ str = "<table width=100%"
100
+ str << (bg ? " bgcolor=##{bg}>" : ">")
101
+ _out str
102
+ _out " <tr>"
103
+
101
104
  loop do
102
105
  count += 1
103
106
  arg = enum.next
@@ -119,17 +122,14 @@ def banner # still experimental
119
122
  _out "<td colspan=#{span}>" + File.read(file) + "</td>" +
120
123
  " <!-- #{arg} -->"
121
124
  when "navbar"
122
- # STDERR.puts "-- navbar: pwd = #{Dir.pwd}: #{`ls`}"
123
125
  dir = @blog.root/:views/@blog.view/"themes/standard/banner/"
124
126
  _make_navbar # horiz is default
125
- # xlate cwd: dir, src: "navbar.lt3", dst: "navbar.html" # , debug: true
126
127
  stuff = File.read("banner/navbar.html")
127
128
  _out "<td colspan=#{span}><div style='text-align: center'>#{stuff}</div></td>" +
128
129
  " <!-- #{arg} -->"
129
130
  when "vnavbar"
130
131
  dir = @blog.root/:views/@blog.view/"themes/standard/banner/"
131
132
  _make_navbar(:vert)
132
- # xlate cwd: dir, src: "vnavbar.lt3", dst: "vnavbar.html" # , debug: true
133
133
  file = "banner/vnavbar.html"
134
134
  _out "<td colspan=#{span}>" + File.read(file) + "</td>" +
135
135
  "<!-- #{arg} -->"
@@ -197,21 +197,6 @@ def list!
197
197
  _optional_blank_line
198
198
  end
199
199
 
200
-
201
- def make_main_links
202
- log!(enter: __method__, level: 1)
203
- # FIXME remember strings may not be safe
204
- line = _data.chomp
205
- tag, card_title = *line.split(" ", 2)
206
- cardfile, mainfile = "#{tag}-card", "#{tag}-main"
207
- input = "list.data"
208
- log!(str: "Reading #{input}", pwd: true, level: 3)
209
- pairs = File.readlines(input).map {|line| line.chomp.split(/, */, 2) }
210
- _write_main(mainfile, pairs, card_title, tag)
211
- _write_card(cardfile, mainfile, pairs, card_title, tag)
212
- log!(str: "...returning from method", pwd: true, level: 3)
213
- end
214
-
215
200
  ### inset
216
201
 
217
202
  def inset
@@ -232,7 +217,6 @@ def inset
232
217
  else # Only into body
233
218
  output << line
234
219
  end
235
- # _passthru(line)
236
220
  end
237
221
  lr = _args.first
238
222
  wide = _args[1] || "25"
@@ -241,10 +225,6 @@ def inset
241
225
  _out "</p>" # kludge!! nopara
242
226
  0.upto(2) {|i| _passthru output[i] }
243
227
  _passthru stuff
244
- # _passthru "<div style='float:#{lr}; width: #{wide}%; padding:8px; padding-right:12px'>" # ; font-family:verdana'>"
245
- # _passthru '<b><i>'
246
- # _passthru box
247
- # _passthru_noline '</i></b></div>'
248
228
  3.upto(output.length-1) {|i| _passthru output[i] }
249
229
  _out "<p>" # kludge!! para
250
230
  _optional_blank_line
@@ -256,7 +236,6 @@ def title
256
236
  @meta.title = title
257
237
  setvar :title, title
258
238
  # FIXME refactor -- just output variables for a template
259
- # _out %[<h1 class="post-title">#{title}</h1><br>]
260
239
  _optional_blank_line
261
240
  end
262
241
 
@@ -346,15 +325,8 @@ def teaser
346
325
  end
347
326
 
348
327
  def finalize
349
- # FIXME simplify this!
350
- unless @meta
351
- STDERR.puts "META is nil: file = #{Livetext::Vars[:File]}"
352
- # puts @live.body
353
- return
354
- end
355
- if @blog.nil?
356
- return @meta
357
- end
328
+ return unless @meta
329
+ return @meta if @blog.nil?
358
330
 
359
331
  @slug = @blog.make_slug(@meta)
360
332
  slug_dir = @slug
@@ -480,7 +452,18 @@ def pinned_rebuild
480
452
  widget = code.new(@blog)
481
453
  widget.build
482
454
  end
483
- _include_file wtag/"pinned-card.html"
455
+ # _include_file wtag/"pinned-card.html"
456
+ end
457
+ end
458
+ end
459
+
460
+ def _handle_standard_widget(tag)
461
+ wtag = :widgets/tag
462
+ code = _load_local(tag)
463
+ if code
464
+ Dir.chdir(wtag) do
465
+ widget = code.new(@blog)
466
+ widget.build
484
467
  end
485
468
  end
486
469
  end
@@ -494,7 +477,7 @@ def sidebar
494
477
 
495
478
  _out %[<div class="col-lg-3 col-md-3 col-sm-3 col-xs-12">]
496
479
 
497
- standard = %w[pinned pages links]
480
+ standard = %w[pinned pages links news]
498
481
 
499
482
  _body do |token|
500
483
  tag = token.chomp.strip.downcase
@@ -502,34 +485,23 @@ def sidebar
502
485
  raise "Can't find #{wtag}" unless Dir.exist?(wtag)
503
486
  tcard = "#{tag}-card.html"
504
487
 
505
- code = _load_local(tag)
506
- if code
507
- if ["news", "pages", "links", "pinned"].include? tag
508
- Dir.chdir(wtag) do
509
- widget = code.new(@blog)
510
- widget.build
488
+ case
489
+ when standard.include?(tag)
490
+ _handle_standard_widget(tag)
491
+ when tag == "ad"
492
+ num = rand(1..4)
493
+ img = "widgets/ad/ad#{num}.png"
494
+ src, dst = img, @root/:views/@view_name/"remote/widgets/ad/"
495
+ system!("cp #{src} #{dst}") # , show: true)
496
+ File.open(wtag/"vars.lt3", "w") do |f|
497
+ f.puts ".set ad.image = #{img}"
511
498
  end
512
- end
513
- _include_file wtag/tcard
514
- next
515
- end
516
-
517
- if tag == "ad"
518
- num = rand(1..4)
519
- img = "widgets/ad/ad#{num}.png"
520
- src, dst = img, @root/:views/@view_name/"remote/widgets/ad/"
521
- system!("cp #{src} #{dst}") # , show: true)
522
- File.open(wtag/"vars.lt3", "w") do |f|
523
- f.puts ".set ad.image = #{img}"
524
- end
525
- xlate cwd: wtag, src: tag, dst: tcard, force: true # , deps: depend # , debug: true
499
+ xlate cwd: wtag, src: tag, dst: tcard, force: true # , deps: depend # , debug: true
526
500
  end
527
501
 
528
502
  _include_file wtag/tcard
529
503
  # depend = %w[card.css main.css custom.rb local.rb]
530
504
  # depend += ["#{wtag}.lt3", "#{wtag}.rb"]
531
- # depend += %w[pieces/card-head.lt3 pieces/card-tail.lt3]
532
- # depend += %w[pieces/main-head.lt3 pieces/main-tail.lt3]
533
505
  # depend.map! {|x| @blog.view.dir/"themes/standard/widgets"/wtag/x }
534
506
  # _debug "--- call xlate #{tag} src = #{tag} dst = #{tcard}\r"
535
507
  end
@@ -556,21 +528,6 @@ def script
556
528
  _out %[<script src="#{url}" integrity="#{integ}" crossorigin="#{cross}"></script>]
557
529
  end
558
530
 
559
- def card_iframe
560
- title, lines = _data, _body
561
- lines.map!(&:chomp)
562
- url = lines[0].chomp
563
- stuff = lines[1..-1].join(" ") # FIXME later
564
- middle = <<-HTML
565
- <iframe src="#{url}" #{stuff}
566
- style="border: 0" #{stuff}
567
- frameborder="0" scrolling="no">
568
- </iframe>
569
- HTML
570
-
571
- _card_generic(card_title: title, middle: middle, extra: "bg-dark text-white")
572
- end
573
-
574
531
  $Dot = self # Clunky! for dot commands called from Functions class
575
532
 
576
533
  # Find a better way to do this?
@@ -607,59 +564,10 @@ class Livetext::Functions
607
564
  def _var(name)
608
565
  ::Livetext::Vars[name] || "[:#{name} is undefined]"
609
566
  end
610
-
611
- # def link(param = nil)
612
- # puts "--- WTF?? param = #{param.inspect}"; gets
613
- # file, cdata = param.split("||", 2)
614
- # %[<a href="assets/#{file}">#{cdata}</a>]
615
- # end
616
- #
617
- # def link(param = nil)
618
- # file, cdata = param.split("||", 2)
619
- # %[<link type="application/atom+xml" rel="alternate" href="#{_var(:host)}#{file}" title="#{_var(:title)}">]
620
- # end
621
567
  end
622
568
 
623
569
  ###
624
570
 
625
- def card1
626
- title, lines = _data, _body
627
- lines.map!(&:chomp)
628
-
629
- card_text = lines[0]
630
- url, classname, cdata = lines[1].split(",", 4)
631
- main = _main(url)
632
-
633
- middle = <<-HTML
634
- <p class="card-text">#{card_text}</p>
635
- <a #{main} class="#{classname}">#{cdata}</a>
636
- HTML
637
-
638
- _card_generic(card_title: title, middle: middle, extra: "bg-dark text-white")
639
- end
640
-
641
- def card2
642
- str = _data
643
- file, card_title = str.chomp.split(" ", 2)
644
- card_title = %[<a #{_main(file)} style="text-decoration: none; color: black">#{card_title}</a>]
645
-
646
- # FIXME is this wrong??
647
-
648
- open = <<-HTML
649
- <div class="card mb-3">
650
- <div class="card-body">
651
- <h5 class="card-title">#{card_title}</h5>
652
- <ul class="list-group list-group-flush">
653
- HTML
654
- _out open
655
- _body do |line|
656
- url, cdata = line.chomp.split(",", 3)
657
- main = _main(url)
658
- _out %[<li class="list-group-item"><a #{main}}">#{cdata}</a> </li>]
659
- end
660
- close = %[ </ul>\n </div>\n </div>]
661
- _out close
662
- end
663
571
 
664
572
  def tag_cloud
665
573
  title = _data
@@ -686,17 +594,14 @@ end
686
594
 
687
595
  def vnavbar
688
596
  str = _make_navbar(:vert)
689
- # _out str
690
597
  end
691
598
 
692
599
  def hnavbar
693
600
  str = _make_navbar # horiz is default
694
- # _out str
695
601
  end
696
602
 
697
603
  def navbar
698
604
  str = _make_navbar # horiz is default
699
- # _out str
700
605
  end
701
606
 
702
607
  def _make_navbar(orient = :horiz)
@@ -757,123 +662,6 @@ def _html_body(file, css = nil)
757
662
  file.puts " </body>\n</html>"
758
663
  end
759
664
 
760
- def _write_card(cardfile, mainfile, pairs, card_title, tag)
761
- log!(str: "Creating #{cardfile}.html", pwd: true, level: 2)
762
- url = mainfile
763
- url = :widgets/tag/mainfile + ".html"
764
- File.open("#{cardfile}.html", "w") do |f|
765
- f.puts <<-EOS
766
- <div class="card mb-3">
767
- <div class="card-body">
768
- <h5 class="card-title">
769
- <button type="button" class="btn btn-primary" data-toggle="collapse" data-target="##{tag}">+</button>
770
- <a href="javascript: void(0)"
771
- onclick="javascript:open_main('#{url}')"
772
- style="text-decoration: none; color: black"> #{card_title}</a>
773
- </h5>
774
- <div class="collapse" id="#{tag}">
775
- EOS
776
- log!(str: "Writing data pairs to #{cardfile}.html", pwd: true, level: 2)
777
- local = _local_tag?(tag)
778
- pairs.each do |file, title|
779
- url = file
780
- type, title = page_type(tag, title)
781
- case type
782
- when :local; url_ref = _widget_card(file, tag) # local always frameable
783
- when :frame; url_ref = _main(file) # remote, frameable
784
- when :noframe; url_ref = _blank(file) # remote, not frameable
785
- end
786
- anchor = %[<a #{url_ref}>#{title}</a>]
787
- wrapper = %[<li class="list-group-item">#{anchor}</li>]
788
- f.puts wrapper
789
- end
790
- _include_file cardfile+".html"
791
- f.puts <<-EOS
792
- </div>
793
- </div>
794
- </div>
795
- EOS
796
- end
797
- end
798
-
799
- def _local_tag?(tag)
800
- case tag.to_sym
801
- when :pages
802
- true
803
- when :news, :links
804
- false
805
- else
806
- true # Hmmm...
807
- end
808
- end
809
-
810
- def page_type(tag, title)
811
- yesno = "yes"
812
- yesno, title = title.split(/, */) if title =~ /^[yes|no]/
813
- local = _local_tag?(tag)
814
- frameable = (yesno == "yes")
815
- if local
816
- return [:local, title]
817
- elsif frameable
818
- return [:frame, title]
819
- else
820
- return [:noframe, title]
821
- end
822
- end
823
-
824
- def _write_main_pages(mainfile, pairs, card_title, tag)
825
- local = _local_tag?(tag)
826
- pieces = @blog.view.dir/"themes/standard/widgets"/tag/:pieces
827
- main_head = xlate! cwd: pieces, src: "main-head.lt3"
828
- main_tail = xlate! cwd: pieces, src: "main-tail.lt3"
829
- # ^ make into methods in pages.rb or whatever?
830
-
831
- File.open("#{mainfile}.html", "w") do |f|
832
- f.puts main_head
833
- pairs.each do |file, title|
834
- type, title = page_type(tag, title)
835
- title = title.gsub(/\\/, "") # kludge
836
- case type
837
- when :local; url_ref = _widget_main(file, tag) # local always frameable
838
- when :frame; url_ref = "href = '#{file}'" # local always frameable
839
- when :noframe; url_ref = _blank(file) # local always frameable
840
- end
841
- css = "color: #8888FF; text-decoration: none; font-size: 21px" # ; font-family: verdana"
842
- f.puts %[<a style="#{css}" #{url_ref}>#{title}</a> <br>]
843
- end
844
- f.puts main_tail
845
- end
846
- end
847
-
848
- def _write_main(mainfile, pairs, card_title, tag)
849
- log!(str: "Creating #{mainfile}.html", pwd: true, level: 2)
850
-
851
- if tag == "pages" # temporary experiment
852
- _write_main_pages(mainfile, pairs, card_title, tag)
853
- return
854
- end
855
-
856
- local = _local_tag?(tag)
857
- setvar "card.title", card_title
858
- css = "* { font-family: verdana }"
859
- File.open("#{mainfile}.html", "w") do |f|
860
- _html_body(f, css) do
861
- f.puts "<h1>#{card_title}</h1><br><hr>"
862
- pairs.each do |file, title|
863
- type, title = page_type(tag, title)
864
- title = title.gsub(/\\/, "") # kludge
865
- case type
866
- when :local; url_ref = _widget_main(file, tag) # local always frameable
867
- when :frame; url_ref = "href = '#{file}'" # local always frameable
868
- when :noframe; url_ref = _blank(file) # local always frameable
869
- end
870
- css = "color: #8888FF; text-decoration: none; font-size: 21px" # ; font-family: verdana"
871
- f.puts %[<a style="#{css}" #{url_ref}>#{title}</a> <br>]
872
- end
873
- end
874
- end
875
- end
876
-
877
665
  def _errout(*args)
878
666
  ::STDERR.puts *args
879
667
  end
@@ -948,12 +736,3 @@ def _blank(url)
948
736
  %[href='#{url}' target='blank']
949
737
  end
950
738
 
951
- def _widget_main(url, tag)
952
- %[href="#{url}"]
953
- end
954
-
955
- def _widget_card(url, tag)
956
- url2 = :widgets/tag/url
957
- %[href="javascript: void(0)" onclick="javascript:open_main('#{url2}')"]
958
- end
959
-