class NoticeSys::StatusView

Public Class Methods

new(basepath, xslfile, css_url, weblet) click to toggle source
# File lib/noticesys.rb, line 204
def initialize(basepath, xslfile, css_url, weblet)
  
  @basepath, @xslfile, @css_url = basepath, xslfile, css_url
  @w = weblet    
  @card = CardView.new(@w)
  
end

Public Instance Methods

render(topic, rawid, referer) click to toggle source
# File lib/noticesys.rb, line 212
def render(topic, rawid, referer)      

  id = rawid[0..9].to_i
  
  filepath = File.join(@basepath, 'u', topic)
  a = [Time.at(id).strftime("%Y/%b/%-d").downcase, rawid]
  xmlfile = File.join(filepath, "%s/%s/index.xml" % a)
  xslfile = File.join(@basepath, "/xsl/notices/#{topic}.xsl")
  
  unless File.exists? xslfile then
    xslfile = @xslfile
  end

  dx = Dynarex.new(File.join(filepath, 'feed.xml'))
  doc = Rexle.new(File.read(xmlfile))
        
  doc.root.element('summary/title').text = dx.title
  e = doc.root.element('summary/image')

  if e.nil? then
    e = Rexle::Element.new 'image'
    doc.root.element('summary').add e
  end
  
  doc.root.element('summary/image').text = dx.image
  
  # remove the card from the description
  desc = doc.root.element('body/description')
  desc.xpath('img|div').each(&:delete)

  doc   = Nokogiri::XML(doc.root.xml)
  xslt  = Nokogiri::XSLT(File.read(xslfile))

  s = xslt.transform(doc)
  doc = Rexle.new(s.to_s)
 
  rx = Kvx.new(xmlfile)                        

  rawcard = rx.card


  card2, meta = if rawcard and rawcard.length > 10 then
  
    card = JSON.parse(rawcard, symbolize_names: true)
    
    if card.is_a? Hash then      
          
      type = card.keys.first
      h = card[type]
      #img = h[:img].sub(/small(?=\.\w+$)/,'large')
      img = h[:img]
      metadata = @w.render(:meta, binding)
      [@card.render(dx, rx, card), metadata]
      
    end
  else
    '<span/>'
  end
  

  e = doc.root.at_css '#notice'
  desc = e.at_css '#desc'
  desc.add Rexle.new(card2).root      

  ref =  referer
  svg = @w.render 'svg/backarrow', binding
  
  back = if ref then
    "<div id='back'><a href='#{ref}' title='back'>#{svg}</a></div>"
  else
    ''            
  end
  
  @w.render :status, binding

end