Skip to content

Commit ed39a86

Browse files
authored
Merge branch 'main' into fix-3796-add-reindex-button-to-settings
2 parents 423c69e + e78ee73 commit ed39a86

11 files changed

+42
-44
lines changed

modules/markup/html.go

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -322,7 +322,7 @@ func postProcess(ctx *RenderContext, procs []processor, input io.Reader, output
322322
node = node.FirstChild
323323
}
324324

325-
visitNode(ctx, procs, node, true)
325+
visitNode(ctx, procs, procs, node)
326326

327327
newNodes := make([]*html.Node, 0, 5)
328328

@@ -354,24 +354,22 @@ func postProcess(ctx *RenderContext, procs []processor, input io.Reader, output
354354
return nil
355355
}
356356

357-
func visitNode(ctx *RenderContext, procs []processor, node *html.Node, visitText bool) {
357+
func visitNode(ctx *RenderContext, procs, textProcs []processor, node *html.Node) {
358358
// Add user-content- to IDs if they don't already have them
359359
for idx, attr := range node.Attr {
360360
if attr.Key == "id" && !(strings.HasPrefix(attr.Val, "user-content-") || blackfridayExtRegex.MatchString(attr.Val)) {
361361
node.Attr[idx].Val = "user-content-" + attr.Val
362362
}
363363

364364
if attr.Key == "class" && attr.Val == "emoji" {
365-
visitText = false
365+
textProcs = nil
366366
}
367367
}
368368

369-
// We ignore code, pre and already generated links.
369+
// We ignore code and pre.
370370
switch node.Type {
371371
case html.TextNode:
372-
if visitText {
373-
textNode(ctx, procs, node)
374-
}
372+
textNode(ctx, textProcs, node)
375373
case html.ElementNode:
376374
if node.Data == "img" {
377375
for i, attr := range node.Attr {
@@ -390,7 +388,8 @@ func visitNode(ctx *RenderContext, procs []processor, node *html.Node, visitText
390388
node.Attr[i] = attr
391389
}
392390
} else if node.Data == "a" {
393-
visitText = false
391+
// Restrict text in links to emojis
392+
textProcs = emojiProcessors
394393
} else if node.Data == "code" || node.Data == "pre" {
395394
return
396395
} else if node.Data == "i" {
@@ -416,7 +415,7 @@ func visitNode(ctx *RenderContext, procs []processor, node *html.Node, visitText
416415
}
417416
}
418417
for n := node.FirstChild; n != nil; n = n.NextSibling {
419-
visitNode(ctx, procs, n, visitText)
418+
visitNode(ctx, procs, textProcs, n)
420419
}
421420
}
422421
// ignore everything else

modules/markup/markdown/markdown_test.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -391,5 +391,13 @@ func TestRenderSiblingImages_Issue12925(t *testing.T) {
391391
res, err := RenderRawString(&markup.RenderContext{}, testcase)
392392
assert.NoError(t, err)
393393
assert.Equal(t, expected, res)
394+
}
394395

396+
func TestRenderEmojiInLinks_Issue12331(t *testing.T) {
397+
testcase := `[Link with emoji :moon: in text](https://gitea.io)`
398+
expected := `<p><a href="https://gitea.io" rel="nofollow">Link with emoji <span class="emoji" aria-label="waxing gibbous moon">🌔</span> in text</a></p>
399+
`
400+
res, err := RenderString(&markup.RenderContext{}, testcase)
401+
assert.NoError(t, err)
402+
assert.Equal(t, expected, res)
395403
}

options/locale/locale_de-DE.ini

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1210,11 +1210,7 @@ issues.action_milestone_no_select=Kein Meilenstein
12101210
issues.action_assignee=Zuständig
12111211
issues.action_assignee_no_select=Niemand zuständig
12121212
issues.opened_by=%[1]s von <a href="%[2]s">%[3]s</a> geöffnet
1213-
pulls.merged_by=%[1]s gemergt von <a href="%[2]s">%[3]s</a>
1214-
pulls.merged_by_fake=%[1]s gemergt von %[2]s
1215-
issues.closed_by=%[1]s geschlossen von <a href="%[2]s">%[3]s</a>
12161213
issues.opened_by_fake=%[1]s geöffnet von %[2]s
1217-
issues.closed_by_fake=%[1]s geschlossen von %[2]s
12181214
issues.previous=Vorherige
12191215
issues.next=Nächste
12201216
issues.open_title=Offen

options/locale/locale_el-GR.ini

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1204,11 +1204,7 @@ issues.action_milestone_no_select=Χωρίς ορόσημο
12041204
issues.action_assignee=Αποδέκτης
12051205
issues.action_assignee_no_select=Κανένας Αποδέκτης
12061206
issues.opened_by=άνοιξαν %[1]s από <a href="%[2]s">%[3]s</a>
1207-
pulls.merged_by=συγχώνευσε το %[1]s από <a href="%[2]s">%[3]s</a>
1208-
pulls.merged_by_fake=συγχώνευσε το %[1]s από %[2]s
1209-
issues.closed_by=έκλεισε το %[1]s από <a href="%[2]s">%[3]s</a>
12101207
issues.opened_by_fake=άνοιξε το %[1]s από %[2]s
1211-
issues.closed_by_fake=έκλεισε το %[1]s από %[2]s
12121208
issues.previous=Προηγούμενο
12131209
issues.next=Επόμενο
12141210
issues.open_title=Ανοιχτό

options/locale/locale_es-ES.ini

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1221,11 +1221,7 @@ issues.action_milestone_no_select=Sin hito
12211221
issues.action_assignee=Asignado a
12221222
issues.action_assignee_no_select=Sin asignado
12231223
issues.opened_by=abierta %[1]s por <a href="%[2]s">%[3]s</a>
1224-
pulls.merged_by=fusionado %[1]s por <a href="%[2]s">%[3]s</a>
1225-
pulls.merged_by_fake=fusionado %[1]s por %[2]s
1226-
issues.closed_by=cerrada %[1]s por <a href="%[2]s">%[3]s</a>
12271224
issues.opened_by_fake=abierta %[1]s por %[2]s
1228-
issues.closed_by_fake=cerrada %[1]s por %[2]s
12291225
issues.previous=Página Anterior
12301226
issues.next=Página Siguiente
12311227
issues.open_title=Abierta

options/locale/locale_ja-JP.ini

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1223,11 +1223,7 @@ issues.action_milestone_no_select=マイルストーンなし
12231223
issues.action_assignee=担当者
12241224
issues.action_assignee_no_select=担当者なし
12251225
issues.opened_by=<a href="%[2]s">%[3]s</a>が%[1]sに作成
1226-
pulls.merged_by=<a href="%[2]s">%[3]s</a>が%[1]sにマージ
1227-
pulls.merged_by_fake=%[2]sが%[1]sにマージ
1228-
issues.closed_by=<a href="%[2]s">%[3]s</a>が%[1]sにクローズ
12291226
issues.opened_by_fake=%[2]sが%[1]sに作成
1230-
issues.closed_by_fake=%[2]sが%[1]sにクローズ
12311227
issues.previous=前ページ
12321228
issues.next=次ページ
12331229
issues.open_title=オープン

options/locale/locale_pt-PT.ini

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -442,6 +442,7 @@ lang_select_error=Escolha um idioma da lista.
442442
username_been_taken=O nome de utilizador já foi tomado.
443443
username_change_not_local_user=Utilizadores que não são locais não têm permissão para mudar o nome de utilizador.
444444
repo_name_been_taken=O nome do repositório já foi usado.
445+
repository_force_private=Forçar Privado está habilitado: repositórios privados não podem ser tornados públicos.
445446
repository_files_already_exist=Já existem ficheiros neste repositório. Contacte o administrador do sistema.
446447
repository_files_already_exist.adopt=Já existem ficheiros neste repositório e só podem ser adoptados.
447448
repository_files_already_exist.delete=Já existem ficheiros neste repositório. Tem que os eliminar.
@@ -1224,11 +1225,11 @@ issues.action_milestone_no_select=Sem etapa
12241225
issues.action_assignee=Responsável
12251226
issues.action_assignee_no_select=Sem responsável
12261227
issues.opened_by=aberta %[1]s por <a href="%[2]s">%[3]s</a>
1227-
pulls.merged_by=%[1]s executado(s) por <a href="%[2]s">%[3]s</a>
1228-
pulls.merged_by_fake=%[1]s executado(s) por %[2]s
1229-
issues.closed_by=%[1]s resolvida(s) por <a href="%[2]s">%[3]s</a>
1228+
pulls.merged_by=por <a href="%[2]s">%[3]s</a> foi executado %[1]s
1229+
pulls.merged_by_fake=por %[2]s foi executado %[1]s
1230+
issues.closed_by=por <a href="%[2]s">%[3]s</a> foi fechada %[1]s
12301231
issues.opened_by_fake=%[1]s aberta(s) por %[2]s
1231-
issues.closed_by_fake=%[1]s resolvida(s) por %[2]s
1232+
issues.closed_by_fake=por %[2]s foi fechada %[1]s
12321233
issues.previous=Anterior
12331234
issues.next=Seguinte
12341235
issues.open_title=Aberta
@@ -2516,6 +2517,11 @@ auths.oauth2_emailURL=URL do email
25162517
auths.skip_local_two_fa=Ignorar a autenticação em dois passos local
25172518
auths.skip_local_two_fa_helper=Deixar esta opção desligada faz com que os utilizadores locais que tenham a autenticação em dois passos habilitada sejam obrigados a passar por ela para iniciar a sessão
25182519
auths.oauth2_tenant=Locatário
2520+
auths.oauth2_scopes=Âmbitos adicionais
2521+
auths.oauth2_required_claim_name=Nome de Reivindicação obrigatório
2522+
auths.oauth2_required_claim_name_helper=Defina este nome para restringir o início de sessão desta fonte a utilizadores que tenham uma reivindicação com este nome
2523+
auths.oauth2_required_claim_value=Valor de Reivindicação obrigatório
2524+
auths.oauth2_required_claim_value_helper=Defina este valor para restringir o início de sessão desta fonte a utilizadores que tenham uma reivindicação com este nome e este valor
25192525
auths.enable_auto_register=Habilitar o registo automático
25202526
auths.sspi_auto_create_users=Criar utilizadores automaticamente
25212527
auths.sspi_auto_create_users_helper=Permitir que o método de autenticação SSPI crie, automaticamente, novas contas para utilizadores que iniciam a sessão pela primeira vez

options/locale/locale_ru-RU.ini

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1210,11 +1210,7 @@ issues.action_milestone_no_select=Нет этапа
12101210
issues.action_assignee=Ответственный
12111211
issues.action_assignee_no_select=Нет ответственного
12121212
issues.opened_by=открыта %[1]s <a href="%[2]s">%[3]s</a>
1213-
pulls.merged_by=слито %[1]s пользователем <a href="%[2]s">%[3]s</a>
1214-
pulls.merged_by_fake=слито %[1]s пользователем %[2]s
1215-
issues.closed_by=закрыт %[1]s пользователем <a href="%[2]s">%[3]s</a>
12161213
issues.opened_by_fake=открыт %[1]s пользователем %[2]s
1217-
issues.closed_by_fake=закрыт %[1]s пользователем %[2]s
12181214
issues.previous=Предыдущая
12191215
issues.next=Следующая
12201216
issues.open_title=Открыто

options/locale/locale_tr-TR.ini

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1188,10 +1188,7 @@ issues.action_milestone_no_select=Kilometre Taşı Yok
11881188
issues.action_assignee=Atanan
11891189
issues.action_assignee_no_select=Atanan yok
11901190
issues.opened_by=<a href="%[2]s">%[3]s</a> tarafından %[1]s açıldı
1191-
pulls.merged_by_fake=%[2]s tarafından %[1]s birleştirildi
1192-
issues.closed_by=<a href="%[2]s">%[3]s</a> tarafından %[1]s kapatıldı
11931191
issues.opened_by_fake=%[2]s tarafından %[1]s açıldı
1194-
issues.closed_by_fake=%[2]s tarafından %[1]s kapatıldı
11951192
issues.previous=Önceki
11961193
issues.next=Sonraki
11971194
issues.open_title=Açık

options/locale/locale_zh-CN.ini

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -443,6 +443,7 @@ lang_select_error=从列表中选出语言
443443
username_been_taken=用户名已被使用。
444444
username_change_not_local_user=非本地用户不允许更改用户名。
445445
repo_name_been_taken=仓库名称已被使用。
446+
repository_force_private=“强制私有”已启用:私有仓库不能被公开。
446447
repository_files_already_exist=此仓库已存在文件。请联系系统管理员。
447448
repository_files_already_exist.adopt=此仓库已存在文件,只能被收录。
448449
repository_files_already_exist.delete=此仓库已存在文件,必须先删除他们。
@@ -1225,11 +1226,11 @@ issues.action_milestone_no_select=无里程碑
12251226
issues.action_assignee=指派人筛选
12261227
issues.action_assignee_no_select=未指派
12271228
issues.opened_by=由 <a href="%[2]s">%[3]s</a> 于 %[1]s创建
1228-
pulls.merged_by=由 <a href="%[2]s">%[3]s</a> %[1]s 合并
1229-
pulls.merged_by_fake=由 %[2]s %[1]s 合并
1230-
issues.closed_by=由 <a href="%[2]s">%[3]s</a> %[1]s 关闭
1229+
pulls.merged_by=由 <a href="%[2]s">%[3]s</a> 创建,被合并于 %[1]s
1230+
pulls.merged_by_fake=由 %[2]s 创建,被合并于 %[1]s
1231+
issues.closed_by=由 <a href="%[2]s">%[3]s</a> 创建,被关闭于 %[1]s
12311232
issues.opened_by_fake=由 %[2]s 于 %[1]s 打开
1232-
issues.closed_by_fake=由 %[2]s %[1]s 关闭
1233+
issues.closed_by_fake=由 %[2]s 创建,被关闭于 %[1]s
12331234
issues.previous=上一页
12341235
issues.next=下一页
12351236
issues.open_title=开启中
@@ -2520,6 +2521,11 @@ auths.oauth2_emailURL=电子邮件 URL
25202521
auths.skip_local_two_fa=跳过本地两步验证
25212522
auths.skip_local_two_fa_helper=不设置意味着设置了两步验证的本地用户仍然需要通过两步验证才能登录
25222523
auths.oauth2_tenant=租户
2524+
auths.oauth2_scopes=附加授权范围(Scopes)
2525+
auths.oauth2_required_claim_name=必须填写 Claim 声明的名称
2526+
auths.oauth2_required_claim_name_helper=设置此名称,只有具有此名称的声明(Claim)的用户可从此源登录
2527+
auths.oauth2_required_claim_value=必须填写 Claim 声明的值
2528+
auths.oauth2_required_claim_value_helper=设置此值,只有拥有对应的声明(Claim)的名称和值的用户才被允许从此源登录
25232529
auths.enable_auto_register=允许用户自动注册
25242530
auths.sspi_auto_create_users=自动创建用户
25252531
auths.sspi_auto_create_users_helper=允许 SSPI 认证在用户第一次登录时自动创建新账号

options/locale/locale_zh-TW.ini

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -785,6 +785,8 @@ visibility_fork_helper=(修改本值將會影響所有 fork 儲存庫)
785785
clone_helper=需要有關 Clone 的協助嗎?查看<a target="_blank" rel="noopener noreferrer" href="%s">幫助</a> 。
786786
fork_repo=Fork 儲存庫
787787
fork_from=Fork 自
788+
already_forked=您已經 fork 過 %s
789+
fork_to_different_account=Fork 到其他帳戶
788790
fork_visibility_helper=無法更改 fork 儲存庫的瀏覽權限。
789791
use_template=使用此範本
790792
clone_in_vsc=在 VS Code 中 Clone
@@ -1223,11 +1225,11 @@ issues.action_milestone_no_select=無里程碑
12231225
issues.action_assignee=成員
12241226
issues.action_assignee_no_select=沒有成員
12251227
issues.opened_by=建立於 %[1]s 由 <a href="%[2]s">%[3]s</a>
1226-
pulls.merged_by=合併於 %[1]s,由 <a href="%[2]s">%[3]s</a> 建立
1227-
pulls.merged_by_fake=合併於 %[1]s,由 %[2]s 建立
1228-
issues.closed_by=關閉於 %[1]s,由 <a href="%[2]s">%[3]s</a> 建立
1228+
pulls.merged_by=由 <a href="%[2]s">%[3]s</a> 建立,合併於 %[1]s
1229+
pulls.merged_by_fake= %[2]s 建立,合併於 %[1]s
1230+
issues.closed_by=由 <a href="%[2]s">%[3]s</a> 建立,關閉於 %[1]s
12291231
issues.opened_by_fake=建立於 %[1]s 由 %[2]s
1230-
issues.closed_by_fake=關閉於 %[1]s,由 %[2]s 建立
1232+
issues.closed_by_fake= %[2]s 建立,關閉於 %[1]s
12311233
issues.previous=上一頁
12321234
issues.next=下一頁
12331235
issues.open_title=開放中

0 commit comments

Comments
 (0)