mirror of
https://codeberg.org/forgejo/forgejo.git
synced 2024-10-20 08:16:14 +00:00
f097799953
### Overview This is the implementation of Code Frequency page. This feature was mentioned on these issues: #18262, #7392. It adds another tab to Activity page called Code Frequency. Code Frequency tab shows additions and deletions over time since the repository existed. Before: <img width="1296" alt="image" src="https://github.com/go-gitea/gitea/assets/32161460/2603504f-aee7-4929-a8c4-fb3412a7a0f6"> After: <img width="1296" alt="image" src="https://github.com/go-gitea/gitea/assets/32161460/58c03721-729f-4536-a663-9f337f240963"> --- #### Features - See additions deletions over time since repository existed - Click on "Additions" or "Deletions" legend to show only one type of contribution - Use the same cache from Contributors page so that the loading of data will be fast once it is cached by visiting either one of the pages --------- Co-authored-by: Giteabot <teabot@gitea.io> (cherry picked from commit 875f5ea6d83c8371f309df99654ca3556623004c)
36 lines
1.3 KiB
JavaScript
36 lines
1.3 KiB
JavaScript
// Check similar implementation in modules/util/color.go and keep synchronization
|
|
// Return R, G, B values defined in reletive luminance
|
|
function getLuminanceRGB(channel) {
|
|
const sRGB = channel / 255;
|
|
return (sRGB <= 0.03928) ? sRGB / 12.92 : ((sRGB + 0.055) / 1.055) ** 2.4;
|
|
}
|
|
|
|
// Reference from: https://www.w3.org/WAI/GL/wiki/Relative_luminance
|
|
function getLuminance(r, g, b) {
|
|
const R = getLuminanceRGB(r);
|
|
const G = getLuminanceRGB(g);
|
|
const B = getLuminanceRGB(b);
|
|
return 0.2126 * R + 0.7152 * G + 0.0722 * B;
|
|
}
|
|
|
|
// Reference from: https://firsching.ch/github_labels.html
|
|
// In the future WCAG 3 APCA may be a better solution.
|
|
// Check if text should use light color based on RGB of background
|
|
export function useLightTextOnBackground(r, g, b) {
|
|
return getLuminance(r, g, b) < 0.453;
|
|
}
|
|
|
|
function resolveColors(obj) {
|
|
const styles = window.getComputedStyle(document.documentElement);
|
|
const getColor = (name) => styles.getPropertyValue(name).trim();
|
|
return Object.fromEntries(Object.entries(obj).map(([key, value]) => [key, getColor(value)]));
|
|
}
|
|
|
|
export const chartJsColors = resolveColors({
|
|
text: '--color-text',
|
|
border: '--color-secondary-alpha-60',
|
|
commits: '--color-primary-alpha-60',
|
|
additions: '--color-green',
|
|
deletions: '--color-red',
|
|
});
|