diff --git a/README.md b/README.md index 2a13985a..f406b526 100644 --- a/README.md +++ b/README.md @@ -130,15 +130,13 @@ Please see our [roadmap](https://github.com/mue/mue/projects/2) [Isaac (Eartharoid)](https://github.com/eartharoid) - QA, Development, Photographer
### Translators -English - [David Ralph (ohlookitsderpy)](https://github.com/ohlookitsderpy) & [Alex Sparkes](https://github.com/alexsparkes) +[Wessel Tip](https://github.com/Wessel) - Dutch -Dutch - [Wessel Tip](https://github.com/Wessel) +[Alex Sparkes](https://github.com/alexsparkes) - French -French - [Alex Sparkes](https://github.com/alexsparkes) +[Anders](https://github.com/FuryingFox) - Norwegian -Norwegian - [Anders](https://github.com/FuryingFox) - -Russian - [MrZillaGold](https://github.com/MrZillaGold) +[MrZillaGold](https://github.com/MrZillaGold) - Russian ### Other [Pexels](https://pexels.com) - Stock photos used for offline mode diff --git a/package.json b/package.json index 40cde137..b3f36c9c 100644 --- a/package.json +++ b/package.json @@ -18,7 +18,6 @@ "@material-ui/core": "^4.11.0", "@material-ui/icons": "^4.9.1", "@muetab/quotes": "^1.0.0", - "detect-browser-language": "0.0.2", "react": "^16.13.1", "react-clock": "^2.4.0", "react-dom": "^16.13.1", diff --git a/src/App.jsx b/src/App.jsx index 68a29987..934baf53 100644 --- a/src/App.jsx +++ b/src/App.jsx @@ -41,17 +41,13 @@ export default class App extends React.PureComponent { render() { if (!localStorage.getItem('firstRun')) SettingsFunctions.setDefaultSettings(); - let modalClassList = 'Modal'; - if (localStorage.getItem('darkTheme') === 'true') modalClassList = 'Modal dark'; + const modalClassList = (localStorage.getItem('darkTheme') === 'true') ? 'Modal dark' : 'Modal'; // Modal features + const overlayClassList = (localStorage.getItem('animations') === 'true') ? 'Overlay modal-animation' : 'Overlay'; - let overlayClassList = 'Overlay'; - if (localStorage.getItem('animations') === 'true') overlayClassList = 'Overlay modal-animation'; + const en = require('./translations/en.json'); // User language + const language = merge(en, require(`./translations/${localStorage.getItem('language') || 'en'}.json`)); - let language = require(`./translations/${localStorage.getItem('language') || 'en'}.json`); - const en = require('./translations/en.json'); - language = merge(en, language); - - const theme = localStorage.getItem('theme'); + const theme = localStorage.getItem('theme'); // Marketplace themes (WIP) if (theme) { const style = document.createElement('link'); style.href = theme; diff --git a/src/components/modals/Update.jsx b/src/components/modals/Update.jsx index e423c504..7979ae76 100644 --- a/src/components/modals/Update.jsx +++ b/src/components/modals/Update.jsx @@ -14,7 +14,7 @@ export default class Update extends React.PureComponent { } async getUpdate() { - let supportText = `

${this.props.language.contactsupport}: https://muetab.xyz/contact

`; + const supportText = `

${this.props.language.contactsupport}: https://muetab.xyz/contact

`; if (localStorage.getItem('offlineMode') === 'true') return this.setState({ title: this.props.language.offline.title, @@ -27,6 +27,7 @@ export default class Update extends React.PureComponent { title: this.props.language.error.title, html: this.props.language.error.description + supportText }); + this.setState({ title: data.title, date: data.published, diff --git a/src/components/modals/settings/Section.jsx b/src/components/modals/settings/Section.jsx index 2719499f..bf127e24 100644 --- a/src/components/modals/settings/Section.jsx +++ b/src/components/modals/settings/Section.jsx @@ -12,10 +12,8 @@ export default class Section extends React.PureComponent { } toggleSection() { - let display = 'none'; - if (this.state.display === 'none') display = 'block'; - let transform = 'rotate(0)'; - if (this.state.transform === 'rotate(0)') transform = 'rotate(-180deg)'; + const display = (this.state.display === 'none') ? 'block': 'none'; + const transform = (this.state.transform === 'rotate(0)') ? 'rotate(-180deg)' : 'rotate(0)'; this.setState({ display: display, @@ -31,7 +29,7 @@ export default class Section extends React.PureComponent { style={{ 'transition': 'all 0.5s ease 0s', 'transform': this.state.transform }} className={`expandIcons`} onClick={() => this.toggleSection()} - /> + />; } if (this.props.slider !== false) slider = ; diff --git a/src/components/modals/settings/sections/BackgroundSettings.jsx b/src/components/modals/settings/sections/BackgroundSettings.jsx index 561e21ff..d36c020b 100644 --- a/src/components/modals/settings/sections/BackgroundSettings.jsx +++ b/src/components/modals/settings/sections/BackgroundSettings.jsx @@ -51,6 +51,7 @@ export default class BackgroundSettings extends React.PureComponent { const hex = localStorage.getItem('customBackgroundColour'); let gradientSettings = undefined; + if (hex !== '') { try { gradientSettings = JSON.parse(hex); @@ -58,15 +59,14 @@ export default class BackgroundSettings extends React.PureComponent { //Disregard exception. } } - if (gradientSettings === undefined) { - gradientSettings = this.DefaultGradientSettings - } + + if (gradientSettings === undefined) gradientSettings = this.DefaultGradientSettings; this.setState({ blur: localStorage.getItem('blur'), brightness: localStorage.getItem('brightness'), gradientSettings - }) + }); document.getElementById('customBackground').value = localStorage.getItem('customBackground'); document.getElementById('backgroundAPI').value = localStorage.getItem('backgroundAPI'); @@ -124,7 +124,7 @@ export default class BackgroundSettings extends React.PureComponent { gradient: [...this.state.gradientSettings.gradient.map(g => { return { ...g, stop: clampNumber(+g.stop, 0, 100) } })].sort((a, b) => (a.stop > b.stop) ? 1 : -1) }); } - return "Disabled"; + return 'Disabled'; } render() { @@ -134,10 +134,10 @@ export default class BackgroundSettings extends React.PureComponent { const gradientHasMoreThanOneColour = this.state.gradientSettings.gradient.length > 1; return (
- {gradientHasMoreThanOneColour ? () : null} + {gradientHasMoreThanOneColour ? () : null} this.onGradientChange(event, i)} value={g.colour}> - {gradientHasMoreThanOneColour ? ( + {gradientHasMoreThanOneColour ? ( this.onGradientChange(event, i)} /> ) : null}
); diff --git a/src/components/widgets/Clock.jsx b/src/components/widgets/Clock.jsx index 22bff396..b1f17764 100644 --- a/src/components/widgets/Clock.jsx +++ b/src/components/widgets/Clock.jsx @@ -17,11 +17,8 @@ export default class Clock extends React.PureComponent { const now = new Date(); // Analog clock - if (localStorage.getItem('analog') === 'true') { - this.setState({ - time: now - }); - } else { + if (localStorage.getItem('analog') === 'true') this.setState({ time: now }); + else { let sec = ''; // Extra 0 @@ -35,11 +32,9 @@ export default class Clock extends React.PureComponent { if (localStorage.getItem('24hour') === 'true') { let time = ''; if (zero === 'false') time = `${now.getHours()}:${now.getMinutes()}${sec}`; - else time = `${('00' + now.getHours()).slice(-2)}:${('00' + now.getMinutes()).slice(-2)}${sec}`; - this.setState({ - time: time - }); + + this.setState({ time: time }); } else { // 12 hour support let hours = now.getHours(); diff --git a/src/components/widgets/Greeting.jsx b/src/components/widgets/Greeting.jsx index 71a79827..21729bf9 100644 --- a/src/components/widgets/Greeting.jsx +++ b/src/components/widgets/Greeting.jsx @@ -32,7 +32,7 @@ export default class Greeting extends React.PureComponent { // Events message = this.doEvents(now, message); - let custom = localStorage.getItem('defaultGreetingMessage'); + const custom = localStorage.getItem('defaultGreetingMessage'); if (custom === 'false') message = ''; // Name diff --git a/src/components/widgets/Maximise.jsx b/src/components/widgets/Maximise.jsx index 419de656..f940f526 100644 --- a/src/components/widgets/Maximise.jsx +++ b/src/components/widgets/Maximise.jsx @@ -22,7 +22,7 @@ export default class View extends React.PureComponent { const elements = ['#searchBar', '.navbar-container', '.clock', '.greeting', '.quotediv', 'time']; elements.forEach((element) => { try { - (this.state.hidden === false) ? document.querySelector(element).style.display = 'none' : document.querySelector(element).style.display = 'block'; + (this.state.hidden === false) ? document.querySelector(element).style.display = 'none' : document.querySelector(element).style.display = 'block'; } catch (e) { return; } diff --git a/src/components/widgets/Quote.jsx b/src/components/widgets/Quote.jsx index 44eb2975..f8438508 100644 --- a/src/components/widgets/Quote.jsx +++ b/src/components/widgets/Quote.jsx @@ -41,8 +41,7 @@ export default class Quote extends React.PureComponent { if (quotePackAPI) { try { const data = await (await fetch(quotePackAPI.url)).json(); - let author = data[quotePackAPI.author]; - if (quotePackAPI.authorOverride) author = quotePackAPI.authorOverride; + const author = quotePackAPI.authorOverride || data[quotePackAPI.author]; return this.setState({ quote: '"' + data[quotePackAPI.quote] + '"', author: author @@ -77,11 +76,9 @@ export default class Quote extends React.PureComponent { } render() { - let copy = this.copyQuote()}>; - if (localStorage.getItem('copyButton') === 'false') copy = null; - - let tweet = window.open(`https://twitter.com/intent/tweet?text=${this.state.quote} - ${this.state.author} on @getmue`, '_blank').focus()}/> - if (localStorage.getItem('tweetButton') === 'false') tweet = null; + const copy = (localStorage.getItem('copyButton') === 'false') ? null : this.copyQuote()}>; + const tweet = (localStorage.getItem('tweetButton') === 'false') ? null : + window.open(`https://twitter.com/intent/tweet?text=${this.state.quote} - ${this.state.author} on @getmue`, '_blank').focus()}/>; return (
diff --git a/src/components/widgets/Search.jsx b/src/components/widgets/Search.jsx index 787c893e..9f143a9c 100644 --- a/src/components/widgets/Search.jsx +++ b/src/components/widgets/Search.jsx @@ -20,8 +20,7 @@ export default class Search extends React.PureComponent { if (custom) url = custom; const searchButton = () => { - let value = document.getElementById('searchtext').value; - if (!value) value = 'mue fast'; + const value = document.getElementById('searchtext').value || 'mue fast'; window.location.href = url + `?${query}=` + value; }; diff --git a/src/index.js b/src/index.js index 1bb908fd..edb71b8b 100644 --- a/src/index.js +++ b/src/index.js @@ -3,7 +3,7 @@ import ReactDOM from 'react-dom'; import App from './App'; import './scss/index.scss'; -import 'react-toastify/dist/ReactToastify.css'; +import 'react-toastify/dist/ReactToastify.css'; // the toast css is based on default so we need to import it ReactDOM.render( , diff --git a/src/modules/settingsFunctions.js b/src/modules/settingsFunctions.js index 19f104e2..5817a007 100644 --- a/src/modules/settingsFunctions.js +++ b/src/modules/settingsFunctions.js @@ -1,4 +1,4 @@ -import detectBrowserLanguage from 'detect-browser-language'; +const defaultSettings = require('./defaultSettings.json'); const saveFile = (data, filename = 'file') => { if (!data) return console.error('No data'); @@ -16,8 +16,6 @@ const saveFile = (data, filename = 'file') => { a.dispatchEvent(e); }; -const defaultSettings = require('./defaultSettings.json'); - export default class SettingsFunctions { static exportSettings() { let settings = {}; @@ -81,7 +79,7 @@ export default class SettingsFunctions { // Languages const languages = ['nl', 'no', 'fr', 'ru']; - const browserLanguage = detectBrowserLanguage(); + const browserLanguage = (navigator.languages && navigator.languages[0]) || navigator.language; if (languages.includes(browserLanguage)) { localStorage.setItem('language', browserLanguage); document.documentElement.lang = browserLanguage; diff --git a/src/scss/modules/_buttons.scss b/src/scss/modules/_buttons.scss index bb044160..6011d3bd 100644 --- a/src/scss/modules/_buttons.scss +++ b/src/scss/modules/_buttons.scss @@ -73,14 +73,16 @@ .remove { @extend %settingsButton; - border-radius: 4px; - padding: 5px; - width: 25px; - background-color: map-get($modal, "background"); - border: 2px solid map-get($modal, "background"); + border-radius: 50%; + background: none; + border: 2px solid rgba(0,0,0,0); color: map-get($button-colours, "reset"); text-align: center; vertical-align: sub; + height: 60px; + width: 60px; + padding: 0px; + font-size: 30px; &:hover { color: map-get($button-colours, "background"); @@ -187,4 +189,19 @@ border: 2px solid #2d3436; background: none; } +} + +.stop { + outline: none; + border-image-slice: 1; + border-image-source: map-get($theme-colours, "gradient"); + font-size: 1.2em; + padding-left: 7px; + vertical-align: middle; +} + +input[type=number]::-webkit-inner-spin-button, +input[type=number]::-webkit-outer-spin-button { + opacity: 1; + outline: none; } \ No newline at end of file diff --git a/src/scss/modules/_settings.scss b/src/scss/modules/_settings.scss index cf6beaf4..6c7ca95b 100644 --- a/src/scss/modules/_settings.scss +++ b/src/scss/modules/_settings.scss @@ -243,7 +243,6 @@ select#language { cursor: pointer; } - // Dark Theme .dark { #blurRange, #brightnessRange {