Unified · Split
| @@ -4,6 +4,14 @@ module Docs · 3 unmodified lines | |||
| 4 | def call | 4 | def call |
| 5 | # Remove unnecessary elements | 5 | # Remove unnecessary elements |
| 6 | css('head, script, style').remove | 6 | css('head, script, style').remove |
| 7 | # Wrap code blocks with pre tags and add syntax highlighting | ||
| 8 | css('code').each do |node| | ||
| 9 | unless node.parent.name == 'pre' | ||
| 10 | pre = node.wrap('<pre>') | ||
| 11 | pre['data-language'] = 'javascript' | ||
| 12 | pre['class'] = 'language-javascript' | ||
| 13 | end | ||
| 14 | end | ||
| 7 | 15 | ||
| 8 | # Handle source links | 16 | # Handle source links |
| 9 | css('h2').each do |node| | 17 | css('h2').each do |node| |
| @@ -202,29 +210,6 @@ module Docs · 192 unmodified lines | |||
| 202 | end | 210 | end |
| 203 | end | 211 | end |
| 204 | 212 | ||
| 205 | # Clean up code blocks | ||
| 206 | css('pre').each do |node| | ||
| 207 | wrapper = doc.document.create_element('div') | ||
| 208 | wrapper['class'] = 'highlight' | ||
| 209 | node.replace(wrapper) | ||
| 210 | |||
| 211 | div = doc.document.create_element('div') | ||
| 212 | div['class'] = 'highlight-javascript notranslate' | ||
| 213 | wrapper.add_child(div) | ||
| 214 | |||
| 215 | pre = doc.document.create_element('pre') | ||
| 216 | pre['class'] = '' | ||
| 217 | div.add_child(pre) | ||
| 218 | |||
| 219 | # Format the code content | ||
| 220 | code = node.content.strip | ||
| 221 | |||
| 222 | # Add syntax highlighting spans | ||
| 223 | highlighted_code = highlight_javascript(code) | ||
| 224 | |||
| 225 | pre.inner_html = highlighted_code | ||
| 226 | end | ||
| 227 | |||
| 228 | # Add proper heading IDs and classes | 213 | # Add proper heading IDs and classes |
| 229 | css('h1, h2, h3, h4').each do |node| | 214 | css('h1, h2, h3, h4').each do |node| |
| 230 | node['id'] ||= node.content.strip.downcase.gsub(/[^\w]+/, '-') | 215 | node['id'] ||= node.content.strip.downcase.gsub(/[^\w]+/, '-') |
| @@ -232,9 +217,6 @@ module Docs · 1 unmodified line | |||
| 232 | node['class'] = "#{existing_class} section-header" | 217 | node['class'] = "#{existing_class} section-header" |
| 233 | end | 218 | end |
| 234 | 219 | ||
| 235 | # Remove interactive examples | ||
| 236 | css('.threejs_example_container').remove | ||
| 237 | |||
| 238 | # Add note styling | 220 | # Add note styling |
| 239 | css('p').each do |node| | 221 | css('p').each do |node| |
| 240 | if node.content.start_with?('Note:') | 222 | if node.content.start_with?('Note:') |
| @@ -254,35 +236,8 @@ module Docs · 13 unmodified lines | |||
| 254 | node.replace(wrapper) | 236 | node.replace(wrapper) |
| 255 | end | 237 | end |
| 256 | end | 238 | end |
| 257 | |||
| 258 | # Remove the navigation arrows and links | ||
| 259 | css('.nav').remove if at_css('.nav') | ||
| 260 | # If the arrows are in a different container, adjust the selector accordingly | ||
| 261 | |||
| 262 | doc | 239 | doc |
| 263 | end | 240 | end |
| 264 | |||
| 265 | private | ||
| 266 | |||
| 267 | def highlight_javascript(code) | ||
| 268 | code = code.gsub(/\b(function|return|var|let|const|if|else|for|while|do|switch|case|break|continue|new|try|catch|throw|this|typeof|instanceof|in|of|class|extends|super|import|export|default|null|undefined|true|false)\b/, '<span class="k">\1</span>') # keywords | ||
| 269 | code = code.gsub(/\b(\d+(\.\d+)?)\b/, '<span class="mi">\1</span>') # numbers | ||
| 270 | code = code.gsub(/'([^']*)'/, '<span class="s1">\'\1\'</span>') # single quotes | ||
| 271 | code = code.gsub(/"([^"]*)"/, '<span class="s2">"\1"</span>') # double quotes | ||
| 272 | code = code.gsub(/`([^`]*)`/, '<span class="s2">`\1`</span>') # template literals | ||
| 273 | code = code.gsub(/\/\/[^\n]*/, '<span class="c1">\0</span>') # single line comments | ||
| 274 | code = code.gsub(/\b(console|document|window|Array|Object|String|Number|Boolean|Function|Symbol|Map|Set|Promise|async|await)\b/, '<span class="nb">\1</span>') # built-ins | ||
| 275 | code = code.gsub(/([a-zA-Z_$][a-zA-Z0-9_$]*)\s*\(/, '<span class="nx">\1</span>(') # function calls | ||
| 276 | code = code.gsub(/\b(addEventListener|querySelector|getElementById|setTimeout|setInterval)\b/, '<span class="nx">\1</span>') # common methods | ||
| 277 | |||
| 278 | # Add line numbers | ||
| 279 | lines = code.split("\n") | ||
| 280 | numbered_lines = lines.map.with_index(1) do |line, i| | ||
| 281 | "<span class=\"lineno\">#{i}</span>#{line}" | ||
| 282 | end | ||
| 283 | |||
| 284 | numbered_lines.join("\n") | ||
| 285 | end | ||
| 286 | end | 241 | end |
| 287 | end | 242 | end |
| 288 | end | 243 | end |