runeblog 0.2.88 → 0.2.93

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 971964911d35242af990fce1bf3ac1e3227dd15726753f1224364781dd8d14ee
4
- data.tar.gz: 1168fac5a9db55738abfcd02d2a05b6da4e35a7aca6739b982ad9f45ff1aa143
3
+ metadata.gz: 51a1371a11eb69a62ff435090be403f586c0bddfd8c62ef7dc3e4f97020fee12
4
+ data.tar.gz: 4d1e82de93ebb0d408964b5d06e6dc4a42f450e064b7174eecd4cb8328054f4a
5
5
  SHA512:
6
- metadata.gz: 8d4d68cdfc991e83c6c1d4ed351b410803a276ccf296da6780f671851d9ec05b667adbb3ca23558e2a7e0cf896715391d07bc11e8c47fe2de3486e8f223513af
7
- data.tar.gz: b60f9c6f1cd642499992d72a7727276c0e0daa2b0de3c987e98a607570e62c01c926310761c7db2a715e4c22c8820ac0d3362c822d851a7329e71ff622b2efd7
6
+ metadata.gz: 8e27ae9cb582a3a84746db31ce664b1ed3a5ed8c47fff9178de4ff5a55e9c41687390b655a13b8df533e498edfe5ffb16af2f3f832c9d9c082353409e2dd17bb
7
+ data.tar.gz: 73e512eb67281d74c141ecda0de9f75aec04e64402b5ef23a3552d0798e681b3b43aefa2a88fdb9b23bfda95f00b37938a6455599be11a665bcf182ff2b60659
data/bin/blog CHANGED
@@ -146,7 +146,10 @@ end
146
146
 
147
147
  major, minor = RUBY_VERSION.split(".").values_at(0,1)
148
148
  ver = major.to_i*10 + minor.to_i
149
- abort "Need Ruby 2.4 or greater" unless ver >= 24
149
+ unless ver >= 24
150
+ RubyText.stop
151
+ abort "Need Ruby 2.4 or greater"
152
+ end
150
153
 
151
154
  include RuneBlog::Helpers # for try_read_config
152
155
 
@@ -0,0 +1 @@
1
+ .include ../../widgets/pages/faq.lt3
@@ -1,4 +1,5 @@
1
- .nopara
1
+ .seek global.lt3 # FIXME this is a hack!
2
+
2
3
  <svg width="98%" height="120"
3
4
  viewBox="0 0 98% 100">
4
5
  <defs>
@@ -4,8 +4,6 @@
4
4
  . The user will more often edit blog/index.lt3 in
5
5
  . the process of blog setup.
6
6
  . --------------------------------------------------
7
- .nopara
8
- .mixin liveblog
9
7
 
10
8
  <html>
11
9
  <!-- Generated from $File on $$date.
@@ -13,7 +11,7 @@
13
11
  $.seek global.lt3
14
12
  $.include blog/head.lt3
15
13
  <body>
16
- $.include blog/banner.lt3
14
+ $.include banner/banner.lt3
17
15
  <div class="content container-fluid mt-4">
18
16
  <div class="row">
19
17
  $.include blog/index.lt3
@@ -2,7 +2,6 @@
2
2
  . This HTML fragment gives the format of a post's
3
3
  . "index" entry (recent posts on blog front page).
4
4
  . --------------------------------------------------
5
- .nopara
6
5
 
7
6
  <div class="post">
8
7
  <table width=100% cellpadding=7>
@@ -2,7 +2,6 @@
2
2
  . This file is processed to create blog.css
3
3
  . Most of the global CSS goes here
4
4
  . --------------------------------------------------
5
- .nopara
6
5
 
7
6
  .seek themes/standard/global.lt3
8
7
 
@@ -29,7 +29,7 @@ post.date.size 15px
29
29
  publish.user root
30
30
  publish.server rubyhacker.com
31
31
  publish.docroot /var/www/
32
- publish.path around_austin
32
+ publish.path stuff
33
33
  publish.proto http
34
34
  .end
35
35
 
@@ -6,19 +6,19 @@
6
6
  . likely be the place.
7
7
  . --------------------------------------------------
8
8
 
9
- .mixin liveblog
10
- . ^ get rid of this later
11
-
12
9
  .post 0
13
10
 
14
- .title The new amphitheatre is overrated
11
+ .title This is my title
15
12
  .pubdate 2019-07-09
16
- .views around_austin
13
+ .views stuff
17
14
  .tags
18
15
 
19
16
  .teaser
20
- It used to be that all major concerts played the Erwin Center.
21
-
17
+ This is only a short excerpt from the top of the blog post.
22
18
  .end
23
- Now, depending on what you consider "major," blah blah blah...
19
+
20
+ And now we continue the post.
21
+ Do we have anything to say?
22
+
23
+ Apparently not much.
24
24
 
@@ -9,7 +9,7 @@ class ::RuneBlog::Widget
9
9
  def initialize(repo)
10
10
  @blog = repo
11
11
  @datafile = input = "list.data"
12
- @lines = File.readlines(input)
12
+ @lines = _get_data(@datafile)
13
13
  end
14
14
 
15
15
  def build
@@ -7,7 +7,7 @@ class ::RuneBlog::Widget
7
7
  def initialize(repo)
8
8
  @blog = repo
9
9
  @datafile = "list.data"
10
- lines = File.readlines(@datafile)
10
+ lines = _get_data(@datafile)
11
11
  @data = lines.map {|line| line.chomp.split(/, */) }
12
12
  end
13
13
 
@@ -4,12 +4,12 @@
4
4
 
5
5
  class ::RuneBlog::Widget
6
6
  class Pages
7
- Type, Title = "pages", "Pages"
7
+ Type, Title = "pages", "My Pages"
8
8
 
9
9
  def initialize(repo)
10
10
  @blog = repo
11
11
  @datafile = "list.data"
12
- @lines = File.readlines(@datafile)
12
+ @lines = _get_data(@datafile)
13
13
  @data = @lines.map {|x| x.chomp.split(/, */, 2) }
14
14
  end
15
15
 
@@ -7,7 +7,7 @@ class ::RuneBlog::Widget
7
7
  def initialize(repo)
8
8
  @blog = repo
9
9
  @datafile = "list.data"
10
- @lines = File.exist?(@datafile) ? File.readlines(@datafile) : []
10
+ @lines = _get_data?(@datafile)
11
11
  end
12
12
 
13
13
  def _html_body(file, css = nil) # FIXME
@@ -8,10 +8,11 @@ def RuneBlog.post_template(num: 0, title: "No title", date: nil, view: "test_vie
8
8
  log!(enter: __method__, args: [num, title, date, view, teaser, body, tags, views, back, home], level: 3)
9
9
  viewlist = (views + [view.to_s]).join(" ")
10
10
  taglist = ".tags " + tags.join(" ")
11
- <<-TEXT
12
- .mixin liveblog
13
- . ^ get rid of this later
14
11
 
12
+ # .mixin liveblog
13
+ # . ^ get rid of this later
14
+
15
+ <<-TEXT
15
16
  .post #{num}
16
17
 
17
18
  .title #{title}
@@ -5,6 +5,23 @@ require 'processing'
5
5
 
6
6
  module RuneBlog::Helpers
7
7
 
8
+ def _get_data?(file) # File need not exist
9
+ if File.exist?(file)
10
+ _get_data(file)
11
+ else
12
+ []
13
+ end
14
+ end
15
+
16
+ def _get_data(file)
17
+ lines = File.readlines(file)
18
+ lines.reject! {|line| line[0] == "-" } # allow rejection of lines
19
+ lines = lines.map do |line|
20
+ line.sub(/ *# .*$/, "") # allow trailing comments
21
+ end
22
+ lines
23
+ end
24
+
8
25
  def copy(src, dst)
9
26
  log!(enter: __method__, args: [src, dst], level: 2)
10
27
  cmd = "cp #{src} #{dst} 2>/dev/null"
@@ -54,6 +71,7 @@ module RuneBlog::Helpers
54
71
  puts "Can't read vars file '#{file}': #{err}"
55
72
  puts err.backtrace.join("\n")
56
73
  puts "dir = #{Dir.pwd}"
74
+ sleep 6; RubyText.stop
57
75
  exit
58
76
  end
59
77
 
@@ -80,6 +98,7 @@ module RuneBlog::Helpers
80
98
  puts "Can't read config file '#{file}': #{err}"
81
99
  puts err.backtrace.join("\n")
82
100
  puts "dir = #{Dir.pwd}"
101
+ sleep 6; RubyText.stop
83
102
  exit
84
103
  end
85
104
 
@@ -98,13 +117,13 @@ module RuneBlog::Helpers
98
117
  end
99
118
  end
100
119
 
101
- def get_views # read from filesystem
120
+ def retrieve_views # read from filesystem
102
121
  log!(enter: __method__, level: 3)
103
122
  dirs = subdirs("#@root/views/").sort
104
123
  dirs.map {|name| RuneBlog::View.new(name) }
105
124
  end
106
125
 
107
- def write_repo_config(root: "#{Dir.pwd}/.blogs", view: "#{root}/data/VIEW", editor: "/usr/local/bin/vim")
126
+ def write_repo_config(root: "#{Dir.pwd}/.blogs", view: File.read("#{root}/data/VIEW").chomp, editor: "/usr/local/bin/vim")
108
127
  File.write(root + "/data/ROOT", root + "\n")
109
128
  File.write(root + "/data/VIEW", view.to_s + "\n")
110
129
  File.write(root + "/data/EDITOR", editor + "\n")
@@ -7,6 +7,9 @@ require 'runeblog'
7
7
  require 'pathmagic'
8
8
  require 'processing'
9
9
 
10
+ # top = Livetext::Path + "/../plugin/liveblog/"
11
+ # eval(File.read("#{top}/testing.rb"))
12
+
10
13
 
11
14
  def init_liveblog # FIXME - a lot of this logic sucks
12
15
  dir = Dir.pwd.sub(/\.blogs.*/, "")
@@ -18,6 +21,8 @@ def init_liveblog # FIXME - a lot of this logic sucks
18
21
  @vdir = @blog.view.dir rescue "NONAME"
19
22
  @version = RuneBlog::VERSION
20
23
  @theme = @vdir/:themes/:standard
24
+ rescue
25
+ raise "Only works inside a blog repo"
21
26
  end
22
27
 
23
28
  ##################
@@ -42,7 +47,7 @@ end
42
47
 
43
48
  def post_trailer
44
49
  perma = _var("publish.proto") + "://" + _var("publish.server") +
45
- "/" + _var("publish.path") + "/permalink/" + _var("post.aslug") +
50
+ "/" + _var("publish.path") + "/" + _var("post.aslug") +
46
51
  ".html"
47
52
  tags = _var("post.tags")
48
53
  if tags.empty?
@@ -83,19 +88,20 @@ def code
83
88
  end
84
89
 
85
90
  def _read_navbar_data
86
- dir = @blog.root/:views/@blog.view/"themes/standard/banner/"
91
+ vdir = @blog.root/:views/@blog.view
92
+ dir = vdir/"themes/standard/banner/navbar/"
87
93
  datafile = dir/"list.data"
88
- File.readlines(datafile)
94
+ _get_data(datafile)
89
95
  end
90
96
 
91
97
  def banner
92
98
  count = 0
93
- span = 1
94
99
  bg = "white" # outside loop
95
100
  wide = nil
96
101
  high = 250
97
102
  str2 = ""
98
103
  navbar = nil
104
+ vdir = @blog.root/:views/@blog.view
99
105
  lines = _body.to_a
100
106
 
101
107
  lines.each do |line|
@@ -111,35 +117,28 @@ def banner
111
117
  image = "banner"/image
112
118
  wide = data[0]
113
119
  width = wide ? "width=#{wide}" : ""
114
- str2 << " <td colspan=#{span}><img src=#{image} #{width} height=#{high}></img></td>" + "\n"
120
+ str2 << " <td><img src=#{image} #{width} height=#{high}></img></td>" + "\n"
115
121
  when "svg_title"
116
122
  stuff, hash = _svg_title(*data)
117
123
  wide = hash["width"]
118
- str2 << " <td colspan=#{span} width=#{wide}>#{stuff}</td>" + "\n"
124
+ str2 << " <td width=#{wide}>#{stuff}</td>" + "\n"
119
125
  when "text"
120
126
  data[0] ||= "top.html"
121
127
  file = "banner"/data[0]
122
128
  if ! File.exist?(file)
123
129
  src = file.sub(/html$/, "lt3")
124
130
  if File.exist?(src)
125
- preprocess src: src, dst: file, vars: Livetext::Vars
131
+ preprocess src: src, dst: file, call: ".nopara" # , vars: @blog.view.globals
126
132
  else
127
133
  raise "Neither #{file} nor #{src} found"
128
134
  end
129
135
  end
130
- str2 << "<td colspan=#{span}>" + File.read(file) + "</td>" + "\n"
136
+ str2 << "<td>" + File.read(file) + "</td>" + "\n"
131
137
  when "navbar"
132
- dir = @blog.root/:views/@blog.view/"themes/standard/banner/" + "\n"
133
- _make_navbar # horiz is default
134
- file = "banner/navbar.html"
135
- navbar = File.read(file)
138
+ navbar = _make_navbar # horiz is default
136
139
  when "vnavbar"
137
- dir = @blog.root/:views/@blog.view/"themes/standard/banner/"
138
- _make_navbar(:vert)
139
- file = "banner/vnavbar.html"
140
- navbar = File.read(file)
140
+ navbar = _make_navbar(:vert)
141
141
  when "break"
142
- # span = count - 1
143
142
  str2 << " </tr>\n <tr>" + "\n"
144
143
  else
145
144
  str2 << " '#{tag}' isn't known" + "\n"
@@ -347,7 +346,7 @@ def pin
347
346
  pinned.each do |pinview|
348
347
  dir = @blog.root/:views/pinview/"themes/standard/widgets/pinned/"
349
348
  datafile = dir/"list.data"
350
- pins = File.exist?(datafile) ? File.readlines(datafile) : []
349
+ pins = _get_data?(datafile)
351
350
  pins << "#{@meta.num} #{@meta.title}\n"
352
351
  pins.uniq!
353
352
  File.open(datafile, "w") {|out| pins.each {|pin| out.puts pin } }
@@ -498,6 +497,7 @@ def _load_local(widget)
498
497
  rescue => err
499
498
  STDERR.puts err.to_s
500
499
  STDERR.puts err.backtrace.join("\n")
500
+ sleep 6; RubyText.stop
501
501
  exit
502
502
  end
503
503
 
@@ -552,11 +552,10 @@ def sidebar
552
552
  num = rand(1..4)
553
553
  img = "widgets/ad/ad#{num}.png"
554
554
  src, dst = img, @root/:views/@view_name/"remote/widgets/ad/"
555
- system!("cp #{src} #{dst}") # , show: true)
556
- File.open(wtag/"vars.lt3", "w") do |f|
557
- f.puts ".set ad.image = #{img}"
558
- end
559
- preprocess cwd: wtag, src: tag, dst: tcard, force: true # , debug: true # , deps: depend
555
+ system!("cp #{src} #{dst}")
556
+ File.open(wtag/"vars.lt3", "w") {|f| f.puts ".set ad.image = #{img}" }
557
+ preprocess cwd: wtag, src: tag, dst: tcard, call: ".nopara",
558
+ force: true # , debug: true # , deps: depend
560
559
  end
561
560
 
562
561
  _include_file wtag/tcard
@@ -565,6 +564,7 @@ def sidebar
565
564
  rescue => err
566
565
  puts "err = #{err}"
567
566
  puts err.backtrace.join("\n")
567
+ sleep 6; RubyText.stop
568
568
  exit
569
569
  end
570
570
 
@@ -687,20 +687,21 @@ def _make_navbar(orient = :horiz)
687
687
  </td></tr></table>
688
688
  HTML
689
689
 
690
- html_file = @blog.root/:views/@blog.view/"themes/standard/banner"/name
690
+ html_file = @blog.root/:views/@blog.view/"themes/standard/banner/navbar"/name
691
691
  output = File.new(html_file, "w")
692
692
  output.puts start
693
693
  lines = _read_navbar_data
694
694
  lines = ["index Home"] + lines unless _args.include?("nohome")
695
695
  lines.each do |line|
696
696
  basename, cdata = line.chomp.strip.split(" ", 2)
697
- full = :banner/basename+".html"
697
+ full = :banner/:navbar/basename+".html"
698
698
  href_main = _main(full)
699
699
  if basename == "index" # special case
700
700
  output.puts %[#{li1} <a class="nav-link" href="index.html">#{cdata}<span class="sr-only">(current)</span></a> #{li2}]
701
701
  else
702
- dir = @blog.root/:views/@blog.view/"themes/standard/banner"
703
- preprocess cwd: dir, src: basename, dst: vdir/"remote/banner"/basename+".html" # , debug: true
702
+ dir = @blog.root/:views/@blog.view/"themes/standard/banner/navbar"
703
+ dest = vdir/"remote/banner/navbar"/basename+".html"
704
+ preprocess cwd: dir, src: basename, dst: dest, call: ".nopara" # , debug: true
704
705
  output.puts %[#{li1} <a class="nav-link" #{href_main}>#{cdata}</a> #{li2}]
705
706
  end
706
707
  end
@@ -1,5 +1,4 @@
1
1
  require 'runeblog'
2
- require 'global'
3
2
  require 'pathmagic'
4
3
 
5
4
  class RuneBlog::Post
@@ -9,12 +8,6 @@ class RuneBlog::Post
9
8
 
10
9
  include RuneBlog::Helpers
11
10
 
12
- # def self.files(num, root)
13
- # log!(enter: __method__, args: [num, root], level: 3)
14
- # files = ::Find.find(root).to_a
15
- # result = files.grep(/#{prefix(num)}-/)
16
- # result
17
- # end
18
11
 
19
12
  def self.load(post)
20
13
  log!(enter: __method__, args: [post], level: 3)
@@ -22,7 +15,6 @@ class RuneBlog::Post
22
15
  raise NoBlogAccessor if RuneBlog.blog.nil?
23
16
  # "post" is a slug
24
17
  pdir = RuneBlog.blog.root/:drafts/post
25
- puts "-- load: opening #{pdir}"
26
18
  meta = nil
27
19
  Dir.chdir(pdir) do
28
20
  meta = read_config("metadata.txt")
@@ -22,7 +22,8 @@ end
22
22
 
23
23
  def preprocess(cwd: Dir.pwd, src:,
24
24
  dst: (strip = true; File.basename(src).sub(/.lt3$/,"")),
25
- deps: [], copy: nil, debug: false, force: false, vars: nil)
25
+ deps: [], copy: nil, debug: false, force: false,
26
+ mix: [], call: [], vars: {})
26
27
  src += LEXT unless src.end_with?(LEXT)
27
28
  dst += ".html" unless (dst.end_with?(".html") || strip)
28
29
  sp = " "*12
@@ -37,8 +38,8 @@ def preprocess(cwd: Dir.pwd, src:,
37
38
  end
38
39
  stale = stale?(src, dst, deps, force)
39
40
  if stale
40
- live = Livetext.new
41
- out = live.xform_file(src, vars: vars)
41
+ live = Livetext.customize(mix: "liveblog", call: call, vars: vars)
42
+ out = live.xform_file(src)
42
43
  File.write(dst, out)
43
44
  system!("cp #{dst} #{copy}") if copy
44
45
  end
@@ -2,7 +2,6 @@ if ! defined?(Already_publish)
2
2
 
3
3
  Already_publish = nil
4
4
 
5
- require 'global'
6
5
  require 'pathmagic'
7
6
 
8
7
  class RuneBlog::Publishing
@@ -17,6 +16,7 @@ class RuneBlog::Publishing
17
16
  @blog = RuneBlog.blog
18
17
  gfile = @blog.root/:views/view/"themes/standard/global.lt3"
19
18
  data = File.readlines(gfile)
19
+ # Please refactor the Hal out of this
20
20
  grab = ->(var) { data.grep(/^#{var} /).first.chomp.split(" ", 2)[1] }
21
21
  @user = grab.call("publish.user")
22
22
  @server = grab.call("publish.server")
@@ -43,24 +43,14 @@ class RuneBlog::Publishing
43
43
  rc
44
44
  end
45
45
 
46
- def publish(files, assets=[])
47
- log!(enter: __method__, args: [files, assets], level: 1)
46
+ def publish
47
+ log!(enter: __method__, level: 1)
48
48
  dir = @docroot/@path
49
49
  view_name = @blog.view.name
50
50
  viewpath = dir # /view_name
51
- result = system!("ssh #@user@#@server -x mkdir -p #{viewpath}/assets")
52
- files.each do |file|
53
- dest = "#@user@#@server:" + dir # /view_name
54
- file.gsub!(/\/\//, "/") # weird... :-/
55
- cmd = "scp -r #{file} #{dest} >/dev/null 2>/tmp/wtf"
56
- debug "cmd = #{cmd.inspect} - see /tmp/wtf"
57
- result = system!(cmd) || puts("\n Could not copy #{file} to #{dest}")
58
- end
59
- unless assets.empty?
60
- cmd = "scp #{assets.join(' ')} #@user@#@server:#{viewpath}/assets >/dev/null 2>/tmp/wtf2"
61
- result = system!(cmd)
62
- raise PublishError if !result
63
- end
51
+ # FIXME rsync doesn't work
52
+ cmd = "rsync -a -r -z #{@blog.root}/views/#{@blog.view}/remote/ #@user@#@server:#{viewpath}/"
53
+ system!(cmd)
64
54
  dump(files, "#{@blog.view.dir}/last_published")
65
55
  true
66
56
  end
@@ -1,5 +1,4 @@
1
1
  require 'runeblog'
2
- require 'global'
3
2
  require 'ostruct'
4
3
  require 'helpers-repl' # FIXME structure
5
4
 
@@ -40,6 +39,7 @@ module RuneBlog::REPL
40
39
 
41
40
  def cmd_config(arg, testing = false)
42
41
  hash = {"global.lt3 Global configuration" => "global.lt3",
42
+ "banner/top.lt3 Text portion of banner" => "banner/top.lt3",
43
43
  "blog/generate.lt3 Generator for view (usu not edited)" => "blog/generate.lt3",
44
44
  ".... head.lt3 HEAD info for view" => "blog/head.lt3",
45
45
  ".... banner.lt3 banner description" => "blog/banner.lt3",
@@ -76,10 +76,10 @@ module RuneBlog::REPL
76
76
  end
77
77
 
78
78
  def _manage_navbar(arg, testing = false) # cloned from manage_pages
79
- dir = @blog.view.dir/"themes/standard/navbar"
79
+ dir = @blog.view.dir/"themes/standard/banner/navbar"
80
80
  files = Dir.entries(dir) - %w[. .. navbar.lt3]
81
- new_item = " [New item] "
82
81
  main_file = "[ navbar.lt3 ]"
82
+ new_item = " [New item] "
83
83
  files = [main_file] + files + [new_item]
84
84
  num, fname = STDSCR.menu(title: "Edit navbar:", items: files)
85
85
  return if fname.nil?
@@ -114,7 +114,7 @@ module RuneBlog::REPL
114
114
  dir = @blog.view.dir/"themes/standard/widgets/pages"
115
115
  # Assume child files already generated (and list.data??)
116
116
  data = dir/"list.data"
117
- lines = File.readlines(data)
117
+ lines = _get_data?(data)
118
118
  hash = {}
119
119
  lines.each do |line|
120
120
  url, name = line.chomp.split(",")
@@ -187,23 +187,12 @@ module RuneBlog::REPL
187
187
  puts unless testing
188
188
  reset_output
189
189
  unless @blog.view.can_publish?
190
- msg = "Can't publish... see globals.lt3"
190
+ msg = "Can't publish... see global.lt3"
191
191
  puts msg unless testing
192
192
  output! msg
193
193
  return @out
194
194
  end
195
195
 
196
- # Need to check dirty/clean status first
197
- dirty, all, assets = @blog.view.publishable_files
198
- files = dirty
199
- if dirty.empty?
200
- puts fx("\n No files are out of date." + " "*20, :bold)
201
- print " Publish anyway? "
202
- yn = RubyText.gets.chomp
203
- files = all if yn == "y"
204
- end
205
- return @out if files.empty?
206
-
207
196
  ret = RubyText.spinner(label: " Publishing... ") do
208
197
  @blog.view.publisher.publish(files, assets) # FIXME weird?
209
198
  end
@@ -9,7 +9,6 @@ require 'ostruct'
9
9
  require 'logging'
10
10
 
11
11
  require 'runeblog_version'
12
- require 'global'
13
12
  require 'helpers-blog'
14
13
  require 'default'
15
14
  require 'view'
@@ -91,10 +90,11 @@ class RuneBlog
91
90
  self.class.blog = self # Weird. Like a singleton - dumbass circular dependency?
92
91
 
93
92
  @root = Dir.pwd/root_rel
94
- copy_data(:config, @root/:data)
93
+ copy_data(:config, @root/:data) unless File.exist?(@root/"data/VIEW")
95
94
  write_repo_config(root: @root)
96
95
  get_repo_config
97
- @views = get_views
96
+ @views = retrieve_views
97
+ self.view = File.read(@root/"data/VIEW").chomp
98
98
  md = Dir.pwd.match(%r[.*/views/(.*?)/])
99
99
  if md
100
100
  @view_name = md[1]
@@ -107,13 +107,14 @@ class RuneBlog
107
107
 
108
108
  def _generate_global
109
109
  vars = read_vars("#@root/data/universal.lt3")
110
- global = File.read("#@root/data/global.lt3")
110
+ gfile = "#@root/data/global.lt3"
111
+ global = File.read(gfile)
111
112
  global.gsub!(/AUTHOR/, vars["author"])
112
113
  global.gsub!(/SITE/, vars["site"])
113
114
  global.gsub!(/FONT/, vars["font.family"])
114
115
  global.gsub!(/CHARSET/, vars["charset"])
115
116
  global.gsub!(/LOCALE/, vars["locale"])
116
- File.write("#@root/data/global.lt3", global)
117
+ File.write(gfile, global)
117
118
  end
118
119
 
119
120
  def _deploy_local(dir)
@@ -163,7 +164,8 @@ class RuneBlog
163
164
  dir = @root/:posts/nslug
164
165
  create_dirs(dir)
165
166
  # FIXME dependencies?
166
- preprocess cwd: dir, src: @root/:drafts/sourcefile # , debug: true
167
+ preprocess cwd: dir, src: @root/:drafts/sourcefile,
168
+ mix: "liveblog" # , debug: true
167
169
  _deploy_local(dir)
168
170
  rescue => err
169
171
  _tmp_error(err)
@@ -336,8 +338,10 @@ class RuneBlog
336
338
  @theme = @view.dir/"themes/standard"
337
339
  post_entry_name = @theme/"blog/post_entry.lt3"
338
340
  depend = [post_entry_name]
339
- preprocess src: post_entry_name, dst: "/tmp/post_entry.html" # , deps: depend # , debug: true
340
- @_post_entry ||= File.read("/tmp/post_entry.html")
341
+ html = "/tmp/post_entry.html"
342
+ preprocess src: post_entry_name, dst: html,
343
+ call: ".nopara" # , deps: depend # , debug: true
344
+ @_post_entry ||= File.read(html)
341
345
  vp = post_lookup(id)
342
346
  nslug, aslug, title, date, teaser_text =
343
347
  vp.nslug, vp.aslug, vp.title, vp.date, vp.teaser_text
@@ -464,10 +468,14 @@ class RuneBlog
464
468
  # @theme/"navbar/navbar.lt3",
465
469
  @theme/"blog/index.lt3"] # FIXME what about assets?
466
470
  preprocess cwd: vdir/"themes/standard/etc", # deps: depend, debug: true,
467
- src: "blog.css.lt3", copy: vdir/"remote/etc/" # , dst: "blog.css"
471
+ src: "blog.css.lt3", copy: vdir/"remote/etc/",
472
+ call: ".nopara" # , dst: "blog.css"
468
473
  preprocess cwd: vdir/"themes/standard", deps: depend, force: true,
469
- src: "blog/generate.lt3", dst: vdir/:remote/"index.html"
474
+ src: "blog/generate.lt3", dst: vdir/:remote/"index.html",
475
+ call: ".nopara"
476
+ copy!("#{vdir}/themes/standard/banner/*", "#{vdir}/remote/banner/") # includes navbar/
470
477
  copy("#{vdir}/assets/*", "#{vdir}/remote/assets/")
478
+ # rebuild widgets
471
479
  copy_widget_html(view)
472
480
  rescue => err
473
481
  STDERR.puts err
@@ -574,7 +582,8 @@ class RuneBlog
574
582
  # Step 1...
575
583
  create_dirs(pdraft)
576
584
  # FIXME dependencies?
577
- preprocess cwd: pdraft, src: draft, dst: "guts.html" # , debug: true
585
+ preprocess cwd: pdraft, src: draft, dst: "guts.html",
586
+ mix: "liveblog" # , debug: true
578
587
  _post_metadata(draft, pdraft)
579
588
  # Step 2...
580
589
  vposts = @root/:views/view_name/:posts
@@ -585,10 +594,13 @@ class RuneBlog
585
594
  # Step 4...
586
595
  # FIXME dependencies?
587
596
  preprocess cwd: @theme/:post, src: "generate.lt3", force: true,
588
- dst: remote/ahtml, copy: @theme/:post # , debug: true
597
+ dst: remote/ahtml, copy: @theme/:post,
598
+ call: ".nopara" # , debug: true
599
+ # copy(remote/ahtml, remote/permalink/ahtml)
589
600
  # FIXME dependencies?
590
- preprocess cwd: @theme/:post, src: "permalink.lt3",
591
- dst: remote/:permalink/ahtml # , debug: true
601
+ # preprocess cwd: @theme/:post, src: "permalink.lt3",
602
+ # dst: remote/:permalink/ahtml,
603
+ # mix: "liveblog" # , debug: true
592
604
  copy_widget_html(view_name)
593
605
  rescue => err
594
606
  _tmp_error(err)
@@ -1,11 +1,66 @@
1
+ if !defined?(RuneBlog::Path)
1
2
 
2
- if ! (Object.constants.include?(:RuneBlog) && RuneBlog.constants.include?(:Path))
3
+ # if ! (Object.constants.include?(:RuneBlog) && RuneBlog.constants.include?(:Path))
3
4
 
4
5
  class RuneBlog
5
- VERSION = "0.2.88"
6
+ VERSION = "0.2.93"
6
7
 
7
8
  path = Gem.find_files("runeblog").grep(/runeblog-/).first
8
9
  Path = File.dirname(path)
9
10
  end
10
11
 
12
+ # skeleton
13
+
14
+ class RuneBlog
15
+ module Helpers
16
+ end
17
+
18
+ class Default
19
+ end
20
+
21
+ class View
22
+ end
23
+
24
+ class Publishing
25
+ end
26
+
27
+ class Post
28
+ end
29
+ end
30
+
31
+ # Refactor, move stuff elsewhere?
32
+
33
+ def make_exception(sym, str)
34
+ log!(enter: __method__, args: [sym, str], level: 3)
35
+ return if Object.constants.include?(sym)
36
+ Object.const_set(sym, StandardError.dup)
37
+ define_method(sym) do |*args|
38
+ msg = str
39
+ args.each.with_index {|arg, i| msg.sub!("$#{i+1}", arg) }
40
+ Object.class_eval(sym.to_s).new(msg)
41
+ end
42
+ end
43
+
44
+ def system!(str, show: false)
45
+ log!(enter: __method__, args: [str], level: 2)
46
+ STDERR.puts str if show
47
+ rc = system(str)
48
+ if rc
49
+ return rc
50
+ else
51
+ STDERR.puts "FAILED: #{str.inspect}"
52
+ STDERR.puts "\ncaller = \n#{caller.join("\n ")}\n"
53
+ sleep 6; RubyText.stop
54
+ exit
55
+ return rc
56
+ end
57
+ rc
58
+ end
59
+
60
+ def prefix(num)
61
+ log!(enter: __method__, args: [num], level: 3)
62
+ "#{'%04d' % num.to_i}"
63
+ end
64
+
65
+
11
66
  end
@@ -1,8 +1,7 @@
1
- require 'global'
2
1
  require 'logging'
3
2
 
4
3
  class RuneBlog::View
5
- attr_reader :name, :state
4
+ attr_reader :name, :state, :globals
6
5
  attr_accessor :publisher
7
6
 
8
7
  include RuneBlog::Helpers
@@ -15,6 +14,10 @@ class RuneBlog::View
15
14
  @publisher = RuneBlog::Publishing.new(name)
16
15
  @can_publish = true # FIXME
17
16
  @blog.view = self
17
+ gfile = @blog.root/"views/#{name}/themes/standard/global.lt3"
18
+ live = Livetext.customize(call: ".nopara")
19
+ live.xform_file(gfile)
20
+ @globals = live.vars
18
21
  end
19
22
 
20
23
  def dir
@@ -20,8 +20,8 @@ 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.98'
24
- s.add_runtime_dependency 'rubytext', '~> 0.1', '>= 0.1.19'
23
+ s.add_runtime_dependency 'livetext', '~> 0.8', '>= 0.8.99'
24
+ s.add_runtime_dependency 'rubytext', '~> 0.1', '>= 0.1.20'
25
25
 
26
26
  s.add_development_dependency 'minitest', '~> 5.10', '>= 5.10.0'
27
27
 
@@ -8,7 +8,6 @@ abort "Need Ruby 2.4 or greater" unless ver >= 24
8
8
 
9
9
  require 'date'
10
10
 
11
- require 'global'
12
11
  require 'runeblog'
13
12
  require 'repl'
14
13
 
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.2.88
4
+ version: 0.2.93
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-12-18 00:00:00.000000000 Z
11
+ date: 2019-12-20 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.98
22
+ version: 0.8.99
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.98
32
+ version: 0.8.99
33
33
  - !ruby/object:Gem::Dependency
34
34
  name: rubytext
35
35
  requirement: !ruby/object:Gem::Requirement
@@ -39,7 +39,7 @@ dependencies:
39
39
  version: '0.1'
40
40
  - - ">="
41
41
  - !ruby/object:Gem::Version
42
- version: 0.1.19
42
+ version: 0.1.20
43
43
  type: :runtime
44
44
  prerelease: false
45
45
  version_requirements: !ruby/object:Gem::Requirement
@@ -49,7 +49,7 @@ dependencies:
49
49
  version: '0.1'
50
50
  - - ">="
51
51
  - !ruby/object:Gem::Version
52
- version: 0.1.19
52
+ version: 0.1.20
53
53
  - !ruby/object:Gem::Dependency
54
54
  name: minitest
55
55
  requirement: !ruby/object:Gem::Requirement
@@ -91,7 +91,6 @@ files:
91
91
  - empty_view/assets/sky2.jpg
92
92
  - empty_view/posts/GIT_IS_DUMB
93
93
  - empty_view/remote/assets/GIT_IS_DUMB
94
- - empty_view/remote/banner/austin-pano.jpg
95
94
  - empty_view/remote/etc/GIT_IS_DUMB
96
95
  - empty_view/remote/permalink/GIT_IS_DUMB
97
96
  - empty_view/remote/widgets/ad/GIT_IS_DUMB
@@ -100,12 +99,12 @@ files:
100
99
  - empty_view/remote/widgets/pages/GIT_IS_DUMB
101
100
  - empty_view/remote/widgets/pinned/GIT_IS_DUMB
102
101
  - empty_view/themes/standard/README
103
- - empty_view/themes/standard/banner/about.lt3
104
- - empty_view/themes/standard/banner/contact.lt3
105
- - empty_view/themes/standard/banner/faq.lt3
106
- - empty_view/themes/standard/banner/list.data
102
+ - empty_view/themes/standard/banner/banner.lt3
103
+ - empty_view/themes/standard/banner/navbar/about.lt3
104
+ - empty_view/themes/standard/banner/navbar/contact.lt3
105
+ - empty_view/themes/standard/banner/navbar/faq.lt3
106
+ - empty_view/themes/standard/banner/navbar/list.data
107
107
  - empty_view/themes/standard/banner/top.lt3
108
- - empty_view/themes/standard/blog/banner.lt3
109
108
  - empty_view/themes/standard/blog/generate.lt3
110
109
  - empty_view/themes/standard/blog/head.lt3
111
110
  - empty_view/themes/standard/blog/index.lt3
@@ -184,7 +183,6 @@ files:
184
183
  - lib/exper/gen_svg.rb
185
184
  - lib/exper/s2.html
186
185
  - lib/exper/varmint.rb
187
- - lib/global.rb
188
186
  - lib/helpers-blog.rb
189
187
  - lib/helpers-repl.rb
190
188
  - lib/liveblog.rb
@@ -1 +0,0 @@
1
- .include ../widgets/pages/faq.lt3
@@ -1,52 +0,0 @@
1
- # skeleton
2
-
3
- class RuneBlog
4
- module Helpers
5
- end
6
-
7
- class Default
8
- end
9
-
10
- class View
11
- end
12
-
13
- class Publishing
14
- end
15
-
16
- class Post
17
- end
18
- end
19
-
20
- # Refactor, move stuff elsewhere?
21
-
22
- def make_exception(sym, str)
23
- log!(enter: __method__, args: [sym, str], level: 3)
24
- return if Object.constants.include?(sym)
25
- Object.const_set(sym, StandardError.dup)
26
- define_method(sym) do |*args|
27
- msg = str
28
- args.each.with_index {|arg, i| msg.sub!("$#{i+1}", arg) }
29
- Object.class_eval(sym.to_s).new(msg)
30
- end
31
- end
32
-
33
- def system!(str, show: false)
34
- log!(enter: __method__, args: [str], level: 2)
35
- STDERR.puts str if show
36
- rc = system(str)
37
- if rc
38
- return rc
39
- else
40
- STDERR.puts "FAILED: #{str.inspect}"
41
- STDERR.puts "\ncaller = \n#{caller.join("\n ")}\n"
42
- exit
43
- return rc
44
- end
45
- rc
46
- end
47
-
48
- def prefix(num)
49
- log!(enter: __method__, args: [num], level: 3)
50
- "#{'%04d' % num.to_i}"
51
- end
52
-