Files
halo-dark-mode-plugin/.agents/skills/halo-plugin-dev/references/theme-head-processor.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.1 KiB

TemplateHeadProcessor

Inject scripts, styles, or meta tags into the theme's <head> section.

Source: TemplateHeadProcessor

Usage

@Component
public class MyHeadProcessor implements TemplateHeadProcessor {

    private final ReactiveSettingFetcher settingFetcher;

    public MyHeadProcessor(ReactiveSettingFetcher settingFetcher) {
        this.settingFetcher = settingFetcher;
    }

    @Override
    public Mono<Void> process(ITemplateContext context, IModel model,
                              IElementModelStructureHandler structureHandler) {
        return settingFetcher.fetch("basic", MyConfig.class)
            .flatMap(config -> {
                if (!config.isEnabled()) {
                    return Mono.empty();
                }
                // Add script tag to <head>
                var script = createScriptTag(config.getTrackingId());
                model.add(script);
                return Mono.empty();
            })
            .then();
    }

    private IModel createScriptTag(String trackingId) {
        // Build Thymeleaf model with script element
        var modelFactory = new ModelFactory();
        var script = modelFactory.createOpenElementTag("script");
        // ... configure attributes
        var model = modelFactory.createModel();
        model.add(script);
        return model;
    }
}

Ordering

Use @Order to control execution order. Higher values execute first, allowing later processors to override earlier ones.

@Component
@Order(100)  // Higher = earlier
public class HighPriorityHeadProcessor implements TemplateHeadProcessor { ... }

@Component
@Order(200)  // Lower = later, can override above
public class LowPriorityHeadProcessor implements TemplateHeadProcessor { ... }

Common Use Cases

  • Analytics tracking (Google Analytics, Plausible)
  • Code highlighting (highlight.js, Prism, Shiki)
  • Math rendering (KaTeX, MathJax)
  • SEO meta tags (OpenGraph, Twitter Cards)
  • Custom CSS/JS injection
  • Comment widgets