Class: Ezframe::Html

Inherits:
Object show all
Defined in:
lib/ezframe/html.rb

Class Method Summary collapse

Class Method Details

.convert(ht_h = {}) ⇒ Object



6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# File 'lib/ezframe/html.rb', line 6

def convert(ht_h = {})
  ht_h = hook_for_convert(ht_h)
  return "" if ht_h.nil? || ht_h.to_s.empty?
  return ht_h.to_html if ht_h.respond_to?(:to_html)
  return ht_h.to_s if ht_h.is_a?(String) || ht_h.is_a?(Symbol) || ht_h.is_a?(Integer) || ht_h.is_a?(Time)
  return ht_h.map { |args| convert(args) }.join if ht_h.is_a?(Array)

  tag = ht_h[:tag]
  case tag
  when "input"
    input(ht_h)
  when "select"
    return select(ht_h) if ht_h[:item]
  when "icon"
    tag = "i"
  end
  tag = ht_h[:tag]
  opt_s, child_s = join_attributes(ht_h)
  if !child_s.strip.empty? || %w[div span table tr td th textarea].include?(tag)
    return "<#{ht_h[:tag]} #{opt_s}>\n#{child_s}\n</#{ht_h[:tag]}>\n"
  end
  "<#{ht_h[:tag]} #{opt_s} />"
end

.hook_for_convert(ht_h) ⇒ Object



111
112
113
# File 'lib/ezframe/html.rb', line 111

def hook_for_convert(ht_h)
  return ht_h
end

.input(ht_h) ⇒ Object



55
56
57
58
59
60
61
62
63
64
65
66
67
# File 'lib/ezframe/html.rb', line 55

def input(ht_h)
  size = ht_h[:size]
  # puts "input: size=#{size.inspect}"
  if size && (size.index("x") || size.index("*"))
    if /(\d+)\s*[x\*]\s*(\d+)/ =~ size
      ht_h[:cols], ht_h[:rows] = $1, $2
      ht_h.delete(:size)
    end
    ht_h[:tag] = "textarea"
    ht_h[:child] = ht_h[:value]
    ht_h.delete(:value)
  end
end

.join_attributes(attrs) ⇒ Object



30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# File 'lib/ezframe/html.rb', line 30

def join_attributes(attrs)
  child_s = ""
  opt_a = attrs.map do |k, v|
    case k
    when :child
      child_s = convert(v)
      next
    when :tag, :final
      next
    when :key
      "name=\"#{v}\"" if attrs[:tag].to_sym == :input
      next
    else
      if v.is_a?(Array)
        "#{k}=\"#{v.join(" ")}\""
      elsif v.nil?
        nil
      else
        "#{k}=\"#{v}\""
      end
    end
  end
  [opt_a.compact.join(" "), child_s]
end

.select(ht_h = {}) ⇒ Object



69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
# File 'lib/ezframe/html.rb', line 69

def select(ht_h = {})
  attr = ht_h.clone
  item = attr[:item]
  # puts "Html.select: #{item}"
  if item.is_a?(Hash)
    option_a = ht_h[:item].map do |k, v|
      h = { tag: "option", value: k }
      if v.is_a?(Array)
        v, selected = v
        h[:selected] = "selected" if selected
      end
      h[:child] = v
      # mylog "select: hash: k=#{k}, v=#{v}, value=#{ht_h[:value]}"
      if ht_h[:value] && ht_h[:value].to_s == k.to_s
        h[:selected] = "selected"
      end
      h
    end
  elsif item.is_a?(Array)
    option_a = item.map do |v|
      h = { tag: "option", value: v[0], child: v[1] }
      if %w[selected default].include?(v[2])
        h[:selected] = "selected"
      end
      # mylog "select: array: v=#{v}, value=#{ht_h[:value]}"
      if ht_h[:value] && ht_h[:value].to_s == v[0].to_s
        h[:selected] = "selected"
      end
      # puts h.inspect
      h
    end
  else
    warn "unknown item: #{ht_h.inspect}"
  end
  attr[:tag] = "select"
  attr[:child] = option_a
  attr[:name] ||= attr[:key]
  attr[:final] = true
  attr.delete(:item)
  Html.convert(attr)
end