2022-01-28 13:00:11 -08:00
import $ from 'jquery' ;
2023-09-10 18:27:23 +08:00
import { hideElem , showElem } from '../utils/dom.js' ;
2024-02-25 18:53:44 +02:00
import { POST } from '../modules/fetch.js' ;
2022-01-28 13:00:11 -08:00
2024-02-25 18:53:44 +02:00
async function getArchive ( $target , url , first ) {
try {
const response = await POST ( url ) ;
if ( response . status === 200 ) {
const data = await response . json ( ) ;
if ( ! data ) {
// XXX Shouldn't happen?
$target . closest ( '.dropdown' ) . children ( 'i' ) . removeClass ( 'loading' ) ;
return ;
}
2021-10-17 01:28:04 +08:00
2024-02-25 18:53:44 +02:00
if ( ! data . 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 ;
2021-10-17 01:28:04 +08:00
}
2024-02-25 18:53:44 +02:00
}
} catch {
$target . closest ( '.dropdown' ) . children ( 'i' ) . removeClass ( 'loading' ) ;
}
2021-10-17 01:28:04 +08:00
}
export function initRepoArchiveLinks ( ) {
$ ( '.archive-link' ) . on ( 'click' , function ( event ) {
event . preventDefault ( ) ;
2024-03-20 02:04:24 +02:00
const url = this . getAttribute ( 'href' ) ;
2021-10-17 01:28:04 +08:00
if ( ! url ) return ;
getArchive ( $ ( event . target ) , url , true ) ;
} ) ;
}
2022-03-29 11:21:30 +08:00
export function initRepoCloneLink ( ) {
const $repoCloneSsh = $ ( '#repo-clone-ssh' ) ;
const $repoCloneHttps = $ ( '#repo-clone-https' ) ;
const $inputLink = $ ( '#repo-clone-url' ) ;
if ( ( ! $repoCloneSsh . length && ! $repoCloneHttps . length ) || ! $inputLink . length ) {
return ;
}
$repoCloneSsh . on ( 'click' , ( ) => {
2021-10-17 01:28:04 +08:00
localStorage . setItem ( 'repo-clone-protocol' , 'ssh' ) ;
2022-07-31 20:29:55 +02:00
window . updateCloneStates ( ) ;
2021-10-17 01:28:04 +08:00
} ) ;
2022-03-29 11:21:30 +08:00
$repoCloneHttps . on ( 'click' , ( ) => {
localStorage . setItem ( 'repo-clone-protocol' , 'https' ) ;
2022-07-31 20:29:55 +02:00
window . updateCloneStates ( ) ;
2021-10-17 01:28:04 +08:00
} ) ;
2022-03-29 11:21:30 +08:00
2022-08-08 01:15:11 +02:00
$inputLink . on ( 'focus' , ( ) => {
2023-04-20 18:28:27 +09:00
$inputLink . trigger ( 'select' ) ;
2021-10-17 01:28:04 +08:00
} ) ;
}
export function initRepoCommonBranchOrTagDropdown ( selector ) {
2022-01-16 19:19:26 +08:00
$ ( selector ) . each ( function ( ) {
2021-10-17 01:28:04 +08:00
const $dropdown = $ ( this ) ;
$dropdown . find ( '.reference.column' ) . on ( 'click' , function ( ) {
2023-02-19 12:06:14 +08:00
hideElem ( $dropdown . find ( '.scrolling.reference-list-menu' ) ) ;
showElem ( $ ( $ ( this ) . data ( 'target' ) ) ) ;
2021-10-17 01:28:04 +08:00
return false ;
} ) ;
} ) ;
}
export function initRepoCommonFilterSearchDropdown ( selector ) {
2022-01-16 19:19:26 +08:00
const $dropdown = $ ( selector ) ;
2021-10-17 01:28:04 +08:00
$dropdown . dropdown ( {
2022-06-05 00:02:10 +08:00
fullTextSearch : 'exact' ,
2021-10-17 01:28:04 +08:00
selectOnKeydown : false ,
onChange ( _text , _value , $choice ) {
2024-03-20 02:04:24 +02:00
if ( $choice [ 0 ] . getAttribute ( 'data-url' ) ) {
window . location . href = $choice [ 0 ] . getAttribute ( 'data-url' ) ;
2021-10-17 01:28:04 +08:00
}
} ,
2024-03-20 02:04:24 +02:00
message : { noResults : $dropdown [ 0 ] . getAttribute ( 'data-no-results' ) } ,
2021-10-17 01:28:04 +08:00
} ) ;
}