>  기사  >  웹 프론트엔드  >  JS의 Contribution HeatMap과 같은 GitHub

JS의 Contribution HeatMap과 같은 GitHub

WBOY
WBOY원래의
2024-08-09 07:13:52737검색

GitHub 기여 차트를 어떻게 복제할 수 있는지 궁금한 적이 있나요? 우리 대부분은 그랬으므로 여러분도 그렇게 할 수 있는 방법은 다음과 같습니다.

cal-heatmap이라는 라이브러리를 사용할 예정입니다

npm install cal-heatmap을 사용하여 라이브러리를 설치한 다음 라이브러리를 애플리케이션으로 가져올 수 있습니다.

import CalHeatmap from 'cal-heatmap';

// Optionally import the CSS
import 'cal-heatmap/cal-heatmap.css';

삽입 히트맵을 렌더링하고 페인트 기능을 인스턴스화하려면:

const cal = new CalHeatmap();
cal.paint({
   itemSelector: '#cal-heatmap',
});

도메인과 하위 도메인을 정의합니다. 여기서 도메인은 기본 시간 단위이고 하위 도메인은 하위 시간 단위입니다. 이 경우 차트에 공백이 없도록 도메인을 월로, 하위 도메인을 ghDay로 지정합니다

cal.paint({
   itemSelector: '#cal-heatmap',
   domain: {
      type: 'month',
      gutter: 4,
      label: { text: 'MMM', textAlign: 'start', position: 'top' },
    },
    subDomain: { type: 'ghDay', radius: 2, width: 11, height: 11, gutter: 4 },
});

여백은 각 도메인이나 하위 도메인 사이의 공간을 정의합니다. 즉, 우리의 경우 매월 또는 날짜를 정의합니다.

날짜 옵션은 달력의 시작 날짜를 정의하고 범위 옵션은 표시할 도메인 수를 정의합니다. 이 경우 개월 수는 12입니다.

cal.paint({
   itemSelector: '#cal-heatmap',
   domain: {
      type: 'month',
      gutter: 4,
      label: { text: 'MMM', textAlign: 'start', position: 'top' },
    },
    subDomain: { type: 'ghDay', radius: 2, width: 11, height: 11, gutter: 4 },
    date: { start: new Date('2012-01-01') },
    range: 12,
});

이제 GraphQL을 사용하여 GitHub의 데이터를 추가해 보겠습니다. 여기서 userName은 GitHub의 사용자 이름입니다

query($userName:String!) { 
  user(login: $userName){
    contributionsCollection {
      contributionCalendar {
        totalContributions
        weeks {
          contributionDays {
            contributionCount
            date
          }
        }
      }
    }
  }
}

GraphQL 쿼리의 응답은 데이터 소스로 사용됩니다

cal.paint({
   itemSelector: '#cal-heatmap',
   domain: {
      type: 'month',
      gutter: 4,
      label: { text: 'MMM', textAlign: 'start', position: 'top' },
    },
    subDomain: { type: 'ghDay', radius: 2, width: 11, height: 11, gutter: 4 },
    date: { start: new Date('2012-01-01') },
    range: 12,
    data: {
       source: response,
       x: 'date',
       y: 'contributionCount',
       defaultValue: 0
    },
});

마지막으로 scale 속성을 사용하여 히트맵의 모양을 정의하고 툴팁과 캘린더 라벨 플러그인을 추가하겠습니다.

cal.paint({
   itemSelector: '#cal-heatmap',
   domain: {
      type: 'month',
      gutter: 4,
      label: { text: 'MMM', textAlign: 'start', position: 'top' },
    },
    subDomain: { type: 'ghDay', radius: 2, width: 11, height: 11, gutter: 4 },
    date: { start: new Date('2012-01-01') },
    range: 12,
    data: {
       source: response,
       x: 'date',
       y: 'contributionCount',
       defaultValue: 0
    },
    scale: {
      color: {
        type: 'threshold',
        range: ['#14432a', '#166b34', '#37a446', '#4dd05a'],
        domain: [10, 20, 30],
      },
    },
    [
    [
      Tooltip,
      {
        text: function (date, value, dayjsDate) {
          return (
            (value ? value : 'No') +
            ' contributions on ' +
            dayjsDate.format('dddd, MMMM D, YYYY')
          );
        },
      },
    ],
    [
      CalendarLabel,
      {
        width: 30,
        textAlign: 'start',
        text: () => dayjs.weekdaysShort().map((d, i) => (i % 2 == 0 ? '' : d)),
        padding: [25, 0, 0, 0],
      },
    ],
]
});

이제 GitHub 기여에 대한 아름다운 히트맵을 볼 수 있습니다.

GitHub like Contribution HeatMap in JS

더 많은 기술 관련 내용을 보려면 X(이전 Twitter)에서 저를 팔로우하세요

위 내용은 JS의 Contribution HeatMap과 같은 GitHub의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.