1- import $ from 'jquery' ;
21import { minimatch } from 'minimatch' ;
32import { createMonaco } from './codeeditor.ts' ;
43import { onInputDebounce , queryElems , toggleElem } from '../utils/dom.ts' ;
54import { POST } from '../modules/fetch.ts' ;
65import { initAvatarUploaderWithCropper } from './comp/Cropper.ts' ;
76import { initRepoSettingsBranchesDrag } from './repo-settings-branches.ts' ;
7+ import { fomanticQuery } from '../modules/fomantic/base.ts' ;
88
99const { appSubUrl, csrfToken} = window . config ;
1010
1111function initRepoSettingsCollaboration ( ) {
1212 // Change collaborator access mode
1313 for ( const dropdownEl of queryElems ( document , '.page-content.repository .ui.dropdown.access-mode' ) ) {
1414 const textEl = dropdownEl . querySelector ( ':scope > .text' ) ;
15- $ ( dropdownEl ) . dropdown ( {
15+ const $dropdown = fomanticQuery ( dropdownEl ) ;
16+ $dropdown . dropdown ( {
1617 async action ( text : string , value : string ) {
1718 dropdownEl . classList . add ( 'is-loading' , 'loading-icon-2px' ) ;
1819 const lastValue = dropdownEl . getAttribute ( 'data-last-value' ) ;
19- $ ( dropdownEl ) . dropdown ( 'hide' ) ;
20+ $dropdown . dropdown ( 'hide' ) ;
2021 try {
2122 const uid = dropdownEl . getAttribute ( 'data-uid' ) ;
2223 await POST ( dropdownEl . getAttribute ( 'data-url' ) , { data : new URLSearchParams ( { uid, 'mode' : value } ) } ) ;
@@ -33,9 +34,9 @@ function initRepoSettingsCollaboration() {
3334 // set to the really selected value, defer to next tick to make sure `action` has finished
3435 // its work because the calling order might be onHide -> action
3536 setTimeout ( ( ) => {
36- const $item = $ ( dropdownEl ) . dropdown ( 'get item' , dropdownEl . getAttribute ( 'data-last-value' ) ) ;
37+ const $item = $dropdown . dropdown ( 'get item' , dropdownEl . getAttribute ( 'data-last-value' ) ) ;
3738 if ( $item ) {
38- $ ( dropdownEl ) . dropdown ( 'set selected' , dropdownEl . getAttribute ( 'data-last-value' ) ) ;
39+ $dropdown . dropdown ( 'set selected' , dropdownEl . getAttribute ( 'data-last-value' ) ) ;
3940 } else {
4041 textEl . textContent = '(none)' ; // prevent from misleading users when the access mode is undefined
4142 }
@@ -49,32 +50,32 @@ function initRepoSettingsSearchTeamBox() {
4950 const searchTeamBox = document . querySelector ( '#search-team-box' ) ;
5051 if ( ! searchTeamBox ) return ;
5152
52- $ ( searchTeamBox ) . search ( {
53+ fomanticQuery ( searchTeamBox ) . search ( {
5354 minCharacters : 2 ,
55+ searchFields : [ 'name' , 'description' ] ,
56+ showNoResults : false ,
57+ rawResponse : true ,
5458 apiSettings : {
5559 url : `${ appSubUrl } /org/${ searchTeamBox . getAttribute ( 'data-org-name' ) } /teams/-/search?q={query}` ,
5660 headers : { 'X-Csrf-Token' : csrfToken } ,
5761 onResponse ( response : any ) {
5862 const items : Array < Record < string , any > > = [ ] ;
59- $ . each ( response . data , ( _i , item ) => {
63+ for ( const item of response . data ) {
6064 items . push ( {
6165 title : item . name ,
6266 description : `${ item . permission } access` , // TODO: translate this string
6367 } ) ;
64- } ) ;
65-
68+ }
6669 return { results : items } ;
6770 } ,
6871 } ,
69- searchFields : [ 'name' , 'description' ] ,
70- showNoResults : false ,
7172 } ) ;
7273}
7374
7475function initRepoSettingsGitHook ( ) {
75- if ( ! $ ( '.edit.githook' ) . length ) return ;
76+ if ( ! document . querySelector ( '.page-content.repository.settings. edit.githook' ) ) return ;
7677 const filename = document . querySelector ( '.hook-filename' ) . textContent ;
77- createMonaco ( $ ( '#content' ) [ 0 ] as HTMLTextAreaElement , filename , { language : 'shell' } ) ;
78+ createMonaco ( document . querySelector < HTMLTextAreaElement > ( '#content' ) , filename , { language : 'shell' } ) ;
7879}
7980
8081function initRepoSettingsBranches ( ) {
@@ -121,32 +122,31 @@ function initRepoSettingsBranches() {
121122}
122123
123124function initRepoSettingsOptions ( ) {
124- if ( $ ( '.repository.settings.options' ) . length > 0 ) {
125- // Enable or select internal/external wiki system and issue tracker.
126- $ ( '.enable-system' ) . on ( 'change' , function ( this : HTMLInputElement ) { // eslint-disable-line @typescript-eslint/no-deprecated
127- if ( this . checked ) {
128- $ ( $ ( this ) . data ( 'target' ) ) . removeClass ( 'disabled' ) ;
129- if ( ! $ ( this ) . data ( 'context' ) ) $ ( $ ( this ) . data ( 'context' ) ) . addClass ( 'disabled' ) ;
130- } else {
131- $ ( $ ( this ) . data ( 'target' ) ) . addClass ( 'disabled' ) ;
132- if ( ! $ ( this ) . data ( 'context' ) ) $ ( $ ( this ) . data ( 'context' ) ) . removeClass ( 'disabled' ) ;
133- }
134- } ) ;
135- $ ( '.enable-system-radio' ) . on ( 'change' , function ( this : HTMLInputElement ) { // eslint-disable-line @typescript-eslint/no-deprecated
136- if ( this . value === 'false' ) {
137- $ ( $ ( this ) . data ( 'target' ) ) . addClass ( 'disabled' ) ;
138- if ( $ ( this ) . data ( 'context' ) !== undefined ) $ ( $ ( this ) . data ( 'context' ) ) . removeClass ( 'disabled' ) ;
139- } else if ( this . value === 'true' ) {
140- $ ( $ ( this ) . data ( 'target' ) ) . removeClass ( 'disabled' ) ;
141- if ( $ ( this ) . data ( 'context' ) !== undefined ) $ ( $ ( this ) . data ( 'context' ) ) . addClass ( 'disabled' ) ;
142- }
143- } ) ;
144- const $trackerIssueStyleRadios = $ ( '.js-tracker-issue-style' ) ;
145- $trackerIssueStyleRadios . on ( 'change input' , ( ) => {
146- const checkedVal = $trackerIssueStyleRadios . filter ( ':checked' ) . val ( ) ;
147- $ ( '#tracker-issue-style-regex-box' ) . toggleClass ( 'disabled' , checkedVal !== 'regexp' ) ;
148- } ) ;
149- }
125+ const pageContent = document . querySelector ( '.page-content.repository.settings.options' ) ;
126+ if ( ! pageContent ) return ;
127+
128+ const toggleClass = ( elems : NodeListOf < Element > , className : string , value : boolean ) => {
129+ for ( const el of elems ) el . classList . toggle ( className , value ) ;
130+ } ;
131+
132+ // Enable or select internal/external wiki system and issue tracker.
133+ queryElems < HTMLInputElement > ( pageContent , '.enable-system' , ( el ) => el . addEventListener ( 'change' , ( ) => {
134+ const elTargets = document . querySelectorAll ( el . getAttribute ( 'data-target' ) ) ;
135+ const elContexts = document . querySelectorAll ( el . getAttribute ( 'data-context' ) ) ;
136+ toggleClass ( elTargets , 'disabled' , ! el . checked ) ;
137+ toggleClass ( elContexts , 'disabled' , el . checked ) ;
138+ } ) ) ;
139+ queryElems < HTMLInputElement > ( pageContent , '.enable-system-radio' , ( el ) => el . addEventListener ( 'change' , ( ) => {
140+ const elTargets = document . querySelectorAll ( el . getAttribute ( 'data-target' ) ) ;
141+ const elContexts = document . querySelectorAll ( el . getAttribute ( 'data-context' ) ) ;
142+ toggleClass ( elTargets , 'disabled' , el . value === 'false' ) ;
143+ toggleClass ( elContexts , 'disabled' , el . value === 'true' ) ;
144+ } ) ) ;
145+
146+ queryElems < HTMLInputElement > ( pageContent , '.js-tracker-issue-style' , ( el ) => el . addEventListener ( 'change' , ( ) => {
147+ const checkedVal = el . value ;
148+ pageContent . querySelector ( '#tracker-issue-style-regex-box' ) . classList . toggle ( 'disabled' , checkedVal !== 'regexp' ) ;
149+ } ) ) ;
150150}
151151
152152export function initRepoSettings ( ) {
0 commit comments