mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-26 12:27:06 +00:00 
			
		
		
		
	Allow new file and edit file preview if it has editable extension (#23624)
Close #23579 Inspired by [idea](https://github.com/go-gitea/gitea/issues/23579#issuecomment-1475429247) from @brechtvl In this PR, the behavior is when extension switches from writatble to not, preview will hide, and vice versa. demo: https://user-images.githubusercontent.com/17645053/226786119-d20063da-8763-41ce-9b00-ae34929120e1.mov --------- Co-authored-by: silverwind <me@silverwind.io>
This commit is contained in:
		| @@ -1,4 +1,5 @@ | ||||
| import {basename, extname, isObject, isDarkTheme} from '../utils.js'; | ||||
| import {debounce} from 'throttle-debounce'; | ||||
|  | ||||
| const languagesByFilename = {}; | ||||
| const languagesByExt = {}; | ||||
| @@ -130,23 +131,33 @@ function getFileBasedOptions(filename, lineWrapExts) { | ||||
|   }; | ||||
| } | ||||
|  | ||||
| export async function createCodeEditor(textarea, filenameInput) { | ||||
|   const filename = basename(filenameInput.value); | ||||
|   const previewLink = document.querySelector('a[data-tab=preview]'); | ||||
|   const previewableExts = (textarea.getAttribute('data-previewable-extensions') || '').split(','); | ||||
|   const lineWrapExts = (textarea.getAttribute('data-line-wrap-extensions') || '').split(','); | ||||
|   const previewable = previewableExts.includes(extname(filename)); | ||||
|   const editorConfig = getEditorconfig(filenameInput); | ||||
| function togglePreviewDisplay(previewable) { | ||||
|   const previewTab = document.querySelector('a[data-tab="preview"]'); | ||||
|   if (!previewTab) return; | ||||
|  | ||||
|   if (previewLink) { | ||||
|     if (previewable) { | ||||
|       const newUrl = (previewLink.getAttribute('data-url') || '').replace(/(.*)\/.*/i, `$1/markup`); | ||||
|       previewLink.setAttribute('data-url', newUrl); | ||||
|       previewLink.style.display = ''; | ||||
|     } else { | ||||
|       previewLink.style.display = 'none'; | ||||
|   if (previewable) { | ||||
|     const newUrl = (previewTab.getAttribute('data-url') || '').replace(/(.*)\/.*/i, `$1/markup`); | ||||
|     previewTab.setAttribute('data-url', newUrl); | ||||
|     previewTab.style.display = ''; | ||||
|   } else { | ||||
|     previewTab.style.display = 'none'; | ||||
|     // If the "preview" tab was active, user changes the filename to a non-previewable one, | ||||
|     // then the "preview" tab becomes inactive (hidden), so the "write" tab should become active | ||||
|     if (previewTab.classList.contains('active')) { | ||||
|       const writeTab = document.querySelector('a[data-tab="write"]'); | ||||
|       writeTab.click(); | ||||
|     } | ||||
|   } | ||||
| } | ||||
|  | ||||
| export async function createCodeEditor(textarea, filenameInput) { | ||||
|   const filename = basename(filenameInput.value); | ||||
|   const previewableExts = new Set((textarea.getAttribute('data-previewable-extensions') || '').split(',')); | ||||
|   const lineWrapExts = (textarea.getAttribute('data-line-wrap-extensions') || '').split(','); | ||||
|   const previewable = previewableExts.has(extname(filename)); | ||||
|   const editorConfig = getEditorconfig(filenameInput); | ||||
|  | ||||
|   togglePreviewDisplay(previewable); | ||||
|  | ||||
|   const {monaco, editor} = await createMonaco(textarea, filename, { | ||||
|     ...baseOptions, | ||||
| @@ -154,10 +165,12 @@ export async function createCodeEditor(textarea, filenameInput) { | ||||
|     ...getEditorConfigOptions(editorConfig), | ||||
|   }); | ||||
|  | ||||
|   filenameInput.addEventListener('keyup', () => { | ||||
|   filenameInput.addEventListener('input', debounce(500, () => { | ||||
|     const filename = filenameInput.value; | ||||
|     const previewable = previewableExts.has(extname(filename)); | ||||
|     togglePreviewDisplay(previewable); | ||||
|     updateEditor(monaco, editor, filename, lineWrapExts); | ||||
|   }); | ||||
|   })); | ||||
|  | ||||
|   return editor; | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Hester Gong
					Hester Gong