Skip to content

Commit 0493965

Browse files
authored
Better preview titles (#4272)
1 parent 39082e3 commit 0493965

13 files changed

+121
-21
lines changed

src/subcommand/server.rs

Lines changed: 82 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1464,6 +1464,11 @@ impl Server {
14641464
.get_inscription_by_id(inscription_id)?
14651465
.ok_or_not_found(|| format!("inscription {inscription_id}"))?;
14661466

1467+
let inscription_number = index
1468+
.get_inscription_entry(inscription_id)?
1469+
.ok_or_not_found(|| format!("inscription {inscription_id}"))?
1470+
.inscription_number;
1471+
14671472
if let Some(delegate) = inscription.delegate() {
14681473
inscription = index
14691474
.get_inscription_by_id(delegate)?
@@ -1477,6 +1482,7 @@ impl Server {
14771482
r::content_response(
14781483
&server_config,
14791484
inscription_id,
1485+
inscription_number,
14801486
accept_encoding,
14811487
sec_fetch_dest,
14821488
inscription,
@@ -1489,53 +1495,100 @@ impl Server {
14891495
let content_security_policy = server_config.preview_content_security_policy(media)?;
14901496

14911497
match media {
1492-
Media::Audio => {
1493-
Ok((content_security_policy, PreviewAudioHtml { inscription_id }).into_response())
1494-
}
1498+
Media::Audio => Ok(
1499+
(
1500+
content_security_policy,
1501+
PreviewAudioHtml {
1502+
inscription_id,
1503+
inscription_number,
1504+
},
1505+
)
1506+
.into_response(),
1507+
),
14951508
Media::Code(language) => Ok(
14961509
(
14971510
content_security_policy,
14981511
PreviewCodeHtml {
14991512
inscription_id,
15001513
language,
1514+
inscription_number,
1515+
},
1516+
)
1517+
.into_response(),
1518+
),
1519+
Media::Font => Ok(
1520+
(
1521+
content_security_policy,
1522+
PreviewFontHtml {
1523+
inscription_id,
1524+
inscription_number,
15011525
},
15021526
)
15031527
.into_response(),
15041528
),
1505-
Media::Font => {
1506-
Ok((content_security_policy, PreviewFontHtml { inscription_id }).into_response())
1507-
}
15081529
Media::Iframe => unreachable!(),
15091530
Media::Image(image_rendering) => Ok(
15101531
(
15111532
content_security_policy,
15121533
PreviewImageHtml {
15131534
image_rendering,
15141535
inscription_id,
1536+
inscription_number,
15151537
},
15161538
)
15171539
.into_response(),
15181540
),
15191541
Media::Markdown => Ok(
15201542
(
15211543
content_security_policy,
1522-
PreviewMarkdownHtml { inscription_id },
1544+
PreviewMarkdownHtml {
1545+
inscription_id,
1546+
inscription_number,
1547+
},
1548+
)
1549+
.into_response(),
1550+
),
1551+
Media::Model => Ok(
1552+
(
1553+
content_security_policy,
1554+
PreviewModelHtml {
1555+
inscription_id,
1556+
inscription_number,
1557+
},
1558+
)
1559+
.into_response(),
1560+
),
1561+
Media::Pdf => Ok(
1562+
(
1563+
content_security_policy,
1564+
PreviewPdfHtml {
1565+
inscription_id,
1566+
inscription_number,
1567+
},
1568+
)
1569+
.into_response(),
1570+
),
1571+
Media::Text => Ok(
1572+
(
1573+
content_security_policy,
1574+
PreviewTextHtml {
1575+
inscription_id,
1576+
inscription_number,
1577+
},
15231578
)
15241579
.into_response(),
15251580
),
1526-
Media::Model => {
1527-
Ok((content_security_policy, PreviewModelHtml { inscription_id }).into_response())
1528-
}
1529-
Media::Pdf => {
1530-
Ok((content_security_policy, PreviewPdfHtml { inscription_id }).into_response())
1531-
}
1532-
Media::Text => {
1533-
Ok((content_security_policy, PreviewTextHtml { inscription_id }).into_response())
1534-
}
15351581
Media::Unknown => Ok((content_security_policy, PreviewUnknownHtml).into_response()),
1536-
Media::Video => {
1537-
Ok((content_security_policy, PreviewVideoHtml { inscription_id }).into_response())
1538-
}
1582+
Media::Video => Ok(
1583+
(
1584+
content_security_policy,
1585+
PreviewVideoHtml {
1586+
inscription_id,
1587+
inscription_number,
1588+
},
1589+
)
1590+
.into_response(),
1591+
),
15391592
}
15401593
})
15411594
}
@@ -4269,6 +4322,7 @@ mod tests {
42694322
assert!(r::content_response(
42704323
&ServerConfig::default(),
42714324
inscription_id(0),
4325+
0,
42724326
AcceptEncoding::default(),
42734327
SecFetchDest::Other,
42744328
Inscription {
@@ -4286,6 +4340,7 @@ mod tests {
42864340
let response = r::content_response(
42874341
&ServerConfig::default(),
42884342
inscription_id(0),
4343+
0,
42894344
AcceptEncoding::default(),
42904345
SecFetchDest::Other,
42914346
Inscription {
@@ -4306,6 +4361,7 @@ mod tests {
43064361
let response = r::content_response(
43074362
&ServerConfig::default(),
43084363
inscription_id(0),
4364+
0,
43094365
AcceptEncoding::default(),
43104366
SecFetchDest::Other,
43114367
Inscription {
@@ -4331,6 +4387,7 @@ mod tests {
43314387
..default()
43324388
},
43334389
inscription_id(0),
4390+
0,
43344391
AcceptEncoding::default(),
43354392
SecFetchDest::Other,
43364393
Inscription {
@@ -4365,7 +4422,10 @@ mod tests {
43654422
format!("/preview/{}", inscription_id),
43664423
StatusCode::OK,
43674424
"default-src 'self'",
4368-
format!(".*<html lang=en data-inscription={}>.*", inscription_id),
4425+
format!(
4426+
".*<html lang=en data-inscription={}>.*<title>Inscription 0 Preview</title>.*",
4427+
inscription_id
4428+
),
43694429
);
43704430
}
43714431

@@ -4425,6 +4485,7 @@ mod tests {
44254485
let content_response = r::content_response(
44264486
&ServerConfig::default(),
44274487
inscription_id(0),
4488+
0,
44284489
AcceptEncoding::default(),
44294490
SecFetchDest::Other,
44304491
Inscription {
@@ -4445,6 +4506,7 @@ mod tests {
44454506
let content_response = r::content_response(
44464507
&ServerConfig::default(),
44474508
inscription_id(0),
4509+
0,
44484510
AcceptEncoding::default(),
44494511
SecFetchDest::Other,
44504512
Inscription {

src/subcommand/server/r.rs

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -229,6 +229,11 @@ pub(super) async fn content(
229229
)));
230230
};
231231

232+
let inscription_number = index
233+
.get_inscription_entry(inscription_id)?
234+
.ok_or_not_found(|| format!("inscription {inscription_id}"))?
235+
.inscription_number;
236+
232237
if let Some(delegate) = inscription.delegate() {
233238
inscription = index
234239
.get_inscription_by_id(delegate)?
@@ -239,6 +244,7 @@ pub(super) async fn content(
239244
content_response(
240245
&server_config,
241246
inscription_id,
247+
inscription_number,
242248
accept_encoding,
243249
sec_fetch_dest,
244250
inscription,
@@ -294,13 +300,19 @@ impl IntoResponse for ContentResponse {
294300
pub(crate) fn content_response(
295301
server_config: &ServerConfig,
296302
inscription_id: InscriptionId,
303+
inscription_number: i32,
297304
accept_encoding: AcceptEncoding,
298305
sec_fetch_dest: SecFetchDest,
299306
inscription: Inscription,
300307
) -> ServerResult<Option<ContentResponse>> {
301308
if sec_fetch_dest == SecFetchDest::Document {
302309
return Ok(Some(ContentResponse {
303-
body: PreviewIframeHtml { inscription_id }.to_string().into(),
310+
body: PreviewIframeHtml {
311+
inscription_id,
312+
inscription_number,
313+
}
314+
.to_string()
315+
.into(),
304316
cache_control: None,
305317
content_encoding: None,
306318
content_security_policy: HeaderValue::from_static("default-src 'self'"),
@@ -645,10 +657,16 @@ pub(super) async fn undelegated_content(
645657
.get_inscription_by_id(inscription_id)?
646658
.ok_or_not_found(|| format!("inscription {inscription_id}"))?;
647659

660+
let inscription_number = index
661+
.get_inscription_entry(inscription_id)?
662+
.ok_or_not_found(|| format!("inscription {inscription_id}"))?
663+
.inscription_number;
664+
648665
Ok(
649666
r::content_response(
650667
&server_config,
651668
inscription_id,
669+
inscription_number,
652670
accept_encoding,
653671
sec_fetch_dest,
654672
inscription,

src/templates/preview.rs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,48 +3,57 @@ use super::*;
33
#[derive(Boilerplate)]
44
pub(crate) struct PreviewAudioHtml {
55
pub(crate) inscription_id: InscriptionId,
6+
pub(crate) inscription_number: i32,
67
}
78

89
#[derive(Boilerplate)]
910
pub(crate) struct PreviewCodeHtml {
1011
pub(crate) inscription_id: InscriptionId,
1112
pub(crate) language: media::Language,
13+
pub(crate) inscription_number: i32,
1214
}
1315

1416
#[derive(Boilerplate)]
1517
pub(crate) struct PreviewFontHtml {
1618
pub(crate) inscription_id: InscriptionId,
19+
pub(crate) inscription_number: i32,
1720
}
1821

1922
#[derive(Boilerplate)]
2023
pub struct PreviewIframeHtml {
2124
pub inscription_id: InscriptionId,
25+
pub inscription_number: i32,
2226
}
2327

2428
#[derive(Boilerplate)]
2529
pub(crate) struct PreviewImageHtml {
2630
pub(crate) image_rendering: ImageRendering,
2731
pub(crate) inscription_id: InscriptionId,
32+
pub(crate) inscription_number: i32,
2833
}
2934

3035
#[derive(Boilerplate)]
3136
pub(crate) struct PreviewMarkdownHtml {
3237
pub(crate) inscription_id: InscriptionId,
38+
pub(crate) inscription_number: i32,
3339
}
3440

3541
#[derive(Boilerplate)]
3642
pub(crate) struct PreviewModelHtml {
3743
pub(crate) inscription_id: InscriptionId,
44+
pub(crate) inscription_number: i32,
3845
}
3946

4047
#[derive(Boilerplate)]
4148
pub(crate) struct PreviewPdfHtml {
4249
pub(crate) inscription_id: InscriptionId,
50+
pub(crate) inscription_number: i32,
4351
}
4452

4553
#[derive(Boilerplate)]
4654
pub(crate) struct PreviewTextHtml {
4755
pub(crate) inscription_id: InscriptionId,
56+
pub(crate) inscription_number: i32,
4857
}
4958

5059
#[derive(Boilerplate)]
@@ -53,4 +62,5 @@ pub(crate) struct PreviewUnknownHtml;
5362
#[derive(Boilerplate)]
5463
pub(crate) struct PreviewVideoHtml {
5564
pub(crate) inscription_id: InscriptionId,
65+
pub(crate) inscription_number: i32,
5666
}

templates/preview-audio.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
<html lang=en>
33
<head>
44
<meta charset=utf-8>
5+
<title>Inscription {{self.inscription_number}} Preview</title>
56
<link rel=stylesheet href=/static/preview-audio.css>
67
</head>
78
<body>

templates/preview-code.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
<html lang=en data-inscription={{self.inscription_id}} data-language={{self.language}}>
33
<head>
44
<meta charset=utf-8>
5+
<title>Inscription {{self.inscription_number}} Preview</title>
56
<link rel=stylesheet href=/static/preview-code.css>
67
<script src=/static/preview-code.js defer type=module></script>
78
</head>

templates/preview-font.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
<html lang=en >
33
<head>
44
<meta charset=utf-8>
5+
<title>Inscription {{self.inscription_number}} Preview</title>
56
<style>
67
@font-face {
78
font-family: 'Inscription';

templates/preview-iframe.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
<html lang=en>
33
<head>
44
<meta charset=utf-8>
5+
<title>Inscription {{self.inscription_number}} Preview</title>
56
<link rel=stylesheet href=/static/preview-iframe.css>
67
</head>
78
<body>

templates/preview-image.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
<head>
44
<meta charset=utf-8>
55
<meta name=format-detection content='telephone=no'>
6+
<title>Inscription {{self.inscription_number}} Preview</title>
67
<style>
78
html {
89
background-color: #131516;

templates/preview-markdown.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
<html lang=en data-inscription={{self.inscription_id}}>
33
<head>
44
<meta charset=utf-8>
5+
<title>Inscription {{self.inscription_number}} Preview</title>
56
<link rel=stylesheet href=/static/preview-markdown.css></link>
67
<script src=/static/preview-markdown.js type=module defer></script>
78
</head>

templates/preview-model.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
<html lang=en>
33
<head>
44
<meta charset=utf-8>
5+
<title>Inscription {{self.inscription_number}} Preview</title>
56
<script type=module src=https://ajax.googleapis.com/ajax/libs/model-viewer/3.1.1/model-viewer.min.js></script>
67
<style>
78
model-viewer {

templates/preview-pdf.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
<html lang=en>
33
<head>
44
<meta charset=utf-8>
5+
<title>Inscription {{self.inscription_number}} Preview</title>
56
<link rel=stylesheet href=/static/preview-pdf.css>
67
<script src=/static/preview-pdf.js defer type=module></script>
78
</head>

templates/preview-text.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
<head>
44
<meta charset=utf-8>
55
<meta name=format-detection content='telephone=no'>
6+
<title>Inscription {{self.inscription_number}} Preview</title>
67
<link href=/static/preview-text.css rel=stylesheet>
78
<script src=/static/preview-text.js type=module defer></script>
89
</head>

0 commit comments

Comments
 (0)