[SPIP][PLUGINS] v3.0-->v3.2
[lhc/web/www.git] / www / plugins-dist / medias / lib / mejs / renderers / vimeo.js
1 /*!
2 * MediaElement.js
3 * http://www.mediaelementjs.com/
4 *
5 * Wrapper that mimics native HTML5 MediaElement (audio and video)
6 * using a variety of technologies (pure JavaScript, Flash, iframe)
7 *
8 * Copyright 2010-2017, John Dyer (http://j.hn/)
9 * License: MIT
10 *
11 */(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(_dereq_,module,exports){
12 'use strict';
13
14 var VimeoApi = {
15
16 promise: null,
17
18 load: function load(settings) {
19
20 if (typeof Vimeo !== 'undefined') {
21 VimeoApi._createPlayer(settings);
22 } else {
23 VimeoApi.promise = VimeoApi.promise || mejs.Utils.loadScript('https://player.vimeo.com/api/player.js');
24 VimeoApi.promise.then(function () {
25 VimeoApi._createPlayer(settings);
26 });
27 }
28 },
29
30 _createPlayer: function _createPlayer(settings) {
31 var player = new Vimeo.Player(settings.iframe);
32 window['__ready__' + settings.id](player);
33 },
34
35 getVimeoId: function getVimeoId(url) {
36 if (url === undefined || url === null) {
37 return null;
38 }
39
40 var parts = url.split('?');
41 url = parts[0];
42 return parseInt(url.substring(url.lastIndexOf('/') + 1));
43 }
44 };
45
46 var vimeoIframeRenderer = {
47
48 name: 'vimeo_iframe',
49 options: {
50 prefix: 'vimeo_iframe'
51 },
52
53 canPlayType: function canPlayType(type) {
54 return ~['video/vimeo', 'video/x-vimeo'].indexOf(type.toLowerCase());
55 },
56
57 create: function create(mediaElement, options, mediaFiles) {
58 var apiStack = [],
59 vimeo = {},
60 readyState = 4;
61
62 var paused = true,
63 volume = 1,
64 oldVolume = volume,
65 currentTime = 0,
66 bufferedTime = 0,
67 ended = false,
68 duration = 0,
69 vimeoPlayer = null,
70 url = '';
71
72 vimeo.options = options;
73 vimeo.id = mediaElement.id + '_' + options.prefix;
74 vimeo.mediaElement = mediaElement;
75
76 var errorHandler = function errorHandler(error, target) {
77 var event = mejs.Utils.createEvent('error', target);
78 event.message = error.name + ': ' + error.message;
79 mediaElement.dispatchEvent(event);
80 };
81
82 var props = mejs.html5media.properties,
83 assignGettersSetters = function assignGettersSetters(propName) {
84
85 var capName = '' + propName.substring(0, 1).toUpperCase() + propName.substring(1);
86
87 vimeo['get' + capName] = function () {
88 if (vimeoPlayer !== null) {
89 var value = null;
90
91 switch (propName) {
92 case 'currentTime':
93 return currentTime;
94
95 case 'duration':
96 return duration;
97
98 case 'volume':
99 return volume;
100 case 'muted':
101 return volume === 0;
102 case 'paused':
103 return paused;
104 case 'ended':
105 return ended;
106
107 case 'src':
108 vimeoPlayer.getVideoUrl().then(function (_url) {
109 url = _url;
110 });
111
112 return url;
113 case 'buffered':
114 return {
115 start: function start() {
116 return 0;
117 },
118 end: function end() {
119 return bufferedTime * duration;
120 },
121 length: 1
122 };
123 case 'readyState':
124 return readyState;
125 }
126 return value;
127 } else {
128 return null;
129 }
130 };
131
132 vimeo['set' + capName] = function (value) {
133 if (vimeoPlayer !== null) {
134 switch (propName) {
135 case 'src':
136 var _url2 = typeof value === 'string' ? value : value[0].src,
137 videoId = VimeoApi.getVimeoId(_url2);
138
139 vimeoPlayer.loadVideo(videoId).then(function () {
140 if (mediaElement.originalNode.autoplay) {
141 vimeoPlayer.play();
142 }
143 }).catch(function (error) {
144 errorHandler(error, vimeo);
145 });
146 break;
147 case 'currentTime':
148 vimeoPlayer.setCurrentTime(value).then(function () {
149 currentTime = value;
150 setTimeout(function () {
151 var event = mejs.Utils.createEvent('timeupdate', vimeo);
152 mediaElement.dispatchEvent(event);
153 }, 50);
154 }).catch(function (error) {
155 errorHandler(error, vimeo);
156 });
157 break;
158 case 'volume':
159 vimeoPlayer.setVolume(value).then(function () {
160 volume = value;
161 oldVolume = volume;
162 setTimeout(function () {
163 var event = mejs.Utils.createEvent('volumechange', vimeo);
164 mediaElement.dispatchEvent(event);
165 }, 50);
166 }).catch(function (error) {
167 errorHandler(error, vimeo);
168 });
169 break;
170 case 'loop':
171 vimeoPlayer.setLoop(value).catch(function (error) {
172 errorHandler(error, vimeo);
173 });
174 break;
175 case 'muted':
176 if (value) {
177 vimeoPlayer.setVolume(0).then(function () {
178 volume = 0;
179 setTimeout(function () {
180 var event = mejs.Utils.createEvent('volumechange', vimeo);
181 mediaElement.dispatchEvent(event);
182 }, 50);
183 }).catch(function (error) {
184 errorHandler(error, vimeo);
185 });
186 } else {
187 vimeoPlayer.setVolume(oldVolume).then(function () {
188 volume = oldVolume;
189 setTimeout(function () {
190 var event = mejs.Utils.createEvent('volumechange', vimeo);
191 mediaElement.dispatchEvent(event);
192 }, 50);
193 }).catch(function (error) {
194 errorHandler(error, vimeo);
195 });
196 }
197 break;
198 case 'readyState':
199 var event = mejs.Utils.createEvent('canplay', vimeo);
200 mediaElement.dispatchEvent(event);
201 break;
202 default:
203
204 break;
205 }
206 } else {
207 apiStack.push({ type: 'set', propName: propName, value: value });
208 }
209 };
210 };
211
212 for (var i = 0, total = props.length; i < total; i++) {
213 assignGettersSetters(props[i]);
214 }
215
216 var methods = mejs.html5media.methods,
217 assignMethods = function assignMethods(methodName) {
218 vimeo[methodName] = function () {
219 if (vimeoPlayer !== null) {
220 switch (methodName) {
221 case 'play':
222 paused = false;
223 return vimeoPlayer.play();
224 case 'pause':
225 paused = true;
226 return vimeoPlayer.pause();
227 case 'load':
228 return null;
229 }
230 } else {
231 apiStack.push({ type: 'call', methodName: methodName });
232 }
233 };
234 };
235
236 for (var _i = 0, _total = methods.length; _i < _total; _i++) {
237 assignMethods(methods[_i]);
238 }
239
240 window['__ready__' + vimeo.id] = function (_vimeoPlayer) {
241
242 mediaElement.vimeoPlayer = vimeoPlayer = _vimeoPlayer;
243
244 if (apiStack.length) {
245 for (var _i2 = 0, _total2 = apiStack.length; _i2 < _total2; _i2++) {
246 var stackItem = apiStack[_i2];
247
248 if (stackItem.type === 'set') {
249 var propName = stackItem.propName,
250 capName = '' + propName.substring(0, 1).toUpperCase() + propName.substring(1);
251
252 vimeo['set' + capName](stackItem.value);
253 } else if (stackItem.type === 'call') {
254 vimeo[stackItem.methodName]();
255 }
256 }
257 }
258
259 var vimeoIframe = document.getElementById(vimeo.id);
260 var events = void 0;
261
262 events = ['mouseover', 'mouseout'];
263
264 var assignEvents = function assignEvents(e) {
265 var event = mejs.Utils.createEvent(e.type, vimeo);
266 mediaElement.dispatchEvent(event);
267 };
268
269 for (var _i3 = 0, _total3 = events.length; _i3 < _total3; _i3++) {
270 vimeoIframe.addEventListener(events[_i3], assignEvents, false);
271 }
272
273 vimeoPlayer.on('loaded', function () {
274 vimeoPlayer.getDuration().then(function (loadProgress) {
275 duration = loadProgress;
276 if (duration > 0) {
277 bufferedTime = duration * loadProgress;
278 if (mediaElement.originalNode.autoplay) {
279 paused = false;
280 ended = false;
281 var event = mejs.Utils.createEvent('play', vimeo);
282 mediaElement.dispatchEvent(event);
283 }
284 }
285 }).catch(function (error) {
286 errorHandler(error, vimeo);
287 });
288 });
289 vimeoPlayer.on('progress', function () {
290 vimeoPlayer.getDuration().then(function (loadProgress) {
291 duration = loadProgress;
292
293 if (duration > 0) {
294 bufferedTime = duration * loadProgress;
295 if (mediaElement.originalNode.autoplay) {
296 var initEvent = mejs.Utils.createEvent('play', vimeo);
297 mediaElement.dispatchEvent(initEvent);
298 }
299 }
300
301 var event = mejs.Utils.createEvent('progress', vimeo);
302 mediaElement.dispatchEvent(event);
303 }).catch(function (error) {
304 errorHandler(error, vimeo);
305 });
306 });
307 vimeoPlayer.on('timeupdate', function () {
308 vimeoPlayer.getCurrentTime().then(function (seconds) {
309 currentTime = seconds;
310
311 var event = mejs.Utils.createEvent('timeupdate', vimeo);
312 mediaElement.dispatchEvent(event);
313 }).catch(function (error) {
314 errorHandler(error, vimeo);
315 });
316 });
317 vimeoPlayer.on('play', function () {
318 paused = false;
319 ended = false;
320 var event = mejs.Utils.createEvent('play', vimeo);
321 mediaElement.dispatchEvent(event);
322 });
323 vimeoPlayer.on('pause', function () {
324 paused = true;
325 ended = false;
326
327 var event = mejs.Utils.createEvent('pause', vimeo);
328 mediaElement.dispatchEvent(event);
329 });
330 vimeoPlayer.on('ended', function () {
331 paused = false;
332 ended = true;
333
334 var event = mejs.Utils.createEvent('ended', vimeo);
335 mediaElement.dispatchEvent(event);
336 });
337
338 events = ['rendererready', 'loadedmetadata', 'loadeddata', 'canplay'];
339
340 for (var _i4 = 0, _total4 = events.length; _i4 < _total4; _i4++) {
341 var event = mejs.Utils.createEvent(events[_i4], vimeo);
342 mediaElement.dispatchEvent(event);
343 }
344 };
345
346 var height = mediaElement.originalNode.height,
347 width = mediaElement.originalNode.width,
348 vimeoContainer = document.createElement('iframe'),
349 standardUrl = 'https://player.vimeo.com/video/' + VimeoApi.getVimeoId(mediaFiles[0].src);
350
351 var queryArgs = ~mediaFiles[0].src.indexOf('?') ? '?' + mediaFiles[0].src.slice(mediaFiles[0].src.indexOf('?') + 1) : '';
352 if (queryArgs && mediaElement.originalNode.autoplay && queryArgs.indexOf('autoplay') === -1) {
353 queryArgs += '&autoplay=1';
354 }
355 if (queryArgs && mediaElement.originalNode.loop && queryArgs.indexOf('loop') === -1) {
356 queryArgs += '&loop=1';
357 }
358
359 vimeoContainer.setAttribute('id', vimeo.id);
360 vimeoContainer.setAttribute('width', width);
361 vimeoContainer.setAttribute('height', height);
362 vimeoContainer.setAttribute('frameBorder', '0');
363 vimeoContainer.setAttribute('src', '' + standardUrl + queryArgs);
364 vimeoContainer.setAttribute('webkitallowfullscreen', '');
365 vimeoContainer.setAttribute('mozallowfullscreen', '');
366 vimeoContainer.setAttribute('allowfullscreen', '');
367
368 mediaElement.originalNode.parentNode.insertBefore(vimeoContainer, mediaElement.originalNode);
369 mediaElement.originalNode.style.display = 'none';
370
371 VimeoApi.load({
372 iframe: vimeoContainer,
373 id: vimeo.id
374 });
375
376 vimeo.hide = function () {
377 vimeo.pause();
378 if (vimeoPlayer) {
379 vimeoContainer.style.display = 'none';
380 }
381 };
382 vimeo.setSize = function (width, height) {
383 vimeoContainer.setAttribute('width', width);
384 vimeoContainer.setAttribute('height', height);
385 };
386 vimeo.show = function () {
387 if (vimeoPlayer) {
388 vimeoContainer.style.display = '';
389 }
390 };
391
392 vimeo.destroy = function () {};
393
394 return vimeo;
395 }
396 };
397
398 mejs.Utils.typeChecks.push(function (url) {
399 return (/(\/\/player\.vimeo|vimeo\.com)/i.test(url) ? 'video/x-vimeo' : null
400 );
401 });
402
403 mejs.Renderers.add(vimeoIframeRenderer);
404
405 },{}]},{},[1]);