diff --git a/src/components/modals/main/settings/sections/Message.jsx b/src/components/modals/main/settings/sections/Message.jsx new file mode 100644 index 00000000..0b1a730a --- /dev/null +++ b/src/components/modals/main/settings/sections/Message.jsx @@ -0,0 +1,19 @@ +import variables from 'modules/variables'; + +import Switch from '../Switch'; +import Text from '../Text'; +import Slider from '../Slider'; + +export default function MessageSettings() { + const getMessage = (languagecode, text) => variables.language.getMessage(languagecode, text); + const languagecode = variables.languagecode; + + return ( + <> +

{getMessage(languagecode, 'modals.main.settings.sections.message.title')}

+ + + + + ); +} diff --git a/src/components/modals/main/settings/sections/Order.jsx b/src/components/modals/main/settings/sections/Order.jsx index 73fff191..f549987e 100644 --- a/src/components/modals/main/settings/sections/Order.jsx +++ b/src/components/modals/main/settings/sections/Order.jsx @@ -13,7 +13,8 @@ const widget_name = { time: getMessage(languagecode, 'modals.main.settings.sections.time.title'), quicklinks: getMessage(languagecode, 'modals.main.settings.sections.quicklinks.title'), quote: getMessage(languagecode, 'modals.main.settings.sections.quote.title'), - date: getMessage(languagecode, 'modals.main.settings.sections.greeting.title') + date: getMessage(languagecode, 'modals.main.settings.sections.greeting.title'), + message: 'Message' }; const SortableItem = sortableElement(({ value }) => ( @@ -60,7 +61,7 @@ export default class OrderSettings extends PureComponent { } reset = () => { - localStorage.setItem('order', JSON.stringify(['greeting', 'time', 'quicklinks', 'quote', 'date'])); + localStorage.setItem('order', JSON.stringify(['greeting', 'time', 'quicklinks', 'quote', 'date', 'message'])); this.setState({ items: JSON.parse(localStorage.getItem('order')) diff --git a/src/components/modals/main/settings/sections/QuickLinks.jsx b/src/components/modals/main/settings/sections/QuickLinks.jsx index a4b50f39..02cb86a8 100644 --- a/src/components/modals/main/settings/sections/QuickLinks.jsx +++ b/src/components/modals/main/settings/sections/QuickLinks.jsx @@ -12,6 +12,7 @@ export default function QuickLinks() { <>

{getMessage(languagecode, 'modals.main.settings.sections.quicklinks.title')}

+ diff --git a/src/components/modals/main/tabs/Settings.jsx b/src/components/modals/main/tabs/Settings.jsx index 5c1727fb..fa0e2c1a 100644 --- a/src/components/modals/main/tabs/Settings.jsx +++ b/src/components/modals/main/tabs/Settings.jsx @@ -17,6 +17,7 @@ import QuickLinks from '../settings/sections/QuickLinks'; import Weather from '../settings/sections/Weather'; import Stats from '../settings/sections/Stats'; import Keybinds from '../settings/sections/Keybinds'; +import Message from '../settings/sections/Message'; export default function Settings() { const getMessage = (languagecode, text) => variables.language.getMessage(languagecode, text); @@ -32,6 +33,7 @@ export default function Settings() {
+
diff --git a/src/components/modals/main/tabs/backend/Tab.jsx b/src/components/modals/main/tabs/backend/Tab.jsx index 0218ce13..f7efed36 100644 --- a/src/components/modals/main/tabs/backend/Tab.jsx +++ b/src/components/modals/main/tabs/backend/Tab.jsx @@ -18,6 +18,7 @@ import { CloudOutlined as Weather, SettingsOutlined as Advanced, Link as QuickLinks, + SmsOutlined as Message, AssessmentOutlined as Stats, Code as Sideload, AddCircleOutline as Added, @@ -56,6 +57,7 @@ function Tab({ label, currentTab, onClick, navbarTab }) { case getMessage(languagecode, 'modals.main.settings.sections.quicklinks.title'): icon = ; break; case getMessage(languagecode, 'modals.main.settings.sections.appearance.title'): icon = ; break; case getMessage(languagecode, 'modals.main.settings.sections.order.title'): icon = ; break; + case getMessage(languagecode, 'modals.main.settings.sections.message.title'): icon = ; break; case getMessage(languagecode, 'modals.main.settings.sections.language.title'): icon = ; divider = true; break; case getMessage(languagecode, 'modals.main.settings.sections.advanced.title'): icon = ; break; case getMessage(languagecode, 'modals.main.settings.sections.keybinds.title'): icon = ; break; diff --git a/src/components/widgets/Widgets.jsx b/src/components/widgets/Widgets.jsx index 2e1e2691..a50b7bf7 100644 --- a/src/components/widgets/Widgets.jsx +++ b/src/components/widgets/Widgets.jsx @@ -6,6 +6,7 @@ import Quote from './quote/Quote'; import Search from './search/Search'; import QuickLinks from './quicklinks/QuickLinks'; import Date from './time/Date'; +import Message from './message/Message'; import EventBus from 'modules/helpers/eventbus'; @@ -25,7 +26,8 @@ export default class Widgets extends PureComponent { greeting: this.enabled('greeting') ? : null, quote: this.enabled('quote') ? : null, date: this.enabled('date') ? : null, - quicklinks: this.enabled('quicklinksenabled') && this.online ? : null + quicklinks: this.enabled('quicklinksenabled') && this.online ? : null, + message: this.enabled('message') ? : null }; } @@ -58,7 +60,7 @@ export default class Widgets extends PureComponent { }); } else { // prevent error - elements = [, , , , ]; + elements = [, , , , , ]; } return ( diff --git a/src/components/widgets/message/Message.jsx b/src/components/widgets/message/Message.jsx new file mode 100644 index 00000000..e5677dd6 --- /dev/null +++ b/src/components/widgets/message/Message.jsx @@ -0,0 +1,42 @@ +import { PureComponent, createRef } from 'react'; + +import EventBus from 'modules/helpers/eventbus'; + +import './message.scss'; + +export default class Message extends PureComponent { + constructor(props) { + super(props); + this.state = { + messageText: localStorage.getItem('messageText') + }; + this.message = createRef(); + } + + componentDidMount() { + EventBus.on('refresh', (data) => { + if (data === 'message') { + if (localStorage.getItem('message') === 'false') { + return this.message.current.style.display = 'none'; + } + + this.message.current.style.display = 'block'; + this.message.current.style.fontSize = `${1.6 * Number((localStorage.getItem('zoomMessage') || 100) / 100)}em`; + + this.setState({ + messageText: localStorage.getItem('messageText') + }); + } + }); + + this.message.current.style.fontSize = `${1.6 * Number((localStorage.getItem('zoomMessage') || 100) / 100)}em`; + } + + render() { + return ( +

+ {localStorage.getItem('messageText')} +

+ ); + } +} diff --git a/src/components/widgets/message/message.scss b/src/components/widgets/message/message.scss new file mode 100644 index 00000000..216446b9 --- /dev/null +++ b/src/components/widgets/message/message.scss @@ -0,0 +1,5 @@ +.message { + cursor: default; + margin: 0; + user-select: none; +} diff --git a/src/components/widgets/quicklinks/QuickLinks.jsx b/src/components/widgets/quicklinks/QuickLinks.jsx index f7d85239..61b83440 100644 --- a/src/components/widgets/quicklinks/QuickLinks.jsx +++ b/src/components/widgets/quicklinks/QuickLinks.jsx @@ -1,3 +1,4 @@ +import variables from 'modules/variables'; import { PureComponent, createRef } from 'react'; import { TextareaAutosize } from '@mui/material'; import Hotkeys from 'react-hot-keys'; @@ -9,6 +10,9 @@ import EventBus from 'modules/helpers/eventbus'; import './quicklinks.scss'; export default class QuickLinks extends PureComponent { + getMessage = (languagecode, text) => variables.language.getMessage(languagecode, text); + languagecode = variables.languagecode; + constructor() { super(); this.state = { @@ -42,13 +46,13 @@ export default class QuickLinks extends PureComponent { let nameError, urlError; if (this.state.name.length <= 0) { - nameError = this.language.name_error; + nameError = this.getMessage(this.languagecode, 'widgets.quicklinks.name_error'); } // regex: https://ihateregex.io/expr/url/ // eslint-disable-next-line no-useless-escape if (url.length <= 0 || /https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()!@:%_\+.~#?&\/\/=]*)/.test(url) === false) { - urlError = this.language.url_error; + urlError = this.getMessage(this.languagecode, 'widgets.quicklinks.url_error'); } if (nameError || urlError) { @@ -65,6 +69,7 @@ export default class QuickLinks extends PureComponent { data.push({ name: this.state.name, url: url, + icon: this.state.icon || '', key: Math.random().toString(36).substring(7) + 1 }); @@ -141,13 +146,22 @@ export default class QuickLinks extends PureComponent { const tooltipEnabled = localStorage.getItem('quicklinkstooltip'); const useProxy = (localStorage.getItem('quicklinksddgProxy') !== 'false'); + const useText = (localStorage.getItem('quicklinksText') === 'true'); const quickLink = (item) => { + if (useText) { + return this.deleteLink(item.key, e)} href={item.url} target={target} rel={rel} draggable={false}>{item.name}; + } + const url = useProxy ? 'https://icons.duckduckgo.com/ip2/' : 'https://www.google.com/s2/favicons?sz=32&domain='; + let img = url + item.url.replace('https://', '').replace('http://', '') + (useProxy ? '.ico' : ''); + if (item.icon) { + img = item.icon; + } const link = ( this.deleteLink(item.key, e)} href={item.url} target={target} rel={rel} draggable={false}> - {item.name} + {item.name} ); @@ -168,12 +182,14 @@ export default class QuickLinks extends PureComponent {
-

{this.language.new}

- this.setState({ name: e.target.value })} /> +

{this.getMessage(this.languagecode, 'widgets.quicklinks.new')}

+ this.setState({ name: e.target.value })} />

{this.state.nameError}

- this.setState({ url: e.target.value })} /> + this.setState({ url: e.target.value })} />

{this.state.urlError}

- + this.setState({ icon: e.target.value })} /> +

+
{window.keybinds.toggleQuicklinks && window.keybinds.toggleQuicklinks !== '' ? : null} diff --git a/src/components/widgets/quicklinks/quicklinks.scss b/src/components/widgets/quicklinks/quicklinks.scss index 42828edd..5d17e5f4 100644 --- a/src/components/widgets/quicklinks/quicklinks.scss +++ b/src/components/widgets/quicklinks/quicklinks.scss @@ -90,3 +90,13 @@ textarea { margin: 5px; } } + +.quicklinkstext { + text-decoration: none; + color: white; + font-size: smaller; + + &:hover { + text-decoration: underline; + } +} diff --git a/src/translations/de_DE.json b/src/translations/de_DE.json index f6f1ba1c..867c9feb 100644 --- a/src/translations/de_DE.json +++ b/src/translations/de_DE.json @@ -22,6 +22,7 @@ "new": "Neuer Link", "name": "Name", "url": "URL", + "icon": "Icon (optional)", "add": "Hinzufügen", "name_error": "Muss einen Namen angeben", "url_error": "Muss eine URL angeben" @@ -224,7 +225,12 @@ "quicklinks": { "title": "Quick Links", "open_new": "In neuen Tab öffnen", - "tooltip": "Tooltip" + "tooltip": "Tooltip", + "text_only": "Show text only" + }, + "message": { + "title": "Message", + "text": "Text" }, "appearance": { "title": "Erscheinungsbild", diff --git a/src/translations/en_GB.json b/src/translations/en_GB.json index c093d283..020802cd 100644 --- a/src/translations/en_GB.json +++ b/src/translations/en_GB.json @@ -22,6 +22,7 @@ "new": "New Link", "name": "Name", "url": "URL", + "icon": "Icon (optional)", "add": "Add", "name_error": "Must provide name", "url_error": "Must provide URL" @@ -224,7 +225,12 @@ "quicklinks": { "title": "Quick Links", "open_new": "Open in new tab", - "tooltip": "Tooltip" + "tooltip": "Tooltip", + "text_only": "Show text only" + }, + "message": { + "title": "Message", + "text": "Text" }, "appearance": { "title": "Appearance", diff --git a/src/translations/en_US.json b/src/translations/en_US.json index faced2f7..3bccad4f 100644 --- a/src/translations/en_US.json +++ b/src/translations/en_US.json @@ -22,6 +22,7 @@ "new": "New Link", "name": "Name", "url": "URL", + "icon": "Icon (optional)", "add": "Add", "name_error": "Must provide name", "url_error": "Must provide URL" @@ -224,7 +225,12 @@ "quicklinks": { "title": "Quick Links", "open_new": "Open in new tab", - "tooltip": "Tooltip" + "tooltip": "Tooltip", + "text_only": "Show text only" + }, + "message": { + "title": "Message", + "text": "Text" }, "appearance": { "title": "Appearance", diff --git a/src/translations/es.json b/src/translations/es.json index 6e77b5b7..cc786235 100644 --- a/src/translations/es.json +++ b/src/translations/es.json @@ -22,6 +22,7 @@ "new": "Nuevo enlace", "name": "Nombre", "url": "URL", + "icon": "Icon (optional)", "add": "Añadir", "name_error": "Debe indicar el nombre", "url_error": "Debe indicar la URL" @@ -224,7 +225,12 @@ "quicklinks": { "title": "Enlaces rápidos", "open_new": "Abrir en una nueva pestaña", - "tooltip": "Descripción emergente" + "tooltip": "Descripción emergente", + "text_only": "Show text only" + }, + "message": { + "title": "Message", + "text": "Text" }, "appearance": { "title": "Apariencia", diff --git a/src/translations/fr.json b/src/translations/fr.json index ec2bfd78..4202a1e4 100644 --- a/src/translations/fr.json +++ b/src/translations/fr.json @@ -22,6 +22,7 @@ "new": "Nouveau lien", "name": "Nom", "url": "URL", + "icon": "Icon (optional)", "add": "Ajouter", "name_error": "Doit fournir le nom", "url_error": "Doit fournir une URL" @@ -224,7 +225,12 @@ "quicklinks": { "title": "Liens rapides", "open_new": "Ouvrir dans un nouvel onglet", - "tooltip": "Info-bulle" + "tooltip": "Info-bulle", + "text_only": "Show text only" + }, + "message": { + "title": "Message", + "text": "Text" }, "appearance": { "title": "Apparence", diff --git a/src/translations/nl.json b/src/translations/nl.json index e32bfa52..797303fa 100644 --- a/src/translations/nl.json +++ b/src/translations/nl.json @@ -22,6 +22,7 @@ "new": "New Link", "name": "Name", "url": "URL", + "icon": "Icon (optional)", "add": "Add", "name_error": "Must provide name", "url_error": "Must provide URL" @@ -224,7 +225,12 @@ "quicklinks": { "title": "Quick Links", "open_new": "Open in new tab", - "tooltip": "Tooltip" + "tooltip": "Tooltip", + "text_only": "Show text only" + }, + "message": { + "title": "Message", + "text": "Text" }, "appearance": { "title": "Appearance", diff --git a/src/translations/no.json b/src/translations/no.json index df71c813..6ea5d7a4 100644 --- a/src/translations/no.json +++ b/src/translations/no.json @@ -22,6 +22,7 @@ "new": "New Link", "name": "Name", "url": "URL", + "icon": "Icon (optional)", "add": "Add", "name_error": "Must provide name", "url_error": "Must provide URL" @@ -224,7 +225,12 @@ "quicklinks": { "title": "Quick Links", "open_new": "Open in new tab", - "tooltip": "Tooltip" + "tooltip": "Tooltip", + "text_only": "Show text only" + }, + "message": { + "title": "Message", + "text": "Text" }, "appearance": { "title": "Appearance", diff --git a/src/translations/ru.json b/src/translations/ru.json index f817c452..cf31a652 100644 --- a/src/translations/ru.json +++ b/src/translations/ru.json @@ -22,6 +22,7 @@ "new": "New Link", "name": "Name", "url": "URL", + "icon": "Icon (optional)", "add": "Add", "name_error": "Must provide name", "url_error": "Must provide URL" @@ -224,7 +225,12 @@ "quicklinks": { "title": "Quick Links", "open_new": "Open in new tab", - "tooltip": "Tooltip" + "tooltip": "Tooltip", + "text_only": "Show text only" + }, + "message": { + "title": "Message", + "text": "Text" }, "appearance": { "title": "Appearance", diff --git a/src/translations/zh_CN.json b/src/translations/zh_CN.json index 7b66a87e..1411065a 100644 --- a/src/translations/zh_CN.json +++ b/src/translations/zh_CN.json @@ -22,6 +22,7 @@ "new": "新快捷方式", "name": "名称", "url": "链接", + "icon": "Icon (optional)", "add": "添加", "name_error": "请输入名称", "url_error": "请输入链接" @@ -224,7 +225,12 @@ "quicklinks": { "title": "快捷方式", "open_new": "在新标签页打开", - "tooltip": "光标停留时下方显示标题" + "tooltip": "光标停留时下方显示标题", + "text_only": "Show text only" + }, + "message": { + "title": "Message", + "text": "Text" }, "appearance": { "title": "显示",