da-js 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -29,11 +29,16 @@
29
29
  <label for="message">Message</label>
30
30
  <textarea id="message"></textarea>
31
31
  </div>
32
-
32
+
33
+ <div class="field">
34
+ <label for="amount">Amount</label>
35
+ <input type="string" id="amount">
36
+ <span id="amount_info" data-visible-if="$('#amount').val() != ''">You’ve entered something!</span>
37
+ </div>
33
38
  </form>
34
39
 
35
40
  <script>
36
- $("form").conditionalVisibility();
41
+ $("form").conditionalVisibility(<%= params[:options] %>);
37
42
  </script>
38
43
 
39
44
 
@@ -0,0 +1,17 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>Test</title>
5
+ <%= "<script src='../vendor/jquery-#{@jquery_version}.js'></script>" %>
6
+ <script src="/assets/javascripts/da-js.js"></script>
7
+ <script>$.fx.off = true;</script>
8
+ </head>
9
+ <body>
10
+ <h1>Test: Numeric Value</h1>
11
+ <form>
12
+ <input id="textfield">
13
+ </form>
14
+ <span id="non_input_element_english"> 1,234.56 </span>
15
+ <span id="non_input_element_german"> 5.678,9 </span>
16
+ </body>
17
+ </html>
@@ -1,13 +1,17 @@
1
1
  # Hide/show elements dynamically according to their data-visible-if attribute.
2
2
  #
3
- # All elements with a data-visible-if attribute are checked on each change/focusout/click event:
3
+ # All elements with a data-visible-if attribute are checked on change, focusout and click events:
4
4
  # For each element, the content of its data-visible-if attribute is eval'd. If the eval'd code returns true, the element is shown – otherwise it is hidden.
5
5
  # (The data-visible-if attributes must contain valid JavaScript code.)
6
+ #
7
+ # Events `shown.conditionalVisibility` / `hidden.conditionalVisibility` are triggered everytime an element has been shown or hidden.
6
8
  #
7
9
  # Calling conditionalVisibility() also sets up the correct initial state (shown/hidden) of each element (again according to the result of the eval'd code in its dava-visible-if attribute).
8
10
  #
9
11
  # Use $("body").conditionalVisibility() to enable the functionality for the whole document, or use a more specific selector to enable it only for some elements.
10
12
  #
13
+ # Use $(…).conditionalVisibility({events: "keypress click"}) to customize the events wich trigger re-evaluation of visibilites (defaults to "change focusout click").
14
+ #
11
15
  # If you want to force an update of the visibilites, use $(…).trigger("updateVisibilites").
12
16
  #
13
17
  # Example:
@@ -20,21 +24,29 @@
20
24
  # $("#myform").conditionalVisibility()
21
25
  # </script>
22
26
 
23
- $.fn.conditionalVisibility = ->
27
+ $.fn.conditionalVisibility = (options = {}) ->
28
+
29
+ events = options.events || "change focusout click"
30
+ events += " updateVisibilities"
24
31
 
25
32
  updateVisibilities = (event, options) ->
26
33
  $(this).find("[data-visible-if]").each ->
27
- if eval($(this).data("visible-if"))
28
- if options?.skipAnimations
29
- $(this).show()
30
- else
31
- $(this).slideDown(100)
34
+ $this = $(this)
35
+ if eval($this.data("visible-if"))
36
+ if $this.is(":hidden")
37
+ if options?.skipAnimations
38
+ $this.show()
39
+ else
40
+ $this.slideDown(100)
41
+ $this.promise().done -> $this.trigger("shown.conditionalVisibility")
32
42
  else
33
- if options?.skipAnimations
34
- $(this).hide()
35
- else
36
- $(this).slideUp(100)
43
+ if $this.is(":visible")
44
+ if options?.skipAnimations
45
+ $this.hide()
46
+ else
47
+ $this.slideUp(100)
48
+ $this.promise().done -> $this.trigger("hidden.conditionalVisibility")
37
49
 
38
- this.on("change focusout click updateVisibilities", updateVisibilities).trigger("updateVisibilities", {skipAnimations: true})
50
+ this.on(events, updateVisibilities).trigger("updateVisibilities", {skipAnimations: true})
39
51
 
40
52
 
@@ -0,0 +1,24 @@
1
+ # Like val(), but return the value parsed as float (or 0, if the value is not numeric). Also works for non-input elements (using the element's text content as value).
2
+ #
3
+ # Thousands delimiters (",") are handled correctly.
4
+ # German thousands delimiters (".") and separators (",") are handled correctly if the lang attribute of the HTML element is set to "de".
5
+ #
6
+ # Options:
7
+ # ignoreCurrencySign: If true, values with leading currency signs (€, $) are considered numeric and parsed correctly.
8
+ # nullOnError: If true, null is returned (instead of 0) if the value is not numeric.
9
+
10
+ $.fn.numericValue = (options = {}) ->
11
+
12
+ delocalize = (val) ->
13
+ if $("html").attr("lang") == "de"
14
+ val.replace(".", "").replace(",", ".")
15
+ else
16
+ val.replace(",", "")
17
+
18
+ $this = $(this)
19
+ val = delocalize(if $this.is(":input") then $this.val() else $this.text())
20
+ val = val.replace(/^\s*[€$]\s*/, "") if options.ignoreCurrencySign
21
+ if $.isNumeric(val)
22
+ parseFloat(val)
23
+ else
24
+ if options.nullOnError then null else 0
data/lib/da-js/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  module Da
2
2
  module Js
3
- VERSION = "0.1.0"
3
+ VERSION = "0.2.0"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,169 +1,155 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: da-js
3
- version: !ruby/object:Gem::Version
4
- hash: 27
5
- prerelease:
6
- segments:
7
- - 0
8
- - 1
9
- - 0
10
- version: 0.1.0
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.2.0
11
5
  platform: ruby
12
- authors:
6
+ authors:
13
7
  - Stefan Daschek
14
8
  autorequire:
15
9
  bindir: bin
16
10
  cert_chain: []
17
-
18
- date: 2012-03-29 00:00:00 Z
19
- dependencies:
20
- - !ruby/object:Gem::Dependency
11
+ date: 2014-09-17 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
21
14
  name: railties
22
- prerelease: false
23
- requirement: &id001 !ruby/object:Gem::Requirement
24
- none: false
25
- requirements:
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
26
17
  - - ">="
27
- - !ruby/object:Gem::Version
28
- hash: 3
29
- segments:
30
- - 3
31
- - 1
32
- - 0
18
+ - !ruby/object:Gem::Version
33
19
  version: 3.1.0
20
+ - - "<"
21
+ - !ruby/object:Gem::Version
22
+ version: '5'
34
23
  type: :runtime
35
- version_requirements: *id001
36
- - !ruby/object:Gem::Dependency
37
- name: sprockets
38
24
  prerelease: false
39
- requirement: &id002 !ruby/object:Gem::Requirement
40
- none: false
41
- requirements:
42
- - - ~>
43
- - !ruby/object:Gem::Version
44
- hash: 3
45
- segments:
46
- - 2
47
- - 0
48
- version: "2.0"
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ version: 3.1.0
30
+ - - "<"
31
+ - !ruby/object:Gem::Version
32
+ version: '5'
33
+ - !ruby/object:Gem::Dependency
34
+ name: sprockets
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '2.0'
49
40
  type: :runtime
50
- version_requirements: *id002
51
- - !ruby/object:Gem::Dependency
52
- name: coffee-script
53
41
  prerelease: false
54
- requirement: &id003 !ruby/object:Gem::Requirement
55
- none: false
56
- requirements:
57
- - - ~>
58
- - !ruby/object:Gem::Version
59
- hash: 7
60
- segments:
61
- - 2
62
- - 2
63
- version: "2.2"
42
+ version_requirements: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - "~>"
45
+ - !ruby/object:Gem::Version
46
+ version: '2.0'
47
+ - !ruby/object:Gem::Dependency
48
+ name: coffee-script
49
+ requirement: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - "~>"
52
+ - !ruby/object:Gem::Version
53
+ version: '2.2'
64
54
  type: :runtime
65
- version_requirements: *id003
66
- - !ruby/object:Gem::Dependency
67
- name: cucumber
68
55
  prerelease: false
69
- requirement: &id004 !ruby/object:Gem::Requirement
70
- none: false
71
- requirements:
72
- - - ">="
73
- - !ruby/object:Gem::Version
74
- hash: 27
75
- segments:
76
- - 1
77
- - 1
78
- - 4
79
- version: 1.1.4
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - "~>"
59
+ - !ruby/object:Gem::Version
60
+ version: '2.2'
61
+ - !ruby/object:Gem::Dependency
62
+ name: cucumber
63
+ requirement: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - "~>"
66
+ - !ruby/object:Gem::Version
67
+ version: '1.3'
80
68
  type: :development
81
- version_requirements: *id004
82
- - !ruby/object:Gem::Dependency
83
- name: rspec-expectations
84
69
  prerelease: false
85
- requirement: &id005 !ruby/object:Gem::Requirement
86
- none: false
87
- requirements:
88
- - - ">="
89
- - !ruby/object:Gem::Version
90
- hash: 19
91
- segments:
92
- - 2
93
- - 7
94
- - 0
95
- version: 2.7.0
70
+ version_requirements: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - "~>"
73
+ - !ruby/object:Gem::Version
74
+ version: '1.3'
75
+ - !ruby/object:Gem::Dependency
76
+ name: rspec-expectations
77
+ requirement: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - "~>"
80
+ - !ruby/object:Gem::Version
81
+ version: '2.7'
96
82
  type: :development
97
- version_requirements: *id005
98
- - !ruby/object:Gem::Dependency
83
+ prerelease: false
84
+ version_requirements: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - "~>"
87
+ - !ruby/object:Gem::Version
88
+ version: '2.7'
89
+ - !ruby/object:Gem::Dependency
99
90
  name: sinatra
91
+ requirement: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - "~>"
94
+ - !ruby/object:Gem::Version
95
+ version: '1.4'
96
+ type: :development
100
97
  prerelease: false
101
- requirement: &id006 !ruby/object:Gem::Requirement
102
- none: false
103
- requirements:
98
+ version_requirements: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - "~>"
101
+ - !ruby/object:Gem::Version
102
+ version: '1.4'
103
+ - !ruby/object:Gem::Dependency
104
+ name: sinatra-contrib
105
+ requirement: !ruby/object:Gem::Requirement
106
+ requirements:
104
107
  - - ">="
105
- - !ruby/object:Gem::Version
106
- hash: 3
107
- segments:
108
- - 0
109
- version: "0"
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
110
  type: :development
111
- version_requirements: *id006
112
- - !ruby/object:Gem::Dependency
113
- name: sinatra-contrib
114
111
  prerelease: false
115
- requirement: &id007 !ruby/object:Gem::Requirement
116
- none: false
117
- requirements:
112
+ version_requirements: !ruby/object:Gem::Requirement
113
+ requirements:
118
114
  - - ">="
119
- - !ruby/object:Gem::Version
120
- hash: 3
121
- segments:
122
- - 0
123
- version: "0"
124
- type: :development
125
- version_requirements: *id007
126
- - !ruby/object:Gem::Dependency
115
+ - !ruby/object:Gem::Version
116
+ version: '0'
117
+ - !ruby/object:Gem::Dependency
127
118
  name: capybara-webkit
119
+ requirement: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - "~>"
122
+ - !ruby/object:Gem::Version
123
+ version: '1.3'
124
+ type: :development
128
125
  prerelease: false
129
- requirement: &id008 !ruby/object:Gem::Requirement
130
- none: false
131
- requirements:
126
+ version_requirements: !ruby/object:Gem::Requirement
127
+ requirements:
128
+ - - "~>"
129
+ - !ruby/object:Gem::Version
130
+ version: '1.3'
131
+ - !ruby/object:Gem::Dependency
132
+ name: launchy
133
+ requirement: !ruby/object:Gem::Requirement
134
+ requirements:
132
135
  - - ">="
133
- - !ruby/object:Gem::Version
134
- hash: 51
135
- segments:
136
- - 0
137
- - 11
138
- - 0
139
- version: 0.11.0
136
+ - !ruby/object:Gem::Version
137
+ version: '0'
140
138
  type: :development
141
- version_requirements: *id008
142
- - !ruby/object:Gem::Dependency
143
- name: launchy
144
139
  prerelease: false
145
- requirement: &id009 !ruby/object:Gem::Requirement
146
- none: false
147
- requirements:
140
+ version_requirements: !ruby/object:Gem::Requirement
141
+ requirements:
148
142
  - - ">="
149
- - !ruby/object:Gem::Version
150
- hash: 3
151
- segments:
152
- - 0
153
- version: "0"
154
- type: :development
155
- version_requirements: *id009
143
+ - !ruby/object:Gem::Version
144
+ version: '0'
156
145
  description: Some jQuery extensions we tend to use in almost all our projects.
157
- email:
146
+ email:
158
147
  - stefan@die-antwort.eu
159
148
  executables: []
160
-
161
149
  extensions: []
162
-
163
150
  extra_rdoc_files: []
164
-
165
- files:
166
- - .gitignore
151
+ files:
152
+ - ".gitignore"
167
153
  - CHANGELOG.md
168
154
  - Gemfile
169
155
  - README.md
@@ -171,62 +157,59 @@ files:
171
157
  - da-js.gemspec
172
158
  - features/change_tracker.feature
173
159
  - features/conditional_visibility.feature
160
+ - features/numeric_value.feature
174
161
  - features/step_definitions/change_tracker_steps.rb
175
162
  - features/step_definitions/conditional_visibility_steps.rb
163
+ - features/step_definitions/numeric_value_steps.rb
176
164
  - features/step_definitions/shared_steps.rb
177
165
  - features/support/env.rb
178
166
  - features/support/testapp/config.ru
179
167
  - features/support/testapp/testapp.rb
180
- - features/support/testapp/vendor/jquery-1.7.1.js
168
+ - features/support/testapp/vendor/jquery-1.11.1.js
181
169
  - features/support/testapp/views/conditional_visibility.erb
182
170
  - features/support/testapp/views/form_change_tracker.erb
171
+ - features/support/testapp/views/numeric_value.erb
183
172
  - lib/assets/javascripts/da-js.js
184
173
  - lib/assets/javascripts/da-js/conditional_visibility.js.coffee
185
174
  - lib/assets/javascripts/da-js/form_change_tracker.js
175
+ - lib/assets/javascripts/da-js/numeric_value.js.coffee
186
176
  - lib/da-js.rb
187
177
  - lib/da-js/version.rb
188
178
  homepage: https://github.com/die-antwort/da-js
189
179
  licenses: []
190
-
180
+ metadata: {}
191
181
  post_install_message:
192
182
  rdoc_options: []
193
-
194
- require_paths:
183
+ require_paths:
195
184
  - lib
196
- required_ruby_version: !ruby/object:Gem::Requirement
197
- none: false
198
- requirements:
185
+ required_ruby_version: !ruby/object:Gem::Requirement
186
+ requirements:
199
187
  - - ">="
200
- - !ruby/object:Gem::Version
201
- hash: 3
202
- segments:
203
- - 0
204
- version: "0"
205
- required_rubygems_version: !ruby/object:Gem::Requirement
206
- none: false
207
- requirements:
188
+ - !ruby/object:Gem::Version
189
+ version: '0'
190
+ required_rubygems_version: !ruby/object:Gem::Requirement
191
+ requirements:
208
192
  - - ">="
209
- - !ruby/object:Gem::Version
210
- hash: 3
211
- segments:
212
- - 0
213
- version: "0"
193
+ - !ruby/object:Gem::Version
194
+ version: '0'
214
195
  requirements: []
215
-
216
196
  rubyforge_project: da-js
217
- rubygems_version: 1.8.11
197
+ rubygems_version: 2.2.2
218
198
  signing_key:
219
- specification_version: 3
199
+ specification_version: 4
220
200
  summary: Mixed jQuery extensions
221
- test_files:
201
+ test_files:
222
202
  - features/change_tracker.feature
223
203
  - features/conditional_visibility.feature
204
+ - features/numeric_value.feature
224
205
  - features/step_definitions/change_tracker_steps.rb
225
206
  - features/step_definitions/conditional_visibility_steps.rb
207
+ - features/step_definitions/numeric_value_steps.rb
226
208
  - features/step_definitions/shared_steps.rb
227
209
  - features/support/env.rb
228
210
  - features/support/testapp/config.ru
229
211
  - features/support/testapp/testapp.rb
230
- - features/support/testapp/vendor/jquery-1.7.1.js
212
+ - features/support/testapp/vendor/jquery-1.11.1.js
231
213
  - features/support/testapp/views/conditional_visibility.erb
232
214
  - features/support/testapp/views/form_change_tracker.erb
215
+ - features/support/testapp/views/numeric_value.erb