339 lines
		
	
	
		
			16 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
		
		
			
		
	
	
			339 lines
		
	
	
		
			16 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
|  | /* | ||
|  |  * jPlayerInspector Plugin for jPlayer Plugin for jQuery JavaScript Library | ||
|  |  * http://www.jplayer.org
 | ||
|  |  * | ||
|  |  * Copyright (c) 2009 - 2014 Happyworm Ltd | ||
|  |  * Licensed under the MIT license. | ||
|  |  * http://www.opensource.org/licenses/MIT
 | ||
|  |  * | ||
|  |  * Author: Mark J Panaghiston | ||
|  |  * Version: 1.0.5 | ||
|  |  * Date: 1st April 2014 | ||
|  |  * | ||
|  |  * For use with jPlayer Version: 2.6.0+ | ||
|  |  * | ||
|  |  * Note: Declare inspector instances after jPlayer instances. ie., Otherwise the jPlayer instance is nonsense. | ||
|  |  */ | ||
|  | 
 | ||
|  | (function($, undefined) { | ||
|  | 	$.jPlayerInspector = {}; | ||
|  | 	$.jPlayerInspector.i = 0; | ||
|  | 	$.jPlayerInspector.defaults = { | ||
|  | 		jPlayer: undefined, // The jQuery selector of the jPlayer instance to inspect.
 | ||
|  | 		idPrefix: "jplayer_inspector_", | ||
|  | 		visible: false | ||
|  | 	}; | ||
|  | 	 | ||
|  | 	var methods = { | ||
|  | 		init: function(options) { | ||
|  | 			var self = this; | ||
|  | 			var $this = $(this); | ||
|  | 			 | ||
|  | 			var config = $.extend({}, $.jPlayerInspector.defaults, options); | ||
|  | 			$(this).data("jPlayerInspector", config); | ||
|  | 
 | ||
|  | 			config.id = $(this).attr("id"); | ||
|  | 			config.jPlayerId = config.jPlayer.attr("id"); | ||
|  | 
 | ||
|  | 			config.windowId = config.idPrefix + "window_" + $.jPlayerInspector.i; | ||
|  | 			config.statusId = config.idPrefix + "status_" + $.jPlayerInspector.i; | ||
|  | 			config.configId = config.idPrefix + "config_" + $.jPlayerInspector.i; | ||
|  | 			config.toggleId = config.idPrefix + "toggle_" + $.jPlayerInspector.i; | ||
|  | 			config.eventResetId = config.idPrefix + "event_reset_" + $.jPlayerInspector.i; | ||
|  | 			config.updateId = config.idPrefix + "update_" + $.jPlayerInspector.i; | ||
|  | 			config.eventWindowId = config.idPrefix + "event_window_" + $.jPlayerInspector.i; | ||
|  | 			 | ||
|  | 			config.eventId = {}; | ||
|  | 			config.eventJq = {}; | ||
|  | 			config.eventTimeout = {}; | ||
|  | 			config.eventOccurrence = {}; | ||
|  | 			 | ||
|  | 			$.each($.jPlayer.event, function(eventName,eventType) { | ||
|  | 				config.eventId[eventType] = config.idPrefix + "event_" + eventName + "_" + $.jPlayerInspector.i; | ||
|  | 				config.eventOccurrence[eventType] = 0; | ||
|  | 			}); | ||
|  | 			 | ||
|  | 			var structure =  | ||
|  | 				'<p><a href="#" id="' + config.toggleId + '">' + (config.visible ? "Hide" : "Show") + '</a> jPlayer Inspector</p>'  | ||
|  | 				+ '<div id="' + config.windowId + '">' | ||
|  | 					+ '<div id="' + config.statusId + '"></div>' | ||
|  | 					+ '<div id="' + config.eventWindowId + '" style="padding:5px 5px 0 5px;background-color:#eee;border:1px dotted #000;">' | ||
|  | 						+ '<p style="margin:0 0 10px 0;"><strong>jPlayer events that have occurred over the past 1 second:</strong>' | ||
|  | 						+ '<br />(Backgrounds: <span style="padding:0 5px;background-color:#eee;border:1px dotted #000;">Never occurred</span> <span style="padding:0 5px;background-color:#fff;border:1px dotted #000;">Occurred before</span> <span style="padding:0 5px;background-color:#9f9;border:1px dotted #000;">Occurred</span> <span style="padding:0 5px;background-color:#ff9;border:1px dotted #000;">Multiple occurrences</span> <a href="#" id="' + config.eventResetId + '">reset</a>)</p>'; | ||
|  | 			 | ||
|  | 			// MJP: Would use the next 3 lines for ease, but the events are just slapped on the page.
 | ||
|  | 			// $.each($.jPlayer.event, function(eventName,eventType) {
 | ||
|  | 			// 	structure += '<div id="' + config.eventId[eventType] + '" style="float:left;">' + eventName + '</div>';
 | ||
|  | 			// });
 | ||
|  | 			 | ||
|  | 			var eventStyle = "float:left;margin:0 5px 5px 0;padding:0 5px;border:1px dotted #000;"; | ||
|  | 			// MJP: Doing it longhand so order and layout easier to control.
 | ||
|  | 			structure += | ||
|  | 						'<div id="' + config.eventId[$.jPlayer.event.ready] + '" style="' + eventStyle + '"></div>' | ||
|  | 						+ '<div id="' + config.eventId[$.jPlayer.event.setmedia] + '" style="' + eventStyle + '"></div>' | ||
|  | 						+ '<div id="' + config.eventId[$.jPlayer.event.flashreset] + '" style="' + eventStyle + '"></div>' | ||
|  | 						+ '<div id="' + config.eventId[$.jPlayer.event.resize] + '" style="' + eventStyle + '"></div>' | ||
|  | 						+ '<div id="' + config.eventId[$.jPlayer.event.repeat] + '" style="' + eventStyle + '"></div>' | ||
|  | 						+ '<div id="' + config.eventId[$.jPlayer.event.click] + '" style="' + eventStyle + '"></div>' | ||
|  | 						+ '<div id="' + config.eventId[$.jPlayer.event.warning] + '" style="' + eventStyle + '"></div>' | ||
|  | 
 | ||
|  | 						+ '<div id="' + config.eventId[$.jPlayer.event.loadstart] + '" style="clear:left;' + eventStyle + '"></div>' | ||
|  | 						+ '<div id="' + config.eventId[$.jPlayer.event.progress] + '" style="' + eventStyle + '"></div>' | ||
|  | 						+ '<div id="' + config.eventId[$.jPlayer.event.timeupdate] + '" style="' + eventStyle + '"></div>' | ||
|  | 						+ '<div id="' + config.eventId[$.jPlayer.event.volumechange] + '" style="' + eventStyle + '"></div>' | ||
|  | 						+ '<div id="' + config.eventId[$.jPlayer.event.error] + '" style="' + eventStyle + '"></div>' | ||
|  | 
 | ||
|  | 						+ '<div id="' + config.eventId[$.jPlayer.event.play] + '" style="clear:left;' + eventStyle + '"></div>' | ||
|  | 						+ '<div id="' + config.eventId[$.jPlayer.event.pause] + '" style="' + eventStyle + '"></div>' | ||
|  | 						+ '<div id="' + config.eventId[$.jPlayer.event.waiting] + '" style="' + eventStyle + '"></div>' | ||
|  | 						+ '<div id="' + config.eventId[$.jPlayer.event.playing] + '" style="' + eventStyle + '"></div>' | ||
|  | 						+ '<div id="' + config.eventId[$.jPlayer.event.seeking] + '" style="' + eventStyle + '"></div>' | ||
|  | 						+ '<div id="' + config.eventId[$.jPlayer.event.seeked] + '" style="' + eventStyle + '"></div>' | ||
|  | 						+ '<div id="' + config.eventId[$.jPlayer.event.ended] + '" style="' + eventStyle + '"></div>' | ||
|  | 
 | ||
|  | 						+ '<div id="' + config.eventId[$.jPlayer.event.loadeddata] + '" style="clear:left;' + eventStyle + '"></div>' | ||
|  | 						+ '<div id="' + config.eventId[$.jPlayer.event.loadedmetadata] + '" style="' + eventStyle + '"></div>' | ||
|  | 						+ '<div id="' + config.eventId[$.jPlayer.event.canplay] + '" style="' + eventStyle + '"></div>' | ||
|  | 						+ '<div id="' + config.eventId[$.jPlayer.event.canplaythrough] + '" style="' + eventStyle + '"></div>' | ||
|  | 
 | ||
|  | 						+ '<div id="' + config.eventId[$.jPlayer.event.suspend] + '" style="clear:left;' + eventStyle + '"></div>' | ||
|  | 						+ '<div id="' + config.eventId[$.jPlayer.event.abort] + '" style="' + eventStyle + '"></div>' | ||
|  | 						+ '<div id="' + config.eventId[$.jPlayer.event.emptied] + '" style="' + eventStyle + '"></div>' | ||
|  | 						+ '<div id="' + config.eventId[$.jPlayer.event.stalled] + '" style="' + eventStyle + '"></div>' | ||
|  | 						+ '<div id="' + config.eventId[$.jPlayer.event.ratechange] + '" style="' + eventStyle + '"></div>' | ||
|  | 						+ '<div id="' + config.eventId[$.jPlayer.event.durationchange] + '" style="' + eventStyle + '"></div>' | ||
|  | 
 | ||
|  | 						+ '<div style="clear:both"></div>'; | ||
|  | 
 | ||
|  | 			// MJP: Would like a check here in case we missed an event.
 | ||
|  | 
 | ||
|  | 			// MJP: Check fails, since it is not on the page yet.
 | ||
|  | /*			$.each($.jPlayer.event, function(eventName,eventType) { | ||
|  | 				if($("#" + config.eventId[eventType])[0] === undefined) { | ||
|  | 					structure += '<div id="' + config.eventId[eventType] + '" style="clear:left;' + eventStyle + '">' + eventName + '</div>'; | ||
|  | 				} | ||
|  | 			}); | ||
|  | */ | ||
|  | 			structure += | ||
|  | 					'</div>' | ||
|  | 					+ '<p><a href="#" id="' + config.updateId + '">Update</a> jPlayer Inspector</p>' | ||
|  | 					+ '<div id="' + config.configId + '"></div>' | ||
|  | 				+ '</div>'; | ||
|  | 			$(this).html(structure); | ||
|  | 			 | ||
|  | 			config.windowJq = $("#" + config.windowId); | ||
|  | 			config.statusJq = $("#" + config.statusId); | ||
|  | 			config.configJq = $("#" + config.configId); | ||
|  | 			config.toggleJq = $("#" + config.toggleId); | ||
|  | 			config.eventResetJq = $("#" + config.eventResetId); | ||
|  | 			config.updateJq = $("#" + config.updateId); | ||
|  | 
 | ||
|  | 			$.each($.jPlayer.event, function(eventName,eventType) { | ||
|  | 				config.eventJq[eventType] = $("#" + config.eventId[eventType]); | ||
|  | 				config.eventJq[eventType].text(eventName + " (" + config.eventOccurrence[eventType] + ")"); // Sets the text to the event name and (0);
 | ||
|  | 				 | ||
|  | 				config.jPlayer.bind(eventType + ".jPlayerInspector", function(e) { | ||
|  | 					config.eventOccurrence[e.type]++; | ||
|  | 					if(config.eventOccurrence[e.type] > 1) { | ||
|  | 						config.eventJq[e.type].css("background-color","#ff9"); | ||
|  | 					} else { | ||
|  | 						config.eventJq[e.type].css("background-color","#9f9"); | ||
|  | 					} | ||
|  | 					config.eventJq[e.type].text(eventName + " (" + config.eventOccurrence[e.type] + ")"); | ||
|  | 					// The timer to handle the color
 | ||
|  | 					clearTimeout(config.eventTimeout[e.type]); | ||
|  | 					config.eventTimeout[e.type] = setTimeout(function() { | ||
|  | 						config.eventJq[e.type].css("background-color","#fff"); | ||
|  | 					}, 1000); | ||
|  | 					// The timer to handle the occurences.
 | ||
|  | 					setTimeout(function() { | ||
|  | 						config.eventOccurrence[e.type]--; | ||
|  | 						config.eventJq[e.type].text(eventName + " (" + config.eventOccurrence[e.type] + ")"); | ||
|  | 					}, 1000); | ||
|  | 					if(config.visible) { // Update the status, if inspector open.
 | ||
|  | 						$this.jPlayerInspector("updateStatus"); | ||
|  | 					} | ||
|  | 				}); | ||
|  | 			}); | ||
|  | 
 | ||
|  | 			config.jPlayer.bind($.jPlayer.event.ready + ".jPlayerInspector", function(e) { | ||
|  | 				$this.jPlayerInspector("updateConfig"); | ||
|  | 			}); | ||
|  | 
 | ||
|  | 			config.toggleJq.click(function() { | ||
|  | 				if(config.visible) { | ||
|  | 					$(this).text("Show"); | ||
|  | 					config.windowJq.hide(); | ||
|  | 					config.statusJq.empty(); | ||
|  | 					config.configJq.empty(); | ||
|  | 				} else { | ||
|  | 					$(this).text("Hide"); | ||
|  | 					config.windowJq.show(); | ||
|  | 					config.updateJq.click(); | ||
|  | 				} | ||
|  | 				config.visible = !config.visible; | ||
|  | 				$(this).blur(); | ||
|  | 				return false; | ||
|  | 			}); | ||
|  | 
 | ||
|  | 			config.eventResetJq.click(function() { | ||
|  | 				$.each($.jPlayer.event, function(eventName,eventType) { | ||
|  | 					config.eventJq[eventType].css("background-color","#eee"); | ||
|  | 				}); | ||
|  | 				$(this).blur(); | ||
|  | 				return false; | ||
|  | 			}); | ||
|  | 
 | ||
|  | 			config.updateJq.click(function() { | ||
|  | 				$this.jPlayerInspector("updateStatus"); | ||
|  | 				$this.jPlayerInspector("updateConfig"); | ||
|  | 				return false; | ||
|  | 			}); | ||
|  | 
 | ||
|  | 			if(!config.visible) { | ||
|  | 				config.windowJq.hide(); | ||
|  | 			} else { | ||
|  | 				// config.updateJq.click();
 | ||
|  | 			} | ||
|  | 			 | ||
|  | 			$.jPlayerInspector.i++; | ||
|  | 
 | ||
|  | 			return this; | ||
|  | 		}, | ||
|  | 		destroy: function() { | ||
|  | 			$(this).data("jPlayerInspector") && $(this).data("jPlayerInspector").jPlayer.unbind(".jPlayerInspector"); | ||
|  | 			$(this).empty(); | ||
|  | 		}, | ||
|  | 		updateConfig: function() { // This displays information about jPlayer's configuration in inspector
 | ||
|  | 		 | ||
|  | 			var jPlayerInfo = "<p>This jPlayer instance is running in your browser where:<br />" | ||
|  | 
 | ||
|  | 			for(i = 0; i < $(this).data("jPlayerInspector").jPlayer.data("jPlayer").solutions.length; i++) { | ||
|  | 				var solution = $(this).data("jPlayerInspector").jPlayer.data("jPlayer").solutions[i]; | ||
|  | 				jPlayerInfo += " jPlayer's <strong>" + solution + "</strong> solution is";				 | ||
|  | 				if($(this).data("jPlayerInspector").jPlayer.data("jPlayer")[solution].used) { | ||
|  | 					jPlayerInfo += " being <strong>used</strong> and will support:<strong>"; | ||
|  | 					for(format in $(this).data("jPlayerInspector").jPlayer.data("jPlayer")[solution].support) { | ||
|  | 						if($(this).data("jPlayerInspector").jPlayer.data("jPlayer")[solution].support[format]) { | ||
|  | 							jPlayerInfo += " " + format; | ||
|  | 						} | ||
|  | 					} | ||
|  | 					jPlayerInfo += "</strong><br />"; | ||
|  | 				} else { | ||
|  | 					jPlayerInfo += " <strong>not required</strong><br />"; | ||
|  | 				} | ||
|  | 			} | ||
|  | 			jPlayerInfo += "</p>"; | ||
|  | 
 | ||
|  | 			if($(this).data("jPlayerInspector").jPlayer.data("jPlayer").html.active) { | ||
|  | 				if($(this).data("jPlayerInspector").jPlayer.data("jPlayer").flash.active) { | ||
|  | 					jPlayerInfo += "<strong>Problem with jPlayer since both HTML5 and Flash are active.</strong>"; | ||
|  | 				} else { | ||
|  | 					jPlayerInfo += "The <strong>HTML5 is active</strong>."; | ||
|  | 				} | ||
|  | 			} else { | ||
|  | 				if($(this).data("jPlayerInspector").jPlayer.data("jPlayer").flash.active) { | ||
|  | 					jPlayerInfo += "The <strong>Flash is active</strong>."; | ||
|  | 				} else { | ||
|  | 					jPlayerInfo += "No solution is currently active. jPlayer needs a setMedia()."; | ||
|  | 				} | ||
|  | 			} | ||
|  | 			jPlayerInfo += "</p>"; | ||
|  | 
 | ||
|  | 			var formatType = $(this).data("jPlayerInspector").jPlayer.data("jPlayer").status.formatType; | ||
|  | 			jPlayerInfo += "<p><code>status.formatType = '" + formatType + "'</code><br />"; | ||
|  | 			if(formatType) { | ||
|  | 				jPlayerInfo += "<code>Browser canPlay('" + $.jPlayer.prototype.format[formatType].codec + "')</code>"; | ||
|  | 			} else { | ||
|  | 				jPlayerInfo += "</p>"; | ||
|  | 			} | ||
|  | 			 | ||
|  | 			jPlayerInfo += "<p><code>status.src = '" + $(this).data("jPlayerInspector").jPlayer.data("jPlayer").status.src + "'</code></p>"; | ||
|  | 
 | ||
|  | 			jPlayerInfo += "<p><code>status.media = {<br />"; | ||
|  | 			for(prop in $(this).data("jPlayerInspector").jPlayer.data("jPlayer").status.media) { | ||
|  | 				jPlayerInfo += " " + prop + ": " + $(this).data("jPlayerInspector").jPlayer.data("jPlayer").status.media[prop] + "<br />"; // Some are strings
 | ||
|  | 			} | ||
|  | 			jPlayerInfo += "};</code></p>" | ||
|  | 
 | ||
|  | 			jPlayerInfo += "<p>"; | ||
|  | 			jPlayerInfo += "<code>status.videoWidth = '" + $(this).data("jPlayerInspector").jPlayer.data("jPlayer").status.videoWidth + "'</code>"; | ||
|  | 			jPlayerInfo += " | <code>status.videoHeight = '" + $(this).data("jPlayerInspector").jPlayer.data("jPlayer").status.videoHeight + "'</code>"; | ||
|  | 			jPlayerInfo += "<br /><code>status.width = '" + $(this).data("jPlayerInspector").jPlayer.data("jPlayer").status.width + "'</code>"; | ||
|  | 			jPlayerInfo += " | <code>status.height = '" + $(this).data("jPlayerInspector").jPlayer.data("jPlayer").status.height + "'</code>"; | ||
|  | 			jPlayerInfo += "</p>"; | ||
|  | 
 | ||
|  | 			+ "<p>Raw browser test for HTML5 support. Should equal a function if HTML5 is available.<br />"; | ||
|  | 			if($(this).data("jPlayerInspector").jPlayer.data("jPlayer").html.audio.available) { | ||
|  | 				jPlayerInfo += "<code>htmlElement.audio.canPlayType = " + (typeof $(this).data("jPlayerInspector").jPlayer.data("jPlayer").htmlElement.audio.canPlayType) +"</code><br />" | ||
|  | 			} | ||
|  | 			if($(this).data("jPlayerInspector").jPlayer.data("jPlayer").html.video.available) { | ||
|  | 				jPlayerInfo += "<code>htmlElement.video.canPlayType = " + (typeof $(this).data("jPlayerInspector").jPlayer.data("jPlayer").htmlElement.video.canPlayType) +"</code>"; | ||
|  | 			} | ||
|  | 			jPlayerInfo += "</p>"; | ||
|  | 
 | ||
|  | 			jPlayerInfo += "<p>This instance is using the constructor options:<br />" | ||
|  | 			+ "<code>$('#" + $(this).data("jPlayerInspector").jPlayer.data("jPlayer").internal.self.id + "').jPlayer({<br />" | ||
|  | 
 | ||
|  | 			+ " swfPath: '" + $(this).data("jPlayerInspector").jPlayer.jPlayer("option", "swfPath") + "',<br />" | ||
|  | 
 | ||
|  | 			+ " solution: '" + $(this).data("jPlayerInspector").jPlayer.jPlayer("option", "solution") + "',<br />" | ||
|  | 
 | ||
|  | 			+ " supplied: '" + $(this).data("jPlayerInspector").jPlayer.jPlayer("option", "supplied") + "',<br />" | ||
|  | 
 | ||
|  | 			+ " preload: '" + $(this).data("jPlayerInspector").jPlayer.jPlayer("option", "preload") + "',<br />" | ||
|  | 			 | ||
|  | 			+ " volume: " + $(this).data("jPlayerInspector").jPlayer.jPlayer("option", "volume") + ",<br />" | ||
|  | 			 | ||
|  | 			+ " muted: " + $(this).data("jPlayerInspector").jPlayer.jPlayer("option", "muted") + ",<br />" | ||
|  | 
 | ||
|  | 			+ " backgroundColor: '" + $(this).data("jPlayerInspector").jPlayer.jPlayer("option", "backgroundColor") + "',<br />" | ||
|  | 
 | ||
|  | 			+ " cssSelectorAncestor: '" + $(this).data("jPlayerInspector").jPlayer.jPlayer("option", "cssSelectorAncestor") + "',<br />" | ||
|  | 
 | ||
|  | 			+ " cssSelector: {"; | ||
|  | 
 | ||
|  | 			var cssSelector = $(this).data("jPlayerInspector").jPlayer.jPlayer("option", "cssSelector"); | ||
|  | 			for(prop in cssSelector) { | ||
|  | 				 | ||
|  | 				// jPlayerInfo += "<br />  " + prop + ": '" + cssSelector[prop] + "'," // This works too of course, but want to use option method for deep keys.
 | ||
|  | 				jPlayerInfo += "<br />  " + prop + ": '" + $(this).data("jPlayerInspector").jPlayer.jPlayer("option", "cssSelector." + prop) + "'," | ||
|  | 			} | ||
|  | 
 | ||
|  | 			jPlayerInfo = jPlayerInfo.slice(0, -1); // Because the sloppy comma was bugging me.
 | ||
|  | 
 | ||
|  | 			jPlayerInfo += "<br /> },<br />" | ||
|  | 
 | ||
|  | 			+ " errorAlerts: " + $(this).data("jPlayerInspector").jPlayer.jPlayer("option", "errorAlerts") + ",<br />" | ||
|  | 			 | ||
|  | 			+ " warningAlerts: " + $(this).data("jPlayerInspector").jPlayer.jPlayer("option", "warningAlerts") + "<br />" | ||
|  | 
 | ||
|  | 			+ "});</code></p>"; | ||
|  | 			$(this).data("jPlayerInspector").configJq.html(jPlayerInfo); | ||
|  | 			return this; | ||
|  | 		}, | ||
|  | 		updateStatus: function() { // This displays information about jPlayer's status in the inspector
 | ||
|  | 			$(this).data("jPlayerInspector").statusJq.html( | ||
|  | 				"<p>jPlayer is " + | ||
|  | 				($(this).data("jPlayerInspector").jPlayer.data("jPlayer").status.paused ? "paused" : "playing") + | ||
|  | 				" at time: " + Math.floor($(this).data("jPlayerInspector").jPlayer.data("jPlayer").status.currentTime*10)/10 + "s." + | ||
|  | 				" (d: " + Math.floor($(this).data("jPlayerInspector").jPlayer.data("jPlayer").status.duration*10)/10 + "s" + | ||
|  | 				", sp: " + Math.floor($(this).data("jPlayerInspector").jPlayer.data("jPlayer").status.seekPercent) + "%" + | ||
|  | 				", cpr: " + Math.floor($(this).data("jPlayerInspector").jPlayer.data("jPlayer").status.currentPercentRelative) + "%" + | ||
|  | 				", cpa: " + Math.floor($(this).data("jPlayerInspector").jPlayer.data("jPlayer").status.currentPercentAbsolute) + "%)</p>" | ||
|  | 			); | ||
|  | 			return this; | ||
|  | 		} | ||
|  | 	}; | ||
|  | 	$.fn.jPlayerInspector = function( method ) { | ||
|  | 		// Method calling logic
 | ||
|  | 		if ( methods[method] ) { | ||
|  | 			return methods[ method ].apply( this, Array.prototype.slice.call( arguments, 1 )); | ||
|  | 		} else if ( typeof method === 'object' || ! method ) { | ||
|  | 			return methods.init.apply( this, arguments ); | ||
|  | 		} else { | ||
|  | 			$.error( 'Method ' +  method + ' does not exist on jQuery.jPlayerInspector' ); | ||
|  | 		}     | ||
|  | 	}; | ||
|  | })(jQuery); |