2015-08-22 18:35:20 +02:00
jQuery ( document ) . ready ( function ( $ ) {
initOldVersionWarnings ( $ ) ;
} ) ;
function initOldVersionWarnings ( $ ) {
2016-03-08 15:11:43 +01:00
$ . get ( "//akka.io/versions.json" , function ( akkaVersionsData ) {
var site = splitPath ( ) ;
console . log ( site ) ;
if ( site . v === 'snapshot' ) {
2015-08-22 18:35:20 +02:00
console . log ( "Detected SNAPSHOT Akka version..." ) ;
2016-03-08 15:11:43 +01:00
showSnapshotWarning ( site ) ;
2015-08-22 18:35:20 +02:00
} else {
2016-03-08 15:11:43 +01:00
for ( var series in akkaVersionsData [ site . p ] ) {
if ( site . v . startsWith ( series ) ) {
return showVersionWarning ( site , akkaVersionsData , series ) ;
2015-08-22 18:35:20 +02:00
}
}
}
} ) ;
}
2016-03-08 15:11:43 +01:00
function splitPath ( ) {
var path = window . location . pathname ;
path = path . substring ( path . indexOf ( "akka" ) ) ; // string off leading /docs/
var base = '' + window . location ;
base = base . substring ( 0 , base . indexOf ( path ) ) ;
var projectEnd = path . indexOf ( "/" ) ;
var versionEnd = path . indexOf ( "/" , projectEnd + 1 ) ;
var project = path . substring ( 0 , projectEnd ) ;
var version = path . substring ( projectEnd + 1 , versionEnd ) ;
var rest = path . substring ( versionEnd + 1 ) ;
return { "b" : base , "p" : project , "v" : version , "r" : rest } ;
2015-08-22 18:35:20 +02:00
}
2016-03-08 15:11:43 +01:00
function getInstead ( akkaVersionsData , project , instead ) {
if ( Array . isArray ( instead ) ) {
var found = akkaVersionsData [ instead [ 0 ] ] [ instead [ 1 ] ] ;
var proj = instead [ 0 ] ;
} else {
var found = akkaVersionsData [ project ] [ instead ] ;
var proj = project ;
}
return { "latest" : found . latest , "project" : proj } ;
}
function targetUrl ( samePage , site , instead ) {
var page = site . r ;
if ( samePage !== true ) {
if ( page . substring ( 0 , 5 ) == 'scala' ) {
page = 'scala.html' ;
} else if ( page . substring ( 0 , 4 ) == 'java' ) {
page = 'java.html' ;
} else {
page = 'index.html' ;
}
}
var project = instead . project ;
if ( ! project ) {
project = site . p ;
}
return site . b + project + '/' + instead . latest + '/' + page ;
}
function showVersionWarning ( site , akkaVersionsData , series ) {
var version = site . v ;
var seriesInfo = akkaVersionsData [ site . p ] [ series ] ;
2015-08-22 18:35:20 +02:00
var $floatyWarning = $ ( '<div id="floaty-warning"/>' ) ;
console . log ( "Current version info" , seriesInfo ) ;
var isOutdated = ! ! seriesInfo . outdated ;
2015-08-22 18:35:20 +02:00
var isLatestInSeries = version == seriesInfo . latest ;
var needsToShow = false ;
2015-08-22 18:35:20 +02:00
if ( isOutdated ) {
2015-08-22 18:35:20 +02:00
needsToShow = true ;
2015-08-22 18:35:20 +02:00
$floatyWarning . addClass ( "warning" ) ;
2016-03-08 15:11:43 +01:00
var instead = getInstead ( akkaVersionsData , site . p , seriesInfo . instead ) ;
var insteadSeries = targetUrl ( false , site , instead ) ;
var insteadPage = targetUrl ( true , site , instead ) ;
2015-08-22 18:35:20 +02:00
$floatyWarning
. append (
2016-03-08 15:11:43 +01:00
'<p><span style="font-weight: bold">This version of Akka (' + site . p + ' / ' + version + ') is outdated and not supported! </span></p>' +
'<p>Please upgrade to version <a href="' + insteadSeries + '">' + instead . latest + '</a> as soon as possible.</p>' +
'<p id="samePageLink"></p>' ) ;
$ . ajax ( {
url : insteadPage ,
type : 'HEAD' ,
success : function ( ) {
$ ( '#samePageLink' ) . html ( '<a href="' + insteadPage + '">Click here to go to the same page on the ' + instead . latest + ' version of the docs.</a>' ) ;
}
} ) ;
2015-08-22 18:35:20 +02:00
}
2016-03-08 15:11:43 +01:00
2015-08-22 18:35:20 +02:00
if ( ! isLatestInSeries ) {
needsToShow = true ;
2015-08-22 18:35:20 +02:00
$floatyWarning
2015-08-22 18:35:20 +02:00
. append (
'<p>' +
2015-08-22 18:35:20 +02:00
'You are browsing the docs for Akka ' + version + ', ' +
'however the latest release in this series is: ' +
2016-03-08 15:11:43 +01:00
'<a href="' + targetUrl ( true , site , seriesInfo ) + '">' + seriesInfo . latest + '</a>. <br/>' +
2015-08-22 18:35:20 +02:00
'</p>' ) ;
2015-08-22 18:35:20 +02:00
}
2016-03-08 15:11:43 +01:00
if ( needsToShow && ! versionWasAcked ( site . p , version ) ) {
var style = '' ;
if ( site . p != 'akka-stream-and-http-experimental' ) {
style = 'style="color:black"'
}
var $close = $ ( '<button id="close-floaty-window" ' + style + '>Dismiss Warning for a Day</button>' )
2015-08-22 18:35:20 +02:00
. click ( function ( ) {
2016-03-08 15:11:43 +01:00
ackVersionForADay ( site . p , version ) ;
2015-08-22 18:35:20 +02:00
$floatyWarning . hide ( ) ;
} ) ;
$floatyWarning
. hide ( )
. append ( $close )
. prependTo ( "body" )
. show ( )
}
2015-08-22 18:35:20 +02:00
}
2016-03-08 15:11:43 +01:00
function showSnapshotWarning ( site ) {
if ( ! versionWasAcked ( site . p , 'snapshot' ) ) {
var $floatyWarning = $ ( '<div id="floaty-warning" class="warning"/>' ) ;
var instead = { 'latest' : 'current' } ;
var insteadSeries = targetUrl ( false , site , instead ) ;
var insteadPage = targetUrl ( true , site , instead ) ;
2015-08-22 18:35:20 +02:00
2016-03-08 15:11:43 +01:00
$floatyWarning
. append (
'<p><span style="font-weight: bold">You are browsing the snapshot documentation, which most likely does not correspond to the artifacts you are using! </span></p>' +
'<p>We recommend that you head over to <a href="' + insteadSeries + '">the latest stable version</a> instead.</p>' +
'<p id="samePageLink"></p>' ) ;
$ . ajax ( {
url : insteadPage ,
type : 'HEAD' ,
success : function ( ) {
$ ( '#samePageLink' ) . html ( '<a href="' + insteadPage + '">Click here to go to the same page on the latest stable version of the docs.</a>' ) ;
}
} ) ;
var style = '' ;
if ( site . p != 'akka-stream-and-http-experimental' ) {
style = 'style="color:black"'
}
var $close = $ ( '<button id="close-floaty-window" ' + style + '>Dismiss Warning for a Day</button>' )
. click ( function ( ) {
ackVersionForADay ( site . p , 'snapshot' ) ;
$floatyWarning . hide ( ) ;
} ) ;
$floatyWarning
. hide ( )
. append ( $close )
. prependTo ( "body" )
. show ( )
}
2015-08-22 18:35:20 +02:00
}
2015-08-22 18:35:20 +02:00
// --- ack outdated versions ---
2016-03-08 15:11:43 +01:00
function ackVersionCookieName ( project , version ) {
return "ack-" + project + "-" + version ;
2015-08-22 18:35:20 +02:00
}
2016-03-08 15:11:43 +01:00
function ackVersionForADay ( project , version ) {
2015-08-22 18:35:20 +02:00
function setCookie ( cname , cvalue , exdays ) {
var d = new Date ( ) ;
d . setTime ( d . getTime ( ) + ( exdays * 24 * 60 * 60 * 1000 ) ) ;
var expires = "expires=" + d . toUTCString ( ) ;
document . cookie = cname + "=" + cvalue + "; " + expires ;
}
2016-03-08 15:11:43 +01:00
setCookie ( ackVersionCookieName ( project , version ) , 'true' , 1 )
2015-08-22 18:35:20 +02:00
}
2016-03-08 15:11:43 +01:00
function versionWasAcked ( project , version ) {
2015-08-22 18:35:20 +02:00
function getCookie ( cname ) {
var name = cname + "=" ;
var ca = document . cookie . split ( ';' ) ;
for ( var i = 0 ; i < ca . length ; i ++ ) {
var c = ca [ i ] ;
while ( c . charAt ( 0 ) == ' ' ) c = c . substring ( 1 ) ;
if ( c . indexOf ( name ) == 0 ) return c . substring ( name . length , c . length ) ;
}
return "" ;
}
2016-03-08 15:11:43 +01:00
return getCookie ( ackVersionCookieName ( project , version ) ) === 'true' ;
2015-08-22 18:35:20 +02:00
}