runeblog 0.1.94 → 0.1.99

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.
Files changed (46) hide show
  1. checksums.yaml +4 -4
  2. data/lib/default.rb +0 -3
  3. data/lib/helpers-blog.rb +14 -3
  4. data/lib/liveblog.rb +102 -60
  5. data/lib/repl.rb +3 -2
  6. data/lib/runeblog.rb +6 -22
  7. data/lib/runeblog_version.rb +1 -1
  8. data/runeblog.gemspec +1 -1
  9. data/themes/standard/README +31 -31
  10. data/themes/standard/blog/head.lt3 +2 -3
  11. data/themes/standard/blog/index.lt3 +3 -1
  12. data/themes/standard/etc/blog.css.lt3 +36 -0
  13. data/themes/standard/etc/misc.js +6 -0
  14. data/themes/standard/global.lt3 +10 -1
  15. data/themes/standard/navbar/about.html +4 -2
  16. data/themes/standard/navbar/contact.html +6 -0
  17. data/themes/standard/post/generate.lt3 +4 -2
  18. data/themes/standard/post/permalink.lt3 +26 -0
  19. data/themes/standard/sidebar/README +3 -0
  20. data/themes/standard/widgets/README +4 -0
  21. data/themes/standard/widgets/ad/ad.lt3 +11 -0
  22. data/themes/standard/widgets/ad/ad2.lt3 +12 -0
  23. data/themes/standard/{sidebar → widgets/calendar}/calendar.lt3 +0 -0
  24. data/themes/standard/widgets/news/card-news.html +17 -0
  25. data/themes/standard/widgets/news/list.data +4 -0
  26. data/themes/standard/widgets/news/main-news.html +9 -0
  27. data/themes/standard/widgets/news/news.lt3 +4 -0
  28. data/themes/standard/widgets/pages/README +2 -0
  29. data/themes/standard/widgets/pages/disclaim.lt3 +6 -0
  30. data/themes/standard/widgets/pages/faq.lt3 +6 -0
  31. data/themes/standard/widgets/pages/generated.lt3 +4 -0
  32. data/themes/standard/widgets/pages/lifestory.lt3 +6 -0
  33. data/themes/standard/widgets/pages/like-dislike.lt3 +6 -0
  34. data/themes/standard/widgets/pages/list.data +4 -0
  35. data/themes/standard/widgets/pages/main.html +9 -0
  36. data/themes/standard/widgets/pages/main.lt3 +18 -0
  37. data/themes/standard/widgets/tag-cloud/tag-cloud.lt3 +10 -0
  38. metadata +27 -13
  39. data/themes/standard/etc/blog.css +0 -34
  40. data/themes/standard/liveblog.out +0 -27
  41. data/themes/standard/meta.lt3 +0 -3
  42. data/themes/standard/sidebar/ad.lt3 +0 -5
  43. data/themes/standard/sidebar/news.lt3 +0 -7
  44. data/themes/standard/sidebar/tag-cloud.lt3 +0 -10
  45. data/themes/standard/tryme.lt3 +0 -47
  46. data/themes/standard/vars +0 -29
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: dde4860831c4c3da1e36c4176d4aba0625a1d29a9a99ff2689d4dc4804228dac
4
- data.tar.gz: 9492a6f450c4f79285b73dbca0d570b704dd052826b4e843df0b43a898beace6
3
+ metadata.gz: aec5b477d7f2cb604623e089adbaae8bb87d5ddcb784ebc3d2935aa02892e9d1
4
+ data.tar.gz: f3a03f9555b4bc7a4d9e6149e0cd9606e1d1269ceb184cac04e8d579797647ff
5
5
  SHA512:
6
- metadata.gz: ab149f65c893edef8ab26d43028c6a58272475a972e0fab41dfc425e87390f99ceaf1f64d87f2f09df6059a67fe9634bb9ba187d7f51630d2a1de5bd08a6a5e9
7
- data.tar.gz: d5dfad340047b73c67290807a147d745c36d7f99df4aa88383bf5eca513c3c189842346ce9ec14b4f4de1cd969d3d312b71d8f6b1a4b31a74f1d519491884f62
6
+ metadata.gz: 2956b5197b0d57215fdf7701eb3369755cdc04494b357b0dbfe538e8614c8f41f643f78cd26e67d6687a925a47b9486f6375af0d3a16810d2598625b7156ae0e
7
+ data.tar.gz: f788243f1c0c1802ecc99218de1d92f87d51a67093f8d31fbf330a8825b43e8c70f478c6b756c993a295f26c76dbe0dbcd5e7d3a9d4fa39e3b22bd365cc1c482
@@ -23,9 +23,6 @@ def RuneBlog.post_template(num: 0, title: "No title", date: nil, view: "test_vie
23
23
  #{teaser}
24
24
  .end
25
25
  #{body}
26
-
27
- <br>
28
- <a href="javascript:history.go(-1)">[Back]</a>
29
26
  TEXT
30
27
 
31
28
  end
@@ -12,9 +12,20 @@ module RuneBlog::Helpers
12
12
  system("cp -r #{src} #{dst}")
13
13
  end
14
14
 
15
- def livetext(src, dst)
15
+ def stale?(src, dst)
16
+ return true unless File.exist?(dst)
17
+ return true if File.mtime(src) > File.mtime(dst)
18
+ return false
19
+ end
20
+
21
+ def livetext(src, dst=nil)
16
22
  src << ".lt3" unless src.end_with?(".lt3")
17
- dst << ".html" unless dst.end_with?(".html")
23
+ if dst
24
+ dst << ".html" unless dst.end_with?(".html")
25
+ else
26
+ dst = src.sub(/.lt3$/, "")
27
+ end
28
+ return unless stale?(src, dst)
18
29
  system("livetext #{src} >#{dst}")
19
30
  end
20
31
 
@@ -65,7 +76,7 @@ module RuneBlog::Helpers
65
76
  vals
66
77
  end
67
78
 
68
- def put_config(root:, view:"test_view", editor: "/bin/vim")
79
+ def put_config(root:, view:"test_view", editor: "/usr/local/bin/vim")
69
80
  Dir.mkdir(root) unless Dir.exist?(root)
70
81
  Dir.chdir(root) do
71
82
  File.open("config", "w") do |cfg|
@@ -5,7 +5,7 @@ require 'date'
5
5
  require 'livetext'
6
6
  require 'runeblog'
7
7
 
8
- errfile = File.new("liveblog.out", "w")
8
+ errfile = File.new("/tmp/liveblog.out", "w")
9
9
  STDERR.reopen(errfile)
10
10
 
11
11
  def init_liveblog # FIXME - a lot of this logic sucks
@@ -28,12 +28,6 @@ def post
28
28
  _out " <!-- Post number #{@meta.num} -->\n "
29
29
  end
30
30
 
31
- def _view_from_cwd
32
- md = Dir.pwd.match(%r[.*/views/(.*?)/])
33
- return md[1] if md
34
- nil
35
- end
36
-
37
31
  def quote
38
32
  _passthru "<blockquote>"
39
33
  _passthru _body
@@ -60,11 +54,68 @@ def h6; _passthru "
#{@_data}
"; end
60
54
 
61
55
  def hr; _passthru "<hr>"; end
62
56
 
63
- def emit # send to STDOUT?
64
- @emit = true
65
- case _args.first
66
- when "off"; @emit = false
67
- when "on"; @emit = true
57
+ def list
58
+ _out "<ul>"
59
+ _body {|line| _out "<li>#{line}</li>" }
60
+ _out "</ul>"
61
+ _optional_blank_line
62
+ end
63
+
64
+ def list!
65
+ _out "<ul>"
66
+ lines = _body.each
67
+ loop do
68
+ line = lines.next
69
+ line = _format(line)
70
+ if line[0] == " "
71
+ _out line
72
+ else
73
+ _out "<li>#{line}</li>"
74
+ end
75
+ end
76
+ _out "</ul>"
77
+ _optional_blank_line
78
+ end
79
+
80
+ def html_body(file)
81
+ file.puts "<html>\n <body>"
82
+ yield
83
+ file.puts " </body>\n</html>"
84
+ end
85
+
86
+ def make_magic_links
87
+ # FIXME remember strings may not be safe
88
+ line = _data.chomp
89
+ input, cardfile, mainfile, card_title = *line.split(" ", 4)
90
+ pairs = File.readlines(input).map {|line| line.chomp.split(",", 2) }
91
+ # HTML for main area (iframe)
92
+ File.open("#{mainfile}.html", "w") do |f|
93
+ html_body(f) do
94
+ f.puts "<h1>#{card_title}</h1>"
95
+ pairs.each {|file, title| f.puts %[<a href="#{file}">#{title}</a> <br>] }
96
+ end
97
+ end
98
+ # HTML for sidebar card
99
+ File.open("#{cardfile}.html", "w") do |f|
100
+ f.puts <<-EOS
101
+ <div class="card mb-3">
102
+ <div class="card-body">
103
+ <h5 class="card-title">
104
+ <a href="javascript: void(0)"
105
+ onclick="javascript:open_main('#{mainfile}')"
106
+ style="text-decoration: none; color: black">#{card_title}</a>
107
+ </h5>
108
+ EOS
109
+ pairs.each do |file, title|
110
+ f.puts <<-EOS
111
+ <li class="list-group-item"> <a href="javascript: void(0)"
112
+ onclick="javascript:open_main('#{file}')">#{title}</a> </li>
113
+ EOS
114
+ end
115
+ f.puts <<-EOS
116
+ </div>
117
+ </div>
118
+ EOS
68
119
  end
69
120
  end
70
121
 
@@ -164,29 +215,6 @@ def pin
164
215
  _optional_blank_line
165
216
  end
166
217
 
167
- def list
168
- _out "<ul>"
169
- _body {|line| _out "<li>#{line}</li>" }
170
- _out "</ul>"
171
- _optional_blank_line
172
- end
173
-
174
- def list!
175
- _out "<ul>"
176
- lines = _body.each
177
- loop do
178
- line = lines.next
179
- line = _format(line)
180
- if line[0] == " "
181
- _out line
182
- else
183
- _out "<li>#{line}</li>"
184
- end
185
- end
186
- _out "</ul>"
187
- _optional_blank_line
188
- end
189
-
190
218
  def write_post
191
219
  raise "'post' was not called" unless @meta
192
220
  save = Dir.pwd
@@ -277,6 +305,8 @@ class Livetext::Functions
277
305
  end
278
306
  end
279
307
 
308
+ ###
309
+
280
310
  def _var(name) # FIXME scope issue!
281
311
  ::Livetext::Vars[name] || "[:#{name} is undefined]"
282
312
  end
@@ -291,12 +321,12 @@ def head # Does NOT output tags
291
321
  defaults = {}
292
322
  defaults = { "charset" => %[<meta charset="utf-8">],
293
323
  "http-equiv" => %[<meta http-equiv="X-UA-Compatible" content="IE=edge">],
294
- "title" => %[<title>\n #{_var(:blog)} | #{_var(:blog_desc)}\n </title>],
324
+ "title" => %[<title>\n #{_var(:blog)} | #{_var("blog.desc")}\n </title>],
295
325
  "generator" => %[<meta name="generator" content="Runeblog v #@version">],
296
326
  "og:title" => %[<meta property="og:title" content="#{_var(:blog)}">],
297
327
  "og:locale" => %[<meta property="og:locale" content="#{_var(:locale)}">],
298
- "description" => %[<meta name="description" content="#{_var(:blog_desc)}">],
299
- "og:description" => %[<meta property="og:description" content="#{_var(:blog_desc)}">],
328
+ "description" => %[<meta name="description" content="#{_var("blog.desc")}">],
329
+ "og:description" => %[<meta property="og:description" content="#{_var("blog.desc")}">],
300
330
  "linkc" => %[<link rel="canonical" href="#{_var(:host)}">],
301
331
  "og:url" => %[<meta property="og:url" content="#{_var(:host)}">],
302
332
  "og:site_name" => %[<meta property="og:site_name" content="#{_var(:blog)}">],
@@ -367,9 +397,12 @@ end
367
397
  def sidebar
368
398
  _out %[<div class="col-lg-3 col-md-3 col-sm-3 col-xs-12">]
369
399
  _body do |line|
370
- tag = line.chomp.strip
371
- self.data = "sidebar/#{tag.downcase}.lt3"
372
- _include
400
+ tag = line.chomp.strip.downcase
401
+ Dir.chdir("widgets/#{tag}") do
402
+ source = "#{tag}.lt3"
403
+ livetext source, "/dev/null"
404
+ _include_file "card-#{source}.html"
405
+ end
373
406
  end
374
407
  _out %[</div>]
375
408
  end
@@ -378,8 +411,11 @@ def sidebar!
378
411
  _out %[<div class="col-lg-3 col-md-3 col-sm-3 col-xs-12">]
379
412
  _args do |line|
380
413
  tag = line.chomp.strip
381
- self.data = "sidebar/#{tag.downcase}.lt3"
382
- _include
414
+ source = "sidebar/#{tag.downcase}.lt3"
415
+ unless File.exist?(source)
416
+ source = "widgets/#{tag.downcase}/main.lt3"
417
+ end
418
+ _include_file source
383
419
  end
384
420
  _out %[</div>]
385
421
  end
@@ -451,7 +487,7 @@ def all_teasers
451
487
  end
452
488
  text << "</body></html>"
453
489
  File.write("recent.html", text)
454
- _out %[<iframe style="width: 100vw;height: 100vh;position: relative;" src='recent.html' width=100% frameborder="0" allowfullscreen></iframe>]
490
+ _out %[<iframe id="main" style="width: 100vw; height: 100vh; position: relative;" src='recent.html' width=100% frameborder="0" allowfullscreen></iframe>]
455
491
  end
456
492
 
457
493
  def _post_lookup(postid) # side-effect
@@ -512,7 +548,7 @@ def card_iframe
512
548
  stuff = lines[1..-1].join(" ") # FIXME later
513
549
  middle = <<-HTML
514
550
  <iframe src="#{url}" #{stuff}
515
- style="border: 0" height="350"
551
+ style="border: 0" #{stuff}
516
552
  frameborder="0" scrolling="no">
517
553
  </iframe>
518
554
  HTML
@@ -520,23 +556,30 @@ def card_iframe
520
556
  _card_generic(card_title: title, middle: middle, extra: "bg-dark text-white")
521
557
  end
522
558
 
559
+ def _main(url)
560
+ %[href="javascript: void(0)" onclick="javascript:open_main('#{url}')"]
561
+ end
562
+
523
563
  def card1
524
564
  title, lines = _data, _body
525
565
  lines.map!(&:chomp)
526
566
 
527
567
  card_text = lines[0]
528
- url, target, classname, cdata = lines[1].split(",", 4)
568
+ url, classname, cdata = lines[1].split(",", 4)
569
+ main = _main(url)
529
570
 
530
571
  middle = <<-HTML
531
572
  <p class="card-text">#{card_text}</p>
532
- <a href="#{url}" target="#{target}" class="#{classname}">#{cdata}</a>
573
+ <a #{main} class="#{classname}">#{cdata}</a>
533
574
  HTML
534
575
 
535
576
  _card_generic(card_title: title, middle: middle, extra: "bg-dark text-white")
536
577
  end
537
578
 
538
579
  def card2
539
- card_title = _data
580
+ str = _data
581
+ file, card_title = str.chomp.split(" ", 2)
582
+ card_title = %[<a #{_main(file)} style="text-decoration: none; color: black">#{card_title}</a>]
540
583
 
541
584
  # FIXME is this wrong??
542
585
 
@@ -544,18 +587,16 @@ def card2
544
587
  <div class="card mb-3">
545
588
  <div class="card-body">
546
589
  <h5 class="card-title">#{card_title}</h5>
547
- </div>
548
590
  <ul class="list-group list-group-flush">
549
591
  HTML
550
592
  _out open
551
593
  _body do |line|
552
- url, target, cdata = line.chomp.split(",", 3)
553
- _out %[<li class="list-group-item"><a href="#{url}" target="#{target}">#{cdata}</a> </li>]
594
+ url, cdata = line.chomp.split(",", 3)
595
+ main = _main(url)
596
+ _out %[<li class="list-group-item"><a #{main}}">#{cdata}</a> </li>]
554
597
  end
555
- close = %[ </ul>\n </div>]
598
+ close = %[ </ul>\n </div>\n </div>]
556
599
  _out close
557
- rescue
558
- puts @live.body
559
600
  end
560
601
 
561
602
  def tag_cloud
@@ -569,15 +610,15 @@ def tag_cloud
569
610
  _out open
570
611
  _body do |line|
571
612
  line.chomp!
572
- url, target, classname, cdata = line.split(",", 4)
573
- _out %[<a href="#{url}" target="#{target}" class="#{classname}">#{cdata}</a>]
613
+ url, classname, cdata = line.split(",", 4)
614
+ main = _main(url)
615
+ _out %[<a #{main} class="#{classname}">#{cdata}</a>]
574
616
  end
575
- rescue
576
- puts @live.body
577
617
  end
578
618
 
579
619
  def navbar
580
620
  title = _var(:blog)
621
+
581
622
  open = <<-HTML
582
623
  <nav class="navbar navbar-expand-lg navbar-light bg-light">
583
624
  <a class="navbar-brand" href="index.html">#{title}</a>
@@ -590,7 +631,6 @@ def navbar
590
631
  aria-label="Toggle navigation">
591
632
  <span class="navbar-toggler-icon"></span>
592
633
  </button>
593
-
594
634
  <div class="collapse navbar-collapse pull-right"
595
635
  id="navbarSupportedContent">
596
636
  <ul class="navbar-nav mr-auto">
@@ -605,11 +645,13 @@ def navbar
605
645
  _out open
606
646
  _body do |line|
607
647
  href, cdata = line.chomp.strip.split(" ", 2)
648
+ main = _main(href)
608
649
  if first
609
650
  first = false
610
651
  _out %[<li class="nav-item active"> <a class="nav-link" href="#{href}">#{cdata}<span class="sr-only">(current)</span></a> </li>]
611
652
  else
612
- _out %[<li class="nav-item"> <a class="nav-link" href="#{href}">#{cdata}</a> </li>]
653
+ main = _main("navbar/#{href}")
654
+ _out %[<li class="nav-item"> <a class="nav-link" #{main}>#{cdata}</a> </li>]
613
655
  end
614
656
  end
615
657
  _out close
@@ -1,15 +1,16 @@
1
- # require 'runeblog'
1
+ require 'runeblog'
2
2
  require 'global'
3
3
  require 'ostruct'
4
4
  require 'helpers-repl' # FIXME structure
5
5
 
6
6
  make_exception(:PublishError, "Error during publishing")
7
- # make_exception(:EditorProblem, "Could not edit $1")
7
+ make_exception(:EditorProblem, "Could not edit $1")
8
8
 
9
9
  module RuneBlog::REPL
10
10
 
11
11
  def edit_file(file)
12
12
  result = system("#{@blog.editor} #{file}")
13
+ STDERR.puts "editor = #{@blog.editor} FILE = #{file}"
13
14
  raise EditorProblem(file) unless result
14
15
  sleep 0.1
15
16
  STDSCR.clear
@@ -177,7 +177,8 @@ class RuneBlog
177
177
  x = RuneBlog::Default
178
178
  copy!("#{Themes}", "themes")
179
179
  create_dirs(:assets, :posts)
180
- create_dirs(:staging, :remote)
180
+ create_dirs(:staging, "remote/permalink", "remote/navbar")
181
+ livetext "themes/standard/etc/blog.css.lt3" # strip ext
181
182
  copy!("themes/standard/*", "staging/")
182
183
  copy!("themes/standard/etc", "remote/")
183
184
  copy!("themes/standard/assets", "remote/")
@@ -185,8 +186,6 @@ class RuneBlog
185
186
  pub = "user: xxx\nserver: xxx\ndocroot: xxx\npath: xxx\nproto: xxx\n"
186
187
  dump(pub, "publish")
187
188
 
188
- # Add to global.lt3 here? FIXME
189
-
190
189
  view = RuneBlog::View.new(arg)
191
190
  self.view = view
192
191
  vdir = self.view.dir
@@ -212,14 +211,6 @@ class RuneBlog
212
211
  files.reject! {|f| File.mtime(f) < File.mtime("#{vdir}/last_published") }
213
212
  end
214
213
 
215
- def files_by_id(id) # FIXME get rid of this later
216
- raise ArgumentError unless id.is_a?(Integer)
217
- files = Find.find(self.view.dir).to_a
218
- tag = prefix(id)
219
- result = files.grep(/#{tag}-/)
220
- result
221
- end
222
-
223
214
  def post_lookup(postid) # side-effect?
224
215
  # .. = templates, ../.. = views/thisview
225
216
  slug = title = date = teaser_text = nil
@@ -278,11 +269,10 @@ class RuneBlog
278
269
  text << "</body></html>"
279
270
  File.write(file, text) # FIXME ???
280
271
  iframe_text = <<-HTML
281
- <iframe style="width: 100vw;height: 100vh;position: relative;"
272
+ <iframe name="main" style="width: 100vw;height: 100vh;position: relative;"
282
273
  src='recent.html' width=100% frameborder="0" allowfullscreen>
283
274
  </iframe>
284
275
  HTML
285
- # _out iframe_text # FIXME ??
286
276
  end
287
277
 
288
278
  def create_new_post(title, testing = false, teaser: nil, body: nil, other_views: [])
@@ -392,12 +382,10 @@ class RuneBlog
392
382
  lt3 = draft.split("/")[-1]
393
383
  # Remember: Some posts may be in more than one view -- careful with links back
394
384
  # system("livetext #{draft} >staging/#{name}/index.html") # permalink?
395
- # Structure is borked?
396
385
  copy!("#{@theme}/*", "#{staging}")
397
386
  copy(lt3, staging)
398
387
  html = noext[5..-1]
399
388
  livetext draft, html
400
- STDERR.puts "pwd = #{Dir.pwd}"
401
389
  copy(draft, "../../staging/post/index.html")
402
390
  title_line = File.readlines(draft).grep(/^.title /).first
403
391
  title = title_line.split(" ", 2)[1]
@@ -408,8 +396,10 @@ STDERR.puts "pwd = #{Dir.pwd}"
408
396
  File.open("vars.lt3", "w") {|f| f.puts vars }
409
397
  livetext "post/generate.lt3", html
410
398
  copy html, "../remote"
399
+ livetext "post/permalink.lt3", "../remote/permalink/#{html}"
411
400
  collect_recent_posts("recent.html")
412
401
  copy("recent.html", "../remote")
402
+ copy!("navbar/*html", "../remote/navbar/")
413
403
  livetext "blog/generate", "../remote/index"
414
404
  end
415
405
  end
@@ -425,7 +415,7 @@ STDERR.puts "pwd = #{Dir.pwd}"
425
415
  check_meta(meta, "index_entry1")
426
416
  raise ArgumentError unless view.is_a?(String) || view.is_a?(RuneBlog::View)
427
417
  check_meta(meta, "index_entry2")
428
- self.make_slug(meta) # RuneBlog#index_entry
418
+ self.make_slug(meta)
429
419
  check_meta(meta, "index_entry3")
430
420
  # FIXME clean up and generalize
431
421
  ref = "#{view}/#{meta.slug}/index.html"
@@ -490,12 +480,6 @@ STDERR.puts "pwd = #{Dir.pwd}"
490
480
  system("rm -rf #@root/drafts/#{tag}-*")
491
481
  end
492
482
 
493
- def post_exists?(num)
494
- raise ArgumentError unless num.is_a?(Integer)
495
- list = files_by_id(num) # FIXME search under view dirs
496
- list.empty? ? nil : list
497
- end
498
-
499
483
  def make_slug(meta)
500
484
  raise ArgumentError unless meta.title.is_a?(String)
501
485
  label = '%04d' % meta.num # FIXME can do better
@@ -2,7 +2,7 @@
2
2
  if ! (Object.constants.include?(:RuneBlog) && RuneBlog.constants.include?(:Path))
3
3
 
4
4
  class RuneBlog
5
- VERSION = "0.1.94"
5
+ VERSION = "0.1.99"
6
6
 
7
7
  path = Gem.find_files("runeblog").grep(/runeblog-/).first
8
8
  Path = File.dirname(path)
@@ -20,7 +20,7 @@ spec = Gem::Specification.new do |s|
20
20
  s.authors = ["Hal Fulton"]
21
21
  s.email = 'rubyhacker@gmail.com'
22
22
  s.executables << "blog"
23
- s.add_runtime_dependency 'livetext', '~> 0.8', '>= 0.8.89'
23
+ s.add_runtime_dependency 'livetext', '~> 0.8', '>= 0.8.92'
24
24
  s.add_runtime_dependency 'rubytext', '~> 0.1', '>= 0.1.16'
25
25
 
26
26
  # Files...
@@ -1,37 +1,37 @@
1
- New structire:
1
+ New structure:
2
2
 
3
- .
4
- ├── README
5
- ├── assets
6
- ├── banner
7
- ├── blog
8
- │   ├── generate.lt3
9
- │   ├── head.lt3
10
- │   ├── index.lt3
11
- │   └── post_entry.lt3
12
- ├── etc
13
- │   ├── blog.css
14
- │   ├── externals.lt3
15
- │   └── favicon.ico
16
- ├── global.lt3
17
- ├── head.lt3
18
- ├── liveblog.out
19
- ├── meta.lt3
20
- ├── navbar
21
- │   ├── about.html
22
- │   └── navbar.lt3
23
- ├── pages
24
- ├── post
25
- │   ├── generate.lt3
26
- │   ├── head.lt3
27
- │   └── index.lt3
28
- └── sidebar
29
- ├── ad.lt3
30
- ├── calendar.lt3
31
- ├── news.lt3
32
- └── tag-cloud.lt3
3
+ themes/standard The first "default theme" - more later
4
+ ├── README This file
5
+ ├── assets Assets (images/videos/etc) for entire view
6
+ ├── banner Top banner for the view
7
+ ├── blog All files/info for view
8
+ │   ├── generate.lt3 Generate index.html from wrapper (rarely edited)
9
+ │   ├── head.lt3 Header info for index.html
10
+ │   ├── index.lt3 "Guts" of view (user-edited, wrapped by generate.lt3)
11
+ │   └── post_entry.lt3
12
+ ├── etc
13
+ │   ├── blog.css
14
+ │   ├── externals.lt3
15
+ │   └── favicon.ico
16
+ ├── global.lt3
17
+ ├── navbar
18
+ │   ├── about.html
19
+ │   └── navbar.lt3
20
+ ├── pages
21
+ ├── post
22
+ │   ├── generate.lt3
23
+ │   ├── head.lt3
24
+ │   ├── index.lt3
25
+ │   └── permalink.lt3
26
+ └── sidebar
27
+    ├── ad.lt3
28
+    ├── calendar.lt3
29
+    ├── news.lt3
30
+    └── tag-cloud.lt3
33
31
 
34
32
 
33
+ Old structure:
34
+
35
35
  templates The first "default theme" - more later
36
36
  ├── README This file
37
37
  ├── about.html An "about" file (will move)
@@ -1,10 +1,9 @@
1
- .include meta.lt3
2
-
3
1
  <head>
4
2
  .include etc/externals.lt3
3
+ .include etc/misc.js
5
4
 
5
+ . fix/remove later
6
6
  .head
7
- . # fix/remove later
8
7
  .end
9
8
 
10
9
  </head>
@@ -1,4 +1,6 @@
1
1
  .recent_posts
2
2
 
3
- .sidebar! ad news calendar tag-cloud
3
+ .sidebar! news ad tag-cloud
4
+
5
+ . for now, skip: ad calendar tag-cloud
4
6
 
@@ -0,0 +1,36 @@
1
+ .nopara
2
+ .include themes/standard/global.lt3
3
+
4
+ \.post-title a {
5
+ color: $post.title.color;
6
+ font-size: $post.title.size;
7
+ float: right;
8
+ display: inline-block;
9
+ text-align: top;
10
+ text-decoration: none;
11
+ }
12
+
13
+ \.post-title a:hover {
14
+ text-decoration: none;
15
+ }
16
+
17
+ \.post-title-text a {
18
+ color: $post.text.color;
19
+ font-size: $post.text.size;
20
+ # float: right;
21
+ display: block;
22
+ text-decoration: none;
23
+ }
24
+
25
+ \.post-title-text a:hover {
26
+ text-decoration: none;
27
+ }
28
+
29
+ \.post-date {
30
+ color: $post.date.color;
31
+ font-size: $post.date.size;
32
+ display: block;
33
+ float: left;
34
+ text-align: top;
35
+ }
36
+
@@ -0,0 +1,6 @@
1
+ <script>
2
+ function open_main(url) {
3
+ var site = url+'?toolbar=0&amp;navpanes=0&amp;scrollbar=0';
4
+ document.getElementById('main').src = site;
5
+ }
6
+ </script>
@@ -1,12 +1,21 @@
1
1
  .variables
2
2
  author Hal Fulton
3
3
  blog My Blog (and Welcome To It)
4
- blog_desc All the stuff you never needed to know
4
+ blog.desc All the stuff you never needed to know
5
5
  host localhost:4000//
6
6
  charset utf-8
7
7
  site rubyhacker.com
8
8
  url localhost:4000//
9
9
  locale en_US
10
+
11
+ post.title.color #010101
12
+ post.title.size 28px
13
+
14
+ post.text.color #0101a1
15
+ post.text.size 22px
16
+
17
+ post.date.color #9a9a9a
18
+ post.date.size 15px
10
19
  .end
11
20
 
12
21
  . Maybe move publish info here?
@@ -1,4 +1,6 @@
1
- <section class="post">
1
+ <div class="content container-fluid mt-4">
2
+ <div class="row">
2
3
  <h1>About me</h1>
3
4
  Blah blah blah...
4
- </section>
5
+ </div>
6
+ </div>
@@ -0,0 +1,6 @@
1
+ <div class="content container-fluid mt-4">
2
+ <div class="row">
3
+ <h1>Contact</h1>
4
+ How to contact me by email, smoke signals, ICBM, seance, ...
5
+ </div>
6
+ </div>
@@ -6,10 +6,9 @@
6
6
  <!-- Editing this file is not recommended. -->
7
7
  <!-- It was generated from $File on $$date. -->
8
8
 
9
- .include meta.lt3
10
9
  .include global.lt3
11
-
12
10
  .include vars.lt3
11
+
13
12
  .head
14
13
  og:title $title
15
14
  description $teaser
@@ -20,5 +19,8 @@ description $teaser
20
19
  $.include post/index.html
21
20
  </div>
22
21
  </section>
22
+
23
+ <br>
24
+ <a href="javascript:history.go(-1)">[Back]</a>
23
25
  </body>
24
26
  </html>
@@ -0,0 +1,26 @@
1
+ .mixin liveblog
2
+
3
+ . FIXME?
4
+
5
+ <html>
6
+ <!-- Editing this file is not recommended. -->
7
+ <!-- It was generated from $File on $$date. -->
8
+
9
+ .include global.lt3
10
+ .include vars.lt3
11
+
12
+ .head
13
+ og:title $title
14
+ description $teaser
15
+ .end
16
+
17
+ <section class="post">
18
+ <div class="entry-content">
19
+ $.include post/index.html
20
+ </div>
21
+ </section>
22
+
23
+ <br>
24
+ <a href="../index.html">[Home: $blog]</a>
25
+ </body>
26
+ </html>
@@ -0,0 +1,3 @@
1
+ Should sidebar/ be deleted?
2
+ Or should it serve to show which widgets are being used?
3
+ Probably needs to be there for URLs? Not sure.
@@ -0,0 +1,4 @@
1
+ bydates Browse blog entries for past dates
2
+ links List of links (typically offsite)
3
+ pages List of pages (my own local stuff)
4
+ search Search posts by tag, title, body, etc.
@@ -0,0 +1,11 @@
1
+ . This is the "card" (sidebar) version.
2
+
3
+ . In real life, there may be complex code here
4
+ . referencing some advertiser or ad network
5
+ . which will bring up a random ad.
6
+
7
+ .card1 Advertisement
8
+ Build your amazing website with blabla.com.
9
+ https://google.com/,btn btn-light float-right,Visit Page
10
+ .end
11
+
@@ -0,0 +1,12 @@
1
+ .set classname="btn btn-light float-right"
2
+ .set card.title="Advertisement"
3
+ .set card.text="Build your amazing website with blabla.com."
4
+ .set extra="bg-dark text-white"
5
+
6
+ <div class="card #{_var[:extra]} mb-3">
7
+ <div class="card-body">
8
+ <h5 class="card-title">#{_var["card.title"]}</h5>
9
+ <p class="card-text">#{_var["card.text"]}</p>
10
+ <a #{main} class="#{classname}">#{_var["card.text"]}</a>
11
+ </div>
12
+ </div>
@@ -0,0 +1,17 @@
1
+ <div class="card mb-3">
2
+ <div class="card-body">
3
+ <h5 class="card-title">
4
+ <a href="javascript: void(0)"
5
+ onclick="javascript:open_main('main-news')"
6
+ style="text-decoration: none; color: black">Recent News</a>
7
+ </h5>
8
+ <li class="list-group-item"> <a href="javascript: void(0)"
9
+ onclick="javascript:open_main('https://techcrunch.com/2019/09/16/fossa-scores-8-5-million-series-a-to-help-enterprise-manage-open-source-licenses/')">FOSSA scores \$8.5 million Series A to help enterprise manage open-source licenses</a> </li>
10
+ <li class="list-group-item"> <a href="javascript: void(0)"
11
+ onclick="javascript:open_main('https://techcrunch.com/2019/09/17/spacexs-orbital-starship-prototype-construction-progress-detailed-in-new-photos/')">SpaceX’s orbital Starship prototype construction progress detailed in new photos</a> </li>
12
+ <li class="list-group-item"> <a href="javascript: void(0)"
13
+ onclick="javascript:open_main('https://developers.googleblog.com/2019/05/Flutter-io19.html')">Flutter: a Portable UI Framework for Mobile, Web, Embedded, and Desktop</a> </li>
14
+ <li class="list-group-item"> <a href="javascript: void(0)"
15
+ onclick="javascript:open_main('https://jaycarlson.net/microcontrollers/')">The Amazing \$1 Microcontroller (2017)</a> </li>
16
+ </div>
17
+ </div>
@@ -0,0 +1,4 @@
1
+ https://techcrunch.com/2019/09/16/fossa-scores-8-5-million-series-a-to-help-enterprise-manage-open-source-licenses/,FOSSA scores \$8.5 million Series A to help enterprise manage open-source licenses
2
+ https://techcrunch.com/2019/09/17/spacexs-orbital-starship-prototype-construction-progress-detailed-in-new-photos/,SpaceX’s orbital Starship prototype construction progress detailed in new photos
3
+ https://developers.googleblog.com/2019/05/Flutter-io19.html,Flutter: a Portable UI Framework for Mobile, Web, Embedded, and Desktop
4
+ https://jaycarlson.net/microcontrollers/,The Amazing \$1 Microcontroller (2017)
@@ -0,0 +1,9 @@
1
+ <html>
2
+ <body>
3
+ <h1>Recent News</h1>
4
+ <a href="https://techcrunch.com/2019/09/16/fossa-scores-8-5-million-series-a-to-help-enterprise-manage-open-source-licenses/">FOSSA scores \$8.5 million Series A to help enterprise manage open-source licenses</a> <br>
5
+ <a href="https://techcrunch.com/2019/09/17/spacexs-orbital-starship-prototype-construction-progress-detailed-in-new-photos/">SpaceX’s orbital Starship prototype construction progress detailed in new photos</a> <br>
6
+ <a href="https://developers.googleblog.com/2019/05/Flutter-io19.html">Flutter: a Portable UI Framework for Mobile, Web, Embedded, and Desktop</a> <br>
7
+ <a href="https://jaycarlson.net/microcontrollers/">The Amazing \$1 Microcontroller (2017)</a> <br>
8
+ </body>
9
+ </html>
@@ -0,0 +1,4 @@
1
+ .mixin liveblog
2
+ .nopara
3
+ .make_magic_links list.data card-news main-news Recent News
4
+ .end
@@ -0,0 +1,2 @@
1
+ This is a work in progress...
2
+
@@ -0,0 +1,6 @@
1
+ .page_title Disclaimer
2
+
3
+ This is
4
+ just a
5
+ dummy file
6
+ for now
@@ -0,0 +1,6 @@
1
+ .page_title Freqently Asked Questions
2
+
3
+ This is
4
+ just a
5
+ dummy file
6
+ for now
@@ -0,0 +1,4 @@
1
+ <a href="faq.lt3">Frequently Asked Questions</a> <br>
2
+ <a href="like-dislike.lt3">Likes and Dislikes</a> <br>
3
+ <a href="disclaim.lt3">Disclaimer</a> <br>
4
+ <a href="lifestory.lt3">My Life Story</a> <br>
@@ -0,0 +1,6 @@
1
+ .page_title My Life Story
2
+
3
+ This is
4
+ just a
5
+ dummy file
6
+ for now
@@ -0,0 +1,6 @@
1
+ .page_title Likes and Dislikes
2
+
3
+ This is
4
+ just a
5
+ dummy file
6
+ for now
@@ -0,0 +1,4 @@
1
+ faq.lt3 Frequently Asked Questions
2
+ like-dislike.lt3 Likes and Dislikes
3
+ disclaim.lt3 Disclaimer
4
+ lifestory.lt3 My Life Story
@@ -0,0 +1,9 @@
1
+ <h1>Pages</h1>
2
+ <p>
3
+
4
+ <p>
5
+
6
+ <a href="faq.lt3">Frequently Asked Questions</a> <br>
7
+ <a href="like-dislike.lt3">Likes and Dislikes</a> <br>
8
+ <a href="disclaim.lt3">Disclaimer</a> <br>
9
+ <a href="lifestory.lt3">My Life Story</a> <br>
@@ -0,0 +1,18 @@
1
+ .card_iframe
2
+ <h1>Pages</h1>
3
+
4
+ .def make_links
5
+ pairs = File.readlines("list.data").map {|line| line.chomp.split(" ", 2) }
6
+ File.open("generated.lt3", "w") do |f|
7
+ pairs.each do |file, title|
8
+ f.puts <<-EOS
9
+ <a href="#{file}">#{title}</a> <br>
10
+ EOS
11
+ end
12
+ end
13
+ .end
14
+
15
+ .make_links
16
+
17
+ .include generated.lt3
18
+ .end
@@ -0,0 +1,10 @@
1
+ .tag_cloud
2
+ https://google.com/,btn btn-dark m-1,Programming
3
+ https://google.com/,btn btn-danger m-1,Science Fiction
4
+ https://google.com/,btn btn-light m-1,Art
5
+ https://google.com/,btn btn-dark m-1,Robotics
6
+ https://google.com/,btn btn-warning m-1,Food and Travel
7
+ https://google.com/,btn btn-light m-1,DIY Hacks
8
+ https://google.com/,btn btn-info m-1,Surfing
9
+ .end
10
+
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: runeblog
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.94
4
+ version: 0.1.99
5
5
  platform: ruby
6
6
  authors:
7
7
  - Hal Fulton
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-09-15 00:00:00.000000000 Z
11
+ date: 2019-09-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: livetext
@@ -19,7 +19,7 @@ dependencies:
19
19
  version: '0.8'
20
20
  - - ">="
21
21
  - !ruby/object:Gem::Version
22
- version: 0.8.89
22
+ version: 0.8.92
23
23
  type: :runtime
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
@@ -29,7 +29,7 @@ dependencies:
29
29
  version: '0.8'
30
30
  - - ">="
31
31
  - !ruby/object:Gem::Version
32
- version: 0.8.89
32
+ version: 0.8.92
33
33
  - !ruby/object:Gem::Dependency
34
34
  name: rubytext
35
35
  requirement: !ruby/object:Gem::Requirement
@@ -82,23 +82,37 @@ files:
82
82
  - themes/standard/blog/head.lt3
83
83
  - themes/standard/blog/index.lt3
84
84
  - themes/standard/blog/post_entry.lt3
85
- - themes/standard/etc/blog.css
85
+ - themes/standard/etc/blog.css.lt3
86
86
  - themes/standard/etc/externals.lt3
87
87
  - themes/standard/etc/favicon.ico
88
+ - themes/standard/etc/misc.js
88
89
  - themes/standard/global.lt3
89
- - themes/standard/liveblog.out
90
- - themes/standard/meta.lt3
91
90
  - themes/standard/navbar/about.html
91
+ - themes/standard/navbar/contact.html
92
92
  - themes/standard/navbar/navbar.lt3
93
93
  - themes/standard/post/generate.lt3
94
94
  - themes/standard/post/head.lt3
95
95
  - themes/standard/post/index.lt3
96
- - themes/standard/sidebar/ad.lt3
97
- - themes/standard/sidebar/calendar.lt3
98
- - themes/standard/sidebar/news.lt3
99
- - themes/standard/sidebar/tag-cloud.lt3
100
- - themes/standard/tryme.lt3
101
- - themes/standard/vars
96
+ - themes/standard/post/permalink.lt3
97
+ - themes/standard/sidebar/README
98
+ - themes/standard/widgets/README
99
+ - themes/standard/widgets/ad/ad.lt3
100
+ - themes/standard/widgets/ad/ad2.lt3
101
+ - themes/standard/widgets/calendar/calendar.lt3
102
+ - themes/standard/widgets/news/card-news.html
103
+ - themes/standard/widgets/news/list.data
104
+ - themes/standard/widgets/news/main-news.html
105
+ - themes/standard/widgets/news/news.lt3
106
+ - themes/standard/widgets/pages/README
107
+ - themes/standard/widgets/pages/disclaim.lt3
108
+ - themes/standard/widgets/pages/faq.lt3
109
+ - themes/standard/widgets/pages/generated.lt3
110
+ - themes/standard/widgets/pages/lifestory.lt3
111
+ - themes/standard/widgets/pages/like-dislike.lt3
112
+ - themes/standard/widgets/pages/list.data
113
+ - themes/standard/widgets/pages/main.html
114
+ - themes/standard/widgets/pages/main.lt3
115
+ - themes/standard/widgets/tag-cloud/tag-cloud.lt3
102
116
  homepage: https://github.com/Hal9000/runeblog
103
117
  licenses:
104
118
  - Ruby
@@ -1,34 +0,0 @@
1
- # include variables before this file?
2
-
3
- .post-title a {
4
- color: #010101;
5
- font-size: 28px;
6
- float: right;
7
- display: inline-block;
8
- text-align: top;
9
- text-decoration: none;
10
- }
11
-
12
- .post-title a:hover {
13
- text-decoration: none;
14
- }
15
-
16
- .post-title-text a {
17
- color: #0101a1;
18
- font-size: 22px;
19
- # float: right;
20
- display: block;
21
- text-decoration: none;
22
- }
23
-
24
- .post-title-text a:hover {
25
- text-decoration: none;
26
- }
27
-
28
- .post-date {
29
- color: #9a9a9a;
30
- font-size: 15px;
31
- display: block;
32
- float: left;
33
- text-align: top;
34
- }
@@ -1,27 +0,0 @@
1
- In /Users/Hal/Dropbox/files/runeblog/themes/standard
2
- - about to process global.lt3
3
- ...finished
4
- In /Users/Hal/Dropbox/files/runeblog/themes/standard
5
- - about to process blog/head.lt3
6
- In /Users/Hal/Dropbox/files/runeblog/themes/standard
7
- - about to process meta.lt3
8
- ...finished
9
- In /Users/Hal/Dropbox/files/runeblog/themes/standard
10
- - about to process navbar.lt3
11
- ...finished
12
- In /Users/Hal/Dropbox/files/runeblog/themes/standard
13
- - about to process blog-index.lt3
14
- In /Users/Hal/Dropbox/files/runeblog/themes/standard
15
- - about to process sidebar/ad.lt3
16
- ...finished
17
- In /Users/Hal/Dropbox/files/runeblog/themes/standard
18
- - about to process sidebar/news.lt3
19
- ...finished
20
- In /Users/Hal/Dropbox/files/runeblog/themes/standard
21
- - about to process sidebar/calendar.lt3
22
- ...finished
23
- In /Users/Hal/Dropbox/files/runeblog/themes/standard
24
- - about to process sidebar/tag-cloud.lt3
25
- ...finished
26
- ...finished
27
- ...finished
@@ -1,3 +0,0 @@
1
- .meta charset: utf-8
2
- .meta http-equiv: X-UA-Compatible content: IE=edge,chrome=1
3
- .meta name: viewport content: width=device-width,initial-scale=1
@@ -1,5 +0,0 @@
1
- .card1 Advertisement
2
- Build your amazing website with blabla.com.
3
- https://google.com/,_blank,btn btn-light float-right,Visit Page
4
- .end
5
-
@@ -1,7 +0,0 @@
1
- .card2 Recent News
2
- https://nest.com/whats-happening/,_blank,Google Is Turning Off the Works-with-Nest API
3
- https://developers.googleblog.com/2019/05/Flutter-io19.html,_blank,Flutter: a Portable UI Framework for Mobile, Web, Embedded, and Desktop
4
- https://github.com/kkuchta/css-only-chat,_blank,Css-only-chat: A truly monstrous async web chat using no JS on the front end
5
- https://jaycarlson.net/microcontrollers/,_blank,The Amazing $1 Microcontroller (2017)
6
- .end
7
-
@@ -1,10 +0,0 @@
1
- .tag_cloud
2
- https://google.com/,_blank,btn btn-dark m-1,Programming
3
- https://google.com/,_blank,btn btn-danger m-1,Science Fiction
4
- https://google.com/,_blank,btn btn-light m-1,Art
5
- https://google.com/,_blank,btn btn-dark m-1,Robotics
6
- https://google.com/,_blank,btn btn-warning m-1,Food and Travel
7
- https://google.com/,_blank,btn btn-light m-1,DIY Hacks
8
- https://google.com/,_blank,btn btn-info m-1,Surfing
9
- .end
10
-
@@ -1,47 +0,0 @@
1
- # include variables before this file?
2
-
3
- .set postcolor=#010101
4
-
5
- .raw
6
- .post-title a {
7
- .end
8
- color: $postcolor;
9
- font-size: 28px;
10
- float: right;
11
- display: inline-block;
12
- text-align: top;
13
- text-decoration: none;
14
- }
15
-
16
- .raw
17
- .post-title a:hover {
18
- .end
19
- text-decoration: none;
20
- }
21
-
22
- .raw
23
- .post-title-text a {
24
- .end
25
- color: #0101a1;
26
- font-size: 22px;
27
- # float: right;
28
- display: block;
29
- text-decoration: none;
30
- }
31
-
32
- .raw
33
- .post-title-text a:hover {
34
- .end
35
- text-decoration: none;
36
- }
37
-
38
- .raw
39
- .post-date {
40
- .end
41
- color: #9a9a9a;
42
- font-size: 15px;
43
- display: block;
44
- float: left;
45
- text-align: top;
46
- }
47
-
@@ -1,29 +0,0 @@
1
-
2
- charset: utf-8
3
- blog: My Blog (and Welcome To It)
4
- blog_desc: All the stuff you never needed to know
5
- site: rubyhacker.com
6
- url: localhost:4000//
7
- locale: en_US
8
-
9
- <meta charset="utf-8">
10
- ** <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
11
- ** <meta name="viewport" content="width=device-width,initial-scale=1">
12
-
13
- <p>
14
- <title>
15
- My Blog (and Welcome To It) | All the stuff you never needed to know
16
- </title>
17
- <meta name="generator" content="Runeblog v 0.1.93">
18
- <meta property="og:title" content="My Blog (and Welcome To It)">
19
- <meta property="og:locale" content="en_US">
20
- <meta name="description" content="All the stuff you never needed to know">
21
- <meta property="og:description" content="All the stuff you never needed to know">
22
- <link rel="canonical" href="localhost:4000//">
23
- <meta property="og:url" content="localhost:4000//">
24
- <meta property="og:site_name" content="My Blog (and Welcome To It)">
25
- <link rel="stylesheet" href="etc/blog.css">
26
- <link type="application/atom+xml" rel="alternate" href="localhost:4000///feed.xml" title="My Blog (and Welcome To It)">
27
- <link rel="shortcut icon" type="image/x-icon" href="../etc/favicon.ico">
28
- <link rel="apple-touch-icon" href="../etc/favicon.ico">
29
- <body>