aboutsummaryrefslogtreecommitdiffstats
path: root/web_src/js/components/RepoContributors.vue
diff options
context:
space:
mode:
Diffstat (limited to 'web_src/js/components/RepoContributors.vue')
-rw-r--r--web_src/js/components/RepoContributors.vue37
1 files changed, 19 insertions, 18 deletions
diff --git a/web_src/js/components/RepoContributors.vue b/web_src/js/components/RepoContributors.vue
index e79fc80d8e..754acb997d 100644
--- a/web_src/js/components/RepoContributors.vue
+++ b/web_src/js/components/RepoContributors.vue
@@ -1,4 +1,5 @@
<script lang="ts">
+import {defineComponent, type PropType} from 'vue';
import {SvgIcon} from '../svg.ts';
import dayjs from 'dayjs';
import {
@@ -56,11 +57,11 @@ Chart.register(
customEventListener,
);
-export default {
+export default defineComponent({
components: {ChartLine, SvgIcon},
props: {
locale: {
- type: Object,
+ type: Object as PropType<Record<string, any>>,
required: true,
},
repoLink: {
@@ -79,16 +80,16 @@ export default {
sortedContributors: {} as Record<string, any>,
type: 'commits',
contributorsStats: {} as Record<string, any>,
- xAxisStart: null,
- xAxisEnd: null,
- xAxisMin: null,
- xAxisMax: null,
+ xAxisStart: null as number | null,
+ xAxisEnd: null as number | null,
+ xAxisMin: null as number | null,
+ xAxisMax: null as number | null,
}),
mounted() {
this.fetchGraphData();
fomanticQuery('#repo-contributors').dropdown({
- onChange: (val) => {
+ onChange: (val: string) => {
this.xAxisMin = this.xAxisStart;
this.xAxisMax = this.xAxisEnd;
this.type = val;
@@ -98,7 +99,7 @@ export default {
},
methods: {
sortContributors() {
- const contributors = this.filterContributorWeeksByDateRange();
+ const contributors: Record<string, any> = this.filterContributorWeeksByDateRange();
const criteria = `total_${this.type}`;
this.sortedContributors = Object.values(contributors)
.filter((contributor) => contributor[criteria] !== 0)
@@ -157,7 +158,7 @@ export default {
},
filterContributorWeeksByDateRange() {
- const filteredData = {};
+ const filteredData: Record<string, any> = {};
const data = this.contributorsStats;
for (const key of Object.keys(data)) {
const user = data[key];
@@ -195,7 +196,7 @@ export default {
// Normally, chartjs handles this automatically, but it will resize the graph when you
// zoom, pan etc. I think resizing the graph makes it harder to compare things visually.
const maxValue = Math.max(
- ...this.totalStats.weeks.map((o) => o[this.type]),
+ ...this.totalStats.weeks.map((o: Record<string, any>) => o[this.type]),
);
const [coefficient, exp] = maxValue.toExponential().split('e').map(Number);
if (coefficient % 1 === 0) return maxValue;
@@ -207,7 +208,7 @@ export default {
// for contributors' graph. If I let chartjs do this for me, it will choose different
// maxY value for each contributors' graph which again makes it harder to compare.
const maxValue = Math.max(
- ...this.sortedContributors.map((c) => c.max_contribution_type),
+ ...this.sortedContributors.map((c: Record<string, any>) => c.max_contribution_type),
);
const [coefficient, exp] = maxValue.toExponential().split('e').map(Number);
if (coefficient % 1 === 0) return maxValue;
@@ -231,8 +232,8 @@ export default {
},
updateOtherCharts({chart}: {chart: Chart}, reset: boolean = false) {
- const minVal = chart.options.scales.x.min;
- const maxVal = chart.options.scales.x.max;
+ const minVal = Number(chart.options.scales.x.min);
+ const maxVal = Number(chart.options.scales.x.max);
if (reset) {
this.xAxisMin = this.xAxisStart;
this.xAxisMax = this.xAxisEnd;
@@ -320,7 +321,7 @@ export default {
};
},
},
-};
+});
</script>
<template>
<div>
@@ -352,12 +353,12 @@ export default {
</div>
<div>
<!-- Contribution type -->
- <div class="ui dropdown jump" id="repo-contributors">
+ <div class="ui floating dropdown jump" id="repo-contributors">
<div class="ui basic compact button">
<span class="not-mobile">{{ locale.filterLabel }}</span> <strong>{{ locale.contributionType[type] }}</strong>
<svg-icon name="octicon-triangle-down" :size="14"/>
</div>
- <div class="menu">
+ <div class="left menu">
<div :class="['item', {'selected': type === 'commits'}]" data-value="commits">
{{ locale.contributionType.commits }}
</div>
@@ -374,7 +375,7 @@ export default {
<div class="tw-flex ui segment main-graph">
<div v-if="isLoading || errorText !== ''" class="gt-tc tw-m-auto">
<div v-if="isLoading">
- <SvgIcon name="octicon-sync" class="tw-mr-2 job-status-rotate"/>
+ <SvgIcon name="octicon-sync" class="tw-mr-2 circular-spin"/>
{{ locale.loadingInfo }}
</div>
<div v-else class="text red">
@@ -396,7 +397,7 @@ export default {
<div class="ui top attached header tw-flex tw-flex-1">
<b class="ui right">#{{ index + 1 }}</b>
<a :href="contributor.home_link">
- <img class="ui avatar tw-align-middle" height="40" width="40" :src="contributor.avatar_link" alt="">
+ <img loading="lazy" class="ui avatar tw-align-middle" height="40" width="40" :src="contributor.avatar_link" alt="">
</a>
<div class="tw-ml-2">
<a v-if="contributor.home_link !== ''" :href="contributor.home_link"><h4>{{ contributor.name }}</h4></a>