runeblog 0.2.88 → 0.2.93

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