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
@reddit_comments = ""
@reddit_enabled = @blog.features["reddit"]
if @reddit_enabled
@reddit_comments = <<~HTML
HTML
end
rescue => err
STDERR.puts "err = #{err}"
STDERR.puts err.backtrace.join("\n")
# 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 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/"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.join("\n") @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] fname = "metadata.txt" File.open(fname, "w") do |f| fields.each {|fld| f.puts "#{'%8s' % 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) } posts = posts.select {|x| File.basename(x).to_i == postid } postdir = exactly_one(posts) vp = RuneBlog::ViewPost.new(@blog.view, postdir) vp end def _card_generic(card_title:, middle:, extra: "") front = <<-HTML