mirror of https://github.com/mue/mue.git
Merge branch 'main' of https://github.com/mue/mue
This commit is contained in:
commit
c2019de7d2
|
@ -30,7 +30,7 @@
|
|||
"react-dom": "^18.2.0",
|
||||
"react-icons": "^5.0.1",
|
||||
"react-modal": "3.16.1",
|
||||
"react-toastify": "10.0.4"
|
||||
"react-toastify": "10.0.5"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@commitlint/cli": "^19.2.0",
|
||||
|
|
|
@ -63,8 +63,8 @@ dependencies:
|
|||
specifier: 3.16.1
|
||||
version: 3.16.1(react-dom@18.2.0)(react@18.2.0)
|
||||
react-toastify:
|
||||
specifier: 10.0.4
|
||||
version: 10.0.4(react-dom@18.2.0)(react@18.2.0)
|
||||
specifier: 10.0.5
|
||||
version: 10.0.5(react-dom@18.2.0)(react@18.2.0)
|
||||
|
||||
devDependencies:
|
||||
'@commitlint/cli':
|
||||
|
@ -5453,11 +5453,11 @@ packages:
|
|||
warning: 4.0.3
|
||||
dev: false
|
||||
|
||||
/react-toastify@10.0.4(react-dom@18.2.0)(react@18.2.0):
|
||||
resolution: {integrity: sha512-etR3RgueY8pe88SA67wLm8rJmL1h+CLqUGHuAoNsseW35oTGJEri6eBTyaXnFKNQ80v/eO10hBYLgz036XRGgA==}
|
||||
/react-toastify@10.0.5(react-dom@18.2.0)(react@18.2.0):
|
||||
resolution: {integrity: sha512-mNKt2jBXJg4O7pSdbNUfDdTsK9FIdikfsIE/yUCxbAEXl4HMyJaivrVFcn3Elvt5xvCQYhUZm+hqTIu1UXM3Pw==}
|
||||
peerDependencies:
|
||||
react: '>=16'
|
||||
react-dom: '>=16'
|
||||
react: '>=18'
|
||||
react-dom: '>=18'
|
||||
dependencies:
|
||||
clsx: 2.1.0
|
||||
react: 18.2.0
|
||||
|
|
|
@ -14,63 +14,72 @@ const compareAndRemoveKeys = (json1, json2) => {
|
|||
}
|
||||
};
|
||||
|
||||
try {
|
||||
const localesDir = path.join(__dirname, '../src/i18n/locales');
|
||||
const achievementsDir = path.join(localesDir, 'achievements');
|
||||
const localesDir = path.join(__dirname, '../src/i18n/locales');
|
||||
const achievementsDir = path.join(localesDir, 'achievements');
|
||||
|
||||
// Check if the locales directory exists, if not, create it
|
||||
if (!fs.existsSync(localesDir)) {
|
||||
fs.mkdirSync(localesDir, { recursive: true });
|
||||
}
|
||||
|
||||
// Check if the achievements directory exists, if not, create it
|
||||
if (!fs.existsSync(achievementsDir)) {
|
||||
fs.mkdirSync(achievementsDir, { recursive: true });
|
||||
}
|
||||
|
||||
fs.readdirSync(localesDir).forEach((file) => {
|
||||
if (file === 'en_GB.json') {
|
||||
return;
|
||||
}
|
||||
|
||||
const en = require(path.join(localesDir, 'en_GB.json'));
|
||||
const newdata = merge(en, require(path.join(localesDir, file)));
|
||||
|
||||
compareAndRemoveKeys(newdata, en);
|
||||
|
||||
fs.writeFileSync(path.join(localesDir, file), JSON.stringify(newdata, null, 2));
|
||||
|
||||
fs.appendFileSync(path.join(localesDir, file), '\n');
|
||||
});
|
||||
|
||||
fs.readdirSync(achievementsDir).forEach((file) => {
|
||||
if (file === 'en_GB.json') {
|
||||
return;
|
||||
}
|
||||
|
||||
const enGBFilePath = path.join(achievementsDir, 'en_GB.json');
|
||||
if (!fs.existsSync(enGBFilePath)) {
|
||||
console.error(`File 'en_GB.json' does not exist in the directory '${achievementsDir}'`);
|
||||
return;
|
||||
}
|
||||
|
||||
const en = require(enGBFilePath);
|
||||
const newdata = merge(en, require(path.join(achievementsDir, file)));
|
||||
|
||||
compareAndRemoveKeys(newdata, en);
|
||||
|
||||
fs.writeFileSync(path.join(achievementsDir, file), JSON.stringify(newdata, null, 2));
|
||||
|
||||
fs.appendFileSync(path.join(achievementsDir, file), '\n');
|
||||
|
||||
const locales = fs.readdirSync(localesDir);
|
||||
locales.forEach((locale) => {
|
||||
if (!fs.existsSync(path.join(achievementsDir, locale))) {
|
||||
fs.writeFileSync(path.join(achievementsDir, locale), JSON.stringify(en, null, 2));
|
||||
fs.appendFileSync(path.join(achievementsDir, locale), '\n');
|
||||
}
|
||||
});
|
||||
});
|
||||
} catch (error) {
|
||||
console.error(`An error occurred: ${error.message}`);
|
||||
// Check if the locales directory exists, if not, create it
|
||||
if (!fs.existsSync(localesDir)) {
|
||||
fs.mkdirSync(localesDir, { recursive: true });
|
||||
}
|
||||
|
||||
// Check if the achievements directory exists, if not, create it
|
||||
if (!fs.existsSync(achievementsDir)) {
|
||||
fs.mkdirSync(achievementsDir, { recursive: true });
|
||||
}
|
||||
|
||||
fs.readdirSync(localesDir).forEach((file) => {
|
||||
if (file === 'en_GB.json') {
|
||||
return;
|
||||
}
|
||||
|
||||
if (fs.lstatSync(path.join(localesDir, file)).isDirectory()) {
|
||||
return;
|
||||
}
|
||||
|
||||
const en = require(path.join(localesDir, 'en_GB.json'));
|
||||
const newdata = merge(en, require(path.join(localesDir, file)));
|
||||
|
||||
compareAndRemoveKeys(newdata, en);
|
||||
|
||||
fs.writeFileSync(path.join(localesDir, file), JSON.stringify(newdata, null, 2));
|
||||
|
||||
fs.appendFileSync(path.join(localesDir, file), '\n');
|
||||
});
|
||||
|
||||
fs.readdirSync(achievementsDir).forEach((file) => {
|
||||
if (file === 'en_GB.json') {
|
||||
return;
|
||||
}
|
||||
|
||||
if (fs.lstatSync(path.join(achievementsDir, file)).isDirectory()) {
|
||||
return;
|
||||
}
|
||||
|
||||
const enGBFilePath = path.join(achievementsDir, 'en_GB.json');
|
||||
if (!fs.existsSync(enGBFilePath)) {
|
||||
console.error(`File 'en_GB.json' does not exist in the directory '${achievementsDir}'`);
|
||||
return;
|
||||
}
|
||||
|
||||
const en = require(enGBFilePath);
|
||||
const newdata = merge(en, require(path.join(achievementsDir, file)));
|
||||
|
||||
compareAndRemoveKeys(newdata, en);
|
||||
|
||||
fs.writeFileSync(path.join(achievementsDir, file), JSON.stringify(newdata, null, 2));
|
||||
|
||||
fs.appendFileSync(path.join(achievementsDir, file), '\n');
|
||||
|
||||
const locales = fs.readdirSync(localesDir);
|
||||
locales.forEach((locale) => {
|
||||
if (!fs.existsSync(path.join(achievementsDir, locale))) {
|
||||
// ignore directories
|
||||
if (fs.lstatSync(path.join(localesDir, locale)).isDirectory()) {
|
||||
return;
|
||||
}
|
||||
|
||||
fs.writeFileSync(path.join(achievementsDir, locale), JSON.stringify(en, null, 2));
|
||||
fs.appendFileSync(path.join(achievementsDir, locale), '\n');
|
||||
}
|
||||
});
|
||||
});
|
||||
|
|
|
@ -8,7 +8,6 @@ export const OPENSTREETMAP_URL = 'https://www.openstreetmap.org';
|
|||
// Mue URLs
|
||||
export const WEBSITE_URL = 'https://muetab.com';
|
||||
export const PRIVACY_URL = 'https://muetab.com/privacy';
|
||||
export const BLOG_POST = 'https://blog.muetab.com/posts/version-7-0';
|
||||
export const TRANSLATIONS_URL = 'https://docs.muetab.com/translations/';
|
||||
export const WEBLATE_URL = 'https://hosted.weblate.org/projects/mue/mue-tab/';
|
||||
export const REPORT_ITEM =
|
||||
|
|
|
@ -131,7 +131,7 @@ class About extends PureComponent {
|
|||
<div style={{ display: 'flex', flexFlow: 'column', gap: '5px' }}>
|
||||
<img draggable={false} className="aboutLogo" src={this.state.image} alt="Logo" />
|
||||
<div className="aboutText">
|
||||
<span className="title">Mue, By Kaiso</span>
|
||||
<span className="title">Mue, by Kaiso</span>
|
||||
<span className="subtitle">
|
||||
{variables.getMessage('modals.main.settings.sections.about.version.title')}{' '}
|
||||
{variables.constants.VERSION}
|
||||
|
@ -156,8 +156,8 @@ class About extends PureComponent {
|
|||
>
|
||||
The Mue Authors
|
||||
</a>
|
||||
,{' '}
|
||||
</span>
|
||||
<br></br>
|
||||
<span className="subtitle">
|
||||
Copyright 2023-2024{' '}
|
||||
<a
|
||||
|
@ -366,12 +366,10 @@ class About extends PureComponent {
|
|||
{!!this.state.loading ? <p>{this.state.loading}</p> : <></>}
|
||||
<ul>
|
||||
{this.state.photographers.map(({ name, count }) => (
|
||||
<>
|
||||
<li className="subtitle-photographers">
|
||||
{name}
|
||||
<span> ({count} images)</span>
|
||||
</li>
|
||||
</>
|
||||
<li className="subtitle-photographers">
|
||||
{name}
|
||||
<span> ({count} images)</span>
|
||||
</li>
|
||||
))}
|
||||
</ul>
|
||||
</div>
|
||||
|
|
|
@ -18,10 +18,36 @@ class Changelog extends PureComponent {
|
|||
this.changelog = createRef();
|
||||
}
|
||||
|
||||
parseMarkdown = (text) => {
|
||||
text = text.replace(/^\* /gm, '<li>').replace(/\n/g, '</li>');
|
||||
text = text.replace(/\*\*(.*?)\*\*/g, '<strong>$1</strong>');
|
||||
text = text.replace(/^## (.*$)/gm, '<h3>$1</h3>');
|
||||
text = text.replace(
|
||||
/((http|https):\/\/[^\s]+)/g,
|
||||
'<a href="$1" target="_blank" rel="noopener noreferrer">$1</a>',
|
||||
);
|
||||
|
||||
return text;
|
||||
}
|
||||
|
||||
async getUpdate() {
|
||||
const res = await fetch(variables.constants.BLOG_POST + '/index.json', {
|
||||
signal: this.controller.signal,
|
||||
});
|
||||
const releases = await fetch(
|
||||
`https://api.github.com/repos/${variables.constants.ORG_NAME}/${variables.constants.REPO_NAME}/releases`,
|
||||
{
|
||||
signal: this.controller.signal,
|
||||
},
|
||||
);
|
||||
|
||||
// get the release which tag_name is the same as the current version
|
||||
const data = await releases.json();
|
||||
const release = data.find((release) => release.tag_name === `7.0.0`);
|
||||
|
||||
if (this.controller.signal.aborted === true) {
|
||||
return;
|
||||
}
|
||||
|
||||
// request the changelog
|
||||
const res = await fetch(release.url, { signal: this.controller.signal });
|
||||
|
||||
if (res.status === 404) {
|
||||
this.setState({ error: true });
|
||||
|
@ -32,43 +58,12 @@ class Changelog extends PureComponent {
|
|||
return;
|
||||
}
|
||||
|
||||
const data = await res.json();
|
||||
let date = new Date(data.date.split(' ')[0]);
|
||||
date = date.toLocaleDateString(variables.languagecode.replace('_', '-'), {
|
||||
year: 'numeric',
|
||||
month: 'long',
|
||||
day: 'numeric',
|
||||
});
|
||||
|
||||
const changelog = await res.json();
|
||||
this.setState({
|
||||
title: data.title,
|
||||
date,
|
||||
image: data.featured_image || null,
|
||||
author: variables.getMessage('modals.main.settings.sections.changelog.by', {
|
||||
author: data.authors.join(', '),
|
||||
}),
|
||||
content: data.markdown,
|
||||
title: changelog.name,
|
||||
content: this.parseMarkdown(changelog.body),
|
||||
date: new Date(changelog.published_at).toLocaleDateString(),
|
||||
});
|
||||
|
||||
// lightbox etc
|
||||
const images = this.changelog.current.getElementsByTagName('img');
|
||||
const links = this.changelog.current.getElementsByTagName('a');
|
||||
|
||||
for (const img of images) {
|
||||
img.draggable = false;
|
||||
img.onclick = () => {
|
||||
this.setState({
|
||||
showLightbox: true,
|
||||
lightboxImg: img.src,
|
||||
});
|
||||
};
|
||||
}
|
||||
|
||||
// open in new tab
|
||||
for (let link = 0; link < links.length; link++) {
|
||||
links[link].target = '_blank';
|
||||
links[link].rel = 'noopener noreferrer';
|
||||
}
|
||||
}
|
||||
|
||||
componentDidMount() {
|
||||
|
@ -129,9 +124,7 @@ class Changelog extends PureComponent {
|
|||
return (
|
||||
<div className="changelogtab" ref={this.changelog}>
|
||||
<h1>{this.state.title}</h1>
|
||||
<h5>
|
||||
{this.state.author} • {this.state.date}
|
||||
</h5>
|
||||
<h5>Released on {this.state.date}</h5>
|
||||
{this.state.image && (
|
||||
<img
|
||||
draggable={false}
|
||||
|
@ -140,7 +133,7 @@ class Changelog extends PureComponent {
|
|||
className="updateImage"
|
||||
/>
|
||||
)}
|
||||
<div className="updateChangelog">{this.state.content}</div>
|
||||
<div className="updateChangelog" dangerouslySetInnerHTML={{ __html: this.state.content }} />
|
||||
<Modal
|
||||
closeTimeoutMS={100}
|
||||
onRequestClose={() => this.setState({ showLightbox: false })}
|
||||
|
|
|
@ -1,8 +1,50 @@
|
|||
[
|
||||
"Opened 10 tabs",
|
||||
"Opened 39 tabs",
|
||||
"Opened 100 tabs",
|
||||
"Opened 305 tabs",
|
||||
"Installed an add-on",
|
||||
"Installed 5 add-ons"
|
||||
]
|
||||
{
|
||||
"727": {
|
||||
"name": "When You See It",
|
||||
"description": "Opened 727 tabs"
|
||||
},
|
||||
"1337": {
|
||||
"name": "MU3T4B",
|
||||
"description": "Opened 1337 tabs"
|
||||
},
|
||||
"10tabs": {
|
||||
"name": "10/10 IGN",
|
||||
"description": "Opened 10 tabs"
|
||||
},
|
||||
"thankyou": {
|
||||
"name": "Thank You",
|
||||
"description": "Opened 39 tabs"
|
||||
},
|
||||
"seasoning": {
|
||||
"name": "Seasoning",
|
||||
"description": "Opened 100 tabs"
|
||||
},
|
||||
"mrworldwide": {
|
||||
"name": "Mr. Worldwide",
|
||||
"description": "Opened 305 tabs"
|
||||
},
|
||||
"tabaholic": {
|
||||
"name": "Tabaholic",
|
||||
"description": "Opened 500 tabs"
|
||||
},
|
||||
"808s": {
|
||||
"name": "808s & Tab Breaks",
|
||||
"description": "Opened 808 tabs"
|
||||
},
|
||||
"averagelinuxuser": {
|
||||
"name": "Average Linux User",
|
||||
"description": "Installed an add-on"
|
||||
},
|
||||
"fullyriced": {
|
||||
"name": "Fully Riced",
|
||||
"description": "Installed 5 add-ons"
|
||||
},
|
||||
"21addons": {
|
||||
"name": "They installed 21 add-ons? Whaaat?",
|
||||
"description": "Installed 21 add-ons"
|
||||
},
|
||||
"overload": {
|
||||
"name": "System Overload",
|
||||
"description": "Installed 50 add-ons"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,8 +1,50 @@
|
|||
[
|
||||
"Opened 10 tabs",
|
||||
"Opened 39 tabs",
|
||||
"Opened 100 tabs",
|
||||
"Opened 305 tabs",
|
||||
"Installed an add-on",
|
||||
"Installed 5 add-ons"
|
||||
]
|
||||
{
|
||||
"727": {
|
||||
"name": "When You See It",
|
||||
"description": "Opened 727 tabs"
|
||||
},
|
||||
"1337": {
|
||||
"name": "MU3T4B",
|
||||
"description": "Opened 1337 tabs"
|
||||
},
|
||||
"10tabs": {
|
||||
"name": "10/10 IGN",
|
||||
"description": "Opened 10 tabs"
|
||||
},
|
||||
"thankyou": {
|
||||
"name": "Thank You",
|
||||
"description": "Opened 39 tabs"
|
||||
},
|
||||
"seasoning": {
|
||||
"name": "Seasoning",
|
||||
"description": "Opened 100 tabs"
|
||||
},
|
||||
"mrworldwide": {
|
||||
"name": "Mr. Worldwide",
|
||||
"description": "Opened 305 tabs"
|
||||
},
|
||||
"tabaholic": {
|
||||
"name": "Tabaholic",
|
||||
"description": "Opened 500 tabs"
|
||||
},
|
||||
"808s": {
|
||||
"name": "808s & Tab Breaks",
|
||||
"description": "Opened 808 tabs"
|
||||
},
|
||||
"averagelinuxuser": {
|
||||
"name": "Average Linux User",
|
||||
"description": "Installed an add-on"
|
||||
},
|
||||
"fullyriced": {
|
||||
"name": "Fully Riced",
|
||||
"description": "Installed 5 add-ons"
|
||||
},
|
||||
"21addons": {
|
||||
"name": "They installed 21 add-ons? Whaaat?",
|
||||
"description": "Installed 21 add-ons"
|
||||
},
|
||||
"overload": {
|
||||
"name": "System Overload",
|
||||
"description": "Installed 50 add-ons"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,8 +1,50 @@
|
|||
[
|
||||
"Opened 10 tabs",
|
||||
"Opened 39 tabs",
|
||||
"Opened 100 tabs",
|
||||
"Opened 305 tabs",
|
||||
"Installed an add-on",
|
||||
"Installed 5 add-ons"
|
||||
]
|
||||
{
|
||||
"727": {
|
||||
"name": "When You See It",
|
||||
"description": "Opened 727 tabs"
|
||||
},
|
||||
"1337": {
|
||||
"name": "MU3T4B",
|
||||
"description": "Opened 1337 tabs"
|
||||
},
|
||||
"10tabs": {
|
||||
"name": "10/10 IGN",
|
||||
"description": "Opened 10 tabs"
|
||||
},
|
||||
"thankyou": {
|
||||
"name": "Thank You",
|
||||
"description": "Opened 39 tabs"
|
||||
},
|
||||
"seasoning": {
|
||||
"name": "Seasoning",
|
||||
"description": "Opened 100 tabs"
|
||||
},
|
||||
"mrworldwide": {
|
||||
"name": "Mr. Worldwide",
|
||||
"description": "Opened 305 tabs"
|
||||
},
|
||||
"tabaholic": {
|
||||
"name": "Tabaholic",
|
||||
"description": "Opened 500 tabs"
|
||||
},
|
||||
"808s": {
|
||||
"name": "808s & Tab Breaks",
|
||||
"description": "Opened 808 tabs"
|
||||
},
|
||||
"averagelinuxuser": {
|
||||
"name": "Average Linux User",
|
||||
"description": "Installed an add-on"
|
||||
},
|
||||
"fullyriced": {
|
||||
"name": "Fully Riced",
|
||||
"description": "Installed 5 add-ons"
|
||||
},
|
||||
"21addons": {
|
||||
"name": "They installed 21 add-ons? Whaaat?",
|
||||
"description": "Installed 21 add-ons"
|
||||
},
|
||||
"overload": {
|
||||
"name": "System Overload",
|
||||
"description": "Installed 50 add-ons"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,8 +1,50 @@
|
|||
[
|
||||
"Opened 10 tabs",
|
||||
"Opened 39 tabs",
|
||||
"Opened 100 tabs",
|
||||
"Opened 305 tabs",
|
||||
"Installed an add-on",
|
||||
"Installed 5 add-ons"
|
||||
]
|
||||
{
|
||||
"727": {
|
||||
"name": "When You See It",
|
||||
"description": "Opened 727 tabs"
|
||||
},
|
||||
"1337": {
|
||||
"name": "MU3T4B",
|
||||
"description": "Opened 1337 tabs"
|
||||
},
|
||||
"10tabs": {
|
||||
"name": "10/10 IGN",
|
||||
"description": "Opened 10 tabs"
|
||||
},
|
||||
"thankyou": {
|
||||
"name": "Thank You",
|
||||
"description": "Opened 39 tabs"
|
||||
},
|
||||
"seasoning": {
|
||||
"name": "Seasoning",
|
||||
"description": "Opened 100 tabs"
|
||||
},
|
||||
"mrworldwide": {
|
||||
"name": "Mr. Worldwide",
|
||||
"description": "Opened 305 tabs"
|
||||
},
|
||||
"tabaholic": {
|
||||
"name": "Tabaholic",
|
||||
"description": "Opened 500 tabs"
|
||||
},
|
||||
"808s": {
|
||||
"name": "808s & Tab Breaks",
|
||||
"description": "Opened 808 tabs"
|
||||
},
|
||||
"averagelinuxuser": {
|
||||
"name": "Average Linux User",
|
||||
"description": "Installed an add-on"
|
||||
},
|
||||
"fullyriced": {
|
||||
"name": "Fully Riced",
|
||||
"description": "Installed 5 add-ons"
|
||||
},
|
||||
"21addons": {
|
||||
"name": "They installed 21 add-ons? Whaaat?",
|
||||
"description": "Installed 21 add-ons"
|
||||
},
|
||||
"overload": {
|
||||
"name": "System Overload",
|
||||
"description": "Installed 50 add-ons"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,8 +1,50 @@
|
|||
[
|
||||
"Opened 10 tabs",
|
||||
"Opened 39 tabs",
|
||||
"Opened 100 tabs",
|
||||
"Opened 305 tabs",
|
||||
"Installed an add-on",
|
||||
"Installed 5 add-ons"
|
||||
]
|
||||
{
|
||||
"727": {
|
||||
"name": "When You See It",
|
||||
"description": "Opened 727 tabs"
|
||||
},
|
||||
"1337": {
|
||||
"name": "MU3T4B",
|
||||
"description": "Opened 1337 tabs"
|
||||
},
|
||||
"10tabs": {
|
||||
"name": "10/10 IGN",
|
||||
"description": "Opened 10 tabs"
|
||||
},
|
||||
"thankyou": {
|
||||
"name": "Thank You",
|
||||
"description": "Opened 39 tabs"
|
||||
},
|
||||
"seasoning": {
|
||||
"name": "Seasoning",
|
||||
"description": "Opened 100 tabs"
|
||||
},
|
||||
"mrworldwide": {
|
||||
"name": "Mr. Worldwide",
|
||||
"description": "Opened 305 tabs"
|
||||
},
|
||||
"tabaholic": {
|
||||
"name": "Tabaholic",
|
||||
"description": "Opened 500 tabs"
|
||||
},
|
||||
"808s": {
|
||||
"name": "808s & Tab Breaks",
|
||||
"description": "Opened 808 tabs"
|
||||
},
|
||||
"averagelinuxuser": {
|
||||
"name": "Average Linux User",
|
||||
"description": "Installed an add-on"
|
||||
},
|
||||
"fullyriced": {
|
||||
"name": "Fully Riced",
|
||||
"description": "Installed 5 add-ons"
|
||||
},
|
||||
"21addons": {
|
||||
"name": "They installed 21 add-ons? Whaaat?",
|
||||
"description": "Installed 21 add-ons"
|
||||
},
|
||||
"overload": {
|
||||
"name": "System Overload",
|
||||
"description": "Installed 50 add-ons"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,8 +1,50 @@
|
|||
[
|
||||
"Opened 10 tabs",
|
||||
"Opened 39 tabs",
|
||||
"Opened 100 tabs",
|
||||
"Opened 305 tabs",
|
||||
"Installed an add-on",
|
||||
"Installed 5 add-ons"
|
||||
]
|
||||
{
|
||||
"727": {
|
||||
"name": "When You See It",
|
||||
"description": "Opened 727 tabs"
|
||||
},
|
||||
"1337": {
|
||||
"name": "MU3T4B",
|
||||
"description": "Opened 1337 tabs"
|
||||
},
|
||||
"10tabs": {
|
||||
"name": "10/10 IGN",
|
||||
"description": "Opened 10 tabs"
|
||||
},
|
||||
"thankyou": {
|
||||
"name": "Thank You",
|
||||
"description": "Opened 39 tabs"
|
||||
},
|
||||
"seasoning": {
|
||||
"name": "Seasoning",
|
||||
"description": "Opened 100 tabs"
|
||||
},
|
||||
"mrworldwide": {
|
||||
"name": "Mr. Worldwide",
|
||||
"description": "Opened 305 tabs"
|
||||
},
|
||||
"tabaholic": {
|
||||
"name": "Tabaholic",
|
||||
"description": "Opened 500 tabs"
|
||||
},
|
||||
"808s": {
|
||||
"name": "808s & Tab Breaks",
|
||||
"description": "Opened 808 tabs"
|
||||
},
|
||||
"averagelinuxuser": {
|
||||
"name": "Average Linux User",
|
||||
"description": "Installed an add-on"
|
||||
},
|
||||
"fullyriced": {
|
||||
"name": "Fully Riced",
|
||||
"description": "Installed 5 add-ons"
|
||||
},
|
||||
"21addons": {
|
||||
"name": "They installed 21 add-ons? Whaaat?",
|
||||
"description": "Installed 21 add-ons"
|
||||
},
|
||||
"overload": {
|
||||
"name": "System Overload",
|
||||
"description": "Installed 50 add-ons"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,8 +1,50 @@
|
|||
[
|
||||
"Opened 10 tabs",
|
||||
"Opened 39 tabs",
|
||||
"Opened 100 tabs",
|
||||
"Opened 305 tabs",
|
||||
"Installed an add-on",
|
||||
"Installed 5 add-ons"
|
||||
]
|
||||
{
|
||||
"727": {
|
||||
"name": "When You See It",
|
||||
"description": "Opened 727 tabs"
|
||||
},
|
||||
"1337": {
|
||||
"name": "MU3T4B",
|
||||
"description": "Opened 1337 tabs"
|
||||
},
|
||||
"10tabs": {
|
||||
"name": "10/10 IGN",
|
||||
"description": "Opened 10 tabs"
|
||||
},
|
||||
"thankyou": {
|
||||
"name": "Thank You",
|
||||
"description": "Opened 39 tabs"
|
||||
},
|
||||
"seasoning": {
|
||||
"name": "Seasoning",
|
||||
"description": "Opened 100 tabs"
|
||||
},
|
||||
"mrworldwide": {
|
||||
"name": "Mr. Worldwide",
|
||||
"description": "Opened 305 tabs"
|
||||
},
|
||||
"tabaholic": {
|
||||
"name": "Tabaholic",
|
||||
"description": "Opened 500 tabs"
|
||||
},
|
||||
"808s": {
|
||||
"name": "808s & Tab Breaks",
|
||||
"description": "Opened 808 tabs"
|
||||
},
|
||||
"averagelinuxuser": {
|
||||
"name": "Average Linux User",
|
||||
"description": "Installed an add-on"
|
||||
},
|
||||
"fullyriced": {
|
||||
"name": "Fully Riced",
|
||||
"description": "Installed 5 add-ons"
|
||||
},
|
||||
"21addons": {
|
||||
"name": "They installed 21 add-ons? Whaaat?",
|
||||
"description": "Installed 21 add-ons"
|
||||
},
|
||||
"overload": {
|
||||
"name": "System Overload",
|
||||
"description": "Installed 50 add-ons"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,8 +1,50 @@
|
|||
[
|
||||
"Opened 10 tabs",
|
||||
"Opened 39 tabs",
|
||||
"Opened 100 tabs",
|
||||
"Opened 305 tabs",
|
||||
"Installed an add-on",
|
||||
"Installed 5 add-ons"
|
||||
]
|
||||
{
|
||||
"727": {
|
||||
"name": "When You See It",
|
||||
"description": "Opened 727 tabs"
|
||||
},
|
||||
"1337": {
|
||||
"name": "MU3T4B",
|
||||
"description": "Opened 1337 tabs"
|
||||
},
|
||||
"10tabs": {
|
||||
"name": "10/10 IGN",
|
||||
"description": "Opened 10 tabs"
|
||||
},
|
||||
"thankyou": {
|
||||
"name": "Thank You",
|
||||
"description": "Opened 39 tabs"
|
||||
},
|
||||
"seasoning": {
|
||||
"name": "Seasoning",
|
||||
"description": "Opened 100 tabs"
|
||||
},
|
||||
"mrworldwide": {
|
||||
"name": "Mr. Worldwide",
|
||||
"description": "Opened 305 tabs"
|
||||
},
|
||||
"tabaholic": {
|
||||
"name": "Tabaholic",
|
||||
"description": "Opened 500 tabs"
|
||||
},
|
||||
"808s": {
|
||||
"name": "808s & Tab Breaks",
|
||||
"description": "Opened 808 tabs"
|
||||
},
|
||||
"averagelinuxuser": {
|
||||
"name": "Average Linux User",
|
||||
"description": "Installed an add-on"
|
||||
},
|
||||
"fullyriced": {
|
||||
"name": "Fully Riced",
|
||||
"description": "Installed 5 add-ons"
|
||||
},
|
||||
"21addons": {
|
||||
"name": "They installed 21 add-ons? Whaaat?",
|
||||
"description": "Installed 21 add-ons"
|
||||
},
|
||||
"overload": {
|
||||
"name": "System Overload",
|
||||
"description": "Installed 50 add-ons"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,8 +1,50 @@
|
|||
[
|
||||
"Opened 10 tabs",
|
||||
"Opened 39 tabs",
|
||||
"Opened 100 tabs",
|
||||
"Opened 305 tabs",
|
||||
"Installed an add-on",
|
||||
"Installed 5 add-ons"
|
||||
]
|
||||
{
|
||||
"727": {
|
||||
"name": "When You See It",
|
||||
"description": "Opened 727 tabs"
|
||||
},
|
||||
"1337": {
|
||||
"name": "MU3T4B",
|
||||
"description": "Opened 1337 tabs"
|
||||
},
|
||||
"10tabs": {
|
||||
"name": "10/10 IGN",
|
||||
"description": "Opened 10 tabs"
|
||||
},
|
||||
"thankyou": {
|
||||
"name": "Thank You",
|
||||
"description": "Opened 39 tabs"
|
||||
},
|
||||
"seasoning": {
|
||||
"name": "Seasoning",
|
||||
"description": "Opened 100 tabs"
|
||||
},
|
||||
"mrworldwide": {
|
||||
"name": "Mr. Worldwide",
|
||||
"description": "Opened 305 tabs"
|
||||
},
|
||||
"tabaholic": {
|
||||
"name": "Tabaholic",
|
||||
"description": "Opened 500 tabs"
|
||||
},
|
||||
"808s": {
|
||||
"name": "808s & Tab Breaks",
|
||||
"description": "Opened 808 tabs"
|
||||
},
|
||||
"averagelinuxuser": {
|
||||
"name": "Average Linux User",
|
||||
"description": "Installed an add-on"
|
||||
},
|
||||
"fullyriced": {
|
||||
"name": "Fully Riced",
|
||||
"description": "Installed 5 add-ons"
|
||||
},
|
||||
"21addons": {
|
||||
"name": "They installed 21 add-ons? Whaaat?",
|
||||
"description": "Installed 21 add-ons"
|
||||
},
|
||||
"overload": {
|
||||
"name": "System Overload",
|
||||
"description": "Installed 50 add-ons"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,8 +1,50 @@
|
|||
[
|
||||
"Opened 10 tabs",
|
||||
"Opened 39 tabs",
|
||||
"Opened 100 tabs",
|
||||
"Opened 305 tabs",
|
||||
"Installed an add-on",
|
||||
"Installed 5 add-ons"
|
||||
]
|
||||
{
|
||||
"727": {
|
||||
"name": "When You See It",
|
||||
"description": "Opened 727 tabs"
|
||||
},
|
||||
"1337": {
|
||||
"name": "MU3T4B",
|
||||
"description": "Opened 1337 tabs"
|
||||
},
|
||||
"10tabs": {
|
||||
"name": "10/10 IGN",
|
||||
"description": "Opened 10 tabs"
|
||||
},
|
||||
"thankyou": {
|
||||
"name": "Thank You",
|
||||
"description": "Opened 39 tabs"
|
||||
},
|
||||
"seasoning": {
|
||||
"name": "Seasoning",
|
||||
"description": "Opened 100 tabs"
|
||||
},
|
||||
"mrworldwide": {
|
||||
"name": "Mr. Worldwide",
|
||||
"description": "Opened 305 tabs"
|
||||
},
|
||||
"tabaholic": {
|
||||
"name": "Tabaholic",
|
||||
"description": "Opened 500 tabs"
|
||||
},
|
||||
"808s": {
|
||||
"name": "808s & Tab Breaks",
|
||||
"description": "Opened 808 tabs"
|
||||
},
|
||||
"averagelinuxuser": {
|
||||
"name": "Average Linux User",
|
||||
"description": "Installed an add-on"
|
||||
},
|
||||
"fullyriced": {
|
||||
"name": "Fully Riced",
|
||||
"description": "Installed 5 add-ons"
|
||||
},
|
||||
"21addons": {
|
||||
"name": "They installed 21 add-ons? Whaaat?",
|
||||
"description": "Installed 21 add-ons"
|
||||
},
|
||||
"overload": {
|
||||
"name": "System Overload",
|
||||
"description": "Installed 50 add-ons"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,8 +1,50 @@
|
|||
[
|
||||
"Opened 10 tabs",
|
||||
"Opened 39 tabs",
|
||||
"Opened 100 tabs",
|
||||
"Opened 305 tabs",
|
||||
"Installed an add-on",
|
||||
"Installed 5 add-ons"
|
||||
]
|
||||
{
|
||||
"727": {
|
||||
"name": "When You See It",
|
||||
"description": "Opened 727 tabs"
|
||||
},
|
||||
"1337": {
|
||||
"name": "MU3T4B",
|
||||
"description": "Opened 1337 tabs"
|
||||
},
|
||||
"10tabs": {
|
||||
"name": "10/10 IGN",
|
||||
"description": "Opened 10 tabs"
|
||||
},
|
||||
"thankyou": {
|
||||
"name": "Thank You",
|
||||
"description": "Opened 39 tabs"
|
||||
},
|
||||
"seasoning": {
|
||||
"name": "Seasoning",
|
||||
"description": "Opened 100 tabs"
|
||||
},
|
||||
"mrworldwide": {
|
||||
"name": "Mr. Worldwide",
|
||||
"description": "Opened 305 tabs"
|
||||
},
|
||||
"tabaholic": {
|
||||
"name": "Tabaholic",
|
||||
"description": "Opened 500 tabs"
|
||||
},
|
||||
"808s": {
|
||||
"name": "808s & Tab Breaks",
|
||||
"description": "Opened 808 tabs"
|
||||
},
|
||||
"averagelinuxuser": {
|
||||
"name": "Average Linux User",
|
||||
"description": "Installed an add-on"
|
||||
},
|
||||
"fullyriced": {
|
||||
"name": "Fully Riced",
|
||||
"description": "Installed 5 add-ons"
|
||||
},
|
||||
"21addons": {
|
||||
"name": "They installed 21 add-ons? Whaaat?",
|
||||
"description": "Installed 21 add-ons"
|
||||
},
|
||||
"overload": {
|
||||
"name": "System Overload",
|
||||
"description": "Installed 50 add-ons"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,8 +1,50 @@
|
|||
[
|
||||
"Opened 10 tabs",
|
||||
"Opened 39 tabs",
|
||||
"Opened 100 tabs",
|
||||
"Opened 305 tabs",
|
||||
"Installed an add-on",
|
||||
"Installed 5 add-ons"
|
||||
]
|
||||
{
|
||||
"727": {
|
||||
"name": "When You See It",
|
||||
"description": "Opened 727 tabs"
|
||||
},
|
||||
"1337": {
|
||||
"name": "MU3T4B",
|
||||
"description": "Opened 1337 tabs"
|
||||
},
|
||||
"10tabs": {
|
||||
"name": "10/10 IGN",
|
||||
"description": "Opened 10 tabs"
|
||||
},
|
||||
"thankyou": {
|
||||
"name": "Thank You",
|
||||
"description": "Opened 39 tabs"
|
||||
},
|
||||
"seasoning": {
|
||||
"name": "Seasoning",
|
||||
"description": "Opened 100 tabs"
|
||||
},
|
||||
"mrworldwide": {
|
||||
"name": "Mr. Worldwide",
|
||||
"description": "Opened 305 tabs"
|
||||
},
|
||||
"tabaholic": {
|
||||
"name": "Tabaholic",
|
||||
"description": "Opened 500 tabs"
|
||||
},
|
||||
"808s": {
|
||||
"name": "808s & Tab Breaks",
|
||||
"description": "Opened 808 tabs"
|
||||
},
|
||||
"averagelinuxuser": {
|
||||
"name": "Average Linux User",
|
||||
"description": "Installed an add-on"
|
||||
},
|
||||
"fullyriced": {
|
||||
"name": "Fully Riced",
|
||||
"description": "Installed 5 add-ons"
|
||||
},
|
||||
"21addons": {
|
||||
"name": "They installed 21 add-ons? Whaaat?",
|
||||
"description": "Installed 21 add-ons"
|
||||
},
|
||||
"overload": {
|
||||
"name": "System Overload",
|
||||
"description": "Installed 50 add-ons"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,8 +1,50 @@
|
|||
[
|
||||
"Opened 10 tabs",
|
||||
"Opened 39 tabs",
|
||||
"Opened 100 tabs",
|
||||
"Opened 305 tabs",
|
||||
"Installed an add-on",
|
||||
"Installed 5 add-ons"
|
||||
]
|
||||
{
|
||||
"727": {
|
||||
"name": "When You See It",
|
||||
"description": "Opened 727 tabs"
|
||||
},
|
||||
"1337": {
|
||||
"name": "MU3T4B",
|
||||
"description": "Opened 1337 tabs"
|
||||
},
|
||||
"10tabs": {
|
||||
"name": "10/10 IGN",
|
||||
"description": "Opened 10 tabs"
|
||||
},
|
||||
"thankyou": {
|
||||
"name": "Thank You",
|
||||
"description": "Opened 39 tabs"
|
||||
},
|
||||
"seasoning": {
|
||||
"name": "Seasoning",
|
||||
"description": "Opened 100 tabs"
|
||||
},
|
||||
"mrworldwide": {
|
||||
"name": "Mr. Worldwide",
|
||||
"description": "Opened 305 tabs"
|
||||
},
|
||||
"tabaholic": {
|
||||
"name": "Tabaholic",
|
||||
"description": "Opened 500 tabs"
|
||||
},
|
||||
"808s": {
|
||||
"name": "808s & Tab Breaks",
|
||||
"description": "Opened 808 tabs"
|
||||
},
|
||||
"averagelinuxuser": {
|
||||
"name": "Average Linux User",
|
||||
"description": "Installed an add-on"
|
||||
},
|
||||
"fullyriced": {
|
||||
"name": "Fully Riced",
|
||||
"description": "Installed 5 add-ons"
|
||||
},
|
||||
"21addons": {
|
||||
"name": "They installed 21 add-ons? Whaaat?",
|
||||
"description": "Installed 21 add-ons"
|
||||
},
|
||||
"overload": {
|
||||
"name": "System Overload",
|
||||
"description": "Installed 50 add-ons"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,8 +1,50 @@
|
|||
[
|
||||
"Opened 10 tabs",
|
||||
"Opened 39 tabs",
|
||||
"Opened 100 tabs",
|
||||
"Opened 305 tabs",
|
||||
"Installed an add-on",
|
||||
"Installed 5 add-ons"
|
||||
]
|
||||
{
|
||||
"727": {
|
||||
"name": "When You See It",
|
||||
"description": "Opened 727 tabs"
|
||||
},
|
||||
"1337": {
|
||||
"name": "MU3T4B",
|
||||
"description": "Opened 1337 tabs"
|
||||
},
|
||||
"10tabs": {
|
||||
"name": "10/10 IGN",
|
||||
"description": "Opened 10 tabs"
|
||||
},
|
||||
"thankyou": {
|
||||
"name": "Thank You",
|
||||
"description": "Opened 39 tabs"
|
||||
},
|
||||
"seasoning": {
|
||||
"name": "Seasoning",
|
||||
"description": "Opened 100 tabs"
|
||||
},
|
||||
"mrworldwide": {
|
||||
"name": "Mr. Worldwide",
|
||||
"description": "Opened 305 tabs"
|
||||
},
|
||||
"tabaholic": {
|
||||
"name": "Tabaholic",
|
||||
"description": "Opened 500 tabs"
|
||||
},
|
||||
"808s": {
|
||||
"name": "808s & Tab Breaks",
|
||||
"description": "Opened 808 tabs"
|
||||
},
|
||||
"averagelinuxuser": {
|
||||
"name": "Average Linux User",
|
||||
"description": "Installed an add-on"
|
||||
},
|
||||
"fullyriced": {
|
||||
"name": "Fully Riced",
|
||||
"description": "Installed 5 add-ons"
|
||||
},
|
||||
"21addons": {
|
||||
"name": "They installed 21 add-ons? Whaaat?",
|
||||
"description": "Installed 21 add-ons"
|
||||
},
|
||||
"overload": {
|
||||
"name": "System Overload",
|
||||
"description": "Installed 50 add-ons"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -676,6 +676,7 @@
|
|||
"error": "Something went wrong",
|
||||
"imported": "Successfully imported",
|
||||
"no_storage": "Not enough storage",
|
||||
"link_copied": "Link copied"
|
||||
"link_copied": "Link copied",
|
||||
"stats_reset": "Stats reset"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -676,6 +676,7 @@
|
|||
"error": "Etwas ist schief gelaufen",
|
||||
"imported": "Erfolgreich importiert",
|
||||
"no_storage": "Nicht genügend Speicherplatz",
|
||||
"link_copied": "Link kopiert"
|
||||
"link_copied": "Link kopiert",
|
||||
"stats_reset": "Stats reset"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -676,6 +676,7 @@
|
|||
"error": "Something went wrong",
|
||||
"imported": "Successfully imported",
|
||||
"no_storage": "Not enough storage",
|
||||
"link_copied": "Link copied"
|
||||
"link_copied": "Link copied",
|
||||
"stats_reset": "Stats reset"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -676,6 +676,7 @@
|
|||
"error": "Algo salió mal",
|
||||
"imported": "Importado correctamente",
|
||||
"no_storage": "No hay espacio suficiente",
|
||||
"link_copied": "Enlace copiado"
|
||||
"link_copied": "Enlace copiado",
|
||||
"stats_reset": "Stats reset"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -676,6 +676,7 @@
|
|||
"error": "Algo salió mal",
|
||||
"imported": "Importado correctamente",
|
||||
"no_storage": "Not enough storage",
|
||||
"link_copied": "Link copied"
|
||||
"link_copied": "Link copied",
|
||||
"stats_reset": "Stats reset"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -676,6 +676,7 @@
|
|||
"error": "Quelque chose s'est mal passé",
|
||||
"imported": "Importé avec succès",
|
||||
"no_storage": "Not enough storage",
|
||||
"link_copied": "Link copied"
|
||||
"link_copied": "Link copied",
|
||||
"stats_reset": "Stats reset"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -676,6 +676,7 @@
|
|||
"error": "Terdapat kesalahan",
|
||||
"imported": "Berhasil mengimpor",
|
||||
"no_storage": "Not enough storage",
|
||||
"link_copied": "Link copied"
|
||||
"link_copied": "Link copied",
|
||||
"stats_reset": "Stats reset"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -676,6 +676,7 @@
|
|||
"error": "Er is iets misgegaan",
|
||||
"imported": "Het importeren is voltooid",
|
||||
"no_storage": "Niet genoeg opslag",
|
||||
"link_copied": "Link gekopieerd"
|
||||
"link_copied": "Link gekopieerd",
|
||||
"stats_reset": "Stats reset"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -676,6 +676,7 @@
|
|||
"error": "Noe gikk galt",
|
||||
"imported": "Successfully imported",
|
||||
"no_storage": "Not enough storage",
|
||||
"link_copied": "Link copied"
|
||||
"link_copied": "Link copied",
|
||||
"stats_reset": "Stats reset"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -676,6 +676,7 @@
|
|||
"error": "Algo deu errado",
|
||||
"imported": "Importado com sucesso",
|
||||
"no_storage": "Espaço de armazenamento insuficiente",
|
||||
"link_copied": "Ligação copiada"
|
||||
"link_copied": "Ligação copiada",
|
||||
"stats_reset": "Stats reset"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -676,6 +676,7 @@
|
|||
"error": "Algo deu errado",
|
||||
"imported": "Importado com sucesso",
|
||||
"no_storage": "Espaço de armazenamento insuficiente",
|
||||
"link_copied": "Link copiado"
|
||||
"link_copied": "Link copiado",
|
||||
"stats_reset": "Stats reset"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -676,6 +676,7 @@
|
|||
"error": "Что-то пошло не так",
|
||||
"imported": "Успешно импортировано",
|
||||
"no_storage": "Недостаточно места",
|
||||
"link_copied": "Ссылка скопирована"
|
||||
"link_copied": "Ссылка скопирована",
|
||||
"stats_reset": "Stats reset"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -676,6 +676,7 @@
|
|||
"error": "Bir şeyler yanlış gitti.",
|
||||
"imported": "Başarıyla içe aktarıldı.",
|
||||
"no_storage": "Yeteri kadar yer yok.",
|
||||
"link_copied": "Bağlantı kopyalandı."
|
||||
"link_copied": "Bağlantı kopyalandı.",
|
||||
"stats_reset": "Stats reset"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -676,6 +676,7 @@
|
|||
"error": "发生错误",
|
||||
"imported": "导入成功",
|
||||
"no_storage": "Not enough storage",
|
||||
"link_copied": "Link copied"
|
||||
"link_copied": "Link copied",
|
||||
"stats_reset": "Stats reset"
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue