runeblog 0.1.95 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (37) hide show
  1. checksums.yaml +4 -4
  2. data/lib/helpers-blog.rb +14 -3
  3. data/lib/liveblog.rb +119 -69
  4. data/lib/repl.rb +3 -2
  5. data/lib/runeblog.rb +7 -20
  6. data/lib/runeblog_version.rb +1 -1
  7. data/runeblog.gemspec +1 -1
  8. data/themes/standard/blog/head.lt3 +1 -0
  9. data/themes/standard/blog/index.lt3 +3 -1
  10. data/themes/standard/etc/blog.css.lt3 +7 -18
  11. data/themes/standard/etc/misc.js +6 -0
  12. data/themes/standard/global.lt3 +10 -1
  13. data/themes/standard/navbar/about.html +4 -2
  14. data/themes/standard/navbar/contact.html +6 -0
  15. data/themes/standard/sidebar/README +3 -0
  16. data/themes/standard/widgets/README +4 -0
  17. data/themes/standard/widgets/ad/ad.lt3 +12 -0
  18. data/themes/standard/{sidebar → widgets/calendar}/calendar.lt3 +0 -0
  19. data/themes/standard/widgets/news/card-news.html +17 -0
  20. data/themes/standard/widgets/news/list.data +4 -0
  21. data/themes/standard/widgets/news/main-news.html +9 -0
  22. data/themes/standard/widgets/news/news.lt3 +4 -0
  23. data/themes/standard/widgets/pages/README +2 -0
  24. data/themes/standard/widgets/pages/disclaim.lt3 +6 -0
  25. data/themes/standard/widgets/pages/faq.lt3 +6 -0
  26. data/themes/standard/widgets/pages/generated.lt3 +4 -0
  27. data/themes/standard/widgets/pages/lifestory.lt3 +6 -0
  28. data/themes/standard/widgets/pages/like-dislike.lt3 +6 -0
  29. data/themes/standard/widgets/pages/list.data +4 -0
  30. data/themes/standard/widgets/pages/main.html +9 -0
  31. data/themes/standard/widgets/pages/main.lt3 +18 -0
  32. data/themes/standard/widgets/tag-cloud/tag-cloud.lt3 +12 -0
  33. metadata +24 -9
  34. data/themes/standard/etc/blog.css +0 -34
  35. data/themes/standard/sidebar/ad.lt3 +0 -5
  36. data/themes/standard/sidebar/news.lt3 +0 -7
  37. data/themes/standard/sidebar/tag-cloud.lt3 +0 -10
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c34d3256b5ce72fd7a4186b283291940b673e03ca276ce0425baf4d25760f564
4
- data.tar.gz: 9e375ccfa30089a4fa04f774c822a36dbf68b5e966cd208c6354b3e4a0fd8b9d
3
+ metadata.gz: 7ecf2ea93c7b100f433d4cf9a822655ba6f4c95997e96b09dee870c8234a10e8
4
+ data.tar.gz: d1d6da2a7c78cb201b9fd6d3359347b6b6cf4534286f2c12c44ff72fcb545c85
5
5
  SHA512:
6
- metadata.gz: b50e6e90f95618fdcdfb5a717a9f845a00717f85204dc65dd76b60e4d98e2e05d3fb86517dca4c28f2cbcf8729e803deaf9c3c7309b4e0d4085ea823ec732311
7
- data.tar.gz: 3b99520e51344079fcafd06b50ae0d6e5ffaf25d756dd9c8341f9ed367ad0b24692c27ffada0f2af874308e5de9a68d04fd9ec6b868a6d72f118d6f9b2a4b1b6
6
+ metadata.gz: b9af872813d5420811971839357debb0c6197302e832d15c5749164c8a87523def9370943fa0bd14b15a44ab3b8fbdf9eee97744df91d98920f23dcde8413e6d
7
+ data.tar.gz: e995fb01bdc9073957c2e762fdff55f4502a906cb0176df76af45d65ca2ea75b19934d74e6e0909c0c7f26ba370abaebad5d24bd3ae4e61007a171d2fa263114
@@ -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
@@ -22,18 +22,31 @@ def init_liveblog # FIXME - a lot of this logic sucks
22
22
  @theme = @vdir + "/themes/standard/"
23
23
  end
24
24
 
25
+ # FIXME - stale? and livetext are duplicated from helpers-blog
26
+
27
+ def stale?(src, dst)
28
+ return true unless File.exist?(dst)
29
+ return true if File.mtime(src) > File.mtime(dst)
30
+ return false
31
+ end
32
+
33
+ def livetext(src, dst=nil)
34
+ src += ".lt3" unless src.end_with?(".lt3")
35
+ if dst
36
+ dst += ".html" unless dst.end_with?(".html")
37
+ else
38
+ dst = src.sub(/.lt3$/, "")
39
+ end
40
+ return unless stale?(src, dst)
41
+ system("livetext #{src} >#{dst}")
42
+ end
43
+
25
44
  def post
26
45
  @meta = OpenStruct.new
27
46
  @meta.num = _args[0]
28
47
  _out " <!-- Post number #{@meta.num} -->\n "
29
48
  end
30
49
 
31
- def _view_from_cwd
32
- md = Dir.pwd.match(%r[.*/views/(.*?)/])
33
- return md[1] if md
34
- nil
35
- end
36
-
37
50
  def quote
38
51
  _passthru "<blockquote>"
39
52
  _passthru _body
@@ -60,11 +73,69 @@ def h6; _passthru "
#{@_data}
"; end
60
73
 
61
74
  def hr; _passthru "<hr>"; end
62
75
 
63
- def emit # send to STDOUT?
64
- @emit = true
65
- case _args.first
66
- when "off"; @emit = false
67
- when "on"; @emit = true
76
+ def list
77
+ _out "<ul>"
78
+ _body {|line| _out "<li>#{line}</li>" }
79
+ _out "</ul>"
80
+ _optional_blank_line
81
+ end
82
+
83
+ def list!
84
+ _out "<ul>"
85
+ lines = _body.each
86
+ loop do
87
+ line = lines.next
88
+ line = _format(line)
89
+ if line[0] == " "
90
+ _out line
91
+ else
92
+ _out "<li>#{line}</li>"
93
+ end
94
+ end
95
+ _out "</ul>"
96
+ _optional_blank_line
97
+ end
98
+
99
+ def html_body(file)
100
+ file.puts "<html>\n <body>"
101
+ yield
102
+ file.puts " </body>\n</html>"
103
+ end
104
+
105
+ def make_magic_links
106
+ # FIXME remember strings may not be safe
107
+ line = _data.chomp
108
+ input, cardfile, mainfile, card_title = *line.split(" ", 4)
109
+ pairs = File.readlines(input).map {|line| line.chomp.split(",", 2) }
110
+ # HTML for main area (iframe)
111
+ File.open("#{mainfile}.html", "w") do |f|
112
+ html_body(f) do
113
+ f.puts "<h1>#{card_title}</h1>"
114
+ pairs.each {|file, title| f.puts %[<a href="#{file}">#{title}</a> <br>] }
115
+ end
116
+ end
117
+ # HTML for sidebar card
118
+ STDERR.puts %[File is: 'widgets/#{tag}/#{mainfile}.html']
119
+ File.open("#{cardfile}.html", "w") do |f|
120
+ f.puts <<-EOS
121
+ <div class="card mb-3">
122
+ <div class="card-body">
123
+ <h5 class="card-title">
124
+ <a href="javascript: void(0)"
125
+ onclick="javascript:open_main('widgets/#{tag}/#{mainfile}.html')"
126
+ style="text-decoration: none; color: black">#{card_title}</a>
127
+ </h5>
128
+ EOS
129
+ pairs.each do |file, title|
130
+ f.puts <<-EOS
131
+ <li class="list-group-item"> <a href="javascript: void(0)"
132
+ onclick="javascript:open_main('#{file}')">#{title}</a> </li>
133
+ EOS
134
+ end
135
+ f.puts <<-EOS
136
+ </div>
137
+ </div>
138
+ EOS
68
139
  end
69
140
  end
70
141
 
@@ -164,29 +235,6 @@ def pin
164
235
  _optional_blank_line
165
236
  end
166
237
 
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
238
  def write_post
191
239
  raise "'post' was not called" unless @meta
192
240
  save = Dir.pwd
@@ -277,6 +325,8 @@ class Livetext::Functions
277
325
  end
278
326
  end
279
327
 
328
+ ###
329
+
280
330
  def _var(name) # FIXME scope issue!
281
331
  ::Livetext::Vars[name] || "[:#{name} is undefined]"
282
332
  end
@@ -291,12 +341,12 @@ def head # Does NOT output tags
291
341
  defaults = {}
292
342
  defaults = { "charset" => %[<meta charset="utf-8">],
293
343
  "http-equiv" => %[<meta http-equiv="X-UA-Compatible" content="IE=edge">],
294
- "title" => %[<title>\n #{_var(:blog)} | #{_var(:blog_desc)}\n </title>],
344
+ "title" => %[<title>\n #{_var(:blog)} | #{_var("blog.desc")}\n </title>],
295
345
  "generator" => %[<meta name="generator" content="Runeblog v #@version">],
296
346
  "og:title" => %[<meta property="og:title" content="#{_var(:blog)}">],
297
347
  "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)}">],
348
+ "description" => %[<meta name="description" content="#{_var("blog.desc")}">],
349
+ "og:description" => %[<meta property="og:description" content="#{_var("blog.desc")}">],
300
350
  "linkc" => %[<link rel="canonical" href="#{_var(:host)}">],
301
351
  "og:url" => %[<meta property="og:url" content="#{_var(:host)}">],
302
352
  "og:site_name" => %[<meta property="og:site_name" content="#{_var(:blog)}">],
@@ -366,20 +416,12 @@ end
366
416
 
367
417
  def sidebar
368
418
  _out %[<div class="col-lg-3 col-md-3 col-sm-3 col-xs-12">]
369
- _body do |line|
370
- tag = line.chomp.strip
371
- self.data = "sidebar/#{tag.downcase}.lt3"
372
- _include
373
- end
374
- _out %[</div>]
375
- end
376
-
377
- def sidebar!
378
- _out %[<div class="col-lg-3 col-md-3 col-sm-3 col-xs-12">]
379
- _args do |line|
380
- tag = line.chomp.strip
381
- self.data = "sidebar/#{tag.downcase}.lt3"
382
- _include
419
+ _args do |token|
420
+ tag = token.chomp.strip.downcase
421
+ Dir.chdir("widgets/#{tag}") do
422
+ livetext tag, "card-#{tag}.html"
423
+ _include_file "card-#{tag}.html"
424
+ end
383
425
  end
384
426
  _out %[</div>]
385
427
  end
@@ -451,7 +493,7 @@ def all_teasers
451
493
  end
452
494
  text << "</body></html>"
453
495
  File.write("recent.html", text)
454
- _out %[<iframe style="width: 100vw;height: 100vh;position: relative;" src='recent.html' width=100% frameborder="0" allowfullscreen></iframe>]
496
+ _out %[<iframe id="main" style="width: 100vw; height: 100vh; position: relative;" src='recent.html' width=100% frameborder="0" allowfullscreen></iframe>]
455
497
  end
456
498
 
457
499
  def _post_lookup(postid) # side-effect
@@ -512,7 +554,7 @@ def card_iframe
512
554
  stuff = lines[1..-1].join(" ") # FIXME later
513
555
  middle = <<-HTML
514
556
  <iframe src="#{url}" #{stuff}
515
- style="border: 0" height="350"
557
+ style="border: 0" #{stuff}
516
558
  frameborder="0" scrolling="no">
517
559
  </iframe>
518
560
  HTML
@@ -520,23 +562,30 @@ def card_iframe
520
562
  _card_generic(card_title: title, middle: middle, extra: "bg-dark text-white")
521
563
  end
522
564
 
565
+ def _main(url)
566
+ %[href="javascript: void(0)" onclick="javascript:open_main('#{url}')"]
567
+ end
568
+
523
569
  def card1
524
570
  title, lines = _data, _body
525
571
  lines.map!(&:chomp)
526
572
 
527
573
  card_text = lines[0]
528
- url, target, classname, cdata = lines[1].split(",", 4)
574
+ url, classname, cdata = lines[1].split(",", 4)
575
+ main = _main(url)
529
576
 
530
577
  middle = <<-HTML
531
578
  <p class="card-text">#{card_text}</p>
532
- <a href="#{url}" target="#{target}" class="#{classname}">#{cdata}</a>
579
+ <a #{main} class="#{classname}">#{cdata}</a>
533
580
  HTML
534
581
 
535
582
  _card_generic(card_title: title, middle: middle, extra: "bg-dark text-white")
536
583
  end
537
584
 
538
585
  def card2
539
- card_title = _data
586
+ str = _data
587
+ file, card_title = str.chomp.split(" ", 2)
588
+ card_title = %[<a #{_main(file)} style="text-decoration: none; color: black">#{card_title}</a>]
540
589
 
541
590
  # FIXME is this wrong??
542
591
 
@@ -544,18 +593,16 @@ def card2
544
593
  <div class="card mb-3">
545
594
  <div class="card-body">
546
595
  <h5 class="card-title">#{card_title}</h5>
547
- </div>
548
596
  <ul class="list-group list-group-flush">
549
597
  HTML
550
598
  _out open
551
599
  _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>]
600
+ url, cdata = line.chomp.split(",", 3)
601
+ main = _main(url)
602
+ _out %[<li class="list-group-item"><a #{main}}">#{cdata}</a> </li>]
554
603
  end
555
- close = %[ </ul>\n </div>]
604
+ close = %[ </ul>\n </div>\n </div>]
556
605
  _out close
557
- rescue
558
- puts @live.body
559
606
  end
560
607
 
561
608
  def tag_cloud
@@ -569,15 +616,17 @@ def tag_cloud
569
616
  _out open
570
617
  _body do |line|
571
618
  line.chomp!
572
- url, target, classname, cdata = line.split(",", 4)
573
- _out %[<a href="#{url}" target="#{target}" class="#{classname}">#{cdata}</a>]
619
+ url, classname, cdata = line.split(",", 4)
620
+ main = _main(url)
621
+ _out %[<a #{main} class="#{classname}">#{cdata}</a>]
574
622
  end
575
- rescue
576
- puts @live.body
623
+ close = %[ </div>\n </div>]
624
+ _out close
577
625
  end
578
626
 
579
627
  def navbar
580
628
  title = _var(:blog)
629
+
581
630
  open = <<-HTML
582
631
  <nav class="navbar navbar-expand-lg navbar-light bg-light">
583
632
  <a class="navbar-brand" href="index.html">#{title}</a>
@@ -590,7 +639,6 @@ def navbar
590
639
  aria-label="Toggle navigation">
591
640
  <span class="navbar-toggler-icon"></span>
592
641
  </button>
593
-
594
642
  <div class="collapse navbar-collapse pull-right"
595
643
  id="navbarSupportedContent">
596
644
  <ul class="navbar-nav mr-auto">
@@ -605,11 +653,13 @@ def navbar
605
653
  _out open
606
654
  _body do |line|
607
655
  href, cdata = line.chomp.strip.split(" ", 2)
656
+ main = _main(href)
608
657
  if first
609
658
  first = false
610
659
  _out %[<li class="nav-item active"> <a class="nav-link" href="#{href}">#{cdata}<span class="sr-only">(current)</span></a> </li>]
611
660
  else
612
- _out %[<li class="nav-item"> <a class="nav-link" href="#{href}">#{cdata}</a> </li>]
661
+ main = _main("navbar/#{href}")
662
+ _out %[<li class="nav-item"> <a class="nav-link" #{main}>#{cdata}</a> </li>]
613
663
  end
614
664
  end
615
665
  _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,16 +177,17 @@ class RuneBlog
177
177
  x = RuneBlog::Default
178
178
  copy!("#{Themes}", "themes")
179
179
  create_dirs(:assets, :posts)
180
- create_dirs(:staging, "remote/permalink")
180
+ create_dirs(:staging, "remote/permalink", "remote/navbar")
181
+ livetext "themes/standard/etc/blog.css.lt3" # strip ext
181
182
  copy!("themes/standard/*", "staging/")
183
+
182
184
  copy!("themes/standard/etc", "remote/")
183
185
  copy!("themes/standard/assets", "remote/")
186
+ copy!("themes/standard/widgets", "remote/")
184
187
 
185
188
  pub = "user: xxx\nserver: xxx\ndocroot: xxx\npath: xxx\nproto: xxx\n"
186
189
  dump(pub, "publish")
187
190
 
188
- # Add to global.lt3 here? FIXME
189
-
190
191
  view = RuneBlog::View.new(arg)
191
192
  self.view = view
192
193
  vdir = self.view.dir
@@ -212,14 +213,6 @@ class RuneBlog
212
213
  files.reject! {|f| File.mtime(f) < File.mtime("#{vdir}/last_published") }
213
214
  end
214
215
 
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
216
  def post_lookup(postid) # side-effect?
224
217
  # .. = templates, ../.. = views/thisview
225
218
  slug = title = date = teaser_text = nil
@@ -278,11 +271,10 @@ class RuneBlog
278
271
  text << "</body></html>"
279
272
  File.write(file, text) # FIXME ???
280
273
  iframe_text = <<-HTML
281
- <iframe style="width: 100vw;height: 100vh;position: relative;"
274
+ <iframe name="main" style="width: 100vw;height: 100vh;position: relative;"
282
275
  src='recent.html' width=100% frameborder="0" allowfullscreen>
283
276
  </iframe>
284
277
  HTML
285
- # _out iframe_text # FIXME ??
286
278
  end
287
279
 
288
280
  def create_new_post(title, testing = false, teaser: nil, body: nil, other_views: [])
@@ -409,6 +401,7 @@ class RuneBlog
409
401
  livetext "post/permalink.lt3", "../remote/permalink/#{html}"
410
402
  collect_recent_posts("recent.html")
411
403
  copy("recent.html", "../remote")
404
+ copy!("navbar/*html", "../remote/navbar/")
412
405
  livetext "blog/generate", "../remote/index"
413
406
  end
414
407
  end
@@ -424,7 +417,7 @@ class RuneBlog
424
417
  check_meta(meta, "index_entry1")
425
418
  raise ArgumentError unless view.is_a?(String) || view.is_a?(RuneBlog::View)
426
419
  check_meta(meta, "index_entry2")
427
- self.make_slug(meta) # RuneBlog#index_entry
420
+ self.make_slug(meta)
428
421
  check_meta(meta, "index_entry3")
429
422
  # FIXME clean up and generalize
430
423
  ref = "#{view}/#{meta.slug}/index.html"
@@ -489,12 +482,6 @@ class RuneBlog
489
482
  system("rm -rf #@root/drafts/#{tag}-*")
490
483
  end
491
484
 
492
- def post_exists?(num)
493
- raise ArgumentError unless num.is_a?(Integer)
494
- list = files_by_id(num) # FIXME search under view dirs
495
- list.empty? ? nil : list
496
- end
497
-
498
485
  def make_slug(meta)
499
486
  raise ArgumentError unless meta.title.is_a?(String)
500
487
  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.95"
5
+ VERSION = "0.2.1"
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.91'
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,5 +1,6 @@
1
1
  <head>
2
2
  .include etc/externals.lt3
3
+ .include etc/misc.js
3
4
 
4
5
  . fix/remove later
5
6
  .head
@@ -1,4 +1,6 @@
1
1
  .recent_posts
2
2
 
3
- .sidebar! ad news calendar tag-cloud
3
+ .sidebar news tag-cloud
4
+
5
+ . for now, skip: ad calendar tag-cloud
4
6
 
@@ -1,20 +1,9 @@
1
1
  .nopara
2
-
3
- .variables
4
- post_title_color #010101
5
- post_title_size 28px
6
-
7
- post_text_color #0101a1
8
- post_text_size 22px
9
-
10
- post_date_color #9a9a9a
11
- post_date_size 15px
12
- .end
13
-
2
+ .include themes/standard/global.lt3
14
3
 
15
4
  \.post-title a {
16
- color: $post_title_color;
17
- font-size: $post_title_size;
5
+ color: $post.title.color;
6
+ font-size: $post.title.size;
18
7
  float: right;
19
8
  display: inline-block;
20
9
  text-align: top;
@@ -26,8 +15,8 @@ post_date_size 15px
26
15
  }
27
16
 
28
17
  \.post-title-text a {
29
- color: $post_text_color;
30
- font-size: $post_text_size;
18
+ color: $post.text.color;
19
+ font-size: $post.text.size;
31
20
  # float: right;
32
21
  display: block;
33
22
  text-decoration: none;
@@ -38,8 +27,8 @@ post_date_size 15px
38
27
  }
39
28
 
40
29
  \.post-date {
41
- color: $post_date_color;
42
- font-size: $post_date_size;
30
+ color: $post.date.color;
31
+ font-size: $post.date.size;
43
32
  display: block;
44
33
  float: left;
45
34
  text-align: top;
@@ -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>
@@ -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,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,12 @@
1
+ .mixin liveblog
2
+
3
+ .tag_cloud
4
+ https://google.com/,btn btn-dark m-1,Programming
5
+ https://google.com/,btn btn-danger m-1,Science Fiction
6
+ https://google.com/,btn btn-light m-1,Art
7
+ https://google.com/,btn btn-dark m-1,Robotics
8
+ https://google.com/,btn btn-warning m-1,Food and Travel
9
+ https://google.com/,btn btn-light m-1,DIY Hacks
10
+ https://google.com/,btn btn-info m-1,Surfing
11
+ .end
12
+
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.95
4
+ version: 0.2.1
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.91
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.91
32
+ version: 0.8.92
33
33
  - !ruby/object:Gem::Dependency
34
34
  name: rubytext
35
35
  requirement: !ruby/object:Gem::Requirement
@@ -82,21 +82,36 @@ 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
86
85
  - themes/standard/etc/blog.css.lt3
87
86
  - themes/standard/etc/externals.lt3
88
87
  - themes/standard/etc/favicon.ico
88
+ - themes/standard/etc/misc.js
89
89
  - themes/standard/global.lt3
90
90
  - themes/standard/navbar/about.html
91
+ - themes/standard/navbar/contact.html
91
92
  - themes/standard/navbar/navbar.lt3
92
93
  - themes/standard/post/generate.lt3
93
94
  - themes/standard/post/head.lt3
94
95
  - themes/standard/post/index.lt3
95
96
  - themes/standard/post/permalink.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
97
+ - themes/standard/sidebar/README
98
+ - themes/standard/widgets/README
99
+ - themes/standard/widgets/ad/ad.lt3
100
+ - themes/standard/widgets/calendar/calendar.lt3
101
+ - themes/standard/widgets/news/card-news.html
102
+ - themes/standard/widgets/news/list.data
103
+ - themes/standard/widgets/news/main-news.html
104
+ - themes/standard/widgets/news/news.lt3
105
+ - themes/standard/widgets/pages/README
106
+ - themes/standard/widgets/pages/disclaim.lt3
107
+ - themes/standard/widgets/pages/faq.lt3
108
+ - themes/standard/widgets/pages/generated.lt3
109
+ - themes/standard/widgets/pages/lifestory.lt3
110
+ - themes/standard/widgets/pages/like-dislike.lt3
111
+ - themes/standard/widgets/pages/list.data
112
+ - themes/standard/widgets/pages/main.html
113
+ - themes/standard/widgets/pages/main.lt3
114
+ - themes/standard/widgets/tag-cloud/tag-cloud.lt3
100
115
  homepage: https://github.com/Hal9000/runeblog
101
116
  licenses:
102
117
  - 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,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
-