|
|
|
|
@ -144,9 +144,9 @@ export function initRepoIssueSidebarList() {
|
|
|
|
|
|
|
|
|
|
$('.menu .ui.dropdown.label-filter').on('keydown', (e) => {
|
|
|
|
|
if (e.altKey && e.keyCode === 13) {
|
|
|
|
|
const selectedItems = $('.menu .ui.dropdown.label-filter .menu .item.selected');
|
|
|
|
|
if (selectedItems.length > 0) {
|
|
|
|
|
excludeLabel($(selectedItems[0]));
|
|
|
|
|
const $selectedItems = $('.menu .ui.dropdown.label-filter .menu .item.selected');
|
|
|
|
|
if ($selectedItems.length > 0) {
|
|
|
|
|
excludeLabel($($selectedItems[0]));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
@ -214,12 +214,12 @@ export function initRepoIssueDependencyDelete() {
|
|
|
|
|
export function initRepoIssueCodeCommentCancel() {
|
|
|
|
|
// Cancel inline code comment
|
|
|
|
|
$(document).on('click', '.cancel-code-comment', (e) => {
|
|
|
|
|
const form = $(e.currentTarget).closest('form');
|
|
|
|
|
if (form.length > 0 && form.hasClass('comment-form')) {
|
|
|
|
|
form.addClass('gt-hidden');
|
|
|
|
|
showElem(form.closest('.comment-code-cloud').find('button.comment-form-reply'));
|
|
|
|
|
const $form = $(e.currentTarget).closest('form');
|
|
|
|
|
if ($form.length > 0 && $form.hasClass('comment-form')) {
|
|
|
|
|
$form.addClass('gt-hidden');
|
|
|
|
|
showElem($form.closest('.comment-code-cloud').find('button.comment-form-reply'));
|
|
|
|
|
} else {
|
|
|
|
|
form.closest('.comment-code-cloud').remove();
|
|
|
|
|
$form.closest('.comment-code-cloud').remove();
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
@ -370,10 +370,10 @@ export function initRepoIssueComments() {
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
$(document).on('click', (event) => {
|
|
|
|
|
const urlTarget = $(':target');
|
|
|
|
|
if (urlTarget.length === 0) return;
|
|
|
|
|
const $urlTarget = $(':target');
|
|
|
|
|
if ($urlTarget.length === 0) return;
|
|
|
|
|
|
|
|
|
|
const urlTargetId = urlTarget.attr('id');
|
|
|
|
|
const urlTargetId = $urlTarget.attr('id');
|
|
|
|
|
if (!urlTargetId) return;
|
|
|
|
|
if (!/^(issue|pull)(comment)?-\d+$/.test(urlTargetId)) return;
|
|
|
|
|
|
|
|
|
|
@ -390,18 +390,18 @@ export function initRepoIssueComments() {
|
|
|
|
|
|
|
|
|
|
export async function handleReply($el) {
|
|
|
|
|
hideElem($el);
|
|
|
|
|
const form = $el.closest('.comment-code-cloud').find('.comment-form');
|
|
|
|
|
form.removeClass('gt-hidden');
|
|
|
|
|
const $form = $el.closest('.comment-code-cloud').find('.comment-form');
|
|
|
|
|
$form.removeClass('gt-hidden');
|
|
|
|
|
|
|
|
|
|
const $textarea = form.find('textarea');
|
|
|
|
|
const $textarea = $form.find('textarea');
|
|
|
|
|
let editor = getComboMarkdownEditor($textarea);
|
|
|
|
|
if (!editor) {
|
|
|
|
|
// FIXME: the initialization of the dropzone is not consistent.
|
|
|
|
|
// When the page is loaded, the dropzone is initialized by initGlobalDropzone, but the editor is not initialized.
|
|
|
|
|
// When the form is submitted and partially reload, none of them is initialized.
|
|
|
|
|
const dropzone = form.find('.dropzone')[0];
|
|
|
|
|
const dropzone = $form.find('.dropzone')[0];
|
|
|
|
|
if (!dropzone.dropzone) initDropzone(dropzone);
|
|
|
|
|
editor = await initComboMarkdownEditor(form.find('.combo-markdown-editor'));
|
|
|
|
|
editor = await initComboMarkdownEditor($form.find('.combo-markdown-editor'));
|
|
|
|
|
}
|
|
|
|
|
editor.focus();
|
|
|
|
|
return editor;
|
|
|
|
|
@ -413,30 +413,30 @@ export function initRepoPullRequestReview() {
|
|
|
|
|
if (window.history.scrollRestoration !== 'manual') {
|
|
|
|
|
window.history.scrollRestoration = 'manual';
|
|
|
|
|
}
|
|
|
|
|
const commentDiv = $(window.location.hash);
|
|
|
|
|
if (commentDiv) {
|
|
|
|
|
const $commentDiv = $(window.location.hash);
|
|
|
|
|
if ($commentDiv) {
|
|
|
|
|
// get the name of the parent id
|
|
|
|
|
const groupID = commentDiv.closest('div[id^="code-comments-"]').attr('id');
|
|
|
|
|
const groupID = $commentDiv.closest('div[id^="code-comments-"]').attr('id');
|
|
|
|
|
if (groupID && groupID.startsWith('code-comments-')) {
|
|
|
|
|
const id = groupID.slice(14);
|
|
|
|
|
const ancestorDiffBox = commentDiv.closest('.diff-file-box');
|
|
|
|
|
const $ancestorDiffBox = $commentDiv.closest('.diff-file-box');
|
|
|
|
|
// on pages like conversation, there is no diff header
|
|
|
|
|
const diffHeader = ancestorDiffBox.find('.diff-file-header');
|
|
|
|
|
const $diffHeader = $ancestorDiffBox.find('.diff-file-header');
|
|
|
|
|
// offset is for scrolling
|
|
|
|
|
let offset = 30;
|
|
|
|
|
if (diffHeader[0]) {
|
|
|
|
|
offset += $('.diff-detail-box').outerHeight() + diffHeader.outerHeight();
|
|
|
|
|
if ($diffHeader[0]) {
|
|
|
|
|
offset += $('.diff-detail-box').outerHeight() + $diffHeader.outerHeight();
|
|
|
|
|
}
|
|
|
|
|
$(`#show-outdated-${id}`).addClass('gt-hidden');
|
|
|
|
|
$(`#code-comments-${id}`).removeClass('gt-hidden');
|
|
|
|
|
$(`#code-preview-${id}`).removeClass('gt-hidden');
|
|
|
|
|
$(`#hide-outdated-${id}`).removeClass('gt-hidden');
|
|
|
|
|
// if the comment box is folded, expand it
|
|
|
|
|
if (ancestorDiffBox.attr('data-folded') && ancestorDiffBox.attr('data-folded') === 'true') {
|
|
|
|
|
setFileFolding(ancestorDiffBox[0], ancestorDiffBox.find('.fold-file')[0], false);
|
|
|
|
|
if ($ancestorDiffBox.attr('data-folded') && $ancestorDiffBox.attr('data-folded') === 'true') {
|
|
|
|
|
setFileFolding($ancestorDiffBox[0], $ancestorDiffBox.find('.fold-file')[0], false);
|
|
|
|
|
}
|
|
|
|
|
window.scrollTo({
|
|
|
|
|
top: commentDiv.offset().top - offset,
|
|
|
|
|
top: $commentDiv.offset().top - offset,
|
|
|
|
|
behavior: 'instant'
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
@ -504,12 +504,12 @@ export function initRepoPullRequestReview() {
|
|
|
|
|
const side = $(this).data('side');
|
|
|
|
|
const idx = $(this).data('idx');
|
|
|
|
|
const path = $(this).closest('[data-path]').data('path');
|
|
|
|
|
const tr = $(this).closest('tr');
|
|
|
|
|
const lineType = tr.data('line-type');
|
|
|
|
|
const $tr = $(this).closest('tr');
|
|
|
|
|
const lineType = $tr.data('line-type');
|
|
|
|
|
|
|
|
|
|
let ntr = tr.next();
|
|
|
|
|
if (!ntr.hasClass('add-comment')) {
|
|
|
|
|
ntr = $(`
|
|
|
|
|
let $ntr = $tr.next();
|
|
|
|
|
if (!$ntr.hasClass('add-comment')) {
|
|
|
|
|
$ntr = $(`
|
|
|
|
|
<tr class="add-comment" data-line-type="${lineType}">
|
|
|
|
|
${isSplit ? `
|
|
|
|
|
<td class="add-comment-left" colspan="4"></td>
|
|
|
|
|
@ -518,22 +518,22 @@ export function initRepoPullRequestReview() {
|
|
|
|
|
<td class="add-comment-left add-comment-right" colspan="5"></td>
|
|
|
|
|
`}
|
|
|
|
|
</tr>`);
|
|
|
|
|
tr.after(ntr);
|
|
|
|
|
$tr.after($ntr);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const td = ntr.find(`.add-comment-${side}`);
|
|
|
|
|
const commentCloud = td.find('.comment-code-cloud');
|
|
|
|
|
if (commentCloud.length === 0 && !ntr.find('button[name="pending_review"]').length) {
|
|
|
|
|
const $td = $ntr.find(`.add-comment-${side}`);
|
|
|
|
|
const $commentCloud = $td.find('.comment-code-cloud');
|
|
|
|
|
if ($commentCloud.length === 0 && !$ntr.find('button[name="pending_review"]').length) {
|
|
|
|
|
try {
|
|
|
|
|
const response = await GET($(this).closest('[data-new-comment-url]').attr('data-new-comment-url'));
|
|
|
|
|
const html = await response.text();
|
|
|
|
|
td.html(html);
|
|
|
|
|
td.find("input[name='line']").val(idx);
|
|
|
|
|
td.find("input[name='side']").val(side === 'left' ? 'previous' : 'proposed');
|
|
|
|
|
td.find("input[name='path']").val(path);
|
|
|
|
|
$td.html(html);
|
|
|
|
|
$td.find("input[name='line']").val(idx);
|
|
|
|
|
$td.find("input[name='side']").val(side === 'left' ? 'previous' : 'proposed');
|
|
|
|
|
$td.find("input[name='path']").val(path);
|
|
|
|
|
|
|
|
|
|
initDropzone(td.find('.dropzone')[0]);
|
|
|
|
|
const editor = await initComboMarkdownEditor(td.find('.combo-markdown-editor'));
|
|
|
|
|
initDropzone($td.find('.dropzone')[0]);
|
|
|
|
|
const editor = await initComboMarkdownEditor($td.find('.combo-markdown-editor'));
|
|
|
|
|
editor.focus();
|
|
|
|
|
} catch (error) {
|
|
|
|
|
console.error(error);
|
|
|
|
|
@ -646,18 +646,18 @@ export function initRepoIssueTitleEdit() {
|
|
|
|
|
|
|
|
|
|
export function initRepoIssueBranchSelect() {
|
|
|
|
|
const changeBranchSelect = function () {
|
|
|
|
|
const selectionTextField = $('#pull-target-branch');
|
|
|
|
|
const $selectionTextField = $('#pull-target-branch');
|
|
|
|
|
|
|
|
|
|
const baseName = selectionTextField.data('basename');
|
|
|
|
|
const baseName = $selectionTextField.data('basename');
|
|
|
|
|
const branchNameNew = $(this).data('branch');
|
|
|
|
|
const branchNameOld = selectionTextField.data('branch');
|
|
|
|
|
const branchNameOld = $selectionTextField.data('branch');
|
|
|
|
|
|
|
|
|
|
// Replace branch name to keep translation from HTML template
|
|
|
|
|
selectionTextField.html(selectionTextField.html().replace(
|
|
|
|
|
$selectionTextField.html($selectionTextField.html().replace(
|
|
|
|
|
`${baseName}:${branchNameOld}`,
|
|
|
|
|
`${baseName}:${branchNameNew}`
|
|
|
|
|
));
|
|
|
|
|
selectionTextField.data('branch', branchNameNew); // update branch name in setting
|
|
|
|
|
$selectionTextField.data('branch', branchNameNew); // update branch name in setting
|
|
|
|
|
};
|
|
|
|
|
$('#branch-select > .item').on('click', changeBranchSelect);
|
|
|
|
|
}
|
|
|
|
|
|