Current section
Files
Jump to
Current section
Files
src/inlay.erl
-module(inlay).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/inlay.gleam").
-export([apple_music/2, pixelfed/2, mastodon/2, soundcloud/2, ted/2, openstreetmap/2, twitch/2, instagram/1, bluesky/2, tiktok/1, twitter/1, spotify/2, vimeo/2, youtube/2, detect_with/2, default_config/0, render/1, detect/1, embed/1, bluesky_config/0, youtube_config/0, vimeo_config/0, spotify_config/0, twitch_config/1, openstreetmap_config/0, ted_config/0, soundcloud_config/0, mastodon_config/1, pixelfed_config/2, pixelfed_full/2, pixelfed_compact/0, apple_music_config/0, new/0, youtube_no_cookie/2, vimeo_dnt/2, bluesky_resolver/2, no_youtube/1, no_vimeo/1, no_spotify/1, no_twitter/1, no_tiktok/1, no_bluesky/1, no_instagram/1, no_twitch/1, no_openstreetmap/1, no_ted/1, no_soundcloud/1, no_mastodon/1, no_pixelfed/1, no_apple_music/1, render_with/2, embed_with/2, a_component_with/2, a_component/1, a_component_default/0]).
-if(?OTP_RELEASE >= 27).
-define(MODULEDOC(Str), -moduledoc(Str)).
-define(DOC(Str), -doc(Str)).
-else.
-define(MODULEDOC(Str), -compile([])).
-define(DOC(Str), -compile([])).
-endif.
?MODULEDOC(
" Render embedded previews for social media links as Lustre HTML elements.\n"
"\n"
" Use `detect` to parse a URL into an `Embed`, `render` to turn it into\n"
" HTML, or `embed` to do both in one step. All functions have `_with`\n"
" variants that accept a custom `Config`.\n"
"\n"
" ## Example\n"
"\n"
" ```gleam\n"
" case inlay.embed(\"https://www.youtube.com/watch?v=dQw4w9WgXcQ\") {\n"
" Some(element) -> element\n"
" None -> html.text(\"Not an embeddable link\")\n"
" }\n"
" ```\n"
"\n"
" ## Configuration\n"
"\n"
" ```gleam\n"
" let config =\n"
" inlay.new()\n"
" |> inlay.youtube(inlay.youtube_config())\n"
" |> inlay.mastodon(inlay.mastodon_config([\"mastodon.social\"]))\n"
" ```\n"
).
-file("src/inlay.gleam", 357).
?DOC(" Enable Apple Music embeds with the given configuration.\n").
-spec apple_music(inlay@embed:config(), inlay@embed:apple_music_config()) -> inlay@embed:config().
apple_music(Config, Apple_music_config) ->
{config,
erlang:element(2, Config),
erlang:element(3, Config),
erlang:element(4, Config),
erlang:element(5, Config),
erlang:element(6, Config),
erlang:element(7, Config),
erlang:element(8, Config),
erlang:element(9, Config),
erlang:element(10, Config),
erlang:element(11, Config),
erlang:element(12, Config),
erlang:element(13, Config),
erlang:element(14, Config),
{some, Apple_music_config}}.
-file("src/inlay.gleam", 347).
?DOC(" Enable Pixelfed embeds with the given configuration.\n").
-spec pixelfed(inlay@embed:config(), inlay@embed:pixelfed_config()) -> inlay@embed:config().
pixelfed(Config, Pixelfed_config) ->
{config,
erlang:element(2, Config),
erlang:element(3, Config),
erlang:element(4, Config),
erlang:element(5, Config),
erlang:element(6, Config),
erlang:element(7, Config),
erlang:element(8, Config),
erlang:element(9, Config),
erlang:element(10, Config),
erlang:element(11, Config),
erlang:element(12, Config),
erlang:element(13, Config),
{some, Pixelfed_config},
erlang:element(15, Config)}.
-file("src/inlay.gleam", 337).
?DOC(" Enable Mastodon embeds with the given configuration.\n").
-spec mastodon(inlay@embed:config(), inlay@embed:mastodon_config()) -> inlay@embed:config().
mastodon(Config, Mastodon_config) ->
{config,
erlang:element(2, Config),
erlang:element(3, Config),
erlang:element(4, Config),
erlang:element(5, Config),
erlang:element(6, Config),
erlang:element(7, Config),
erlang:element(8, Config),
erlang:element(9, Config),
erlang:element(10, Config),
erlang:element(11, Config),
erlang:element(12, Config),
{some, Mastodon_config},
erlang:element(14, Config),
erlang:element(15, Config)}.
-file("src/inlay.gleam", 324).
?DOC(" Enable SoundCloud embeds with the given configuration.\n").
-spec soundcloud(inlay@embed:config(), inlay@embed:sound_cloud_config()) -> inlay@embed:config().
soundcloud(Config, Soundcloud_config) ->
{config,
erlang:element(2, Config),
erlang:element(3, Config),
erlang:element(4, Config),
erlang:element(5, Config),
erlang:element(6, Config),
erlang:element(7, Config),
erlang:element(8, Config),
erlang:element(9, Config),
erlang:element(10, Config),
erlang:element(11, Config),
{some, Soundcloud_config},
erlang:element(13, Config),
erlang:element(14, Config),
erlang:element(15, Config)}.
-file("src/inlay.gleam", 314).
?DOC(" Enable TED talk embeds with the given configuration.\n").
-spec ted(inlay@embed:config(), inlay@embed:ted_config()) -> inlay@embed:config().
ted(Config, Ted_config) ->
{config,
erlang:element(2, Config),
erlang:element(3, Config),
erlang:element(4, Config),
erlang:element(5, Config),
erlang:element(6, Config),
erlang:element(7, Config),
erlang:element(8, Config),
erlang:element(9, Config),
erlang:element(10, Config),
{some, Ted_config},
erlang:element(12, Config),
erlang:element(13, Config),
erlang:element(14, Config),
erlang:element(15, Config)}.
-file("src/inlay.gleam", 301).
?DOC(" Enable OpenStreetMap embeds with the given configuration.\n").
-spec openstreetmap(inlay@embed:config(), inlay@embed:open_street_map_config()) -> inlay@embed:config().
openstreetmap(Config, Osm_config) ->
{config,
erlang:element(2, Config),
erlang:element(3, Config),
erlang:element(4, Config),
erlang:element(5, Config),
erlang:element(6, Config),
erlang:element(7, Config),
erlang:element(8, Config),
erlang:element(9, Config),
{some, Osm_config},
erlang:element(11, Config),
erlang:element(12, Config),
erlang:element(13, Config),
erlang:element(14, Config),
erlang:element(15, Config)}.
-file("src/inlay.gleam", 291).
?DOC(" Enable Twitch embeds with the given configuration.\n").
-spec twitch(inlay@embed:config(), inlay@embed:twitch_config()) -> inlay@embed:config().
twitch(Config, Twitch_config) ->
{config,
erlang:element(2, Config),
erlang:element(3, Config),
erlang:element(4, Config),
erlang:element(5, Config),
erlang:element(6, Config),
erlang:element(7, Config),
erlang:element(8, Config),
{some, Twitch_config},
erlang:element(10, Config),
erlang:element(11, Config),
erlang:element(12, Config),
erlang:element(13, Config),
erlang:element(14, Config),
erlang:element(15, Config)}.
-file("src/inlay.gleam", 281).
?DOC(" Enable Instagram embeds.\n").
-spec instagram(inlay@embed:config()) -> inlay@embed:config().
instagram(Config) ->
{config,
erlang:element(2, Config),
erlang:element(3, Config),
erlang:element(4, Config),
erlang:element(5, Config),
erlang:element(6, Config),
erlang:element(7, Config),
{some, nil},
erlang:element(9, Config),
erlang:element(10, Config),
erlang:element(11, Config),
erlang:element(12, Config),
erlang:element(13, Config),
erlang:element(14, Config),
erlang:element(15, Config)}.
-file("src/inlay.gleam", 271).
?DOC(" Enable Bluesky embeds with the given configuration.\n").
-spec bluesky(inlay@embed:config(), inlay@embed:bluesky_config()) -> inlay@embed:config().
bluesky(Config, Bluesky_config) ->
{config,
erlang:element(2, Config),
erlang:element(3, Config),
erlang:element(4, Config),
erlang:element(5, Config),
erlang:element(6, Config),
{some, Bluesky_config},
erlang:element(8, Config),
erlang:element(9, Config),
erlang:element(10, Config),
erlang:element(11, Config),
erlang:element(12, Config),
erlang:element(13, Config),
erlang:element(14, Config),
erlang:element(15, Config)}.
-file("src/inlay.gleam", 261).
?DOC(" Enable TikTok embeds.\n").
-spec tiktok(inlay@embed:config()) -> inlay@embed:config().
tiktok(Config) ->
{config,
erlang:element(2, Config),
erlang:element(3, Config),
erlang:element(4, Config),
erlang:element(5, Config),
{some, nil},
erlang:element(7, Config),
erlang:element(8, Config),
erlang:element(9, Config),
erlang:element(10, Config),
erlang:element(11, Config),
erlang:element(12, Config),
erlang:element(13, Config),
erlang:element(14, Config),
erlang:element(15, Config)}.
-file("src/inlay.gleam", 251).
?DOC(" Enable Twitter/X embeds.\n").
-spec twitter(inlay@embed:config()) -> inlay@embed:config().
twitter(Config) ->
{config,
erlang:element(2, Config),
erlang:element(3, Config),
erlang:element(4, Config),
{some, nil},
erlang:element(6, Config),
erlang:element(7, Config),
erlang:element(8, Config),
erlang:element(9, Config),
erlang:element(10, Config),
erlang:element(11, Config),
erlang:element(12, Config),
erlang:element(13, Config),
erlang:element(14, Config),
erlang:element(15, Config)}.
-file("src/inlay.gleam", 241).
?DOC(" Enable Spotify embeds with the given configuration.\n").
-spec spotify(inlay@embed:config(), inlay@embed:spotify_config()) -> inlay@embed:config().
spotify(Config, Spotify_config) ->
{config,
erlang:element(2, Config),
erlang:element(3, Config),
{some, Spotify_config},
erlang:element(5, Config),
erlang:element(6, Config),
erlang:element(7, Config),
erlang:element(8, Config),
erlang:element(9, Config),
erlang:element(10, Config),
erlang:element(11, Config),
erlang:element(12, Config),
erlang:element(13, Config),
erlang:element(14, Config),
erlang:element(15, Config)}.
-file("src/inlay.gleam", 231).
?DOC(" Enable Vimeo embeds with the given configuration.\n").
-spec vimeo(inlay@embed:config(), inlay@embed:vimeo_config()) -> inlay@embed:config().
vimeo(Config, Vimeo_config) ->
{config,
erlang:element(2, Config),
{some, Vimeo_config},
erlang:element(4, Config),
erlang:element(5, Config),
erlang:element(6, Config),
erlang:element(7, Config),
erlang:element(8, Config),
erlang:element(9, Config),
erlang:element(10, Config),
erlang:element(11, Config),
erlang:element(12, Config),
erlang:element(13, Config),
erlang:element(14, Config),
erlang:element(15, Config)}.
-file("src/inlay.gleam", 221).
?DOC(" Enable YouTube embeds with the given configuration.\n").
-spec youtube(inlay@embed:config(), inlay@embed:youtube_config()) -> inlay@embed:config().
youtube(Config, Youtube_config) ->
{config,
{some, Youtube_config},
erlang:element(3, Config),
erlang:element(4, Config),
erlang:element(5, Config),
erlang:element(6, Config),
erlang:element(7, Config),
erlang:element(8, Config),
erlang:element(9, Config),
erlang:element(10, Config),
erlang:element(11, Config),
erlang:element(12, Config),
erlang:element(13, Config),
erlang:element(14, Config),
erlang:element(15, Config)}.
-file("src/inlay.gleam", 468).
-spec do_render(inlay@embed:embed(), inlay@embed:config()) -> lustre@vdom@vnode:element(any()).
do_render(Embed, Config) ->
El@1 = case case Embed of
{youtube_video, _, _, _} ->
inlay@youtube:render(Embed, Config);
{youtube_playlist, _} ->
inlay@youtube:render(Embed, Config);
{vimeo_video, _, _} ->
inlay@vimeo:render(Embed, Config);
{spotify_media, _, _} ->
inlay@spotify:render(Embed, Config);
{tweet, _, _} ->
inlay@twitter:render(Embed, Config);
{tik_tok_video, _, _} ->
inlay@tiktok:render(Embed, Config);
{bluesky_post, _, _} ->
inlay@bluesky:render(Embed, Config);
{instagram_post, _, _} ->
inlay@instagram:render(Embed, Config);
{twitch_channel, _} ->
inlay@twitch:render(Embed, Config);
{twitch_video, _} ->
inlay@twitch:render(Embed, Config);
{map_location, _, _, _} ->
inlay@openstreetmap:render(Embed, Config);
{ted_talk, _} ->
inlay@ted:render(Embed, Config);
{sound_cloud_track, _} ->
inlay@soundcloud:render(Embed, Config);
{mastodon_post, _, _, _} ->
inlay@mastodon:render(Embed, Config);
{pixelfed_post, _, _, _} ->
inlay@pixelfed:render(Embed, Config);
{apple_music_media, _, _, _, _} ->
inlay@apple_music:render(Embed, Config)
end of
{ok, El} -> El;
_assert_fail ->
erlang:error(#{gleam_error => let_assert,
message => <<"Pattern match failed, no pattern matched the value."/utf8>>,
file => <<?FILEPATH/utf8>>,
module => <<"inlay"/utf8>>,
function => <<"do_render"/utf8>>,
line => 469,
value => _assert_fail,
start => 13199,
'end' => 14031,
pattern_start => 13210,
pattern_end => 13216})
end,
El@1.
-file("src/inlay.gleam", 488).
-spec try_one(
gleam@option:option(any()),
gleam@uri:uri(),
fun((gleam@uri:uri()) -> gleam@option:option(inlay@embed:embed())),
fun(() -> gleam@option:option(inlay@embed:embed()))
) -> gleam@option:option(inlay@embed:embed()).
try_one(Enabled, Url, Detector, Next) ->
case Enabled of
{some, _} ->
case Detector(Url) of
{some, Found} ->
{some, Found};
none ->
Next()
end;
none ->
Next()
end.
-file("src/inlay.gleam", 504).
-spec try_one_with(
gleam@option:option(QGR),
gleam@uri:uri(),
fun((gleam@uri:uri(), QGR) -> gleam@option:option(inlay@embed:embed())),
fun(() -> gleam@option:option(inlay@embed:embed()))
) -> gleam@option:option(inlay@embed:embed()).
try_one_with(Enabled, Url, Detector, Next) ->
case Enabled of
{some, Cfg} ->
case Detector(Url, Cfg) of
{some, Found} ->
{some, Found};
none ->
Next()
end;
none ->
Next()
end.
-file("src/inlay.gleam", 450).
-spec do_detect(gleam@uri:uri(), inlay@embed:config()) -> gleam@option:option(inlay@embed:embed()).
do_detect(Url, Config) ->
try_one_with(
erlang:element(13, Config),
Url,
fun inlay@mastodon:detect/2,
fun() ->
try_one_with(
erlang:element(14, Config),
Url,
fun inlay@pixelfed:detect/2,
fun() ->
try_one(
erlang:element(2, Config),
Url,
fun inlay@youtube:detect/1,
fun() ->
try_one(
erlang:element(11, Config),
Url,
fun inlay@ted:detect/1,
fun() ->
try_one(
erlang:element(3, Config),
Url,
fun inlay@vimeo:detect/1,
fun() ->
try_one(
erlang:element(4, Config),
Url,
fun inlay@spotify:detect/1,
fun() ->
try_one(
erlang:element(
7,
Config
),
Url,
fun inlay@bluesky:detect/1,
fun() ->
try_one(
erlang:element(
9,
Config
),
Url,
fun inlay@twitch:detect/1,
fun() ->
try_one(
erlang:element(
12,
Config
),
Url,
fun inlay@soundcloud:detect/1,
fun() ->
try_one(
erlang:element(
5,
Config
),
Url,
fun inlay@twitter:detect/1,
fun(
) ->
try_one(
erlang:element(
6,
Config
),
Url,
fun inlay@tiktok:detect/1,
fun(
) ->
try_one(
erlang:element(
8,
Config
),
Url,
fun inlay@instagram:detect/1,
fun(
) ->
try_one(
erlang:element(
10,
Config
),
Url,
fun inlay@openstreetmap:detect/1,
fun(
) ->
try_one(
erlang:element(
15,
Config
),
Url,
fun inlay@apple_music:detect/1,
fun(
) ->
none
end
)
end
)
end
)
end
)
end
)
end
)
end
)
end
)
end
)
end
)
end
)
end
)
end
)
end
).
-file("src/inlay.gleam", 375).
?DOC(" Detect an embeddable link from a URL using a custom configuration.\n").
-spec detect_with(binary(), inlay@embed:config()) -> gleam@option:option(inlay@embed:embed()).
detect_with(Url, Config) ->
case gleam_stdlib:uri_parse(Url) of
{ok, Parsed} ->
do_detect(Parsed, Config);
{error, _} ->
none
end.
-file("src/inlay.gleam", 185).
?DOC(
" Create a configuration with commonly used providers enabled.\n"
"\n"
" Enabled: YouTube, Vimeo, Spotify, Twitter/X, TikTok, Bluesky,\n"
" Instagram, OpenStreetMap, TED, SoundCloud, Apple Music.\n"
"\n"
" Disabled (require explicit setup): Twitch, Mastodon, Pixelfed.\n"
).
-spec default_config() -> inlay@embed:config().
default_config() ->
inlay@embed:default_config().
-file("src/inlay.gleam", 383).
?DOC(" Render a detected embed as HTML using the default configuration.\n").
-spec render(inlay@embed:embed()) -> lustre@vdom@vnode:element(any()).
render(Embed) ->
do_render(Embed, default_config()).
-file("src/inlay.gleam", 370).
?DOC(" Detect an embeddable link from a URL using the default configuration.\n").
-spec detect(binary()) -> gleam@option:option(inlay@embed:embed()).
detect(Url) ->
detect_with(Url, default_config()).
-file("src/inlay.gleam", 393).
?DOC(" Detect and render in one step using the default configuration.\n").
-spec embed(binary()) -> gleam@option:option(lustre@vdom@vnode:element(any())).
embed(Url) ->
case detect(Url) of
{some, E} ->
{some, render(E)};
none ->
none
end.
-file("src/inlay.gleam", 106).
?DOC(" Create a default Bluesky configuration with no handle resolver.\n").
-spec bluesky_config() -> inlay@embed:bluesky_config().
bluesky_config() ->
inlay@embed:bluesky_config().
-file("src/inlay.gleam", 111).
?DOC(" Create a default YouTube configuration with privacy-enhanced mode enabled.\n").
-spec youtube_config() -> inlay@embed:youtube_config().
youtube_config() ->
inlay@embed:youtube_config().
-file("src/inlay.gleam", 116).
?DOC(" Create a default Vimeo configuration with Do Not Track enabled.\n").
-spec vimeo_config() -> inlay@embed:vimeo_config().
vimeo_config() ->
inlay@embed:vimeo_config().
-file("src/inlay.gleam", 121).
?DOC(" Create a default Spotify configuration.\n").
-spec spotify_config() -> inlay@embed:spotify_config().
spotify_config() ->
inlay@embed:spotify_config().
-file("src/inlay.gleam", 127).
?DOC(
" Create a Twitch configuration. The `parent` domain is required by\n"
" Twitch's embed API.\n"
).
-spec twitch_config(binary()) -> inlay@embed:twitch_config().
twitch_config(Parent) ->
inlay@embed:twitch_config(Parent).
-file("src/inlay.gleam", 132).
?DOC(" Create a default OpenStreetMap configuration.\n").
-spec openstreetmap_config() -> inlay@embed:open_street_map_config().
openstreetmap_config() ->
inlay@embed:openstreetmap_config().
-file("src/inlay.gleam", 137).
?DOC(" Create a default TED configuration.\n").
-spec ted_config() -> inlay@embed:ted_config().
ted_config() ->
inlay@embed:ted_config().
-file("src/inlay.gleam", 142).
?DOC(" Create a default SoundCloud configuration.\n").
-spec soundcloud_config() -> inlay@embed:sound_cloud_config().
soundcloud_config() ->
inlay@embed:soundcloud_config().
-file("src/inlay.gleam", 148).
?DOC(
" Create a Mastodon configuration. Only posts from the listed `servers`\n"
" will be detected.\n"
).
-spec mastodon_config(list(binary())) -> inlay@embed:mastodon_config().
mastodon_config(Servers) ->
inlay@embed:mastodon_config(Servers).
-file("src/inlay.gleam", 154).
?DOC(
" Create a Pixelfed configuration. Only posts from the listed `servers`\n"
" will be detected.\n"
).
-spec pixelfed_config(list(binary()), inlay@embed:pixelfed_layout()) -> inlay@embed:pixelfed_config().
pixelfed_config(Servers, Layout) ->
inlay@embed:pixelfed_config(Servers, Layout).
-file("src/inlay.gleam", 162).
?DOC(" Pixelfed embed layout that shows the post with optional caption and likes.\n").
-spec pixelfed_full(boolean(), boolean()) -> inlay@embed:pixelfed_layout().
pixelfed_full(Caption, Likes) ->
{full, Caption, Likes}.
-file("src/inlay.gleam", 170).
?DOC(" Pixelfed embed layout that shows a compact view of the post.\n").
-spec pixelfed_compact() -> inlay@embed:pixelfed_layout().
pixelfed_compact() ->
compact.
-file("src/inlay.gleam", 175).
?DOC(" Create a default Apple Music configuration.\n").
-spec apple_music_config() -> inlay@embed:apple_music_config().
apple_music_config() ->
inlay@embed:apple_music_config().
-file("src/inlay.gleam", 191).
?DOC(
" Create a configuration with all providers disabled.\n"
" Enable providers selectively with the builder functions.\n"
).
-spec new() -> inlay@embed:config().
new() ->
inlay@embed:new().
-file("src/inlay.gleam", 197).
?DOC(
" Set whether YouTube embeds use the privacy-enhanced `youtube-nocookie.com`\n"
" domain. Enabled by default.\n"
).
-spec youtube_no_cookie(inlay@embed:youtube_config(), boolean()) -> inlay@embed:youtube_config().
youtube_no_cookie(Config, No_cookie) ->
{youtube_config, No_cookie, erlang:element(3, Config)}.
-file("src/inlay.gleam", 206).
?DOC(
" Set whether Vimeo embeds include the Do Not Track flag.\n"
" Enabled by default.\n"
).
-spec vimeo_dnt(inlay@embed:vimeo_config(), boolean()) -> inlay@embed:vimeo_config().
vimeo_dnt(Config, Dnt) ->
{vimeo_config, Dnt, erlang:element(3, Config)}.
-file("src/inlay.gleam", 212).
?DOC(
" Set a function that resolves a Bluesky handle (e.g. `\"user.bsky.social\"`)\n"
" to a DID. When provided, embeds render with richer Bluesky markup.\n"
).
-spec bluesky_resolver(
inlay@embed:bluesky_config(),
fun((binary()) -> {ok, binary()} | {error, nil})
) -> inlay@embed:bluesky_config().
bluesky_resolver(Config, Resolve) ->
{bluesky_config, _} = Config,
{bluesky_config, {some, Resolve}}.
-file("src/inlay.gleam", 226).
?DOC(" Disable YouTube embeds.\n").
-spec no_youtube(inlay@embed:config()) -> inlay@embed:config().
no_youtube(Config) ->
{config,
none,
erlang:element(3, Config),
erlang:element(4, Config),
erlang:element(5, Config),
erlang:element(6, Config),
erlang:element(7, Config),
erlang:element(8, Config),
erlang:element(9, Config),
erlang:element(10, Config),
erlang:element(11, Config),
erlang:element(12, Config),
erlang:element(13, Config),
erlang:element(14, Config),
erlang:element(15, Config)}.
-file("src/inlay.gleam", 236).
?DOC(" Disable Vimeo embeds.\n").
-spec no_vimeo(inlay@embed:config()) -> inlay@embed:config().
no_vimeo(Config) ->
{config,
erlang:element(2, Config),
none,
erlang:element(4, Config),
erlang:element(5, Config),
erlang:element(6, Config),
erlang:element(7, Config),
erlang:element(8, Config),
erlang:element(9, Config),
erlang:element(10, Config),
erlang:element(11, Config),
erlang:element(12, Config),
erlang:element(13, Config),
erlang:element(14, Config),
erlang:element(15, Config)}.
-file("src/inlay.gleam", 246).
?DOC(" Disable Spotify embeds.\n").
-spec no_spotify(inlay@embed:config()) -> inlay@embed:config().
no_spotify(Config) ->
{config,
erlang:element(2, Config),
erlang:element(3, Config),
none,
erlang:element(5, Config),
erlang:element(6, Config),
erlang:element(7, Config),
erlang:element(8, Config),
erlang:element(9, Config),
erlang:element(10, Config),
erlang:element(11, Config),
erlang:element(12, Config),
erlang:element(13, Config),
erlang:element(14, Config),
erlang:element(15, Config)}.
-file("src/inlay.gleam", 256).
?DOC(" Disable Twitter/X embeds.\n").
-spec no_twitter(inlay@embed:config()) -> inlay@embed:config().
no_twitter(Config) ->
{config,
erlang:element(2, Config),
erlang:element(3, Config),
erlang:element(4, Config),
none,
erlang:element(6, Config),
erlang:element(7, Config),
erlang:element(8, Config),
erlang:element(9, Config),
erlang:element(10, Config),
erlang:element(11, Config),
erlang:element(12, Config),
erlang:element(13, Config),
erlang:element(14, Config),
erlang:element(15, Config)}.
-file("src/inlay.gleam", 266).
?DOC(" Disable TikTok embeds.\n").
-spec no_tiktok(inlay@embed:config()) -> inlay@embed:config().
no_tiktok(Config) ->
{config,
erlang:element(2, Config),
erlang:element(3, Config),
erlang:element(4, Config),
erlang:element(5, Config),
none,
erlang:element(7, Config),
erlang:element(8, Config),
erlang:element(9, Config),
erlang:element(10, Config),
erlang:element(11, Config),
erlang:element(12, Config),
erlang:element(13, Config),
erlang:element(14, Config),
erlang:element(15, Config)}.
-file("src/inlay.gleam", 276).
?DOC(" Disable Bluesky embeds.\n").
-spec no_bluesky(inlay@embed:config()) -> inlay@embed:config().
no_bluesky(Config) ->
{config,
erlang:element(2, Config),
erlang:element(3, Config),
erlang:element(4, Config),
erlang:element(5, Config),
erlang:element(6, Config),
none,
erlang:element(8, Config),
erlang:element(9, Config),
erlang:element(10, Config),
erlang:element(11, Config),
erlang:element(12, Config),
erlang:element(13, Config),
erlang:element(14, Config),
erlang:element(15, Config)}.
-file("src/inlay.gleam", 286).
?DOC(" Disable Instagram embeds.\n").
-spec no_instagram(inlay@embed:config()) -> inlay@embed:config().
no_instagram(Config) ->
{config,
erlang:element(2, Config),
erlang:element(3, Config),
erlang:element(4, Config),
erlang:element(5, Config),
erlang:element(6, Config),
erlang:element(7, Config),
none,
erlang:element(9, Config),
erlang:element(10, Config),
erlang:element(11, Config),
erlang:element(12, Config),
erlang:element(13, Config),
erlang:element(14, Config),
erlang:element(15, Config)}.
-file("src/inlay.gleam", 296).
?DOC(" Disable Twitch embeds.\n").
-spec no_twitch(inlay@embed:config()) -> inlay@embed:config().
no_twitch(Config) ->
{config,
erlang:element(2, Config),
erlang:element(3, Config),
erlang:element(4, Config),
erlang:element(5, Config),
erlang:element(6, Config),
erlang:element(7, Config),
erlang:element(8, Config),
none,
erlang:element(10, Config),
erlang:element(11, Config),
erlang:element(12, Config),
erlang:element(13, Config),
erlang:element(14, Config),
erlang:element(15, Config)}.
-file("src/inlay.gleam", 309).
?DOC(" Disable OpenStreetMap embeds.\n").
-spec no_openstreetmap(inlay@embed:config()) -> inlay@embed:config().
no_openstreetmap(Config) ->
{config,
erlang:element(2, Config),
erlang:element(3, Config),
erlang:element(4, Config),
erlang:element(5, Config),
erlang:element(6, Config),
erlang:element(7, Config),
erlang:element(8, Config),
erlang:element(9, Config),
none,
erlang:element(11, Config),
erlang:element(12, Config),
erlang:element(13, Config),
erlang:element(14, Config),
erlang:element(15, Config)}.
-file("src/inlay.gleam", 319).
?DOC(" Disable TED talk embeds.\n").
-spec no_ted(inlay@embed:config()) -> inlay@embed:config().
no_ted(Config) ->
{config,
erlang:element(2, Config),
erlang:element(3, Config),
erlang:element(4, Config),
erlang:element(5, Config),
erlang:element(6, Config),
erlang:element(7, Config),
erlang:element(8, Config),
erlang:element(9, Config),
erlang:element(10, Config),
none,
erlang:element(12, Config),
erlang:element(13, Config),
erlang:element(14, Config),
erlang:element(15, Config)}.
-file("src/inlay.gleam", 332).
?DOC(" Disable SoundCloud embeds.\n").
-spec no_soundcloud(inlay@embed:config()) -> inlay@embed:config().
no_soundcloud(Config) ->
{config,
erlang:element(2, Config),
erlang:element(3, Config),
erlang:element(4, Config),
erlang:element(5, Config),
erlang:element(6, Config),
erlang:element(7, Config),
erlang:element(8, Config),
erlang:element(9, Config),
erlang:element(10, Config),
erlang:element(11, Config),
none,
erlang:element(13, Config),
erlang:element(14, Config),
erlang:element(15, Config)}.
-file("src/inlay.gleam", 342).
?DOC(" Disable Mastodon embeds.\n").
-spec no_mastodon(inlay@embed:config()) -> inlay@embed:config().
no_mastodon(Config) ->
{config,
erlang:element(2, Config),
erlang:element(3, Config),
erlang:element(4, Config),
erlang:element(5, Config),
erlang:element(6, Config),
erlang:element(7, Config),
erlang:element(8, Config),
erlang:element(9, Config),
erlang:element(10, Config),
erlang:element(11, Config),
erlang:element(12, Config),
none,
erlang:element(14, Config),
erlang:element(15, Config)}.
-file("src/inlay.gleam", 352).
?DOC(" Disable Pixelfed embeds.\n").
-spec no_pixelfed(inlay@embed:config()) -> inlay@embed:config().
no_pixelfed(Config) ->
{config,
erlang:element(2, Config),
erlang:element(3, Config),
erlang:element(4, Config),
erlang:element(5, Config),
erlang:element(6, Config),
erlang:element(7, Config),
erlang:element(8, Config),
erlang:element(9, Config),
erlang:element(10, Config),
erlang:element(11, Config),
erlang:element(12, Config),
erlang:element(13, Config),
none,
erlang:element(15, Config)}.
-file("src/inlay.gleam", 365).
?DOC(" Disable Apple Music embeds.\n").
-spec no_apple_music(inlay@embed:config()) -> inlay@embed:config().
no_apple_music(Config) ->
{config,
erlang:element(2, Config),
erlang:element(3, Config),
erlang:element(4, Config),
erlang:element(5, Config),
erlang:element(6, Config),
erlang:element(7, Config),
erlang:element(8, Config),
erlang:element(9, Config),
erlang:element(10, Config),
erlang:element(11, Config),
erlang:element(12, Config),
erlang:element(13, Config),
erlang:element(14, Config),
none}.
-file("src/inlay.gleam", 388).
?DOC(" Render a detected embed as HTML using a custom configuration.\n").
-spec render_with(inlay@embed:embed(), inlay@embed:config()) -> lustre@vdom@vnode:element(any()).
render_with(Embed, Config) ->
do_render(Embed, Config).
-file("src/inlay.gleam", 401).
?DOC(" Detect and render in one step using a custom configuration.\n").
-spec embed_with(binary(), inlay@embed:config()) -> gleam@option:option(lustre@vdom@vnode:element(any())).
embed_with(Url, Config) ->
case detect_with(Url, Config) of
{some, E} ->
{some, render_with(E, Config)};
none ->
none
end.
-file("src/inlay.gleam", 418).
?DOC(" Create an anchor component with a custom configuration.\n").
-spec a_component_with(
inlay@embed:config(),
fun((binary(), gleam@option:option(binary()), list(lustre@vdom@vnode:element(QFR))) -> lustre@vdom@vnode:element(QFR))
) -> fun((binary(), gleam@option:option(binary()), list(lustre@vdom@vnode:element(QFR))) -> lustre@vdom@vnode:element(QFR)).
a_component_with(Config, Fallback) ->
fun(Href, Title, Children) -> case embed_with(Href, Config) of
{some, El} ->
El;
none ->
Fallback(Href, Title, Children)
end end.
-file("src/inlay.gleam", 411).
?DOC(
" Create an anchor component that renders embeds for recognized URLs\n"
" and delegates to `fallback` for unrecognized ones.\n"
" Uses the default configuration.\n"
).
-spec a_component(
fun((binary(), gleam@option:option(binary()), list(lustre@vdom@vnode:element(QFI))) -> lustre@vdom@vnode:element(QFI))
) -> fun((binary(), gleam@option:option(binary()), list(lustre@vdom@vnode:element(QFI))) -> lustre@vdom@vnode:element(QFI)).
a_component(Fallback) ->
a_component_with(default_config(), Fallback).
-file("src/inlay.gleam", 437).
-spec default_fallback(
binary(),
gleam@option:option(binary()),
list(lustre@vdom@vnode:element(QGF))
) -> lustre@vdom@vnode:element(QGF).
default_fallback(Href, Title, Children) ->
Attrs = [lustre@attribute:href(Href)],
Attrs@1 = case Title of
{some, T} ->
[lustre@attribute:title(T) | Attrs];
none ->
Attrs
end,
lustre@element@html:a(Attrs@1, Children).
-file("src/inlay.gleam", 432).
?DOC(
" Create an anchor component using the default configuration and\n"
" a standard `<a>` tag fallback.\n"
).
-spec a_component_default() -> fun((binary(), gleam@option:option(binary()), list(lustre@vdom@vnode:element(QGA))) -> lustre@vdom@vnode:element(QGA)).
a_component_default() ->
a_component(fun default_fallback/3).