Files
mlib5/js/mlib.js
2013-03-09 16:19:12 +01:00

106 lines
3.5 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);
actTitle = episodeObj.title;
actTrack = 0;
actChapter = 0;
createPlayList();
jumpById(actTrack, actChapter);
select = document.getElementById('list' + actTrack + '.' + actChapter);
select.setAttribute("class", "select");
}
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 + ");\">" + entryNumber++ + ": " + chapterObj.title + "</li>";
}
} else {
listEntries = listEntries + "<li id=\"list" + track + ".0\" onclick=\"jumpById(" + track + ",0);\">" + entryNumber++ + ": " + trackObj.title + "</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;
mediaSource.src = trackSrc + "#t=" + trackTime;
player.load();
}
function timeUpdate() {
actChapter = calcChapterId(actTrack, player.currentTime);
bread.innerHTML = createBreadCrumb(actTrack, actChapter);
select.setAttribute("class", "");
select = document.getElementById('list' + actTrack + '.' + actChapter);
select.setAttribute("class", "select");
}
function createBreadCrumb(trackId, chapterId) {
episodeInfo.innerHTML = episodeObj.info;
var trackObj = episodeObj.tracks[trackId];
trackInfo.innerHTML = trackObj.info;
var actNewTitle = episodeObj.title + " -> " + trackObj.title;
if (trackObj.chapters && chapterId < trackObj.chapters.length) {
var chapterObj = trackObj.chapters[chapterId];
chapterInfo.innerHTML = chapterObj.info;
actNewTitle = actNewTitle + " -> " + chapterObj.title;
}
return 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);
}