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 ,
2017-08-03 14:41:43 +02:00
h : - Math . floor ( diff / 3600000 % 24 ) ,
d : - Math . floor ( diff / 86400000 )
2017-07-26 10:59:48 +02:00
} ;
}
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 ( ";" )
2017-08-02 14:01:02 +02:00
var excludedCookies = [ "mascot" , "theme" , "theme2" , "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-08-02 14:01:02 +02:00
document . cookie = "commit=" + commitVersion + ";expires=" + farFutureString ( )
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-08-01 00:57:31 +02:00
var UserTheme
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" ) )
2017-08-01 00:57:31 +02:00
document . getElementById ( "commit" ) . className = document . getElementById ( "commit" ) . innerHTML != "unknown" ? "new" : "wew" ;
2017-08-02 19:34:53 +02:00
document . getElementById ( "dark-toggle" ) . style . display = "initial"
2017-08-01 00:57:31 +02:00
document . getElementById ( "dark-toggle" ) . addEventListener ( "click" , toggleTheme ) ;
2017-08-02 14:01:02 +02:00
if ( document . cookie . includes ( "theme" ) ) {
var startPos = document . cookie . indexOf ( "theme=" ) + 6
var endPos = document . cookie . substring ( startPos ) . indexOf ( ";" )
UserTheme = [ endPos == "-1" ? document . cookie . substring ( startPos ) : document . cookie . substring ( startPos , endPos + startPos ) , "tomorrow" ]
//Get user's default theme and set the alternative one as tomorrow
}
else
UserTheme = [ "g" , "tomorrow" ]
//If user has no default theme, set these by default
if ( document . cookie . includes ( "theme2" ) ) {
var startPos = document . cookie . indexOf ( "theme2=" ) + 7
var endPos = document . cookie . substring ( startPos ) . indexOf ( ";" )
UserTheme [ 1 ] = endPos == "-1" ? document . cookie . substring ( startPos ) : document . cookie . substring ( startPos , endPos + startPos )
//If user already has ran the ToggleTheme() function in the past, we get the value of the second theme (the one the script switches to)
if ( ! UserTheme . includes ( "tomorrow" ) )
UserTheme [ 1 ] = "tomorrow"
//If none of the theme are tomorrow, which happens if the user is on dark mode (with theme2 on g.css) and that he switches to classic or g.css in settings, we set the second one as tomorrow
}
else {
if ( UserTheme [ 0 ] == UserTheme [ 1 ] )
UserTheme [ 1 ] = "g"
//If tomorrow is twice in UserTheme, which happens when the user already has tomorrow as his default theme and toggle the dark mode for the first time, we set the second theme as g.css
document . cookie = "theme2=" + UserTheme [ 1 ] + ";path=/;expires=" + farFutureString ( )
//Set cookie for future theme2 uses
}
2017-08-01 00:57:31 +02:00
}
2017-08-02 19:34:53 +02:00
function toggleTheme ( e ) {
2017-08-01 00:57:31 +02:00
var CurrentTheme = document . getElementById ( "theme" ) . href
CurrentTheme = CurrentTheme . substring ( CurrentTheme . indexOf ( "/css/" ) + 5 , CurrentTheme . indexOf ( ".css" ) )
CurrentTheme = ( CurrentTheme == UserTheme [ 0 ] ? UserTheme [ 1 ] : UserTheme [ 0 ] )
document . getElementById ( "theme" ) . href = "/css/" + CurrentTheme + ".css" ;
2017-08-02 14:01:02 +02:00
var farFuture = farFutureString ( )
2017-08-02 19:34:53 +02:00
document . cookie = "theme=" + CurrentTheme + ";path=/;domain=pantsu.cat;expires=" + farFuture
document . cookie = "theme2=" + ( CurrentTheme == UserTheme [ 0 ] ? UserTheme [ 1 ] : UserTheme [ 0 ] ) + ";path=/;domain=pantsu.cat;expires=" + farFuture
e . preventDefault ( )
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-30 04:52:16 +02:00
if ( document . getElementsByClassName ( "form-input search-box" ) [ 0 ] . value == "" || location . pathname != "/" )
{
document . getElementsByClassName ( "box refine" ) [ 0 ] . style . display = document . getElementsByClassName ( "box refine" ) [ 0 ] . style . display == "none" ? "block" : "none"
if ( document . getElementsByClassName ( "form-input refine-searchbox" ) [ 0 ] . value != document . getElementsByClassName ( "form-input search-box" ) [ 0 ] . value )
document . getElementsByClassName ( "form-input refine-searchbox" ) [ 0 ] . value = document . getElementsByClassName ( "form-input search-box" ) [ 0 ] . value
if ( document . getElementsByClassName ( "form-input refine-category" ) [ 0 ] . selectedIndex != document . getElementsByClassName ( "form-input form-category" ) [ 0 ] . selectedIndex )
document . getElementsByClassName ( "form-input refine-category" ) [ 0 ] . selectedIndex = document . getElementsByClassName ( "form-input form-category" ) [ 0 ] . selectedIndex
if ( document . getElementsByClassName ( "box refine" ) [ 0 ] . style . display == "block" )
scrollTo ( 0 , 0 )
e . preventDefault ( )
}
2017-07-21 01:47:36 +02:00
} )
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-08-02 14:01:02 +02:00
function farFutureString ( ) {
var farFuture = new Date ( )
farFuture . setTime ( farFuture . getTime ( ) + 50 * 36000 * 15000 )
return farFuture . toUTCString ( )
}
2017-06-04 07:43:41 +02:00
// @license-end