187 lines
5.6 KiB
JavaScript
187 lines
5.6 KiB
JavaScript
|
var menuState = [];
|
||
|
var titleBar = document.querySelector(".title");
|
||
|
var quotesMenu = titleBar.querySelector(".quotes_container");
|
||
|
if(quotesMenu)
|
||
|
{
|
||
|
menuState.push(quotesMenu);
|
||
|
var quoteTimecodes = quotesMenu.querySelectorAll(".refs .ref .ref_indices .timecode");
|
||
|
for (var i = 0; i < quoteTimecodes.length; ++i) {
|
||
|
quoteTimecodes[i].addEventListener("click", function(ev) {
|
||
|
if (player) {
|
||
|
var time = ev.currentTarget.getAttribute("data-timestamp");
|
||
|
mouseSkipToTimecode(player, time, ev);
|
||
|
}
|
||
|
});
|
||
|
}
|
||
|
var lastFocusedQuote = null;
|
||
|
}
|
||
|
|
||
|
var referencesMenu = titleBar.querySelector(".references_container");
|
||
|
if(referencesMenu)
|
||
|
{
|
||
|
menuState.push(referencesMenu);
|
||
|
var referenceItems = referencesMenu.querySelectorAll(".ref");
|
||
|
if(referenceItems)
|
||
|
{
|
||
|
for(var i = 0; i < referenceItems.length; ++i)
|
||
|
{
|
||
|
referenceItems[i].addEventListener("mouseenter", function(ev) {
|
||
|
mouseOverReferences(this);
|
||
|
})
|
||
|
};
|
||
|
var lastFocusedReference = null;
|
||
|
var lastFocusedIdentifier = null;
|
||
|
}
|
||
|
|
||
|
var refTimecodes = referencesMenu.querySelectorAll(".refs .ref .ref_indices .timecode");
|
||
|
for (var i = 0; i < refTimecodes.length; ++i) {
|
||
|
refTimecodes[i].addEventListener("click", function(ev) {
|
||
|
if (player) {
|
||
|
var time = ev.currentTarget.getAttribute("data-timestamp");
|
||
|
mouseSkipToTimecode(player, time, ev);
|
||
|
}
|
||
|
});
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if(referencesMenu || quotesMenu)
|
||
|
{
|
||
|
var refSources = titleBar.querySelectorAll(".refs .ref"); // This is for both quotes and refs
|
||
|
for (var i = 0; i < refSources.length; ++i) {
|
||
|
refSources[i].addEventListener("click", function(ev) {
|
||
|
if (player) {
|
||
|
player.pause();
|
||
|
}
|
||
|
});
|
||
|
}
|
||
|
}
|
||
|
|
||
|
var filterMenu = titleBar.querySelector(".filter_container");
|
||
|
if(filterMenu)
|
||
|
{
|
||
|
menuState.push(filterMenu);
|
||
|
var lastFocusedCategory = null;
|
||
|
var lastFocusedTopic = null;
|
||
|
var lastFocusedMedium = null;
|
||
|
|
||
|
var filter = filterMenu.parentNode;
|
||
|
|
||
|
var filterModeElement = filter.querySelector(".filter_mode");
|
||
|
filterModeElement.addEventListener("click", function(ev) {
|
||
|
toggleFilterMode();
|
||
|
});
|
||
|
|
||
|
var filterMode = filterModeElement.classList[1];
|
||
|
var filterItems = filter.querySelectorAll(".filter_content");
|
||
|
for(var i = 0; i < filterItems.length; ++i)
|
||
|
{
|
||
|
filterItems[i].addEventListener("mouseenter", function(ev) {
|
||
|
navigateFilter(this);
|
||
|
})
|
||
|
|
||
|
filterItems[i].addEventListener("click", function(ev) {
|
||
|
filterItemToggle(this);
|
||
|
});
|
||
|
}
|
||
|
}
|
||
|
|
||
|
var creditsMenu = titleBar.querySelector(".credits_container");
|
||
|
if(creditsMenu)
|
||
|
{
|
||
|
menuState.push(creditsMenu);
|
||
|
var lastFocusedCreditItem = null;
|
||
|
|
||
|
var creditItems = creditsMenu.querySelectorAll(".person, .support");
|
||
|
for(var i = 0; i < creditItems.length; ++i)
|
||
|
{
|
||
|
creditItems[i].addEventListener("mouseenter", function(ev) {
|
||
|
if(this != lastFocusedCreditItem)
|
||
|
{
|
||
|
lastFocusedCreditItem.classList.remove("focused");
|
||
|
if(lastFocusedCreditItem.classList.contains("support"))
|
||
|
{
|
||
|
setIconLightness(lastFocusedCreditItem.firstChild);
|
||
|
}
|
||
|
lastFocusedCreditItem = this;
|
||
|
focusedElement = lastFocusedCreditItem;
|
||
|
focusedElement.classList.add("focused");
|
||
|
if(focusedElement.classList.contains("support"))
|
||
|
{
|
||
|
setIconLightness(focusedElement.firstChild);
|
||
|
}
|
||
|
}
|
||
|
})
|
||
|
}
|
||
|
|
||
|
var supportIcons = creditsMenu.querySelectorAll(".support_icon");
|
||
|
{
|
||
|
for(var i = 0; i < supportIcons.length; ++i)
|
||
|
{
|
||
|
setIconLightness(supportIcons[i]);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
}
|
||
|
var sourceMenus = titleBar.querySelectorAll(".menu");
|
||
|
|
||
|
var helpButton = titleBar.querySelector(".help");
|
||
|
var helpDocumentation = helpButton.querySelector(".help_container");
|
||
|
helpButton.addEventListener("click", function(ev) {
|
||
|
handleMouseOverMenu(this, ev.type);
|
||
|
})
|
||
|
|
||
|
var focusedElement = null;
|
||
|
var focusedIdentifier = null;
|
||
|
|
||
|
var playerContainer = document.querySelector(".player_container")
|
||
|
var player = new Player(playerContainer, onRefChanged);
|
||
|
window.addEventListener("resize", function() { player.updateSize(); });
|
||
|
document.addEventListener("keydown", function(ev) {
|
||
|
var key = ev.key;
|
||
|
if(ev.getModifierState("Shift") && key == " ")
|
||
|
{
|
||
|
key = "capitalSpace";
|
||
|
}
|
||
|
|
||
|
if(handleKey(key) == true && focusedElement)
|
||
|
{
|
||
|
ev.preventDefault();
|
||
|
}
|
||
|
});
|
||
|
|
||
|
for(var i = 0; i < sourceMenus.length; ++i)
|
||
|
{
|
||
|
sourceMenus[i].addEventListener("mouseenter", function(ev) {
|
||
|
handleMouseOverMenu(this, ev.type);
|
||
|
})
|
||
|
sourceMenus[i].addEventListener("mouseleave", function(ev) {
|
||
|
handleMouseOverMenu(this, ev.type);
|
||
|
})
|
||
|
};
|
||
|
|
||
|
var testMarkers = playerContainer.querySelectorAll(".marker");
|
||
|
|
||
|
window.addEventListener("blur", function(){
|
||
|
document.getElementById("focus-warn").style.display = "block";
|
||
|
});
|
||
|
|
||
|
window.addEventListener("focus", function(){
|
||
|
document.getElementById("focus-warn").style.display = "none";
|
||
|
});
|
||
|
|
||
|
var colouredItems = playerContainer.querySelectorAll(".author, .member, .project");
|
||
|
for(i = 0; i < colouredItems.length; ++i)
|
||
|
{
|
||
|
setTextLightness(colouredItems[i]);
|
||
|
}
|
||
|
|
||
|
var topicDots = document.querySelectorAll(".category");
|
||
|
for(var i = 0; i < topicDots.length; ++i)
|
||
|
{
|
||
|
setDotLightness(topicDots[i]);
|
||
|
}
|
||
|
|
||
|
if(location.hash) {
|
||
|
player.setTime(location.hash.startsWith('#') ? location.hash.substr(1) : location.hash);
|
||
|
}
|