mirror of
https://codeberg.org/forgejo/forgejo.git
synced 2024-11-28 12:16:17 +01:00
Support paste treepath when creating a new file or updating the file name (#23209)
Close #23204 Quick Demo: https://user-images.githubusercontent.com/17645053/222058727-ad30a37c-f0ac-4184-9946-a71fcee473b5.mov --------- Co-authored-by: delvh <leon@kske.dev>
This commit is contained in:
parent
79acf7acc4
commit
7f9d58fab8
1 changed files with 42 additions and 32 deletions
|
@ -91,36 +91,8 @@ export function initRepoEditor() {
|
||||||
$('#commit-button').text($(this).attr('button_text'));
|
$('#commit-button').text($(this).attr('button_text'));
|
||||||
});
|
});
|
||||||
|
|
||||||
const $editFilename = $('#file-name');
|
const joinTreePath = ($fileNameEl) => {
|
||||||
$editFilename.on('keyup', function (e) {
|
const parts = [];
|
||||||
const $section = $('.breadcrumb span.section');
|
|
||||||
const $divider = $('.breadcrumb div.divider');
|
|
||||||
let value;
|
|
||||||
let parts;
|
|
||||||
|
|
||||||
if (e.keyCode === 8 && getCursorPosition($(this)) === 0 && $section.length > 0) {
|
|
||||||
value = $section.last().find('a').text();
|
|
||||||
$(this).val(value + $(this).val());
|
|
||||||
$(this)[0].setSelectionRange(value.length, value.length);
|
|
||||||
$section.last().remove();
|
|
||||||
$divider.last().remove();
|
|
||||||
}
|
|
||||||
if (e.keyCode === 191) {
|
|
||||||
parts = $(this).val().split('/');
|
|
||||||
for (let i = 0; i < parts.length; ++i) {
|
|
||||||
value = parts[i];
|
|
||||||
if (i < parts.length - 1) {
|
|
||||||
if (value.length) {
|
|
||||||
$(`<span class="section"><a href="#">${htmlEscape(value)}</a></span>`).insertBefore($(this));
|
|
||||||
$('<div class="divider"> / </div>').insertBefore($(this));
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
$(this).val(value);
|
|
||||||
}
|
|
||||||
$(this)[0].setSelectionRange(0, 0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
parts = [];
|
|
||||||
$('.breadcrumb span.section').each(function () {
|
$('.breadcrumb span.section').each(function () {
|
||||||
const element = $(this);
|
const element = $(this);
|
||||||
if (element.find('a').length) {
|
if (element.find('a').length) {
|
||||||
|
@ -129,9 +101,47 @@ export function initRepoEditor() {
|
||||||
parts.push(element.text());
|
parts.push(element.text());
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
if ($(this).val()) parts.push($(this).val());
|
if ($fileNameEl.val()) parts.push($fileNameEl.val());
|
||||||
$('#tree_path').val(parts.join('/'));
|
$('#tree_path').val(parts.join('/'));
|
||||||
}).trigger('keyup');
|
};
|
||||||
|
|
||||||
|
const $editFilename = $('#file-name');
|
||||||
|
$editFilename.on('input', function () {
|
||||||
|
const parts = $(this).val().split('/');
|
||||||
|
|
||||||
|
if (parts.length > 1) {
|
||||||
|
for (let i = 0; i < parts.length; ++i) {
|
||||||
|
const value = parts[i];
|
||||||
|
if (i < parts.length - 1) {
|
||||||
|
if (value.length) {
|
||||||
|
$(`<span class="section"><a href="#">${htmlEscape(value)}</a></span>`).insertBefore($(this));
|
||||||
|
$('<div class="divider"> / </div>').insertBefore($(this));
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$(this).val(value);
|
||||||
|
}
|
||||||
|
this.setSelectionRange(0, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
joinTreePath($(this));
|
||||||
|
});
|
||||||
|
|
||||||
|
$editFilename.on('keydown', function (e) {
|
||||||
|
const $section = $('.breadcrumb span.section');
|
||||||
|
|
||||||
|
// Jump back to last directory once the filename is empty
|
||||||
|
if (e.code === 'Backspace' && getCursorPosition($(this)) === 0 && $section.length > 0) {
|
||||||
|
e.preventDefault();
|
||||||
|
const $divider = $('.breadcrumb div.divider');
|
||||||
|
const value = $section.last().find('a').text();
|
||||||
|
$(this).val(value + $(this).val());
|
||||||
|
this.setSelectionRange(value.length, value.length);
|
||||||
|
$section.last().remove();
|
||||||
|
$divider.last().remove();
|
||||||
|
joinTreePath($(this));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
const $editArea = $('.repository.editor textarea#edit_area');
|
const $editArea = $('.repository.editor textarea#edit_area');
|
||||||
if (!$editArea.length) return;
|
if (!$editArea.length) return;
|
||||||
|
|
Loading…
Reference in a new issue