mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-31 21:28:11 +09:00 
			
		
		
		
	Replace Fomantic `loader` CSS module with our existing `is-loading` spinner. Only three places in the UI used this module, which are pictured here: imagediff: <img width="1237" alt="Screenshot 2023-08-22 at 22 18 01" src="https://github.com/go-gitea/gitea/assets/115237/b0d82531-f05e-43c6-9e5b-1bfc268c056d"> webauthn: <img width="894" alt="Screenshot 2023-08-22 at 22 05 05" src="https://github.com/go-gitea/gitea/assets/115237/7b583425-d944-474a-a57a-22a65bbd8b29"> heatmap (I removed the previous loading text, it was unreadable because it was tiny and on fast machines only visible for a fraction of a second): <img width="764" alt="Screenshot 2023-08-22 at 22 18 44" src="https://github.com/go-gitea/gitea/assets/115237/1c7472d6-3e17-4224-a992-d8c0b380cc73"> Also, heatmap container does not resize any more after loading now and previous duplicate id `user-heatmap` is gone. --------- Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
		
			
				
	
	
		
			70 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
			
		
		
	
	
			70 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
| <template>
 | |
|   <div class="total-contributions">
 | |
|     {{ locale.contributions_in_the_last_12_months }}
 | |
|   </div>
 | |
|   <calendar-heatmap
 | |
|     :locale="locale"
 | |
|     :no-data-text="locale.no_contributions"
 | |
|     :tooltip-unit="locale.contributions"
 | |
|     :end-date="endDate"
 | |
|     :values="values"
 | |
|     :range-color="colorRange"
 | |
|     @day-click="handleDayClick($event)"
 | |
|   />
 | |
| </template>
 | |
| <script>
 | |
| import {CalendarHeatmap} from 'vue3-calendar-heatmap';
 | |
| 
 | |
| export default {
 | |
|   components: {CalendarHeatmap},
 | |
|   props: {
 | |
|     values: {
 | |
|       type: Array,
 | |
|       default: () => [],
 | |
|     },
 | |
|     locale: {
 | |
|       type: Object,
 | |
|       default: () => {},
 | |
|     }
 | |
|   },
 | |
|   data: () => ({
 | |
|     colorRange: [
 | |
|       'var(--color-secondary-alpha-60)',
 | |
|       'var(--color-secondary-alpha-60)',
 | |
|       'var(--color-primary-light-4)',
 | |
|       'var(--color-primary-light-2)',
 | |
|       'var(--color-primary)',
 | |
|       'var(--color-primary-dark-2)',
 | |
|       'var(--color-primary-dark-4)',
 | |
|     ],
 | |
|     endDate: new Date(),
 | |
|   }),
 | |
|   mounted() {
 | |
|     // work around issue with first legend color being rendered twice and legend cut off
 | |
|     const legend = document.querySelector('.vch__external-legend-wrapper');
 | |
|     legend.setAttribute('viewBox', '12 0 80 10');
 | |
|     legend.style.marginRight = '-12px';
 | |
|   },
 | |
|   methods: {
 | |
|     handleDayClick(e) {
 | |
|       // Reset filter if same date is clicked
 | |
|       const params = new URLSearchParams(document.location.search);
 | |
|       const queryDate = params.get('date');
 | |
|       // Timezone has to be stripped because toISOString() converts to UTC
 | |
|       const clickedDate = new Date(e.date - (e.date.getTimezoneOffset() * 60000)).toISOString().substring(0, 10);
 | |
| 
 | |
|       if (queryDate && queryDate === clickedDate) {
 | |
|         params.delete('date');
 | |
|       } else {
 | |
|         params.set('date', clickedDate);
 | |
|       }
 | |
| 
 | |
|       params.delete('page');
 | |
| 
 | |
|       const newSearch = params.toString();
 | |
|       window.location.search = newSearch.length ? `?${newSearch}` : '';
 | |
|     }
 | |
|   },
 | |
| };
 | |
| </script>
 |