summaryrefslogtreecommitdiffstats
path: root/docs/pt/js/blueimp-gallery-youtube.js
diff options
context:
space:
mode:
Diffstat (limited to 'docs/pt/js/blueimp-gallery-youtube.js')
-rw-r--r--docs/pt/js/blueimp-gallery-youtube.js223
1 files changed, 223 insertions, 0 deletions
diff --git a/docs/pt/js/blueimp-gallery-youtube.js b/docs/pt/js/blueimp-gallery-youtube.js
new file mode 100644
index 0000000..e81258c
--- /dev/null
+++ b/docs/pt/js/blueimp-gallery-youtube.js
@@ -0,0 +1,223 @@
+/*
+ * blueimp Gallery YouTube Video Factory JS
+ * https://github.com/blueimp/Gallery
+ *
+ * Copyright 2013, Sebastian Tschan
+ * https://blueimp.net
+ *
+ * Licensed under the MIT license:
+ * https://opensource.org/licenses/MIT
+ */
+
+/* global define, YT */
+
+;(function (factory) {
+ 'use strict'
+ if (typeof define === 'function' && define.amd) {
+ // Register as an anonymous AMD module:
+ define(['./blueimp-helper', './blueimp-gallery-video'], factory)
+ } else {
+ // Browser globals:
+ factory(window.blueimp.helper || window.jQuery, window.blueimp.Gallery)
+ }
+})(function ($, Gallery) {
+ 'use strict'
+
+ if (!window.postMessage) {
+ return Gallery
+ }
+
+ var galleryPrototype = Gallery.prototype
+
+ $.extend(galleryPrototype.options, {
+ // The list object property (or data attribute) with the YouTube video id:
+ youTubeVideoIdProperty: 'youtube',
+ // Optional object with parameters passed to the YouTube video player:
+ // https://developers.google.com/youtube/player_parameters
+ youTubePlayerVars: {
+ wmode: 'transparent'
+ },
+ // Require a click on the native YouTube player for the initial playback:
+ youTubeClickToPlay: false
+ })
+
+ var textFactory =
+ galleryPrototype.textFactory || galleryPrototype.imageFactory
+ var YouTubePlayer = function (videoId, playerVars, clickToPlay) {
+ this.videoId = videoId
+ this.playerVars = playerVars
+ this.clickToPlay = clickToPlay
+ this.element = document.createElement('div')
+ this.listeners = {}
+ }
+
+ $.extend(YouTubePlayer.prototype, {
+ on: function (type, func) {
+ this.listeners[type] = func
+ return this
+ },
+
+ loadAPI: function () {
+ var that = this
+ var onYouTubeIframeAPIReady = window.onYouTubeIframeAPIReady
+ var apiUrl = '//www.youtube.com/iframe_api'
+ var scriptTags = document.getElementsByTagName('script')
+ var i = scriptTags.length
+ var scriptTag
+ window.onYouTubeIframeAPIReady = function () {
+ if (onYouTubeIframeAPIReady) {
+ onYouTubeIframeAPIReady.apply(this)
+ }
+ if (that.playOnReady) {
+ that.play()
+ }
+ }
+ while (i) {
+ i -= 1
+ if (scriptTags[i].src === apiUrl) {
+ return
+ }
+ }
+ scriptTag = document.createElement('script')
+ scriptTag.src = apiUrl
+ scriptTags[0].parentNode.insertBefore(scriptTag, scriptTags[0])
+ },
+
+ onReady: function () {
+ this.ready = true
+ if (this.playOnReady) {
+ this.play()
+ }
+ },
+
+ onPlaying: function () {
+ if (this.playStatus < 2) {
+ this.listeners.playing()
+ this.playStatus = 2
+ }
+ },
+
+ onPause: function () {
+ this.listeners.pause()
+ delete this.playStatus
+ },
+
+ onStateChange: function (event) {
+ window.clearTimeout(this.pauseTimeout)
+ switch (event.data) {
+ case YT.PlayerState.PLAYING:
+ this.hasPlayed = true
+ this.onPlaying()
+ break
+ case YT.PlayerState.UNSTARTED:
+ case YT.PlayerState.PAUSED:
+ // YouTube sends an unstarted event if pause is triggered before the
+ // video has started.
+ // YouTube sends a pause event when seeking.
+ // In both cases, we initiate a pause in a timeout that gets cleared
+ // if followed by another event within the timeout window.
+ this.pauseTimeout = galleryPrototype.setTimeout.call(
+ this,
+ this.onPause,
+ null,
+ 500
+ )
+ break
+ case YT.PlayerState.ENDED:
+ this.onPause()
+ break
+ }
+ },
+
+ onError: function (event) {
+ this.listeners.error(event)
+ },
+
+ play: function () {
+ var that = this
+ if (!this.playStatus) {
+ this.listeners.play()
+ this.playStatus = 1
+ }
+ if (this.ready) {
+ if (
+ !this.hasPlayed &&
+ (this.clickToPlay ||
+ (window.navigator &&
+ /iP(hone|od|ad)/.test(window.navigator.platform)))
+ ) {
+ // Manually trigger the playing callback if clickToPlay
+ // is enabled and to workaround a limitation in iOS,
+ // which requires synchronous user interaction to start
+ // the video playback:
+ this.onPlaying()
+ } else {
+ this.player.playVideo()
+ }
+ } else {
+ this.playOnReady = true
+ if (!(window.YT && YT.Player)) {
+ this.loadAPI()
+ } else if (!this.player) {
+ this.player = new YT.Player(this.element, {
+ videoId: this.videoId,
+ playerVars: this.playerVars,
+ events: {
+ onReady: function () {
+ that.onReady()
+ },
+ onStateChange: function (event) {
+ that.onStateChange(event)
+ },
+ onError: function (event) {
+ that.onError(event)
+ }
+ }
+ })
+ }
+ }
+ },
+
+ pause: function () {
+ if (this.ready) {
+ this.player.pauseVideo()
+ } else if (this.playStatus) {
+ delete this.playOnReady
+ this.listeners.pause()
+ delete this.playStatus
+ }
+ }
+ })
+
+ $.extend(galleryPrototype, {
+ YouTubePlayer: YouTubePlayer,
+
+ textFactory: function (obj, callback) {
+ var options = this.options
+ var videoId = this.getItemProperty(obj, options.youTubeVideoIdProperty)
+ if (videoId) {
+ if (this.getItemProperty(obj, options.urlProperty) === undefined) {
+ obj[options.urlProperty] = '//www.youtube.com/watch?v=' + videoId
+ }
+ if (
+ this.getItemProperty(obj, options.videoPosterProperty) === undefined
+ ) {
+ obj[options.videoPosterProperty] =
+ '//img.youtube.com/vi/' + videoId + '/maxresdefault.jpg'
+ }
+ return this.videoFactory(
+ obj,
+ callback,
+ new YouTubePlayer(
+ videoId,
+ options.youTubePlayerVars,
+ options.youTubeClickToPlay
+ )
+ )
+ }
+ return textFactory.call(this, obj, callback)
+ }
+ })
+
+ return Gallery
+})