mirror of https://github.com/mue/mue.git
style: Unified spacing to 2 and add editor config
This commit is contained in:
parent
aec47d9d0b
commit
9981a28638
2
.babelrc
2
.babelrc
|
@ -3,4 +3,4 @@
|
|||
"plugins": ["@babel/plugin-proposal-class-properties", ["@babel/transform-runtime", {
|
||||
"regenerator": true
|
||||
}]]
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,8 @@
|
|||
root = true
|
||||
|
||||
[*]
|
||||
indent_style = space
|
||||
indent_size = 2
|
||||
charset = utf-8
|
||||
trim_trailing_whitespace = true
|
||||
insert_final_newline = true
|
2
.env
2
.env
|
@ -1,3 +1,3 @@
|
|||
GENERATE_SOURCEMAP=false
|
||||
INLINE_RUNTIME_CHUNK=false
|
||||
SKIP_PREFLIGHT_CHECK=true
|
||||
SKIP_PREFLIGHT_CHECK=true
|
||||
|
|
|
@ -7,4 +7,4 @@ build/
|
|||
package-lock.json
|
||||
yarn-error.log
|
||||
.eslintcache
|
||||
yarn.lock
|
||||
yarn.lock
|
||||
|
|
|
@ -11,7 +11,7 @@ A bug fix? See if it has fixed the issue fully on both Chromium and Firefox. For
|
|||
implemented.
|
||||
|
||||
### Translations
|
||||
Please don't use Google Translate. When submitting new translations, we'd prefer it if you waited until it's finished before pull requesting or if you opened it as a draft.
|
||||
Please don't use Google Translate. When submitting new translations, we'd prefer it if you waited until it's finished before pull requesting or if you opened it as a draft.
|
||||
All translation work should be done by copying the ``en-GB.json`` file to a file with your language code as the name, e.g ``fr.json``.
|
||||
|
||||
## Development
|
||||
|
@ -34,4 +34,4 @@ Inspired features are fine.
|
|||
See the note in general.
|
||||
|
||||
## Final Note
|
||||
Contact us before doing anything if you don't want to have to change 1000 things and/or have your pull request closed.
|
||||
Contact us before doing anything if you don't want to have to change 1000 things and/or have your pull request closed.
|
||||
|
|
|
@ -150,4 +150,4 @@ Please see our [roadmap](https://github.com/mue/mue/projects)
|
|||
|
||||
Many thanks to [Highholding](https://discord.bio/p/highholding), [Noa Shapira](#), [Roee Lupo](https://github.com/RoeeLupo), [Jeroen](#), [Glasvegas](https://twitter.com/_glasvegas), [Anders](https://github.com/FuryingFox), [Oded Shapira](https://twitter.com/dondishdev), Jacob Tyrrell and [Nikka Lai](#) for letting us use their wonderful photographs.
|
||||
|
||||
And finally, a big thank you to all the [contributors](https://github.com/mue/mue/graphs/contributors)!
|
||||
And finally, a big thank you to all the [contributors](https://github.com/mue/mue/graphs/contributors)!
|
||||
|
|
|
@ -3,4 +3,4 @@ module.exports = {
|
|||
plugins: ['@babel/plugin-proposal-class-properties', ['@babel/transform-runtime', {
|
||||
'regenerator': true
|
||||
}]]
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,14 +1,14 @@
|
|||
/* eslint-disable no-undef */
|
||||
// Original code sourced from https://forums.opera.com/topic/25046/how-to-disable-completely-the-speed-dial/14
|
||||
//Source https://forums.opera.com/topic/25046/how-to-disable-completely-the-speed-dial/14
|
||||
|
||||
chrome.tabs.onCreated.addListener((tab) => {
|
||||
if (tab.status === 'complete' && tab.url === 'chrome://startpage/') chrome.tabs.update(tab.id, {
|
||||
url: chrome.extension.getURL('index.html')
|
||||
});
|
||||
if (tab.status === 'complete' && tab.url === 'chrome://startpage/') chrome.tabs.update(tab.id, {
|
||||
url: chrome.extension.getURL('index.html')
|
||||
});
|
||||
});
|
||||
|
||||
chrome.tabs.onUpdated.addListener((tabId, changeInfo, tab) => {
|
||||
if (changeInfo.status === 'complete' && tab.url === 'chrome://startpage/') chrome.tabs.update(tabId, {
|
||||
url: chrome.extension.getURL('index.html')
|
||||
});
|
||||
});
|
||||
if (changeInfo.status === 'complete' && tab.url === 'chrome://startpage/') chrome.tabs.update(tabId, {
|
||||
url: chrome.extension.getURL('index.html')
|
||||
});
|
||||
});
|
||||
|
|
|
@ -1,18 +1,18 @@
|
|||
{
|
||||
"manifest_version": 2,
|
||||
"offline_enabled": true,
|
||||
"name": "Mue",
|
||||
"description": "Fast, open and free-to-use new tab page for most modern browsers.",
|
||||
"version": "5.0.0",
|
||||
"browser_action": {
|
||||
"default_icon": "icons/128x128.png"
|
||||
},
|
||||
"chrome_url_overrides": {
|
||||
"newtab": "index.html"
|
||||
},
|
||||
"icons": {
|
||||
"16": "icons/16x16.png",
|
||||
"48": "icons/48x48.png",
|
||||
"128": "icons/128x128.png"
|
||||
}
|
||||
}
|
||||
"manifest_version": 2,
|
||||
"offline_enabled": true,
|
||||
"name": "Mue",
|
||||
"description": "Fast, open and free-to-use new tab page for most modern browsers.",
|
||||
"version": "5.0.0",
|
||||
"browser_action": {
|
||||
"default_icon": "icons/128x128.png"
|
||||
},
|
||||
"chrome_url_overrides": {
|
||||
"newtab": "index.html"
|
||||
},
|
||||
"icons": {
|
||||
"16": "icons/16x16.png",
|
||||
"48": "icons/48x48.png",
|
||||
"128": "icons/128x128.png"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,15 +1,15 @@
|
|||
{
|
||||
"manifest_version": 2,
|
||||
"name": "Mue",
|
||||
"description": "Fast, open and free-to-use new tab page for most modern browsers.",
|
||||
"version": "5.0.0",
|
||||
"browser_action": {
|
||||
"default_icon": "icons/128x128.png"
|
||||
},
|
||||
"chrome_url_overrides": {
|
||||
"newtab": "index.html"
|
||||
},
|
||||
"chrome_settings_overrides": {
|
||||
"homepage": "index.html"
|
||||
}
|
||||
"manifest_version": 2,
|
||||
"name": "Mue",
|
||||
"description": "Fast, open and free-to-use new tab page for most modern browsers.",
|
||||
"version": "5.0.0",
|
||||
"browser_action": {
|
||||
"default_icon": "icons/128x128.png"
|
||||
},
|
||||
"chrome_url_overrides": {
|
||||
"newtab": "index.html"
|
||||
},
|
||||
"chrome_settings_overrides": {
|
||||
"homepage": "index.html"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,17 +1,17 @@
|
|||
{
|
||||
"manifest_version": 2,
|
||||
"name": "Mue",
|
||||
"description": "Fast, open and free-to-use new tab page for most modern browsers.",
|
||||
"version": "5.0.0",
|
||||
"browser_action": {
|
||||
"default_icon": "icons/128x128.png"
|
||||
},
|
||||
"background": {
|
||||
"scripts": [
|
||||
"./background-opera.js"
|
||||
]
|
||||
},
|
||||
"permissions": [
|
||||
"tabs"
|
||||
"manifest_version": 2,
|
||||
"name": "Mue",
|
||||
"description": "Fast, open and free-to-use new tab page for most modern browsers.",
|
||||
"version": "5.0.0",
|
||||
"browser_action": {
|
||||
"default_icon": "icons/128x128.png"
|
||||
},
|
||||
"background": {
|
||||
"scripts": [
|
||||
"./background-opera.js"
|
||||
]
|
||||
}
|
||||
},
|
||||
"permissions": [
|
||||
"tabs"
|
||||
]
|
||||
}
|
||||
|
|
|
@ -35,5 +35,4 @@
|
|||
</noscript>
|
||||
<div id='root'></div>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
</html>
|
||||
|
|
24
src/App.jsx
24
src/App.jsx
|
@ -32,15 +32,15 @@ export default class App extends React.PureComponent {
|
|||
if (!localStorage.getItem('firstRun')) {
|
||||
SettingsFunctions.setDefaultSettings();
|
||||
}
|
||||
|
||||
|
||||
if (localStorage.getItem('showWelcome') === 'true') {
|
||||
this.setState({
|
||||
welcomeModal: true
|
||||
this.setState({
|
||||
welcomeModal: true
|
||||
});
|
||||
}
|
||||
|
||||
SettingsFunctions.loadSettings();
|
||||
|
||||
|
||||
// These lines of code prevent double clicking the page or pressing CTRL + A from highlighting the page
|
||||
document.addEventListener('mousedown', (event) => {
|
||||
if (event.detail > 1) {
|
||||
|
@ -49,23 +49,23 @@ export default class App extends React.PureComponent {
|
|||
}, false);
|
||||
|
||||
document.onkeydown = (e) => {
|
||||
e = e || window.event;
|
||||
e = e || window.event;
|
||||
if (!e.ctrlKey) return;
|
||||
let code = e.which || e.keyCode;
|
||||
|
||||
switch (code) {
|
||||
case 65:
|
||||
e.preventDefault();
|
||||
e.stopPropagation();
|
||||
break;
|
||||
case 65:
|
||||
e.preventDefault();
|
||||
e.stopPropagation();
|
||||
break;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
closeWelcome() {
|
||||
localStorage.setItem('showWelcome', false);
|
||||
this.setState({
|
||||
welcomeModal: false
|
||||
this.setState({
|
||||
welcomeModal: false
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -78,7 +78,7 @@ export default class App extends React.PureComponent {
|
|||
modalClassList += ' dark';
|
||||
tooltipClassList += ' dark';
|
||||
}
|
||||
|
||||
|
||||
const overlayClassList = (localStorage.getItem('animations') === 'true') ? 'Overlay modal-animation' : 'Overlay';
|
||||
|
||||
/// language
|
||||
|
|
|
@ -1,29 +1,29 @@
|
|||
import React from 'react';
|
||||
|
||||
export default class ErrorBoundary extends React.PureComponent {
|
||||
constructor(props) {
|
||||
super(props);
|
||||
this.state = {
|
||||
error: false
|
||||
};
|
||||
constructor(props) {
|
||||
super(props);
|
||||
this.state = {
|
||||
error: false
|
||||
};
|
||||
}
|
||||
|
||||
static getDerivedStateFromError(error) {
|
||||
console.log(error);
|
||||
return { error: true };
|
||||
}
|
||||
|
||||
render() {
|
||||
if (this.state.error) {
|
||||
return (
|
||||
<div style={{'text-align': 'center'}}>
|
||||
<h1>Error</h1>
|
||||
<p>Failed to load this component of Mue.</p>
|
||||
<button class='refresh' onClick={() => window.location.reload()}>Refresh</button>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
static getDerivedStateFromError(error) {
|
||||
console.log(error);
|
||||
return { error: true };
|
||||
}
|
||||
|
||||
render() {
|
||||
if (this.state.error) {
|
||||
return (
|
||||
<div style={{'text-align': 'center'}}>
|
||||
<h1>Error</h1>
|
||||
<p>Failed to load this component of Mue.</p>
|
||||
<button class='refresh' onClick={() => window.location.reload()}>Refresh</button>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
return this.props.children;
|
||||
}
|
||||
}
|
||||
|
||||
return this.props.children;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,23 +1,23 @@
|
|||
import React from 'react';
|
||||
|
||||
export default function FeedbackModal(props) {
|
||||
return (
|
||||
<div className='feedback'>
|
||||
<h1>{props.language.modals.feedback.title}</h1>
|
||||
<span className='closeModal' onClick={props.modalClose}>×</span>
|
||||
<label>{props.language.modals.feedback.question_one}</label>
|
||||
<br/><br/>
|
||||
<label className='values'>0</label><input className='range' type='range' min='0' max='100' /><label className='values'>10</label>
|
||||
<br/><br/>
|
||||
<label>{props.language.modals.feedback.question_two}</label>
|
||||
<br/><br/>
|
||||
<input type='text'/>
|
||||
<br/><br/>
|
||||
<label>{props.language.modals.feedback.question_three}</label>
|
||||
<br/><br/>
|
||||
<label className='values'>0</label><input className='range' type='range' min='0' max='100' /><label className='values'>10</label>
|
||||
<br/><br/><br/>
|
||||
<button>{props.language.modals.feedback.submit}</button>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
return (
|
||||
<div className='feedback'>
|
||||
<h1>{props.language.modals.feedback.title}</h1>
|
||||
<span className='closeModal' onClick={props.modalClose}>×</span>
|
||||
<label>{props.language.modals.feedback.question_one}</label>
|
||||
<br/><br/>
|
||||
<label className='values'>0</label><input className='range' type='range' min='0' max='100' /><label className='values'>10</label>
|
||||
<br/><br/>
|
||||
<label>{props.language.modals.feedback.question_two}</label>
|
||||
<br/><br/>
|
||||
<input type='text'/>
|
||||
<br/><br/>
|
||||
<label>{props.language.modals.feedback.question_three}</label>
|
||||
<br/><br/>
|
||||
<label className='values'>0</label><input className='range' type='range' min='0' max='100' /><label className='values'>10</label>
|
||||
<br/><br/><br/>
|
||||
<button>{props.language.modals.feedback.submit}</button>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
|
|
@ -26,4 +26,4 @@ export default function MainModal(props) {
|
|||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -16,7 +16,7 @@ export default class Update extends React.PureComponent {
|
|||
|
||||
async getUpdate() {
|
||||
const data = await (await fetch(Constants.API_URL + '/getUpdate')).json();
|
||||
|
||||
|
||||
if (data.statusCode === 500 || data.title === null) {
|
||||
const supportText = `<br/><p>${this.props.language.contact_support}: <a target='_blank' class='modalLink' href='https://muetab.com/contact'>https://muetab.com/contact</a></p>`;
|
||||
return this.setState({
|
||||
|
@ -47,11 +47,11 @@ export default class Update extends React.PureComponent {
|
|||
|
||||
render() {
|
||||
return <div className='updateContent'>
|
||||
<span className='closeModal' onClick={this.props.modalClose}>×</span>
|
||||
<h1 style={{ 'marginBottom': '-10px' }}>{this.state.title}</h1>
|
||||
<h5 style={{ 'lineHeight': '0px' }}>{this.state.date}</h5>
|
||||
{this.state.image ? <img draggable='false' src={this.state.image} alt='Update'></img> : null}
|
||||
<p dangerouslySetInnerHTML={{ __html: this.state.html }}></p>
|
||||
<span className='closeModal' onClick={this.props.modalClose}>×</span>
|
||||
<h1 style={{ 'marginBottom': '-10px' }}>{this.state.title}</h1>
|
||||
<h5 style={{ 'lineHeight': '0px' }}>{this.state.date}</h5>
|
||||
{this.state.image ? <img draggable='false' src={this.state.image} alt='Update'></img> : null}
|
||||
<p dangerouslySetInnerHTML={{ __html: this.state.html }}></p>
|
||||
</div>;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -7,20 +7,20 @@ import ForumIcon from '@material-ui/icons/Forum';
|
|||
export default function WelcomeModal(props) {
|
||||
return (
|
||||
<div className='welcomeContent'>
|
||||
<span className='closeModal' onClick={props.modalClose}>×</span>
|
||||
<div className='welcomeModalText'>
|
||||
<h2 className='subtitle'>{props.language.title}</h2>
|
||||
<h1 className='welcometitle'>Mue Tab</h1>
|
||||
<img alt='celebration' style={{ 'height': '200px', 'width': 'auto' }} draggable={false} src='./././icons/undraw_celebration.svg' />
|
||||
<h2 className='subtitle'>{props.language.information}</h2>
|
||||
<p>{props.language.thankyoumessage1},<br/> {props.language.thankyoumessage2}</p>
|
||||
<h2 className='subtitle'>{props.language.support}</h2>
|
||||
<a href='mailto:hello@muetab.com' className='welcomeLink' target='_blank' rel='noopener noreferrer'><EmailIcon/></a>
|
||||
<a href='https://twitter.com/getmue' className='welcomeLink' target='_blank' rel='noopener noreferrer'><TwitterIcon/></a>
|
||||
<a href='https://discord.gg/zv8C9F8' className='welcomeLink' target='_blank' rel='noopener noreferrer'><ForumIcon/></a>
|
||||
<br/>
|
||||
<button className='close' onClick={props.modalClose}>{props.language.close}</button>
|
||||
</div>
|
||||
</div>
|
||||
<span className='closeModal' onClick={props.modalClose}>×</span>
|
||||
<div className='welcomeModalText'>
|
||||
<h2 className='subtitle'>{props.language.title}</h2>
|
||||
<h1 className='welcometitle'>Mue Tab</h1>
|
||||
<img alt='celebration' style={{ 'height': '200px', 'width': 'auto' }} draggable={false} src='./././icons/undraw_celebration.svg' />
|
||||
<h2 className='subtitle'>{props.language.information}</h2>
|
||||
<p>{props.language.thankyoumessage1},<br/> {props.language.thankyoumessage2}</p>
|
||||
<h2 className='subtitle'>{props.language.support}</h2>
|
||||
<a href='mailto:hello@muetab.com' className='welcomeLink' target='_blank' rel='noopener noreferrer'><EmailIcon/></a>
|
||||
<a href='https://twitter.com/getmue' className='welcomeLink' target='_blank' rel='noopener noreferrer'><TwitterIcon/></a>
|
||||
<a href='https://discord.gg/zv8C9F8' className='welcomeLink' target='_blank' rel='noopener noreferrer'><ForumIcon/></a>
|
||||
<br/>
|
||||
<button className='close' onClick={props.modalClose}>{props.language.close}</button>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -3,62 +3,62 @@ import React from 'react';
|
|||
import ArrowBackIcon from '@material-ui/icons/ArrowBack';
|
||||
|
||||
export default function Item(props) {
|
||||
let warningHTML;
|
||||
try { // For some reason it breaks sometimes so we use try/catch
|
||||
if (props.content.content.data.quote_api) {
|
||||
warningHTML = (
|
||||
<div className='productInformation'>
|
||||
<ul>
|
||||
<li className='header'>{this.props.language.quote_warning.title}</li>
|
||||
<li id='updated'>{this.props.language.quote_warning.description}</li>
|
||||
</ul>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
} catch (e) {
|
||||
// ignore
|
||||
}
|
||||
|
||||
let iconsrc = 'https://external-content.duckduckgo.com/iu/?u=' + props.data.icon; // prevent console error
|
||||
if (!props.data.icon) {
|
||||
iconsrc = null;
|
||||
}
|
||||
|
||||
return (
|
||||
<div id='item'>
|
||||
<br/>
|
||||
<ArrowBackIcon className='backArrow' onClick={props.function} />
|
||||
<br/>
|
||||
<h1>{props.data.name}</h1>
|
||||
{props.button}
|
||||
<br/><br/>
|
||||
<img alt='product' draggable={false} src={iconsrc} />
|
||||
<div className='informationContainer'>
|
||||
<div className='productInformation'>
|
||||
<h4>{props.language.information}</h4>
|
||||
<ul>
|
||||
<br/>
|
||||
<li className='header'>{props.language.last_updated}</li>
|
||||
<li>{props.data.updated}</li>
|
||||
<br/>
|
||||
<li className='header'>{props.language.version}</li>
|
||||
<li>{props.data.version}</li>
|
||||
<br/>
|
||||
<li className='header'>{props.language.author}</li>
|
||||
<li>{props.data.author}</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div className='productInformation'>
|
||||
<ul>
|
||||
<li className='header'>{props.language.notice.title}</li>
|
||||
<li id='updated'>{props.language.notice.description}</li>
|
||||
</ul>
|
||||
</div>
|
||||
{warningHTML}
|
||||
let warningHTML;
|
||||
try { // For some reason it breaks sometimes so we use try/catch
|
||||
if (props.content.content.data.quote_api) {
|
||||
warningHTML = (
|
||||
<div className='productInformation'>
|
||||
<ul>
|
||||
<li className='header'>{this.props.language.quote_warning.title}</li>
|
||||
<li id='updated'>{this.props.language.quote_warning.description}</li>
|
||||
</ul>
|
||||
</div>
|
||||
<br/>
|
||||
<h1>{props.language.overview}</h1>
|
||||
<p className='description' dangerouslySetInnerHTML={{__html: props.data.description}}></p>
|
||||
);
|
||||
}
|
||||
} catch (e) {
|
||||
// ignore
|
||||
}
|
||||
|
||||
let iconsrc = 'https://external-content.duckduckgo.com/iu/?u=' + props.data.icon; // prevent console error
|
||||
if (!props.data.icon) {
|
||||
iconsrc = null;
|
||||
}
|
||||
|
||||
return (
|
||||
<div id='item'>
|
||||
<br/>
|
||||
<ArrowBackIcon className='backArrow' onClick={props.function} />
|
||||
<br/>
|
||||
<h1>{props.data.name}</h1>
|
||||
{props.button}
|
||||
<br/><br/>
|
||||
<img alt='product' draggable={false} src={iconsrc} />
|
||||
<div className='informationContainer'>
|
||||
<div className='productInformation'>
|
||||
<h4>{props.language.information}</h4>
|
||||
<ul>
|
||||
<br/>
|
||||
<li className='header'>{props.language.last_updated}</li>
|
||||
<li>{props.data.updated}</li>
|
||||
<br/>
|
||||
<li className='header'>{props.language.version}</li>
|
||||
<li>{props.data.version}</li>
|
||||
<br/>
|
||||
<li className='header'>{props.language.author}</li>
|
||||
<li>{props.data.author}</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div className='productInformation'>
|
||||
<ul>
|
||||
<li className='header'>{props.language.notice.title}</li>
|
||||
<li id='updated'>{props.language.notice.description}</li>
|
||||
</ul>
|
||||
</div>
|
||||
{warningHTML}
|
||||
</div>
|
||||
);
|
||||
}
|
||||
<br/>
|
||||
<h1>{props.language.overview}</h1>
|
||||
<p className='description' dangerouslySetInnerHTML={{__html: props.data.description}}></p>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
|
|
@ -1,20 +1,20 @@
|
|||
import React from 'react';
|
||||
|
||||
export default function Items(props) {
|
||||
if (props.items.length === 0) {
|
||||
return null; // todo: add message here
|
||||
}
|
||||
if (props.items.length === 0) {
|
||||
return null; // todo: add message here
|
||||
}
|
||||
|
||||
return (
|
||||
<div className='items'>
|
||||
{props.items.map((item) =>
|
||||
<div className='item' onClick={() => props.toggleFunction(item.name)} key={item.name}>
|
||||
<img alt='icon' draggable={false} src={'https://external-content.duckduckgo.com/iu/?u=' + item.icon_url} />
|
||||
<div className='details'>
|
||||
<h4>{item.display_name ? item.display_name : item.name}</h4>
|
||||
<p>{item.author}</p>
|
||||
</div>
|
||||
</div>)}
|
||||
return (
|
||||
<div className='items'>
|
||||
{props.items.map((item) =>
|
||||
<div className='item' onClick={() => props.toggleFunction(item.name)} key={item.name}>
|
||||
<img alt='icon' draggable={false} src={'https://external-content.duckduckgo.com/iu/?u=' + item.icon_url} />
|
||||
<div className='details'>
|
||||
<h4>{item.display_name ? item.display_name : item.name}</h4>
|
||||
<p>{item.author}</p>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
</div>)}
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
|
|
@ -11,82 +11,82 @@ export default class Added extends React.PureComponent {
|
|||
constructor(...args) {
|
||||
super(...args);
|
||||
this.state = {
|
||||
installed: JSON.parse(localStorage.getItem('installed')),
|
||||
current_data: {
|
||||
type: '',
|
||||
name: '',
|
||||
content: {}
|
||||
},
|
||||
item_data: {
|
||||
name: 'Name',
|
||||
author: 'Author',
|
||||
description: 'Description',
|
||||
updated: '???',
|
||||
version: '1.0.0',
|
||||
icon: ''
|
||||
},
|
||||
button: ''
|
||||
installed: JSON.parse(localStorage.getItem('installed')),
|
||||
current_data: {
|
||||
type: '',
|
||||
name: '',
|
||||
content: {}
|
||||
},
|
||||
item_data: {
|
||||
name: 'Name',
|
||||
author: 'Author',
|
||||
description: 'Description',
|
||||
updated: '???',
|
||||
version: '1.0.0',
|
||||
icon: ''
|
||||
},
|
||||
button: ''
|
||||
}
|
||||
this.buttons = {
|
||||
uninstall: <button className='removeFromMue' onClick={() => this.manage('uninstall')}>Remove</button>,
|
||||
uninstall: <button className='removeFromMue' onClick={() => this.manage('uninstall')}>Remove</button>,
|
||||
}
|
||||
}
|
||||
|
||||
toggle(type, type2, data) {
|
||||
if (type === 'item') {
|
||||
const installed = JSON.parse(localStorage.getItem('installed'));
|
||||
const info = installed.find(i => i.name === data);
|
||||
const installed = JSON.parse(localStorage.getItem('installed'));
|
||||
const info = installed.find(i => i.name === data);
|
||||
|
||||
this.setState({
|
||||
current_data: {
|
||||
type: type2,
|
||||
name: data,
|
||||
content: info
|
||||
},
|
||||
item_data: {
|
||||
name: info.name,
|
||||
author: info.author,
|
||||
description: MarketplaceFunctions.urlParser(info.description.replace(/\n/g, '<br>')),
|
||||
updated: 'Not Implemented',
|
||||
version: info.version,
|
||||
icon: info.screenshot_url
|
||||
}
|
||||
});
|
||||
this.setState({
|
||||
current_data: {
|
||||
type: type2,
|
||||
name: data,
|
||||
content: info
|
||||
},
|
||||
item_data: {
|
||||
name: info.name,
|
||||
author: info.author,
|
||||
description: MarketplaceFunctions.urlParser(info.description.replace(/\n/g, '<br>')),
|
||||
updated: 'Not Implemented',
|
||||
version: info.version,
|
||||
icon: info.screenshot_url
|
||||
}
|
||||
});
|
||||
|
||||
document.getElementById('item').style.display = 'block';
|
||||
document.getElementById('marketplace').style.display = 'none';
|
||||
} else {
|
||||
document.getElementById('marketplace').style.display = 'block';
|
||||
document.getElementById('item').style.display = 'none';
|
||||
document.getElementById('item').style.display = 'block';
|
||||
document.getElementById('marketplace').style.display = 'none';
|
||||
} else {
|
||||
document.getElementById('marketplace').style.display = 'block';
|
||||
document.getElementById('item').style.display = 'none';
|
||||
}
|
||||
|
||||
this.setState({
|
||||
button: this.buttons.uninstall
|
||||
this.setState({
|
||||
button: this.buttons.uninstall
|
||||
});
|
||||
}
|
||||
|
||||
manage(type, input) {
|
||||
switch (type) {
|
||||
case 'install':
|
||||
MarketplaceFunctions.install(input.type, input, true);
|
||||
break;
|
||||
case 'uninstall':
|
||||
MarketplaceFunctions.uninstall(this.state.current_data.name, this.state.current_data.content.type);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
case 'install':
|
||||
MarketplaceFunctions.install(input.type, input, true);
|
||||
break;
|
||||
case 'uninstall':
|
||||
MarketplaceFunctions.uninstall(this.state.current_data.name, this.state.current_data.content.type);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
toast(this.props.toastLanguage[type + 'ed']);
|
||||
|
||||
let button = '';
|
||||
if (type === 'install') {
|
||||
button = this.buttons.uninstall;
|
||||
button = this.buttons.uninstall;
|
||||
}
|
||||
|
||||
this.setState({
|
||||
button: button,
|
||||
installed: JSON.parse(localStorage.getItem('installed'))
|
||||
this.setState({
|
||||
button: button,
|
||||
installed: JSON.parse(localStorage.getItem('installed'))
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -94,26 +94,26 @@ export default class Added extends React.PureComponent {
|
|||
let content = <Items items={this.state.installed} toggleFunction={(input) => this.toggle('item', 'addon', input)} />;
|
||||
|
||||
if (this.state.installed.length === 0) {
|
||||
content = (
|
||||
<div className='items'>
|
||||
<div className='emptyMessage'>
|
||||
<LocalMallIcon/>
|
||||
<h1>Empty</h1>
|
||||
<p className='description'>Nothing here (yet)</p>
|
||||
<button className='goToMarket'>Take me there</button>
|
||||
</div>
|
||||
content = (
|
||||
<div className='items'>
|
||||
<div className='emptyMessage'>
|
||||
<LocalMallIcon/>
|
||||
<h1>Empty</h1>
|
||||
<p className='description'>Nothing here (yet)</p>
|
||||
<button className='goToMarket'>Take me there</button>
|
||||
</div>
|
||||
);
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
return (
|
||||
<React.Fragment>
|
||||
<React.Fragment>
|
||||
<div id='marketplace'>
|
||||
<FileUpload id='file-input' type='settings' accept='application/json' loadFunction={(e) => this.manage('install', JSON.parse(e.target.result))} />
|
||||
<button className='addToMue sideload' onClick={() => document.getElementById('file-input').click()}>Sideload</button>
|
||||
{content}
|
||||
</div>
|
||||
</React.Fragment>
|
||||
</React.Fragment>
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -15,94 +15,94 @@ export default class Marketplace extends React.PureComponent {
|
|||
constructor(...args) {
|
||||
super(...args);
|
||||
this.state = {
|
||||
items: [],
|
||||
current_data: {
|
||||
type: '',
|
||||
name: '',
|
||||
content: {}
|
||||
},
|
||||
button: '',
|
||||
featured: {},
|
||||
done: false,
|
||||
item_data: {
|
||||
name: 'Name',
|
||||
author: 'Author',
|
||||
description: 'Description',
|
||||
updated: '???',
|
||||
version: '1.0.0',
|
||||
icon: ''
|
||||
}
|
||||
}
|
||||
this.buttons = {
|
||||
uninstall: <button className='removeFromMue' onClick={() => this.manage('uninstall')}>Remove</button>,
|
||||
install: <button className='addToMue' onClick={() => this.manage('install')}>Add to Mue</button>
|
||||
items: [],
|
||||
current_data: {
|
||||
type: '',
|
||||
name: '',
|
||||
content: {}
|
||||
},
|
||||
button: '',
|
||||
featured: {},
|
||||
done: false,
|
||||
item_data: {
|
||||
name: 'Name',
|
||||
author: 'Author',
|
||||
description: 'Description',
|
||||
updated: '???',
|
||||
version: '1.0.0',
|
||||
icon: ''
|
||||
}
|
||||
}
|
||||
this.buttons = {
|
||||
uninstall: <button className='removeFromMue' onClick={() => this.manage('uninstall')}>Remove</button>,
|
||||
install: <button className='addToMue' onClick={() => this.manage('install')}>Add to Mue</button>
|
||||
}
|
||||
}
|
||||
|
||||
async toggle(type, data) {
|
||||
switch (type) {
|
||||
case 'item':
|
||||
let info; // get item info
|
||||
try {
|
||||
info = await (await fetch(`${Constants.MARKETPLACE_URL}/item/${this.props.type}/${data}`)).json();
|
||||
} catch (e) {
|
||||
return toast(this.props.toastLanguage.error);
|
||||
}
|
||||
case 'item':
|
||||
let info; // get item info
|
||||
try {
|
||||
info = await (await fetch(`${Constants.MARKETPLACE_URL}/item/${this.props.type}/${data}`)).json();
|
||||
} catch (e) {
|
||||
return toast(this.props.toastLanguage.error);
|
||||
}
|
||||
|
||||
// check if already installed
|
||||
let button = this.buttons.install;
|
||||
let button = this.buttons.install;
|
||||
|
||||
const installed = JSON.parse(localStorage.getItem('installed'));
|
||||
const installed = JSON.parse(localStorage.getItem('installed'));
|
||||
|
||||
if (installed.some(item => item.name === data)) {
|
||||
button = this.buttons.uninstall;
|
||||
}
|
||||
|
||||
this.setState({
|
||||
current_data: { type: this.props.type, name: data, content: info },
|
||||
item_data: {
|
||||
name: info.data.name,
|
||||
author: info.data.author,
|
||||
description: MarketplaceFunctions.urlParser(info.data.description.replace(/\n/g, '<br>')),
|
||||
updated: info.updated,
|
||||
version: info.data.version,
|
||||
icon: info.data.screenshot_url
|
||||
},
|
||||
button: button
|
||||
});
|
||||
|
||||
document.getElementById('marketplace').style.display = 'none';
|
||||
document.getElementById('item').style.display = 'block';
|
||||
break;
|
||||
|
||||
default:
|
||||
document.getElementById('marketplace').style.display = 'block';
|
||||
document.getElementById('item').style.display = 'none';
|
||||
break;
|
||||
if (installed.some(item => item.name === data)) {
|
||||
button = this.buttons.uninstall;
|
||||
}
|
||||
}
|
||||
|
||||
this.setState({
|
||||
current_data: { type: this.props.type, name: data, content: info },
|
||||
item_data: {
|
||||
name: info.data.name,
|
||||
author: info.data.author,
|
||||
description: MarketplaceFunctions.urlParser(info.data.description.replace(/\n/g, '<br>')),
|
||||
updated: info.updated,
|
||||
version: info.data.version,
|
||||
icon: info.data.screenshot_url
|
||||
},
|
||||
button: button
|
||||
});
|
||||
|
||||
document.getElementById('marketplace').style.display = 'none';
|
||||
document.getElementById('item').style.display = 'block';
|
||||
break;
|
||||
|
||||
default:
|
||||
document.getElementById('marketplace').style.display = 'block';
|
||||
document.getElementById('item').style.display = 'none';
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
async getItems() {
|
||||
const { data } = await (await fetch(Constants.MARKETPLACE_URL + '/all')).json();
|
||||
const featured = await (await fetch(Constants.MARKETPLACE_URL + '/featured')).json();
|
||||
|
||||
this.setState({
|
||||
items: data[this.props.type],
|
||||
featured: featured.data,
|
||||
done: true
|
||||
items: data[this.props.type],
|
||||
featured: featured.data,
|
||||
done: true
|
||||
});
|
||||
}
|
||||
|
||||
manage(type) {
|
||||
switch (type) {
|
||||
case 'install':
|
||||
MarketplaceFunctions.install(this.state.current_data.type, this.state.current_data.content.data);
|
||||
break;
|
||||
case 'uninstall':
|
||||
MarketplaceFunctions.uninstall(this.state.current_data.content.data.name, this.state.current_data.type);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
case 'install':
|
||||
MarketplaceFunctions.install(this.state.current_data.type, this.state.current_data.content.data);
|
||||
break;
|
||||
case 'uninstall':
|
||||
MarketplaceFunctions.uninstall(this.state.current_data.content.data.name, this.state.current_data.type);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
toast(this.props.toastLanguage[type + 'ed']);
|
||||
|
@ -125,31 +125,31 @@ export default class Marketplace extends React.PureComponent {
|
|||
|
||||
render() {
|
||||
const errorMessage = (msg) => {
|
||||
return (
|
||||
<div id='marketplace'>
|
||||
<div className='emptyMessage' style={{ 'marginTop': '20px', 'transform': 'translateY(80%)' }}>
|
||||
{msg}
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
return (
|
||||
<div id='marketplace'>
|
||||
<div className='emptyMessage' style={{ 'marginTop': '20px', 'transform': 'translateY(80%)' }}>
|
||||
{msg}
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
if (navigator.onLine === false) {
|
||||
return errorMessage(
|
||||
<React.Fragment>
|
||||
<WifiOffIcon/>
|
||||
<h1>Offline</h1>
|
||||
<p className='description'>Mue down!</p>
|
||||
</React.Fragment>
|
||||
);
|
||||
return errorMessage(
|
||||
<React.Fragment>
|
||||
<WifiOffIcon/>
|
||||
<h1>Offline</h1>
|
||||
<p className='description'>Mue down!</p>
|
||||
</React.Fragment>
|
||||
);
|
||||
}
|
||||
|
||||
if (localStorage.getItem('offlineMode') === 'true') {
|
||||
return errorMessage(
|
||||
<React.Fragment>
|
||||
<WifiOffIcon/>
|
||||
<h1>Offline mode is enabled</h1>
|
||||
<p className='description'>Please turn off offline mode to access the marketplace</p>
|
||||
<WifiOffIcon/>
|
||||
<h1>Offline mode is enabled</h1>
|
||||
<p className='description'>Please turn off offline mode to access the marketplace</p>
|
||||
</React.Fragment>
|
||||
);
|
||||
}
|
||||
|
@ -159,18 +159,18 @@ export default class Marketplace extends React.PureComponent {
|
|||
}
|
||||
|
||||
return (
|
||||
<React.Fragment>
|
||||
<div id='marketplace'>
|
||||
<div className='featured' style={{ 'backgroundColor': this.state.featured.colour }}>
|
||||
<p>{this.state.featured.title}</p>
|
||||
<h1>{this.state.featured.name}</h1>
|
||||
<button className='addToMue' onClick={() => window.location.href = this.state.featured.buttonLink}>{this.state.featured.buttonText}</button>
|
||||
</div>
|
||||
<Items
|
||||
items={this.state.items.slice(0, 3)}
|
||||
toggleFunction={(input) => this.toggle('item', input)} />
|
||||
</div>
|
||||
</React.Fragment>
|
||||
);
|
||||
}
|
||||
}
|
||||
<React.Fragment>
|
||||
<div id='marketplace'>
|
||||
<div className='featured' style={{ 'backgroundColor': this.state.featured.colour }}>
|
||||
<p>{this.state.featured.title}</p>
|
||||
<h1>{this.state.featured.name}</h1>
|
||||
<button className='addToMue' onClick={() => window.location.href = this.state.featured.buttonLink}>{this.state.featured.buttonText}</button>
|
||||
</div>
|
||||
<Items
|
||||
items={this.state.items.slice(0, 3)}
|
||||
toggleFunction={(input) => this.toggle('item', input)} />
|
||||
</div>
|
||||
</React.Fragment>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -15,15 +15,15 @@ export default class Checkbox extends React.PureComponent {
|
|||
|
||||
handleChange(name) {
|
||||
SettingsFunctions.setItem(name);
|
||||
|
||||
this.setState({
|
||||
checked: (this.state.checked === true) ? false : true
|
||||
|
||||
this.setState({
|
||||
checked: (this.state.checked === true) ? false : true
|
||||
});
|
||||
}
|
||||
|
||||
render() {
|
||||
let text = this.props.text;
|
||||
|
||||
|
||||
if (this.props.newFeature) {
|
||||
text = <span>{this.props.text} <span className='newFeature'> NEW</span></span>;
|
||||
} else if (this.props.betaFeature) {
|
||||
|
@ -40,4 +40,4 @@ export default class Checkbox extends React.PureComponent {
|
|||
</React.Fragment>
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -17,4 +17,4 @@ export default class Dropdown extends React.PureComponent {
|
|||
</React.Fragment>
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -5,24 +5,24 @@ import { toast } from 'react-toastify';
|
|||
export default class FileUpload extends React.PureComponent {
|
||||
componentDidMount() {
|
||||
document.getElementById(this.props.id).onchange = (e) => {
|
||||
const reader = new FileReader();
|
||||
const file = e.target.files[0];
|
||||
const reader = new FileReader();
|
||||
const file = e.target.files[0];
|
||||
|
||||
if (this.props.type === 'settings') {
|
||||
reader.readAsText(file, 'UTF-8');
|
||||
} else { // background upload
|
||||
if (file.size > 2000000) {
|
||||
return toast('File is over 2MB');
|
||||
}
|
||||
|
||||
reader.readAsDataURL(file);
|
||||
if (this.props.type === 'settings') {
|
||||
reader.readAsText(file, 'UTF-8');
|
||||
} else { // background upload
|
||||
if (file.size > 2000000) {
|
||||
return toast('File is over 2MB');
|
||||
}
|
||||
|
||||
reader.addEventListener('load', (e) => this.props.loadFunction(e));
|
||||
reader.readAsDataURL(file);
|
||||
}
|
||||
|
||||
reader.addEventListener('load', (e) => this.props.loadFunction(e));
|
||||
};
|
||||
}
|
||||
|
||||
render() {
|
||||
return <input id={this.props.id} type='file' className='hidden' accept={this.props.accept} />;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -15,17 +15,17 @@ export default class Slider extends React.PureComponent {
|
|||
|
||||
SettingsFunctions.setItem(setText);
|
||||
|
||||
this.setState({
|
||||
checked: (this.state.checked === true) ? false : true
|
||||
this.setState({
|
||||
checked: (this.state.checked === true) ? false : true
|
||||
});
|
||||
}
|
||||
|
||||
render() {
|
||||
return (
|
||||
<label className='switch'>
|
||||
<input type='checkbox' checked={this.state.checked} onChange={() => this.handleChange()} />
|
||||
<span className='slider'></span>
|
||||
</label>
|
||||
<label className='switch'>
|
||||
<input type='checkbox' checked={this.state.checked} onChange={() => this.handleChange()} />
|
||||
<span className='slider'></span>
|
||||
</label>
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -25,9 +25,9 @@ export default class About extends React.PureComponent {
|
|||
updateMsg = 'Update available: ' + version;
|
||||
}
|
||||
|
||||
this.setState({
|
||||
contributors: contributors, // TODO: REMOVE BOTS AND MAKE IT ACTUALLY WORK,
|
||||
update: updateMsg
|
||||
this.setState({
|
||||
contributors: contributors, // TODO: REMOVE BOTS AND MAKE IT ACTUALLY WORK,
|
||||
update: updateMsg
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -38,27 +38,27 @@ export default class About extends React.PureComponent {
|
|||
render() {
|
||||
return (
|
||||
<div>
|
||||
<h2>About</h2>
|
||||
<img draggable='false' style={{'height': '100px', 'width': 'auto'}} src='https://raw.githubusercontent.com/mue/branding/master/logo/logo_horizontal.png' alt='Mue logo'></img>
|
||||
<p>Copyright 2018-{new Date().getFullYear()} Mue Tab (BSD-3 License)</p>
|
||||
<p>Version {Constants.VERSION} ({this.state.update})</p>
|
||||
<h3>Resources Used</h3>
|
||||
<p>Pexels (Background Images)</p>
|
||||
<p>Google (Pin Icon)</p>
|
||||
<h3>Contributors</h3>
|
||||
{this.state.contributors.map((item) =>
|
||||
<Tooltip title={item.login} placement='top' key={item.login}>
|
||||
<a href={'https://github.com/' + item.login} target='_blank' rel='noopener noreferrer'><img draggable='false' className='abouticon' src={item.avatar_url + '&size=256'} alt={item.login}></img></a>
|
||||
</Tooltip>
|
||||
)}
|
||||
{other_contributors.map((item) => // for those who contributed without opening a pull request
|
||||
<Tooltip title={item.login} placement='top' key={item.login}>
|
||||
<a href={'https://github.com/' + item.login} target='_blank' rel='noopener noreferrer'><img draggable='false' className='abouticon' src={item.avatar_url + '&size=256'} alt={item.login}></img></a>
|
||||
</Tooltip>
|
||||
)}
|
||||
<h3>Supporters</h3>
|
||||
<p>to be implemented</p>
|
||||
<h2>About</h2>
|
||||
<img draggable='false' style={{'height': '100px', 'width': 'auto'}} src='https://raw.githubusercontent.com/mue/branding/master/logo/logo_horizontal.png' alt='Mue logo'></img>
|
||||
<p>Copyright 2018-{new Date().getFullYear()} Mue Tab (BSD-3 License)</p>
|
||||
<p>Version {Constants.VERSION} ({this.state.update})</p>
|
||||
<h3>Resources Used</h3>
|
||||
<p>Pexels (Background Images)</p>
|
||||
<p>Google (Pin Icon)</p>
|
||||
<h3>Contributors</h3>
|
||||
{this.state.contributors.map((item) =>
|
||||
<Tooltip title={item.login} placement='top' key={item.login}>
|
||||
<a href={'https://github.com/' + item.login} target='_blank' rel='noopener noreferrer'><img draggable='false' className='abouticon' src={item.avatar_url + '&size=256'} alt={item.login}></img></a>
|
||||
</Tooltip>
|
||||
)}
|
||||
{other_contributors.map((item) => // for those who contributed without opening a pull request
|
||||
<Tooltip title={item.login} placement='top' key={item.login}>
|
||||
<a href={'https://github.com/' + item.login} target='_blank' rel='noopener noreferrer'><img draggable='false' className='abouticon' src={item.avatar_url + '&size=256'} alt={item.login}></img></a>
|
||||
</Tooltip>
|
||||
)}
|
||||
<h3>Supporters</h3>
|
||||
<p>to be implemented</p>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -8,52 +8,52 @@ import SettingsFunctions from '../../../../modules/helpers/settings';
|
|||
import { toast } from 'react-toastify';
|
||||
|
||||
export default class AdvancedSettings extends React.PureComponent {
|
||||
resetItem() {
|
||||
document.getElementById('customcss').value = '';
|
||||
toast(this.props.toastLanguage.reset);
|
||||
}
|
||||
|
||||
componentDidMount() {
|
||||
document.getElementById('customcss').value = localStorage.getItem('customcss');
|
||||
}
|
||||
|
||||
settingsImport(e) {
|
||||
const content = JSON.parse(e.target.result);
|
||||
|
||||
for (const key of Object.keys(content)) {
|
||||
localStorage.setItem(key, content[key]);
|
||||
}
|
||||
|
||||
toast(this.props.toastLanguage.imported);
|
||||
}
|
||||
|
||||
componentWillUnmount() {
|
||||
localStorage.setItem('customcss', document.getElementById('customcss').value);
|
||||
resetItem() {
|
||||
document.getElementById('customcss').value = '';
|
||||
toast(this.props.toastLanguage.reset);
|
||||
}
|
||||
|
||||
componentDidMount() {
|
||||
document.getElementById('customcss').value = localStorage.getItem('customcss');
|
||||
}
|
||||
|
||||
settingsImport(e) {
|
||||
const content = JSON.parse(e.target.result);
|
||||
|
||||
for (const key of Object.keys(content)) {
|
||||
localStorage.setItem(key, content[key]);
|
||||
}
|
||||
|
||||
render() {
|
||||
return (
|
||||
<div>
|
||||
<h2>Advanced</h2>
|
||||
<Checkbox name='offlineMode' text='Offline Mode' />
|
||||
<h3>Data</h3>
|
||||
<button className='reset' onClick={() => SettingsFunctions.setDefaultSettings('reset')}>Reset</button>
|
||||
<button className='export' onClick={() => SettingsFunctions.exportSettings()}>Export</button>
|
||||
<button className='import' onClick={() => document.getElementById('file-input').click()}>Import</button>
|
||||
<FileUpload id='file-input' accept='application/json' type='settings' loadFunction={(e) => this.settingsImport(e)} />
|
||||
<h3>Customisation</h3>
|
||||
<ul>
|
||||
<p>Custom CSS <span className='modalLink' onClick={() => this.resetItem()}>Reset</span></p>
|
||||
<textarea id='customcss'></textarea>
|
||||
</ul>
|
||||
<ul>
|
||||
<p>Custom JS <span className='modalLink' onClick={() => this.resetItem()}>Reset</span></p>
|
||||
<textarea id='customjs'></textarea>
|
||||
</ul>
|
||||
<h3>Experimental</h3>
|
||||
<p>Please note that the Mue team cannot provide support if you have experimental mode on. Please disable it first and see if the issues continue to occur before contacting support.</p>
|
||||
<Checkbox name='experimental' text='Enabled' />
|
||||
</div>
|
||||
);
|
||||
}
|
||||
}
|
||||
toast(this.props.toastLanguage.imported);
|
||||
}
|
||||
|
||||
componentWillUnmount() {
|
||||
localStorage.setItem('customcss', document.getElementById('customcss').value);
|
||||
}
|
||||
|
||||
render() {
|
||||
return (
|
||||
<div>
|
||||
<h2>Advanced</h2>
|
||||
<Checkbox name='offlineMode' text='Offline Mode' />
|
||||
<h3>Data</h3>
|
||||
<button className='reset' onClick={() => SettingsFunctions.setDefaultSettings('reset')}>Reset</button>
|
||||
<button className='export' onClick={() => SettingsFunctions.exportSettings()}>Export</button>
|
||||
<button className='import' onClick={() => document.getElementById('file-input').click()}>Import</button>
|
||||
<FileUpload id='file-input' accept='application/json' type='settings' loadFunction={(e) => this.settingsImport(e)} />
|
||||
<h3>Customisation</h3>
|
||||
<ul>
|
||||
<p>Custom CSS <span className='modalLink' onClick={() => this.resetItem()}>Reset</span></p>
|
||||
<textarea id='customcss'></textarea>
|
||||
</ul>
|
||||
<ul>
|
||||
<p>Custom JS <span className='modalLink' onClick={() => this.resetItem()}>Reset</span></p>
|
||||
<textarea id='customjs'></textarea>
|
||||
</ul>
|
||||
<h3>Experimental</h3>
|
||||
<p>Please note that the Mue team cannot provide support if you have experimental mode on. Please disable it first and see if the issues continue to occur before contacting support.</p>
|
||||
<Checkbox name='experimental' text='Enabled' />
|
||||
</div>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -4,19 +4,19 @@ import Checkbox from '../Checkbox';
|
|||
export default function AppearanceSettings (props) {
|
||||
return (
|
||||
<div>
|
||||
<h2>{props.language.title}</h2>
|
||||
<Checkbox name='darkTheme' text={props.language.dark} />
|
||||
<Checkbox name='brightnessTime' text={props.language.night_mode} betaFeature={true} />
|
||||
<h3>Accessibility</h3>
|
||||
<Checkbox name='animations' text={props.language.animations} betaFeature={true} />
|
||||
<ul>
|
||||
<p>Zoom (100%) <span className='modalLink'>{props.language.reset}</span></p>
|
||||
<input className='range' type='range' min='50' max='200' value={100} />
|
||||
</ul>
|
||||
<ul>
|
||||
<p>Toast Duration (2500 milliseconds) <span className='modalLink'>{props.language.reset}</span></p>
|
||||
<input className='range' type='range' min='50' max='200' value={100} />
|
||||
</ul>
|
||||
<h2>{props.language.title}</h2>
|
||||
<Checkbox name='darkTheme' text={props.language.dark} />
|
||||
<Checkbox name='brightnessTime' text={props.language.night_mode} betaFeature={true} />
|
||||
<h3>Accessibility</h3>
|
||||
<Checkbox name='animations' text={props.language.animations} betaFeature={true} />
|
||||
<ul>
|
||||
<p>Zoom (100%) <span className='modalLink'>{props.language.reset}</span></p>
|
||||
<input className='range' type='range' min='50' max='200' value={100} />
|
||||
</ul>
|
||||
<ul>
|
||||
<p>Toast Duration (2500 milliseconds) <span className='modalLink'>{props.language.reset}</span></p>
|
||||
<input className='range' type='range' min='50' max='200' value={100} />
|
||||
</ul>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -31,30 +31,30 @@ export default class BackgroundSettings extends React.PureComponent {
|
|||
switch (key) {
|
||||
case 'customBackgroundColour':
|
||||
localStorage.setItem('customBackgroundColour', '');
|
||||
this.setState({
|
||||
gradientSettings: this.DefaultGradientSettings
|
||||
this.setState({
|
||||
gradientSettings: this.DefaultGradientSettings
|
||||
});
|
||||
break;
|
||||
|
||||
case 'customBackground':
|
||||
document.getElementById('customBackground').value = '';
|
||||
case 'customBackground':
|
||||
document.getElementById('customBackground').value = '';
|
||||
break;
|
||||
|
||||
case 'blur':
|
||||
localStorage.setItem('blur', 0);
|
||||
this.setState({
|
||||
blur: 0
|
||||
this.setState({
|
||||
blur: 0
|
||||
});
|
||||
break;
|
||||
|
||||
case 'brightness':
|
||||
localStorage.setItem('brightness', 100);
|
||||
this.setState({
|
||||
brightness: 100
|
||||
this.setState({
|
||||
brightness: 100
|
||||
});
|
||||
break;
|
||||
|
||||
default:
|
||||
default:
|
||||
toast('resetItem requires a key!');
|
||||
}
|
||||
|
||||
|
@ -147,21 +147,21 @@ export default class BackgroundSettings extends React.PureComponent {
|
|||
}
|
||||
|
||||
this.setState({
|
||||
gradientSettings: {
|
||||
'angle': attrs.degree,
|
||||
'gradient': attrs.points.map((p) => {
|
||||
return {
|
||||
'colour': '#' + rgbToHex(p.red, p.green, p.blue),
|
||||
'stop': p.left
|
||||
} }),
|
||||
'type': attrs.type
|
||||
gradientSettings: {
|
||||
'angle': attrs.degree,
|
||||
'gradient': attrs.points.map((p) => {
|
||||
return {
|
||||
'colour': '#' + rgbToHex(p.red, p.green, p.blue),
|
||||
'stop': p.left
|
||||
}}),
|
||||
'type': attrs.type
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
fileUpload(e) {
|
||||
localStorage.setItem('customBackground', e.target.result);
|
||||
this.setState({
|
||||
this.setState({
|
||||
customBackground: e.target.result
|
||||
});
|
||||
}
|
||||
|
@ -186,7 +186,7 @@ export default class BackgroundSettings extends React.PureComponent {
|
|||
if (this.GradientPickerInitalState === undefined) {
|
||||
this.InitializeColorPickerState(this.state.gradientSettings);
|
||||
}
|
||||
|
||||
|
||||
gradientInputs = (
|
||||
<ColorPicker
|
||||
onStartChange={(color) => this.onColorPickerChange(color, 'start')}
|
||||
|
@ -217,50 +217,50 @@ export default class BackgroundSettings extends React.PureComponent {
|
|||
}
|
||||
|
||||
return (
|
||||
<div>
|
||||
<h2>Background</h2>
|
||||
<Checkbox name='background' text='Enabled' />
|
||||
<h3>Buttons</h3>
|
||||
<ul>
|
||||
<Checkbox name='view' text={this.props.language.view} />
|
||||
<Checkbox name='favouriteEnabled' text={this.props.language.favourite} />
|
||||
<Checkbox name='refresh' text={this.props.language.refresh} />
|
||||
</ul>
|
||||
<h3>Effects</h3>
|
||||
<ul>
|
||||
<p>{this.props.language.blur} ({this.state.blur}%) <span className='modalLink' onClick={() => this.resetItem('blur')}>{this.props.language.reset}</span></p>
|
||||
<input className='range' type='range' min='0' max='100' value={this.state.blur} onChange={(event) => this.setState({ blur: event.target.value })} />
|
||||
</ul>
|
||||
<ul>
|
||||
<p>{this.props.language.brightness} ({this.state.brightness}%) <span className='modalLink' onClick={() => this.resetItem('brightness')}>{this.props.language.reset}</span></p>
|
||||
<input className='range' type='range' min='0' max='100' value={this.state.brightness} onChange={(event) => this.setState({ brightness: event.target.value })} />
|
||||
</ul>
|
||||
<h3>Source</h3>
|
||||
<ul>
|
||||
<Dropdown
|
||||
label={this.props.language.api}
|
||||
name='backgroundapi'
|
||||
id='backgroundAPI'
|
||||
onChange={() => localStorage.setItem('backgroundAPI', document.getElementById('backgroundAPI').value)} >
|
||||
<option className='choices' value='mue'>Mue</option>
|
||||
<option className='choices' value='unsplash'>Unsplash</option>
|
||||
</Dropdown>
|
||||
</ul>
|
||||
<ul>
|
||||
<p>{this.props.language.custom_url} <span className='modalLink' onClick={() => this.resetItem('customBackground')}>{this.props.language.reset}</span></p>
|
||||
<input type='text' value={this.state.customBackground} onChange={(e) => this.setState({ customBackground: e.target.value })}></input>
|
||||
</ul>
|
||||
<ul>
|
||||
<p>{this.props.language.custom_background} <span className='modalLink' onClick={() => this.resetItem('customBackground')}>{this.props.language.reset}</span></p>
|
||||
<button className='uploadbg' onClick={() => document.getElementById('bg-input').click()}>{this.props.language.upload}</button>
|
||||
<FileUpload id='bg-input' accept='image/jpeg, image/png, image/webp, image/webm, image/gif' loadFunction={(e) => this.fileUpload(e)} />
|
||||
</ul>
|
||||
<ul>
|
||||
<p>{this.props.language.custom_colour} <span className='modalLink' onClick={() => this.resetItem('customBackgroundColour')}>{this.props.language.reset}</span></p>
|
||||
<input id='customBackgroundHex' type='hidden' value={this.currentGradientSettings()} />
|
||||
{colourSettings}
|
||||
</ul>
|
||||
</div>
|
||||
<div>
|
||||
<h2>Background</h2>
|
||||
<Checkbox name='background' text='Enabled' />
|
||||
<h3>Buttons</h3>
|
||||
<ul>
|
||||
<Checkbox name='view' text={this.props.language.view} />
|
||||
<Checkbox name='favouriteEnabled' text={this.props.language.favourite} />
|
||||
<Checkbox name='refresh' text={this.props.language.refresh} />
|
||||
</ul>
|
||||
<h3>Effects</h3>
|
||||
<ul>
|
||||
<p>{this.props.language.blur} ({this.state.blur}%) <span className='modalLink' onClick={() => this.resetItem('blur')}>{this.props.language.reset}</span></p>
|
||||
<input className='range' type='range' min='0' max='100' value={this.state.blur} onChange={(event) => this.setState({ blur: event.target.value })} />
|
||||
</ul>
|
||||
<ul>
|
||||
<p>{this.props.language.brightness} ({this.state.brightness}%) <span className='modalLink' onClick={() => this.resetItem('brightness')}>{this.props.language.reset}</span></p>
|
||||
<input className='range' type='range' min='0' max='100' value={this.state.brightness} onChange={(event) => this.setState({ brightness: event.target.value })} />
|
||||
</ul>
|
||||
<h3>Source</h3>
|
||||
<ul>
|
||||
<Dropdown
|
||||
label={this.props.language.api}
|
||||
name='backgroundapi'
|
||||
id='backgroundAPI'
|
||||
onChange={() => localStorage.setItem('backgroundAPI', document.getElementById('backgroundAPI').value)} >
|
||||
<option className='choices' value='mue'>Mue</option>
|
||||
<option className='choices' value='unsplash'>Unsplash</option>
|
||||
</Dropdown>
|
||||
</ul>
|
||||
<ul>
|
||||
<p>{this.props.language.custom_url} <span className='modalLink' onClick={() => this.resetItem('customBackground')}>{this.props.language.reset}</span></p>
|
||||
<input type='text' value={this.state.customBackground} onChange={(e) => this.setState({ customBackground: e.target.value })}></input>
|
||||
</ul>
|
||||
<ul>
|
||||
<p>{this.props.language.custom_background} <span className='modalLink' onClick={() => this.resetItem('customBackground')}>{this.props.language.reset}</span></p>
|
||||
<button className='uploadbg' onClick={() => document.getElementById('bg-input').click()}>{this.props.language.upload}</button>
|
||||
<FileUpload id='bg-input' accept='image/jpeg, image/png, image/webp, image/webm, image/gif' loadFunction={(e) => this.fileUpload(e)} />
|
||||
</ul>
|
||||
<ul>
|
||||
<p>{this.props.language.custom_colour} <span className='modalLink' onClick={() => this.resetItem('customBackgroundColour')}>{this.props.language.reset}</span></p>
|
||||
<input id='customBackgroundHex' type='hidden' value={this.currentGradientSettings()} />
|
||||
{colourSettings}
|
||||
</ul>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -4,7 +4,6 @@ import Checkbox from '../Checkbox';
|
|||
export default function ExperimentalSettings (props) {
|
||||
return (
|
||||
<div>
|
||||
|
||||
</div>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -9,29 +9,29 @@ export default class GreetingSettings extends React.PureComponent {
|
|||
constructor(...args) {
|
||||
super(...args);
|
||||
this.state = {
|
||||
birthday: new Date(localStorage.getItem('birthday')) || new Date(),
|
||||
greetingName: localStorage.getItem('greetingName') || ''
|
||||
birthday: new Date(localStorage.getItem('birthday')) || new Date(),
|
||||
greetingName: localStorage.getItem('greetingName') || ''
|
||||
};
|
||||
}
|
||||
|
||||
resetItem() {
|
||||
this.setState({
|
||||
greetingName: ''
|
||||
this.setState({
|
||||
greetingName: ''
|
||||
});
|
||||
|
||||
toast(this.props.toastLanguage.reset);
|
||||
}
|
||||
|
||||
changeDate(data) {
|
||||
if (data === 'reset') {
|
||||
return; //soon
|
||||
}
|
||||
if (data === 'reset') {
|
||||
return; //soon
|
||||
}
|
||||
|
||||
localStorage.setItem('birthday', data);
|
||||
|
||||
this.setState({
|
||||
birthday: data
|
||||
});
|
||||
localStorage.setItem('birthday', data);
|
||||
|
||||
this.setState({
|
||||
birthday: data
|
||||
});
|
||||
}
|
||||
|
||||
componentDidUpdate() {
|
||||
|
@ -58,4 +58,4 @@ export default class GreetingSettings extends React.PureComponent {
|
|||
</div>
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -12,15 +12,15 @@ export default function LanguageSettings (props) {
|
|||
name='language'
|
||||
id='language'
|
||||
onChange={() => localStorage.setItem('language', document.getElementById('language').value)}>
|
||||
{languages.map(language =>
|
||||
<option className='choices' value={language.code} key={language.code}>{language.text}</option>
|
||||
)}
|
||||
{languages.map(language =>
|
||||
<option className='choices' value={language.code} key={language.code}>{language.text}</option>
|
||||
)}
|
||||
</Dropdown>
|
||||
<h4 htmlFor='quotelanguage' className='nodropdown'>Quote {props.language.language}</h4>
|
||||
<Dropdown label={props.language.language} name='quotelanguage' id='quotelanguage' onChange={() => localStorage.setItem('quotelanguage', document.getElementById('quotelanguage').value)}>
|
||||
<option className='choices' value='English'>English</option>
|
||||
<option className='choices' value='French'>Français</option>
|
||||
<option className='choices' value='English'>English</option>
|
||||
<option className='choices' value='French'>Français</option>
|
||||
</Dropdown>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -13,4 +13,4 @@ export default function QuoteSettings (props) {
|
|||
<Checkbox name='favouriteQuoteEnabled' text={props.language.favourite} />
|
||||
</div>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -11,7 +11,7 @@ export default class SearchSettings extends React.PureComponent {
|
|||
resetSearch() {
|
||||
localStorage.removeItem('customSearchEngine');
|
||||
document.getElementById('customSearchEngine').value = '';
|
||||
|
||||
|
||||
toast(this.props.toastLanguage.reset);
|
||||
}
|
||||
|
||||
|
@ -23,7 +23,7 @@ export default class SearchSettings extends React.PureComponent {
|
|||
|
||||
input.style.display = 'block';
|
||||
input.enabled = 'true';
|
||||
|
||||
|
||||
document.getElementById('customSearchEngine').value = localStorage.getItem('customSearchEngine');
|
||||
} else {
|
||||
localStorage.removeItem('customSearchEngine');
|
||||
|
@ -36,8 +36,8 @@ export default class SearchSettings extends React.PureComponent {
|
|||
if (document.getElementById('searchEngineInput').enabled === 'true') {
|
||||
const input = document.getElementById('customSearchEngine').value;
|
||||
if (input) {
|
||||
localStorage.setItem('searchEngine', 'custom');
|
||||
localStorage.setItem('customSearchEngine', input);
|
||||
localStorage.setItem('searchEngine', 'custom');
|
||||
localStorage.setItem('customSearchEngine', input);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -45,36 +45,36 @@ export default class SearchSettings extends React.PureComponent {
|
|||
setSearchEngine(input) {
|
||||
const searchEngineInput = document.getElementById('searchEngineInput');
|
||||
if (input === 'custom') {
|
||||
searchEngineInput.enabled = 'true';
|
||||
searchEngineInput.style.display = 'block';
|
||||
searchEngineInput.enabled = 'true';
|
||||
searchEngineInput.style.display = 'block';
|
||||
} else {
|
||||
searchEngineInput.style.display = 'none';
|
||||
searchEngineInput.enabled = 'false';
|
||||
localStorage.setItem('searchEngine', input);
|
||||
searchEngineInput.style.display = 'none';
|
||||
searchEngineInput.enabled = 'false';
|
||||
localStorage.setItem('searchEngine', input);
|
||||
}
|
||||
}
|
||||
|
||||
render() {
|
||||
return (
|
||||
<div className='section'>
|
||||
<h2>Search</h2>
|
||||
<Checkbox name='voiceSearch' text={this.props.language.voice_search} />
|
||||
<ul>
|
||||
<Dropdown label={this.props.language.search_engine}
|
||||
name='searchEngine'
|
||||
id='searchEngine'
|
||||
onChange={() => this.setSearchEngine(document.getElementById('searchEngine').value)} >
|
||||
{searchEngines.map((engine) =>
|
||||
<option key={engine.name} className='choices' value={engine.settingsName}>{engine.name}</option>
|
||||
)}
|
||||
<option className='choices' value='custom'>Custom</option>
|
||||
</Dropdown>
|
||||
</ul>
|
||||
<ul id='searchEngineInput' style={{ display: 'none' }}>
|
||||
<p style={{ 'marginTop': '0px' }}>{this.props.language.custom} <span className='modalLink' onClick={() => this.resetSearch()}>{this.props.language.reset}</span></p>
|
||||
<input type='text' id='customSearchEngine'></input>
|
||||
</ul>
|
||||
</div>
|
||||
<div className='section'>
|
||||
<h2>Search</h2>
|
||||
<Checkbox name='voiceSearch' text={this.props.language.voice_search} />
|
||||
<ul>
|
||||
<Dropdown label={this.props.language.search_engine}
|
||||
name='searchEngine'
|
||||
id='searchEngine'
|
||||
onChange={() => this.setSearchEngine(document.getElementById('searchEngine').value)} >
|
||||
{searchEngines.map((engine) =>
|
||||
<option key={engine.name} className='choices' value={engine.settingsName}>{engine.name}</option>
|
||||
)}
|
||||
<option className='choices' value='custom'>Custom</option>
|
||||
</Dropdown>
|
||||
</ul>
|
||||
<ul id='searchEngineInput' style={{ display: 'none' }}>
|
||||
<p style={{ 'marginTop': '0px' }}>{this.props.language.custom} <span className='modalLink' onClick={() => this.resetSearch()}>{this.props.language.reset}</span></p>
|
||||
<input type='text' id='customSearchEngine'></input>
|
||||
</ul>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -24,4 +24,4 @@ export default function TimeSettings (props) {
|
|||
</Dropdown>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -5,16 +5,16 @@ import Added from '../marketplace/sections/Added';
|
|||
import AddonsTabs from './backend/Tabs';
|
||||
|
||||
export default function Addons (props) {
|
||||
return (
|
||||
<React.Fragment>
|
||||
<AddonsTabs>
|
||||
<div label='Added'>
|
||||
<Added/>
|
||||
</div>
|
||||
<div label=''>
|
||||
|
||||
</div>
|
||||
</AddonsTabs>
|
||||
</React.Fragment>
|
||||
);
|
||||
}
|
||||
return (
|
||||
<React.Fragment>
|
||||
<AddonsTabs>
|
||||
<div label='Added'>
|
||||
<Added/>
|
||||
</div>
|
||||
<div label=''>
|
||||
|
||||
</div>
|
||||
</AddonsTabs>
|
||||
</React.Fragment>
|
||||
);
|
||||
}
|
||||
|
|
|
@ -4,16 +4,16 @@ import MarketplaceBackend from '../marketplace/sections/Marketplace';
|
|||
import MarketplaceTabs from './backend/Tabs';
|
||||
|
||||
export default function Marketplace (props) {
|
||||
return (
|
||||
<React.Fragment>
|
||||
<MarketplaceTabs>
|
||||
<div label='Photo Packs'>
|
||||
<MarketplaceBackend type='photo_packs'/>
|
||||
</div>
|
||||
<div label='Quote Packs'>
|
||||
<MarketplaceBackend type='quote_packs'/>
|
||||
</div>
|
||||
</MarketplaceTabs>
|
||||
</React.Fragment>
|
||||
);
|
||||
}
|
||||
return (
|
||||
<React.Fragment>
|
||||
<MarketplaceTabs>
|
||||
<div label='Photo Packs'>
|
||||
<MarketplaceBackend type='photo_packs'/>
|
||||
</div>
|
||||
<div label='Quote Packs'>
|
||||
<MarketplaceBackend type='quote_packs'/>
|
||||
</div>
|
||||
</MarketplaceTabs>
|
||||
</React.Fragment>
|
||||
);
|
||||
}
|
||||
|
|
|
@ -13,43 +13,43 @@ import Advanced from '../settings/sections/Advanced';
|
|||
import SettingsTabs from './backend/Tabs';
|
||||
|
||||
export default function Settings (props) {
|
||||
return (
|
||||
<React.Fragment>
|
||||
<SettingsTabs>
|
||||
<div label={props.language.sections.time.title}>
|
||||
<Time language={props.language.sections.time}/>
|
||||
</div>
|
||||
<div label={props.language.sections.quote.title}>
|
||||
<Quote language={props.language.sections.quote}/>
|
||||
</div>
|
||||
<div label={props.language.sections.greeting.title}>
|
||||
<Greeting language={props.language.sections.greeting} toastLanguage={props.language.toasts} />
|
||||
</div>
|
||||
<div label={props.language.sections.background.title}>
|
||||
<Background language={props.language.sections.background} toastLanguage={props.toastLanguage}/>
|
||||
</div>
|
||||
<div label={props.language.sections.search.title}>
|
||||
<Search language={props.language.sections.search}/>
|
||||
</div>
|
||||
<div label={props.language.sections.appearance}>
|
||||
<Appearance language={props.language.sections.appearance} toastLanguage={props.toastLanguage}/>
|
||||
</div>
|
||||
<div label={props.language.sections.language}>
|
||||
<Language language={props.language}/>
|
||||
</div>
|
||||
<div label='Advanced'>
|
||||
<Advanced/>
|
||||
</div>
|
||||
<div label='Experimental'>
|
||||
return (
|
||||
<React.Fragment>
|
||||
<SettingsTabs>
|
||||
<div label={props.language.sections.time.title}>
|
||||
<Time language={props.language.sections.time}/>
|
||||
</div>
|
||||
<div label={props.language.sections.quote.title}>
|
||||
<Quote language={props.language.sections.quote}/>
|
||||
</div>
|
||||
<div label={props.language.sections.greeting.title}>
|
||||
<Greeting language={props.language.sections.greeting} toastLanguage={props.language.toasts} />
|
||||
</div>
|
||||
<div label={props.language.sections.background.title}>
|
||||
<Background language={props.language.sections.background} toastLanguage={props.toastLanguage}/>
|
||||
</div>
|
||||
<div label={props.language.sections.search.title}>
|
||||
<Search language={props.language.sections.search}/>
|
||||
</div>
|
||||
<div label={props.language.sections.appearance}>
|
||||
<Appearance language={props.language.sections.appearance} toastLanguage={props.toastLanguage}/>
|
||||
</div>
|
||||
<div label={props.language.sections.language}>
|
||||
<Language language={props.language}/>
|
||||
</div>
|
||||
<div label='Advanced'>
|
||||
<Advanced/>
|
||||
</div>
|
||||
<div label='Experimental'>
|
||||
|
||||
</div>
|
||||
<div label={props.language.sections.changelog}>
|
||||
<About/>
|
||||
</div>
|
||||
<div label={props.language.sections.about.title}>
|
||||
<About/>
|
||||
</div>
|
||||
</SettingsTabs>
|
||||
</React.Fragment>
|
||||
);
|
||||
}
|
||||
</div>
|
||||
<div label={props.language.sections.changelog}>
|
||||
<About/>
|
||||
</div>
|
||||
<div label={props.language.sections.about.title}>
|
||||
<About/>
|
||||
</div>
|
||||
</SettingsTabs>
|
||||
</React.Fragment>
|
||||
);
|
||||
}
|
||||
|
|
|
@ -23,69 +23,69 @@ import Plugins from '@material-ui/icons/Widgets';
|
|||
import Added from '@material-ui/icons/AddCircle';
|
||||
|
||||
export default class Tab extends React.PureComponent {
|
||||
onClick = () => {
|
||||
this.props.onClick(this.props.label);
|
||||
};
|
||||
onClick = () => {
|
||||
this.props.onClick(this.props.label);
|
||||
};
|
||||
|
||||
render() {
|
||||
let className = 'tab-list-item';
|
||||
if (this.props.currentTab === this.props.label) {
|
||||
className += ' tab-list-active';
|
||||
}
|
||||
render() {
|
||||
let className = 'tab-list-item';
|
||||
if (this.props.currentTab === this.props.label) {
|
||||
className += ' tab-list-active';
|
||||
}
|
||||
|
||||
if (this.props.navbar === true) {
|
||||
className = 'navbar-item';
|
||||
if (this.props.currentTab === this.props.label) {
|
||||
className += ' navbar-item-active';
|
||||
}
|
||||
}
|
||||
if (this.props.navbar === true) {
|
||||
className = 'navbar-item';
|
||||
if (this.props.currentTab === this.props.label) {
|
||||
className += ' navbar-item-active';
|
||||
}
|
||||
}
|
||||
|
||||
let icon, divider;
|
||||
switch (this.props.label) {
|
||||
// Navbar
|
||||
case 'Settings': icon = <Settings/>; break;
|
||||
case 'My Add-ons': icon = <Addons/>; break;
|
||||
case 'Marketplace': icon = <Marketplace/>; break;
|
||||
let icon, divider;
|
||||
switch (this.props.label) {
|
||||
// Navbar
|
||||
case 'Settings': icon = <Settings/>; break;
|
||||
case 'My Add-ons': icon = <Addons/>; break;
|
||||
case 'Marketplace': icon = <Marketplace/>; break;
|
||||
|
||||
// Settings
|
||||
case 'Time': icon = <Time/>; break;
|
||||
case 'Greeting': icon = <Greeting/>; break;
|
||||
case 'Quote': icon = <Quote/>; break;
|
||||
case 'Background': icon = <Background/>; break;
|
||||
case 'Search': icon = <Search/>; break;
|
||||
case 'Appearance': icon = <Appearance/>; break;
|
||||
case 'Language':
|
||||
icon = <Language/>;
|
||||
divider = <div><hr/></div>;
|
||||
break;
|
||||
case 'Advanced': icon = <Settings/>; break;
|
||||
case 'Experimental':
|
||||
icon = <Experimental/>;
|
||||
divider = <div><hr/></div>;
|
||||
break;
|
||||
case 'Change Log': icon = <Changelog/>; break;
|
||||
case 'About': icon = <About/>; break;
|
||||
// Settings
|
||||
case 'Time': icon = <Time/>; break;
|
||||
case 'Greeting': icon = <Greeting/>; break;
|
||||
case 'Quote': icon = <Quote/>; break;
|
||||
case 'Background': icon = <Background/>; break;
|
||||
case 'Search': icon = <Search/>; break;
|
||||
case 'Appearance': icon = <Appearance/>; break;
|
||||
case 'Language':
|
||||
icon = <Language/>;
|
||||
divider = <div><hr/></div>;
|
||||
break;
|
||||
case 'Advanced': icon = <Settings/>; break;
|
||||
case 'Experimental':
|
||||
icon = <Experimental/>;
|
||||
divider = <div><hr/></div>;
|
||||
break;
|
||||
case 'Change Log': icon = <Changelog/>; break;
|
||||
case 'About': icon = <About/>; break;
|
||||
|
||||
// Store
|
||||
case 'Themes': icon = <Colors/>; break;
|
||||
case 'Photo Packs': icon = <Background/>; break;
|
||||
case 'Quote Packs': icon = <Quote/>; break;
|
||||
case 'Plugins':
|
||||
icon = <Plugins/>;
|
||||
divider = <div><hr/></div>;
|
||||
break;
|
||||
case 'Added': icon = <Added/>; break;
|
||||
|
||||
default: break;
|
||||
}
|
||||
// Store
|
||||
case 'Themes': icon = <Colors/>; break;
|
||||
case 'Photo Packs': icon = <Background/>; break;
|
||||
case 'Quote Packs': icon = <Quote/>; break;
|
||||
case 'Plugins':
|
||||
icon = <Plugins/>;
|
||||
divider = <div><hr/></div>;
|
||||
break;
|
||||
case 'Added': icon = <Added/>; break;
|
||||
|
||||
return (
|
||||
<React.Fragment>
|
||||
<li className={className} onClick={this.onClick}>
|
||||
{icon} <span>{this.props.label}</span>
|
||||
</li>
|
||||
{divider}
|
||||
</React.Fragment>
|
||||
)
|
||||
}
|
||||
}
|
||||
default: break;
|
||||
}
|
||||
|
||||
return (
|
||||
<React.Fragment>
|
||||
<li className={className} onClick={this.onClick}>
|
||||
{icon} <span>{this.props.label}</span>
|
||||
</li>
|
||||
{divider}
|
||||
</React.Fragment>
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -54,4 +54,4 @@ export default class Tabs extends React.PureComponent {
|
|||
</span>
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -9,7 +9,7 @@ import Favourite from './background/Favourite';
|
|||
import Date from './time/Date';
|
||||
|
||||
export default class Widgets extends React.PureComponent {
|
||||
enabled(key) {
|
||||
enabled(key) {
|
||||
const stringValue = localStorage.getItem(key);
|
||||
let enabled = true;
|
||||
|
||||
|
@ -18,7 +18,7 @@ export default class Widgets extends React.PureComponent {
|
|||
enabled = true;
|
||||
}
|
||||
|
||||
if (stringValue === 'false') {
|
||||
if (stringValue === 'false') {
|
||||
enabled = false;
|
||||
}
|
||||
}
|
||||
|
@ -32,13 +32,13 @@ export default class Widgets extends React.PureComponent {
|
|||
|
||||
return (
|
||||
<React.Fragment>
|
||||
{enabled('searchBar') ? <Search language={language.widgets.search} /> : null}
|
||||
{enabled('greeting') ? <Greeting language={language.widgets.greeting} /> : null}
|
||||
{enabled('time') ? <Clock/> : null}
|
||||
{enabled('date') ? <Date/> : null}
|
||||
{enabled('quote') ? <Quote language={language.toasts} languagecode={languagecode} /> : null}
|
||||
{enabled('view') ? <Maximise/> : null}
|
||||
{enabled('favouriteEnabled') ? <Favourite/> : null}
|
||||
{enabled('searchBar') ? <Search language={language.widgets.search} /> : null}
|
||||
{enabled('greeting') ? <Greeting language={language.widgets.greeting} /> : null}
|
||||
{enabled('time') ? <Clock/> : null}
|
||||
{enabled('date') ? <Date/> : null}
|
||||
{enabled('quote') ? <Quote language={language.toasts} languagecode={languagecode} /> : null}
|
||||
{enabled('view') ? <Maximise/> : null}
|
||||
{enabled('favouriteEnabled') ? <Favourite/> : null}
|
||||
</React.Fragment>
|
||||
);
|
||||
}
|
||||
|
|
|
@ -28,7 +28,7 @@ export default class Background extends React.PureComponent {
|
|||
localStorage.setItem('customBackgroundColour', JSON.stringify(gradientSettings));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
const background = typeof gradientSettings === 'object' && gradientSettings !== null ? this.gradientStyleBuilder(gradientSettings) : `background-image: url(${url})`;
|
||||
|
||||
// Brightness
|
||||
|
@ -83,7 +83,7 @@ export default class Background extends React.PureComponent {
|
|||
|
||||
const customBackgroundColour = localStorage.getItem('customBackgroundColour');
|
||||
const customBackground = localStorage.getItem('customBackground');
|
||||
|
||||
|
||||
const favourited = JSON.parse(localStorage.getItem('favourite'));
|
||||
|
||||
if (favourited) {
|
||||
|
@ -110,7 +110,7 @@ export default class Background extends React.PureComponent {
|
|||
if (customBackground.includes('.mp4') || customBackground.includes('.webm') || customBackground.includes('.ogg')) {
|
||||
document.getElementById('backgroundImage').innerHTML = `
|
||||
<video autoplay muted loop id='backgroundVideo'>
|
||||
<source src='${customBackground}'/>
|
||||
<source src='${customBackground}'/>
|
||||
</video>`;
|
||||
} else {
|
||||
this.setBackground(customBackground, null, 'false'); // Local
|
||||
|
@ -119,12 +119,12 @@ export default class Background extends React.PureComponent {
|
|||
if (offlineMode === 'true') {
|
||||
return this.doOffline();
|
||||
}
|
||||
|
||||
|
||||
try { // First we try and get an image from the API...
|
||||
let requestURL;
|
||||
|
||||
switch (localStorage.getItem('backgroundAPI')) {
|
||||
case 'unsplash':
|
||||
case 'unsplash':
|
||||
requestURL = `${Constants.UNSPLASH_URL}/getImage`;
|
||||
break;
|
||||
default: // Defaults to Mue
|
||||
|
@ -151,7 +151,7 @@ export default class Background extends React.PureComponent {
|
|||
if (data.location.replace(/[null]+/g, '') === ' ') {
|
||||
return document.querySelector('#backgroundCredits').style.display = 'none';
|
||||
}
|
||||
|
||||
|
||||
document.getElementById('location').innerText = `${data.location.replace('null', '')}`; // Set the location tooltip
|
||||
} catch (e) { // ..and if that fails we load one locally
|
||||
this.doOffline();
|
||||
|
@ -171,7 +171,7 @@ export default class Background extends React.PureComponent {
|
|||
if (localStorage.getItem('animations') === 'true') {
|
||||
document.querySelector('#backgroundImage').classList.add('fade-in');
|
||||
}
|
||||
|
||||
|
||||
this.determineMode();
|
||||
}
|
||||
|
||||
|
|
|
@ -4,36 +4,36 @@ import StarIcon from '@material-ui/icons/Star';
|
|||
import StarIcon2 from '@material-ui/icons/StarBorder';
|
||||
|
||||
export default class Favourite extends React.PureComponent {
|
||||
constructor(...args) {
|
||||
super(...args);
|
||||
this.state = {
|
||||
favourited: <StarIcon2 onClick={() => this.favourite()} />
|
||||
};
|
||||
}
|
||||
constructor(...args) {
|
||||
super(...args);
|
||||
this.state = {
|
||||
favourited: <StarIcon2 onClick={() => this.favourite()} />
|
||||
};
|
||||
}
|
||||
|
||||
favourite() {
|
||||
if (localStorage.getItem('favourite')) {
|
||||
localStorage.removeItem('favourite');
|
||||
this.setState({
|
||||
favourited: <StarIcon2 onClick={() => this.favourite()} />
|
||||
});
|
||||
} else {
|
||||
const url = document.getElementById('backgroundImage').style.backgroundImage.replace('url("', '').replace('")', '');
|
||||
const credit = document.getElementById('credit').textContent;
|
||||
const location = document.getElementById('location').textContent;
|
||||
|
||||
localStorage.setItem('favourite', JSON.stringify({ url: url, credit: credit, location: location }));
|
||||
|
||||
this.setState({
|
||||
favourited: <StarIcon onClick={() => this.favourite()} />
|
||||
});
|
||||
}
|
||||
if (localStorage.getItem('favourite')) {
|
||||
localStorage.removeItem('favourite');
|
||||
this.setState({
|
||||
favourited: <StarIcon2 onClick={() => this.favourite()} />
|
||||
});
|
||||
} else {
|
||||
const url = document.getElementById('backgroundImage').style.backgroundImage.replace('url("', '').replace('")', '');
|
||||
const credit = document.getElementById('credit').textContent;
|
||||
const location = document.getElementById('location').textContent;
|
||||
|
||||
localStorage.setItem('favourite', JSON.stringify({ url: url, credit: credit, location: location }));
|
||||
|
||||
this.setState({
|
||||
favourited: <StarIcon onClick={() => this.favourite()} />
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
componentDidMount() {
|
||||
if (localStorage.getItem('favourite')) {
|
||||
this.setState({
|
||||
favourited: <StarIcon onClick={() => this.favourite()} />
|
||||
this.setState({
|
||||
favourited: <StarIcon onClick={() => this.favourite()} />
|
||||
});
|
||||
}
|
||||
}
|
||||
|
@ -42,9 +42,9 @@ export default class Favourite extends React.PureComponent {
|
|||
if (localStorage.getItem('favouriteEnabled') === 'false' || localStorage.getItem('background') === 'false' || localStorage.getItem('customBackgroundColour') || localStorage.getItem('customBackground')) {
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
return <div className='favourite'>
|
||||
{this.state.favourited}
|
||||
{this.state.favourited}
|
||||
</div>
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -3,53 +3,53 @@ import React from 'react';
|
|||
import FullscreenIcon from '@material-ui/icons/Fullscreen';
|
||||
|
||||
export default class View extends React.PureComponent {
|
||||
constructor(...args) {
|
||||
super(...args);
|
||||
this.state = {
|
||||
hidden: false
|
||||
};
|
||||
}
|
||||
|
||||
setAttribute(blur, brightness) {
|
||||
document.querySelector('#backgroundImage').setAttribute(
|
||||
'style',
|
||||
`background-image: url(${document.getElementById('backgroundImage').style.backgroundImage.replace('url("', '').replace('")', '')}); -webkit-filter: blur(${blur}); -webkit-filter: brightness(${brightness}%);`
|
||||
);
|
||||
}
|
||||
|
||||
viewStuff() {
|
||||
const elements = ['#searchBar', '.navbar-container', '.clock', '.greeting', '.quotediv', 'time']; // elements to hide
|
||||
|
||||
elements.forEach((element) => {
|
||||
try {
|
||||
(this.state.hidden === false) ? document.querySelector(element).style.display = 'none' : document.querySelector(element).style.display = 'block';
|
||||
} catch (e) {
|
||||
return;
|
||||
}
|
||||
});
|
||||
|
||||
if (this.state.hidden === false) {
|
||||
this.setState({
|
||||
hidden: true
|
||||
});
|
||||
|
||||
this.setAttribute(0, 100);
|
||||
} else {
|
||||
this.setState({
|
||||
hidden: false
|
||||
});
|
||||
|
||||
this.setAttribute(localStorage.getItem('blur'), localStorage.getItem('brightness'));
|
||||
}
|
||||
constructor(...args) {
|
||||
super(...args);
|
||||
this.state = {
|
||||
hidden: false
|
||||
};
|
||||
}
|
||||
|
||||
render() {
|
||||
if (localStorage.getItem('background') === 'false') {
|
||||
return null;
|
||||
setAttribute(blur, brightness) {
|
||||
document.querySelector('#backgroundImage').setAttribute(
|
||||
'style',
|
||||
`background-image: url(${document.getElementById('backgroundImage').style.backgroundImage.replace('url("', '').replace('")', '')}); -webkit-filter: blur(${blur}); -webkit-filter: brightness(${brightness}%);`
|
||||
);
|
||||
}
|
||||
|
||||
viewStuff() {
|
||||
const elements = ['#searchBar', '.navbar-container', '.clock', '.greeting', '.quotediv', 'time']; // elements to hide
|
||||
|
||||
elements.forEach((element) => {
|
||||
try {
|
||||
(this.state.hidden === false) ? document.querySelector(element).style.display = 'none' : document.querySelector(element).style.display = 'block';
|
||||
} catch (e) {
|
||||
return;
|
||||
}
|
||||
|
||||
return <div className='view'>
|
||||
<FullscreenIcon onClick={() => this.viewStuff()} />
|
||||
</div>
|
||||
});
|
||||
|
||||
if (this.state.hidden === false) {
|
||||
this.setState({
|
||||
hidden: true
|
||||
});
|
||||
|
||||
this.setAttribute(0, 100);
|
||||
} else {
|
||||
this.setState({
|
||||
hidden: false
|
||||
});
|
||||
|
||||
this.setAttribute(localStorage.getItem('blur'), localStorage.getItem('brightness'));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
render() {
|
||||
if (localStorage.getItem('background') === 'false') {
|
||||
return null;
|
||||
}
|
||||
|
||||
return <div className='view'>
|
||||
<FullscreenIcon onClick={() => this.viewStuff()} />
|
||||
</div>
|
||||
}
|
||||
}
|
||||
|
|
|
@ -26,4 +26,4 @@ export default function PhotoInformation(props) {
|
|||
<span id='credit' style={{ 'display': 'none' }}></span>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,20 +1,20 @@
|
|||
{
|
||||
"Tirachard Kumtanom": {
|
||||
"photo": [1]
|
||||
},
|
||||
"Sohail Na": {
|
||||
"photo": [4]
|
||||
},
|
||||
"Miriam Espacio": {
|
||||
"photo": [7]
|
||||
},
|
||||
"Fabian Wiktor": {
|
||||
"photo": [20]
|
||||
},
|
||||
"Pixabay": {
|
||||
"photo": [2, 3, 9, 11, 13, 14, 15]
|
||||
},
|
||||
"Unknown": {
|
||||
"photo": [5, 6, 8, 10, 12, 16, 17, 18, 19]
|
||||
}
|
||||
}
|
||||
"Tirachard Kumtanom": {
|
||||
"photo": [1]
|
||||
},
|
||||
"Sohail Na": {
|
||||
"photo": [4]
|
||||
},
|
||||
"Miriam Espacio": {
|
||||
"photo": [7]
|
||||
},
|
||||
"Fabian Wiktor": {
|
||||
"photo": [20]
|
||||
},
|
||||
"Pixabay": {
|
||||
"photo": [2, 3, 9, 11, 13, 14, 15]
|
||||
},
|
||||
"Unknown": {
|
||||
"photo": [5, 6, 8, 10, 12, 16, 17, 18, 19]
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,78 +1,78 @@
|
|||
.photoInformation {
|
||||
position: absolute;
|
||||
bottom: 1rem;
|
||||
left: 1rem;
|
||||
font-size: calc(10px + 0.1vmin) !important;
|
||||
text-shadow: 0 0 10px rgba(0, 0, 0, 0.3);
|
||||
position: absolute;
|
||||
bottom: 1rem;
|
||||
left: 1rem;
|
||||
font-size: calc(10px + 0.1vmin) !important;
|
||||
text-shadow: 0 0 10px rgba(0, 0, 0, 0.3);
|
||||
|
||||
svg {
|
||||
float: left;
|
||||
margin-right: 1rem;
|
||||
font-size: calc(10px + 2vmin);
|
||||
cursor: pointer;
|
||||
}
|
||||
svg {
|
||||
float: left;
|
||||
margin-right: 1rem;
|
||||
font-size: calc(10px + 2vmin);
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
svg,
|
||||
h1 {
|
||||
display: inline;
|
||||
}
|
||||
svg,
|
||||
h1 {
|
||||
display: inline;
|
||||
}
|
||||
|
||||
svg:hover+.infoCard {
|
||||
display: block;
|
||||
}
|
||||
svg:hover+.infoCard {
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
|
||||
.infoCard {
|
||||
display: none;
|
||||
background: #fff;
|
||||
box-shadow: 0 0 10px rgba(0, 0, 0, 0.3);
|
||||
color: #000;
|
||||
position: fixed;
|
||||
bottom: 3.25rem;
|
||||
left: 0.7em;
|
||||
padding: 1rem;
|
||||
border-radius: 24px 24px 24px 0;
|
||||
max-width: 500px;
|
||||
text-align: left;
|
||||
text-shadow: none;
|
||||
display: none;
|
||||
background: #fff;
|
||||
box-shadow: 0 0 10px rgba(0, 0, 0, 0.3);
|
||||
color: #000;
|
||||
position: fixed;
|
||||
bottom: 3.25rem;
|
||||
left: 0.7em;
|
||||
padding: 1rem;
|
||||
border-radius: 24px 24px 24px 0;
|
||||
max-width: 500px;
|
||||
text-align: left;
|
||||
text-shadow: none;
|
||||
|
||||
span {
|
||||
display: block;
|
||||
}
|
||||
span {
|
||||
display: block;
|
||||
}
|
||||
|
||||
svg {
|
||||
margin-right: 0.5rem;
|
||||
vertical-align: middle;
|
||||
display: inline-flex;
|
||||
padding: 2px;
|
||||
}
|
||||
svg {
|
||||
margin-right: 0.5rem;
|
||||
vertical-align: middle;
|
||||
display: inline-flex;
|
||||
padding: 2px;
|
||||
}
|
||||
|
||||
span,
|
||||
svg {
|
||||
font-size: 2em;
|
||||
}
|
||||
span,
|
||||
svg {
|
||||
font-size: 2em;
|
||||
}
|
||||
|
||||
h1,
|
||||
.infoIcon {
|
||||
font-size: 3em;
|
||||
}
|
||||
h1,
|
||||
.infoIcon {
|
||||
font-size: 3em;
|
||||
}
|
||||
|
||||
.infoIcon {
|
||||
padding: 4px;
|
||||
}
|
||||
.infoIcon {
|
||||
padding: 4px;
|
||||
}
|
||||
|
||||
hr {
|
||||
height: 3px;
|
||||
background: #2d3436;
|
||||
outline: none;
|
||||
border: none;
|
||||
}
|
||||
hr {
|
||||
height: 3px;
|
||||
background: #2d3436;
|
||||
outline: none;
|
||||
border: none;
|
||||
}
|
||||
|
||||
&:hover {
|
||||
display: block !important;
|
||||
}
|
||||
&:hover {
|
||||
display: block !important;
|
||||
}
|
||||
}
|
||||
|
||||
.dark hr {
|
||||
background-color: white !important;
|
||||
}
|
||||
background-color: white !important;
|
||||
}
|
||||
|
|
|
@ -2,63 +2,63 @@
|
|||
@import '../../../../scss/mixins';
|
||||
|
||||
#backgroundImage {
|
||||
height: 100vh;
|
||||
background-size: cover;
|
||||
background-repeat: no-repeat;
|
||||
background-position: center;
|
||||
background-attachment: fixed;
|
||||
height: 100vh;
|
||||
background-size: cover;
|
||||
background-repeat: no-repeat;
|
||||
background-position: center;
|
||||
background-attachment: fixed;
|
||||
}
|
||||
|
||||
#backgroundVideo {
|
||||
position: fixed;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
min-width: 100%;
|
||||
min-height: 100%;
|
||||
position: fixed;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
min-width: 100%;
|
||||
min-height: 100%;
|
||||
}
|
||||
|
||||
.fade-in {
|
||||
@include animation('fadein 2s');
|
||||
@include animation('fadein 2s');
|
||||
}
|
||||
|
||||
@include keyframes(fadein) {
|
||||
from {
|
||||
opacity: 0;
|
||||
}
|
||||
from {
|
||||
opacity: 0;
|
||||
}
|
||||
|
||||
to {
|
||||
opacity: 1;
|
||||
}
|
||||
to {
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
|
||||
.backgroundEffects {
|
||||
opacity: 0.7;
|
||||
transition: ease 0.6s;
|
||||
opacity: 0.7;
|
||||
transition: ease 0.6s;
|
||||
}
|
||||
|
||||
.creditlink {
|
||||
text-decoration: none;
|
||||
color: white;
|
||||
text-decoration: none;
|
||||
color: white;
|
||||
}
|
||||
|
||||
.view {
|
||||
right: 25px;
|
||||
right: 25px;
|
||||
}
|
||||
|
||||
.favourite {
|
||||
right: 50px;
|
||||
padding-right: 5px;
|
||||
right: 50px;
|
||||
padding-right: 5px;
|
||||
}
|
||||
|
||||
.view,
|
||||
.favourite {
|
||||
bottom: 10px;
|
||||
position: absolute;
|
||||
transition: all 0.5s ease 0s;
|
||||
width: auto;
|
||||
cursor: pointer;
|
||||
bottom: 10px;
|
||||
position: absolute;
|
||||
transition: all 0.5s ease 0s;
|
||||
width: auto;
|
||||
cursor: pointer;
|
||||
|
||||
&:hover {
|
||||
transform: scale(1.1);
|
||||
}
|
||||
}
|
||||
&:hover {
|
||||
transform: scale(1.1);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -70,8 +70,8 @@ export default class Greeting extends React.PureComponent {
|
|||
}
|
||||
|
||||
// Set the state to the greeting string
|
||||
this.setState({
|
||||
greeting: `${message}${name}`
|
||||
this.setState({
|
||||
greeting: `${message}${name}`
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
.greeting {
|
||||
margin: 0;
|
||||
font-size: 1.6em;
|
||||
}
|
||||
margin: 0;
|
||||
font-size: 1.6em;
|
||||
}
|
||||
|
|
|
@ -33,7 +33,7 @@ export default class Navbar extends React.PureComponent {
|
|||
<Report className='topicons' onClick={() => this.props.openModal('feedbackModal')} />
|
||||
</Tooltip>
|
||||
);
|
||||
|
||||
|
||||
if (Constants.BETA_VERSION === false) {
|
||||
feedbackHTML = null;
|
||||
}
|
||||
|
|
|
@ -7,52 +7,52 @@ import NotesIcon from '@material-ui/icons/AssignmentRounded';
|
|||
import Pin from './Pin';
|
||||
|
||||
export default class Notes extends React.PureComponent {
|
||||
constructor(...args) {
|
||||
super(...args);
|
||||
this.state = {
|
||||
notes: localStorage.getItem('notes') || ''
|
||||
};
|
||||
}
|
||||
|
||||
setNotes = (e) => {
|
||||
localStorage.setItem('notes', e.target.value);
|
||||
this.setState({
|
||||
notes: e.target.value
|
||||
});
|
||||
constructor(...args) {
|
||||
super(...args);
|
||||
this.state = {
|
||||
notes: localStorage.getItem('notes') || ''
|
||||
};
|
||||
}
|
||||
|
||||
pin() {
|
||||
document.getElementById('noteContainer').classList.toggle('visibilityshow');
|
||||
setNotes = (e) => {
|
||||
localStorage.setItem('notes', e.target.value);
|
||||
this.setState({
|
||||
notes: e.target.value
|
||||
});
|
||||
};
|
||||
|
||||
if (localStorage.getItem('notesPinned') === 'true') {
|
||||
localStorage.setItem('notesPinned', false);
|
||||
} else {
|
||||
localStorage.setItem('notesPinned', true);
|
||||
}
|
||||
pin() {
|
||||
document.getElementById('noteContainer').classList.toggle('visibilityshow');
|
||||
|
||||
if (localStorage.getItem('notesPinned') === 'true') {
|
||||
localStorage.setItem('notesPinned', false);
|
||||
} else {
|
||||
localStorage.setItem('notesPinned', true);
|
||||
}
|
||||
}
|
||||
|
||||
componentDidMount() {
|
||||
if (localStorage.getItem('notesPinned') === 'true') {
|
||||
document.getElementById('noteContainer').classList.toggle('visibilityshow');
|
||||
}
|
||||
}
|
||||
|
||||
render() {
|
||||
let classList = 'notescontainer';
|
||||
if (localStorage.getItem('darkTheme') === 'true') {
|
||||
classList += ' dark';
|
||||
}
|
||||
|
||||
componentDidMount() {
|
||||
if (localStorage.getItem('notesPinned') === 'true') {
|
||||
document.getElementById('noteContainer').classList.toggle('visibilityshow');
|
||||
}
|
||||
}
|
||||
|
||||
render() {
|
||||
let classList = 'notescontainer';
|
||||
if (localStorage.getItem('darkTheme') === 'true') {
|
||||
classList += ' dark';
|
||||
}
|
||||
|
||||
return (
|
||||
<span id='noteContainer' className={classList}>
|
||||
<div className='topbarnotes'>
|
||||
<NotesIcon/>
|
||||
<h3>{this.props.language.title}</h3>
|
||||
</div>
|
||||
<TextareaAutosize rowsMax={50} placeholder={this.props.language.placeholder} value={this.state.notes} onChange={this.setNotes}/>
|
||||
<button onClick={this.pin} className='pinNote'><Pin/></button>
|
||||
<button onClick={() => navigator.clipboard.writeText(this.state.notes)} className='saveNote'><CopyIcon/></button>
|
||||
</span>
|
||||
);
|
||||
}
|
||||
return (
|
||||
<span id='noteContainer' className={classList}>
|
||||
<div className='topbarnotes'>
|
||||
<NotesIcon/>
|
||||
<h3>{this.props.language.title}</h3>
|
||||
</div>
|
||||
<TextareaAutosize rowsMax={50} placeholder={this.props.language.placeholder} value={this.state.notes} onChange={this.setNotes}/>
|
||||
<button onClick={this.pin} className='pinNote'><Pin/></button>
|
||||
<button onClick={() => navigator.clipboard.writeText(this.state.notes)} className='saveNote'><CopyIcon/></button>
|
||||
</span>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -17,10 +17,10 @@
|
|||
import React from 'react';
|
||||
|
||||
export default function Pin() {
|
||||
return (
|
||||
<svg xmlns='http://www.w3.org/2000/svg' enableBackground='new 0 0 24 24' viewBox='0 0 24 24' fill='black' width='18px' height='18px'>
|
||||
<g><rect fill='none' height='24' width='24'/></g>
|
||||
<g><path d='M16,9V4l1,0c0.55,0,1-0.45,1-1v0c0-0.55-0.45-1-1-1H7C6.45,2,6,2.45,6,3v0 c0,0.55,0.45,1,1,1l1,0v5c0,1.66-1.34,3-3,3h0v2h5.97v7l1,1l1-1v-7H19v-2h0C17.34,12,16,10.66,16,9z' fillRule='evenodd'/></g>
|
||||
</svg>
|
||||
);
|
||||
}
|
||||
return (
|
||||
<svg xmlns='http://www.w3.org/2000/svg' enableBackground='new 0 0 24 24' viewBox='0 0 24 24' fill='black' width='18px' height='18px'>
|
||||
<g><rect fill='none' height='24' width='24'/></g>
|
||||
<g><path d='M16,9V4l1,0c0.55,0,1-0.45,1-1v0c0-0.55-0.45-1-1-1H7C6.45,2,6,2.45,6,3v0 c0,0.55,0.45,1,1,1l1,0v5c0,1.66-1.34,3-3,3h0v2h5.97v7l1,1l1-1v-7H19v-2h0C17.34,12,16,10.66,16,9z' fillRule='evenodd'/></g>
|
||||
</svg>
|
||||
);
|
||||
}
|
||||
|
|
|
@ -1,58 +1,58 @@
|
|||
.notes {
|
||||
position: relative;
|
||||
position: relative;
|
||||
|
||||
h3 {
|
||||
text-shadow: none;
|
||||
margin: 0;
|
||||
}
|
||||
h3 {
|
||||
text-shadow: none;
|
||||
margin: 0;
|
||||
}
|
||||
}
|
||||
|
||||
.notescontainer {
|
||||
padding: 15px;
|
||||
visibility: hidden;
|
||||
background-color: #fff;
|
||||
color: #000;
|
||||
text-align: center;
|
||||
border-radius: 12px;
|
||||
position: absolute;
|
||||
top: 80%;
|
||||
margin-left: -150px;
|
||||
padding: 15px;
|
||||
visibility: hidden;
|
||||
background-color: #fff;
|
||||
color: #000;
|
||||
text-align: center;
|
||||
border-radius: 12px;
|
||||
position: absolute;
|
||||
top: 80%;
|
||||
margin-left: -150px;
|
||||
|
||||
svg {
|
||||
float: left;
|
||||
}
|
||||
svg {
|
||||
float: left;
|
||||
}
|
||||
|
||||
::placeholder {
|
||||
color: #636e72;
|
||||
opacity: 1;
|
||||
}
|
||||
::placeholder {
|
||||
color: #636e72;
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
|
||||
.notes:hover .notescontainer {
|
||||
visibility: visible;
|
||||
visibility: visible;
|
||||
}
|
||||
|
||||
textarea {
|
||||
border: none;
|
||||
width: 200px;
|
||||
resize: none;
|
||||
height: 100px;
|
||||
margin: 10px;
|
||||
border: none;
|
||||
width: 200px;
|
||||
resize: none;
|
||||
height: 100px;
|
||||
margin: 10px;
|
||||
}
|
||||
|
||||
.topbarnotes {
|
||||
svg {
|
||||
font-size: 48px;
|
||||
padding: 9px;
|
||||
}
|
||||
svg {
|
||||
font-size: 48px;
|
||||
padding: 9px;
|
||||
}
|
||||
|
||||
h3 {
|
||||
font-size: 48px;
|
||||
margin-right: 20px;
|
||||
}
|
||||
h3 {
|
||||
font-size: 48px;
|
||||
margin-right: 20px;
|
||||
}
|
||||
}
|
||||
|
||||
.dark textarea {
|
||||
background-color: #2f3542;
|
||||
color: white;
|
||||
}
|
||||
background-color: #2f3542;
|
||||
color: white;
|
||||
}
|
||||
|
|
|
@ -2,37 +2,37 @@
|
|||
@import '../../../../scss/variables';
|
||||
|
||||
.navbar-container {
|
||||
position: absolute;
|
||||
top: 1rem;
|
||||
right: 1rem;
|
||||
position: absolute;
|
||||
top: 1rem;
|
||||
right: 1rem;
|
||||
|
||||
div {
|
||||
display: inline;
|
||||
}
|
||||
|
||||
img {
|
||||
height: 1em;
|
||||
width: auto;
|
||||
margin: 0.5rem;
|
||||
}
|
||||
|
||||
svg.topicons {
|
||||
color: map-get($theme-colours, 'main-text-color');
|
||||
-webkit-font-smoothing: subpixel-antialiased;
|
||||
font-size: 1em;
|
||||
margin: 0.5rem;
|
||||
filter: drop-shadow(0 0 6px rgba(0, 0, 0, 0.3));
|
||||
cursor: pointer;
|
||||
transition: .2s ease;
|
||||
|
||||
&:hover {
|
||||
color: map-get($theme-colours, 'main-text-color');
|
||||
transform: translateZ(0);
|
||||
transform: scale(1.3);
|
||||
}
|
||||
div {
|
||||
display: inline;
|
||||
}
|
||||
|
||||
img {
|
||||
height: 1em;
|
||||
width: auto;
|
||||
margin: 0.5rem;
|
||||
}
|
||||
|
||||
svg.topicons {
|
||||
color: map-get($theme-colours, 'main-text-color');
|
||||
-webkit-font-smoothing: subpixel-antialiased;
|
||||
font-size: 1em;
|
||||
margin: 0.5rem;
|
||||
filter: drop-shadow(0 0 6px rgba(0, 0, 0, 0.3));
|
||||
cursor: pointer;
|
||||
transition: .2s ease;
|
||||
|
||||
&:hover {
|
||||
color: map-get($theme-colours, 'main-text-color');
|
||||
transform: translateZ(0);
|
||||
transform: scale(1.3);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.visibilityshow {
|
||||
visibility: visible !important;
|
||||
}
|
||||
visibility: visible !important;
|
||||
}
|
||||
|
|
|
@ -16,11 +16,11 @@ export default class Quote extends React.PureComponent {
|
|||
constructor(...args) {
|
||||
super(...args);
|
||||
this.state = {
|
||||
quote: '',
|
||||
author: '',
|
||||
favourited: <StarIcon2 className='copyButton' onClick={() => this.favourite()} />,
|
||||
tweet: <TwitterIcon className='copyButton' onClick={() => this.tweetQuote()} />,
|
||||
copy: <FileCopy className='copyButton' onClick={() => this.copyQuote()} />
|
||||
quote: '',
|
||||
author: '',
|
||||
favourited: <StarIcon2 className='copyButton' onClick={() => this.favourite()} />,
|
||||
tweet: <TwitterIcon className='copyButton' onClick={() => this.tweetQuote()} />,
|
||||
copy: <FileCopy className='copyButton' onClick={() => this.copyQuote()} />
|
||||
};
|
||||
}
|
||||
|
||||
|
@ -40,7 +40,7 @@ export default class Quote extends React.PureComponent {
|
|||
if (quotePack === 'undefined') {
|
||||
return this.doOffline();
|
||||
}
|
||||
|
||||
|
||||
quotePack = JSON.parse(quotePack);
|
||||
|
||||
if (quotePack) {
|
||||
|
@ -109,19 +109,19 @@ export default class Quote extends React.PureComponent {
|
|||
favourite() {
|
||||
if (localStorage.getItem('favouriteQuote')) {
|
||||
localStorage.removeItem('favouriteQuote');
|
||||
this.setState({
|
||||
favourited: <StarIcon2 className='copyButton' onClick={() => this.favourite()} />
|
||||
this.setState({
|
||||
favourited: <StarIcon2 className='copyButton' onClick={() => this.favourite()} />
|
||||
});
|
||||
} else {
|
||||
localStorage.setItem('favouriteQuote', this.state.quote + ' - ' + this.state.author);
|
||||
this.setState({
|
||||
favourited: <StarIcon className='copyButton' onClick={() => this.favourite()} />
|
||||
this.setState({
|
||||
favourited: <StarIcon className='copyButton' onClick={() => this.favourite()} />
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
componentDidMount() {
|
||||
this.setState({
|
||||
this.setState({
|
||||
favourited: localStorage.getItem('favouriteQuote') ? <StarIcon className='copyButton' onClick={() => this.favourite()} /> : null, // todo: fix (localStorage.getItem('favouriteQuoteEnabled') === 'false')
|
||||
copy: (localStorage.getItem('copyButton') === 'false') ? null : this.state.copy,
|
||||
tweet: (localStorage.getItem('tweetButton') === 'false') ? null: this.state.tweet
|
||||
|
@ -132,12 +132,12 @@ export default class Quote extends React.PureComponent {
|
|||
|
||||
render() {
|
||||
return (
|
||||
<div className='quotediv'>
|
||||
<h1 className='quote'>{`${this.state.quote}`}</h1>
|
||||
<h1 className='quoteauthor'>
|
||||
<a href={this.state.authorlink} className='quoteauthorlink' target='_blank' rel='noopener noreferrer'>{this.state.author}</a> {this.state.copy} {this.state.tweet} {this.state.favourited}
|
||||
</h1>
|
||||
</div>
|
||||
<div className='quotediv'>
|
||||
<h1 className='quote'>{`${this.state.quote}`}</h1>
|
||||
<h1 className='quoteauthor'>
|
||||
<a href={this.state.authorlink} className='quoteauthorlink' target='_blank' rel='noopener noreferrer'>{this.state.author}</a> {this.state.copy} {this.state.tweet} {this.state.favourited}
|
||||
</h1>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,80 +1,102 @@
|
|||
[
|
||||
{
|
||||
"author": "Robert De Niro",
|
||||
"quote": "Time goes on. So whatever you’re going to do, do it. Do it now. Don’t wait."
|
||||
},
|
||||
{
|
||||
"author": "Walt Disney",
|
||||
"quote": "All our dreams can come true, if we have the courage to pursue them."
|
||||
},
|
||||
{
|
||||
"author": "Confucius",
|
||||
"quote": "It does not matter how slowly you go as long as you do not stop."
|
||||
}, {
|
||||
"author": "Roy T. Bennett",
|
||||
"quote": "Believe in yourself. You are braver than you think, more talented than you know, and capable of more than you imagine."
|
||||
}, {
|
||||
"author": "Wayne Dyer",
|
||||
"quote": "If you believe it will work out, you’ll see opportunities. If you believe it won’t, you will see obstacles."
|
||||
}, {
|
||||
"author": "George Addair",
|
||||
"quote": "Everything you’ve ever wanted is on the other side of fear."
|
||||
}, {
|
||||
"author": "Winston Churchill",
|
||||
"quote": "Success is not final, failure is not fatal: it is the courage to continue that counts."
|
||||
}, {
|
||||
"author": "Paulo Coelho",
|
||||
"quote": "There is only one thing that makes a dream impossible to achieve: the fear of failure"
|
||||
}, {
|
||||
"author": "Brian Tracy",
|
||||
"quote": "Your true success in life begins only when you make the commitment to become excellent at what you do."
|
||||
}, {
|
||||
"author": "Chantal Sutherland",
|
||||
"quote": "Believe in yourself, take on your challenges, dig deep within yourself to conquer fears. Never let anyone bring you down. You got to keep going."
|
||||
}, {
|
||||
"author": "Les Brown",
|
||||
"quote": "Too many of us are not living our dreams because we are living our fears."
|
||||
}, {
|
||||
"author": "Bob Riley",
|
||||
"quote": "Hard times don’t create heroes. It is during the hard times when the ‘hero’ within us is revealed."
|
||||
}, {
|
||||
"author": "Jack Canfield",
|
||||
"quote": "If you can tune into your purpose and really align with it, setting goals so that your vision is an expression of that purpose, then life flows much more easily."
|
||||
}, {
|
||||
"author": "Napolean Hill",
|
||||
"quote": "Whatever the mind can conceive and believe, it can achieve."
|
||||
}, {
|
||||
"author": "Jim Rohn",
|
||||
"quote": "Don’t wish it were easier. Wish you were better."
|
||||
}, {
|
||||
"author": "Serena Williams",
|
||||
"quote": "A champion is defined not by their wins but by how they can recover when they fall."
|
||||
}, {
|
||||
"author": "Sheryl Sandberg",
|
||||
"quote": "Motivation comes from working on things we care about."
|
||||
}, {
|
||||
"author": "Reese Witherspoon",
|
||||
"quote": "With the right kind of coaching and determination you can accomplish anything."
|
||||
}, {
|
||||
"author": "Hazrat Inayat Khan",
|
||||
"quote": "Some people look for a beautiful place. Others make a place beautiful."
|
||||
}, {
|
||||
"author": "Albert Einstein",
|
||||
"quote": "Life is like riding a bicycle. To keep your balance, you must keep moving."
|
||||
}, {
|
||||
"author": "Walt Disney",
|
||||
"quote": "The way to get started is to quit talking and begin doing."
|
||||
}, {
|
||||
"author": "Winston Churchill",
|
||||
"quote": "A pessimist sees the difficulty in every opportunity; an optimist sees the opportunity in every difficulty."
|
||||
}, {
|
||||
"author": "Will Rogers",
|
||||
"quote": "Don't let yesterday take up too much of today."
|
||||
}, {
|
||||
"author": "Vince Lombardi",
|
||||
"quote": "It's not whether you get knocked down, it's whether you get up."
|
||||
}, {
|
||||
"author": "Steve Jobs",
|
||||
"quote": "If you are working on something that you really care about, you don’t have to be pushed. The vision pulls you."
|
||||
}
|
||||
]
|
||||
{
|
||||
"author": "Robert De Niro",
|
||||
"quote": "Time goes on. So whatever you’re going to do, do it. Do it now. Don’t wait."
|
||||
},
|
||||
{
|
||||
"author": "Walt Disney",
|
||||
"quote": "All our dreams can come true, if we have the courage to pursue them."
|
||||
},
|
||||
{
|
||||
"author": "Confucius",
|
||||
"quote": "It does not matter how slowly you go as long as you do not stop."
|
||||
},
|
||||
{
|
||||
"author": "Roy T. Bennett",
|
||||
"quote": "Believe in yourself. You are braver than you think, more talented than you know, and capable of more than you imagine."
|
||||
},
|
||||
{
|
||||
"author": "Wayne Dyer",
|
||||
"quote": "If you believe it will work out, you’ll see opportunities. If you believe it won’t, you will see obstacles."
|
||||
},
|
||||
{
|
||||
"author": "George Addair",
|
||||
"quote": "Everything you’ve ever wanted is on the other side of fear."
|
||||
},
|
||||
{
|
||||
"author": "Winston Churchill",
|
||||
"quote": "Success is not final, failure is not fatal: it is the courage to continue that counts."
|
||||
},
|
||||
{
|
||||
"author": "Paulo Coelho",
|
||||
"quote": "There is only one thing that makes a dream impossible to achieve: the fear of failure"
|
||||
},
|
||||
{
|
||||
"author": "Brian Tracy",
|
||||
"quote": "Your true success in life begins only when you make the commitment to become excellent at what you do."
|
||||
},
|
||||
{
|
||||
"author": "Chantal Sutherland",
|
||||
"quote": "Believe in yourself, take on your challenges, dig deep within yourself to conquer fears. Never let anyone bring you down. You got to keep going."
|
||||
},
|
||||
{
|
||||
"author": "Les Brown",
|
||||
"quote": "Too many of us are not living our dreams because we are living our fears."
|
||||
},
|
||||
{
|
||||
"author": "Bob Riley",
|
||||
"quote": "Hard times don’t create heroes. It is during the hard times when the ‘hero’ within us is revealed."
|
||||
},
|
||||
{
|
||||
"author": "Jack Canfield",
|
||||
"quote": "If you can tune into your purpose and really align with it, setting goals so that your vision is an expression of that purpose, then life flows much more easily."
|
||||
},
|
||||
{
|
||||
"author": "Napolean Hill",
|
||||
"quote": "Whatever the mind can conceive and believe, it can achieve."
|
||||
},
|
||||
{
|
||||
"author": "Jim Rohn",
|
||||
"quote": "Don’t wish it were easier. Wish you were better."
|
||||
},
|
||||
{
|
||||
"author": "Serena Williams",
|
||||
"quote": "A champion is defined not by their wins but by how they can recover when they fall."
|
||||
},
|
||||
{
|
||||
"author": "Sheryl Sandberg",
|
||||
"quote": "Motivation comes from working on things we care about."
|
||||
},
|
||||
{
|
||||
"author": "Reese Witherspoon",
|
||||
"quote": "With the right kind of coaching and determination you can accomplish anything."
|
||||
},
|
||||
{
|
||||
"author": "Hazrat Inayat Khan",
|
||||
"quote": "Some people look for a beautiful place. Others make a place beautiful."
|
||||
},
|
||||
{
|
||||
"author": "Albert Einstein",
|
||||
"quote": "Life is like riding a bicycle. To keep your balance, you must keep moving."
|
||||
},
|
||||
{
|
||||
"author": "Walt Disney",
|
||||
"quote": "The way to get started is to quit talking and begin doing."
|
||||
},
|
||||
{
|
||||
"author": "Winston Churchill",
|
||||
"quote": "A pessimist sees the difficulty in every opportunity; an optimist sees the opportunity in every difficulty."
|
||||
},
|
||||
{
|
||||
"author": "Will Rogers",
|
||||
"quote": "Don't let yesterday take up too much of today."
|
||||
},
|
||||
{
|
||||
"author": "Vince Lombardi",
|
||||
"quote": "It's not whether you get knocked down, it's whether you get up."
|
||||
},
|
||||
{
|
||||
"author": "Steve Jobs",
|
||||
"quote": "If you are working on something that you really care about, you don’t have to be pushed. The vision pulls you."
|
||||
}
|
||||
]
|
||||
|
|
|
@ -1,38 +1,38 @@
|
|||
@import '../../../scss/variables';
|
||||
|
||||
.quote {
|
||||
font-size: 0.8em;
|
||||
text-shadow: 0 0 10px rgba(0, 0, 0, 0.3);
|
||||
font-size: 0.8em;
|
||||
text-shadow: 0 0 10px rgba(0, 0, 0, 0.3);
|
||||
}
|
||||
|
||||
@media screen and (min-width: 600px) {
|
||||
.quote {
|
||||
margin-left: 30%;
|
||||
margin-right: 30%;
|
||||
}
|
||||
.quote {
|
||||
margin-left: 30%;
|
||||
margin-right: 30%;
|
||||
}
|
||||
}
|
||||
|
||||
.quoteauthor {
|
||||
font-size: 0.9em;
|
||||
letter-spacing: 0.5px;
|
||||
font-size: 0.9em;
|
||||
letter-spacing: 0.5px;
|
||||
}
|
||||
|
||||
.copyButton {
|
||||
cursor: pointer;
|
||||
vertical-align: middle;
|
||||
transition: ease 0.2s !important;
|
||||
cursor: pointer;
|
||||
vertical-align: middle;
|
||||
transition: ease 0.2s !important;
|
||||
|
||||
&:hover {
|
||||
transform: scale(1.1);
|
||||
}
|
||||
&:hover {
|
||||
transform: scale(1.1);
|
||||
}
|
||||
}
|
||||
|
||||
i.material-icons,
|
||||
h1.quoteauthor {
|
||||
display: inline;
|
||||
display: inline;
|
||||
}
|
||||
|
||||
.quoteauthorlink {
|
||||
text-decoration: none;
|
||||
color: white;
|
||||
}
|
||||
text-decoration: none;
|
||||
color: white;
|
||||
}
|
||||
|
|
|
@ -67,10 +67,10 @@ export default class Search extends React.PureComponent {
|
|||
return (
|
||||
<div id='searchBar'>
|
||||
<form action={this.state.url}>
|
||||
{this.state.microphone}
|
||||
<SearchIcon onClick={() => searchButton()} id='searchButton'/>
|
||||
<input type='text' placeholder={this.props.language} name={this.state.query} id='searchtext'/>
|
||||
</form>
|
||||
{this.state.microphone}
|
||||
<SearchIcon onClick={() => searchButton()} id='searchButton'/>
|
||||
<input type='text' placeholder={this.props.language} name={this.state.query} id='searchtext'/>
|
||||
</form>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
|
|
@ -1,37 +1,37 @@
|
|||
@import '../../../scss/variables';
|
||||
|
||||
#searchBar {
|
||||
position: absolute;
|
||||
left: 20px;
|
||||
top: 20px;
|
||||
color: map-get($theme-colours, 'main-text-color');
|
||||
|
||||
input[type=text] {
|
||||
width: 140px;
|
||||
margin-left: 12px;
|
||||
border-radius: 24px;
|
||||
font-size: calc(5px + 1.2vmin);
|
||||
border: none;
|
||||
position: absolute;
|
||||
left: 20px;
|
||||
top: 20px;
|
||||
color: map-get($theme-colours, 'main-text-color');
|
||||
background-color: rgba(0, 0, 0, 0.1);
|
||||
-webkit-transition: width 0.5s ease-in-out;
|
||||
transition: width 0.5s ease-in-out;
|
||||
color: white;
|
||||
|
||||
input[type=text] {
|
||||
width: 140px;
|
||||
margin-left: 12px;
|
||||
border-radius: 24px;
|
||||
font-size: calc(5px + 1.2vmin);
|
||||
border: none;
|
||||
position: absolute;
|
||||
background-color: rgba(0, 0, 0, 0.1);
|
||||
-webkit-transition: width 0.5s ease-in-out;
|
||||
transition: width 0.5s ease-in-out;
|
||||
color: white;
|
||||
|
||||
&:focus {
|
||||
width: 400px;
|
||||
background-color: rgba(0, 0, 0, .3);
|
||||
}
|
||||
&:focus {
|
||||
width: 400px;
|
||||
background-color: rgba(0, 0, 0, .3);
|
||||
}
|
||||
}
|
||||
|
||||
.MuiSvgIcon-root {
|
||||
margin-top: 4px;
|
||||
font-size: 30px;
|
||||
filter: drop-shadow(0 0 6px rgba(0, 0, 0, 0.3));
|
||||
cursor: pointer;
|
||||
}
|
||||
.MuiSvgIcon-root {
|
||||
margin-top: 4px;
|
||||
font-size: 30px;
|
||||
filter: drop-shadow(0 0 6px rgba(0, 0, 0, 0.3));
|
||||
cursor: pointer;
|
||||
}
|
||||
}
|
||||
|
||||
.micIcon {
|
||||
margin-right: 10px;
|
||||
}
|
||||
margin-right: 10px;
|
||||
}
|
||||
|
|
|
@ -1,48 +1,48 @@
|
|||
[
|
||||
{
|
||||
"name": "DuckDuckGo",
|
||||
"settingsName": "duckduckgo",
|
||||
"url": "https://duckduckgo.com"
|
||||
},
|
||||
{
|
||||
"name": "Google",
|
||||
"settingsName": "google",
|
||||
"url": "https://google.com/search"
|
||||
},
|
||||
{
|
||||
"name": "Bing",
|
||||
"settingsName": "bing",
|
||||
"url": "https://bing.com/search"
|
||||
},
|
||||
{
|
||||
"name": "Yahoo",
|
||||
"settingsName": "yahoo",
|
||||
"url": "https://search.yahoo.com/search"
|
||||
},
|
||||
{
|
||||
"name": "Ecosia",
|
||||
"settingsName": "ecosia",
|
||||
"url": "https://ecosia.org/search"
|
||||
},
|
||||
{
|
||||
"name": "Яндекс",
|
||||
"settingsName": "yandex",
|
||||
"url": "https://yandex.ru/search",
|
||||
"query": "text"
|
||||
},
|
||||
{
|
||||
"name": "Qwant",
|
||||
"settingsName": "qwant",
|
||||
"url": "https://www.qwant.com/"
|
||||
},
|
||||
{
|
||||
"name": "Ask",
|
||||
"settingsName": "ask",
|
||||
"url": "https://ask.com/web"
|
||||
},
|
||||
{
|
||||
"name": "Startpage",
|
||||
"settingsName": "startpage",
|
||||
"url": "https://www.startpage.com/sp/search"
|
||||
}
|
||||
]
|
||||
{
|
||||
"name": "DuckDuckGo",
|
||||
"settingsName": "duckduckgo",
|
||||
"url": "https://duckduckgo.com"
|
||||
},
|
||||
{
|
||||
"name": "Google",
|
||||
"settingsName": "google",
|
||||
"url": "https://google.com/search"
|
||||
},
|
||||
{
|
||||
"name": "Bing",
|
||||
"settingsName": "bing",
|
||||
"url": "https://bing.com/search"
|
||||
},
|
||||
{
|
||||
"name": "Yahoo",
|
||||
"settingsName": "yahoo",
|
||||
"url": "https://search.yahoo.com/search"
|
||||
},
|
||||
{
|
||||
"name": "Ecosia",
|
||||
"settingsName": "ecosia",
|
||||
"url": "https://ecosia.org/search"
|
||||
},
|
||||
{
|
||||
"name": "Яндекс",
|
||||
"settingsName": "yandex",
|
||||
"url": "https://yandex.ru/search",
|
||||
"query": "text"
|
||||
},
|
||||
{
|
||||
"name": "Qwant",
|
||||
"settingsName": "qwant",
|
||||
"url": "https://www.qwant.com/"
|
||||
},
|
||||
{
|
||||
"name": "Ask",
|
||||
"settingsName": "ask",
|
||||
"url": "https://ask.com/web"
|
||||
},
|
||||
{
|
||||
"name": "Startpage",
|
||||
"settingsName": "startpage",
|
||||
"url": "https://www.startpage.com/sp/search"
|
||||
}
|
||||
]
|
||||
|
|
|
@ -21,7 +21,7 @@ export default class Clock extends React.PureComponent {
|
|||
|
||||
// Percentage
|
||||
if (localStorage.getItem('percentageComplete') === 'true') {
|
||||
return this.setState({
|
||||
return this.setState({
|
||||
time: (now.getHours() / 24).toFixed(2).replace('0.', '') + '%'
|
||||
});
|
||||
}
|
||||
|
@ -30,8 +30,8 @@ export default class Clock extends React.PureComponent {
|
|||
if (localStorage.getItem('analog') === 'true') {
|
||||
require('react-clock/dist/Clock.css'); // load analog clock css
|
||||
|
||||
this.setState({
|
||||
time: now
|
||||
this.setState({
|
||||
time: now
|
||||
});
|
||||
} else {
|
||||
// Default clock
|
||||
|
@ -53,13 +53,13 @@ export default class Clock extends React.PureComponent {
|
|||
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();
|
||||
|
||||
|
||||
if (hours > 12) {
|
||||
hours -= 12;
|
||||
}
|
||||
|
@ -74,7 +74,7 @@ export default class Clock extends React.PureComponent {
|
|||
time = `${hours}:${now.getMinutes()}${sec}`;
|
||||
} else {
|
||||
time = `${('00' + hours).slice(-2)}:${('00' + now.getMinutes()).slice(-2)}${sec}`;
|
||||
}
|
||||
}
|
||||
|
||||
this.setState({
|
||||
time: time,
|
||||
|
@ -93,7 +93,7 @@ export default class Clock extends React.PureComponent {
|
|||
|
||||
render() {
|
||||
let clockHTML = <h1 className='clock'>{this.state.time}<span className='ampm'>{this.state.ampm}</span></h1>;
|
||||
|
||||
|
||||
if (localStorage.getItem('analog') === 'true') {
|
||||
clockHTML = <Analog className='analogclock' value={this.state.time} renderHourMarks={false} renderMinuteMarks={false} />;
|
||||
}
|
||||
|
|
|
@ -32,24 +32,24 @@ export default class DateWidget extends React.PureComponent {
|
|||
day = dateYear;
|
||||
year = dateDay;
|
||||
break;
|
||||
default:
|
||||
default:
|
||||
break; // DMY
|
||||
}
|
||||
|
||||
let format;
|
||||
switch (localStorage.getItem('shortFormat')) {
|
||||
case 'dash':
|
||||
format = `${day}-${month}-${year}`;
|
||||
case 'dash':
|
||||
format = `${day}-${month}-${year}`;
|
||||
break;
|
||||
case 'gaps':
|
||||
format = `${day} - ${month} - ${year}`;
|
||||
case 'gaps':
|
||||
format = `${day} - ${month} - ${year}`;
|
||||
break;
|
||||
default:
|
||||
default:
|
||||
format = `${day}/${month}/${year}`;
|
||||
}
|
||||
|
||||
this.setState({
|
||||
date: format
|
||||
this.setState({
|
||||
date: format
|
||||
});
|
||||
} else {
|
||||
// Full date
|
||||
|
@ -60,8 +60,8 @@ export default class DateWidget extends React.PureComponent {
|
|||
const month = date.toLocaleDateString(lang, { month: 'long' });
|
||||
const year = date.getFullYear();
|
||||
|
||||
this.setState({
|
||||
date: `${day} ${nth} ${month} ${year}`
|
||||
this.setState({
|
||||
date: `${day} ${nth} ${month} ${year}`
|
||||
});
|
||||
}
|
||||
}
|
||||
|
@ -73,4 +73,4 @@ export default class DateWidget extends React.PureComponent {
|
|||
render() {
|
||||
return <span style={{ 'textTransform': 'capitalize', 'fontWeight': 'bold' }}>{this.state.date}</span>
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,24 +1,24 @@
|
|||
@import '../../../scss/variables';
|
||||
|
||||
.clock {
|
||||
font-size: 4em;
|
||||
margin: 0;
|
||||
font-size: 4em;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.ampm {
|
||||
font-size: 0.5em;
|
||||
font-size: 0.5em;
|
||||
}
|
||||
|
||||
.analogclock,
|
||||
.react-clock__face {
|
||||
margin: 0 auto;
|
||||
border-radius: 100%;
|
||||
box-shadow: inset 0 0 100px rgba(0, 0, 0, 0.3);
|
||||
border: none !important;
|
||||
border: 1px solid map-get($theme-colours, 'main') !important;
|
||||
margin: 0 auto;
|
||||
border-radius: 100%;
|
||||
box-shadow: inset 0 0 100px rgba(0, 0, 0, 0.3);
|
||||
border: none !important;
|
||||
border: 1px solid map-get($theme-colours, 'main') !important;
|
||||
}
|
||||
|
||||
.react-clock__hand__body {
|
||||
background: map-get($theme-colours, 'main') !important;
|
||||
box-shadow: 0 0 25px rgba(0, 0, 0, 0.3);
|
||||
}
|
||||
background: map-get($theme-colours, 'main') !important;
|
||||
box-shadow: 0 0 25px rgba(0, 0, 0, 0.3);
|
||||
}
|
||||
|
|
|
@ -10,6 +10,6 @@ import '@fontsource/lexend-deca/latin-400.css';
|
|||
import '@fontsource/roboto/cyrillic-400.css';
|
||||
|
||||
ReactDOM.render(
|
||||
<App/>,
|
||||
document.getElementById('root')
|
||||
<App/>,
|
||||
document.getElementById('root')
|
||||
);
|
||||
|
|
|
@ -4,4 +4,4 @@ export const MARKETPLACE_URL = 'https://marketplace.muetab.com';
|
|||
export const WEBSITE_URL = 'https://muetab.com';
|
||||
export const OFFLINE_IMAGES = 20;
|
||||
export const BETA_VERSION = false;
|
||||
export const VERSION = '5.0.0';
|
||||
export const VERSION = '5.0.0';
|
||||
|
|
|
@ -1,102 +1,102 @@
|
|||
[
|
||||
{
|
||||
"name": "time",
|
||||
"value": true
|
||||
},
|
||||
{
|
||||
"name": "greeting",
|
||||
"value": true
|
||||
},
|
||||
{
|
||||
"name": "background",
|
||||
"value": true
|
||||
},
|
||||
{
|
||||
"name": "quote",
|
||||
"value": true
|
||||
},
|
||||
{
|
||||
"name": "searchBar",
|
||||
"value": true
|
||||
},
|
||||
{
|
||||
"name": "blur",
|
||||
"value": 0
|
||||
},
|
||||
{
|
||||
"name": "brightness",
|
||||
"value": 100
|
||||
},
|
||||
{
|
||||
"name": "events",
|
||||
"value": true
|
||||
},
|
||||
{
|
||||
"name": "customBackgroundColour",
|
||||
"value": ""
|
||||
},
|
||||
{
|
||||
"name": "customBackground",
|
||||
"value": ""
|
||||
},
|
||||
{
|
||||
"name": "greetingName",
|
||||
"value": ""
|
||||
},
|
||||
{
|
||||
"name": "defaultGreetingMessage",
|
||||
"value": true
|
||||
},
|
||||
{
|
||||
"name": "backgroundAPI",
|
||||
"value": "mue"
|
||||
},
|
||||
{
|
||||
"name": "ampm",
|
||||
"value": true
|
||||
},
|
||||
{
|
||||
"name": "copyButton",
|
||||
"value": false
|
||||
},
|
||||
{
|
||||
"name": "installed",
|
||||
"value": "[]"
|
||||
},
|
||||
{
|
||||
"name": "searchEngine",
|
||||
"value": "duckduckgo"
|
||||
},
|
||||
{
|
||||
"name": "refresh",
|
||||
"value": true
|
||||
},
|
||||
{
|
||||
"name": "view",
|
||||
"value": true
|
||||
},
|
||||
{
|
||||
"name": "favouriteEnabled",
|
||||
"value": true
|
||||
},
|
||||
{
|
||||
"name": "tweetButton",
|
||||
"value": false
|
||||
},
|
||||
{
|
||||
"name": "favouriteQuoteEnabled",
|
||||
"value": false
|
||||
},
|
||||
{
|
||||
"name": "showWelcome",
|
||||
"value": true
|
||||
},
|
||||
{
|
||||
"name": "quotelanguage",
|
||||
"value": "English"
|
||||
},
|
||||
{
|
||||
"name": "date",
|
||||
"value": "false"
|
||||
}
|
||||
]
|
||||
{
|
||||
"name": "time",
|
||||
"value": true
|
||||
},
|
||||
{
|
||||
"name": "greeting",
|
||||
"value": true
|
||||
},
|
||||
{
|
||||
"name": "background",
|
||||
"value": true
|
||||
},
|
||||
{
|
||||
"name": "quote",
|
||||
"value": true
|
||||
},
|
||||
{
|
||||
"name": "searchBar",
|
||||
"value": true
|
||||
},
|
||||
{
|
||||
"name": "blur",
|
||||
"value": 0
|
||||
},
|
||||
{
|
||||
"name": "brightness",
|
||||
"value": 100
|
||||
},
|
||||
{
|
||||
"name": "events",
|
||||
"value": true
|
||||
},
|
||||
{
|
||||
"name": "customBackgroundColour",
|
||||
"value": ""
|
||||
},
|
||||
{
|
||||
"name": "customBackground",
|
||||
"value": ""
|
||||
},
|
||||
{
|
||||
"name": "greetingName",
|
||||
"value": ""
|
||||
},
|
||||
{
|
||||
"name": "defaultGreetingMessage",
|
||||
"value": true
|
||||
},
|
||||
{
|
||||
"name": "backgroundAPI",
|
||||
"value": "mue"
|
||||
},
|
||||
{
|
||||
"name": "ampm",
|
||||
"value": true
|
||||
},
|
||||
{
|
||||
"name": "copyButton",
|
||||
"value": false
|
||||
},
|
||||
{
|
||||
"name": "installed",
|
||||
"value": "[]"
|
||||
},
|
||||
{
|
||||
"name": "searchEngine",
|
||||
"value": "duckduckgo"
|
||||
},
|
||||
{
|
||||
"name": "refresh",
|
||||
"value": true
|
||||
},
|
||||
{
|
||||
"name": "view",
|
||||
"value": true
|
||||
},
|
||||
{
|
||||
"name": "favouriteEnabled",
|
||||
"value": true
|
||||
},
|
||||
{
|
||||
"name": "tweetButton",
|
||||
"value": false
|
||||
},
|
||||
{
|
||||
"name": "favouriteQuoteEnabled",
|
||||
"value": false
|
||||
},
|
||||
{
|
||||
"name": "showWelcome",
|
||||
"value": true
|
||||
},
|
||||
{
|
||||
"name": "quotelanguage",
|
||||
"value": "English"
|
||||
},
|
||||
{
|
||||
"name": "date",
|
||||
"value": "false"
|
||||
}
|
||||
]
|
||||
|
|
|
@ -6,30 +6,30 @@ const hexRegexp = /(^#{0,1}[0-9A-F]{6}$)|(^#{0,1}[0-9A-F]{3}$)|(^#{0,1}[0-9A-F]{
|
|||
const regexp = /([0-9A-F])([0-9A-F])([0-9A-F])/i;
|
||||
|
||||
export default function hexToRgb(value) {
|
||||
const valid = hexRegexp.test(value);
|
||||
const valid = hexRegexp.test(value);
|
||||
|
||||
if (valid) {
|
||||
if (value[0] === '#') {
|
||||
value = value.slice(1, value.length);
|
||||
}
|
||||
|
||||
if (value.length === 3){
|
||||
value = value.replace(regexp, '$1$1$2$2$3$3');
|
||||
}
|
||||
|
||||
const red = parseInt(value.substr(0, 2), 16);
|
||||
const green = parseInt(value.substr(2, 2), 16);
|
||||
const blue = parseInt(value.substr(4, 2), 16);
|
||||
const alpha = parseInt(value.substr(6, 2), 16) / 255;
|
||||
|
||||
const color = setRgba(red, green, blue, alpha);
|
||||
const hsv = rgbToHsv({ ...color });
|
||||
|
||||
return {
|
||||
...color,
|
||||
...hsv,
|
||||
};
|
||||
if (valid) {
|
||||
if (value[0] === '#') {
|
||||
value = value.slice(1, value.length);
|
||||
}
|
||||
|
||||
return false;
|
||||
if (value.length === 3){
|
||||
value = value.replace(regexp, '$1$1$2$2$3$3');
|
||||
}
|
||||
|
||||
const red = parseInt(value.substr(0, 2), 16);
|
||||
const green = parseInt(value.substr(2, 2), 16);
|
||||
const blue = parseInt(value.substr(4, 2), 16);
|
||||
const alpha = parseInt(value.substr(6, 2), 16) / 255;
|
||||
|
||||
const color = setRgba(red, green, blue, alpha);
|
||||
const hsv = rgbToHsv({ ...color });
|
||||
|
||||
return {
|
||||
...color,
|
||||
...hsv,
|
||||
};
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
|
|
@ -1,19 +1,19 @@
|
|||
export default function rgbToHex(red, green, blue) {
|
||||
let r16 = red.toString(16);
|
||||
let g16 = green.toString(16);
|
||||
let b16 = blue.toString(16);
|
||||
let r16 = red.toString(16);
|
||||
let g16 = green.toString(16);
|
||||
let b16 = blue.toString(16);
|
||||
|
||||
if (red < 16) {
|
||||
r16 = `0${r16}`;
|
||||
}
|
||||
if (red < 16) {
|
||||
r16 = `0${r16}`;
|
||||
}
|
||||
|
||||
if (green < 16) {
|
||||
g16 = `0${g16}`;
|
||||
}
|
||||
|
||||
if (blue < 16) {
|
||||
b16 = `0${b16}`;
|
||||
}
|
||||
if (green < 16) {
|
||||
g16 = `0${g16}`;
|
||||
}
|
||||
|
||||
return r16 + g16 + b16;
|
||||
if (blue < 16) {
|
||||
b16 = `0${b16}`;
|
||||
}
|
||||
|
||||
return r16 + g16 + b16;
|
||||
}
|
||||
|
|
|
@ -1,41 +1,41 @@
|
|||
export default function rgbToHSv({ red, green, blue }) {
|
||||
let rr, gg, bb, h, s;
|
||||
let rr, gg, bb, h, s;
|
||||
|
||||
const rabs = red / 255;
|
||||
const gabs = green / 255;
|
||||
const babs = blue / 255;
|
||||
const rabs = red / 255;
|
||||
const gabs = green / 255;
|
||||
const babs = blue / 255;
|
||||
|
||||
const v = Math.max(rabs, gabs, babs);
|
||||
const diff = v - Math.min(rabs, gabs, babs);
|
||||
const diffc = c => (v - c) / 6 / diff + 1 / 2;
|
||||
const v = Math.max(rabs, gabs, babs);
|
||||
const diff = v - Math.min(rabs, gabs, babs);
|
||||
const diffc = c => (v - c) / 6 / diff + 1 / 2;
|
||||
|
||||
if (diff === 0) {
|
||||
h = 0;
|
||||
s = 0;
|
||||
} else {
|
||||
s = diff / v;
|
||||
rr = diffc(rabs);
|
||||
gg = diffc(gabs);
|
||||
bb = diffc(babs);
|
||||
if (diff === 0) {
|
||||
h = 0;
|
||||
s = 0;
|
||||
} else {
|
||||
s = diff / v;
|
||||
rr = diffc(rabs);
|
||||
gg = diffc(gabs);
|
||||
bb = diffc(babs);
|
||||
|
||||
if (rabs === v){
|
||||
h = bb - gg;
|
||||
} else if (gabs === v) {
|
||||
h = (1 / 3) + rr - bb;
|
||||
} else if (babs === v) {
|
||||
h = (2 / 3) + gg - rr;
|
||||
}
|
||||
|
||||
if (h < 0) {
|
||||
h += 1;
|
||||
} else if (h > 1) {
|
||||
h -= 1;
|
||||
}
|
||||
if (rabs === v){
|
||||
h = bb - gg;
|
||||
} else if (gabs === v) {
|
||||
h = (1 / 3) + rr - bb;
|
||||
} else if (babs === v) {
|
||||
h = (2 / 3) + gg - rr;
|
||||
}
|
||||
|
||||
return {
|
||||
hue: Math.round(h * 360),
|
||||
saturation: Math.round(s * 100),
|
||||
value: Math.round(v * 100),
|
||||
};
|
||||
if (h < 0) {
|
||||
h += 1;
|
||||
} else if (h > 1) {
|
||||
h -= 1;
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
hue: Math.round(h * 360),
|
||||
saturation: Math.round(s * 100),
|
||||
value: Math.round(v * 100),
|
||||
};
|
||||
}
|
||||
|
|
|
@ -1,19 +1,19 @@
|
|||
const isValidRGBValue = (value) => {
|
||||
return (typeof (value) === 'number' && Number.isNaN(value) === false && value >= 0 && value <= 255);
|
||||
return (typeof (value) === 'number' && Number.isNaN(value) === false && value >= 0 && value <= 255);
|
||||
}
|
||||
|
||||
export default function setRGBA(red, green, blue, alpha) {
|
||||
if (isValidRGBValue(red) && isValidRGBValue(green) && isValidRGBValue(blue)) {
|
||||
const color = {
|
||||
red: red | 0,
|
||||
green: green | 0,
|
||||
blue: blue | 0,
|
||||
};
|
||||
if (isValidRGBValue(red) && isValidRGBValue(green) && isValidRGBValue(blue)) {
|
||||
const color = {
|
||||
red: red | 0,
|
||||
green: green | 0,
|
||||
blue: blue | 0,
|
||||
};
|
||||
|
||||
if (isValidRGBValue(alpha) === true) {
|
||||
color.alpha = alpha | 0;
|
||||
}
|
||||
|
||||
return color;
|
||||
if (isValidRGBValue(alpha) === true) {
|
||||
color.alpha = alpha | 0;
|
||||
}
|
||||
|
||||
return color;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,86 +1,86 @@
|
|||
import { toast } from 'react-toastify';
|
||||
|
||||
export default class MarketplaceFunctions {
|
||||
static urlParser (input) { // based on https://stackoverflow.com/questions/37684/how-to-replace-plain-urls-with-links
|
||||
const urlPattern = /https?:\/\/(www\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()!@:%_+.~#?&//=]*)/;
|
||||
return input.replace(urlPattern, '<a href="$&" target="_blank">$&</a>');
|
||||
static urlParser (input) { // based on https://stackoverflow.com/questions/37684/how-to-replace-plain-urls-with-links
|
||||
const urlPattern = /https?:\/\/(www\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()!@:%_+.~#?&//=]*)/;
|
||||
return input.replace(urlPattern, '<a href="$&" target="_blank">$&</a>');
|
||||
}
|
||||
|
||||
static uninstall(name, type) {
|
||||
switch (type) {
|
||||
case 'settings':
|
||||
const oldSettings = JSON.parse(localStorage.getItem('backup_settings'));
|
||||
localStorage.clear();
|
||||
oldSettings.forEach(item => localStorage.setItem(item.name, item.value));
|
||||
break;
|
||||
case 'quote_packs':
|
||||
localStorage.removeItem('quote_packs');
|
||||
localStorage.removeItem('quoteAPI');
|
||||
break;
|
||||
default:
|
||||
try {
|
||||
localStorage.removeItem(type);
|
||||
} catch (e) {
|
||||
toast('Failed to uninstall addon, check the console');
|
||||
console.error(e);
|
||||
}
|
||||
}
|
||||
|
||||
static uninstall(name, type) {
|
||||
switch (type) {
|
||||
case 'settings':
|
||||
const oldSettings = JSON.parse(localStorage.getItem('backup_settings'));
|
||||
localStorage.clear();
|
||||
oldSettings.forEach(item => localStorage.setItem(item.name, item.value));
|
||||
break;
|
||||
case 'quote_packs':
|
||||
localStorage.removeItem('quote_packs');
|
||||
localStorage.removeItem('quoteAPI');
|
||||
break;
|
||||
default:
|
||||
try {
|
||||
localStorage.removeItem(type);
|
||||
} catch (e) {
|
||||
toast('Failed to uninstall addon, check the console');
|
||||
console.error(e);
|
||||
}
|
||||
let installed = JSON.parse(localStorage.getItem('installed'));
|
||||
for (let i = 0; i < installed.length; i++) {
|
||||
if (installed[i].name === name) {
|
||||
installed.splice(i, 1);
|
||||
break;
|
||||
}
|
||||
}
|
||||
localStorage.setItem('installed', JSON.stringify(installed));
|
||||
}
|
||||
|
||||
static install(type, input, sideload) {
|
||||
switch (type) {
|
||||
case 'settings':
|
||||
localStorage.removeItem('backup_settings');
|
||||
|
||||
let oldSettings = [];
|
||||
for (const key of Object.keys(localStorage)) {
|
||||
oldSettings.push({
|
||||
name: key,
|
||||
value: localStorage.getItem(key)
|
||||
});
|
||||
}
|
||||
|
||||
let installed = JSON.parse(localStorage.getItem('installed'));
|
||||
for (let i = 0; i < installed.length; i++) {
|
||||
if (installed[i].name === name) {
|
||||
installed.splice(i, 1);
|
||||
break;
|
||||
}
|
||||
localStorage.setItem('backup_settings', JSON.stringify(oldSettings));
|
||||
input.settings.forEach(element => localStorage.setItem(element.name, element.value));
|
||||
break;
|
||||
|
||||
case 'photo_packs':
|
||||
localStorage.setItem('photo_packs', JSON.stringify(input.photos));
|
||||
break;
|
||||
|
||||
case 'quote_packs':
|
||||
if (input.quote_api) {
|
||||
localStorage.setItem('quoteAPI', JSON.stringify(input.quote_api));
|
||||
}
|
||||
localStorage.setItem('installed', JSON.stringify(installed));
|
||||
|
||||
localStorage.setItem('quote_packs', JSON.stringify(input.quotes));
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
static install(type, input, sideload) {
|
||||
switch (type) {
|
||||
case 'settings':
|
||||
localStorage.removeItem('backup_settings');
|
||||
let installed = JSON.parse(localStorage.getItem('installed'));
|
||||
|
||||
let oldSettings = [];
|
||||
for (const key of Object.keys(localStorage)) {
|
||||
oldSettings.push({
|
||||
name: key,
|
||||
value: localStorage.getItem(key)
|
||||
});
|
||||
}
|
||||
|
||||
localStorage.setItem('backup_settings', JSON.stringify(oldSettings));
|
||||
input.settings.forEach(element => localStorage.setItem(element.name, element.value));
|
||||
break;
|
||||
|
||||
case 'photo_packs':
|
||||
localStorage.setItem('photo_packs', JSON.stringify(input.photos));
|
||||
break;
|
||||
|
||||
case 'quote_packs':
|
||||
if (input.quote_api) {
|
||||
localStorage.setItem('quoteAPI', JSON.stringify(input.quote_api));
|
||||
}
|
||||
|
||||
localStorage.setItem('quote_packs', JSON.stringify(input.quotes));
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
if (sideload) {
|
||||
installed.push({
|
||||
content: {
|
||||
updated: 'Unpublished',
|
||||
data: input
|
||||
}
|
||||
|
||||
let installed = JSON.parse(localStorage.getItem('installed'));
|
||||
|
||||
if (sideload) {
|
||||
installed.push({
|
||||
content: {
|
||||
updated: 'Unpublished',
|
||||
data: input
|
||||
}
|
||||
});
|
||||
} else {
|
||||
installed.push(input);
|
||||
}
|
||||
|
||||
localStorage.setItem('installed', JSON.stringify(installed));
|
||||
});
|
||||
} else {
|
||||
installed.push(input);
|
||||
}
|
||||
}
|
||||
|
||||
localStorage.setItem('installed', JSON.stringify(installed));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,19 +1,19 @@
|
|||
export default function deepmerge(...objects) {
|
||||
let target = {};
|
||||
let target = {};
|
||||
|
||||
const merge = (obj) => {
|
||||
for (let prop in obj) {
|
||||
if (obj.hasOwnProperty(prop)) {
|
||||
if (typeof obj[prop] === 'object') {
|
||||
target[prop] = deepmerge(target[prop], obj[prop]);
|
||||
} else {
|
||||
target[prop] = obj[prop];
|
||||
}
|
||||
}
|
||||
const merge = (obj) => {
|
||||
for (let prop in obj) {
|
||||
if (obj.hasOwnProperty(prop)) {
|
||||
if (typeof obj[prop] === 'object') {
|
||||
target[prop] = deepmerge(target[prop], obj[prop]);
|
||||
} else {
|
||||
target[prop] = obj[prop];
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
objects.forEach(object => merge(object));
|
||||
objects.forEach(object => merge(object));
|
||||
|
||||
return target;
|
||||
}
|
||||
return target;
|
||||
}
|
||||
|
|
|
@ -2,112 +2,112 @@ const defaultSettings = require('../default_settings.json');
|
|||
const languages = require('../languages.json');
|
||||
|
||||
const saveFile = (data, filename = 'file') => {
|
||||
if (typeof data === 'object') {
|
||||
data = JSON.stringify(data, undefined, 4);
|
||||
}
|
||||
if (typeof data === 'object') {
|
||||
data = JSON.stringify(data, undefined, 4);
|
||||
}
|
||||
|
||||
const blob = new Blob([data], { type: 'text/json' });
|
||||
let e = document.createEvent('MouseEvents');
|
||||
let a = document.createElement('a');
|
||||
const blob = new Blob([data], { type: 'text/json' });
|
||||
let e = document.createEvent('MouseEvents');
|
||||
let a = document.createElement('a');
|
||||
|
||||
a.href = window.URL.createObjectURL(blob);
|
||||
a.download = filename;
|
||||
a.dataset.downloadurl = ['text/json', a.download, a.href].join(':');
|
||||
a.href = window.URL.createObjectURL(blob);
|
||||
a.download = filename;
|
||||
a.dataset.downloadurl = ['text/json', a.download, a.href].join(':');
|
||||
|
||||
e.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
|
||||
a.dispatchEvent(e);
|
||||
e.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
|
||||
a.dispatchEvent(e);
|
||||
};
|
||||
|
||||
export default class SettingsFunctions {
|
||||
static exportSettings() {
|
||||
let settings = {};
|
||||
for (const key of Object.keys(localStorage)) {
|
||||
settings[key] = localStorage.getItem(key);
|
||||
}
|
||||
saveFile(settings, 'mue-settings.json');
|
||||
static exportSettings() {
|
||||
let settings = {};
|
||||
for (const key of Object.keys(localStorage)) {
|
||||
settings[key] = localStorage.getItem(key);
|
||||
}
|
||||
saveFile(settings, 'mue-settings.json');
|
||||
}
|
||||
|
||||
static setItem(key, value) {
|
||||
const old = localStorage.getItem(key);
|
||||
let val = true;
|
||||
|
||||
if (old !== null && !value) {
|
||||
if (old === 'true') {
|
||||
val = false;
|
||||
}
|
||||
|
||||
if (old === 'false') {
|
||||
val = true;
|
||||
}
|
||||
}
|
||||
|
||||
static setItem(key, value) {
|
||||
const old = localStorage.getItem(key);
|
||||
let val = true;
|
||||
localStorage.setItem(key, val);
|
||||
}
|
||||
|
||||
if (old !== null && !value) {
|
||||
if (old === 'true') {
|
||||
val = false;
|
||||
}
|
||||
static setDefaultSettings(reset) {
|
||||
localStorage.clear();
|
||||
defaultSettings.forEach((element) => localStorage.setItem(element.name, element.value));
|
||||
|
||||
if (old === 'false') {
|
||||
val = true;
|
||||
}
|
||||
}
|
||||
|
||||
localStorage.setItem(key, val);
|
||||
// Set theme depending on user preferred
|
||||
if (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches) {
|
||||
localStorage.setItem('darkTheme', true);
|
||||
} else {
|
||||
localStorage.setItem('darkTheme', false);
|
||||
}
|
||||
|
||||
static setDefaultSettings(reset) {
|
||||
localStorage.clear();
|
||||
defaultSettings.forEach((element) => localStorage.setItem(element.name, element.value));
|
||||
// Languages
|
||||
const languageCodes = languages.map(({ code }) => code);
|
||||
const browserLanguage = (navigator.languages && navigator.languages[0]) || navigator.language;
|
||||
|
||||
// Set theme depending on user preferred
|
||||
if (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches) {
|
||||
localStorage.setItem('darkTheme', true);
|
||||
} else {
|
||||
localStorage.setItem('darkTheme', false);
|
||||
}
|
||||
|
||||
// Languages
|
||||
const languageCodes = languages.map(({ code }) => code);
|
||||
const browserLanguage = (navigator.languages && navigator.languages[0]) || navigator.language;
|
||||
|
||||
if (languageCodes.includes(browserLanguage)) {
|
||||
localStorage.setItem('language', browserLanguage);
|
||||
if (browserLanguage !== 'en-GB' || browserLanguage !== 'en-US') {
|
||||
document.documentElement.lang = browserLanguage;
|
||||
}
|
||||
} else {
|
||||
localStorage.setItem('language', 'en-GB');
|
||||
}
|
||||
|
||||
if (reset) {
|
||||
localStorage.setItem('showWelcome', false);
|
||||
}
|
||||
|
||||
// Finally we set this to true so it doesn't run the function on every load
|
||||
localStorage.setItem('firstRun', true);
|
||||
window.location.reload();
|
||||
if (languageCodes.includes(browserLanguage)) {
|
||||
localStorage.setItem('language', browserLanguage);
|
||||
if (browserLanguage !== 'en-GB' || browserLanguage !== 'en-US') {
|
||||
document.documentElement.lang = browserLanguage;
|
||||
}
|
||||
} else {
|
||||
localStorage.setItem('language', 'en-GB');
|
||||
}
|
||||
|
||||
static loadSettings() {
|
||||
const css = localStorage.getItem('customcss');
|
||||
if (css) {
|
||||
document.head.insertAdjacentHTML('beforeend', '<style>' + css + '</style>');
|
||||
}
|
||||
|
||||
if (localStorage.getItem('darkTheme') === 'true') {
|
||||
document.getElementsByClassName('Toastify')[0].classList.add('dark');
|
||||
}
|
||||
|
||||
const font = localStorage.getItem('font');
|
||||
if (font) {
|
||||
const data = JSON.parse(font);
|
||||
|
||||
let url = '';
|
||||
if (data.google === true) {
|
||||
url = `@import url('https://fonts.googleapis.com/css2?family=${data.name}&display=swap');`;
|
||||
if (reset) {
|
||||
localStorage.setItem('showWelcome', false);
|
||||
}
|
||||
|
||||
// Finally we set this to true so it doesn't run the function on every load
|
||||
localStorage.setItem('firstRun', true);
|
||||
window.location.reload();
|
||||
}
|
||||
|
||||
static loadSettings() {
|
||||
const css = localStorage.getItem('customcss');
|
||||
if (css) {
|
||||
document.head.insertAdjacentHTML('beforeend', '<style>' + css + '</style>');
|
||||
}
|
||||
|
||||
if (localStorage.getItem('darkTheme') === 'true') {
|
||||
document.getElementsByClassName('Toastify')[0].classList.add('dark');
|
||||
}
|
||||
|
||||
const font = localStorage.getItem('font');
|
||||
if (font) {
|
||||
const data = JSON.parse(font);
|
||||
|
||||
let url = '';
|
||||
if (data.google === true) {
|
||||
url = `@import url('https://fonts.googleapis.com/css2?family=${data.name}&display=swap');`;
|
||||
}
|
||||
|
||||
document.head.insertAdjacentHTML('beforeend', `
|
||||
<style>
|
||||
${url}
|
||||
* {
|
||||
font-family: '${data.name}', 'Lexend Deca' !important;
|
||||
}
|
||||
|
||||
document.head.insertAdjacentHTML('beforeend', `
|
||||
<style>
|
||||
${url}
|
||||
* {
|
||||
font-family: '${data.name}', 'Lexend Deca' !important;
|
||||
}
|
||||
</style>`);
|
||||
}
|
||||
|
||||
const zoom = localStorage.getItem('zoom');
|
||||
if (zoom !== 100) { // don't bother if it's default zoom
|
||||
document.body.style.zoom = zoom + '%';
|
||||
}
|
||||
</style>`);
|
||||
}
|
||||
}
|
||||
|
||||
const zoom = localStorage.getItem('zoom');
|
||||
if (zoom !== 100) { // don't bother if it's default zoom
|
||||
document.body.style.zoom = zoom + '%';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,30 +1,30 @@
|
|||
[
|
||||
{
|
||||
"text": "English (UK)",
|
||||
"code": "en-GB"
|
||||
},
|
||||
{
|
||||
"text": "English (US)",
|
||||
"code": "en-US"
|
||||
},
|
||||
{
|
||||
"text": "Español",
|
||||
"code": "es"
|
||||
},
|
||||
{
|
||||
"text": "Français",
|
||||
"code": "fr"
|
||||
},
|
||||
{
|
||||
"text": "Nederlands",
|
||||
"code": "nl"
|
||||
},
|
||||
{
|
||||
"text": "Norsk",
|
||||
"code": "no"
|
||||
},
|
||||
{
|
||||
"text": "Pусский",
|
||||
"code": "ru"
|
||||
}
|
||||
]
|
||||
{
|
||||
"text": "English (UK)",
|
||||
"code": "en-GB"
|
||||
},
|
||||
{
|
||||
"text": "English (US)",
|
||||
"code": "en-US"
|
||||
},
|
||||
{
|
||||
"text": "Español",
|
||||
"code": "es"
|
||||
},
|
||||
{
|
||||
"text": "Français",
|
||||
"code": "fr"
|
||||
},
|
||||
{
|
||||
"text": "Nederlands",
|
||||
"code": "nl"
|
||||
},
|
||||
{
|
||||
"text": "Norsk",
|
||||
"code": "no"
|
||||
},
|
||||
{
|
||||
"text": "Pусский",
|
||||
"code": "ru"
|
||||
}
|
||||
]
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
[
|
||||
{
|
||||
"login": "FuryingFox",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/28787893?v=4"
|
||||
}
|
||||
]
|
||||
{
|
||||
"login": "FuryingFox",
|
||||
"avatar_url": "https://avatars.githubusercontent.com/u/28787893?v=4"
|
||||
}
|
||||
]
|
||||
|
|
|
@ -1,31 +1,31 @@
|
|||
// credit: https://joshbroton.com/quick-fix-sass-mixins-for-css-keyframe-animations/
|
||||
// source: https://joshbroton.com/quick-fix-sass-mixins-for-css-keyframe-animations/
|
||||
@mixin animation($animate...) {
|
||||
$max: length($animate);
|
||||
$animations: '';
|
||||
$max: length($animate);
|
||||
$animations: '';
|
||||
|
||||
@for $i from 1 through $max {
|
||||
$animations: #{$animations + nth($animate, $i)};
|
||||
@for $i from 1 through $max {
|
||||
$animations: #{$animations + nth($animate, $i)};
|
||||
|
||||
@if $i < $max {
|
||||
$animations: #{$animations + ', '};
|
||||
}
|
||||
@if $i < $max {
|
||||
$animations: #{$animations + ', '};
|
||||
}
|
||||
}
|
||||
|
||||
-webkit-animation: $animations;
|
||||
-moz-animation: $animations;
|
||||
animation: $animations;
|
||||
-webkit-animation: $animations;
|
||||
-moz-animation: $animations;
|
||||
animation: $animations;
|
||||
}
|
||||
|
||||
@mixin keyframes($animationName) {
|
||||
@-webkit-keyframes #{$animationName} {
|
||||
@content;
|
||||
}
|
||||
@-webkit-keyframes #{$animationName} {
|
||||
@content;
|
||||
}
|
||||
|
||||
@-moz-keyframes #{$animationName} {
|
||||
@content;
|
||||
}
|
||||
@-moz-keyframes #{$animationName} {
|
||||
@content;
|
||||
}
|
||||
|
||||
@keyframes #{$animationName} {
|
||||
@content;
|
||||
}
|
||||
}
|
||||
@keyframes #{$animationName} {
|
||||
@content;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -28,4 +28,4 @@ $button-colours: (
|
|||
|
||||
$main-parts: (
|
||||
'shadow': 0 0 1rem 0 rgba(0, 0, 0, .2),
|
||||
);
|
||||
);
|
||||
|
|
|
@ -13,46 +13,46 @@
|
|||
@import 'modules/modals/welcome';
|
||||
|
||||
body {
|
||||
background: #2f3640;
|
||||
margin: 0;
|
||||
overflow: hidden;
|
||||
background: #2f3640;
|
||||
margin: 0;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
* {
|
||||
font-family: 'Lexend Deca', 'Roboto' !important;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
outline: none;
|
||||
font-family: 'Lexend Deca', 'Roboto' !important;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
outline: none;
|
||||
}
|
||||
|
||||
#center {
|
||||
margin-left: 2vw;
|
||||
margin-right: 2vw;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
font-size: calc(10px + 2vmin);
|
||||
text-align: center;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
margin: auto;
|
||||
text-shadow: 0 0 25px rgba(0, 0, 0, 0.3);
|
||||
margin-left: 2vw;
|
||||
margin-right: 2vw;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
font-size: calc(10px + 2vmin);
|
||||
text-align: center;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
margin: auto;
|
||||
text-shadow: 0 0 25px rgba(0, 0, 0, 0.3);
|
||||
}
|
||||
|
||||
::placeholder {
|
||||
color: map-get($theme-colours, 'main');
|
||||
opacity: 1;
|
||||
color: map-get($theme-colours, 'main');
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
::selection {
|
||||
background-color: #c2c2c2;
|
||||
background-color: #c2c2c2;
|
||||
}
|
||||
|
||||
#root {
|
||||
min-height: 100vh;
|
||||
display: grid;
|
||||
color: map-get($theme-colours, 'main-text-color');
|
||||
}
|
||||
min-height: 100vh;
|
||||
display: grid;
|
||||
color: map-get($theme-colours, 'main-text-color');
|
||||
}
|
||||
|
|
|
@ -198,4 +198,4 @@ input[type=number]::-webkit-outer-spin-button {
|
|||
&:hover {
|
||||
color: map-get($button-colours, 'other');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -22,4 +22,4 @@
|
|||
background: url('data:image/gif;base64,R0lGODlhBgAGAKEDAFVVVX9/f9TU1CgmNyH5BAEKAAMALAAAAAAGAAYAAAIODA4hCDKWxlhNvmCnGwUAOw==') right center no-repeat, linear-gradient(180deg, #ffb032 0%, #dd3b67 100%) !important;
|
||||
background-position: calc(100% - 5px) center !important;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -189,4 +189,4 @@ p.description {
|
|||
font-size: 35px !important;
|
||||
margin-bottom: -30px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -208,4 +208,4 @@ input[type=color]::-moz-color-swatch {
|
|||
|
||||
.MuiCheckbox-colorPrimary.Mui-checked {
|
||||
color: map-get($button-colours, 'reset') !important;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,40 +1,40 @@
|
|||
.Toastify__toast-body {
|
||||
color: #000000 !important;
|
||||
font-size: 16px !important;
|
||||
padding: 15px 20px !important;
|
||||
color: #000000 !important;
|
||||
font-size: 16px !important;
|
||||
padding: 15px 20px !important;
|
||||
}
|
||||
|
||||
.Toastify__toast {
|
||||
border-radius: 12px !important;
|
||||
min-height: auto !important;
|
||||
height: auto !important;
|
||||
width: auto !important;
|
||||
min-width: auto !important;
|
||||
padding: 0px !important;
|
||||
border-radius: 12px !important;
|
||||
min-height: auto !important;
|
||||
height: auto !important;
|
||||
width: auto !important;
|
||||
min-width: auto !important;
|
||||
padding: 0px !important;
|
||||
}
|
||||
|
||||
.Toastify__close-button {
|
||||
margin-top: 10px;
|
||||
margin-right: 10px;
|
||||
margin-top: 10px;
|
||||
margin-right: 10px;
|
||||
}
|
||||
|
||||
.Toastify__progress-bar--default {
|
||||
height: 3px !important;
|
||||
background: #000000 !important;
|
||||
height: 3px !important;
|
||||
background: #000000 !important;
|
||||
}
|
||||
|
||||
.Toastify__toast-container {
|
||||
width: auto !important;
|
||||
width: auto !important;
|
||||
}
|
||||
|
||||
.dark {
|
||||
.Toastify__toast {
|
||||
background-color: #2f3542 !important;
|
||||
}
|
||||
.Toastify__toast {
|
||||
background-color: #2f3542 !important;
|
||||
}
|
||||
|
||||
.Toastify__toast-body,
|
||||
.Toastify__progress-bar--default,
|
||||
.Toastify__close-button {
|
||||
color: white !important;
|
||||
}
|
||||
.Toastify__toast-body,
|
||||
.Toastify__progress-bar--default,
|
||||
.Toastify__close-button {
|
||||
color: white !important;
|
||||
}
|
||||
}
|
|
@ -1,52 +1,52 @@
|
|||
#feedbackmodal {
|
||||
position: absolute;
|
||||
margin: auto;
|
||||
top: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
width: 400px;
|
||||
height: 100px;
|
||||
position: absolute;
|
||||
margin: auto;
|
||||
top: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
width: 400px;
|
||||
height: 100px;
|
||||
}
|
||||
|
||||
.feedback {
|
||||
width: 400px;
|
||||
padding: 5px;
|
||||
width: 400px;
|
||||
padding: 5px;
|
||||
|
||||
h1,
|
||||
.closeModal {
|
||||
font-size: 2.5em;
|
||||
}
|
||||
h1,
|
||||
.closeModal {
|
||||
font-size: 2.5em;
|
||||
}
|
||||
|
||||
span {
|
||||
font-size: 6em;
|
||||
}
|
||||
span {
|
||||
font-size: 6em;
|
||||
}
|
||||
|
||||
button {
|
||||
width: 100%;
|
||||
border-radius: 48px;
|
||||
outline: none;
|
||||
border: none;
|
||||
padding: 15px 20px;
|
||||
font-size: 1.5em;
|
||||
background: linear-gradient(90deg, #ffb032 0%, #dd3b67 100%);
|
||||
color: #ffffff;
|
||||
text-transform: uppercase;
|
||||
cursor: pointer;
|
||||
}
|
||||
button {
|
||||
width: 100%;
|
||||
border-radius: 48px;
|
||||
outline: none;
|
||||
border: none;
|
||||
padding: 15px 20px;
|
||||
font-size: 1.5em;
|
||||
background: linear-gradient(90deg, #ffb032 0%, #dd3b67 100%);
|
||||
color: #ffffff;
|
||||
text-transform: uppercase;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
input[type=text] {
|
||||
width: 100%;
|
||||
font-size: 1em;
|
||||
}
|
||||
input[type=text] {
|
||||
width: 100%;
|
||||
font-size: 1em;
|
||||
}
|
||||
|
||||
input[type=range] {
|
||||
margin-left: 20px;
|
||||
margin-right: 20px;
|
||||
vertical-align: middle;
|
||||
}
|
||||
input[type=range] {
|
||||
margin-left: 20px;
|
||||
margin-right: 20px;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
label.values {
|
||||
font-weight: 700;
|
||||
}
|
||||
}
|
||||
label.values {
|
||||
font-weight: 700;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,362 +1,362 @@
|
|||
.Modal {
|
||||
color: map-get($modal, 'text');
|
||||
background-color: map-get($modal, 'background');
|
||||
box-shadow: 0 0 20px rgba(0, 0, 0, 0.3);
|
||||
border: none;
|
||||
opacity: 1;
|
||||
z-index: -2;
|
||||
padding: 25px;
|
||||
transition: 0.6s;
|
||||
transition-timing-function: ease-in;
|
||||
border-radius: map-get($modal, 'border-radius');
|
||||
-moz-user-select: none;
|
||||
-webkit-user-select: none;
|
||||
user-select: none;
|
||||
scrollbar-width: thin;
|
||||
scrollbar-color: #34495e #bdc3c7;
|
||||
position: relative;
|
||||
color: map-get($modal, 'text');
|
||||
background-color: map-get($modal, 'background');
|
||||
box-shadow: 0 0 20px rgba(0, 0, 0, 0.3);
|
||||
border: none;
|
||||
opacity: 1;
|
||||
z-index: -2;
|
||||
padding: 25px;
|
||||
transition: 0.6s;
|
||||
transition-timing-function: ease-in;
|
||||
border-radius: map-get($modal, 'border-radius');
|
||||
-moz-user-select: none;
|
||||
-webkit-user-select: none;
|
||||
user-select: none;
|
||||
scrollbar-width: thin;
|
||||
scrollbar-color: #34495e #bdc3c7;
|
||||
position: relative;
|
||||
|
||||
&:focus {
|
||||
outline: 0;
|
||||
}
|
||||
&:focus {
|
||||
outline: 0;
|
||||
}
|
||||
}
|
||||
|
||||
.modalLink {
|
||||
color: #5352ed;
|
||||
cursor: pointer;
|
||||
padding-left: 10px;
|
||||
color: #5352ed;
|
||||
cursor: pointer;
|
||||
padding-left: 10px;
|
||||
|
||||
&:hover {
|
||||
opacity: 0.8;
|
||||
}
|
||||
&:hover {
|
||||
opacity: 0.8;
|
||||
}
|
||||
}
|
||||
|
||||
.closeModal {
|
||||
position: absolute;
|
||||
top: 1rem;
|
||||
right: 2rem;
|
||||
font-size: 4em;
|
||||
cursor: pointer;
|
||||
position: absolute;
|
||||
top: 1rem;
|
||||
right: 2rem;
|
||||
font-size: 4em;
|
||||
cursor: pointer;
|
||||
|
||||
&:hover {
|
||||
color: grey;
|
||||
}
|
||||
&:hover {
|
||||
color: grey;
|
||||
}
|
||||
}
|
||||
|
||||
.dark {
|
||||
background-color: #2f3542 !important;
|
||||
color: white !important;
|
||||
background-color: #2f3542 !important;
|
||||
color: white !important;
|
||||
|
||||
.sidebar {
|
||||
background-color: #2a303b !important;
|
||||
}
|
||||
.sidebar {
|
||||
background-color: #2a303b !important;
|
||||
}
|
||||
|
||||
.tab-list-active {
|
||||
background: rgba(161, 159, 159, 0.8);
|
||||
}
|
||||
.tab-list-active {
|
||||
background: rgba(161, 159, 159, 0.8);
|
||||
}
|
||||
|
||||
.tab-list-item {
|
||||
&:hover {
|
||||
background: rgba(161, 159, 159, 0.8);
|
||||
}
|
||||
.tab-list-item {
|
||||
&:hover {
|
||||
background: rgba(161, 159, 159, 0.8);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.ReactModal__Html--open,
|
||||
.ReactModal__Body--open {
|
||||
overflow: hidden;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.Overlay {
|
||||
position: fixed;
|
||||
z-index: 100;
|
||||
top: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
width: 100vw;
|
||||
height: 100vh;
|
||||
display: flex;
|
||||
align-items: baseline;
|
||||
justify-content: center;
|
||||
position: fixed;
|
||||
z-index: 100;
|
||||
top: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
width: 100vw;
|
||||
height: 100vh;
|
||||
display: flex;
|
||||
align-items: baseline;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.ReactModal__Content {
|
||||
min-height: calc(100vh - 30vh);
|
||||
max-height: calc(100vh - 10vh);
|
||||
box-shadow: 0 0 30px 0 rgba(0, 0, 0, 0.25);
|
||||
overflow-y: auto;
|
||||
position: relative;
|
||||
min-height: calc(100vh - 30vh);
|
||||
max-height: calc(100vh - 10vh);
|
||||
box-shadow: 0 0 30px 0 rgba(0, 0, 0, 0.25);
|
||||
overflow-y: auto;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
@media only screen and (max-height: 700px) {
|
||||
.ReactModal__Content {
|
||||
min-height: 500px;
|
||||
max-height: calc(100vh - 30vh);
|
||||
}
|
||||
.ReactModal__Content {
|
||||
min-height: 500px;
|
||||
max-height: calc(100vh - 30vh);
|
||||
}
|
||||
}
|
||||
|
||||
@media only screen and (min-height: 700px) {
|
||||
.ReactModal__Content {
|
||||
min-height: 600px;
|
||||
}
|
||||
.ReactModal__Content {
|
||||
min-height: 600px;
|
||||
}
|
||||
}
|
||||
|
||||
.content {
|
||||
margin-top: -20px;
|
||||
width: 900px;
|
||||
margin-top: -20px;
|
||||
width: 900px;
|
||||
|
||||
h1 {
|
||||
font-size: 35px;
|
||||
}
|
||||
|
||||
p {
|
||||
font-size: 16px;
|
||||
}
|
||||
|
||||
.columns {
|
||||
font-size: 15px;
|
||||
|
||||
li {
|
||||
padding-left: 10px;
|
||||
}
|
||||
h1 {
|
||||
font-size: 35px;
|
||||
}
|
||||
|
||||
p {
|
||||
font-size: 16px;
|
||||
}
|
||||
|
||||
.columns {
|
||||
font-size: 15px;
|
||||
|
||||
li {
|
||||
padding-left: 10px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.ReactModal__Overlay {
|
||||
opacity: 0;
|
||||
transform: scale(0);
|
||||
transition: all 300ms cubic-bezier(.47, 1.64, .41, .8);
|
||||
opacity: 0;
|
||||
transform: scale(0);
|
||||
transition: all 300ms cubic-bezier(.47, 1.64, .41, .8);
|
||||
}
|
||||
|
||||
.ReactModal__Overlay--after-open {
|
||||
opacity: 1;
|
||||
transform: scale(1);
|
||||
opacity: 1;
|
||||
transform: scale(1);
|
||||
}
|
||||
|
||||
.ReactModal__Overlay--before-close {
|
||||
opacity: 0;
|
||||
transform: scale(0);
|
||||
opacity: 0;
|
||||
transform: scale(0);
|
||||
}
|
||||
|
||||
ul.sidebar {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
margin: 0;
|
||||
padding-left: 0;
|
||||
height: 100%;
|
||||
background: #f0f0f0;
|
||||
left: 0;
|
||||
border-radius: 12px 0 0 12px;
|
||||
text-align: left;
|
||||
font-size: 24px;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
margin: 0;
|
||||
padding-left: 0;
|
||||
height: 100%;
|
||||
background: #f0f0f0;
|
||||
left: 0;
|
||||
border-radius: 12px 0 0 12px;
|
||||
text-align: left;
|
||||
font-size: 24px;
|
||||
|
||||
h1 {
|
||||
text-align: center;
|
||||
}
|
||||
h1 {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
svg,
|
||||
li {
|
||||
font-size: 30px;
|
||||
}
|
||||
svg,
|
||||
li {
|
||||
font-size: 30px;
|
||||
}
|
||||
|
||||
svg {
|
||||
vertical-align: middle;
|
||||
font-size: 32px;
|
||||
padding: 5px;
|
||||
}
|
||||
svg {
|
||||
vertical-align: middle;
|
||||
font-size: 32px;
|
||||
padding: 5px;
|
||||
}
|
||||
|
||||
hr {
|
||||
height: 3px;
|
||||
background: rgba(196, 196, 196, 0.74);
|
||||
width: 75%;
|
||||
outline: none;
|
||||
border: none;
|
||||
}
|
||||
hr {
|
||||
height: 3px;
|
||||
background: rgba(196, 196, 196, 0.74);
|
||||
width: 75%;
|
||||
outline: none;
|
||||
border: none;
|
||||
}
|
||||
}
|
||||
|
||||
li {
|
||||
list-style: none;
|
||||
font-size: 24px;
|
||||
padding: 5px 30px 5px 30px;
|
||||
cursor: pointer;
|
||||
margin-top: 2px;
|
||||
list-style: none;
|
||||
font-size: 24px;
|
||||
padding: 5px 30px 5px 30px;
|
||||
cursor: pointer;
|
||||
margin-top: 2px;
|
||||
}
|
||||
|
||||
#modal {
|
||||
position: absolute;
|
||||
margin: auto;
|
||||
top: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
width: 60%;
|
||||
height: 80%;
|
||||
position: absolute;
|
||||
margin: auto;
|
||||
top: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
width: 60%;
|
||||
height: 80%;
|
||||
}
|
||||
|
||||
.tab-list-active {
|
||||
background: rgba(219, 219, 219, 0.72);
|
||||
background: rgba(219, 219, 219, 0.72);
|
||||
}
|
||||
|
||||
@media only screen and (max-width: 1200px) {
|
||||
li.tab-list-item {
|
||||
span {
|
||||
display: none;
|
||||
}
|
||||
li.tab-list-item {
|
||||
span {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@media only screen and (max-width: 1200px) {
|
||||
ul.sidebar {
|
||||
h1 {
|
||||
display: none;
|
||||
}
|
||||
ul.sidebar {
|
||||
h1 {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.tab-list-item {
|
||||
&:hover {
|
||||
background: rgba(219, 219, 219, 0.8);
|
||||
}
|
||||
&:hover {
|
||||
background: rgba(219, 219, 219, 0.8);
|
||||
}
|
||||
}
|
||||
|
||||
ul.sectionSelector {
|
||||
margin: 0;
|
||||
width: 60%;
|
||||
padding-left: 30%;
|
||||
padding-top: 20px;
|
||||
margin: 0;
|
||||
width: 60%;
|
||||
padding-left: 30%;
|
||||
padding-top: 20px;
|
||||
|
||||
.option {
|
||||
display: inline;
|
||||
padding: 15px;
|
||||
font-size: 28px;
|
||||
}
|
||||
.option {
|
||||
display: inline;
|
||||
padding: 15px;
|
||||
font-size: 28px;
|
||||
}
|
||||
}
|
||||
|
||||
@media only screen and (max-width: 1200px) {
|
||||
ul.sectionSelector {
|
||||
span {
|
||||
display: none;
|
||||
padding: 5px !important;
|
||||
}
|
||||
ul.sectionSelector {
|
||||
span {
|
||||
display: none;
|
||||
padding: 5px !important;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.tab-content {
|
||||
position: absolute;
|
||||
left: 30%;
|
||||
width: 60%;
|
||||
position: absolute;
|
||||
left: 30%;
|
||||
width: 60%;
|
||||
|
||||
h3 {
|
||||
text-transform: uppercase;
|
||||
}
|
||||
h3 {
|
||||
text-transform: uppercase;
|
||||
}
|
||||
}
|
||||
|
||||
@media only screen and (min-width: 1300px) {
|
||||
.tab-content {
|
||||
position: absolute;
|
||||
left: 30%;
|
||||
}
|
||||
.tab-content {
|
||||
position: absolute;
|
||||
left: 30%;
|
||||
}
|
||||
}
|
||||
|
||||
.navbar-item {
|
||||
font-size: 22px;
|
||||
font-weight: 500;
|
||||
display: inline-flex;
|
||||
font-size: 22px;
|
||||
font-weight: 500;
|
||||
display: inline-flex;
|
||||
}
|
||||
|
||||
.modalNavbar {
|
||||
position: absolute;
|
||||
left: 20rem;
|
||||
top: 1rem;
|
||||
justify-content: center;
|
||||
position: absolute;
|
||||
left: 20rem;
|
||||
top: 1rem;
|
||||
justify-content: center;
|
||||
|
||||
svg {
|
||||
margin-right: 0.5rem;
|
||||
padding: 3px;
|
||||
}
|
||||
svg {
|
||||
margin-right: 0.5rem;
|
||||
padding: 3px;
|
||||
}
|
||||
}
|
||||
|
||||
@media only screen and (max-width: 1200px) {
|
||||
.modalNavbar {
|
||||
left: 6rem;
|
||||
}
|
||||
.modalNavbar {
|
||||
left: 6rem;
|
||||
}
|
||||
}
|
||||
|
||||
.navbar-item {
|
||||
span,
|
||||
svg {
|
||||
font-size: 1.1em !important;
|
||||
}
|
||||
span,
|
||||
svg {
|
||||
font-size: 1.1em !important;
|
||||
}
|
||||
|
||||
&:hover {
|
||||
background: none;
|
||||
}
|
||||
&:hover {
|
||||
background: none;
|
||||
}
|
||||
}
|
||||
|
||||
@media only screen and (max-width: 1200px) {
|
||||
li.navbar-item {
|
||||
span {
|
||||
display: none;
|
||||
}
|
||||
li.navbar-item {
|
||||
span {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.tabIndicator {
|
||||
width: 40px;
|
||||
height: 3px;
|
||||
background: #000;
|
||||
width: 40px;
|
||||
height: 3px;
|
||||
background: #000;
|
||||
}
|
||||
|
||||
@media only screen and (max-width: 1200px) {
|
||||
.tabContent {
|
||||
left: 20px;
|
||||
}
|
||||
.tabContent {
|
||||
left: 20px;
|
||||
}
|
||||
}
|
||||
|
||||
@media only screen and (min-width: 1200px) {
|
||||
ul.sidebar {
|
||||
width: 310px;
|
||||
align-items: center;
|
||||
}
|
||||
ul.sidebar {
|
||||
width: 310px;
|
||||
align-items: center;
|
||||
}
|
||||
}
|
||||
|
||||
.navbar-item-active {
|
||||
background: map-get($theme-colours, 'gradient');
|
||||
-webkit-background-clip: text;
|
||||
background-clip: text;
|
||||
-webkit-text-fill-color: transparent;
|
||||
|
||||
svg {
|
||||
color: orange;
|
||||
}
|
||||
|
||||
&:hover {
|
||||
opacity: .8;
|
||||
background: map-get($theme-colours, 'gradient');
|
||||
-webkit-background-clip: text;
|
||||
background-clip: text;
|
||||
-webkit-text-fill-color: transparent;
|
||||
|
||||
svg {
|
||||
color: orange;
|
||||
}
|
||||
|
||||
&:hover {
|
||||
opacity: .8;
|
||||
background: map-get($theme-colours, 'gradient');
|
||||
-webkit-background-clip: text;
|
||||
background-clip: text;
|
||||
-webkit-text-fill-color: transparent;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
::-webkit-scrollbar {
|
||||
width: 13px;
|
||||
background: #bdc3c7;
|
||||
border-top-right-radius: map-get($modal, 'border-radius');
|
||||
border-bottom-right-radius: map-get($modal, 'border-radius');
|
||||
width: 13px;
|
||||
background: #bdc3c7;
|
||||
border-top-right-radius: map-get($modal, 'border-radius');
|
||||
border-bottom-right-radius: map-get($modal, 'border-radius');
|
||||
}
|
||||
|
||||
::-webkit-scrollbar-thumb {
|
||||
background: #34495e;
|
||||
border-top-right-radius: map-get($modal, 'border-radius');
|
||||
border-bottom-right-radius: map-get($modal, 'border-radius');
|
||||
background: #34495e;
|
||||
border-top-right-radius: map-get($modal, 'border-radius');
|
||||
border-bottom-right-radius: map-get($modal, 'border-radius');
|
||||
}
|
||||
|
||||
.abouticon {
|
||||
width: 96px;
|
||||
height: auto;
|
||||
border-radius: 50%;
|
||||
padding-right: 5px;
|
||||
}
|
||||
width: 96px;
|
||||
height: auto;
|
||||
border-radius: 50%;
|
||||
padding-right: 5px;
|
||||
}
|
||||
|
|
|
@ -1,14 +1,14 @@
|
|||
.updateContent {
|
||||
width: 400px;
|
||||
padding: 5px;
|
||||
width: 400px;
|
||||
padding: 5px;
|
||||
|
||||
.closeModal {
|
||||
margin-top: 10px;
|
||||
font-size: 45px;
|
||||
}
|
||||
.closeModal {
|
||||
margin-top: 10px;
|
||||
font-size: 45px;
|
||||
}
|
||||
|
||||
img {
|
||||
width: 100%;
|
||||
height: auto;
|
||||
}
|
||||
}
|
||||
img {
|
||||
width: 100%;
|
||||
height: auto;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,58 +1,60 @@
|
|||
.dark {
|
||||
h2.subtitle, svg {
|
||||
color: white !important;
|
||||
}
|
||||
h2.subtitle, svg {
|
||||
color: white !important;
|
||||
}
|
||||
}
|
||||
|
||||
.welcomeModalText {
|
||||
line-height: 2px;
|
||||
line-height: 2px;
|
||||
|
||||
h2.subtitle {
|
||||
font-size: 24px;
|
||||
color: #535353;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
h2.subtitle {
|
||||
font-size: 24px;
|
||||
color: #535353;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
|
||||
h1.welcometitle {
|
||||
font-size: 50px;
|
||||
}
|
||||
h1.welcometitle {
|
||||
font-size: 50px;
|
||||
}
|
||||
}
|
||||
|
||||
.welcomeContent {
|
||||
text-align: center;
|
||||
padding: 25px;
|
||||
text-align: center;
|
||||
padding: 25px;
|
||||
|
||||
a {
|
||||
text-decoration: none;
|
||||
line-height: 20px !important;
|
||||
color: #5352ED;
|
||||
cursor: pointer;
|
||||
&:hover {
|
||||
opacity: 0.8;
|
||||
}
|
||||
}
|
||||
a {
|
||||
text-decoration: none;
|
||||
line-height: 20px !important;
|
||||
color: #5352ED;
|
||||
cursor: pointer;
|
||||
|
||||
img.icon, svg {
|
||||
margin-top: -12px;
|
||||
padding: 10px;
|
||||
cursor: pointer;
|
||||
transition: ease 0.2s;
|
||||
&:hover {
|
||||
transform: scale(1.1);
|
||||
}
|
||||
&:hover {
|
||||
opacity: 0.8;
|
||||
}
|
||||
}
|
||||
|
||||
p {
|
||||
margin-top: 0.7rem;
|
||||
line-height: 1em;
|
||||
}
|
||||
img.icon, svg {
|
||||
margin-top: -12px;
|
||||
padding: 10px;
|
||||
cursor: pointer;
|
||||
transition: ease 0.2s;
|
||||
|
||||
img, svg {
|
||||
height: 24px;
|
||||
width: auto;
|
||||
&:hover {
|
||||
transform: scale(1.1);
|
||||
}
|
||||
}
|
||||
|
||||
p {
|
||||
margin-top: 0.7rem;
|
||||
line-height: 1em;
|
||||
}
|
||||
|
||||
img, svg {
|
||||
height: 24px;
|
||||
width: auto;
|
||||
}
|
||||
}
|
||||
|
||||
.welcomeLink {
|
||||
color: black !important;
|
||||
}
|
||||
color: black !important;
|
||||
}
|
||||
|
|
|
@ -1,17 +1,17 @@
|
|||
// The following CSS is to work around some assumptions made by the react-color-gradient-picker
|
||||
* {
|
||||
box-sizing: inherit; // Required to work around https://github.com/arthay/react-color-gradient-picker/issues/11
|
||||
box-sizing: inherit; // Required to work around https://github.com/arthay/react-color-gradient-picker/issues/11
|
||||
}
|
||||
|
||||
div.picker-area > div.preview > div.color-hue-alpha > div.alpha,
|
||||
div.color-preview-area > div > div:nth-child(5) {
|
||||
display: none;
|
||||
display: none;
|
||||
}
|
||||
|
||||
.ui-color-picker {
|
||||
margin: 8px -12px;
|
||||
margin: 8px -12px;
|
||||
}
|
||||
|
||||
.input-field .label {
|
||||
color: inherit;
|
||||
}
|
||||
color: inherit;
|
||||
}
|
||||
|
|
|
@ -1,199 +1,199 @@
|
|||
{
|
||||
"widgets": {
|
||||
"greeting": {
|
||||
"morning": "Good Morning",
|
||||
"afternoon": "Good Afternoon",
|
||||
"evening": "Good Evening",
|
||||
"christmas": "Merry Christmas",
|
||||
"newyear": "Happy New Year",
|
||||
"halloween": "Happy Halloween"
|
||||
},
|
||||
"background": {
|
||||
"credit": "Photo by",
|
||||
"information": "Information"
|
||||
},
|
||||
"search": "Search",
|
||||
"navbar": {
|
||||
"tooltips": {
|
||||
"update": "Update Patch Notes",
|
||||
"refresh": "Refresh Page"
|
||||
},
|
||||
"notes": {
|
||||
"title": "Notes",
|
||||
"placeholder": "Type here"
|
||||
}
|
||||
}
|
||||
"widgets": {
|
||||
"greeting": {
|
||||
"morning": "Good Morning",
|
||||
"afternoon": "Good Afternoon",
|
||||
"evening": "Good Evening",
|
||||
"christmas": "Merry Christmas",
|
||||
"newyear": "Happy New Year",
|
||||
"halloween": "Happy Halloween"
|
||||
},
|
||||
"modals": {
|
||||
"main": {
|
||||
"title": "Options",
|
||||
"loading": "Loading...",
|
||||
"navbar": {
|
||||
"settings": "Settings",
|
||||
"addons": "My Add-ons",
|
||||
"marketplace": "Marketplace"
|
||||
},
|
||||
"settings": {
|
||||
"sections": {
|
||||
"time": {
|
||||
"title": "Time",
|
||||
"seconds": "Seconds",
|
||||
"twentyfourhour": "24 Hour",
|
||||
"ampm": "AM/PM (12 hour)",
|
||||
"zero": "Zero-padded",
|
||||
"analog": "Analog",
|
||||
"percentageComplete": "Percentage of the Day Complete",
|
||||
"date": {
|
||||
"title": "Date",
|
||||
"short_date": "Short Date",
|
||||
"short_format": "Short Format",
|
||||
"short_separator": {
|
||||
"title": "Short Separator",
|
||||
"default": "Default",
|
||||
"dash": "Dash",
|
||||
"gaps": "Gaps"
|
||||
}
|
||||
}
|
||||
},
|
||||
"quote": {
|
||||
"title": "Quote",
|
||||
"buttons": "Buttons",
|
||||
"copy": "Copy",
|
||||
"tweet": "Tweet",
|
||||
"favourite": "Favourite"
|
||||
},
|
||||
"greeting": {
|
||||
"title": "Greeting",
|
||||
"events": "Events",
|
||||
"default": "Default Greeting Message",
|
||||
"name": "Name for greeting",
|
||||
"birthday_enabled": "Birthday Enabled",
|
||||
"birthday_date": "Birthday Date"
|
||||
},
|
||||
"background": {
|
||||
"title": "Background",
|
||||
"api": "Background API",
|
||||
"blur": "Adjust Blur",
|
||||
"brightness": "Adjust Brightness",
|
||||
"custom_url": "Custom Background URL",
|
||||
"custom_background": "Custom Background",
|
||||
"custom_colour": "Custom Background Colour",
|
||||
"upload": "Upload",
|
||||
"add_colour": "Add colour",
|
||||
"favourite": "Favourite",
|
||||
"view": "View",
|
||||
"refresh": "Refresh",
|
||||
"disabled": "Disabled"
|
||||
},
|
||||
"search": {
|
||||
"title": "Search",
|
||||
"search_engine": "Search Engine",
|
||||
"custom": "Custom Search URL"
|
||||
},
|
||||
"appearance": "Appearance",
|
||||
"language": "Language",
|
||||
"changelog": "Change Log",
|
||||
"about": {
|
||||
"title": "About",
|
||||
"about": {
|
||||
"copyright": "Copyright",
|
||||
"version": {
|
||||
"title": "Version",
|
||||
"update_available": "Update available",
|
||||
"no_update": "No update available"
|
||||
},
|
||||
"resources_used": {
|
||||
"title": "Resources Used",
|
||||
"bg_images": "Background Images",
|
||||
"pin_icon": "Pin Icon"
|
||||
},
|
||||
"contributors": "Contributors",
|
||||
"supporters": "Supporters"
|
||||
}
|
||||
}
|
||||
},
|
||||
"buttons": {
|
||||
"apply": "Apply",
|
||||
"reset": "Reset",
|
||||
"import": "Import",
|
||||
"export": "Export"
|
||||
}
|
||||
},
|
||||
"marketplace": {
|
||||
"photo_packs": "Photo Packs",
|
||||
"quote_packs": "Quote Packs",
|
||||
"preset_settings": "Preset Settings",
|
||||
"themes": "Themes",
|
||||
"product": {
|
||||
"overview": "Overview",
|
||||
"information": "Information",
|
||||
"last_updated": "Last Updated",
|
||||
"version": "Version",
|
||||
"author": "Author",
|
||||
"notice": {
|
||||
"title": "Notice",
|
||||
"description": "In order for the change to take place, the page must be refreshed."
|
||||
},
|
||||
"buttons": {
|
||||
"addtomue": "Add To Mue",
|
||||
"remove": "Remove"
|
||||
},
|
||||
"quote_warning": {
|
||||
"title": "Warning",
|
||||
"description": "This quote pack requests to external servers that may track you!"
|
||||
}
|
||||
},
|
||||
"offline": {
|
||||
"title": "Looks like you're offline",
|
||||
"description": "Please connect to the internet."
|
||||
},
|
||||
"see_more": "See More"
|
||||
},
|
||||
"addons": {
|
||||
"added": "Added",
|
||||
"empty": {
|
||||
"title": "It's empty here",
|
||||
"description": "Head to the marketplace to add some.",
|
||||
"button": "Take me there"
|
||||
},
|
||||
"sideload": "Sideload"
|
||||
}
|
||||
},
|
||||
"update": {
|
||||
"title": "Update",
|
||||
"offline": {
|
||||
"title": "Offline",
|
||||
"description": "Cannot get update logs while in offline mode"
|
||||
},
|
||||
"error": {
|
||||
"title": "Error",
|
||||
"description": "Could not connect to the server"
|
||||
},
|
||||
"read_blog": "Read on the blog here",
|
||||
"contact_support": "Contact us here"
|
||||
},
|
||||
"welcome": {
|
||||
"title": "Welcome to",
|
||||
"information": "Information",
|
||||
"thankyoumessage1": "Thank you for downloading Mue Tab,",
|
||||
"thankyoumessage2": "we hope you enjoy your time with our extension.",
|
||||
"support": "Support",
|
||||
"close": "Close"
|
||||
},
|
||||
"feedback": {
|
||||
"title": "Give us feedback",
|
||||
"question_one": "How would you rate your experience of this Mue build?",
|
||||
"question_two": "What bugs did you encounter in your use of Mue?",
|
||||
"question_three": "How likely would you be to recommend this version of Mue to a friend of colleague?",
|
||||
"submit": "Submit"
|
||||
}
|
||||
"background": {
|
||||
"credit": "Photo by",
|
||||
"information": "Information"
|
||||
},
|
||||
"toasts": {
|
||||
"quote": "Quote copied",
|
||||
"reset": "Reset successfully",
|
||||
"imported": "Successfully imported",
|
||||
"installed": "Successfully installed",
|
||||
"uninstalled": "Successfully removed",
|
||||
"error": "Something went wrong"
|
||||
"search": "Search",
|
||||
"navbar": {
|
||||
"tooltips": {
|
||||
"update": "Update Patch Notes",
|
||||
"refresh": "Refresh Page"
|
||||
},
|
||||
"notes": {
|
||||
"title": "Notes",
|
||||
"placeholder": "Type here"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"modals": {
|
||||
"main": {
|
||||
"title": "Options",
|
||||
"loading": "Loading...",
|
||||
"navbar": {
|
||||
"settings": "Settings",
|
||||
"addons": "My Add-ons",
|
||||
"marketplace": "Marketplace"
|
||||
},
|
||||
"settings": {
|
||||
"sections": {
|
||||
"time": {
|
||||
"title": "Time",
|
||||
"seconds": "Seconds",
|
||||
"twentyfourhour": "24 Hour",
|
||||
"ampm": "AM/PM (12 hour)",
|
||||
"zero": "Zero-padded",
|
||||
"analog": "Analog",
|
||||
"percentageComplete": "Percentage of the Day Complete",
|
||||
"date": {
|
||||
"title": "Date",
|
||||
"short_date": "Short Date",
|
||||
"short_format": "Short Format",
|
||||
"short_separator": {
|
||||
"title": "Short Separator",
|
||||
"default": "Default",
|
||||
"dash": "Dash",
|
||||
"gaps": "Gaps"
|
||||
}
|
||||
}
|
||||
},
|
||||
"quote": {
|
||||
"title": "Quote",
|
||||
"buttons": "Buttons",
|
||||
"copy": "Copy",
|
||||
"tweet": "Tweet",
|
||||
"favourite": "Favourite"
|
||||
},
|
||||
"greeting": {
|
||||
"title": "Greeting",
|
||||
"events": "Events",
|
||||
"default": "Default Greeting Message",
|
||||
"name": "Name for greeting",
|
||||
"birthday_enabled": "Birthday Enabled",
|
||||
"birthday_date": "Birthday Date"
|
||||
},
|
||||
"background": {
|
||||
"title": "Background",
|
||||
"api": "Background API",
|
||||
"blur": "Adjust Blur",
|
||||
"brightness": "Adjust Brightness",
|
||||
"custom_url": "Custom Background URL",
|
||||
"custom_background": "Custom Background",
|
||||
"custom_colour": "Custom Background Colour",
|
||||
"upload": "Upload",
|
||||
"add_colour": "Add colour",
|
||||
"favourite": "Favourite",
|
||||
"view": "View",
|
||||
"refresh": "Refresh",
|
||||
"disabled": "Disabled"
|
||||
},
|
||||
"search": {
|
||||
"title": "Search",
|
||||
"search_engine": "Search Engine",
|
||||
"custom": "Custom Search URL"
|
||||
},
|
||||
"appearance": "Appearance",
|
||||
"language": "Language",
|
||||
"changelog": "Change Log",
|
||||
"about": {
|
||||
"title": "About",
|
||||
"about": {
|
||||
"copyright": "Copyright",
|
||||
"version": {
|
||||
"title": "Version",
|
||||
"update_available": "Update available",
|
||||
"no_update": "No update available"
|
||||
},
|
||||
"resources_used": {
|
||||
"title": "Resources Used",
|
||||
"bg_images": "Background Images",
|
||||
"pin_icon": "Pin Icon"
|
||||
},
|
||||
"contributors": "Contributors",
|
||||
"supporters": "Supporters"
|
||||
}
|
||||
}
|
||||
},
|
||||
"buttons": {
|
||||
"apply": "Apply",
|
||||
"reset": "Reset",
|
||||
"import": "Import",
|
||||
"export": "Export"
|
||||
}
|
||||
},
|
||||
"marketplace": {
|
||||
"photo_packs": "Photo Packs",
|
||||
"quote_packs": "Quote Packs",
|
||||
"preset_settings": "Preset Settings",
|
||||
"themes": "Themes",
|
||||
"product": {
|
||||
"overview": "Overview",
|
||||
"information": "Information",
|
||||
"last_updated": "Last Updated",
|
||||
"version": "Version",
|
||||
"author": "Author",
|
||||
"notice": {
|
||||
"title": "Notice",
|
||||
"description": "In order for the change to take place, the page must be refreshed."
|
||||
},
|
||||
"buttons": {
|
||||
"addtomue": "Add To Mue",
|
||||
"remove": "Remove"
|
||||
},
|
||||
"quote_warning": {
|
||||
"title": "Warning",
|
||||
"description": "This quote pack requests to external servers that may track you!"
|
||||
}
|
||||
},
|
||||
"offline": {
|
||||
"title": "Looks like you're offline",
|
||||
"description": "Please connect to the internet."
|
||||
},
|
||||
"see_more": "See More"
|
||||
},
|
||||
"addons": {
|
||||
"added": "Added",
|
||||
"empty": {
|
||||
"title": "It's empty here",
|
||||
"description": "Head to the marketplace to add some.",
|
||||
"button": "Take me there"
|
||||
},
|
||||
"sideload": "Sideload"
|
||||
}
|
||||
},
|
||||
"update": {
|
||||
"title": "Update",
|
||||
"offline": {
|
||||
"title": "Offline",
|
||||
"description": "Cannot get update logs while in offline mode"
|
||||
},
|
||||
"error": {
|
||||
"title": "Error",
|
||||
"description": "Could not connect to the server"
|
||||
},
|
||||
"read_blog": "Read on the blog here",
|
||||
"contact_support": "Contact us here"
|
||||
},
|
||||
"welcome": {
|
||||
"title": "Welcome to",
|
||||
"information": "Information",
|
||||
"thankyoumessage1": "Thank you for downloading Mue Tab,",
|
||||
"thankyoumessage2": "we hope you enjoy your time with our extension.",
|
||||
"support": "Support",
|
||||
"close": "Close"
|
||||
},
|
||||
"feedback": {
|
||||
"title": "Give us feedback",
|
||||
"question_one": "How would you rate your experience of this Mue build?",
|
||||
"question_two": "What bugs did you encounter in your use of Mue?",
|
||||
"question_three": "How likely would you be to recommend this version of Mue to a friend of colleague?",
|
||||
"submit": "Submit"
|
||||
}
|
||||
},
|
||||
"toasts": {
|
||||
"quote": "Quote copied",
|
||||
"reset": "Reset successfully",
|
||||
"imported": "Successfully imported",
|
||||
"installed": "Successfully installed",
|
||||
"uninstalled": "Successfully removed",
|
||||
"error": "Something went wrong"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,18 +1,18 @@
|
|||
{
|
||||
"modals": {
|
||||
"main": {
|
||||
"settings": {
|
||||
"sections": {
|
||||
"quote": {
|
||||
"favourite": "Favorite"
|
||||
},
|
||||
"background": {
|
||||
"custom_colour": "Custom Background Color",
|
||||
"add_colour": "Add color",
|
||||
"favourite": "Favorite"
|
||||
}
|
||||
}
|
||||
}
|
||||
"modals": {
|
||||
"main": {
|
||||
"settings": {
|
||||
"sections": {
|
||||
"quote": {
|
||||
"favourite": "Favorite"
|
||||
},
|
||||
"background": {
|
||||
"custom_colour": "Custom Background Color",
|
||||
"add_colour": "Add color",
|
||||
"favourite": "Favorite"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,134 +1,134 @@
|
|||
{
|
||||
"greeting": {
|
||||
"morning": "Buenos días",
|
||||
"afternoon": "Buenas tardes",
|
||||
"evening": "Buenas noches",
|
||||
"christmas": "Feliz Navidad",
|
||||
"newyear": "Feliz año nuevo",
|
||||
"halloween": "Feliz Halloween"
|
||||
},
|
||||
"credit": "Foto por",
|
||||
"search": "Buscar",
|
||||
"modals": {
|
||||
"title": "Opciones",
|
||||
"settings": "Ajustes",
|
||||
"addons": "Mis complementos",
|
||||
"marketplace": "Tienda"
|
||||
},
|
||||
"settings": {
|
||||
"time": {
|
||||
"title": "Tiempo",
|
||||
"seconds": "Segundos",
|
||||
"twentyfourhour": "24 Horas",
|
||||
"ampm": "AM/PM (12 horas)",
|
||||
"zero": "Sin ceros",
|
||||
"analog": "Analógico"
|
||||
},
|
||||
"greeting": {
|
||||
"morning": "Buenos días",
|
||||
"afternoon": "Buenas tardes",
|
||||
"evening": "Buenas noches",
|
||||
"christmas": "Feliz Navidad",
|
||||
"newyear": "Feliz año nuevo",
|
||||
"halloween": "Feliz Halloween"
|
||||
"title": "Saludos",
|
||||
"events": "Eventos",
|
||||
"default": "Mensaje del saludo por defecto",
|
||||
"name": "Nombre para el saludo"
|
||||
},
|
||||
"credit": "Foto por",
|
||||
"search": "Buscar",
|
||||
"modals": {
|
||||
"title": "Opciones",
|
||||
"settings": "Ajustes",
|
||||
"addons": "Mis complementos",
|
||||
"marketplace": "Tienda"
|
||||
"quote": {
|
||||
"title": "Cita",
|
||||
"copy": "Botón de copiar",
|
||||
"tweet": "Botón de Tweet",
|
||||
"favourite": "Botón de favoritos"
|
||||
},
|
||||
"settings": {
|
||||
"time": {
|
||||
"title": "Tiempo",
|
||||
"seconds": "Segundos",
|
||||
"twentyfourhour": "24 Horas",
|
||||
"ampm": "AM/PM (12 horas)",
|
||||
"zero": "Sin ceros",
|
||||
"analog": "Analógico"
|
||||
},
|
||||
"greeting": {
|
||||
"title": "Saludos",
|
||||
"events": "Eventos",
|
||||
"default": "Mensaje del saludo por defecto",
|
||||
"name": "Nombre para el saludo"
|
||||
},
|
||||
"quote": {
|
||||
"title": "Cita",
|
||||
"copy": "Botón de copiar",
|
||||
"tweet": "Botón de Tweet",
|
||||
"favourite": "Botón de favoritos"
|
||||
},
|
||||
"background": {
|
||||
"title": "Fondo",
|
||||
"API": "Fondos API",
|
||||
"blur": "Ajustar difuminado",
|
||||
"brightness": "Ajustar brillo",
|
||||
"customURL": "URL del fondo personalizado",
|
||||
"custombackground": "Fondo personalizado",
|
||||
"customcolour": "Color del fondo personalizado",
|
||||
"upload": "Subir",
|
||||
"addcolour": "Añadir color",
|
||||
"favourite": "Favorito",
|
||||
"view": "Ver",
|
||||
"refresh": "Refrescar",
|
||||
"disabled": "Desactivado"
|
||||
},
|
||||
"searchbar": {
|
||||
"title": "Barra de búsqueda",
|
||||
"searchengine": "Motor de búsqueda",
|
||||
"custom": "URL de búsqueda personalizada"
|
||||
},
|
||||
"offline": "Modo Offline",
|
||||
"dark": "Tema Oscuro",
|
||||
"experimental": {
|
||||
"title": "Experimental",
|
||||
"animations": "Animaciones",
|
||||
"voicesearch": "Búsqueda por voz",
|
||||
"nightmode": "Modo nocturno automático"
|
||||
},
|
||||
"language": "Lenguaje",
|
||||
"apply": "Aplicar",
|
||||
"reset": "Reiniciar",
|
||||
"import": "Importar",
|
||||
"export": "Exportar"
|
||||
"background": {
|
||||
"title": "Fondo",
|
||||
"API": "Fondos API",
|
||||
"blur": "Ajustar difuminado",
|
||||
"brightness": "Ajustar brillo",
|
||||
"customURL": "URL del fondo personalizado",
|
||||
"custombackground": "Fondo personalizado",
|
||||
"customcolour": "Color del fondo personalizado",
|
||||
"upload": "Subir",
|
||||
"addcolour": "Añadir color",
|
||||
"favourite": "Favorito",
|
||||
"view": "Ver",
|
||||
"refresh": "Refrescar",
|
||||
"disabled": "Desactivado"
|
||||
},
|
||||
"update": {
|
||||
"title": "Actualizar",
|
||||
"offline": {
|
||||
"title": "Offline",
|
||||
"description": "No se pueden obtener actualizaciones en modo sin conexión"
|
||||
},
|
||||
"error": {
|
||||
"title": "Error",
|
||||
"description": "No se pudo conectar con el servidor"
|
||||
},
|
||||
"loading": "Cargando...",
|
||||
"readblog": "Leer en el blog aquí",
|
||||
"contactsupport": "Contáctanos aquí"
|
||||
"searchbar": {
|
||||
"title": "Barra de búsqueda",
|
||||
"searchengine": "Motor de búsqueda",
|
||||
"custom": "URL de búsqueda personalizada"
|
||||
},
|
||||
"toasts": {
|
||||
"quote": "Cita copiada",
|
||||
"reset": "Restablecido correctamente",
|
||||
"installed": "Instalado correctamente",
|
||||
"removed": "Retirado correctamente",
|
||||
"error": "Algo salió mal",
|
||||
"imported": "Importado correctamente"
|
||||
"offline": "Modo Offline",
|
||||
"dark": "Tema Oscuro",
|
||||
"experimental": {
|
||||
"title": "Experimental",
|
||||
"animations": "Animaciones",
|
||||
"voicesearch": "Búsqueda por voz",
|
||||
"nightmode": "Modo nocturno automático"
|
||||
},
|
||||
"marketplace": {
|
||||
"photo_packs": "Paquetes de fotos",
|
||||
"quote_packs": "Paquetes de citas",
|
||||
"preset_settings": "Ajustes preestablecidos",
|
||||
"themes": "Tema",
|
||||
"product": {
|
||||
"overview": "Visión general",
|
||||
"information": "Información",
|
||||
"last_updated": "Última actualización",
|
||||
"version": "Versión",
|
||||
"author": "Autor",
|
||||
"notice": {
|
||||
"title": "Aviso",
|
||||
"description": "Para que se realice el cambio, la página debe actualizarse."
|
||||
},
|
||||
"buttons": {
|
||||
"addtomue": "Añadir a Mue",
|
||||
"remove": "Remover"
|
||||
},
|
||||
"quoteWarning": {
|
||||
"title": "Advertencia",
|
||||
"description": "¡Este paquete de citas solicita a servidores externos que pueden rastrearlo!"
|
||||
}
|
||||
},
|
||||
"offline": {
|
||||
"title": "Parece que estás desconectado",
|
||||
"description": "Por favor conéctate a Internet."
|
||||
},
|
||||
"see_more": "Ver más"
|
||||
"language": "Lenguaje",
|
||||
"apply": "Aplicar",
|
||||
"reset": "Reiniciar",
|
||||
"import": "Importar",
|
||||
"export": "Exportar"
|
||||
},
|
||||
"update": {
|
||||
"title": "Actualizar",
|
||||
"offline": {
|
||||
"title": "Offline",
|
||||
"description": "No se pueden obtener actualizaciones en modo sin conexión"
|
||||
},
|
||||
"addons": {
|
||||
"added": "Añadido",
|
||||
"empty": {
|
||||
"title": "Está vacío aquí",
|
||||
"description": "Dirígete a la tienda para agregar algunos.",
|
||||
"button": "Llévame allí"
|
||||
},
|
||||
"sideload": "Cargar complemento localmente"
|
||||
}
|
||||
}
|
||||
"error": {
|
||||
"title": "Error",
|
||||
"description": "No se pudo conectar con el servidor"
|
||||
},
|
||||
"loading": "Cargando...",
|
||||
"readblog": "Leer en el blog aquí",
|
||||
"contactsupport": "Contáctanos aquí"
|
||||
},
|
||||
"toasts": {
|
||||
"quote": "Cita copiada",
|
||||
"reset": "Restablecido correctamente",
|
||||
"installed": "Instalado correctamente",
|
||||
"removed": "Retirado correctamente",
|
||||
"error": "Algo salió mal",
|
||||
"imported": "Importado correctamente"
|
||||
},
|
||||
"marketplace": {
|
||||
"photo_packs": "Paquetes de fotos",
|
||||
"quote_packs": "Paquetes de citas",
|
||||
"preset_settings": "Ajustes preestablecidos",
|
||||
"themes": "Tema",
|
||||
"product": {
|
||||
"overview": "Visión general",
|
||||
"information": "Información",
|
||||
"last_updated": "Última actualización",
|
||||
"version": "Versión",
|
||||
"author": "Autor",
|
||||
"notice": {
|
||||
"title": "Aviso",
|
||||
"description": "Para que se realice el cambio, la página debe actualizarse."
|
||||
},
|
||||
"buttons": {
|
||||
"addtomue": "Añadir a Mue",
|
||||
"remove": "Remover"
|
||||
},
|
||||
"quoteWarning": {
|
||||
"title": "Advertencia",
|
||||
"description": "¡Este paquete de citas solicita a servidores externos que pueden rastrearlo!"
|
||||
}
|
||||
},
|
||||
"offline": {
|
||||
"title": "Parece que estás desconectado",
|
||||
"description": "Por favor conéctate a Internet."
|
||||
},
|
||||
"see_more": "Ver más"
|
||||
},
|
||||
"addons": {
|
||||
"added": "Añadido",
|
||||
"empty": {
|
||||
"title": "Está vacío aquí",
|
||||
"description": "Dirígete a la tienda para agregar algunos.",
|
||||
"button": "Llévame allí"
|
||||
},
|
||||
"sideload": "Cargar complemento localmente"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,133 +1,133 @@
|
|||
{
|
||||
"greeting": {
|
||||
"morning": "Bonjour",
|
||||
"afternoon": "Bon après-midi",
|
||||
"evening": "Bonsoir",
|
||||
"christmas": "Joyeux Noël",
|
||||
"newyear": "Bonne année",
|
||||
"halloween": "Joyeux Halloween"
|
||||
},
|
||||
"credit": "Photo par",
|
||||
"search": "Rechercher",
|
||||
"modals": {
|
||||
"title": "Options",
|
||||
"settings": "Paramètres",
|
||||
"addons": "Mes Options",
|
||||
"marketplace": "Marché"
|
||||
},
|
||||
"settings": {
|
||||
"time": {
|
||||
"title": "Heure",
|
||||
"seconds": "Secondes",
|
||||
"twentyfourhour": "24 heures",
|
||||
"ampm": "AM/PM (12 heures)",
|
||||
"zero": "Complétion de zéros",
|
||||
"analog": "Analogique"
|
||||
},
|
||||
"greeting": {
|
||||
"morning": "Bonjour",
|
||||
"afternoon": "Bon après-midi",
|
||||
"evening": "Bonsoir",
|
||||
"christmas": "Joyeux Noël",
|
||||
"newyear": "Bonne année",
|
||||
"halloween": "Joyeux Halloween"
|
||||
"title": "Salutation",
|
||||
"events": "Événements",
|
||||
"default": "Salutation par défaut",
|
||||
"name": "Nom pour salutation"
|
||||
},
|
||||
"credit": "Photo par",
|
||||
"search": "Rechercher",
|
||||
"modals": {
|
||||
"title": "Options",
|
||||
"settings": "Paramètres",
|
||||
"addons": "Mes Options",
|
||||
"marketplace": "Marché"
|
||||
"quote": {
|
||||
"title": "Citation",
|
||||
"copy": "Bouton Copier",
|
||||
"tweet": "Bouton Twitter",
|
||||
"favourite": "Bouton Ajouter aux favoris"
|
||||
},
|
||||
"settings": {
|
||||
"time": {
|
||||
"title": "Heure",
|
||||
"seconds": "Secondes",
|
||||
"twentyfourhour": "24 heures",
|
||||
"ampm": "AM/PM (12 heures)",
|
||||
"zero": "Complétion de zéros",
|
||||
"analog": "Analogique"
|
||||
},
|
||||
"greeting": {
|
||||
"title": "Salutation",
|
||||
"events": "Événements",
|
||||
"default": "Salutation par défaut",
|
||||
"name": "Nom pour salutation"
|
||||
},
|
||||
"quote": {
|
||||
"title": "Citation",
|
||||
"copy": "Bouton Copier",
|
||||
"tweet": "Bouton Twitter",
|
||||
"favourite": "Bouton Ajouter aux favoris"
|
||||
},
|
||||
"background": {
|
||||
"title": "Fond",
|
||||
"api": "Source",
|
||||
"blur": "Ajuster le flou",
|
||||
"brightness": "Ajuster la luminosité",
|
||||
"custom_url": "URL d'arrière-plan personnalisé",
|
||||
"custom_background": "Arrière-plan personnalisé",
|
||||
"custom_colour": "Couleur d'arrière-plan personnalisée",
|
||||
"upload": "Ajouter",
|
||||
"add_colour": "Ajouter une couleur",
|
||||
"favourite": "Ajouter aux favoris",
|
||||
"view": "Mode vue",
|
||||
"refresh": "Rafraîchir"
|
||||
},
|
||||
"searchbar": {
|
||||
"title": "Barre de Recherche",
|
||||
"search_engine": "Moteur de recherche",
|
||||
"custom": "URL de recherche personnalisée"
|
||||
},
|
||||
"offline": "Mode Hors-Ligne",
|
||||
"dark": "Thème sombre",
|
||||
"experimental": {
|
||||
"title": "Expérimental",
|
||||
"animations": "Animations",
|
||||
"favourite": "Bouton Ajouter aux favoris",
|
||||
"voice_search": "Recherche vocale"
|
||||
},
|
||||
"language": "Langue",
|
||||
"apply": "Appliquer",
|
||||
"reset": "Réinitialiser",
|
||||
"import": "Importer",
|
||||
"export": "Exporter"
|
||||
"background": {
|
||||
"title": "Fond",
|
||||
"api": "Source",
|
||||
"blur": "Ajuster le flou",
|
||||
"brightness": "Ajuster la luminosité",
|
||||
"custom_url": "URL d'arrière-plan personnalisé",
|
||||
"custom_background": "Arrière-plan personnalisé",
|
||||
"custom_colour": "Couleur d'arrière-plan personnalisée",
|
||||
"upload": "Ajouter",
|
||||
"add_colour": "Ajouter une couleur",
|
||||
"favourite": "Ajouter aux favoris",
|
||||
"view": "Mode vue",
|
||||
"refresh": "Rafraîchir"
|
||||
},
|
||||
"update": {
|
||||
"title": "Mise à jour",
|
||||
"offline": {
|
||||
"title": "Hors ligne",
|
||||
"description": "Impossible de se connecter à Internet"
|
||||
},
|
||||
"error": {
|
||||
"title": "Erreur",
|
||||
"description": "Impossible de se connecter au serveur"
|
||||
},
|
||||
"loading": "Chargement...",
|
||||
"read_blog": "Lire sur le blog ",
|
||||
"contact_support": "Contactez-nous "
|
||||
"searchbar": {
|
||||
"title": "Barre de Recherche",
|
||||
"search_engine": "Moteur de recherche",
|
||||
"custom": "URL de recherche personnalisée"
|
||||
},
|
||||
"toasts": {
|
||||
"quote": "Citation copiée",
|
||||
"reset": "Réinitialisé avec succès",
|
||||
"installed": "Installé avec succès",
|
||||
"removed": "Enlevé avec succès",
|
||||
"error": "Quelque chose s'est mal passé",
|
||||
"imported": "Importé avec succès"
|
||||
"offline": "Mode Hors-Ligne",
|
||||
"dark": "Thème sombre",
|
||||
"experimental": {
|
||||
"title": "Expérimental",
|
||||
"animations": "Animations",
|
||||
"favourite": "Bouton Ajouter aux favoris",
|
||||
"voice_search": "Recherche vocale"
|
||||
},
|
||||
"marketplace": {
|
||||
"photo_packs": "Packs Photos",
|
||||
"quote_packs": "Packs Citations",
|
||||
"preset_settings": "Paramètres prédéfinis",
|
||||
"themes": "Thèmes",
|
||||
"product": {
|
||||
"overview": "Aperçu",
|
||||
"information": "Information",
|
||||
"last_updated": "Dernière mise à jour",
|
||||
"version": "Version",
|
||||
"author": "Auteur",
|
||||
"notice": {
|
||||
"title": "Remarque",
|
||||
"description": "Pour appliquer les changements, veuillez recharger la page."
|
||||
},
|
||||
"buttons": {
|
||||
"addtomue": "Ajouter à Mue",
|
||||
"remove": "Enlever"
|
||||
},
|
||||
"quote_warning": {
|
||||
"title": "Attention",
|
||||
"description": "Ce pack fait appel à des serveurs externes qui sont susceptibles de vous tracer !"
|
||||
}
|
||||
},
|
||||
"offline": {
|
||||
"title": "Vous êtes hors ligne",
|
||||
"description": "Veuillez vous connecter à Internet."
|
||||
},
|
||||
"see_more": "Voir plus"
|
||||
"language": "Langue",
|
||||
"apply": "Appliquer",
|
||||
"reset": "Réinitialiser",
|
||||
"import": "Importer",
|
||||
"export": "Exporter"
|
||||
},
|
||||
"update": {
|
||||
"title": "Mise à jour",
|
||||
"offline": {
|
||||
"title": "Hors ligne",
|
||||
"description": "Impossible de se connecter à Internet"
|
||||
},
|
||||
"addons": {
|
||||
"added": "Ajoutées",
|
||||
"empty": {
|
||||
"title": "C'est vide par ici",
|
||||
"description": "Dirigez vous vers le marché pour ajouter des options.",
|
||||
"button": "Naviguer vers le marché"
|
||||
},
|
||||
"sideload": "Charger"
|
||||
}
|
||||
"error": {
|
||||
"title": "Erreur",
|
||||
"description": "Impossible de se connecter au serveur"
|
||||
},
|
||||
"loading": "Chargement...",
|
||||
"read_blog": "Lire sur le blog ",
|
||||
"contact_support": "Contactez-nous "
|
||||
},
|
||||
"toasts": {
|
||||
"quote": "Citation copiée",
|
||||
"reset": "Réinitialisé avec succès",
|
||||
"installed": "Installé avec succès",
|
||||
"removed": "Enlevé avec succès",
|
||||
"error": "Quelque chose s'est mal passé",
|
||||
"imported": "Importé avec succès"
|
||||
},
|
||||
"marketplace": {
|
||||
"photo_packs": "Packs Photos",
|
||||
"quote_packs": "Packs Citations",
|
||||
"preset_settings": "Paramètres prédéfinis",
|
||||
"themes": "Thèmes",
|
||||
"product": {
|
||||
"overview": "Aperçu",
|
||||
"information": "Information",
|
||||
"last_updated": "Dernière mise à jour",
|
||||
"version": "Version",
|
||||
"author": "Auteur",
|
||||
"notice": {
|
||||
"title": "Remarque",
|
||||
"description": "Pour appliquer les changements, veuillez recharger la page."
|
||||
},
|
||||
"buttons": {
|
||||
"addtomue": "Ajouter à Mue",
|
||||
"remove": "Enlever"
|
||||
},
|
||||
"quote_warning": {
|
||||
"title": "Attention",
|
||||
"description": "Ce pack fait appel à des serveurs externes qui sont susceptibles de vous tracer !"
|
||||
}
|
||||
},
|
||||
"offline": {
|
||||
"title": "Vous êtes hors ligne",
|
||||
"description": "Veuillez vous connecter à Internet."
|
||||
},
|
||||
"see_more": "Voir plus"
|
||||
},
|
||||
"addons": {
|
||||
"added": "Ajoutées",
|
||||
"empty": {
|
||||
"title": "C'est vide par ici",
|
||||
"description": "Dirigez vous vers le marché pour ajouter des options.",
|
||||
"button": "Naviguer vers le marché"
|
||||
},
|
||||
"sideload": "Charger"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,116 +1,116 @@
|
|||
{
|
||||
"greeting": {
|
||||
"morning": "Goedemorgen",
|
||||
"afternoon": "Goedemiddag",
|
||||
"evening": "Goedenavond",
|
||||
"christmas": "Fijne kerstdagen",
|
||||
"newyear": "Gelukkig nieuw jaar",
|
||||
"halloween": "Fijne halloween"
|
||||
},
|
||||
"credit": "Afbeelding door",
|
||||
"search": "Zoeken",
|
||||
"modals": {
|
||||
"title": "Opties",
|
||||
"settings": "Instellingen",
|
||||
"addons": "Mijn Extensies",
|
||||
"marketplace": "Marktplaats"
|
||||
},
|
||||
"settings": {
|
||||
"time": {
|
||||
"title": "Tijd",
|
||||
"seconds": "Seconden",
|
||||
"twentyfourhour": "24 uurs",
|
||||
"ampm": "AM/PM (12 uurs)",
|
||||
"zero": "Nul Opvulling",
|
||||
"analog": "Analoog"
|
||||
},
|
||||
"greeting": {
|
||||
"morning": "Goedemorgen",
|
||||
"afternoon": "Goedemiddag",
|
||||
"evening": "Goedenavond",
|
||||
"christmas": "Fijne kerstdagen",
|
||||
"newyear": "Gelukkig nieuw jaar",
|
||||
"halloween": "Fijne halloween"
|
||||
"title": "Groeten",
|
||||
"events": "Evenementen",
|
||||
"default": "Standaard begroetingsnaam",
|
||||
"name": "Naam Voor Groet"
|
||||
},
|
||||
"credit": "Afbeelding door",
|
||||
"search": "Zoeken",
|
||||
"modals": {
|
||||
"title": "Opties",
|
||||
"settings": "Instellingen",
|
||||
"addons": "Mijn Extensies",
|
||||
"marketplace": "Marktplaats"
|
||||
"quote": {
|
||||
"title": "Citaat",
|
||||
"copy": "Kopieer Knop"
|
||||
},
|
||||
"settings": {
|
||||
"time": {
|
||||
"title": "Tijd",
|
||||
"seconds": "Seconden",
|
||||
"twentyfourhour": "24 uurs",
|
||||
"ampm": "AM/PM (12 uurs)",
|
||||
"zero": "Nul Opvulling",
|
||||
"analog": "Analoog"
|
||||
},
|
||||
"greeting": {
|
||||
"title": "Groeten",
|
||||
"events": "Evenementen",
|
||||
"default": "Standaard begroetingsnaam",
|
||||
"name": "Naam Voor Groet"
|
||||
},
|
||||
"quote": {
|
||||
"title": "Citaat",
|
||||
"copy": "Kopieer Knop"
|
||||
},
|
||||
"background": {
|
||||
"title": "Achtergrond",
|
||||
"api": "Achtergrond API",
|
||||
"blur": "Onscherpte Aanpassen",
|
||||
"custom_url": "Aangepaste Achtergrond URL",
|
||||
"custom_background": "Aangepaste Achtergrond",
|
||||
"custom_colour": "Aangepaste Achtergrondkleur",
|
||||
"upload": "Uploaden",
|
||||
"add_colour": "Kleur toevoegen"
|
||||
},
|
||||
"searchbar": {
|
||||
"title": "Zoekbalk",
|
||||
"search_engine": "Zoekmachine"
|
||||
},
|
||||
"offline": "Offline Modus",
|
||||
"dark": "Donker Thema",
|
||||
"experimental": {
|
||||
"title": "Experimenteel",
|
||||
"animations": "Animaties"
|
||||
},
|
||||
"language": "Taal",
|
||||
"apply": "Toepassen",
|
||||
"reset": "Resetten",
|
||||
"import": "Importeren",
|
||||
"export": "Exporteren"
|
||||
"background": {
|
||||
"title": "Achtergrond",
|
||||
"api": "Achtergrond API",
|
||||
"blur": "Onscherpte Aanpassen",
|
||||
"custom_url": "Aangepaste Achtergrond URL",
|
||||
"custom_background": "Aangepaste Achtergrond",
|
||||
"custom_colour": "Aangepaste Achtergrondkleur",
|
||||
"upload": "Uploaden",
|
||||
"add_colour": "Kleur toevoegen"
|
||||
},
|
||||
"update": {
|
||||
"title": "Veranderingen",
|
||||
"offline": {
|
||||
"title": "Offline",
|
||||
"description": "Kan veranderingen logboek niet verkrijgen in offline modus"
|
||||
},
|
||||
"error": {
|
||||
"title": "Fout",
|
||||
"content": "Kon niet verbinden met de servers"
|
||||
},
|
||||
"loading": "Aan het laden..."
|
||||
"searchbar": {
|
||||
"title": "Zoekbalk",
|
||||
"search_engine": "Zoekmachine"
|
||||
},
|
||||
"toasts": {
|
||||
"quote": "Quote Copied",
|
||||
"reset": "Reset successfully",
|
||||
"installed": "Successvol geïnstalleerd",
|
||||
"removed": "Successvol verwijderd",
|
||||
"error": "Iets is verkeerd gegaan"
|
||||
"offline": "Offline Modus",
|
||||
"dark": "Donker Thema",
|
||||
"experimental": {
|
||||
"title": "Experimenteel",
|
||||
"animations": "Animaties"
|
||||
},
|
||||
"marketplace": {
|
||||
"photo_packs": "Afbeelding Pakketten",
|
||||
"quote_packs": "Citaat Pakketten",
|
||||
"preset_settings": "Vooraf ingestelde instellingen",
|
||||
"themes": "Themas",
|
||||
"product": {
|
||||
"overview": "Overzicht",
|
||||
"information": "Informatie",
|
||||
"last_updated": "Laatst Geüpdatet",
|
||||
"version": "Versie",
|
||||
"author": "Auteur",
|
||||
"notice": {
|
||||
"title": "Aankondiging",
|
||||
"description": "De veranderingen gaan in zodra je de pagina herlaad."
|
||||
},
|
||||
"buttons": {
|
||||
"addtomue": "Voeg aan Mue toe",
|
||||
"remove": "Verwijder"
|
||||
}
|
||||
},
|
||||
"offline": {
|
||||
"title": "Het ziet er uit dat je offline bent",
|
||||
"description": "Verbind met het internet."
|
||||
},
|
||||
"see_more": "Zie Meer"
|
||||
"language": "Taal",
|
||||
"apply": "Toepassen",
|
||||
"reset": "Resetten",
|
||||
"import": "Importeren",
|
||||
"export": "Exporteren"
|
||||
},
|
||||
"update": {
|
||||
"title": "Veranderingen",
|
||||
"offline": {
|
||||
"title": "Offline",
|
||||
"description": "Kan veranderingen logboek niet verkrijgen in offline modus"
|
||||
},
|
||||
"addons": {
|
||||
"added": "Toegevoegd",
|
||||
"empty": {
|
||||
"title": "Het is hier leeg",
|
||||
"description": "Ga naar de marktplaats om een paar extensies toe te veogen.",
|
||||
"button": "Breng me naar de marktplaats"
|
||||
}
|
||||
"error": {
|
||||
"title": "Fout",
|
||||
"content": "Kon niet verbinden met de servers"
|
||||
},
|
||||
"loading": "Aan het laden..."
|
||||
},
|
||||
"toasts": {
|
||||
"quote": "Quote Copied",
|
||||
"reset": "Reset successfully",
|
||||
"installed": "Successvol geïnstalleerd",
|
||||
"removed": "Successvol verwijderd",
|
||||
"error": "Iets is verkeerd gegaan"
|
||||
},
|
||||
"marketplace": {
|
||||
"photo_packs": "Afbeelding Pakketten",
|
||||
"quote_packs": "Citaat Pakketten",
|
||||
"preset_settings": "Vooraf ingestelde instellingen",
|
||||
"themes": "Themas",
|
||||
"product": {
|
||||
"overview": "Overzicht",
|
||||
"information": "Informatie",
|
||||
"last_updated": "Laatst Geüpdatet",
|
||||
"version": "Versie",
|
||||
"author": "Auteur",
|
||||
"notice": {
|
||||
"title": "Aankondiging",
|
||||
"description": "De veranderingen gaan in zodra je de pagina herlaad."
|
||||
},
|
||||
"buttons": {
|
||||
"addtomue": "Voeg aan Mue toe",
|
||||
"remove": "Verwijder"
|
||||
}
|
||||
},
|
||||
"offline": {
|
||||
"title": "Het ziet er uit dat je offline bent",
|
||||
"description": "Verbind met het internet."
|
||||
},
|
||||
"see_more": "Zie Meer"
|
||||
},
|
||||
"addons": {
|
||||
"added": "Toegevoegd",
|
||||
"empty": {
|
||||
"title": "Het is hier leeg",
|
||||
"description": "Ga naar de marktplaats om een paar extensies toe te veogen.",
|
||||
"button": "Breng me naar de marktplaats"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,115 +1,115 @@
|
|||
{
|
||||
"greeting": {
|
||||
"morning": "God Morgen",
|
||||
"afternoon": "God Ettermiddag",
|
||||
"evening": "God Kveld",
|
||||
"christmas": "God Jul",
|
||||
"newyear": "Godt Nyttår",
|
||||
"halloween": "Ha en god Halloween"
|
||||
},
|
||||
"credit": "Bilde av",
|
||||
"search": "Søk",
|
||||
"modals": {
|
||||
"title": "Options",
|
||||
"settings": "Instillinger",
|
||||
"addons": "Mine add-ons",
|
||||
"marketplace": "Markedsplass"
|
||||
},
|
||||
"settings": {
|
||||
"time": {
|
||||
"title": "Tid",
|
||||
"seconds": "Sekunder",
|
||||
"twentyfourhour": "24 Timer",
|
||||
"ampm": "AM/PM (12 Timer)",
|
||||
"zero": "Ekstra Null",
|
||||
"analog": "Analog"
|
||||
},
|
||||
"greeting": {
|
||||
"morning": "God Morgen",
|
||||
"afternoon": "God Ettermiddag",
|
||||
"evening": "God Kveld",
|
||||
"christmas": "God Jul",
|
||||
"newyear": "Godt Nyttår",
|
||||
"halloween": "Ha en god Halloween"
|
||||
"title": "Hallo",
|
||||
"events": "Planer",
|
||||
"default": "Standard Hallo Melding",
|
||||
"name": "Navn for Hallo"
|
||||
},
|
||||
"credit": "Bilde av",
|
||||
"search": "Søk",
|
||||
"modals": {
|
||||
"title": "Options",
|
||||
"settings": "Instillinger",
|
||||
"addons": "Mine add-ons",
|
||||
"marketplace": "Markedsplass"
|
||||
"quote": {
|
||||
"title": "Sitat",
|
||||
"copy": "Kopier knapp"
|
||||
},
|
||||
"settings": {
|
||||
"time": {
|
||||
"title": "Tid",
|
||||
"seconds": "Sekunder",
|
||||
"twentyfourhour": "24 Timer",
|
||||
"ampm": "AM/PM (12 Timer)",
|
||||
"zero": "Ekstra Null",
|
||||
"analog": "Analog"
|
||||
},
|
||||
"greeting": {
|
||||
"title": "Hallo",
|
||||
"events": "Planer",
|
||||
"default": "Standard Hallo Melding",
|
||||
"name": "Navn for Hallo"
|
||||
},
|
||||
"quote": {
|
||||
"title": "Sitat",
|
||||
"copy": "Kopier knapp"
|
||||
},
|
||||
"background": {
|
||||
"title": "Bakgrunn",
|
||||
"api": "Bakgrunn API",
|
||||
"blur": "Juster Blur",
|
||||
"custom_url": "Personlig bakgrunn URL",
|
||||
"custom_background": "Personlig bakgrunn",
|
||||
"custom_colour": "Personlig Bakgrunn Farge",
|
||||
"add_colour": "Legg til farge"
|
||||
},
|
||||
"searchbar": {
|
||||
"title": "Søkebar",
|
||||
"search_engine": "Søkemotor"
|
||||
},
|
||||
"offline": "Frakoblet Modus",
|
||||
"dark": "Mørkt tema",
|
||||
"experimental": {
|
||||
"title": "Eksperimental",
|
||||
"animations": "Animasjoner"
|
||||
},
|
||||
"language": "Språk",
|
||||
"apply": "Bruk",
|
||||
"reset": "Nullstill",
|
||||
"import": "Importer",
|
||||
"export": "Eksporter"
|
||||
"background": {
|
||||
"title": "Bakgrunn",
|
||||
"api": "Bakgrunn API",
|
||||
"blur": "Juster Blur",
|
||||
"custom_url": "Personlig bakgrunn URL",
|
||||
"custom_background": "Personlig bakgrunn",
|
||||
"custom_colour": "Personlig Bakgrunn Farge",
|
||||
"add_colour": "Legg til farge"
|
||||
},
|
||||
"update": {
|
||||
"title": "Oppdater",
|
||||
"offline": {
|
||||
"title": "Offline",
|
||||
"description": "Kan ikke få oppdatering loggene når i offline modus."
|
||||
},
|
||||
"error": {
|
||||
"title": "Error",
|
||||
"content": "Kan ikke koble til serveren."
|
||||
},
|
||||
"loading": "Laster..."
|
||||
"searchbar": {
|
||||
"title": "Søkebar",
|
||||
"search_engine": "Søkemotor"
|
||||
},
|
||||
"toasts": {
|
||||
"quote": "Sitat kopiert",
|
||||
"reset": "Tilbakestillte vellykket",
|
||||
"installed": "Installert",
|
||||
"removed": "Fjernet",
|
||||
"error": "Noe gikk galt"
|
||||
"offline": "Frakoblet Modus",
|
||||
"dark": "Mørkt tema",
|
||||
"experimental": {
|
||||
"title": "Eksperimental",
|
||||
"animations": "Animasjoner"
|
||||
},
|
||||
"marketplace": {
|
||||
"photo_packs": "Bilde pakker",
|
||||
"quote_packs": "Sitat pakker",
|
||||
"preset_settings": "Preset instillinger",
|
||||
"themes": "Themes",
|
||||
"product": {
|
||||
"overview": "Oversikt",
|
||||
"information": "Informasjon",
|
||||
"last_updated": "Sist oppdatert",
|
||||
"version": "Versjon",
|
||||
"author": "Forfatter",
|
||||
"notice": {
|
||||
"title": "Vær oppmerksom",
|
||||
"description": "For at endringen skal ta skje, må siden relastes."
|
||||
},
|
||||
"buttons": {
|
||||
"addtomue": "Legg Til Mue",
|
||||
"remove": "Fjern"
|
||||
}
|
||||
},
|
||||
"offline": {
|
||||
"title": "Ser ut som at du er offiline.",
|
||||
"description": "Vær så snill, koble til internettet."
|
||||
},
|
||||
"see_more": "Se mer"
|
||||
"language": "Språk",
|
||||
"apply": "Bruk",
|
||||
"reset": "Nullstill",
|
||||
"import": "Importer",
|
||||
"export": "Eksporter"
|
||||
},
|
||||
"update": {
|
||||
"title": "Oppdater",
|
||||
"offline": {
|
||||
"title": "Offline",
|
||||
"description": "Kan ikke få oppdatering loggene når i offline modus."
|
||||
},
|
||||
"addons": {
|
||||
"added": "Lagt til",
|
||||
"empty": {
|
||||
"title": "Det er tomt her.",
|
||||
"description": "Gå til markedsplassen å legg til noe.",
|
||||
"button": "Ta meg der"
|
||||
}
|
||||
"error": {
|
||||
"title": "Error",
|
||||
"content": "Kan ikke koble til serveren."
|
||||
},
|
||||
"loading": "Laster..."
|
||||
},
|
||||
"toasts": {
|
||||
"quote": "Sitat kopiert",
|
||||
"reset": "Tilbakestillte vellykket",
|
||||
"installed": "Installert",
|
||||
"removed": "Fjernet",
|
||||
"error": "Noe gikk galt"
|
||||
},
|
||||
"marketplace": {
|
||||
"photo_packs": "Bilde pakker",
|
||||
"quote_packs": "Sitat pakker",
|
||||
"preset_settings": "Preset instillinger",
|
||||
"themes": "Themes",
|
||||
"product": {
|
||||
"overview": "Oversikt",
|
||||
"information": "Informasjon",
|
||||
"last_updated": "Sist oppdatert",
|
||||
"version": "Versjon",
|
||||
"author": "Forfatter",
|
||||
"notice": {
|
||||
"title": "Vær oppmerksom",
|
||||
"description": "For at endringen skal ta skje, må siden relastes."
|
||||
},
|
||||
"buttons": {
|
||||
"addtomue": "Legg Til Mue",
|
||||
"remove": "Fjern"
|
||||
}
|
||||
},
|
||||
"offline": {
|
||||
"title": "Ser ut som at du er offiline.",
|
||||
"description": "Vær så snill, koble til internettet."
|
||||
},
|
||||
"see_more": "Se mer"
|
||||
},
|
||||
"addons": {
|
||||
"added": "Lagt til",
|
||||
"empty": {
|
||||
"title": "Det er tomt her.",
|
||||
"description": "Gå til markedsplassen å legg til noe.",
|
||||
"button": "Ta meg der"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,134 +1,134 @@
|
|||
{
|
||||
"greeting": {
|
||||
"morning": "Доброе утро",
|
||||
"afternoon": "Добрый день",
|
||||
"evening": "Добрый вечер",
|
||||
"christmas": "С Рождеством",
|
||||
"newyear": "С Новым Годом",
|
||||
"halloween": "Счастливого Хэллоуина"
|
||||
},
|
||||
"credit": "Фото",
|
||||
"search": "Поиск",
|
||||
"modals": {
|
||||
"title": "Options",
|
||||
"settings": "Settings",
|
||||
"addons": "My Add-ons",
|
||||
"marketplace": "Marketplace"
|
||||
},
|
||||
"settings": {
|
||||
"time": {
|
||||
"title": "Время",
|
||||
"seconds": "Секунды",
|
||||
"twentyfourhour": "24 Часа",
|
||||
"ampm": "AM/PM (12 часов)",
|
||||
"zero": "Дополнительный ноль",
|
||||
"analog": "Аналоговое"
|
||||
},
|
||||
"greeting": {
|
||||
"morning": "Доброе утро",
|
||||
"afternoon": "Добрый день",
|
||||
"evening": "Добрый вечер",
|
||||
"christmas": "С Рождеством",
|
||||
"newyear": "С Новым Годом",
|
||||
"halloween": "Счастливого Хэллоуина"
|
||||
"title": "Приветствие",
|
||||
"events": "События",
|
||||
"default": "Сообщение с приветствием по-умолчанию",
|
||||
"name": "Имя для приветствия"
|
||||
},
|
||||
"credit": "Фото",
|
||||
"search": "Поиск",
|
||||
"modals": {
|
||||
"title": "Options",
|
||||
"settings": "Settings",
|
||||
"addons": "My Add-ons",
|
||||
"marketplace": "Marketplace"
|
||||
"quote": {
|
||||
"title": "Цитата",
|
||||
"copy": "Кнопка копирования",
|
||||
"tweet": "Кнопка твита",
|
||||
"favourite": "Кнопка для оценки"
|
||||
},
|
||||
"settings": {
|
||||
"time": {
|
||||
"title": "Время",
|
||||
"seconds": "Секунды",
|
||||
"twentyfourhour": "24 Часа",
|
||||
"ampm": "AM/PM (12 часов)",
|
||||
"zero": "Дополнительный ноль",
|
||||
"analog": "Аналоговое"
|
||||
},
|
||||
"greeting": {
|
||||
"title": "Приветствие",
|
||||
"events": "События",
|
||||
"default": "Сообщение с приветствием по-умолчанию",
|
||||
"name": "Имя для приветствия"
|
||||
},
|
||||
"quote": {
|
||||
"title": "Цитата",
|
||||
"copy": "Кнопка копирования",
|
||||
"tweet": "Кнопка твита",
|
||||
"favourite": "Кнопка для оценки"
|
||||
},
|
||||
"background": {
|
||||
"title": "Фон",
|
||||
"api": "API для фона",
|
||||
"blur": "Размытие",
|
||||
"brightness": "Яркость",
|
||||
"custom_url": "Ссылка для пользовательского фона",
|
||||
"custom_background": "Пользовательский фон",
|
||||
"custom_colour": "Пользовательский цвет фона",
|
||||
"upload": "Загрузить",
|
||||
"add_colour": "Добавить цвет",
|
||||
"favourite": "Любимые",
|
||||
"view": "Просмотр",
|
||||
"refresh": "Обновить",
|
||||
"disabled": "Выключен"
|
||||
},
|
||||
"searchbar": {
|
||||
"title": "Панель поиска",
|
||||
"searchengine": "Поисковый движок",
|
||||
"custom": "Пользовательский поисковый движок"
|
||||
},
|
||||
"offline": "Офлайн режим",
|
||||
"dark": "Тёмная тема",
|
||||
"experimental": {
|
||||
"title": "Экспериментальные настройки",
|
||||
"animations": "Анимации",
|
||||
"voicesearch": "Поиск голосом",
|
||||
"nightmode": "Автоматический ночной режим"
|
||||
},
|
||||
"language": "Язык",
|
||||
"apply": "Применить",
|
||||
"reset": "Сбросить",
|
||||
"import": "Импорт",
|
||||
"export": "Экспорт"
|
||||
"background": {
|
||||
"title": "Фон",
|
||||
"api": "API для фона",
|
||||
"blur": "Размытие",
|
||||
"brightness": "Яркость",
|
||||
"custom_url": "Ссылка для пользовательского фона",
|
||||
"custom_background": "Пользовательский фон",
|
||||
"custom_colour": "Пользовательский цвет фона",
|
||||
"upload": "Загрузить",
|
||||
"add_colour": "Добавить цвет",
|
||||
"favourite": "Любимые",
|
||||
"view": "Просмотр",
|
||||
"refresh": "Обновить",
|
||||
"disabled": "Выключен"
|
||||
},
|
||||
"update": {
|
||||
"title": "Обновление",
|
||||
"offline": {
|
||||
"title": "Офлайн",
|
||||
"description": "Не удалось получить журнал обновления в офлайн режиме"
|
||||
},
|
||||
"error": {
|
||||
"title": "Ошибка",
|
||||
"content": "Не удалось подключиться к серверу"
|
||||
},
|
||||
"loading": "Загрузка...",
|
||||
"readblog": "Прочитайте об изменениях в блоге",
|
||||
"contactsupport": "Связаться с нами"
|
||||
"searchbar": {
|
||||
"title": "Панель поиска",
|
||||
"searchengine": "Поисковый движок",
|
||||
"custom": "Пользовательский поисковый движок"
|
||||
},
|
||||
"toasts": {
|
||||
"quote": "Цитата скопирована!",
|
||||
"reset": "Сброшено!",
|
||||
"installed": "Успешно установлено",
|
||||
"removed": "Успешно удалено",
|
||||
"error": "Что-то пошло не так",
|
||||
"imported": "Успешно импортировано"
|
||||
"offline": "Офлайн режим",
|
||||
"dark": "Тёмная тема",
|
||||
"experimental": {
|
||||
"title": "Экспериментальные настройки",
|
||||
"animations": "Анимации",
|
||||
"voicesearch": "Поиск голосом",
|
||||
"nightmode": "Автоматический ночной режим"
|
||||
},
|
||||
"marketplace": {
|
||||
"photo_packs": "Наборы фото",
|
||||
"quote_packs": "Наборы цитат",
|
||||
"preset_settings": "Пресеты настроек",
|
||||
"themes": "Темы",
|
||||
"product": {
|
||||
"overview": "Обзор",
|
||||
"information": "Информация",
|
||||
"last_updated": "Последнее обновление",
|
||||
"version": "Версия",
|
||||
"author": "Автор",
|
||||
"notice": {
|
||||
"title": "Предупреждение",
|
||||
"description": "Для того, чтобы изменения вступили в силу необходимо обновить страницу."
|
||||
},
|
||||
"buttons": {
|
||||
"addtomue": "Добавить в Mue",
|
||||
"remove": "Удалить"
|
||||
},
|
||||
"quoteWarning": {
|
||||
"title": "Предупреждение",
|
||||
"description": "Этот пакет цитат обращается к внешнему серверу и может отслеживать вас!"
|
||||
}
|
||||
},
|
||||
"offline": {
|
||||
"title": "Похоже, что вы офлайн",
|
||||
"description": "Пожалуйста, подключитесь к интернету."
|
||||
},
|
||||
"see_more": "Показать больше"
|
||||
"language": "Язык",
|
||||
"apply": "Применить",
|
||||
"reset": "Сбросить",
|
||||
"import": "Импорт",
|
||||
"export": "Экспорт"
|
||||
},
|
||||
"update": {
|
||||
"title": "Обновление",
|
||||
"offline": {
|
||||
"title": "Офлайн",
|
||||
"description": "Не удалось получить журнал обновления в офлайн режиме"
|
||||
},
|
||||
"addons": {
|
||||
"added": "Добавлен",
|
||||
"empty": {
|
||||
"title": "Здесь пусто",
|
||||
"description": "Зайдите в магазин, чтобы найти что-то интересное.",
|
||||
"button": "Перейти"
|
||||
},
|
||||
"sideload": "Загрузить"
|
||||
}
|
||||
"error": {
|
||||
"title": "Ошибка",
|
||||
"content": "Не удалось подключиться к серверу"
|
||||
},
|
||||
"loading": "Загрузка...",
|
||||
"readblog": "Прочитайте об изменениях в блоге",
|
||||
"contactsupport": "Связаться с нами"
|
||||
},
|
||||
"toasts": {
|
||||
"quote": "Цитата скопирована!",
|
||||
"reset": "Сброшено!",
|
||||
"installed": "Успешно установлено",
|
||||
"removed": "Успешно удалено",
|
||||
"error": "Что-то пошло не так",
|
||||
"imported": "Успешно импортировано"
|
||||
},
|
||||
"marketplace": {
|
||||
"photo_packs": "Наборы фото",
|
||||
"quote_packs": "Наборы цитат",
|
||||
"preset_settings": "Пресеты настроек",
|
||||
"themes": "Темы",
|
||||
"product": {
|
||||
"overview": "Обзор",
|
||||
"information": "Информация",
|
||||
"last_updated": "Последнее обновление",
|
||||
"version": "Версия",
|
||||
"author": "Автор",
|
||||
"notice": {
|
||||
"title": "Предупреждение",
|
||||
"description": "Для того, чтобы изменения вступили в силу необходимо обновить страницу."
|
||||
},
|
||||
"buttons": {
|
||||
"addtomue": "Добавить в Mue",
|
||||
"remove": "Удалить"
|
||||
},
|
||||
"quoteWarning": {
|
||||
"title": "Предупреждение",
|
||||
"description": "Этот пакет цитат обращается к внешнему серверу и может отслеживать вас!"
|
||||
}
|
||||
},
|
||||
"offline": {
|
||||
"title": "Похоже, что вы офлайн",
|
||||
"description": "Пожалуйста, подключитесь к интернету."
|
||||
},
|
||||
"see_more": "Показать больше"
|
||||
},
|
||||
"addons": {
|
||||
"added": "Добавлен",
|
||||
"empty": {
|
||||
"title": "Здесь пусто",
|
||||
"description": "Зайдите в магазин, чтобы найти что-то интересное.",
|
||||
"button": "Перейти"
|
||||
},
|
||||
"sideload": "Загрузить"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -8,30 +8,29 @@ module.exports = {
|
|||
mode: 'development',
|
||||
module: {
|
||||
rules: [{
|
||||
test: /\.(js|jsx)$/,
|
||||
exclude: /node_modules/,
|
||||
use: ['babel-loader']
|
||||
},
|
||||
{
|
||||
test: /\.(sa|sc|c)ss$/,
|
||||
use: [
|
||||
{
|
||||
loader: MiniCssExtractPlugin.loader,
|
||||
options: {
|
||||
publicPath: ''
|
||||
},
|
||||
test: /\.(js|jsx)$/,
|
||||
exclude: /node_modules/,
|
||||
use: ['babel-loader']
|
||||
},
|
||||
{
|
||||
test: /\.(sa|sc|c)ss$/,
|
||||
use: [
|
||||
{
|
||||
loader: MiniCssExtractPlugin.loader,
|
||||
options: {
|
||||
publicPath: ''
|
||||
},
|
||||
'css-loader',
|
||||
'sass-loader',
|
||||
],
|
||||
},
|
||||
{
|
||||
test: /\.(woff|woff2|svg)$/,
|
||||
use: {
|
||||
loader: 'file-loader',
|
||||
}
|
||||
},
|
||||
'css-loader',
|
||||
'sass-loader',
|
||||
],
|
||||
},
|
||||
{
|
||||
test: /\.(woff|woff2|svg)$/,
|
||||
use: {
|
||||
loader: 'file-loader',
|
||||
}
|
||||
]
|
||||
}]
|
||||
},
|
||||
resolve: {
|
||||
extensions: ['.js', '.jsx']
|
||||
|
@ -65,4 +64,4 @@ module.exports = {
|
|||
chunkFilename: '[id].css',
|
||||
})
|
||||
]
|
||||
};
|
||||
};
|
||||
|
|
Loading…
Reference in New Issue