PluginProbe
Embed Plus for YouTube Gallery, Livestream and Lazy Loading with Facades / trunk
Embed Plus for YouTube Gallery, Livestream and Lazy Loading with Facades vtrunk
trunk 1.0 1.1 10.0 10.1 10.2 10.3 10.4 10.5 10.6 10.7 10.8 10.9 11.0 11.0.1 11.1 11.2 11.3 11.3.1 11.4 11.5 11.6 11.7 11.7.1 11.8 All 143 releases
youtube-embed-plus / scripts / fitvids.js

fitvids.js in Embed Plus for YouTube Gallery, Livestream and Lazy Loading with Facades trunk, at scripts/fitvids.js

183 lines 6.8 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 var epdofitvids = epdofitvids || function ($)
2 {
3
4 $.fn.fitVidsEP = function (options)
5 {
6 if (_EPYT_.epresponsiveselector.constructor !== Array)
7 {
8 _EPYT_.epresponsiveselector = JSON.parse(_EPYT_.epresponsiveselector);
9 }
10 var settings = {
11 customSelector: null
12 };
13
14 if (!document.getElementById('fit-vids-style'))
15 {
16
17 var styleContainer = document.createElement('style'),
18 ref = document.getElementsByTagName('base')[0] || document.getElementsByTagName('script')[0],
19 cssStyles = '.fluid-width-video-wrapper{width:100%;position:relative;padding:0;}.fluid-width-video-wrapper iframe,.fluid-width-video-wrapper object,.fluid-width-video-wrapper embed {position:absolute;top:0;left:0;width:100%;height:100%;}';
20
21 styleContainer.className = 'fit-vids-style';
22 styleContainer.id = 'fit-vids-style';
23 styleContainer.textContent = cssStyles;
24
25 ref.parentNode.insertBefore(styleContainer, ref);
26
27 }
28
29 if (options)
30 {
31 $.extend(settings, options);
32 }
33
34 return this.each(function ()
35 {
36 // var selectors = [
37 // "iframe[src*='youtube.com']",
38 // "iframe[src*='youtube-nocookie.com']"
39 // ];
40 var selectors = _EPYT_.epresponsiveselector;
41
42 if (settings.customSelector)
43 {
44 selectors.push(settings.customSelector);
45 }
46
47 var $allVideos = $(this).find(selectors.join(','));
48 $allVideos = $allVideos.not("object object"); // SwfObj conflict patch
49
50 $allVideos.each(function ()
51 {
52 var $this = $(this);
53 if (this.tagName.toLowerCase() === 'embed' && $this.parent('object').length
54 || $this.parent('.fluid-width-video-wrapper').length
55 || $this.css('position') === 'absolute'
56 )
57 {
58 return;
59 }
60 if ($this.is('[data-origwidth]:not([width])'))
61 {
62 $this.attr('width', $this.data('origwidth'));
63 }
64 if ($this.is('[data-origheight]:not([height])'))
65 {
66 $this.attr('height', $this.data('origheight'));
67 }
68
69 var height = (this.tagName.toLowerCase() === 'object' || ($this.attr('height') && !isNaN(parseInt($this.attr('height'), 10)))) ? parseInt($this.attr('height'), 10) : $this.height(),
70 width = !isNaN(parseInt($this.attr('width'), 10)) ? parseInt($this.attr('width'), 10) : $this.width(),
71 aspectRatio = height / width;
72
73 if (!$this.attr('id'))
74 {
75 var videoID = 'fitvid' + Math.floor(Math.random() * 999999);
76 $this.attr('id', videoID);
77 }
78
79 var attrWidth = $this.attr('width');
80 var attrHeight = $this.attr('height');
81 if ($this.parent().hasClass('epyt-video-wrapper'))
82 {
83 try
84 {
85 $this.parent().addClass('fluid-width-video-wrapper').attr('style', 'padding-top: ' + (aspectRatio * 100) + "% !important;");
86 $this.removeAttr('height').removeAttr('width');
87
88 setTimeout(function ()
89 {
90 var resizeEvent = null;
91 if (typeof (Event) === 'function')
92 {
93 resizeEvent = new Event('resize');
94 }
95 else
96 {
97 resizeEvent = document.createEvent('Event');
98 resizeEvent.initEvent('resize', true, true);
99 }
100 window.dispatchEvent(resizeEvent);
101 }, 10);
102
103 setTimeout(function ()
104 {
105 if (parseInt($this.parent().css('padding-top'), 10) > $this.height() + 20)
106 {
107 $this.parent().removeClass('fluid-width-video-wrapper').css('padding-top', '');
108 $this.attr('width', attrWidth);
109 $this.attr('height', attrHeight);
110 }
111 }, 100);
112 }
113 catch (wraperr)
114 {
115 }
116 }
117 else
118 {
119 var fwvwrap = document.createElement('div');
120 fwvwrap.className = 'fluid-width-video-wrapper';
121 try
122 {
123 $this.wrap(fwvwrap).parent('.fluid-width-video-wrapper').attr('style', 'padding-top: ' + (aspectRatio * 100) + "% !important;");
124 $this.removeAttr('height').removeAttr('width');
125
126 setTimeout(function ()
127 {
128 var resizeEvent = null;
129 if (typeof (Event) === 'function')
130 {
131 resizeEvent = new Event('resize');
132 }
133 else
134 {
135 resizeEvent = document.createEvent('Event');
136 resizeEvent.initEvent('resize', true, true);
137 }
138 window.dispatchEvent(resizeEvent);
139 }, 10);
140
141 setTimeout(function ()
142 {
143 if (parseInt($this.parent().css('padding-top'), 10) > $this.height() + 20)
144 {
145 $this.parent().removeClass('fluid-width-video-wrapper').css('padding-top', '');
146 $this.attr('width', attrWidth);
147 $this.attr('height', attrHeight);
148 }
149 }, 100);
150 }
151 catch (wraperr)
152 {
153 }
154 }
155 });
156 });
157 };
158
159 $(document).ready(function ()
160 {
161 $("body").fitVidsEP();
162
163 $(document).ajaxSuccess(function (e, xhr, settings)
164 {
165 if (xhr && xhr.responseText && xhr.responseText.indexOf('<iframe ') !== -1)
166 {
167 $("body").fitVidsEP();
168 }
169 });
170 });
171 return true;
172 };
173
174 try
175 {
176 epdofitvids(window.jQuery);
177 }
178 catch (err)
179 {
180 }
181
182
183