@@ -913,7 +913,7 @@ MistSkins["default"] = {
913913
914914 //control video states
915915 container . getPos = function ( e ) {
916- var perc = MistUtil . getPos ( this , e ) ;
916+ var perc = isNaN ( e ) ? MistUtil . getPos ( this , e ) : e ;
917917 if ( MistVideo . info . type == "live" ) {
918918 //live mode: seek in DVR window
919919 var bufferWindow = getBufferWindow ( ) ;
@@ -952,14 +952,8 @@ MistSkins["default"] = {
952952 return ;
953953 }
954954
955- if ( MistVideo . options . useDateTime && MistVideo . info && MistVideo . info . unixoffset ) {
956- tooltip . setText ( MistUtil . format . ago ( new Date ( MistVideo . info . unixoffset + secs * 1e3 ) ) ) ;
957- }
958- else {
959- tooltip . setText ( MistUtil . format . time ( secs ) ) ;
960- }
955+ tooltip . setDisplay ( secs ) ;
961956 tooltip . style . opacity = 1 ;
962-
963957
964958 var perc = MistUtil . getPos ( this , e ) ; // e.clientX - this.getBoundingClientRect().left;
965959 var pos = { bottom :20 } ;
@@ -974,6 +968,51 @@ MistSkins["default"] = {
974968 }
975969 tooltip . setPos ( pos ) ;
976970 } ;
971+ var realtime = document . createElement ( "span" ) ;
972+ realtime . setAttribute ( "class" , "mistvideo-realtime" ) ;
973+ var realtimetext = document . createTextNode ( "" ) ;
974+ realtime . appendChild ( realtimetext ) ;
975+
976+ tooltip . setDisplay = function ( secs ) {
977+ if ( MistVideo . options . useDateTime && MistVideo . info && MistVideo . info . unixoffset ) {
978+ var range = container . getPos ( 1 ) - container . getPos ( 0 ) ; //seconds between start and end of seekbar
979+ var ago = new Date ( ) . getTime ( ) * 1e-3 - ( MistVideo . info . unixoffset * 1e-3 + container . getPos ( 1 ) ) ; //seconds away from "live"
980+ var scale = Math . max ( range , ago ) ;
981+
982+ var str = "" ;
983+ if ( MistVideo . info . type == "live" ) {
984+ if ( scale < 60 ) {
985+ str = MistUtil . format . ago ( new Date ( MistVideo . info . unixoffset + secs * 1e3 ) ) ;
986+ }
987+ else {
988+ var secsago = new Date ( ) . getTime ( ) * 1e-3 - ( MistVideo . info . unixoffset * 1e-3 + secs ) ;
989+ if ( secsago < 48 * 3600 ) {
990+ //also show a negative timestamp that indicates how long ago this was
991+ str += " - " + MistUtil . format . time ( secsago ) ;
992+ }
993+ }
994+ }
995+ else {
996+ str += MistUtil . format . time ( secs ) ;
997+ }
998+ if ( scale >= 60 ) {
999+ //show when this was
1000+ realtimetext . nodeValue = " at " + MistUtil . format . ago ( new Date ( MistVideo . info . unixoffset + secs * 1e3 ) , scale * 1e3 ) ;
1001+ var f = document . createDocumentFragment ( ) ;
1002+ f . appendChild ( document . createTextNode ( str ) ) ;
1003+ f . appendChild ( realtime ) ;
1004+ tooltip . setHtml ( f ) ;
1005+ }
1006+ else {
1007+ realtimetext . nodeValue = "" ;
1008+ tooltip . setText ( str ) ;
1009+ }
1010+
1011+ }
1012+ else {
1013+ tooltip . setText ( MistUtil . format . time ( secs ) ) ;
1014+ }
1015+ } ;
9771016 MistUtil . event . addListener ( margincontainer , "mousemove" , function ( e ) {
9781017 container . moveTooltip ( e ) ;
9791018 } ) ;
@@ -1256,7 +1295,12 @@ MistSkins["default"] = {
12561295
12571296 var container = document . createElement ( "div" ) ;
12581297 var text = document . createTextNode ( "" ) ;
1298+ var realtime = document . createElement ( "span" ) ;
1299+ realtime . setAttribute ( "class" , "mistvideo-realtime" ) ;
12591300 container . appendChild ( text ) ;
1301+ container . appendChild ( realtime ) ;
1302+ var realtimetext = document . createTextNode ( "" ) ;
1303+ realtime . appendChild ( realtimetext ) ;
12601304
12611305 var video = MistVideo . player . api ;
12621306 var formatTime = MistUtil . format . time ;
@@ -1265,7 +1309,26 @@ MistSkins["default"] = {
12651309 var t ;
12661310 if ( MistVideo . options . useDateTime && MistVideo . info && MistVideo . info . unixoffset ) {
12671311 var d = new Date ( MistVideo . info . unixoffset + v * 1e3 ) ;
1268- t = MistUtil . format . ago ( d ) ;
1312+ var ago = new Date ( ) - d ;
1313+ realtimetext . nodeValue = "" ;
1314+ if ( MistVideo . info . type == "live" ) {
1315+ if ( ago < 60e3 ) {
1316+ t = MistUtil . format . ago ( d ) ;
1317+ }
1318+ else if ( ago < 12 * 3600e3 ) {
1319+ //show a negative time stamp
1320+ t = "- " + MistUtil . format . time ( ago * 1e-3 ) ;
1321+ }
1322+ else {
1323+ t = MistUtil . format . ago ( d ) ;
1324+ }
1325+ }
1326+ else {
1327+ t = formatTime ( v ) ;
1328+ if ( ( ago > 60e3 ) && ( MistVideo . size . width >= 600 ) ) {
1329+ realtimetext . nodeValue = " (at " + MistUtil . format . ago ( d ) + ")" ;
1330+ }
1331+ }
12691332 container . setAttribute ( "title" , MistUtil . format . ago ( d , 34560e6 ) ) ;
12701333 }
12711334 else {
@@ -1306,7 +1369,7 @@ MistSkins["default"] = {
13061369 }
13071370 this . style . display = "" ;
13081371
1309- if ( MistVideo . options . useDateTime && MistVideo . info && MistVideo . info . unixoffset ) {
1372+ if ( MistVideo . options . useDateTime && MistVideo . info && ( ( MistVideo . info . type == "live" ) && MistVideo . info . unixoffset ) ) {
13101373 var t = new Date ( duration * 1e3 + MistVideo . info . unixoffset )
13111374 text . nodeValue = MistUtil . format . ago ( t ) ;
13121375 container . setAttribute ( "title" , MistUtil . format . ago ( t , 34560e6 ) ) ; //format as if more than a year ago
@@ -2222,12 +2285,34 @@ MistSkins["default"] = {
22222285 } ,
22232286 tooltip : function ( ) {
22242287 var container = document . createElement ( "div" ) ;
2225-
2288+
2289+ var mode = "text" ;
22262290 var textNode = document . createTextNode ( "" ) ;
22272291 container . appendChild ( textNode ) ;
22282292 container . setText = function ( text ) {
22292293 textNode . nodeValue = text ;
2294+ if ( mode != "text" ) {
2295+ container . removeChild ( htmlNode ) ;
2296+ container . appendChild ( textNode ) ;
2297+ mode = "text" ;
2298+ }
22302299 } ;
2300+ var htmlNode = document . createElement ( "div" ) ;
2301+ htmlNode . empty = function ( ) {
2302+ htmlNode . innerText = "" ;
2303+ for ( var i = htmlNode . children . length - 1 ; i >= 0 ; i -- ) {
2304+ htmlNode . removeChild ( htmlNode . children [ i ] ) ;
2305+ }
2306+ } ;
2307+ container . setHtml = function ( ele ) {
2308+ htmlNode . empty ( ) ;
2309+ htmlNode . appendChild ( ele ) ;
2310+ if ( mode != "html" ) {
2311+ container . removeChild ( textNode ) ;
2312+ container . appendChild ( htmlNode ) ;
2313+ mode = "html" ;
2314+ }
2315+ }
22312316
22322317 var triangle = document . createElement ( "div" ) ;
22332318 container . triangle = triangle ;
0 commit comments