pwnstyles_rails 0.1.5 → 0.1.6

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.
data/Gemfile CHANGED
@@ -1,14 +1,12 @@
1
- source 'http://rubygems.org'
2
- # Add dependencies required to use your gem here.
3
- # Example:
4
- gem 'rails', '>= 3.1.1'
5
- gem 'sass-rails', '>= 3.1.4'
1
+ source :rubygems
2
+
3
+ gem 'rails', '>= 3.2.0'
4
+ gem 'sass-rails', '>= 3.2.4'
6
5
 
7
- # Add dependencies to develop your gem here.
8
- # Include everything needed to run rake, tests, features, etc.
9
6
  group :development do
10
7
  gem 'shoulda', '>= 0'
11
8
  gem 'bundler', '~> 1.0.0'
12
- gem 'jeweler', '~> 1.6.0'
13
- gem 'rcov', '>= 0'
9
+ gem 'jeweler', '>= 1.8.0'
10
+ gem 'rcov', '>= 0', :platform => :mri_18
11
+ gem 'simplecov', '>= 0', :platform => :mri_19
14
12
  end
data/Gemfile.lock CHANGED
@@ -1,89 +1,90 @@
1
1
  GEM
2
2
  remote: http://rubygems.org/
3
3
  specs:
4
- actionmailer (3.1.1)
5
- actionpack (= 3.1.1)
6
- mail (~> 2.3.0)
7
- actionpack (3.1.1)
8
- activemodel (= 3.1.1)
9
- activesupport (= 3.1.1)
4
+ actionmailer (3.2.1)
5
+ actionpack (= 3.2.1)
6
+ mail (~> 2.4.0)
7
+ actionpack (3.2.1)
8
+ activemodel (= 3.2.1)
9
+ activesupport (= 3.2.1)
10
10
  builder (~> 3.0.0)
11
11
  erubis (~> 2.7.0)
12
- i18n (~> 0.6)
13
- rack (~> 1.3.2)
12
+ journey (~> 1.0.1)
13
+ rack (~> 1.4.0)
14
14
  rack-cache (~> 1.1)
15
- rack-mount (~> 0.8.2)
16
15
  rack-test (~> 0.6.1)
17
- sprockets (~> 2.0.2)
18
- activemodel (3.1.1)
19
- activesupport (= 3.1.1)
16
+ sprockets (~> 2.1.2)
17
+ activemodel (3.2.1)
18
+ activesupport (= 3.2.1)
20
19
  builder (~> 3.0.0)
21
- i18n (~> 0.6)
22
- activerecord (3.1.1)
23
- activemodel (= 3.1.1)
24
- activesupport (= 3.1.1)
25
- arel (~> 2.2.1)
20
+ activerecord (3.2.1)
21
+ activemodel (= 3.2.1)
22
+ activesupport (= 3.2.1)
23
+ arel (~> 3.0.0)
26
24
  tzinfo (~> 0.3.29)
27
- activeresource (3.1.1)
28
- activemodel (= 3.1.1)
29
- activesupport (= 3.1.1)
30
- activesupport (3.1.1)
25
+ activeresource (3.2.1)
26
+ activemodel (= 3.2.1)
27
+ activesupport (= 3.2.1)
28
+ activesupport (3.2.1)
29
+ i18n (~> 0.6)
31
30
  multi_json (~> 1.0)
32
- arel (2.2.1)
31
+ arel (3.0.0)
33
32
  builder (3.0.0)
34
33
  erubis (2.7.0)
35
34
  git (1.2.5)
36
35
  hike (1.2.1)
37
36
  i18n (0.6.0)
38
- jeweler (1.6.4)
37
+ jeweler (1.8.3)
39
38
  bundler (~> 1.0)
40
39
  git (>= 1.2.5)
41
40
  rake
42
- json (1.6.1)
43
- mail (2.3.0)
41
+ rdoc
42
+ journey (1.0.1)
43
+ json (1.6.5)
44
+ mail (2.4.1)
44
45
  i18n (>= 0.4.0)
45
46
  mime-types (~> 1.16)
46
47
  treetop (~> 1.4.8)
47
48
  mime-types (1.17.2)
48
- multi_json (1.0.3)
49
+ multi_json (1.0.4)
49
50
  polyglot (0.3.3)
50
- rack (1.3.5)
51
+ rack (1.4.1)
51
52
  rack-cache (1.1)
52
53
  rack (>= 0.4)
53
- rack-mount (0.8.3)
54
- rack (>= 1.0.0)
55
54
  rack-ssl (1.3.2)
56
55
  rack
57
56
  rack-test (0.6.1)
58
57
  rack (>= 1.0)
59
- rails (3.1.1)
60
- actionmailer (= 3.1.1)
61
- actionpack (= 3.1.1)
62
- activerecord (= 3.1.1)
63
- activeresource (= 3.1.1)
64
- activesupport (= 3.1.1)
58
+ rails (3.2.1)
59
+ actionmailer (= 3.2.1)
60
+ actionpack (= 3.2.1)
61
+ activerecord (= 3.2.1)
62
+ activeresource (= 3.2.1)
63
+ activesupport (= 3.2.1)
65
64
  bundler (~> 1.0)
66
- railties (= 3.1.1)
67
- railties (3.1.1)
68
- actionpack (= 3.1.1)
69
- activesupport (= 3.1.1)
65
+ railties (= 3.2.1)
66
+ railties (3.2.1)
67
+ actionpack (= 3.2.1)
68
+ activesupport (= 3.2.1)
70
69
  rack-ssl (~> 1.3.2)
71
70
  rake (>= 0.8.7)
72
71
  rdoc (~> 3.4)
73
72
  thor (~> 0.14.6)
74
73
  rake (0.9.2.2)
75
- rcov (0.9.11)
76
- rdoc (3.11)
74
+ rcov (1.0.0)
75
+ rdoc (3.12)
77
76
  json (~> 1.4)
78
- sass (3.1.10)
79
- sass-rails (3.1.4)
80
- actionpack (~> 3.1.0)
81
- railties (~> 3.1.0)
82
- sass (>= 3.1.4)
83
- sprockets (~> 2.0.0)
84
- tilt (~> 1.3.2)
77
+ sass (3.1.13)
78
+ sass-rails (3.2.4)
79
+ railties (~> 3.2.0)
80
+ sass (>= 3.1.10)
81
+ tilt (~> 1.3)
85
82
  shoulda (2.11.3)
86
- sprockets (2.0.3)
83
+ simplecov (0.5.4)
84
+ multi_json (~> 1.0.3)
85
+ simplecov-html (~> 0.5.3)
86
+ simplecov-html (0.5.3)
87
+ sprockets (2.1.2)
87
88
  hike (~> 1.2)
88
89
  rack (~> 1.0)
89
90
  tilt (~> 1.1, != 1.3.0)
@@ -92,15 +93,16 @@ GEM
92
93
  treetop (1.4.10)
93
94
  polyglot
94
95
  polyglot (>= 0.3.1)
95
- tzinfo (0.3.30)
96
+ tzinfo (0.3.31)
96
97
 
97
98
  PLATFORMS
98
99
  ruby
99
100
 
100
101
  DEPENDENCIES
101
102
  bundler (~> 1.0.0)
102
- jeweler (~> 1.6.0)
103
- rails (>= 3.1.1)
103
+ jeweler (>= 1.8.0)
104
+ rails (>= 3.2.0)
104
105
  rcov
105
- sass-rails (>= 3.1.4)
106
+ sass-rails (>= 3.2.4)
106
107
  shoulda
108
+ simplecov
data/Rakefile CHANGED
@@ -30,13 +30,6 @@ Rake::TestTask.new(:test) do |test|
30
30
  test.verbose = true
31
31
  end
32
32
 
33
- require 'rcov/rcovtask'
34
- Rcov::RcovTask.new do |test|
35
- test.libs << 'test'
36
- test.pattern = 'test/**/test_*.rb'
37
- test.verbose = true
38
- end
39
-
40
33
  task :default => :test
41
34
 
42
35
  require 'rdoc/task'
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.5
1
+ 0.1.6
@@ -0,0 +1,178 @@
1
+ # PwnFx: AJAX sprinkles via unobtrusive JavaScript.
2
+ # @author Victor Costan
3
+
4
+ # The author sorely misses Rails' AJAX helpers such as observe_field. This
5
+ # library provides a replacement that adheres to the new philosophy of
6
+ # unobtrusive JavaScript triggered by HTML5 data- attributes.
7
+
8
+ # Fires off an AJAX request (almost) every time when an element changes.
9
+ #
10
+ # The text / HTML returned by the request is placed in another element.
11
+ #
12
+ # Element attributes:
13
+ # data-pwnfx-refresh-url: URL to perform an AJAX request to
14
+ # data-pwnfx-refresh-method: the HTTP method of AJAX request (default: POST)
15
+ # data-pwnfx-refresh-ms: interval between a change on the source element and
16
+ # AJAX refresh requests (default: 200ms)
17
+ # data-pwnfx-target: the element populated with the AJAX response
18
+ class PwnFxRefresh
19
+ constructor: (element, xhrUrl) ->
20
+ targetSelector = '#' + element.getAttribute('data-pwnfx-refresh-target')
21
+ refreshInterval = parseInt(
22
+ element.getAttribute('data-pwnfx-refresh-ms') || '200');
23
+ xhrMethod = element.getAttribute('data-pwnfx-refresh-method') || 'POST'
24
+ xhrForm = @parentForm element
25
+
26
+ onXhrSuccess = ->
27
+ data = @responseText
28
+ for targetElement in document.querySelectorAll(targetSelector)
29
+ targetElement.innerHTML = data
30
+ for scriptElement in targetElement.querySelectorAll('script')
31
+ parent = scriptElement.parentElement
32
+ nextSibling = scriptElement.nextSibling
33
+ parent.removeChild scriptElement
34
+ parent.insertBefore scriptElement.cloneNode(true), nextSibling
35
+
36
+
37
+ refreshPending = false
38
+ refreshOldValue = null
39
+ ajaxRefresh = ->
40
+ refreshPending = false
41
+ xhr = new XMLHttpRequest
42
+ xhr.onload = onXhrSuccess
43
+ xhr.open xhrMethod, xhrUrl
44
+ xhr.send new FormData(xhrForm)
45
+
46
+ onChange = ->
47
+ value = element.value
48
+ return true if value == refreshOldValue
49
+ refreshOldValue = value
50
+
51
+ return true if refreshPending
52
+ refreshPending = true
53
+ window.setTimeout ajaxRefresh, refreshInterval
54
+ true
55
+
56
+ element.addEventListener 'change', onChange
57
+ element.addEventListener 'keydown', onChange
58
+ element.addEventListener 'keyup', onChange
59
+
60
+
61
+ # The closest form element wrapping a node.
62
+ parentForm: (element) ->
63
+ while element
64
+ return element if element.nodeName == 'FORM'
65
+ element = element.parentNode
66
+ null
67
+
68
+ # Shows elements conditionally, depending on whether some inputs' values match.
69
+ #
70
+ # Element attributes:
71
+ # data-pwnfx-confirm: all elements with the same value for this attribute
72
+ # belong to the same confirmation group; their values have to match to
73
+ # trigger the "win" condition
74
+ # data-pwnfx-confirm-win: CSS selector identifying the elements to be shown
75
+ # when the "win" condition is triggered, and hidden otherwise
76
+ # data-pwnfx-confirm-fail: CSS selector identifying the elements to be hidden
77
+ # when the "win" condition is triggered, and shown otherwise
78
+ class PwnFxConfirm
79
+ constructor: (element, identifier) ->
80
+ sourceSelector = "[data-pwnfx-confirm-done=\"#{identifier}\"]"
81
+ winSelector = "[data-pwnfx-confirm-win=\"#{identifier}\"]"
82
+ failSelector = "[data-pwnfx-confirm-fail=\"#{identifier}\"]"
83
+
84
+ onChange = ->
85
+ value = null
86
+ matching = true
87
+ for element, index in document.querySelectorAll(sourceSelector)
88
+ if index == 0
89
+ value = element.value
90
+ else if element.value != value
91
+ matching = false
92
+ break
93
+
94
+ hideSelector = if matching then failSelector else winSelector
95
+ showSelector = if matching then winSelector else failSelector
96
+ for targetElement in document.querySelectorAll(showSelector)
97
+ targetElement.classList.remove 'hidden'
98
+ for targetElement in document.querySelectorAll(hideSelector)
99
+ targetElement.classList.add 'hidden'
100
+ true
101
+ onChange()
102
+
103
+ element.addEventListener 'change', onChange
104
+ element.addEventListener 'keydown', onChange
105
+ element.addEventListener 'keyup', onChange
106
+
107
+ # Moves an element using data-pwnfx-move.
108
+ class PwnFxMove
109
+ constructor: (element, identifier) ->
110
+ targetSelector =
111
+ target = document.querySelector "[data-pwnfx-move-target=\"#{identifier}\"]"
112
+ target.appendChild element
113
+
114
+ # Shows / hides elements when an element is clicked or checked / unchecked.
115
+ #
116
+ # Attributes:
117
+ # data-pwnfx-reveal: a name for the events caused by this element's triggering
118
+ # data-pwnfx-trigger: 'click' means events are triggered when the element is
119
+ # clicked, 'check' means events are triggered when the element is checked;
120
+ # (default: click)
121
+ # data-pwnfx-positive: set to the same value as data-pwnfx-reveal on elements
122
+ # that will be shown when a positive event (click / check) is triggered,
123
+ # and hidden when a negative event (uncheck) is triggered
124
+ # data-pwnfx-negative: set to the same value as data-pwnfx-reveal on elements
125
+ # that will be hidden when a positive event (click / check) is triggered,
126
+ # and shown when a negative event (uncheck) is triggered
127
+ class PwnFxReveal
128
+ constructor: (element, identifier) ->
129
+ trigger = element.getAttribute('data-pwnfx-reveal-trigger') || 'click'
130
+ positiveSelector = "[data-pwnfx-reveal-positive=\"#{identifier}\"]"
131
+ negativeSelector = "[data-pwnfx-reveal-negative=\"#{identifier}\"]"
132
+ onChange = (event) ->
133
+ positive = (trigger == 'click') || element.checked
134
+
135
+ showSelector = if positive then positiveSelector else negativeSelector
136
+ hideSelector = if positive then negativeSelector else positiveSelector
137
+ for targetElement in document.querySelectorAll(showSelector)
138
+ targetElement.classList.remove 'hidden'
139
+ for targetElement in document.querySelectorAll(hideSelector)
140
+ targetElement.classList.add 'hidden'
141
+ if trigger == 'click'
142
+ event.preventDefault()
143
+ false
144
+ else
145
+ true
146
+
147
+ if trigger == 'click'
148
+ element.addEventListener 'click', onChange
149
+ else if trigger == 'check'
150
+ element.addEventListener 'change', onChange
151
+ onChange()
152
+
153
+
154
+ # List of effects.
155
+ pwnEffects = [
156
+ ['data-pwnfx-move', PwnFxMove],
157
+ ['data-pwnfx-refresh-url', PwnFxRefresh],
158
+ ['data-pwnfx-confirm', PwnFxConfirm],
159
+ ['data-pwnfx-reveal', PwnFxReveal]
160
+ ]
161
+
162
+ # Wires JS to elements with data-pwnfx attributes.
163
+ window.PwnFx = ->
164
+ for effect in pwnEffects
165
+ attrName = effect[0]
166
+ effectClass = effect[1]
167
+ doneAttrName = "#{attrName}-done"
168
+ attrSelector = "[#{attrName}]"
169
+ for element in document.querySelectorAll(attrSelector)
170
+ attrValue = element.getAttribute attrName
171
+ continue unless attrValue
172
+ element.removeAttribute attrName
173
+ element.setAttribute doneAttrName, attrValue
174
+ new effectClass element, attrValue
175
+ null
176
+
177
+ # Honor data-pwnfx attributes after the DOM is loaded.
178
+ window.addEventListener 'load', -> window.PwnFx()
@@ -12,7 +12,7 @@ input[type=submit], input[type=button], button, a.button {
12
12
  background-color: $button-color;
13
13
  border: 1px solid $button-border-color;
14
14
  color: $button-font-color;
15
- font-size: 1.1em;
15
+ font-size: 1.21em;
16
16
  text-decoration: none;
17
17
  display: inline-block;
18
18
 
@@ -47,6 +47,8 @@ input[type=text], input[type=email], input[type=tel], input[type=password],
47
47
  box-shadow: inset 0px 2px 2px $input-shadow-color;
48
48
  background-color: $input-background-color;
49
49
 
50
+ text-decoration: none;
51
+
50
52
  &:hover {
51
53
  border: 1px solid $button-hover-border-color;
52
54
  }
@@ -1,18 +1,16 @@
1
1
  <% if flash[:error] %>
2
- <p class="status-bar error" data-pwnfx-reveal-target="status-bar">
2
+ <p class="status-bar error" data-pwnfx-reveal-negative="status-bar">
3
3
  <%= flash[:error] %>
4
4
 
5
5
  <span class="actions">
6
- <%= link_to 'Hide', '#', 'data-pwnfx-reveal' => 'status-bar',
7
- 'data-pwnfx-reveal-trigger' => 'click-hide' %>
6
+ <%= link_to 'Hide', '#', 'data-pwnfx-reveal' => 'status-bar' %>
8
7
  </span>
9
8
  </p>
10
9
  <% elsif flash[:errors] && flash[:errors].any? %>
11
- <div class="status-bar error" data-pwnfx-reveal-target="status-bar">
10
+ <div class="status-bar error" data-pwnfx-reveal-negative="status-bar">
12
11
  <%= pluralize(flash[:errors].count, "error") %> occurred:
13
12
  <span class="actions">
14
- <%= link_to 'Hide', '#', 'data-pwnfx-reveal' => 'status-bar',
15
- 'data-pwnfx-reveal-trigger' => 'click-hide' %>
13
+ <%= link_to 'Hide', '#', 'data-pwnfx-reveal' => 'status-bar' %>
16
14
  </span>
17
15
 
18
16
  <ul>
@@ -22,12 +20,11 @@
22
20
  </ul>
23
21
  </div>
24
22
  <% elsif flash[:notice] %>
25
- <p class="status-bar notice" data-pwnfx-reveal-target="status-bar">
23
+ <p class="status-bar notice" data-pwnfx-reveal-negative="status-bar">
26
24
  <%= flash[:notice] %>
27
25
 
28
26
  <span class="actions">
29
- <%= link_to 'Hide', '#', 'data-pwnfx-reveal' => 'status-bar',
30
- 'data-pwnfx-reveal-trigger' => 'click-hide' %>
27
+ <%= link_to 'Hide', '#', 'data-pwnfx-reveal' => 'status-bar' %>
31
28
  </span>
32
29
  </p>
33
30
  <% end %>
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "pwnstyles_rails"
8
- s.version = "0.1.5"
8
+ s.version = "0.1.6"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Victor Costan"]
@@ -25,7 +25,7 @@ Gem::Specification.new do |s|
25
25
  "README.rdoc",
26
26
  "Rakefile",
27
27
  "VERSION",
28
- "app/assets/javascripts/pwn-fx.js",
28
+ "app/assets/javascripts/pwn-fx.js.coffee",
29
29
  "app/assets/stylesheets/_pwnstyles.css.scss",
30
30
  "app/assets/stylesheets/generic/_controls.css.scss",
31
31
  "app/assets/stylesheets/generic/_forms.css.scss",
@@ -69,27 +69,30 @@ Gem::Specification.new do |s|
69
69
  s.specification_version = 3
70
70
 
71
71
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
72
- s.add_runtime_dependency(%q<rails>, [">= 3.1.1"])
73
- s.add_runtime_dependency(%q<sass-rails>, [">= 3.1.4"])
72
+ s.add_runtime_dependency(%q<rails>, [">= 3.2.0"])
73
+ s.add_runtime_dependency(%q<sass-rails>, [">= 3.2.4"])
74
74
  s.add_development_dependency(%q<shoulda>, [">= 0"])
75
75
  s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
76
- s.add_development_dependency(%q<jeweler>, ["~> 1.6.0"])
76
+ s.add_development_dependency(%q<jeweler>, [">= 1.8.0"])
77
77
  s.add_development_dependency(%q<rcov>, [">= 0"])
78
+ s.add_development_dependency(%q<simplecov>, [">= 0"])
78
79
  else
79
- s.add_dependency(%q<rails>, [">= 3.1.1"])
80
- s.add_dependency(%q<sass-rails>, [">= 3.1.4"])
80
+ s.add_dependency(%q<rails>, [">= 3.2.0"])
81
+ s.add_dependency(%q<sass-rails>, [">= 3.2.4"])
81
82
  s.add_dependency(%q<shoulda>, [">= 0"])
82
83
  s.add_dependency(%q<bundler>, ["~> 1.0.0"])
83
- s.add_dependency(%q<jeweler>, ["~> 1.6.0"])
84
+ s.add_dependency(%q<jeweler>, [">= 1.8.0"])
84
85
  s.add_dependency(%q<rcov>, [">= 0"])
86
+ s.add_dependency(%q<simplecov>, [">= 0"])
85
87
  end
86
88
  else
87
- s.add_dependency(%q<rails>, [">= 3.1.1"])
88
- s.add_dependency(%q<sass-rails>, [">= 3.1.4"])
89
+ s.add_dependency(%q<rails>, [">= 3.2.0"])
90
+ s.add_dependency(%q<sass-rails>, [">= 3.2.4"])
89
91
  s.add_dependency(%q<shoulda>, [">= 0"])
90
92
  s.add_dependency(%q<bundler>, ["~> 1.0.0"])
91
- s.add_dependency(%q<jeweler>, ["~> 1.6.0"])
93
+ s.add_dependency(%q<jeweler>, [">= 1.8.0"])
92
94
  s.add_dependency(%q<rcov>, [">= 0"])
95
+ s.add_dependency(%q<simplecov>, [">= 0"])
93
96
  end
94
97
  end
95
98
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pwnstyles_rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.5
4
+ version: 0.1.6
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,33 +9,33 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-02-04 00:00:00.000000000Z
12
+ date: 2012-02-04 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rails
16
- requirement: &14639820 !ruby/object:Gem::Requirement
16
+ requirement: &7895040 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
20
20
  - !ruby/object:Gem::Version
21
- version: 3.1.1
21
+ version: 3.2.0
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *14639820
24
+ version_requirements: *7895040
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: sass-rails
27
- requirement: &14639180 !ruby/object:Gem::Requirement
27
+ requirement: &7893040 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
31
31
  - !ruby/object:Gem::Version
32
- version: 3.1.4
32
+ version: 3.2.4
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *14639180
35
+ version_requirements: *7893040
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: shoulda
38
- requirement: &14638580 !ruby/object:Gem::Requirement
38
+ requirement: &7891480 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '0'
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *14638580
46
+ version_requirements: *7891480
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: bundler
49
- requirement: &14637940 !ruby/object:Gem::Requirement
49
+ requirement: &7890520 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ~>
@@ -54,21 +54,32 @@ dependencies:
54
54
  version: 1.0.0
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *14637940
57
+ version_requirements: *7890520
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: jeweler
60
- requirement: &14637340 !ruby/object:Gem::Requirement
60
+ requirement: &7889360 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
- - - ~>
63
+ - - ! '>='
64
64
  - !ruby/object:Gem::Version
65
- version: 1.6.0
65
+ version: 1.8.0
66
66
  type: :development
67
67
  prerelease: false
68
- version_requirements: *14637340
68
+ version_requirements: *7889360
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: rcov
71
- requirement: &14636700 !ruby/object:Gem::Requirement
71
+ requirement: &7888140 !ruby/object:Gem::Requirement
72
+ none: false
73
+ requirements:
74
+ - - ! '>='
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ type: :development
78
+ prerelease: false
79
+ version_requirements: *7888140
80
+ - !ruby/object:Gem::Dependency
81
+ name: simplecov
82
+ requirement: &7887200 !ruby/object:Gem::Requirement
72
83
  none: false
73
84
  requirements:
74
85
  - - ! '>='
@@ -76,7 +87,7 @@ dependencies:
76
87
  version: '0'
77
88
  type: :development
78
89
  prerelease: false
79
- version_requirements: *14636700
90
+ version_requirements: *7887200
80
91
  description: Included CSS was designed for reuse across pwnb.us apps.
81
92
  email: victor@costan.us
82
93
  executables: []
@@ -93,7 +104,7 @@ files:
93
104
  - README.rdoc
94
105
  - Rakefile
95
106
  - VERSION
96
- - app/assets/javascripts/pwn-fx.js
107
+ - app/assets/javascripts/pwn-fx.js.coffee
97
108
  - app/assets/stylesheets/_pwnstyles.css.scss
98
109
  - app/assets/stylesheets/generic/_controls.css.scss
99
110
  - app/assets/stylesheets/generic/_forms.css.scss
@@ -141,7 +152,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
141
152
  version: '0'
142
153
  segments:
143
154
  - 0
144
- hash: -2823634831094979445
155
+ hash: -808311045673830044
145
156
  required_rubygems_version: !ruby/object:Gem::Requirement
146
157
  none: false
147
158
  requirements:
@@ -1,160 +0,0 @@
1
- /**
2
- * PwnFx: AJAX sprinkles via unobtrusive JavaScript.
3
- * @author Victor Costan
4
- *
5
- * The author sorely misses Rails' AJAX helpers such as observe_field. This
6
- * library provides a replacement that adheres to the new philosophy of
7
- * unobtrusive JavaScript triggered by HTML5 data- attributes.
8
- */
9
-
10
-
11
- /** Namespace. */
12
- var PwnFx = {};
13
-
14
- /** Wires JS to elements with data-pwnfx attributes. */
15
- PwnFx.wireAll = function () {
16
- $('[data-pwnfx-move]').each(function (_, element) {
17
- PwnFx.wireMove(element);
18
- });
19
-
20
- $('[data-pwnfx-refresh-url]').each(function (_, element) {
21
- PwnFx.wireRefresh(element);
22
- });
23
- $('[data-pwnfx-confirm]').each(function (_, element) {
24
- PwnFx.wireConfirm(element);
25
- });
26
- $('[data-pwnfx-reveal]').each(function (_, element) {
27
- PwnFx.wireReveal(element);
28
- });
29
- };
30
-
31
- /** Wires JS to an AJAX refresh element that uses data-pwnfx-refresh-url. */
32
- PwnFx.wireRefresh = function (element) {
33
- var jElement = $(element);
34
- var xhrUrl = jElement.attr('data-pwnfx-refresh-url');
35
- jElement.attr('data-pwnfx-refresh-url-done', xhrUrl);
36
- jElement.removeAttr('data-pwnfx-refresh-url');
37
-
38
- var targetSelector = '#' + jElement.attr('data-pwnfx-refresh-target');
39
- var refreshInterval =
40
- parseInt(jElement.attr('data-pwnfx-refresh-ms') || '200');
41
- var xhrMethod = jElement.attr('data-pwnfx-refresh-method') || 'POST';
42
- var form = $(jElement.parents('form')[0]);
43
- var onXhrSuccessFn = function (data) {
44
- $(targetSelector).html(data);
45
- };
46
- var refreshPending = false;
47
- var refreshOldValue = null;
48
- var ajaxRefreshFn = function () {
49
- refreshPending = false;
50
- $.ajax({
51
- data: form.serialize(), success: onXhrSuccessFn,
52
- dataType: 'html', type: xhrMethod, url: xhrUrl
53
- });
54
- };
55
- var onChangeFn = function () {
56
- var value = jElement.val();
57
- if (value == refreshOldValue) {
58
- return;
59
- } else {
60
- refreshOldValue = value;
61
- }
62
- if (refreshPending) {
63
- return;
64
- } else {
65
- refreshPending = true;
66
- setTimeout(ajaxRefreshFn, refreshInterval);
67
- }
68
- };
69
-
70
- jElement.bind('change', onChangeFn);
71
- jElement.bind('keydown', onChangeFn);
72
- jElement.bind('keyup', onChangeFn);
73
- onChangeFn();
74
- };
75
-
76
- /**
77
- * Wires JS to an AJAX confirmation check element using data-pwnfx-confirm.
78
- */
79
- PwnFx.wireConfirm = function (element) {
80
- var jElement = $(element);
81
- var identifier = jElement.attr('data-pwnfx-confirm');
82
- var sourceSelector = '[data-pwnfx-confirm="' + identifier + '"]'
83
- var winSelector = '[data-pwnfx-confirm-win="' + identifier + '"]';
84
- var failSelector = '[data-pwnfx-confirm-fail="' + identifier + '"]';
85
-
86
- var onChangeFn = function () {
87
- var value = null;
88
- var matching = true;
89
- $(sourceSelector).each(function (index, element) {
90
- var val = $(element).val();
91
- value = value || val;
92
- if (value != val) {
93
- matching = false;
94
- }
95
- if (matching) {
96
- $(winSelector).removeClass('hidden');
97
- $(failSelector).addClass('hidden');
98
- } else {
99
- $(winSelector).addClass('hidden');
100
- $(failSelector).removeClass('hidden');
101
- }
102
- });
103
- };
104
- jElement.bind('change', onChangeFn);
105
- jElement.bind('keydown', onChangeFn);
106
- jElement.bind('keyup', onChangeFn);
107
- onChangeFn();
108
- };
109
-
110
- /** Moves an element using data-pwnfx-move. */
111
- PwnFx.wireMove = function (element) {
112
- var jElement = $(element);
113
- var identifier = jElement.attr('data-pwnfx-move');
114
- jElement.attr('data-pwnfx-move-done', identifier);
115
- jElement.removeAttr('data-pwnfx-move');
116
-
117
- var targetSelector = '[data-pwnfx-move-target="' + identifier + '"]';
118
- var jTarget = $(targetSelector).first();
119
- jElement.detach();
120
- jTarget.append(jElement);
121
- };
122
-
123
- /** Wires JS to an AJAX show/hide trigger using data-pwnfx-reveal. */
124
- PwnFx.wireReveal = function (element) {
125
- var jElement = $(element);
126
- var identifier = jElement.attr('data-pwnfx-reveal');
127
- jElement.attr('data-pwnfx-reveal-done', identifier);
128
- jElement.removeAttr('data-pwnfx-reveal');
129
-
130
- var trigger = jElement.attr('data-pwnfx-reveal-trigger') || 'click';
131
- var showOnCheck = true;
132
- if (trigger == 'uncheck') {
133
- trigger = 'check';
134
- showOnCheck = false;
135
- } else if (trigger == 'click-hide') {
136
- trigger = 'click';
137
- showOnCheck = false;
138
- }
139
- var targetSelector = '[data-pwnfx-reveal-target="' + identifier + '"]';
140
-
141
- var onChangeFn = function () {
142
- var checked = (trigger == 'click') || jElement.is(':checked');
143
- var willShow = (checked == showOnCheck);
144
- if (willShow) {
145
- $(targetSelector).removeClass('hidden');
146
- } else {
147
- $(targetSelector).addClass('hidden');
148
- }
149
- };
150
-
151
- if (trigger == 'click') {
152
- jElement.bind('click', onChangeFn);
153
- } else if (trigger = 'check') {
154
- jElement.bind('change', onChangeFn);
155
- onChangeFn();
156
- }
157
- };
158
-
159
- // Wire JS to elements when the document is loaded.
160
- $(PwnFx.wireAll);