Commit Graph

5673 Commits (2a37366c922aced15bd5943f74a5a997238ed945)

Author SHA1 Message Date
Ryan Wang 204113bd87
refactor: improve button component styles (#7517)
#### What type of PR is this?

/area ui
/kind improvement
/milestone 2.21.x

#### What this PR does / why we need it:

1. Add ghost variant
2. Improve icon style
3. Refactoring css using scss functions

#### Does this PR introduce a user-facing change?

```release-note
None
```
2025-06-09 15:38:34 +00:00
Ryan Wang 63d40d4d40
refactor: enable dashboard widgets query cache (#7520)
#### What type of PR is this?

/kind improvement
/area ui
/milestone 2.21.x

#### What this PR does / why we need it:

Enable query cache for dashboard widgets.

#### Does this PR introduce a user-facing change?

```release-note
None 
```
2025-06-09 15:36:34 +00:00
Ryan Wang 65d4751509
feat: add cover for post list (#7519)
#### What type of PR is this?

/kind feature
/area ui
/milestone 2.21.x

#### What this PR does / why we need it:

<img width="508" alt="image" src="https://github.com/user-attachments/assets/3d7a9ac0-1e0a-4a4f-a658-03af7ff89904" />

#### Which issue(s) this PR fixes:

Fixes #7437 

#### Special notes for your reviewer:

#### Does this PR introduce a user-facing change?

```release-note
文章管理列表支持显示封面图
```
2025-06-09 15:34:34 +00:00
John Niang aeea3a5488
Provide storage policy config APIs to make it easy to use (#7527)
* Provide storage policy config APIs to make it easy to use

* Update api client

Signed-off-by: Ryan Wang <i@ryanc.cc>

---------

Signed-off-by: Ryan Wang <i@ryanc.cc>
Co-authored-by: Ryan Wang <i@ryanc.cc>
2025-06-09 23:24:30 +08:00
Ryan Wang 315073406f
feat: add stack widget for dashboard (#7525)
#### What type of PR is this?

/area ui
/kind feautre
/milestone 2.21.x

#### What this PR does / why we need it:

This PR adds a core Dashboard Widget called Stack Widget, which is used to stack a batch of components in the same location and supports manual or automatic switching.

<img width="737" alt="image" src="https://github.com/user-attachments/assets/de448cd8-cf62-4608-8523-88395298e734" />
<img width="827" alt="image" src="https://github.com/user-attachments/assets/fecaf637-9cb8-444a-888b-0ee2a9700bc7" />

#### Which issue(s) this PR fixes:

Fixes #

#### Special notes for your reviewer:

#### Does this PR introduce a user-facing change?

```release-note
为仪表盘添加堆叠小部件
```
2025-06-09 15:08:34 +00:00
Ryan Wang 3fa6532d9b
refactor: convert post publish dates to human-readable format (#7526)
#### What type of PR is this?

/area ui
/kind improvement
/milestone 2.21.x

#### What this PR does / why we need it:

<img width="1202" alt="image" src="https://github.com/user-attachments/assets/cac050d2-b984-4b48-afe0-e18db220ec19" />

#### Does this PR introduce a user-facing change?

```release-note
将 Console 端文章列表的发布时间改为语义化时间
```
2025-06-09 15:02:34 +00:00
Ryan Wang 224d78079d
refactor: migrate system settings to new configmap API (#7524)
#### What type of PR is this?

/area ui
/kind improvement
/milestone 2.21.x

#### What this PR does / why we need it:

Migrate system settings to new configmap API

#### Which issue(s) this PR fixes:

Fixes #7515 

#### Special notes for your reviewer:

Need to test whether the system setting is working properly

#### Does this PR introduce a user-facing change?

```release-note
None
```
2025-06-09 15:00:33 +00:00
Ryan Wang 677caca403
chore: bump vue-related dependencies (#7523)
Signed-off-by: Ryan Wang <i@ryanc.cc>
2025-06-09 15:34:14 +08:00
Ryan Wang 28a4a13e0e
refactor: redesign ui of comment management page (#7481)
* refactor: redesign ui of comment management page

Signed-off-by: Ryan Wang <i@ryanc.cc>

* Add comment detail modal

Signed-off-by: Ryan Wang <i@ryanc.cc>

* Add reply detail modal

Signed-off-by: Ryan Wang <i@ryanc.cc>

* Improve ui

Signed-off-by: Ryan Wang <i@ryanc.cc>

* Add pending comments widget

Signed-off-by: Ryan Wang <i@ryanc.cc>

* Improve ui

Signed-off-by: Ryan Wang <i@ryanc.cc>

* Improve ui

Signed-off-by: Ryan Wang <i@ryanc.cc>

---------

Signed-off-by: Ryan Wang <i@ryanc.cc>
2025-06-06 22:59:43 +08:00
Ryan Wang 47e517d9bf
fix: correct package import paths (#7506)
#### What type of PR is this?

/kind cleanup
/area ui

#### What this PR does / why we need it:

Fix correct package import paths

#### Does this PR introduce a user-facing change?

```release-note
None
```
2025-06-06 09:06:56 +00:00
Ryan Wang 6d3c2494f6
feat: full-features of dashboard widgets (#7496)
#### What type of PR is this?

/area ui
/kind feature
/milestone 2.21.x

#### What this PR does / why we need it:

Previously, although the Console dashboard was designed from the beginning to support extensions and persistent configuration, this had not yet been implemented. This PR implements a more powerful dashboard configuration, including features:

1. Support for persisting configuration data to the currently logged-in user.
2. Support for configuring different dashboards for different device sizes (responsive support).
3. Support for extending dashboard widgets through plugins.
4. More UX/UI optimizations

docs: https://github.com/halo-dev/docs/pull/500

Test plugin: [plugin-widgets-test-1.0.11.jar.zip](https://github.com/user-attachments/files/20623916/plugin-widgets-test-1.0.11.jar.zip)

<img width="1663" alt="image" src="https://github.com/user-attachments/assets/cc4d78f2-25ab-4772-b43f-b16a813bcdc0" />
<img width="1662" alt="image" src="https://github.com/user-attachments/assets/e8ba8ca8-2ae9-4736-800f-6c0f062434a3" />



#### Which issue(s) this PR fixes:

Fixes https://github.com/halo-dev/halo/issues/6358
Fixes https://github.com/halo-dev/halo/issues/6666
Fixes https://github.com/halo-dev/halo/issues/2883

#### Special notes for your reviewer:

#### Does this PR introduce a user-facing change?

```release-note
重构 Console 端仪表盘,支持响应式布局、持久化配置,支持通过插件扩展小部件。
```
2025-06-06 08:30:56 +00:00
John Niang 54fad8d59a
Add a system config changed event (#7502) 2025-06-05 17:43:24 +08:00
John Niang f3023e6ec9
Add a system config changed event 2025-06-04 23:47:41 +08:00
John Niang fb62c1acff
Add support for configuring my preferences (#7495)
* Add support for configuring my preferences

* Update api client

Signed-off-by: Ryan Wang <i@ryanc.cc>

* Update api client

Signed-off-by: Ryan Wang <i@ryanc.cc>

---------

Signed-off-by: Ryan Wang <i@ryanc.cc>
Co-authored-by: Ryan Wang <i@ryanc.cc>
2025-06-04 11:55:03 +08:00
Ryan Wang ebbe6a91e9
refactor: remove time field from plugin list (#7494)
#### What type of PR is this?

/area ui
/kind improvement
/milestone 2.21.x

#### What this PR does / why we need it:

As per the title, the time shown in the plugin list is the installation time of the plugin. For usage purposes, this time seems to have no meaning or reference value.

#### Which issue(s) this PR fixes:

Fixes #7493 

#### Does this PR introduce a user-facing change?

```release-note
移除插件列表的时间字段,并在插件详情中显示安装时间。
```
2025-06-02 16:18:38 +00:00
Ryan Wang c6f19a233f
fix: exclude reserved users from global search results (#7486)
* fix: exclude reserved users from global search results

Signed-off-by: Ryan Wang <i@ryanc.cc>

* Use labelSelector

Signed-off-by: Ryan Wang <i@ryanc.cc>

---------

Signed-off-by: Ryan Wang <i@ryanc.cc>
2025-05-31 22:49:03 +08:00
John Niang f80487b1d5
Add support for setting external URL at setup page (#7488)
#### What type of PR is this?

/kind improvement
/area core
/milestone 2.21.x

#### What this PR does / why we need it:

This PR allows users to set external URL at setup page without performing a restart.

#### Which issue(s) this PR fixes:

Fixes https://github.com/halo-dev/halo/issues/7479

#### Special notes for your reviewer:

1. Try to start Halo instance with a fresh environment.
2. Request index page and you will be redirected to setup page.
3. Check if the external URL is equal to the base URL in your browser.
4. Try to change external URL and finish the setup process.
5. Login to console and check the external URL in overview page.

#### Does this PR introduce a user-facing change?

```release-note
支持在初始化页面设置外部访问地址
```
2025-05-31 10:10:31 +00:00
Ryan Wang 7162b8da92
fix: correct attachment selection state after new upload (#7487)
#### What type of PR is this?

/area ui
/kind bug
/milestone 2.21.x

#### What this PR does / why we need it:

Fix correct attachment selection state after new upload.

#### Which issue(s) this PR fixes:

Fixes https://github.com/halo-dev/halo/issues/7472

#### Does this PR introduce a user-facing change?

```release-note
修复当有已选择附件时,上传新附件导致所选附件状态异常的问题。
```
2025-05-30 10:10:28 +00:00
Ryan Wang 9d16388379
fix: external URL prompt in overview page always displays with priority (#7484)
#### What type of PR is this?

/area ui
/kind bug
/milestone 2.21.x

#### What this PR does / why we need it:

See https://github.com/halo-dev/halo/issues/7480

#### Which issue(s) this PR fixes:

Fixes https://github.com/halo-dev/halo/issues/7480

#### Special notes for your reviewer:

#### Does this PR introduce a user-facing change?

```release-note
None
```
2025-05-30 10:00:28 +00:00
Ryan Wang bb49a10a01
fix: resolve ui issue of global search component (#7485)
#### What type of PR is this?

/area ui
/kind bug
/milestone 2.21.x

#### What this PR does / why we need it:

Resolve ui issue of global search component cause by https://github.com/halo-dev/halo/pull/7383

#### Which issue(s) this PR fixes:

Fixes https://github.com/halo-dev/halo/issues/7478

#### Special notes for your reviewer:

#### Does this PR introduce a user-facing change?

```release-note
修复 2.21.0-alpha.1 中 Console 的全局搜索样式问题。
```
2025-05-30 09:52:28 +00:00
John Niang 4acddb27a5
Merge pull request #7482 from halo-dev/refactor/halo-publish
Migrate legacy OSSRH publishing service with publishing by using the Portal Publisher API
2025-05-30 12:01:18 +08:00
John Niang 033764ea63
Migrate maven publish with publishing by using the Portal Publisher API 2025-05-29 11:44:26 +08:00
John Niang 981d6d1c4a
Merge pull request #7476 from halo-dev/chore/upgrade-to-lucene-10.2.1
Bump Lucene to 10.2.1
2025-05-26 23:04:00 +08:00
John Niang d18f37df0a
Bump Lucene to 10.2.1 2025-05-26 22:44:51 +08:00
Ryan Wang 6410867302
feat: improve i18n for editor project (#7473)
#### What type of PR is this?

/kind improvement
/area editor
/milestone 2.21.x

#### What this PR does / why we need it:

Improve English translations for the editor. The changes in https://github.com/halo-dev/halo/pull/7444 did not provide English translations.

#### Does this PR introduce a user-facing change?

```release-note
None
```
2025-05-26 14:40:18 +00:00
John Niang 281a36fbe9
Merge pull request #7469 from halo-dev/chore/remove-deprecated-code
Remove deprecated code
2025-05-26 22:35:25 +08:00
Ryan Wang f36531119a Update ui
Signed-off-by: Ryan Wang <i@ryanc.cc>
2025-05-26 22:09:34 +08:00
Ryan Wang c27cbb5204
Merge branch 'main' into chore/remove-deprecated-code 2025-05-26 21:15:25 +08:00
John Niang d706b5eb6c
Add support back for using relative permalink (#7475)
#### What type of PR is this?

/kind bug
/area core
/milestone 2.21.x

#### What this PR does / why we need it:

This PR fixes the problem of not working for relative permalink caused by <https://github.com/halo-dev/halo/pull/7459>.

#### Special notes for your reviewer:

1. Try to start Halo instance with `halo.use-absolute-permalink=false` and check the permalinks of posts and attachments.
1. Try to start Halo instance with `halo.use-absolute-permalink=true` and check the permalinks of posts and attachments.

#### Does this PR introduce a user-facing change?

```release-note
None
```
2025-05-26 10:12:18 +00:00
Nimbus3009 a0dc9590c2
Add support for customizing nofollow of links in editor (#7444)
#### What type of PR is this?

/kind improvement
/area ui
/area editor

#### What this PR does / why we need it:

![屏幕截图 2025-05-19 101940](https://github.com/user-attachments/assets/bad2c616-7445-452e-b1bd-c8220f94a8bc)

#### Which issue(s) this PR fixes:

Fixes #6950

```release-note
增加可以勾选 nofollow 的设定
```
2025-05-26 09:16:39 +00:00
John Niang e346b979f0
Regenerate api client 2025-05-26 16:45:16 +08:00
John Niang e9b8b2f796
Regenerate OpenAPI 2025-05-26 16:38:00 +08:00
John Niang 301bbfb7c9
Remove deprecated code 2025-05-26 15:38:03 +08:00
John Niang ccdb97743b
Refactor logout handler (#7470)
#### What type of PR is this?

/kind cleanup
/area core
/milestone 2.21.x

#### What this PR does / why we need it:

This PR corrects location of LogoutHandler instead of in LogoutSuccessHandler. LogoutHanadler should be invoked before LogoutSuccessHandler.

#### Does this PR introduce a user-facing change?

```release-note
None
```
2025-05-26 03:44:14 +00:00
柳意梧情 5c27a0484b
Add shared events for listening user login and logout in plugins (#7440)
#### What type of PR is this?
/kind improvement

#### What this PR does / why we need it:

This PR adds UserLoginEvent and UserLogoutEvent which are shared to plugins.

#### Which issue(s) this PR fixes:

Fixes https://github.com/halo-dev/halo/issues/7436

#### Does this PR introduce a user-facing change?

```release-note
添加用户登录/登出事件
```
2025-05-23 08:54:12 +00:00
Ryan Wang a1c48b4943
fix: resolve text wrapping issue in StatusDot component (#7466)
#### What type of PR is this?

/area ui
/kind bug
/milestone 2.21.x


#### What this PR does / why we need it:

before:

<img width="273" alt="image" src="https://github.com/user-attachments/assets/e1e21e33-6ead-4d47-b3f6-1b19fb0a8a96" />

after:

<img width="323" alt="image" src="https://github.com/user-attachments/assets/950023f8-6e71-4db4-97c4-9a3b2be6dffb" />


#### Does this PR introduce a user-facing change?

```release-note
None
```
2025-05-23 08:14:12 +00:00
John Niang 3df117511c
Remove deprecation warnings from Gradle (#7468) 2025-05-23 16:08:38 +08:00
John Niang fb2fc31cdd
Bump Spring Boot to 3.5.0 (#7467)
#### What type of PR is this?

/kind improvement
/area core
/milestone 2.21.x

#### What this PR does / why we need it:

This PR bumps Spring Boot to [3.5.0](https://github.com/spring-projects/spring-boot/releases/tag/v3.5.0).

#### Does this PR introduce a user-facing change?

```release-note
升级依赖 Spring Boot 至 3.5.0
```
2025-05-23 04:22:12 +00:00
John Niang fb6b6f632d
Add support for configuring external URL online (#7459)
* Add support for configuring external URL online

* Fix the problem of timeout on external URL initialization

* Add external URL editing capability to overview page

Signed-off-by: Ryan Wang <i@ryanc.cc>

---------

Signed-off-by: Ryan Wang <i@ryanc.cc>
Co-authored-by: Ryan Wang <i@ryanc.cc>
2025-05-22 15:23:43 +08:00
Ryan Wang 42c374dba5 Add external URL editing capability to overview page
Signed-off-by: Ryan Wang <i@ryanc.cc>
2025-05-22 14:56:57 +08:00
John Niang 254bb9b225
Fix the problem of timeout on external URL initialization 2025-05-22 13:38:05 +08:00
John Niang 2d4e3b2c54
Fix the problem of undetermined locale (#7458)
#### What type of PR is this?

/kind bug
/area core
/milestone 2.21.x

#### What this PR does / why we need it:

This PR check if the locale is undetermined during resolving locale. Or it will cause the error below if locale is `und`:

```java
2025-05-21T17:28:45.953+08:00 ERROR 58760 --- [undedElastic-14] o.s.w.s.adapter.HttpWebHandlerAdapter    : [c1824fa5-1] 500 Server Error for HTTP GET "/"

org.thymeleaf.exceptions.TemplateOutputException: An error happened during template rendering
	at org.thymeleaf.engine.OutputTemplateHandler.handleText(OutputTemplateHandler.java:75) ~[thymeleaf-3.1.3.RELEASE.jar:3.1.3.RELEASE]
	at org.thymeleaf.engine.AbstractTemplateHandler.handleText(AbstractTemplateHandler.java:221) ~[thymeleaf-3.1.3.RELEASE.jar:3.1.3.RELEASE]
	at org.thymeleaf.engine.ProcessorTemplateHandler.handleText(ProcessorTemplateHandler.java:587) ~[thymeleaf-3.1.3.RELEASE.jar:3.1.3.RELEASE]
	at org.thymeleaf.engine.Text.beHandled(Text.java:97) ~[thymeleaf-3.1.3.RELEASE.jar:3.1.3.RELEASE]
	at org.thymeleaf.engine.Model.process(Model.java:300) ~[thymeleaf-3.1.3.RELEASE.jar:3.1.3.RELEASE]
	at org.thymeleaf.engine.GatheringModelProcessable.process(GatheringModelProcessable.java:78) ~[thymeleaf-3.1.3.RELEASE.jar:3.1.3.RELEASE]
	at org.thymeleaf.engine.ProcessorTemplateHandler.queueProcessable(ProcessorTemplateHandler.java:2106) ~[thymeleaf-3.1.3.RELEASE.jar:3.1.3.RELEASE]
	at org.thymeleaf.engine.ProcessorTemplateHandler.handleCloseElement(ProcessorTemplateHandler.java:1642) ~[thymeleaf-3.1.3.RELEASE.jar:3.1.3.RELEASE]
	at org.thymeleaf.engine.CloseElementTag.beHandled(CloseElementTag.java:139) ~[thymeleaf-3.1.3.RELEASE.jar:3.1.3.RELEASE]
	at org.thymeleaf.engine.Model.process(Model.java:300) ~[thymeleaf-3.1.3.RELEASE.jar:3.1.3.RELEASE]
	at org.thymeleaf.engine.OpenElementTagModelProcessable.process(OpenElementTagModelProcessable.java:110) ~[thymeleaf-3.1.3.RELEASE.jar:3.1.3.RELEASE]
	at org.thymeleaf.engine.ProcessorTemplateHandler.queueProcessable(ProcessorTemplateHandler.java:2106) ~[thymeleaf-3.1.3.RELEASE.jar:3.1.3.RELEASE]
	at org.thymeleaf.engine.ProcessorTemplateHandler.handleOpenElement(ProcessorTemplateHandler.java:1559) ~[thymeleaf-3.1.3.RELEASE.jar:3.1.3.RELEASE]
	at org.thymeleaf.engine.OpenElementTag.beHandled(OpenElementTag.java:205) ~[thymeleaf-3.1.3.RELEASE.jar:3.1.3.RELEASE]
	at org.thymeleaf.engine.TemplateModel.process(TemplateModel.java:155) ~[thymeleaf-3.1.3.RELEASE.jar:3.1.3.RELEASE]
	at org.thymeleaf.engine.ThrottledTemplateProcessor.process(ThrottledTemplateProcessor.java:235) ~[thymeleaf-3.1.3.RELEASE.jar:3.1.3.RELEASE]
	at org.thymeleaf.engine.ThrottledTemplateProcessor.process(ThrottledTemplateProcessor.java:200) ~[thymeleaf-3.1.3.RELEASE.jar:3.1.3.RELEASE]
	at org.thymeleaf.spring6.SpringWebFluxTemplateEngine$StreamThrottledTemplateProcessor.process(SpringWebFluxTemplateEngine.java:720) ~[thymeleaf-spring6-3.1.3.RELEASE.jar:3.1.3.RELEASE]
	at org.thymeleaf.spring6.SpringWebFluxTemplateEngine.lambda$createChunkedStream$2(SpringWebFluxTemplateEngine.java:269) ~[thymeleaf-spring6-3.1.3.RELEASE.jar:3.1.3.RELEASE]
	at reactor.core.publisher.FluxGenerate$GenerateSubscription.slowPath(FluxGenerate.java:271) ~[reactor-core-3.7.5.jar:3.7.5]
	at reactor.core.publisher.FluxGenerate$GenerateSubscription.request(FluxGenerate.java:213) ~[reactor-core-3.7.5.jar:3.7.5]
	at reactor.core.publisher.FluxPeekFuseable$PeekFuseableSubscriber.request(FluxPeekFuseable.java:144) ~[reactor-core-3.7.5.jar:3.7.5]
	at reactor.core.publisher.FluxSubscribeOn$SubscribeOnSubscriber.requestUpstream(FluxSubscribeOn.java:131) ~[reactor-core-3.7.5.jar:3.7.5]
	at reactor.core.publisher.FluxSubscribeOn$SubscribeOnSubscriber.onSubscribe(FluxSubscribeOn.java:124) ~[reactor-core-3.7.5.jar:3.7.5]
	at reactor.core.publisher.FluxPeekFuseable$PeekFuseableSubscriber.onSubscribe(FluxPeekFuseable.java:178) ~[reactor-core-3.7.5.jar:3.7.5]
	at reactor.core.publisher.FluxGenerate.subscribe(FluxGenerate.java:85) ~[reactor-core-3.7.5.jar:3.7.5]
	at reactor.core.publisher.InternalFluxOperator.subscribe(InternalFluxOperator.java:68) ~[reactor-core-3.7.5.jar:3.7.5]
	at reactor.core.publisher.FluxSubscribeOn$SubscribeOnSubscriber.run(FluxSubscribeOn.java:194) ~[reactor-core-3.7.5.jar:3.7.5]
	at reactor.core.scheduler.BoundedElasticThreadPerTaskScheduler$SchedulerTask.run(BoundedElasticThreadPerTaskScheduler.java:1013) ~[reactor-core-3.7.5.jar:3.7.5]
	at java.base/java.lang.VirtualThread.run(VirtualThread.java:329) ~[na:na]
Caused by: org.thymeleaf.exceptions.TemplateProcessingException: Locale "" cannot be used as it does not specify a language. (template: "modules/layout" - line 12, col 49)
	at org.thymeleaf.messageresolver.StandardMessageResolutionUtils.computeMessageResourceNamesFromBase(StandardMessageResolutionUtils.java:202) ~[thymeleaf-3.1.3.RELEASE.jar:3.1.3.RELEASE]
	at org.thymeleaf.messageresolver.StandardMessageResolutionUtils.resolveMessagesForTemplate(StandardMessageResolutionUtils.java:69) ~[thymeleaf-3.1.3.RELEASE.jar:3.1.3.RELEASE]
	at org.thymeleaf.messageresolver.StandardMessageResolver.resolveMessagesForTemplate(StandardMessageResolver.java:380) ~[thymeleaf-3.1.3.RELEASE.jar:3.1.3.RELEASE]
	at org.thymeleaf.messageresolver.StandardMessageResolver.resolveMessage(StandardMessageResolver.java:282) ~[thymeleaf-3.1.3.RELEASE.jar:3.1.3.RELEASE]
	at org.thymeleaf.messageresolver.StandardMessageResolver.resolveMessage(StandardMessageResolver.java:227) ~[thymeleaf-3.1.3.RELEASE.jar:3.1.3.RELEASE]
	at org.thymeleaf.context.AbstractEngineContext.getMessage(AbstractEngineContext.java:134) ~[thymeleaf-3.1.3.RELEASE.jar:3.1.3.RELEASE]
	at org.thymeleaf.standard.expression.MessageExpression.executeMessageExpression(MessageExpression.java:265) ~[thymeleaf-3.1.3.RELEASE.jar:3.1.3.RELEASE]
	at org.thymeleaf.standard.expression.SimpleExpression.executeSimple(SimpleExpression.java:69) ~[thymeleaf-3.1.3.RELEASE.jar:3.1.3.RELEASE]
	at org.thymeleaf.standard.expression.Expression.execute(Expression.java:109) ~[thymeleaf-3.1.3.RELEASE.jar:3.1.3.RELEASE]
	at org.thymeleaf.standard.expression.Expression.execute(Expression.java:138) ~[thymeleaf-3.1.3.RELEASE.jar:3.1.3.RELEASE]
	at org.thymeleaf.standard.processor.StandardUtextTagProcessor.doProcess(StandardUtextTagProcessor.java:87) ~[thymeleaf-3.1.3.RELEASE.jar:3.1.3.RELEASE]
	at org.thymeleaf.processor.element.AbstractAttributeTagProcessor.doProcess(AbstractAttributeTagProcessor.java:74) ~[thymeleaf-3.1.3.RELEASE.jar:3.1.3.RELEASE]
	at org.thymeleaf.processor.element.AbstractElementTagProcessor.process(AbstractElementTagProcessor.java:95) ~[thymeleaf-3.1.3.RELEASE.jar:3.1.3.RELEASE]
	at org.thymeleaf.util.ProcessorConfigurationUtils$ElementTagProcessorWrapper.process(ProcessorConfigurationUtils.java:633) ~[thymeleaf-3.1.3.RELEASE.jar:3.1.3.RELEASE]
	at org.thymeleaf.engine.ProcessorTemplateHandler.handleOpenElement(ProcessorTemplateHandler.java:1314) ~[thymeleaf-3.1.3.RELEASE.jar:3.1.3.RELEASE]
	at org.thymeleaf.engine.OpenElementTag.beHandled(OpenElementTag.java:205) ~[thymeleaf-3.1.3.RELEASE.jar:3.1.3.RELEASE]
	at org.thymeleaf.engine.TemplateModel.process(TemplateModel.java:136) ~[thymeleaf-3.1.3.RELEASE.jar:3.1.3.RELEASE]
	at org.thymeleaf.engine.TemplateManager.process(TemplateManager.java:519) ~[thymeleaf-3.1.3.RELEASE.jar:3.1.3.RELEASE]
	at org.thymeleaf.util.LazyProcessingCharSequence.writeUnresolved(LazyProcessingCharSequence.java:85) ~[thymeleaf-3.1.3.RELEASE.jar:3.1.3.RELEASE]
	at org.thymeleaf.util.AbstractLazyCharSequence.write(AbstractLazyCharSequence.java:103) ~[thymeleaf-3.1.3.RELEASE.jar:3.1.3.RELEASE]
	at org.thymeleaf.engine.AbstractTextualTemplateEvent.writeContent(AbstractTextualTemplateEvent.java:224) ~[thymeleaf-3.1.3.RELEASE.jar:3.1.3.RELEASE]
	at org.thymeleaf.engine.Text.write(Text.java:78) ~[thymeleaf-3.1.3.RELEASE.jar:3.1.3.RELEASE]
	at org.thymeleaf.engine.OutputTemplateHandler.handleText(OutputTemplateHandler.java:71) ~[thymeleaf-3.1.3.RELEASE.jar:3.1.3.RELEASE]
	... 29 common frames omitted
```

#### Does this PR introduce a user-facing change?

```release-note
修复因 Locale 解析错误导致无法访问页面的问题
```
2025-05-22 03:14:00 +00:00
John Niang 79a4386c82
Make uploads resources protected (#7456)
#### What type of PR is this?

/kind improvement
/area core
/milestone 2.21.x

#### What this PR does / why we need it:

This PR removes `/uploads/**` from static resources to make it protected by Halo security.

#### Does this PR introduce a user-facing change?

```release-note
None
```
2025-05-22 03:03:59 +00:00
John Niang e9011eb3ec
Add support for configuring external URL online 2025-05-22 00:00:55 +08:00
Ryan Wang b309bc532b
refactor: improve entity component layout for better device responsiveness (#7383)
* refactor: improve entity component layout for better device responsiveness

Signed-off-by: Ryan Wang <i@ryanc.cc>

* Resolve CSS style conflicts

Signed-off-by: Ryan Wang <i@ryanc.cc>

* Update missing translaions

Signed-off-by: Ryan Wang <i@ryanc.cc>

---------

Signed-off-by: Ryan Wang <i@ryanc.cc>
2025-05-21 11:29:41 +08:00
John Niang d09f694336
Merge pull request #7455 from JohnNiang/chore/upgrade-json-assert
Upgrade JSONAssert to 2.0-rc1
2025-05-21 11:26:23 +08:00
John Niang c73f0ddeee
Upgrade JSONAssert to 2.0-rc1 2025-05-21 10:37:04 +08:00
John Niang f18cf18862
Merge pull request #7449 from JohnNiang/refactor/libs-versions
Refactor dependencies and plugins with version catelog
2025-05-20 10:45:35 +08:00
Ryan Wang d382b45236
Merge branch 'main' into refactor/libs-versions 2025-05-20 10:07:25 +08:00
John Niang ba99692174
Upgrade to Gradle 8.14 (#7450) 2025-05-20 10:06:23 +08:00