Last Sync: 2026-10-28 20:57 (Mobile)
This commit is contained in:
1 parent
07ba98b0c9
commit
5ae4881054
205 files changed
+19078
-10009
No files matched your search
@@ -0,0 +1,88 @@
|
||||
```dataviewjs
|
||||
|
||||
const today = moment().format('YYYY-MM-DD');
|
||||
|
||||
const pages = dv.pages('""').where(p => p.type === 'schedule' && (p.start_date || p.startDate) && (p.end_date || p.endDate));
|
||||
|
||||
let results = [];
|
||||
|
||||
for (const page of pages) {
|
||||
const rawStart = page.start_date || page.startDate;
|
||||
const rawEnd = page.end_date || page.endDate;
|
||||
|
||||
const startStr = rawStart.toISODate ? rawStart.toISODate() : String(rawStart).substring(0, 10);
|
||||
const endStr = rawEnd.toISODate ? rawEnd.toISODate() : String(rawEnd).substring(0, 10);
|
||||
|
||||
if (today >= startStr && today <= endStr) {
|
||||
// 연도를 제외하고 월일만 추출 (예: "2026-09-20" -> "09-20")
|
||||
const startShort = startStr.substring(5);
|
||||
const endShort = endStr.substring(5);
|
||||
|
||||
results.push({
|
||||
...page,
|
||||
startStr,
|
||||
endStr,
|
||||
periodText: `${startShort} ~ ${endShort}` // 월일만 담긴 기간 문자열
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
dv.header(2, `🗓️ 오늘 일정 (${today})`);
|
||||
|
||||
if (results.length === 0) {
|
||||
dv.paragraph("오늘은 등록된 일정이 없습니다.");
|
||||
} else {
|
||||
const getBadgeClass = (val, type) => {
|
||||
if (!val) return "";
|
||||
let lower = String(val).toLowerCase();
|
||||
let badgeType = "";
|
||||
|
||||
if (type === 'status') {
|
||||
if (lower.includes('todo') || lower.includes('대기')) badgeType = 'badge-todo';
|
||||
else if (lower.includes('진행') || lower.includes('doing')) badgeType = 'badge-doing';
|
||||
else if (lower.includes('완료') || lower.includes('done')) badgeType = 'badge-done';
|
||||
else badgeType = 'badge-todo';
|
||||
} else if (type === 'priority') {
|
||||
if (lower.includes('high') || lower.includes('상') || lower.includes('중요')) badgeType = 'badge-high';
|
||||
else if (lower.includes('mid') || lower.includes('중')) badgeType = 'badge-medium';
|
||||
else badgeType = 'badge-low';
|
||||
}
|
||||
return `<span class="schedule-badge ${badgeType}">${val}</span>`;
|
||||
};
|
||||
|
||||
const truncateText = (text, limit = 20) => {
|
||||
if (!text) return "";
|
||||
let str = String(text);
|
||||
return str.length > limit ? str.substring(0, limit) + "..." : str;
|
||||
};
|
||||
|
||||
const tableData = results.map(p => {
|
||||
let rawProject = p.project || "";
|
||||
let rawTitle = p.file.name;
|
||||
|
||||
let displayProject = truncateText(rawProject, 20);
|
||||
let displayTitle = truncateText(rawTitle, 20);
|
||||
|
||||
let projectHtml = `<span class="schedule-ellipsis-cell">${displayProject}</span>`;
|
||||
let titleLinkHtml = `<span class="schedule-ellipsis-cell">[[${p.file.path}|${displayTitle}]]</span>`;
|
||||
|
||||
return [
|
||||
projectHtml,
|
||||
titleLinkHtml,
|
||||
getBadgeClass(p.priority || p.importance, 'priority'),
|
||||
getBadgeClass(p.status, 'status'),
|
||||
p.periodText // 연도가 빠진 월일 기간 표시
|
||||
];
|
||||
});
|
||||
|
||||
dv.table(["프로젝트", "일정명", "중요도", "진행상황", "기간"], tableData);
|
||||
|
||||
// CSS 클래스 적용
|
||||
const lastTable = dv.container.querySelector("table");
|
||||
if (lastTable) {
|
||||
let wrapper = lastTable.parentElement;
|
||||
if (wrapper) wrapper.addClass("today-schedule-table");
|
||||
}
|
||||
}
|
||||
|
||||
```
|
||||
Reference in new issue
Block a user