Sha256: 378bba337075d570e8bbbe97d3a43514ffa911bcbf70b82522bc71f61f384928

Contents?: true

Size: 1.88 KB

Versions: 4

Compression:

Stored size: 1.88 KB

Contents

module HTMLHelper

  def wrapped(str, *tags)   # helper
    open, close = open_close_tags(*tags)
    open + str + close
  end

  def wrapped!(str, tag, **extras)    # helper
    open, close = open_close_tags(tag)
    extras.each_pair do |name, value|
      open.sub!(">", " #{name}='#{value}'>")
    end
    open + str + close
  end

  def wrap(*tags)     # helper
    open, close = open_close_tags(*tags)
    api.out open
    yield
    api.out close
  end

  def open_close_tags(*tags)
    open, close = "", ""
    tags.each do |tag|
      open << "<#{tag}>"
      close.prepend("</#{tag}>")
    end
    [open, close]
  end
end

class HTML

  def initialize(api)
    @api = api
    @indent = 0
  end

  def indented
    " "*@indent
  end

  def indent(which)
    case which
      when :in, :right
        @indent += 2
      when :out, :left
        @indent -= 2
    else
      abort "indent(#{which}) is nonsense"
    end
  end

  def nav(**details, &block)
    wrap(:nav, **details, &block)
  end

  def div(**details, &block)
    wrap(:div, **details, &block)
  end

  def ul(**details, &block)
    wrap(:ul, **details, &block)
  end

  def li(**details, &block)
    wrap(:li, **details, &block)
  end

  def api
    @api
  end

  def open_close_tags(*tags)
    open, close = "", ""
    tags.each do |tag|
      open << "<#{tag}>"
      close.prepend("</#{tag}>")
    end
    [open, close]
  end

  def wrap(*tags, **extras)     # helper
    open, close = open_close_tags(*tags)
    extras.each_pair do |name, value|
      open.sub!(">", " #{name}='#{value}'>")
    end
    api.out indented + open 
    indent(:in)
    yield
    indent(:out)
    api.out indented + close
  end

  def tag(*tags, cdata: "", **extras)     # helper
    open, close = open_close_tags(*tags)
    extras.each_pair do |name, value|
      open.sub!(">", " #{name}='#{value}'>")
    end
    str = indented + open + cdata + close
    str
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
livetext-0.9.33 lib/livetext/html.rb
livetext-0.9.32 lib/livetext/html.rb
livetext-0.9.31 lib/livetext/html.rb
livetext-0.9.30 lib/livetext/html.rb