mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-31 10:56:10 +01:00 
			
		
		
		
	Clone repository with Tea CLI (#33725)
This PR adds "Tea CLI" as a clone method. <img width="350" alt="Capture d’écran 2025-02-25 à 23 38 47" src="https://github.com/user-attachments/assets/8e86e54a-998b-45d1-9f20-167b449e79b6" /> --------- Signed-off-by: Quentin Guidée <quentin.guidee@gmail.com> Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
This commit is contained in:
		| @@ -53,20 +53,49 @@ export function substituteRepoOpenWithUrl(tmpl: string, url: string): string { | ||||
| function initCloneSchemeUrlSelection(parent: Element) { | ||||
|   const elCloneUrlInput = parent.querySelector<HTMLInputElement>('.repo-clone-url'); | ||||
|  | ||||
|   const tabSsh = parent.querySelector('.repo-clone-ssh'); | ||||
|   const tabHttps = parent.querySelector('.repo-clone-https'); | ||||
|   const tabSsh = parent.querySelector('.repo-clone-ssh'); | ||||
|   const tabTea = parent.querySelector('.repo-clone-tea'); | ||||
|   const updateClonePanelUi = function() { | ||||
|     const scheme = localStorage.getItem('repo-clone-protocol') || 'https'; | ||||
|     const isSSH = scheme === 'ssh' && Boolean(tabSsh) || scheme !== 'ssh' && !tabHttps; | ||||
|     if (tabHttps) { | ||||
|       tabHttps.textContent = window.origin.split(':')[0].toUpperCase(); // show "HTTP" or "HTTPS" | ||||
|       tabHttps.classList.toggle('active', !isSSH); | ||||
|     } | ||||
|     if (tabSsh) { | ||||
|       tabSsh.classList.toggle('active', isSSH); | ||||
|     let scheme = localStorage.getItem('repo-clone-protocol'); | ||||
|     if (!['https', 'ssh', 'tea'].includes(scheme)) { | ||||
|       scheme = 'https'; | ||||
|     } | ||||
|  | ||||
|     // Fallbacks if the scheme preference is not available in the tabs, for example: empty repo page, there are only HTTPS and SSH | ||||
|     if (scheme === 'tea' && !tabTea) { | ||||
|       scheme = 'https'; | ||||
|     } | ||||
|     if (scheme === 'https' && !tabHttps) { | ||||
|       scheme = 'ssh'; | ||||
|     } else if (scheme === 'ssh' && !tabSsh) { | ||||
|       scheme = 'https'; | ||||
|     } | ||||
|  | ||||
|     const isHttps = scheme === 'https'; | ||||
|     const isSsh = scheme === 'ssh'; | ||||
|     const isTea = scheme === 'tea'; | ||||
|  | ||||
|     if (tabHttps) { | ||||
|       tabHttps.textContent = window.origin.split(':')[0].toUpperCase(); // show "HTTP" or "HTTPS" | ||||
|       tabHttps.classList.toggle('active', isHttps); | ||||
|     } | ||||
|     if (tabSsh) { | ||||
|       tabSsh.classList.toggle('active', isSsh); | ||||
|     } | ||||
|     if (tabTea) { | ||||
|       tabTea.classList.toggle('active', isTea); | ||||
|     } | ||||
|  | ||||
|     let tab: Element; | ||||
|     if (isHttps) { | ||||
|       tab = tabHttps; | ||||
|     } else if (isSsh) { | ||||
|       tab = tabSsh; | ||||
|     } else if (isTea) { | ||||
|       tab = tabTea; | ||||
|     } | ||||
|  | ||||
|     const tab = isSSH ? tabSsh : tabHttps; | ||||
|     if (!tab) return; | ||||
|     const link = toOriginUrl(tab.getAttribute('data-link')); | ||||
|  | ||||
| @@ -84,12 +113,16 @@ function initCloneSchemeUrlSelection(parent: Element) { | ||||
|  | ||||
|   updateClonePanelUi(); | ||||
|   // tabSsh or tabHttps might not both exist, eg: guest view, or one is disabled by the server | ||||
|   tabHttps?.addEventListener('click', () => { | ||||
|     localStorage.setItem('repo-clone-protocol', 'https'); | ||||
|     updateClonePanelUi(); | ||||
|   }); | ||||
|   tabSsh?.addEventListener('click', () => { | ||||
|     localStorage.setItem('repo-clone-protocol', 'ssh'); | ||||
|     updateClonePanelUi(); | ||||
|   }); | ||||
|   tabHttps?.addEventListener('click', () => { | ||||
|     localStorage.setItem('repo-clone-protocol', 'https'); | ||||
|   tabTea?.addEventListener('click', () => { | ||||
|     localStorage.setItem('repo-clone-protocol', 'tea'); | ||||
|     updateClonePanelUi(); | ||||
|   }); | ||||
|   elCloneUrlInput.addEventListener('focus', () => { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user