diff --git a/package-lock.json b/package-lock.json index b7d247a..ec5e682 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3066,18 +3066,9 @@ } }, "cookie": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", - "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==" - }, - "cookie-parser": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.4.5.tgz", - "integrity": "sha512-f13bPUj/gG/5mDr+xLmSxxDsB9DQiTIfhJS/sqjrmfAWiAN+x2O4i/XguTL9yDZ+/IFDanJ+5x7hC4CXT9Tdzw==", - "requires": { - "cookie": "0.4.0", - "cookie-signature": "1.0.6" - } + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==" }, "cookie-signature": { "version": "1.0.6", @@ -4501,6 +4492,11 @@ "vary": "~1.1.2" }, "dependencies": { + "cookie": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", + "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==" + }, "debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -4536,6 +4532,11 @@ "uid-safe": "~2.1.5" }, "dependencies": { + "cookie": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", + "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==" + }, "debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", diff --git a/package.json b/package.json index e8394b6..bdc3d25 100644 --- a/package.json +++ b/package.json @@ -33,7 +33,7 @@ "bufferutil": "^4.0.3", "compression": "^1.7.3", "connect-redis": "^5.0.0", - "cookie-parser": "^1.4.5", + "cookie": "^0.4.1", "core-js": "^3.8.3", "cors": "^2.8.4", "etag": "^1.8.1", diff --git a/src/components/ChatMessage.jsx b/src/components/ChatMessage.jsx index 483d659..d6526a0 100644 --- a/src/components/ChatMessage.jsx +++ b/src/components/ChatMessage.jsx @@ -41,7 +41,7 @@ function ChatMessage({ { e.target.onerror = null; e.target.src = './cf/xx.gif'; diff --git a/src/components/LanguageSelect.jsx b/src/components/LanguageSelect.jsx new file mode 100644 index 0000000..e25f1a2 --- /dev/null +++ b/src/components/LanguageSelect.jsx @@ -0,0 +1,79 @@ +/* + * Language selection + * language is set with cookies and requires a refresh. + * Current language is set under window.lang by the server + * Available languages under window.langSel + * [['hz', 'am'], ['de', 'de'], ...] + * [languageCode, countryCode (for flag)] + * @flow + */ +import React, { useState, useEffect } from 'react'; +import { t } from 'ttag'; +import { MONTH } from '../core/constants'; + +function LanguageSelect() { + if (!navigator.cookieEnabled) { + return null; + } + + const { lang, langs } = window.ssv; + + const [langSel, setLangSel] = useState(lang); + const [ccSel, setCCSel] = useState('xx'); + + useEffect(() => { + for (let i = 0; i < langs.length; i += 1) { + const [lc, cc] = langs[i]; + if (lc === langSel) { + setCCSel(cc); + return; + } + } + }, [langSel]); + + return ( +
+ + +    + + + + +
+ ); +} + +export default LanguageSelect; diff --git a/src/components/SettingsModal.jsx b/src/components/SettingsModal.jsx index fd90daf..8a27e22 100644 --- a/src/components/SettingsModal.jsx +++ b/src/components/SettingsModal.jsx @@ -7,6 +7,7 @@ import React from 'react'; import { connect } from 'react-redux'; import { c, t } from 'ttag'; +import LanguageSelect from './LanguageSelect'; import MdToggleButtonHover from './MdToggleButtonHover'; import { toggleGrid, @@ -49,11 +50,12 @@ const rowStyles = { }; const SettingsItemSelect = ({ - title, description, values, selected, onSelect, + title, description, values, selected, onSelect, icon, }) => (

{title}

+ {(icon) && }