Module: ActiveForm::Mixins::JavascriptMethods

Defined in:
lib/active_form/mixins/javascript_methods.rb

Constant Summary collapse

EVENTS =
[:onsubmit, :onreset, :onclick, :ondblclick, :onmousedown, :onmouseup, :onmouseover, 
:onmousemove, :onmouseout, :onkeypress, :onkeydown, :onkeyup, :onblur, :onfocus, :onchange]

Instance Method Summary collapse

Instance Method Details

#default_javascriptObject



14
15
# File 'lib/active_form/mixins/javascript_methods.rb', line 14

def default_javascript
end

#element_javascript(tag = false) ⇒ Object Also known as: js, script



53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
# File 'lib/active_form/mixins/javascript_methods.rb', line 53

def element_javascript(tag = false)
  return '' unless javascript?
  elem_var = javascript_var
  js = (internal_javascript.empty? ? '' : "  #{internal_javascript};\n")    
  unless (jsvalidation = javascript_validation_code).blank?
    js << "  #{jsvalidation}\n"      
  end
  unless (jsvalidationdef = validation_javascript_definitions).blank?
    js << "#{jsvalidationdef.gsub(/^/, '  ')}\n"      
  end
  js << (javascript.blank? ? '' : "  #{javascript};\n")
  js << javascript_events.stringify_keys.keys.sort.inject('') do |ary, key| 
    ary << "  Event.observe(#{elem_var},'#{key.from(2)}',function(ev){ #{javascript_events[key]}; });\n"
  end unless javascript_events.empty?
  js << elements.inject('') do |ejs, elem| 
    if elem.javascript? && !(s = elem.element_javascript).match(/^(\s+)?$/)
      ejs << "#{s.gsub(/^/, '  ')}\n"
    end
    ejs
  end if container? 
  js << "  new Validation(#{elem_var}, #{options_for_javascript(client_side_options)});\n" if client_side? && container? && !contained? 
  return '' if js.match(/^(\s+)?$/)
  str = "var #{elem_var}=$('#{self.identifier}');if(#{elem_var}){\n#{js}}"    
  tag ? javascript_tag(str) : str
end

#inline_javascriptObject



81
82
83
# File 'lib/active_form/mixins/javascript_methods.rb', line 81

def inline_javascript
  self.javascript_events.inject([]) { |ary, (event, code)| ary << send("inline_#{event}") unless code.blank?; ary }.compact.sort.join(' ')
end

#internal_javascript(tag = false) ⇒ Object



17
18
19
20
21
# File 'lib/active_form/mixins/javascript_methods.rb', line 17

def internal_javascript(tag = false)
  @internal_js ||= JavascriptAttribute.new
  return @internal_js unless tag
  @internal_js.empty? ? nil : javascript_tag(@internal_js.to_s) 
end

#internal_javascript=(string_or_array) ⇒ Object



23
24
25
# File 'lib/active_form/mixins/javascript_methods.rb', line 23

def internal_javascript=(string_or_array)
  internal_javascript.replace(string_or_array)
end

#javascript(tag = false) ⇒ Object



31
32
33
34
35
# File 'lib/active_form/mixins/javascript_methods.rb', line 31

def javascript(tag = false)
  @javascript_attribute ||= JavascriptAttribute.new.push(default_javascript).compact
  return @javascript_attribute unless tag
  @javascript_attribute.empty? ? nil : javascript_tag(@javascript_attribute.to_s) 
end

#javascript=(string_or_array) ⇒ Object



37
38
39
# File 'lib/active_form/mixins/javascript_methods.rb', line 37

def javascript=(string_or_array)
  javascript.replace(string_or_array)
end

#javascript?Boolean

Returns:

  • (Boolean)


41
42
43
# File 'lib/active_form/mixins/javascript_methods.rb', line 41

def javascript?
  !(javascript.blank? && javascript_events.empty? && internal_javascript.empty? && javascript_validation_code.blank?) || container?
end

#javascript_eventsObject



27
28
29
# File 'lib/active_form/mixins/javascript_methods.rb', line 27

def javascript_events
  @javascript_events ||= HashWithIndifferentAccess.new
end

#javascript_varObject



45
46
47
# File 'lib/active_form/mixins/javascript_methods.rb', line 45

def javascript_var
  "f#{self.element_type}_#{self.identifier}"
end

#script_tagObject



49
50
51
# File 'lib/active_form/mixins/javascript_methods.rb', line 49

def script_tag
  element_javascript(true)
end