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}>
-
+
);
@@ -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": "显示",