2022-01-29 00:00:11 +03:00
import $ from 'jquery' ;
2021-10-21 10:37:43 +03:00
const { csrfToken } = window . config ;
2021-10-16 20:28:04 +03:00
function getArchive ( $target , url , first ) {
$ . ajax ( {
url ,
type : 'POST' ,
data : {
2021-10-21 10:37:43 +03:00
_csrf : csrfToken ,
2021-10-16 20:28:04 +03:00
} ,
complete ( xhr ) {
if ( xhr . status === 200 ) {
if ( ! xhr . responseJSON ) {
// XXX Shouldn't happen?
$target . closest ( '.dropdown' ) . children ( 'i' ) . removeClass ( 'loading' ) ;
return ;
}
if ( ! xhr . responseJSON . complete ) {
$target . closest ( '.dropdown' ) . children ( 'i' ) . addClass ( 'loading' ) ;
// Wait for only three quarters of a second initially, in case it's
// quickly archived.
setTimeout ( ( ) => {
getArchive ( $target , url , false ) ;
} , first ? 750 : 2000 ) ;
} else {
// We don't need to continue checking.
$target . closest ( '.dropdown' ) . children ( 'i' ) . removeClass ( 'loading' ) ;
window . location . href = url ;
}
}
} ,
} ) ;
}
export function initRepoArchiveLinks ( ) {
$ ( '.archive-link' ) . on ( 'click' , function ( event ) {
event . preventDefault ( ) ;
2021-11-29 16:50:43 +03:00
const url = $ ( this ) . attr ( 'href' ) ;
2021-10-16 20:28:04 +03:00
if ( ! url ) return ;
getArchive ( $ ( event . target ) , url , true ) ;
} ) ;
}
export function initRepoClone ( ) {
// Quick start and repository home
$ ( '#repo-clone-ssh' ) . on ( 'click' , function ( ) {
$ ( '.clone-url' ) . text ( $ ( this ) . data ( 'link' ) ) ;
$ ( '#repo-clone-url' ) . val ( $ ( this ) . data ( 'link' ) ) ;
$ ( this ) . addClass ( 'primary' ) ;
$ ( '#repo-clone-https' ) . removeClass ( 'primary' ) ;
localStorage . setItem ( 'repo-clone-protocol' , 'ssh' ) ;
} ) ;
$ ( '#repo-clone-https' ) . on ( 'click' , function ( ) {
$ ( '.clone-url' ) . text ( $ ( this ) . data ( 'link' ) ) ;
$ ( '#repo-clone-url' ) . val ( $ ( this ) . data ( 'link' ) ) ;
$ ( this ) . addClass ( 'primary' ) ;
if ( $ ( '#repo-clone-ssh' ) . length > 0 ) {
$ ( '#repo-clone-ssh' ) . removeClass ( 'primary' ) ;
localStorage . setItem ( 'repo-clone-protocol' , 'https' ) ;
}
} ) ;
$ ( '#repo-clone-url' ) . on ( 'click' , function ( ) {
$ ( this ) . select ( ) ;
} ) ;
}
export function initRepoCommonBranchOrTagDropdown ( selector ) {
2022-01-16 14:19:26 +03:00
$ ( selector ) . each ( function ( ) {
2021-10-16 20:28:04 +03:00
const $dropdown = $ ( this ) ;
$dropdown . find ( '.reference.column' ) . on ( 'click' , function ( ) {
$dropdown . find ( '.scrolling.reference-list-menu' ) . hide ( ) ;
2022-01-16 14:19:26 +03:00
$ ( $ ( this ) . data ( 'target' ) ) . show ( ) ;
2021-10-16 20:28:04 +03:00
return false ;
} ) ;
} ) ;
}
export function initRepoCommonFilterSearchDropdown ( selector ) {
2022-01-16 14:19:26 +03:00
const $dropdown = $ ( selector ) ;
2021-10-16 20:28:04 +03:00
$dropdown . dropdown ( {
fullTextSearch : true ,
selectOnKeydown : false ,
onChange ( _text , _value , $choice ) {
if ( $choice . data ( 'url' ) ) {
window . location . href = $choice . data ( 'url' ) ;
}
} ,
message : { noResults : $dropdown . data ( 'no-results' ) } ,
} ) ;
}
export function initRepoCommonLanguageStats ( ) {
// Language stats
if ( $ ( '.language-stats' ) . length > 0 ) {
$ ( '.language-stats' ) . on ( 'click' , ( e ) => {
e . preventDefault ( ) ;
$ ( '.language-stats-details, .repository-menu' ) . slideToggle ( ) ;
} ) ;
}
}