Added version to footer. CSS and locale fixes.

This commit is contained in:
Mike Cao 2020-09-09 16:12:29 -07:00
parent cea8e29c8a
commit 6bbe7800c2
16 changed files with 276 additions and 268 deletions

View File

@ -32,6 +32,7 @@ export default function LanguageButton({ menuPosition = 'bottom', menuAlign = 'l
</Button> </Button>
{showMenu && ( {showMenu && (
<Menu <Menu
className={styles.menu}
options={menuOptions} options={menuOptions}
onSelect={handleSelect} onSelect={handleSelect}
float={menuPosition} float={menuPosition}

View File

@ -3,3 +3,7 @@
position: relative; position: relative;
cursor: pointer; cursor: pointer;
} }
.menu {
z-index: 100;
}

View File

@ -46,7 +46,7 @@ export default function UserButton() {
return ( return (
<div ref={ref} className={styles.container}> <div ref={ref} className={styles.container}>
<div onClick={() => setShowMenu(state => !state)}> <div className={styles.button} onClick={() => setShowMenu(state => !state)}>
<Icon icon={<User />} size="large" /> <Icon icon={<User />} size="large" />
<Icon icon={<Chevron />} size="small" /> <Icon icon={<Chevron />} size="small" />
</div> </div>

View File

@ -4,6 +4,11 @@
cursor: pointer; cursor: pointer;
} }
.button {
display: flex;
flex-wrap: nowrap;
}
.username { .username {
border-bottom: 1px solid var(--gray500); border-bottom: 1px solid var(--gray500);
} }

View File

@ -1,23 +1,22 @@
import React from 'react'; import React from 'react';
import { FormattedMessage } from 'react-intl'; import { FormattedMessage } from 'react-intl';
import Link from 'next/link';
import classNames from 'classnames'; import classNames from 'classnames';
import Button from 'components/common/Button'; import Button from 'components/common/Button';
import Logo from 'assets/logo.svg'; import Logo from 'assets/logo.svg';
import styles from './Footer.module.css'; import styles from './Footer.module.css';
export default function Footer() { export default function Footer() {
const version = process.env.VERSION;
return ( return (
<footer className="container"> <footer className="container">
<div className={classNames(styles.footer, 'row justify-content-center')}> <div className={classNames(styles.footer, 'row justify-content-center')}>
<FormattedMessage id="footer.powered-by" defaultMessage="powered by" /> <FormattedMessage id="footer.powered-by" defaultMessage="Powered by" />
<Link href="https://umami.is"> <a href="https://umami.is">
<a> <Button className={styles.button} icon={<Logo />} size="small">
<Button className={styles.button} icon={<Logo />} size="small"> <b>umami</b>
<b>umami</b> </Button>
</Button> </a>
</a> <div>{`v${version}`}</div>
</Link>
</div> </div>
</footer> </footer>
); );

View File

@ -11,5 +11,5 @@
} }
.button { .button {
margin-left: 10px; margin: 0 5px;
} }

View File

@ -15,29 +15,27 @@ export default function Header() {
return ( return (
<header className="container"> <header className="container">
<div className={classNames(styles.header, 'row align-items-center')}> <div className={classNames(styles.header, 'row align-items-center')}>
<div className="col-12 col-md-6"> <div className="col-12 col-md-3">
<div className={styles.title}> <div className={styles.title}>
<Icon icon={<Logo />} size="large" className={styles.logo} /> <Icon icon={<Logo />} size="large" className={styles.logo} />
<Link href={user ? '/' : 'https://umami.is'}>umami</Link> <Link href={user ? '/' : 'https://umami.is'}>umami</Link>
</div> </div>
</div> </div>
<div className="col-12 col-md-6"> <div className="col-12 col-md-9">
<div className={styles.nav}> {user ? (
{user ? ( <div className={styles.nav}>
<> <Link href="/dashboard">
<Link href="/dashboard"> <FormattedMessage id="header.nav.dashboard" defaultMessage="Dashboard" />
<FormattedMessage id="header.nav.dashboard" defaultMessage="Dashboard" /> </Link>
</Link> <Link href="/settings">
<Link href="/settings"> <FormattedMessage id="header.nav.settings" defaultMessage="Settings" />
<FormattedMessage id="header.nav.settings" defaultMessage="Settings" /> </Link>
</Link>
<LanguageButton menuAlign="right" />
<UserButton />
</>
) : (
<LanguageButton menuAlign="right" /> <LanguageButton menuAlign="right" />
)} <UserButton />
</div> </div>
) : (
<LanguageButton menuAlign="right" />
)}
</div> </div>
</div> </div>
</header> </header>

View File

@ -12,15 +12,14 @@
} }
.nav { .nav {
list-style: none;
display: flex; display: flex;
justify-content: flex-end; justify-content: flex-end;
align-items: center; align-items: center;
font-size: var(--font-size-normal);
font-weight: 600;
} }
.nav > * { .nav > * {
font-size: var(--font-size-normal);
font-weight: 600;
margin-left: 40px; margin-left: 40px;
} }
@ -28,9 +27,4 @@
.title { .title {
text-align: center; text-align: center;
} }
.nav {
display: flex;
justify-content: space-evenly;
}
} }

View File

@ -67,16 +67,16 @@ export default function WebsiteSettings() {
{ {
key: 'name', key: 'name',
label: <FormattedMessage id="label.name" defaultMessage="Name" />, label: <FormattedMessage id="label.name" defaultMessage="Name" />,
className: 'col-6 col-md-4', className: 'col-6 col-xl-4',
}, },
{ {
key: 'domain', key: 'domain',
label: <FormattedMessage id="label.domain" defaultMessage="Domain" />, label: <FormattedMessage id="label.domain" defaultMessage="Domain" />,
className: 'col-6 col-md-4', className: 'col-6 col-xl-4',
}, },
{ {
key: 'action', key: 'action',
className: classNames(styles.buttons, 'col-12 col-md-4 pt-2 pt-md-0'), className: classNames(styles.buttons, 'col-12 col-xl-4 pt-2 pt-xl-0'),
render: Buttons, render: Buttons,
}, },
]; ];

View File

@ -1,239 +1,239 @@
{ {
"active-users.message": { "active-users.message": {
"defaultMessage": "{x} {x, plural, one {aktiver Besucher} other {aktive Besucher}}" "defaultMessage": "{x} {x, plural, one {aktiver Besucher} other {aktive Besucher}}"
}, },
"button.add-account": { "button.add-account": {
"defaultMessage": "Konto hinzufügen" "defaultMessage": "Konto hinzufügen"
}, },
"button.add-website": { "button.add-website": {
"defaultMessage": "Webseite hinzufügen" "defaultMessage": "Webseite hinzufügen"
}, },
"button.back": { "button.back": {
"defaultMessage": "Zurück" "defaultMessage": "Zurück"
}, },
"button.cancel": { "button.cancel": {
"defaultMessage": "Abbrechen" "defaultMessage": "Abbrechen"
}, },
"button.change-password": { "button.change-password": {
"defaultMessage": "Passwort ändern" "defaultMessage": "Passwort ändern"
}, },
"button.copy-to-clipboard": { "button.copy-to-clipboard": {
"defaultMessage": "In die Zwischenablage kopieren" "defaultMessage": "In die Zwischenablage kopieren"
}, },
"button.delete": { "button.delete": {
"defaultMessage": "Löschen" "defaultMessage": "Löschen"
}, },
"button.edit": { "button.edit": {
"defaultMessage": "Bearbeiten" "defaultMessage": "Bearbeiten"
}, },
"button.login": { "button.login": {
"defaultMessage": "Anmelden" "defaultMessage": "Anmelden"
}, },
"button.more": { "button.more": {
"defaultMessage": "Mehr" "defaultMessage": "Mehr"
}, },
"button.save": { "button.save": {
"defaultMessage": "Speichern" "defaultMessage": "Speichern"
}, },
"button.view-details": { "button.view-details": {
"defaultMessage": "Details anzeigen" "defaultMessage": "Details anzeigen"
}, },
"footer.powered-by": { "footer.powered-by": {
"defaultMessage": "powered by" "defaultMessage": "Powered by"
}, },
"header.nav.dashboard": { "header.nav.dashboard": {
"defaultMessage": "Übersicht" "defaultMessage": "Übersicht"
}, },
"header.nav.settings": { "header.nav.settings": {
"defaultMessage": "Einstellungen" "defaultMessage": "Einstellungen"
}, },
"label.administrator": { "label.administrator": {
"defaultMessage": "Administrator" "defaultMessage": "Administrator"
}, },
"label.confirm-password": { "label.confirm-password": {
"defaultMessage": "Passwort wiederholen" "defaultMessage": "Passwort wiederholen"
}, },
"label.current-password": { "label.current-password": {
"defaultMessage": "Derzeitiges Passwort" "defaultMessage": "Derzeitiges Passwort"
}, },
"label.domain": { "label.domain": {
"defaultMessage": "Domain" "defaultMessage": "Domain"
}, },
"label.enable-share-url": { "label.enable-share-url": {
"defaultMessage": "Freigabe-URL aktivieren" "defaultMessage": "Freigabe-URL aktivieren"
}, },
"label.invalid": { "label.invalid": {
"defaultMessage": "Ungültig" "defaultMessage": "Ungültig"
}, },
"label.invalid-domain": { "label.invalid-domain": {
"defaultMessage": "Ungültige Domain" "defaultMessage": "Ungültige Domain"
}, },
"label.last-days": { "label.last-days": {
"defaultMessage": "Letzten {x} Tage" "defaultMessage": "Letzten {x} Tage"
}, },
"label.last-hours": { "label.last-hours": {
"defaultMessage": "Letzten {x} Stunden" "defaultMessage": "Letzten {x} Stunden"
}, },
"label.logged-in-as": { "label.logged-in-as": {
"defaultMessage": "Angemeldet als {username}" "defaultMessage": "Angemeldet als {username}"
}, },
"label.logout": { "label.logout": {
"defaultMessage": "Abmelden" "defaultMessage": "Abmelden"
}, },
"label.name": { "label.name": {
"defaultMessage": "Name" "defaultMessage": "Name"
}, },
"label.new-password": { "label.new-password": {
"defaultMessage": "Neues Passwort" "defaultMessage": "Neues Passwort"
}, },
"label.password": { "label.password": {
"defaultMessage": "Passwort" "defaultMessage": "Passwort"
}, },
"label.passwords-dont-match": { "label.passwords-dont-match": {
"defaultMessage": "Passwörter stimmen nicht überein" "defaultMessage": "Passwörter stimmen nicht überein"
}, },
"label.required": { "label.required": {
"defaultMessage": "Erforderlich" "defaultMessage": "Erforderlich"
}, },
"label.this-month": { "label.this-month": {
"defaultMessage": "Diesen Monat" "defaultMessage": "Diesen Monat"
}, },
"label.this-week": { "label.this-week": {
"defaultMessage": "Diese Woche" "defaultMessage": "Diese Woche"
}, },
"label.this-year": { "label.this-year": {
"defaultMessage": "Dieses Jahr" "defaultMessage": "Dieses Jahr"
}, },
"label.today": { "label.today": {
"defaultMessage": "Heute" "defaultMessage": "Heute"
}, },
"label.username": { "label.username": {
"defaultMessage": "Benutzername" "defaultMessage": "Benutzername"
}, },
"message.confirm-delete": { "message.confirm-delete": {
"defaultMessage": "Sind sie sich sicher {target} zu löschen?" "defaultMessage": "Sind sie sich sicher {target} zu löschen?"
}, },
"message.copied": { "message.copied": {
"defaultMessage": "In Zwischenablage kopiert!" "defaultMessage": "In Zwischenablage kopiert!"
}, },
"message.delete-warning": { "message.delete-warning": {
"defaultMessage": "Alle zugehörigen Daten werden auch gelöscht." "defaultMessage": "Alle zugehörigen Daten werden auch gelöscht."
}, },
"message.failure": { "message.failure": {
"defaultMessage": "Es it ein Fehler aufgetreten." "defaultMessage": "Es it ein Fehler aufgetreten."
}, },
"message.incorrect-username-password": { "message.incorrect-username-password": {
"defaultMessage": "Falsches Passwort oder Benutzername." "defaultMessage": "Falsches Passwort oder Benutzername."
}, },
"message.no-data-available": { "message.no-data-available": {
"defaultMessage": "Keine Daten vorhanden." "defaultMessage": "Keine Daten vorhanden."
}, },
"message.save-success": { "message.save-success": {
"defaultMessage": "Erfolgreich gespeichert." "defaultMessage": "Erfolgreich gespeichert."
}, },
"message.share-url": { "message.share-url": {
"defaultMessage": "Dies ist der öffentliche URL zum Teilen für {target}." "defaultMessage": "Dies ist der öffentliche URL zum Teilen für {target}."
}, },
"message.track-stats": { "message.track-stats": {
"defaultMessage": "Um die Statistiken für {target} zu übermitteln, platzieren Sie bitte den folgenden Quelltext im {head} ihrer Homepage." "defaultMessage": "Um die Statistiken für {target} zu übermitteln, platzieren Sie bitte den folgenden Quelltext im {head} ihrer Homepage."
}, },
"message.type-delete": { "message.type-delete": {
"defaultMessage": "Geben Sie {delete} in das Feld unten ein um zu bestätigen." "defaultMessage": "Geben Sie {delete} in das Feld unten ein um zu bestätigen."
}, },
"metrics.actions": { "metrics.actions": {
"defaultMessage": "Aktionen" "defaultMessage": "Aktionen"
}, },
"metrics.average-visit-time": { "metrics.average-visit-time": {
"defaultMessage": "Durchschn. Besuchszeit" "defaultMessage": "Durchschn. Besuchszeit"
}, },
"metrics.bounce-rate": { "metrics.bounce-rate": {
"defaultMessage": "Absprungrate" "defaultMessage": "Absprungrate"
}, },
"metrics.browsers": { "metrics.browsers": {
"defaultMessage": "Browsers" "defaultMessage": "Browsers"
}, },
"metrics.countries": { "metrics.countries": {
"defaultMessage": "Länder" "defaultMessage": "Länder"
}, },
"metrics.devices": { "metrics.devices": {
"defaultMessage": "Geräte" "defaultMessage": "Geräte"
}, },
"metrics.events": { "metrics.events": {
"defaultMessage": "Events" "defaultMessage": "Events"
}, },
"metrics.filter.combined": { "metrics.filter.combined": {
"defaultMessage": "Kombiniert" "defaultMessage": "Kombiniert"
}, },
"metrics.filter.domain-only": { "metrics.filter.domain-only": {
"defaultMessage": "Nur diese Domain" "defaultMessage": "Nur diese Domain"
}, },
"metrics.filter.raw": { "metrics.filter.raw": {
"defaultMessage": "Rohdaten" "defaultMessage": "Rohdaten"
}, },
"metrics.operating-system": { "metrics.operating-system": {
"defaultMessage": "Betriebssystem" "defaultMessage": "Betriebssystem"
}, },
"metrics.page-views": { "metrics.page-views": {
"defaultMessage": "Seitenaufrufe" "defaultMessage": "Seitenaufrufe"
}, },
"metrics.pages": { "metrics.pages": {
"defaultMessage": "Seiten" "defaultMessage": "Seiten"
}, },
"metrics.referrers": { "metrics.referrers": {
"defaultMessage": "Referrers" "defaultMessage": "Referrers"
}, },
"metrics.unique-visitors": { "metrics.unique-visitors": {
"defaultMessage": "Eindeutige Besucher" "defaultMessage": "Eindeutige Besucher"
}, },
"metrics.views": { "metrics.views": {
"defaultMessage": "Aufrufe" "defaultMessage": "Aufrufe"
}, },
"metrics.visitors": { "metrics.visitors": {
"defaultMessage": "Besucher" "defaultMessage": "Besucher"
}, },
"placeholder.message.go-to-settings": { "placeholder.message.go-to-settings": {
"defaultMessage": "Zu den Einstellungen" "defaultMessage": "Zu den Einstellungen"
}, },
"placeholder.message.no-websites-configured": { "placeholder.message.no-websites-configured": {
"defaultMessage": "Es ist keine Webseite vorhanden." "defaultMessage": "Es ist keine Webseite vorhanden."
}, },
"settings.accounts": { "settings.accounts": {
"defaultMessage": "Konten" "defaultMessage": "Konten"
}, },
"settings.profile": { "settings.profile": {
"defaultMessage": "Profil" "defaultMessage": "Profil"
}, },
"settings.websites": { "settings.websites": {
"defaultMessage": "Webseiten" "defaultMessage": "Webseiten"
}, },
"title.add-account": { "title.add-account": {
"defaultMessage": "Konto hinzugfügen" "defaultMessage": "Konto hinzugfügen"
}, },
"title.add-website": { "title.add-website": {
"defaultMessage": "Webseite hinzufügen" "defaultMessage": "Webseite hinzufügen"
}, },
"title.delete-account": { "title.delete-account": {
"defaultMessage": "Konto löschen" "defaultMessage": "Konto löschen"
}, },
"title.delete-website": { "title.delete-website": {
"defaultMessage": "Webseite löschen" "defaultMessage": "Webseite löschen"
}, },
"title.edit-account": { "title.edit-account": {
"defaultMessage": "Konto bearbeiten" "defaultMessage": "Konto bearbeiten"
}, },
"title.edit-website": { "title.edit-website": {
"defaultMessage": "Webseite bearbeiten" "defaultMessage": "Webseite bearbeiten"
}, },
"title.share-url": { "title.share-url": {
"defaultMessage": "Freigabe-URL" "defaultMessage": "Freigabe-URL"
}, },
"title.tracking-code": { "title.tracking-code": {
"defaultMessage": "Tracking Kennung" "defaultMessage": "Tracking Kennung"
}, },
"tooltip.get-share-url": { "tooltip.get-share-url": {
"defaultMessage": "Freigabe-URL abrufen" "defaultMessage": "Freigabe-URL abrufen"
}, },
"tooltip.get-tracking-code": { "tooltip.get-tracking-code": {
"defaultMessage": "Erstelle Tracking Kennung" "defaultMessage": "Erstelle Tracking Kennung"
} }
} }

View File

@ -39,7 +39,7 @@
"defaultMessage": "View details" "defaultMessage": "View details"
}, },
"footer.powered-by": { "footer.powered-by": {
"defaultMessage": "powered by" "defaultMessage": "Powered by"
}, },
"header.nav.dashboard": { "header.nav.dashboard": {
"defaultMessage": "Dashboard" "defaultMessage": "Dashboard"
@ -236,4 +236,4 @@
"tooltip.get-tracking-code": { "tooltip.get-tracking-code": {
"defaultMessage": "Get tracking code" "defaultMessage": "Get tracking code"
} }
} }

View File

@ -236,4 +236,4 @@
"tooltip.get-tracking-code": { "tooltip.get-tracking-code": {
"defaultMessage": "İzleme kodunu al" "defaultMessage": "İzleme kodunu al"
} }
} }

View File

@ -236,4 +236,4 @@
"tooltip.get-tracking-code": { "tooltip.get-tracking-code": {
"defaultMessage": "获得跟踪代码" "defaultMessage": "获得跟踪代码"
} }
} }

View File

@ -1,11 +1,11 @@
import { format } from 'date-fns';
import { enUS, nl, zhCN, tr, ru, de } from 'date-fns/locale';
import enMessages from 'lang-compiled/en.json'; import enMessages from 'lang-compiled/en.json';
import nlMessages from 'lang-compiled/nl-NL.json'; import nlMessages from 'lang-compiled/nl-NL.json';
import zhCNMessages from 'lang-compiled/zh-CN.json'; import zhCNMessages from 'lang-compiled/zh-CN.json';
import trTRMessages from 'lang-compiled/tr-TR.json'; import trTRMessages from 'lang-compiled/tr-TR.json';
import ruRUMessages from 'lang-compiled/ru-RU.json'; import ruRUMessages from 'lang-compiled/ru-RU.json';
import deDEMessages from 'lang-compiled/de-DE.json'; import deDEMessages from 'lang-compiled/de-DE.json';
import { format } from 'date-fns';
import { enUS, nl, zhCN , tr, ru, de} from 'date-fns/locale';
export const messages = { export const messages = {
en: enMessages, en: enMessages,
@ -27,10 +27,10 @@ export const dateLocales = {
export const menuOptions = [ export const menuOptions = [
{ label: 'English', value: 'en', display: 'EN' }, { label: 'English', value: 'en', display: 'EN' },
{ label: 'Nederlands', value: 'nl-NL', display: 'NL' },
{ label: '中文 (Chinese Simplified)', value: 'zh-CN', display: '中文' }, { label: '中文 (Chinese Simplified)', value: 'zh-CN', display: '中文' },
{ label: 'Deutsch' , value:"de-DE", display: 'DE'}, { label: 'Deutsch (German)', value: 'de-DE', display: 'DE' },
{ label: 'Русский', value: 'ru-RU', display: 'РУ' }, { label: 'Nederlands (Dutch)', value: 'nl-NL', display: 'NL' },
{ label: 'Русский (Russian)', value: 'ru-RU', display: 'РУ' },
{ label: 'Turkish', value: 'tr-TR', display: 'TR' }, { label: 'Turkish', value: 'tr-TR', display: 'TR' },
]; ];

View File

@ -1,6 +1,10 @@
require('dotenv').config(); require('dotenv').config();
const pkg = require('./package.json');
module.exports = { module.exports = {
env: {
VERSION: pkg.version,
},
webpack(config) { webpack(config) {
config.module.rules.push({ config.module.rules.push({
test: /\.svg$/, test: /\.svg$/,

View File

@ -33,6 +33,9 @@
"**/*.css": [ "**/*.css": [
"stylelint --fix", "stylelint --fix",
"prettier --write" "prettier --write"
],
"**/*.json": [
"prettier --write"
] ]
}, },
"husky": { "husky": {