aboutsummaryrefslogtreecommitdiffstats
path: root/web_src/js
diff options
context:
space:
mode:
authorLauris BH <lauris@nix.lv>2020-01-20 12:07:30 +0200
committerGitHub <noreply@github.com>2020-01-20 12:07:30 +0200
commit81cfe243f9cb90b0a75de7a03bb2d264c97f0036 (patch)
tree0b98db10d626eff18384ad460ec04e2a6da61468 /web_src/js
parent7d7ab1eeae43d99fe329878ac9c8db5e45e2dee5 (diff)
downloadgitea-81cfe243f9cb90b0a75de7a03bb2d264c97f0036.tar.gz
gitea-81cfe243f9cb90b0a75de7a03bb2d264c97f0036.zip
Add top author stats to activity page (#9615)
Diffstat (limited to 'web_src/js')
-rw-r--r--web_src/js/components/ActivityTopAuthors.vue102
-rw-r--r--web_src/js/index.js10
2 files changed, 110 insertions, 2 deletions
diff --git a/web_src/js/components/ActivityTopAuthors.vue b/web_src/js/components/ActivityTopAuthors.vue
new file mode 100644
index 0000000000..a5c6e062b2
--- /dev/null
+++ b/web_src/js/components/ActivityTopAuthors.vue
@@ -0,0 +1,102 @@
+<template>
+ <div>
+ <div class="activity-bar-graph" ref="style" style="width:0px;height:0px"></div>
+ <div class="activity-bar-graph-alt" ref="altStyle" style="width:0px;height:0px"></div>
+ <vue-bar-graph
+ :points="graphData"
+ :show-x-axis="true"
+ :show-y-axis="false"
+ :show-values="true"
+ :width="graphWidth"
+ :bar-color="colors.barColor"
+ :text-color="colors.textColor"
+ :text-alt-color="colors.textAltColor"
+ :height="100"
+ :label-height="20"
+ >
+ <template v-slot:label="opt">
+ <g v-for="(author, idx) in authors" :key="author.position">
+ <a
+ v-if="opt.bar.index === idx && author.home_link !== ''"
+ :href="author.home_link"
+ >
+ <image
+ :x="`${opt.bar.midPoint - 10}px`"
+ :y="`${opt.bar.yLabel}px`"
+ height="20"
+ width="20"
+ :href="author.avatar_link"
+ />
+ </a>
+ <image
+ v-else-if="opt.bar.index === idx"
+ :x="`${opt.bar.midPoint - 10}px`"
+ :y="`${opt.bar.yLabel}px`"
+ height="20"
+ width="20"
+ :href="author.avatar_link"
+ />
+ </g>
+ </template>
+ <template v-slot:title="opt">
+ <tspan v-for="(author, idx) in authors" :key="author.position"><tspan v-if="opt.bar.index === idx">{{ author.name }}</tspan></tspan>
+ </template>
+ </vue-bar-graph>
+ </div>
+</template>
+
+<script>
+import VueBarGraph from 'vue-bar-graph';
+
+export default {
+ components: {
+ VueBarGraph,
+ },
+ props: {
+ data: { type: Array, default: () => [] },
+ },
+ mounted() {
+ const st = window.getComputedStyle(this.$refs.style);
+ const stalt = window.getComputedStyle(this.$refs.altStyle);
+
+ this.colors.barColor = st.backgroundColor;
+ this.colors.textColor = st.color;
+ this.colors.textAltColor = stalt.color;
+ },
+ data() {
+ return {
+ colors: {
+ barColor: 'green',
+ textColor: 'black',
+ textAltColor: 'white',
+ },
+ };
+ },
+ computed: {
+ graphData() {
+ return this.data.map((item) => {
+ return {
+ value: item.commits,
+ label: item.name,
+ };
+ });
+ },
+ authors() {
+ return this.data.map((item, idx) => {
+ return {
+ position: idx+1,
+ ...item,
+ }
+ });
+ },
+ graphWidth() {
+ return this.data.length * 40;
+ },
+ },
+ methods: {
+ hasHomeLink(i) {
+ return this.graphData[i].homeLink !== '' && this.graphData[i].homeLink !== null;
+ },
+ }
+}
+</script> \ No newline at end of file
diff --git a/web_src/js/index.js b/web_src/js/index.js
index 9168e7a943..f89750e933 100644
--- a/web_src/js/index.js
+++ b/web_src/js/index.js
@@ -7,6 +7,8 @@ import './gitGraphLoader.js';
import './semanticDropdown.js';
import initContextPopups from './features/contextPopup';
+import ActivityTopAuthors from './components/ActivityTopAuthors.vue';
+
function htmlEncode(text) {
return jQuery('<div />').text(text).html();
}
@@ -2894,9 +2896,13 @@ function initVueApp() {
delimiters: ['${', '}'],
el,
data: {
- searchLimit: document.querySelector('meta[name=_search_limit]').content,
+ searchLimit: (document.querySelector('meta[name=_search_limit]') || {}).content,
suburl: document.querySelector('meta[name=_suburl]').content,
- uid: Number(document.querySelector('meta[name=_context_uid]').content),
+ uid: Number((document.querySelector('meta[name=_context_uid]') || {}).content),
+ activityTopAuthors: window.ActivityTopAuthors || [],
+ },
+ components: {
+ ActivityTopAuthors,
},
});
}