inject static method

void inject({
  1. required String title,
  2. String? description,
  3. List<NoscriptLink>? links,
  4. String? content,
  5. List<NoscriptHeading>? headings,
  6. List<String>? paragraphs,
})

Inject noscript fallback content

Implementation

static void inject({
  required String title,
  String? description,
  List<NoscriptLink>? links,
  String? content,
  List<NoscriptHeading>? headings,
  List<String>? paragraphs,
}) {
  if (!Webify.isInitialized) return;

  final buffer = StringBuffer();

  // Main heading
  buffer.writeln('<h1>${_escape(title)}</h1>');

  // Description
  if (description != null) {
    buffer.writeln('<p>${_escape(description)}</p>');
  }

  // Additional headings
  if (headings != null) {
    for (final heading in headings) {
      final tag = 'h${heading.level.clamp(1, 6)}';
      buffer.writeln('<$tag>${_escape(heading.text)}</$tag>');
    }
  }

  // Paragraphs
  if (paragraphs != null) {
    for (final p in paragraphs) {
      buffer.writeln('<p>${_escape(p)}</p>');
    }
  }

  // Navigation links
  if (links != null && links.isNotEmpty) {
    buffer.writeln('<nav>');
    buffer.writeln('  <ul>');
    for (final link in links) {
      final ariaLabel = link.ariaLabel != null
          ? ' aria-label="${_escape(link.ariaLabel!)}"'
          : '';
      final rel = link.rel != null ? ' rel="${_escape(link.rel!)}"' : '';
      buffer.writeln(
        '    <li><a href="${_escape(link.href)}"$ariaLabel$rel>'
        '${_escape(link.text)}</a></li>',
      );
    }
    buffer.writeln('  </ul>');
    buffer.writeln('</nav>');
  }

  // Raw content
  if (content != null) {
    buffer.writeln(content);
  }

  Webify.instance.platform.injectNoscriptContent(buffer.toString());
}