Files
mlib5/js/mlib.js
2013-03-26 14:01:05 +01:00

115 lines
3.8 KiB
JavaScript

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
function pageLoad() {
bread = document.getElementById('breadcrumb');
player = document.getElementById('player');
mediaSource = document.getElementById('playersource');
episodeInfo = document.getElementById('episodeInfo');
trackInfo = document.getElementById('trackInfo');
chapterInfo = document.getElementById('chapterInfo');
player.addEventListener('timeupdate', timeUpdate);
player.addEventListener('ended', trackEnded);
var episodeHTML = document.getElementById('episode');
var episodeJson = episodeHTML.contentDocument.body.firstChild.innerHTML;
episodeObj = jsonParse(episodeJson);
// episodeHTML.style.display="none";
actTitle = episodeObj.title;
actTrack = 0;
actChapter = 0;
createPlayList();
select = document.getElementById('list' + actTrack + '.' + actChapter);
select.setAttribute("class", "select");
jumpById(actTrack, actChapter);
}
function createPlayList() {
var playList = document.getElementById('playList');
var entryNumber = 1;
var listEntries = "";
for (var track in episodeObj.tracks) {
var trackObj = episodeObj.tracks[track];
if (trackObj.chapters) {
for (var chapter in trackObj.chapters) {
var chapterObj = trackObj.chapters[chapter];
listEntries = listEntries + "<li id=\"list" + track + "." + chapter + "\" onclick=\"jumpById(" + track + "," + chapter + ");\"><a href=\"#\">" + entryNumber++ + ": " + chapterObj.title + "</a></li>";
}
} else {
listEntries = listEntries + "<li id=\"list" + track + ".0\" onclick=\"jumpById(" + track + ",0);\"><a href=\"#\">" + entryNumber++ + ": " + trackObj.title + "</a></li>";
}
}
playList.innerHTML = listEntries;
}
function jumpById(trackId, chapterId) {
if (!episodeObj.tracks || trackId >= episodeObj.tracks.length) {
return;
}
var trackObj = episodeObj.tracks[trackId];
var trackSrc = trackObj.src;
var trackTime = 0;
if (trackObj.chapters && chapterId < trackObj.chapters.length) {
var chapterObj = trackObj.chapters[chapterId];
trackTime = chapterObj.time;
}
actTrack = trackId;
actChapter = chapterId;
trackChapChanged(actTrack, actChapter);
mediaSource.src = trackSrc + "#t=" + trackTime;
player.load();
}
function timeUpdate() {
var oldChapter = actChapter;
actChapter = calcChapterId(actTrack, player.currentTime);
if (actChapter !== oldChapter) {
trackChapChanged(actTrack, actChapter);
}
}
function trackChapChanged(trackId, chapterId) {
episodeInfo.innerHTML = "";
trackInfo.innerHTML = "";
chapterInfo.innerHTML = "";
episodeInfo.innerHTML = unescape(episodeObj.info);
var trackObj = episodeObj.tracks[trackId];
trackInfo.innerHTML = unescape(trackObj.info);
var actNewTitle = episodeObj.title + " -> " + trackObj.title;
if (trackObj.chapters && chapterId < trackObj.chapters.length) {
var chapterObj = trackObj.chapters[chapterId];
chapterInfo.innerHTML = unescape(chapterObj.info);
actNewTitle = actNewTitle + " -> " + chapterObj.title;
}
select.setAttribute("class", "");
select = document.getElementById('list' + actTrack + '.' + actChapter);
select.setAttribute("class", "select");
bread.innerHTML = actNewTitle;
}
function calcChapterId(trackId, time) {
var trackObj = episodeObj.tracks[trackId];
var newChapId = 0;
for (var chapter in trackObj.chapters) {
var chapterObj = trackObj.chapters[chapter];
if (chapterObj.time <= time) {
newChapId = chapter;
} else {
return newChapId;
}
}
return newChapId;
}
function trackEnded() {
jumpById(actTrack+1, 0);
}