partystreusel 1.0.8 → 1.1.0pre1

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG.md CHANGED
@@ -1,5 +1,9 @@
1
1
  # CHANGELOG
2
2
 
3
+ ## v1.1.0pre1
4
+ * Refactored Readmore
5
+ * Add Offcanvas
6
+
3
7
  ## v1.0.8
4
8
  * IE8 fixes (readmore, ie_fixes did not work in IE8)
5
9
 
data/Gemfile CHANGED
@@ -19,5 +19,4 @@ group :development, :test do
19
19
  gem 'jquery-rails'
20
20
  gem 'i18n-js'
21
21
  gem 'guard-jasmine'
22
- gem 'guard-jslint-on-rails'
23
22
  end
data/Guardfile CHANGED
@@ -8,13 +8,3 @@ guard :jasmine, console: :always do
8
8
  watch(%r{app/assets/stylesheets/.+$})
9
9
  watch(%r{app/assets/javascripts/(.+?)\.(js\.coffee|js|coffee)(?:\.\w+)*$}) { |m| "spec/javascripts/#{ m[1] }_spec.#{ m[2] }" }
10
10
  end
11
-
12
-
13
- # verify that application Javascript files are lintable
14
- # see https://github.com/psionides/jslint_on_rails
15
- guard 'jslint-on-rails' do
16
- # watch for changes to application javascript files
17
- watch(%r{^app/assets/javascripts/.*\.js$})
18
- # watch for changes to the JSLint configuration
19
- watch('config/jslint.yml')
20
- end
@@ -1,2 +1,3 @@
1
1
  #= require partystreusel/scroll_to
2
2
  #= require partystreusel/readmore
3
+ #= require partystreusel/offcanvas
@@ -6,10 +6,14 @@ class Partystreusel.Base
6
6
  @className = 'Base'
7
7
 
8
8
  @selector: ->
9
- "[data-streusel-#{@className.toLowerCase()}]"
9
+ prefix = Partystreusel.selectorPrefix || 'streusel'
10
+ if Streusel.selectorType == 'css_class'
11
+ ".#{prefix}-#{@className.toLowerCase()}"
12
+ else
13
+ "[data-#{prefix}-#{@className.toLowerCase()}]"
10
14
 
11
15
  @init: (element = $('body')) ->
12
- element.find(@selector())
16
+ element.find(@selector()).addBack(@selector())
13
17
  .filter (i, el) -> !($(el).data('object')?)
14
18
  .map (i, el) => new @(el)
15
19
 
@@ -0,0 +1,22 @@
1
+ #= require partystreusel/base
2
+
3
+ class Offcanvas extends Partystreusel.Base
4
+ @className = 'Offcanvas'
5
+
6
+ constructor: (el) ->
7
+ super
8
+ @$el.find('.js-offcanvas__toggler').on 'click', @toggle
9
+ @$el.find('.offcanvas__overlay').on 'click', @toggle
10
+ @$el.find('.offcanvas-nav__link').on 'click', @toggleNavLink
11
+
12
+ toggle: =>
13
+ @$el.toggleClass('offcanvas--open')
14
+
15
+ toggleNavLink: (e) =>
16
+ navLink = $(e.target).closest('.offcanvas-nav__link')
17
+ subNav = navLink.next('.offcanvas-nav__sub')
18
+ return if subNav.length == 0
19
+ e.preventDefault()
20
+ subNav.toggleClass('offcanvas-nav__sub--open')
21
+
22
+ Partystreusel.Offcanvas = Offcanvas
@@ -5,40 +5,38 @@ class Readmore extends Partystreusel.Base
5
5
 
6
6
  constructor: (el) ->
7
7
  super
8
+ return if $.trim(@$el.text()) == ''
8
9
 
9
- @contentDiv = $('<div/>')
10
- .append(@$el.contents())
11
- .addClass('hide')
12
- @$el.append(@contentDiv)
10
+ unless @$el.hasClass('readmore--opened') || @$el.hasClass('readmore--closed')
11
+ @$el.addClass('readmore--closed')
13
12
 
14
- return if $.trim(@contentDiv.text()) == ''
13
+ @button = @$el.next()
14
+ unless @button.hasClass('readmore__button')
15
+ @button = @renderButton()
16
+ @button.insertAfter(@$el)
15
17
 
16
- @button = @renderButton('open')
17
18
  $(@button).bind 'click', @toggle
18
- @$el.append(@button)
19
19
 
20
20
  toggle: (event) =>
21
- @button.toggleClass('open close')
22
21
  @button.text(@buttonText())
23
- @contentDiv.slideToggle =>
24
- @contentDiv.toggleClass('hide')
25
- @contentDiv.css('display', "")
26
- @contentDiv.removeAttr('style') if @contentDiv.attr('style') == ''
22
+ @$el.slideToggle =>
23
+ @$el.toggleClass('readmore--opened readmore--closed')
24
+ @$el.css('display', "")
25
+ @$el.removeAttr('style') if @$el.attr('style') == ''
27
26
  return false
28
27
 
29
28
  buttonState: ->
30
- classes = @button.attr('class').split(' ')
31
- classes = classes.filter (v) -> v != 'button'
32
- classes[0]
29
+ return 'close' if @$el.hasClass('readmore--opened')
30
+ 'open'
33
31
 
34
32
  buttonText: (state = @buttonState()) ->
35
33
  I18n.t("readmore.button_text.#{state}")
36
34
 
37
- renderButton: (state) =>
38
- text = @buttonText(state)
35
+ renderButton: =>
36
+ text = @buttonText()
39
37
 
40
38
  $('<a></a>')
41
- .addClass(state + ' button')
39
+ .addClass('readmore__button')
42
40
  .attr('href', '#')
43
41
  .html(text)
44
42
 
@@ -1,2 +1,2 @@
1
- .hide
1
+ .readmore--closed
2
2
  display: none
@@ -1,3 +1,3 @@
1
1
  module Partystreusel
2
- VERSION = "1.0.8"
2
+ VERSION = "1.1.0pre1"
3
3
  end
@@ -3,6 +3,8 @@ describe 'Base', ->
3
3
  describe 'class functions', ->
4
4
 
5
5
  beforeEach ->
6
+ Streusel.selectorPrefix = undefined
7
+ Streusel.selectorType = undefined
6
8
  initSpy = jasmine.createSpy('initSpy')
7
9
  @initSpy = initSpy
8
10
 
@@ -15,6 +17,11 @@ describe 'Base', ->
15
17
 
16
18
  @subject = MyClass
17
19
 
20
+ it 'computes selector based on class name', ->
21
+ Streusel.selectorPrefix = 'js'
22
+ Streusel.selectorType = 'css_class'
23
+ expect(@subject.selector()).toEqual('.js-myclass')
24
+
18
25
  it 'computes selector based on class name', ->
19
26
  expect(@subject.selector()).toEqual('[data-streusel-myclass]')
20
27
 
@@ -0,0 +1,24 @@
1
+ describe 'Offcanvas', ->
2
+
3
+ it 'Streusel.Offcanvas exist', ->
4
+ expect(Streusel.Offcanvas).toBeDefined()
5
+
6
+ describe 'Readmore object', ->
7
+
8
+ beforeEach ->
9
+ @el = affix('[data-streusel-offcanvas] .js-offcanvas__toggler+.offcanvas__overlay')
10
+ @subject = Partystreusel.Offcanvas.init()[0]
11
+
12
+ it 'toggles correcty with togger', ->
13
+ expect(@el).not.toHaveClass('offcanvas--open')
14
+ $('.js-offcanvas__toggler').trigger('click')
15
+ expect(@el).toHaveClass('offcanvas--open')
16
+ $('.js-offcanvas__toggler').trigger('click')
17
+ expect(@el).not.toHaveClass('offcanvas--open')
18
+
19
+ it 'closes correctly with overlay', ->
20
+ expect(@el).not.toHaveClass('offcanvas--open')
21
+ $('.js-offcanvas__toggler').trigger('click')
22
+ expect(@el).toHaveClass('offcanvas--open')
23
+ $('.offcanvas__overlay').trigger('click')
24
+ expect(@el).not.toHaveClass('offcanvas--open')
@@ -18,10 +18,9 @@ describe 'Readmore', ->
18
18
  @subject = Partystreusel.Readmore.init()[0]
19
19
 
20
20
  it 'renders an open button', ->
21
- @subject = @subject.renderButton('open')
21
+ @subject = @subject.renderButton()
22
22
  expect(@subject.text()).toEqual('Read more')
23
- expect(@subject).toHaveClass('button')
24
- expect(@subject).toHaveClass('open')
23
+ expect(@subject).toHaveClass('readmore__button')
25
24
 
26
25
  it 'toggles button state', ->
27
26
  expect(@subject.buttonState()).toEqual('open')
@@ -37,27 +36,22 @@ describe 'Readmore', ->
37
36
  @subject.html('Some Test text')
38
37
  Partystreusel.Readmore.init()
39
38
 
40
- it 'add a read more button to the div', ->
41
- expect(@subject).toContain('a.button')
42
-
43
- it 'moves text into a separate div', ->
44
- expect(@subject).toContain('div')
45
- expect(@subject.find('div')).toBeHidden()
46
- expect(@subject.find('div').html()).toEqual('Some Test text')
39
+ it 'add a read more button after readmore', ->
40
+ expect(@subject.next()).toHaveClass('readmore__button')
47
41
 
48
42
  it 'toggle button on click', ->
49
- @subject.find('.button').trigger('click')
50
- expect(@subject.find('.button')).toHaveClass('button')
51
- expect(@subject.find('.button')).toHaveClass('close')
52
- expect(@subject.find('div')).not.toHaveClass('hide')
53
- expect(@subject.find('div')).not.toHaveAttr('style')
54
- expect(@subject.find('div')).not.toBeHidden()
55
- @subject.find('.button').trigger('click')
56
- expect(@subject.find('.button')).toHaveClass('button')
57
- expect(@subject.find('.button')).toHaveClass('open')
58
- expect(@subject.find('div')).toHaveClass('hide')
59
- expect(@subject.find('div')).not.toHaveAttr('style')
60
- expect(@subject.find('div')).toBeHidden()
43
+ expect(@subject.next()).toHaveClass('readmore__button')
44
+ expect(@subject).toHaveClass('readmore--closed')
45
+ @subject.next().trigger('click')
46
+ expect(@subject.next()).toHaveClass('readmore__button')
47
+ expect(@subject).toHaveClass('readmore--opened')
48
+ expect(@subject).not.toHaveAttr('style')
49
+ expect(@subject).not.toBeHidden()
50
+ @subject.next().trigger('click')
51
+ expect(@subject.next()).toHaveClass('readmore__button')
52
+ expect(@subject).toHaveClass('readmore--closed')
53
+ expect(@subject).not.toHaveAttr('style')
54
+ expect(@subject).toBeHidden()
61
55
 
62
56
  describe 'without content', ->
63
57
 
@@ -69,4 +63,12 @@ describe 'Readmore', ->
69
63
  it 'removes element when no content available', ->
70
64
  expect(@subject).not.toContain('a.button')
71
65
 
66
+ describe 'with custom button', ->
67
+
68
+ beforeEach ->
69
+ @subject = affix('[data-streusel-readmore]+button.myclass.readmore__button').html('Some Test text')
70
+ Partystreusel.Readmore.init()
71
+
72
+ it 'uses custom button', ->
73
+ expect(@subject.next()).toHaveClass('myclass')
72
74
 
metadata CHANGED
@@ -1,18 +1,20 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: partystreusel
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.8
4
+ version: 1.1.0pre1
5
+ prerelease: 5
5
6
  platform: ruby
6
7
  authors:
7
8
  - Flavio Pellanda
8
9
  autorequire:
9
10
  bindir: bin
10
11
  cert_chain: []
11
- date: 2014-08-11 00:00:00.000000000 Z
12
+ date: 2015-02-26 00:00:00.000000000 Z
12
13
  dependencies:
13
14
  - !ruby/object:Gem::Dependency
14
15
  name: railties
15
16
  requirement: !ruby/object:Gem::Requirement
17
+ none: false
16
18
  requirements:
17
19
  - - ! '>='
18
20
  - !ruby/object:Gem::Version
@@ -20,6 +22,7 @@ dependencies:
20
22
  type: :runtime
21
23
  prerelease: false
22
24
  version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
23
26
  requirements:
24
27
  - - ! '>='
25
28
  - !ruby/object:Gem::Version
@@ -27,6 +30,7 @@ dependencies:
27
30
  - !ruby/object:Gem::Dependency
28
31
  name: i18n-js
29
32
  requirement: !ruby/object:Gem::Requirement
33
+ none: false
30
34
  requirements:
31
35
  - - ! '>='
32
36
  - !ruby/object:Gem::Version
@@ -34,6 +38,7 @@ dependencies:
34
38
  type: :runtime
35
39
  prerelease: false
36
40
  version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
37
42
  requirements:
38
43
  - - ! '>='
39
44
  - !ruby/object:Gem::Version
@@ -60,6 +65,7 @@ files:
60
65
  - app/assets/javascripts/partystreusel/foundation_helpers.js.coffee
61
66
  - app/assets/javascripts/partystreusel/ie_fixes.js.coffee
62
67
  - app/assets/javascripts/partystreusel/namespace.js.coffee
68
+ - app/assets/javascripts/partystreusel/offcanvas.js.coffee
63
69
  - app/assets/javascripts/partystreusel/readmore.js.coffee
64
70
  - app/assets/javascripts/partystreusel/scroll_to.js.coffee
65
71
  - app/assets/javascripts/partystreusel/translations.js.coffee
@@ -74,6 +80,7 @@ files:
74
80
  - spec/javascripts/helpers/jasmine-fixture.js
75
81
  - spec/javascripts/helpers/jasmine-jquery.js
76
82
  - spec/javascripts/partystreusel/base_spec.js.coffee
83
+ - spec/javascripts/partystreusel/offcanvas_spec.js.coffee
77
84
  - spec/javascripts/partystreusel/readmore_spec.js.coffee
78
85
  - spec/javascripts/partystreusel/scroll_to_spec.js.coffee
79
86
  - spec/javascripts/spec.css
@@ -81,32 +88,34 @@ files:
81
88
  - spec/javascripts/support/jasmine_helper.rb
82
89
  homepage: http://www.screenconcept.ch
83
90
  licenses: []
84
- metadata: {}
85
91
  post_install_message:
86
92
  rdoc_options: []
87
93
  require_paths:
88
94
  - lib
89
95
  required_ruby_version: !ruby/object:Gem::Requirement
96
+ none: false
90
97
  requirements:
91
98
  - - ! '>='
92
99
  - !ruby/object:Gem::Version
93
100
  version: '0'
94
101
  required_rubygems_version: !ruby/object:Gem::Requirement
102
+ none: false
95
103
  requirements:
96
- - - ! '>='
104
+ - - ! '>'
97
105
  - !ruby/object:Gem::Version
98
- version: '0'
106
+ version: 1.3.1
99
107
  requirements: []
100
108
  rubyforge_project: partystreusel
101
- rubygems_version: 2.3.0
109
+ rubygems_version: 1.8.23
102
110
  signing_key:
103
- specification_version: 4
111
+ specification_version: 3
104
112
  summary: A collection uf reusable javascript components by Screen Concept
105
113
  test_files:
106
114
  - spec/javascripts/helpers/.gitkeep
107
115
  - spec/javascripts/helpers/jasmine-fixture.js
108
116
  - spec/javascripts/helpers/jasmine-jquery.js
109
117
  - spec/javascripts/partystreusel/base_spec.js.coffee
118
+ - spec/javascripts/partystreusel/offcanvas_spec.js.coffee
110
119
  - spec/javascripts/partystreusel/readmore_spec.js.coffee
111
120
  - spec/javascripts/partystreusel/scroll_to_spec.js.coffee
112
121
  - spec/javascripts/spec.css
checksums.yaml DELETED
@@ -1,15 +0,0 @@
1
- ---
2
- !binary "U0hBMQ==":
3
- metadata.gz: !binary |-
4
- NzU5MDEwNTZhNTdlMWNhNjY5MjcwZWU1ZmU0N2Q1MzcyOGM1ZWUxOA==
5
- data.tar.gz: !binary |-
6
- ODY4OWVmYzg2ZjkwZDI4NGMyNGQzYjlhOGI4M2JjNzNiOGY4YTc3NA==
7
- SHA512:
8
- metadata.gz: !binary |-
9
- M2U5YmQ1ZTYxZWRkNTEzMTI0YjcwYjFmMWQxOWY4Yjg2MzY0YTY5Y2VjODE4
10
- MTQyMWM4YjMwNmRiYmFmN2E3NTIwZjFhNTYxOGQ0MWY3YTU1ZGM0OGJkNzRj
11
- ZjNmODM0ZTA2NGNjZWI5NWJlMGYwZGI2MTE4MDA0MDU3YjEwZGM=
12
- data.tar.gz: !binary |-
13
- NjZiYTlhMGY4ZDhiZjBhYzNkMjk5N2M5NTQ5ZDcyMjQ4ODUyYmRhMTE2NDFm
14
- MGQ1ZjVlMzQ4YmJkYjYwODc1OGY1MzAwODVmZmRkZjU0YzliNGZhZDQ1NWE5
15
- YmM3ZTk4ODc0Y2E2N2E0YjE2ZTM0N2YxM2EzOGI5MTY5ZmRiMDk=