'use strict'; /*@ Ox.VideoElement VideoElement Object ([options[, self]]) -> VideoElement Object loadedmetadata loadedmetadata pointschange pointschange seeked seeked seeking seeking sizechange sizechange ended ended options Options object self shared private variable @*/ Ox.VideoElement = function(options, self) { self = self || {}; var that = Ox.Element({}, self) .defaults({ autoplay: false, preload: 'none', src: [] }) .options(options || {}) .css({width: '100%', height: '100%'}); Ox.Log('Video', 'VIDEO ELEMENT OPTIONS', self.options); self.currentPart = 0; self.items = []; self.loadedMetadata = false; self.paused = true; self.$video = $('
'); if (Ox.isFunction(self.options.src)) { self.isPlaylist = true; self.currentItem = 0; self.currentPage = 0; self.loadedMetadata = false; self.pageLength = 2; self.options.src(function(items) { self.numberOfItems = items; self.numberOfPages = Math.ceil(self.numberOfItems / self.pageLength); loadPages(function() { Ox.Log('Video', 'VIDEO PAGES LOADED'); setCurrentItem(0); if (!self.loadedMedatata) { self.loadedMetadata = true; that.triggerEvent('loadedmetadata'); that.triggerEvent('pointschange'); // fixme: needs to be triggered again, loadedmetadata messes with duration } }); }); } else { self.numberOfItems = 1; self.items.push(loadItem(self.options.src)); } function getCurrentPage() { return Math.floor(self.currentItem / self.pageLength); } function getCurrentTime() { return self.items[self.currentItem].offsets[self.currentPart] + self.video.currentTime; } function getset(key, value) { var ret; if (Ox.isUndefined(value)) { ret = self.video[key]; } else { self.video[key] = value; ret = that; } return ret; } function loadItem(src, points, callback) { src = Ox.isArray(src) ? src : [src]; var item = { currentPart: 0, duration: 0, durations: src.map(function() { return 0; }), offsets: [], parts: src.length }; if (points) { item.points = points; } item.$videos = src.map(function(src, i) { // in all browsers except firefox, // loadedmetadata fires only once per src if (Ox.startsWith(Ox.parseURL(src).protocol, 'http')) { src += '?' + Ox.uid(); } return $('