fancybox2-rails 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source 'http://rubygems.org'
2
+
3
+ gemspec
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2011 Chris Mytton
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,61 @@
1
+ fancybox2-rails
2
+ ==============
3
+
4
+ Use [fancybox](http://www.fancyapps.com/fancybox/) with rails 3.1 asset pipeline.
5
+
6
+ ## Installation
7
+
8
+ This gem vendors jquery fancybox 2 for Rails 3.1 and greater. The files
9
+ will be added to the asset pipeline and available for you to use.
10
+
11
+ First add the following lines to your applications `Gemfile`:
12
+
13
+ ``` ruby
14
+ gem 'jquery-rails'
15
+ gem 'fancybox2-rails'
16
+ ```
17
+
18
+ Then run `bundle install` to update your application's bundle.
19
+
20
+ Now you need to edit your `app/assets/javascripts/application.js`
21
+ file and add the following line:
22
+
23
+ ``` javascript
24
+ //= require jquery
25
+ //= require fancybox
26
+ ```
27
+
28
+ And then edit your `app/assets/stylesheets/application.css` file to
29
+ look something like:
30
+
31
+ ``` css
32
+ /*
33
+ *= require_self
34
+ *= require fancybox
35
+ *= require_tree .
36
+ */
37
+ ```
38
+
39
+ That's it!
40
+
41
+ ## Usage
42
+
43
+ With the gem installed and included in your asset manifests, you can now
44
+ use fancybox as you normally would.
45
+
46
+ ``` javascript
47
+ $(document).ready(function() {
48
+ $("a.fancybox").fancybox();
49
+ });
50
+ ```
51
+
52
+ ## More information
53
+
54
+ * [Contributors](https://github.com/hecticjeff/fancybox-rails/contributors)
55
+ * [DHH's RailsConf 2011 talk on the rails 3.1 asset pipeline](http://www.youtube.com/watch?v=cGdCI2HhfAU)
56
+
57
+ Copyright (c) Chris Mytton
58
+
59
+ ## License
60
+
61
+ [Fancybox 2 license](http://www.fancyapps.com/fancybox/#license)
@@ -0,0 +1,65 @@
1
+ # encoding: UTF-8
2
+ begin
3
+ require 'bundler/setup'
4
+ rescue LoadError
5
+ puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
6
+ end
7
+
8
+ # For checking remote fancybox version.
9
+ require 'nokogiri'
10
+ require 'open-uri'
11
+
12
+ # Path to atom feed with fancybox updates.
13
+ $fancybox_feed = "http://code.google.com/feeds/p/fancybox/downloads/basic"
14
+
15
+ Bundler::GemHelper.install_tasks
16
+
17
+ require 'rake/testtask'
18
+
19
+ Rake::TestTask.new(:test) do |t|
20
+ t.libs << 'lib'
21
+ t.libs << 'test'
22
+ t.pattern = 'test/**/*_test.rb'
23
+ t.verbose = false
24
+ end
25
+
26
+ task :default => :test
27
+
28
+ namespace :fancybox do
29
+ desc "Get the local and remote fancybox versions."
30
+ task :version do
31
+ local = local_version
32
+ remote = remote_version
33
+
34
+ puts "local: v#{local}"
35
+ puts "remote: v#{remote}"
36
+
37
+ if local != remote
38
+ warn "\nthere is a newer remote version available"
39
+ end
40
+ end
41
+ end
42
+
43
+ # Get the current local version of the vendored fancybox library.
44
+ #
45
+ # Returns the String representing the local version.
46
+ def local_version
47
+ `grep ' * Version' vendor/assets/javascripts/jquery.fancybox.js | \
48
+ cut -d ' ' -f 4`.chomp
49
+ end
50
+
51
+ # Get the current version of the remote version of the library. Uses
52
+ # nokogiri and open-uri to grab the atom feed from google code, then
53
+ # parses the version out of the title.
54
+ #
55
+ # Returns the String representing the remote version.
56
+ def remote_version
57
+ doc = Nokogiri::HTML(open($fancybox_feed))
58
+ doc.css('entry:first title').text.match(/\d\.\d\.\d/)[0]
59
+ end
60
+
61
+ task :travis do
62
+ puts "Starting to run rake travis"
63
+ system("export DISPLAY=:99.0 && bundle exec rake")
64
+ raise "rake travis failed!" unless $?.exitstatus == 0
65
+ end
@@ -0,0 +1,3 @@
1
+ if defined? Rails && Rails::VERSION::MAJOR == 3 && Rails::VERSION::MINOR >= 1
2
+ require 'fancybox2/rails'
3
+ end
@@ -0,0 +1,2 @@
1
+ require 'fancybox2/rails/engine'
2
+ require 'fancybox2/rails/version'
@@ -0,0 +1,6 @@
1
+ module Fancybox2
2
+ module Rails
3
+ class Engine < ::Rails::Engine
4
+ end
5
+ end
6
+ end
@@ -0,0 +1,6 @@
1
+ module Fancybox2
2
+ module Rails
3
+ VERSION = "0.2.1"
4
+ FANCYBOX_VERSION = "2.1"
5
+ end
6
+ end
@@ -0,0 +1,4 @@
1
+ //= require jquery.fancybox
2
+ //= require jquery.fancybox-buttons
3
+ //= require jquery.fancybox-thumbs
4
+ //= require jquery.fancybox-media
@@ -0,0 +1,120 @@
1
+ /*!
2
+ * Buttons helper for fancyBox
3
+ * version: 1.0.3
4
+ * @requires fancyBox v2.0 or later
5
+ *
6
+ * Usage:
7
+ * $(".fancybox").fancybox({
8
+ * helpers : {
9
+ * buttons: {
10
+ * position : 'top'
11
+ * }
12
+ * }
13
+ * });
14
+ *
15
+ * Options:
16
+ * tpl - HTML template
17
+ * position - 'top' or 'bottom'
18
+ *
19
+ */
20
+ (function ($) {
21
+ //Shortcut for fancyBox object
22
+ var F = $.fancybox;
23
+
24
+ //Add helper object
25
+ F.helpers.buttons = {
26
+ tpl : '<div id="fancybox-buttons"><ul><li><a class="btnPrev" title="Previous" href="javascript:;"></a></li><li><a class="btnPlay" title="Start slideshow" href="javascript:;"></a></li><li><a class="btnNext" title="Next" href="javascript:;"></a></li><li><a class="btnToggle" title="Toggle size" href="javascript:;"></a></li><li><a class="btnClose" title="Close" href="javascript:jQuery.fancybox.close();"></a></li></ul></div>',
27
+ list : null,
28
+ buttons: null,
29
+
30
+ beforeLoad: function (opts, obj) {
31
+ //Remove self if gallery do not have at least two items
32
+
33
+ if (opts.skipSingle && obj.group.length < 2) {
34
+ obj.helpers.buttons = false;
35
+ obj.closeBtn = true;
36
+
37
+ return;
38
+ }
39
+
40
+ //Increase top margin to give space for buttons
41
+ obj.margin[ opts.position === 'bottom' ? 2 : 0 ] += 30;
42
+ },
43
+
44
+ onPlayStart: function () {
45
+ if (this.buttons) {
46
+ this.buttons.play.attr('title', 'Pause slideshow').addClass('btnPlayOn');
47
+ }
48
+ },
49
+
50
+ onPlayEnd: function () {
51
+ if (this.buttons) {
52
+ this.buttons.play.attr('title', 'Start slideshow').removeClass('btnPlayOn');
53
+ }
54
+ },
55
+
56
+ afterShow: function (opts, obj) {
57
+ var buttons = this.buttons;
58
+
59
+ if (!buttons) {
60
+ this.list = $(opts.tpl || this.tpl).addClass(opts.position || 'top').appendTo('body');
61
+
62
+ buttons = {
63
+ prev : this.list.find('.btnPrev').click( F.prev ),
64
+ next : this.list.find('.btnNext').click( F.next ),
65
+ play : this.list.find('.btnPlay').click( F.play ),
66
+ toggle : this.list.find('.btnToggle').click( F.toggle )
67
+ }
68
+ }
69
+
70
+ //Prev
71
+ if (obj.index > 0 || obj.loop) {
72
+ buttons.prev.removeClass('btnDisabled');
73
+ } else {
74
+ buttons.prev.addClass('btnDisabled');
75
+ }
76
+
77
+ //Next / Play
78
+ if (obj.loop || obj.index < obj.group.length - 1) {
79
+ buttons.next.removeClass('btnDisabled');
80
+ buttons.play.removeClass('btnDisabled');
81
+
82
+ } else {
83
+ buttons.next.addClass('btnDisabled');
84
+ buttons.play.addClass('btnDisabled');
85
+ }
86
+
87
+ this.buttons = buttons;
88
+
89
+ this.onUpdate(opts, obj);
90
+ },
91
+
92
+ onUpdate: function (opts, obj) {
93
+ var toggle;
94
+
95
+ if (!this.buttons) {
96
+ return;
97
+ }
98
+
99
+ toggle = this.buttons.toggle.removeClass('btnDisabled btnToggleOn');
100
+
101
+ //Size toggle button
102
+ if (obj.canShrink) {
103
+ toggle.addClass('btnToggleOn');
104
+
105
+ } else if (!obj.canExpand) {
106
+ toggle.addClass('btnDisabled');
107
+ }
108
+ },
109
+
110
+ beforeClose: function () {
111
+ if (this.list) {
112
+ this.list.remove();
113
+ }
114
+
115
+ this.list = null;
116
+ this.buttons = null;
117
+ }
118
+ };
119
+
120
+ }(jQuery));
@@ -0,0 +1,196 @@
1
+ /*!
2
+ * Media helper for fancyBox
3
+ * version: 1.0.3 (Mon, 13 Aug 2012)
4
+ * @requires fancyBox v2.0 or later
5
+ *
6
+ * Usage:
7
+ * $(".fancybox").fancybox({
8
+ * helpers : {
9
+ * media: true
10
+ * }
11
+ * });
12
+ *
13
+ * Set custom URL parameters:
14
+ * $(".fancybox").fancybox({
15
+ * helpers : {
16
+ * media: {
17
+ * youtube : {
18
+ * params : {
19
+ * autoplay : 0
20
+ * }
21
+ * }
22
+ * }
23
+ * }
24
+ * });
25
+ *
26
+ * Or:
27
+ * $(".fancybox").fancybox({,
28
+ * helpers : {
29
+ * media: true
30
+ * },
31
+ * youtube : {
32
+ * autoplay: 0
33
+ * }
34
+ * });
35
+ *
36
+ * Supports:
37
+ *
38
+ * Youtube
39
+ * http://www.youtube.com/watch?v=opj24KnzrWo
40
+ * http://youtu.be/opj24KnzrWo
41
+ * Vimeo
42
+ * http://vimeo.com/40648169
43
+ * http://vimeo.com/channels/staffpicks/38843628
44
+ * http://vimeo.com/groups/surrealism/videos/36516384
45
+ * http://player.vimeo.com/video/45074303
46
+ * Metacafe
47
+ * http://www.metacafe.com/watch/7635964/dr_seuss_the_lorax_movie_trailer/
48
+ * http://www.metacafe.com/watch/7635964/
49
+ * Dailymotion
50
+ * http://www.dailymotion.com/video/xoytqh_dr-seuss-the-lorax-premiere_people
51
+ * Twitvid
52
+ * http://twitvid.com/QY7MD
53
+ * Twitpic
54
+ * http://twitpic.com/7p93st
55
+ * Instagram
56
+ * http://instagr.am/p/IejkuUGxQn/
57
+ * http://instagram.com/p/IejkuUGxQn/
58
+ * Google maps
59
+ * http://maps.google.com/maps?q=Eiffel+Tower,+Avenue+Gustave+Eiffel,+Paris,+France&t=h&z=17
60
+ * http://maps.google.com/?ll=48.857995,2.294297&spn=0.007666,0.021136&t=m&z=16
61
+ * http://maps.google.com/?ll=48.859463,2.292626&spn=0.000965,0.002642&t=m&z=19&layer=c&cbll=48.859524,2.292532&panoid=YJ0lq28OOy3VT2IqIuVY0g&cbp=12,151.58,,0,-15.56
62
+ */
63
+ (function ($) {
64
+ "use strict";
65
+
66
+ //Shortcut for fancyBox object
67
+ var F = $.fancybox,
68
+ format = function( url, rez, params ) {
69
+ params = params || '';
70
+
71
+ if ( $.type( params ) === "object" ) {
72
+ params = $.param(params, true);
73
+ }
74
+
75
+ $.each(rez, function(key, value) {
76
+ url = url.replace( '$' + key, value || '' );
77
+ });
78
+
79
+ if (params.length) {
80
+ url += ( url.indexOf('?') > 0 ? '&' : '?' ) + params;
81
+ }
82
+
83
+ return url;
84
+ };
85
+
86
+ //Add helper object
87
+ F.helpers.media = {
88
+ types : {
89
+ youtube : {
90
+ matcher : /(youtube\.com|youtu\.be)\/(watch\?v=|v\/|u\/|embed)?([\w-]{11}|\?listType=(.*)&list=(.*)).*/i,
91
+ params : {
92
+ autoplay : 1,
93
+ autohide : 1,
94
+ fs : 1,
95
+ rel : 0,
96
+ hd : 1,
97
+ wmode : 'opaque',
98
+ enablejsapi : 1
99
+ },
100
+ type : 'iframe',
101
+ url : '//www.youtube.com/embed/$3'
102
+ },
103
+ vimeo : {
104
+ matcher : /(?:vimeo(?:pro)?.com)\/(?:[^\d]+)?(\d+)(?:.*)/,
105
+ params : {
106
+ autoplay : 1,
107
+ hd : 1,
108
+ show_title : 1,
109
+ show_byline : 1,
110
+ show_portrait : 0,
111
+ color : '',
112
+ fullscreen : 1
113
+ },
114
+ type : 'iframe',
115
+ url : '//player.vimeo.com/video/$1'
116
+ },
117
+ metacafe : {
118
+ matcher : /metacafe.com\/(?:watch|fplayer)\/([\w\-]{1,10})/,
119
+ params : {
120
+ autoPlay : 'yes'
121
+ },
122
+ type : 'swf',
123
+ url : function( rez, params, obj ) {
124
+ obj.swf.flashVars = 'playerVars=' + $.param( params, true );
125
+
126
+ return '//www.metacafe.com/fplayer/' + rez[1] + '/.swf';
127
+ }
128
+ },
129
+ dailymotion : {
130
+ matcher : /dailymotion.com\/video\/(.*)\/?(.*)/,
131
+ params : {
132
+ additionalInfos : 0,
133
+ autoStart : 1
134
+ },
135
+ type : 'swf',
136
+ url : '//www.dailymotion.com/swf/video/$1'
137
+ },
138
+ twitvid : {
139
+ matcher : /twitvid\.com\/([a-zA-Z0-9_\-\?\=]+)/i,
140
+ params : {
141
+ autoplay : 0
142
+ },
143
+ type : 'iframe',
144
+ url : '//www.twitvid.com/embed.php?guid=$1'
145
+ },
146
+ twitpic : {
147
+ matcher : /twitpic\.com\/(?!(?:place|photos|events)\/)([a-zA-Z0-9\?\=\-]+)/i,
148
+ type : 'image',
149
+ url : '//twitpic.com/show/full/$1/'
150
+ },
151
+ instagram : {
152
+ matcher : /(instagr\.am|instagram\.com)\/p\/([a-zA-Z0-9_\-]+)\/?/i,
153
+ type : 'image',
154
+ url : '//$1/p/$2/media/'
155
+ },
156
+ google_maps : {
157
+ matcher : /maps\.google\.([a-z]{2,3}(\.[a-z]{2})?)\/(\?ll=|maps\?)(.*)/i,
158
+ type : 'iframe',
159
+ url : function( rez ) {
160
+ return '//maps.google.' + rez[1] + '/' + rez[3] + '' + rez[4] + '&output=' + (rez[4].indexOf('layer=c') > 0 ? 'svembed' : 'embed');
161
+ }
162
+ }
163
+ },
164
+
165
+ beforeLoad : function(opts, obj) {
166
+ var url = obj.href || '',
167
+ type = false,
168
+ what,
169
+ item,
170
+ rez,
171
+ params;
172
+
173
+ for (what in this.types) {
174
+ item = this.types[ what ];
175
+ rez = url.match( item.matcher );
176
+
177
+ if (rez) {
178
+ type = item.type;
179
+ params = $.extend(true, {}, item.params, obj[ what ] || ($.isPlainObject(opts[ what ]) ? opts[ what ].params : null));
180
+
181
+ url = $.type( item.url ) === "function" ? item.url.call( this, rez, params, obj ) : format( item.url, rez, params );
182
+
183
+ break;
184
+ }
185
+ }
186
+
187
+ if (type) {
188
+ obj.href = url;
189
+ obj.type = type;
190
+
191
+ obj.autoHeight = false;
192
+ }
193
+ }
194
+ };
195
+
196
+ }(jQuery));