Module: Zena::Use::Forms::ViewMethods

Defined in:
lib/zena/use/forms.rb

Instance Method Summary collapse

Instance Method Details

#make_checkbox(node, opts) ⇒ Object



12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
# File 'lib/zena/use/forms.rb', line 12

def make_checkbox(node, opts)
  if relation_name = opts[:role]
    values, attribute = opts[:list], opts[:attr]
    relation_proxy = node.relation_proxy(relation_name)
    return nil unless values && relation_proxy

    res = []
    role = relation_proxy.other_role

    if relation_proxy.unique?
      current_value = relation_proxy.other_id
      values.each do |value|
        res << ("<input type='radio' name='node[#{role}_id]' value='#{value.zip}'" +
        (current_value == value.id ? " checked='checked'/> " : '/> ') +
        "<span>#{value.prop[attribute]}</span>")
      end
      res << "<input type='radio' name='node[#{role}_id]' value=''/> <span>#{_('none')}</span>"
    else
      current_values = relation_proxy.other_ids
      res << "<input type='hidden' name='node[#{role}_ids][]' value=''/>"
      values.each do |value|
        res << ("<p><input type='checkbox' name='node[#{role}_ids][]' value='#{value.zip}'" +
        (current_values.include?(value.id) ? " checked='checked'/> " : '/> ') +
        "<span>#{value.prop[attribute]}</span></p>")
      end
    end
    res.join('')
  else
    # literal values
    list, name, selected = opts[:list], opts[:name], opts[:selected]
    show = opts[:show] || list
    if selected.kind_of?(Array)
      selected = selected.map(&:to_s)
      name = "node[#{name}][]"
    else
      selected = [selected.to_s]
      name = "node[#{name}]"
    end
    res = []
    if default = opts[:default]
      default = fquote default.to_s
    else
      default = ''
    end
    res << "<input type='hidden' name='#{name}' value='#{default}'/>"
    type = opts[:type] || 'checkbox'
    list.each_with_index do |value, i|
      res << ("<input type='#{type}' name='#{name}' value='#{value}'" +
      (selected.include?(value.to_s) ? " checked='checked'/> " : '/> ') +
      "<span>#{show[i]}</span>")
    end
    res.join('')
  end
end

#new_instance(class_name, params = {}) ⇒ Object

Create a new instance of the given class name



7
8
9
10
# File 'lib/zena/use/forms.rb', line 7

def new_instance(class_name, params = {})
  return nil unless klass = Node.get_class(class_name, :create => true)
  klass.new_instance(Node.transform_attributes(params))
end

#param_value(name) ⇒ Object

Find a params value from an input name (q ==> safe params[foo])



68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
# File 'lib/zena/use/forms.rb', line 68

def param_value(name)
  # q[foo.bar][xxx]
  list = name.gsub(']','').split('[')
  # q foo.bar xxx
  base = params
  while true
    key = list.shift
    if base.kind_of?(Hash)
      base = base[key]
    else
      return nil
    end
    break if list.empty?
  end
  base
end