Files
halo-dark-mode-plugin/.agents/skills/halo-plugin-dev/references/theme-content-handler.md
T
Serendipity edbf78f236 feat: 初始化 Halo 暗色模式插件
- Halo Plugin 后端(Java/Gradle),含 DarkModePlugin 主类和测试
- Vue 3 + TypeScript 前端 UI,包含主题切换组件和设置页面
- 暗色模式 CSS 变量和覆盖样式(布局/编辑器/表单/滚动条等)
- 设计文档和调查文档
- Halo 插件/主题开发 Agent Skills

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-06 21:03:00 +08:00

2.0 KiB

Content Handlers (Post / SinglePage)

Intercept and modify rendered post/page HTML before it reaches the theme.

Source: ReactivePostContentHandler | ReactiveSinglePageContentHandler

ReactivePostContentHandler

@Component
public class MyPostContentHandler implements ReactivePostContentHandler {

    @Override
    public Mono<PostContentContext> handle(PostContentContext postContent) {
        var content = postContent.getContent();

        // Modify HTML content
        var modified = content.replace("<h2>", "<h2 id=\"heading-\">");

        return Mono.just(postContent.toBuilder()
            .content(modified)
            .build());
    }
}

ReactiveSinglePageContentHandler

@Component
public class MyPageContentHandler implements ReactiveSinglePageContentHandler {

    @Override
    public Mono<SinglePageContentContext> handle(SinglePageContentContext pageContent) {
        // Same pattern as PostContentHandler
        return Mono.just(pageContent);
    }
}

Context Fields

Field Type Description
post / singlePage Post / SinglePage The extension object
content String Rendered HTML content (modifiable)
raw String Raw source content
rawType String Content format (e.g., markdown)

Common Use Cases

  • Inject diagram rendering (Mermaid, text-diagram)
  • Add anchor links to headings
  • Wrap code blocks with copy buttons
  • Process custom shortcodes
  • Add lazy loading to images
  • Watermark injection