mirror of
				https://codeberg.org/forgejo/forgejo.git
				synced 2025-11-04 08:21:11 +00:00 
			
		
		
		
	feat: reduce amount of morphing for milestone (#8350)
- Avoid morphing too much HTML, only morph the currently selected milestone text. - Changes that the milestone dropdown is not morphed, which contains event listeners and newer versions of the morphing library seem does not preserve event listeners in most cases. Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/8350 Reviewed-by: Otto <otto@codeberg.org> Co-authored-by: Gusted <postmaster@gusted.xyz> Co-committed-by: Gusted <postmaster@gusted.xyz>
This commit is contained in:
		
					parent
					
						
							
								5158493ba6
							
						
					
				
			
			
				commit
				
					
						e186b5c039
					
				
			
		
					 5 changed files with 15 additions and 18 deletions
				
			
		| 
						 | 
					@ -2401,10 +2401,6 @@ func UpdateIssueMilestone(ctx *context.Context) {
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if ctx.FormBool("htmx") {
 | 
						if ctx.FormBool("htmx") {
 | 
				
			||||||
		renderMilestones(ctx)
 | 
					 | 
				
			||||||
		if ctx.Written() {
 | 
					 | 
				
			||||||
			return
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		prepareHiddenCommentType(ctx)
 | 
							prepareHiddenCommentType(ctx)
 | 
				
			||||||
		if ctx.Written() {
 | 
							if ctx.Written() {
 | 
				
			||||||
			return
 | 
								return
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,4 +1,4 @@
 | 
				
			||||||
<div id="insert-timeline" hx-swap-oob="beforebegin">
 | 
					<div id="insert-timeline" hx-swap-oob="beforebegin">
 | 
				
			||||||
	{{template "repo/issue/view_content/comments" .}}
 | 
						{{template "repo/issue/view_content/comments" .}}
 | 
				
			||||||
</div>
 | 
					</div>
 | 
				
			||||||
{{template "repo/issue/view_content/sidebar/milestones" .}}
 | 
					{{template "repo/issue/milestone/selected" .}}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										11
									
								
								templates/repo/issue/milestone/selected.tmpl
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								templates/repo/issue/milestone/selected.tmpl
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,11 @@
 | 
				
			||||||
 | 
					<div id="selected-milestone" class="ui select-milestone list">
 | 
				
			||||||
 | 
							<span class="no-select item {{if .Issue.Milestone}}tw-hidden{{end}}">{{ctx.Locale.Tr "repo.issues.new.no_milestone"}}</span>
 | 
				
			||||||
 | 
							<div class="selected">
 | 
				
			||||||
 | 
								{{if .Issue.Milestone}}
 | 
				
			||||||
 | 
									<a class="item muted sidebar-item-link" href="{{.RepoLink}}/milestone/{{.Issue.Milestone.ID}}">
 | 
				
			||||||
 | 
										{{svg "octicon-milestone" 18 "tw-mr-2"}}
 | 
				
			||||||
 | 
										{{.Issue.Milestone.Name}}
 | 
				
			||||||
 | 
									</a>
 | 
				
			||||||
 | 
								{{end}}
 | 
				
			||||||
 | 
							</div>
 | 
				
			||||||
 | 
					</div>
 | 
				
			||||||
| 
						 | 
					@ -1,4 +1,4 @@
 | 
				
			||||||
<div id="milestone-section" hx-swap="morph" hx-target="this" hx-indicator="this">
 | 
					<div id="milestone-section" hx-swap="morph" hx-target="#selected-milestone" hx-indicator="this">
 | 
				
			||||||
	<div class="ui {{if or (not .HasIssuesOrPullsWritePermission) .Repository.IsArchived}}disabled{{end}} floating jump select-milestone dropdown">
 | 
						<div class="ui {{if or (not .HasIssuesOrPullsWritePermission) .Repository.IsArchived}}disabled{{end}} floating jump select-milestone dropdown">
 | 
				
			||||||
		<a class="text muted flex-text-block">
 | 
							<a class="text muted flex-text-block">
 | 
				
			||||||
			<strong>{{ctx.Locale.Tr "repo.issues.new.milestone"}}</strong>
 | 
								<strong>{{ctx.Locale.Tr "repo.issues.new.milestone"}}</strong>
 | 
				
			||||||
| 
						 | 
					@ -10,15 +10,5 @@
 | 
				
			||||||
			{{template "repo/issue/milestone/select_menu" .}}
 | 
								{{template "repo/issue/milestone/select_menu" .}}
 | 
				
			||||||
		</div>
 | 
							</div>
 | 
				
			||||||
	</div>
 | 
						</div>
 | 
				
			||||||
	<div class="ui select-milestone list">
 | 
						{{template "repo/issue/milestone/selected" .}}
 | 
				
			||||||
		<span class="no-select item {{if .Issue.Milestone}}tw-hidden{{end}}">{{ctx.Locale.Tr "repo.issues.new.no_milestone"}}</span>
 | 
					 | 
				
			||||||
		<div class="selected">
 | 
					 | 
				
			||||||
			{{if .Issue.Milestone}}
 | 
					 | 
				
			||||||
				<a class="item muted sidebar-item-link" href="{{.RepoLink}}/milestone/{{.Issue.Milestone.ID}}">
 | 
					 | 
				
			||||||
					{{svg "octicon-milestone" 18 "tw-mr-2"}}
 | 
					 | 
				
			||||||
					{{.Issue.Milestone.Name}}
 | 
					 | 
				
			||||||
				</a>
 | 
					 | 
				
			||||||
			{{end}}
 | 
					 | 
				
			||||||
		</div>
 | 
					 | 
				
			||||||
	</div>
 | 
					 | 
				
			||||||
</div>
 | 
					</div>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -221,7 +221,7 @@ test('Issue: Milestone', async ({page}, workerInfo) => {
 | 
				
			||||||
  const response = await page.goto('/user2/repo1/issues/1');
 | 
					  const response = await page.goto('/user2/repo1/issues/1');
 | 
				
			||||||
  expect(response?.status()).toBe(200);
 | 
					  expect(response?.status()).toBe(200);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  const selectedMilestone = page.locator('.issue-content-right .select-milestone.list');
 | 
					  const selectedMilestone = page.locator('.issue-content-right #selected-milestone');
 | 
				
			||||||
  const milestoneDropdown = page.locator('.issue-content-right .select-milestone.dropdown');
 | 
					  const milestoneDropdown = page.locator('.issue-content-right .select-milestone.dropdown');
 | 
				
			||||||
  await expect(selectedMilestone).toContainText('No milestone');
 | 
					  await expect(selectedMilestone).toContainText('No milestone');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue