Skip to content

Commit

Permalink
Preview font inscriptions (ordinals#2692)
Browse files Browse the repository at this point in the history
  • Loading branch information
elocremarc authored Nov 19, 2023
1 parent d4f6d8b commit ef41aa7
Show file tree
Hide file tree
Showing 6 changed files with 79 additions and 9 deletions.
9 changes: 5 additions & 4 deletions src/media.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ use {
pub(crate) enum Media {
Audio,
Code,
Font,
Iframe,
Image,
Markdown,
Expand All @@ -34,10 +35,10 @@ impl Media {
("audio/flac", BROTLI_MODE_GENERIC, Media::Audio, &["flac"]),
("audio/mpeg", BROTLI_MODE_GENERIC, Media::Audio, &["mp3"]),
("audio/wav", BROTLI_MODE_GENERIC, Media::Audio, &["wav"]),
("font/otf", BROTLI_MODE_GENERIC, Media::Unknown, &["otf"]),
("font/ttf", BROTLI_MODE_GENERIC, Media::Unknown, &["ttf"]),
("font/woff", BROTLI_MODE_GENERIC, Media::Unknown, &["woff"]),
("font/woff2", BROTLI_MODE_FONT, Media::Unknown, &["woff2"]),
("font/otf", BROTLI_MODE_GENERIC, Media::Font, &["otf"]),
("font/ttf", BROTLI_MODE_GENERIC, Media::Font, &["ttf"]),
("font/woff", BROTLI_MODE_GENERIC, Media::Font, &["woff"]),
("font/woff2", BROTLI_MODE_FONT, Media::Font, &["woff2"]),
("image/apng", BROTLI_MODE_GENERIC, Media::Image, &["apng"]),
("image/avif", BROTLI_MODE_GENERIC, Media::Image, &[]),
("image/gif", BROTLI_MODE_GENERIC, Media::Image, &["gif"]),
Expand Down
35 changes: 32 additions & 3 deletions src/subcommand/server.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,9 @@ use {
BlockHtml, BlockJson, BlocksHtml, ChildrenHtml, ClockSvg, CollectionsHtml, HomeHtml,
InputHtml, InscriptionHtml, InscriptionJson, InscriptionsBlockHtml, InscriptionsHtml,
InscriptionsJson, OutputHtml, OutputJson, PageContent, PageHtml, PreviewAudioHtml,
PreviewCodeHtml, PreviewImageHtml, PreviewMarkdownHtml, PreviewModelHtml, PreviewPdfHtml,
PreviewTextHtml, PreviewUnknownHtml, PreviewVideoHtml, RangeHtml, RareTxt, RuneHtml,
RunesHtml, SatHtml, SatJson, TransactionHtml,
PreviewCodeHtml, PreviewFontHtml, PreviewImageHtml, PreviewMarkdownHtml, PreviewModelHtml,
PreviewPdfHtml, PreviewTextHtml, PreviewUnknownHtml, PreviewVideoHtml, RangeHtml, RareTxt,
RuneHtml, RunesHtml, SatHtml, SatJson, TransactionHtml,
},
},
axum::{
Expand Down Expand Up @@ -1076,6 +1076,15 @@ impl Server {
)
.into_response(),
),
Media::Font => Ok(
(
[(
header::CONTENT_SECURITY_POLICY,
"script-src-elem 'self'; style-src 'self' 'unsafe-inline';",
)],
PreviewFontHtml { inscription_id }
).into_response(),
),
Media::Iframe => Ok(
Self::content_response(inscription, accept_encoding)?
.ok_or_not_found(|| format!("inscription {inscription_id} content"))?
Expand Down Expand Up @@ -3229,6 +3238,26 @@ mod tests {
);
}

#[test]
fn font_preview() {
let server = TestServer::new_with_regtest();
server.mine_blocks(1);

let txid = server.bitcoin_rpc_server.broadcast_tx(TransactionTemplate {
inputs: &[(1, 0, 0, inscription("font/ttf", "hello").to_witness())],
..Default::default()
});
let inscription_id = InscriptionId { txid, index: 0 };

server.mine_blocks(1);

server.assert_response_regex(
format!("/preview/{inscription_id}"),
StatusCode::OK,
format!(r".*src: url\(/content/{inscription_id}\).*"),
);
}

#[test]
fn pdf_preview() {
let server = TestServer::new_with_regtest();
Expand Down
4 changes: 2 additions & 2 deletions src/templates.rs
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,8 @@ pub(crate) use {
output::{OutputHtml, OutputJson},
page_config::PageConfig,
preview::{
PreviewAudioHtml, PreviewCodeHtml, PreviewImageHtml, PreviewMarkdownHtml, PreviewModelHtml,
PreviewPdfHtml, PreviewTextHtml, PreviewUnknownHtml, PreviewVideoHtml,
PreviewAudioHtml, PreviewCodeHtml, PreviewFontHtml, PreviewImageHtml, PreviewMarkdownHtml,
PreviewModelHtml, PreviewPdfHtml, PreviewTextHtml, PreviewUnknownHtml, PreviewVideoHtml,
},
range::RangeHtml,
rare::RareTxt,
Expand Down
5 changes: 5 additions & 0 deletions src/templates/preview.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,11 @@ pub(crate) struct PreviewCodeHtml {
pub(crate) inscription_id: InscriptionId,
}

#[derive(boilerplate::Boilerplate)]
pub(crate) struct PreviewFontHtml {
pub(crate) inscription_id: InscriptionId,
}

#[derive(boilerplate::Boilerplate)]
pub(crate) struct PreviewImageHtml {
pub(crate) inscription_id: InscriptionId,
Expand Down
19 changes: 19 additions & 0 deletions static/preview-font.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
html, body, textarea {
background-color: #292c2f;
height: 100%;
}

body {
margin: 0;
}

textarea {
border: 0;
box-sizing: border-box;
color: #a1adb8;
font-family: 'Inscription';
font-size: 24px;
padding: 5vmin;
resize: none;
width: 100%;
}
16 changes: 16 additions & 0 deletions templates/preview-font.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
<!doctype html>
<html lang=en >
<head>
<meta charset=utf-8>
<style>
@font-face {
font-family: 'Inscription';
src: url(/content/{{self.inscription_id}});
}
</style>
<link rel=stylesheet href=/static/preview-font.css>
</head>
<body>
<textarea>Sphinx of black quartz, judge my vow.</textarea>
</body>
</html>

0 comments on commit ef41aa7

Please sign in to comment.