compass-facebox-plugin 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,48 @@
1
+ # Compass Facebox Plugin
2
+
3
+ ## About Facebox
4
+
5
+ Facebox is a jQuery-based, Facebook-style lightbox which can display images, divs, or entire remote pages. It was developed by [Chris Wanstrath](http://github.com/defunkt) and [Kyle Neath](http://github.com/kneath).
6
+
7
+ The original code is available [here](http://github.com/defunkt/facebox).
8
+ [See it in action](http://defunkt.github.com/facebox/).
9
+
10
+ ## About Compass Facebox Plugin
11
+
12
+ This [Compass](http://compass-style.org/) plugin makes it easier for Compass users to integrate facebox into their project.
13
+
14
+ # Installation
15
+
16
+ From the command line:
17
+
18
+ gem install compass-facebox-plugin
19
+ cd my_compass_project
20
+
21
+ Add the following to your compass configuration (`config.rb`):
22
+
23
+ require 'compass-facebox-plugin'
24
+
25
+ Then run from the command line:
26
+
27
+ compass install facebox
28
+
29
+ To one of your sass stylesheets to import the facebox styles add:
30
+
31
+ @import 'facebox';
32
+
33
+ In your HTML you need to do something like this:
34
+
35
+ <script src="/javascripts/facebox.js"></script>
36
+
37
+ If your project's `images` directory is not served at `/images/` you need to tell facebox about that in your JS code:
38
+
39
+ $.facebox.settings.closeImage = '/my/path/to/images/facebox/closelabel.png';
40
+ $.facebox.settings.loadingImage = '/my/path/to/images/facebox/loading.gif';
41
+
42
+ Then you can do something like this:
43
+
44
+ jQuery(document).ready(function($) {
45
+ $('a[rel*=facebox]').facebox();
46
+ });
47
+
48
+ For more usage information please refer to the [original project](http://github.com/defunkt/facebox).
@@ -0,0 +1 @@
1
+ Compass::Frameworks.register("facebox", :path => "#{File.dirname(__FILE__)}/..")
@@ -0,0 +1,75 @@
1
+ @import "compass/css3";
2
+
3
+ #facebox {
4
+ position: absolute;
5
+ top: 0;
6
+ left: 0;
7
+ z-index: 100;
8
+ text-align: left;
9
+
10
+ .popup{
11
+ position: relative;
12
+ border: 3px solid rgba(0,0,0,0);
13
+ @include border-radius(5px);
14
+ @include box-shadow(rgba(0,0,0,0.4) 0 0 18px);
15
+ }
16
+
17
+ .content {
18
+ display:table;
19
+ width:370px;
20
+ padding:10px;
21
+ background:#fff;
22
+ @include border-radius(4px);
23
+
24
+ & > p:first-child {
25
+ margin-top:0;
26
+ }
27
+
28
+ & > p:last-child{
29
+ margin-bottom:0;
30
+ }
31
+ }
32
+
33
+ .close{
34
+ position: absolute;
35
+ top: 5px;
36
+ right: 5px;
37
+ padding: 2px;
38
+ background: #fff;
39
+
40
+ img {
41
+ @include opacity(0.3);
42
+ }
43
+
44
+ &:hover img{
45
+ @include opacity(1.0);
46
+ }
47
+ }
48
+
49
+ .loading, .image {
50
+ text-align: center;
51
+ }
52
+
53
+ img {
54
+ border: 0;
55
+ margin: 0;
56
+ }
57
+
58
+ }
59
+
60
+ #facebox_overlay {
61
+ position: fixed;
62
+ top: 0px;
63
+ left: 0px;
64
+ height: 100%;
65
+ width: 100%;
66
+ }
67
+
68
+ .facebox_hide {
69
+ z-index:-100;
70
+ }
71
+
72
+ .facebox_overlayBG {
73
+ background-color: #000;
74
+ z-index: 99;
75
+ }
@@ -0,0 +1,313 @@
1
+ /*
2
+ * Facebox (for jQuery)
3
+ * version: 1.3
4
+ * @requires jQuery v1.2 or later
5
+ * @homepage https://github.com/defunkt/facebox
6
+ *
7
+ * Licensed under the MIT:
8
+ * http://www.opensource.org/licenses/mit-license.php
9
+ *
10
+ * Copyright Forever Chris Wanstrath, Kyle Neath
11
+ *
12
+ * Usage:
13
+ *
14
+ * jQuery(document).ready(function() {
15
+ * jQuery('a[rel*=facebox]').facebox()
16
+ * })
17
+ *
18
+ * <a href="#terms" rel="facebox">Terms</a>
19
+ * Loads the #terms div in the box
20
+ *
21
+ * <a href="terms.html" rel="facebox">Terms</a>
22
+ * Loads the terms.html page in the box
23
+ *
24
+ * <a href="terms.png" rel="facebox">Terms</a>
25
+ * Loads the terms.png image in the box
26
+ *
27
+ *
28
+ * You can also use it programmatically:
29
+ *
30
+ * jQuery.facebox('some html')
31
+ * jQuery.facebox('some html', 'my-groovy-style')
32
+ *
33
+ * The above will open a facebox with "some html" as the content.
34
+ *
35
+ * jQuery.facebox(function($) {
36
+ * $.get('blah.html', function(data) { $.facebox(data) })
37
+ * })
38
+ *
39
+ * The above will show a loading screen before the passed function is called,
40
+ * allowing for a better ajaxy experience.
41
+ *
42
+ * The facebox function can also display an ajax page, an image, or the contents of a div:
43
+ *
44
+ * jQuery.facebox({ ajax: 'remote.html' })
45
+ * jQuery.facebox({ ajax: 'remote.html' }, 'my-groovy-style')
46
+ * jQuery.facebox({ image: 'stairs.jpg' })
47
+ * jQuery.facebox({ image: 'stairs.jpg' }, 'my-groovy-style')
48
+ * jQuery.facebox({ div: '#box' })
49
+ * jQuery.facebox({ div: '#box' }, 'my-groovy-style')
50
+ *
51
+ * Want to close the facebox? Trigger the 'close.facebox' document event:
52
+ *
53
+ * jQuery(document).trigger('close.facebox')
54
+ *
55
+ * Facebox also has a bunch of other hooks:
56
+ *
57
+ * loading.facebox
58
+ * beforeReveal.facebox
59
+ * reveal.facebox (aliased as 'afterReveal.facebox')
60
+ * init.facebox
61
+ * afterClose.facebox
62
+ *
63
+ * Simply bind a function to any of these hooks:
64
+ *
65
+ * $(document).bind('reveal.facebox', function() { ...stuff to do after the facebox and contents are revealed... })
66
+ *
67
+ */
68
+ (function($) {
69
+ $.facebox = function(data, klass) {
70
+ $.facebox.loading()
71
+
72
+ if (data.ajax) fillFaceboxFromAjax(data.ajax, klass)
73
+ else if (data.image) fillFaceboxFromImage(data.image, klass)
74
+ else if (data.div) fillFaceboxFromHref(data.div, klass)
75
+ else if ($.isFunction(data)) data.call($)
76
+ else $.facebox.reveal(data, klass)
77
+ }
78
+
79
+ /*
80
+ * Public, $.facebox methods
81
+ */
82
+
83
+ $.extend($.facebox, {
84
+ settings: {
85
+ opacity : 0.2,
86
+ overlay : true,
87
+ loadingImage : '/images/facebox/loading.gif',
88
+ closeImage : '/images/facebox/closelabel.png',
89
+ imageTypes : [ 'png', 'jpg', 'jpeg', 'gif' ],
90
+ faceboxHtml : '\
91
+ <div id="facebox" style="display:none;"> \
92
+ <div class="popup"> \
93
+ <div class="content"> \
94
+ </div> \
95
+ <a href="#" class="close"></a> \
96
+ </div> \
97
+ </div>'
98
+ },
99
+
100
+ loading: function() {
101
+ init()
102
+ if ($('#facebox .loading').length == 1) return true
103
+ showOverlay()
104
+
105
+ $('#facebox .content').empty().
106
+ append('<div class="loading"><img src="'+$.facebox.settings.loadingImage+'"/></div>')
107
+
108
+ $('#facebox').show().css({
109
+ top: getPageScroll()[1] + (getPageHeight() / 10),
110
+ left: $(window).width() / 2 - ($('#facebox .popup').outerWidth() / 2)
111
+ })
112
+
113
+ $(document).bind('keydown.facebox', function(e) {
114
+ if (e.keyCode == 27) $.facebox.close()
115
+ return true
116
+ })
117
+ $(document).trigger('loading.facebox')
118
+ },
119
+
120
+ reveal: function(data, klass) {
121
+ $(document).trigger('beforeReveal.facebox')
122
+ if (klass) $('#facebox .content').addClass(klass)
123
+ $('#facebox .content').empty().append(data)
124
+ $('#facebox .popup').children().fadeIn('normal')
125
+ $('#facebox').css('left', $(window).width() / 2 - ($('#facebox .popup').outerWidth() / 2))
126
+ $(document).trigger('reveal.facebox').trigger('afterReveal.facebox')
127
+ },
128
+
129
+ close: function() {
130
+ $(document).trigger('close.facebox')
131
+ return false
132
+ }
133
+ })
134
+
135
+ /*
136
+ * Public, $.fn methods
137
+ */
138
+
139
+ $.fn.facebox = function(settings) {
140
+ if ($(this).length == 0) return
141
+
142
+ init(settings)
143
+
144
+ function clickHandler() {
145
+ $.facebox.loading(true)
146
+
147
+ // support for rel="facebox.inline_popup" syntax, to add a class
148
+ // also supports deprecated "facebox[.inline_popup]" syntax
149
+ var klass = this.rel.match(/facebox\[?\.(\w+)\]?/)
150
+ if (klass) klass = klass[1]
151
+
152
+ fillFaceboxFromHref(this.href, klass)
153
+ return false
154
+ }
155
+
156
+ return this.bind('click.facebox', clickHandler)
157
+ }
158
+
159
+ /*
160
+ * Private methods
161
+ */
162
+
163
+ // called one time to setup facebox on this page
164
+ function init(settings) {
165
+ if ($.facebox.settings.inited) return true
166
+ else $.facebox.settings.inited = true
167
+
168
+ $(document).trigger('init.facebox')
169
+ makeCompatible()
170
+
171
+ var imageTypes = $.facebox.settings.imageTypes.join('|')
172
+ $.facebox.settings.imageTypesRegexp = new RegExp('\\.(' + imageTypes + ')(\\?.*)?$', 'i')
173
+
174
+ if (settings) $.extend($.facebox.settings, settings)
175
+ $('body').append($.facebox.settings.faceboxHtml)
176
+
177
+ var preload = [ new Image(), new Image() ]
178
+ preload[0].src = $.facebox.settings.closeImage
179
+ preload[1].src = $.facebox.settings.loadingImage
180
+
181
+ $('#facebox').find('.b:first, .bl').each(function() {
182
+ preload.push(new Image())
183
+ preload.slice(-1).src = $(this).css('background-image').replace(/url\((.+)\)/, '$1')
184
+ })
185
+
186
+ $('#facebox .close')
187
+ .click($.facebox.close)
188
+ .append('<img src="'
189
+ + $.facebox.settings.closeImage
190
+ + '" class="close_image" title="close">')
191
+ }
192
+
193
+ // getPageScroll() by quirksmode.com
194
+ function getPageScroll() {
195
+ var xScroll, yScroll;
196
+ if (self.pageYOffset) {
197
+ yScroll = self.pageYOffset;
198
+ xScroll = self.pageXOffset;
199
+ } else if (document.documentElement && document.documentElement.scrollTop) { // Explorer 6 Strict
200
+ yScroll = document.documentElement.scrollTop;
201
+ xScroll = document.documentElement.scrollLeft;
202
+ } else if (document.body) {// all other Explorers
203
+ yScroll = document.body.scrollTop;
204
+ xScroll = document.body.scrollLeft;
205
+ }
206
+ return new Array(xScroll,yScroll)
207
+ }
208
+
209
+ // Adapted from getPageSize() by quirksmode.com
210
+ function getPageHeight() {
211
+ var windowHeight
212
+ if (self.innerHeight) { // all except Explorer
213
+ windowHeight = self.innerHeight;
214
+ } else if (document.documentElement && document.documentElement.clientHeight) { // Explorer 6 Strict Mode
215
+ windowHeight = document.documentElement.clientHeight;
216
+ } else if (document.body) { // other Explorers
217
+ windowHeight = document.body.clientHeight;
218
+ }
219
+ return windowHeight
220
+ }
221
+
222
+ // Backwards compatibility
223
+ function makeCompatible() {
224
+ var $s = $.facebox.settings
225
+
226
+ $s.loadingImage = $s.loading_image || $s.loadingImage
227
+ $s.closeImage = $s.close_image || $s.closeImage
228
+ $s.imageTypes = $s.image_types || $s.imageTypes
229
+ $s.faceboxHtml = $s.facebox_html || $s.faceboxHtml
230
+ }
231
+
232
+ // Figures out what you want to display and displays it
233
+ // formats are:
234
+ // div: #id
235
+ // image: blah.extension
236
+ // ajax: anything else
237
+ function fillFaceboxFromHref(href, klass) {
238
+ // div
239
+ if (href.match(/#/)) {
240
+ var url = window.location.href.split('#')[0]
241
+ var target = href.replace(url,'')
242
+ if (target == '#') return
243
+ $.facebox.reveal($(target).html(), klass)
244
+
245
+ // image
246
+ } else if (href.match($.facebox.settings.imageTypesRegexp)) {
247
+ fillFaceboxFromImage(href, klass)
248
+ // ajax
249
+ } else {
250
+ fillFaceboxFromAjax(href, klass)
251
+ }
252
+ }
253
+
254
+ function fillFaceboxFromImage(href, klass) {
255
+ var image = new Image()
256
+ image.onload = function() {
257
+ $.facebox.reveal('<div class="image"><img src="' + image.src + '" /></div>', klass)
258
+ }
259
+ image.src = href
260
+ }
261
+
262
+ function fillFaceboxFromAjax(href, klass) {
263
+ $.facebox.jqxhr = $.get(href, function(data) { $.facebox.reveal(data, klass) })
264
+ }
265
+
266
+ function skipOverlay() {
267
+ return $.facebox.settings.overlay == false || $.facebox.settings.opacity === null
268
+ }
269
+
270
+ function showOverlay() {
271
+ if (skipOverlay()) return
272
+
273
+ if ($('#facebox_overlay').length == 0)
274
+ $("body").append('<div id="facebox_overlay" class="facebox_hide"></div>')
275
+
276
+ $('#facebox_overlay').hide().addClass("facebox_overlayBG")
277
+ .css('opacity', $.facebox.settings.opacity)
278
+ .click(function() { $(document).trigger('close.facebox') })
279
+ .fadeIn(200)
280
+ return false
281
+ }
282
+
283
+ function hideOverlay() {
284
+ if (skipOverlay()) return
285
+
286
+ $('#facebox_overlay').fadeOut(200, function(){
287
+ $("#facebox_overlay").removeClass("facebox_overlayBG")
288
+ $("#facebox_overlay").addClass("facebox_hide")
289
+ $("#facebox_overlay").remove()
290
+ })
291
+
292
+ return false
293
+ }
294
+
295
+ /*
296
+ * Bindings
297
+ */
298
+
299
+ $(document).bind('close.facebox', function() {
300
+ if ($.facebox.jqxhr) {
301
+ $.facebox.jqxhr.abort()
302
+ $.facebox.jqxhr = null
303
+ }
304
+ $(document).unbind('keydown.facebox')
305
+ $('#facebox').fadeOut(function() {
306
+ $('#facebox .content').removeClass().addClass('content')
307
+ $('#facebox .loading').remove()
308
+ $(document).trigger('afterClose.facebox')
309
+ })
310
+ hideOverlay()
311
+ })
312
+
313
+ })(jQuery);
@@ -0,0 +1,5 @@
1
+ description "Compass adaption of defunkt's facebox"
2
+
3
+ image 'facebox/loading.gif'
4
+ image 'facebox/closelabel.png'
5
+ javascript 'facebox.js'
metadata ADDED
@@ -0,0 +1,90 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: compass-facebox-plugin
3
+ version: !ruby/object:Gem::Version
4
+ hash: 31
5
+ prerelease:
6
+ segments:
7
+ - 0
8
+ - 1
9
+ - 2
10
+ version: 0.1.2
11
+ platform: ruby
12
+ authors:
13
+ - Chris Wanstrath
14
+ - Kyle Neath
15
+ - Philipp Bosch
16
+ autorequire:
17
+ bindir: bin
18
+ cert_chain: []
19
+
20
+ date: 2011-10-17 00:00:00 Z
21
+ dependencies:
22
+ - !ruby/object:Gem::Dependency
23
+ name: compass
24
+ prerelease: false
25
+ requirement: &id001 !ruby/object:Gem::Requirement
26
+ none: false
27
+ requirements:
28
+ - - ">="
29
+ - !ruby/object:Gem::Version
30
+ hash: 1923831851
31
+ segments:
32
+ - 0
33
+ - 10
34
+ - 4
35
+ - pre
36
+ - 1
37
+ version: 0.10.4.pre.1
38
+ type: :runtime
39
+ version_requirements: *id001
40
+ description: Simplified installation of facebox for Compass users
41
+ email: hello@pb.io
42
+ executables: []
43
+
44
+ extensions: []
45
+
46
+ extra_rdoc_files: []
47
+
48
+ files:
49
+ - README.md
50
+ - stylesheets/_facebox.scss
51
+ - lib/compass-facebox-plugin.rb
52
+ - templates/project/facebox/closelabel.png
53
+ - templates/project/facebox/loading.gif
54
+ - templates/project/facebox.js
55
+ - templates/project/manifest.rb
56
+ homepage: http://github.com/philippbosch/compass-facebox-plugin
57
+ licenses: []
58
+
59
+ post_install_message:
60
+ rdoc_options: []
61
+
62
+ require_paths:
63
+ - lib
64
+ required_ruby_version: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ">="
68
+ - !ruby/object:Gem::Version
69
+ hash: 3
70
+ segments:
71
+ - 0
72
+ version: "0"
73
+ required_rubygems_version: !ruby/object:Gem::Requirement
74
+ none: false
75
+ requirements:
76
+ - - ">="
77
+ - !ruby/object:Gem::Version
78
+ hash: 3
79
+ segments:
80
+ - 0
81
+ version: "0"
82
+ requirements: []
83
+
84
+ rubyforge_project:
85
+ rubygems_version: 1.8.7
86
+ signing_key:
87
+ specification_version: 3
88
+ summary: Simplified installation of facebox for Compass users
89
+ test_files: []
90
+