 1a7473ff45
			
		
	
	
		1a7473ff45
		
			
		
	
	
	
	
		
			
			* split `index.js` to separate files
* tune clipboard
* fix promise
* fix document
* remove intermediate empty file
* fix async event listener
* use `export function` instead of `export {}`, add more comments
Co-authored-by: Lunny Xiao <xiaolunwen@gmail.com>
Co-authored-by: 6543 <6543@obermui.de>
		
	
			
		
			
				
	
	
		
			109 lines
		
	
	
	
		
			2.9 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
			
		
		
	
	
			109 lines
		
	
	
	
		
			2.9 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
| <template>
 | |
|   <div>
 | |
|     <div class="activity-bar-graph" ref="style" style="width: 0; height: 0;"/>
 | |
|     <div class="activity-bar-graph-alt" ref="altStyle" style="width: 0; height: 0;"/>
 | |
|     <vue-bar-graph
 | |
|       :points="graphPoints"
 | |
|       :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 #label="opt">
 | |
|         <g v-for="(author, idx) in graphAuthors" :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 #title="opt">
 | |
|         <tspan v-for="(author, idx) in graphAuthors" :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';
 | |
| import {initVueApp} from './VueComponentLoader.js';
 | |
| 
 | |
| const sfc = {
 | |
|   components: {VueBarGraph},
 | |
|   data: () => ({
 | |
|     colors: {
 | |
|       barColor: 'green',
 | |
|       textColor: 'black',
 | |
|       textAltColor: 'white',
 | |
|     },
 | |
| 
 | |
|     // possible keys:
 | |
|     // * avatar_link: (...)
 | |
|     // * commits: (...)
 | |
|     // * home_link: (...)
 | |
|     // * login: (...)
 | |
|     // * name: (...)
 | |
|     activityTopAuthors: window.config.pageData.repoActivityTopAuthors || [],
 | |
|   }),
 | |
|   computed: {
 | |
|     graphPoints() {
 | |
|       return this.activityTopAuthors.map((item) => {
 | |
|         return {
 | |
|           value: item.commits,
 | |
|           label: item.name,
 | |
|         };
 | |
|       });
 | |
|     },
 | |
|     graphAuthors() {
 | |
|       return this.activityTopAuthors.map((item, idx) => {
 | |
|         return {
 | |
|           position: idx + 1,
 | |
|           ...item,
 | |
|         };
 | |
|       });
 | |
|     },
 | |
|     graphWidth() {
 | |
|       return this.activityTopAuthors.length * 40;
 | |
|     },
 | |
|   },
 | |
|   mounted() {
 | |
|     const refStyle = window.getComputedStyle(this.$refs.style);
 | |
|     const refAltStyle = window.getComputedStyle(this.$refs.altStyle);
 | |
| 
 | |
|     this.colors.barColor = refStyle.backgroundColor;
 | |
|     this.colors.textColor = refStyle.color;
 | |
|     this.colors.textAltColor = refAltStyle.color;
 | |
|   }
 | |
| };
 | |
| 
 | |
| export function initRepoActivityTopAuthorsChart() {
 | |
|   initVueApp('#repo-activity-top-authors-chart', sfc);
 | |
| }
 | |
| 
 | |
| export default sfc; // this line is necessary to activate the IDE's Vue plugin
 | |
| </script>
 |