Merge pull request #390 from mikecao/dev

v1.7.0
This commit is contained in:
Mike Cao 2020-11-28 14:19:40 -08:00 committed by GitHub
commit 8c869da7e2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 115 additions and 4 deletions

View File

@ -175,6 +175,7 @@ export default function BarChart({
options.scales.xAxes[0].ticks.callback = renderXLabel; options.scales.xAxes[0].ticks.callback = renderXLabel;
options.scales.xAxes[0].ticks.fontColor = colors.text; options.scales.xAxes[0].ticks.fontColor = colors.text;
options.scales.yAxes[0].ticks.fontColor = colors.text; options.scales.yAxes[0].ticks.fontColor = colors.text;
options.scales.yAxes[0].ticks.precision = 0;
options.scales.yAxes[0].gridLines.color = colors.line; options.scales.yAxes[0].gridLines.color = colors.line;
options.scales.yAxes[0].gridLines.zeroLineColor = colors.zeroLine; options.scales.yAxes[0].gridLines.zeroLineColor = colors.zeroLine;
options.animation.duration = animationDuration; options.animation.duration = animationDuration;

View File

@ -4,6 +4,7 @@
display: flex; display: flex;
flex-direction: column; flex-direction: column;
flex: 1; flex: 1;
overflow: hidden;
} }
.body { .body {

View File

@ -41,6 +41,7 @@ export default function MetricsBar({ websiteId, className }) {
} }
const { pageviews, uniques, bounces, totaltime } = data || {}; const { pageviews, uniques, bounces, totaltime } = data || {};
const num = Math.min(uniques, bounces);
return ( return (
<div className={classNames(styles.bar, className)} onClick={handleSetFormat}> <div className={classNames(styles.bar, className)} onClick={handleSetFormat}>
@ -60,7 +61,7 @@ export default function MetricsBar({ websiteId, className }) {
/> />
<MetricCard <MetricCard
label={<FormattedMessage id="metrics.bounce-rate" defaultMessage="Bounce rate" />} label={<FormattedMessage id="metrics.bounce-rate" defaultMessage="Bounce rate" />}
value={uniques ? (bounces / uniques) * 100 : 0} value={uniques ? (num / uniques) * 100 : 0}
format={n => Number(n).toFixed(0) + '%'} format={n => Number(n).toFixed(0) + '%'}
/> />
<MetricCard <MetricCard

View File

@ -13,7 +13,10 @@ export default function RealtimeViews({ websiteId, data, websites }) {
const [filter, setFilter] = useState(FILTER_REFERRERS); const [filter, setFilter] = useState(FILTER_REFERRERS);
const domains = useMemo(() => websites.map(({ domain }) => domain), [websites]); const domains = useMemo(() => websites.map(({ domain }) => domain), [websites]);
const getDomain = useCallback( const getDomain = useCallback(
id => websites.find(({ website_id }) => website_id === id)?.domain, id =>
websites.length === 1
? websites[0]?.domain
: websites.find(({ website_id }) => website_id === id)?.domain,
[websites], [websites],
); );

99
lang/ta-IN.json Normal file
View File

@ -0,0 +1,99 @@
{
"label.accounts": "கணக்குகள்",
"label.add-account": "கணக்கு சேர்க்க",
"label.add-website": "வலைத்தளத்தைச் சேர்க்க",
"label.administrator": "நிர்வாகியைச் சேர்க்க",
"label.all": "எல்லாம்",
"label.all-websites": "அனைத்து வலைத்தளங்களும்",
"label.back": "பின்னால்",
"label.cancel": "ரத்துசெய்",
"label.change-password": "கடவுச்சொல்லை மாற்று",
"label.confirm-password": "கடவுச்சொல்லை உறுதிப்படுத்தவும்",
"label.copy-to-clipboard": "கிளிப்போர்டுக்கு நகலெடுக்கவும்",
"label.current-password": "தற்போதைய கடவுச்சொல்",
"label.custom-range": "தனிப்பயன் வேறுபாட்டெல்லை",
"label.dashboard": "முகப்பு",
"label.date-range": "தேதி வரம்பு",
"label.default-date-range": "இயல்புநிலை தேதி வரம்பு",
"label.delete": "அழி",
"label.delete-account": "கணக்கை நீக்குக",
"label.delete-website": "வலைத்தளத்தை நீக்கு",
"label.dismiss": "நீக்கு",
"label.domain": "கள முகவரி",
"label.edit": "திருத்துதல்",
"label.edit-account": "கணக்கைத் திருத்து",
"label.edit-website": "வலைத்தளத்தைத் திருத்து",
"label.enable-share-url": "கள முகவரியை பகிரலாம்",
"label.invalid": "தவறானது",
"label.invalid-domain": "தவறான கள முகவரி",
"label.last-days": "முந்தைய {x} நாட்கள்",
"label.last-hours": "முந்தைய {x} மணி",
"label.logged-in-as": "{username} உள்நுழைந்துள்ளீர்",
"label.login": "உள்நுழைய",
"label.logout": "வெளியேறு",
"label.more": "மேலும்",
"label.name": "பெயர்",
"label.new-password": "புதிய கடவுச்சொல்",
"label.password": "கடவுச்சொல்",
"label.passwords-dont-match": "இருக்கடவுச்சொல் பொருந்தவில்லை",
"label.profile": "சுயவிவரம்",
"label.realtime": "தற்போதைய",
"label.realtime-logs": "தற்போதைய பதிவுகள்",
"label.refresh": "புதுப்பிப்பு",
"label.required": "தேவையானவை",
"label.reset": "மீட்டமை",
"label.save": "சேமி",
"label.settings": "அமைப்புகள்",
"label.share-url": "வலைத்தள களத்தைப் பகிரவும்",
"label.single-day": "ஒரு நாள்",
"label.this-month": "இந்த மாதம்",
"label.this-week": "இந்த வாரம்",
"label.this-year": "இந்த வருடம்",
"label.timezone": "நேர மண்டலம்",
"label.today": "இன்று",
"label.tracking-code": "கண்காணிப்பு குறியீடு",
"label.unknown": "தெரியாத",
"label.username": "பயனர்பெயர்",
"label.view-details": "விபரங்களை பார்",
"label.websites": "வலைத்தளங்கள்",
"message.active-users": "{x} தற்போதைய {x, plural, one {ஒன்று} other {மற்ற}}",
"message.confirm-delete": "நீங்கள் நிச்சயமாக {target} நீக்க விரும்புகிறீர்களா?",
"message.copied": "நகலெடுக்கப்பட்டது!",
"message.delete-warning": "தொடர்புடைய எல்லா தரவும் நீக்கப்படும்.",
"message.failure": "ஏதோ தவறு நடந்துவிட்டது.",
"message.get-share-url": "கள முகவரியை ஐப் பெறுக",
"message.get-tracking-code": "கண்காணிப்பு குறியீட்டைப் பெறுக",
"message.go-to-settings": "அமைப்புகளுக்குச் செல்லவும்",
"message.incorrect-username-password": "தவறான பயனர்பெயர் / கடவுச்சொல்.",
"message.log.visitor": "{country}வில் இருந்து பார்வையாளர் {browser} ஐ {os} {device}லில் பயன்படுத்துகிறார்",
"message.new-version-available": "umami {version} இன் புதிய பதிப்பு கிடைக்கும்!",
"message.no-data-available": "தரவு எதுவும் கிடைக்கவில்லை.",
"message.no-websites-configured": "உங்களிடம் எந்த வலைத்தளங்களும் கட்டமைக்கப்படவில்லை.",
"message.page-not-found": "பக்கம் கிடைக்கவில்லை.",
"message.powered-by": "{name} ஆல் இயக்கப்படுகிறது",
"message.save-success": "வெற்றிகரமாக சேமிக்கப்பட்டது.",
"message.share-url": "{target} இது பொதுவில் பகிரும் வலைத்தள முகவரி.",
"message.track-stats": "{target}க்கான புள்ளிவிவரங்களைக் கண்காணிக்க, {head}ல் பின்வரும் குறியீட்டை வைக்கவும்.",
"message.type-delete": "உறுதிப்படுத்த கீழே உள்ள பெட்டியில் {delete} என தட்டச்சு செய்க.",
"metrics.actions": "செயல்கள்",
"metrics.average-visit-time": "சராசரி வருகை நேரம்",
"metrics.bounce-rate": "துள்ளல் விகிதம்",
"metrics.browsers": "உலாவிகள்",
"metrics.countries": "நாடுகள்",
"metrics.device.desktop": "மேசை கணினி",
"metrics.device.laptop": "மடிக்கணினி",
"metrics.device.mobile": "கைபேசி",
"metrics.device.tablet": "கையடக்க கணினி",
"metrics.devices": "சாதனங்கள்",
"metrics.events": "நிகழ்வுகள்",
"metrics.filter.combined": "ஒருங்கிணைந்த",
"metrics.filter.domain-only": "கள முகவரி மட்டும்",
"metrics.filter.raw": "மூல",
"metrics.operating-systems": "இயக்க முறைமைகள்",
"metrics.page-views": "பக்க காட்சிகள்",
"metrics.pages": "பக்கங்கள்",
"metrics.referrers": "குறிப்பிடுவோர்",
"metrics.unique-visitors": "தனிப்பட்ட பார்வையாளர்கள்",
"metrics.views": "பார்வைகள்",
"metrics.visitors": "பார்வையாளர்கள்"
}

View File

@ -17,6 +17,7 @@ import {
ro, ro,
ru, ru,
sv, sv,
ta,
tr, tr,
uk, uk,
zhCN, zhCN,
@ -45,6 +46,7 @@ import ukMessages from 'lang-compiled/uk-UA.json';
import fiMessages from 'lang-compiled/fi-FI.json'; import fiMessages from 'lang-compiled/fi-FI.json';
import csMessages from 'lang-compiled/cs-CZ.json'; import csMessages from 'lang-compiled/cs-CZ.json';
import plMessages from 'lang-compiled/pl-PL.json'; import plMessages from 'lang-compiled/pl-PL.json';
import taMessages from 'lang-compiled/ta-IN.json';
export const messages = { export const messages = {
'en-US': enMessages, 'en-US': enMessages,
@ -70,6 +72,7 @@ export const messages = {
'fi-FI': fiMessages, 'fi-FI': fiMessages,
'cs-CZ': csMessages, 'cs-CZ': csMessages,
'pl-PL': plMessages, 'pl-PL': plMessages,
'ta-IN': taMessages,
}; };
export const dateLocales = { export const dateLocales = {
@ -96,6 +99,7 @@ export const dateLocales = {
'fi-FI': fi, 'fi-FI': fi,
'cs-CZ': cs, 'cs-CZ': cs,
'pl-PL': pl, 'pl-PL': pl,
'ta-In': ta,
}; };
export const menuOptions = [ export const menuOptions = [
@ -120,6 +124,7 @@ export const menuOptions = [
{ label: 'Română', value: 'ro-RO', display: 'ro' }, { label: 'Română', value: 'ro-RO', display: 'ro' },
{ label: 'Suomi', value: 'fi-FI', display: 'fi' }, { label: 'Suomi', value: 'fi-FI', display: 'fi' },
{ label: 'Svenska', value: 'sv-SE', display: 'sv' }, { label: 'Svenska', value: 'sv-SE', display: 'sv' },
{ label: 'தமிழ்', value: 'ta-IN', display: 'ta' },
{ label: 'Türkçe', value: 'tr-TR', display: 'tr' }, { label: 'Türkçe', value: 'tr-TR', display: 'tr' },
{ label: 'українська', value: 'uk-UA', display: 'uk' }, { label: 'українська', value: 'uk-UA', display: 'uk' },
]; ];

View File

@ -1,6 +1,6 @@
{ {
"name": "umami", "name": "umami",
"version": "1.6.0", "version": "1.7.0",
"description": "A simple, fast, website analytics alternative to Google Analytics. ", "description": "A simple, fast, website analytics alternative to Google Analytics. ",
"author": "Mike Cao <mike@mikecao.com>", "author": "Mike Cao <mike@mikecao.com>",
"license": "MIT", "license": "MIT",

View File

@ -9,7 +9,7 @@ export default async (req, res) => {
const { user_id: auth_user_id, is_admin } = req.auth; const { user_id: auth_user_id, is_admin } = req.auth;
const { user_id, current_password, new_password } = req.body; const { user_id, current_password, new_password } = req.body;
if (!is_admin || user_id !== auth_user_id) { if (!is_admin && user_id !== auth_user_id) {
return unauthorized(res); return unauthorized(res);
} }

File diff suppressed because one or more lines are too long