mirror of https://github.com/mue/mue.git
Fix: Various bugs
Co-authored-by: David Ralph <me@davidcralph.co.uk> Co-authored-by: Isaac <contact@eartharoid.me>
This commit is contained in:
parent
c2019de7d2
commit
ae0530cfc6
|
@ -49,13 +49,16 @@
|
||||||
padding: 0.5em;
|
padding: 0.5em;
|
||||||
border-radius: 12px;
|
border-radius: 12px;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
|
transition: 0.5s;
|
||||||
|
|
||||||
svg {
|
svg {
|
||||||
font-size: 2em;
|
font-size: 2em;
|
||||||
}
|
}
|
||||||
|
|
||||||
&:hover {
|
&:hover {
|
||||||
background: rgb(121 121 121 / 22.6%);
|
@include themed {
|
||||||
|
background: t($modal-sidebarActive);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -22,42 +22,51 @@ p.description {
|
||||||
.item {
|
.item {
|
||||||
flex: 1 0 40% !important;
|
flex: 1 0 40% !important;
|
||||||
}
|
}
|
||||||
|
.infoItem {
|
||||||
|
display: flex;
|
||||||
|
flex-flow: row;
|
||||||
|
align-items: center;
|
||||||
|
gap: 15px;
|
||||||
|
flex: 1 0 44%;
|
||||||
|
|
||||||
@include themed {
|
svg {
|
||||||
background: t($modal-sidebar);
|
@include themed() {
|
||||||
box-shadow: t(boxshadow);
|
background-image: t($slightGradient);
|
||||||
border-radius: t($borderRadius);
|
|
||||||
padding: 15px;
|
|
||||||
|
|
||||||
.infoItem {
|
|
||||||
display: flex;
|
|
||||||
flex-flow: row;
|
|
||||||
align-items: center;
|
|
||||||
gap: 15px;
|
|
||||||
flex: 1 0 44%;
|
|
||||||
|
|
||||||
svg {
|
|
||||||
font-size: 25px;
|
|
||||||
color: t($subColor);
|
|
||||||
}
|
|
||||||
|
|
||||||
.text {
|
|
||||||
display: flex;
|
|
||||||
flex-flow: column;
|
|
||||||
}
|
}
|
||||||
|
-webkit-background-clip: text;
|
||||||
|
-webkit-text-fill-color: transparent;
|
||||||
|
font-size: 20px;
|
||||||
|
border-radius: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
.header {
|
.text {
|
||||||
text-transform: uppercase;
|
display: flex;
|
||||||
|
flex-flow: column;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.header {
|
||||||
|
text-transform: uppercase;
|
||||||
|
@include themed {
|
||||||
color: t($subColor);
|
color: t($subColor);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
span {
|
span {
|
||||||
|
@include themed {
|
||||||
color: t($color);
|
color: t($color);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@include themed {
|
||||||
|
background: t($modal-sidebar);
|
||||||
|
box-shadow: 0 0 0 1px t($modal-sidebarActive);
|
||||||
|
border-radius: t($borderRadius);
|
||||||
|
padding: 15px;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
.showMoreItems {
|
.showMoreItems {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-flow: column;
|
flex-flow: column;
|
||||||
|
@ -65,3 +74,9 @@ p.description {
|
||||||
align-items: center;
|
align-items: center;
|
||||||
gap: 10px;
|
gap: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.marketplaceDescription {
|
||||||
|
display: flex;
|
||||||
|
flex-flow: column;
|
||||||
|
gap: 15px;
|
||||||
|
}
|
|
@ -148,6 +148,11 @@ table {
|
||||||
gap: 25px;
|
gap: 25px;
|
||||||
padding: 25px;
|
padding: 25px;
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
|
@include themed {
|
||||||
|
background: t($modal-sidebar);
|
||||||
|
border-radius: t($borderRadius);
|
||||||
|
box-shadow: 0 0 0 1px t($modal-sidebarActive);
|
||||||
|
}
|
||||||
|
|
||||||
div:nth-child(1) {
|
div:nth-child(1) {
|
||||||
display: flex;
|
display: flex;
|
||||||
|
@ -157,15 +162,13 @@ table {
|
||||||
}
|
}
|
||||||
|
|
||||||
.icon {
|
.icon {
|
||||||
border-radius: 100%;
|
@include themed() {
|
||||||
display: grid;
|
background-image: t($slightGradient);
|
||||||
place-items: center;
|
box-shadow: t($boxShadow);
|
||||||
padding: 15px;
|
|
||||||
font-size: 25px;
|
|
||||||
|
|
||||||
@include themed {
|
|
||||||
background: t($modal-sidebarActive);
|
|
||||||
}
|
}
|
||||||
|
padding: 15px;
|
||||||
|
border-radius: 100%;
|
||||||
|
font-size: 25px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.messageText {
|
.messageText {
|
||||||
|
@ -190,11 +193,6 @@ table {
|
||||||
.messageAction {
|
.messageAction {
|
||||||
float: right;
|
float: right;
|
||||||
}
|
}
|
||||||
|
|
||||||
@include themed {
|
|
||||||
background: t($modal-sidebar);
|
|
||||||
border-radius: t($borderRadius);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.messagesContainer {
|
.messagesContainer {
|
||||||
|
|
|
@ -87,19 +87,6 @@
|
||||||
outline: none;
|
outline: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
.close {
|
|
||||||
padding: 15px;
|
|
||||||
place-items: center;
|
|
||||||
display: grid;
|
|
||||||
cursor: pointer;
|
|
||||||
|
|
||||||
&:hover {
|
|
||||||
@include themed {
|
|
||||||
background: t($modal-sidebar);
|
|
||||||
border-radius: t($borderRadius);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.shareHeader {
|
.shareHeader {
|
||||||
|
@ -107,4 +94,20 @@
|
||||||
flex-flow: row;
|
flex-flow: row;
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
|
.close {
|
||||||
|
padding: 15px;
|
||||||
|
place-items: center;
|
||||||
|
display: grid;
|
||||||
|
cursor: pointer;
|
||||||
|
transition: 0.3s;
|
||||||
|
@include themed {
|
||||||
|
border-radius: t($borderRadius);
|
||||||
|
}
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
@include themed {
|
||||||
|
background: t($modal-sidebarActive);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,6 +23,7 @@ class Favourite extends PureComponent {
|
||||||
this.setState({
|
this.setState({
|
||||||
favourited: this.buttons.unfavourited,
|
favourited: this.buttons.unfavourited,
|
||||||
});
|
});
|
||||||
|
this.props.tooltipText(variables.getMessage('widgets.quote.favourite'));
|
||||||
variables.stats.postEvent('feature', 'Background favourite');
|
variables.stats.postEvent('feature', 'Background favourite');
|
||||||
} else {
|
} else {
|
||||||
const type = localStorage.getItem('backgroundType');
|
const type = localStorage.getItem('backgroundType');
|
||||||
|
@ -91,6 +92,7 @@ class Favourite extends PureComponent {
|
||||||
this.setState({
|
this.setState({
|
||||||
favourited: this.buttons.favourited,
|
favourited: this.buttons.favourited,
|
||||||
});
|
});
|
||||||
|
this.props.tooltipText(variables.getMessage('widgets.quote.unfavourite'));
|
||||||
variables.stats.postEvent('feature', 'Background unfavourite');
|
variables.stats.postEvent('feature', 'Background unfavourite');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -100,6 +102,12 @@ class Favourite extends PureComponent {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this.props.tooltipText(
|
||||||
|
localStorage.getItem('favourite')
|
||||||
|
? variables.getMessage('widgets.quote.unfavourite')
|
||||||
|
: variables.getMessage('widgets.quote.favourite'),
|
||||||
|
);
|
||||||
|
|
||||||
return this.state.favourited;
|
return this.state.favourited;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -63,6 +63,7 @@ function PhotoInformation({ info, url, api }) {
|
||||||
const [other, setOther] = useState(false);
|
const [other, setOther] = useState(false);
|
||||||
const [shareModal, openShareModal] = useState(false);
|
const [shareModal, openShareModal] = useState(false);
|
||||||
const [excludeModal, openExcludeModal] = useState(false);
|
const [excludeModal, openExcludeModal] = useState(false);
|
||||||
|
const [favouriteTooltipText, setFavouriteTooltipText] = useState(variables.getMessage('widgets.quote.favourite'));
|
||||||
|
|
||||||
if (info.hidden === true || !info.credit) {
|
if (info.hidden === true || !info.credit) {
|
||||||
return null;
|
return null;
|
||||||
|
@ -207,7 +208,7 @@ function PhotoInformation({ info, url, api }) {
|
||||||
</Tooltip>
|
</Tooltip>
|
||||||
)}
|
)}
|
||||||
<Tooltip
|
<Tooltip
|
||||||
title={variables.getMessage('widgets.quote.favourite')}
|
title={favouriteTooltipText}
|
||||||
key="favourite"
|
key="favourite"
|
||||||
placement="top"
|
placement="top"
|
||||||
>
|
>
|
||||||
|
@ -216,6 +217,7 @@ function PhotoInformation({ info, url, api }) {
|
||||||
offline={info.offline}
|
offline={info.offline}
|
||||||
credit={info.credit}
|
credit={info.credit}
|
||||||
photoURL={info.url}
|
photoURL={info.url}
|
||||||
|
tooltipText={(text) => setFavouriteTooltipText(text)}
|
||||||
/>
|
/>
|
||||||
</Tooltip>
|
</Tooltip>
|
||||||
{!info.offline && (
|
{!info.offline && (
|
||||||
|
|
|
@ -2,7 +2,9 @@ import variables from 'config/variables';
|
||||||
import { PureComponent, Fragment } from 'react';
|
import { PureComponent, Fragment } from 'react';
|
||||||
import { ColorPicker } from '@muetab/react-color-gradient-picker';
|
import { ColorPicker } from '@muetab/react-color-gradient-picker';
|
||||||
import { toast } from 'react-toastify';
|
import { toast } from 'react-toastify';
|
||||||
import { Row, Content, Action } from '../../../components/Layout/Settings/Item/SettingsItem';
|
import { Row, Content, Action } from 'components/Layout/Settings';
|
||||||
|
import { Button } from 'components/Elements';
|
||||||
|
import { MdAdd, MdRefresh } from 'react-icons/md';
|
||||||
|
|
||||||
import { hexToRgb, rgbToHex } from '../api/gradient';
|
import { hexToRgb, rgbToHex } from '../api/gradient';
|
||||||
|
|
||||||
|
@ -208,9 +210,7 @@ export default class ColourSettings extends PureComponent {
|
||||||
<div className="colourInput">{gradientInputs}</div>
|
<div className="colourInput">{gradientInputs}</div>
|
||||||
{!gradientHasMoreThanOneColour && (
|
{!gradientHasMoreThanOneColour && (
|
||||||
<>
|
<>
|
||||||
<button type="button" className="add" onClick={this.addColour}>
|
<Button type="settings" onClick={this.addColour} icon={<MdAdd />} label={variables.getMessage('modals.main.settings.sections.background.source.add_colour')} />
|
||||||
{variables.getMessage('modals.main.settings.sections.background.source.add_colour')}
|
|
||||||
</button>
|
|
||||||
</>
|
</>
|
||||||
)}
|
)}
|
||||||
</>
|
</>
|
||||||
|
@ -229,6 +229,7 @@ export default class ColourSettings extends PureComponent {
|
||||||
{colourSettings}
|
{colourSettings}
|
||||||
<div className="colourReset">
|
<div className="colourReset">
|
||||||
<span className="link" onClick={() => this.resetColour()}>
|
<span className="link" onClick={() => this.resetColour()}>
|
||||||
|
<MdRefresh />
|
||||||
{variables.getMessage('modals.main.settings.buttons.reset')}
|
{variables.getMessage('modals.main.settings.buttons.reset')}
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -13,9 +13,8 @@ import EventBus from 'utils/eventbus';
|
||||||
import { compressAccurately, filetoDataURL } from 'image-conversion';
|
import { compressAccurately, filetoDataURL } from 'image-conversion';
|
||||||
import videoCheck from '../api/videoCheck';
|
import videoCheck from '../api/videoCheck';
|
||||||
|
|
||||||
import Checkbox from '../../../components/Form/Settings/Checkbox/Checkbox';
|
import { Checkbox, FileUpload } from 'components/Form/Settings';
|
||||||
import FileUpload from '../../../components/Form/Settings/FileUpload/FileUpload';
|
import { Tooltip, Button } from 'components/Elements';
|
||||||
import { Tooltip } from 'components/Elements';
|
|
||||||
import Modal from 'react-modal';
|
import Modal from 'react-modal';
|
||||||
|
|
||||||
import CustomURLModal from './CustomURLModal';
|
import CustomURLModal from './CustomURLModal';
|
||||||
|
@ -198,14 +197,8 @@ export default class CustomSettings extends PureComponent {
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div className="topbarbuttons">
|
<div className="topbarbuttons">
|
||||||
<button onClick={() => this.uploadCustomBackground()}>
|
<Button type="settings" onClick={() => this.uploadCustomBackground()} icon={<MdOutlineFileUpload />} label={variables.getMessage('modals.main.settings.sections.background.source.upload')} />
|
||||||
{variables.getMessage('modals.main.settings.sections.background.source.upload')}{' '}
|
<Button type="settings" onClick={() => this.setState({ customURLModal: true })} icon={<MdAddLink />} label={variables.getMessage('modals.main.settings.sections.background.source.add_url')} />
|
||||||
<MdOutlineFileUpload />
|
|
||||||
</button>
|
|
||||||
<button onClick={() => this.setState({ customURLModal: true })}>
|
|
||||||
{variables.getMessage('modals.main.settings.sections.background.source.add_url')}{' '}
|
|
||||||
<MdAddLink />
|
|
||||||
</button>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div className="dropzone-content">
|
<div className="dropzone-content">
|
||||||
|
@ -224,9 +217,7 @@ export default class CustomSettings extends PureComponent {
|
||||||
'modals.main.settings.sections.background.source.remove',
|
'modals.main.settings.sections.background.source.remove',
|
||||||
)}
|
)}
|
||||||
>
|
>
|
||||||
<button onClick={() => this.modifyCustomBackground('remove', index)}>
|
<Button type="settings" onClick={() => this.modifyCustomBackground('remove', index)} icon={<MdCancel />} />
|
||||||
<MdCancel />
|
|
||||||
</button>
|
|
||||||
</Tooltip>
|
</Tooltip>
|
||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
|
@ -249,10 +240,7 @@ export default class CustomSettings extends PureComponent {
|
||||||
},
|
},
|
||||||
)}
|
)}
|
||||||
</span>
|
</span>
|
||||||
<button onClick={() => this.uploadCustomBackground()}>
|
<Button type="settings" onClick={() => this.uploadCustomBackground()} icon={<MdFolder />} label={variables.getMessage('modals.main.settings.sections.background.source.select')} />
|
||||||
{variables.getMessage('modals.main.settings.sections.background.source.select')}
|
|
||||||
<MdFolder />
|
|
||||||
</button>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
|
|
|
@ -63,7 +63,7 @@ div.color-preview-area > div > div:nth-child(5) {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: center;
|
justify-content: flex-end;
|
||||||
}
|
}
|
||||||
|
|
||||||
.input-field .input-container .input {
|
.input-field .input-container .input {
|
||||||
|
|
|
@ -21,6 +21,7 @@ import { Button } from 'components/Elements';
|
||||||
import { install, uninstall } from 'utils/marketplace';
|
import { install, uninstall } from 'utils/marketplace';
|
||||||
import { Carousel } from '../Elements/Carousel';
|
import { Carousel } from '../Elements/Carousel';
|
||||||
import { ShareModal } from 'components/Elements';
|
import { ShareModal } from 'components/Elements';
|
||||||
|
import { MdClose } from 'react-icons/md';
|
||||||
|
|
||||||
class Item extends PureComponent {
|
class Item extends PureComponent {
|
||||||
constructor(props) {
|
constructor(props) {
|
||||||
|
@ -77,9 +78,11 @@ class Item extends PureComponent {
|
||||||
if (this.state.showUpdateButton) {
|
if (this.state.showUpdateButton) {
|
||||||
updateButton = (
|
updateButton = (
|
||||||
<Fragment key="update">
|
<Fragment key="update">
|
||||||
<button className="removeFromMue" onClick={() => this.updateAddon()}>
|
<Button
|
||||||
{variables.getMessage('modals.main.addons.product.buttons.update_addon')}
|
type="settings"
|
||||||
</button>
|
onClick={() => this.updateAddon()}
|
||||||
|
label={variables.getMessage('modals.main.addons.product.buttons.update_addon')}
|
||||||
|
/>
|
||||||
</Fragment>
|
</Fragment>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -202,11 +205,11 @@ class Item extends PureComponent {
|
||||||
</div>
|
</div>
|
||||||
</>
|
</>
|
||||||
)}
|
)}
|
||||||
<div>
|
<div className="marketplaceDescription">
|
||||||
<p className="title">
|
<span className="title">
|
||||||
{variables.getMessage('modals.main.marketplace.product.description')}
|
{variables.getMessage('modals.main.marketplace.product.description')}
|
||||||
</p>
|
</span>
|
||||||
<p dangerouslySetInnerHTML={{ __html: this.props.data.description }} />
|
<span className="subtitle" dangerouslySetInnerHTML={{ __html: this.props.data.description }} />
|
||||||
</div>
|
</div>
|
||||||
<div className="moreInfo">
|
<div className="moreInfo">
|
||||||
{moreInfoItem(
|
{moreInfoItem(
|
||||||
|
@ -279,7 +282,13 @@ class Item extends PureComponent {
|
||||||
/>
|
/>
|
||||||
<Button
|
<Button
|
||||||
type="icon"
|
type="icon"
|
||||||
onClick={() => this.setState({ shareModal: true })}
|
onClick={() =>
|
||||||
|
window.open(
|
||||||
|
variables.constants.REPORT_ITEM +
|
||||||
|
this.props.data.datadisplay_name.split(' ').join('+'),
|
||||||
|
'_blank',
|
||||||
|
)
|
||||||
|
}
|
||||||
icon={<MdFlag />}
|
icon={<MdFlag />}
|
||||||
tooltipTitle={variables.getMessage(
|
tooltipTitle={variables.getMessage(
|
||||||
'modals.main.marketplace.product.buttons.report',
|
'modals.main.marketplace.product.buttons.report',
|
||||||
|
|
|
@ -25,9 +25,7 @@ export default class Added extends PureComponent {
|
||||||
};
|
};
|
||||||
this.buttons = {
|
this.buttons = {
|
||||||
uninstall: (
|
uninstall: (
|
||||||
<button className="removeFromMue" onClick={() => this.uninstall()}>
|
<Button type="settings" onClick={() => this.uninstall()} label={variables.getMessage('modals.main.marketplace.product.buttons.remove')} />
|
||||||
{variables.getMessage('modals.main.marketplace.product.buttons.remove')}
|
|
||||||
</button>
|
|
||||||
),
|
),
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
import variables from 'config/variables';
|
import variables from 'config/variables';
|
||||||
import { PureComponent } from 'react';
|
import { PureComponent } from 'react';
|
||||||
import { MdOutlineExtensionOff } from 'react-icons/md';
|
import { MdOutlineExtensionOff } from 'react-icons/md';
|
||||||
|
import { Button } from 'components/Elements';
|
||||||
|
|
||||||
export default class Create extends PureComponent {
|
export default class Create extends PureComponent {
|
||||||
constructor() {
|
constructor() {
|
||||||
|
@ -27,7 +28,7 @@ export default class Create extends PureComponent {
|
||||||
{variables.getMessage('modals.main.addons.create.moved_description')}
|
{variables.getMessage('modals.main.addons.create.moved_description')}
|
||||||
</span>
|
</span>
|
||||||
<div className="createButtons">
|
<div className="createButtons">
|
||||||
<button>Coming soon...</button>
|
<Button type="settings" label={variables.getMessage('modals.main.addons.create.moved_button')} />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -105,13 +105,7 @@ class MessageOptions extends PureComponent {
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<div className="messageAction">
|
<div className="messageAction">
|
||||||
<button
|
<Button type="settings" onClick={() => this.modifyMessage('remove', index)} icon={<MdCancel />} label={variables.getMessage('modals.main.marketplace.product.buttons.remove')} />
|
||||||
className="deleteButton"
|
|
||||||
onClick={() => this.modifyMessage('remove', index)}
|
|
||||||
>
|
|
||||||
{variables.getMessage('modals.main.marketplace.product.buttons.remove')}
|
|
||||||
<MdCancel />
|
|
||||||
</button>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -24,34 +24,36 @@ function AdvancedOptions() {
|
||||||
|
|
||||||
const Data = () => {
|
const Data = () => {
|
||||||
return (
|
return (
|
||||||
<>
|
localStorage.getItem('welcomePreview') !== 'true' && (
|
||||||
{localStorage.getItem('welcomePreview') !== 'true' && (
|
<Row final={true}>
|
||||||
<div className="settingsRow">
|
<Content
|
||||||
<div className="content">
|
title={variables.getMessage('modals.main.settings.sections.advanced.data')}
|
||||||
<span className="title">
|
subtitle={variables.getMessage(
|
||||||
{variables.getMessage('modals.main.settings.sections.advanced.data')}
|
'modals.main.settings.sections.advanced.data_description',
|
||||||
</span>
|
)}
|
||||||
<span className="subtitle">
|
/>
|
||||||
{variables.getMessage('modals.main.settings.sections.advanced.data_subtitle')}
|
<div className="action activityButtons">
|
||||||
</span>
|
<button onClick={() => setResetModal(true)}>
|
||||||
</div>
|
{variables.getMessage('modals.main.settings.buttons.reset')}
|
||||||
<div className="action activityButtons">
|
<ResetIcon />
|
||||||
<button onClick={() => setResetModal(true)}>
|
</button>
|
||||||
{variables.getMessage('modals.main.settings.buttons.reset')}
|
<button onClick={() => exportSettings()}>
|
||||||
<ResetIcon />
|
{variables.getMessage('modals.main.settings.buttons.export')}
|
||||||
</button>
|
<ExportIcon />
|
||||||
<button onClick={() => exportSettings()}>
|
</button>
|
||||||
{variables.getMessage('modals.main.settings.buttons.export')}
|
<button onClick={() => document.getElementById('file-input').click()}>
|
||||||
<ExportIcon />
|
{variables.getMessage('modals.main.settings.buttons.import')}
|
||||||
</button>
|
<ImportIcon />
|
||||||
<button onClick={() => document.getElementById('file-input').click()}>
|
</button>
|
||||||
{variables.getMessage('modals.main.settings.buttons.import')}
|
|
||||||
<ImportIcon />
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
)}
|
<FileUpload
|
||||||
</>
|
id="file-input"
|
||||||
|
accept="application/json"
|
||||||
|
type="settings"
|
||||||
|
loadFunction={(e) => importSettings(e)}
|
||||||
|
/>
|
||||||
|
</Row>
|
||||||
|
)
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -90,9 +92,7 @@ function AdvancedOptions() {
|
||||||
<>
|
<>
|
||||||
<Section
|
<Section
|
||||||
title={variables.getMessage(`${ADVANCED_SECTION}.data`)}
|
title={variables.getMessage(`${ADVANCED_SECTION}.data`)}
|
||||||
subtitle={variables.getMessage(
|
subtitle={variables.getMessage(`${ADVANCED_SECTION}.data_subtitle`)}
|
||||||
'modals.main.settings.sections.appearance.accessibility.description',
|
|
||||||
)}
|
|
||||||
onClick={() => setData(true)}
|
onClick={() => setData(true)}
|
||||||
icon={<MdDataUsage />}
|
icon={<MdDataUsage />}
|
||||||
/>
|
/>
|
||||||
|
@ -142,12 +142,6 @@ function AdvancedOptions() {
|
||||||
<Text name="tabName" default={variables.getMessage('tabname')} category="other" />
|
<Text name="tabName" default={variables.getMessage('tabname')} category="other" />
|
||||||
</Action>
|
</Action>
|
||||||
</Row>
|
</Row>
|
||||||
<FileUpload
|
|
||||||
id="file-input"
|
|
||||||
accept="application/json"
|
|
||||||
type="settings"
|
|
||||||
loadFunction={(e) => importSettings(e)}
|
|
||||||
/>
|
|
||||||
<Row>
|
<Row>
|
||||||
<Content
|
<Content
|
||||||
title={variables.getMessage('modals.main.settings.sections.advanced.custom_css')}
|
title={variables.getMessage('modals.main.settings.sections.advanced.custom_css')}
|
||||||
|
|
|
@ -143,7 +143,7 @@ function AppearanceOptions() {
|
||||||
|
|
||||||
const WidgetStyle = () => {
|
const WidgetStyle = () => {
|
||||||
return (
|
return (
|
||||||
<Row>
|
<Row final={true}>
|
||||||
<Content
|
<Content
|
||||||
title={variables.getMessage('modals.main.settings.sections.appearance.style.title')}
|
title={variables.getMessage('modals.main.settings.sections.appearance.style.title')}
|
||||||
subtitle={variables.getMessage(
|
subtitle={variables.getMessage(
|
||||||
|
|
|
@ -14,7 +14,7 @@ import { getLocalisedAchievementData, achievements, checkAchievements } from 'ut
|
||||||
|
|
||||||
class Stats extends PureComponent {
|
class Stats extends PureComponent {
|
||||||
constructor() {
|
constructor() {
|
||||||
super();
|
super();
|
||||||
this.state = {
|
this.state = {
|
||||||
stats: JSON.parse(localStorage.getItem('statsData')) || {},
|
stats: JSON.parse(localStorage.getItem('statsData')) || {},
|
||||||
achievements,
|
achievements,
|
||||||
|
@ -193,7 +193,7 @@ class Stats extends PureComponent {
|
||||||
}
|
}
|
||||||
})}
|
})}
|
||||||
</div>
|
</div>
|
||||||
<span className="title">Locked</span>
|
<span className="title">{variables.getMessage(`${STATS_SECTION}.locked`)}</span>
|
||||||
<div className="achievementsGrid preferencesInactive">
|
<div className="achievementsGrid preferencesInactive">
|
||||||
{this.state.achievements.map((achievement, index) => {
|
{this.state.achievements.map((achievement, index) => {
|
||||||
if (!achievement.achieved) {
|
if (!achievement.achieved) {
|
||||||
|
|
|
@ -0,0 +1,63 @@
|
||||||
|
import variables from 'config/variables';
|
||||||
|
|
||||||
|
import { MdEdit, MdCancel } from 'react-icons/md';
|
||||||
|
import { Button } from 'components/Elements';
|
||||||
|
|
||||||
|
const QuickLink = ({ item, deleteLink, startEditLink }) => {
|
||||||
|
let target,
|
||||||
|
rel = null;
|
||||||
|
if (localStorage.getItem('quicklinksnewtab') === 'true') {
|
||||||
|
target = '_blank';
|
||||||
|
rel = 'noopener noreferrer';
|
||||||
|
}
|
||||||
|
|
||||||
|
const useText = localStorage.getItem('quicklinksText') === 'true';
|
||||||
|
|
||||||
|
if (useText) {
|
||||||
|
return (
|
||||||
|
<a
|
||||||
|
className="quicklinkstext"
|
||||||
|
onContextMenu={(e) => deleteLink(item.key, e)}
|
||||||
|
href={item.url}
|
||||||
|
target={target}
|
||||||
|
rel={rel}
|
||||||
|
draggable={false}
|
||||||
|
>
|
||||||
|
{item.name}
|
||||||
|
</a>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
const img =
|
||||||
|
item.icon ||
|
||||||
|
'https://icon.horse/icon/ ' + item.url.replace('https://', '').replace('http://', '');
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div className="messageMap">
|
||||||
|
<div className="icon">
|
||||||
|
<img
|
||||||
|
src={img}
|
||||||
|
alt={item.name}
|
||||||
|
draggable={false}
|
||||||
|
style={{ height: '30px', width: '30px' }}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<div className="messageText">
|
||||||
|
<div className="title">{item.name}</div>
|
||||||
|
<div className="subtitle">
|
||||||
|
<a className="quicklinknostyle" target="_blank" rel="noopener noreferrer" href={item.url}>
|
||||||
|
{item.url}
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<div className="messageAction">
|
||||||
|
<Button type="settings" onClick={() => startEditLink(item)} icon={<MdEdit />} label={variables.getMessage('modals.main.settings.sections.quicklinks.edit')} />
|
||||||
|
<Button type="settings" onClick={(e) => deleteLink(item.key, e)} icon={ <MdCancel />} label={variables.getMessage('modals.main.marketplace.product.buttons.remove')} />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
export default QuickLink;
|
|
@ -125,6 +125,7 @@ class Navbar extends PureComponent {
|
||||||
})}
|
})}
|
||||||
>
|
>
|
||||||
<button
|
<button
|
||||||
|
className="navbarButton"
|
||||||
onClick={() => this.props.openModal('mainModal')}
|
onClick={() => this.props.openModal('mainModal')}
|
||||||
style={{ fontSize: this.state.zoomFontSize }}
|
style={{ fontSize: this.state.zoomFontSize }}
|
||||||
aria-label={variables.getMessage('modals.main.navbar.settings', {
|
aria-label={variables.getMessage('modals.main.navbar.settings', {
|
||||||
|
|
|
@ -60,7 +60,7 @@ class Apps extends PureComponent {
|
||||||
return (
|
return (
|
||||||
<div className="notes" onMouseLeave={() => this.hideApps()} onFocus={() => this.showApps()}>
|
<div className="notes" onMouseLeave={() => this.hideApps()} onFocus={() => this.showApps()}>
|
||||||
<button
|
<button
|
||||||
className="first"
|
className="navbarButton"
|
||||||
onMouseEnter={() => this.showApps()}
|
onMouseEnter={() => this.showApps()}
|
||||||
onFocus={() => this.hideApps()}
|
onFocus={() => this.hideApps()}
|
||||||
onBlur={() => this.showApps()}
|
onBlur={() => this.showApps()}
|
||||||
|
|
|
@ -75,6 +75,7 @@ class Maximise extends PureComponent {
|
||||||
title={variables.getMessage('modals.main.settings.sections.background.buttons.view')}
|
title={variables.getMessage('modals.main.settings.sections.background.buttons.view')}
|
||||||
>
|
>
|
||||||
<button
|
<button
|
||||||
|
className="navbarButton"
|
||||||
style={{ fontSize: this.props.fontSize }}
|
style={{ fontSize: this.props.fontSize }}
|
||||||
onClick={this.maximise}
|
onClick={this.maximise}
|
||||||
aria-label={variables.getMessage('modals.main.settings.sections.background.buttons.view')}
|
aria-label={variables.getMessage('modals.main.settings.sections.background.buttons.view')}
|
||||||
|
|
|
@ -91,7 +91,7 @@ class Notes extends PureComponent {
|
||||||
return (
|
return (
|
||||||
<div className="notes" onMouseLeave={() => this.hideNotes()} onFocus={() => this.showNotes()}>
|
<div className="notes" onMouseLeave={() => this.hideNotes()} onFocus={() => this.showNotes()}>
|
||||||
<button
|
<button
|
||||||
className="first"
|
className="navbarButton"
|
||||||
onMouseEnter={() => this.showNotes()}
|
onMouseEnter={() => this.showNotes()}
|
||||||
onFocus={() => this.showNotes()}
|
onFocus={() => this.showNotes()}
|
||||||
onBlur={() => this.hideNotes()}
|
onBlur={() => this.hideNotes()}
|
||||||
|
|
|
@ -61,6 +61,7 @@ function Refresh() {
|
||||||
return (
|
return (
|
||||||
<Tooltip title={variables.getMessage('widgets.navbar.tooltips.refresh')} subtitle={refreshText}>
|
<Tooltip title={variables.getMessage('widgets.navbar.tooltips.refresh')} subtitle={refreshText}>
|
||||||
<button
|
<button
|
||||||
|
className="navbarButton"
|
||||||
onClick={refresh}
|
onClick={refresh}
|
||||||
aria-label={variables.getMessage('widgets.navbar.tooltips.refresh')}
|
aria-label={variables.getMessage('widgets.navbar.tooltips.refresh')}
|
||||||
>
|
>
|
||||||
|
|
|
@ -139,7 +139,7 @@ class Todo extends PureComponent {
|
||||||
return (
|
return (
|
||||||
<div className="notes" onMouseLeave={() => this.hideTodo()} onFocus={() => this.showTodo()}>
|
<div className="notes" onMouseLeave={() => this.hideTodo()} onFocus={() => this.showTodo()}>
|
||||||
<button
|
<button
|
||||||
className="first"
|
className="navbarButton"
|
||||||
onMouseEnter={() => this.showTodo()}
|
onMouseEnter={() => this.showTodo()}
|
||||||
onFocus={() => this.hideTodo()}
|
onFocus={() => this.hideTodo()}
|
||||||
onBlur={() => this.showTodo()}
|
onBlur={() => this.showTodo()}
|
||||||
|
|
|
@ -37,19 +37,13 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
.old {
|
.old {
|
||||||
.tooltip {
|
button.navbarButton {
|
||||||
button {
|
|
||||||
@include basicIconButton(12px, 1.2rem, legacy);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.first {
|
|
||||||
@include basicIconButton(12px, 1.2rem, legacy);
|
@include basicIconButton(12px, 1.2rem, legacy);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.new {
|
.new {
|
||||||
button {
|
button.navbarButton {
|
||||||
@include basicIconButton(12px, 1.2rem, ui);
|
@include basicIconButton(12px, 1.2rem, ui);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
import variables from 'config/variables';
|
import variables from 'config/variables';
|
||||||
|
|
||||||
import { MdEdit, MdCancel } from 'react-icons/md';
|
import { MdEdit, MdCancel } from 'react-icons/md';
|
||||||
|
import { Button } from 'components/Elements';
|
||||||
|
|
||||||
const QuickLink = ({ item, deleteLink, startEditLink }) => {
|
const QuickLink = ({ item, deleteLink, startEditLink }) => {
|
||||||
let target,
|
let target,
|
||||||
|
@ -51,14 +52,8 @@ const QuickLink = ({ item, deleteLink, startEditLink }) => {
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<div className="messageAction">
|
<div className="messageAction">
|
||||||
<button className="deleteButton" onClick={() => startEditLink(item)}>
|
<Button type="settings" onClick={() => startEditLink(item)} icon={<MdEdit />} label={variables.getMessage('modals.main.settings.sections.quicklinks.edit')} />
|
||||||
{variables.getMessage('modals.main.settings.sections.quicklinks.edit')}
|
<Button type="settings" onClick={(e) => deleteLink(item.key, e)} icon={ <MdCancel />} label={variables.getMessage('modals.main.marketplace.product.buttons.remove')} />
|
||||||
<MdEdit />
|
|
||||||
</button>
|
|
||||||
<button className="deleteButton" onClick={(e) => deleteLink(item.key, e)}>
|
|
||||||
{variables.getMessage('modals.main.marketplace.product.buttons.remove')}
|
|
||||||
<MdCancel />
|
|
||||||
</button>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -44,7 +44,7 @@ class QuickLinksOptions extends PureComponent {
|
||||||
const data = JSON.parse(localStorage.getItem('quicklinks'));
|
const data = JSON.parse(localStorage.getItem('quicklinks'));
|
||||||
|
|
||||||
if (!url.startsWith('http://') && !url.startsWith('https://')) {
|
if (!url.startsWith('http://') && !url.startsWith('https://')) {
|
||||||
url = 'http://' + url;
|
url = 'https://' + url;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (url.length <= 0 || isValidUrl(url) === false) {
|
if (url.length <= 0 || isValidUrl(url) === false) {
|
||||||
|
|
|
@ -12,6 +12,7 @@ import {
|
||||||
PreferencesWrapper,
|
PreferencesWrapper,
|
||||||
} from 'components/Layout/Settings';
|
} from 'components/Layout/Settings';
|
||||||
import { Checkbox, Dropdown } from 'components/Form/Settings';
|
import { Checkbox, Dropdown } from 'components/Form/Settings';
|
||||||
|
import { Button } from 'components/Elements';
|
||||||
|
|
||||||
import { toast } from 'react-toastify';
|
import { toast } from 'react-toastify';
|
||||||
import EventBus from 'utils/eventbus';
|
import EventBus from 'utils/eventbus';
|
||||||
|
@ -169,9 +170,7 @@ class QuoteOptions extends PureComponent {
|
||||||
subtitle={variables.getMessage(`${QUOTE_SECTION}.custom_subtitle`)}
|
subtitle={variables.getMessage(`${QUOTE_SECTION}.custom_subtitle`)}
|
||||||
/>
|
/>
|
||||||
<Action>
|
<Action>
|
||||||
<button onClick={() => this.modifyCustomQuote('add')}>
|
<Button type="settings" onClick={() => this.modifyCustomQuote('add')} icon={<MdAdd />} label={variables.getMessage(`${QUOTE_SECTION}.add`)} />
|
||||||
{variables.getMessage(`${QUOTE_SECTION}.add`)} <MdAdd />
|
|
||||||
</button>
|
|
||||||
</Action>
|
</Action>
|
||||||
</Row>
|
</Row>
|
||||||
|
|
||||||
|
@ -204,14 +203,7 @@ class QuoteOptions extends PureComponent {
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<div className="messageAction">
|
<div className="messageAction">
|
||||||
<button
|
<Button type="settings" onClick={() => this.modifyCustomQuote('remove', index)} icon={<MdCancel />} label={variables.getMessage('modals.main.marketplace.product.buttons.remove')} />
|
||||||
className="deleteButton"
|
|
||||||
onClick={() => this.modifyCustomQuote('remove', index)}
|
|
||||||
style={{}}
|
|
||||||
>
|
|
||||||
{variables.getMessage('modals.main.marketplace.product.buttons.remove')}
|
|
||||||
<MdCancel />
|
|
||||||
</button>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -225,9 +217,7 @@ class QuoteOptions extends PureComponent {
|
||||||
<span className="subtitle">
|
<span className="subtitle">
|
||||||
{variables.getMessage('modals.main.settings.sections.message.add_some')}
|
{variables.getMessage('modals.main.settings.sections.message.add_some')}
|
||||||
</span>
|
</span>
|
||||||
<button onClick={() => this.modifyCustomQuote('add')}>
|
<Button type="settings" onClick={() => this.modifyCustomQuote('add')} icon={<MdAdd />} label={variables.getMessage(`${QUOTE_SECTION}.add`)} />
|
||||||
{variables.getMessage(`${QUOTE_SECTION}.add`)} <MdAdd />
|
|
||||||
</button>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
|
|
|
@ -100,6 +100,7 @@ export default class Search extends PureComponent {
|
||||||
if (localStorage.getItem('voiceSearch') === 'true') {
|
if (localStorage.getItem('voiceSearch') === 'true') {
|
||||||
microphone = (
|
microphone = (
|
||||||
<button
|
<button
|
||||||
|
className="navbarButton"
|
||||||
onClick={this.startSpeechRecognition}
|
onClick={this.startSpeechRecognition}
|
||||||
ref={this.micIcon}
|
ref={this.micIcon}
|
||||||
aria-label="Microphone Search"
|
aria-label="Microphone Search"
|
||||||
|
@ -214,6 +215,7 @@ export default class Search extends PureComponent {
|
||||||
title={variables.getMessage('modals.main.settings.sections.search.search_engine')}
|
title={variables.getMessage('modals.main.settings.sections.search.search_engine')}
|
||||||
>
|
>
|
||||||
<button
|
<button
|
||||||
|
className="navbarButton"
|
||||||
aria-label="Search Engine"
|
aria-label="Search Engine"
|
||||||
onClick={() => this.setState({ searchDropdown: !this.state.searchDropdown })}
|
onClick={() => this.setState({ searchDropdown: !this.state.searchDropdown })}
|
||||||
>
|
>
|
||||||
|
@ -232,7 +234,7 @@ export default class Search extends PureComponent {
|
||||||
<form onSubmit={this.searchButton} className="searchBar">
|
<form onSubmit={this.searchButton} className="searchBar">
|
||||||
<div className={this.state.classList}>
|
<div className={this.state.classList}>
|
||||||
<Tooltip title={variables.getMessage('widgets.search')}>
|
<Tooltip title={variables.getMessage('widgets.search')}>
|
||||||
<button onClick={this.searchButton} aria-label="Search">
|
<button className="navbarButton" onClick={this.searchButton} aria-label="Search">
|
||||||
<MdSearch />
|
<MdSearch />
|
||||||
</button>
|
</button>
|
||||||
</Tooltip>
|
</Tooltip>
|
||||||
|
|
|
@ -420,6 +420,7 @@
|
||||||
"offline_mode": "নীরব কার্যপদ্ধতি",
|
"offline_mode": "নীরব কার্যপদ্ধতি",
|
||||||
"offline_subtitle": "সক্রিয় করা হলে, অনলাইন পরিষেবাগুলির সমস্ত অনুরোধ অক্ষম করা হবে।",
|
"offline_subtitle": "সক্রিয় করা হলে, অনলাইন পরিষেবাগুলির সমস্ত অনুরোধ অক্ষম করা হবে।",
|
||||||
"data": "ডেটা",
|
"data": "ডেটা",
|
||||||
|
"data_description": "Choose whether to export your Mue settings to your computer, import an existing settings file, or reset your settings to their default values",
|
||||||
"data_subtitle": "আপনার কম্পিউটারে আপনার Mue সেটিংস রপ্তানি করতে, একটি বিদ্যমান সেটিংস ফাইল আমদানি করতে বা আপনার সেটিংসকে তাদের ডিফল্ট মানগুলিতে পুনরায় সেট করতে চান তা চয়ন করুন",
|
"data_subtitle": "আপনার কম্পিউটারে আপনার Mue সেটিংস রপ্তানি করতে, একটি বিদ্যমান সেটিংস ফাইল আমদানি করতে বা আপনার সেটিংসকে তাদের ডিফল্ট মানগুলিতে পুনরায় সেট করতে চান তা চয়ন করুন",
|
||||||
"reset_modal": {
|
"reset_modal": {
|
||||||
"title": "সতর্কতা",
|
"title": "সতর্কতা",
|
||||||
|
@ -453,7 +454,8 @@
|
||||||
},
|
},
|
||||||
"usage": "ব্যবহারের পরিসংখ্যান",
|
"usage": "ব্যবহারের পরিসংখ্যান",
|
||||||
"achievements": "অর্জনগুলি",
|
"achievements": "অর্জনগুলি",
|
||||||
"unlocked": "{count} আনলক করা হয়েছে"
|
"unlocked": "{count} আনলক করা হয়েছে",
|
||||||
|
"locked": "Locked"
|
||||||
},
|
},
|
||||||
"experimental": {
|
"experimental": {
|
||||||
"title": "পরীক্ষামূলক",
|
"title": "পরীক্ষামূলক",
|
||||||
|
|
|
@ -420,6 +420,7 @@
|
||||||
"offline_mode": "Offline Modus",
|
"offline_mode": "Offline Modus",
|
||||||
"offline_subtitle": "Wenn diese Option aktiviert ist, werden alle Anfragen an Online-Dienste deaktiviert.",
|
"offline_subtitle": "Wenn diese Option aktiviert ist, werden alle Anfragen an Online-Dienste deaktiviert.",
|
||||||
"data": "Daten",
|
"data": "Daten",
|
||||||
|
"data_description": "Choose whether to export your Mue settings to your computer, import an existing settings file, or reset your settings to their default values",
|
||||||
"data_subtitle": "Wählen Sie, ob Sie Ihre Mue-Einstellungen auf Ihren Computer exportieren, eine vorhandene Einstellungsdatei importieren oder Ihre Einstellungen auf die Standardwerte zurücksetzen möchten",
|
"data_subtitle": "Wählen Sie, ob Sie Ihre Mue-Einstellungen auf Ihren Computer exportieren, eine vorhandene Einstellungsdatei importieren oder Ihre Einstellungen auf die Standardwerte zurücksetzen möchten",
|
||||||
"reset_modal": {
|
"reset_modal": {
|
||||||
"title": "ACHTUNG",
|
"title": "ACHTUNG",
|
||||||
|
@ -453,7 +454,8 @@
|
||||||
},
|
},
|
||||||
"usage": "Nutzungsstatistiken",
|
"usage": "Nutzungsstatistiken",
|
||||||
"achievements": "Errungenschaften",
|
"achievements": "Errungenschaften",
|
||||||
"unlocked": "{count} Freigeschaltet"
|
"unlocked": "{count} Freigeschaltet",
|
||||||
|
"locked": "Locked"
|
||||||
},
|
},
|
||||||
"experimental": {
|
"experimental": {
|
||||||
"title": "Experimentell",
|
"title": "Experimentell",
|
||||||
|
|
|
@ -326,7 +326,7 @@
|
||||||
"tooltip": "Tooltip",
|
"tooltip": "Tooltip",
|
||||||
"text_only": "Show text only",
|
"text_only": "Show text only",
|
||||||
"add_link": "Add Link",
|
"add_link": "Add Link",
|
||||||
"no_quicklinks": "No quicklinks",
|
"no_quicklinks": "No quick links",
|
||||||
"edit": "Edit",
|
"edit": "Edit",
|
||||||
"style": "Style",
|
"style": "Style",
|
||||||
"options": {
|
"options": {
|
||||||
|
@ -420,7 +420,8 @@
|
||||||
"offline_mode": "Offline mode",
|
"offline_mode": "Offline mode",
|
||||||
"offline_subtitle": "When enabled, all requests to online services will be disabled.",
|
"offline_subtitle": "When enabled, all requests to online services will be disabled.",
|
||||||
"data": "Data",
|
"data": "Data",
|
||||||
"data_subtitle": "Choose whether to export your Mue settings to your computer, import an existing settings file, or reset your settings to their default values",
|
"data_description": "Choose whether to export your Mue settings to your computer, import an existing settings file, or reset your settings to their default values",
|
||||||
|
"data_subtitle": "Manage your data on Mue.",
|
||||||
"reset_modal": {
|
"reset_modal": {
|
||||||
"title": "WARNING",
|
"title": "WARNING",
|
||||||
"question": "Do you want to reset Mue?",
|
"question": "Do you want to reset Mue?",
|
||||||
|
@ -453,7 +454,8 @@
|
||||||
},
|
},
|
||||||
"usage": "Usage Stats",
|
"usage": "Usage Stats",
|
||||||
"achievements": "Achievements",
|
"achievements": "Achievements",
|
||||||
"unlocked": "{count} Unlocked"
|
"unlocked": "{count} Unlocked",
|
||||||
|
"locked": "Locked"
|
||||||
},
|
},
|
||||||
"experimental": {
|
"experimental": {
|
||||||
"title": "Experimental",
|
"title": "Experimental",
|
||||||
|
@ -580,7 +582,7 @@
|
||||||
"title": "Create",
|
"title": "Create",
|
||||||
"moved_title": "Create add-on has moved!",
|
"moved_title": "Create add-on has moved!",
|
||||||
"moved_description": "Following the 7.1 update, the creation of addons has now moved to the web UI",
|
"moved_description": "Following the 7.1 update, the creation of addons has now moved to the web UI",
|
||||||
"moved_button": "Get Started"
|
"moved_button": "Coming Soon...."
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
|
@ -326,7 +326,7 @@
|
||||||
"tooltip": "Tooltip",
|
"tooltip": "Tooltip",
|
||||||
"text_only": "Show text only",
|
"text_only": "Show text only",
|
||||||
"add_link": "Add Link",
|
"add_link": "Add Link",
|
||||||
"no_quicklinks": "No quicklinks",
|
"no_quicklinks": "No quick links",
|
||||||
"edit": "Edit",
|
"edit": "Edit",
|
||||||
"style": "Style",
|
"style": "Style",
|
||||||
"options": {
|
"options": {
|
||||||
|
@ -420,6 +420,7 @@
|
||||||
"offline_mode": "Offline mode",
|
"offline_mode": "Offline mode",
|
||||||
"offline_subtitle": "When enabled, all requests to online services will be disabled.",
|
"offline_subtitle": "When enabled, all requests to online services will be disabled.",
|
||||||
"data": "Data",
|
"data": "Data",
|
||||||
|
"data_description": "Choose whether to export your Mue settings to your computer, import an existing settings file, or reset your settings to their default values",
|
||||||
"data_subtitle": "Choose whether to export your Mue settings to your computer, import an existing settings file, or reset your settings to their default values",
|
"data_subtitle": "Choose whether to export your Mue settings to your computer, import an existing settings file, or reset your settings to their default values",
|
||||||
"reset_modal": {
|
"reset_modal": {
|
||||||
"title": "WARNING",
|
"title": "WARNING",
|
||||||
|
@ -453,7 +454,8 @@
|
||||||
},
|
},
|
||||||
"usage": "Usage Stats",
|
"usage": "Usage Stats",
|
||||||
"achievements": "Achievements",
|
"achievements": "Achievements",
|
||||||
"unlocked": "{count} Unlocked"
|
"unlocked": "{count} Unlocked",
|
||||||
|
"locked": "Locked"
|
||||||
},
|
},
|
||||||
"experimental": {
|
"experimental": {
|
||||||
"title": "Experimental",
|
"title": "Experimental",
|
||||||
|
|
|
@ -420,6 +420,7 @@
|
||||||
"offline_mode": "Modo sin conexión",
|
"offline_mode": "Modo sin conexión",
|
||||||
"offline_subtitle": "Cuando esté activada, se desactivarán todas las solicitudes a los servicios en línea.",
|
"offline_subtitle": "Cuando esté activada, se desactivarán todas las solicitudes a los servicios en línea.",
|
||||||
"data": "Datos",
|
"data": "Datos",
|
||||||
|
"data_description": "Choose whether to export your Mue settings to your computer, import an existing settings file, or reset your settings to their default values",
|
||||||
"data_subtitle": "Elija si desea exportar la configuración de Mue a su ordenador, importar un archivo de configuración existente o restablecer los valores predeterminados",
|
"data_subtitle": "Elija si desea exportar la configuración de Mue a su ordenador, importar un archivo de configuración existente o restablecer los valores predeterminados",
|
||||||
"reset_modal": {
|
"reset_modal": {
|
||||||
"title": "ADVERTENCIA",
|
"title": "ADVERTENCIA",
|
||||||
|
@ -453,7 +454,8 @@
|
||||||
},
|
},
|
||||||
"usage": "Estadísticas de uso",
|
"usage": "Estadísticas de uso",
|
||||||
"achievements": "Logros",
|
"achievements": "Logros",
|
||||||
"unlocked": "{count} Desbloqueado"
|
"unlocked": "{count} Desbloqueado",
|
||||||
|
"locked": "Locked"
|
||||||
},
|
},
|
||||||
"experimental": {
|
"experimental": {
|
||||||
"title": "Experimental",
|
"title": "Experimental",
|
||||||
|
|
|
@ -326,7 +326,7 @@
|
||||||
"tooltip": "Descripción emergente",
|
"tooltip": "Descripción emergente",
|
||||||
"text_only": "Mostrar solo texto",
|
"text_only": "Mostrar solo texto",
|
||||||
"add_link": "Add Link",
|
"add_link": "Add Link",
|
||||||
"no_quicklinks": "No quicklinks",
|
"no_quicklinks": "No quick links",
|
||||||
"edit": "Edit",
|
"edit": "Edit",
|
||||||
"style": "Style",
|
"style": "Style",
|
||||||
"options": {
|
"options": {
|
||||||
|
@ -420,6 +420,7 @@
|
||||||
"offline_mode": "Modo sin conexión",
|
"offline_mode": "Modo sin conexión",
|
||||||
"offline_subtitle": "When enabled, all requests to online services will be disabled.",
|
"offline_subtitle": "When enabled, all requests to online services will be disabled.",
|
||||||
"data": "Datos",
|
"data": "Datos",
|
||||||
|
"data_description": "Choose whether to export your Mue settings to your computer, import an existing settings file, or reset your settings to their default values",
|
||||||
"data_subtitle": "Choose whether to export your Mue settings to your computer, import an existing settings file, or reset your settings to their default values",
|
"data_subtitle": "Choose whether to export your Mue settings to your computer, import an existing settings file, or reset your settings to their default values",
|
||||||
"reset_modal": {
|
"reset_modal": {
|
||||||
"title": "ADVERTENCIA",
|
"title": "ADVERTENCIA",
|
||||||
|
@ -453,7 +454,8 @@
|
||||||
},
|
},
|
||||||
"usage": "Estadísticas de uso",
|
"usage": "Estadísticas de uso",
|
||||||
"achievements": "Achievements",
|
"achievements": "Achievements",
|
||||||
"unlocked": "{count} Unlocked"
|
"unlocked": "{count} Unlocked",
|
||||||
|
"locked": "Locked"
|
||||||
},
|
},
|
||||||
"experimental": {
|
"experimental": {
|
||||||
"title": "Experimental",
|
"title": "Experimental",
|
||||||
|
|
|
@ -326,7 +326,7 @@
|
||||||
"tooltip": "Info-bulle",
|
"tooltip": "Info-bulle",
|
||||||
"text_only": "Show text only",
|
"text_only": "Show text only",
|
||||||
"add_link": "Add Link",
|
"add_link": "Add Link",
|
||||||
"no_quicklinks": "No quicklinks",
|
"no_quicklinks": "No quick links",
|
||||||
"edit": "Edit",
|
"edit": "Edit",
|
||||||
"style": "Style",
|
"style": "Style",
|
||||||
"options": {
|
"options": {
|
||||||
|
@ -420,6 +420,7 @@
|
||||||
"offline_mode": "Mode hors-ligne",
|
"offline_mode": "Mode hors-ligne",
|
||||||
"offline_subtitle": "When enabled, all requests to online services will be disabled.",
|
"offline_subtitle": "When enabled, all requests to online services will be disabled.",
|
||||||
"data": "Donnés",
|
"data": "Donnés",
|
||||||
|
"data_description": "Choose whether to export your Mue settings to your computer, import an existing settings file, or reset your settings to their default values",
|
||||||
"data_subtitle": "Choose whether to export your Mue settings to your computer, import an existing settings file, or reset your settings to their default values",
|
"data_subtitle": "Choose whether to export your Mue settings to your computer, import an existing settings file, or reset your settings to their default values",
|
||||||
"reset_modal": {
|
"reset_modal": {
|
||||||
"title": "ATTENTION",
|
"title": "ATTENTION",
|
||||||
|
@ -453,7 +454,8 @@
|
||||||
},
|
},
|
||||||
"usage": "Usage Stats",
|
"usage": "Usage Stats",
|
||||||
"achievements": "Achievements",
|
"achievements": "Achievements",
|
||||||
"unlocked": "{count} Unlocked"
|
"unlocked": "{count} Unlocked",
|
||||||
|
"locked": "Locked"
|
||||||
},
|
},
|
||||||
"experimental": {
|
"experimental": {
|
||||||
"title": "Expérimental",
|
"title": "Expérimental",
|
||||||
|
|
|
@ -326,7 +326,7 @@
|
||||||
"tooltip": "Tooltip",
|
"tooltip": "Tooltip",
|
||||||
"text_only": "Hanya teks",
|
"text_only": "Hanya teks",
|
||||||
"add_link": "Add Link",
|
"add_link": "Add Link",
|
||||||
"no_quicklinks": "No quicklinks",
|
"no_quicklinks": "No quick links",
|
||||||
"edit": "Edit",
|
"edit": "Edit",
|
||||||
"style": "Style",
|
"style": "Style",
|
||||||
"options": {
|
"options": {
|
||||||
|
@ -420,6 +420,7 @@
|
||||||
"offline_mode": "Mode Luring",
|
"offline_mode": "Mode Luring",
|
||||||
"offline_subtitle": "When enabled, all requests to online services will be disabled.",
|
"offline_subtitle": "When enabled, all requests to online services will be disabled.",
|
||||||
"data": "Data",
|
"data": "Data",
|
||||||
|
"data_description": "Choose whether to export your Mue settings to your computer, import an existing settings file, or reset your settings to their default values",
|
||||||
"data_subtitle": "Choose whether to export your Mue settings to your computer, import an existing settings file, or reset your settings to their default values",
|
"data_subtitle": "Choose whether to export your Mue settings to your computer, import an existing settings file, or reset your settings to their default values",
|
||||||
"reset_modal": {
|
"reset_modal": {
|
||||||
"title": "PERINGATAN",
|
"title": "PERINGATAN",
|
||||||
|
@ -453,7 +454,8 @@
|
||||||
},
|
},
|
||||||
"usage": "Statistik Penggunaan",
|
"usage": "Statistik Penggunaan",
|
||||||
"achievements": "Achievements",
|
"achievements": "Achievements",
|
||||||
"unlocked": "{count} Unlocked"
|
"unlocked": "{count} Unlocked",
|
||||||
|
"locked": "Locked"
|
||||||
},
|
},
|
||||||
"experimental": {
|
"experimental": {
|
||||||
"title": "Experimental",
|
"title": "Experimental",
|
||||||
|
|
|
@ -420,6 +420,7 @@
|
||||||
"offline_mode": "Offline-modus",
|
"offline_mode": "Offline-modus",
|
||||||
"offline_subtitle": "Indien ingeschakeld worden alle verzoeken naar online diensten uitgeschakeld.",
|
"offline_subtitle": "Indien ingeschakeld worden alle verzoeken naar online diensten uitgeschakeld.",
|
||||||
"data": "Data",
|
"data": "Data",
|
||||||
|
"data_description": "Choose whether to export your Mue settings to your computer, import an existing settings file, or reset your settings to their default values",
|
||||||
"data_subtitle": "Kies of je jou Mue-instellingen naar je computer wilt exporteren, een bestaand instellingenbestand wilt importeren of je instellingen wilt terugzetten naar hun standaardwaarden",
|
"data_subtitle": "Kies of je jou Mue-instellingen naar je computer wilt exporteren, een bestaand instellingenbestand wilt importeren of je instellingen wilt terugzetten naar hun standaardwaarden",
|
||||||
"reset_modal": {
|
"reset_modal": {
|
||||||
"title": "WARNING",
|
"title": "WARNING",
|
||||||
|
@ -453,7 +454,8 @@
|
||||||
},
|
},
|
||||||
"usage": "Usage Stats",
|
"usage": "Usage Stats",
|
||||||
"achievements": "Prestaties",
|
"achievements": "Prestaties",
|
||||||
"unlocked": "{count} Ontgrendeld"
|
"unlocked": "{count} Ontgrendeld",
|
||||||
|
"locked": "Locked"
|
||||||
},
|
},
|
||||||
"experimental": {
|
"experimental": {
|
||||||
"title": "Experimenteel",
|
"title": "Experimenteel",
|
||||||
|
|
|
@ -326,7 +326,7 @@
|
||||||
"tooltip": "Tooltip",
|
"tooltip": "Tooltip",
|
||||||
"text_only": "Show text only",
|
"text_only": "Show text only",
|
||||||
"add_link": "Add Link",
|
"add_link": "Add Link",
|
||||||
"no_quicklinks": "No quicklinks",
|
"no_quicklinks": "No quick links",
|
||||||
"edit": "Edit",
|
"edit": "Edit",
|
||||||
"style": "Style",
|
"style": "Style",
|
||||||
"options": {
|
"options": {
|
||||||
|
@ -420,6 +420,7 @@
|
||||||
"offline_mode": "Frakoblet Modus",
|
"offline_mode": "Frakoblet Modus",
|
||||||
"offline_subtitle": "When enabled, all requests to online services will be disabled.",
|
"offline_subtitle": "When enabled, all requests to online services will be disabled.",
|
||||||
"data": "Data",
|
"data": "Data",
|
||||||
|
"data_description": "Choose whether to export your Mue settings to your computer, import an existing settings file, or reset your settings to their default values",
|
||||||
"data_subtitle": "Choose whether to export your Mue settings to your computer, import an existing settings file, or reset your settings to their default values",
|
"data_subtitle": "Choose whether to export your Mue settings to your computer, import an existing settings file, or reset your settings to their default values",
|
||||||
"reset_modal": {
|
"reset_modal": {
|
||||||
"title": "WARNING",
|
"title": "WARNING",
|
||||||
|
@ -453,7 +454,8 @@
|
||||||
},
|
},
|
||||||
"usage": "Usage Stats",
|
"usage": "Usage Stats",
|
||||||
"achievements": "Achievements",
|
"achievements": "Achievements",
|
||||||
"unlocked": "{count} Unlocked"
|
"unlocked": "{count} Unlocked",
|
||||||
|
"locked": "Locked"
|
||||||
},
|
},
|
||||||
"experimental": {
|
"experimental": {
|
||||||
"title": "Eksperimental",
|
"title": "Eksperimental",
|
||||||
|
|
|
@ -420,6 +420,7 @@
|
||||||
"offline_mode": "Modo offline",
|
"offline_mode": "Modo offline",
|
||||||
"offline_subtitle": "Quando ativado, todos os pedidos de serviços online serão desativados.",
|
"offline_subtitle": "Quando ativado, todos os pedidos de serviços online serão desativados.",
|
||||||
"data": "Dados",
|
"data": "Dados",
|
||||||
|
"data_description": "Choose whether to export your Mue settings to your computer, import an existing settings file, or reset your settings to their default values",
|
||||||
"data_subtitle": "Escolha se deseja exportar as suas configurações de Mue para o seu computador, importar um ficheiro de configurações existente ou redefinir as suas configurações para os valores padrão deles",
|
"data_subtitle": "Escolha se deseja exportar as suas configurações de Mue para o seu computador, importar um ficheiro de configurações existente ou redefinir as suas configurações para os valores padrão deles",
|
||||||
"reset_modal": {
|
"reset_modal": {
|
||||||
"title": "AVISO",
|
"title": "AVISO",
|
||||||
|
@ -453,7 +454,8 @@
|
||||||
},
|
},
|
||||||
"usage": "Estatísticas de uso",
|
"usage": "Estatísticas de uso",
|
||||||
"achievements": "Conquistas",
|
"achievements": "Conquistas",
|
||||||
"unlocked": "{count} Desbloqueado"
|
"unlocked": "{count} Desbloqueado",
|
||||||
|
"locked": "Locked"
|
||||||
},
|
},
|
||||||
"experimental": {
|
"experimental": {
|
||||||
"title": "Experimental",
|
"title": "Experimental",
|
||||||
|
|
|
@ -420,6 +420,7 @@
|
||||||
"offline_mode": "Modo offline",
|
"offline_mode": "Modo offline",
|
||||||
"offline_subtitle": "Quando ativado, todos os pedidos de serviços online serão desativados.",
|
"offline_subtitle": "Quando ativado, todos os pedidos de serviços online serão desativados.",
|
||||||
"data": "Dados",
|
"data": "Dados",
|
||||||
|
"data_description": "Choose whether to export your Mue settings to your computer, import an existing settings file, or reset your settings to their default values",
|
||||||
"data_subtitle": "Escolha se deseja exportar suas configurações de Mue para o seu computador, importar um arquivo de configurações existente ou redefinir suas configurações para seus valores padrão",
|
"data_subtitle": "Escolha se deseja exportar suas configurações de Mue para o seu computador, importar um arquivo de configurações existente ou redefinir suas configurações para seus valores padrão",
|
||||||
"reset_modal": {
|
"reset_modal": {
|
||||||
"title": "AVISO",
|
"title": "AVISO",
|
||||||
|
@ -453,7 +454,8 @@
|
||||||
},
|
},
|
||||||
"usage": "Estatísticas de uso",
|
"usage": "Estatísticas de uso",
|
||||||
"achievements": "Conquistas",
|
"achievements": "Conquistas",
|
||||||
"unlocked": "{count} Desbloqueado"
|
"unlocked": "{count} Desbloqueado",
|
||||||
|
"locked": "Locked"
|
||||||
},
|
},
|
||||||
"experimental": {
|
"experimental": {
|
||||||
"title": "Experimental",
|
"title": "Experimental",
|
||||||
|
|
|
@ -420,6 +420,7 @@
|
||||||
"offline_mode": "Офлайн режим",
|
"offline_mode": "Офлайн режим",
|
||||||
"offline_subtitle": "При включении все запросы к онлайн-сервисам будут отключены.",
|
"offline_subtitle": "При включении все запросы к онлайн-сервисам будут отключены.",
|
||||||
"data": "Data",
|
"data": "Data",
|
||||||
|
"data_description": "Choose whether to export your Mue settings to your computer, import an existing settings file, or reset your settings to their default values",
|
||||||
"data_subtitle": "Выберите, следует ли экспортировать настройки Mue на компьютер, импортировать существующий файл настроек или сбросить настройки до значений по умолчанию",
|
"data_subtitle": "Выберите, следует ли экспортировать настройки Mue на компьютер, импортировать существующий файл настроек или сбросить настройки до значений по умолчанию",
|
||||||
"reset_modal": {
|
"reset_modal": {
|
||||||
"title": "WARNING",
|
"title": "WARNING",
|
||||||
|
@ -453,7 +454,8 @@
|
||||||
},
|
},
|
||||||
"usage": "Статистика использования",
|
"usage": "Статистика использования",
|
||||||
"achievements": "Достижения",
|
"achievements": "Достижения",
|
||||||
"unlocked": "{count} разблокировано"
|
"unlocked": "{count} разблокировано",
|
||||||
|
"locked": "Locked"
|
||||||
},
|
},
|
||||||
"experimental": {
|
"experimental": {
|
||||||
"title": "Экспериментальные настройки",
|
"title": "Экспериментальные настройки",
|
||||||
|
|
|
@ -420,6 +420,7 @@
|
||||||
"offline_mode": "Çevrimdışı Mod",
|
"offline_mode": "Çevrimdışı Mod",
|
||||||
"offline_subtitle": "Etkinleştirildiğinde, çevrimiçi hizmetlere yönelik tüm istekler devre dışı bırakılır.",
|
"offline_subtitle": "Etkinleştirildiğinde, çevrimiçi hizmetlere yönelik tüm istekler devre dışı bırakılır.",
|
||||||
"data": "Veri",
|
"data": "Veri",
|
||||||
|
"data_description": "Choose whether to export your Mue settings to your computer, import an existing settings file, or reset your settings to their default values",
|
||||||
"data_subtitle": "Mue Tab ayarlarınızı bilgisayarınıza kaydetmenize, mevcut ayarlarınızı başka bir bilgisayara aktarmanıza veya ayarlarınızı varsayılan değerlerine sıfırlamınıza olanak sağlar. İstediğiniz işlemi seçin.",
|
"data_subtitle": "Mue Tab ayarlarınızı bilgisayarınıza kaydetmenize, mevcut ayarlarınızı başka bir bilgisayara aktarmanıza veya ayarlarınızı varsayılan değerlerine sıfırlamınıza olanak sağlar. İstediğiniz işlemi seçin.",
|
||||||
"reset_modal": {
|
"reset_modal": {
|
||||||
"title": "UYARI",
|
"title": "UYARI",
|
||||||
|
@ -453,7 +454,8 @@
|
||||||
},
|
},
|
||||||
"usage": "Kullanım İstatistikleri",
|
"usage": "Kullanım İstatistikleri",
|
||||||
"achievements": "Başarılar",
|
"achievements": "Başarılar",
|
||||||
"unlocked": "{count} Kilidi Açıldı"
|
"unlocked": "{count} Kilidi Açıldı",
|
||||||
|
"locked": "Locked"
|
||||||
},
|
},
|
||||||
"experimental": {
|
"experimental": {
|
||||||
"title": "Deneysel Özellikler",
|
"title": "Deneysel Özellikler",
|
||||||
|
|
|
@ -326,7 +326,7 @@
|
||||||
"tooltip": "光标停留时下方显示标题",
|
"tooltip": "光标停留时下方显示标题",
|
||||||
"text_only": "仅显示标题",
|
"text_only": "仅显示标题",
|
||||||
"add_link": "Add Link",
|
"add_link": "Add Link",
|
||||||
"no_quicklinks": "No quicklinks",
|
"no_quicklinks": "No quick links",
|
||||||
"edit": "Edit",
|
"edit": "Edit",
|
||||||
"style": "Style",
|
"style": "Style",
|
||||||
"options": {
|
"options": {
|
||||||
|
@ -420,6 +420,7 @@
|
||||||
"offline_mode": "启用离线模式",
|
"offline_mode": "启用离线模式",
|
||||||
"offline_subtitle": "When enabled, all requests to online services will be disabled.",
|
"offline_subtitle": "When enabled, all requests to online services will be disabled.",
|
||||||
"data": "数据和设置",
|
"data": "数据和设置",
|
||||||
|
"data_description": "Choose whether to export your Mue settings to your computer, import an existing settings file, or reset your settings to their default values",
|
||||||
"data_subtitle": "Choose whether to export your Mue settings to your computer, import an existing settings file, or reset your settings to their default values",
|
"data_subtitle": "Choose whether to export your Mue settings to your computer, import an existing settings file, or reset your settings to their default values",
|
||||||
"reset_modal": {
|
"reset_modal": {
|
||||||
"title": "警告",
|
"title": "警告",
|
||||||
|
@ -453,7 +454,8 @@
|
||||||
},
|
},
|
||||||
"usage": "启用统计",
|
"usage": "启用统计",
|
||||||
"achievements": "Achievements",
|
"achievements": "Achievements",
|
||||||
"unlocked": "{count} Unlocked"
|
"unlocked": "{count} Unlocked",
|
||||||
|
"locked": "Locked"
|
||||||
},
|
},
|
||||||
"experimental": {
|
"experimental": {
|
||||||
"title": "实验性功能",
|
"title": "实验性功能",
|
||||||
|
|
Loading…
Reference in New Issue