aboutsummaryrefslogtreecommitdiff
path: root/web_src/js/features/repo-editor.js
diff options
context:
space:
mode:
Diffstat (limited to 'web_src/js/features/repo-editor.js')
-rw-r--r--web_src/js/features/repo-editor.js66
1 files changed, 38 insertions, 28 deletions
diff --git a/web_src/js/features/repo-editor.js b/web_src/js/features/repo-editor.js
index a9d143847..b3e9b65f2 100644
--- a/web_src/js/features/repo-editor.js
+++ b/web_src/js/features/repo-editor.js
@@ -91,24 +91,27 @@ export function initRepoEditor() {
$('#commit-button').text($(this).attr('button_text'));
});
+ const joinTreePath = ($fileNameEl) => {
+ const parts = [];
+ $('.breadcrumb span.section').each(function () {
+ const element = $(this);
+ if (element.find('a').length) {
+ parts.push(element.find('a').text());
+ } else {
+ parts.push(element.text());
+ }
+ });
+ if ($fileNameEl.val()) parts.push($fileNameEl.val());
+ $('#tree_path').val(parts.join('/'));
+ };
+
const $editFilename = $('#file-name');
- $editFilename.on('keyup', function (e) {
- const $section = $('.breadcrumb span.section');
- const $divider = $('.breadcrumb div.divider');
- let value;
- let parts;
+ $editFilename.on('input', function () {
+ const parts = $(this).val().split('/');
- 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('/');
+ if (parts.length > 1) {
for (let i = 0; i < parts.length; ++i) {
- value = parts[i];
+ const value = parts[i];
if (i < parts.length - 1) {
if (value.length) {
$(`<span class="section"><a href="#">${htmlEscape(value)}</a></span>`).insertBefore($(this));
@@ -117,21 +120,28 @@ export function initRepoEditor() {
} else {
$(this).val(value);
}
- $(this)[0].setSelectionRange(0, 0);
+ this.setSelectionRange(0, 0);
}
}
- parts = [];
- $('.breadcrumb span.section').each(function () {
- const element = $(this);
- if (element.find('a').length) {
- parts.push(element.find('a').text());
- } else {
- parts.push(element.text());
- }
- });
- if ($(this).val()) parts.push($(this).val());
- $('#tree_path').val(parts.join('/'));
- }).trigger('keyup');
+
+ 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');
if (!$editArea.length) return;