Платформа ЦРНП "Мирокод" для разработки проектов
https://git.mirocod.ru
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
92 lines
3.1 KiB
92 lines
3.1 KiB
import $ from 'jquery'; |
|
import {createMonaco} from './codeeditor.js'; |
|
import {initRepoCommonFilterSearchDropdown} from './repo-common.js'; |
|
|
|
const {appSubUrl, csrfToken} = window.config; |
|
|
|
export function initRepoSettingsCollaboration() { |
|
// Change collaborator access mode |
|
$('.page-content.repository .ui.dropdown.access-mode').each((_, e) => { |
|
const $dropdown = $(e); |
|
const $text = $dropdown.find('> .text'); |
|
$dropdown.dropdown({ |
|
action(_text, value) { |
|
const lastValue = $dropdown.attr('data-last-value'); |
|
$.post($dropdown.attr('data-url'), { |
|
_csrf: csrfToken, |
|
uid: $dropdown.attr('data-uid'), |
|
mode: value, |
|
}).fail(() => { |
|
$text.text('(error)'); // prevent from misleading users when error occurs |
|
$dropdown.attr('data-last-value', lastValue); |
|
}); |
|
$dropdown.attr('data-last-value', value); |
|
$dropdown.dropdown('hide'); |
|
}, |
|
onChange(_value, text, _$choice) { |
|
$text.text(text); // update the text when using keyboard navigating |
|
}, |
|
onHide() { |
|
// set to the really selected value, defer to next tick to make sure `action` has finished its work because the calling order might be onHide -> action |
|
setTimeout(() => { |
|
const $item = $dropdown.dropdown('get item', $dropdown.attr('data-last-value')); |
|
if ($item) { |
|
$dropdown.dropdown('set selected', $dropdown.attr('data-last-value')); |
|
} else { |
|
$text.text('(N/A)'); // prevent from misleading users when the access mode is undefined |
|
} |
|
}, 0); |
|
} |
|
}); |
|
}); |
|
} |
|
|
|
export function initRepoSettingSearchTeamBox() { |
|
const $searchTeamBox = $('#search-team-box'); |
|
$searchTeamBox.search({ |
|
minCharacters: 2, |
|
apiSettings: { |
|
url: `${appSubUrl}/org/${$searchTeamBox.data('org')}/teams/-/search?q={query}`, |
|
headers: {'X-Csrf-Token': csrfToken}, |
|
onResponse(response) { |
|
const items = []; |
|
$.each(response.data, (_i, item) => { |
|
const title = `${item.name} (${item.permission} access)`; |
|
items.push({ |
|
title, |
|
}); |
|
}); |
|
|
|
return {results: items}; |
|
} |
|
}, |
|
searchFields: ['name', 'description'], |
|
showNoResults: false |
|
}); |
|
} |
|
|
|
|
|
export function initRepoSettingGitHook() { |
|
if ($('.edit.githook').length === 0) return; |
|
const filename = document.querySelector('.hook-filename').textContent; |
|
const _promise = createMonaco($('#content')[0], filename, {language: 'shell'}); |
|
} |
|
|
|
export function initRepoSettingBranches() { |
|
// Branches |
|
if ($('.repository.settings.branches').length > 0) { |
|
initRepoCommonFilterSearchDropdown('.protected-branches .dropdown'); |
|
$('.enable-protection, .enable-whitelist, .enable-statuscheck').on('change', function () { |
|
if (this.checked) { |
|
$($(this).data('target')).removeClass('disabled'); |
|
} else { |
|
$($(this).data('target')).addClass('disabled'); |
|
} |
|
}); |
|
$('.disable-whitelist').on('change', function () { |
|
if (this.checked) { |
|
$($(this).data('target')).addClass('disabled'); |
|
} |
|
}); |
|
} |
|
}
|
|
|