2017-06-04 07:43:41 +02:00
// @source https://github.com/NyaaPantsu/nyaa/tree/dev/public/js
// @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt Expat
2017-05-26 13:13:06 +02:00
2017-05-27 19:08:47 +02:00
// Switches between themes when a new one is selected
2017-07-22 23:27:02 +02:00
2017-07-24 02:32:50 +02:00
function switchThemes ( ) {
2017-07-24 07:03:43 +02:00
var themeName = document . getElementById ( "theme-selector" ) . value
2017-07-21 01:47:36 +02:00
var head = document . getElementsByTagName ( "head" ) [ 0 ]
2017-07-16 17:36:17 +02:00
// Remove the theme in place, it fails if one isn't set
2017-07-24 02:32:50 +02:00
try {
2017-07-21 01:47:36 +02:00
head . removeChild ( document . getElementById ( "theme" ) )
2017-07-24 02:32:50 +02:00
} catch ( err ) { }
2017-07-16 17:36:17 +02:00
// Don't add a node if we don't want extra styling
2017-07-24 02:32:50 +02:00
if ( themeName === "" ) {
2017-07-21 01:47:36 +02:00
return
2017-07-16 17:36:17 +02:00
}
// Create the new one and put it back
2017-07-21 01:47:36 +02:00
var newTheme = document . createElement ( "link" )
newTheme . setAttribute ( "rel" , "stylesheet" )
2017-07-24 02:32:50 +02:00
newTheme . setAttribute ( "href" , "/css/" + themeName + ".css" )
2017-07-21 01:47:36 +02:00
newTheme . setAttribute ( "id" , "theme" )
head . appendChild ( newTheme )
2017-05-27 19:08:47 +02:00
}
2017-05-05 12:59:56 +02:00
// Used by spoiler tags
function toggleLayer ( elem ) {
2017-07-16 17:36:17 +02:00
if ( elem . classList . contains ( "hide" ) ) {
2017-07-21 01:47:36 +02:00
elem . classList . remove ( "hide" )
2017-07-16 17:36:17 +02:00
} else {
2017-07-21 01:47:36 +02:00
elem . classList . add ( "hide" )
2017-07-16 17:36:17 +02:00
}
2017-05-05 12:59:56 +02:00
}
2017-07-24 02:32:50 +02:00
2017-05-30 00:28:21 +02:00
function parseAllDates ( ) {
2017-07-16 17:36:17 +02:00
// Date formatting
2017-07-21 01:47:36 +02:00
var lang = document . getElementsByTagName ( "html" ) [ 0 ] . getAttribute ( "lang" )
2017-07-24 02:32:50 +02:00
var ymdOpt = {
year : "numeric" ,
month : "short" ,
day : "numeric"
}
var hmOpt = {
hour : "numeric" ,
minute : "numeric"
}
2017-05-05 15:55:25 +02:00
2017-07-21 01:47:36 +02:00
var list = document . getElementsByClassName ( "date-short" )
2017-07-24 02:32:50 +02:00
for ( var i in list ) {
2017-07-21 01:47:36 +02:00
var e = list [ i ]
2017-07-28 05:47:26 +02:00
e . title = new Date ( e . innerText ) . toLocaleString ( lang )
2017-07-21 01:47:36 +02:00
e . innerText = new Date ( e . innerText ) . toLocaleString ( lang , ymdOpt )
2017-07-16 17:36:17 +02:00
}
2017-05-05 15:55:25 +02:00
2017-07-21 01:47:36 +02:00
var list = document . getElementsByClassName ( "date-full" )
2017-07-24 02:32:50 +02:00
for ( var i in list ) {
2017-07-21 01:47:36 +02:00
var e = list [ i ]
2017-07-28 05:47:26 +02:00
var dateDifference = dateDiff ( new Date ( e . innerText ) , new Date ( ) )
e . title = dateDifference . d + " days " + dateDifference . h + " hours ago"
//e.title = T.r("torrent_age", dateDifference.d, dateDifference.h)
2017-07-21 01:47:36 +02:00
e . innerText = new Date ( e . innerText ) . toLocaleString ( lang )
2017-07-16 17:36:17 +02:00
}
2017-05-05 15:55:25 +02:00
}
2017-07-26 10:59:48 +02:00
function dateDiff ( str1 , str2 ) {
var diff = Date . parse ( str2 ) - Date . parse ( str1 ) ;
return isNaN ( diff ) ? NaN : {
diff : diff ,
h : Math . floor ( diff / 3600000 % 24 ) ,
d : Math . floor ( diff / 86400000 )
} ;
}
2017-07-21 01:47:36 +02:00
parseAllDates ( )
2017-05-31 04:21:35 +02:00
2017-07-24 02:32:50 +02:00
//called if no Commit cookie is set or if the website has a newer commit than the one in cookie
function resetCookies ( ) {
2017-07-28 05:47:26 +02:00
var cookies = document . cookie . split ( ";" )
var excludedCookies = [ "mascot" , "theme" , "mascot_url" , "lang" , "csrf_token" ]
2017-07-23 04:50:36 +02:00
2017-07-24 02:32:50 +02:00
//Remove all cookies but exclude those in the above array
for ( var i = 0 ; i < cookies . length ; i ++ ) {
2017-07-28 05:47:26 +02:00
var cookieName = ( cookies [ i ] . split ( "=" ) [ 0 ] ) . trim ( )
2017-07-24 02:32:50 +02:00
//Remove spaces because some cookie names have it
2017-07-28 05:47:26 +02:00
if ( excludedCookies . includes ( cookieName ) ) continue
document . cookie = cookieName + "=;expires=Thu, 01 Jan 1970 00:00:00 UTC;"
2017-07-22 23:27:02 +02:00
}
2017-07-23 04:50:36 +02:00
2017-07-24 02:32:50 +02:00
//Set new version in cookie
2017-07-28 05:47:26 +02:00
var farFuture = new Date ( )
farFuture . setTime ( farFuture . getTime ( ) + 50 * 36000 * 15000 )
document . cookie = "commit=" + commitVersion + ";expires=" + farFuture . toUTCString ( )
2017-07-23 04:50:36 +02:00
2017-07-28 05:47:26 +02:00
var oneHour = new Date ( )
oneHour . setTime ( oneHour . getTime ( ) + 1 * 3600 * 1500 )
document . cookie = "newVersion=true; expires=" + oneHour . toUTCString ( )
2017-07-24 02:32:50 +02:00
}
2017-07-23 04:50:36 +02:00
2017-07-22 23:27:02 +02:00
2017-05-13 00:37:37 +02:00
/*Fixed-Navbar offset fix*/
2017-07-24 02:32:50 +02:00
if ( document . getElementsByClassName ( "search-box" ) [ 0 ] !== undefined )
2017-07-23 04:50:36 +02:00
startupCode ( )
else
2017-07-24 02:32:50 +02:00
document . addEventListener ( "DOMContentLoaded" , function ( event ) {
startupCode ( )
} )
2017-07-16 17:36:17 +02:00
2017-07-10 15:24:52 +02:00
2017-07-23 00:00:44 +02:00
function startupCode ( ) {
2017-07-24 02:32:50 +02:00
var shiftWindow = function ( ) {
scrollBy ( 0 , - 70 )
}
2017-07-23 02:22:33 +02:00
if ( location . hash ) shiftWindow ( )
window . addEventListener ( "hashchange" , shiftWindow )
2017-07-23 00:00:44 +02:00
2017-07-24 02:32:50 +02:00
if ( ! document . cookie . includes ( "commit" ) )
2017-07-23 19:08:42 +02:00
resetCookies ( )
else {
2017-07-24 02:32:50 +02:00
var startPos = document . cookie . indexOf ( "commit" ) + 7 ,
endPos = document . cookie . substring ( startPos ) . indexOf ( ";" ) ,
userCommitVersion = endPos == "-1" ? document . cookie . substring ( startPos ) : document . cookie . substring ( startPos , endPos + startPos ) ;
//Get start and end position of Commit string, need to start searching endPos from version cookie in case it's not the first cookie in the string
//If endPos is equal to -1, aka if the version cookie is at the very end of the string and doesn't have an ";", the endPos is not used
if ( userCommitVersion != commitVersion )
resetCookies ( )
2017-07-23 19:08:42 +02:00
}
2017-07-24 02:32:50 +02:00
if ( document . cookie . includes ( "newVersion" ) )
document . getElementById ( "commit" ) . className = "new" ;
2017-07-23 00:00:44 +02:00
}
2017-05-26 13:13:06 +02:00
function playVoice ( ) {
2017-07-24 02:32:50 +02:00
var mascotAudio = document . getElementById ( "explosion" ) || document . getElementById ( "nyanpassu" ) || document . getElementById ( "nyanpassu2" ) || document . getElementById ( "kawaii" )
2017-07-16 17:36:17 +02:00
if ( mascotAudio !== undefined ) {
2017-07-21 01:47:36 +02:00
mascotAudio . volume = 0.2
mascotAudio . play ( )
2017-07-16 17:36:17 +02:00
} else {
console . log ( "Your mascot doesn't support yet audio files!" )
}
2017-05-29 13:12:05 +02:00
}
2017-07-10 05:57:59 +02:00
2017-07-10 15:24:52 +02:00
document . getElementsByClassName ( "form-input refine" ) [ 0 ] . addEventListener ( "click" , function ( e ) {
2017-07-21 01:47:36 +02:00
document . getElementsByClassName ( "box refine" ) [ 0 ] . style . display = document . getElementsByClassName ( "box refine" ) [ 0 ] . style . display == "none" ? "block" : "none"
2017-07-24 02:32:50 +02:00
if ( document . getElementsByClassName ( "form-input refine-searchbox" ) [ 0 ] . value != document . getElementsByClassName ( "form-input search-box" ) [ 0 ] . value )
2017-07-21 01:47:36 +02:00
document . getElementsByClassName ( "form-input refine-searchbox" ) [ 0 ] . value = document . getElementsByClassName ( "form-input search-box" ) [ 0 ] . value
2017-07-24 02:32:50 +02:00
if ( document . getElementsByClassName ( "form-input refine-category" ) [ 0 ] . selectedIndex != document . getElementsByClassName ( "form-input form-category" ) [ 0 ] . selectedIndex )
2017-07-21 01:47:36 +02:00
document . getElementsByClassName ( "form-input refine-category" ) [ 0 ] . selectedIndex = document . getElementsByClassName ( "form-input form-category" ) [ 0 ] . selectedIndex
e . preventDefault ( )
2017-07-24 02:32:50 +02:00
if ( document . getElementsByClassName ( "box refine" ) [ 0 ] . style . display == "block" )
2017-07-21 01:47:36 +02:00
scrollTo ( 0 , 0 )
} )
2017-07-24 02:32:50 +02:00
2017-07-21 01:47:36 +02:00
function humanFileSize ( bytes , si ) {
var k = si ? 1000 : 1024
var i = ~ ~ ( Math . log ( bytes ) / Math . log ( k ) )
2017-07-24 02:32:50 +02:00
return i == 0 ? bytes + " B" : ( bytes / Math . pow ( k , i ) ) . toFixed ( 1 ) + " " + "KMGTPEZY" [ i - 1 ] + ( si ? "" : "i" ) + "B"
2017-07-21 01:47:36 +02:00
}
2017-06-04 07:43:41 +02:00
// @license-end