mirror of https://github.com/mue/mue.git
feat: cleanup, settings UI improvements
Co-authored-by: David Ralph <ohlookitsderpy@protonmail.com>
This commit is contained in:
parent
b3b17ad234
commit
cdae5ed29e
Binary file not shown.
After Width: | Height: | Size: 10 KiB |
|
@ -0,0 +1,29 @@
|
||||||
|
#-------------------------------------------------------------------------------#
|
||||||
|
# Qodana analysis is configured by qodana.yaml file #
|
||||||
|
# https://www.jetbrains.com/help/qodana/qodana-yaml.html #
|
||||||
|
#-------------------------------------------------------------------------------#
|
||||||
|
version: "1.0"
|
||||||
|
|
||||||
|
#Specify inspection profile for code analysis
|
||||||
|
profile:
|
||||||
|
name: qodana.starter
|
||||||
|
|
||||||
|
#Enable inspections
|
||||||
|
#include:
|
||||||
|
# - name: <SomeEnabledInspectionId>
|
||||||
|
|
||||||
|
#Disable inspections
|
||||||
|
#exclude:
|
||||||
|
# - name: <SomeDisabledInspectionId>
|
||||||
|
# paths:
|
||||||
|
# - <path/where/not/run/inspection>
|
||||||
|
|
||||||
|
#Execute shell command before Qodana execution (Applied in CI/CD pipeline)
|
||||||
|
#bootstrap: sh ./prepare-qodana.sh
|
||||||
|
|
||||||
|
#Install IDE plugins before Qodana execution (Applied in CI/CD pipeline)
|
||||||
|
#plugins:
|
||||||
|
# - id: <plugin.id> #(plugin id can be found at https://plugins.jetbrains.com)
|
||||||
|
|
||||||
|
#Specify Qodana linter for analysis (Applied in CI/CD pipeline)
|
||||||
|
linter: jetbrains/qodana-js:latest
|
|
@ -10,7 +10,6 @@
|
||||||
|
|
||||||
&.is-draggable {
|
&.is-draggable {
|
||||||
cursor: move;
|
cursor: move;
|
||||||
cursor: grab;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
&.is-dragging {
|
&.is-dragging {
|
||||||
|
|
|
@ -103,7 +103,7 @@ function ShareModal({ modalClose, data }) {
|
||||||
<button
|
<button
|
||||||
onClick={() =>
|
onClick={() =>
|
||||||
window
|
window
|
||||||
.open(`http://connect.qq.com/widget/shareqq/index.html?url=${data.url}`, '_blank')
|
.open(`https://connect.qq.com/widget/shareqq/index.html?url=${data.url}`, '_blank')
|
||||||
.focus()
|
.focus()
|
||||||
}
|
}
|
||||||
>
|
>
|
||||||
|
|
|
@ -1,7 +1,10 @@
|
||||||
import Tooltip from 'components/helpers/tooltip/Tooltip';
|
import variables from 'modules/variables';
|
||||||
import './scss/index.scss';
|
|
||||||
import { MdLinkOff } from 'react-icons/md';
|
import { MdLinkOff } from 'react-icons/md';
|
||||||
|
|
||||||
|
import Tooltip from 'components/helpers/tooltip/Tooltip';
|
||||||
|
|
||||||
|
import './scss/index.scss';
|
||||||
|
|
||||||
const Apps = ({ appsInfo }) => {
|
const Apps = ({ appsInfo }) => {
|
||||||
return (
|
return (
|
||||||
<div className="appsShortcutContainer">
|
<div className="appsShortcutContainer">
|
||||||
|
@ -29,10 +32,12 @@ const Apps = ({ appsInfo }) => {
|
||||||
))
|
))
|
||||||
) : (
|
) : (
|
||||||
<div className="noAppsContainer">
|
<div className="noAppsContainer">
|
||||||
<h3>
|
<div className="emptyNewMessage">
|
||||||
No app links found
|
|
||||||
<MdLinkOff />
|
<MdLinkOff />
|
||||||
</h3>
|
<span className="title">
|
||||||
|
{variables.language.getMessage(variables.languagecode, 'widgets.navbar.apps.no_apps')}
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -3,75 +3,75 @@
|
||||||
$appsWidth: 21rem;
|
$appsWidth: 21rem;
|
||||||
|
|
||||||
.appsShortcutContainer {
|
.appsShortcutContainer {
|
||||||
max-height: 35rem;
|
max-height: 35rem;
|
||||||
overflow-y: auto;
|
overflow-y: auto;
|
||||||
// scrollbar-width: thin;
|
// scrollbar-width: thin;
|
||||||
border-radius: 0.8em;
|
border-radius: 0.8em;
|
||||||
padding: 1.2em;
|
padding: 1.2em;
|
||||||
display: grid;
|
display: grid;
|
||||||
grid-template-columns: repeat(3, auto);
|
grid-template-columns: repeat(3, auto);
|
||||||
grid-auto-rows: 100px;
|
grid-auto-rows: 100px;
|
||||||
gap: 10px;
|
gap: 10px;
|
||||||
place-items: center;
|
place-items: center;
|
||||||
|
|
||||||
@include themed {
|
@include themed {
|
||||||
background: t($modal-secondaryColour);
|
background: t($modal-secondaryColour);
|
||||||
}
|
}
|
||||||
|
|
||||||
.noAppsContainer {
|
.noAppsContainer {
|
||||||
h3 {
|
h3 {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
svg {
|
svg {
|
||||||
font-size: 30px;
|
font-size: 30px;
|
||||||
margin-left: 10px;
|
margin-left: 10px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.appsIcon {
|
.appsIcon {
|
||||||
display: inline-flex;
|
display: inline-flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
padding: 10px;
|
padding: 10px;
|
||||||
border-radius: 0.8em;
|
border-radius: 0.8em;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
width: 5rem;
|
width: 5rem;
|
||||||
height: 4.7rem;
|
height: 4.7rem;
|
||||||
transition: 0.5s;
|
transition: 0.5s;
|
||||||
|
|
||||||
img {
|
img {
|
||||||
border-radius: 0.6rem;
|
border-radius: 0.6rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
span {
|
|
||||||
display: inline-block;
|
|
||||||
width: 100%;
|
|
||||||
text-overflow: ellipsis;
|
|
||||||
overflow: hidden;
|
|
||||||
white-space: nowrap;
|
|
||||||
text-align: center;
|
|
||||||
margin-top: 10px;
|
|
||||||
}
|
|
||||||
|
|
||||||
&:hover {
|
span {
|
||||||
span {
|
display: inline-block;
|
||||||
white-space: initial;
|
width: 100%;
|
||||||
}
|
text-overflow: ellipsis;
|
||||||
|
overflow: hidden;
|
||||||
|
white-space: nowrap;
|
||||||
|
text-align: center;
|
||||||
|
margin-top: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
height: max-content;
|
&:hover {
|
||||||
}
|
span {
|
||||||
|
white-space: initial;
|
||||||
|
}
|
||||||
|
|
||||||
@include themed {
|
height: max-content;
|
||||||
color: t($color);
|
}
|
||||||
|
|
||||||
&:hover {
|
@include themed {
|
||||||
background: t($modal-sidebarActive);
|
color: t($color);
|
||||||
}
|
|
||||||
}
|
&:hover {
|
||||||
|
background: t($modal-sidebarActive);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -42,10 +42,6 @@ input {
|
||||||
vertical-align: middle;
|
vertical-align: middle;
|
||||||
background: none;
|
background: none;
|
||||||
|
|
||||||
&::-moz-color-swatch-wrapper {
|
|
||||||
padding: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
&::-moz-color-swatch {
|
&::-moz-color-swatch {
|
||||||
border: none;
|
border: none;
|
||||||
border-radius: 100%;
|
border-radius: 100%;
|
||||||
|
|
|
@ -47,3 +47,9 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.aboutText {
|
||||||
|
text-align: center;
|
||||||
|
display: flex;
|
||||||
|
flex-flow: column;
|
||||||
|
}
|
||||||
|
|
|
@ -22,7 +22,6 @@ div.color-preview-area > div > div:nth-child(5) {
|
||||||
}
|
}
|
||||||
|
|
||||||
.input-field .label {
|
.input-field .label {
|
||||||
color: inherit;
|
|
||||||
color: var(--modal-text) !important;
|
color: var(--modal-text) !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -8,7 +8,7 @@ import FormControl from '@mui/material/FormControl';
|
||||||
import Select from '@mui/material/Select';
|
import Select from '@mui/material/Select';
|
||||||
import Chip from '@mui/material/Chip';
|
import Chip from '@mui/material/Chip';
|
||||||
|
|
||||||
function ChipSelect({ label, options, name }) {
|
function ChipSelect({ label, options }) {
|
||||||
let start = (localStorage.getItem('apiCategories') || '').split(',');
|
let start = (localStorage.getItem('apiCategories') || '').split(',');
|
||||||
if (start[0] === '') {
|
if (start[0] === '') {
|
||||||
start = [];
|
start = [];
|
||||||
|
|
|
@ -20,8 +20,8 @@ export default class About extends PureComponent {
|
||||||
update: variables.getMessage('modals.main.settings.sections.about.version.checking_update'),
|
update: variables.getMessage('modals.main.settings.sections.about.version.checking_update'),
|
||||||
loading: variables.getMessage('modals.main.loading'),
|
loading: variables.getMessage('modals.main.loading'),
|
||||||
image: document.body.classList.contains('dark')
|
image: document.body.classList.contains('dark')
|
||||||
? 'icons/mue_dark.png'
|
? 'icons/mue_about.png'
|
||||||
: 'icons/mue_light.png',
|
: 'icons/mue_about.png',
|
||||||
};
|
};
|
||||||
this.controller = new AbortController();
|
this.controller = new AbortController();
|
||||||
}
|
}
|
||||||
|
@ -128,36 +128,51 @@ export default class About extends PureComponent {
|
||||||
render() {
|
render() {
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<span className="mainTitle">
|
|
||||||
{variables.getMessage('modals.main.settings.sections.about.title')}
|
|
||||||
</span>
|
|
||||||
<div className="settingsRow" style={{ justifyContent: 'center' }}>
|
<div className="settingsRow" style={{ justifyContent: 'center' }}>
|
||||||
<div style={{ display: 'flex', flexFlow: 'column', gap: '5px' }}>
|
<div style={{ display: 'flex', flexFlow: 'column', gap: '5px' }}>
|
||||||
<img draggable={false} className="aboutLogo" src={this.state.image} alt="Logo" />
|
<img draggable={false} className="aboutLogo" src={this.state.image} alt="Logo" />
|
||||||
<span className="title">
|
<div className="aboutText">
|
||||||
{variables.getMessage('modals.main.settings.sections.about.version.title')}{' '}
|
<span className="title">Mue, By Kaiso</span>
|
||||||
{variables.constants.VERSION}
|
<span className="subtitle">
|
||||||
</span>
|
{variables.getMessage('modals.main.settings.sections.about.version.title')}{' '}
|
||||||
<span className="subtitle">({this.state.update})</span>
|
{variables.constants.VERSION}
|
||||||
<span className="subtitle">
|
</span>
|
||||||
{variables.getMessage('modals.main.settings.sections.about.copyright')}{' '}
|
<span className="subtitle">({this.state.update})</span>
|
||||||
{variables.constants.COPYRIGHT_YEAR}-{new Date().getFullYear()}{' '}
|
</div>
|
||||||
<a
|
<div>
|
||||||
className="link"
|
<span className="subtitle">
|
||||||
href={
|
Copyright 2018-
|
||||||
'https://github.com/' +
|
{new Date().getFullYear()}{' '}
|
||||||
variables.constants.ORG_NAME +
|
<a
|
||||||
'/' +
|
className="link"
|
||||||
variables.constants.REPO_NAME +
|
href={
|
||||||
'/graphs/contributors'
|
'https://github.com/' +
|
||||||
}
|
variables.constants.ORG_NAME +
|
||||||
target="_blank"
|
'/' +
|
||||||
rel="noopener noreferrer"
|
variables.constants.REPO_NAME +
|
||||||
>
|
'/graphs/contributors'
|
||||||
{variables.constants.COPYRIGHT_NAME}
|
}
|
||||||
</a>{' '}
|
target="_blank"
|
||||||
({variables.constants.COPYRIGHT_LICENSE})
|
rel="noopener noreferrer"
|
||||||
</span>
|
>
|
||||||
|
The Mue Authors
|
||||||
|
</a>
|
||||||
|
,{' '}
|
||||||
|
</span>
|
||||||
|
<span className="subtitle">
|
||||||
|
Copyright 2023-2024{' '}
|
||||||
|
<a
|
||||||
|
className="link"
|
||||||
|
href="https://kaiso.one"
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener noreferrer"
|
||||||
|
>
|
||||||
|
{' '}
|
||||||
|
Kaiso One Ltd
|
||||||
|
</a>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<span className="subtitle">Licensed under the BSD-3-Clause License</span>
|
||||||
<span className="subtitle">
|
<span className="subtitle">
|
||||||
<a
|
<a
|
||||||
href={variables.constants.PRIVACY_URL}
|
href={variables.constants.PRIVACY_URL}
|
||||||
|
|
|
@ -77,7 +77,7 @@ export default class GreetingSettings extends PureComponent {
|
||||||
<input
|
<input
|
||||||
type="date"
|
type="date"
|
||||||
onChange={this.changeDate}
|
onChange={this.changeDate}
|
||||||
value={this.state.birthday.toISOString().substr(0, 10)}
|
value={this.state.birthday.toISOString().substring(0, 10)}
|
||||||
required
|
required
|
||||||
/>
|
/>
|
||||||
</SettingsItem>
|
</SettingsItem>
|
||||||
|
|
|
@ -1,10 +1,12 @@
|
||||||
/* eslint-disable array-callback-return */
|
/* eslint-disable array-callback-return */
|
||||||
import variables from 'modules/variables';
|
import variables from 'modules/variables';
|
||||||
import { PureComponent } from 'react';
|
import { PureComponent } from 'react';
|
||||||
import { MdShowChart, MdRestartAlt } from 'react-icons/md';
|
import { MdShowChart, MdRestartAlt, MdDownload } from 'react-icons/md';
|
||||||
import { FaTrophy } from 'react-icons/fa';
|
import { FaTrophy } from 'react-icons/fa';
|
||||||
import { toast } from 'react-toastify';
|
import { toast } from 'react-toastify';
|
||||||
|
|
||||||
|
import { saveFile } from 'modules/helpers/settings/modals';
|
||||||
|
|
||||||
import achievementsData from 'modules/helpers/settings/achievements.json';
|
import achievementsData from 'modules/helpers/settings/achievements.json';
|
||||||
import translations from 'modules/helpers/settings/achievement_translations/index';
|
import translations from 'modules/helpers/settings/achievement_translations/index';
|
||||||
|
|
||||||
|
@ -21,6 +23,7 @@ const achievementLanguage = {
|
||||||
id_ID: translations.id_ID,
|
id_ID: translations.id_ID,
|
||||||
tr_TR: translations.tr_TR,
|
tr_TR: translations.tr_TR,
|
||||||
bn: translations.bn,
|
bn: translations.bn,
|
||||||
|
pt_BR: translations.pt_BR,
|
||||||
};
|
};
|
||||||
|
|
||||||
export default class Stats extends PureComponent {
|
export default class Stats extends PureComponent {
|
||||||
|
@ -78,6 +81,14 @@ export default class Stats extends PureComponent {
|
||||||
this.forceUpdate();
|
this.forceUpdate();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
downloadStats() {
|
||||||
|
let date = new Date();
|
||||||
|
// Format the date as YYYY-MM-DD_HH-MM-SS
|
||||||
|
let formattedDate = `${date.getFullYear()}-${(date.getMonth() + 1).toString().padStart(2, '0')}-${date.getDate().toString().padStart(2, '0')}_${date.getHours().toString().padStart(2, '0')}-${date.getMinutes().toString().padStart(2, '0')}-${date.getSeconds().toString().padStart(2, '0')}`;
|
||||||
|
let filename = `mue_stats_${formattedDate}.json`;
|
||||||
|
saveFile(JSON.stringify(this.state.stats, null, 2), filename);
|
||||||
|
}
|
||||||
|
|
||||||
componentDidMount() {
|
componentDidMount() {
|
||||||
this.getAchievements();
|
this.getAchievements();
|
||||||
this.forceUpdate();
|
this.forceUpdate();
|
||||||
|
@ -102,7 +113,10 @@ export default class Stats extends PureComponent {
|
||||||
<span className="mainTitle">
|
<span className="mainTitle">
|
||||||
{variables.getMessage('modals.main.settings.sections.stats.title')}
|
{variables.getMessage('modals.main.settings.sections.stats.title')}
|
||||||
</span>
|
</span>
|
||||||
<div className="statsReset">
|
<div className="headerActions">
|
||||||
|
<button onClick={() => this.downloadStats()}>
|
||||||
|
<MdDownload /> {variables.getMessage('widgets.background.download')}
|
||||||
|
</button>
|
||||||
<button onClick={() => this.resetStats()}>
|
<button onClick={() => this.resetStats()}>
|
||||||
<MdRestartAlt /> {variables.getMessage('modals.main.settings.buttons.reset')}
|
<MdRestartAlt /> {variables.getMessage('modals.main.settings.buttons.reset')}
|
||||||
</button>
|
</button>
|
||||||
|
|
|
@ -11,7 +11,7 @@ function AddModal({ urlError, iconError, addLink, closeModal, edit, editData, ed
|
||||||
const [icon, setIcon] = useState(edit ? editData.icon : '');
|
const [icon, setIcon] = useState(edit ? editData.icon : '');
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="smallModal" style={{ width: '260px' }}>
|
<div className="addLinkModal">
|
||||||
<div className="shareHeader">
|
<div className="shareHeader">
|
||||||
<span className="title">
|
<span className="title">
|
||||||
{edit
|
{edit
|
||||||
|
@ -30,15 +30,14 @@ function AddModal({ urlError, iconError, addLink, closeModal, edit, editData, ed
|
||||||
placeholder={variables.getMessage('widgets.quicklinks.name')}
|
placeholder={variables.getMessage('widgets.quicklinks.name')}
|
||||||
value={name}
|
value={name}
|
||||||
onChange={(e) => setName(e.target.value.replace(/(\r\n|\n|\r)/gm, ''))}
|
onChange={(e) => setName(e.target.value.replace(/(\r\n|\n|\r)/gm, ''))}
|
||||||
|
style={{ gridColumn: 'span 2' }}
|
||||||
/>
|
/>
|
||||||
<span className="dropdown-error" />
|
|
||||||
<TextareaAutosize
|
<TextareaAutosize
|
||||||
maxRows={10}
|
maxRows={10}
|
||||||
placeholder={variables.getMessage('widgets.quicklinks.url')}
|
placeholder={variables.getMessage('widgets.quicklinks.url')}
|
||||||
value={url}
|
value={url}
|
||||||
onChange={(e) => setUrl(e.target.value.replace(/(\r\n|\n|\r)/gm, ''))}
|
onChange={(e) => setUrl(e.target.value.replace(/(\r\n|\n|\r)/gm, ''))}
|
||||||
/>
|
/>
|
||||||
<span className="dropdown-error">{urlError}</span>
|
|
||||||
<TextareaAutosize
|
<TextareaAutosize
|
||||||
maxRows={10}
|
maxRows={10}
|
||||||
maxLines={1}
|
maxLines={1}
|
||||||
|
@ -46,7 +45,11 @@ function AddModal({ urlError, iconError, addLink, closeModal, edit, editData, ed
|
||||||
value={icon}
|
value={icon}
|
||||||
onChange={(e) => setIcon(e.target.value.replace(/(\r\n|\n|\r)/gm, ''))}
|
onChange={(e) => setIcon(e.target.value.replace(/(\r\n|\n|\r)/gm, ''))}
|
||||||
/>
|
/>
|
||||||
<span className="dropdown-error">{iconError}</span>
|
</div>
|
||||||
|
<div className="addFooter">
|
||||||
|
<span className="dropdown-error">
|
||||||
|
{iconError} {urlError}
|
||||||
|
</span>
|
||||||
{edit ? (
|
{edit ? (
|
||||||
<button
|
<button
|
||||||
style={{
|
style={{
|
||||||
|
@ -63,6 +66,7 @@ function AddModal({ urlError, iconError, addLink, closeModal, edit, editData, ed
|
||||||
height: '16px',
|
height: '16px',
|
||||||
fontSize: '15px',
|
fontSize: '15px',
|
||||||
}}
|
}}
|
||||||
|
className="sideload"
|
||||||
onClick={() => addLink(name, url, icon)}
|
onClick={() => addLink(name, url, icon)}
|
||||||
>
|
>
|
||||||
<MdAddLink /> {variables.getMessage('widgets.quicklinks.add')}
|
<MdAddLink /> {variables.getMessage('widgets.quicklinks.add')}
|
||||||
|
|
|
@ -72,7 +72,7 @@
|
||||||
margin: 5px;
|
margin: 5px;
|
||||||
transition: 0.2s ease-in-out;
|
transition: 0.2s ease-in-out;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
border-radius: 10px 10px 0x 0;
|
border-radius: 10px 10px 0 0;
|
||||||
&:hover {
|
&:hover {
|
||||||
background: #dd4038;
|
background: #dd4038;
|
||||||
border-radius: 10px;
|
border-radius: 10px;
|
||||||
|
@ -202,13 +202,13 @@ a.privacy {
|
||||||
}
|
}
|
||||||
img {
|
img {
|
||||||
max-width: 60%;
|
max-width: 60%;
|
||||||
border-radius: 10px 10px 10px 0px;
|
border-radius: 10px 10px 10px 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.shareYourMue {
|
.shareYourMue {
|
||||||
padding: 8px 20px 8px 20px;
|
padding: 8px 20px 8px 20px;
|
||||||
border-radius: 0px 0px 10px 10px;
|
border-radius: 0 0 10px 10px;
|
||||||
letter-spacing: 2px;
|
letter-spacing: 2px;
|
||||||
@include themed {
|
@include themed {
|
||||||
background-color: t($modal-sidebarActive);
|
background-color: t($modal-sidebarActive);
|
||||||
|
|
|
@ -62,8 +62,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
.photoInformation-content {
|
.photoInformation-content {
|
||||||
padding: 20px;
|
padding: 20px 20px 20px 0;
|
||||||
padding-left: 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.map-concept {
|
.map-concept {
|
||||||
|
|
|
@ -149,10 +149,40 @@ button.quicklinks {
|
||||||
bottom: 515px;
|
bottom: 515px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.addLinkModal {
|
||||||
|
@extend %tabText;
|
||||||
|
padding: 15px;
|
||||||
|
|
||||||
|
@include themed {
|
||||||
|
background: t($modal-secondaryColour);
|
||||||
|
}
|
||||||
|
|
||||||
|
button {
|
||||||
|
@include modal-button(standard);
|
||||||
|
padding: 10px 30px 10px 30px;
|
||||||
|
float: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
.addFooter {
|
||||||
|
display: flex;
|
||||||
|
flex-flow: row;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dropdown-error {
|
||||||
|
font-size: 16px;
|
||||||
|
padding-left: 5px;
|
||||||
|
color: #e74c3c;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
.quicklinkModalTextbox {
|
.quicklinkModalTextbox {
|
||||||
display: flex;
|
display: grid;
|
||||||
flex-flow: column;
|
grid-template-rows: auto 1fr; /* Two rows: first auto-sized, second filling remaining space */
|
||||||
gap: 5px;
|
grid-template-columns: repeat(2, 1fr); /* Two equal-width columns for the first row */
|
||||||
|
grid-gap: 10px; /* Optional gap between items */
|
||||||
|
padding: 15px 0 15px 0;
|
||||||
|
|
||||||
button {
|
button {
|
||||||
display: flex;
|
display: flex;
|
||||||
|
@ -162,7 +192,7 @@ button.quicklinks {
|
||||||
}
|
}
|
||||||
|
|
||||||
.dropdown-error {
|
.dropdown-error {
|
||||||
font-size: 13px;
|
font-size: 30px;
|
||||||
padding-left: 5px;
|
padding-left: 5px;
|
||||||
color: #e74c3c;
|
color: #e74c3c;
|
||||||
}
|
}
|
||||||
|
|
|
@ -54,6 +54,6 @@
|
||||||
|
|
||||||
.seconds {
|
.seconds {
|
||||||
font-size: 0.2em;
|
font-size: 0.2em;
|
||||||
line-height: 0%;
|
line-height: 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
//noinspection CssUnknownTarget
|
||||||
@import 'scss/variables';
|
@import 'scss/variables';
|
||||||
|
|
||||||
.weather {
|
.weather {
|
||||||
|
|
|
@ -26,9 +26,6 @@ export const REPO_NAME = 'mue';
|
||||||
export const EMAIL = 'hello@muetab.com';
|
export const EMAIL = 'hello@muetab.com';
|
||||||
export const TWITTER_HANDLE = 'getmue';
|
export const TWITTER_HANDLE = 'getmue';
|
||||||
export const DISCORD_SERVER = 'zv8C9F8';
|
export const DISCORD_SERVER = 'zv8C9F8';
|
||||||
export const COPYRIGHT_NAME = 'The Mue Authors & Kaiso One Ltd';
|
|
||||||
export const COPYRIGHT_YEAR = '2018';
|
|
||||||
export const COPYRIGHT_LICENSE = 'BSD-3-Clause License';
|
|
||||||
export const OPENCOLLECTIVE_USERNAME = 'mue';
|
export const OPENCOLLECTIVE_USERNAME = 'mue';
|
||||||
|
|
||||||
export const OFFLINE_IMAGES = 20;
|
export const OFFLINE_IMAGES = 20;
|
||||||
|
|
|
@ -10,6 +10,7 @@ import zh_CN from './zh_CN.json';
|
||||||
import id_ID from './id_ID.json';
|
import id_ID from './id_ID.json';
|
||||||
import tr_TR from './tr_TR.json';
|
import tr_TR from './tr_TR.json';
|
||||||
import bn from './bn.json';
|
import bn from './bn.json';
|
||||||
|
import pt_BR from './pt_BR.json';
|
||||||
|
|
||||||
const translations = {
|
const translations = {
|
||||||
de_DE,
|
de_DE,
|
||||||
|
@ -24,6 +25,7 @@ const translations = {
|
||||||
id_ID,
|
id_ID,
|
||||||
tr_TR,
|
tr_TR,
|
||||||
bn,
|
bn,
|
||||||
|
pt_BR,
|
||||||
};
|
};
|
||||||
|
|
||||||
export default translations;
|
export default translations;
|
||||||
|
|
|
@ -0,0 +1,8 @@
|
||||||
|
[
|
||||||
|
"Opened 10 tabs",
|
||||||
|
"Opened 39 tabs",
|
||||||
|
"Opened 100 tabs",
|
||||||
|
"Opened 305 tabs",
|
||||||
|
"Installed an add-on",
|
||||||
|
"Installed 5 add-ons"
|
||||||
|
]
|
|
@ -52,9 +52,11 @@ export function exportSettings() {
|
||||||
settings[key] = localStorage.getItem(key);
|
settings[key] = localStorage.getItem(key);
|
||||||
});
|
});
|
||||||
|
|
||||||
// i think a good improvement would be to make the file names more descriptive, or allow for saving as custom
|
let date = new Date();
|
||||||
// otherwise you'll end up with mue-settings (6000).json and have absolutely no idea what any of them are for
|
// Format the date as YYYY-MM-DD_HH-MM-SS
|
||||||
saveFile(settings, 'mue-settings.json');
|
let formattedDate = `${date.getFullYear()}-${(date.getMonth() + 1).toString().padStart(2, '0')}-${date.getDate().toString().padStart(2, '0')}_${date.getHours().toString().padStart(2, '0')}-${date.getMinutes().toString().padStart(2, '0')}-${date.getSeconds().toString().padStart(2, '0')}`;
|
||||||
|
let filename = `mue_settings_backup_${formattedDate}.json`;
|
||||||
|
saveFile(settings, filename);
|
||||||
variables.stats.postEvent('tab', 'Settings exported');
|
variables.stats.postEvent('tab', 'Settings exported');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -459,7 +459,6 @@
|
||||||
},
|
},
|
||||||
"about": {
|
"about": {
|
||||||
"title": "About",
|
"title": "About",
|
||||||
"copyright": "Copyright",
|
|
||||||
"version": {
|
"version": {
|
||||||
"title": "Version",
|
"title": "Version",
|
||||||
"checking_update": "Checking for update",
|
"checking_update": "Checking for update",
|
||||||
|
|
|
@ -459,7 +459,6 @@
|
||||||
},
|
},
|
||||||
"about": {
|
"about": {
|
||||||
"title": "Über",
|
"title": "Über",
|
||||||
"copyright": "Urheberrechte",
|
|
||||||
"version": {
|
"version": {
|
||||||
"title": "Version",
|
"title": "Version",
|
||||||
"checking_update": "Auf Update prüfen",
|
"checking_update": "Auf Update prüfen",
|
||||||
|
|
|
@ -464,7 +464,6 @@
|
||||||
},
|
},
|
||||||
"about": {
|
"about": {
|
||||||
"title": "About",
|
"title": "About",
|
||||||
"copyright": "Copyright",
|
|
||||||
"version": {
|
"version": {
|
||||||
"title": "Version",
|
"title": "Version",
|
||||||
"checking_update": "Checking for update",
|
"checking_update": "Checking for update",
|
||||||
|
|
|
@ -464,7 +464,6 @@
|
||||||
},
|
},
|
||||||
"about": {
|
"about": {
|
||||||
"title": "About",
|
"title": "About",
|
||||||
"copyright": "Copyright",
|
|
||||||
"version": {
|
"version": {
|
||||||
"title": "Version",
|
"title": "Version",
|
||||||
"checking_update": "Checking for update",
|
"checking_update": "Checking for update",
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -459,7 +459,6 @@
|
||||||
},
|
},
|
||||||
"about": {
|
"about": {
|
||||||
"title": "Acerca de",
|
"title": "Acerca de",
|
||||||
"copyright": "Copyright",
|
|
||||||
"version": {
|
"version": {
|
||||||
"title": "Versión",
|
"title": "Versión",
|
||||||
"checking_update": "Comprobando actualizaciones",
|
"checking_update": "Comprobando actualizaciones",
|
||||||
|
|
|
@ -459,7 +459,6 @@
|
||||||
},
|
},
|
||||||
"about": {
|
"about": {
|
||||||
"title": "à propos de",
|
"title": "à propos de",
|
||||||
"copyright": "Droits d'auteur",
|
|
||||||
"version": {
|
"version": {
|
||||||
"title": "Version",
|
"title": "Version",
|
||||||
"checking_update": "Vérification de la mise à jour",
|
"checking_update": "Vérification de la mise à jour",
|
||||||
|
|
|
@ -459,7 +459,6 @@
|
||||||
},
|
},
|
||||||
"about": {
|
"about": {
|
||||||
"title": "Tentang Mue",
|
"title": "Tentang Mue",
|
||||||
"copyright": "Hak Cipta",
|
|
||||||
"version": {
|
"version": {
|
||||||
"title": "Versi",
|
"title": "Versi",
|
||||||
"checking_update": "Periksa pembaruan",
|
"checking_update": "Periksa pembaruan",
|
||||||
|
|
|
@ -113,7 +113,6 @@
|
||||||
"about": {
|
"about": {
|
||||||
"contact_us": "Contact Us",
|
"contact_us": "Contact Us",
|
||||||
"contributors": "Contributors",
|
"contributors": "Contributors",
|
||||||
"copyright": "Copyright",
|
|
||||||
"form_button": "Forum",
|
"form_button": "Forum",
|
||||||
"no_supporters": "There are currently no Mue supporters",
|
"no_supporters": "There are currently no Mue supporters",
|
||||||
"photographers": "Photographers",
|
"photographers": "Photographers",
|
||||||
|
|
|
@ -459,7 +459,6 @@
|
||||||
},
|
},
|
||||||
"about": {
|
"about": {
|
||||||
"title": "About",
|
"title": "About",
|
||||||
"copyright": "Copyright",
|
|
||||||
"version": {
|
"version": {
|
||||||
"title": "Version",
|
"title": "Version",
|
||||||
"checking_update": "Checking for update",
|
"checking_update": "Checking for update",
|
||||||
|
|
|
@ -459,7 +459,6 @@
|
||||||
},
|
},
|
||||||
"about": {
|
"about": {
|
||||||
"title": "Sobre",
|
"title": "Sobre",
|
||||||
"copyright": "Direito autoral",
|
|
||||||
"version": {
|
"version": {
|
||||||
"title": "Versão",
|
"title": "Versão",
|
||||||
"checking_update": "Verificando atualização",
|
"checking_update": "Verificando atualização",
|
||||||
|
|
|
@ -43,9 +43,9 @@
|
||||||
},
|
},
|
||||||
"weather": {
|
"weather": {
|
||||||
"not_found": "Não encontrado",
|
"not_found": "Não encontrado",
|
||||||
"meters": "{quantidade} metros",
|
"meters": "{amount} metros",
|
||||||
"extra_information": "Informação extra",
|
"extra_information": "Informação extra",
|
||||||
"feels_like": "Parece {quantia}"
|
"feels_like": "Parece {amount}"
|
||||||
},
|
},
|
||||||
"quote": {
|
"quote": {
|
||||||
"link_tooltip": "Abrir na Wikipédia",
|
"link_tooltip": "Abrir na Wikipédia",
|
||||||
|
@ -459,7 +459,6 @@
|
||||||
},
|
},
|
||||||
"about": {
|
"about": {
|
||||||
"title": "Sobre",
|
"title": "Sobre",
|
||||||
"copyright": "Direito autoral",
|
|
||||||
"version": {
|
"version": {
|
||||||
"title": "Versão",
|
"title": "Versão",
|
||||||
"checking_update": "Verificando atualização",
|
"checking_update": "Verificando atualização",
|
||||||
|
|
|
@ -459,7 +459,6 @@
|
||||||
},
|
},
|
||||||
"about": {
|
"about": {
|
||||||
"title": "О программе",
|
"title": "О программе",
|
||||||
"copyright": "Copyright",
|
|
||||||
"version": {
|
"version": {
|
||||||
"title": "Version",
|
"title": "Version",
|
||||||
"checking_update": "Проверка обновлений",
|
"checking_update": "Проверка обновлений",
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -459,7 +459,6 @@
|
||||||
},
|
},
|
||||||
"about": {
|
"about": {
|
||||||
"title": "关于",
|
"title": "关于",
|
||||||
"copyright": "版权",
|
|
||||||
"version": {
|
"version": {
|
||||||
"title": "版本",
|
"title": "版本",
|
||||||
"checking_update": "正在检查更新……",
|
"checking_update": "正在检查更新……",
|
||||||
|
|
Loading…
Reference in New Issue