PageSourceSearch

https://www.curacaoliqueur.com/assets/frontend/curacaoliqueur/js/vendors/jquery.youtubebackground.js

js curacaoliqueur.com collected 2026-09-24 20:26:11 UTC 9,025 bytes, 324 lines download raw bytes

1/*
2 * YoutubeBackground - A wrapper for the Youtube API - Great for fullscreen background videos or just regular videos.
3 *
4 * Licensed under the MIT license:
5 *   //www.opensource.org/licenses/mit-license.php
6 *
7 *
8 * Version:  1.0.1
9 *
10 */
11
12// Chain of Responsibility pattern. Creates base class that can be overridden.
13if (typeof Object.create !== "function") {
14  Object.create = function(obj) {
15    function F() {}
16    F.prototype = obj;
17    return new F();
18  };
19}
20
21(function($, window, document) {
22  var
23    loadAPI = function loadAPI(callback) {
24
25      // Load Youtube API
26      var tag = document.createElement('script'),
27      head = document.getElementsByTagName('head')[0];
28
29      tag.src = '//www.youtube.com/iframe_api';
30
31      head.appendChild(tag);
32
33      // Clean up Tags.
34      head = null;
35      tag = null;
36
37      iframeIsReady(callback);
38    },
39    iframeIsReady = function iframeIsReady(callback) {
40      // Listen for Gobal YT player callback
41      if (typeof YT === 'undefined' && typeof window.loadingPlayer === 'undefined') {
42        // Prevents Ready Event from being called twice
43        window.loadingPlayer = true;
44
45        
46        // Creates deferred so, other players know when to wait.
47        window.dfd = $.Deferred();
48        window.onYouTubeIframeAPIReady = function() {
49          window.onYouTubeIframeAPIReady = null;
50          window.dfd.resolve( "done" );
51          callback();
52        };
53      } else if (typeof YT === 'object')  {
54        callback();
55      } else {
56        window.dfd.done(function( name ) {
57          callback();
58        });
59      }
60    };
61
62  // YTPlayer Object
63  YTPlayer = {
64    player: null,
65
66    // Defaults
67    defaults: {
68      ratio: 16 / 9,
69      videoId: 'LSmgKRx5pBo',
70      mute: true,
71      repeat: true,
72      width: $(window).width(),
73      playButtonClass: 'YTPlayer-play',
74      pauseButtonClass: 'YTPlayer-pause',
75      muteButtonClass: 'YTPlayer-mute',
76      volumeUpClass: 'YTPlayer-volume-up',
77      volumeDownClass: 'YTPlayer-volume-down',
78      start: 0,
79      pauseOnScroll: false,
80      fitToBackground: true,
81      playerVars: {
82        modestbranding: 1,
83        autoplay: 1,
84        controls: 0,
85        showinfo: 0,
86        wmode: 'transparent',
87        branding: 0,
88        rel: 0,
89        autohide: 0
90      },
91      events: null
92    },
93
94    /**
95     * @function init
96     * Intializes YTPlayer object
97     */
98    init: function init(node, userOptions) {
99      var self = this;
100
101      self.userOptions = userOptions;
102
103      self.$body = $('body'),
104      self.$node = $(node),
105      self.$window = $(window);
106
107      // Setup event defaults with the reference to this
108      self.defaults.events = {
109        'onReady': function(e) {
110          self.onPlayerReady(e);
111
112          // setup up pause on scroll
113          if (self.options.pauseOnScroll) {
114            self.pauseOnScroll();
115          }
116
117          // Callback for when finished
118          if (typeof self.options.callback == 'function') {
119            self.options.callback.call(this);
120          }
121        },
122        'onStateChange': function(e) {
123          if (e.data === 1) {
124            self.$node.addClass('loaded');
125          } else if (e.data === 0 && self.options.repeat) { // video ended and repeat option is set true
126            self.player.seekTo(self.options.start);
127          }
128        }
129      }
130
131
132      self.options = $.extend(true, {}, self.defaults, self.userOptions);
133      self.options.height = Math.ceil(self.options.width / self.options.ratio);
134      self.ID = (new Date()).getTime();
135      self.holderID = 'YTPlayer-ID-' + self.ID;
136
137      if (self.options.fitToBackground) {
138        self.createBackgroundVideo();
139      } else {
140        self.createContainerVideo();
141      }
142      // Listen for Resize Event
143      self.$window.on('resize.YTplayer' + self.ID, function() {
144        self.resize(self);
145      });
146
147      loadAPI(self.onYouTubeIframeAPIReady.bind(self));
148
149      self.resize(self);
150
151      return self;
152    },
153
154
155    /**
156     * @function pauseOnScroll
157     * Adds window events to pause video on scroll.
158     */
159    pauseOnScroll: function pauseOnScroll() {
160      var self = this;
161      self.$window.on('scroll.YTplayer' + self.ID, function() {
162        var state = self.player.getPlayerState();
163        if (state === 1) {
164          self.player.pauseVideo();
165        }
166      });
167      self.$window.scrollStopped(function(){
168        var state = self.player.getPlayerState();
169        if (state === 2) {
170          self.player.playVideo();
171        }
172      });
173    },
174    /**
175     * @function createContainerVideo
176     * Adds HTML for video in a container
177     */
178    createContainerVideo: function createContainerVideo() {
179      var self = this;
180
181      /*jshint multistr: true */
182      var $YTPlayerString = $('<div id="ytplayer-container' + self.ID + '" >\
183                                    <div id="' + self.holderID + '" class="ytplayer-player"></div> \
184                                    </div> \
185                                    <div id="ytplayer-shield"></div>');
186
187      self.$node.append($YTPlayerString);
188      self.$YTPlayerString = $YTPlayerString;
189      $YTPlayerString = null;
190    },
191
192    /**
193     * @function createBackgroundVideo
194     * Adds HTML for video background
195     */
196    createBackgroundVideo: function createBackgroundVideo() {
197      /*jshint multistr: true */
198      var self = this,
199        $YTPlayerString = $('<div id="ytplayer-container' + self.ID + '" class="ytplayer-container background">\
200                                    <div id="' + self.holderID + '" class="ytplayer-player"></div>\
201                                    </div>\
202                                    <div id="ytplayer-shield"></div>');
203
204      self.$node.find('img').fadeOut();
205      self.$node.append($YTPlayerString);
206      self.$YTPlayerString = $YTPlayerString;
207      $YTPlayerString = null;
208    },
209
210    /**
211     * @function resize
212     * Resize event to change video size
213     */
214    resize: function resize(self) {
215      //var self = this;
216      var container = $(window);
217
218      if (!self.options.fitToBackground) {
219        container = self.$node;
220      }
221
222      var width = container.width(),
223        pWidth, // player width, to be defined
224        height = container.height(),
225        pHeight, // player height, tbd
226        $YTPlayerPlayer = $('#' + self.holderID);
227
228      // when screen aspect ratio differs from video, video must center and underlay one dimension
229      if (width / self.options.ratio < height) {
230        pWidth = Math.ceil(height * self.options.ratio); // get new player width
231        $YTPlayerPlayer.width(pWidth).height(height).css({
232          left: (width - pWidth) / 2,
233          top: 0
234        }); // player width is greater, offset left; reset top
235      } else { // new video width < window width (gap to right)
236        pHeight = Math.ceil(width / self.options.ratio); // get new player height
237        $YTPlayerPlayer.width(width).height(pHeight).css({
238          left: 0,
239          top: 0
240        }); // player height is greater, offset top; reset left
241      }
242
243      $YTPlayerPlayer = null;
244      container = null;
245    },
246
247    /**
248     * @function onYouTubeIframeAPIReady
249     * @ params {object} YTPlayer object for access to options
250     * Youtube API calls this function when the player is ready.
251     */
252    onYouTubeIframeAPIReady: function onYouTubeIframeAPIReady() {
253      var self = this;
254      self.player = new window.YT.Player(self.holderID, self.options);  
255    },
256
257    /**
258     * @function onPlayerReady
259     * @ params {event} window event from youtube player
260     */
261    onPlayerReady: function onPlayerReady(e) {
262      if (this.options.mute) {
263        e.target.mute();
264      }
265      e.target.playVideo();
266    },
267
268    /**
269     * @function getPlayer
270     * returns youtube player
271     */
272    getPlayer: function getPlayer() {
273      return this.player;
274    },
275
276    /**
277     * @function destroy
278     * destroys all!
279     */
280    destroy: function destroy() {
281      var self = this;
282
283      self.$node
284        .removeData('yt-init')
285        .removeData('ytPlayer')
286        .removeClass('loaded');
287
288      self.$YTPlayerString.remove();
289
290      $(window).off('resize.YTplayer' + self.ID);
291      $(window).off('scroll.YTplayer' + self.ID);
292      self.$body = null;
293      self.$node = null;
294      self.$YTPlayerString = null;
295      self.player.destroy();
296      self.player = null;
297    }
298  };
299
300  // Scroll Stopped event.
301  $.fn.scrollStopped = function(callback) {
302    var $this = $(this), self = this;
303    $this.scroll(function(){
304      if ($this.data('scrollTimeout')) {
305        clearTimeout($this.data('scrollTimeout'));
306      }
307      $this.data('scrollTimeout', setTimeout(callback,250,self));
308    });
309  };
310
311  // Create plugin
312  $.fn.YTPlayer = function(options) {
313
314    return this.each(function() {
315      var el = this;
316
317      $(el).data("yt-init", true);
318      var player = Object.create(YTPlayer);
319      player.init(el, options);
320      $.data(el, "ytPlayer", player);
321    });
322  };
323
324})(jQuery, window, document);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.