Fix: Various bugs

Co-authored-by: David Ralph <me@davidcralph.co.uk>
Co-authored-by: Isaac <contact@eartharoid.me>
This commit is contained in:
alexsparkes 2024-03-18 22:08:08 +00:00
parent c2019de7d2
commit ae0530cfc6
43 changed files with 283 additions and 192 deletions

View File

@ -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);
}
} }
} }

View File

@ -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;
}

View File

@ -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 {

View File

@ -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);
}
}
}
} }

View File

@ -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;
} }
} }

View File

@ -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 && (

View File

@ -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>

View File

@ -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>
)} )}

View File

@ -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 {

View File

@ -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',

View File

@ -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>
), ),
}; };
} }

View File

@ -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>

View File

@ -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>

View File

@ -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')}

View File

@ -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(

View File

@ -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) {

View File

@ -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;

View File

@ -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', {

View File

@ -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()}

View File

@ -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')}

View File

@ -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()}

View File

@ -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')}
> >

View File

@ -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()}

View File

@ -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);
} }
} }

View File

@ -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>

View File

@ -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) {

View File

@ -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>
)} )}

View File

@ -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>

View File

@ -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": "পরীক্ষামূলক",

View File

@ -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",

View File

@ -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...."
} }
} }
}, },

View File

@ -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",

View File

@ -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",

View File

@ -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",

View File

@ -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",

View File

@ -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",

View File

@ -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",

View File

@ -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",

View File

@ -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",

View File

@ -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",

View File

@ -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": "Экспериментальные настройки",

View File

@ -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",

View File

@ -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": "实验性功能",