Module: ActionView::Helpers::SliderHelper

Defined in:
lib/helpers/slider_helper.rb

Instance Method Summary collapse

Instance Method Details

#slider_element(element_id, options = {}) ⇒ Object

Creates a slider control out of an element.



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
66
67
# File 'lib/helpers/slider_helper.rb', line 30

def slider_element(element_id, options={})
  prepare = "Element.cleanWhitespace('#{element_id}');"
  
  [:change, :slide].each do |k|
    if options.include?(k)
      name = 'on' + k.to_s.capitalize
      options[name] = "function(value){#{options[k]}}"
      options.delete k
     end
  end
  
  [:spans, :axis].each do |k|
    options[k] = array_or_string_for_javascript(options[k]) if options[k]
  end
  
  options[:sliderValue] = array_or_numeric_for_javascript(options[:sliderValue]) if options[:sliderValue]
  
  options[:range] = "$R(#{options[:range].min},#{options[:range].max})" if options[:range]
  options[:values] = "$R(#{options[:values].min},#{options[:values].max})" if options[:values]
  
  slider = ''
  
  if options[:hidden_fields] == true
    slider = if options[:handles].kind_of?(Array)
      hidden_fields = options[:handles].collect { |h| hidden_field_tag(h.to_s + "_value") }
      hidden_fields.join("\n")
    elsif !options[:handles].nil?
      hidden_field_tag(options[:handles].to_s + "_value")
    end
    
    options.delete(:hidden_fields)
  end
  
  handle = array_or_string_for_javascript(options[:handles]) || "$('#{element_id}').firstChild"
  options.delete :handles
          
  slider += javascript_tag("#{prepare} #{element_id} = new Control.Slider(#{handle},'#{element_id}', #{options_for_javascript(options)})")
end

#slider_field(object, method, options = {}) ⇒ Object

Creates a simple slider control and associates it with a hidden text field



70
71
72
73
74
75
76
77
78
79
80
81
82
# File 'lib/helpers/slider_helper.rb', line 70

def slider_field(object, method, options={})
  options.merge!({ 
    :change => "$('#{object}_#{method}').value = value",
    :hidden_fields => false
  })
  if slider_value = instance_variable_get("@#{object}").send(method)
    options.merge!({ :sliderValue  => slider_value })
  end
  hidden_field(object, method) <<        
  ('div',('div', ''), 
    :class => 'slider', :id => "#{object}_#{method}_slider") << 
  slider_element("#{object}_#{method}_slider", options).html_safe
end

#slider_stylesheetObject



84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
# File 'lib/helpers/slider_helper.rb', line 84

def slider_stylesheet
  ("style", <<-EOT
    div.slider {
      width: 150px;
      height: 5px;
      margin-top:5px;
      margin-bottom:5px;
      background: #ddd;
      position: relative;
    }
    div.slider div {
      position:absolute;
      width:8px;
      height:15px;
      margin-top:-5px;
      background: #999;
      border:1px outset white;
    }
  EOT
  )
end