slide-selector 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a86df4775a057eaa276d38f526ee883b17ab837bc79b6473c24168245d746887
4
- data.tar.gz: ee471026758480ffa340b78eb6b7b18a148bba3fa9b8d3e4db054184993da8b0
3
+ metadata.gz: 6ca79a64503e171a4aa6ee21cd13e844a23ca47e3cd3fe4b9935f2333a731795
4
+ data.tar.gz: e636988b7b3e50fcf9b49d38f562f51b8e3e1468d88a8472c8edcf883ef65ea3
5
5
  SHA512:
6
- metadata.gz: 47e3d51df0d90ec3bd88ec9e5f2ca2fbce979c1270418c2e6748e49745f01e6eef5bec37d4db07c5747797bffe65af2f783e9281dc13f117eacb01c4d04ec28e
7
- data.tar.gz: 26b53206704e434441af0549896fe407c89e0b1d2389b807f9173beb2a6afd3e8c239e94f6ebf97d2f3ad03edef6916a7c1e2b39329ca5c57eac9224a6446c66
6
+ metadata.gz: 98551654ae619075b61d9377b942bb10a9095093d1b8683fc7b80352a775b67303cf0c99224fea0b9ef7bf2700040b0ea7a43104c0a869303769077dce205b7c
7
+ data.tar.gz: 270dc5c230601ee8edfffa5ebad23f850243a409a0eb05f2be65f4f0111a257e8890b9e774346561b10bdce35dda3d15033f6973856f9d6450c0dcc170520d84
data/README.md CHANGED
@@ -31,14 +31,26 @@ Some examples of using this tag
31
31
  With form:
32
32
  ```
33
33
  <%= form_for root_path do |f| %>
34
- <%= f.slide_selector [:min_rank, :max_rank], [0, 100], drop_down_options, type: 'amount', selector: false, slider_step: 5 %>
34
+ <%= f.slide_selector [:min_rank, :max_rank], [0, 100], drop_down_options_dollar, type: 'amount', selector: false, slider_step: 5 %>
35
35
  <br><br>
36
- <%= f.slide_selector [:min_rank2, :max_rank2], [0, 10000], drop_down_options2 %>
36
+ <%= f.slide_selector [:min_rank2, :max_rank2], [0, 10000], drop_down_options %>
37
37
  <% end %>
38
38
  ```
39
39
  Without form:
40
40
  ```
41
- <%= slide_selector_tag [:min_rank3, :max_rank3], [0, 10000], drop_down_options2 %>
41
+ <%= slide_selector_tag [:min_rank3, :max_rank3], [0, 10000], drop_down_options %>
42
+ ```
43
+
44
+ In application_helper.rb
45
+ ```
46
+ module ApplicationHelper
47
+ def drop_down_options
48
+ {"$0.01" => 1, "$0.50" => 50, "$1" => 100, "$2" => 200, "$3" => 300, "$4" => 400, "$5" => 500, "$10" => 1000, "$15" => 1500, "$25" => 2500, "$50" => 5000, "$75" => 7500, "$100" => 10000}
49
+ end
50
+ def drop_down_options2
51
+ {"1" => 1, "50" => 50, "100" => 100, "200" => 200, "300" => 300, "400" => 400, "500" => 500, "1000" => 1000, "1500" => 1500, "2500" => 2500, "5000" => 5000, "7500" => 7500, "10000" => 10000}
52
+ end
53
+ end
42
54
  ```
43
55
 
44
56
  ## Development
@@ -12,27 +12,38 @@ module Slide
12
12
  def slide_selector(selectors, ranges, select_options, options = {})
13
13
  options[:suggestions] = false if options[:suggestions].nil?
14
14
  options[:slider_step] = 1 if options[:slider_step].nil?
15
- options[:value] = [select_options.keys.first, select_options.keys.last] if options[:value].nil?
16
- options[:type] = options[:type] == 'amount' ? '$' : ''
17
15
  options[:selector] = true if options[:selector].nil?
16
+ options[:value] = [select_options.keys.first, select_options.keys.last] if options[:value].nil? && options[:selector]
17
+ options[:type] = options[:type] == 'amount' ? '$' : ''
18
18
  selectors = selectors.map &:to_s
19
+ get_select_field = lambda { |selector, select_type|
20
+ result = self.hidden_field(selector)
21
+ if result.include?('value')
22
+ result = Hash.from_xml(result)['input']
23
+ selected = {result['value'] => result['value']}
24
+ return self.select(selector, options_for_select(select_options.merge(selected), selected.to_a.last))
25
+ else
26
+ selected = select_type == 'min' ? select_options.first : select_options.to_a.last
27
+ return self.select(selector, options_for_select(select_options, selected))
28
+ end
29
+ }
19
30
  (if options[:selector]
20
- select_tag(selectors[0], options_for_select(select_options), value: options[:value][0])
31
+ get_select_field.call(selectors[0], 'min')
21
32
  else
22
- text_field_tag(selectors[0], nil, value: options[:value][0])
33
+ self.text_field(selectors[0])
23
34
  end)+
24
35
  text_field_tag(selectors[0]+'_'+selectors[1], nil, data: {'slider-step': options[:slider_step]})+
25
36
  (if options[:selector]
26
- select_tag(selectors[1], options_for_select(select_options), value: options[:value][1])
37
+ get_select_field.call(selectors[1], 'max')
27
38
  else
28
- text_field_tag(selectors[1], nil, value: options[:value][1])
39
+ self.text_field(selectors[1])
29
40
  end)+
30
41
  generate_script(selectors, ranges, options).html_safe
31
42
  end
32
43
  def generate_script(selectors, ranges, options)
33
44
  return <<-SCRIPT
34
45
  <script type='text/javascript'>
35
- setSlider(#{selectors.map(&:to_s)}, #{ranges.map(&:to_s)}, #{options.to_json}, '#{selectors[0]+'_'+selectors[1]}')
46
+ setSlider(#{selectors.map{ |field_name| object_name.to_s+'_'+field_name.to_s}}, #{ranges.map(&:to_s)}, #{options.to_json}, '#{selectors[0]+'_'+selectors[1]}')
36
47
  </script>
37
48
  SCRIPT
38
49
  end
@@ -43,4 +54,4 @@ module Slide
43
54
  ::ActionView::Base.send :include, Helpers::HelperMethods
44
55
  end
45
56
  end
46
- end
57
+ end
@@ -1,5 +1,5 @@
1
1
  module Slide
2
2
  module Selector
3
- VERSION = "0.1.1"
3
+ VERSION = "0.1.2"
4
4
  end
5
5
  end
@@ -9,10 +9,12 @@ Gem::Specification.new do |spec|
9
9
  spec.email = ["tqr093@gmail.com"]
10
10
 
11
11
  spec.summary = %q{custom input tag with range-slider & text-field type selectors}
12
- spec.description = %q{https://github.com/Touqeer-tqr/custom-form}
12
+ spec.description = %q{https://github.com/Touqeer-tqr/custom-form contains the sample app}
13
13
  spec.homepage = "https://github.com/Touqeer-tqr/slide-selector"
14
14
  spec.license = "MIT"
15
15
 
16
+ spec.required_ruby_version = '>= 2.0.0'
17
+
16
18
  # Prevent pushing this gem to RubyGems.org. To allow pushes either set the 'allowed_push_host'
17
19
  # to allow pushing to a single host or delete this section to allow pushing to any host.
18
20
  # if spec.respond_to?(:metadata)
@@ -2,6 +2,24 @@
2
2
  formatDigits = function(number, type) {
3
3
  return type + number.toFixed(2).replace(/\d(?=(\d{3})+\.)/g, '$&,');
4
4
  };
5
+ focusListner = function(class_name, type, range){
6
+ $(class_name).focusin(function() {
7
+ var price_new;
8
+ price_new = $(class_name).val().replace(/[$,]/g, '');
9
+ $(class_name).val(price_new);
10
+ }).focusout(function() {
11
+ if ($(class_name).val() != 'Any'){
12
+ var price_new;
13
+ price_new = $(class_name).val().replace(/[$,]/g, '');
14
+ if (price_new == ""){
15
+ $(class_name).val(formatDigits(parseFloat(range), type));
16
+ $(class_name).trigger("input");
17
+ }else{
18
+ $(class_name).val(formatDigits(parseFloat(price_new), type));
19
+ }
20
+ }
21
+ });
22
+ }
5
23
  setOnChangeListner = function(fields, ranges, slider){
6
24
  $('#'+fields[0]).on('select.editable-select', function(e){
7
25
  max = $('#'+fields[1]);
@@ -9,13 +27,13 @@ setOnChangeListner = function(fields, ranges, slider){
9
27
  max = ranges[1];
10
28
  }
11
29
  else{
12
- max = parseFloat(max.val().replace(/\$/g,''));
30
+ max = parseFloat(max.val().replace(/[$,]/g, ''));
13
31
  }
14
32
  min = $('#'+fields[0]);
15
33
  if(min.val() == 'Any'){
16
34
  min = ranges[0]
17
35
  }else{
18
- min = parseFloat(this.value.replace(/\$/g,''))
36
+ min = parseFloat(this.value.replace(/[$,]/g, ''))
19
37
  }
20
38
  slider.setValue([min, max], false, false);
21
39
  });
@@ -24,13 +42,13 @@ setOnChangeListner = function(fields, ranges, slider){
24
42
  if(this.value == 'Any'){
25
43
  max = ranges[1]
26
44
  }else{
27
- max = parseFloat(this.value.replace(/\$/g,''))
45
+ max = parseFloat(this.value.replace(/[$,]/g, ''))
28
46
  }
29
47
  min = $('#', fields[0]);
30
48
  if(min.val() == 'Any'){
31
49
  min = ranges[0]
32
50
  }else{
33
- min = parseFloat($('#'+fields[0]).val().replace(/\$/g,''))
51
+ min = parseFloat($('#'+fields[0]).val().replace(/[$,]/g, ''))
34
52
  }
35
53
  slider.setValue([min, max], false, false);
36
54
  });
@@ -41,12 +59,12 @@ setOnChangeListner = function(fields, ranges, slider){
41
59
  max = ranges[1];
42
60
  }
43
61
  else{
44
- max = parseFloat(max.val().replace(/\$/g,''));
62
+ max = parseFloat(max.val().replace(/[$,]/g, ''));
45
63
  }
46
64
  if(this.value == 'Any' || this.value == ''){
47
65
  min = ranges[0];
48
66
  }else{
49
- min = parseFloat(this.value.replace(/\$/g,''));
67
+ min = parseFloat(this.value.replace(/[$,]/g, ''));
50
68
  }
51
69
  slider.setValue([min, max], false, false);
52
70
  });
@@ -55,13 +73,13 @@ setOnChangeListner = function(fields, ranges, slider){
55
73
  if(this.value == 'Any' || this.value == ''){
56
74
  max = ranges[1]
57
75
  }else{
58
- max = parseFloat(this.value.replace(/\$/g,''))
76
+ max = parseFloat(this.value.replace(/[$,]/g, ''))
59
77
  }
60
78
  min = $('#'+fields[0]);
61
79
  if(min.val() == 'Any' || min.val() == ''){
62
80
  min = ranges[0];
63
81
  }else{
64
- min = parseFloat(min.val().replace(/\$/g,''));
82
+ min = parseFloat(min.val().replace(/[$,]/g, ''));
65
83
  }
66
84
  slider.setValue([min, max], false, false);
67
85
  });
@@ -71,47 +89,37 @@ setSlider = function(selectors, ranges, options, sliderField){
71
89
  $('#'+selectors[0]).editableSelect({filter: options['suggestions']});
72
90
  $('#'+selectors[1]).editableSelect({filter: options['suggestions']});
73
91
  }
74
- if ($('#'+selectors[1]).val() == options['value'][1]){
75
- slideValue = ranges[1];
76
- }
77
- else{
78
- slideValue = $('#'+selectors[1]).val();
92
+ slideMinValue = $('#'+selectors[0]);
93
+ if(slideMinValue.val() == ""){
94
+ slideMinValue.val(ranges[0]);
79
95
  }
80
- if ($('#'+selectors[0]).val() == options['value'][0]){
81
- slideMinValue = ranges[0];
82
- }
83
- else{
84
- slideMinValue = $('#'+selectors[0]).val();
96
+ slideValue = $('#'+selectors[1]);
97
+ if(slideValue.val() == ""){
98
+ slideValue.val(ranges[1]);
85
99
  }
100
+ sliderRange = [parseFloat(slideMinValue.val().replace(/[$,]/g, '')), parseFloat(slideValue.val().replace(/[$,]/g, ''))];
101
+ console.log(sliderRange);
86
102
  mySlider = new Slider('#'+sliderField, {
87
103
  id: 'slider12c',
88
104
  min: parseFloat(ranges[0]),
89
105
  max: parseFloat(ranges[1]),
90
106
  range: true,
91
- value: [parseFloat(slideMinValue.replace('$', '')), parseFloat(slideValue.replace('$', ''))],
107
+ value: sliderRange,
92
108
  tooltip: 'hide'
93
109
  }).on('slide', function(ev) {
94
110
  $('#'+selectors[0]).text(formatDigits(ev[0], options['type']));
95
111
  $('#'+selectors[0]).val(formatDigits(ev[0], options['type']));
96
112
  $('#'+selectors[1]).text(formatDigits(ev[1], options['type']));
97
113
  $('#'+selectors[1]).val(formatDigits(ev[1], options['type']));
98
- if( ev[0] <= ranges[0] ){
99
- $('#'+selectors[0]).val(options['value'][0]);
100
- }
101
- if( ev[1] >= ranges[1] ){
102
- $('#'+selectors[1]).val(options['value'][1]);
103
- }
104
114
  }).on('slideStop', function(ev) {
105
115
  $('#'+selectors[0]).text(formatDigits(ev[0], options['type']));
106
116
  $('#'+selectors[0]).val(formatDigits(ev[0], options['type']));
107
117
  $('#'+selectors[1]).text(formatDigits(ev[1], options['type']));
108
118
  $('#'+selectors[1]).val(formatDigits(ev[1], options['type']));
109
- if( ev[0] <= ranges[0]){
110
- $('#'+selectors[0]).val(options['value'][0]);
111
- }
112
- if( ev[1] >= ranges[1]){
113
- $('#'+selectors[1]).val(options['value'][1]);
114
- }
115
119
  });
120
+ focusListner('#'+selectors[0], options['type'], ranges[0]);
121
+ focusListner('#'+selectors[1], options['type'], ranges[1]);
122
+ $('#'+selectors[0]).blur();
123
+ $('#'+selectors[1]).blur();
116
124
  setOnChangeListner(selectors, ranges, mySlider);
117
125
  }
@@ -1,4 +1,4 @@
1
1
  @import "bootstrap-slider.min.css";
2
2
  @import "jquery-editable-select.min.css";
3
3
  .slider.slider-horizontal{ margin: 0 20px; }
4
- .slider-selection{background: #66abff !important;}
4
+ .slider-selection{background: #66ffce !important;}
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: slide-selector
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Touqeer-tqr
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-04-10 00:00:00.000000000 Z
11
+ date: 2019-04-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -38,7 +38,7 @@ dependencies:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '10.0'
41
- description: https://github.com/Touqeer-tqr/custom-form
41
+ description: https://github.com/Touqeer-tqr/custom-form contains the sample app
42
42
  email:
43
43
  - tqr093@gmail.com
44
44
  executables: []
@@ -77,7 +77,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
77
77
  requirements:
78
78
  - - ">="
79
79
  - !ruby/object:Gem::Version
80
- version: '0'
80
+ version: 2.0.0
81
81
  required_rubygems_version: !ruby/object:Gem::Requirement
82
82
  requirements:
83
83
  - - ">="