jquery_mb_extruder 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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);