Blame view

js/fancyBox/source/helpers/jquery.fancybox-media.js 5.18 KB
bf807468   Alex Savenko   first commit
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
  /*!
   * Media helper for fancyBox
   * version: 1.0.6 (Fri, 14 Jun 2013)
   * @requires fancyBox v2.0 or later
   *
   * Usage:
   *     $(".fancybox").fancybox({
   *         helpers : {
   *             media: true
   *         }
   *     });
   *
   * Set custom URL parameters:
   *     $(".fancybox").fancybox({
   *         helpers : {
   *             media: {
   *                 youtube : {
   *                     params : {
   *                         autoplay : 0
   *                     }
   *                 }
   *             }
   *         }
   *     });
   *
   * Or:
   *     $(".fancybox").fancybox({,
   *         helpers : {
   *             media: true
   *         },
   *         youtube : {
   *             autoplay: 0
   *         }
   *     });
   *
   *  Supports:
   *
   *      Youtube
   *          http://www.youtube.com/watch?v=opj24KnzrWo
   *          http://www.youtube.com/embed/opj24KnzrWo
   *          http://youtu.be/opj24KnzrWo
   *			http://www.youtube-nocookie.com/embed/opj24KnzrWo
   *      Vimeo
   *          http://vimeo.com/40648169
   *          http://vimeo.com/channels/staffpicks/38843628
   *          http://vimeo.com/groups/surrealism/videos/36516384
   *          http://player.vimeo.com/video/45074303
   *      Metacafe
   *          http://www.metacafe.com/watch/7635964/dr_seuss_the_lorax_movie_trailer/
   *          http://www.metacafe.com/watch/7635964/
   *      Dailymotion
   *          http://www.dailymotion.com/video/xoytqh_dr-seuss-the-lorax-premiere_people
   *      Twitvid
   *          http://twitvid.com/QY7MD
   *      Twitpic
   *          http://twitpic.com/7p93st
   *      Instagram
   *          http://instagr.am/p/IejkuUGxQn/
   *          http://instagram.com/p/IejkuUGxQn/
   *      Google maps
   *          http://maps.google.com/maps?q=Eiffel+Tower,+Avenue+Gustave+Eiffel,+Paris,+France&t=h&z=17
   *          http://maps.google.com/?ll=48.857995,2.294297&spn=0.007666,0.021136&t=m&z=16
   *          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
   */
  (function ($) {
  	"use strict";
  
  	//Shortcut for fancyBox object
  	var F = $.fancybox,
  		format = function( url, rez, params ) {
  			params = params || '';
  
  			if ( $.type( params ) === "object" ) {
  				params = $.param(params, true);
  			}
  
  			$.each(rez, function(key, value) {
  				url = url.replace( '$' + key, value || '' );
  			});
  
  			if (params.length) {
  				url += ( url.indexOf('?') > 0 ? '&' : '?' ) + params;
  			}
  
  			return url;
  		};
  
  	//Add helper object
  	F.helpers.media = {
  		defaults : {
  			youtube : {
  				matcher : /(youtube\.com|youtu\.be|youtube-nocookie\.com)\/(watch\?v=|v\/|u\/|embed\/?)?(videoseries\?list=(.*)|[\w-]{11}|\?listType=(.*)&list=(.*)).*/i,
  				params  : {
  					autoplay    : 1,
  					autohide    : 1,
  					fs          : 1,
  					rel         : 0,
  					hd          : 1,
  					wmode       : 'opaque',
  					enablejsapi : 1
  				},
  				type : 'iframe',
  				url  : '//www.youtube.com/embed/$3'
  			},
  			vimeo : {
  				matcher : /(?:vimeo(?:pro)?.com)\/(?:[^\d]+)?(\d+)(?:.*)/,
  				params  : {
  					autoplay      : 1,
  					hd            : 1,
  					show_title    : 1,
  					show_byline   : 1,
  					show_portrait : 0,
  					fullscreen    : 1
  				},
  				type : 'iframe',
  				url  : '//player.vimeo.com/video/$1'
  			},
  			metacafe : {
  				matcher : /metacafe.com\/(?:watch|fplayer)\/([\w\-]{1,10})/,
  				params  : {
  					autoPlay : 'yes'
  				},
  				type : 'swf',
  				url  : function( rez, params, obj ) {
  					obj.swf.flashVars = 'playerVars=' + $.param( params, true );
  
  					return '//www.metacafe.com/fplayer/' + rez[1] + '/.swf';
  				}
  			},
  			dailymotion : {
  				matcher : /dailymotion.com\/video\/(.*)\/?(.*)/,
  				params  : {
  					additionalInfos : 0,
  					autoStart : 1
  				},
  				type : 'swf',
  				url  : '//www.dailymotion.com/swf/video/$1'
  			},
  			twitvid : {
  				matcher : /twitvid\.com\/([a-zA-Z0-9_\-\?\=]+)/i,
  				params  : {
  					autoplay : 0
  				},
  				type : 'iframe',
  				url  : '//www.twitvid.com/embed.php?guid=$1'
  			},
  			twitpic : {
  				matcher : /twitpic\.com\/(?!(?:place|photos|events)\/)([a-zA-Z0-9\?\=\-]+)/i,
  				type : 'image',
  				url  : '//twitpic.com/show/full/$1/'
  			},
  			instagram : {
  				matcher : /(instagr\.am|instagram\.com)\/p\/([a-zA-Z0-9_\-]+)\/?/i,
  				type : 'image',
  				url  : '//$1/p/$2/media/?size=l'
  			},
  			google_maps : {
  				matcher : /maps\.google\.([a-z]{2,3}(\.[a-z]{2})?)\/(\?ll=|maps\?)(.*)/i,
  				type : 'iframe',
  				url  : function( rez ) {
  					return '//maps.google.' + rez[1] + '/' + rez[3] + '' + rez[4] + '&output=' + (rez[4].indexOf('layer=c') > 0 ? 'svembed' : 'embed');
  				}
  			}
  		},
  
  		beforeLoad : function(opts, obj) {
  			var url   = obj.href || '',
  				type  = false,
  				what,
  				item,
  				rez,
  				params;
  
  			for (what in opts) {
  				if (opts.hasOwnProperty(what)) {
  					item = opts[ what ];
  					rez  = url.match( item.matcher );
  
  					if (rez) {
  						type   = item.type;
  						params = $.extend(true, {}, item.params, obj[ what ] || ($.isPlainObject(opts[ what ]) ? opts[ what ].params : null));
  
  						url = $.type( item.url ) === "function" ? item.url.call( this, rez, params, obj ) : format( item.url, rez, params );
  
  						break;
  					}
  				}
  			}
  
  			if (type) {
  				obj.href = url;
  				obj.type = type;
  
  				obj.autoHeight = false;
  			}
  		}
  	};
  
  }(jQuery));