jquery_mb_extruder 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (35) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +22 -0
  3. data/Gemfile +4 -0
  4. data/LICENSE.txt +22 -0
  5. data/README.md +61 -0
  6. data/Rakefile +2 -0
  7. data/jquery_mb_extruder.gemspec +24 -0
  8. data/lib/jquery_mb_extruder.rb +7 -0
  9. data/lib/jquery_mb_extruder/version.rb +3 -0
  10. data/vendor/assets/images/black_op_30.png +0 -0
  11. data/vendor/assets/images/blue_op_75.png +0 -0
  12. data/vendor/assets/images/browser.png +0 -0
  13. data/vendor/assets/images/extruder_bgnd.png +0 -0
  14. data/vendor/assets/images/extruder_blank.png +0 -0
  15. data/vendor/assets/images/extruder_bottom.png +0 -0
  16. data/vendor/assets/images/extruder_flap.png +0 -0
  17. data/vendor/assets/images/extruder_header_bgnd.png +0 -0
  18. data/vendor/assets/images/extruder_left.png +0 -0
  19. data/vendor/assets/images/extruder_left_flap.png +0 -0
  20. data/vendor/assets/images/extruder_voice.png +0 -0
  21. data/vendor/assets/images/extruder_voiceHover.png +0 -0
  22. data/vendor/assets/images/fuzz.gif +0 -0
  23. data/vendor/assets/images/optionsPanel.png +0 -0
  24. data/vendor/assets/images/orange_op_75.png +0 -0
  25. data/vendor/assets/images/red_op_50.png +0 -0
  26. data/vendor/assets/images/settingsBtn.png +0 -0
  27. data/vendor/assets/javascripts/jquery.hoverIntent.min.js +21 -0
  28. data/vendor/assets/javascripts/jquery.mb.YTPlayer.js +1022 -0
  29. data/vendor/assets/javascripts/jquery.mb.extruder.jquery.json +42 -0
  30. data/vendor/assets/javascripts/jquery.mb.flipText.js +120 -0
  31. data/vendor/assets/javascripts/mbExtruder.js +521 -0
  32. data/vendor/assets/stylesheets/YTPlayer.css +240 -0
  33. data/vendor/assets/stylesheets/mbExtruder.css +21 -0
  34. data/vendor/assets/stylesheets/mbExtruder.less +311 -0
  35. metadata +120 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 1c549f557b0cc345f6da8cdc86ee765e2afbfd35
4
+ data.tar.gz: fe5ee7f6f14e9e13136b2df31fe571528f53b7da
5
+ SHA512:
6
+ metadata.gz: 6204b87a80c658cecb1d2c087b7ccd330b2ff0ae9137d5089f344ff0455574325daa1b593e27b4bb233f03b1c40c1f6c8bd65179a9eb49cdbd9d20cf9fb31f29
7
+ data.tar.gz: 2f7eacd67a4db7bcf99342e553a77800f492c9d9b42548175e8d84405d4f32d3871934e6a2b3f39c27011cb48b41829148e7441a14be31f085c0d5b562ede3d4
data/.gitignore ADDED
@@ -0,0 +1,22 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
18
+ *.bundle
19
+ *.so
20
+ *.o
21
+ *.a
22
+ mkmf.log
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in jquery_mb_extruder.gemspec
4
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2014 Taylor Mitchell
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,61 @@
1
+ # JQuery MB Extruder - Rails Gem
2
+
3
+ This is a Rails gem that will install the [JQuery MB Extruder](http://pupunzi.com/#mb.components/mb.extruder/extruder.html) in your application.
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ gem 'jquery_mb_extruder'
10
+
11
+ And then execute:
12
+
13
+ $ bundle install
14
+
15
+ Or install it yourself as:
16
+
17
+ $ gem install jquery_mb_extruder
18
+
19
+ ## Usage
20
+
21
+ # mb.extruder.readme
22
+
23
+ __An open source jQuery component to easily build a top or left sliding panel.__
24
+
25
+ ![mb.extruder](http://pupunzi.com/gitHubImg/mb.extruder.jpg)
26
+
27
+ ## [go to the demo](http://pupunzi.com/#mb.components/mb.extruder/extruder.html)
28
+ ## [go to the doc](http://wiki.github.com/pupunzi/jquery.mb.extruder/)
29
+ ## [go to the blog](http://pupunzi.open-lab.com/mb-jquery-components/jquery-mb-extruder/)
30
+
31
+
32
+ [jquery.mb.components](http://pupunzi.com/), another way of thinking the web
33
+
34
+
35
+ #### CSS
36
+
37
+ Add this line at the end of your application.css
38
+
39
+ *= require jquery_mb_extruder
40
+
41
+ #### Javascript
42
+
43
+
44
+ You will need to add global jquery_mb_extruder object in your application.js:
45
+
46
+ //= require jquery_mb_extruder
47
+
48
+ #### Thanks
49
+
50
+ Thanks to the makers of mb.extruder!
51
+
52
+ Scy0846
53
+
54
+
55
+ ## Contributing
56
+
57
+ 1. Fork it
58
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
59
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
60
+ 4. Push to the branch (`git push origin my-new-feature`)
61
+ 5. Create new Pull Request
data/Rakefile ADDED
@@ -0,0 +1,2 @@
1
+ require "bundler/gem_tasks"
2
+
@@ -0,0 +1,24 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'jquery_mb_extruder/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "jquery_mb_extruder"
8
+ spec.version = JqueryMbExtruder::VERSION
9
+ spec.authors = ["Taylor Mitchell"]
10
+ spec.email = ["scy0846@gmail.com"]
11
+ spec.summary = %q{JQuery MB Extruder Framework for Rails.}
12
+ spec.description = %q{You can find more details on how to use this at http://pupunzi.com/#mb.components/mb.extruder/extruder.html. While this gem is not my creation, I did not create the jquery.mb.extruder framework.}
13
+ spec.homepage = "https://github.com/scy0846/jquery_mb_extruder"
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files -z`.split("\x0")
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_runtime_dependency "jquery-rails"
22
+ spec.add_development_dependency "bundler", "~> 1.6"
23
+ spec.add_development_dependency "rake"
24
+ end
@@ -0,0 +1,7 @@
1
+ require "jquery_mb_extruder/version"
2
+
3
+ module JqueryMbExtruder
4
+ # TO-DO: Your code goes HERE
5
+ class Engine < ::Rails::Engine
6
+ end
7
+ end
@@ -0,0 +1,3 @@
1
+ module JqueryMbExtruder
2
+ VERSION = "0.0.1"
3
+ end
Binary file
Binary file
Binary file
Binary file
@@ -0,0 +1,21 @@
1
+ /*
2
+ * ******************************************************************************
3
+ * jquery.mb.components
4
+ * file: jquery.hoverIntent.min.js
5
+ *
6
+ * Copyright (c) 2001-2014. Matteo Bicocchi (Pupunzi);
7
+ * Open lab srl, Firenze - Italy
8
+ * email: matteo@open-lab.com
9
+ * site: http://pupunzi.com
10
+ * blog: http://pupunzi.open-lab.com
11
+ * http://open-lab.com
12
+ *
13
+ * Licences: MIT, GPL
14
+ * http://www.opensource.org/licenses/mit-license.php
15
+ * http://www.gnu.org/licenses/gpl.html
16
+ *
17
+ * last modified: 07/01/14 22.50
18
+ * *****************************************************************************
19
+ */
20
+
21
+ (function(a){a.fn.hoverIntent=function(k,j){var l={sensitivity:7,interval:100,timeout:0};l=a.extend(l,j?{over:k,out:j}:k);var n,m,h,d;var e=function(f){n=f.pageX;m=f.pageY};var c=function(g,f){f.hoverIntent_t=clearTimeout(f.hoverIntent_t);if((Math.abs(h-n)+Math.abs(d-m))<l.sensitivity){a(f).unbind("mousemove",e);f.hoverIntent_s=1;return l.over.apply(f,[g])}else{h=n;d=m;f.hoverIntent_t=setTimeout(function(){c(g,f)},l.interval)}};var i=function(g,f){f.hoverIntent_t=clearTimeout(f.hoverIntent_t);f.hoverIntent_s=0;return l.out.apply(f,[g])};var b=function(q){var o=(q.type=="mouseover"?q.fromElement:q.toElement)||q.relatedTarget;while(o&&o!=this){try{o=o.parentNode}catch(q){o=this}}if(o==this){return false}var g=jQuery.extend({},q);var f=this;if(f.hoverIntent_t){f.hoverIntent_t=clearTimeout(f.hoverIntent_t)}if(q.type=="mouseover"){h=g.pageX;d=g.pageY;a(f).bind("mousemove",e);if(f.hoverIntent_s!=1){f.hoverIntent_t=setTimeout(function(){c(g,f)},l.interval)}}else{a(f).unbind("mousemove",e);if(f.hoverIntent_s==1){f.hoverIntent_t=setTimeout(function(){i(g,f)},l.timeout)}}};return this.mouseover(b).mouseout(b)}})(jQuery);
@@ -0,0 +1,1022 @@
1
+ /*
2
+ * ******************************************************************************
3
+ * jquery.mb.components
4
+ * file: jquery.mb.YTPlayer.js
5
+ *
6
+ * Copyright (c) 2001-2014. Matteo Bicocchi (Pupunzi);
7
+ * Open lab srl, Firenze - Italy
8
+ * email: matteo@open-lab.com
9
+ * site: http://pupunzi.com
10
+ * blog: http://pupunzi.open-lab.com
11
+ * http://open-lab.com
12
+ *
13
+ * Licences: MIT, GPL
14
+ * http://www.opensource.org/licenses/mit-license.php
15
+ * http://www.gnu.org/licenses/gpl.html
16
+ *
17
+ * last modified: 07/01/14 22.50
18
+ * *****************************************************************************
19
+ */
20
+
21
+ /*Browser detection patch*/
22
+ (function(){if(!(8>jQuery.fn.jquery.split(".")[1])){jQuery.browser={};jQuery.browser.mozilla=!1;jQuery.browser.webkit=!1;jQuery.browser.opera=!1;jQuery.browser.msie=!1;var a=navigator.userAgent;jQuery.browser.name=navigator.appName;jQuery.browser.fullVersion=""+parseFloat(navigator.appVersion);jQuery.browser.majorVersion=parseInt(navigator.appVersion,10);var c,b;if(-1!=(b=a.indexOf("Opera"))){if(jQuery.browser.opera=!0,jQuery.browser.name="Opera",jQuery.browser.fullVersion=a.substring(b+6),-1!=(b= a.indexOf("Version")))jQuery.browser.fullVersion=a.substring(b+8)}else if(-1!=(b=a.indexOf("MSIE")))jQuery.browser.msie=!0,jQuery.browser.name="Microsoft Internet Explorer",jQuery.browser.fullVersion=a.substring(b+5);else if(-1!=(b=a.indexOf("Chrome")))jQuery.browser.webkit=!0,jQuery.browser.name="Chrome",jQuery.browser.fullVersion=a.substring(b+7);else if(-1!=(b=a.indexOf("Safari"))){if(jQuery.browser.webkit=!0,jQuery.browser.name="Safari",jQuery.browser.fullVersion=a.substring(b+7),-1!=(b=a.indexOf("Version")))jQuery.browser.fullVersion= a.substring(b+8)}else if(-1!=(b=a.indexOf("Firefox")))jQuery.browser.mozilla=!0,jQuery.browser.name="Firefox",jQuery.browser.fullVersion=a.substring(b+8);else if((c=a.lastIndexOf(" ")+1)<(b=a.lastIndexOf("/")))jQuery.browser.name=a.substring(c,b),jQuery.browser.fullVersion=a.substring(b+1),jQuery.browser.name.toLowerCase()==jQuery.browser.name.toUpperCase()&&(jQuery.browser.name=navigator.appName);if(-1!=(a=jQuery.browser.fullVersion.indexOf(";")))jQuery.browser.fullVersion=jQuery.browser.fullVersion.substring(0, a);if(-1!=(a=jQuery.browser.fullVersion.indexOf(" ")))jQuery.browser.fullVersion=jQuery.browser.fullVersion.substring(0,a);jQuery.browser.majorVersion=parseInt(""+jQuery.browser.fullVersion,10);isNaN(jQuery.browser.majorVersion)&&(jQuery.browser.fullVersion=""+parseFloat(navigator.appVersion),jQuery.browser.majorVersion=parseInt(navigator.appVersion,10));jQuery.browser.version=jQuery.browser.majorVersion}})(jQuery);
23
+
24
+ /*******************************************************************************
25
+ * jQuery.mb.components: jquery.mb.CSSAnimate
26
+ ******************************************************************************/
27
+
28
+ jQuery.fn.CSSAnimate=function(a,b,k,l,f){return this.each(function(){var c=jQuery(this);if(0!==c.length&&a){"function"==typeof b&&(f=b,b=jQuery.fx.speeds._default);"function"==typeof k&&(f=k,k=0);"function"==typeof l&&(f=l,l="cubic-bezier(0.65,0.03,0.36,0.72)");if("string"==typeof b)for(var j in jQuery.fx.speeds)if(b==j){b=jQuery.fx.speeds[j];break}else b=null;if(jQuery.support.transition){var e="",h="transitionEnd";jQuery.browser.webkit?(e="-webkit-",h="webkitTransitionEnd"):jQuery.browser.mozilla? (e="-moz-",h="transitionend"):jQuery.browser.opera?(e="-o-",h="otransitionend"):jQuery.browser.msie&&(e="-ms-",h="msTransitionEnd");j=[];for(d in a){var g=d;"transform"===g&&(g=e+"transform",a[g]=a[d],delete a[d]);"transform-origin"===g&&(g=e+"transform-origin",a[g]=a[d],delete a[d]);j.push(g);c.css(g)||c.css(g,0)}d=j.join(",");c.css(e+"transition-property",d);c.css(e+"transition-duration",b+"ms");c.css(e+"transition-delay",k+"ms");c.css(e+"transition-timing-function",l);c.css(e+"backface-visibility", "hidden");setTimeout(function(){c.css(a)},0);setTimeout(function(){c.called||!f?c.called=!1:f()},b+20);c.on(h,function(a){c.off(h);c.css(e+"transition","");a.stopPropagation();"function"==typeof f&&(c.called=!0,f());return!1})}else{for(var d in a)"transform"===d&&delete a[d],"transform-origin"===d&&delete a[d],"auto"===a[d]&&delete a[d];if(!f||"string"===typeof f)f="linear";c.animate(a,b,f)}}})}; jQuery.fn.CSSAnimateStop=function(){var a="",b="transitionEnd";jQuery.browser.webkit?(a="-webkit-",b="webkitTransitionEnd"):jQuery.browser.mozilla?(a="-moz-",b="transitionend"):jQuery.browser.opera?(a="-o-",b="otransitionend"):jQuery.browser.msie&&(a="-ms-",b="msTransitionEnd");jQuery(this).css(a+"transition","");jQuery(this).off(b)}; jQuery.support.transition=function(){var a=(document.body||document.documentElement).style;return void 0!==a.transition||void 0!==a.WebkitTransition||void 0!==a.MozTransition||void 0!==a.MsTransition||void 0!==a.OTransition}();
29
+
30
+ /*
31
+ * Metadata - jQuery plugin for parsing metadata from elements
32
+ * Copyright (c) 2006 John Resig, Yehuda Katz, Jörn Zaefferer, Paul McLanahan
33
+ * Dual licensed under the MIT and GPL licenses:
34
+ * http://www.opensource.org/licenses/mit-license.php
35
+ * http://www.gnu.org/licenses/gpl.html
36
+ */
37
+
38
+ (function(c){c.extend({metadata:{defaults:{type:"class",name:"metadata",cre:/({.*})/,single:"metadata"},setType:function(b,c){this.defaults.type=b;this.defaults.name=c},get:function(b,f){var d=c.extend({},this.defaults,f);d.single.length||(d.single="metadata");var a=c.data(b,d.single);if(a)return a;a="{}";if("class"==d.type){var e=d.cre.exec(b.className);e&&(a=e[1])}else if("elem"==d.type){if(!b.getElementsByTagName)return;e=b.getElementsByTagName(d.name);e.length&&(a=c.trim(e[0].innerHTML))}else void 0!= b.getAttribute&&(e=b.getAttribute(d.name))&&(a=e);0>a.indexOf("{")&&(a="{"+a+"}");a=eval("("+a+")");c.data(b,d.single,a);return a}}});c.fn.metadata=function(b){return c.metadata.get(this[0],b)}})(jQuery);
39
+
40
+ /***************************************************************************************/
41
+ if(typeof ytp != "object")
42
+ ytp ={};
43
+
44
+ String.prototype.getVideoID=function(){
45
+ var movieURL;
46
+ if(this.substr(0,16)=="http://youtu.be/"){
47
+ movieURL= this.replace("http://youtu.be/","");
48
+ }else if(this.indexOf("http")>-1){
49
+ movieURL = this.match(/[\\?&]v=([^&#]*)/)[1];
50
+ }else{
51
+ movieURL = this
52
+ }
53
+ return movieURL;
54
+ };
55
+
56
+ var isDevice = 'ontouchstart' in window;
57
+
58
+ function onYouTubePlayerAPIReady() {
59
+ if(ytp.YTAPIReady)
60
+ return;
61
+
62
+ ytp.YTAPIReady=true;
63
+ jQuery(document).trigger("YTAPIReady");
64
+ }
65
+
66
+ (function (jQuery) {
67
+
68
+ jQuery.mbYTPlayer = {
69
+ name : "jquery.mb.YTPlayer",
70
+ version : "2.5.7",
71
+ author : "Matteo Bicocchi",
72
+ defaults : {
73
+ containment : "body",
74
+ ratio : "16/9",
75
+ showYTLogo : false,
76
+ videoURL : null,
77
+ startAt : 0,
78
+ autoPlay : true,
79
+ vol :100,
80
+ addRaster : false,
81
+ opacity : 1,
82
+ quality : "default", //or “small”, “medium”, “large”, “hd720”, “hd1080”, “highres”
83
+ mute : false,
84
+ loop : true,
85
+ showControls : true,
86
+ showAnnotations : false,
87
+ printUrl : true,
88
+ stopMovieOnClick :false,
89
+ realfullscreen :true,
90
+ onReady : function (player) {},
91
+ onStateChange : function (player) {},
92
+ onPlaybackQualityChange: function (player) {},
93
+ onError : function (player) {}
94
+ },
95
+ //todo: use @font-face instead
96
+ controls : {
97
+ play : "P",
98
+ pause : "p",
99
+ mute : "M",
100
+ unmute: "A",
101
+ onlyYT: "O",
102
+ showSite: "R",
103
+ ytLogo: "Y"
104
+ },
105
+ rasterImg : "images/raster.png",
106
+ rasterImgRetina: "images/raster@2x.png",
107
+
108
+ buildPlayer: function (options) {
109
+
110
+ return this.each(function () {
111
+ var YTPlayer = this;
112
+ var $YTPlayer = jQuery(YTPlayer);
113
+
114
+ YTPlayer.loop = 0;
115
+ YTPlayer.opt = {};
116
+ var property = {};
117
+
118
+ $YTPlayer.addClass("mb_YTVPlayer");
119
+
120
+ if (jQuery.metadata) {
121
+ jQuery.metadata.setType("class");
122
+ property = $YTPlayer.metadata();
123
+ }
124
+
125
+ if (jQuery.isEmptyObject(property))
126
+ property = $YTPlayer.data("property") && typeof $YTPlayer.data("property") == "string" ? eval('(' + $YTPlayer.data("property") + ')') : $YTPlayer.data("property");
127
+
128
+ jQuery.extend(YTPlayer.opt, jQuery.mbYTPlayer.defaults, options, property);
129
+
130
+ var canGoFullscreen = !(jQuery.browser.msie || jQuery.browser.opera || self.location.href != top.location.href);
131
+
132
+ if(!canGoFullscreen)
133
+ YTPlayer.opt.realfullscreen = false;
134
+
135
+ if (!$YTPlayer.attr("id"))
136
+ $YTPlayer.attr("id", "id_" + new Date().getTime());
137
+
138
+ YTPlayer.opt.id = YTPlayer.id;
139
+ YTPlayer.isAlone = false;
140
+
141
+ /*to maintain back compatibility
142
+ * ***********************************************************/
143
+ if (YTPlayer.opt.isBgndMovie)
144
+ YTPlayer.opt.containment = "body";
145
+
146
+ if (YTPlayer.opt.isBgndMovie && YTPlayer.opt.isBgndMovie.mute != undefined)
147
+ YTPlayer.opt.mute = YTPlayer.opt.isBgndMovie.mute;
148
+ /************************************************************/
149
+
150
+ if (!YTPlayer.opt.videoURL)
151
+ YTPlayer.opt.videoURL = $YTPlayer.attr("href");
152
+
153
+ var playerID = "mbYTP_" + YTPlayer.id;
154
+ var videoID = this.opt.videoURL ? this.opt.videoURL.getVideoID() : $YTPlayer.attr("href") ? $YTPlayer.attr("href").getVideoID() : false;
155
+ YTPlayer.videoID = videoID;
156
+
157
+
158
+ YTPlayer.opt.showAnnotations = (YTPlayer.opt.showAnnotations) ? '0' : '3';
159
+ var playerVars = { 'autoplay': 0, 'modestbranding': 1, 'controls': 0, 'showinfo': 0, 'rel': 0, 'enablejsapi': 1, 'version': 3, 'playerapiid': playerID, 'origin': '*', 'allowfullscreen': true, 'wmode': "transparent", 'iv_load_policy': YTPlayer.opt.showAnnotations};
160
+
161
+ var canPlayHTML5 = false;
162
+ var v = document.createElement('video');
163
+ if (v.canPlayType ) { // && !jQuery.browser.msie
164
+ canPlayHTML5 = true;
165
+ }
166
+
167
+ if (canPlayHTML5) // && !(YTPlayer.isPlayList && jQuery.browser.msie)
168
+ jQuery.extend(playerVars, {'html5': 1});
169
+
170
+ if(jQuery.browser.msie && jQuery.browser.version < 9 ){
171
+ this.opt.opacity = 1;
172
+ }
173
+
174
+ var playerBox = jQuery("<div/>").attr("id", playerID).addClass("playerBox");
175
+ var overlay = jQuery("<div/>").css({position: "absolute", top: 0, left: 0, width: "100%", height: "100%"}).addClass("YTPOverlay"); //YTPlayer.isBackground ? "fixed" :
176
+
177
+ YTPlayer.opt.containment = YTPlayer.opt.containment == "self" ? jQuery(this) : jQuery(YTPlayer.opt.containment);
178
+
179
+ YTPlayer.isBackground = YTPlayer.opt.containment.get(0).tagName.toLowerCase() == "body";
180
+
181
+ if (isDevice && YTPlayer.isBackground){
182
+ $YTPlayer.hide();
183
+ return;
184
+ }
185
+
186
+ if (YTPlayer.opt.addRaster) {
187
+ var retina = (window.retina || window.devicePixelRatio > 1);
188
+ overlay.addClass(retina ? "raster retina" : "raster");
189
+ }else{
190
+ overlay.removeClass("raster retina");
191
+ }
192
+
193
+ var wrapper = jQuery("<div/>").addClass("mbYTP_wrapper").attr("id", "wrapper_" + playerID);
194
+ wrapper.css({position: "absolute", zIndex: 0, minWidth: "100%", minHeight: "100%",left:0, top:0, overflow: "hidden", opacity: 0});
195
+ playerBox.css({position: "absolute", zIndex: 0, width: "100%", height: "100%", top: 0, left: 0, overflow: "hidden", opacity: this.opt.opacity});
196
+ wrapper.append(playerBox);
197
+
198
+ if (YTPlayer.isBackground && ytp.isInit)
199
+ return;
200
+
201
+ YTPlayer.opt.containment.children().each(function () {
202
+ if (jQuery(this).css("position") == "static")
203
+ jQuery(this).css("position", "relative");
204
+ });
205
+
206
+ if (YTPlayer.isBackground) {
207
+ jQuery("body").css({position: "relative", minWidth: "100%", minHeight: "100%", zIndex: 1, boxSizing: "border-box"});
208
+ wrapper.css({position: "fixed", top: 0, left: 0, zIndex: 0});
209
+ $YTPlayer.hide();
210
+ YTPlayer.opt.containment.prepend(wrapper);
211
+ } else
212
+ YTPlayer.opt.containment.prepend(wrapper);
213
+
214
+ YTPlayer.wrapper = wrapper;
215
+
216
+ playerBox.css({opacity: 1});
217
+
218
+ if (!isDevice){
219
+ playerBox.after(overlay);
220
+ YTPlayer.overlay = overlay;
221
+ }
222
+
223
+
224
+ if(!YTPlayer.isBackground){
225
+ overlay.on("mouseenter",function(){
226
+ $YTPlayer.find(".mb_YTVPBar").addClass("visible");
227
+ }).on("mouseleave",function(){
228
+ $YTPlayer.find(".mb_YTVPBar").removeClass("visible");
229
+ })
230
+ }
231
+
232
+ // add YT API to the header
233
+ //jQuery("#YTAPI").remove();
234
+
235
+ if(!ytp.YTAPIReady){
236
+ var tag = document.createElement('script');
237
+ tag.src = "http://www.youtube.com/player_api";
238
+ tag.id = "YTAPI";
239
+ var firstScriptTag = document.getElementsByTagName('script')[0];
240
+ firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
241
+ }else{
242
+ setTimeout(function(){
243
+ jQuery(document).trigger("YTAPIReady");
244
+ }, 200)
245
+ }
246
+
247
+ jQuery(document).on("YTAPIReady", function () {
248
+
249
+ if ((YTPlayer.isBackground && ytp.isInit) || YTPlayer.opt.isInit)
250
+ return;
251
+
252
+ if(YTPlayer.isBackground && YTPlayer.opt.stopMovieOnClick)
253
+ jQuery(document).off("mousedown.ytplayer").on("mousedown,.ytplayer",function(e){
254
+ var target = jQuery(e.target);
255
+ if(target.is("a") || target.parents().is("a")){
256
+ $YTPlayer.pauseYTP();
257
+ }
258
+ });
259
+
260
+ if (YTPlayer.isBackground)
261
+ ytp.isInit = true;
262
+
263
+ YTPlayer.opt.isInit = true;
264
+
265
+ YTPlayer.opt.vol = YTPlayer.opt.vol ? YTPlayer.opt.vol : 100;
266
+
267
+ jQuery.mbYTPlayer.getDataFromFeed(YTPlayer.videoID, YTPlayer);
268
+
269
+ jQuery(document).on("getVideoInfo_" + YTPlayer.opt.id, function () {
270
+
271
+ if(isDevice && !YTPlayer.isBackground){
272
+ new YT.Player(playerID, {
273
+ height: '100%',
274
+ width: '100%',
275
+ videoId: YTPlayer.videoID,
276
+ events: {
277
+ 'onReady': function(){
278
+ $YTPlayer.optimizeDisplay();
279
+ playerBox.css({opacity: 1});
280
+ YTPlayer.wrapper.css({opacity: 1});
281
+ $YTPlayer.optimizeDisplay();
282
+ },
283
+ 'onStateChange': function(){}
284
+ }
285
+ });
286
+ return;
287
+ }
288
+
289
+ new YT.Player(playerID, {
290
+ videoId : YTPlayer.videoID.toString(),
291
+ playerVars: playerVars,
292
+ events : {
293
+ 'onReady': function (event) {
294
+
295
+ YTPlayer.player = event.target;
296
+
297
+ if(YTPlayer.isReady)
298
+ return;
299
+
300
+ YTPlayer.isReady = true;
301
+
302
+ YTPlayer.playerEl = YTPlayer.player.getIframe();
303
+ $YTPlayer.optimizeDisplay();
304
+
305
+ YTPlayer.videoID = videoID;
306
+
307
+ jQuery(window).on("resize.YTP",function () {
308
+ $YTPlayer.optimizeDisplay();
309
+ });
310
+
311
+ if (YTPlayer.opt.showControls)
312
+ jQuery(YTPlayer).buildYTPControls();
313
+
314
+ //YTPlayer.player.setPlaybackQuality(YTPlayer.opt.quality);
315
+
316
+ if (YTPlayer.opt.startAt > 0)
317
+ YTPlayer.player.seekTo(parseFloat(YTPlayer.opt.startAt), true);
318
+
319
+ if (!YTPlayer.opt.autoPlay) {
320
+
321
+ $YTPlayer.stopYTP();
322
+ YTPlayer.checkForStartAt = setInterval(function () {
323
+ if (YTPlayer.player.getCurrentTime() >= YTPlayer.opt.startAt) {
324
+ clearInterval(YTPlayer.checkForStartAt);
325
+ $YTPlayer.pauseYTP();
326
+
327
+ if (YTPlayer.opt.mute) {
328
+ jQuery(YTPlayer).muteYTPVolume();
329
+ }else{
330
+ jQuery(YTPlayer).unmuteYTPVolume();
331
+ }
332
+ }
333
+ }, 1);
334
+
335
+ } else {
336
+ $YTPlayer.playYTP();
337
+ YTPlayer.player.setVolume(YTPlayer.opt.vol);
338
+
339
+ if (YTPlayer.opt.mute) {
340
+ jQuery(YTPlayer).muteYTPVolume();
341
+ }else{
342
+ jQuery(YTPlayer).unmuteYTPVolume();
343
+ }
344
+ }
345
+
346
+ if (typeof YTPlayer.opt.onReady == "function")
347
+ YTPlayer.opt.onReady($YTPlayer);
348
+
349
+ jQuery.mbYTPlayer.checkForState(YTPlayer);
350
+
351
+ },
352
+
353
+ 'onStateChange' : function (event) {
354
+
355
+ /*
356
+ -1 (unstarted)
357
+ 0 (ended)
358
+ 1 (playing)
359
+ 2 (paused)
360
+ 3 (buffering)
361
+ 5 (video cued).
362
+ */
363
+
364
+ if (typeof event.target.getPlayerState != "function")
365
+ return;
366
+ var state = event.target.getPlayerState();
367
+
368
+ if (typeof YTPlayer.opt.onStateChange == "function")
369
+ YTPlayer.opt.onStateChange($YTPlayer, state);
370
+
371
+ var playerBox = jQuery(YTPlayer.playerEl);
372
+ var controls = jQuery("#controlBar_" + YTPlayer.id);
373
+
374
+ var data = YTPlayer.opt;
375
+
376
+ if (state == 0) { // end
377
+ if (YTPlayer.state == state)
378
+ return;
379
+
380
+ YTPlayer.state = state;
381
+ YTPlayer.player.pauseVideo();
382
+ var startAt = YTPlayer.opt.startAt ? YTPlayer.opt.startAt : 1;
383
+
384
+ if (data.loop) {
385
+ YTPlayer.wrapper.css({opacity: 0});
386
+ $YTPlayer.playYTP();
387
+ YTPlayer.player.seekTo(startAt,true);
388
+
389
+ } else if (!YTPlayer.isBackground) {
390
+ YTPlayer.player.seekTo(startAt, true);
391
+ $YTPlayer.playYTP();
392
+ setTimeout(function () {
393
+ $YTPlayer.pauseYTP();
394
+ }, 10);
395
+ }
396
+
397
+ if (!data.loop && YTPlayer.isBackground)
398
+ YTPlayer.wrapper.CSSAnimate({opacity: 0}, 2000);
399
+ else if (data.loop) {
400
+ YTPlayer.wrapper.css({opacity: 0});
401
+ YTPlayer.loop++;
402
+ }
403
+
404
+ controls.find(".mb_YTVPPlaypause").html(jQuery.mbYTPlayer.controls.play);
405
+ jQuery(YTPlayer).trigger("YTPEnd");
406
+ }
407
+
408
+ if (state == 3) { // buffering
409
+ if (YTPlayer.state == state)
410
+ return;
411
+ YTPlayer.state = state;
412
+ controls.find(".mb_YTVPPlaypause").html(jQuery.mbYTPlayer.controls.play);
413
+ jQuery(YTPlayer).trigger("YTPBuffering");
414
+ }
415
+
416
+ if (state == -1) { // unstarted
417
+ if (YTPlayer.state == state)
418
+ return;
419
+ YTPlayer.state = state;
420
+
421
+ YTPlayer.wrapper.css({opacity:0});
422
+
423
+ jQuery(YTPlayer).trigger("YTPUnstarted");
424
+ }
425
+
426
+ if (state == 1) { // play
427
+ if (YTPlayer.state == state)
428
+ return;
429
+ YTPlayer.state = state;
430
+ YTPlayer.player.setPlaybackQuality(YTPlayer.opt.quality);
431
+
432
+ if(YTPlayer.opt.mute){
433
+ $YTPlayer.muteYTPVolume();
434
+ YTPlayer.opt.mute = false;
435
+ }
436
+
437
+ if (YTPlayer.opt.autoPlay && YTPlayer.loop == 0) {
438
+ YTPlayer.wrapper.CSSAnimate({opacity: YTPlayer.isAlone ? 1 : YTPlayer.opt.opacity}, 2000);
439
+ } else if(!YTPlayer.isBackground) {
440
+ YTPlayer.wrapper.css({opacity: YTPlayer.isAlone ? 1 : YTPlayer.opt.opacity});
441
+ $YTPlayer.css({background: "rgba(0,0,0,0.5)"});
442
+ }else{
443
+ setTimeout(function () {
444
+ jQuery(YTPlayer.playerEl).CSSAnimate({opacity: 1}, 2000);
445
+ YTPlayer.wrapper.CSSAnimate({opacity: YTPlayer.opt.opacity}, 2000);
446
+ }, 1000);
447
+ }
448
+
449
+ controls.find(".mb_YTVPPlaypause").html(jQuery.mbYTPlayer.controls.pause);
450
+
451
+ jQuery(YTPlayer).trigger("YTPStart");
452
+ }
453
+
454
+ if (state == 2) { // pause
455
+ if (YTPlayer.state == state)
456
+ return;
457
+ YTPlayer.state = state;
458
+ controls.find(".mb_YTVPPlaypause").html(jQuery.mbYTPlayer.controls.play);
459
+ jQuery(YTPlayer).trigger("YTPPause");
460
+ }
461
+ },
462
+ 'onPlaybackQualityChange': function (e) {
463
+ if (typeof YTPlayer.opt.onPlaybackQualityChange == "function")
464
+ YTPlayer.opt.onPlaybackQualityChange($YTPlayer);
465
+ },
466
+ 'onError' : function (err) {
467
+
468
+ if(err.data == 2 && YTPlayer.isPlayList)
469
+ jQuery(YTPlayer).playNext();
470
+
471
+ if (typeof YTPlayer.opt.onError == "function")
472
+ YTPlayer.opt.onError($YTPlayer, err);
473
+ }
474
+ }
475
+ });
476
+ });
477
+ })
478
+ });
479
+ },
480
+
481
+ getDataFromFeed: function (videoID, YTPlayer) {
482
+ //Get video info from FEEDS API
483
+
484
+ YTPlayer.videoID = videoID;
485
+ if (!jQuery.browser.msie) { //!(jQuery.browser.msie && jQuery.browser.version<9)
486
+
487
+ jQuery.getJSON('http://gdata.youtube.com/feeds/api/videos/' + videoID + '?v=2&alt=jsonc', function (data, status, xhr) {
488
+
489
+ YTPlayer.dataReceived = true;
490
+
491
+ var videoData = data.data;
492
+
493
+ YTPlayer.title = videoData.title;
494
+ YTPlayer.videoData = videoData;
495
+
496
+ if (YTPlayer.opt.ratio == "auto")
497
+ if (videoData.aspectRatio && videoData.aspectRatio === "widescreen")
498
+ YTPlayer.opt.ratio = "16/9";
499
+ else
500
+ YTPlayer.opt.ratio = "4/3";
501
+
502
+ if(!YTPlayer.isInit){
503
+
504
+ YTPlayer.isInit = true;
505
+
506
+ if (!YTPlayer.isBackground) {
507
+ var bgndURL = YTPlayer.videoData.thumbnail.hqDefault;
508
+
509
+ jQuery(YTPlayer).css({background: "rgba(0,0,0,0.5) url(" + bgndURL + ") center center", backgroundSize: "cover"});
510
+ }
511
+
512
+ jQuery(document).trigger("getVideoInfo_" + YTPlayer.opt.id);
513
+ }
514
+ jQuery(YTPlayer).trigger("YTPChanged");
515
+ });
516
+
517
+ setTimeout(function(){
518
+ if(!YTPlayer.dataReceived && !YTPlayer.isInit){
519
+ YTPlayer.isInit = true;
520
+ jQuery(document).trigger("getVideoInfo_" + YTPlayer.opt.id);
521
+ }
522
+ },2500)
523
+
524
+ } else {
525
+ YTPlayer.opt.ratio == "auto" ? YTPlayer.opt.ratio = "16/9" : YTPlayer.opt.ratio;
526
+
527
+ if(!YTPlayer.isInit){
528
+ YTPlayer.isInit = true;
529
+ setTimeout(function(){
530
+ jQuery(document).trigger("getVideoInfo_" + YTPlayer.opt.id);
531
+ },100)
532
+
533
+ }
534
+ jQuery(YTPlayer).trigger("YTPChanged");
535
+ }
536
+ },
537
+
538
+ getVideoID: function(){
539
+ var YTPlayer = this.get(0);
540
+ return YTPlayer.videoID || false ;
541
+ },
542
+
543
+ setVideoQuality: function(quality){
544
+ var YTPlayer = this.get(0);
545
+ YTPlayer.player.setPlaybackQuality(quality);
546
+ },
547
+
548
+ YTPlaylist : function(videos, shuffle, callback){
549
+ var YTPlayer = this.get(0);
550
+
551
+ YTPlayer.isPlayList = true;
552
+
553
+ if(shuffle)
554
+ videos = jQuery.shuffle(videos);
555
+
556
+ if(!YTPlayer.videoID){
557
+ YTPlayer.videos = videos;
558
+ YTPlayer.videoCounter = 0;
559
+ YTPlayer.videoLength = videos.length;
560
+
561
+ jQuery(YTPlayer).data("property", videos[0]);
562
+ jQuery(YTPlayer).mb_YTPlayer();
563
+ }
564
+
565
+ if(typeof callback == "function")
566
+ jQuery(YTPlayer).on("YTPChanged",function(){
567
+ callback(YTPlayer);
568
+ });
569
+
570
+ jQuery(YTPlayer).on("YTPEnd", function(){
571
+ jQuery(YTPlayer).playNext();
572
+ });
573
+ },
574
+
575
+ playNext: function(){
576
+ var YTPlayer = this.get(0);
577
+ YTPlayer.videoCounter++;
578
+ if(YTPlayer.videoCounter>=YTPlayer.videoLength)
579
+ YTPlayer.videoCounter = 0;
580
+ jQuery(YTPlayer.playerEl).css({opacity:0});
581
+ jQuery(YTPlayer).changeMovie(YTPlayer.videos[YTPlayer.videoCounter]);
582
+ },
583
+
584
+ playPrev: function(){
585
+ var YTPlayer = this.get(0);
586
+ YTPlayer.videoCounter--;
587
+ if(YTPlayer.videoCounter==0)
588
+ YTPlayer.videoCounter = YTPlayer.videoLength;
589
+ jQuery(YTPlayer.playerEl).css({opacity:0});
590
+ jQuery(YTPlayer).changeMovie(YTPlayer.videos[YTPlayer.videoCounter]);
591
+ },
592
+
593
+ changeMovie: function (opt) {
594
+ var YTPlayer = this.get(0);
595
+ var data = YTPlayer.opt;
596
+ if (opt) {
597
+ jQuery.extend(data, opt);
598
+ }
599
+
600
+ YTPlayer.videoID = data.videoURL.getVideoID();
601
+
602
+ jQuery(YTPlayer).pauseYTP();
603
+ var timer = jQuery.browser.msie ? 1000 : 0;
604
+ jQuery(YTPlayer).getPlayer().cueVideoByUrl(encodeURI("http://www.youtube.com/v/" + YTPlayer.videoID) , 5 , YTPlayer.opt.quality);
605
+
606
+ setTimeout(function(){
607
+ jQuery(YTPlayer).playYTP();
608
+ jQuery(YTPlayer).one("YTPStart", function(){
609
+ jQuery(YTPlayer.playerEl).CSSAnimate({opacity:1},2000);
610
+ });
611
+
612
+ },timer)
613
+
614
+ if (YTPlayer.opt.mute) {
615
+ jQuery(YTPlayer).muteYTPVolume();
616
+ }else{
617
+ jQuery(YTPlayer).unmuteYTPVolume();
618
+ }
619
+
620
+ if (YTPlayer.opt.addRaster) {
621
+ var retina = (window.retina || window.devicePixelRatio > 1);
622
+ YTPlayer.overlay.addClass(retina ? "raster retina" : "raster");
623
+ }else{
624
+ YTPlayer.overlay.removeClass("raster");
625
+ YTPlayer.overlay.removeClass("retina");
626
+ }
627
+
628
+ jQuery("#controlBar_" + YTPlayer.id).remove();
629
+
630
+ if (YTPlayer.opt.showControls)
631
+ jQuery(YTPlayer).buildYTPControls();
632
+
633
+ jQuery.mbYTPlayer.getDataFromFeed(YTPlayer.videoID, YTPlayer);
634
+ jQuery(YTPlayer).optimizeDisplay();
635
+ jQuery.mbYTPlayer.checkForState(YTPlayer);
636
+
637
+ },
638
+
639
+ getPlayer: function () {
640
+ return jQuery(this).get(0).player;
641
+ },
642
+
643
+ playerDestroy: function () {
644
+ var YTPlayer = this.get(0);
645
+ ytp.YTAPIReady = false;
646
+ ytp.isInit = false;
647
+ YTPlayer.opt.isInit = false;
648
+ YTPlayer.videoID = null;
649
+
650
+ var playerBox = YTPlayer.wrapper;
651
+ playerBox.remove();
652
+ jQuery("#controlBar_" + YTPlayer.id).remove();
653
+ },
654
+
655
+ fullscreen: function(real) {
656
+
657
+ var YTPlayer = this.get(0);
658
+
659
+ var controls = jQuery("#controlBar_" + YTPlayer.id);
660
+ var fullScreenBtn = controls.find(".mb_OnlyYT");
661
+ var videoWrapper = jQuery(YTPlayer.wrapper);
662
+ if(real){
663
+ var fullscreenchange = jQuery.browser.mozilla ? "mozfullscreenchange" : jQuery.browser.webkit ? "webkitfullscreenchange" : "fullscreenchange";
664
+ jQuery(document).off(fullscreenchange);
665
+ jQuery(document).on(fullscreenchange, function() {
666
+ var isFullScreen = RunPrefixMethod(document, "IsFullScreen") || RunPrefixMethod(document, "FullScreen");
667
+
668
+ if (!isFullScreen) {
669
+ jQuery(YTPlayer).removeClass("fullscreen");
670
+ YTPlayer.isAlone = false;
671
+ fullScreenBtn.html(jQuery.mbYTPlayer.controls.onlyYT)
672
+ jQuery(YTPlayer).setVideoQuality(YTPlayer.opt.quality);
673
+
674
+ if (YTPlayer.isBackground){
675
+ jQuery("body").after(controls);
676
+ }else{
677
+ YTPlayer.wrapper.before(controls);
678
+ }
679
+ }else{
680
+ jQuery(YTPlayer).setVideoQuality("default");
681
+ }
682
+ });
683
+ }
684
+
685
+ if (!YTPlayer.isAlone) {
686
+
687
+ if (YTPlayer.player.getPlayerState() >= 1) {
688
+
689
+ if(YTPlayer.player.getPlayerState() != 1 && YTPlayer.player.getPlayerState() != 2)
690
+ jQuery(YTPlayer).playYTP();
691
+
692
+ if(real){
693
+ YTPlayer.wrapper.append(controls);
694
+ jQuery(YTPlayer).addClass("fullscreen");
695
+ launchFullscreen(videoWrapper.get(0));
696
+ } else
697
+ videoWrapper.css({zIndex: 10000}).CSSAnimate({opacity: 1}, 1000, 0);
698
+
699
+ jQuery(YTPlayer).trigger("YTPFullScreenStart");
700
+
701
+ fullScreenBtn.html(jQuery.mbYTPlayer.controls.showSite)
702
+ YTPlayer.isAlone = true;
703
+ }
704
+
705
+ } else {
706
+
707
+ if(real){
708
+ cancelFullscreen();
709
+ } else{
710
+ videoWrapper.CSSAnimate({opacity: YTPlayer.opt.opacity}, 500);
711
+ }
712
+
713
+ jQuery(YTPlayer).trigger("YTPFullScreenEnd");
714
+
715
+ videoWrapper.css({zIndex: -1});
716
+ fullScreenBtn.html(jQuery.mbYTPlayer.controls.onlyYT)
717
+ YTPlayer.isAlone = false;
718
+ }
719
+
720
+ function RunPrefixMethod(obj, method) {
721
+ var pfx = ["webkit", "moz", "ms", "o", ""];
722
+ var p = 0, m, t;
723
+ while (p < pfx.length && !obj[m]) {
724
+ m = method;
725
+ if (pfx[p] == "") {
726
+ m = m.substr(0,1).toLowerCase() + m.substr(1);
727
+ }
728
+ m = pfx[p] + m;
729
+ t = typeof obj[m];
730
+ if (t != "undefined") {
731
+ pfx = [pfx[p]];
732
+ return (t == "function" ? obj[m]() : obj[m]);
733
+ }
734
+ p++;
735
+ }
736
+ }
737
+
738
+ function launchFullscreen(element) {
739
+ RunPrefixMethod(element, "RequestFullScreen");
740
+ }
741
+
742
+ function cancelFullscreen() {
743
+ if (RunPrefixMethod(document, "FullScreen") || RunPrefixMethod(document, "IsFullScreen")) {
744
+ RunPrefixMethod(document, "CancelFullScreen");
745
+ }
746
+ }
747
+ },
748
+
749
+ playYTP: function () {
750
+ var YTPlayer = this.get(0);
751
+ var controls = jQuery("#controlBar_" + YTPlayer.id);
752
+ var playBtn = controls.find(".mb_YTVPPlaypause");
753
+ playBtn.html(jQuery.mbYTPlayer.controls.pause);
754
+ YTPlayer.player.playVideo();
755
+
756
+ YTPlayer.wrapper.CSSAnimate({opacity: YTPlayer.opt.opacity}, 2000);
757
+ $(YTPlayer).on("YTPStart", function(){
758
+ jQuery(YTPlayer).css("background", "none");
759
+ })
760
+ },
761
+
762
+ toggleLoops: function () {
763
+ var YTPlayer = this.get(0);
764
+ var data = YTPlayer.opt;
765
+ if (data.loop == 1) {
766
+ data.loop = 0;
767
+ } else {
768
+ if(data.startAt) {
769
+ YTPlayer.player.seekTo(data.startAt);
770
+ } else {
771
+ YTPlayer.player.playVideo();
772
+ }
773
+ data.loop = 1;
774
+ }
775
+ },
776
+
777
+ stopYTP: function () {
778
+ var YTPlayer = this.get(0);
779
+ var controls = jQuery("#controlBar_" + YTPlayer.id);
780
+ var playBtn = controls.find(".mb_YTVPPlaypause");
781
+ playBtn.html(jQuery.mbYTPlayer.controls.play);
782
+ YTPlayer.player.stopVideo();
783
+ },
784
+
785
+ pauseYTP: function () {
786
+ var YTPlayer = this.get(0);
787
+ var data = YTPlayer.opt;
788
+ var controls = jQuery("#controlBar_" + YTPlayer.id);
789
+ var playBtn = controls.find(".mb_YTVPPlaypause");
790
+ playBtn.html(jQuery.mbYTPlayer.controls.play);
791
+ YTPlayer.player.pauseVideo();
792
+ },
793
+
794
+ setYTPVolume: function (val) {
795
+ var YTPlayer = this.get(0);
796
+ if (!val && !YTPlayer.opt.vol && player.getVolume() == 0)
797
+ jQuery(YTPlayer).unmuteYTPVolume();
798
+ else if ((!val && YTPlayer.player.getVolume() > 0) || (val && YTPlayer.player.getVolume() == val))
799
+ jQuery(YTPlayer).muteYTPVolume();
800
+ else
801
+ YTPlayer.opt.vol = val;
802
+ YTPlayer.player.setVolume(YTPlayer.opt.vol);
803
+ },
804
+
805
+ muteYTPVolume: function () {
806
+ var YTPlayer = this.get(0);
807
+ YTPlayer.opt.vol = YTPlayer.player.getVolume() || 50;
808
+ YTPlayer.player.mute();
809
+ YTPlayer.player.setVolume(0);
810
+ var controls = jQuery("#controlBar_" + YTPlayer.id);
811
+ var muteBtn = controls.find(".mb_YTVPMuteUnmute");
812
+ muteBtn.html(jQuery.mbYTPlayer.controls.unmute);
813
+ },
814
+
815
+ unmuteYTPVolume: function () {
816
+ var YTPlayer = this.get(0);
817
+
818
+ YTPlayer.player.unMute();
819
+ YTPlayer.player.setVolume(YTPlayer.opt.vol);
820
+
821
+ var controls = jQuery("#controlBar_" + YTPlayer.id);
822
+ var muteBtn = controls.find(".mb_YTVPMuteUnmute");
823
+ muteBtn.html(jQuery.mbYTPlayer.controls.mute);
824
+ },
825
+
826
+ manageYTPProgress: function () {
827
+ var YTPlayer = this.get(0);
828
+ var controls = jQuery("#controlBar_" + YTPlayer.id);
829
+ var progressBar = controls.find(".mb_YTVPProgress");
830
+ var loadedBar = controls.find(".mb_YTVPLoaded");
831
+ var timeBar = controls.find(".mb_YTVTime");
832
+ var totW = progressBar.outerWidth();
833
+
834
+ var currentTime = Math.floor(YTPlayer.player.getCurrentTime());
835
+ var totalTime = Math.floor(YTPlayer.player.getDuration());
836
+ var timeW = (currentTime * totW) / totalTime;
837
+ var startLeft = 0;
838
+
839
+ var loadedW = YTPlayer.player.getVideoLoadedFraction() * 100;
840
+
841
+ loadedBar.css({left: startLeft, width: loadedW + "%"});
842
+ timeBar.css({left: 0, width: timeW});
843
+ return {totalTime: totalTime, currentTime: currentTime};
844
+ },
845
+
846
+ buildYTPControls: function () {
847
+ var YTPlayer = this.get(0);
848
+ var data = YTPlayer.opt;
849
+
850
+ if(jQuery("#controlBar_"+ YTPlayer.id).length)
851
+ return;
852
+
853
+ var controlBar = jQuery("<span/>").attr("id", "controlBar_" + YTPlayer.id).addClass("mb_YTVPBar").css({whiteSpace: "noWrap", position: YTPlayer.isBackground ? "fixed" : "absolute", zIndex: YTPlayer.isBackground ? 10000 : 1000}).hide();
854
+ var buttonBar = jQuery("<div/>").addClass("buttonBar");
855
+ var playpause = jQuery("<span>" + jQuery.mbYTPlayer.controls.play + "</span>").addClass("mb_YTVPPlaypause ytpicon").click(function () {
856
+ if (YTPlayer.player.getPlayerState() == 1)
857
+ jQuery(YTPlayer).pauseYTP();
858
+ else
859
+ jQuery(YTPlayer).playYTP();
860
+ });
861
+
862
+ var MuteUnmute = jQuery("<span>" + jQuery.mbYTPlayer.controls.mute + "</span>").addClass("mb_YTVPMuteUnmute ytpicon").click(function () {
863
+ if (YTPlayer.player.getVolume()==0) {
864
+ jQuery(YTPlayer).unmuteYTPVolume();
865
+ } else {
866
+ jQuery(YTPlayer).muteYTPVolume();
867
+ }
868
+ });
869
+
870
+ var idx = jQuery("<span/>").addClass("mb_YTVPTime");
871
+
872
+ var vURL = data.videoURL;
873
+ if(vURL.indexOf("http") < 0)
874
+ vURL = "http://www.youtube.com/watch?v="+data.videoURL;
875
+ var movieUrl = jQuery("<span/>").html(jQuery.mbYTPlayer.controls.ytLogo).addClass("mb_YTVPUrl ytpicon").attr("title", "view on YouTube").on("click", function () {window.open(vURL, "viewOnYT")});
876
+ var onlyVideo = jQuery("<span/>").html(jQuery.mbYTPlayer.controls.onlyYT).addClass("mb_OnlyYT ytpicon").on("click",function () {jQuery(YTPlayer).fullscreen(data.realfullscreen);});
877
+
878
+ var progressBar = jQuery("<div/>").addClass("mb_YTVPProgress").css("position", "absolute").click(function (e) {
879
+ timeBar.css({width: (e.clientX - timeBar.offset().left)});
880
+ YTPlayer.timeW = e.clientX - timeBar.offset().left;
881
+ controlBar.find(".mb_YTVPLoaded").css({width: 0});
882
+ var totalTime = Math.floor(YTPlayer.player.getDuration());
883
+ YTPlayer.goto = (timeBar.outerWidth() * totalTime) / progressBar.outerWidth();
884
+
885
+ YTPlayer.player.seekTo(parseFloat(YTPlayer.goto), true);
886
+ controlBar.find(".mb_YTVPLoaded").css({width: 0});
887
+ });
888
+
889
+ var loadedBar = jQuery("<div/>").addClass("mb_YTVPLoaded").css("position", "absolute");
890
+ var timeBar = jQuery("<div/>").addClass("mb_YTVTime").css("position", "absolute");
891
+
892
+ progressBar.append(loadedBar).append(timeBar);
893
+ buttonBar.append(playpause).append(MuteUnmute).append(idx);
894
+
895
+ if (data.printUrl){
896
+ buttonBar.append(movieUrl);
897
+ }
898
+
899
+ if (YTPlayer.isBackground || (YTPlayer.opt.realfullscreen && !YTPlayer.isBackground))
900
+ buttonBar.append(onlyVideo);
901
+
902
+ controlBar.append(buttonBar).append(progressBar);
903
+
904
+ if (!YTPlayer.isBackground) {
905
+ controlBar.addClass("inlinePlayer");
906
+ YTPlayer.wrapper.before(controlBar);
907
+ } else {
908
+ jQuery("body").after(controlBar);
909
+ }
910
+ controlBar.fadeIn();
911
+
912
+ },
913
+
914
+ checkForState:function(YTPlayer){
915
+
916
+ var controlBar = jQuery("#controlBar_" + YTPlayer.id);
917
+ var data = YTPlayer.opt;
918
+ var startAt = YTPlayer.opt.startAt ? YTPlayer.opt.startAt : 1;
919
+
920
+ YTPlayer.getState = setInterval(function () {
921
+ var prog = jQuery(YTPlayer).manageYTPProgress();
922
+
923
+ controlBar.find(".mb_YTVPTime").html(jQuery.mbYTPlayer.formatTime(prog.currentTime) + " / " + jQuery.mbYTPlayer.formatTime(prog.totalTime));
924
+ if (parseFloat(YTPlayer.player.getDuration() - 3) < YTPlayer.player.getCurrentTime() && YTPlayer.player.getPlayerState() == 1 && !YTPlayer.isPlayList) {
925
+ if(!data.loop){
926
+ YTPlayer.player.pauseVideo();
927
+ YTPlayer.wrapper.CSSAnimate({opacity: 0}, 2000,function(){
928
+ YTPlayer.player.seekTo(startAt);
929
+
930
+ if (!YTPlayer.isBackground) {
931
+ var bgndURL = YTPlayer.videoData.thumbnail.hqDefault;
932
+ jQuery(YTPlayer).css({background: "rgba(0,0,0,0.5) url(" + bgndURL + ") center center", backgroundSize: "cover"});
933
+ }
934
+ });
935
+ }else
936
+ YTPlayer.player.seekTo(startAt);
937
+ jQuery(YTPlayer).trigger("YTPEnd");
938
+ }
939
+ }, 1);
940
+
941
+ },
942
+
943
+ formatTime : function (s) {
944
+ var min = Math.floor(s / 60);
945
+ var sec = Math.floor(s - (60 * min));
946
+ return (min < 9 ? "0" + min : min) + " : " + (sec < 9 ? "0" + sec : sec);
947
+ }
948
+ };
949
+
950
+ jQuery.fn.toggleVolume = function () {
951
+ var YTPlayer = this.get(0);
952
+ if (!YTPlayer)
953
+ return;
954
+
955
+ if (YTPlayer.player.isMuted()) {
956
+ jQuery(YTPlayer).unmuteYTPVolume();
957
+ return true;
958
+ } else {
959
+ jQuery(YTPlayer).muteYTPVolume();
960
+ return false;
961
+ }
962
+ };
963
+
964
+ jQuery.fn.optimizeDisplay = function () {
965
+ var YTPlayer = this.get(0);
966
+ var data = YTPlayer.opt;
967
+ var playerBox = jQuery(YTPlayer.playerEl);
968
+ var win = {};
969
+ var el = !YTPlayer.isBackground ? data.containment : jQuery(window);
970
+
971
+ win.width = el.width();
972
+ win.height = el.height();
973
+
974
+ var margin = 24;
975
+ var vid = {};
976
+ vid.width = win.width + ((win.width * margin) / 100);
977
+ vid.height = data.ratio == "16/9" ? Math.ceil((9 * win.width) / 16) : Math.ceil((3 * win.width) / 4);
978
+ vid.marginTop = -((vid.height - win.height) / 2);
979
+ vid.marginLeft = -((win.width * (margin / 2)) / 100);
980
+
981
+ if (vid.height < win.height) {
982
+ vid.height = win.height + ((win.height * margin) / 100);
983
+ vid.width = data.ratio == "16/9" ? Math.floor((16 * win.height) / 9) : Math.floor((4 * win.height) / 3);
984
+ vid.marginTop = -((win.height * (margin / 2)) / 100);
985
+ vid.marginLeft = -((vid.width - win.width) / 2);
986
+ }
987
+ playerBox.css({width: vid.width, height: vid.height, marginTop: vid.marginTop, marginLeft: vid.marginLeft});
988
+ };
989
+
990
+ jQuery.shuffle = function(arr) {
991
+ var newArray = arr.slice();
992
+ var len = newArray.length;
993
+ var i = len;
994
+ while (i--) {
995
+ var p = parseInt(Math.random()*len);
996
+ var t = newArray[i];
997
+ newArray[i] = newArray[p];
998
+ newArray[p] = t;
999
+ }
1000
+ return newArray;
1001
+ };
1002
+
1003
+ jQuery.fn.mb_YTPlayer = jQuery.mbYTPlayer.buildPlayer;
1004
+ jQuery.fn.YTPlaylist = jQuery.mbYTPlayer.YTPlaylist;
1005
+ jQuery.fn.playNext = jQuery.mbYTPlayer.playNext;
1006
+ jQuery.fn.changeMovie = jQuery.mbYTPlayer.changeMovie;
1007
+ jQuery.fn.getVideoID = jQuery.mbYTPlayer.getVideoID;
1008
+ jQuery.fn.getPlayer = jQuery.mbYTPlayer.getPlayer;
1009
+ jQuery.fn.playerDestroy = jQuery.mbYTPlayer.playerDestroy;
1010
+ jQuery.fn.fullscreen = jQuery.mbYTPlayer.fullscreen;
1011
+ jQuery.fn.buildYTPControls = jQuery.mbYTPlayer.buildYTPControls;
1012
+ jQuery.fn.playYTP = jQuery.mbYTPlayer.playYTP;
1013
+ jQuery.fn.toggleLoops = jQuery.mbYTPlayer.toggleLoops;
1014
+ jQuery.fn.stopYTP = jQuery.mbYTPlayer.stopYTP;
1015
+ jQuery.fn.pauseYTP = jQuery.mbYTPlayer.pauseYTP;
1016
+ jQuery.fn.muteYTPVolume = jQuery.mbYTPlayer.muteYTPVolume;
1017
+ jQuery.fn.unmuteYTPVolume = jQuery.mbYTPlayer.unmuteYTPVolume;
1018
+ jQuery.fn.setYTPVolume = jQuery.mbYTPlayer.setYTPVolume;
1019
+ jQuery.fn.setVideoQuality = jQuery.mbYTPlayer.setVideoQuality;
1020
+ jQuery.fn.manageYTPProgress = jQuery.mbYTPlayer.manageYTPProgress;
1021
+
1022
+ })(jQuery);