lighter_box 0.1.0

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.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 1ca805cbc44387bcd1da3ecbd5d595628f44c417
4
+ data.tar.gz: 067d9f737fa192fb37a2f6c3a5b39cfff6bee774
5
+ SHA512:
6
+ metadata.gz: bd58de1a00f2f309930f1735b0e229dd5880577df91e9e4344d7566f331b6104631e551cdd81ece4fbc83cfc6f1542eb04b4b22ff061a452c4fd055f23b571a2
7
+ data.tar.gz: 86ed656540f815b8f7295724cb90093632ad0fe7b2b1fc32d2959784b89381a7bc0511a02a4db51fe862fe5daf46cf696287fb50fa085bf8e68ab906ef6d804c
data/.gitignore ADDED
@@ -0,0 +1,9 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in lighter_box.gemspec
4
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2016 Stefan Daschek
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,70 @@
1
+ # LighterBox
2
+
3
+ A very lightweight lightbox with a bare minimum of features:
4
+
5
+ * Displays a single image (with caption) or arbitrary content loaded via Ajax.
6
+ * Fully accessible (note that all UI alt texts and titles are in german).
7
+ * Gallery mode (navigation between related images / contents).
8
+ * Supports nested lightboxes.
9
+
10
+
11
+ ## Requirements
12
+
13
+ Requires a recent jQuery version (may work with Zepto, too).
14
+
15
+ Designed to work with current browsers (including minor workarounds to make sure it’s not completely broken in IE9).
16
+
17
+
18
+ ## Installation
19
+
20
+ Add `lighter_box` to your Gemfile. Use sprockets directives to include the code in your JS/CSS:
21
+
22
+ ```javascript
23
+ //= require "lighter_box"
24
+ ```
25
+
26
+ ```css
27
+ @import "lighter_box"
28
+ ```
29
+
30
+
31
+ ## Usage
32
+
33
+ Create a new instance of `LighterBox.Ajax` or `LighterBox.Image`, with the link element referencing the target image or content as parameter.
34
+
35
+ A common pattern is to do this in a event handler like this:
36
+
37
+ ```coffee
38
+ $("body").on "click", "a[data-lightbox]", (ev) ->
39
+ ev.preventDefault()
40
+ if $(this).data("lightbox-mode") == "ajax"
41
+ new LighterBox.Ajax(this)
42
+ else
43
+ new LighterBox.Image(this)
44
+ ```
45
+
46
+
47
+ ### Configuration via attributes
48
+
49
+ The following attributes on the source element (link) can be used to customize LighterBox:
50
+
51
+ * `data-lightbox-class`: Additional css class names for the lightbox modal.
52
+ * `data-lightbox-group`: Used for gallery mode: Next / previous links will be displayed to allow navigation between lightboxes for source elements that share the save value for this attribute.
53
+
54
+ Image lightbox only:
55
+
56
+ * `data-lightbox-caption`: Image caption. If not set, the image’s alt text is used as caption.
57
+
58
+ Ajax lightbox only:
59
+
60
+ * `data-lightbox-fragment`: A jQuery selector to specify the portion of the remote document to be loaded into the lightbox (similar to the fragment feature of [`jQuery.load()`](http://api.jquery.com/load/)).
61
+
62
+
63
+ ### Events
64
+
65
+ The following events will be triggered on the lightbox modal element:
66
+
67
+ * `lighter-box-content-loaded`: When the content has been completely loaded (lightbox already visible).
68
+ * `lighter-box-will-hide`: Before the lightbox elements (modal, container and backdrop) are removed from the DOM.
69
+
70
+ Event handlers will get passed the lightbox instance as second parameter (after the event object).
data/Rakefile ADDED
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
@@ -0,0 +1,252 @@
1
+ IE9 = /MSIE 9\./.test(navigator.userAgent)
2
+
3
+
4
+ class Backdrop
5
+ constructor: ->
6
+ @isNestedBackdrop = $(".lighter-box-backdrop").length > 0
7
+ @backdrop = $("<div class='lighter-box-backdrop' />").appendTo("body")
8
+ unless @isNestedBackdrop
9
+ $("body").addClass("lighter-box-has-backdrop")
10
+ $("body > *").wrapAll("<div class='lighter-box-aria-hide-body' aria-hidden='true' />")
11
+
12
+ remove: =>
13
+ @backdrop.remove()
14
+ unless @isNestedBackdrop
15
+ $(".lighter-box-aria-hide-body > *").unwrap()
16
+ $("body").removeClass("lighter-box-has-backdrop")
17
+
18
+
19
+
20
+ class Spinner
21
+ constructor: (@parentEl) ->
22
+ @el = $("<div class='lighter-box-spinner' tabindex='0'><div class='sr-only'>wird geladen …</div><div class='rect1' /><div class='rect2' /><div class='rect3' /><div class='rect4' /><div class='rect5' /></div>").hide().appendTo(@parentEl)
23
+ @delay = null
24
+
25
+ showDelayed: (delayMS) =>
26
+ @_clearDelay()
27
+ @delay = window.setTimeout(@show, delayMS)
28
+
29
+ show: =>
30
+ @_clearDelay()
31
+ @el.show().focus()
32
+
33
+ remove: =>
34
+ @_clearDelay()
35
+ @el.remove()
36
+ @parentEl.focus()
37
+
38
+ _clearDelay: =>
39
+ window.clearTimeout(@delay)
40
+
41
+
42
+
43
+ class LightboxGroup
44
+ constructor: (@currentEl) ->
45
+ @elems = if (groupName = @currentEl.attr("data-lightbox-group"))
46
+ $("[data-lightbox-group='#{groupName}']")
47
+ else
48
+ @currentEl
49
+
50
+ index: =>
51
+ @elems.index(@currentEl)
52
+
53
+ hasNext: =>
54
+ @index() + 1 < @elems.length
55
+
56
+ hasPrev: =>
57
+ @index() - 1 >= 0
58
+
59
+ nextHref: =>
60
+ @elems.eq(@index() + 1).attr("href")
61
+
62
+ prevHref: =>
63
+ @elems.eq(@index() - 1).attr("href")
64
+
65
+ next: =>
66
+ @currentEl = @elems.eq(@index() + 1)
67
+
68
+ prev: =>
69
+ @currentEl = @elems.eq(@index() - 1)
70
+
71
+
72
+
73
+ class ImageModalResizer
74
+ MIN_CAPTION_WIDTH: 200
75
+
76
+ constructor: (@modal) ->
77
+ @figure = @modal.find("figure")
78
+ @img = @figure.find("img")
79
+ @figcaption = @figure.find("figcaption")
80
+ @minImgHeight = parseInt(@img.css("min-height"), 10)
81
+ @running = false
82
+
83
+ run: =>
84
+ return if @running
85
+ @running = true
86
+ if window.requestAnimationFrame then window.requestAnimationFrame(@_run) else @_run()
87
+
88
+ _run: =>
89
+ @img.css("max-height": "none")
90
+ @modalHeight = @modal.height()
91
+ @_resize()
92
+ @_ie9Fix() if IE9
93
+ @running = false
94
+
95
+ _resize: =>
96
+ if (overflow = @figure.height() - @modalHeight) > 0
97
+ if (newHeight = @img.height() - overflow) >= @minImgHeight
98
+ @img.css("max-height": "#{newHeight}px")
99
+ else
100
+ @img.css("max-height": "#{@minImgHeight}px")
101
+ return # Make sure we don't recurse any more
102
+ captionWidth = Math.max(@img.width(), @MIN_CAPTION_WIDTH)
103
+ @figcaption.css("max-width": captionWidth)
104
+ @_resize() if @figure.height() > @modalHeight
105
+
106
+ _ie9Fix: =>
107
+ left = (document.documentElement.clientWidth - @modal.outerWidth()) / 2
108
+ top = (document.documentElement.clientHeight - @modal.outerHeight()) / 2
109
+ @modal.css(left: "#{left}px", top: "#{top}px")
110
+
111
+
112
+
113
+ class LighterBox
114
+ constructor: (srcEl) ->
115
+ @eventNamespace = "lighter-box-#{new Date().getTime()}"
116
+ @srcEl = $(srcEl)
117
+ @originalFocusEl = $(":focus")
118
+ @lightboxGroup = new LightboxGroup(@srcEl)
119
+ @backdrop = new Backdrop()
120
+ @container = @_createContainer()
121
+ @modal = @_createModal(@container)
122
+ @modal.addClass(@srcEl.data("lightbox-class")).data("lighter-box", this)
123
+ @_createInnerModal()
124
+
125
+ @container.on("click.#{@eventNamespace}", (ev) => @hide() if ev.target == @container[0])
126
+ @container.on("click.#{@eventNamespace}", "[data-lighter-box-dismiss]", @hide)
127
+ @container.on("click.#{@eventNamespace}", "[data-lighter-box-prev]", (ev) => ev.preventDefault(); @_showPrev())
128
+ @container.on("click.#{@eventNamespace}", "[data-lighter-box-next]", (ev) => ev.preventDefault(); @_showNext())
129
+ @container.on("keydown.#{@eventNamespace}", @_onKeydown)
130
+ @_trapFocus()
131
+ @modal.focus()
132
+
133
+ @_setContent().then =>
134
+ @_ie9Fix() if IE9
135
+
136
+ hide: =>
137
+ @_releaseFocus()
138
+ @container.off(".#{@eventNamespace}")
139
+ $(window).off(".#{@eventNamespace}")
140
+ @modal.trigger("lighter-box-will-hide", [this])
141
+ @container.remove()
142
+ @backdrop.remove()
143
+ @originalFocusEl.focus()
144
+
145
+ _createContainer: () =>
146
+ $("<div class='lighter-box-container' />").appendTo("body")
147
+
148
+ _createModal: (container) =>
149
+ modal = $("<div class='lighter-box-modal' role='dialog' aria-hidden='false' tabindex='0'/>").appendTo(container)
150
+ $("<button class='lighter-box-close-button' title='Vergrößerte Ansicht schließen' data-lighter-box-dismiss><span aria-hidden='true'>×</span></button>").appendTo(modal)
151
+ $("<a data-lighter-box-prev class='lighter-box-prev-link' href='#' title='Voriges Bild'><span aria-hidden='true'>‹</span></a>").appendTo(container)
152
+ $("<a data-lighter-box-next class='lighter-box-next-link' href='#' title='Nächstes Bild'><span aria-hidden='true'>›</span></a>").appendTo(container)
153
+ modal
154
+
155
+ _createInnerModal: =>
156
+ # Template method, override in subclasses if needed
157
+
158
+ _setContent: =>
159
+ prevLink = @container.find("[data-lighter-box-prev]").hide()
160
+ nextLink = @container.find("[data-lighter-box-next]").hide()
161
+ spinner = new Spinner(@modal)
162
+ spinner.showDelayed(100)
163
+ @_loadContent().then =>
164
+ spinner.remove()
165
+ prevLink.attr("href", @lightboxGroup.prevHref()).show() if @lightboxGroup.hasPrev()
166
+ nextLink.attr("href", @lightboxGroup.nextHref()).show() if @lightboxGroup.hasNext()
167
+ @modal.trigger("lighter-box-content-loaded", [this])
168
+
169
+ _loadContent: =>
170
+ throw "_loadContent needs to be overriden in a subclass."
171
+
172
+ _trapFocus: =>
173
+ $(document).on "focusin.#{@eventNamespace}", (ev) =>
174
+ return unless @_isForemost()
175
+ @modal.focus() unless $.contains(@container[0], ev.target)
176
+
177
+ _releaseFocus: =>
178
+ $(document).off "focusin.#{@eventNamespace}"
179
+
180
+ _onKeydown: (ev) =>
181
+ return unless @_isForemost()
182
+ switch ev.which
183
+ when 27 then ev.preventDefault(); @hide()
184
+ when 39 then ev.preventDefault(); @_showNext()
185
+ when 37 then ev.preventDefault(); @_showPrev()
186
+
187
+ _showNext: =>
188
+ if @lightboxGroup.hasNext()
189
+ @srcEl = @lightboxGroup.next()
190
+ @_setContent()
191
+ @modal.focus()
192
+
193
+ _showPrev: =>
194
+ if @lightboxGroup.hasPrev()
195
+ @srcEl = @lightboxGroup.prev()
196
+ @_setContent()
197
+ @modal.focus()
198
+
199
+ _isForemost: =>
200
+ @container.nextAll(".lighter-box-container").length == 0
201
+
202
+ _ie9Fix: =>
203
+ @modal.addClass("ie9")
204
+
205
+
206
+
207
+ class ImageLighterBox extends LighterBox
208
+ constructor: (srcEl) ->
209
+ super(srcEl)
210
+ @resizer = new ImageModalResizer(@modal)
211
+ $(window).on("resize.#{@eventNamespace}", => @resizer.run())
212
+
213
+ _createInnerModal: =>
214
+ figure = $("<figure />").appendTo(@modal)
215
+ $("<figcaption id='lighter-box-figcaption' class='lighter-box-figcaption'/>").appendTo(figure)
216
+ $("<img class='lighter-box-image'>").attr("aria-labelledby": "lighter-box-figcaption").prependTo(figure)
217
+
218
+ _loadContent: =>
219
+ $.Deferred (deferred) =>
220
+ href = @srcEl.attr("href")
221
+ caption = @srcEl.data("lightbox-caption") || @srcEl.find("img").attr("alt") || ""
222
+ newImg = $("<img>").attr(src: href).one "load", =>
223
+ @modal.find("img").attr(src: newImg.attr("src"))
224
+ @modal.find("figcaption").text(caption).toggleClass("empty-caption", caption.trim() == "")
225
+ @resizer.run()
226
+ deferred.resolve()
227
+
228
+ _ie9Fix: =>
229
+ super()
230
+ @resizer.run()
231
+
232
+
233
+
234
+ class AjaxLighterBox extends LighterBox
235
+ constructor: (srcEl) ->
236
+ super(srcEl)
237
+
238
+ _createInnerModal: =>
239
+ @ajaxContainer = $("<div/>").appendTo(@modal)
240
+
241
+ _loadContent: =>
242
+ href = @srcEl.attr("href")
243
+ fragment = @srcEl.data("lightbox-fragment")
244
+ $.get href, (data) =>
245
+ data = $(data).find(fragment) if fragment
246
+ @ajaxContainer.html(data)
247
+
248
+
249
+
250
+ window.LighterBox =
251
+ Ajax: AjaxLighterBox
252
+ Image: ImageLighterBox
@@ -0,0 +1,159 @@
1
+ $lighter-box-margin: 24px !default
2
+ $lighter-box-padding: 24px !default
3
+
4
+ body.lighter-box-has-backdrop
5
+ // Damit lässt sich zwar auf Desktop-Browsern bequem das Scrolling „unter“ dem Modal verhindern, aber es hat zwei Probleme:
6
+ // * Funktioniert nicht auf mobilen Browsern
7
+ // * Blendet einen eventuell vorhandenen Scrollbar aus, dadurch kanns passieren, dass das Layout „hüpft“. (Bootstrap fixt das, indem sie die Scrollbar-Breite ausmessen und das Bodypadding dann explizit entsprechend anpassen – geht, ist aber recht aufwändig.)
8
+ //overflow: hidden
9
+
10
+ .lighter-box-backdrop
11
+ position: fixed
12
+ left: 0
13
+ top: 0
14
+ width: 100vw
15
+ height: 100vh
16
+ background: rgba(0, 0, 0, 0.6)
17
+
18
+ .lighter-box-container
19
+ position: fixed
20
+ left: 0
21
+ top: 0
22
+ right: 0
23
+ bottom: 0
24
+ display: flex
25
+ align-items: center
26
+ justify-content: center
27
+
28
+ .lighter-box-modal
29
+ position: relative
30
+ background: #fff
31
+ padding: $lighter-box-padding
32
+ box-sizing: border-box
33
+ min-width: 120px // Damit der (absolut positionierte) Spinner nicht breiter ist als die (noch leere) Lightbox
34
+ min-height: 100px // Damit der (absolut positionierte) Spinner nicht breiter ist als die (noch leere) Lightbox
35
+ max-width: calc(100vw - #{2 * $lighter-box-margin})
36
+ max-height: calc(100vh - #{2 * $lighter-box-margin})
37
+ overflow-y: auto
38
+
39
+ .lighter-box-close-button
40
+ position: absolute
41
+ top: 0px
42
+ right: 0px
43
+ box-sizing: border-box
44
+ width: 24px
45
+ height: 24px
46
+ border: none
47
+ padding: 0
48
+ background: transparent
49
+ text-align: center
50
+ font: bold 18px/20px sans-serif
51
+ color: #ccc
52
+ cursor: pointer
53
+ &:hover, &:focus
54
+ color: #555
55
+
56
+ .lighter-box-prev-link, .lighter-box-next-link
57
+ $width: ($lighter-box-margin + $lighter-box-padding) * 0.9
58
+ $height: $width
59
+ position: absolute
60
+ top: calc(50% - #{$height / 2})
61
+ width: $width
62
+ height: $height
63
+ text-decoration: none
64
+ font-size: #{$height * 0.8}
65
+ line-height: #{$height * 0.9}
66
+ background: rgba(52, 52, 52, 0.85)
67
+ color: #ccc
68
+ text-align: center
69
+ > span
70
+ font-weight: bold
71
+ color: inherit
72
+ &:hover, &:focus
73
+ color: #fff
74
+ background: rgba(22, 22, 22, 0.9)
75
+ text-decoration: none
76
+
77
+ .lighter-box-prev-link
78
+ left: 0px
79
+ .lighter-box-next-link
80
+ right: 0px
81
+
82
+ .lighter-box-image
83
+ display: block
84
+ margin: auto
85
+ max-width: 100%
86
+ min-height: 30px
87
+
88
+ .lighter-box-figcaption
89
+ margin: 20px 0 0
90
+ text-align: center
91
+ line-height: 1.2
92
+ &.empty-caption
93
+ margin-top: 0
94
+
95
+
96
+ .lighter-box-spinner
97
+ $width: 80px
98
+ $height: 55px
99
+ box-sizing: border-box
100
+ padding: 15px
101
+ position: fixed
102
+ background: rgba(50, 50, 50, 0.8)
103
+ border-radius: 4px
104
+ box-shadow: 0 0 3px 1px rgba(255, 255, 255, 0.25)
105
+ width: $width
106
+ height: $height
107
+ left: calc(50% - #{$width / 2})
108
+ top: calc(50% - #{$height / 2})
109
+ text-align: center
110
+ font-size: 10px
111
+ &:focus
112
+ outline: none
113
+
114
+ > div
115
+ background-color: #eee
116
+ height: 100%
117
+ width: 5px
118
+ margin: 0 1px
119
+ display: inline-block
120
+ -webkit-animation: lighter-box-loader-anim 1.2s infinite ease-in-out
121
+ animation: lighter-box-loader-anim 1.2s infinite ease-in-out
122
+
123
+ .rect2
124
+ -webkit-animation-delay: -1.1s
125
+ animation-delay: -1.1s
126
+
127
+ .rect3
128
+ -webkit-animation-delay: -1.0s
129
+ animation-delay: -1.0s
130
+
131
+ .rect4
132
+ -webkit-animation-delay: -0.9s
133
+ animation-delay: -0.9s
134
+
135
+ .rect5
136
+ -webkit-animation-delay: -0.8s
137
+ animation-delay: -0.8s
138
+
139
+ @-webkit-keyframes lighter-box-loader-anim
140
+ 0%, 40%, 100%
141
+ -webkit-transform: scaleY(0.5)
142
+
143
+ 20%
144
+ -webkit-transform: scaleY(1)
145
+
146
+ @keyframes lighter-box-loader-anim
147
+ 0%, 40%, 100%
148
+ transform: scaleY(0.5)
149
+ -webkit-transform: scaleY(0.5)
150
+
151
+ 20%
152
+ transform: scaleY(1)
153
+ -webkit-transform: scaleY(1)
154
+
155
+
156
+ .lighter-box-modal.ie9
157
+ display: inline-block
158
+ width: auto
159
+ margin: 0
@@ -0,0 +1,3 @@
1
+ module LighterBox
2
+ VERSION = "0.1.0"
3
+ end
@@ -0,0 +1,9 @@
1
+ require "lighter_box/version"
2
+
3
+ module LighterBox
4
+ # We need to subclass Rails::Engine, so that Rails adds our assets directory to its assets search path.
5
+ if defined? Rails
6
+ class Engine < ::Rails::Engine
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,26 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'lighter_box/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "lighter_box"
8
+ spec.version = LighterBox::VERSION
9
+ spec.authors = ["Stefan Daschek"]
10
+ spec.email = ["stefan@die-antwort.eu"]
11
+
12
+ spec.summary = %q{Lightweight accessible lightbox.}
13
+ spec.homepage = "https://github.com/die-antwort/lighter_box"
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
17
+ spec.bindir = "exe"
18
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_dependency "coffee-script", "~> 2.2"
22
+ spec.add_dependency "sass", "~> 3.2"
23
+
24
+ spec.add_development_dependency "bundler", "~> 1.9"
25
+ spec.add_development_dependency "rake", "~> 10.0"
26
+ end
metadata ADDED
@@ -0,0 +1,110 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: lighter_box
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Stefan Daschek
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2016-03-25 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: coffee-script
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '2.2'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '2.2'
27
+ - !ruby/object:Gem::Dependency
28
+ name: sass
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '3.2'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '3.2'
41
+ - !ruby/object:Gem::Dependency
42
+ name: bundler
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '1.9'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '1.9'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rake
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '10.0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '10.0'
69
+ description:
70
+ email:
71
+ - stefan@die-antwort.eu
72
+ executables: []
73
+ extensions: []
74
+ extra_rdoc_files: []
75
+ files:
76
+ - ".gitignore"
77
+ - Gemfile
78
+ - LICENSE.txt
79
+ - README.md
80
+ - Rakefile
81
+ - lib/assets/javascripts/lighter_box.coffee
82
+ - lib/assets/stylesheets/lighter_box.sass
83
+ - lib/lighter_box.rb
84
+ - lib/lighter_box/version.rb
85
+ - lighter_box.gemspec
86
+ homepage: https://github.com/die-antwort/lighter_box
87
+ licenses:
88
+ - MIT
89
+ metadata: {}
90
+ post_install_message:
91
+ rdoc_options: []
92
+ require_paths:
93
+ - lib
94
+ required_ruby_version: !ruby/object:Gem::Requirement
95
+ requirements:
96
+ - - ">="
97
+ - !ruby/object:Gem::Version
98
+ version: '0'
99
+ required_rubygems_version: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ requirements: []
105
+ rubyforge_project:
106
+ rubygems_version: 2.2.3
107
+ signing_key:
108
+ specification_version: 4
109
+ summary: Lightweight accessible lightbox.
110
+ test_files: []