Current section

Files

Jump to
inlay src inlay@embed.erl
Raw

src/inlay@embed.erl

-module(inlay@embed).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/inlay/embed.gleam").
-export([bluesky_config/0, twitter_config/0, tiktok_config/0, instagram_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, apple_music_config/0, default_config/0, new/0]).
-export_type([embed/0, spotify_media_type/0, apple_music_media_type/0, instagram_post_type/0, pixelfed_layout/0, config/0, youtube_config/0, vimeo_config/0, spotify_config/0, bluesky_config/0, twitter_config/0, tik_tok_config/0, instagram_config/0, twitch_config/0, open_street_map_config/0, ted_config/0, sound_cloud_config/0, mastodon_config/0, pixelfed_config/0, apple_music_config/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(" Types and configuration for embeddable social media links.\n").
-type embed() :: {youtube_video,
binary(),
gleam@option:option(integer()),
gleam@option:option(binary())} |
{youtube_playlist, binary()} |
{vimeo_video, binary(), gleam@option:option(binary())} |
{spotify_media, spotify_media_type(), binary()} |
{tweet, binary(), binary()} |
{tik_tok_video, binary(), binary()} |
{bluesky_post, binary(), binary()} |
{instagram_post, instagram_post_type(), binary()} |
{twitch_channel, binary()} |
{twitch_video, binary()} |
{map_location, integer(), float(), float()} |
{ted_talk, binary()} |
{sound_cloud_track, binary()} |
{mastodon_post, binary(), binary(), binary()} |
{pixelfed_post, binary(), binary(), binary()} |
{apple_music_media, apple_music_media_type(), binary(), binary(), binary()}.
-type spotify_media_type() :: spotify_playlist |
spotify_track |
spotify_album |
spotify_artist |
spotify_episode |
spotify_show.
-type apple_music_media_type() :: apple_music_album |
apple_music_artist |
apple_music_playlist |
{apple_music_song, binary()} |
apple_music_music_video.
-type instagram_post_type() :: post | reel | t_v.
-type pixelfed_layout() :: {full, boolean(), boolean()} | compact.
-type config() :: {config,
gleam@option:option(youtube_config()),
gleam@option:option(vimeo_config()),
gleam@option:option(spotify_config()),
gleam@option:option(twitter_config()),
gleam@option:option(tik_tok_config()),
gleam@option:option(bluesky_config()),
gleam@option:option(instagram_config()),
gleam@option:option(twitch_config()),
gleam@option:option(open_street_map_config()),
gleam@option:option(ted_config()),
gleam@option:option(sound_cloud_config()),
gleam@option:option(mastodon_config()),
gleam@option:option(pixelfed_config()),
gleam@option:option(apple_music_config())}.
-type youtube_config() :: {youtube_config,
boolean(),
gleam@option:option(binary())}.
-type vimeo_config() :: {vimeo_config, boolean(), gleam@option:option(binary())}.
-type spotify_config() :: {spotify_config,
gleam@option:option(integer()),
gleam@option:option(integer()),
gleam@option:option(integer())}.
-type bluesky_config() :: {bluesky_config,
gleam@option:option(fun((binary()) -> {ok, binary()} | {error, nil})),
gleam@option:option(integer())}.
-type twitter_config() :: {twitter_config, gleam@option:option(integer())}.
-type tik_tok_config() :: {tik_tok_config, gleam@option:option(integer())}.
-type instagram_config() :: {instagram_config, gleam@option:option(integer())}.
-type twitch_config() :: {twitch_config,
binary(),
gleam@option:option(binary())}.
-type open_street_map_config() :: {open_street_map_config,
gleam@option:option(binary())}.
-type ted_config() :: {ted_config, gleam@option:option(binary())}.
-type sound_cloud_config() :: {sound_cloud_config,
gleam@option:option(integer()),
gleam@option:option(integer())}.
-type mastodon_config() :: {mastodon_config,
list(binary()),
gleam@option:option(integer()),
gleam@option:option(integer())}.
-type pixelfed_config() :: {pixelfed_config,
list(binary()),
pixelfed_layout(),
gleam@option:option(integer()),
gleam@option:option(integer())}.
-type apple_music_config() :: {apple_music_config,
gleam@option:option(integer()),
gleam@option:option(integer()),
gleam@option:option(integer())}.
-file("src/inlay/embed.gleam", 191).
?DOC(" Create a default Bluesky configuration with no handle resolver.\n").
-spec bluesky_config() -> bluesky_config().
bluesky_config() ->
{bluesky_config, none, none}.
-file("src/inlay/embed.gleam", 196).
?DOC(" Create a default Twitter/X configuration.\n").
-spec twitter_config() -> twitter_config().
twitter_config() ->
{twitter_config, none}.
-file("src/inlay/embed.gleam", 201).
?DOC(" Create a default TikTok configuration.\n").
-spec tiktok_config() -> tik_tok_config().
tiktok_config() ->
{tik_tok_config, none}.
-file("src/inlay/embed.gleam", 206).
?DOC(" Create a default Instagram configuration.\n").
-spec instagram_config() -> instagram_config().
instagram_config() ->
{instagram_config, none}.
-file("src/inlay/embed.gleam", 211).
?DOC(" Create a default YouTube configuration with privacy-enhanced mode enabled.\n").
-spec youtube_config() -> youtube_config().
youtube_config() ->
{youtube_config, true, none}.
-file("src/inlay/embed.gleam", 216).
?DOC(" Create a default Vimeo configuration with Do Not Track enabled.\n").
-spec vimeo_config() -> vimeo_config().
vimeo_config() ->
{vimeo_config, true, none}.
-file("src/inlay/embed.gleam", 221).
?DOC(" Create a default Spotify configuration.\n").
-spec spotify_config() -> spotify_config().
spotify_config() ->
{spotify_config, none, none, none}.
-file("src/inlay/embed.gleam", 226).
?DOC(" Create a Twitch configuration with the required parent domain.\n").
-spec twitch_config(binary()) -> twitch_config().
twitch_config(Parent) ->
{twitch_config, Parent, none}.
-file("src/inlay/embed.gleam", 231).
?DOC(" Create a default OpenStreetMap configuration.\n").
-spec openstreetmap_config() -> open_street_map_config().
openstreetmap_config() ->
{open_street_map_config, none}.
-file("src/inlay/embed.gleam", 236).
?DOC(" Create a default TED configuration.\n").
-spec ted_config() -> ted_config().
ted_config() ->
{ted_config, none}.
-file("src/inlay/embed.gleam", 241).
?DOC(" Create a default SoundCloud configuration.\n").
-spec soundcloud_config() -> sound_cloud_config().
soundcloud_config() ->
{sound_cloud_config, none, none}.
-file("src/inlay/embed.gleam", 246).
?DOC(" Create a Mastodon configuration for the given server allowlist.\n").
-spec mastodon_config(list(binary())) -> mastodon_config().
mastodon_config(Servers) ->
{mastodon_config, Servers, none, none}.
-file("src/inlay/embed.gleam", 251).
?DOC(" Create a Pixelfed configuration for the given server allowlist and layout.\n").
-spec pixelfed_config(list(binary()), pixelfed_layout()) -> pixelfed_config().
pixelfed_config(Servers, Layout) ->
{pixelfed_config, Servers, Layout, none, none}.
-file("src/inlay/embed.gleam", 259).
?DOC(" Create a default Apple Music configuration.\n").
-spec apple_music_config() -> apple_music_config().
apple_music_config() ->
{apple_music_config, none, none, none}.
-file("src/inlay/embed.gleam", 269).
?DOC(
" Create a default 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() -> config().
default_config() ->
{config,
{some, youtube_config()},
{some, vimeo_config()},
{some, spotify_config()},
{some, twitter_config()},
{some, tiktok_config()},
{some, bluesky_config()},
{some, instagram_config()},
none,
{some, openstreetmap_config()},
{some, ted_config()},
{some, soundcloud_config()},
none,
none,
{some, apple_music_config()}}.
-file("src/inlay/embed.gleam", 291).
?DOC(
" Create an empty configuration with all providers disabled.\n"
" Enable providers selectively with the builder functions in the `inlay`\n"
" module.\n"
).
-spec new() -> config().
new() ->
{config,
none,
none,
none,
none,
none,
none,
none,
none,
none,
none,
none,
none,
none,
none}.