Skip to content

Commit b0b35a2

Browse files
committed
add mechanism for injecting content into the html head
1 parent 4b598ce commit b0b35a2

27 files changed

+85
-121
lines changed

examples/ddoc/main.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -263,6 +263,7 @@ fn generate_docs_directory(
263263
None, None, None,
264264
),
265265
markdown_stripper: Rc::new(deno_doc::html::comrak::strip),
266+
head_inject: None,
266267
};
267268
let html = deno_doc::html::generate(options, doc_nodes_by_url)?;
268269

src/html/jsdoc.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -487,6 +487,7 @@ mod test {
487487
None, None, None,
488488
),
489489
markdown_stripper: Rc::new(crate::html::comrak::strip),
490+
head_inject: None,
490491
},
491492
Default::default(),
492493
Default::default(),
@@ -647,6 +648,7 @@ mod test {
647648
None, None, None,
648649
),
649650
markdown_stripper: Rc::new(crate::html::comrak::strip),
651+
head_inject: None,
650652
},
651653
Default::default(),
652654
Default::default(),

src/html/mod.rs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -228,6 +228,8 @@ lazy_static! {
228228
pub static ref HANDLEBARS: Handlebars<'static> = setup_hbs().unwrap();
229229
}
230230

231+
pub type HeadInject = Rc<dyn Fn(&str) -> String>;
232+
231233
#[derive(Clone)]
232234
pub struct GenerateOptions {
233235
/// The name that is shown is the top-left corner, eg. "deno_std".
@@ -245,6 +247,7 @@ pub struct GenerateOptions {
245247
pub default_symbol_map: Option<IndexMap<String, String>>,
246248
pub markdown_renderer: jsdoc::MarkdownRenderer,
247249
pub markdown_stripper: jsdoc::MarkdownStripper,
250+
pub head_inject: Option<HeadInject>,
248251
}
249252

250253
#[non_exhaustive]
@@ -263,6 +266,7 @@ pub struct GenerateCtx {
263266
pub default_symbol_map: Option<IndexMap<String, String>>,
264267
pub markdown_renderer: jsdoc::MarkdownRenderer,
265268
pub markdown_stripper: jsdoc::MarkdownStripper,
269+
pub head_inject: Option<HeadInject>,
266270
}
267271

268272
impl GenerateCtx {
@@ -368,6 +372,7 @@ impl GenerateCtx {
368372
default_symbol_map: options.default_symbol_map,
369373
markdown_renderer: options.markdown_renderer,
370374
markdown_stripper: options.markdown_stripper,
375+
head_inject: options.head_inject,
371376
})
372377
}
373378

@@ -927,11 +932,10 @@ pub fn generate(
927932
title_parts.pop();
928933

929934
let html_head_ctx = pages::HtmlHeadCtx::new(
935+
&ctx,
930936
&root,
931937
Some(&title_parts.join(" - ")),
932-
ctx.package_name.as_ref(),
933938
Some(short_path),
934-
ctx.disable_search,
935939
);
936940

937941
let file_name =

src/html/pages.rs

Lines changed: 10 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -39,24 +39,26 @@ pub struct HtmlHeadCtx {
3939
script_js: String,
4040
fuse_js: String,
4141
url_search: String,
42+
head_inject: Option<String>,
4243
disable_search: bool,
4344
}
4445

4546
impl HtmlHeadCtx {
4647
pub const TEMPLATE: &'static str = "pages/html_head";
4748

4849
pub fn new(
50+
ctx: &GenerateCtx,
4951
root: &str,
5052
page: Option<&str>,
51-
package_name: Option<&String>,
5253
current_file: Option<&ShortPath>,
53-
disable_search: bool,
5454
) -> Self {
5555
Self {
5656
title: format!(
5757
"{}{}documentation",
5858
page.map(|page| format!("{page} - ")).unwrap_or_default(),
59-
package_name
59+
ctx
60+
.package_name
61+
.as_ref()
6062
.map(|package_name| format!("{package_name} "))
6163
.unwrap_or_default()
6264
),
@@ -71,7 +73,8 @@ impl HtmlHeadCtx {
7173
script_js: format!("{root}{SCRIPT_FILENAME}"),
7274
fuse_js: format!("{root}{FUSE_FILENAME}"),
7375
url_search: format!("{root}{SEARCH_FILENAME}"),
74-
disable_search,
76+
head_inject: ctx.head_inject.clone().map(|head_inject| head_inject(root)),
77+
disable_search: ctx.disable_search,
7578
}
7679
}
7780
}
@@ -232,6 +235,7 @@ impl IndexCtx {
232235
ctx.resolve_path(render_ctx.get_current_resolve(), UrlResolveKind::Root);
233236

234237
let html_head_ctx = HtmlHeadCtx::new(
238+
ctx,
235239
&root,
236240
short_path.as_ref().and_then(|short_path| {
237241
if short_path.is_main {
@@ -240,9 +244,7 @@ impl IndexCtx {
240244
Some(short_path.display_name())
241245
}
242246
}),
243-
ctx.package_name.as_ref(),
244247
None,
245-
ctx.disable_search,
246248
);
247249

248250
let overview = match ctx.file_mode {
@@ -399,13 +401,7 @@ impl IndexCtx {
399401
let root =
400402
ctx.resolve_path(UrlResolveKind::Category(name), UrlResolveKind::Root);
401403

402-
let html_head_ctx = HtmlHeadCtx::new(
403-
&root,
404-
Some(name),
405-
ctx.package_name.as_ref(),
406-
None,
407-
ctx.disable_search,
408-
);
404+
let html_head_ctx = HtmlHeadCtx::new(ctx, &root, Some(name), None);
409405

410406
let breadcrumbs_ctx = render_ctx.get_breadcrumbs();
411407

@@ -463,13 +459,7 @@ impl AllSymbolsCtx {
463459
}),
464460
);
465461

466-
let html_head_ctx = HtmlHeadCtx::new(
467-
"./",
468-
Some("All Symbols"),
469-
ctx.package_name.as_ref(),
470-
None,
471-
ctx.disable_search,
472-
);
462+
let html_head_ctx = HtmlHeadCtx::new(ctx, "./", Some("All Symbols"), None);
473463

474464
let categories_panel = CategoriesPanelCtx::new(&render_ctx, None);
475465

src/html/render_context.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -601,6 +601,7 @@ mod test {
601601
None, None, None,
602602
),
603603
markdown_stripper: Rc::new(crate::html::comrak::strip),
604+
head_inject: None,
604605
},
605606
None,
606607
Default::default(),

src/html/templates/pages/html_head.hbs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,14 @@
88
<link rel="stylesheet" href="{{stylesheet_url}}">
99
<link rel="stylesheet" href="{{page_stylesheet_url}}">
1010
<link id="ddocResetStylesheet" rel="stylesheet" href="{{reset_stylesheet_url}}">
11+
{{{~head_inject~}}}
1112

12-
{{#if (not disable_search)}}
13+
{{~#if (not disable_search)~}}
1314
<script src="{{url_search_index}}" defer></script>
1415
<script src="{{script_js}}" defer></script>
1516
<script src="{{fuse_js}}" defer></script>
1617
<script src="{{url_search}}" defer></script>
17-
{{/if}}
18+
{{~/if~}}
1819
</head>
1920
<body>
2021
<div class="ddoc">

tests/html_test.rs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,7 @@ async fn html_doc_files() {
175175
default_symbol_map: None,
176176
markdown_renderer: comrak::create_renderer(None, None, None),
177177
markdown_stripper: Rc::new(comrak::strip),
178+
head_inject: None,
178179
},
179180
get_files("single").await,
180181
)
@@ -249,6 +250,7 @@ async fn html_doc_files_rewrite() {
249250
default_symbol_map: None,
250251
markdown_renderer: comrak::create_renderer(None, None, None),
251252
markdown_stripper: Rc::new(comrak::strip),
253+
head_inject: None,
252254
},
253255
get_files("multiple").await,
254256
)
@@ -358,6 +360,7 @@ async fn symbol_group() {
358360
default_symbol_map: None,
359361
markdown_renderer: comrak::create_renderer(None, None, None),
360362
markdown_stripper: Rc::new(comrak::strip),
363+
head_inject: None,
361364
},
362365
None,
363366
Default::default(),
@@ -389,11 +392,10 @@ async fn symbol_group() {
389392
);
390393

391394
let html_head_ctx = pages::HtmlHeadCtx::new(
395+
&ctx,
392396
&root,
393397
Some(&symbol_group_ctx.name),
394-
ctx.package_name.as_ref(),
395398
Some(short_path),
396-
false,
397399
);
398400

399401
Some(pages::SymbolPageCtx {
@@ -449,6 +451,7 @@ async fn symbol_search() {
449451
default_symbol_map: None,
450452
markdown_renderer: comrak::create_renderer(None, None, None),
451453
markdown_stripper: Rc::new(comrak::strip),
454+
head_inject: None,
452455
},
453456
None,
454457
Default::default(),
@@ -496,6 +499,7 @@ async fn module_doc() {
496499
default_symbol_map: None,
497500
markdown_renderer: comrak::create_renderer(None, None, None),
498501
markdown_stripper: Rc::new(comrak::strip),
502+
head_inject: None,
499503
},
500504
None,
501505
FileMode::Single,

tests/snapshots/html_test__html_doc_files-2.snap

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,10 @@ expression: "files.get(\"./index.html\").unwrap()"
1111
<meta name="doc-current-file" content="">
1212
<link rel="stylesheet" href="styles.css">
1313
<link rel="stylesheet" href="page.css">
14-
<link id="ddocResetStylesheet" rel="stylesheet" href="reset.css">
15-
16-
<script src="search_index.js" defer></script>
14+
<link id="ddocResetStylesheet" rel="stylesheet" href="reset.css"><script src="search_index.js" defer></script>
1715
<script src="script.js" defer></script>
1816
<script src="fuse.js" defer></script>
19-
<script src="search.js" defer></script>
20-
</head>
17+
<script src="search.js" defer></script></head>
2118
<body>
2219
<div class="ddoc">
2320
<div><nav class="top-0 sticky bg-white z-50 py-3 h-14" id="topnav">

tests/snapshots/html_test__html_doc_files-3.snap

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,10 @@ expression: "files.get(\"./~/Bar.html\").unwrap()"
1111
<meta name="doc-current-file" content=".">
1212
<link rel="stylesheet" href="..&#x2F;styles.css">
1313
<link rel="stylesheet" href="..&#x2F;page.css">
14-
<link id="ddocResetStylesheet" rel="stylesheet" href="..&#x2F;reset.css">
15-
16-
<script src="..&#x2F;search_index.js" defer></script>
14+
<link id="ddocResetStylesheet" rel="stylesheet" href="..&#x2F;reset.css"><script src="..&#x2F;search_index.js" defer></script>
1715
<script src="..&#x2F;script.js" defer></script>
1816
<script src="..&#x2F;fuse.js" defer></script>
19-
<script src="..&#x2F;search.js" defer></script>
20-
</head>
17+
<script src="..&#x2F;search.js" defer></script></head>
2118
<body>
2219
<div class="ddoc">
2320
<div><nav class="top-0 sticky bg-white z-50 py-3 h-14" id="topnav">

tests/snapshots/html_test__html_doc_files-5.snap

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,10 @@ expression: "files.get(\"./~/Foo.html\").unwrap()"
1111
<meta name="doc-current-file" content=".">
1212
<link rel="stylesheet" href="..&#x2F;styles.css">
1313
<link rel="stylesheet" href="..&#x2F;page.css">
14-
<link id="ddocResetStylesheet" rel="stylesheet" href="..&#x2F;reset.css">
15-
16-
<script src="..&#x2F;search_index.js" defer></script>
14+
<link id="ddocResetStylesheet" rel="stylesheet" href="..&#x2F;reset.css"><script src="..&#x2F;search_index.js" defer></script>
1715
<script src="..&#x2F;script.js" defer></script>
1816
<script src="..&#x2F;fuse.js" defer></script>
19-
<script src="..&#x2F;search.js" defer></script>
20-
</head>
17+
<script src="..&#x2F;search.js" defer></script></head>
2118
<body>
2219
<div class="ddoc">
2320
<div><nav class="top-0 sticky bg-white z-50 py-3 h-14" id="topnav">

0 commit comments

Comments
 (0)