prepareReplacement function

String prepareReplacement(
  1. PageNode node,
  2. String replacement
)

Prepare replacement string by substituting page context variables

Replaces page context variables in the replacement string with actual values from the page URL. Useful for converting relative URLs to absolute URLs.

Parameters

  • node - PageNode containing page data and URL
  • replacement - Replacement string potentially containing context variables

Supported Variables

  • ${pageUrl} - Full page URL (e.g., https://example.com/page?q=1)
  • ${rootUrl} - Origin only (e.g., https://example.com)

Returns

Replacement string with context variables substituted. If URL parsing fails, variables are left unchanged.

Examples

// Assuming page URL is 'https://example.com/page'

prepareReplacement(node, 'Visit ${pageUrl}');
// Returns: 'Visit https://example.com/page'

prepareReplacement(node, '${rootUrl}/api/data');
// Returns: 'https://example.com/api/data'

prepareReplacement(node, 'No variables here');
// Returns: 'No variables here'

Use Cases

Convert Relative to Absolute URLs

applyRegexpTransform(node, '/images/photo.jpg', r'/^//${rootUrl}/');
// Returns: 'https://example.com/images/photo.jpg'

Add Page Reference

applyRegexpTransform(node, 'Link', r'/Link/Link (from ${pageUrl})/');
// Returns: 'Link (from https://example.com/page)'

Implementation

String prepareReplacement(PageNode node, String replacement) {
  var result = replacement;

  try {
    final pageUri = Uri.parse(node.pageData.url);
    // Replace pageUrl with full URL
    result = result.replaceAll(r'${pageUrl}', node.pageData.url);
    // Replace rootUrl with origin (scheme + authority)
    result = result.replaceAll(r'${rootUrl}', pageUri.origin);
  } catch (e) {
    // If URL parsing fails, leave replacement unchanged
  }

  return result;
}