mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-26 12:27:06 +00: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:
		| @@ -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; | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Hester Gong
					Hester Gong