runeblog 0.1.94 → 0.1.99

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