1
0
Fork 0
mirror of https://codeberg.org/forgejo/forgejo.git synced 2025-07-19 01:29:40 +02: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:
Gusted 2025-07-15 02:22:49 +02:00 committed by Otto
parent 5158493ba6
commit e186b5c039
5 changed files with 15 additions and 18 deletions

View file

@ -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

View file

@ -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" .}}

View 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>

View file

@ -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>

View file

@ -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');