Current section
Files
Jump to
Current section
Files
src/inlay@bluesky.erl
-module(inlay@bluesky).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/inlay/bluesky.gleam").
-export([detect/1, render/2]).
-file("src/inlay/bluesky.gleam", 69).
-spec detect_bluesky(gleam@uri:uri()) -> gleam@option:option(inlay@embed:embed()).
detect_bluesky(Url) ->
case gleam@uri:path_segments(erlang:element(6, Url)) of
[<<"profile"/utf8>>, Handle, <<"post"/utf8>>, Rkey] ->
{some, {bluesky_post, Handle, Rkey}};
_ ->
none
end.
-file("src/inlay/bluesky.gleam", 9).
-spec detect(gleam@uri:uri()) -> gleam@option:option(inlay@embed:embed()).
detect(Url) ->
case erlang:element(4, Url) of
{some, <<"bsky.app"/utf8>>} ->
detect_bluesky(Url);
_ ->
none
end.
-file("src/inlay/bluesky.gleam", 58).
-spec resolve_handle(binary(), inlay@embed:config()) -> {ok, binary()} |
{error, nil}.
resolve_handle(Handle, Config) ->
case gleam_stdlib:string_starts_with(Handle, <<"did:"/utf8>>) of
true ->
{ok, Handle};
false ->
case erlang:element(7, Config) of
{some, {bluesky_config, {some, Resolver}}} ->
Resolver(Handle);
_ ->
{error, nil}
end
end.
-file("src/inlay/bluesky.gleam", 16).
-spec render(inlay@embed:embed(), inlay@embed:config()) -> {ok,
lustre@vdom@vnode:element(any())} |
{error, nil}.
render(Embed, Config) ->
case Embed of
{bluesky_post, Handle, Rkey} ->
Post_url = <<<<<<"https://bsky.app/profile/"/utf8, Handle/binary>>/binary,
"/post/"/utf8>>/binary,
Rkey/binary>>,
case resolve_handle(Handle, Config) of
{ok, Did} ->
At_uri = <<<<<<"at://"/utf8, Did/binary>>/binary,
"/app.bsky.feed.post/"/utf8>>/binary,
Rkey/binary>>,
{ok,
lustre@element@html:'div'(
[],
[lustre@element@html:blockquote(
[lustre@attribute:class(
<<"bluesky-embed"/utf8>>
),
lustre@attribute:attribute(
<<"data-bluesky-uri"/utf8>>,
At_uri
)],
[lustre@element@html:a(
[lustre@attribute:href(Post_url)],
[lustre@element:text(Post_url)]
)]
),
lustre@element@html:script(
[lustre@attribute:src(
<<"https://embed.bsky.app/static/embed.js"/utf8>>
),
lustre@attribute:attribute(
<<"async"/utf8>>,
<<"true"/utf8>>
),
lustre@attribute:attribute(
<<"charset"/utf8>>,
<<"utf-8"/utf8>>
)],
<<""/utf8>>
)]
)};
{error, _} ->
{ok,
lustre@element@html:'div'(
[],
[lustre@element@html:blockquote(
[lustre@attribute:class(
<<"bluesky-embed"/utf8>>
)],
[lustre@element@html:a(
[lustre@attribute:href(Post_url)],
[lustre@element:text(Post_url)]
)]
)]
)}
end;
_ ->
{error, nil}
end.