mirror of
https://github.com/BradNut/awesome-uses
synced 2025-09-08 17:40:31 +00:00
clean up mastodon
This commit is contained in:
parent
4626abc17a
commit
69ba8b1118
3 changed files with 38226 additions and 35 deletions
38201
package-lock.json
generated
Normal file
38201
package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load diff
|
|
@ -13,46 +13,30 @@ export default function Person({ person }) {
|
||||||
const unavatar = person.twitter
|
const unavatar = person.twitter
|
||||||
? `${twitter}?fallback=${website}&ttl=28d`
|
? `${twitter}?fallback=${website}&ttl=28d`
|
||||||
: website;
|
: website;
|
||||||
// const img = `https://images.weserv.nl/?url=${unavatar}&w=100&l=9&af&il&n=-1`;
|
const [_, mastodonHandle, mastodonServer] = person.mastodon?.split('@') || [];
|
||||||
const mastodonArr = person.mastodon
|
|
||||||
? person.mastodon.replace('@', '').split('@')
|
|
||||||
: null;
|
|
||||||
const webfinger =
|
|
||||||
person.mastodon
|
|
||||||
? JSON.parse(`https://${mastodonArr[0]}/.well-known/webfinger?resource=https://${mastodonArr[0]}/@${mastodonArr[1]}`)
|
|
||||||
: null;
|
|
||||||
const wfIndex =
|
|
||||||
person.mastodon && webfinger
|
|
||||||
? webfinger.links.findIndex((link) => link.rel === 'http://webfinger.net/rel/avatar')
|
|
||||||
: null;
|
|
||||||
const wfAvatar =
|
|
||||||
person.mastodon && wfIndex
|
|
||||||
? webfinger.links[wfIndex].href
|
|
||||||
: website;
|
|
||||||
const img = person.twitter ? unavatar : (person.mastodon ? wfAvatar : website);
|
|
||||||
const { tag: currentTag } = useParams();
|
const { tag: currentTag } = useParams();
|
||||||
return (
|
return (
|
||||||
<div
|
<div
|
||||||
className="PersonWrapper"
|
className="PersonWrapper"
|
||||||
style={{ contentVisibility: 'auto', containIntrinsicHeight: '560px' }}
|
style={{ contentVisibility: "auto", containIntrinsicHeight: "560px" }}
|
||||||
>
|
>
|
||||||
<div className="PersonInner">
|
<div className="PersonInner">
|
||||||
<header>
|
<header>
|
||||||
<img
|
<img
|
||||||
width="50"
|
width="50"
|
||||||
height="50"
|
height="50"
|
||||||
src={img}
|
src={unavatar}
|
||||||
alt={person.name}
|
alt={person.name}
|
||||||
onError={({ currentTarget }) => {
|
onError={({ currentTarget }) => {
|
||||||
currentTarget.onerror = null; // prevents looping
|
currentTarget.onerror = null; // prevents looping
|
||||||
currentTarget.src = '/default.png';
|
currentTarget.src = "/default.png";
|
||||||
}}
|
}}
|
||||||
loading="lazy"
|
loading="lazy"
|
||||||
/>
|
/>
|
||||||
<h3>
|
<h3>
|
||||||
<a href={person.url} target="_blank" rel="noopener noreferrer">
|
<a href={person.url} target="_blank" rel="noopener noreferrer">
|
||||||
{person.name}
|
{person.name}
|
||||||
</a>{' '}
|
</a>{" "}
|
||||||
{person.emoji}
|
{person.emoji}
|
||||||
</h3>
|
</h3>
|
||||||
<a
|
<a
|
||||||
|
|
@ -62,14 +46,14 @@ export default function Person({ person }) {
|
||||||
href={person.url}
|
href={person.url}
|
||||||
>
|
>
|
||||||
{url.host}
|
{url.host}
|
||||||
{url.pathname.replace(/\/$/, '')}
|
{url.pathname.replace(/\/$/, "")}
|
||||||
</a>
|
</a>
|
||||||
</header>
|
</header>
|
||||||
<p>{person.description}</p>
|
<p>{person.description}</p>
|
||||||
<ul className="Tags">
|
<ul className="Tags">
|
||||||
{person.tags.map((tag) => (
|
{person.tags.map((tag) => (
|
||||||
<li
|
<li
|
||||||
className={`Tag small ${tag === currentTag ? 'currentTag' : ''}`}
|
className={`Tag small ${tag === currentTag ? "currentTag" : ""}`}
|
||||||
key={tag}
|
key={tag}
|
||||||
>
|
>
|
||||||
{tag}
|
{tag}
|
||||||
|
|
@ -96,23 +80,29 @@ export default function Person({ person }) {
|
||||||
</span>
|
</span>
|
||||||
)}
|
)}
|
||||||
|
|
||||||
{(person.twitter || person.mastodon) && (
|
{person.twitter && (
|
||||||
<div className="SocialHandle">
|
<div className="SocialHandle">
|
||||||
<a
|
<a
|
||||||
href={
|
href={`https://twitter.com/${person.twitter.replace("@", "")}`}
|
||||||
person.twitter
|
|
||||||
? `https://twitter.com/${person.twitter.replace('@', '')}`
|
|
||||||
: `https://${mastodonArr[1]}/@${mastodonArr[0]}`
|
|
||||||
}
|
|
||||||
target="_blank"
|
target="_blank"
|
||||||
rel="noopener noreferrer"
|
rel="noopener noreferrer"
|
||||||
>
|
>
|
||||||
<span className="at">@</span>
|
<span className="at">@</span>
|
||||||
{
|
{person.twitter.replace("@", "")}
|
||||||
person.twitter
|
</a>
|
||||||
? person.twitter.replace('@', '')
|
</div>
|
||||||
: `${mastodonArr[1]}/@${mastodonArr[0]}`
|
)}
|
||||||
}
|
|
||||||
|
{/* If they have a mastodon, and no twitter, show that */}
|
||||||
|
{person.mastodon && !person.twitter && (
|
||||||
|
<div className="SocialHandle">
|
||||||
|
<a
|
||||||
|
href={`https://${mastodonServer}/@${mastodonHandle}`}
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener noreferrer"
|
||||||
|
>
|
||||||
|
<span className="at">@</span>
|
||||||
|
{mastodonHandle}
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,7 @@ export async function loader({ params }: LoaderArgs) {
|
||||||
}
|
}
|
||||||
|
|
||||||
export default function Index() {
|
export default function Index() {
|
||||||
const { people } = useLoaderData();
|
const { people } = useLoaderData<ReturnType<typeof loader>>();
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<Topics />
|
<Topics />
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue