옵시디언 데이터뷰(dataview) - 조건에 따른 행(row) 색상 변경하기
옵시디언 데이터뷰 사용중 아래와 같은 기능이 있으면 보기 좋을것 같아서 한번 적용해보았습니다.
이 글은 [[옵시디언 데이터뷰(dataview) - 조건에 따른 행(row) 색상 변경하기 2 - 쉬운 버전]] 페이지의 데이터뷰 구성을 인라인 테이블 방식으로 적용한 업그레이드 버전입니다.
- *인라인 테이블 방식: 데이터뷰의 레코드를 별도의 파일들로 구성하지 않고 문서 내에 포함된 방식입니다.( 이 페이지의 하단에는
## 데이터
로 시작하는 영역이 존재하고 해당 데이터가 표를 구성하게 됩니다. 자세한 방법: [[Obsidian Dataview로 인라인 테이블 구성하기|링크]])
목표
- 옵시디언 데이터뷰(Obsidian dataview) 구성 시 강조를 원하는 열에 하이라이트를 표시한다.
참고
- 이 페이지의 예제는 인라인 데이터뷰로 구성하였습니다. (
WHERE file.path=this.file.path FLATTEN file.lists AS L GROUP BY meta(L.section).subpath as title
에 해당)
코드 및 설명
2개 모두 적용해야 함.
데이터뷰 스크립트
- 예시 : 데이터뷰 스크립트 블록에 아래 코드를 넣어주세요.
TABLE WITHOUT ID
choice(flg_bg=true, col1, choice(flg_bg_yellow=true,""+col1+"", ""+col1+"")) as 번호,
col2 as "제목" ,
col3 as "상태"
WHERE file.path=this.file.path
FLATTEN file.lists AS L GROUP BY meta(L.section).subpath as title
FLATTEN rows.L.번호[0] as col1
FLATTEN title as col2
FLATTEN rows.L.상태[1] as col3
FLATTEN choice(rows.L.상태[1]="정상", true, false) as flg_bg
FLATTEN choice(contains(rows.L.상태[1],"경"), true, false) as flg_bg_yellow
WHERE col1 != null
SORT title DESC
설명
-
choice(flg_bg=true, col1, choice(flg_bg_yellow=true,"<span class='custom_dv_yellow'>"+col1+"</span>", "<span class='custom_dv_grayout'>"+col1+"</span>")) as 번호
- 번호 열값을 아래의 기준으로 설정한다.
flg_bg
이 true일 경우 그냥 표시flg_bg_yellow
이 true일 경우custom_dv_yellow
class 설정- 나머지의 경우
custom_dv_grayout
class 설정
-
WHERE file.path=this.file.path
FLATTEN file.lists AS L GROUP BY meta(L.section).subpath as title
FLATTEN rows.L.번호[0] as col1
…WHERE col1 != null
-
현재파일내에서 ‘번호’항목을 가진 불렛 포인트 항목을 가지고 소제목으로 그룹핑을 수행한다. (*인라인 데이터뷰 구성)
-
FLATTEN choice(rows.L.상태[1]="정상", true, false) as flg_bg
- 상태 항목이 “정상” 인경우
flg_bg
를 true로 설정한다.
- 상태 항목이 “정상” 인경우
-
FLATTEN choice(contains(rows.L.상태[1],"경"), true, false) as flg_bg_yellow
: 상태 항목에 ‘경’이 포함된 열의 경우flg_bg_yellow
값을 true로 세팅한다. -
SORT title DESC
: title 열을 역순 정렬한다.
css
- 아래의 코드를 css 확장자로
Valut 폴더 / .obsidian / Snippet
경로에 저장한다. - 설정 > 테마 > css 스니펫 란에서 토글을 켜준다.
/* Style row that contains .custom_dv_grayout */
table.dataview tr:has(td):has(span):has(.custom_dv_grayout) {
background-color: #cdcdcd !important; /*연회색 강제*/
}
table.dataview tr:has(td):has(span):has(.custom_dv_yellow) {
background-color: #fcfcaa !important; /*연노란색 강제*/
}
코드설명
table.dataview tr:has(td):has(span):has(.custom_dv_grayout)
: 테이블 행(tr)을 찾는데 이 하위에custom_dv_grayout
이라는 class명을 가진 span tag가 있어야 한다.background-color: #cdcdcd !important;
: 해당하는 선택자(tr)의 배경색을#cdcdcd
로 강제한다.- 참고) 글자색상을 바꿀꺼면
color: #ffffff !important;
로 가능
전체 설명
## 데이터
하위 항목의 소제목&불렛포인트를 가지고 테이블을 구성하되 아래 조건을 적용한다.
- 상태=정상
flg_bg
: true ⭢ 아무것도 안함
- 상태가 ‘정상’ 아니고 ‘경’포함
flg_bg
: false,flg_bg_yellow
: true ⭢custom_dv_yellow
설정 ⭢background-color: #fcfcaa !important;
⭢ 노란색 배경
- 나머지 모든 경우
flg_bg
: false,flg_bg_yellow
: false ⭢custom_dv_grayout
설정 ⭢background-color: #cdcdcd !important;
-> 회색 배경
요약
flg_bg
= 아무것도 안함
flg_bg_yellow
⭢ custom_dv_yellow
설정 ⭢ background-color: #fcfcaa !important;
(노란색 배경)
나머지 모든 경우 ⭢ custom_dv_grayout
설정 ⭢ background-color: #cdcdcd !important;
(회색 배경)
참고
- datview - 인라인스크립트 이외에 나머지열에 대한 정의도 스크립트 가독성을 위해서 FLATTEN 구문을 통해 작성하였습니다. 아래 부분은 FLATTEN없이 컬럼선언부에 병합하여 작성가능합니다.
FLATTEN rows.L.번호[0] as col1
FLATTEN title as col2
FLATTEN rows.L.상태[1] as col3
FLATTEN choice(rows.L.상태[1]="정상", true, false) as flg_bg
FLATTEN choice(contains(rows.L.상태[1],"경"), true, false) as flg_bg_yellow
데이터
title1
- 번호 :: 4944
- 상태 :: 정상
title2
- 번호 :: 3515
- 상태 :: 정상
title3
- 번호 :: 3517
- 상태 :: 모름
title4
- 번호 :: 3993
- 상태 :: 정상
title5
- 번호 :: 8414
- 상태 :: 경고
- 개통일:: 2023-10-13
title6
- 번호 :: 7108
- 상태 :: 정상
- 개통일:: 2023-12-19
title7
- 번호 :: 5724
- 상태 :: 정상
- 개통일:: 2023-07-25
title8
- 번호 :: 3995
- 상태 :: 대기
연관포스트
[[Obsidian Dataview로 인라인 테이블 구성하기]] [[옵시디언 데이터뷰(dataview) - 조건에 따른 행(row) 색상 변경하기 2 - 쉬운 버전]]
#obsidian #dataview