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 +7 -9
- data/Gemfile.lock +55 -53
- data/Rakefile +0 -7
- data/VERSION +1 -1
- data/app/assets/javascripts/pwn-fx.js.coffee +178 -0
- data/app/assets/stylesheets/generic/_controls.css.scss +3 -1
- data/lib/pwnstyles_rails/generators/layouts/_status_bar.html.erb +6 -9
- data/pwnstyles_rails.gemspec +14 -11
- metadata +31 -20
- data/app/assets/javascripts/pwn-fx.js +0 -160
data/Gemfile
CHANGED
|
@@ -1,14 +1,12 @@
|
|
|
1
|
-
source
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
gem 'rails', '>= 3.
|
|
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', '
|
|
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.
|
|
5
|
-
actionpack (= 3.
|
|
6
|
-
mail (~> 2.
|
|
7
|
-
actionpack (3.
|
|
8
|
-
activemodel (= 3.
|
|
9
|
-
activesupport (= 3.
|
|
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
|
-
|
|
13
|
-
rack (~> 1.
|
|
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.
|
|
18
|
-
activemodel (3.
|
|
19
|
-
activesupport (= 3.
|
|
16
|
+
sprockets (~> 2.1.2)
|
|
17
|
+
activemodel (3.2.1)
|
|
18
|
+
activesupport (= 3.2.1)
|
|
20
19
|
builder (~> 3.0.0)
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
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.
|
|
28
|
-
activemodel (= 3.
|
|
29
|
-
activesupport (= 3.
|
|
30
|
-
activesupport (3.
|
|
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 (
|
|
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.
|
|
37
|
+
jeweler (1.8.3)
|
|
39
38
|
bundler (~> 1.0)
|
|
40
39
|
git (>= 1.2.5)
|
|
41
40
|
rake
|
|
42
|
-
|
|
43
|
-
|
|
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.
|
|
49
|
+
multi_json (1.0.4)
|
|
49
50
|
polyglot (0.3.3)
|
|
50
|
-
rack (1.
|
|
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.
|
|
60
|
-
actionmailer (= 3.
|
|
61
|
-
actionpack (= 3.
|
|
62
|
-
activerecord (= 3.
|
|
63
|
-
activeresource (= 3.
|
|
64
|
-
activesupport (= 3.
|
|
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.
|
|
67
|
-
railties (3.
|
|
68
|
-
actionpack (= 3.
|
|
69
|
-
activesupport (= 3.
|
|
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.
|
|
76
|
-
rdoc (3.
|
|
74
|
+
rcov (1.0.0)
|
|
75
|
+
rdoc (3.12)
|
|
77
76
|
json (~> 1.4)
|
|
78
|
-
sass (3.1.
|
|
79
|
-
sass-rails (3.
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
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
|
-
|
|
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.
|
|
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 (
|
|
103
|
-
rails (>= 3.
|
|
103
|
+
jeweler (>= 1.8.0)
|
|
104
|
+
rails (>= 3.2.0)
|
|
104
105
|
rcov
|
|
105
|
-
sass-rails (>= 3.
|
|
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.
|
|
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.
|
|
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-
|
|
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-
|
|
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-
|
|
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 %>
|
data/pwnstyles_rails.gemspec
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
|
|
6
6
|
Gem::Specification.new do |s|
|
|
7
7
|
s.name = "pwnstyles_rails"
|
|
8
|
-
s.version = "0.1.
|
|
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.
|
|
73
|
-
s.add_runtime_dependency(%q<sass-rails>, [">= 3.
|
|
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>, ["
|
|
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.
|
|
80
|
-
s.add_dependency(%q<sass-rails>, [">= 3.
|
|
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>, ["
|
|
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.
|
|
88
|
-
s.add_dependency(%q<sass-rails>, [">= 3.
|
|
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>, ["
|
|
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.
|
|
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.
|
|
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: &
|
|
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.
|
|
21
|
+
version: 3.2.0
|
|
22
22
|
type: :runtime
|
|
23
23
|
prerelease: false
|
|
24
|
-
version_requirements: *
|
|
24
|
+
version_requirements: *7895040
|
|
25
25
|
- !ruby/object:Gem::Dependency
|
|
26
26
|
name: sass-rails
|
|
27
|
-
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.
|
|
32
|
+
version: 3.2.4
|
|
33
33
|
type: :runtime
|
|
34
34
|
prerelease: false
|
|
35
|
-
version_requirements: *
|
|
35
|
+
version_requirements: *7893040
|
|
36
36
|
- !ruby/object:Gem::Dependency
|
|
37
37
|
name: shoulda
|
|
38
|
-
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: *
|
|
46
|
+
version_requirements: *7891480
|
|
47
47
|
- !ruby/object:Gem::Dependency
|
|
48
48
|
name: bundler
|
|
49
|
-
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: *
|
|
57
|
+
version_requirements: *7890520
|
|
58
58
|
- !ruby/object:Gem::Dependency
|
|
59
59
|
name: jeweler
|
|
60
|
-
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.
|
|
65
|
+
version: 1.8.0
|
|
66
66
|
type: :development
|
|
67
67
|
prerelease: false
|
|
68
|
-
version_requirements: *
|
|
68
|
+
version_requirements: *7889360
|
|
69
69
|
- !ruby/object:Gem::Dependency
|
|
70
70
|
name: rcov
|
|
71
|
-
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: *
|
|
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: -
|
|
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);
|