mirror of
				https://github.com/go-gitea/gitea
				synced 2025-10-30 10:58:27 +00:00 
			
		
		
		
	Remove jQuery AJAX from the repo editor (#29636)
# Preview Tab
- Removed the jQuery AJAX call and replaced with our fetch wrapper
- Tested the preview tab functionality and it works as before
# Diff Tab
- Removed the jQuery AJAX call and replaced with htmx
- Tested the diff tab functionality and it works as before
## htmx Attributes
- `hx-post="{{.RepoLink}}..."`: make a POST request to the endpoint
- `hx-indicator=".tab[data-tab='diff']"`: attach the loading indicator
to the tab body
- `hx-target=".tab[data-tab='diff']"`: target the tab body for swapping
with the response
- `hx-swap="innerHTML"`: swap the target's inner HTML
- `hx-include="#edit_area"`: include the value of the textarea (content)
in the request body
- `hx-vals='{"context":"{{.BranchLink}}"}'`: include the context in the
request body
- `hx-params="context,content"`: include only these keys in the request
body
# Demo using `fetch` and `htmx` instead of jQuery AJAX

---------
Signed-off-by: Yarden Shoham <git@yardenshoham.com>
Co-authored-by: silverwind <me@silverwind.io>
			
			
This commit is contained in:
		| @@ -4,15 +4,14 @@ import {createCodeEditor} from './codeeditor.js'; | ||||
| import {hideElem, showElem} from '../utils/dom.js'; | ||||
| import {initMarkupContent} from '../markup/content.js'; | ||||
| import {attachRefIssueContextPopup} from './contextpopup.js'; | ||||
|  | ||||
| const {csrfToken} = window.config; | ||||
| import {POST} from '../modules/fetch.js'; | ||||
|  | ||||
| function initEditPreviewTab($form) { | ||||
|   const $tabMenu = $form.find('.tabular.menu'); | ||||
|   $tabMenu.find('.item').tab(); | ||||
|   const $previewTab = $tabMenu.find(`.item[data-tab="${$tabMenu.data('preview')}"]`); | ||||
|   if ($previewTab.length) { | ||||
|     $previewTab.on('click', function () { | ||||
|     $previewTab.on('click', async function () { | ||||
|       const $this = $(this); | ||||
|       let context = `${$this.data('context')}/`; | ||||
|       const mode = $this.data('markup-mode') || 'comment'; | ||||
| @@ -21,43 +20,30 @@ function initEditPreviewTab($form) { | ||||
|         context += treePathEl.val(); | ||||
|       } | ||||
|       context = context.substring(0, context.lastIndexOf('/')); | ||||
|       $.post($this.data('url'), { | ||||
|         _csrf: csrfToken, | ||||
|         mode, | ||||
|         context, | ||||
|         text: $form.find(`.tab[data-tab="${$tabMenu.data('write')}"] textarea`).val(), | ||||
|         file_path: treePathEl.val(), | ||||
|       }, (data) => { | ||||
|  | ||||
|       const formData = new FormData(); | ||||
|       formData.append('mode', mode); | ||||
|       formData.append('context', context); | ||||
|       formData.append('text', $form.find(`.tab[data-tab="${$tabMenu.data('write')}"] textarea`).val()); | ||||
|       formData.append('file_path', treePathEl.val()); | ||||
|       try { | ||||
|         const response = await POST($this.data('url'), {data: formData}); | ||||
|         const data = await response.text(); | ||||
|         const $previewPanel = $form.find(`.tab[data-tab="${$tabMenu.data('preview')}"]`); | ||||
|         renderPreviewPanelContent($previewPanel, data); | ||||
|       }); | ||||
|       } catch (error) { | ||||
|         console.error('Error:', error); | ||||
|       } | ||||
|     }); | ||||
|   } | ||||
| } | ||||
|  | ||||
| function initEditDiffTab($form) { | ||||
|   const $tabMenu = $form.find('.tabular.menu'); | ||||
|   $tabMenu.find('.item').tab(); | ||||
|   $tabMenu.find(`.item[data-tab="${$tabMenu.data('diff')}"]`).on('click', function () { | ||||
|     const $this = $(this); | ||||
|     $.post($this.data('url'), { | ||||
|       _csrf: csrfToken, | ||||
|       context: $this.data('context'), | ||||
|       content: $form.find(`.tab[data-tab="${$tabMenu.data('write')}"] textarea`).val(), | ||||
|     }, (data) => { | ||||
|       const $diffPreviewPanel = $form.find(`.tab[data-tab="${$tabMenu.data('diff')}"]`); | ||||
|       $diffPreviewPanel.html(data); | ||||
|     }); | ||||
|   }); | ||||
| } | ||||
|  | ||||
| function initEditorForm() { | ||||
|   if ($('.repository .edit.form').length === 0) { | ||||
|     return; | ||||
|   } | ||||
|  | ||||
|   initEditPreviewTab($('.repository .edit.form')); | ||||
|   initEditDiffTab($('.repository .edit.form')); | ||||
| } | ||||
|  | ||||
| function getCursorPosition($e) { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user