eligo-rails 0.0.3 → 0.0.4
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.lock +2 -2
- data/README.md +1 -0
- data/Rakefile +7 -5
- data/eligo-rails.gemspec +3 -2
- data/lib/eligo-rails.rb +1 -1
- data/spec/javascripts/shift_clickable_spec.coffee +38 -12
- data/vendor/assets/javascripts/shift_clickable.coffee +21 -15
- metadata +11 -10
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
eligo (0.0.
|
4
|
+
eligo-rails (0.0.3)
|
5
5
|
jquery-rails (~> 1.0)
|
6
6
|
railties (~> 3.1.0)
|
7
7
|
|
@@ -79,6 +79,6 @@ PLATFORMS
|
|
79
79
|
ruby
|
80
80
|
|
81
81
|
DEPENDENCIES
|
82
|
-
eligo!
|
82
|
+
eligo-rails!
|
83
83
|
jasmine-headless-webkit (~> 0.8.4)
|
84
84
|
jasmine-spec-extras (~> 0.0.2)
|
data/README.md
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
[](http://travis-ci.org/lmarburger/eligo-rails)
|
data/Rakefile
CHANGED
@@ -45,15 +45,17 @@ end
|
|
45
45
|
|
46
46
|
|
47
47
|
begin
|
48
|
-
require 'jasmine'
|
49
|
-
|
48
|
+
require 'jasmine-headless-webkit'
|
49
|
+
Jasmine::Headless::Task.new
|
50
50
|
rescue LoadError
|
51
|
-
task :jasmine do
|
52
|
-
abort "
|
51
|
+
task :jasmine-headless do
|
52
|
+
abort "jasmine-headless-webkit is not available. In order to run, you must: (sudo) gem install jasmine-headless-webkit"
|
53
53
|
end
|
54
54
|
end
|
55
55
|
|
56
|
-
task :default => :
|
56
|
+
task :default => 'jasmine:headless'
|
57
|
+
|
58
|
+
|
57
59
|
|
58
60
|
#############################################################################
|
59
61
|
#
|
data/eligo-rails.gemspec
CHANGED
@@ -13,8 +13,8 @@ Gem::Specification.new do |s|
|
|
13
13
|
## If your rubyforge_project name is different, then edit it and comment out
|
14
14
|
## the sub! line in the Rakefile
|
15
15
|
s.name = 'eligo-rails'
|
16
|
-
s.version = '0.0.
|
17
|
-
s.date = '2012-01-
|
16
|
+
s.version = '0.0.4'
|
17
|
+
s.date = '2012-01-07'
|
18
18
|
|
19
19
|
## Make sure your summary is short. The description may be as long
|
20
20
|
## as you like.
|
@@ -54,6 +54,7 @@ Gem::Specification.new do |s|
|
|
54
54
|
s.files = %w[
|
55
55
|
Gemfile
|
56
56
|
Gemfile.lock
|
57
|
+
README.md
|
57
58
|
Rakefile
|
58
59
|
eligo-rails.gemspec
|
59
60
|
lib/eligo-rails.rb
|
data/lib/eligo-rails.rb
CHANGED
@@ -19,7 +19,10 @@ describe 'shiftClickable()', ->
|
|
19
19
|
third = createCheckbox()
|
20
20
|
list.shiftClickable()
|
21
21
|
|
22
|
-
|
22
|
+
shiftEvent = (event) ->
|
23
|
+
event or= 'click'
|
24
|
+
jQuery.Event event, shiftKey: true
|
25
|
+
|
23
26
|
createCheckbox = ->
|
24
27
|
$('<input type="checkbox">')
|
25
28
|
.attr('id', checkID++)
|
@@ -41,7 +44,7 @@ describe 'shiftClickable()', ->
|
|
41
44
|
|
42
45
|
it 'checks checkboxes between last and shift-clicked checkboxes', ->
|
43
46
|
first.trigger 'click'
|
44
|
-
third.trigger
|
47
|
+
third.trigger shiftEvent()
|
45
48
|
|
46
49
|
deferExpect ->
|
47
50
|
expect(first) .toBeChecked()
|
@@ -56,7 +59,7 @@ describe 'shiftClickable()', ->
|
|
56
59
|
|
57
60
|
it 'checks checkboxes when shift-clicking parent list item', ->
|
58
61
|
first.trigger 'click'
|
59
|
-
third.closest('li').trigger
|
62
|
+
third.closest('li').trigger shiftEvent()
|
60
63
|
|
61
64
|
deferExpect ->
|
62
65
|
expect(first) .toBeChecked()
|
@@ -66,7 +69,7 @@ describe 'shiftClickable()', ->
|
|
66
69
|
it 'triggers the change event on checkboxes', ->
|
67
70
|
first.trigger 'click'
|
68
71
|
spyOnEvent second, 'change'
|
69
|
-
third.trigger
|
72
|
+
third.trigger shiftEvent()
|
70
73
|
|
71
74
|
deferExpect ->
|
72
75
|
expect('change').toHaveBeenTriggeredOn(first)
|
@@ -75,7 +78,7 @@ describe 'shiftClickable()', ->
|
|
75
78
|
|
76
79
|
it 'checks checkboxes below the shift-clicked checkbox', ->
|
77
80
|
third.trigger 'click'
|
78
|
-
first.trigger
|
81
|
+
first.trigger shiftEvent()
|
79
82
|
|
80
83
|
deferExpect ->
|
81
84
|
expect(first) .toBeChecked()
|
@@ -83,7 +86,7 @@ describe 'shiftClickable()', ->
|
|
83
86
|
expect(third) .toBeChecked()
|
84
87
|
|
85
88
|
it 'sets a default anchor', ->
|
86
|
-
second.trigger
|
89
|
+
second.trigger shiftEvent()
|
87
90
|
|
88
91
|
deferExpect ->
|
89
92
|
expect(first) .toBeChecked()
|
@@ -91,7 +94,7 @@ describe 'shiftClickable()', ->
|
|
91
94
|
|
92
95
|
it 'does not check checkboxes above the selected group', ->
|
93
96
|
second.trigger 'click'
|
94
|
-
third .trigger
|
97
|
+
third .trigger shiftEvent()
|
95
98
|
|
96
99
|
deferExpect ->
|
97
100
|
expect(second).toBeChecked()
|
@@ -100,7 +103,7 @@ describe 'shiftClickable()', ->
|
|
100
103
|
|
101
104
|
it 'does not check checkboxes below the selected group', ->
|
102
105
|
first .trigger 'click'
|
103
|
-
second.trigger
|
106
|
+
second.trigger shiftEvent()
|
104
107
|
|
105
108
|
deferExpect ->
|
106
109
|
expect(first) .toBeChecked()
|
@@ -110,7 +113,7 @@ describe 'shiftClickable()', ->
|
|
110
113
|
it 'unchecks checkboxes between last and shift-clicked checkboxes', ->
|
111
114
|
group = [ third, second, first ]
|
112
115
|
checkbox.trigger 'click' for checkbox in group
|
113
|
-
third.trigger
|
116
|
+
third.trigger shiftEvent()
|
114
117
|
|
115
118
|
deferExpect ->
|
116
119
|
expect(first) .not.toBeChecked()
|
@@ -120,7 +123,7 @@ describe 'shiftClickable()', ->
|
|
120
123
|
it 'handles shift-clicks on appended checkboxes', ->
|
121
124
|
late = createCheckbox()
|
122
125
|
second.trigger 'click'
|
123
|
-
late .trigger
|
126
|
+
late .trigger shiftEvent()
|
124
127
|
|
125
128
|
deferExpect ->
|
126
129
|
expect(second).toBeChecked()
|
@@ -131,7 +134,7 @@ describe 'shiftClickable()', ->
|
|
131
134
|
firstLate = createCheckbox()
|
132
135
|
secondLate = createCheckbox()
|
133
136
|
second .trigger 'click'
|
134
|
-
secondLate.trigger
|
137
|
+
secondLate.trigger shiftEvent()
|
135
138
|
|
136
139
|
deferExpect ->
|
137
140
|
expect(second) .toBeChecked()
|
@@ -148,10 +151,33 @@ describe 'shiftClickable()', ->
|
|
148
151
|
firstLate.add(secondLate).closest('li')
|
149
152
|
.insertBefore(second.closest('li'))
|
150
153
|
|
151
|
-
first.trigger
|
154
|
+
first.trigger shiftEvent()
|
152
155
|
|
153
156
|
deferExpect ->
|
154
157
|
expect(first) .toBeChecked()
|
155
158
|
expect(firstLate) .toBeChecked()
|
156
159
|
expect(secondLate).toBeChecked()
|
157
160
|
expect(second) .toBeChecked()
|
161
|
+
|
162
|
+
|
163
|
+
describe 'text selection', ->
|
164
|
+
emptyMock = removeMock = null
|
165
|
+
|
166
|
+
beforeEach ->
|
167
|
+
selectionStub = sinon.stub()
|
168
|
+
emptyMock = selectionStub.empty = sinon.mock()
|
169
|
+
removeMock = selectionStub.removeAllRanges = sinon.mock()
|
170
|
+
sinon.stub(window, 'getSelection').returns(selectionStub)
|
171
|
+
|
172
|
+
afterEach ->
|
173
|
+
window.getSelection.restore()
|
174
|
+
emptyMock .verify()
|
175
|
+
removeMock.verify()
|
176
|
+
|
177
|
+
it 'prevents selecting text when shift-clicking a list item', ->
|
178
|
+
first.trigger shiftEvent 'mousedown'
|
179
|
+
|
180
|
+
it 'does nothing when clicking an item', ->
|
181
|
+
emptyMock .never()
|
182
|
+
removeMock.never()
|
183
|
+
first.trigger 'mousedown'
|
@@ -19,19 +19,25 @@ $.fn.shiftClickable = ->
|
|
19
19
|
.prop('checked', checked)
|
20
20
|
.change()
|
21
21
|
|
22
|
-
list
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
else
|
28
|
-
clicked = clicked.closest 'li'
|
22
|
+
list
|
23
|
+
.mousedown (e) ->
|
24
|
+
return unless e.shiftKey
|
25
|
+
window.getSelection?().empty?()
|
26
|
+
window.getSelection?().removeAllRanges?()
|
29
27
|
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
28
|
+
.click (e) ->
|
29
|
+
clicked = $ e.target
|
30
|
+
if clicked.is 'li'
|
31
|
+
clicked.find(checkboxSelector)
|
32
|
+
.trigger $.Event('click', shiftKey: e.shiftKey)
|
33
|
+
else
|
34
|
+
clicked = clicked.closest 'li'
|
35
|
+
|
36
|
+
# It seems WebKit triggers `change` before `click`, but I'm not too
|
37
|
+
# confident that all browsers must trigger events in exactly the same way.
|
38
|
+
# Defer setting the value to be sure the checkbox has its new value.
|
39
|
+
window.setTimeout(
|
40
|
+
->
|
41
|
+
shiftClick clicked if e.shiftKey
|
42
|
+
anchor = clicked
|
43
|
+
1)
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: eligo-rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-01-
|
12
|
+
date: 2012-01-07 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: railties
|
16
|
-
requirement: &
|
16
|
+
requirement: &70104276728640 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: 3.1.0
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70104276728640
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: jquery-rails
|
27
|
-
requirement: &
|
27
|
+
requirement: &70104276727560 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ~>
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '1.0'
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *70104276727560
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: jasmine-headless-webkit
|
38
|
-
requirement: &
|
38
|
+
requirement: &70104276726580 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ~>
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: 0.8.4
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *70104276726580
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: jasmine-spec-extras
|
49
|
-
requirement: &
|
49
|
+
requirement: &70104276725280 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ~>
|
@@ -54,7 +54,7 @@ dependencies:
|
|
54
54
|
version: 0.0.2
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *70104276725280
|
58
58
|
description: Add shift-click selection to a list of checkboxes.
|
59
59
|
email: larry@marburger.cc
|
60
60
|
executables: []
|
@@ -63,6 +63,7 @@ extra_rdoc_files: []
|
|
63
63
|
files:
|
64
64
|
- Gemfile
|
65
65
|
- Gemfile.lock
|
66
|
+
- README.md
|
66
67
|
- Rakefile
|
67
68
|
- eligo-rails.gemspec
|
68
69
|
- lib/eligo-rails.rb
|