mirror of
https://github.com/videojs/video.js.git
synced 2025-02-02 11:34:50 +02:00
ef321a8072
Removed demo source code from repository root. Was receiving pull requests for the release files instead of source files. This makes it more clear where to make changes.
183 lines
5.9 KiB
JavaScript
183 lines
5.9 KiB
JavaScript
// Using John Resig's Class implementation http://ejohn.org/blog/simple-javascript-inheritance/
|
|
// (function(){var initializing=false, fnTest=/xyz/.test(function(){xyz;}) ? /\b_super\b/ : /.*/; _V_.Class = function(){}; _V_.Class.extend = function(prop) { var _super = this.prototype; initializing = true; var prototype = new this(); initializing = false; for (var name in prop) { prototype[name] = typeof prop[name] == "function" && typeof _super[name] == "function" && fnTest.test(prop[name]) ? (function(name, fn){ return function() { var tmp = this._super; this._super = _super[name]; var ret = fn.apply(this, arguments); this._super = tmp; return ret; }; })(name, prop[name]) : prop[name]; } function Class() { if ( !initializing && this.init ) this.init.apply(this, arguments); } Class.prototype = prototype; Class.constructor = Class; Class.extend = arguments.callee; return Class;};})();
|
|
(function(){
|
|
var initializing = false, fnTest = /xyz/.test(function(){xyz;}) ? /\b_super\b/ : /.*/;
|
|
_V_.Class = function(){};
|
|
_V_.Class.extend = function(prop) {
|
|
var _super = this.prototype;
|
|
initializing = true;
|
|
var prototype = new this();
|
|
initializing = false;
|
|
for (var name in prop) {
|
|
prototype[name] = typeof prop[name] == "function" &&
|
|
typeof _super[name] == "function" && fnTest.test(prop[name]) ?
|
|
(function(name, fn){
|
|
return function() {
|
|
var tmp = this._super;
|
|
this._super = _super[name];
|
|
var ret = fn.apply(this, arguments);
|
|
this._super = tmp;
|
|
return ret;
|
|
};
|
|
})(name, prop[name]) :
|
|
prop[name];
|
|
}
|
|
function Class() {
|
|
if ( !initializing && this.init ) {
|
|
return this.init.apply(this, arguments);
|
|
|
|
// Attempting to recreate accessing function form of class.
|
|
} else if (!initializing) {
|
|
return arguments.callee.prototype.init()
|
|
}
|
|
}
|
|
Class.prototype = prototype;
|
|
Class.constructor = Class;
|
|
Class.extend = arguments.callee;
|
|
return Class;
|
|
};
|
|
})();
|
|
|
|
/* Player Component- Base class for all UI objects
|
|
================================================================================ */
|
|
_V_.Component = _V_.Class.extend({
|
|
|
|
init: function(player, options){
|
|
this.player = player;
|
|
|
|
if (options && options.el) {
|
|
this.el = options.el;
|
|
} else {
|
|
this.el = this.createElement();
|
|
}
|
|
|
|
// Array of sub-components
|
|
if (options && options.components) {
|
|
_V_.each.call(this, options.components, function(comp){
|
|
this.addComponent(comp);
|
|
});
|
|
}
|
|
},
|
|
|
|
destroy: function(){},
|
|
|
|
createElement: function(type, options){
|
|
options = _V_.merge({
|
|
/* Standar Options */
|
|
}, options || {});
|
|
return _V_.createElement(type || "div", options);
|
|
},
|
|
|
|
buildCSSClass: function(){
|
|
// Child classes can include a function that does:
|
|
// return "CLASS NAME" + this._super();
|
|
return "";
|
|
},
|
|
|
|
// Add child components to this component.
|
|
// Will generate a new child component and then append child component's element to this component's element.
|
|
// Takes either the name of the UI component class, or an object that contains a name, UI Class, and options.
|
|
addComponent: function(nameORobj){
|
|
var name, componentClass, options, component;
|
|
|
|
if (typeof nameORobj == "string") {
|
|
name = nameORobj;
|
|
|
|
// Can also pass in object to define a different class than the name and add other options
|
|
} else {
|
|
name = nameORobj.name;
|
|
componentClass = nameORobj.componentClass;
|
|
options = nameORobj.options;
|
|
}
|
|
|
|
if (!componentClass) {
|
|
// Assume name of set is a lowercased name of the UI Class (PlayButton, etc.)
|
|
componentClass = _V_.capitalize(name);
|
|
}
|
|
|
|
// Create a new object & element for this controls set
|
|
// If there's no .player, this is a player
|
|
component = new _V_[componentClass](this.player || this, options);
|
|
|
|
if (this.components === undefined) {
|
|
this.components = [];
|
|
}
|
|
this.components.push(component);
|
|
|
|
// Add the UI object's element to the container div (box)
|
|
this.el.appendChild(component.el);
|
|
},
|
|
|
|
/* Display
|
|
================================================================================ */
|
|
show: function(){
|
|
this.el.style.display = "block";
|
|
},
|
|
|
|
hide: function(){
|
|
this.el.style.display = "none";
|
|
},
|
|
|
|
addClass: function(classToAdd){
|
|
_V_.addClass(this.el, classToAdd);
|
|
},
|
|
|
|
removeClass: function(classToRemove){
|
|
_V_.removeClass(this.el, classToRemove);
|
|
},
|
|
|
|
/* Events
|
|
================================================================================ */
|
|
addEvent: function(type, fn){
|
|
return _V_.addEvent(this.el, type, _V_.proxy(this, fn));
|
|
},
|
|
removeEvent: function(type, fn){
|
|
return _V_.removeEvent(this.el, type, fn);
|
|
},
|
|
triggerEvent: function(type, e){
|
|
return _V_.triggerEvent(this.el, type, e);
|
|
},
|
|
|
|
/* Ready - Trigger functions when component is ready
|
|
================================================================================ */
|
|
ready: function(fn){
|
|
if (this.isReady) {
|
|
fn.call(this);
|
|
} else {
|
|
if (this.readyQueue !== undefined) {
|
|
this.readyQueue = [];
|
|
}
|
|
this.readyQueue.push(fn);
|
|
}
|
|
},
|
|
|
|
triggerReady: function(){
|
|
if (this.isReady) return;
|
|
this.isReady = true;
|
|
if (this.readyQueue.length > 0) {
|
|
// Call all functions in ready queue
|
|
this.each(this.readyQueue, function(fn){
|
|
fn.call(this);
|
|
});
|
|
|
|
// Reset Ready Queue
|
|
this.readyQueue = [];
|
|
}
|
|
},
|
|
|
|
/* Utility
|
|
================================================================================ */
|
|
each: function(arr, fn){
|
|
if (!arr || arr.length === 0) { return; }
|
|
for (var i=0,j=arr.length; i<j; i++) {
|
|
if (fn.call(this, arr[i], i)) { break; }
|
|
}
|
|
},
|
|
|
|
extend: function(obj){
|
|
for (var attrname in obj) {
|
|
if (obj.hasOwnProperty(attrname)) { this[attrname]=obj[attrname]; }
|
|
}
|
|
}
|
|
|
|
}); |