Adding autogen instance data. Fixes #29

This commit is contained in:
Dessalines 2021-06-16 19:13:36 -04:00
parent 625b5a5139
commit fa6dc565cf
9 changed files with 116 additions and 324 deletions

4
.gitmodules vendored
View file

@ -10,3 +10,7 @@
path = lemmy-translations path = lemmy-translations
url = https://github.com/lemmynet/lemmy-translations url = https://github.com/lemmynet/lemmy-translations
branch = main branch = main
[submodule "lemmy-instance-stats"]
path = lemmy-instance-stats
url = https://github.com/LemmyNet/lemmy-instance-stats
branch = main

View file

@ -3,8 +3,22 @@ const fs = require("fs");
const translationDir = "joinlemmy-translations/translations/"; const translationDir = "joinlemmy-translations/translations/";
const outDir = "src/shared/translations/"; const outDir = "src/shared/translations/";
const translatorsJsonFile = "lemmy-translations/translators.json"; const translatorsJsonFile = "lemmy-translations/translators.json";
const statsFile = "lemmy-instance-stats/stats.json";
fs.mkdirSync(outDir, { recursive: true }); fs.mkdirSync(outDir, { recursive: true });
// Write the stats file
try {
const json = JSON.parse(fs.readFileSync(statsFile, "utf8"));
let data = `export const instance_stats = \n `;
data += JSON.stringify(json, null, 2) + ";";
const target = outDir + "instance_stats.ts";
fs.writeFileSync(target, data);
} catch (err) {
console.error(err);
}
// Write the translations
fs.readdir(translationDir, (_err, files) => { fs.readdir(translationDir, (_err, files) => {
files.forEach(filename => { files.forEach(filename => {
const lang = filename.split(".")[0]; const lang = filename.split(".")[0];

@ -1 +1 @@
Subproject commit ebe8ea2849178fcc5c36c769ced31dbb3c14a78f Subproject commit 922a2219bd850bdfdf1ba6c92fccf5bd4db66f44

1
lemmy-instance-stats Submodule

@ -0,0 +1 @@
Subproject commit cf294efd45886f60522eb6c021813c5e2c851d9b

View file

@ -76,8 +76,8 @@ server.get("/*", async (req, res) => {
height: 100%; height: 100%;
background: background:
linear-gradient( linear-gradient(
rgba(0, 0, 0, 0.0), rgba(0, 0, 0, 0.5),
rgba(0, 0, 0, 0.0) rgba(0, 0, 0, 0.5)
), ),
url('/static/assets/images/main_img.webp'); url('/static/assets/images/main_img.webp');
-webkit-filter: blur(7px); -webkit-filter: blur(7px);

View file

@ -1,336 +1,70 @@
import { Component } from "inferno"; import { Component } from "inferno";
import { Helmet } from "inferno-helmet"; import { Helmet } from "inferno-helmet";
import { i18n } from "../i18next"; import { i18n } from "../i18next";
import { instance_stats } from "../translations/instance_stats";
import { numToSI } from "../utils";
const title = i18n.t("join_title"); const title = i18n.t("join_title");
// TODO wait until new lemmy-instances is written to refactor this
export class Instances extends Component<any, any> { export class Instances extends Component<any, any> {
constructor(props: any, context: any) { constructor(props: any, context: any) {
super(props, context); super(props, context);
} }
header() {
return (
<i>
{i18n.t("instance_totals", {
instances: numToSI(instance_stats.crawled_instances),
users: numToSI(instance_stats.total_users),
})}
</i>
);
}
render() { render() {
let instances = instance_stats.instance_details;
return ( return (
<div> <div>
<Helmet title={title}> <Helmet title={title}>
<meta property={"title"} content={title} /> <meta property={"title"} content={title} />
</Helmet> </Helmet>
<div class="container"> <div class="container">
<h1>{i18n.t("lemmy_servers")}</h1> <h1 class="is-marginless">{i18n.t("lemmy_servers")}</h1>
{this.header()}
<br />
<br />
<p>{i18n.t("choose_and_join")}</p> <p>{i18n.t("choose_and_join")}</p>
<div class="row"> <div class="row">
{instances.map(i => (
<div class="card col-6"> <div class="card col-6">
<header> <header>
<div class="row"> <div class="row">
<h4 class="col">lemmy.ml</h4> <h4 class="col">{i.domain}</h4>
<h4 class="col text-right"> <h4 class="col text-right">
<i>5.9k users</i> <i>
{numToSI(i.users_active_month)} {i18n.t("users")} /{" "}
{i18n.t("month")}
</i>
</h4> </h4>
</div> </div>
</header> </header>
<div class="is-center"> <div class="is-center">
<img <img
class="join-banner" class="join-banner"
src="/static/assets/images/lemmy.svg" src={i.icon || "/static/assets/images/lemmy.svg"}
/> />
</div> </div>
<br /> <br />
<p class="join-desc">The flagship instance of lemmy.</p> <p class="join-desc">{i.description}</p>
<footer> <footer>
<a class="button primary" href="https://lemmy.ml"> <a class="button primary" href={`https://${i.domain}`}>
Join
</a>
</footer>
</div>
<div class="card col-6">
<header>
<div class="row">
<h4 class="col">lemmygrad.ml</h4>
<h4 class="col text-right">
<i>2.3k users</i>
</h4>
</div>
</header>
<div class="is-center">
<img
class="join-banner"
src="https://lemmygrad.ml/pictrs/image/YI2XNWaVUv.png?format=webp"
/>
</div>
<br />
<p class="join-desc">
A collection of leftist communities, for memes, learning, news,
discussion, media, or anything you like.
</p>
<footer>
<a class="button primary" href="https://lemmygrad.ml">
Join
</a>
</footer>
</div>
<div class="card col-6">
<header>
<div class="row">
<h4 class="col">lemmy.161.social</h4>
<h4 class="col text-right">
<i>50 users</i>
</h4>
</div>
</header>
<div class="is-center">
<img
class="join-banner"
src="https://lemmy.161.social/pictrs/image/n3Stw3I1g0.png?format=webp"
/>
</div>
<br />
<p class="join-desc">
An anti-authoritarian and emancipatory space for german speaking
anti-fascists.
</p>
<footer>
<a class="button primary" href="https://lemmy.161.social">
Join
</a>
</footer>
</div>
<div class="card col-6">
<header>
<div class="row">
<h4 class="col">baraza.africa</h4>
<h4 class="col text-right">
<i>20 users</i>
</h4>
</div>
</header>
<div class="is-center">
<img
class="join-banner"
src="/static/assets/images/lemmy.svg"
/>
</div>
<br />
<p class="join-desc">
baraza is a digital public square as imagined in Bantu
philosophy, one premised on the assumption that deliberative
dialogue is a path to better societies.
</p>
<footer>
<a class="button primary" href="https://baraza.africa">
Join
</a>
</footer>
</div>
<div class="card col-6">
<header>
<div class="row">
<h4 class="col">lemmy.glasgow.social</h4>
<h4 class="col text-right">
<i>60 users</i>
</h4>
</div>
</header>
<div class="is-center">
<img
class="join-banner"
src="https://glasgow.social/system/site_uploads/files/000/000/001/original/fuller_street1_sq.jpg?1579523706"
/>
</div>
<br />
<p class="join-desc">
A place for communities in and around Glasgow, Scotland.
</p>
<footer>
<a class="button primary" href="https://lemmy.glasgow.social">
Join
</a>
</footer>
</div>
<div class="card col-6">
<header>
<div class="row">
<h4 class="col">lemmy.cat</h4>
<h4 class="col text-right">
<i>30 users</i>
</h4>
</div>
</header>
<div class="is-center">
<img
class="join-banner"
src="https://lemmy.cat/pictrs/image/p63LCl9dD2.jpg?format=webp&thumbnail=3000"
/>
</div>
<br />
<p class="join-desc">
A Lemmy instance for people of Catalan culture.
</p>
<footer>
<a class="button primary" href="https://lemmy.cat">
Join
</a>
</footer>
</div>
<div class="card col-6">
<header>
<div class="row">
<h4 class="col">lemmy.ca</h4>
<h4 class="col text-right">
<i>11 users</i>
</h4>
</div>
</header>
<div class="is-center">
<img
class="join-banner"
src="https://lemmy.ca/pictrs/image/YMyO670EYs.png?format=webp&thumbnail=3000"
/>
</div>
<br />
<p class="join-desc">
A Lemmy geared toward Canucks, hosted in Canuckistan, and run by
a Canuck.
</p>
<footer>
<a class="button primary" href="https://lemmy.ca">
Join
</a>
</footer>
</div>
<div class="card col-6">
<header>
<div class="row">
<h4 class="col">lemmy.eus</h4>
<h4 class="col text-right">
<i>100 users</i>
</h4>
</div>
</header>
<div class="is-center">
<img
class="join-banner"
src="/static/assets/images/lemmy.svg"
/>
</div>
<br />
<p class="join-desc">A Basque Lemmy instance.</p>
<footer>
<a class="button primary" href="https://lemmy.eus">
Join
</a>
</footer>
</div>
<div class="card col-6">
<header>
<div class="row">
<h4 class="col">sopuli.xyz</h4>
<h4 class="col text-right">
<i>10 users</i>
</h4>
</div>
</header>
<div class="is-center">
<img
class="join-banner"
src="https://sopuli.xyz/pictrs/image/RmuyRzuchU.png?format=webp&thumbnail=3000"
/>
</div>
<br />
<p class="join-desc">A general-purpose Finnish instance.</p>
<footer>
<a class="button primary" href="https://sopuli.xyz">
Join
</a>
</footer>
</div>
<div class="card col-6">
<header>
<div class="row">
<h4 class="col">stammtisch.hallertau.social</h4>
<h4 class="col text-right">
<i>~10 users</i>
</h4>
</div>
</header>
<div class="is-center">
<img
class="join-banner"
src="https://stammtisch.hallertau.social/pictrs/image/TbUbi4vFwZ.jpg?format=webp&thumbnail=3000"
/>
</div>
<br />
<p class="join-desc">Sitz de hera, samma mehra.</p>
<footer>
<a
class="button primary"
href="https://stammtisch.hallertau.social"
>
Join
</a>
</footer>
</div>
<div class="card col-6">
<header>
<div class="row">
<h4 class="col">szmer.info</h4>
<h4 class="col text-right">
<i>300 users</i>
</h4>
</div>
</header>
<div class="is-center">
<img
class="join-banner"
src="/static/assets/images/lemmy.svg"
/>
</div>
<br />
<p class="join-desc">A polish anti-fascist instance.</p>
<footer>
<a class="button primary" href="https://szmer.info">
Join
</a>
</footer>
</div>
<div class="card col-6">
<header>
<div class="row">
<h4 class="col">diversa.social</h4>
<h4 class="col text-right">
<i>~ 10 users</i>
</h4>
</div>
</header>
<div class="is-center">
<img
class="join-banner"
src="https://diversa.social/pictrs/image/Slw1Nu62Gm.png?format=webp&thumbnail=3000"
/>
</div>
<br />
<p class="join-desc">
Instancia multitemática en español con un enfoque constructivo y
solidario.
</p>
<footer>
<a class="button primary" href="https://diversa.social">
Join Join
</a> </a>
</footer> </footer>
</div> </div>
))}
</div> </div>
</div> </div>
</div> </div>

View file

@ -3,3 +3,27 @@ let DOCS_LANGUAGES = ["en", "es", "fr"];
export function getDocsLanguage(lang: string): string { export function getDocsLanguage(lang: string): string {
return DOCS_LANGUAGES.includes(lang) ? lang : "en"; return DOCS_LANGUAGES.includes(lang) ? lang : "en";
} }
export function numToSI(value: any) {
var newValue = value;
if (value >= 1000) {
var suffixes = ["", "k", "m", "b", "t"];
var suffixNum = Math.floor(("" + value).length / 3);
var shortValue: any = "";
for (var precision = 2; precision >= 1; precision--) {
shortValue = parseFloat(
(suffixNum != 0
? value / Math.pow(1000, suffixNum)
: value
).toPrecision(precision)
);
var dotLessShortValue = (shortValue + "").replace(/[^a-zA-Z 0-9]+/g, "");
if (dotLessShortValue.length <= 2) {
break;
}
}
if (shortValue % 1 != 0) shortValue = shortValue.toFixed(1);
newValue = shortValue + suffixes[suffixNum];
}
return newValue;
}

25
update_submodules.sh Executable file
View file

@ -0,0 +1,25 @@
#!/bin/bash
pushd ../joinlemmy-translations
git fetch weblate
git merge weblate/main
git push
popd
pushd ../lemmy-translations
git fetch weblate
git merge weblate/main
git push
popd
pushd ../lemmy-instance-stats
./update.sh
popd
git submodule update --remote
git add joinlemmy-translations
git add lemmy-translations
git add lemmy-instance-stats
git commit -m"Updating submodules"
git push

View file

@ -1,10 +0,0 @@
#!/bin/bash
pushd ../joinlemmy-translations
git fetch weblate
git merge weblate/main
git push
popd
git submodule update --remote
git add joinlemmy-translations
git commit -m"Updating joinlemmy-translations."
git push