Compare commits

...

17 Commits
6.0.1 ... 6.0.3

Author SHA1 Message Date
David Ralph
a170981772 chore: release 6.0.3 2021-11-28 20:01:16 +00:00
David Ralph
14d3589551 fix: create tab
Co-authored-by: Alex Sparkes <turbomarshmello@gmail.com>
2021-11-28 20:00:22 +00:00
David Ralph
c736dcf57a fix: enable photo map and update, fix welcome error, fix preview 2021-11-28 14:13:24 +00:00
David Ralph
623b54eca0 fix: create tab, modal ui
Co-authored-by: Alex Sparkes <turbomarshmello@gmail.com>
2021-11-28 12:39:54 +00:00
David Ralph
1dc0389a96 fix: autocomplete search 2021-11-28 11:31:00 +00:00
David Ralph
3c7be2d64d fix: background categories dropdown 2021-11-27 23:11:40 +00:00
David Ralph
5703abb685 fix: marketplace item page responsiveness 2021-11-27 21:54:58 +00:00
dependabot[bot]
8f08b4d09d chore(deps): bump @mui/material from 5.2.0 to 5.2.1 (#215)
Bumps [@mui/material](https://github.com/mui-org/material-ui/tree/HEAD/packages/mui-material) from 5.2.0 to 5.2.1.
- [Release notes](https://github.com/mui-org/material-ui/releases)
- [Changelog](https://github.com/mui-org/material-ui/blob/master/CHANGELOG.md)
- [Commits](https://github.com/mui-org/material-ui/commits/v5.2.1/packages/mui-material)

---
updated-dependencies:
- dependency-name: "@mui/material"
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-11-26 10:58:57 +00:00
dependabot[bot]
441d440c74 chore(deps): bump @mui/icons-material from 5.1.1 to 5.2.0 (#213)
Bumps [@mui/icons-material](https://github.com/mui-org/material-ui/tree/HEAD/packages/mui-icons-material) from 5.1.1 to 5.2.0.
- [Release notes](https://github.com/mui-org/material-ui/releases)
- [Changelog](https://github.com/mui-org/material-ui/blob/master/CHANGELOG.md)
- [Commits](https://github.com/mui-org/material-ui/commits/v5.2.0/packages/mui-icons-material)

---
updated-dependencies:
- dependency-name: "@mui/icons-material"
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-11-24 10:40:07 +00:00
dependabot[bot]
fe5f15be24 chore(deps): bump @mui/material from 5.1.1 to 5.2.0 (#212)
Bumps [@mui/material](https://github.com/mui-org/material-ui/tree/HEAD/packages/mui-material) from 5.1.1 to 5.2.0.
- [Release notes](https://github.com/mui-org/material-ui/releases)
- [Changelog](https://github.com/mui-org/material-ui/blob/master/CHANGELOG.md)
- [Commits](https://github.com/mui-org/material-ui/commits/v5.2.0/packages/mui-material)

---
updated-dependencies:
- dependency-name: "@mui/material"
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-11-24 10:36:45 +00:00
David Ralph
bd941896aa chore: release 6.0.2 2021-11-23 18:39:43 +00:00
David Ralph
d9563ce343 build: fix demo 2021-11-23 18:22:24 +00:00
David Ralph
af2edeb737 fix: various ui fixes, fix create tab
Co-authored-by: Alex Sparkes <turbomarshmello@gmail.com>
2021-11-23 18:11:36 +00:00
David Ralph
f8ee23eb40 fix: notes breaking mue when there are many rows 2021-11-22 22:41:17 +00:00
dependabot[bot]
234d489a29 chore(deps-dev): bump copy-webpack-plugin from 9.1.0 to 10.0.0 (#209)
Bumps [copy-webpack-plugin](https://github.com/webpack-contrib/copy-webpack-plugin) from 9.1.0 to 10.0.0.
- [Release notes](https://github.com/webpack-contrib/copy-webpack-plugin/releases)
- [Changelog](https://github.com/webpack-contrib/copy-webpack-plugin/blob/master/CHANGELOG.md)
- [Commits](https://github.com/webpack-contrib/copy-webpack-plugin/compare/v9.1.0...v10.0.0)

---
updated-dependencies:
- dependency-name: copy-webpack-plugin
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-11-22 14:02:54 +00:00
Vicente
7881e47590 fix(translations): fix typo (#211) 2021-11-18 17:59:03 +00:00
Vicente
40397ac33c feat(translations): update spanish translation (#210)
* feat(translations): update spanish translations

* feat(translations): update spanish translations
2021-11-18 17:58:24 +00:00
32 changed files with 225 additions and 137 deletions

View File

@@ -4,7 +4,7 @@
"default_locale": "en", "default_locale": "en",
"name": "__MSG_name__", "name": "__MSG_name__",
"description": "__MSG_description__", "description": "__MSG_description__",
"version": "6.0.1", "version": "6.0.3",
"homepage_url": "https://muetab.com", "homepage_url": "https://muetab.com",
"browser_action": { "browser_action": {
"default_icon": "icons/128x128.png" "default_icon": "icons/128x128.png"

View File

@@ -2,7 +2,7 @@
"manifest_version": 2, "manifest_version": 2,
"name": "Mue", "name": "Mue",
"description": "Fast, open and free-to-use new tab page for modern browsers.", "description": "Fast, open and free-to-use new tab page for modern browsers.",
"version": "6.0.1", "version": "6.0.3",
"homepage_url": "https://muetab.com", "homepage_url": "https://muetab.com",
"browser_action": { "browser_action": {
"default_icon": "icons/128x128.png" "default_icon": "icons/128x128.png"

View File

@@ -9,15 +9,15 @@
"homepage": "https://muetab.com", "homepage": "https://muetab.com",
"bugs": "https://github.com/mue/mue/issues/new?assignees=&labels=bug&template=bug-report.md&title=%5BBUG%5D", "bugs": "https://github.com/mue/mue/issues/new?assignees=&labels=bug&template=bug-report.md&title=%5BBUG%5D",
"license": "BSD-3-Clause", "license": "BSD-3-Clause",
"version": "6.0.1", "version": "6.0.3",
"dependencies": { "dependencies": {
"@eartharoid/i18n": "^1.0.2", "@eartharoid/i18n": "^1.0.2",
"@emotion/react": "^11.5.0", "@emotion/react": "^11.5.0",
"@emotion/styled": "^11.3.0", "@emotion/styled": "^11.3.0",
"@fontsource/lexend-deca": "4.4.5", "@fontsource/lexend-deca": "4.4.5",
"@fontsource/montserrat": "4.4.5", "@fontsource/montserrat": "4.4.5",
"@mui/icons-material": "5.1.1", "@mui/icons-material": "5.2.0",
"@mui/material": "5.1.1", "@mui/material": "5.2.1",
"react": "17.0.2", "react": "17.0.2",
"react-clock": "3.0.0", "react-clock": "3.0.0",
"react-color-gradient-picker": "0.1.2", "react-color-gradient-picker": "0.1.2",
@@ -40,7 +40,7 @@
"@eartharoid/deep-merge": "^0.0.2", "@eartharoid/deep-merge": "^0.0.2",
"babel-loader": "^8.2.3", "babel-loader": "^8.2.3",
"babel-plugin-transform-react-class-to-function": "^1.2.2", "babel-plugin-transform-react-class-to-function": "^1.2.2",
"copy-webpack-plugin": "^9.0.1", "copy-webpack-plugin": "9.1.0",
"css-loader": "^6.5.1", "css-loader": "^6.5.1",
"eslint": "^8.2.0", "eslint": "^8.2.0",
"eslint-config-react-app": "^6.0.0", "eslint-config-react-app": "^6.0.0",

View File

@@ -35,7 +35,12 @@ export default class Autocomplete extends PureComponent {
input: e.target.innerText input: e.target.innerText
}); });
this.props.onClick(e); this.props.onClick({
preventDefault: () => e.preventDefault(),
target: {
value: e.target.innerText
}
});
}; };
componentDidMount() { componentDidMount() {

View File

@@ -7,9 +7,9 @@ export default function Preview(props) {
return ( return (
<div className='preview-mode'> <div className='preview-mode'>
<h3>{getMessage('modals.main.settings.reminder.title')}</h3> <h1>{getMessage('modals.main.settings.reminder.title')}</h1>
<h1>{getMessage('modals.welcome.preview.description')}</h1> <p>{getMessage('modals.welcome.preview.description')}</p>
<button className='close' onClick={() => props.setup()}>{getMessage('modals.welcome.preview.continue')}</button> <button className='pinNote' onClick={() => props.setup()}>{getMessage('modals.welcome.preview.continue')}</button>
</div> </div>
); );
} }

View File

@@ -6,8 +6,10 @@
color: var(--modal-text); color: var(--modal-text);
background: var(--background); background: var(--background);
max-width: 300px; max-width: 300px;
border-radius: 0.7em; border-radius: .7em;
z-index: 999; z-index: 999;
text-align: left;
cursor: default;
h1 { h1 {
font-size: 1rem; font-size: 1rem;

View File

@@ -3,7 +3,9 @@ import { PureComponent } from 'react';
import { import {
SettingsRounded as Settings, SettingsRounded as Settings,
PhotoOutlined as Photos, PhotoOutlined as Photos,
FormatQuoteOutlined as Quotes FormatQuoteOutlined as Quotes,
Upload as ImportIcon,
Download as ExportIcon,
} from '@mui/icons-material'; } from '@mui/icons-material';
import { TextField } from '@mui/material'; import { TextField } from '@mui/material';
import { toast } from 'react-toastify'; import { toast } from 'react-toastify';
@@ -56,7 +58,8 @@ export default class Create extends PureComponent {
const data = input || localStorage; const data = input || localStorage;
let settings = {}; let settings = {};
Object.keys(data).forEach((key) => { Object.keys(data).forEach((key) => {
if (key === 'statsData' || key === 'firstRun' || key === 'showWelcome' || key === 'language' || key === 'installed' || key === 'stats') { if (key === 'statsData' || key === 'firstRun' || key === 'showWelcome' || key === 'language' || key === 'installed' || key === 'stats' || key === 'backup_settings' || key === 'showReminder'
|| key === 'experimental' || key === 'debugtimeout' || key === 'quotelanguage') {
return; return;
} }
settings[key] = localStorage.getItem(key); settings[key] = localStorage.getItem(key);
@@ -65,7 +68,7 @@ export default class Create extends PureComponent {
this.setState({ this.setState({
addonData: settings, addonData: settings,
settingsClasses: { settingsClasses: {
current: input ? 'toggle lightTheme' : 'toggle lightTheme active', current: input ? 'toggle lightTheme active' : 'toggle lightTheme',
json: input ? 'toggle lightTheme active' : 'toggle lightTheme' json: input ? 'toggle lightTheme active' : 'toggle lightTheme'
} }
}); });
@@ -119,9 +122,7 @@ export default class Create extends PureComponent {
importQuotes() { importQuotes() {
this.setState({ this.setState({
addonData: { addonData: JSON.parse(localStorage.getItem('customQuote')) || []
quotes: JSON.parse(localStorage.getItem('customQuote')) || []
}
}); });
toast(variables.language.getMessage(variables.languagecode, 'toasts.imported')); toast(variables.language.getMessage(variables.languagecode, 'toasts.imported'));
@@ -130,7 +131,16 @@ export default class Create extends PureComponent {
importPhotos() { importPhotos() {
let data = []; let data = [];
try { try {
data = JSON.parse(localStorage.getItem('customBackground')); const current = JSON.parse(localStorage.getItem('customBackground')) || [];
data = current.map((item) => {
return {
photographer: '???',
location: '???',
url: {
default: item
}
}
});
toast(variables.language.getMessage(variables.languagecode, 'toasts.imported')); toast(variables.language.getMessage(variables.languagecode, 'toasts.imported'));
} catch (e) { } catch (e) {
console.log(e); console.log(e);
@@ -138,9 +148,7 @@ export default class Create extends PureComponent {
} }
this.setState({ this.setState({
addonData: { addonData: data
photos: data
}
}); });
} }
@@ -224,21 +232,23 @@ export default class Create extends PureComponent {
const nextSettingsDisabled = (this.state.addonData === '') ? true : false; const nextSettingsDisabled = (this.state.addonData === '') ? true : false;
const importSettings = ( const importSettings = (
<> <>
<h3>{getMessage('modals.mwelcome.sections.title')}</h3> <h3>{getMessage('modals.welcome.sections.settings.title')}</h3>
<div className='themesToggleArea'> <div className='themesToggleArea' >
<div className='options'> <div className='options' style={{ maxWidth: '512px' }}>
<div className={this.state.settingsClasses.current} onClick={() => this.importSettings()}> <div className={this.state.settingsClasses.current} onClick={() => this.importSettings()}>
<ExportIcon/>
<span>{getMessage('modals.main.addons.create.settings.current')}</span> <span>{getMessage('modals.main.addons.create.settings.current')}</span>
</div> </div>
<div className={this.state.settingsClasses.json} onClick={() => document.getElementById('file-input').click()}> <div className={this.state.settingsClasses.json} onClick={() => document.getElementById('file-input').click()}>
<ImportIcon/>
<span>{getMessage('modals.main.addons.create.settings.json')}</span> <span>{getMessage('modals.main.addons.create.settings.json')}</span>
</div> </div>
</div> </div>
</div> </div>
<FileUpload id='file-input' type='settings' accept='application/json' loadFunction={(e) => this.importSettings(JSON.parse(e.target.result))} /> <FileUpload id='file-input' type='settings' accept='application/json' loadFunction={(e) => this.importSettings(JSON.parse(e.target.result))} />
<br/><br/> <br/><br/>
<button onClick={() => this.changeTab(2)} className='uploadbg' style={{ marginRight: '10px' }}>{getMessage('modals.welcome.buttons.previous')}</button> <button onClick={() => this.changeTab(2)} className='uploadbg' style={{ margin: '10px' }}>{getMessage('modals.welcome.buttons.previous')}</button>
<button onClick={() => this.changeTab(3)} className='uploadbg' disabled={nextSettingsDisabled}>{getMessage('modals.welcome.buttons.next')}</button> <button onClick={() => this.changeTab(3)} className='uploadbg' style={{ margin: '10px' }} disabled={nextSettingsDisabled}>{getMessage('modals.welcome.buttons.next')}</button>
</> </>
); );
@@ -253,18 +263,23 @@ export default class Create extends PureComponent {
<option value='quote_api'>{getMessage('modals.main.addons.create.quotes.api.title')}</option> <option value='quote_api'>{getMessage('modals.main.addons.create.quotes.api.title')}</option>
</Dropdown> </Dropdown>
{this.state.addonMetadata.type === 'quote_api' ? <> {this.state.addonMetadata.type === 'quote_api' ? <>
<h3>{getMessage('modals.main.addons.create.quotes.api.title')}</h3>
<TextField label={getMessage('modals.main.addons.create.quotes.api.url')} varient='outlined' InputLabelProps={{ shrink: true }} value={this.state.addonData.url} onInput={(e) => this.updateQuotePack(e.target.value, 'url')}/> <TextField label={getMessage('modals.main.addons.create.quotes.api.url')} varient='outlined' InputLabelProps={{ shrink: true }} value={this.state.addonData.url} onInput={(e) => this.updateQuotePack(e.target.value, 'url')}/>
<TextField label={getMessage('modals.main.addons.create.quotes.api.name')} varient='outlined' InputLabelProps={{ shrink: true }} value={this.state.addonData.name} onInput={(e) => this.updateQuotePack(e.target.value, 'name')}/> <TextField label={getMessage('modals.main.addons.create.quotes.api.name')} varient='outlined' InputLabelProps={{ shrink: true }} value={this.state.addonData.name} onInput={(e) => this.updateQuotePack(e.target.value, 'name')}/>
<TextField label={getMessage('modals.main.addons.create.quotes.api.author')} varient='outlined' InputLabelProps={{ shrink: true }} value={this.state.addonData.author} onInput={(e) => this.updateQuotePack(e.target.value, 'author')}/> <TextField label={getMessage('modals.main.addons.create.quotes.api.author')} varient='outlined' InputLabelProps={{ shrink: true }} value={this.state.addonData.author} onInput={(e) => this.updateQuotePack(e.target.value, 'author')}/>
<br/><br/> <br/><br/>
</> : <> </> : <>
<h3>{getMessage('modals.main.addons.create.quotes.local.title')}</h3> <div className='themesToggleArea'>
<button onClick={() => this.importQuotes()} className='uploadbg' style={{ marginRight: '10px' }}>{getMessage('modals.main.addons.create.settings.current')}</button> <div className='options'>
<br/><br/> <div onClick={() => this.importQuotes()} className='toggle lightTheme' style={{ width: '60%', margin: '10px 0 10px 0' }}>
<ExportIcon/>
<span>{getMessage('modals.main.addons.create.settings.current')}</span>
</div>
</div>
</div>
<br/>
</>} </>}
<button onClick={() => this.changeTab(2)} className='uploadbg' style={{ marginRight: '10px' }}>{getMessage('modals.welcome.buttons.previous')}</button> <button onClick={() => this.changeTab(2)} className='uploadbg'>{getMessage('modals.welcome.buttons.previous')}</button>
<button onClick={() => this.changeTab(3)} className='uploadbg' disabled={nextQuotesDisabled}>{getMessage('modals.welcome.buttons.next')}</button> <button onClick={() => this.changeTab(3)} className='uploadbg' style={{ margin: '10px' }} disabled={nextQuotesDisabled}>{getMessage('modals.welcome.buttons.next')}</button>
</> </>
); );
@@ -273,19 +288,31 @@ export default class Create extends PureComponent {
const addPhotos = ( const addPhotos = (
<> <>
<h3>{getMessage('modals.main.addons.create.photos.title')}</h3> <h3>{getMessage('modals.main.addons.create.photos.title')}</h3>
<h3>{getMessage('modals.main.addons.create.quotes.local.title')}</h3> <div className='themesToggleArea'>
<button onClick={() => this.importPhotos()} className='uploadbg' style={{ marginRight: '10px' }}>{getMessage('modals.main.addons.create.settings.current')}</button> <div className='options'>
<br/><br/> <div onClick={() => this.importPhotos()} className='toggle lightTheme' style={{ width: '60%', margin: '10px 0 10px 0' }}>
<button onClick={() => this.changeTab(2)} className='uploadbg' style={{ marginRight: '10px' }}>{getMessage('modals.welcome.buttons.previous')}</button> <ExportIcon/>
<button onClick={() => this.changeTab(3)} className='uploadbg' disabled={nextPhotosDisabled}>{getMessage('modals.welcome.buttons.next')}</button> <span>{getMessage('modals.main.addons.create.settings.current')}</span>
</div>
</div>
</div>
<br/>
<button onClick={() => this.changeTab(2)} className='uploadbg'>{getMessage('modals.welcome.buttons.previous')}</button>
<button onClick={() => this.changeTab(3)} className='uploadbg' style={{ margin: '10px' }} disabled={nextPhotosDisabled}>{getMessage('modals.welcome.buttons.next')}</button>
</> </>
); );
const downloadAddon = ( const downloadAddon = (
<> <>
<h3>{getMessage('modals.main.addons.create.finish.title')}</h3> <div className='themesToggleArea'>
<button onClick={() => this.downloadAddon()} className='upload'>{getMessage('modals.main.addons.create.finish.download')}</button> <div className='options'>
<br/><br/> <div onClick={() => this.downloadAddon()} className='toggle lightTheme' style={{ width: '60%', margin: '10px 0 10px 0' }}>
<ExportIcon/>
<span>{getMessage('modals.main.addons.create.finish.download')}</span>
</div>
</div>
</div>
<br/>
<button onClick={() => this.changeTab((this.state.addonMetadata.type === 'quote_api') ? 'quotes' : this.state.addonMetadata.type)} className='uploadbg' style={{ marginRight: '10px' }}>{getMessage('modals.welcome.buttons.previous')}</button> <button onClick={() => this.changeTab((this.state.addonMetadata.type === 'quote_api') ? 'quotes' : this.state.addonMetadata.type)} className='uploadbg' style={{ marginRight: '10px' }}>{getMessage('modals.welcome.buttons.previous')}</button>
</> </>
); );

View File

@@ -31,7 +31,7 @@ export default class Sideload extends PureComponent {
failedReason = this.getMessage('modals.main.addons.sideload.errors.no_type'); failedReason = this.getMessage('modals.main.addons.sideload.errors.no_type');
} else if (!input.version) { } else if (!input.version) {
failedReason = this.getMessage('modals.main.addons.sideload.errors.no_version'); failedReason = this.getMessage('modals.main.addons.sideload.errors.no_version');
} else if (input.type === 'photos' && (!input.photos || !input.photos.length || !input.photos[0].url.default || !input.photos[0].photographer || !input.photos[0].location)) { } else if (input.type === 'photos' && (!input.photos || !input.photos.length || !input.photos[0].url || !input.photos[0].url.default || !input.photos[0].photographer || !input.photos[0].location)) {
failedReason = this.getMessage('modals.main.addons.sideload.errors.invalid_photos'); failedReason = this.getMessage('modals.main.addons.sideload.errors.invalid_photos');
} else if (input.type === 'quotes' && (!input.quotes || !input.quotes.length || !input.quotes[0].quote || !input.quotes[0].author)) { } else if (input.type === 'quotes' && (!input.quotes || !input.quotes.length || !input.quotes[0].quote || !input.quotes[0].author)) {
failedReason = this.getMessage('modals.main.addons.sideload.errors.invalid_quotes'); failedReason = this.getMessage('modals.main.addons.sideload.errors.invalid_quotes');

View File

@@ -53,6 +53,7 @@ p.description {
background: var(--sidebar); background: var(--sidebar);
width: 350px; width: 350px;
border-radius: 12px; border-radius: 12px;
min-height: 180px;
h4 { h4 {
cursor: initial !important; cursor: initial !important;
@@ -72,6 +73,18 @@ p.description {
} }
} }
@media only screen and (max-width: 1200px) {
.side {
margin-top: 222px;
float: none !important;
}
.overview {
margin-top: -160px !important;
}
}
.overview { .overview {
font-size: 30px !important; font-size: 30px !important;
margin-top: 33px;
} }

View File

@@ -54,6 +54,9 @@
margin-right: 25px; margin-right: 25px;
width: 220px; width: 220px;
cursor: pointer; cursor: pointer;
border-radius: 24px;
border: 3px solid var(--tab-active);
font-size: 1rem;
&:hover { &:hover {
background-color: var(--tab-active); background-color: var(--tab-active);

View File

@@ -58,6 +58,11 @@ input {
padding: 15px 20px; padding: 15px 20px;
border-radius: 4px; border-radius: 4px;
display: flex !important; display: flex !important;
cursor: pointer;
&::-webkit-calendar-picker-indicator {
cursor: pointer;
}
} }
} }

View File

@@ -25,3 +25,8 @@
border-radius: 50%; border-radius: 50%;
padding-right: 5px; padding-right: 5px;
} }
.contacth3 {
font-size: 1.5rem;
margin-bottom: 0.8em !important;
}

View File

@@ -93,7 +93,7 @@ export default class About extends PureComponent {
<p>{this.getMessage('modals.main.settings.sections.about.version.title')} {variables.constants.VERSION} ({this.state.update})</p> <p>{this.getMessage('modals.main.settings.sections.about.version.title')} {variables.constants.VERSION} ({this.state.update})</p>
<a href={variables.constants.PRIVACY_URL} className='aboutLink' target='_blank' rel='noopener noreferrer' style={{ fontSize: '1rem' }}>{this.getMessage('modals.welcome.sections.privacy.links.privacy_policy')}</a> <a href={variables.constants.PRIVACY_URL} className='aboutLink' target='_blank' rel='noopener noreferrer' style={{ fontSize: '1rem' }}>{this.getMessage('modals.welcome.sections.privacy.links.privacy_policy')}</a>
<h3>{this.getMessage('modals.main.settings.sections.about.contact_us')}</h3> <h3 className='contacth3'>{this.getMessage('modals.main.settings.sections.about.contact_us')}</h3>
<a href={'mailto:' + variables.constants.EMAIL} className='aboutIcon' target='_blank' rel='noopener noreferrer'><Email/></a> <a href={'mailto:' + variables.constants.EMAIL} className='aboutIcon' target='_blank' rel='noopener noreferrer'><Email/></a>
<a href={'https://twitter.com/' + variables.constants.TWITTER_HANDLE} className='aboutIcon' target='_blank' rel='noopener noreferrer'><Twitter/></a> <a href={'https://twitter.com/' + variables.constants.TWITTER_HANDLE} className='aboutIcon' target='_blank' rel='noopener noreferrer'><Twitter/></a>
<a href={'https://instagram.com/' + variables.constants.INSTAGRAM_HANDLE} className='aboutIcon' target='_blank' rel='noopener noreferrer'><Instagram/></a> <a href={'https://instagram.com/' + variables.constants.INSTAGRAM_HANDLE} className='aboutIcon' target='_blank' rel='noopener noreferrer'><Instagram/></a>

View File

@@ -90,11 +90,19 @@ export default class BackgroundSettings extends PureComponent {
const APISettings = ( const APISettings = (
<> <>
<Radio title={getMessage('modals.main.settings.sections.background.source.api')} options={apiOptions} name='backgroundAPI' category='background' element='#backgroundImage' onChange={(e) => this.setState({ backgroundAPI: e })}/> <Radio title={getMessage('modals.main.settings.sections.background.source.api')} options={apiOptions} name='backgroundAPI' category='background' element='#backgroundImage' onChange={(e) => this.setState({ backgroundAPI: e })}/>
<Dropdown label={getMessage('modals.main.settings.sections.background.category')} name='apiCategory'> {this.state.backgroundCategories[0] === getMessage('modals.main.loading') ?
{this.state.backgroundCategories.map((category) => ( <>
<MenuItem value={category} key={category}>{category.charAt(0).toUpperCase() + category.slice(1)}</MenuItem> <Dropdown label={getMessage('modals.main.settings.sections.background.category')} name='apiCategory'>
))} <MenuItem value='loading' key='loading'>{getMessage('modals.main.loading')}</MenuItem>
</Dropdown> <MenuItem value='loading' key='loading'>{getMessage('modals.main.loading')}</MenuItem>
</Dropdown>
</> :
<Dropdown label={getMessage('modals.main.settings.sections.background.category')} name='apiCategory' >
{this.state.backgroundCategories.map((category) => (
<MenuItem value={category} key={category}>{category.charAt(0).toUpperCase() + category.slice(1)}</MenuItem>
))}
</Dropdown>
}
<Dropdown label={getMessage('modals.main.settings.sections.background.source.quality.title')} name='apiQuality' element='.other'> <Dropdown label={getMessage('modals.main.settings.sections.background.source.quality.title')} name='apiQuality' element='.other'>
<option value='original'>{getMessage('modals.main.settings.sections.background.source.quality.original')}</option> <option value='original'>{getMessage('modals.main.settings.sections.background.source.quality.original')}</option>
<option value='high'>{getMessage('modals.main.settings.sections.background.source.quality.high')}</option> <option value='high'>{getMessage('modals.main.settings.sections.background.source.quality.high')}</option>
@@ -125,7 +133,7 @@ export default class BackgroundSettings extends PureComponent {
<Checkbox name='ddgProxy' text={getMessage('modals.main.settings.sections.background.ddg_image_proxy')} element='.other' disabled={!usingImage} /> <Checkbox name='ddgProxy' text={getMessage('modals.main.settings.sections.background.ddg_image_proxy')} element='.other' disabled={!usingImage} />
<Checkbox name='bgtransition' text={getMessage('modals.main.settings.sections.background.transition')} element='.other' disabled={!usingImage} /> <Checkbox name='bgtransition' text={getMessage('modals.main.settings.sections.background.transition')} element='.other' disabled={!usingImage} />
<Checkbox name='photoInformation' text={getMessage('modals.main.settings.sections.background.photo_information')} element='.other' disabled={this.state.backgroundType !== 'api' && this.state.backgroundType !== 'marketplace'} /> <Checkbox name='photoInformation' text={getMessage('modals.main.settings.sections.background.photo_information')} element='.other' disabled={this.state.backgroundType !== 'api' && this.state.backgroundType !== 'marketplace'} />
{/*<Checkbox name='photoMap' text={getMessage('modals.main.settings.sections.background.show_map')} element='.other' disabled={this.state.backgroundAPI !== 'unsplash'}/>*/} <Checkbox name='photoMap' text={getMessage('modals.main.settings.sections.background.show_map')} element='.other' disabled={this.state.backgroundAPI !== 'unsplash'}/>
<h3>{getMessage('modals.main.settings.sections.background.source.title')}</h3> <h3>{getMessage('modals.main.settings.sections.background.source.title')}</h3>
<Dropdown label={getMessage('modals.main.settings.sections.background.type.title')} name='backgroundType' onChange={(value) => this.setState({ backgroundType: value })} category='background'> <Dropdown label={getMessage('modals.main.settings.sections.background.type.title')} name='backgroundType' onChange={(value) => this.setState({ backgroundType: value })} category='background'>

View File

@@ -92,6 +92,13 @@ export default class WelcomeSections extends PureComponent {
this.timeout = setTimeout(this.changeWelcomeImg, 3 * 1000); this.timeout = setTimeout(this.changeWelcomeImg, 3 * 1000);
} }
componentWillUnmount() {
if (this.timeout) {
clearTimeout(this.timeout);
this.timeout = null;
}
}
// cancel welcome image timer if not on welcome tab // cancel welcome image timer if not on welcome tab
componentDidUpdate() { componentDidUpdate() {
if (this.props.currentTab !== 0) { if (this.props.currentTab !== 0) {

View File

@@ -79,25 +79,36 @@
.themesToggleArea { .themesToggleArea {
.active { .active {
background: var(--tab-active) !important; background: var(--tab-active);
} }
.toggle { .toggle {
background: var(--sidebar); background: var(--sidebar);
text-align: center; text-align: center;
border-radius: 40px; border-radius: 20px;
padding: 20px; padding: 20px;
margin: 10px; margin: 10px;
border: 3px solid var(--tab-active); border: 3px solid var(--tab-active);
display: flex;
flex-direction: column;
align-items: center;
align-content: center;
justify-content: center;
cursor: pointer;
&:hover { &:hover {
background: var(--tab-active); background: var(--tab-active);
cursor: pointer;
} }
span { span {
font-size: 1rem; font-size: 1rem;
} }
svg {
font-size: 2.5em;
}
} }
.auto { .auto {

View File

@@ -2,7 +2,6 @@ import variables from 'modules/variables';
import { useState, Fragment } from 'react'; import { useState, Fragment } from 'react';
import { Info, LocationOn, PhotoCamera, Crop as Resolution, Person as Photographer, GetApp as Download } from '@mui/icons-material'; import { Info, LocationOn, PhotoCamera, Crop as Resolution, Person as Photographer, GetApp as Download } from '@mui/icons-material';
//import Hotkeys from 'react-hot-keys'; //import Hotkeys from 'react-hot-keys';
//import { lat2tile, lon2tile } from 'modules/helpers/background/widget';
const toDataURL = async (url) => { const toDataURL = async (url) => {
const res = await fetch(url); const res = await fetch(url);
@@ -26,6 +25,7 @@ const downloadImage = async (info) => {
export default function PhotoInformation({ info, url, api }) { export default function PhotoInformation({ info, url, api }) {
const [width, setWidth] = useState(0); const [width, setWidth] = useState(0);
const [height, setHeight] = useState(0); const [height, setHeight] = useState(0);
const [usePhotoMap, setPhotoMap] = useState(false);
if (info.hidden === true || !info.credit) { if (info.hidden === true || !info.credit) {
return null; return null;
@@ -75,7 +75,7 @@ export default function PhotoInformation({ info, url, api }) {
} }
const downloadEnabled = (localStorage.getItem('downloadbtn') === 'true') && !info.offline && !info.photographerURL && api; const downloadEnabled = (localStorage.getItem('downloadbtn') === 'true') && !info.offline && !info.photographerURL && api;
/*const downloadBackground = () => { const downloadBackground = () => {
if (downloadEnabled) { if (downloadEnabled) {
downloadImage(info); downloadImage(info);
} }
@@ -90,36 +90,36 @@ export default function PhotoInformation({ info, url, api }) {
element.style.display = 'none'; element.style.display = 'none';
} }
} }
};*/ };
{/*const photoMap = () => { const photoMap = () => {
if (localStorage.getItem('photoMap') !== 'true' || !info.latitude || !info.longitude) { if (localStorage.getItem('photoMap') !== 'true' || !info.latitude || !info.longitude || usePhotoMap === false) {
return null; return null;
} }
const zoom = 12; const zoom = 12;
const lat = lat2tile(info.latitude, zoom); const tile = `${variables.constants.MAPBOX_URL}/styles/v1/mapbox/streets-v11/static/pin-s+555555(${info.longitude},${info.latitude})/${info.longitude},${info.latitude},${zoom},0/300x100?access_token=${info.maptoken}`;
const lon = lon2tile(info.longitude, zoom);
const tile = `${variables.constants.MAPBOX_URL}/styles/v1/mapbox/streets-v11/tiles/${zoom}/${lon}/${lat}?access_token=${info.maptoken}`;
let icon = variables.constants.CDN_URL + '/mapbox/mapbox-logo-dark.png';
if (document.body.classList.contains('dark')) {
icon = variables.constants.CDN_URL + '/mapbox/mapbox-logo-white.png';
}
return ( return (
<Fragment key='test'> <Fragment key='photomap'>
<a href={`https://www.openstreetmap.org/?mlat=${info.latitude}&mlon=${info.longitude}`} target='_blank' rel='noopener noreferrer'> <a href={`${variables.constants.OPENSTREETMAP_URL}/?mlat=${info.latitude}&mlon=${info.longitude}`} target='_blank' rel='noopener noreferrer'>
<img className='locationMap' src={tile} alt='location' draggable={false}/> <img className='locationMap' src={tile} alt='location' draggable={false}/>
</a> </a>
<br/> <br/>
<img className='mapboxLogo' src={icon} alt='mapbox logo' draggable={false}/>
<span className='mapCopyright'> <span className='mapCopyright'>
<a href='https://www.mapbox.com/about/maps/' target='_blank' rel='noopener noreferrer'> © Mapbox</a>, <a href='https://www.openstreetmap.org/about/' target='_blank' rel='noopener noreferrer'>© OpenStreetMap</a>. <a href='https://www.mapbox.com/map-feedback/' target='_blank' rel='noopener noreferrer'>Improve this map</a>. <a href='https://www.mapbox.com/about/maps/' target='_blank' rel='noopener noreferrer'> © Mapbox</a>, <a href='https://www.openstreetmap.org/about/' target='_blank' rel='noopener noreferrer'>© OpenStreetMap</a>. <a href='https://www.mapbox.com/map-feedback/' target='_blank' rel='noopener noreferrer'>Improve this map</a>.
</span> </span>
</Fragment> </Fragment>
); );
}*/} }
// only request map image if the user looks at the photo information
// this is to reduce requests to the api
try {
document.getElementsByClassName('photoInformation')[0].onmouseover = () => {
setPhotoMap(true);
}
} catch (e) {}
return ( return (
<div className='photoInformation'> <div className='photoInformation'>
@@ -129,7 +129,7 @@ export default function PhotoInformation({ info, url, api }) {
<Info className='infoIcon'/> <Info className='infoIcon'/>
<h1>{variables.language.getMessage(variables.languagecode, 'widgets.background.information')}</h1> <h1>{variables.language.getMessage(variables.languagecode, 'widgets.background.information')}</h1>
<hr/> <hr/>
{/*photoMap()*/} {photoMap()}
{/* fix console error by using fragment and key */} {/* fix console error by using fragment and key */}
{info.location && info.location !== 'N/A' ? <Fragment key='location'> {info.location && info.location !== 'N/A' ? <Fragment key='location'>
<LocationOn/> <LocationOn/>

View File

@@ -51,7 +51,7 @@ export default class Notes extends PureComponent {
<NotesRounded/> <NotesRounded/>
<h3>{variables.language.getMessage(variables.languagecode, 'widgets.navbar.notes.title')}</h3> <h3>{variables.language.getMessage(variables.languagecode, 'widgets.navbar.notes.title')}</h3>
</div> </div>
<TextareaAutosize rowsmax={50} placeholder={variables.language.getMessage(variables.languagecode, 'widgets.navbar.notes.placeholder')} value={this.state.notes} onChange={this.setNotes}/> <TextareaAutosize placeholder={variables.language.getMessage(variables.languagecode, 'widgets.navbar.notes.placeholder')} value={this.state.notes} onChange={this.setNotes}/>
<button onClick={() => this.pin()} className='pinNote'><PushPin/></button> <button onClick={() => this.pin()} className='pinNote'><PushPin/></button>
<button onClick={() => this.copy()} className='copyNote'><FileCopyRounded/></button> <button onClick={() => this.copy()} className='copyNote'><FileCopyRounded/></button>
{/*variables.keybinds.pinNotes && variables.keybinds.pinNotes !== '' ? <Hotkeys keyName={variables.keybinds.pinNotes} onKeyDown={() => this.pin()}/> : null*/} {/*variables.keybinds.pinNotes && variables.keybinds.pinNotes !== '' ? <Hotkeys keyName={variables.keybinds.pinNotes} onKeyDown={() => this.pin()}/> : null*/}

View File

@@ -23,6 +23,13 @@
position: absolute; position: absolute;
top: 80%; top: 80%;
margin-left: -150px; margin-left: -150px;
max-height: 80vh !important;
font-size: 1rem !important;
textarea {
max-height: 65vh !important;
overflow-y: visible !important;
}
svg { svg {
float: left; float: left;

View File

@@ -22,7 +22,7 @@ if (languagecode === 'en') {
} }
variables.language = new I18n(variables.languagecode, { variables.language = new I18n(variables.languagecode, {
de: require('./translations/de_DE.json'), de_DE: require('./translations/de_DE.json'),
en_GB: require('./translations/en_GB.json'), en_GB: require('./translations/en_GB.json'),
en_US: require('./translations/en_US.json'), en_US: require('./translations/en_US.json'),
es: require('./translations/es.json'), es: require('./translations/es.json'),

View File

@@ -5,14 +5,14 @@ export const MARKETPLACE_URL = 'https://marketplace.muetab.com';
export const SPONSORS_URL = 'https://sponsors.muetab.com'; export const SPONSORS_URL = 'https://sponsors.muetab.com';
export const GITHUB_URL = 'https://api.github.com'; export const GITHUB_URL = 'https://api.github.com';
export const DDG_IMAGE_PROXY = 'https://external-content.duckduckgo.com/iu/?u='; export const DDG_IMAGE_PROXY = 'https://external-content.duckduckgo.com/iu/?u=';
//export const MAPBOX_URL = 'https://api.mapbox.com'; export const MAPBOX_URL = 'https://api.mapbox.com';
export const OPENSTREETMAP_URL = 'https://www.openstreetmap.org';
// Mue URLs // Mue URLs
export const WEBSITE_URL = 'https://muetab.com'; export const WEBSITE_URL = 'https://muetab.com';
export const PRIVACY_URL = 'https://muetab.com/privacy'; export const PRIVACY_URL = 'https://muetab.com/privacy';
export const BLOG_POST = 'https://blog.muetab.com/posts/version-6-0'; export const BLOG_POST = 'https://blog.muetab.com/posts/version-6-0';
export const TRANSLATIONS_URL = 'https://docs.muetab.com/translations/'; export const TRANSLATIONS_URL = 'https://docs.muetab.com/translations/';
export const CDN_URL = 'https://res.cloudinary.com/mue/image/upload';
// Mue Info // Mue Info
export const ORG_NAME = 'mue'; export const ORG_NAME = 'mue';
@@ -29,4 +29,4 @@ export const DONATE_USERNAME = 'davidcralph'; // this only works if you use the
export const OFFLINE_IMAGES = 20; export const OFFLINE_IMAGES = 20;
export const VERSION = '6.0.1'; export const VERSION = '6.0.3';

View File

@@ -72,12 +72,3 @@ export function randomColourStyleBuilder(type) {
style style
} }
} }
// source: https://wiki.openstreetmap.org/wiki/Slippy_map_tilenames#ECMAScript_.28JavaScript.2FActionScript.2C_etc..29
/*export function lon2tile(lon, zoom) {
return (Math.floor((lon + 180) / 360 * Math.pow(2, zoom)));
}
export function lat2tile(lat, zoom) {
return (Math.floor((1 - Math.log(Math.tan(lat * Math.PI / 180) + 1 / Math.cos(lat * Math.PI / 180)) / Math.PI) / 2 * Math.pow(2, zoom)));
}*/

View File

@@ -48,6 +48,7 @@ export function install(type, input, sideload) {
localStorage.setItem('quoteType', 'quote_pack'); localStorage.setItem('quoteType', 'quote_pack');
EventBus.dispatch('refresh', 'quote'); EventBus.dispatch('refresh', 'quote');
break; break;
default: default:
break; break;
} }
@@ -78,6 +79,7 @@ export function uninstall(type, name) {
}); });
showReminder(); showReminder();
break; break;
case 'quotes': case 'quotes':
localStorage.removeItem('quote_packs'); localStorage.removeItem('quote_packs');
localStorage.removeItem('quoteAPI'); localStorage.removeItem('quoteAPI');
@@ -85,12 +87,14 @@ export function uninstall(type, name) {
localStorage.removeItem('oldQuoteType'); localStorage.removeItem('oldQuoteType');
EventBus.dispatch('refresh', 'marketplacequoteuninstall'); EventBus.dispatch('refresh', 'marketplacequoteuninstall');
break; break;
case 'photos': case 'photos':
localStorage.removeItem('photo_packs'); localStorage.removeItem('photo_packs');
localStorage.setItem('backgroundType', localStorage.getItem('oldBackgroundType')); localStorage.setItem('backgroundType', localStorage.getItem('oldBackgroundType'));
localStorage.removeItem('oldBackgroundType'); localStorage.removeItem('oldBackgroundType');
EventBus.dispatch('refresh', 'marketplacebackgrounduninstall'); EventBus.dispatch('refresh', 'marketplacebackgrounduninstall');
break; break;
default: default:
break; break;
} }

View File

@@ -423,7 +423,7 @@
"added": "Hinzugefügt", "added": "Hinzugefügt",
"check_updates": "Check for updates", "check_updates": "Check for updates",
"no_updates": "No updates available", "no_updates": "No updates available",
"updates_available": "Updates avaialble {amount}", "updates_available": "Updates available {amount}",
"empty": { "empty": {
"title": "Hier ist es leer", "title": "Hier ist es leer",
"description": "Gehen Sie zum Marktplatz, um einige hinzuzufügen" "description": "Gehen Sie zum Marktplatz, um einige hinzuzufügen"

View File

@@ -422,7 +422,7 @@
"added": "Added", "added": "Added",
"check_updates": "Check for updates", "check_updates": "Check for updates",
"no_updates": "No updates available", "no_updates": "No updates available",
"updates_available": "Updates avaialble {amount}", "updates_available": "Updates available {amount}",
"empty": { "empty": {
"title": "Empty", "title": "Empty",
"description": "No addons are installed" "description": "No addons are installed"

View File

@@ -422,7 +422,7 @@
"added": "Added", "added": "Added",
"check_updates": "Check for updates", "check_updates": "Check for updates",
"no_updates": "No updates available", "no_updates": "No updates available",
"updates_available": "Updates avaialble {amount}", "updates_available": "Updates available {amount}",
"empty": { "empty": {
"title": "Empty", "title": "Empty",
"description": "No addons are installed" "description": "No addons are installed"

View File

@@ -22,7 +22,7 @@
"new": "Nuevo enlace", "new": "Nuevo enlace",
"name": "Nombre", "name": "Nombre",
"url": "URL", "url": "URL",
"icon": "Icon (optional)", "icon": "Icono (opcional)",
"add": "Añadir", "add": "Añadir",
"name_error": "Debe indicar el nombre", "name_error": "Debe indicar el nombre",
"url_error": "Debe indicar la URL" "url_error": "Debe indicar la URL"
@@ -111,7 +111,7 @@
"author_link": "Enlace del autor", "author_link": "Enlace del autor",
"custom": "Cita personalizada", "custom": "Cita personalizada",
"custom_author": "Autor personalizado", "custom_author": "Autor personalizado",
"add": "Add quote", "add": "Añadir cita",
"buttons": { "buttons": {
"title": "Botones", "title": "Botones",
"copy": "Botón de copiar", "copy": "Botón de copiar",
@@ -133,7 +133,7 @@
"ddg_image_proxy": "Utilizar el proxy de imágenes de DuckDuckGo", "ddg_image_proxy": "Utilizar el proxy de imágenes de DuckDuckGo",
"transition": "Transición fade-in", "transition": "Transición fade-in",
"photo_information": "Ver información de la foto", "photo_information": "Ver información de la foto",
"show_map": "Show location map on photo information if available", "show_map": "Mostrar el mapa de la ubicación en la información de la foto si está disponible",
"category": "Categoría", "category": "Categoría",
"buttons": { "buttons": {
"title": "Botones", "title": "Botones",
@@ -160,8 +160,8 @@
"api": "API", "api": "API",
"custom_image": "Imagen personalizada", "custom_image": "Imagen personalizada",
"custom_colour": "Color/degradado personalizado", "custom_colour": "Color/degradado personalizado",
"random_colour": "Random colour", "random_colour": "Color aleatorio",
"random_gradient": "Random gradient" "random_gradient": "Degradado aleatorio"
}, },
"source": { "source": {
"title": "Fuente", "title": "Fuente",
@@ -170,8 +170,8 @@
"custom_colour": "Color del fondo personalizado", "custom_colour": "Color del fondo personalizado",
"upload": "Subir", "upload": "Subir",
"add_colour": "Añadir color", "add_colour": "Añadir color",
"add_background": "Add background", "add_background": "Añadir fondo",
"add_url": "Add URL", "add_url": "Añadir URL",
"disabled": "Desactivado", "disabled": "Desactivado",
"loop_video": "Vídeo en bucle", "loop_video": "Vídeo en bucle",
"mute_video": "Silenciar video", "mute_video": "Silenciar video",
@@ -229,12 +229,12 @@
"title": "Enlaces rápidos", "title": "Enlaces rápidos",
"open_new": "Abrir en una nueva pestaña", "open_new": "Abrir en una nueva pestaña",
"tooltip": "Descripción emergente", "tooltip": "Descripción emergente",
"text_only": "Show text only" "text_only": "Mostrar solo texto"
}, },
"message": { "message": {
"title": "Message", "title": "Mensaje",
"add": "Add message", "add": "Añadir mensaje",
"text": "Text" "text": "Texto"
}, },
"appearance": { "appearance": {
"title": "Apariencia", "title": "Apariencia",
@@ -248,9 +248,9 @@
"title": "Barra de búsqueda", "title": "Barra de búsqueda",
"notes": "Notas", "notes": "Notas",
"refresh": "Botón de recargar", "refresh": "Botón de recargar",
"hover": "Only display on hover", "hover": "Solo mostrar al pasar el cursor",
"refresh_options": { "refresh_options": {
"none": "None", "none": "Ninguno",
"page": "Página" "page": "Página"
} }
}, },
@@ -279,7 +279,7 @@
"accessibility": { "accessibility": {
"title": "Accesibilidad", "title": "Accesibilidad",
"animations": "Animaciones", "animations": "Animaciones",
"text_shadow": "Widget text shadow", "text_shadow": "Sombra de texto del widget",
"widget_zoom": "Zoom del widget", "widget_zoom": "Zoom del widget",
"toast_duration": "Duración de la notificación", "toast_duration": "Duración de la notificación",
"milliseconds": "milisegundos" "milliseconds": "milisegundos"
@@ -323,27 +323,27 @@
"usage": "Estadísticas de uso" "usage": "Estadísticas de uso"
}, },
"keybinds": { "keybinds": {
"title": "Keybinds", "title": "Asignación de teclas",
"recording": "Recording...", "recording": "Grabando...",
"click_to_record": "Click to record", "click_to_record": "Click para grabar",
"background": { "background": {
"favourite": "Favourite background", "favourite": "Fondo favorito",
"maximise": "Maximise background", "maximise": "Maximizar fondo",
"download": "Download background", "download": "Descargar fondo",
"show_info": "Show background information" "show_info": "Mostrar información del fondo"
}, },
"quote": { "quote": {
"favourite": "Favourite quote", "favourite": "Marcar la cita como favorita",
"copy": "Copy quote", "copy": "Copiar cita",
"tweet": "Tweet quote" "tweet": "Tuitear la cita"
}, },
"notes": { "notes": {
"pin": "Pin notes", "pin": "Fijar notas",
"copy": "Copy notes" "copy": "Copiar notas"
}, },
"search": "Focus search", "search": "Enfocar búsqueda",
"quicklinks": "Toggle add quick link", "quicklinks": "Alternar añadir enlace rápido",
"modal": "Toggle modal" "modal": "Alternal modal"
}, },
"experimental": { "experimental": {
"title": "Experimental", "title": "Experimental",
@@ -356,7 +356,7 @@
}, },
"changelog": { "changelog": {
"title": "Registro de cambios", "title": "Registro de cambios",
"by": "By {author}" "by": "Por {author}"
}, },
"about": { "about": {
"title": "Acerca de", "title": "Acerca de",
@@ -382,7 +382,7 @@
}, },
"contributors": "Contribuyentes", "contributors": "Contribuyentes",
"supporters": "Partidarios", "supporters": "Partidarios",
"no_supporters": "There are currently no Mue supporters", "no_supporters": "Actualmente no hay partidarios de Mue",
"photographers": "Fotógrafos" "photographers": "Fotógrafos"
} }
}, },
@@ -406,7 +406,7 @@
"buttons": { "buttons": {
"addtomue": "Añadir a Mue", "addtomue": "Añadir a Mue",
"remove": "Desinstalar", "remove": "Desinstalar",
"update_addon": "Update Add-on" "update_addon": "Actualizar complemento"
}, },
"quote_warning": { "quote_warning": {
"title": "Advertencia", "title": "Advertencia",
@@ -420,22 +420,22 @@
}, },
"addons": { "addons": {
"added": "Añadidos", "added": "Añadidos",
"check_updates": "Check for updates", "check_updates": "Comprobar actualizaciones",
"no_updates": "No updates available", "no_updates": "No hay actualizaciones disponibles",
"updates_available": "Updates avaialble {amount}", "updates_available": "Actualizaciones disponibles {amount}",
"empty": { "empty": {
"title": "Vacío", "title": "Vacío",
"description": "Dirígete a la tienda para agregar algunos." "description": "Dirígete a la tienda para agregar algunos."
}, },
"sideload": { "sideload": {
"title": "Cargar localmente", "title": "Cargar localmente",
"failed": "Failed to sideload addon", "failed": "Fallo en la carga lateral del complemento",
"errors": { "errors": {
"no_name": "No name provided", "no_name": "No se ha indicado el nombre",
"no_author": "No author provided", "no_author": "No se ha indicado el autor",
"no_type": "No type provided", "no_type": "No se ha indicado el tipo",
"invalid_photos": "Invalid photos object", "invalid_photos": "Objeto de fotos inválido",
"invalid_quotes": "Invalid quotes object" "invalid_quotes": "Objeto de citas inválido"
} }
}, },
"sort": { "sort": {
@@ -492,7 +492,7 @@
} }
}, },
"welcome": { "welcome": {
"tip": "Truco", "tip": "Consejo",
"sections": { "sections": {
"intro": { "intro": {
"title": "Bienvenido a Mue Tab", "title": "Bienvenido a Mue Tab",
@@ -533,13 +533,13 @@
}, },
"buttons": { "buttons": {
"next": "Siguiente", "next": "Siguiente",
"preview": "Preview", "preview": "Vista previa",
"previous": "Anterior", "previous": "Anterior",
"close": "Cerrar" "close": "Cerrar"
}, },
"preview": { "preview": {
"description": "You are currently in preview mode. Settings will be reset on closing this tab.", "description": "Actualmente se encuentra en el modo de vista previa. La configuración se restablecerá al cerrar esta pestaña.",
"continue": "Continue setup" "continue": "Continuar con la configuración"
} }
} }
}, },
@@ -549,7 +549,7 @@
"reset": "Restablecido correctamente", "reset": "Restablecido correctamente",
"installed": "Instalado correctamente", "installed": "Instalado correctamente",
"uninstalled": "Desinstalado correctamente", "uninstalled": "Desinstalado correctamente",
"updated": "Successfully updated", "updated": "Actualizado correctamente",
"error": "Algo salió mal", "error": "Algo salió mal",
"imported": "Importado correctamente" "imported": "Importado correctamente"
} }

View File

@@ -422,7 +422,7 @@
"added": "Ajoutées", "added": "Ajoutées",
"check_updates": "Check for updates", "check_updates": "Check for updates",
"no_updates": "No updates available", "no_updates": "No updates available",
"updates_available": "Updates avaialble {amount}", "updates_available": "Updates available {amount}",
"empty": { "empty": {
"title": "C'est vide par ici", "title": "C'est vide par ici",
"description": "Dirigez vous vers le marché pour ajouter des options" "description": "Dirigez vous vers le marché pour ajouter des options"

View File

@@ -422,7 +422,7 @@
"added": "Toegevoegd", "added": "Toegevoegd",
"check_updates": "Check for updates", "check_updates": "Check for updates",
"no_updates": "No updates available", "no_updates": "No updates available",
"updates_available": "Updates avaialble {amount}", "updates_available": "Updates available {amount}",
"empty": { "empty": {
"title": "Het is hier erg leeg", "title": "Het is hier erg leeg",
"description": "Ga naar de marktplaats om een paar extensies toe te voegen" "description": "Ga naar de marktplaats om een paar extensies toe te voegen"

View File

@@ -422,7 +422,7 @@
"added": "Lagt til", "added": "Lagt til",
"check_updates": "Check for updates", "check_updates": "Check for updates",
"no_updates": "No updates available", "no_updates": "No updates available",
"updates_available": "Updates avaialble {amount}", "updates_available": "Updates available {amount}",
"empty": { "empty": {
"title": "Det er tomt her.", "title": "Det er tomt her.",
"description": "Gå til markedsplassen å legg til noe" "description": "Gå til markedsplassen å legg til noe"

View File

@@ -422,7 +422,7 @@
"added": "Добавлен", "added": "Добавлен",
"check_updates": "Check for updates", "check_updates": "Check for updates",
"no_updates": "No updates available", "no_updates": "No updates available",
"updates_available": "Updates avaialble {amount}", "updates_available": "Updates available {amount}",
"empty": { "empty": {
"title": "Здесь пусто", "title": "Здесь пусто",
"description": "Зайдите в магазин, чтобы найти что-то интересное" "description": "Зайдите в магазин, чтобы найти что-то интересное"

View File

@@ -422,7 +422,7 @@
"added": "已添加", "added": "已添加",
"check_updates": "Check for updates", "check_updates": "Check for updates",
"no_updates": "No updates available", "no_updates": "No updates available",
"updates_available": "Updates avaialble {amount}", "updates_available": "Updates available {amount}",
"empty": { "empty": {
"title": "这里空空如也", "title": "这里空空如也",
"description": "请访问插件市场来添加插件。" "description": "请访问插件市场来添加插件。"