2017-11-11 00:34:47 +00:00
var menuState = [ ] ;
2017-12-10 00:17:19 +00:00
var titleBar = document . querySelector ( ".cineraMenus" ) ;
2017-11-11 00:34:47 +00:00
var quotesMenu = titleBar . querySelector ( ".quotes_container" ) ;
if ( quotesMenu )
{
menuState . push ( quotesMenu ) ;
2017-12-08 01:04:59 +00:00
var quoteItems = quotesMenu . querySelectorAll ( ".ref" ) ;
if ( quoteItems )
{
for ( var i = 0 ; i < quoteItems . length ; ++ i )
{
quoteItems [ i ] . addEventListener ( "mouseenter" , function ( ev ) {
mouseOverQuotes ( this ) ;
} )
} ;
}
2017-11-11 00:34:47 +00:00
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" ) ;
2018-04-22 20:57:31 +00:00
var filterInitState = new Object ( ) ;
var filterState = new Object ( ) ;
2017-11-11 00:34:47 +00:00
for ( var i = 0 ; i < filterItems . length ; ++ i )
{
filterItems [ i ] . addEventListener ( "mouseenter" , function ( ev ) {
navigateFilter ( this ) ;
} )
filterItems [ i ] . addEventListener ( "click" , function ( ev ) {
filterItemToggle ( this ) ;
} ) ;
2018-04-22 20:57:31 +00:00
var filterItemName = filterItems [ i ] . classList . item ( 1 ) ;
if ( filterItems [ i ] . parentNode . classList . contains ( "filter_topics" ) )
{
filterInitState [ filterItemName ] = { "type" : "topic" , "off" : ( filterItems [ i ] . classList . item ( 2 ) == "off" ) } ;
filterState [ filterItemName ] = { "type" : "topic" , "off" : ( filterItems [ i ] . classList . item ( 2 ) == "off" ) } ;
}
else
{
filterInitState [ filterItemName ] = { "type" : "medium" , "off" : ( filterItems [ i ] . classList . item ( 2 ) == "off" ) } ;
filterState [ filterItemName ] = { "type" : "medium" , "off" : ( filterItems [ i ] . classList . item ( 2 ) == "off" ) } ;
}
2017-11-11 00:34:47 +00:00
}
}
2018-01-17 20:15:00 +00:00
var views = {
REGULAR : 1 ,
THEATRE : 2 ,
SUPERTHEATRE : 3 ,
} ;
var cineraProps = {
C : null ,
V : views . REGULAR ,
Z : null ,
X : null ,
Y : null ,
W : null ,
2018-02-23 23:36:42 +00:00
mW : null ,
2018-01-17 20:15:00 +00:00
H : null ,
2018-02-23 23:36:42 +00:00
mH : null ,
2018-01-17 20:15:00 +00:00
P : null
} ;
var viewsMenu = titleBar . querySelector ( ".views" ) ;
if ( viewsMenu )
{
2018-05-22 21:43:59 +00:00
menuState . push ( viewsMenu ) ;
2018-01-17 20:15:00 +00:00
var viewsContainer = viewsMenu . querySelector ( ".views_container" ) ;
viewsMenu . addEventListener ( "mouseenter" , function ( ev ) {
handleMouseOverViewsMenu ( ) ;
} ) ;
viewsMenu . addEventListener ( "mouseleave" , function ( ev ) {
viewsContainer . style . display = "none" ;
} ) ;
var viewItems = viewsMenu . querySelectorAll ( ".view" ) ;
for ( var i = 0 ; i < viewItems . length ; ++ i )
{
viewItems [ i ] . addEventListener ( "click" , function ( ev ) {
switch ( this . getAttribute ( "data-id" ) )
{
case "regular" :
case "theatre" :
{
toggleTheatreMode ( ) ;
} break ;
case "super" :
{
toggleSuperTheatreMode ( ) ;
} break ;
}
} ) ;
}
}
2018-05-22 21:43:59 +00:00
var baseURL = location . hash ? ( location . toString ( ) . substr ( 0 , location . toString ( ) . length - location . hash . length ) ) : location ;
var linkMenu = titleBar . querySelector ( ".link_container" ) ;
linkAnnotation = true ;
if ( linkMenu )
{
menuState . push ( linkMenu ) ;
var linkMode = linkMenu . querySelector ( "#cineraLinkMode" ) ;
var link = linkMenu . querySelector ( "#cineraLink" ) ;
linkMode . addEventListener ( "click" , function ( ev ) {
toggleLinkMode ( linkMode , link ) ;
} ) ;
link . addEventListener ( "click" , function ( ev ) {
CopyToClipboard ( link ) ;
toggleMenuVisibility ( linkMenu ) ;
} ) ;
}
2017-11-11 00:34:47 +00:00
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 )
{
2018-04-22 20:57:31 +00:00
supportIcons [ i ] . style . backgroundImage = "url(\"" + supportIcons [ i ] . getAttribute ( "data-sprite" ) + "\")" ;
2017-11-11 00:34:47 +00:00
setIconLightness ( supportIcons [ i ] ) ;
}
}
}
var sourceMenus = titleBar . querySelectorAll ( ".menu" ) ;
var helpButton = titleBar . querySelector ( ".help" ) ;
2018-04-17 23:05:14 +00:00
window . addEventListener ( "blur" , function ( ) {
helpButton . firstElementChild . innerText = "¿" ;
helpButton . firstElementChild . title = "Keypresses will not pass through to Cinera because focus is currently elsewhere.\n\nTo regain focus, please press Tab / Shift-Tab (multiple times) or click somewhere related to Cinera other than the video, e.g. this button" ;
} ) ;
window . addEventListener ( "focus" , function ( ) {
helpButton . firstElementChild . innerText = "?" ;
helpButton . firstElementChild . title = ""
} ) ;
2017-11-11 00:34:47 +00:00
var helpDocumentation = helpButton . querySelector ( ".help_container" ) ;
helpButton . addEventListener ( "click" , function ( ev ) {
handleMouseOverMenu ( this , ev . type ) ;
} )
var focusedElement = null ;
var focusedIdentifier = null ;
2017-12-10 00:17:19 +00:00
var playerContainer = document . querySelector ( ".cineraPlayerContainer" )
2018-01-15 21:52:24 +00:00
var cinera = playerContainer . parentNode ;
2017-11-11 00:34:47 +00:00
var player = new Player ( playerContainer , onRefChanged ) ;
2018-04-17 23:05:14 +00:00
var cineraViewStorageItem = "cineraView" ;
if ( viewsMenu && localStorage . getItem ( cineraViewStorageItem ) )
{
toggleTheatreMode ( ) ;
}
2017-11-11 00:34:47 +00:00
window . addEventListener ( "resize" , function ( ) { player . updateSize ( ) ; } ) ;
document . addEventListener ( "keydown" , function ( ev ) {
var key = ev . key ;
if ( ev . getModifierState ( "Shift" ) && key == " " )
{
key = "capitalSpace" ;
}
2018-05-22 21:43:59 +00:00
if ( ! ev . getModifierState ( "Control" ) && handleKey ( key ) == true && focusedElement )
2017-11-11 00:34:47 +00:00
{
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 ) ;
} )
} ;
2018-02-28 01:04:06 +00:00
var prevEpisode = playerContainer . querySelector ( ".episodeMarker.prev" ) ;
var nextEpisode = playerContainer . querySelector ( ".episodeMarker.next" ) ;
2017-11-11 00:34:47 +00:00
var testMarkers = playerContainer . querySelectorAll ( ".marker" ) ;
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 ] ) ;
}
2018-04-17 23:05:14 +00:00
var lastAnnotationStorageItem = "cineraTimecode_" + window . location . pathname ;
var lastAnnotation ;
2017-11-11 00:34:47 +00:00
if ( location . hash ) {
player . setTime ( location . hash . startsWith ( '#' ) ? location . hash . substr ( 1 ) : location . hash ) ;
}
2018-04-17 23:05:14 +00:00
else if ( lastAnnotation = localStorage . getItem ( lastAnnotationStorageItem ) )
{
player . setTime ( lastAnnotation ) ;
}