require 'ostruct' require 'pp' require 'date' require 'find' require 'runeblog' require 'pathmagic' require 'processing' # top = Livetext::Path + "/../plugin/liveblog/" # eval(File.read("#{top}/testing.rb")) def init_liveblog # FIXME - a lot of this logic sucks dir = Dir.pwd.sub(/\.blogs.*/, "") @blog = nil Dir.chdir(dir) { @blog = RuneBlog.new } @root = @blog.root @view = @blog.view @view_name = @blog.view.name unless @view.nil? @vdir = @blog.view.dir rescue "NONAME" @version = RuneBlog::VERSION @theme = @vdir/:themes/:standard rescue raise "Only works inside a blog repo" end ################## # "dot" commands ################## def dropcap # Bad form: adds another HEAD text = _data _out " " letter = text[0] remain = text[1..-1] _out %[
[Back] | [permalink] | #{taglist} |
\n#{lines}\n" end def _read_navbar_data vdir = @blog.root/:views/@blog.view dir = vdir/"themes/standard/banner/navbar/" datafile = dir/"list.data" _get_data(datafile) end def banner count = 0 bg = "white" # outside loop wide = nil high = 250 str2 = "" navbar = nil vdir = @blog.root/:views/@blog.view lines = _body.to_a lines.each do |line| count += 1 tag, *data = line.split data ||= [] case tag when "width"; wide = data[0] when "height"; high = data[0] when "bgcolor"; bg = data[0] || "white" when "image" image = data[0] || "banner.jpg" image = "banner"/image wide = data[0] width = wide ? "width=#{wide}" : "" str2 << "
" _passthru _body.join(" ") _passthru "" _optional_blank_line end def categories # does nothing right now end def style fname = _args[0] _passthru %[] end # Move elsewhere later! def h1; _passthru "
" # kludge!! para
_optional_blank_line
end
def title
raise "'post' was not called" unless @meta
title = @_data.chomp
@meta.title = title
setvar :title, title
# FIXME refactor -- just output variables for a template
_optional_blank_line
end
def pubdate
raise "'post' was not called" unless @meta
_debug "data = #@_data"
# Check for discrepancy?
match = /(\d{4}).(\d{2}).(\d{2})/.match @_data
junk, y, m, d = match.to_a
y, m, d = y.to_i, m.to_i, d.to_i
@meta.date = ::Date.new(y, m, d)
@meta.pubdate = "%04d-%02d-%02d" % [y, m, d]
_optional_blank_line
end
def image # primitive so far
_debug "img: huh? "
fname = _args.first
path = :assets/fname
_out "
"
_optional_blank_line
end
def tags
raise "'post' was not called" unless @meta
_debug "args = #{_args}"
@meta.tags = _args.dup || []
_optional_blank_line
end
def views
raise "'post' was not called" unless @meta
_debug "data = #{_args}"
@meta.views = _args.dup
_optional_blank_line
end
def pin
raise "'post' was not called" unless @meta
_debug "data = #{_args}" # verify only valid views?
pinned = @_args
@meta.pinned = pinned
pinned.each do |pinview|
dir = @blog.root/:views/pinview/"themes/standard/widgets/pinned/"
datafile = dir/"list.data"
pins = _get_data?(datafile)
pins << "#{@meta.num} #{@meta.title}\n"
pins.uniq!
File.open(datafile, "w") {|out| pins.each {|pin| out.puts pin } }
end
_optional_blank_line
rescue => err
STDERR.puts "err = #{err}"
STDERR.puts err.backtrace.join("\n")
gets
end
def write_post
raise "'post' was not called" unless @meta
@meta.views = @meta.views.join(" ") if @meta.views.is_a? Array
@meta.tags = @meta.tags.join(" ") if @meta.tags.is_a? Array
_write_metadata
rescue => err
puts "err = #{err}"
puts err.backtrace.join("\n")
end
def teaser
raise "'post' was not called" unless @meta
text = _body_text
@meta.teaser = text
setvar :teaser, @meta.teaser
if _args[0] == "dropcap" # FIXME doesn't work yet!
letter, remain = text[0], text[1..-1]
_out %[
" if line.empty? && ! @_nopara end def _passthru_noline(line) return if line.nil? line = _format(line) _out line _out "
" if line.empty? && ! @_nopara end def _write_metadata File.write("teaser.txt", @meta.teaser) fields = [:num, :title, :date, :pubdate, :views, :tags, :pinned] fname2 = "metadata.txt" f2 = File.open(fname2, "w") do |f2| fields.each {|fld| f2.puts "#{fld}: #{@meta.send(fld)}" } end end def _post_lookup(postid) # side-effect # .. = templates, ../.. = views/thisview slug = title = date = teaser_text = nil dir_posts = @vdir/:posts posts = Dir.entries(dir_posts).grep(/^\d\d\d\d/).map {|x| dir_posts/x } posts.select! {|x| File.directory?(x) } post = posts.select {|x| File.basename(x).to_i == postid } raise "Error: More than one post #{postid}" if post.size > 1 postdir = post.first vp = RuneBlog::ViewPost.new(@blog.view, postdir) vp end def _card_generic(card_title:, middle:, extra: "") front = <<-HTML