diff --git a/src/info/components/partner-card.js b/src/info/components/partner-card.js index 667ec29..bb79231 100644 --- a/src/info/components/partner-card.js +++ b/src/info/components/partner-card.js @@ -2,11 +2,11 @@ import Link from "next/link"; import Image from "next/image"; export function validURL(str) { - var pattern = new RegExp( + const pattern = new RegExp( "^(https?:\\/\\/)?" + // protocol "((([a-z\\d]([a-z\\d-]*[a-z\\d])*)\\.)+[a-z]{2,}|" + // domain name "((\\d{1,3}\\.){3}\\d{1,3}))" + // OR ip (v4) address - "(\\:\\d+)?(\\/[-a-z\\d%_.~+]*)*" + // port and path + "(\\:\\d+)?(\\/[-a-z\\d%_.~+$]*)*" + // port and path "(\\?[;&a-z\\d%_.~+=-]*)?" + // query string "(\\#[-a-z\\d_]*)?$", "i" @@ -14,7 +14,37 @@ export function validURL(str) { return !!pattern.test(str); } -export function renderPossibleURLField(field) { +export function replaceWithImageTags(index, str, emoji_path) { + if (index % 2 === 0) { + return

{`${str}`}

; + } else { + return ( + <> + + {str} + + + ); + } +} + +export function formatCustomEmoji(str, emoji_paths) { + const emoji_pattern = new RegExp(/(:[A-Za-z_-]+:)/, "g"); + const values = emoji_pattern[Symbol.split](str); + if (Boolean(emoji_paths)) { + return ( + <> + {Object.keys(values).map((v) => + replaceWithImageTags(v, values[v], emoji_paths[values[v]]) + )} + + ); + } else { + return <>; + } +} + +export function renderPossibleURLField(field, emoji_paths) { if (validURL(field)) { return ( @@ -28,18 +58,22 @@ export function renderPossibleURLField(field) { } else { return (
- {field} + {formatCustomEmoji(field, emoji_paths)}
); } } -export function renderPossibleFields(fields) { +export function renderPossibleFields(fields, emoji_paths) { if (Boolean(fields)) { return Object.keys(fields).map((field) => (
-
{renderPossibleURLField(field)}
-
{renderPossibleURLField(fields[field])}
+
+ {renderPossibleURLField(field, emoji_paths)} +
+
+ {renderPossibleURLField(fields[field], emoji_paths)} +
)); } else { @@ -47,24 +81,38 @@ export function renderPossibleFields(fields) { } } -export function renderPossibleBio(bio) { +export function renderPossibleBio(bio, emoji_paths) { if (Boolean(bio)) { let bioarray = bio.split("\n"); bioarray = bioarray.slice(0, bioarray.length - 1); const biodict = Object.assign({}, bioarray); return Object.keys(biodict).map((bio) => ( -
{biodict[bio] == "" ?
: biodict[bio]}
+
+ {biodict[bio] == "" ? ( +
+ ) : ( + formatCustomEmoji(biodict[bio], emoji_paths) + )} +
)); } else { return <>; } } -export default function PartnerCard({ src, alt, url, fields, bio, user }) { +export default function PartnerCard({ + src, + alt, + url, + fields, + bio, + user, + emoji_paths, +}) { const finalsrc = Boolean(src) ? src : "/images/logo.png"; return ( -
+
@@ -78,15 +126,15 @@ export default function PartnerCard({ src, alt, url, fields, bio, user }) {
- {renderPossibleBio(bio)} + {renderPossibleBio(bio, emoji_paths)} {`- @${user}`}
-
- {renderPossibleFields(fields)} +
+ {renderPossibleFields(fields, emoji_paths)}
); diff --git a/src/info/data/identities/partners.yml b/src/info/data/identities/partners.yml index 20cc963..d48ce06 100644 --- a/src/info/data/identities/partners.yml +++ b/src/info/data/identities/partners.yml @@ -9,7 +9,7 @@ lindsays: queeeeer: ":qhTrans: :qhPolyro: :qhPolyam:" LiberaPay: "https://liberapay.com/Lindsayschmocker" bio: | - Lindsay. She/her. US/CO. audio engineer, photographer, digital artist, sysadmin, network engineer, metal fabricator (hiatus on fabricating). very not vanilla. otherkin-furry on main. slowly converting into Judaism. always burning the candle for those we've lost. 🕯️ may their memories be for a blessing. Never again means NEVER again; SRA member. Black lives always have, do, and always will matter. + Lindsay. She/her. US/CO. audio engineer, photographer, digital artist, sysadmin, network engineer, metal fabricator (hiatus on fabricating). very not vanilla. otherkin-furry on main. slowly converting into Judaism. always burning the candle for those we've lost. :ms_candle: may their memories be for a blessing. Never again means NEVER again; SRA member. Black lives always have, do, and always will matter. ASK before DMing. @@ -41,5 +41,21 @@ karma: plausocks: url: "https://masto.werefox.dev/@plausocks" avi: "/images/plausocks.png" + fields: + Ko-fi: "https://ko-fi.com/plausocks" + Paypal: "https://paypal.me/plausocks" + CashApp: "https://cash.app/$plausocks" bio: | am cat, am gay + + ~Transgender 🏳️‍⚧️ ⚧️ (She/Her), Polyamorous :potion_polyamory: , ADHD, Plural :plural: (newly discovered/still discovering), most definitely neurodivergent :ms_neurodiversity:, CatGirl~ 🏳️‍🌈 + + Please don't follow me if you're under 18 🔞 + + Taken by 4 Partners~ + - @alexis@masto.werefox.dev 💙 :alexis: + - @aowora@vulpine.club 💜 :Elizafox: + - @violet@vulpine.club 💜 :violet_bat: + - @cdmnky@vulpine.club 💚 :sierra: + + I Live in Tulsa, Oklahoma diff --git a/src/info/pages/identities/partners/index.js b/src/info/pages/identities/partners/index.js index 71dcecf..95dc1b0 100644 --- a/src/info/pages/identities/partners/index.js +++ b/src/info/pages/identities/partners/index.js @@ -8,21 +8,51 @@ export async function getStaticProps() { const fs = require("fs"); const yaml = require("js-yaml"); let PARTNERS = {}; + let emoji_paths = {}; try { let fileContent = fs.readFileSync("./data/identities/partners.yml", "utf8"); PARTNERS = yaml.load(fileContent); + const emoji_pattern = new RegExp(/(:[A-Za-z_-]+:)/, "g"); + let emoji = []; + Object.keys(PARTNERS).forEach((p, i) => { + Array.from(emoji_pattern[Symbol.matchAll](PARTNERS[p].bio)).forEach( + (e, i) => { + emoji.push(e[0]); + } + ); + Object.keys(PARTNERS[p].fields).forEach((f, i) => { + Array.from(emoji_pattern[Symbol.matchAll](f)).forEach((e, i) => { + emoji.push(e[0]); + }); + Array.from( + emoji_pattern[Symbol.matchAll](PARTNERS[p].fields[f]) + ).forEach((e, i) => { + emoji.push(e[0]); + }); + }); + }); + emoji.forEach((e, i) => { + if (fs.existsSync(`./public/emoji/${e}.svg`)) { + emoji_paths[e] = `/emoji/${e}.svg`; + } else if (fs.existsSync(`./public/emoji/${e}.png`)) { + emoji_paths[e] = `/emoji/${e}.png`; + } else { + emoji_paths[e] = `/emoji/pixel_alexis.png`; + } + }); } catch (e) { console.log(e); } return { props: { PARTNERS, + emoji_paths, }, }; } -export default function Partners({ PARTNERS }) { +export default function Partners({ PARTNERS, emoji_paths }) { if (PARTNERS) { return ( ))} diff --git a/src/info/public/emoji/:Elizafox:.png b/src/info/public/emoji/:Elizafox:.png new file mode 100644 index 0000000..7f27e3c Binary files /dev/null and b/src/info/public/emoji/:Elizafox:.png differ diff --git a/src/info/public/emoji/:ms_candle:.svg b/src/info/public/emoji/:ms_candle:.svg new file mode 100644 index 0000000..6630ec5 --- /dev/null +++ b/src/info/public/emoji/:ms_candle:.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/info/public/emoji/:ms_neurodiversity:.svg b/src/info/public/emoji/:ms_neurodiversity:.svg new file mode 100644 index 0000000..e9a65da --- /dev/null +++ b/src/info/public/emoji/:ms_neurodiversity:.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/info/public/emoji/:plural:.png b/src/info/public/emoji/:plural:.png new file mode 100644 index 0000000..72fb803 Binary files /dev/null and b/src/info/public/emoji/:plural:.png differ diff --git a/src/info/public/emoji/:potion_polyamory:.png b/src/info/public/emoji/:potion_polyamory:.png new file mode 100644 index 0000000..a8ce6ed Binary files /dev/null and b/src/info/public/emoji/:potion_polyamory:.png differ diff --git a/src/info/public/emoji/:qhPolyam:.png b/src/info/public/emoji/:qhPolyam:.png new file mode 100644 index 0000000..e13eb89 Binary files /dev/null and b/src/info/public/emoji/:qhPolyam:.png differ diff --git a/src/info/public/emoji/:qhPolyro:.png b/src/info/public/emoji/:qhPolyro:.png new file mode 100644 index 0000000..f36d5c9 Binary files /dev/null and b/src/info/public/emoji/:qhPolyro:.png differ diff --git a/src/info/public/emoji/:qhTrans:.png b/src/info/public/emoji/:qhTrans:.png new file mode 100644 index 0000000..46527f1 Binary files /dev/null and b/src/info/public/emoji/:qhTrans:.png differ diff --git a/src/info/public/emoji/:sierra:.png b/src/info/public/emoji/:sierra:.png new file mode 100644 index 0000000..ec12343 Binary files /dev/null and b/src/info/public/emoji/:sierra:.png differ diff --git a/src/info/public/emoji/:violet_bat:.png b/src/info/public/emoji/:violet_bat:.png new file mode 100644 index 0000000..d832a92 Binary files /dev/null and b/src/info/public/emoji/:violet_bat:.png differ