mirror of
				https://github.com/go-gitea/gitea
				synced 2025-11-04 13:28:25 +00:00 
			
		
		
		
	Fix and rewrite contrast color calculation, fix project-related bugs (#30237)
1. The previous color contrast calculation function was incorrect at least for the `#84b6eb` where it output low-contrast white instead of black. I've rewritten these functions now to accept hex colors and to match GitHub's calculation and to output pure white/black for maximum contrast. Before and after: <img width="94" alt="Screenshot 2024-04-02 at 01 53 46" src="https://github.com/go-gitea/gitea/assets/115237/00b39e15-a377-4458-95cf-ceec74b78228"><img width="90" alt="Screenshot 2024-04-02 at 01 51 30" src="https://github.com/go-gitea/gitea/assets/115237/1677067a-8d8f-47eb-82c0-76330deeb775"> 2. Fix project-related issues: - Expose the new `ContrastColor` function as template helper and use it for project cards, replacing the previous JS solution which eliminates a flash of wrong color on page load. - Fix a bug where if editing a project title, the counter would get lost. - Move `rgbToHex` function to color utils. @HesterG fyi --------- Co-authored-by: delvh <dev.lh@web.de> Co-authored-by: Giteabot <teabot@gitea.io>
This commit is contained in:
		@@ -1,7 +1,6 @@
 | 
			
		||||
<script>
 | 
			
		||||
import {SvgIcon} from '../svg.js';
 | 
			
		||||
import {useLightTextOnBackground} from '../utils/color.js';
 | 
			
		||||
import tinycolor from 'tinycolor2';
 | 
			
		||||
import {contrastColor} from '../utils/color.js';
 | 
			
		||||
import {GET} from '../modules/fetch.js';
 | 
			
		||||
 | 
			
		||||
const {appSubUrl, i18n} = window.config;
 | 
			
		||||
@@ -59,16 +58,11 @@ export default {
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    labels() {
 | 
			
		||||
      return this.issue.labels.map((label) => {
 | 
			
		||||
        let textColor;
 | 
			
		||||
        const {r, g, b} = tinycolor(label.color).toRgb();
 | 
			
		||||
        if (useLightTextOnBackground(r, g, b)) {
 | 
			
		||||
          textColor = '#eeeeee';
 | 
			
		||||
        } else {
 | 
			
		||||
          textColor = '#111111';
 | 
			
		||||
        }
 | 
			
		||||
        return {name: label.name, color: `#${label.color}`, textColor};
 | 
			
		||||
      });
 | 
			
		||||
      return this.issue.labels.map((label) => ({
 | 
			
		||||
        name: label.name,
 | 
			
		||||
        color: `#${label.color}`,
 | 
			
		||||
        textColor: contrastColor(`#${label.color}`),
 | 
			
		||||
      }));
 | 
			
		||||
    },
 | 
			
		||||
  },
 | 
			
		||||
  mounted() {
 | 
			
		||||
@@ -108,7 +102,7 @@ export default {
 | 
			
		||||
      <p><small>{{ issue.repository.full_name }} on {{ createdAt }}</small></p>
 | 
			
		||||
      <p><svg-icon :name="icon" :class="['text', color]"/> <strong>{{ issue.title }}</strong> #{{ issue.number }}</p>
 | 
			
		||||
      <p>{{ body }}</p>
 | 
			
		||||
      <div>
 | 
			
		||||
      <div class="labels-list">
 | 
			
		||||
        <div
 | 
			
		||||
          v-for="label in labels"
 | 
			
		||||
          :key="label.name"
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user