diff options
author | Lauris BH <lauris@nix.lv> | 2020-01-20 12:07:30 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-01-20 12:07:30 +0200 |
commit | 81cfe243f9cb90b0a75de7a03bb2d264c97f0036 (patch) | |
tree | 0b98db10d626eff18384ad460ec04e2a6da61468 /web_src/js | |
parent | 7d7ab1eeae43d99fe329878ac9c8db5e45e2dee5 (diff) | |
download | gitea-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.vue | 102 | ||||
-rw-r--r-- | web_src/js/index.js | 10 |
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, }, }); } |