partystreusel 1.1.0pre2 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.travis.yml +1 -1
- data/CHANGELOG.md +1 -0
- data/Guardfile +1 -1
- data/README.md +29 -0
- data/app/assets/javascripts/partystreusel/accordion.js.coffee +6 -1
- data/app/assets/javascripts/partystreusel/all.js.coffee +1 -0
- data/app/assets/javascripts/partystreusel/base.js.coffee +4 -0
- data/app/assets/javascripts/partystreusel/offcanvas.js.coffee +4 -0
- data/app/assets/javascripts/partystreusel/readmore.js.coffee +5 -1
- data/app/assets/javascripts/partystreusel/slider.js.coffee +2 -1
- data/app/assets/javascripts/partystreusel/tab.js.coffee +10 -2
- data/lib/partystreusel/version.rb +1 -1
- data/spec/javascripts/partystreusel/accordion_spec.js.coffee +11 -1
- data/spec/javascripts/partystreusel/base_spec.js.coffee +8 -0
- data/spec/javascripts/partystreusel/offcanvas_spec.js.coffee +11 -1
- data/spec/javascripts/partystreusel/readmore_spec.js.coffee +11 -2
- data/spec/javascripts/partystreusel/tab_spec.js.coffee +7 -1
- data/spec/javascripts/spec.js.coffee +2 -0
- metadata +5 -5
data/.travis.yml
CHANGED
data/CHANGELOG.md
CHANGED
data/Guardfile
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
# A sample Guardfile
|
2
2
|
# More info at https://github.com/guard/guard#readme
|
3
3
|
|
4
|
-
guard :jasmine, console: :always do
|
4
|
+
guard :jasmine, console: :always, errors: :always do
|
5
5
|
watch(%r{spec/javascripts/spec\.(js\.coffee|js|coffee)$}) { 'spec/javascripts' }
|
6
6
|
watch(%r{spec/javascripts/.+_spec\.(js\.coffee|js|coffee)$})
|
7
7
|
watch(%r{spec/javascripts/fixtures/.+$})
|
data/README.md
CHANGED
@@ -28,6 +28,35 @@ If you only want to initialize readmore for a part of the document:
|
|
28
28
|
|
29
29
|
Streusel.Readmore.init($('body article.loadedwithajax'))
|
30
30
|
|
31
|
+
## JS <-> DOM
|
32
|
+
|
33
|
+
If you have the JS object use
|
34
|
+
|
35
|
+
myJsObject.$el
|
36
|
+
|
37
|
+
to access the corresponding DOM element.
|
38
|
+
|
39
|
+
If you have the DOM element use
|
40
|
+
|
41
|
+
$('.myselector').data('object')
|
42
|
+
|
43
|
+
to access the correspoindg partystreusel JS object.
|
44
|
+
|
45
|
+
## Events
|
46
|
+
|
47
|
+
Partystreusel components tirgger some events. All events are
|
48
|
+
prefixed with the moulename. Eg. Readmore triggers the event
|
49
|
+
'readmore-open' and 'readmore-close'.
|
50
|
+
|
51
|
+
You can trigger an event directly on the JS object. Eg.
|
52
|
+
if you have a readmore object:
|
53
|
+
|
54
|
+
readmoreObject = $('.myreadmore).data('object')
|
55
|
+
readmoreObject.trigger('myevent')
|
56
|
+
|
57
|
+
Would triger a new event on $('.myreadmore') with name
|
58
|
+
'readmore-event'.
|
59
|
+
|
31
60
|
# Module Usage
|
32
61
|
|
33
62
|
Available modules:
|
@@ -14,8 +14,13 @@ class Accordion extends Partystreusel.Base
|
|
14
14
|
item = $(e.target).closest('.accordion__item')
|
15
15
|
currentOpen = item.hasClass('accordion__item--open')
|
16
16
|
|
17
|
+
@items.filter('.accordion__item--open').each (_, i) =>
|
18
|
+
@trigger('close', $(i))
|
19
|
+
|
17
20
|
@items.removeClass('accordion__item--open')
|
18
|
-
|
21
|
+
unless currentOpen
|
22
|
+
item.toggleClass('accordion__item--open')
|
23
|
+
@trigger('open', item)
|
19
24
|
|
20
25
|
e.preventDefault()
|
21
26
|
Partystreusel.scrollTo(item, @offset)
|
@@ -11,6 +11,10 @@ class Offcanvas extends Partystreusel.Base
|
|
11
11
|
|
12
12
|
toggle: =>
|
13
13
|
@$el.toggleClass('offcanvas--open')
|
14
|
+
if @$el.hasClass('offcanvas--open')
|
15
|
+
@trigger('open', @$el)
|
16
|
+
else
|
17
|
+
@trigger('close', @$el)
|
14
18
|
|
15
19
|
toggleNavLink: (e) =>
|
16
20
|
navLink = $(e.target).closest('.offcanvas-nav__link')
|
@@ -18,11 +18,15 @@ class Readmore extends Partystreusel.Base
|
|
18
18
|
$(@button).bind 'click', @toggle
|
19
19
|
|
20
20
|
toggle: (event) =>
|
21
|
-
@button.text(@buttonText())
|
22
21
|
@$el.slideToggle =>
|
23
22
|
@$el.toggleClass('readmore--opened readmore--closed')
|
23
|
+
@button.text(@buttonText())
|
24
24
|
@$el.css('display', "")
|
25
25
|
@$el.removeAttr('style') if @$el.attr('style') == ''
|
26
|
+
if @$el.hasClass('readmore--opened')
|
27
|
+
@trigger('open', @$el)
|
28
|
+
else
|
29
|
+
@trigger('close', @$el)
|
26
30
|
return false
|
27
31
|
|
28
32
|
buttonState: ->
|
@@ -8,12 +8,13 @@ class Slider extends Partystreusel.Base
|
|
8
8
|
|
9
9
|
constructor: (el) ->
|
10
10
|
super
|
11
|
+
@slidelist = @$el.find('.slider__list')
|
11
12
|
@initializeCycle()
|
12
13
|
|
13
14
|
initializeCycle: ->
|
14
15
|
# see for documenation and options:
|
15
16
|
# https://github.com/malsup/cycle2
|
16
|
-
|
17
|
+
@slidelist.cycle
|
17
18
|
slides: '.slider__item'
|
18
19
|
fx: 'scrollHorz'
|
19
20
|
speed: 300
|
@@ -34,13 +34,21 @@ class Tab extends Partystreusel.Base
|
|
34
34
|
console.log("Nav Item or panel with name #{panelName} not found")
|
35
35
|
return
|
36
36
|
|
37
|
-
|
38
|
-
|
37
|
+
itemAndPanelToClose = @findItemAndPanel(@currentPanelName())
|
38
|
+
if itemAndPanelToClose
|
39
|
+
closeName = @currentPanelName()
|
40
|
+
itemAndPanelToClose[0].removeClass('tab__nav-item--active')
|
41
|
+
itemAndPanelToClose[1].removeClass('tab__panel--active')
|
42
|
+
@trigger('close', closeName, itemAndPanelToClose[0], itemAndPanelToClose[1])
|
39
43
|
|
40
44
|
itemAndPanel[0].addClass('tab__nav-item--active')
|
41
45
|
itemAndPanel[1].addClass('tab__panel--active')
|
42
46
|
|
47
|
+
@trigger('open', @currentPanelName(), itemAndPanel[0], itemAndPanel[1])
|
48
|
+
|
43
49
|
findItemAndPanel: (name) ->
|
50
|
+
return unless name?
|
51
|
+
|
44
52
|
if name.indexOf('#') == 0
|
45
53
|
name = name.slice(1)
|
46
54
|
|
@@ -6,12 +6,14 @@ describe 'Accordion', ->
|
|
6
6
|
describe 'Readmore object', ->
|
7
7
|
|
8
8
|
beforeEach ->
|
9
|
-
@el = affix('[data-streusel-accordion]')
|
9
|
+
@el = affix('.accordion[data-streusel-accordion]')
|
10
10
|
@item1 = @el.affix('.accordion__item .accordion__title Title')
|
11
11
|
@item2 = @el.affix('.accordion__item .accordion__title Title')
|
12
12
|
@item3 = @el.affix('.accordion__item .accordion__title Title')
|
13
13
|
|
14
14
|
@subject = Partystreusel.Accordion.init()[0]
|
15
|
+
spyOnEvent('.accordion', 'accordion-open')
|
16
|
+
spyOnEvent('.accordion', 'accordion-close')
|
15
17
|
|
16
18
|
it 'toggles correcty', ->
|
17
19
|
expect($('.accordion__item--open').length).toEqual(0)
|
@@ -23,3 +25,11 @@ describe 'Accordion', ->
|
|
23
25
|
expect($('.accordion__item--open').length).toEqual(1)
|
24
26
|
@item3.find('.accordion__title').trigger('click')
|
25
27
|
expect($('.accordion__item--open').length).toEqual(0)
|
28
|
+
|
29
|
+
it 'triggers events', ->
|
30
|
+
@item1.find('.accordion__title').trigger('click')
|
31
|
+
expect('accordion-open').toHaveBeenTriggeredOnAndWith('.accordion', @item1[0])
|
32
|
+
expect('accordion-close').not.toHaveBeenTriggeredOnAndWith('.accordion', @item1[0])
|
33
|
+
@item1.find('.accordion__title').trigger('click')
|
34
|
+
expect('accordion-open').toHaveBeenTriggeredOnAndWith('.accordion', @item1[0])
|
35
|
+
expect('accordion-close').toHaveBeenTriggeredOnAndWith('.accordion', @item1[0])
|
@@ -50,3 +50,11 @@ describe 'Base', ->
|
|
50
50
|
objects = @subject.init()
|
51
51
|
expect(objects.length).toEqual(0)
|
52
52
|
expect(@initSpy).not.toHaveBeenCalled()
|
53
|
+
|
54
|
+
it 'triggers an event', ->
|
55
|
+
tag1 = affix('#c1[data-streusel-myclass]')
|
56
|
+
@subject = @subject.init()[0]
|
57
|
+
spyOn(@subject.$el, 'trigger')
|
58
|
+
@subject.trigger('myevent', 'arg1', 'arg2')
|
59
|
+
expect(@subject.$el.trigger).toHaveBeenCalledWith('myclass-myevent', 'arg1', 'arg2');
|
60
|
+
|
@@ -6,8 +6,10 @@ describe 'Offcanvas', ->
|
|
6
6
|
describe 'Readmore object', ->
|
7
7
|
|
8
8
|
beforeEach ->
|
9
|
-
@el = affix('[data-streusel-offcanvas] .js-offcanvas__toggler+.offcanvas__overlay')
|
9
|
+
@el = affix('.offcanvas[data-streusel-offcanvas] .js-offcanvas__toggler+.offcanvas__overlay')
|
10
10
|
@subject = Partystreusel.Offcanvas.init()[0]
|
11
|
+
spyOnEvent('.offcanvas', 'offcanvas-open')
|
12
|
+
spyOnEvent('.offcanvas', 'offcanvas-close')
|
11
13
|
|
12
14
|
it 'toggles correcty with togger', ->
|
13
15
|
expect(@el).not.toHaveClass('offcanvas--open')
|
@@ -22,3 +24,11 @@ describe 'Offcanvas', ->
|
|
22
24
|
expect(@el).toHaveClass('offcanvas--open')
|
23
25
|
$('.offcanvas__overlay').trigger('click')
|
24
26
|
expect(@el).not.toHaveClass('offcanvas--open')
|
27
|
+
|
28
|
+
it 'triggers events', ->
|
29
|
+
$('.js-offcanvas__toggler').trigger('click')
|
30
|
+
expect('offcanvas-open').toHaveBeenTriggeredOnAndWith('.offcanvas', @el[0])
|
31
|
+
expect('offcanvas-close').not.toHaveBeenTriggeredOnAndWith('.offcanvas', @el[0])
|
32
|
+
$('.js-offcanvas__toggler').trigger('click')
|
33
|
+
expect('offcanvas-open').toHaveBeenTriggeredOnAndWith('.offcanvas', @el[0])
|
34
|
+
expect('offcanvas-close').toHaveBeenTriggeredOnAndWith('.offcanvas', @el[0])
|
@@ -14,8 +14,10 @@ describe 'Readmore', ->
|
|
14
14
|
describe 'Readmore object', ->
|
15
15
|
|
16
16
|
beforeEach ->
|
17
|
-
affix('[data-streusel-readmore]').html('Some Test text')
|
17
|
+
@el = affix('.readmore[data-streusel-readmore]').html('Some Test text')
|
18
18
|
@subject = Partystreusel.Readmore.init()[0]
|
19
|
+
spyOnEvent('.readmore', 'readmore-open')
|
20
|
+
spyOnEvent('.readmore', 'readmore-close')
|
19
21
|
|
20
22
|
it 'renders an open button', ->
|
21
23
|
@subject = @subject.renderButton()
|
@@ -29,6 +31,14 @@ describe 'Readmore', ->
|
|
29
31
|
@subject.toggle()
|
30
32
|
expect(@subject.buttonState()).toEqual('open')
|
31
33
|
|
34
|
+
it 'triggers events', ->
|
35
|
+
$('.readmore__button').trigger('click')
|
36
|
+
expect('readmore-open').toHaveBeenTriggeredOnAndWith('.readmore', @el[0])
|
37
|
+
expect('readmore-close').not.toHaveBeenTriggeredOnAndWith('.readmore', @el[0])
|
38
|
+
$('.readmore__button').trigger('click')
|
39
|
+
expect('readmore-open').toHaveBeenTriggeredOnAndWith('.readmore', @el[0])
|
40
|
+
expect('readmore-close').toHaveBeenTriggeredOnAndWith('.readmore', @el[0])
|
41
|
+
|
32
42
|
describe 'Readmore tag', ->
|
33
43
|
|
34
44
|
beforeEach ->
|
@@ -71,4 +81,3 @@ describe 'Readmore', ->
|
|
71
81
|
|
72
82
|
it 'uses custom button', ->
|
73
83
|
expect(@subject.next()).toHaveClass('myclass')
|
74
|
-
|
@@ -6,7 +6,7 @@ describe 'Tab', ->
|
|
6
6
|
describe 'Readmore object', ->
|
7
7
|
|
8
8
|
beforeEach ->
|
9
|
-
@el = affix('[data-streusel-tab]')
|
9
|
+
@el = affix('.tab[data-streusel-tab]')
|
10
10
|
|
11
11
|
@navItem1 = @el.affix('.tab__nav-item a[href="#panel1"]')
|
12
12
|
@navItem2 = @el.affix('.tab__nav-item a[href="#panel2"]')
|
@@ -17,6 +17,8 @@ describe 'Tab', ->
|
|
17
17
|
@panel3 = @el.affix('.tab__panel[id=panel3]')
|
18
18
|
|
19
19
|
@subject = Partystreusel.Tab.init()[0]
|
20
|
+
spyOnEvent('.tab', 'tab-open')
|
21
|
+
spyOnEvent('.tab', 'tab-close')
|
20
22
|
|
21
23
|
it 'has correct references', ->
|
22
24
|
expect(@subject.$navItems.length).toEqual(3)
|
@@ -42,3 +44,7 @@ describe 'Tab', ->
|
|
42
44
|
@navItem3.trigger('click')
|
43
45
|
expect(@panel3).toHaveClass('tab__panel--active')
|
44
46
|
|
47
|
+
it 'triggers events', ->
|
48
|
+
@navItem2.trigger('click')
|
49
|
+
expect('tab-close').toHaveBeenTriggeredOnAndWith('.tab', 'panel1', @navItem1[0], @panel1[0])
|
50
|
+
expect('tab-open').toHaveBeenTriggeredOnAndWith('.tab', 'panel2', @navItem2[0], @panel2[0])
|
metadata
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: partystreusel
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.1.
|
5
|
-
prerelease:
|
4
|
+
version: 1.1.0
|
5
|
+
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Flavio Pellanda
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2015-03-
|
12
|
+
date: 2015-03-04 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: railties
|
@@ -110,9 +110,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
110
110
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
111
111
|
none: false
|
112
112
|
requirements:
|
113
|
-
- - ! '
|
113
|
+
- - ! '>='
|
114
114
|
- !ruby/object:Gem::Version
|
115
|
-
version:
|
115
|
+
version: '0'
|
116
116
|
requirements: []
|
117
117
|
rubyforge_project: partystreusel
|
118
118
|
rubygems_version: 1.8.23
|