Pre-compiled CDN assets for highlight.js syntax highlighting with language autodetection and theme support.
—
Pending
Does it follow best practices?
Impact
Pending
No eval scenarios have been run
Pending
The risk profile of this skill
Configuration options and initialization methods for customizing highlight.js behavior, DOM scanning, and security settings.
Sets global configuration options that affect highlighting behavior.
/**
* Configure global highlight.js options
* @param options - Partial configuration object with options to set
*/
function configure(options: Partial<HLJSOptions>): void;
interface HLJSOptions {
/** Regex pattern for elements to skip during highlightAll() */
noHighlightRe: RegExp;
/** Regex pattern to detect language from CSS classes */
languageDetectRe: RegExp;
/** CSS class name prefix for highlighted elements */
classPrefix: string;
/** CSS selector for finding code elements */
cssSelector: string;
/** Array of language names to restrict auto-detection to */
languages?: string[];
/** Custom emitter constructor (advanced usage) */
__emitter: EmitterConstructor;
/** Whether to ignore unescaped HTML in code */
ignoreUnescapedHTML?: boolean;
/** Whether to throw errors on unescaped HTML */
throwUnescapedHTML?: boolean;
}Usage Examples:
import hljs from '@highlightjs/cdn-assets/es/highlight.js';
// Configure CSS class prefix
hljs.configure({
classPrefix: 'syntax-'
});
// Now generates <span class="syntax-keyword"> instead of <span class="hljs-keyword">
// Configure CSS selector for finding code blocks
hljs.configure({
cssSelector: 'pre code, .code-block, .highlight'
});
// Restrict auto-detection to specific languages
hljs.configure({
languages: ['javascript', 'python', 'java', 'cpp']
});
// Configure language detection pattern
hljs.configure({
languageDetectRe: /\blang(?:uage)?-([\w-]+)\b/i
});
// Security configurations
hljs.configure({
ignoreUnescapedHTML: false, // Default behavior
throwUnescapedHTML: true // Throw errors on unescaped HTML
});
// Skip certain elements during highlightAll()
hljs.configure({
noHighlightRe: /^no-?highlight$/i
});Initializes highlighting for code blocks found in the current DOM.
/**
* Initialize highlighting for the current page
* Equivalent to calling highlightAll() but intended for manual initialization
*/
function initHighlighting(): void;Usage Examples:
// Manual initialization after DOM is ready
document.addEventListener('DOMContentLoaded', () => {
hljs.initHighlighting();
});
// Initialize after dynamically adding content
function addCodeBlock(code, language) {
const pre = document.createElement('pre');
const codeEl = document.createElement('code');
codeEl.className = `language-${language}`;
codeEl.textContent = code;
pre.appendChild(codeEl);
document.body.appendChild(pre);
// Re-initialize highlighting
hljs.initHighlighting();
}
// Configure before initializing
hljs.configure({ classPrefix: 'code-' });
hljs.initHighlighting();Automatically initializes highlighting when the DOM is ready.
/**
* Initialize highlighting automatically when DOM is loaded
* Uses DOMContentLoaded event to trigger highlighting
*/
function initHighlightingOnLoad(): void;Usage Examples:
// Set up automatic highlighting
hljs.initHighlightingOnLoad();
// This is equivalent to:
document.addEventListener('DOMContentLoaded', () => {
hljs.highlightAll();
});
// Configure before auto-initialization
hljs.configure({
cssSelector: 'pre code, .code',
classPrefix: 'hl-'
});
hljs.initHighlightingOnLoad();// Use custom CSS class prefix
hljs.configure({ classPrefix: 'syntax-' });
// CSS to style with custom prefix
/*
.syntax-keyword { color: blue; }
.syntax-string { color: green; }
.syntax-number { color: orange; }
*/// Only allow specific languages for auto-detection
hljs.configure({
languages: ['javascript', 'typescript', 'python', 'json']
});
// This affects highlightAuto() and highlightAll()
const result = hljs.highlightAuto('print("hello")');
// Will only consider the specified languages// Strict HTML handling
hljs.configure({
ignoreUnescapedHTML: false,
throwUnescapedHTML: true
});
try {
// This might throw if code contains unescaped HTML
const result = hljs.highlight('<script>alert("xss")</script>', {
language: 'html'
});
} catch (error) {
console.error('Security error:', error);
}// Target different elements for highlighting
hljs.configure({
cssSelector: '.code-sample, pre code, .highlight code'
});
// HTML that will be highlighted:
/*
<div class="code-sample">console.log("hello");</div>
<pre><code>print("world")</code></pre>
<div class="highlight"><code>function test() {}</code></div>
*/
hljs.highlightAll();// Configure elements to skip
hljs.configure({
noHighlightRe: /^(no-highlight|nohighlight|plain)$/i
});
// HTML that will be skipped:
/*
<pre><code class="no-highlight">
This will not be highlighted
</code></pre>
<pre><code class="nohighlight">
This will also be skipped
</code></pre>
<pre><code class="javascript">
// This will be highlighted as JavaScript
console.log("hello");
</code></pre>
*/// Custom language detection regex
hljs.configure({
languageDetectRe: /\b(lang|language|syntax)-([\w-]+)\b/i
});
// HTML that will be detected:
/*
<code class="lang-python">print("hello")</code>
<code class="language-javascript">console.log("hi")</code>
<code class="syntax-cpp">int main() {}</code>
*/// Default configuration (for reference)
const defaultConfig = {
noHighlightRe: /^no-?highlight$/i,
languageDetectRe: /\blang(?:uage)?-([\w-]+)\b/i,
classPrefix: 'hljs-',
cssSelector: 'pre code',
languages: undefined, // No restriction
ignoreUnescapedHTML: false,
throwUnescapedHTML: false
};// Theme-specific configuration
function applyDarkTheme() {
hljs.configure({
classPrefix: 'dark-'
});
// Load dark theme CSS
const link = document.createElement('link');
link.rel = 'stylesheet';
link.href = '@highlightjs/cdn-assets/styles/dark.css';
document.head.appendChild(link);
}
// Environment-specific configuration
if (process.env.NODE_ENV === 'development') {
hljs.configure({
throwUnescapedHTML: true // Strict checking in development
});
} else {
hljs.configure({
ignoreUnescapedHTML: true // Graceful handling in production
});
}
// Dynamic configuration based on user preferences
function configureForUser(userPrefs) {
hljs.configure({
classPrefix: userPrefs.codeTheme === 'dark' ? 'dark-' : 'light-',
languages: userPrefs.allowedLanguages || undefined
});
}