runeblog 0.2.93 → 0.2.94
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 +4 -4
- data/bin/blog +5 -5
- data/lib/helpers-blog.rb +19 -74
- data/lib/helpers-repl.rb +3 -13
- data/lib/liveblog.rb +0 -21
- data/lib/lowlevel.rb +73 -0
- data/lib/publish.rb +2 -8
- data/lib/repl.rb +1 -1
- data/lib/runeblog.rb +35 -5
- data/lib/runeblog_version.rb +1 -17
- metadata +2 -2
- data/lib/default.rb +0 -31
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7ed9580d074b2ce228aff385bbe22e907a9ae0c330f625aa2d42ee58464a1d3b
|
4
|
+
data.tar.gz: 0ce0642e8b2f0026cca4133916ff0dd3f992bb1ae8cb89e3304d90221d8195a8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 84d30bada582bd3393e075a1cba653ec11e719941c675d1a9753d6dbf921643137e6096205b5120c91f385e6d9cb4a1e823440607b1db5ee23232c87885128bc
|
7
|
+
data.tar.gz: 0b0207066da6493400d66e9473c00659bef4b4169fb26cdbe554d220a59778579bd06207643516a409df39247fa8b263ae77229c16344912e81a8befb0237c6b
|
data/bin/blog
CHANGED
@@ -25,8 +25,8 @@ end
|
|
25
25
|
def get_universal
|
26
26
|
univ = "#{@blog.root}/data/universal.lt3"
|
27
27
|
if yesno("Faster initial setup? (no: edit universal.lt3)")
|
28
|
-
author = ask("Author name: ")
|
29
|
-
site = ask("Site/domain: ")
|
28
|
+
author = ask!("Author name: ")
|
29
|
+
site = ask!("Site/domain: ")
|
30
30
|
# Now stash it...
|
31
31
|
str = File.read(univ)
|
32
32
|
str = str.gsub(/AUTHOR/, author)
|
@@ -41,8 +41,8 @@ def get_global
|
|
41
41
|
if yesno("Faster view setup? (no: edit global.lt3)")
|
42
42
|
view_name = ask("\nFilename: ")
|
43
43
|
@blog.create_view(view_name) # call change_view??
|
44
|
-
title = ask("View title: ")
|
45
|
-
subtitle = ask("Subtitle : ")
|
44
|
+
title = ask!("View title: ")
|
45
|
+
subtitle = ask!("Subtitle : ")
|
46
46
|
gname = "#{@blog.root}/views/#{view_name}/themes/standard/global.lt3"
|
47
47
|
text = File.read(gname)
|
48
48
|
text = text.gsub(/VIEW_NAME/, view_name)
|
@@ -50,7 +50,7 @@ def get_global
|
|
50
50
|
text = text.gsub(/VIEW_SUBTITLE/, subtitle)
|
51
51
|
File.write(gname, text)
|
52
52
|
else
|
53
|
-
view_name = ask("\nFilename: ")
|
53
|
+
view_name = ask!("\nFilename: ")
|
54
54
|
@blog.create_view(view_name) # call change_view??
|
55
55
|
vim_params = '-c ":set hlsearch" -c ":hi Search ctermfg=2 ctermbg=6" +/"\(VIEW_.*\|SITE.*\)"'
|
56
56
|
edit_file(@blog.view.dir/"themes/standard/global.lt3", vim: vim_params)
|
data/lib/helpers-blog.rb
CHANGED
@@ -3,37 +3,15 @@ require 'fileutils'
|
|
3
3
|
|
4
4
|
require 'processing'
|
5
5
|
|
6
|
-
|
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
|
6
|
+
require 'lowlevel'
|
24
7
|
|
25
|
-
|
26
|
-
log!(enter: __method__, args: [src, dst], level: 2)
|
27
|
-
cmd = "cp #{src} #{dst} 2>/dev/null"
|
28
|
-
rc = system!(cmd)
|
29
|
-
puts " Failed: #{cmd} - from #{caller[0]}" unless rc
|
30
|
-
end
|
8
|
+
module RuneBlog::Helpers
|
31
9
|
|
32
|
-
def
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
10
|
+
def quit_RubyText
|
11
|
+
return unless defined? RubyText
|
12
|
+
sleep 6
|
13
|
+
RubyText.stop
|
14
|
+
exit
|
37
15
|
end
|
38
16
|
|
39
17
|
def get_repo_config
|
@@ -71,8 +49,7 @@ module RuneBlog::Helpers
|
|
71
49
|
puts "Can't read vars file '#{file}': #{err}"
|
72
50
|
puts err.backtrace.join("\n")
|
73
51
|
puts "dir = #{Dir.pwd}"
|
74
|
-
|
75
|
-
exit
|
52
|
+
stop_RubyText
|
76
53
|
end
|
77
54
|
|
78
55
|
def read_config(file, *syms)
|
@@ -98,8 +75,7 @@ module RuneBlog::Helpers
|
|
98
75
|
puts "Can't read config file '#{file}': #{err}"
|
99
76
|
puts err.backtrace.join("\n")
|
100
77
|
puts "dir = #{Dir.pwd}"
|
101
|
-
|
102
|
-
exit
|
78
|
+
stop_RubyText
|
103
79
|
end
|
104
80
|
|
105
81
|
def try_read_config(file, hash)
|
@@ -123,20 +99,21 @@ module RuneBlog::Helpers
|
|
123
99
|
dirs.map {|name| RuneBlog::View.new(name) }
|
124
100
|
end
|
125
101
|
|
126
|
-
def write_repo_config(root: "#{Dir.pwd}/.blogs", view:
|
102
|
+
def write_repo_config(root: "#{Dir.pwd}/.blogs", view: nil, editor: "/usr/local/bin/vim")
|
103
|
+
view ||= File.read("#{root}/data/VIEW").chomp rescue "[no view]"
|
127
104
|
File.write(root + "/data/ROOT", root + "\n")
|
128
105
|
File.write(root + "/data/VIEW", view.to_s + "\n")
|
129
106
|
File.write(root + "/data/EDITOR", editor + "\n")
|
130
107
|
end
|
131
108
|
|
132
|
-
def new_dotfile(root: ".blogs", current_view: "test_view", editor: "vi")
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
end
|
109
|
+
# def new_dotfile(root: ".blogs", current_view: "test_view", editor: "vi")
|
110
|
+
# log!(enter: __method__, args: [root, current_view, editor], level: 3)
|
111
|
+
# root = Dir.pwd + "/" + root
|
112
|
+
# x = OpenStruct.new
|
113
|
+
# x.root, x.current_view, x.editor = root, current_view, editor
|
114
|
+
# write_config(x, root + "/" + RuneBlog::ConfigFile)
|
115
|
+
# write_repo_config
|
116
|
+
# end
|
140
117
|
|
141
118
|
def new_sequence
|
142
119
|
log!(enter: __method__, level: 3)
|
@@ -164,38 +141,6 @@ module RuneBlog::Helpers
|
|
164
141
|
files
|
165
142
|
end
|
166
143
|
|
167
|
-
def create_dirs(*dirs)
|
168
|
-
log!(enter: __method__, args: [*dirs], level: 3)
|
169
|
-
dirs.each do |dir|
|
170
|
-
dir = dir.to_s # symbols allowed
|
171
|
-
next if Dir.exist?(dir)
|
172
|
-
cmd = "mkdir -p #{dir} >/dev/null"
|
173
|
-
result = system!(cmd)
|
174
|
-
raise CantCreateDir(dir) unless result
|
175
|
-
end
|
176
|
-
end
|
177
|
-
|
178
|
-
def interpolate(str, bind)
|
179
|
-
log!(enter: __method__, args: [str, bind], level: 3)
|
180
|
-
wrap = "<<-EOS\n#{str}\nEOS"
|
181
|
-
eval wrap, bind
|
182
|
-
end
|
183
|
-
|
184
|
-
def error(err) # Hmm, this is duplicated
|
185
|
-
log!(str: "duplicated method", enter: __method__, args: [err], level: 2)
|
186
|
-
str = "\n Error: #{err}"
|
187
|
-
puts str
|
188
|
-
puts err.backtrace.join("\n")
|
189
|
-
end
|
190
|
-
|
191
|
-
def dump(obj, name)
|
192
|
-
log!(enter: __method__, args: [obj, name], level: 3)
|
193
|
-
File.write(name, obj)
|
194
|
-
end
|
195
144
|
end
|
196
145
|
|
197
|
-
def dump(obj, name) # FIXME scope
|
198
|
-
log!(str: "scope problem", enter: __method__, args: [obj, name], level: 3)
|
199
|
-
File.write(name, obj)
|
200
|
-
end
|
201
146
|
|
data/lib/helpers-repl.rb
CHANGED
@@ -109,26 +109,16 @@ module RuneBlog::REPL
|
|
109
109
|
end
|
110
110
|
meth = found || :cmd_INVALID
|
111
111
|
params = cmd if meth == :cmd_INVALID
|
112
|
-
# puts "choose: #{[meth, params].inspect}"
|
113
112
|
[meth, params]
|
114
113
|
end
|
115
114
|
|
116
|
-
def error(err) # Hmm, this is duplicated
|
117
|
-
str = "\n Error: #{err}"
|
118
|
-
puts str
|
119
|
-
puts err.backtrace.join("\n")
|
120
|
-
end
|
121
|
-
|
122
115
|
def ask(prompt, meth = :to_s)
|
123
116
|
print prompt
|
124
|
-
|
125
|
-
str.chomp!
|
126
|
-
str.send(meth)
|
117
|
+
gets.chomp.send(meth)
|
127
118
|
end
|
128
119
|
|
129
|
-
def
|
130
|
-
|
131
|
-
gets.chomp.upcase[0] == "Y"
|
120
|
+
def ask!(prompt, meth = :to_s)
|
121
|
+
ask(fx(prompt, :bold), meth)
|
132
122
|
end
|
133
123
|
|
134
124
|
def reset_output(initial = "")
|
data/lib/liveblog.rb
CHANGED
@@ -501,22 +501,6 @@ rescue => err
|
|
501
501
|
exit
|
502
502
|
end
|
503
503
|
|
504
|
-
# def pinned_rebuild
|
505
|
-
# view = @blog.view
|
506
|
-
# view = _args[0] unless _args.empty?
|
507
|
-
# Dir.chdir(@blog.root/:views/view/"themes/standard/") do
|
508
|
-
# wtag = "widgets/pinned"
|
509
|
-
# code = _load_local("pinned")
|
510
|
-
# if code
|
511
|
-
# Dir.chdir(wtag) do
|
512
|
-
# widget = code.new(@blog)
|
513
|
-
# widget.build
|
514
|
-
# end
|
515
|
-
# # _include_file wtag/"pinned-card.html"
|
516
|
-
# end
|
517
|
-
# end
|
518
|
-
# end
|
519
|
-
|
520
504
|
def _handle_standard_widget(tag)
|
521
505
|
wtag = :widgets/tag
|
522
506
|
code = _load_local(tag)
|
@@ -769,11 +753,6 @@ def _post_lookup(postid) # side-effect
|
|
769
753
|
vp
|
770
754
|
end
|
771
755
|
|
772
|
-
def _interpolate(str, context) # FIXME move this later
|
773
|
-
wrapped = "%[" + str.dup + "]" # could fail...
|
774
|
-
eval(wrapped, context)
|
775
|
-
end
|
776
|
-
|
777
756
|
def _card_generic(card_title:, middle:, extra: "")
|
778
757
|
front = <<-HTML
|
779
758
|
<div class="card #{extra} mb-3">
|
data/lib/lowlevel.rb
ADDED
@@ -0,0 +1,73 @@
|
|
1
|
+
|
2
|
+
def dump(obj, name)
|
3
|
+
File.write(name, obj)
|
4
|
+
end
|
5
|
+
|
6
|
+
def system!(str, show: false)
|
7
|
+
log!(enter: __method__, args: [str], level: 2)
|
8
|
+
STDERR.puts str if show
|
9
|
+
rc = system(str)
|
10
|
+
return rc if rc
|
11
|
+
STDERR.puts "FAILED: #{str.inspect}"
|
12
|
+
STDERR.puts "\ncaller = \n#{caller.join("\n ")}\n"
|
13
|
+
if defined?(RubyText)
|
14
|
+
sleep 6
|
15
|
+
RubyText.stop
|
16
|
+
exit
|
17
|
+
end
|
18
|
+
return rc
|
19
|
+
end
|
20
|
+
|
21
|
+
def _get_data?(file) # File need not exist
|
22
|
+
if File.exist?(file)
|
23
|
+
_get_data(file)
|
24
|
+
else
|
25
|
+
[]
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def _get_data(file)
|
30
|
+
lines = File.readlines(file)
|
31
|
+
lines.reject! {|line| line[0] == "-" } # allow rejection of lines
|
32
|
+
lines = lines.map do |line|
|
33
|
+
line.sub(/ *# .*$/, "") # allow trailing comments
|
34
|
+
end
|
35
|
+
lines
|
36
|
+
end
|
37
|
+
|
38
|
+
def copy(src, dst)
|
39
|
+
log!(enter: __method__, args: [src, dst], level: 2)
|
40
|
+
cmd = "cp #{src} #{dst} 2>/dev/null"
|
41
|
+
system!(cmd)
|
42
|
+
end
|
43
|
+
|
44
|
+
def copy!(src, dst)
|
45
|
+
log!(enter: __method__, args: [src, dst], level: 2)
|
46
|
+
cmd = "cp -r #{src} #{dst} 2>/dev/null"
|
47
|
+
system!(cmd)
|
48
|
+
end
|
49
|
+
|
50
|
+
def create_dirs(*dirs)
|
51
|
+
log!(enter: __method__, args: [*dirs], level: 3)
|
52
|
+
dirs.each do |dir|
|
53
|
+
dir = dir.to_s # symbols allowed
|
54
|
+
next if Dir.exist?(dir)
|
55
|
+
cmd = "mkdir -p #{dir} >/dev/null"
|
56
|
+
result = system!(cmd)
|
57
|
+
raise CantCreateDir(dir) unless result
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
def interpolate(str, bind)
|
62
|
+
log!(enter: __method__, args: [str, bind], level: 3)
|
63
|
+
wrap = "<<-EOS\n#{str}\nEOS"
|
64
|
+
eval wrap, bind
|
65
|
+
end
|
66
|
+
|
67
|
+
def error(err)
|
68
|
+
log!(str: err, enter: __method__, args: [err], level: 2)
|
69
|
+
str = "\n Error: #{err}"
|
70
|
+
puts str
|
71
|
+
puts err.backtrace.join("\n")
|
72
|
+
end
|
73
|
+
|
data/lib/publish.rb
CHANGED
@@ -37,21 +37,15 @@ class RuneBlog::Publishing
|
|
37
37
|
url = "#@proto://#@server/#@path" # /#{vname}"
|
38
38
|
end
|
39
39
|
|
40
|
-
def system!(str)
|
41
|
-
log!(enter: __method__, args: [str], level: 1)
|
42
|
-
rc = system(str)
|
43
|
-
rc
|
44
|
-
end
|
45
|
-
|
46
40
|
def publish
|
47
41
|
log!(enter: __method__, level: 1)
|
48
42
|
dir = @docroot/@path
|
49
43
|
view_name = @blog.view.name
|
50
44
|
viewpath = dir # /view_name
|
51
45
|
# FIXME rsync doesn't work
|
52
|
-
cmd = "rsync -
|
46
|
+
cmd = "rsync -r -z #{@blog.root}/views/#{@blog.view}/remote/ #@user@#@server:#{viewpath}/"
|
53
47
|
system!(cmd)
|
54
|
-
dump(
|
48
|
+
dump("#{@blog.view} at #{Time.now}", "#{@blog.view.dir}/last_published")
|
55
49
|
true
|
56
50
|
end
|
57
51
|
|
data/lib/repl.rb
CHANGED
data/lib/runeblog.rb
CHANGED
@@ -10,7 +10,6 @@ require 'logging'
|
|
10
10
|
|
11
11
|
require 'runeblog_version'
|
12
12
|
require 'helpers-blog'
|
13
|
-
require 'default'
|
14
13
|
require 'view'
|
15
14
|
require 'publish'
|
16
15
|
require 'post'
|
@@ -48,6 +47,34 @@ class RuneBlog
|
|
48
47
|
|
49
48
|
include Helpers
|
50
49
|
|
50
|
+
class Default
|
51
|
+
|
52
|
+
# This will all become much more generic later.
|
53
|
+
|
54
|
+
def RuneBlog.post_template(num: 0, title: "No title", date: nil, view: "test_view",
|
55
|
+
teaser: "No teaser", body: "No body", tags: ["untagged"],
|
56
|
+
views: [], back: "javascript:history.go(-1)", home: "no url")
|
57
|
+
log!(enter: __method__, args: [num, title, date, view, teaser, body, tags, views, back, home], level: 3)
|
58
|
+
viewlist = (views + [view.to_s]).join(" ")
|
59
|
+
taglist = ".tags " + tags.join(" ")
|
60
|
+
|
61
|
+
<<~TEXT
|
62
|
+
.post #{num}
|
63
|
+
|
64
|
+
.title #{title}
|
65
|
+
.pubdate #{date}
|
66
|
+
.views #{viewlist}
|
67
|
+
#{taglist}
|
68
|
+
|
69
|
+
.teaser
|
70
|
+
#{teaser}
|
71
|
+
.end
|
72
|
+
#{body}
|
73
|
+
TEXT
|
74
|
+
end
|
75
|
+
|
76
|
+
end
|
77
|
+
|
51
78
|
def _tmp_error(err) # FIXME move to helpers
|
52
79
|
out = "/tmp/blog#{rand(100)}.txt"
|
53
80
|
File.open(out, "w") do |f|
|
@@ -68,7 +95,7 @@ class RuneBlog
|
|
68
95
|
create_dirs(:data, :drafts, :views, :posts)
|
69
96
|
new_sequence
|
70
97
|
end
|
71
|
-
copy_data(:config, repo_root/:data)
|
98
|
+
copy_data(:config, repo_root/:data) unless File.exist?(repo_root/"data/VIEW")
|
72
99
|
write_repo_config(root: repo_root)
|
73
100
|
@blog = self.new
|
74
101
|
@blog
|
@@ -90,7 +117,7 @@ class RuneBlog
|
|
90
117
|
self.class.blog = self # Weird. Like a singleton - dumbass circular dependency?
|
91
118
|
|
92
119
|
@root = Dir.pwd/root_rel
|
93
|
-
|
120
|
+
# copy_data(:config, @root/:data) unless File.exist?(@root/"data/VIEW")
|
94
121
|
write_repo_config(root: @root)
|
95
122
|
get_repo_config
|
96
123
|
@views = retrieve_views
|
@@ -210,6 +237,9 @@ class RuneBlog
|
|
210
237
|
def view=(arg)
|
211
238
|
log!(enter: __method__, args: [arg], level: 2)
|
212
239
|
case arg
|
240
|
+
when "[no view]"
|
241
|
+
# puts "Warning: No current view set"
|
242
|
+
@view = nil
|
213
243
|
when RuneBlog::View
|
214
244
|
@view = arg
|
215
245
|
_set_publisher
|
@@ -487,8 +517,8 @@ class RuneBlog
|
|
487
517
|
log!(enter: __method__, args: [draft], level: 2)
|
488
518
|
# FIXME dumb code
|
489
519
|
view_line = File.readlines(draft).grep(/^.views /)
|
490
|
-
raise "More than one .views call
|
491
|
-
raise "No .views call
|
520
|
+
raise "More than one .views call in #{draft}" if view_line.size > 1
|
521
|
+
raise "No .views call in #{draft}" if view_line.size < 1
|
492
522
|
view_line = view_line.first
|
493
523
|
views = view_line[7..-1].split
|
494
524
|
views.uniq
|
data/lib/runeblog_version.rb
CHANGED
@@ -3,7 +3,7 @@ if !defined?(RuneBlog::Path)
|
|
3
3
|
# if ! (Object.constants.include?(:RuneBlog) && RuneBlog.constants.include?(:Path))
|
4
4
|
|
5
5
|
class RuneBlog
|
6
|
-
VERSION = "0.2.
|
6
|
+
VERSION = "0.2.94"
|
7
7
|
|
8
8
|
path = Gem.find_files("runeblog").grep(/runeblog-/).first
|
9
9
|
Path = File.dirname(path)
|
@@ -41,22 +41,6 @@ def make_exception(sym, str)
|
|
41
41
|
end
|
42
42
|
end
|
43
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
44
|
def prefix(num)
|
61
45
|
log!(enter: __method__, args: [num], level: 3)
|
62
46
|
"#{'%04d' % num.to_i}"
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: runeblog
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.94
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Hal Fulton
|
@@ -175,7 +175,6 @@ files:
|
|
175
175
|
- empty_view/themes/standard/widgets/tag-cloud/tag-cloud.lt3
|
176
176
|
- empty_view/themes/standard/widgets/tag-cloud/tag-cloud.rb
|
177
177
|
- lib/Javascript.stuff
|
178
|
-
- lib/default.rb
|
179
178
|
- lib/exper/2svg.lt3
|
180
179
|
- lib/exper/callout.js
|
181
180
|
- lib/exper/fbtw-js
|
@@ -187,6 +186,7 @@ files:
|
|
187
186
|
- lib/helpers-repl.rb
|
188
187
|
- lib/liveblog.rb
|
189
188
|
- lib/logging.rb
|
189
|
+
- lib/lowlevel.rb
|
190
190
|
- lib/pathmagic.rb
|
191
191
|
- lib/post.rb
|
192
192
|
- lib/processing.rb
|
data/lib/default.rb
DELETED
@@ -1,31 +0,0 @@
|
|
1
|
-
class RuneBlog::Default
|
2
|
-
|
3
|
-
# This will all become much more generic later.
|
4
|
-
|
5
|
-
def RuneBlog.post_template(num: 0, title: "No title", date: nil, view: "test_view",
|
6
|
-
teaser: "No teaser", body: "No body", tags: ["untagged"],
|
7
|
-
views: [], back: "javascript:history.go(-1)", home: "no url")
|
8
|
-
log!(enter: __method__, args: [num, title, date, view, teaser, body, tags, views, back, home], level: 3)
|
9
|
-
viewlist = (views + [view.to_s]).join(" ")
|
10
|
-
taglist = ".tags " + tags.join(" ")
|
11
|
-
|
12
|
-
# .mixin liveblog
|
13
|
-
# . ^ get rid of this later
|
14
|
-
|
15
|
-
<<-TEXT
|
16
|
-
.post #{num}
|
17
|
-
|
18
|
-
.title #{title}
|
19
|
-
.pubdate #{date}
|
20
|
-
.views #{viewlist}
|
21
|
-
#{taglist}
|
22
|
-
|
23
|
-
.teaser
|
24
|
-
#{teaser}
|
25
|
-
.end
|
26
|
-
#{body}
|
27
|
-
TEXT
|
28
|
-
|
29
|
-
end
|
30
|
-
|
31
|
-
end
|