Merge pull request #158 from PretendoNetwork/dev

hotfixes
This commit is contained in:
mrjvs 2022-09-20 18:49:31 +02:00 committed by GitHub
commit a01e9a1844
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
21 changed files with 193 additions and 290 deletions

View File

@ -1,73 +0,0 @@
# Altra documentazione
Siamo un gruppo di programmer che spendono il loro tempo libero a sviluppare e fare reverse-engineering per i server online per la 3DS e Wii U.
Siamo un gruppo di programmer che spendono il loro tempo libero a sviluppare e fare reverse-engineering per i server online per la 3DS e Wii U.
Siamo un gruppo di programmer che spendono il loro tempo libero a sviluppare e fare reverse-engineering per i server online per la 3DS e Wii U.
```javascript
function returnTrue() {
class trueOrFalseObject {
constructor(trueOrFalse) {
this.trueOrFalse = trueOrFalse;
}
get trueOrFalse() {
return this.trueOrFalse();
}
convertNumberToBoolean(trueOrFalse) {
if (convertStringToNumber(trueOrFalse) === 0) {
return true;
} else if (convertStringToNumber(trueOrFalse) == 1) {
return false;
}
}
convertStringToNumber(trueOrFalse) {
if (trueOrFalse === "true") {
return 0;
} else if (trueOrFalse === "false") {
return true * 69 - 1 - false * 69 * 420 - 69 + 2;
}
}
trueOrFalse() {
return this.convertNumberToBoolean(trueOrFalse);
}
}
let objectWhichWeKnowIsTrue = new trueOrFalseObject("true");
function checkIfTrueOrFalse(objectToCheckIfTrueOrFalse) {
if (objectToCheckIfTrueOrFalse === objectWhichWeKnowIsTrue.trueOrFalse) {
return objectWhichWeKnowIsTrue.trueOrFalse;
console.log(
"Successfully checked if the object is true or false. Result: the object is true."
);
// TODO: fix text not console logging
} else {
objectWhichWeKnowIsTrue = new trueOrFalseObject("false");
if (objectToCheckIfTrueOrFalse === objectWhichWeKnowIsTrue.trueOrFalse) {
return objectWhichWeKnowIsTrue.trueOrFalse;
console.log(
"Successfully checked if the object is true or false. Result: the object is false."
);
// TODO: fix text not console logging
} else {
// something went horribly wrong
}
objectWhichWeKnowIsTrue = new trueOrFalseObject("true");
}
}
const isTrueTrueOrFalse = checkIfTrueOrFalse("true");
const isfalseTrueOrFalse = checkIfTrueOrFalse("false");
const trueOrFalseJSON = {
true: isTrueTrueOrFalse,
false: isfalseTrueOrFalse,
};
return trueOrFalseJSON.true
}
console.log(returnTrue())
```

View File

@ -7,6 +7,7 @@
"progress": "Progress",
"blog": "Blog",
"account": "Account",
"donate": "Donate",
"accountWidget": {
"settings": "Settings",
"logout": "Logout"
@ -237,6 +238,7 @@
"publishedOn": "on"
},
"account": {
"account": "Account",
"loginForm": {
"login": "Login",
"register": "Register",
@ -254,7 +256,9 @@
"downloadFiles": "Download account files",
"downloadFilesDescription": "(will not work on Nintendo Network)",
"upgrade": "Upgrade account",
"unavailable": "Unavailable",
"settingCards": {
"userSettings": "User settings",
"profile": "Profile",
"nickname": "Nickname",
"birthDate": "Birth date",
@ -280,7 +284,10 @@
"linkDiscord": "Link Discord account",
"newsletter": "Newsletter",
"newsletterPrompt": "Receive project updates via email (you can opt-out at any time)",
"passwordPrompt": "Enter your PNID password to download Cemu files"
"passwordPrompt": "Enter your PNID password to download Cemu files",
"no_signins_notice": "Sign in history not currently tracked. Check back again later!",
"no_newsletter_notice": "Newsletter not currently available. Check back again later",
"no_edit_from_dashboard": "Editing PNID settings from user dashboard is currently unavailable. Please update user settings from your linked game console"
}
},
"accountLevel": [
@ -330,10 +337,26 @@
"caption": "Search for it here"
}
]
},
"search": {
"title": "Got an error code?",
"caption": "Type it in the box below to get information on your issue!",
"label": "Error code",
"no_match": "No matches found"
},
"sidebar": {
"getting_started": "Getting started",
"welcome": "Welcome",
"install_extended": "Install Pretendo",
"install": "Install",
"search": "Search",
"juxt_err": "Error codes - Juxt"
}
},
"modals": {
"cancel": "Cancel",
"confirm": "Confirm"
"confirm": "Confirm",
"close": "Close"
}
}

View File

@ -70,7 +70,11 @@ router.get('/', requireLoginMiddleware, async (request, response) => {
});
router.get('/login', async (request, response) => {
response.render('account/login');
const renderData = {
error: request.cookies.error_message
};
response.render('account/login', renderData);
});
router.post('/login', async (request, response) => {
@ -97,6 +101,7 @@ router.get('/register', async (request, response) => {
email: request.cookies.email,
username: request.cookies.username,
mii_name: request.cookies.mii_name,
error: request.cookies.error_message
};
response.clearCookie('email', { domain: '.pretendo.network' });

View File

@ -12,7 +12,6 @@ const database = require('./database');
const util = require('./util');
const logger = require('./logger');
const config = require('../config.json');
const defaultLocale = require('../locales/en_US.json');
const { http: { port } } = config;
const app = express();
@ -137,56 +136,6 @@ app.engine('handlebars', handlebars({
neq(value1, value2) {
return value1 !== value2;
},
times(n, block) {
let accum = '';
for(let i = 0; i < n; i++) {
accum += block.fn(i);
}
return accum;
},
localeHelper(locale, propString, propVar, extra) {
/*
locale: the json locale object
propString: the "path" to the property to get (e.g. "faq.title")
propVar: the dynamic property name to get after the "path" (e.g. localeHelper locale "account.level" would result in )
e.g. localeHelper locale "account.test" "account.level" would result in locale.account.test[account.level]
*/
let value = locale;
const props = propString.split('.');
if ( typeof propVar === 'string' || propVar instanceof String ||
typeof propVar === 'number' || propVar instanceof Number ) {
props.push(propVar);
}
function getPropFromLocale(value, props) {
for (const p of props) {
value = value[p];
}
return value;
}
// fall back to english if the prop doesn't exist in the current locale
try {
value = getPropFromLocale(value, props);
} catch (e) {
value = defaultLocale;
try {
value = getPropFromLocale(value, props);
} catch (e) {
logger.error(`Could not find locale property ${props.join('.')}`);
}
}
// TODO: Make this more dynamic
if (extra) {
value = value[extra];
}
return value;
},
slug(string) {
return string.toLowerCase().replaceAll(/ /g, '-');
}

View File

@ -6,11 +6,14 @@ const Stripe = require('stripe');
const { marked } = require('marked');
const { REST: DiscordRest } = require('@discordjs/rest');
const { Routes: DiscordRoutes } = require('discord-api-types/v10');
const merge = require('lodash.merge');
const mailer = require('./mailer');
const database = require('./database');
const logger = require('./logger');
const config = require('../config.json');
const config = require('../config.json');
const baseLocale = require(`${__dirname}/../locales/en_US.json`);
const discordRest = new DiscordRest({ version: '10' }).setToken(config.discord.bot_token);
const stripe = new Stripe(config.stripe.secret_key);
@ -23,12 +26,15 @@ function getLocale(language, region) {
const path = `${__dirname}/../locales/${language}_${region}.json`;
if (fs.pathExistsSync(path)) {
return require(path);
const selectedLocale = require(path);
const finalLocale = merge(baseLocale, selectedLocale);
return finalLocale;
}
logger.warn(`Could not find locale ${language}_${region}! Loading en_US`);
return require(`${__dirname}/../locales/en_US.json`);
return baseLocale;
}
function getRawDocs(locale, subpath, pageName) {

View File

@ -16,29 +16,29 @@
<p class="tier-name tier-level-{{tierLevel}}" value="{{tierName}}">{{tierName}}</p>
{{else}}
{{#if (neq account.access_level -1)}}
<p class="tier-name access-level-{{account.access_level}}" value="{{ localeHelper locale "account.accountLevel" account.access_level }}">{{ localeHelper locale "account.accountLevel" account.access_level }}</p>
<p class="tier-name access-level-{{account.access_level}}" value="{{ lookup locale.account.accountLevel account.access_level }}">{{ lookup locale.account.accountLevel account.access_level }}</p>
{{else}}
<p class="tier-name access-level-banned" value="{{ localeHelper locale "account.banned" }}">{{ localeHelper locale "account.banned" }}</p>
<p class="tier-name access-level-banned" value="{{ locale.account.banned }}">{{ locale.account.banned }}</p>
{{/if}}
{{/if}}
</div>
<div class="buttons">
<a class="button secondary" id="download-cemu-files" href="/account/online-files" download>
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-download"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"></path><polyline points="7 10 12 15 17 10"></polyline><line x1="12" y1="15" x2="12" y2="3"></line></svg>
<p class="caption">{{ localeHelper locale "account.settings.downloadFiles" }}</p>
<p class="cemu-warning">{{ localeHelper locale "account.settings.downloadFilesDescription" }}</p>
<p class="caption">{{ locale.account.settings.downloadFiles }}</p>
<p class="cemu-warning">{{ locale.account.settings.downloadFilesDescription }}</p>
</a>
<a class="button secondary" id="account-upgrade" href="/account/upgrade">
<p class="caption">{{ localeHelper locale "account.settings.upgrade" }}</p>
<p class="caption">{{ locale.account.settings.upgrade }}</p>
</a>
</div>
</div>
<div class="settings-wrapper">
<h2 class="section-header" id="user-settings">User settings</h2>
<h2 class="section-header" id="user-settings">{{ locale.account.settings.settingCards.userSettings }}</h2>
<div class="setting-card">
<h2 class="header">{{ localeHelper locale "account.settings.settingCards.profile" }}</h2>
<h2 class="header">{{ locale.account.settings.settingCards.profile }}</h2>
<a href="/account/edit/profile" class="edit">
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="M17 3a2.828 2.828 0 1 1 4 4L7.5 20.5 2 22l1.5-5.5L17 3z"></path>
@ -46,30 +46,30 @@
</a>
<ul class="setting-list">
<li>
<p class="label">{{ localeHelper locale "account.settings.settingCards.nickname" }}</p>
<p class="label">{{ locale.account.settings.settingCards.nickname }}</p>
<p class="value">{{account.mii.name}}</p>
</li>
<li>
<p class="label">{{ localeHelper locale "account.settings.settingCards.birthDate" }}</p>
<p class="label">{{ locale.account.settings.settingCards.birthDate }}</p>
<p class="value">{{account.birthdate}}</p>
</li>
<li>
<p class="label">{{ localeHelper locale "account.settings.settingCards.gender" }}</p>
<p class="label">{{ locale.account.settings.settingCards.gender }}</p>
<p class="value">{{account.gender}}</p>
</li>
<li>
<p class="label">{{ localeHelper locale "account.settings.settingCards.country" }}</p>
<p class="label">{{ locale.account.settings.settingCards.country }}</p>
<p class="value">{{account.country}}</p>
</li>
<li>
<p class="label">{{ localeHelper locale "account.settings.settingCards.timezone" }}</p>
<p class="label">{{ locale.account.settings.settingCards.timezone }}</p>
<p class="value">{{account.timezone.name}}</p>
</li>
</ul>
</div>
<div class="setting-card">
<h2 class="header">{{ localeHelper locale "account.settings.settingCards.serverEnv" }}</h2>
<h2 class="header">{{ locale.account.settings.settingCards.serverEnv }}</h2>
<fieldset {{#unless isTester}}disabled{{/unless}}>
<form class="server-selection" id="server">
<input type="radio" id="prod" name="server_selection" value="prod" checked="{{ eq account.server_access_level 'prod'}}">
@ -82,7 +82,7 @@
<polyline points="3.27 6.96 12 12.01 20.73 6.96"></polyline>
<line x1="12" y1="22.08" x2="12" y2="12"></line>
</svg>
<h2>{{ localeHelper locale "account.settings.settingCards.production" }}</h2>
<h2>{{ locale.account.settings.settingCards.production }}</h2>
</label>
{{#if isTester}}
<input type="radio" id="beta" name="server_selection" value="beta" checked="{{ neq account.server_access_level 'prod'}}">
@ -90,21 +90,21 @@
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<polygon points="2,21 22,21 14,11.5 14,5 10,3 10,11.5"></polygon>
</svg>
<h2>{{ localeHelper locale "account.settings.settingCards.beta" }}</h2>
<h2>{{ locale.account.settings.settingCards.beta }}</h2>
</label>
{{/if}}
</form>
</fieldset>
{{#unless isTester}}
<p>{{{ localeHelper locale "account.settings.settingCards.upgradePrompt" }}}</p>
<p>{{{ locale.account.settings.settingCards.upgradePrompt }}}</p>
{{else}}
<p>{{ localeHelper locale "account.settings.settingCards.hasAccessPrompt" }}</p>
<p>{{ locale.account.settings.settingCards.hasAccessPrompt }}</p>
{{/unless}}
</div>
<h2 class="section-header" id="security">{{ localeHelper locale "account.settings.settingCards.signInSecurity" }}</h2>
<h2 class="section-header" id="security">{{ locale.account.settings.settingCards.signInSecurity }}</h2>
<div class="setting-card">
<h2 class="header">Account</h2>
<h2 class="header">{{ locale.account.account }}</h2>
<a href="/account/edit/login-info" class="edit">
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="M17 3a2.828 2.828 0 1 1 4 4L7.5 20.5 2 22l1.5-5.5L17 3z"></path>
@ -112,20 +112,20 @@
</a>
<ul class="setting-list">
<li>
<p class="label">{{ localeHelper locale "account.settings.settingCards.email" }}</p>
<p class="label">{{ locale.account.settings.settingCards.email }}</p>
<p class="value">{{account.email.address}}</p>
</li>
<li>
<p class="label">{{ localeHelper locale "account.settings.settingCards.password" }}</p>
<p class="label">{{ locale.account.settings.settingCards.password }}</p>
<p class="value">●●●●●●●●</p>
</li>
</ul>
<p>{{ localeHelper locale "account.settings.settingCards.passwordResetNotice" }}</p>
<p>{{ locale.account.settings.settingCards.passwordResetNotice }}</p>
</div>
<div class="setting-card sign-in-history">
<h2 class="header">{{ localeHelper locale "account.settings.settingCards.signInHistory" }}</h2>
<p>Sign in history not currently tracked. Check back again later</p>
<h2 class="header">{{ locale.account.settings.settingCards.signInHistory }}</h2>
<p>{{ locale.account.settings.settingCards.no_signins_notice }}</p>
<ul class="setting-list">
{{#each account.devices }}
<li>
@ -135,30 +135,30 @@
{{/each}}
</ul>
<a href="/account/sign-in-history">
<button class="button secondary">{{ localeHelper locale "account.settings.settingCards.fullSignInHistory" }}</button>
<button class="button secondary">{{ locale.account.settings.settingCards.fullSignInHistory }}</button>
</a>
</div>
<h2 class="section-header" id="other">{{ localeHelper locale "account.settings.settingCards.otherSettings" }}</h2>
<h2 class="section-header" id="other">{{ locale.account.settings.settingCards.otherSettings }}</h2>
<div class="setting-card">
<h2 class="header">{{ localeHelper locale "account.settings.settingCards.discord" }}</h2>
<h2 class="header">{{ locale.account.settings.settingCards.discord }}</h2>
{{#if discordUser}}
<p>{{ localeHelper locale "account.settings.settingCards.connectedToDiscord" }} {{ discordUser.username }}#{{ discordUser.discriminator }}</p>
<p>{{ locale.account.settings.settingCards.connectedToDiscord }} {{ discordUser.username }}#{{ discordUser.discriminator }}</p>
<a href="/account/remove/discord">
<button class="button secondary" id="remove-discord-connection">{{ localeHelper locale "account.settings.settingCards.removeDiscord" }}</button>
<button class="button secondary" id="remove-discord-connection">{{ locale.account.settings.settingCards.removeDiscord }}</button>
</a>
{{else}}
<p>{{ localeHelper locale "account.settings.settingCards.noDiscordLinked" }} <a href="{{ discordAuthURL }}">{{ localeHelper locale "account.settings.settingCards.linkDiscord" }}</a></p>
<p>{{ locale.account.settings.settingCards.noDiscordLinked }} <a href="{{ discordAuthURL }}">{{ locale.account.settings.settingCards.linkDiscord }}</a></p>
{{/if}}
</div>
<div class="setting-card">
<h2 class="header">{{ localeHelper locale "account.settings.settingCards.newsletter" }}</h2>
<p>Newsletter not currently available. Check back again later</p>
<h2 class="header">{{ locale.account.settings.settingCards.newsletter }}</h2>
<p>{{ locale.account.settings.settingCards.no_newsletter_notice }}</p>
<!--
<form id="other">
<input type="checkbox" id="marketing" name="marketing" {{#if account.flags.marketing}}checked{{/if}}>
<label for="marketing">{{ localeHelper locale "account.settings.settingCards.newsletterPrompt" }}</label>
<label for="marketing">{{ locale.account.settings.settingCards.newsletterPrompt }}</label>
</form>
-->
</div>
@ -185,23 +185,22 @@
<div class="modal-wrapper hidden" id="onlinefiles">
<div class="modal">
<h1 class="title dot">{{ localeHelper locale "account.settings.settingCards.password" }}</h1>
<p class="modal-caption">{{ localeHelper locale "account.settings.settingCards.passwordPrompt" }}</p>
<h1 class="title dot">{{ locale.account.settings.settingCards.password }}</h1>
<p class="modal-caption">{{ locale.account.settings.settingCards.passwordPrompt }}</p>
<input name="password" id="password" type="password" required />
<div class="modal-button-wrapper">
<button class="button cancel" id="onlineFilesCloseButton">{{ localeHelper locale "modals.cancel" }}</button>
<button class="button primary confirm" id="onlineFilesConfirmButton">{{ localeHelper locale "modals.confirm" }}</button>
<button class="button cancel" id="onlineFilesCloseButton">{{ locale.modals.cancel }}</button>
<button class="button primary confirm" id="onlineFilesConfirmButton">{{ locale.modals.confirm }}</button>
</div>
</div>
</div>
<!-- TODO: Localize this -->
<div class="modal-wrapper hidden" id="edit-settings">
<div class="modal">
<h1 class="title dot">Unavailable</h1>
<p class="modal-caption">Editing PNID settings from user dashboard is currently unavailable. Please update user settings from your linked game console</p>
<h1 class="title dot">{{ locale.account.settings.unavailable }}</h1>
<p class="modal-caption">{{ locale.account.settings.settingCards.no_edit_from_dashboard }}</p>
<div class="modal-button-wrapper">
<button class="button primary confirm" id="editSettingsCloseButton">Close</button>
<button class="button primary confirm" id="editSettingsCloseButton">{{ locale.modals.close }}</button>
</div>
</div>
</div>

View File

@ -6,22 +6,22 @@
<div class="account-form-wrapper">
<form action="/account/login" method="post" class="account">
<h2>{{ localeHelper locale "account.loginForm.login" }}</h2>
<p>{{ localeHelper locale "account.loginForm.detailsPrompt" }}</p>
<h2>{{ locale.account.loginForm.login }}</h2>
<p>{{ locale.account.loginForm.detailsPrompt }}</p>
<div>
<label for="username">{{ localeHelper locale "account.loginForm.username" }}</label>
<label for="username">{{ locale.account.loginForm.username }}</label>
<input name="username" id="username" required>
</div>
<div>
<label for="password">{{ localeHelper locale "account.loginForm.password" }}</label>
<label for="password">{{ locale.account.loginForm.password }}</label>
<input name="password" id="password" type="password" required>
<a href="/account/passwordreset" class="pwdreset">{{ localeHelper locale "account.loginForm.forgotPassword" }}</a>
<a href="/account/passwordreset" class="pwdreset">{{ locale.account.loginForm.forgotPassword }}</a>
</div>
<input name="grant_type" id="grant_type" type="hidden" value="password">
<input name="redirect" id="redirect" type="hidden" value="{{redirect}}">
<div class="buttons">
<button type="submit">{{ localeHelper locale "account.loginForm.login" }}</button>
<a href="/account/register{{#if redirect}}?redirect={{redirect}}{{/if}}" class="register">{{ localeHelper locale "account.loginForm.registerPrompt" }}</a>
<button type="submit">{{ locale.account.loginForm.login }}</button>
<a href="/account/register{{#if redirect}}?redirect={{redirect}}{{/if}}" class="register">{{ locale.account.loginForm.registerPrompt }}</a>
</div>
</form>
</div>

View File

@ -7,33 +7,33 @@
<div class="account-form-wrapper">
<form action="/account/register" method="post" class="account register">
<h2>{{ localeHelper locale "account.loginForm.register" }}</h2>
<p>{{ localeHelper locale "account.loginForm.detailsPrompt" }}</p>
<h2>{{ locale.account.loginForm.register }}</h2>
<p>{{ locale.account.loginForm.detailsPrompt }}</p>
<div class="email">
<label for="email">{{ localeHelper locale "account.loginForm.email" }}</label>
<label for="email">{{ locale.account.loginForm.email }}</label>
<input name="email" id="email" type="email" value="{{ email }}" required>
</div>
<div>
<label for="username">{{ localeHelper locale "account.loginForm.username" }}</label>
<label for="username">{{ locale.account.loginForm.username }}</label>
<input name="username" id="username" value="{{ username }}" minlength=6 maxlength=16 required>
</div>
<div>
<label for="mii_name">{{ localeHelper locale "account.loginForm.miiName" }}</label>
<label for="mii_name">{{ locale.account.loginForm.miiName }}</label>
<input name="mii_name" id="mii_name" value="{{ mii_name }}" maxlength=10 required>
</div>
<div>
<label for="password">{{ localeHelper locale "account.loginForm.password" }}</label>
<label for="password">{{ locale.account.loginForm.password }}</label>
<input name="password" id="password" type="password" autocomplete="new-password" required>
</div>
<div>
<label for="password_confirm">{{ localeHelper locale "account.loginForm.confirmPassword" }}</label>
<label for="password_confirm">{{ locale.account.loginForm.confirmPassword }}</label>
<input name="password_confirm" id="password_confirm" type="password" autocomplete="new-password" required>
</div>
<div class="h-captcha" data-sitekey="cf3fd74e-93ca-47e6-9fa0-5fc439de06d4"></div>
<input name="redirect" id="redirect" type="hidden" value="{{redirect}}">
<div class="buttons">
<button type="submit">{{ localeHelper locale "account.loginForm.register" }}</button>
<a href="/account/login{{#if redirect}}?redirect={{redirect}}{{/if}}" class="register">{{ localeHelper locale "account.loginForm.loginPrompt" }}</a>
<button type="submit">{{ locale.account.loginForm.register }}</button>
<a href="/account/login{{#if redirect}}?redirect={{redirect}}{{/if}}" class="register">{{ locale.account.loginForm.loginPrompt }}</a>
</div>
</form>
</div>

View File

@ -2,7 +2,7 @@
<div class="wrapper">
<a href="/account" class="back-arrow">
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-arrow-left"><line x1="19" y1="12" x2="5" y2="12"></line><polyline points="12 19 5 12 12 5"></polyline></svg>
<span>{{ localeHelper locale "upgrade.back" }}</span>
<span>{{ locale.upgrade.back }}</span>
</a>
<div class="account-form-wrapper">
@ -31,15 +31,15 @@
</svg>
</a>
<h1 class="title dot">{{ localeHelper locale "upgrade.title" }}</h1>
<p class="caption">{{ localeHelper locale "upgrade.description" }}</p>
<h1 class="title dot">{{ locale.upgrade.title }}</h1>
<p class="caption">{{ locale.upgrade.description }}</p>
<div class="progress-bar-wrapper">
<div class="progress-bar">
<div class="progress-bar-inner" style="width: {{ donationCache.completed_capped }}%;" ></div>
</div>
<p class="localeReplace">
{{{ localeHelper locale "donation.progress" }}}
{{{ locale.donation.progress }}}
</p>
</div>
<form method="post" data-current-tier="{{currentTier}}">
@ -62,36 +62,36 @@
</div>
</div>
<p class="price">
<span>{{this.price}}</span> / {{ localeHelper locale "upgrade.month" }}
<span>{{this.price}}</span> / {{ locale.upgrade.month }}
</p>
</label>
{{/each}}
<div class="button-wrapper">
<button class="disabled" type="submit" id="submitButton">{{ localeHelper locale "upgrade.tierSelectPrompt" }}</button>
<button class="unsubscribe hidden" id="unsubModalShowButton">{{ localeHelper locale "upgrade.unsub" }}</button>
<button class="disabled" type="submit" id="submitButton">{{ locale.upgrade.tierSelectPrompt }}</button>
<button class="unsubscribe hidden" id="unsubModalShowButton">{{ locale.upgrade.unsub }}</button>
</div>
</form>
</div>
<div class="modal-wrapper hidden" id="unsub">
<div class="modal">
<h1 class="title dot">{{ localeHelper locale "upgrade.unsub" }}</h1>
<p class="modal-caption">{{{ localeHelper locale "upgrade.unsubPrompt" }}}</p>
<h1 class="title dot">{{ locale.upgrade.unsub }}</h1>
<p class="modal-caption">{{{ locale.upgrade.unsubPrompt }}}</p>
<div class="modal-button-wrapper">
<button class="button cancel" id="unsubModalCloseButton">{{ localeHelper locale "modals.cancel" }}</button>
<button class="button primary confirm" id="unsubModalConfirmButton">{{ localeHelper locale "upgrade.unsubConfirm" }}</button>
<button class="button cancel" id="unsubModalCloseButton">{{ locale.modals.cancel }}</button>
<button class="button primary confirm" id="unsubModalConfirmButton">{{ locale.upgrade.unsubConfirm }}</button>
</div>
</div>
</div>
<div class="modal-wrapper hidden" id="switchtier">
<div class="modal">
<h1 class="title dot">{{ localeHelper locale "upgrade.changeTier" }}</h1>
<p class="modal-caption">{{{ localeHelper locale "upgrade.changeTierPrompt" }}}</p>
<h1 class="title dot">{{ locale.upgrade.changeTier }}</h1>
<p class="modal-caption">{{{ locale.upgrade.changeTierPrompt }}}</p>
<div class="modal-button-wrapper">
<button class="button cancel" id="switchTierCloseButton">{{ localeHelper locale "modals.cancel" }}</button>
<button class="button primary confirm" id="switchTierConfirmButton">{{ localeHelper locale "modals.confirm" }}</button>
<button class="button cancel" id="switchTierCloseButton">{{ locale.modals.cancel }}</button>
<button class="button primary confirm" id="switchTierConfirmButton">{{ locale.modals.confirm }}</button>
</div>
</div>
</div>

View File

@ -7,8 +7,8 @@
<div class="progress-hero">
<div class="hero-meta reduced-margin">
<svg xmlns="http://www.w3.org/2000/svg" width="48.87" height="71.093" viewBox="0 0 48.87 71.093"><g id="XMLID_6_" transform="translate(0)"><path id="XMLID_15_" d="M69.581,29.593c-2.029,1.068-.249,4.129,1.78,3.061,5.162-2.67,11.463-2.6,16.981-1.1,4.735,1.282,9.5,3.845,12.246,8.045,1.246,1.922,4.307.142,3.061-1.78C96.921,27.386,80.3,24.04,69.581,29.593Z" transform="translate(-60.112 -20.086)" fill="#9d6ff3"/><path id="XMLID_14_" d="M103.359,21.045c-3.951-6.159-10.751-10-17.657-11.89C77.763,6.948,68.721,7.019,61.281,10.9c-2.029,1.068-.249,4.129,1.78,3.061,6.586-3.453,14.667-3.311,21.644-1.388,5.981,1.638,12.1,4.913,15.521,10.252C101.507,24.783,104.569,23,103.359,21.045Z" transform="translate(-54.766 -7.693)" fill="#9d6ff3"/><path id="XMLID_9_" d="M65.995,47.8a20.7,20.7,0,0,0-12.958,4.45H47.27a2.579,2.579,0,0,0-2.67,2.456v47.239a2.763,2.763,0,0,0,2.67,2.67h5.838a2.639,2.639,0,0,0,2.528-2.67V87.564A21.228,21.228,0,1,0,65.995,47.8Zm0,33.178a12,12,0,1,1,12-12A12,12,0,0,1,65.995,80.978Z" transform="translate(-44.6 -33.522)" fill="#9d6ff3"/></g></svg>
<h1 class="title dot">{{ localeHelper locale "blogPage.title" }}</h1>
<p class="text">{{{ localeHelper locale "blogPage.description" }}}</p>
<h1 class="title dot">{{ locale.blogPage.title }}</h1>
<p class="text">{{{ locale.blogPage.description }}}</p>
</div>
</div>
@ -18,12 +18,12 @@
<h2 class="title">{{{ this.postInfo.title }}}</h2>
<p class="caption">{{{ this.postInfo.caption }}}</p>
<div class="pub-info">
<span>{{ localeHelper ../locale "blogPage.published" }}</span>
<span>{{ ../locale.blogPage.published }}</span>
<div class="profile">
<img class="profile-picture" src="{{ this.postInfo.author_image }}" alt>
<span>{{{ this.postInfo.author }}}</span>
</div>
<span>{{ localeHelper ../locale "blogPage.publishedOn" }}
<span>{{ ../locale.blogPage.publishedOn }}
<span class="date">{{{ this.postInfo.date }}}</span>
</span>
</div>

View File

@ -9,12 +9,12 @@
<h1 class="title">{{{ postInfo.title }}}</h1>
<div class="pub-info">
<span>{{ localeHelper locale "blogPage.published" }}</span>
<span>{{ locale.blogPage.published }}</span>
<div class="profile">
<img class="profile-picture" src="{{ postInfo.author_image }}" alt="{{ postInfo.author }}">
<span>{{{ postInfo.author }}}</span>
</div>
<span>{{ localeHelper locale "blogPage.publishedOn" }}
<span>{{ locale.blogPage.publishedOn }}
<span class="date">{{{ postInfo.date }}}</span>
</span>
</div>

View File

@ -38,15 +38,9 @@
<div class="content">
<div class="content-inner">
<div class="tip red">
<strong>Note!</strong>
<br>
Pretendo Network is currently in closed beta! The servers are only accessible to testers. To become a tester,
upgrade your <a href="/account/upgrade" target="_blank">PNID here</a>
</div>
{{#if missingInLocale}}
<p class="missing-in-locale-notice">{{ localeHelper locale "docs.missingInLocale" }}</p>
<p class="missing-in-locale-notice">{{ locale.docs.missingInLocale }}</p>
{{/if}}
{{{ content }}}

View File

@ -39,9 +39,9 @@
<div class="content search">
<div class="content-inner">
<div class="purple-card">
<h1>Got an error code?</h1>
<p>Type it in the box below to get information on your issue!</p>
<label for="errorCode">Error code</label>
<h1>{{ locale.docs.search.title }}</h1>
<p>{{ locale.docs.search.caption }}</p>
<label for="errorCode">{{ locale.docs.search.label }}</label>
<div class="input-wrapper">
<input id="errorCode" placeholder="ABC-012-3456" required />
<div class="matches">
@ -107,7 +107,7 @@
});
} else {
const noMatch = document.createElement('p');
noMatch.innerText = 'No matches found';
noMatch.innerText = '{{ locale.docs.search.no_match }}';
matchesContainer.appendChild(noMatch);
}
});

View File

@ -44,7 +44,7 @@
<div class="content">
<div class="content-inner">
<h1>{{ localeHelper locale "docs.quickLinks.header" }}</h1>
<h1>{{ locale.docs.quickLinks.header }}</h1>
<div class="quick-links-grid">
<a href="/docs/install">
<svg xmlns="http://www.w3.org/2000/svg" width="36" height="36" viewBox="0 0 24 24" fill="none"
@ -55,8 +55,8 @@
<line x1="12" y1="15" x2="12" y2="3"></line>
</svg>
<div>
<p class="header">{{ localeHelper locale "docs.quickLinks.links" 0 "header" }}</p>
<p>{{ localeHelper locale "docs.quickLinks.links" 0 "caption" }}</p>
<p class="header">{{ locale.docs.quickLinks.links.[0].header }}</p>
<p>{{ locale.docs.quickLinks.links.[0].caption }}</p>
</div>
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none"
stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"
@ -73,8 +73,8 @@
<line x1="21" y1="21" x2="16.65" y2="16.65"></line>
</svg>
<div>
<p class="header">{{ localeHelper locale "docs.quickLinks.links" 1 "header" }}</p>
<p>{{ localeHelper locale "docs.quickLinks.links" 1 "caption" }}</p>
<p class="header">{{ locale.docs.quickLinks.links.[1].header }}</p>
<p>{{ locale.docs.quickLinks.links.[1].caption }}</p>
</div>
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none"
stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"
@ -97,4 +97,4 @@
<link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/11.3.1/styles/default.min.css">
<script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/11.3.1/highlight.min.js"></script>
<link rel="stylesheet" href="/assets/css/highlightjs.css">
<script>hljs.highlightAll();</script>
<script>hljs.highlightAll();</script>

View File

@ -5,15 +5,13 @@
<section class="hero">
<div class="hero-meta">
<h3 class="subtitle">{{ localeHelper locale "hero.subtitle" }}</h3>
<h1 class="title dot" {{#if locale.hero.titleSuffix}}data-title-suffix="{{locale.hero.titleSuffix}}"{{/if}}>{{ localeHelper locale "hero.title" }}</h1>
<p class="text">
{{ localeHelper locale "hero.text" }}
</p>
<h3 class="subtitle">{{ locale.hero.subtitle }}</h3>
<h1 class="title dot" {{#if locale.hero.titleSuffix}}data-title-suffix="{{locale.hero.titleSuffix}}"{{/if}}>{{ locale.hero.title }}</h1>
<p class="text">{{ locale.hero.text }}</p>
<div class="buttons">
<a href="/#about" class="do-button-margin">
<button class="button primary">
{{ localeHelper locale "hero.buttons.readMore" }}
{{ locale.hero.buttons.readMore }}
</button>
</a>
<a href="https://invite.gg/pretendo" class="do-button-margin" target="_blank">
@ -75,7 +73,7 @@
<section class="progress column-2">
<div class="left sect">
<div class="left-meta">
<h2 class="dot title" id="about" {{#if locale.aboutUs.titleSuffix}}data-title-suffix="{{locale.aboutUs.titleSuffix}}"{{/if}}>{{ localeHelper locale "aboutUs.title" }}</h2>
<h2 class="dot title" id="about" {{#if locale.aboutUs.titleSuffix}}data-title-suffix="{{locale.aboutUs.titleSuffix}}"{{/if}}>{{ locale.aboutUs.title }}</h2>
{{#each locale.aboutUs.paragraphs}}
<p class="text">{{ this }}</p>
{{/each}}
@ -83,7 +81,7 @@
</div>
<div class="right sect">
<h2 class="title">
<a href="/progress">{{ localeHelper locale "progress.title" }}</a>
<a href="/progress">{{ locale.progress.title }}</a>
</h2>
{{> progress-list data=featuredFeatureList purple=true }}
</div>
@ -91,8 +89,8 @@
<section class="faq">
<div class="sect-top sect">
<h2 class="dot title" id="faq" {{#if locale.faq.titleSuffix}}data-title-suffix="{{locale.faq.titleSuffix}}"{{/if}}>{{ localeHelper locale "faq.title" }}</h2>
<p class="text">{{ localeHelper locale "faq.text" }}</p>
<h2 class="dot title" id="faq" {{#if locale.faq.titleSuffix}}data-title-suffix="{{locale.faq.titleSuffix}}"{{/if}}>{{ locale.faq.title }}</h2>
<p class="text">{{ locale.faq.text }}</p>
</div>
<div class="questions column-2">
{{#doFaq locale.faq.QAs}}
@ -110,32 +108,32 @@
<section class="showcase">
<div class="sect-top sect">
<h2 class="dot title" id="showcase" {{#if locale.showcase.titleSuffix}}data-title-suffix="{{locale.showcase.titleSuffix}}"{{/if}}>{{ localeHelper locale "showcase.title" }}</h2>
<p class="text">{{ localeHelper locale "showcase.text" }}</p>
<h2 class="dot title" id="showcase" {{#if locale.showcase.titleSuffix}}data-title-suffix="{{locale.showcase.titleSuffix}}"{{/if}}>{{ locale.showcase.title }}</h2>
<p class="text">{{ locale.showcase.text }}</p>
</div>
<div class="grid">
<div class="item highlight">
<svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="server" class="svg-inline--fa fa-server fa-w-16" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M480 160H32c-17.673 0-32-14.327-32-32V64c0-17.673 14.327-32 32-32h448c17.673 0 32 14.327 32 32v64c0 17.673-14.327 32-32 32zm-48-88c-13.255 0-24 10.745-24 24s10.745 24 24 24 24-10.745 24-24-10.745-24-24-24zm-64 0c-13.255 0-24 10.745-24 24s10.745 24 24 24 24-10.745 24-24-10.745-24-24-24zm112 248H32c-17.673 0-32-14.327-32-32v-64c0-17.673 14.327-32 32-32h448c17.673 0 32 14.327 32 32v64c0 17.673-14.327 32-32 32zm-48-88c-13.255 0-24 10.745-24 24s10.745 24 24 24 24-10.745 24-24-10.745-24-24-24zm-64 0c-13.255 0-24 10.745-24 24s10.745 24 24 24 24-10.745 24-24-10.745-24-24-24zm112 248H32c-17.673 0-32-14.327-32-32v-64c0-17.673 14.327-32 32-32h448c17.673 0 32 14.327 32 32v64c0 17.673-14.327 32-32 32zm-48-88c-13.255 0-24 10.745-24 24s10.745 24 24 24 24-10.745 24-24-10.745-24-24-24zm-64 0c-13.255 0-24 10.745-24 24s10.745 24 24 24 24-10.745 24-24-10.745-24-24-24z"></path></svg>
<h1>{{ localeHelper locale "showcase.cards.0.title" }}</h1>
<p>{{ localeHelper locale "showcase.cards.0.caption" }}</p>
<h1>{{ locale.showcase.cards.0.title }}</h1>
<p>{{ locale.showcase.cards.0.caption }}</p>
</div>
<div class="item">
<svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="users" class="svg-inline--fa fa-users fa-w-20" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><path fill="currentColor" d="M96 224c35.3 0 64-28.7 64-64s-28.7-64-64-64-64 28.7-64 64 28.7 64 64 64zm448 0c35.3 0 64-28.7 64-64s-28.7-64-64-64-64 28.7-64 64 28.7 64 64 64zm32 32h-64c-17.6 0-33.5 7.1-45.1 18.6 40.3 22.1 68.9 62 75.1 109.4h66c17.7 0 32-14.3 32-32v-32c0-35.3-28.7-64-64-64zm-256 0c61.9 0 112-50.1 112-112S381.9 32 320 32 208 82.1 208 144s50.1 112 112 112zm76.8 32h-8.3c-20.8 10-43.9 16-68.5 16s-47.6-6-68.5-16h-8.3C179.6 288 128 339.6 128 403.2V432c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48v-28.8c0-63.6-51.6-115.2-115.2-115.2zm-223.7-13.4C161.5 263.1 145.6 256 128 256H64c-35.3 0-64 28.7-64 64v32c0 17.7 14.3 32 32 32h65.9c6.3-47.4 34.9-87.3 75.2-109.4z"></path></svg>
<h1>{{ localeHelper locale "showcase.cards.1.title" }}</h1>
<p>{{ localeHelper locale "showcase.cards.1.caption" }}</p>
<h1>{{ locale.showcase.cards.1.title }}</h1>
<p>{{ locale.showcase.cards.1.caption }}</p>
</div>
<div class="item">
<svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="gamepad" class="svg-inline--fa fa-gamepad fa-w-20" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><path fill="currentColor" d="M480.07 96H160a160 160 0 1 0 114.24 272h91.52A160 160 0 1 0 480.07 96zM248 268a12 12 0 0 1-12 12h-52v52a12 12 0 0 1-12 12h-24a12 12 0 0 1-12-12v-52H84a12 12 0 0 1-12-12v-24a12 12 0 0 1 12-12h52v-52a12 12 0 0 1 12-12h24a12 12 0 0 1 12 12v52h52a12 12 0 0 1 12 12zm216 76a40 40 0 1 1 40-40 40 40 0 0 1-40 40zm64-96a40 40 0 1 1 40-40 40 40 0 0 1-40 40z"></path></svg>
<h1>{{ localeHelper locale "showcase.cards.2.title" }}</h1>
<p>{{ localeHelper locale "showcase.cards.2.caption" }}</p>
<h1>{{ locale.showcase.cards.2.title }}</h1>
<p>{{ locale.showcase.cards.2.caption }}</p>
</div>
</div>
</section>
<section class="team">
<div class="sect-top sect team-top">
<h2 class="dot title" id="credits" {{#if locale.credits.titleSuffix}}data-title-suffix="{{locale.credits.titleSuffix}}"{{/if}}>{{ localeHelper locale "credits.title" }}</h2>
<p class="text">{{ localeHelper locale "credits.text" }}</p>
<h2 class="dot title" id="credits" {{#if locale.credits.titleSuffix}}data-title-suffix="{{locale.credits.titleSuffix}}"{{/if}}>{{ locale.credits.title }}</h2>
<p class="text">{{ locale.credits.text }}</p>
</div>
<div class="team-cards">
{{#each locale.credits.people}}
@ -160,8 +158,8 @@
<section class="team-helpers">
<div class="sect-top sect">
<h2 class="dot title" id="special-thanks" {{#if locale.specialThanks.titleSuffix}}data-title-suffix="{{locale.specialThanks.titleSuffix}}"{{/if}}>{{ localeHelper locale "specialThanks.title" }}</h2>
<p class="text">{{ localeHelper locale "specialThanks.text" }}</p>
<h2 class="dot title" id="special-thanks" {{#if locale.specialThanks.titleSuffix}}data-title-suffix="{{locale.specialThanks.titleSuffix}}"{{/if}}>{{ locale.specialThanks.title }}</h2>
<p class="text">{{ locale.specialThanks.text }}</p>
</div>
<div class="animation-wrapper">
<div class="row-wrapper">
@ -198,12 +196,12 @@
<section class="update-signup">
<div class="sect hero-meta reduced-margin">
<svg xmlns="http://www.w3.org/2000/svg" width="48.87" height="71.093" viewBox="0 0 48.87 71.093"><g id="XMLID_6_" transform="translate(0)"><path id="XMLID_15_" d="M69.581,29.593c-2.029,1.068-.249,4.129,1.78,3.061,5.162-2.67,11.463-2.6,16.981-1.1,4.735,1.282,9.5,3.845,12.246,8.045,1.246,1.922,4.307.142,3.061-1.78C96.921,27.386,80.3,24.04,69.581,29.593Z" transform="translate(-60.112 -20.086)" fill="#9d6ff3"/><path id="XMLID_14_" d="M103.359,21.045c-3.951-6.159-10.751-10-17.657-11.89C77.763,6.948,68.721,7.019,61.281,10.9c-2.029,1.068-.249,4.129,1.78,3.061,6.586-3.453,14.667-3.311,21.644-1.388,5.981,1.638,12.1,4.913,15.521,10.252C101.507,24.783,104.569,23,103.359,21.045Z" transform="translate(-54.766 -7.693)" fill="#9d6ff3"/><path id="XMLID_9_" d="M65.995,47.8a20.7,20.7,0,0,0-12.958,4.45H47.27a2.579,2.579,0,0,0-2.67,2.456v47.239a2.763,2.763,0,0,0,2.67,2.67h5.838a2.639,2.639,0,0,0,2.528-2.67V87.564A21.228,21.228,0,1,0,65.995,47.8Zm0,33.178a12,12,0,1,1,12-12A12,12,0,0,1,65.995,80.978Z" transform="translate(-44.6 -33.522)" fill="#9d6ff3"/></g></svg>
<h2 class="dot title" id="discord-join" {{#if locale.discordJoin.titleSuffix}}data-title-suffix="{{locale.discordJoin.titleSuffix}}"{{/if}}>{{ localeHelper locale "discordJoin.title" }}</h2>
<p class="text">{{ localeHelper locale "discordJoin.text" }}</p>
<h2 class="dot title" id="discord-join" {{#if locale.discordJoin.titleSuffix}}data-title-suffix="{{locale.discordJoin.titleSuffix}}"{{/if}}>{{ locale.discordJoin.title }}</h2>
<p class="text">{{ locale.discordJoin.text }}</p>
</div>
<div class="floating-serverjoin">
<p>{{ localeHelper locale "discordJoin.widget.text" }}</p>
<a href="https://invite.gg/pretendo" target="_blank">{{ localeHelper locale "discordJoin.widget.button" }}</a>
<p>{{ locale.discordJoin.widget.text }}</p>
<a href="https://invite.gg/pretendo" target="_blank">{{ locale.discordJoin.widget.button }}</a>
</div>
<div class="circle"></div>
</section>

View File

@ -6,17 +6,17 @@
<div class="localization-wrapper">
<div class="localization-widget">
<h1 class="title dot">{{ localeHelper locale "localizationPage.title" }}</h1>
<p class="caption">{{ localeHelper locale "localizationPage.description" }}</p>
<h1 class="title dot">{{ locale.localizationPage.title" }}</h1>
<p class="caption">{{ locale.localizationPage.description" }}</p>
<a href="https://github.com/PretendoNetwork/Pretendo/blob/master/CONTRIBUTING.md#localization" target="_blank" class="localization-instr">
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="var(--accent-shade-2)" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="feather feather-arrow-right"><line x1="5" y1="12" x2="19" y2="12"></line><polyline points="12 5 19 12 12 19"></polyline></svg>
{{ localeHelper locale "localizationPage.instructions" }}
{{ locale.localizationPage.instructions" }}
</a>
<form class="localization-form" autocomplete="off">
<label for="url">{{ localeHelper locale "localizationPage.fileInput" }}</label>
<label for="url">{{ locale.localizationPage.fileInput" }}</label>
<div class="input-wrapper">
<input type="url" id="url" placeholder="{{ localeHelper locale "localizationPage.filePlaceholder" }}" required />
<button type="submit" class="submit-btn">{{ localeHelper locale "localizationPage.button" }}</button>
<input type="url" id="url" placeholder="{{ locale.localizationPage.filePlaceholder" }}" required />
<button type="submit" class="submit-btn">{{ locale.localizationPage.button" }}</button>
</div>
</form>
</div>

View File

@ -1,13 +1,13 @@
<div class="sidebar">
<div class="section">
<h5>Getting started</h5>
<a href="/docs/welcome">Welcome</a>
<a href="/docs/install">Install Pretendo</a>
<a href="/docs/search">Search</a>
<h5>{{ locale.docs.sidebar.getting_started }}</h5>
<a href="/docs/welcome">{{ locale.docs.sidebar.welcome }}</a>
<a href="/docs/install">{{ locale.docs.sidebar.install_extended }}</a>
<a href="/docs/search">{{ locale.docs.sidebar.search }}</a>
</div>
<div class="section">
<h5>Install</h5>
<h5>{{ locale.docs.sidebar.install }}</h5>
<a href="/docs/install/wiiu">Wii U</a>
<a href="/docs/install/3ds">3DS</a>
<a href="/docs/install/cemu">Cemu</a>
@ -16,7 +16,7 @@
</div>
<div class="section">
<h5>Error codes - Juxt</h5>
<h5>{{ locale.docs.sidebar.juxt_err }}</h5>
<a href="/docs/en_US/errors/JXT-598-0009">JXT-598-0009</a>
<a href="/docs/en_US/errors/JXT-598-0010">JXT-598-0010</a>
<a href="/docs/en_US/errors/JXT-598-0011">JXT-598-0011</a>

View File

@ -28,29 +28,30 @@
<p>Site by <a href="https://mrjvs.com/" target="_blank">mrjvs</a>, <a href="https://jipfr.nl/" target="_blank">jipfr</a> & <a href="https://ashm.dev/" target="_blank">monty</a></p>
</div>
<div>
<h1>{{ localeHelper locale "footer.socials" }}</h1>
<h1>{{ locale.footer.socials }}</h1>
<a href="https://twitter.com/PretendoNetwork/" target="_blank">Twitter</a>
<a href="https://invite.gg/pretendo" target="_blank">Discord</a>
<a href="https://github.com/PretendoNetwork" target="_blank">GitHub</a>
</div>
<div>
<h1>{{ localeHelper locale "footer.usefulLinks" }}</h1>
<a style="display: none;" href="/docs">{{ localeHelper locale "nav.docs" }}</a>
<a href="/#faq">{{ localeHelper locale "nav.faq" }}</a>
<a href="/progress">{{ localeHelper locale "nav.progress" }}</a>
<a href="/blog">{{ localeHelper locale "nav.blog" }}</a>
<a href="/account">{{ localeHelper locale "nav.account" }}</a>
<h1>{{ locale.footer.usefulLinks }}</h1>
<a href="/docs">{{ locale.nav.docs }}</a>
<a href="/#faq">{{ locale.nav.faq }}</a>
<a href="/progress">{{ locale.nav.progress }}</a>
<a href="/blog">{{ locale.nav.blog }}</a>
<a href="/account">{{ locale.nav.account }}</a>
<a href="/account/upgrade">{{ locale.nav.donate }}</a>
</div>
<div class="discord-server-card-wrapper">
<div class="discord-server-card">
<h1>{{ localeHelper locale "footer.widget.captions.0" }}</h1>
<h2>{{ localeHelper locale "footer.widget.captions.1" }}</h2>
<h1>{{ locale.footer.widget.captions.[0] }}</h1>
<h2>{{ locale.footer.widget.captions.[1] }}</h2>
<a href="https://invite.gg/pretendo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-arrow-right">
<line x1="5" y1="12" x2="19" y2="12"></line>
<polyline points="12 5 19 12 12 19"></polyline>
</svg>
{{ localeHelper locale "footer.widget.button" }}
{{ locale.footer.widget.button }}
</a>
</div>
<div class="bandwidth-raccoon-wrapper">
@ -73,10 +74,11 @@
return el.innerText;
}
const randomSentences = [
{{#times 9}}
`${unescapeHTML("{{localeHelper locale "footer.bandwidthRaccoonQuotes" this }}")}`,
{{/times}}
{{#each locale.footer.bandwidthRaccoonQuotes}}
`${unescapeHTML("{{this}}")}`,
{{/each}}
]
bandwidthRaccoon.addEventListener("click", () =>

View File

@ -27,13 +27,13 @@
</a>
<nav>
<a href="/#about">{{ localeHelper locale "nav.about" }}</a>
<a href="/#faq">{{ localeHelper locale "nav.faq" }}</a>
<a href="/#credits">{{ localeHelper locale "nav.credits" }}</a>
<a href="/docs">{{ localeHelper locale "nav.docs"}}</a>
<a href="/progress" class="keep-on-mobile">{{ localeHelper locale "nav.progress"}}</a>
<a href="/blog" class="keep-on-mobile">{{ localeHelper locale "nav.blog" }}</a>
<a href="/account/upgrade" class="keep-on-mobile">Donate</a>
<a href="/#about">{{ locale.nav.about }}</a>
<a href="/#faq">{{ locale.nav.faq }}</a>
<a href="/#credits">{{ locale.nav.credits }}</a>
<a href="/docs" class="keep-on-mobile">{{ locale.nav.docs }}</a>
<a href="/progress" class="keep-on-mobile">{{ locale.nav.progress }}</a>
<a href="/blog">{{ locale.nav.blog }}</a>
<a href="/account/upgrade" class="keep-on-mobile">{{ locale.nav.donate }}</a>
</nav>
<div class="right-section">
@ -156,12 +156,12 @@
<div class="buttons">
<a href="/account">
<button class="button primary">
{{ localeHelper locale "nav.accountWidget.settings" }}
{{ locale.nav.accountWidget.settings }}
</button>
</a>
<a href="/account/logout">
<button class="button logout">
{{ localeHelper locale "nav.accountWidget.logout" }}
{{ locale.nav.accountWidget.logout }}
</button>
</a>
</div>

View File

@ -13,7 +13,7 @@
<div>
<a href="{{this.url}}" class="github" target="_blank">
<svg data-prefix="fab" data-icon="github" class="svg-inline--fa fa-github fa-w-16" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><path fill="currentColor" d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"></path></svg>
<span>{{ localeHelper locale "progress.githubRepo" }}</span>
<span>{{ locale.progress.githubRepo }}</span>
</a>
</div>
</div>{{/if}}

View File

@ -7,8 +7,8 @@
<div class="progress-hero">
<div class="hero-meta reduced-margin">
<svg xmlns="http://www.w3.org/2000/svg" width="48.87" height="71.093" viewBox="0 0 48.87 71.093"><g id="XMLID_6_" transform="translate(0)"><path id="XMLID_15_" d="M69.581,29.593c-2.029,1.068-.249,4.129,1.78,3.061,5.162-2.67,11.463-2.6,16.981-1.1,4.735,1.282,9.5,3.845,12.246,8.045,1.246,1.922,4.307.142,3.061-1.78C96.921,27.386,80.3,24.04,69.581,29.593Z" transform="translate(-60.112 -20.086)" fill="#9d6ff3"/><path id="XMLID_14_" d="M103.359,21.045c-3.951-6.159-10.751-10-17.657-11.89C77.763,6.948,68.721,7.019,61.281,10.9c-2.029,1.068-.249,4.129,1.78,3.061,6.586-3.453,14.667-3.311,21.644-1.388,5.981,1.638,12.1,4.913,15.521,10.252C101.507,24.783,104.569,23,103.359,21.045Z" transform="translate(-54.766 -7.693)" fill="#9d6ff3"/><path id="XMLID_9_" d="M65.995,47.8a20.7,20.7,0,0,0-12.958,4.45H47.27a2.579,2.579,0,0,0-2.67,2.456v47.239a2.763,2.763,0,0,0,2.67,2.67h5.838a2.639,2.639,0,0,0,2.528-2.67V87.564A21.228,21.228,0,1,0,65.995,47.8Zm0,33.178a12,12,0,1,1,12-12A12,12,0,0,1,65.995,80.978Z" transform="translate(-44.6 -33.522)" fill="#9d6ff3"/></g></svg>
<h1 class="title dot">{{ localeHelper locale "progressPage.title" }}</h1>
<p class="text">{{ localeHelper locale "progressPage.description" }}</p>
<h1 class="title dot">{{ locale.progressPage.title }}</h1>
<p class="text">{{ locale.progressPage.description }}</p>
</div>
</div>
@ -18,7 +18,7 @@
<div class="progress-bar">
<div class="progress-bar-inner" style="width: {{ donationCache.completed_capped }}%;" ></div>
</div>
<p class="localeReplace">{{{ localeHelper locale "donation.progress" }}} {{{ localeHelper locale "donation.upgradePush" }}}</p>
<p class="localeReplace">{{{ locale.donation.progress }}} {{{ locale.donation.upgradePush }}}</p>
</div>
<div id="quick-nav">