— — — — — |
class App::LinkSite::Social {
our $VERSION = '0.0.13' ;
no if $] >= 5.038, 'warnings' , qw[experimental::signatures experimental::class] ;
field $service :reader :param;
field $handle :reader :param;
field $url :reader :param = undef ;
field $urls = {
facebook => {
name => 'Facebook' ,
},
'x-twitter' => {
name => 'X/Twitter' ,
},
instagram => {
name => 'Instagram' ,
},
tiktok => {
name => 'TikTok' ,
},
linkedin => {
name => 'LinkedIn' ,
},
substack => {
name => 'Substack' ,
},
github => {
name => 'GitHub' ,
},
medium => {
name => 'Medium' ,
},
reddit => {
name => 'Reddit' ,
},
quora => {
name => 'Quora' ,
},
mastodon => {
name => 'Mastodon' ,
},
threads => {
name => 'Threads' ,
},
bluesky => {
name => 'Bluesky' ,
},
letterboxd => {
name => 'Letterboxd' ,
},
lastfm => {
name => 'last.fm' ,
},
};
method mk_social_link {
return $url if $url ;
my $social_url ;
if ( exists $urls ->{ $service }) {
$social_url = $urls ->{ $service }{url};
} else {
warn ( 'Unknown social service: ' , $service );
return ;
}
if ( $social_url =~ /XXXX/) {
$social_url =~ s/XXXX/ $handle /g;
} else {
$social_url .= $handle ;
}
return $social_url ;
}
method social_icon_template {
return q[<a rel='me' title='%s' href='%s'><i class='fa-brands fa-3x fa-%s'></i></a>] ;
}
method mk_social_icon {
return sprintf $self ->social_icon_template,
$urls ->{ $service }{name}, $self ->mk_social_link(), $service ;
}
}
1;
|