114 lines
3.8 KiB
JavaScript
114 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);
|
|
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 = 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;
|
|
}
|
|
|
|
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);
|
|
} |