├── .obsidian ├── app.json ├── appearance.json ├── community-plugins.json ├── core-plugins-migration.json ├── core-plugins.json ├── daily-notes.json ├── hotkeys.json ├── plugins │ ├── calendar │ │ ├── data.json │ │ ├── main.js │ │ └── manifest.json │ ├── dataview │ │ ├── data.json │ │ ├── main.js │ │ ├── manifest.json │ │ └── styles.css │ ├── obsidian-checklist-plugin │ │ ├── main.js │ │ ├── manifest.json │ │ └── styles.css │ ├── obsidian-day-planner │ │ ├── data.json │ │ ├── main.js │ │ ├── manifest.json │ │ └── styles.css │ ├── obsidian-style-settings │ │ ├── data.json │ │ ├── main.js │ │ ├── manifest.json │ │ └── styles.css │ ├── obsidian-toggle-list │ │ ├── data.json │ │ ├── main.js │ │ ├── manifest.json │ │ └── styles.css │ └── templater-obsidian │ │ ├── data.json │ │ ├── main.js │ │ ├── manifest.json │ │ └── styles.css ├── snippets │ └── GoblinCwl@CSS.css └── workspace.json ├── 002.工作 └── 工作记录 │ └── 日报 │ └── 日报:2023年5月18日.md ├── 003.自我 ├── 周记 │ └── 周记:2023年20周.md ├── 排期计划.md └── 日记 │ └── 日记:2023年5月18日.md ├── @模板 ├── 周记模板.md ├── 工作记录 │ └── 日报模板.md └── 日记模板.md └── README.md /.obsidian/app.json: -------------------------------------------------------------------------------- 1 | { 2 | "promptDelete": false 3 | } -------------------------------------------------------------------------------- /.obsidian/appearance.json: -------------------------------------------------------------------------------- 1 | { 2 | "accentColor": "", 3 | "enabledCssSnippets": [ 4 | "GoblinCwl@CSS" 5 | ] 6 | } -------------------------------------------------------------------------------- /.obsidian/community-plugins.json: -------------------------------------------------------------------------------- 1 | [ 2 | "calendar", 3 | "obsidian-checklist-plugin", 4 | "dataview", 5 | "obsidian-day-planner", 6 | "obsidian-style-settings", 7 | "templater-obsidian", 8 | "obsidian-toggle-list" 9 | ] -------------------------------------------------------------------------------- /.obsidian/core-plugins-migration.json: -------------------------------------------------------------------------------- 1 | { 2 | "file-explorer": true, 3 | "global-search": true, 4 | "switcher": true, 5 | "graph": true, 6 | "backlink": true, 7 | "canvas": true, 8 | "outgoing-link": true, 9 | "tag-pane": true, 10 | "page-preview": true, 11 | "daily-notes": true, 12 | "templates": true, 13 | "note-composer": true, 14 | "command-palette": true, 15 | "slash-command": false, 16 | "editor-status": true, 17 | "bookmarks": true, 18 | "markdown-importer": false, 19 | "zk-prefixer": false, 20 | "random-note": false, 21 | "outline": true, 22 | "word-count": true, 23 | "slides": false, 24 | "audio-recorder": false, 25 | "workspaces": false, 26 | "file-recovery": true, 27 | "publish": false, 28 | "sync": false 29 | } -------------------------------------------------------------------------------- /.obsidian/core-plugins.json: -------------------------------------------------------------------------------- 1 | [ 2 | "file-explorer", 3 | "global-search", 4 | "switcher", 5 | "graph", 6 | "backlink", 7 | "canvas", 8 | "outgoing-link", 9 | "tag-pane", 10 | "page-preview", 11 | "daily-notes", 12 | "templates", 13 | "note-composer", 14 | "command-palette", 15 | "editor-status", 16 | "bookmarks", 17 | "outline", 18 | "word-count", 19 | "file-recovery" 20 | ] -------------------------------------------------------------------------------- /.obsidian/daily-notes.json: -------------------------------------------------------------------------------- 1 | { 2 | "format": "日记:YYYY年MMMD日", 3 | "folder": "003.自我/日记", 4 | "template": "@模板/日记模板" 5 | } -------------------------------------------------------------------------------- /.obsidian/hotkeys.json: -------------------------------------------------------------------------------- 1 | { 2 | "obsidian-toggle-list:Task-Next": [ 3 | { 4 | "modifiers": [ 5 | "Mod" 6 | ], 7 | "key": "L" 8 | } 9 | ], 10 | "editor:toggle-checklist-status": [] 11 | } -------------------------------------------------------------------------------- /.obsidian/plugins/calendar/data.json: -------------------------------------------------------------------------------- 1 | { 2 | "shouldConfirmBeforeCreate": true, 3 | "weekStart": "locale", 4 | "wordsPerDot": 250, 5 | "showWeeklyNote": true, 6 | "weeklyNoteFormat": "周记:gggg年ww周", 7 | "weeklyNoteTemplate": "@模板/周记模板.md", 8 | "weeklyNoteFolder": "003.自我/周记", 9 | "localeOverride": "system-default" 10 | } -------------------------------------------------------------------------------- /.obsidian/plugins/calendar/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "calendar", 3 | "name": "Calendar", 4 | "description": "Calendar view of your daily notes", 5 | "version": "1.5.10", 6 | "author": "Liam Cain", 7 | "authorUrl": "https://github.com/liamcain/", 8 | "isDesktopOnly": false, 9 | "minAppVersion": "0.9.11" 10 | } 11 | -------------------------------------------------------------------------------- /.obsidian/plugins/dataview/data.json: -------------------------------------------------------------------------------- 1 | { 2 | "renderNullAs": "\\-", 3 | "taskCompletionTracking": false, 4 | "taskCompletionUseEmojiShorthand": false, 5 | "taskCompletionText": "completion", 6 | "taskCompletionDateFormat": "yyyy-MM-dd", 7 | "recursiveSubTaskCompletion": false, 8 | "warnOnEmptyResult": true, 9 | "refreshEnabled": true, 10 | "refreshInterval": 2500, 11 | "defaultDateFormat": "MMMM dd, yyyy", 12 | "defaultDateTimeFormat": "h:mm a - MMMM dd, yyyy", 13 | "maxRecursiveRenderDepth": 4, 14 | "tableIdColumnName": "File", 15 | "tableGroupColumnName": "Group", 16 | "showResultCount": true, 17 | "allowHtml": true, 18 | "inlineQueryPrefix": "=", 19 | "inlineJsQueryPrefix": "$=", 20 | "inlineQueriesInCodeblocks": true, 21 | "enableInlineDataview": true, 22 | "enableDataviewJs": true, 23 | "enableInlineDataviewJs": false, 24 | "prettyRenderInlineFields": true, 25 | "dataviewJsKeyword": "dataviewjs" 26 | } -------------------------------------------------------------------------------- /.obsidian/plugins/dataview/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "dataview", 3 | "name": "Dataview", 4 | "version": "0.5.56", 5 | "minAppVersion": "0.13.11", 6 | "description": "Complex data views for the data-obsessed.", 7 | "author": "Michael Brenan ", 8 | "authorUrl": "https://github.com/blacksmithgu", 9 | "isDesktopOnly": false 10 | } 11 | -------------------------------------------------------------------------------- /.obsidian/plugins/dataview/styles.css: -------------------------------------------------------------------------------- 1 | /** Live Preview padding fixes, specifically for DataviewJS custom HTML elements. */ 2 | .is-live-preview .block-language-dataviewjs > p, .is-live-preview .block-language-dataviewjs > span { 3 | line-height: 1.0; 4 | } 5 | 6 | .block-language-dataview { 7 | overflow-y: auto; 8 | } 9 | 10 | /*****************/ 11 | /** Table Views **/ 12 | /*****************/ 13 | 14 | /* List View Default Styling; rendered internally as a table. */ 15 | .table-view-table { 16 | width: 100%; 17 | } 18 | 19 | .table-view-table > thead > tr, .table-view-table > tbody > tr { 20 | margin-top: 1em; 21 | margin-bottom: 1em; 22 | text-align: left; 23 | } 24 | 25 | .table-view-table > tbody > tr:hover { 26 | background-color: var(--text-selection) !important; 27 | } 28 | 29 | .table-view-table > thead > tr > th { 30 | font-weight: 700; 31 | font-size: larger; 32 | border-top: none; 33 | border-left: none; 34 | border-right: none; 35 | border-bottom: solid; 36 | 37 | max-width: 100%; 38 | } 39 | 40 | .table-view-table > tbody > tr > td { 41 | text-align: left; 42 | border: none; 43 | font-weight: 400; 44 | max-width: 100%; 45 | } 46 | 47 | .table-view-table ul, .table-view-table ol { 48 | margin-block-start: 0.2em !important; 49 | margin-block-end: 0.2em !important; 50 | } 51 | 52 | /** Rendered value styling for any view. */ 53 | .dataview-result-list-root-ul { 54 | padding: 0em !important; 55 | margin: 0em !important; 56 | } 57 | 58 | .dataview-result-list-ul { 59 | margin-block-start: 0.2em !important; 60 | margin-block-end: 0.2em !important; 61 | } 62 | 63 | /** Generic grouping styling. */ 64 | .dataview.result-group { 65 | padding-left: 8px; 66 | } 67 | 68 | /*******************/ 69 | /** Inline Fields **/ 70 | /*******************/ 71 | 72 | .dataview.inline-field-key { 73 | padding-left: 8px; 74 | padding-right: 8px; 75 | font-family: var(--font-monospace); 76 | background-color: var(--background-primary-alt); 77 | color: var(--text-nav-selected); 78 | } 79 | 80 | .dataview.inline-field-value { 81 | padding-left: 8px; 82 | padding-right: 8px; 83 | font-family: var(--font-monospace); 84 | background-color: var(--background-secondary-alt); 85 | color: var(--text-nav-selected); 86 | } 87 | 88 | .dataview.inline-field-standalone-value { 89 | padding-left: 8px; 90 | padding-right: 8px; 91 | font-family: var(--font-monospace); 92 | background-color: var(--background-secondary-alt); 93 | color: var(--text-nav-selected); 94 | } 95 | 96 | /***************/ 97 | /** Task View **/ 98 | /***************/ 99 | 100 | .dataview.task-list-item, .dataview.task-list-basic-item { 101 | margin-top: 3px; 102 | margin-bottom: 3px; 103 | transition: 0.4s; 104 | } 105 | 106 | .dataview.task-list-item:hover, .dataview.task-list-basic-item:hover { 107 | background-color: var(--text-selection); 108 | box-shadow: -40px 0 0 var(--text-selection); 109 | cursor: pointer; 110 | } 111 | 112 | /*****************/ 113 | /** Error Views **/ 114 | /*****************/ 115 | 116 | div.dataview-error-box { 117 | width: 100%; 118 | min-height: 150px; 119 | display: flex; 120 | align-items: center; 121 | justify-content: center; 122 | border: 4px dashed var(--background-secondary); 123 | } 124 | 125 | .dataview-error-message { 126 | color: var(--text-muted); 127 | text-align: center; 128 | } 129 | 130 | /*************************/ 131 | /** Additional Metadata **/ 132 | /*************************/ 133 | 134 | .dataview.small-text { 135 | font-size: smaller; 136 | color: var(--text-muted); 137 | margin-left: 3px; 138 | } 139 | 140 | .dataview.small-text::before { 141 | content: "("; 142 | } 143 | 144 | .dataview.small-text::after { 145 | content: ")"; 146 | } 147 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-checklist-plugin/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "obsidian-checklist-plugin", 3 | "name": "Checklist", 4 | "version": "2.2.12", 5 | "minAppVersion": "0.14.5", 6 | "description": "Combines checklists across pages into users sidebar", 7 | "author": "delashum", 8 | "authorUrl": "https://www.hivewire.co/jobs", 9 | "isDesktopOnly": false 10 | } -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-checklist-plugin/styles.css: -------------------------------------------------------------------------------- 1 | /* no content */ 2 | .checklist-plugin-main { 3 | --checklist-checkboxSize: 20px; 4 | --checklist-checkboxCheckedSize: 12px; 5 | --checklist-checkboxBorder: 2px solid var(--text-muted); 6 | --checklist-checkboxFill: var(--text-muted); 7 | --checklist-listItemBorderRadius: 8px; 8 | --checklist-listItemMargin: 0 0 12px; 9 | --checklist-listItemBackground: var(--interactive-normal); 10 | --checklist-listItemBackground--hover: var(--interactive-hover); 11 | --checklist-listItemMargin--compact: 0 0 8px; 12 | --checklist-listItemBoxShadow: none; 13 | --checklist-headerMargin: 0 0 8px; 14 | --checklist-headerGap: 4px; 15 | --checklist-headerFontSize: 18px; 16 | --checklist-headerFontWeight: 600; 17 | --checklist-iconSize: 24px; 18 | --checklist-iconFill: var(--text-normal); 19 | --checklist-iconFill--accent: #777; 20 | --checklist-textColor: var(--text-muted); 21 | --checklist-accentColor: var(--text-accent); 22 | --checklist-accentColor--active: var(--text-accent-hover); 23 | --checklist-pageMargin: 0 0 4px; 24 | --checklist-loaderSize: 16px; 25 | --checklist-loaderBorderColor: var(--text-muted) var(--text-muted) var(--text-normal); 26 | --checklist-buttonPadding: 0 5px; 27 | --checklist-buttonBoxShadow: none; 28 | --checklist-countPadding: 0 6px; 29 | --checklist-countBackground: var(--interactive-normal); 30 | --checklist-countFontSize: 13px; 31 | --checklist-togglePadding: 8px 8px 8px 12px; 32 | --checklist-contentPadding: 8px 12px 8px 0; 33 | --checklist-contentPadding--compact: 4px 8px; 34 | --checklist-togglePadding--compact: 4px 8px; 35 | --checklist-countBorderRadius: 4px; 36 | --checklist-tagBaseColor: var(--text-faint); 37 | --checklist-tagSubColor: #bbb; 38 | --checklist-groupMargin: 8px; 39 | --checklist-contentFontSize: var(--editor-font-size); 40 | --checklist-searchBackground: var(--background-primary); 41 | } 42 | 43 | .checklist-plugin-main button { 44 | margin: initial; 45 | } 46 | 47 | .checklist-plugin-main p { 48 | margin: initial; 49 | word-break: break-word; 50 | } 51 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-day-planner/data.json: -------------------------------------------------------------------------------- 1 | { 2 | "customFolder": "Day Planners", 3 | "mode": 1, 4 | "mermaid": false, 5 | "notesToDates": [ 6 | { 7 | "notePath": "003.自我/日记/日记:2023年5月18日.md", 8 | "date": "Thu May 18 2023" 9 | } 10 | ], 11 | "completePastItems": false, 12 | "circularProgress": false, 13 | "nowAndNextInStatusBar": false, 14 | "showTaskNotification": false, 15 | "timelineZoomLevel": 4 16 | } -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-day-planner/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "obsidian-day-planner", 3 | "name": "Day Planner", 4 | "version": "0.5.8", 5 | "description": "A plugin to help you plan your day and setup pomodoro timers", 6 | "isDesktopOnly": false, 7 | "js": "main.js", 8 | "css": "style.css" 9 | } -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-day-planner/styles.css: -------------------------------------------------------------------------------- 1 | /** Status Bar **/ 2 | 3 | .day-planner { 4 | position: relative; 5 | } 6 | 7 | .day-planner .status-bar-item-segment:hover { 8 | cursor: pointer; 9 | } 10 | 11 | .day-planner-progress-bar { 12 | margin-top: 2px; 13 | background-color: var(--text-muted); 14 | border-radius: 4px; 15 | min-width: 80px; 16 | height: 16px; 17 | float: left; 18 | display: none; 19 | } 20 | 21 | .day-planner-progress-value { 22 | background-color: var(--interactive-accent); 23 | transition: 0.3s all linear; 24 | border-radius: 4px; 25 | height: 16px; 26 | display: inline-block; 27 | } 28 | 29 | .day-planner-progress-value.green, .day-planner .progress-pie.green::before { 30 | background-color: #4CAF50; 31 | } 32 | 33 | .day-planner .progress-pie.green { 34 | background-image: linear-gradient(to right,transparent 50%, #4CAF50 0) 35 | } 36 | 37 | .day-planner-status-bar-text { 38 | float: left; 39 | margin-right: 10px; 40 | } 41 | 42 | .day-planner-status-card { 43 | position: absolute; 44 | top: -140px; 45 | width: 300px; 46 | background-color: var(--background-secondary-alt); 47 | padding: 8px; 48 | border-radius: 4px; 49 | display: none; 50 | } 51 | 52 | .day-planner-status-card .arrow-down { 53 | border-left: 20px solid transparent; 54 | border-right: 20px solid transparent; 55 | border-top: 20px solid var(--background-secondary-alt); 56 | width: 20px; 57 | position: absolute; 58 | } 59 | 60 | .progress-pie.day-planner { 61 | background-color: var(--text-muted); 62 | float: left; 63 | height: 20px; 64 | margin: 0.3px 10px 0.3px 0; 65 | width: 20px; 66 | display: none; 67 | } 68 | 69 | .progress-pie.day-planner:after { 70 | width: 80%; 71 | height: 80%; 72 | } 73 | 74 | .progress-pie.day-planner:after { 75 | color: transparent; 76 | background-color: transparent; 77 | font-size: 8px; 78 | font-weight: 900; 79 | line-height: 13px; 80 | } 81 | 82 | [data-type="timeline"] .view-content { 83 | padding-bottom: 0; 84 | } 85 | 86 | 87 | /* CSS Progress Pie by Olivia Ng | MIT License | github.com/oliviale/css-progress-pie*/ 88 | .progress-pie{width:60px;height:60px;border-radius:50%;background:#eee;background-image:-webkit-linear-gradient(left,transparent 50%,var(--interactive-accent) 0);background-image:linear-gradient(to right,transparent 50%,var(--interactive-accent) 0);position:relative;display:inline-block;margin:10px}.progress-pie::before{content:'';display:block;margin-left:50%;height:100%;border-radius:0 100% 100% 0/50%;background-color:inherit;-webkit-transform-origin:left;-ms-transform-origin:left;transform-origin:left}.progress-pie::after{content:attr(data-value);position:absolute;width:70%;height:70%;margin:auto;border-radius:50%;background-color:#fff;left:0;right:0;top:0;bottom:0;text-align:center;font:900 20px/41px Tahoma}.progress-pie[data-value="0"]:before{-webkit-transform:rotate(0turn);-ms-transform:rotate(0turn);transform:rotate(0turn)}.progress-pie[data-value="1"]:before{-webkit-transform:rotate(.01turn);-ms-transform:rotate(.01turn);transform:rotate(.01turn)}.progress-pie[data-value="2"]:before{-webkit-transform:rotate(.02turn);-ms-transform:rotate(.02turn);transform:rotate(.02turn)}.progress-pie[data-value="3"]:before{-webkit-transform:rotate(.03turn);-ms-transform:rotate(.03turn);transform:rotate(.03turn)}.progress-pie[data-value="4"]:before{-webkit-transform:rotate(.04turn);-ms-transform:rotate(.04turn);transform:rotate(.04turn)}.progress-pie[data-value="5"]:before{-webkit-transform:rotate(.05turn);-ms-transform:rotate(.05turn);transform:rotate(.05turn)}.progress-pie[data-value="6"]:before{-webkit-transform:rotate(.06turn);-ms-transform:rotate(.06turn);transform:rotate(.06turn)}.progress-pie[data-value="7"]:before{-webkit-transform:rotate(.07turn);-ms-transform:rotate(.07turn);transform:rotate(.07turn)}.progress-pie[data-value="8"]:before{-webkit-transform:rotate(.08turn);-ms-transform:rotate(.08turn);transform:rotate(.08turn)}.progress-pie[data-value="9"]:before{-webkit-transform:rotate(.09turn);-ms-transform:rotate(.09turn);transform:rotate(.09turn)}.progress-pie[data-value="10"]:before{-webkit-transform:rotate(.1turn);-ms-transform:rotate(.1turn);transform:rotate(.1turn)}.progress-pie[data-value="11"]:before{-webkit-transform:rotate(.11turn);-ms-transform:rotate(.11turn);transform:rotate(.11turn)}.progress-pie[data-value="12"]:before{-webkit-transform:rotate(.12turn);-ms-transform:rotate(.12turn);transform:rotate(.12turn)}.progress-pie[data-value="13"]:before{-webkit-transform:rotate(.13turn);-ms-transform:rotate(.13turn);transform:rotate(.13turn)}.progress-pie[data-value="14"]:before{-webkit-transform:rotate(.14turn);-ms-transform:rotate(.14turn);transform:rotate(.14turn)}.progress-pie[data-value="15"]:before{-webkit-transform:rotate(.15turn);-ms-transform:rotate(.15turn);transform:rotate(.15turn)}.progress-pie[data-value="16"]:before{-webkit-transform:rotate(.16turn);-ms-transform:rotate(.16turn);transform:rotate(.16turn)}.progress-pie[data-value="17"]:before{-webkit-transform:rotate(.17turn);-ms-transform:rotate(.17turn);transform:rotate(.17turn)}.progress-pie[data-value="18"]:before{-webkit-transform:rotate(.18turn);-ms-transform:rotate(.18turn);transform:rotate(.18turn)}.progress-pie[data-value="19"]:before{-webkit-transform:rotate(.19turn);-ms-transform:rotate(.19turn);transform:rotate(.19turn)}.progress-pie[data-value="20"]:before{-webkit-transform:rotate(.2turn);-ms-transform:rotate(.2turn);transform:rotate(.2turn)}.progress-pie[data-value="21"]:before{-webkit-transform:rotate(.21turn);-ms-transform:rotate(.21turn);transform:rotate(.21turn)}.progress-pie[data-value="22"]:before{-webkit-transform:rotate(.22turn);-ms-transform:rotate(.22turn);transform:rotate(.22turn)}.progress-pie[data-value="23"]:before{-webkit-transform:rotate(.23turn);-ms-transform:rotate(.23turn);transform:rotate(.23turn)}.progress-pie[data-value="24"]:before{-webkit-transform:rotate(.24turn);-ms-transform:rotate(.24turn);transform:rotate(.24turn)}.progress-pie[data-value="25"]:before{-webkit-transform:rotate(.25turn);-ms-transform:rotate(.25turn);transform:rotate(.25turn)}.progress-pie[data-value="26"]:before{-webkit-transform:rotate(.26turn);-ms-transform:rotate(.26turn);transform:rotate(.26turn)}.progress-pie[data-value="27"]:before{-webkit-transform:rotate(.27turn);-ms-transform:rotate(.27turn);transform:rotate(.27turn)}.progress-pie[data-value="28"]:before{-webkit-transform:rotate(.28turn);-ms-transform:rotate(.28turn);transform:rotate(.28turn)}.progress-pie[data-value="29"]:before{-webkit-transform:rotate(.29turn);-ms-transform:rotate(.29turn);transform:rotate(.29turn)}.progress-pie[data-value="30"]:before{-webkit-transform:rotate(.3turn);-ms-transform:rotate(.3turn);transform:rotate(.3turn)}.progress-pie[data-value="31"]:before{-webkit-transform:rotate(.31turn);-ms-transform:rotate(.31turn);transform:rotate(.31turn)}.progress-pie[data-value="32"]:before{-webkit-transform:rotate(.32turn);-ms-transform:rotate(.32turn);transform:rotate(.32turn)}.progress-pie[data-value="33"]:before{-webkit-transform:rotate(.33turn);-ms-transform:rotate(.33turn);transform:rotate(.33turn)}.progress-pie[data-value="34"]:before{-webkit-transform:rotate(.34turn);-ms-transform:rotate(.34turn);transform:rotate(.34turn)}.progress-pie[data-value="35"]:before{-webkit-transform:rotate(.35turn);-ms-transform:rotate(.35turn);transform:rotate(.35turn)}.progress-pie[data-value="36"]:before{-webkit-transform:rotate(.36turn);-ms-transform:rotate(.36turn);transform:rotate(.36turn)}.progress-pie[data-value="37"]:before{-webkit-transform:rotate(.37turn);-ms-transform:rotate(.37turn);transform:rotate(.37turn)}.progress-pie[data-value="38"]:before{-webkit-transform:rotate(.38turn);-ms-transform:rotate(.38turn);transform:rotate(.38turn)}.progress-pie[data-value="39"]:before{-webkit-transform:rotate(.39turn);-ms-transform:rotate(.39turn);transform:rotate(.39turn)}.progress-pie[data-value="40"]:before{-webkit-transform:rotate(.4turn);-ms-transform:rotate(.4turn);transform:rotate(.4turn)}.progress-pie[data-value="41"]:before{-webkit-transform:rotate(.41turn);-ms-transform:rotate(.41turn);transform:rotate(.41turn)}.progress-pie[data-value="42"]:before{-webkit-transform:rotate(.42turn);-ms-transform:rotate(.42turn);transform:rotate(.42turn)}.progress-pie[data-value="43"]:before{-webkit-transform:rotate(.43turn);-ms-transform:rotate(.43turn);transform:rotate(.43turn)}.progress-pie[data-value="44"]:before{-webkit-transform:rotate(.44turn);-ms-transform:rotate(.44turn);transform:rotate(.44turn)}.progress-pie[data-value="45"]:before{-webkit-transform:rotate(.45turn);-ms-transform:rotate(.45turn);transform:rotate(.45turn)}.progress-pie[data-value="46"]:before{-webkit-transform:rotate(.46turn);-ms-transform:rotate(.46turn);transform:rotate(.46turn)}.progress-pie[data-value="47"]:before{-webkit-transform:rotate(.47turn);-ms-transform:rotate(.47turn);transform:rotate(.47turn)}.progress-pie[data-value="48"]:before{-webkit-transform:rotate(.48turn);-ms-transform:rotate(.48turn);transform:rotate(.48turn)}.progress-pie[data-value="49"]:before{-webkit-transform:rotate(.49turn);-ms-transform:rotate(.49turn);transform:rotate(.49turn)}.progress-pie[data-value="50"]:before{-webkit-transform:rotate(.5turn);-ms-transform:rotate(.5turn);transform:rotate(.5turn)}.progress-pie[data-value="51"]:before{background-color:var(--interactive-accent);-webkit-transform:rotate(.01turn);-ms-transform:rotate(.01turn);transform:rotate(.01turn)}.progress-pie[data-value="52"]:before{background-color:var(--interactive-accent);-webkit-transform:rotate(.02turn);-ms-transform:rotate(.02turn);transform:rotate(.02turn)}.progress-pie[data-value="53"]:before{background-color:var(--interactive-accent);-webkit-transform:rotate(.03turn);-ms-transform:rotate(.03turn);transform:rotate(.03turn)}.progress-pie[data-value="54"]:before{background-color:var(--interactive-accent);-webkit-transform:rotate(.04turn);-ms-transform:rotate(.04turn);transform:rotate(.04turn)}.progress-pie[data-value="55"]:before{background-color:var(--interactive-accent);-webkit-transform:rotate(.05turn);-ms-transform:rotate(.05turn);transform:rotate(.05turn)}.progress-pie[data-value="56"]:before{background-color:var(--interactive-accent);-webkit-transform:rotate(.06turn);-ms-transform:rotate(.06turn);transform:rotate(.06turn)}.progress-pie[data-value="57"]:before{background-color:var(--interactive-accent);-webkit-transform:rotate(.07turn);-ms-transform:rotate(.07turn);transform:rotate(.07turn)}.progress-pie[data-value="58"]:before{background-color:var(--interactive-accent);-webkit-transform:rotate(.08turn);-ms-transform:rotate(.08turn);transform:rotate(.08turn)}.progress-pie[data-value="59"]:before{background-color:var(--interactive-accent);-webkit-transform:rotate(.09turn);-ms-transform:rotate(.09turn);transform:rotate(.09turn)}.progress-pie[data-value="60"]:before{background-color:var(--interactive-accent);-webkit-transform:rotate(.1turn);-ms-transform:rotate(.1turn);transform:rotate(.1turn)}.progress-pie[data-value="61"]:before{background-color:var(--interactive-accent);-webkit-transform:rotate(.11turn);-ms-transform:rotate(.11turn);transform:rotate(.11turn)}.progress-pie[data-value="62"]:before{background-color:var(--interactive-accent);-webkit-transform:rotate(.12turn);-ms-transform:rotate(.12turn);transform:rotate(.12turn)}.progress-pie[data-value="63"]:before{background-color:var(--interactive-accent);-webkit-transform:rotate(.13turn);-ms-transform:rotate(.13turn);transform:rotate(.13turn)}.progress-pie[data-value="64"]:before{background-color:var(--interactive-accent);-webkit-transform:rotate(.14turn);-ms-transform:rotate(.14turn);transform:rotate(.14turn)}.progress-pie[data-value="65"]:before{background-color:var(--interactive-accent);-webkit-transform:rotate(.15turn);-ms-transform:rotate(.15turn);transform:rotate(.15turn)}.progress-pie[data-value="66"]:before{background-color:var(--interactive-accent);-webkit-transform:rotate(.16turn);-ms-transform:rotate(.16turn);transform:rotate(.16turn)}.progress-pie[data-value="67"]:before{background-color:var(--interactive-accent);-webkit-transform:rotate(.17turn);-ms-transform:rotate(.17turn);transform:rotate(.17turn)}.progress-pie[data-value="68"]:before{background-color:var(--interactive-accent);-webkit-transform:rotate(.18turn);-ms-transform:rotate(.18turn);transform:rotate(.18turn)}.progress-pie[data-value="69"]:before{background-color:var(--interactive-accent);-webkit-transform:rotate(.19turn);-ms-transform:rotate(.19turn);transform:rotate(.19turn)}.progress-pie[data-value="70"]:before{background-color:var(--interactive-accent);-webkit-transform:rotate(.2turn);-ms-transform:rotate(.2turn);transform:rotate(.2turn)}.progress-pie[data-value="71"]:before{background-color:var(--interactive-accent);-webkit-transform:rotate(.21turn);-ms-transform:rotate(.21turn);transform:rotate(.21turn)}.progress-pie[data-value="72"]:before{background-color:var(--interactive-accent);-webkit-transform:rotate(.22turn);-ms-transform:rotate(.22turn);transform:rotate(.22turn)}.progress-pie[data-value="73"]:before{background-color:var(--interactive-accent);-webkit-transform:rotate(.23turn);-ms-transform:rotate(.23turn);transform:rotate(.23turn)}.progress-pie[data-value="74"]:before{background-color:var(--interactive-accent);-webkit-transform:rotate(.24turn);-ms-transform:rotate(.24turn);transform:rotate(.24turn)}.progress-pie[data-value="75"]:before{background-color:var(--interactive-accent);-webkit-transform:rotate(.25turn);-ms-transform:rotate(.25turn);transform:rotate(.25turn)}.progress-pie[data-value="76"]:before{background-color:var(--interactive-accent);-webkit-transform:rotate(.26turn);-ms-transform:rotate(.26turn);transform:rotate(.26turn)}.progress-pie[data-value="77"]:before{background-color:var(--interactive-accent);-webkit-transform:rotate(.27turn);-ms-transform:rotate(.27turn);transform:rotate(.27turn)}.progress-pie[data-value="78"]:before{background-color:var(--interactive-accent);-webkit-transform:rotate(.28turn);-ms-transform:rotate(.28turn);transform:rotate(.28turn)}.progress-pie[data-value="79"]:before{background-color:var(--interactive-accent);-webkit-transform:rotate(.29turn);-ms-transform:rotate(.29turn);transform:rotate(.29turn)}.progress-pie[data-value="80"]:before{background-color:var(--interactive-accent);-webkit-transform:rotate(.3turn);-ms-transform:rotate(.3turn);transform:rotate(.3turn)}.progress-pie[data-value="81"]:before{background-color:var(--interactive-accent);-webkit-transform:rotate(.31turn);-ms-transform:rotate(.31turn);transform:rotate(.31turn)}.progress-pie[data-value="82"]:before{background-color:var(--interactive-accent);-webkit-transform:rotate(.32turn);-ms-transform:rotate(.32turn);transform:rotate(.32turn)}.progress-pie[data-value="83"]:before{background-color:var(--interactive-accent);-webkit-transform:rotate(.33turn);-ms-transform:rotate(.33turn);transform:rotate(.33turn)}.progress-pie[data-value="84"]:before{background-color:var(--interactive-accent);-webkit-transform:rotate(.34turn);-ms-transform:rotate(.34turn);transform:rotate(.34turn)}.progress-pie[data-value="85"]:before{background-color:var(--interactive-accent);-webkit-transform:rotate(.35turn);-ms-transform:rotate(.35turn);transform:rotate(.35turn)}.progress-pie[data-value="86"]:before{background-color:var(--interactive-accent);-webkit-transform:rotate(.36turn);-ms-transform:rotate(.36turn);transform:rotate(.36turn)}.progress-pie[data-value="87"]:before{background-color:var(--interactive-accent);-webkit-transform:rotate(.37turn);-ms-transform:rotate(.37turn);transform:rotate(.37turn)}.progress-pie[data-value="88"]:before{background-color:var(--interactive-accent);-webkit-transform:rotate(.38turn);-ms-transform:rotate(.38turn);transform:rotate(.38turn)}.progress-pie[data-value="89"]:before{background-color:var(--interactive-accent);-webkit-transform:rotate(.39turn);-ms-transform:rotate(.39turn);transform:rotate(.39turn)}.progress-pie[data-value="90"]:before{background-color:var(--interactive-accent);-webkit-transform:rotate(.4turn);-ms-transform:rotate(.4turn);transform:rotate(.4turn)}.progress-pie[data-value="91"]:before{background-color:var(--interactive-accent);-webkit-transform:rotate(.41turn);-ms-transform:rotate(.41turn);transform:rotate(.41turn)}.progress-pie[data-value="92"]:before{background-color:var(--interactive-accent);-webkit-transform:rotate(.42turn);-ms-transform:rotate(.42turn);transform:rotate(.42turn)}.progress-pie[data-value="93"]:before{background-color:var(--interactive-accent);-webkit-transform:rotate(.43turn);-ms-transform:rotate(.43turn);transform:rotate(.43turn)}.progress-pie[data-value="94"]:before{background-color:var(--interactive-accent);-webkit-transform:rotate(.44turn);-ms-transform:rotate(.44turn);transform:rotate(.44turn)}.progress-pie[data-value="95"]:before{background-color:var(--interactive-accent);-webkit-transform:rotate(.45turn);-ms-transform:rotate(.45turn);transform:rotate(.45turn)}.progress-pie[data-value="96"]:before{background-color:var(--interactive-accent);-webkit-transform:rotate(.46turn);-ms-transform:rotate(.46turn);transform:rotate(.46turn)}.progress-pie[data-value="97"]:before{background-color:var(--interactive-accent);-webkit-transform:rotate(.47turn);-ms-transform:rotate(.47turn);transform:rotate(.47turn)}.progress-pie[data-value="98"]:before{background-color:var(--interactive-accent);-webkit-transform:rotate(.48turn);-ms-transform:rotate(.48turn);transform:rotate(.48turn)}.progress-pie[data-value="99"]:before{background-color:var(--interactive-accent);-webkit-transform:rotate(.49turn);-ms-transform:rotate(.49turn);transform:rotate(.49turn)}.progress-pie[data-value="100"]:before{background-color:var(--interactive-accent);-webkit-transform:rotate(.5turn);-ms-transform:rotate(.5turn);transform:rotate(.5turn)} -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-style-settings/data.json: -------------------------------------------------------------------------------- 1 | { 2 | "GoblinCwl@css@@taskFailBoxColor": "#E66A51" 3 | } -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-style-settings/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "obsidian-style-settings", 3 | "name": "Style Settings", 4 | "version": "1.0.3", 5 | "minAppVersion": "0.11.5", 6 | "description": "Offers controls for adjusting theme, plugin, and snippet CSS variables.", 7 | "author": "mgmeyers", 8 | "authorUrl": "https://github.com/mgmeyers/obsidian-style-settings", 9 | "isDesktopOnly": false 10 | } 11 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-style-settings/styles.css: -------------------------------------------------------------------------------- 1 | .style-settings-container .pcr-app { 2 | display: none; 3 | } 4 | 5 | .style-settings-container .pcr-app.visible { 6 | display: flex; 7 | } 8 | 9 | .pcr-app .pcr-swatches > button { 10 | padding: 0; 11 | } 12 | 13 | .pickr .pcr-button { 14 | margin-right: 0; 15 | } 16 | 17 | .themed-color-wrapper > div { 18 | background: var(--background-primary); 19 | padding: 10px; 20 | display: flex; 21 | align-items: center; 22 | border-radius: 4px; 23 | } 24 | 25 | .themed-color-wrapper > div + div { 26 | margin-top: 6px; 27 | } 28 | 29 | .themed-color-wrapper button { 30 | display: block; 31 | } 32 | 33 | .themed-color-wrapper .pickr-reset > button { 34 | margin: 0 0 0 10px; 35 | padding: 9px; 36 | line-height: 1; 37 | } 38 | 39 | .themed-color-wrapper .pickr-reset > button > svg { 40 | display: block; 41 | } 42 | .style-settings-heading { 43 | cursor: pointer; 44 | margin-bottom: 18px; 45 | padding-bottom: 6px; 46 | border-bottom: 1px solid var(--background-modifier-border); 47 | } 48 | 49 | .style-settings-heading[data-level="0"] { 50 | margin-bottom: 26px; 51 | } 52 | 53 | .style-settings-container { 54 | padding-bottom: 16px; 55 | } 56 | 57 | .style-settings-heading[data-level="0"] + .style-settings-container { 58 | padding-left: 34px; 59 | } 60 | 61 | .style-settings-heading.is-collapsed { 62 | margin-bottom: 0; 63 | } 64 | 65 | .style-settings-heading.is-collapsed + .style-settings-container { 66 | display: none; 67 | } 68 | 69 | .style-settings-collapse-indicator { 70 | color: var(--text-faint); 71 | display: inline-block; 72 | margin-right: 8px; 73 | position: relative; 74 | top: -1px; 75 | } 76 | 77 | .style-settings-heading[data-level="0"] 78 | + .style-settings-container 79 | .style-settings-collapse-indicator { 80 | margin-left: -17px; 81 | } 82 | 83 | .style-settings-collapse-indicator > svg { 84 | height: 9px; 85 | width: 9px; 86 | } 87 | 88 | .style-settings-heading.is-collapsed .style-settings-collapse-indicator > svg { 89 | transform: rotate(-90deg); 90 | } 91 | 92 | .style-settings-filter-result-count { 93 | color: var(--text-faint); 94 | line-height: var(--line-height-tight); 95 | margin-inline: var(--size-4-2); 96 | } 97 | 98 | .style-settings-error { 99 | font-size: 14px; 100 | border-radius: 6px; 101 | background: rgba(var(--background-modifier-error-rgb), 0.2); 102 | color: var(--text-error); 103 | padding: 10px; 104 | margin-bottom: 1rem; 105 | } 106 | 107 | .style-settings-error-name { 108 | font-weight: bold; 109 | margin-bottom: 5px; 110 | } 111 | 112 | .style-settings-error-desc { 113 | white-space: pre; 114 | } 115 | 116 | .style-settings-empty { 117 | font-size: 14px; 118 | background: var(--background-secondary); 119 | padding: 10px; 120 | } 121 | 122 | .style-settings-empty-name { 123 | font-weight: bold; 124 | margin-bottom: 5px; 125 | } 126 | 127 | .style-settings-import-input { 128 | width: 0.1px; 129 | height: 0.1px; 130 | opacity: 0; 131 | overflow: hidden; 132 | position: absolute; 133 | z-index: -1; 134 | } 135 | 136 | .style-settings-import-label { 137 | cursor: pointer; 138 | color: var(--text-accent); 139 | text-decoration: underline; 140 | } 141 | 142 | .style-settings-import-label:hover { 143 | color: var(--text-accent-hover); 144 | } 145 | 146 | .style-settings-export, 147 | .style-settings-import { 148 | display: inline-block; 149 | margin-right: 10px; 150 | } 151 | 152 | .style-settings-copy, 153 | .style-settings-download { 154 | position: relative; 155 | display: inline-block; 156 | margin-left: 10px; 157 | } 158 | 159 | .style-settings-copy:before { 160 | color: var(--interactive-success); 161 | content: "✓"; 162 | position: absolute; 163 | left: -18px; 164 | font-weight: bold; 165 | opacity: 0; 166 | transition: 150ms opacity ease-in-out; 167 | } 168 | 169 | .style-settings-copy.success:before { 170 | opacity: 1; 171 | } 172 | 173 | .modal-style-settings { 174 | height: 70vh; 175 | display: flex; 176 | flex-direction: column; 177 | } 178 | 179 | .modal-style-settings .modal-content { 180 | flex-grow: 1; 181 | margin: 0; 182 | display: flex; 183 | flex-direction: column; 184 | } 185 | 186 | .modal-style-settings textarea { 187 | display: block; 188 | width: 100%; 189 | height: 100%; 190 | font-family: var(--font-monospace) !important; 191 | font-size: 12px; 192 | white-space: pre; 193 | overflow-wrap: normal; 194 | overflow-x: scroll; 195 | margin-bottom: 5px; 196 | } 197 | 198 | .modal-style-settings .setting-item { 199 | align-items: flex-start; 200 | } 201 | 202 | .modal-style-settings button { 203 | margin: 10px 0 0; 204 | } 205 | 206 | .style-settings-import-error { 207 | display: none; 208 | color: var(--text-error); 209 | } 210 | 211 | .style-settings-import-error.active { 212 | display: block; 213 | } 214 | 215 | .view-content .style-settings-container .setting-item:not(.setting-item-heading) { 216 | flex-direction: column; 217 | align-items: flex-start; 218 | } 219 | 220 | .view-content .style-settings-container .setting-item:not(.setting-item-heading) .setting-item-control { 221 | padding-top: 0.5em; 222 | } 223 | 224 | .view-content .style-settings-container .setting-item:not(.setting-item-heading) .themed-color-wrapper { 225 | display: flex; 226 | } 227 | 228 | .style-settings-ref { 229 | position: absolute; 230 | width: 0 !important; 231 | height: 0 !important; 232 | pointer-events: none; 233 | } 234 | 235 | .style-settings-info-text .style-settings-markdown :first-child { 236 | margin-top: 0; 237 | } 238 | 239 | .style-settings-info-text .style-settings-markdown :last-child { 240 | margin-bottom: 0; 241 | }/*! Pickr 1.8.4 MIT | https://github.com/Simonwep/pickr */ 242 | .pickr{position:relative;overflow:visible;transform:translateY(0)}.pickr *{box-sizing:border-box;outline:none;border:none;-webkit-appearance:none}.pickr .pcr-button{position:relative;height:2em;width:2em;padding:0.5em;cursor:pointer;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Roboto","Helvetica Neue",Arial,sans-serif;border-radius:.15em;background:url('data:image/svg+xml;utf8, ') no-repeat center;background-size:0;transition:all 0.3s}.pickr .pcr-button::before{position:absolute;content:'';top:0;left:0;width:100%;height:100%;background:url('data:image/svg+xml;utf8, ');background-size:.5em;border-radius:.15em;z-index:-1}.pickr .pcr-button::before{z-index:initial}.pickr .pcr-button::after{position:absolute;content:'';top:0;left:0;height:100%;width:100%;transition:background 0.3s;background:var(--pcr-color);border-radius:.15em}.pickr .pcr-button.clear{background-size:70%}.pickr .pcr-button.clear::before{opacity:0}.pickr .pcr-button.clear:focus{box-shadow:0 0 0 1px rgba(255,255,255,0.85),0 0 0 3px var(--pcr-color)}.pickr .pcr-button.disabled{cursor:not-allowed}.pickr *,.pcr-app *{box-sizing:border-box;outline:none;border:none;-webkit-appearance:none}.pickr input:focus,.pickr input.pcr-active,.pickr button:focus,.pickr button.pcr-active,.pcr-app input:focus,.pcr-app input.pcr-active,.pcr-app button:focus,.pcr-app button.pcr-active{box-shadow:0 0 0 1px rgba(255,255,255,0.85),0 0 0 3px var(--pcr-color)}.pickr .pcr-palette,.pickr .pcr-slider,.pcr-app .pcr-palette,.pcr-app .pcr-slider{transition:box-shadow 0.3s}.pickr .pcr-palette:focus,.pickr .pcr-slider:focus,.pcr-app .pcr-palette:focus,.pcr-app .pcr-slider:focus{box-shadow:0 0 0 1px rgba(255,255,255,0.85),0 0 0 3px rgba(0,0,0,0.25)}.pcr-app{position:fixed;display:flex;flex-direction:column;z-index:10000;border-radius:0.1em;background:#fff;opacity:0;visibility:hidden;transition:opacity 0.3s, visibility 0s 0.3s;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Roboto","Helvetica Neue",Arial,sans-serif;box-shadow:0 0.15em 1.5em 0 rgba(0,0,0,0.1),0 0 1em 0 rgba(0,0,0,0.03);left:0;top:0}.pcr-app.visible{transition:opacity 0.3s;visibility:visible;opacity:1}.pcr-app .pcr-swatches{display:flex;flex-wrap:wrap;margin-top:0.75em}.pcr-app .pcr-swatches.pcr-last{margin:0}@supports (display: grid){.pcr-app .pcr-swatches{display:grid;align-items:center;grid-template-columns:repeat(auto-fit, 1.75em)}}.pcr-app .pcr-swatches>button{font-size:1em;position:relative;width:calc(1.75em - 5px);height:calc(1.75em - 5px);border-radius:0.15em;cursor:pointer;margin:2.5px;flex-shrink:0;justify-self:center;transition:all 0.15s;overflow:hidden;background:transparent;z-index:1}.pcr-app .pcr-swatches>button::before{position:absolute;content:'';top:0;left:0;width:100%;height:100%;background:url('data:image/svg+xml;utf8, ');background-size:6px;border-radius:.15em;z-index:-1}.pcr-app .pcr-swatches>button::after{content:'';position:absolute;top:0;left:0;width:100%;height:100%;background:var(--pcr-color);border:1px solid rgba(0,0,0,0.05);border-radius:0.15em;box-sizing:border-box}.pcr-app .pcr-swatches>button:hover{filter:brightness(1.05)}.pcr-app .pcr-swatches>button:not(.pcr-active){box-shadow:none}.pcr-app .pcr-interaction{display:flex;flex-wrap:wrap;align-items:center;margin:0 -0.2em 0 -0.2em}.pcr-app .pcr-interaction>*{margin:0 0.2em}.pcr-app .pcr-interaction input{letter-spacing:0.07em;font-size:0.75em;text-align:center;cursor:pointer;color:#75797e;background:#f1f3f4;border-radius:.15em;transition:all 0.15s;padding:0.45em 0.5em;margin-top:0.75em}.pcr-app .pcr-interaction input:hover{filter:brightness(0.975)}.pcr-app .pcr-interaction input:focus{box-shadow:0 0 0 1px rgba(255,255,255,0.85),0 0 0 3px rgba(66,133,244,0.75)}.pcr-app .pcr-interaction .pcr-result{color:#75797e;text-align:left;flex:1 1 8em;min-width:8em;transition:all 0.2s;border-radius:.15em;background:#f1f3f4;cursor:text}.pcr-app .pcr-interaction .pcr-result::-moz-selection{background:#4285f4;color:#fff}.pcr-app .pcr-interaction .pcr-result::selection{background:#4285f4;color:#fff}.pcr-app .pcr-interaction .pcr-type.active{color:#fff;background:#4285f4}.pcr-app .pcr-interaction .pcr-save,.pcr-app .pcr-interaction .pcr-cancel,.pcr-app .pcr-interaction .pcr-clear{color:#fff;width:auto}.pcr-app .pcr-interaction .pcr-save,.pcr-app .pcr-interaction .pcr-cancel,.pcr-app .pcr-interaction .pcr-clear{color:#fff}.pcr-app .pcr-interaction .pcr-save:hover,.pcr-app .pcr-interaction .pcr-cancel:hover,.pcr-app .pcr-interaction .pcr-clear:hover{filter:brightness(0.925)}.pcr-app .pcr-interaction .pcr-save{background:#4285f4}.pcr-app .pcr-interaction .pcr-clear,.pcr-app .pcr-interaction .pcr-cancel{background:#f44250}.pcr-app .pcr-interaction .pcr-clear:focus,.pcr-app .pcr-interaction .pcr-cancel:focus{box-shadow:0 0 0 1px rgba(255,255,255,0.85),0 0 0 3px rgba(244,66,80,0.75)}.pcr-app .pcr-selection .pcr-picker{position:absolute;height:18px;width:18px;border:2px solid #fff;border-radius:100%;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.pcr-app .pcr-selection .pcr-color-palette,.pcr-app .pcr-selection .pcr-color-chooser,.pcr-app .pcr-selection .pcr-color-opacity{position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;display:flex;flex-direction:column;cursor:grab;cursor:-webkit-grab}.pcr-app .pcr-selection .pcr-color-palette:active,.pcr-app .pcr-selection .pcr-color-chooser:active,.pcr-app .pcr-selection .pcr-color-opacity:active{cursor:grabbing;cursor:-webkit-grabbing}.pcr-app[data-theme='nano']{width:14.25em;max-width:95vw}.pcr-app[data-theme='nano'] .pcr-swatches{margin-top:.6em;padding:0 .6em}.pcr-app[data-theme='nano'] .pcr-interaction{padding:0 .6em .6em .6em}.pcr-app[data-theme='nano'] .pcr-selection{display:grid;grid-gap:.6em;grid-template-columns:1fr 4fr;grid-template-rows:5fr auto auto;align-items:center;height:10.5em;width:100%;align-self:flex-start}.pcr-app[data-theme='nano'] .pcr-selection .pcr-color-preview{grid-area:2 / 1 / 4 / 1;height:100%;width:100%;display:flex;flex-direction:row;justify-content:center;margin-left:.6em}.pcr-app[data-theme='nano'] .pcr-selection .pcr-color-preview .pcr-last-color{display:none}.pcr-app[data-theme='nano'] .pcr-selection .pcr-color-preview .pcr-current-color{position:relative;background:var(--pcr-color);width:2em;height:2em;border-radius:50em;overflow:hidden}.pcr-app[data-theme='nano'] .pcr-selection .pcr-color-preview .pcr-current-color::before{position:absolute;content:'';top:0;left:0;width:100%;height:100%;background:url('data:image/svg+xml;utf8, ');background-size:.5em;border-radius:.15em;z-index:-1}.pcr-app[data-theme='nano'] .pcr-selection .pcr-color-palette{grid-area:1 / 1 / 2 / 3;width:100%;height:100%;z-index:1}.pcr-app[data-theme='nano'] .pcr-selection .pcr-color-palette .pcr-palette{border-radius:.15em;width:100%;height:100%}.pcr-app[data-theme='nano'] .pcr-selection .pcr-color-palette .pcr-palette::before{position:absolute;content:'';top:0;left:0;width:100%;height:100%;background:url('data:image/svg+xml;utf8, ');background-size:.5em;border-radius:.15em;z-index:-1}.pcr-app[data-theme='nano'] .pcr-selection .pcr-color-chooser{grid-area:2 / 2 / 2 / 2}.pcr-app[data-theme='nano'] .pcr-selection .pcr-color-opacity{grid-area:3 / 2 / 3 / 2}.pcr-app[data-theme='nano'] .pcr-selection .pcr-color-chooser,.pcr-app[data-theme='nano'] .pcr-selection .pcr-color-opacity{height:0.5em;margin:0 .6em}.pcr-app[data-theme='nano'] .pcr-selection .pcr-color-chooser .pcr-picker,.pcr-app[data-theme='nano'] .pcr-selection .pcr-color-opacity .pcr-picker{top:50%;transform:translateY(-50%)}.pcr-app[data-theme='nano'] .pcr-selection .pcr-color-chooser .pcr-slider,.pcr-app[data-theme='nano'] .pcr-selection .pcr-color-opacity .pcr-slider{flex-grow:1;border-radius:50em}.pcr-app[data-theme='nano'] .pcr-selection .pcr-color-chooser .pcr-slider{background:linear-gradient(to right, red, #ff0, lime, cyan, blue, #f0f, red)}.pcr-app[data-theme='nano'] .pcr-selection .pcr-color-opacity .pcr-slider{background:linear-gradient(to right, transparent, black),url('data:image/svg+xml;utf8, ');background-size:100%, 0.25em} 243 | 244 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-toggle-list/data.json: -------------------------------------------------------------------------------- 1 | { 2 | "pop_state": { 3 | "popon": false, 4 | "hot": false, 5 | "incr": 0 6 | }, 7 | "plot": false, 8 | "cmd_list": [ 9 | { 10 | "index": 0, 11 | "name": "Task", 12 | "tmp_name": "Task", 13 | "bindings": [ 14 | 0 15 | ], 16 | "isPopOver": true 17 | } 18 | ], 19 | "setup_list": [ 20 | { 21 | "index": 0, 22 | "all_states": "- [ ] \n- [x] \n- [/] ", 23 | "states": [ 24 | "- [ ] ", 25 | "- [x] ", 26 | "- [/] " 27 | ], 28 | "sorteds": [ 29 | "- [ ] ", 30 | "- [x] ", 31 | "- [/] " 32 | ], 33 | "states_dict": {} 34 | } 35 | ] 36 | } -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-toggle-list/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "obsidian-toggle-list", 3 | "name": "ToggleList", 4 | "version": "1.2.0", 5 | "minAppVersion": "0.15.0", 6 | "description": "Toggle the list/checklist with custom states/prefixes and suffixes", 7 | "author": "Lite C", 8 | "authorUrl": "https://github.com/thingnotok/obsidian-simple-todo", 9 | "isDesktopOnly": false 10 | } -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-toggle-list/styles.css: -------------------------------------------------------------------------------- 1 | /* background */ 2 | .graph > polygon{ 3 | fill:transparent 4 | } 5 | .node > text{ 6 | fill:var(--color-base-100); 7 | text-shadow: 1px 1px 1px var(--color-base-60); 8 | } 9 | .togglelist_theme > text{ 10 | fill:var(--color-base-100); 11 | text-shadow: 1px 1px 1px var(--color-base-60); 12 | } 13 | .togglelist_theme > path { 14 | stroke:var(--color-base-60); 15 | } 16 | .togglelist_div { 17 | text-align: center; 18 | } -------------------------------------------------------------------------------- /.obsidian/plugins/templater-obsidian/data.json: -------------------------------------------------------------------------------- 1 | { 2 | "command_timeout": 5, 3 | "templates_folder": "@模板", 4 | "templates_pairs": [ 5 | [ 6 | "", 7 | "" 8 | ] 9 | ], 10 | "trigger_on_file_creation": true, 11 | "auto_jump_to_cursor": false, 12 | "enable_system_commands": false, 13 | "shell_path": "", 14 | "user_scripts_folder": "", 15 | "enable_folder_templates": true, 16 | "folder_templates": [ 17 | { 18 | "folder": "003.自我/日记", 19 | "template": "@模板/日记模板.md" 20 | }, 21 | { 22 | "folder": "003.自我/周记", 23 | "template": "@模板/周记模板.md" 24 | } 25 | ], 26 | "syntax_highlighting": true, 27 | "enabled_templates_hotkeys": [], 28 | "startup_templates": [], 29 | "enable_ribbon_icon": true 30 | } -------------------------------------------------------------------------------- /.obsidian/plugins/templater-obsidian/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "templater-obsidian", 3 | "name": "Templater", 4 | "version": "1.16.0", 5 | "description": "Create and use templates", 6 | "minAppVersion": "0.11.13", 7 | "author": "SilentVoid", 8 | "authorUrl": "https://github.com/SilentVoid13", 9 | "isDesktopOnly": false 10 | } 11 | -------------------------------------------------------------------------------- /.obsidian/plugins/templater-obsidian/styles.css: -------------------------------------------------------------------------------- 1 | .templater_search { 2 | width: calc(100% - 20px); 3 | } 4 | 5 | .templater_div { 6 | border-top: 1px solid var(--background-modifier-border); 7 | } 8 | 9 | .templater_div > .setting-item { 10 | border-top: none !important; 11 | align-self: center; 12 | } 13 | 14 | .templater_div > .setting-item > .setting-item-control { 15 | justify-content: space-around; 16 | padding: 0; 17 | width: 100%; 18 | } 19 | 20 | .templater_div 21 | > .setting-item 22 | > .setting-item-control 23 | > .setting-editor-extra-setting-button { 24 | align-self: center; 25 | } 26 | 27 | .templater_donating { 28 | margin: 10px; 29 | } 30 | 31 | .templater_title { 32 | margin: 0; 33 | padding: 0; 34 | margin-top: 5px; 35 | text-align: center; 36 | } 37 | 38 | .templater_template { 39 | align-self: center; 40 | margin-left: 5px; 41 | margin-right: 5px; 42 | width: 70%; 43 | } 44 | 45 | .templater_cmd { 46 | margin-left: 5px; 47 | margin-right: 5px; 48 | font-size: 14px; 49 | width: 100%; 50 | } 51 | 52 | .templater_div2 > .setting-item { 53 | align-content: center; 54 | justify-content: center; 55 | } 56 | 57 | .templater-prompt-div { 58 | display: flex; 59 | } 60 | 61 | .templater-prompt-form { 62 | display: flex; 63 | flex-grow: 1; 64 | } 65 | 66 | .templater-prompt-input { 67 | flex-grow: 1; 68 | } 69 | 70 | .templater-button-div { 71 | display: flex; 72 | flex-direction: column; 73 | align-items: center; 74 | margin-top: 1rem; 75 | } 76 | 77 | textarea.templater-prompt-input { 78 | height: 10rem; 79 | } 80 | 81 | textarea.templater-prompt-input:focus { 82 | border-color: var(--interactive-accent); 83 | } 84 | 85 | .cm-s-obsidian .templater-command-bg { 86 | left: 0px; 87 | right: 0px; 88 | background-color: var(--background-primary-alt); 89 | } 90 | 91 | .cm-s-obsidian .cm-templater-command { 92 | font-size: 0.85em; 93 | font-family: var(--font-monospace); 94 | line-height: 1.3; 95 | } 96 | 97 | .cm-s-obsidian .templater-inline .cm-templater-command { 98 | background-color: var(--background-primary-alt); 99 | } 100 | 101 | .cm-s-obsidian .cm-templater-command.cm-templater-opening-tag { 102 | font-weight: bold; 103 | } 104 | 105 | .cm-s-obsidian .cm-templater-command.cm-templater-closing-tag { 106 | font-weight: bold; 107 | } 108 | 109 | .cm-s-obsidian .cm-templater-command.cm-templater-interpolation-tag { 110 | color: #008bff; 111 | } 112 | 113 | .cm-s-obsidian .cm-templater-command.cm-templater-execution-tag { 114 | color: #c0d700; 115 | } 116 | 117 | .theme-dark .cm-s-obsidian .cm-templater-command.cm-keyword { 118 | color: #00a7aa; 119 | font-weight: normal; 120 | } 121 | 122 | .theme-dark .cm-s-obsidian .cm-templater-command.cm-atom { 123 | color: #f39b35; 124 | } 125 | 126 | .theme-dark .cm-s-obsidian .cm-templater-command.cm-number { 127 | color: #a06fca; 128 | } 129 | 130 | .theme-dark .cm-s-obsidian .cm-templater-command.cm-type { 131 | color: #a06fca; 132 | } 133 | 134 | .theme-dark .cm-s-obsidian .cm-templater-command.cm-def { 135 | color: #98e342; 136 | } 137 | 138 | .theme-dark .cm-s-obsidian .cm-templater-command.cm-property { 139 | color: #d4d4d4; 140 | } 141 | 142 | .theme-dark .cm-s-obsidian .cm-templater-command.cm-variable { 143 | color: #d4d4d4; 144 | } 145 | 146 | .theme-dark .cm-s-obsidian .cm-templater-command.cm-variable-2 { 147 | color: #da7dae; 148 | } 149 | 150 | .theme-dark .cm-s-obsidian .cm-templater-command.cm-variable-3 { 151 | color: #a06fca; 152 | } 153 | 154 | .theme-dark .cm-s-obsidian .cm-templater-command.cm-type.cm-def { 155 | color: #fc4384; 156 | } 157 | 158 | .theme-dark .cm-s-obsidian .cm-templater-command.cm-property.cm-def { 159 | color: #fc4384; 160 | } 161 | 162 | .theme-dark .cm-s-obsidian .cm-templater-command.cm-callee { 163 | color: #fc4384; 164 | } 165 | 166 | .theme-dark .cm-s-obsidian .cm-templater-command.cm-operator { 167 | color: #fc4384; 168 | } 169 | 170 | .theme-dark .cm-s-obsidian .cm-templater-command.cm-qualifier { 171 | color: #fc4384; 172 | } 173 | 174 | .theme-dark .cm-s-obsidian .cm-templater-command.cm-tag { 175 | color: #fc4384; 176 | } 177 | 178 | .theme-dark .cm-s-obsidian .cm-templater-command.cm-tag.cm-bracket { 179 | color: #d4d4d4; 180 | } 181 | 182 | .theme-dark .cm-s-obsidian .cm-templater-command.cm-attribute { 183 | color: #a06fca; 184 | } 185 | 186 | .theme-dark .cm-s-obsidian .cm-templater-command.cm-comment { 187 | color: #696d70; 188 | } 189 | 190 | .theme-dark .cm-s-obsidian .cm-templater-command.cm-comment.cm-tag { 191 | color: #fc4384; 192 | } 193 | 194 | .theme-dark .cm-s-obsidian .cm-templater-command.cm-comment.cm-attribute { 195 | color: #d4d4d4; 196 | } 197 | 198 | .theme-dark .cm-s-obsidian .cm-templater-command.cm-string { 199 | color: #e6db74; 200 | } 201 | 202 | .theme-dark .cm-s-obsidian .cm-templater-command.cm-string-2 { 203 | color: #f39b35; 204 | } 205 | 206 | .theme-dark .cm-s-obsidian .cm-templater-command.cm-meta { 207 | color: #d4d4d4; 208 | background: inherit; 209 | } 210 | 211 | .theme-dark .cm-s-obsidian .cm-templater-command.cm-builtin { 212 | color: #fc4384; 213 | } 214 | 215 | .theme-dark .cm-s-obsidian .cm-templater-command.cm-header { 216 | color: #da7dae; 217 | } 218 | 219 | .theme-dark .cm-s-obsidian .cm-templater-command.cm-hr { 220 | color: #98e342; 221 | } 222 | 223 | .theme-dark .cm-s-obsidian .cm-templater-command.cm-link { 224 | color: #696d70; 225 | } 226 | 227 | .theme-dark .cm-s-obsidian .cm-templater-command.cm-error { 228 | border-bottom: 1px solid #c42412; 229 | } 230 | 231 | .theme-dark .cm-s-obsidian pre.HyperMD-codeblock .cm-keyword { 232 | font-weight: normal; 233 | } 234 | 235 | .theme-dark 236 | .cm-s-obsidian 237 | .cm-templater-command.CodeMirror-activeline-background { 238 | background: #272727; 239 | } 240 | 241 | .theme-dark .cm-s-obsidian .cm-templater-command.CodeMirror-matchingbracket { 242 | outline: 1px solid grey; 243 | color: #d4d4d4 !important; 244 | } 245 | 246 | .CodeMirror-hints { 247 | position: absolute; 248 | z-index: 10; 249 | overflow: hidden; 250 | list-style: none; 251 | 252 | margin: 0; 253 | padding: 2px; 254 | 255 | -webkit-box-shadow: 2px 3px 5px rgba(0, 0, 0, 0.2); 256 | -moz-box-shadow: 2px 3px 5px rgba(0, 0, 0, 0.2); 257 | box-shadow: 2px 3px 5px rgba(0, 0, 0, 0.2); 258 | border-radius: 3px; 259 | border: 1px solid silver; 260 | 261 | background: white; 262 | font-size: 90%; 263 | font-family: monospace; 264 | 265 | max-height: 20em; 266 | overflow-y: auto; 267 | } 268 | 269 | .CodeMirror-hint { 270 | margin: 0; 271 | padding: 0 4px; 272 | border-radius: 2px; 273 | white-space: pre; 274 | color: black; 275 | cursor: pointer; 276 | } 277 | 278 | li.CodeMirror-hint-active { 279 | background: #08f; 280 | color: white; 281 | } 282 | -------------------------------------------------------------------------------- /.obsidian/snippets/GoblinCwl@CSS.css: -------------------------------------------------------------------------------- 1 | /* @settings 2 | 3 | name: GoblinCwl@css 4 | id: GoblinCwl@css 5 | settings: 6 | - 7 | id: taskFailBoxColor 8 | title: 任务失败复选框颜色 9 | description: 更改任务状态为“/”时复选框的颜色 10 | type: variable-color 11 | opacity: false 12 | format: hex 13 | default: '#e66a51' 14 | - 15 | id: taskFailTextColor 16 | title: 任务失败文本颜色 17 | description: 更改任务状态为“/”时文本的颜色 18 | type: variable-color 19 | opacity: false 20 | format: hex 21 | default: '#945b5b' 22 | - 23 | id: dayPannel 24 | title: Day Pannel 日程表 25 | type: heading 26 | level: 1 27 | collapsed: true 28 | - 29 | id: dayPannelTaskColor 30 | title: 日程表任务颜色 31 | description: 更改Day Pannel日程表中任务显示的颜色 32 | type: variable-color 33 | opacity: false 34 | format: hex 35 | default: '#FFFFFF' 36 | - 37 | id: dayPannelHoverBackGroudColor 38 | title: 日程表高亮背景色 39 | description: 更改Day Pannel日程表高亮背景色 40 | type: variable-color 41 | opacity: false 42 | format: hex 43 | default: 'var(--interactive-accent-hover)' 44 | 45 | */ 46 | 47 | body { 48 | --dayPannelTaskColor: #FFFFFF; 49 | --dayPannelHoverBackGroudColor: var(--interactive-accent-hover); 50 | --taskFailBoxColor: #e66a51; 51 | --taskFailTextColor: #945b5b; 52 | } 53 | 54 | /*更改Day Pannel日程表中任务显示的颜色*/ 55 | .ei_Copy.svelte-e43ld1.svelte-e43ld1 { 56 | color: var(--dayPannelTaskColor)!important; 57 | } 58 | 59 | /**更改Day Pannel日程表hover背景色*/ 60 | .event_item.svelte-e43ld1.svelte-e43ld1:hover{ 61 | background-color: var(--dayPannelHoverBackGroudColor)!important; 62 | } 63 | 64 | /**任务失败复选框颜色*/ 65 | .task-list-item-checkbox[data-task="/"],ul > li.task-list-item[data-task="/"] .task-list-item-checkbox{ 66 | --checkbox-color: var(--taskFailBoxColor)!important; 67 | --checkbox-color-hover: var(--taskFailBoxColor)!important; 68 | border-color: var(--taskFailBoxColor) !important; 69 | } 70 | .task-list-item-checkbox[data-task="/"]:after,li.task-list-item[data-task="/"] .task-list-item-checkbox:after{ 71 | background-color: unset!important; 72 | } 73 | .anp-custom-checkboxes [data-task="/"] > input[type=checkbox]:checked, .anp-custom-checkboxes [data-task="/"] > p > input[type=checkbox]:checked, .anp-custom-checkboxes [data-task="/"][type=checkbox]:checked { 74 | border-color: var(--taskFailBoxColor) !important; 75 | } 76 | /*任务失败文本颜色*/ 77 | ul > li.task-list-item[data-task="/"],.markdown-source-view.mod-cm6 .HyperMD-task-line[data-task="/"], .markdown-source-view.mod-cm6 .HyperMD-task-line[data-task="/"]{ 78 | text-decoration: var(--checklist-done-decoration)!important; 79 | color: var(--taskFailTextColor)!important; 80 | } 81 | 82 | /**日程时间线Track开关去掉多余的对勾*/ 83 | #scroll-controls.svelte-e43ld1 .toggle.svelte-e43ld1:after { 84 | background-color: unset!important; 85 | } -------------------------------------------------------------------------------- /.obsidian/workspace.json: -------------------------------------------------------------------------------- 1 | { 2 | "main": { 3 | "id": "273f65fd991e4d34", 4 | "type": "split", 5 | "children": [ 6 | { 7 | "id": "13d4a38d032f18c4", 8 | "type": "tabs", 9 | "children": [ 10 | { 11 | "id": "6745013d1e483c0d", 12 | "type": "leaf", 13 | "state": { 14 | "type": "markdown", 15 | "state": { 16 | "file": "003.自我/日记/日记:2023年5月18日.md", 17 | "mode": "source", 18 | "source": false 19 | } 20 | } 21 | } 22 | ] 23 | } 24 | ], 25 | "direction": "vertical" 26 | }, 27 | "left": { 28 | "id": "68ad52460e059bc0", 29 | "type": "split", 30 | "children": [ 31 | { 32 | "id": "cfe66c64ca2946b1", 33 | "type": "tabs", 34 | "dimension": 63.08139534883721, 35 | "children": [ 36 | { 37 | "id": "6007b38458e710e6", 38 | "type": "leaf", 39 | "state": { 40 | "type": "file-explorer", 41 | "state": { 42 | "sortOrder": "alphabetical" 43 | } 44 | } 45 | }, 46 | { 47 | "id": "03788942085e390c", 48 | "type": "leaf", 49 | "state": { 50 | "type": "search", 51 | "state": { 52 | "query": "", 53 | "matchingCase": false, 54 | "explainSearch": false, 55 | "collapseAll": false, 56 | "extraContext": false, 57 | "sortOrder": "alphabetical" 58 | } 59 | } 60 | }, 61 | { 62 | "id": "7f2fe709449307b0", 63 | "type": "leaf", 64 | "state": { 65 | "type": "bookmarks", 66 | "state": {} 67 | } 68 | }, 69 | { 70 | "id": "49faaaf5b80f50d0", 71 | "type": "leaf", 72 | "state": { 73 | "type": "tag", 74 | "state": { 75 | "sortOrder": "frequency", 76 | "useHierarchy": true 77 | } 78 | } 79 | } 80 | ] 81 | }, 82 | { 83 | "id": "de6dd3c9b1e80425", 84 | "type": "tabs", 85 | "dimension": 36.91860465116279, 86 | "children": [ 87 | { 88 | "id": "d6442b141c35c56a", 89 | "type": "leaf", 90 | "state": { 91 | "type": "outline", 92 | "state": { 93 | "file": "003.自我/日记/日记:2023年5月18日.md" 94 | } 95 | } 96 | } 97 | ] 98 | } 99 | ], 100 | "direction": "horizontal", 101 | "width": 300 102 | }, 103 | "right": { 104 | "id": "2518db0bd921295f", 105 | "type": "split", 106 | "children": [ 107 | { 108 | "id": "944df8c60613b1cb", 109 | "type": "tabs", 110 | "children": [ 111 | { 112 | "id": "2e265234a24d6cd1", 113 | "type": "leaf", 114 | "state": { 115 | "type": "backlink", 116 | "state": { 117 | "file": "003.自我/日记/日记:2023年5月18日.md", 118 | "collapseAll": false, 119 | "extraContext": false, 120 | "sortOrder": "alphabetical", 121 | "showSearch": false, 122 | "searchQuery": "", 123 | "backlinkCollapsed": false, 124 | "unlinkedCollapsed": true 125 | } 126 | } 127 | }, 128 | { 129 | "id": "8dc9fdd1423a396f", 130 | "type": "leaf", 131 | "state": { 132 | "type": "outgoing-link", 133 | "state": { 134 | "file": "003.自我/日记/日记:2023年5月18日.md", 135 | "linksCollapsed": false, 136 | "unlinkedCollapsed": true 137 | } 138 | } 139 | }, 140 | { 141 | "id": "a3558890b2544149", 142 | "type": "leaf", 143 | "state": { 144 | "type": "calendar", 145 | "state": {} 146 | } 147 | } 148 | ], 149 | "currentTab": 2 150 | }, 151 | { 152 | "id": "bdff1135dc76310e", 153 | "type": "tabs", 154 | "children": [ 155 | { 156 | "id": "ba0b876b86de2e37", 157 | "type": "leaf", 158 | "state": { 159 | "type": "timeline", 160 | "state": {} 161 | } 162 | } 163 | ] 164 | }, 165 | { 166 | "id": "56ac2a486047129f", 167 | "type": "tabs", 168 | "children": [ 169 | { 170 | "id": "08d2752b56a44937", 171 | "type": "leaf", 172 | "state": { 173 | "type": "todo", 174 | "state": {} 175 | } 176 | } 177 | ] 178 | } 179 | ], 180 | "direction": "horizontal", 181 | "width": 300 182 | }, 183 | "left-ribbon": { 184 | "hiddenItems": { 185 | "switcher:打开快速切换": false, 186 | "graph:查看关系图谱": false, 187 | "canvas:新建白板": false, 188 | "daily-notes:打开/创建今天的日记": false, 189 | "templates:插入模板": false, 190 | "command-palette:打开命令面板": false, 191 | "templater-obsidian:Templater": false 192 | } 193 | }, 194 | "active": "6745013d1e483c0d", 195 | "lastOpenFiles": [ 196 | "003.自我/周记/周记:2023年20周.md", 197 | "003.自我/日记/日记:2023年5月18日.md", 198 | "README.md", 199 | "@模板/工作记录/日报模板.md", 200 | "@模板/日记模板.md", 201 | "@模板/周记模板.md", 202 | "003.自我/排期计划.md", 203 | "002.工作/工作记录/日报/日报:2023年5月18日.md", 204 | "002.工作/工作记录/日报", 205 | "002.工作/工作记录", 206 | "002.工作", 207 | "@模板/工作记录", 208 | "003.自我/日记/未命名.md", 209 | "2023-05-18.md", 210 | "003.自我/周记", 211 | "003.自我/日记", 212 | "003.自我", 213 | "@模板", 214 | "Day Planners/Day Planner-20230518.md", 215 | "Day Planners" 216 | ] 217 | } -------------------------------------------------------------------------------- /002.工作/工作记录/日报/日报:2023年5月18日.md: -------------------------------------------------------------------------------- 1 | --- 2 | create: 2023-05-18 22:07 3 | tag: 日报,#todo/工作 4 | --- 5 | ```dataviewjs 6 | //获取昨日日期 7 | const create = dv.current().create; 8 | const today = new Date(create) 9 | const yesterday = new Date(today) 10 | yesterday.setDate(yesterday.getDate() - 1) 11 | const yesterdayText = yesterday.getFullYear()+"年"+ (yesterday.getMonth()+1) + "月" + yesterday.getDate()+"日"; 12 | 13 | const file = app.vault.getAbstractFileByPath("002.工作/工作记录/日报/日报:"+yesterdayText+".md"); 14 | if (file != null){ 15 | const content = await app.vault.cachedRead(file); 16 | const lineArray = content.split("\n"); 17 | var resultText = ""; 18 | for(var i = 0;i < lineArray.length;i++){ 19 | if(lineArray[i].contains("明日计划")){ 20 | for(var j = 1;j < lineArray.length - i;j++){ 21 | if(lineArray[i+j].startsWith("#")){ 22 | break; 23 | } 24 | if(lineArray[i+j].startsWith("-") && !lineArray[i+j].contains("~") && !lineArray[i+j] == ''){ 25 | resultText += lineArray[i+j] + "\n"; 26 | } 27 | } 28 | } 29 | 30 | } 31 | if(resultText != ""){ 32 | dv.header("3","昨日计划"); 33 | dv.span(resultText) 34 | } 35 | } 36 | ``` 37 | ### 今日计划 38 | - [/] 测试任务1 39 | - [x] 测试任务2 40 | - [ ] 测试任务3 41 | 42 | ### 未完成事项 43 | ```dataview 44 | TASK WHERE !icontains(file.name,"模板") and icontains(file.name,"日报") and !checked and file.cday < date(this.file.cday) 45 | ``` 46 | ### 明日计划 47 | - 48 | 49 | ### 突发状况 50 | - 51 | 52 | ### 收获 53 | - 54 | 55 | ### 困难 56 | - -------------------------------------------------------------------------------- /003.自我/周记/周记:2023年20周.md: -------------------------------------------------------------------------------- 1 | --- 2 | weekFirstDay: 2023-05-08 3 | weekLastDat: 2023-05-14 4 | create: 2023-05-18 22:46 5 | tag: 周记 6 | --- 7 | ```dataviewjs 8 | //日记文件名格式(定义成你自己日记文件名的格式,替换其中的变量) 9 | //yyyy = 年份(例如:2023) 10 | //m = 自适应位数月份(例如:3、10) 11 | //mm = 两位数月份(例如:03、10) 12 | //d = 自适应位数日期(例如:3、10) 13 | //dd = 两位数日期(例如:03、10) 14 | let dailyFileFormat = "日记:yyyy年m月d日"; 15 | //日记文件夹路径 16 | const dailyFilePath = "003.自我/日记"; 17 | 18 | //日报文件名格式(定义成你自己日报文件名的格式,替换其中的变量) 19 | //yyyy = 年份(例如:2023) 20 | //m = 自适应位数月份(例如:3、10) 21 | //mm = 两位数月份(例如:03、10) 22 | //d = 自适应位数日期(例如:3、10) 23 | //dd = 两位数日期(例如:03、10) 24 | let dailyWorkFileFormat = "日报:yyyy年m月d日"; 25 | //日记文件夹路径 26 | const dailyWorkFilePath = "002.工作/工作记录/日报"; 27 | 28 | const weekFirstDay = dv.current().weekFirstDay; 29 | const weekLastDat = dv.current().weekLastDat; 30 | const weekday=["星期日","星期一","星期二","星期三","星期四","星期五","星期六"]; 31 | 32 | //本周日程输出 33 | let resultText = ""; 34 | 35 | //用于概要统计 36 | let dailyCountComplete = 0; 37 | let dailyCountFail = 0; 38 | let workCountComplete = 0; 39 | let workCountFail = 0; 40 | let docCount = 0; 41 | for(var i = 0;i <= 6; i++){ 42 | const nowDate = new Date(weekFirstDay); 43 | nowDate.setDate(nowDate.getDate() + i); 44 | 45 | //当天有日记才生成数据 46 | const dayFile = dv.page(dailyFilePath + "/" + formatDailyFileName(nowDate,dailyFileFormat) +".md"); 47 | if(dayFile != null){ 48 | //标题 49 | resultText += "\n"; 50 | resultText += "> [!TIP]- " + weekday[nowDate.getDay()] +"\n> 📗[[" + dayFile.file.path + "|"+dayFile.file.name+"]]\n"; 51 | 52 | //日程 53 | resultText += ">> [!SUCCESS] 日程表\n" 54 | if(dayFile != null && dayFile.file != null){ 55 | const dayTask = dayFile.file.tasks; 56 | for(var rc = 0;rc < dayTask.length;rc ++){ 57 | dayTask[rc].status == "x" ? dailyCountComplete++ : dailyCountFail++; 58 | resultText += ">> "+dayTask[rc].symbol+" ["+dayTask[rc].status+"] "+dayTask[rc].text+"\n"; 59 | } 60 | } 61 | 62 | //工作 63 | resultText += " > " 64 | resultText += "\n >> [!example] 工作项\n" 65 | const dayWorkFile = dv.page(dailyWorkFilePath + "/" + formatDailyFileName(nowDate,dailyWorkFileFormat) +".md"); 66 | if(dayWorkFile != null && dayWorkFile.file != null){ 67 | const dayTask = dayWorkFile.file.tasks; 68 | for(var gz = 0;gz < dayTask.length;gz ++){ 69 | dayTask[gz].status == "x" ? workCountComplete++ : workCountFail++; 70 | resultText += ">> "+dayTask[gz].symbol+" ["+dayTask[gz].status+"] "+dayTask[gz].text+"\n"; 71 | } 72 | } 73 | 74 | 75 | //文章 76 | resultText += " >" 77 | resultText += "\n >> [!NOTE] 新文章\n"; 78 | const dayNewDoc = dv.pages().where(file => { 79 | const fileDate = new Date(file.file.cday); 80 | return (fileDate.getDate() == nowDate.getDate() && fileDate.getMonth() == nowDate.getMonth() && fileDate.getFullYear() && nowDate.getFullYear()); 81 | }) 82 | for(var j = 0;j - 🌞日程:"+dailyCountComplete+" \n" + 94 | "> - 💼工作任务:"+workCountComplete+" \n" + 95 | "> - ✒️新文章:"+docCount+" \n" + 96 | "> \n" + 97 | ">> [!FAIL]- 未完成 \n" + 98 | ">> - 🌞日程:"+dailyCountFail+" \n" + 99 | ">> - 💼工作任务:"+workCountFail+" \n"; 100 | dv.span(summaryResult) 101 | //输出-本周日程 102 | dv.header(3,"本周日程") 103 | dv.span(resultText) 104 | //输出-补充内容 105 | dv.header(3,"本周总结") 106 | 107 | //文件名日期格式化 108 | function formatDailyFileName(date,format){ 109 | const dateYear = date.getFullYear(); 110 | const dateMonth = date.getMonth() + 1; 111 | const dateDate = date.getDate(); 112 | return format 113 | .replace("yyyy",dateYear) 114 | .replace("mm",dateMonth < 10 ? '0' + dateMonth : dateMonth) 115 | .replace("m",dateMonth) 116 | .replace("dd",dateDate < 10 ? '0' + dateDate : dateDate) 117 | .replace("d",dateDate) 118 | } 119 | ``` -------------------------------------------------------------------------------- /003.自我/排期计划.md: -------------------------------------------------------------------------------- 1 | ## 2023年5月19日 2 | - [ ] 03:30 惊喜! 3 | -------------------------------------------------------------------------------- /003.自我/日记/日记:2023年5月18日.md: -------------------------------------------------------------------------------- 1 | --- 2 | create: 2023-05-18 22:46 3 | tag: 日记,#todo/日常 4 | --- 5 | ### 早晨 6 | - [x] 07:20 🌞起床 7 | - [x] 07:25 🪥喝一杯水,洗漱 8 | - [x] 07:30 🍵**泡茶** 9 | ### 上午 10 | - [x] 09:00 🍗疯狂星期四 11 | ### 中午 12 | - [/] 12:25 👀眼保健操 13 | - [/] 12:30 💤午睡 14 | ### 晚上 15 | - [ ] 21:30 📚自考学习 16 | - [ ] 22:00 🗒🛩️发布测试项目 17 | - [ ] 23:15 🥛热牛奶 18 | - [ ] 23:50 🌙洗漱,早睡 19 | 20 | ```dataviewjs 21 | //【今日工作】获取 22 | 23 | //日报文件名格式(定义成你自己的格式,替换其中的变量) 24 | //yyyy = 年份(例如:2023) 25 | //m = 自适应位数月份(例如:3、10) 26 | //mm = 两位数月份(例如:03、10) 27 | //d = 自适应位数日期(例如:3、10) 28 | //dd = 两位数日期(例如:03、10) 29 | let dailyWorkFileFormat = "日报:yyyy年m月d日"; 30 | //日报文件夹目录 31 | let dailyWorkFilePath = "002.工作/工作记录/日报"; 32 | 33 | 34 | //获取当天日报 35 | const fileToday = new Date(dv.current().create); 36 | const file = dv.page(dailyWorkFilePath + "/" + formatDailyFileName(fileToday,dailyWorkFileFormat)); 37 | if(file != null){ 38 | dv.header("3","今日工作") 39 | dv.taskList(file.file.tasks,false) 40 | } 41 | //文件名日期格式化 42 | function formatDailyFileName(date,format){ 43 | const dateYear = date.getFullYear(); 44 | const dateMonth = date.getMonth() + 1; 45 | const dateDate = date.getDate(); 46 | return format 47 | .replace("yyyy",dateYear) 48 | .replace("mm",dateMonth < 10 ? '0' + dateMonth : dateMonth) 49 | .replace("m",dateMonth) 50 | .replace("dd",dateDate < 10 ? '0' + dateDate : dateDate) 51 | .replace("d",dateDate) 52 | } 53 | ``` 54 | ```dataviewjs 55 | //【今日文章】获取 56 | //获取当天创建的文件 57 | const fileToday = new Date(dv.current().create); 58 | const todayFileArray = dv.pages().where(file => { 59 | const fileDate = new Date(file.file.cday); 60 | return (fileDate.getDate() == fileToday.getDate() && fileDate.getMonth() == fileToday.getMonth() && fileDate.getFullYear() && fileToday.getFullYear()); 61 | }) 62 | 63 | if(todayFileArray.length > 0){ 64 | dv.header("3","今日文章") 65 | } 66 | for(var i = 0;i 9 ? 31 - firstDay + 2 : '0' + (31 - firstDay + 2)) 30 | oneLastDay = year + '-01-' + (jj > 9 ? jj : '0' + jj) 31 | } 32 | 33 | let weekFirstDay; 34 | let weekLastDay; 35 | // 如果刚好是第一周 36 | if(week == 1){ 37 | weekFirstDay = oneFirstDay 38 | weekLastDay = oneLastDay 39 | }else{ 40 | weekFirstDay = addDate(oneLastDay,(week - 2) * 7 + 1) 41 | weekLastDay = addDate(oneLastDay,(week - 1) * 7) 42 | } 43 | 44 | //日期加减法 date参数为计算开始的日期,days为需要加的天数 45 | //格式:addDate('2017-1-11',20) 46 | function addDate(date,days){ 47 | var d=new Date(date); 48 | d.setDate(d.getDate()+days); 49 | var m=d.getMonth()+1; 50 | return d.getFullYear()+'-'+(m>9?m:'0'+m)+'-'+(d.getDate()>9?d.getDate():'0'+d.getDate()); 51 | } 52 | -%> 53 | --- 54 | weekFirstDay: <% weekFirstDay %> 55 | weekLastDat: <% weekLastDay %> 56 | create: <% tp.file.creation_date () %> 57 | tag: 周记 58 | --- 59 | ```dataviewjs 60 | //日记文件名格式(定义成你自己日记文件名的格式,替换其中的变量) 61 | //yyyy = 年份(例如:2023) 62 | //m = 自适应位数月份(例如:3、10) 63 | //mm = 两位数月份(例如:03、10) 64 | //d = 自适应位数日期(例如:3、10) 65 | //dd = 两位数日期(例如:03、10) 66 | let dailyFileFormat = "日记:yyyy年m月d日"; 67 | //日记文件夹路径 68 | const dailyFilePath = "003.自我/日记"; 69 | 70 | //日报文件名格式(定义成你自己日报文件名的格式,替换其中的变量) 71 | //yyyy = 年份(例如:2023) 72 | //m = 自适应位数月份(例如:3、10) 73 | //mm = 两位数月份(例如:03、10) 74 | //d = 自适应位数日期(例如:3、10) 75 | //dd = 两位数日期(例如:03、10) 76 | let dailyWorkFileFormat = "日报:yyyy年m月d日"; 77 | //日记文件夹路径 78 | const dailyWorkFilePath = "002.工作/工作记录/日报"; 79 | 80 | const weekFirstDay = dv.current().weekFirstDay; 81 | const weekLastDat = dv.current().weekLastDat; 82 | const weekday=["星期日","星期一","星期二","星期三","星期四","星期五","星期六"]; 83 | 84 | //本周日程输出 85 | let resultText = ""; 86 | 87 | //用于概要统计 88 | let dailyCountComplete = 0; 89 | let dailyCountFail = 0; 90 | let workCountComplete = 0; 91 | let workCountFail = 0; 92 | let docCount = 0; 93 | for(var i = 0;i <= 6; i++){ 94 | const nowDate = new Date(weekFirstDay); 95 | nowDate.setDate(nowDate.getDate() + i); 96 | 97 | //当天有日记才生成数据 98 | const dayFile = dv.page(dailyFilePath + "/" + formatDailyFileName(nowDate,dailyFileFormat) +".md"); 99 | if(dayFile != null){ 100 | //标题 101 | resultText += "\n"; 102 | resultText += "> [!TIP]- " + weekday[nowDate.getDay()] +"\n> 📗[[" + dayFile.file.path + "|"+dayFile.file.name+"]]\n"; 103 | 104 | //日程 105 | resultText += ">> [!SUCCESS] 日程表\n" 106 | if(dayFile != null && dayFile.file != null){ 107 | const dayTask = dayFile.file.tasks; 108 | for(var rc = 0;rc < dayTask.length;rc ++){ 109 | dayTask[rc].status == "x" ? dailyCountComplete++ : dailyCountFail++; 110 | resultText += ">> "+dayTask[rc].symbol+" ["+dayTask[rc].status+"] "+dayTask[rc].text+"\n"; 111 | } 112 | } 113 | 114 | //工作 115 | resultText += " > " 116 | resultText += "\n >> [!example] 工作项\n" 117 | const dayWorkFile = dv.page(dailyWorkFilePath + "/" + formatDailyFileName(nowDate,dailyWorkFileFormat) +".md"); 118 | if(dayWorkFile != null && dayWorkFile.file != null){ 119 | const dayTask = dayWorkFile.file.tasks; 120 | for(var gz = 0;gz < dayTask.length;gz ++){ 121 | dayTask[gz].status == "x" ? workCountComplete++ : workCountFail++; 122 | resultText += ">> "+dayTask[gz].symbol+" ["+dayTask[gz].status+"] "+dayTask[gz].text+"\n"; 123 | } 124 | } 125 | 126 | 127 | //文章 128 | resultText += " >" 129 | resultText += "\n >> [!NOTE] 新文章\n"; 130 | const dayNewDoc = dv.pages().where(file => { 131 | const fileDate = new Date(file.file.cday); 132 | return (fileDate.getDate() == nowDate.getDate() && fileDate.getMonth() == nowDate.getMonth() && fileDate.getFullYear() && nowDate.getFullYear()); 133 | }) 134 | for(var j = 0;j - 🌞日程:"+dailyCountComplete+" \n" + 146 | "> - 💼工作任务:"+workCountComplete+" \n" + 147 | "> - ✒️新文章:"+docCount+" \n" + 148 | "> \n" + 149 | ">> [!FAIL]- 未完成 \n" + 150 | ">> - 🌞日程:"+dailyCountFail+" \n" + 151 | ">> - 💼工作任务:"+workCountFail+" \n"; 152 | dv.span(summaryResult) 153 | //输出-本周日程 154 | dv.header(3,"本周日程") 155 | dv.span(resultText) 156 | //输出-补充内容 157 | dv.header(3,"本周总结") 158 | 159 | //文件名日期格式化 160 | function formatDailyFileName(date,format){ 161 | const dateYear = date.getFullYear(); 162 | const dateMonth = date.getMonth() + 1; 163 | const dateDate = date.getDate(); 164 | return format 165 | .replace("yyyy",dateYear) 166 | .replace("mm",dateMonth < 10 ? '0' + dateMonth : dateMonth) 167 | .replace("m",dateMonth) 168 | .replace("dd",dateDate < 10 ? '0' + dateDate : dateDate) 169 | .replace("d",dateDate) 170 | } 171 | ``` -------------------------------------------------------------------------------- /@模板/工作记录/日报模板.md: -------------------------------------------------------------------------------- 1 | --- 2 | create: <% tp.file.creation_date () %> 3 | tag: 日报,#todo/工作 4 | --- 5 | ```dataviewjs 6 | //获取昨日日期 7 | const create = dv.current().create; 8 | const today = new Date(create) 9 | const yesterday = new Date(today) 10 | yesterday.setDate(yesterday.getDate() - 1) 11 | const yesterdayText = yesterday.getFullYear()+"年"+ (yesterday.getMonth()+1) + "月" + yesterday.getDate()+"日"; 12 | 13 | const file = app.vault.getAbstractFileByPath("002.工作/工作记录/日报/日报:"+yesterdayText+".md"); 14 | if (file != null){ 15 | const content = await app.vault.cachedRead(file); 16 | const lineArray = content.split("\n"); 17 | var resultText = ""; 18 | for(var i = 0;i < lineArray.length;i++){ 19 | if(lineArray[i].contains("明日计划")){ 20 | for(var j = 1;j < lineArray.length - i;j++){ 21 | if(lineArray[i+j].startsWith("#")){ 22 | break; 23 | } 24 | if(lineArray[i+j].startsWith("-") && !lineArray[i+j].contains("~") && !lineArray[i+j] == ''){ 25 | resultText += lineArray[i+j] + "\n"; 26 | } 27 | } 28 | } 29 | 30 | } 31 | if(resultText != ""){ 32 | dv.header("3","昨日计划"); 33 | dv.span(resultText) 34 | } 35 | } 36 | ``` 37 | ### 今日计划 38 | - [ ] 39 | 40 | ### 未完成事项 41 | ```dataview 42 | TASK WHERE !icontains(file.name,"模板") and icontains(file.name,"日报") and !checked and file.cday < date(this.file.cday) 43 | ``` 44 | ### 明日计划 45 | - 46 | 47 | ### 突发状况 48 | - 49 | 50 | ### 收获 51 | - 52 | 53 | ### 困难 54 | - -------------------------------------------------------------------------------- /@模板/日记模板.md: -------------------------------------------------------------------------------- 1 | <%* 2 | //今天日期 3 | let today = new Date(); 4 | //预输出变量 5 | let taskListStr = ""; 6 | 7 | //日记文件名格式(定义成你自己日记文件名的格式,替换其中的变量) 8 | //yyyy = 年份(例如:2023) 9 | //m = 自适应位数月份(例如:3、10) 10 | //mm = 两位数月份(例如:03、10) 11 | //d = 自适应位数日期(例如:3、10) 12 | //dd = 两位数日期(例如:03、10) 13 | let dailyFileFormat = "日记:yyyy年m月d日"; 14 | 15 | //时间段 16 | const timeRegionArray = [ 17 | "00:00|04:59|凌晨", 18 | "05:00|08:59|早晨", 19 | "09:00|11:29|上午", 20 | "11:30|13:29|中午", 21 | "13:30|17:59|下午", 22 | "18:00|23:59|晚上", 23 | ]; 24 | //每日任务清单,预输入固定的每日任务 25 | let taskArray = [ 26 | "07:20|🌞起床", 27 | "07:25|🪥喝一杯水,洗漱", 28 | "07:30|🍵**泡茶**", 29 | "12:25|👀眼保健操", 30 | "12:30|💤午睡", 31 | "21:30|📚自考学习", 32 | "23:15|🥛热牛奶", 33 | "23:50|🌙洗漱,早睡", 34 | ]; 35 | //周常任务清单 36 | let weekTaskArray = [{},[],[],[],[],[],[],[]]; 37 | //想把任务加在周几,数字就填几 38 | weekTaskArray[4].push("09:00|🍗疯狂星期四"); 39 | weekTaskArray[5].push("17:00|📰**周报**"); 40 | weekTaskArray[6].push("16:00|📞**给妈妈打电话**"); 41 | weekTaskArray[7].push("17:00|🧹*整理环境*"); 42 | weekTaskArray[7].push("22:00|🗒️**周记**"); 43 | //周常任务添加 44 | taskArray.push.apply(taskArray,weekTaskArray[(today.getDay() == 0 ? 7 : today.getDay())]); 45 | 46 | //月任务清单 47 | let monthTaskArray = [{},[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[]]; 48 | //想把任务加在每月几号,数字就填几 49 | monthTaskArray[10].push("17:00|🗒💴发工资咯~"); 50 | monthTaskArray[18].push("22:00|🗒🛩️发布测试项目"); 51 | //月任务添加 52 | taskArray.push.apply(taskArray,monthTaskArray[today.getDate()]); 53 | 54 | //排期计划文件名(不能和其他文件重名) 55 | const planFile = tp.file.find_tfile("排期计划"); 56 | //生成日程后排期计划内当天的任务是否删除(true=删除,false=不删除) 57 | const planFileRemoveFlg = true; 58 | //排期计划中未指定精确时间的任务应该在哪个时间点 59 | const planDefaultTaskTime = "09:00"; 60 | 61 | //动态任务,需要独立判断 62 | //昨天日期 63 | let yesterdayDate = new Date(today); 64 | yesterdayDate.setDate(today.getDate() - 1); 65 | 66 | // 昨天日记文件名 67 | let fullFileName = formatDailyFileName(yesterdayDate,dailyFileFormat); 68 | 69 | const file = tp.file.find_tfile(fullFileName); 70 | if(file != null){ 71 | const content = await app.vault.cachedRead(file); 72 | const contentStr = content.toString(); 73 | // 隔一天跑步散步 74 | if(contentStr.contains("- [x] 20:30 👟跑步")){ 75 | taskArray.push("20:30|👞散步"); 76 | }else{ 77 | taskArray.push("20:30|👟跑步"); 78 | } 79 | } 80 | 81 | //排期计划检索 82 | let planTask = ""; 83 | if(planFile != null){ 84 | const content = await app.vault.cachedRead(planFile); 85 | //分行 86 | const lineArray = content.split("\n"); 87 | const dateTitle = today.getFullYear()+"年"+(today.getMonth()+1)+"月"+today.getDate()+"日"; 88 | let modifyLabel = []; 89 | for(var i = 0;i < lineArray.length;i++){ 90 | const nowLine = lineArray[i]; 91 | if(nowLine.startsWith("## " + dateTitle)){ 92 | modifyLabel.push(nowLine); 93 | //循环这天标签下的任务 94 | for(var j = 1;j < lineArray.length - i;j++){ 95 | let lineTask = lineArray[i+j]; 96 | //碰到空白行和#开头则退出循环 97 | if(lineTask.length <= 0 || lineTask.startsWith("## ")){ 98 | break; 99 | } 100 | //如果没有冒号,表示未设置时间,默认设置planDefaultTaskTime 101 | if(lineTask.indexOf(":") == -1){ 102 | lineTask = lineTask.replace("- [ ]","- [ ] " + planDefaultTaskTime); 103 | } 104 | //加入任务 105 | taskArray.push(lineTask.replace("- [ ] ","").replace(" ","|")); 106 | //加入原文到待修改 107 | modifyLabel.push(lineArray[i+j]); 108 | } 109 | } 110 | } 111 | 112 | let modifyContent = content; 113 | for(var i = 0;i < modifyLabel.length;i++){ 114 | modifyContent = modifyContent.replace(modifyLabel[i] + "\n",""); 115 | modifyContent = modifyContent.replace(modifyLabel[i],""); 116 | } 117 | //删除排期计划中这次生成任务的日期组 118 | if(planFileRemoveFlg){ 119 | app.vault.modify(planFile,modifyContent); 120 | } 121 | } 122 | 123 | 124 | //---------汇总任务数据---------\\ 125 | //任意日期,判断用不到,因为每日清单只对一天的时间处理(后面有个空格,用于Date格式识别) 126 | const placeholderDate = "2000-09-05 "; 127 | //根据时间对任务排序 128 | taskArray.sort(function(task1,task2) { 129 | let task1Time = new Date(placeholderDate + task1.split("|")[0]); 130 | let task2Time = new Date(placeholderDate + task2.split("|")[0]); 131 | return task1Time > task2Time ? 1 : -1; 132 | }); 133 | //遍历不同的时间段,生成任务清单 134 | for(var i = 0;i < timeRegionArray.length;i++){ 135 | const nowTimeRegion = timeRegionArray[i].split("|"); 136 | const nowTimeRegionStartDate = new Date(placeholderDate + nowTimeRegion[0]) 137 | const nowTimeRegionEndDate = new Date(placeholderDate + nowTimeRegion[1]) 138 | //在任务清单中寻找当前时间段的任务 139 | let nowTimeRegionTaskArray = taskArray.filter(task => { 140 | let taskTime = new Date(placeholderDate + task.split("|")[0]); 141 | return (taskTime >= nowTimeRegionStartDate && taskTime <= nowTimeRegionEndDate); 142 | }); 143 | if(nowTimeRegionTaskArray.length > 0){ 144 | taskListStr += ("### " + nowTimeRegion[2] + "\n"); 145 | for(var j = 0;j < nowTimeRegionTaskArray.length;j++){ 146 | taskListStr += ("- [ ] " + nowTimeRegionTaskArray[j].replace("|"," ") + "\n"); 147 | } 148 | } 149 | } 150 | 151 | //文件名日期格式化 152 | function formatDailyFileName(date,format){ 153 | const dateYear = date.getFullYear(); 154 | const dateMonth = date.getMonth() + 1; 155 | const dateDate = date.getDate(); 156 | return format 157 | .replace("yyyy",dateYear) 158 | .replace("mm",dateMonth < 10 ? '0' + dateMonth : dateMonth) 159 | .replace("m",dateMonth) 160 | .replace("dd",dateDate < 10 ? '0' + dateDate : dateDate) 161 | .replace("d",dateDate) 162 | } 163 | -%> 164 | --- 165 | create: <% tp.file.creation_date () %> 166 | tag: 日记,#todo/日常 167 | --- 168 | <% taskListStr %> 169 | ```dataviewjs 170 | //【今日工作】获取 171 | 172 | //日报文件名格式(定义成你自己的格式,替换其中的变量) 173 | //yyyy = 年份(例如:2023) 174 | //m = 自适应位数月份(例如:3、10) 175 | //mm = 两位数月份(例如:03、10) 176 | //d = 自适应位数日期(例如:3、10) 177 | //dd = 两位数日期(例如:03、10) 178 | let dailyWorkFileFormat = "日报:yyyy年m月d日"; 179 | //日报文件夹目录 180 | let dailyWorkFilePath = "002.工作/工作记录/日报"; 181 | 182 | 183 | //获取当天日报 184 | const fileToday = new Date(dv.current().create); 185 | const file = dv.page(dailyWorkFilePath + "/" + formatDailyFileName(fileToday,dailyWorkFileFormat)); 186 | if(file != null){ 187 | dv.header("3","今日工作") 188 | dv.taskList(file.file.tasks,false) 189 | } 190 | //文件名日期格式化 191 | function formatDailyFileName(date,format){ 192 | const dateYear = date.getFullYear(); 193 | const dateMonth = date.getMonth() + 1; 194 | const dateDate = date.getDate(); 195 | return format 196 | .replace("yyyy",dateYear) 197 | .replace("mm",dateMonth < 10 ? '0' + dateMonth : dateMonth) 198 | .replace("m",dateMonth) 199 | .replace("dd",dateDate < 10 ? '0' + dateDate : dateDate) 200 | .replace("d",dateDate) 201 | } 202 | ``` 203 | ```dataviewjs 204 | //【今日文章】获取 205 | //获取当天创建的文件 206 | const fileToday = new Date(dv.current().create); 207 | const todayFileArray = dv.pages().where(file => { 208 | const fileDate = new Date(file.file.cday); 209 | return (fileDate.getDate() == fileToday.getDate() && fileDate.getMonth() == fileToday.getMonth() && fileDate.getFullYear() && fileToday.getFullYear()); 210 | }) 211 | 212 | if(todayFileArray.length > 0){ 213 | dv.header("3","今日文章") 214 | } 215 | for(var i = 0;i 9 | - GitHub: 10 | 11 | ## 可以做到什么? 12 | 1. 创建每天精确时间的固定日程任务 13 | 2. 自动在配置的每周几时创建日程任务 14 | 3. 自动在配置的每月几日创建日程任务 15 | 4. 匹配排期任务,指定日期在未来自动创建对应日程任务 16 | 5. 通过逻辑判断创建任务 17 | 6. 生成的周记动态统计本周每天的日程内容 18 | 19 | ## 需要插件 20 | - **日记** - Obsidian核心插件,提供日记功能 21 | - **Templater** - 提供脚本模板以及脚本函数支持 22 | - **Dataview** - 提供脚本函数支持 23 | - *Calendar* - 右侧日历 24 | - *Day Planner* - 右侧日程表 25 | - *Checklist* - 右侧任务清单 26 | - ToggleList - 快捷切换任务状态 27 | - Style Setting - 样式美化 28 | 29 | 30 | ## 如何使用 31 | ### 存放模板 32 | 在你的笔记中创建一个文件夹专门用于存储***模板***,并且创建一个***日记***文件夹和一个***周记***文件夹,位置不限。 33 | 在*模板文件夹*中新建两个文件,放入下面分享的**日记模板**和**周记模板**。 34 | - 日记模板: 35 | - 周记模板: 36 | 37 | ### 配置插件 38 | 打开设置,从左下 *"第三方插件"* 列表找到插件名字,点击即可进入插件配置 39 | 40 | #### **日记** 41 | - 配置日记 42 | ![image.png|670](https://cwl-img.oss-cn-beijing.aliyuncs.com/202305182216042.png) 43 | 44 | #### **Templater** 45 | - 配置模板文件夹 46 | ![image.png|670](https://cwl-img.oss-cn-beijing.aliyuncs.com/202305141626103.png) 47 | - 打开这个选项 48 | ![image.png|670](https://cwl-img.oss-cn-beijing.aliyuncs.com/202305182222437.png) 49 | - 配置日记和周记模板映射 50 | ![image.png|670](https://cwl-img.oss-cn-beijing.aliyuncs.com/202305141628623.png) 51 | 52 | #### **Dataview** 53 | - 打开JS支持选项 54 | ![image.png|670](https://cwl-img.oss-cn-beijing.aliyuncs.com/202305141643412.png) 55 | 56 | #### *Calendar* 57 | - 配置日历上显示周数,方便快速创建周记 58 | ![image.png|670](https://cwl-img.oss-cn-beijing.aliyuncs.com/202305141645301.png) 59 | - 配置点击创建的周记信息 60 | ![image.png|670](https://cwl-img.oss-cn-beijing.aliyuncs.com/202305141647002.png) 61 | 62 | #### *Day Planner* 63 | - 设置模式为Commond mode 64 | ![image.png|670](https://cwl-img.oss-cn-beijing.aliyuncs.com/202305141641890.png) 65 | - 这个选项是当前时间线之前的任务会自动被完成,按需要开关 66 | ![image.png|670](https://cwl-img.oss-cn-beijing.aliyuncs.com/202305182222988.png) 67 | 68 | #### *Checklist* 69 | - 屏蔽模板文件夹 70 | ![image.png|670](https://cwl-img.oss-cn-beijing.aliyuncs.com/202305141649552.png) 71 | 72 | #### ToggleList 73 | - 配置任务切换类型 74 | ![image.png|670](https://cwl-img.oss-cn-beijing.aliyuncs.com/202305141651511.png) 75 | - 配置任务切换快捷键 76 | ![image.png|670](https://cwl-img.oss-cn-beijing.aliyuncs.com/202305141652993.png) 77 | 78 | - 点击下面的**HotKey**按钮,给这个操作设置快捷键 79 | ![image.png|670](https://cwl-img.oss-cn-beijing.aliyuncs.com/202305141655956.png) 80 | 81 | #### Style Setting 82 | - 放入CSS片段 83 | ![image.png|670](https://cwl-img.oss-cn-beijing.aliyuncs.com/202305141657489.png) 84 | - CSS片段: 85 | - 在Style Setting的插件设置中可以找到这个CSS,可以配置颜色 86 | ![image.png|670](https://cwl-img.oss-cn-beijing.aliyuncs.com/202305141659647.png) 87 | > 这里有显示BUG,同组颜色会显示一样,实际效果实现了就好 88 | ### 配置脚本 89 | 脚本中提供了非常简单的方式来自定义你的日程清单。 90 | #### 日记文件 91 | ```JAVASCRIPT TI:"日记文件" 92 | //日记文件名格式(定义成你自己日记文件名的格式,替换其中的变量) 93 | //yyyy = 年份(例如:2023) 94 | //m = 自适应位数月份(例如:3、10) 95 | //mm = 两位数月份(例如:03、10) 96 | //d = 自适应位数日期(例如:3、10) 97 | //dd = 两位数日期(例如:03、10) 98 | let dailyFileFormat = "日记:yyyy年m月d日"; 99 | ``` 100 | 首先在这里配置你的日记文件名称,例如我的日记文件名称是“日记:2023年5月18日”,就如图配置。 101 | 102 | #### 时间段 103 | ```JAVASCRIPT TI:"时间段" 104 | //时间段 105 | const timeRegionArray = [ 106 | "00:00|04:59|凌晨", 107 | "05:00|08:59|早晨", 108 | "09:00|11:29|上午", 109 | "11:30|13:29|中午", 110 | "13:30|17:59|下午", 111 | "18:00|23:59|晚上", 112 | ]; 113 | ``` 114 | 在脚本中找到这块代码,来定义日程中对任务的时间段分类, 115 | 格式为`时:分|时:分|时间段名称`,**时和分必须是两位数!** 116 | 此后,当日程生成时,会根据任务前面的时间来分类到对应的时间段。 117 | 如果想排序,更改代码中时间段的顺序就好。 118 | 119 | #### 每日任务 120 | ```JAVASCRIPT TI:"每日固定任务" 121 | //每日任务清单,预输入固定的每日任务 122 | let taskArray = [ 123 | "07:20|🌞起床", 124 | "07:25|🪥喝一杯水,洗漱", 125 | "07:30|🍵**泡茶**", 126 | "12:25|👀眼保健操", 127 | "12:30|💤午睡", 128 | "21:30|📚自考学习", 129 | "23:15|🥛热牛奶", 130 | "23:50|🌙洗漱,早睡", 131 | ]; 132 | ``` 133 | 在脚本中找到这块代码,来定义每天必定会创建的日程, 134 | 格式为`时:分|任务`,可以使用emoji和加粗/斜体, 135 | 此后,每一天的日程都会有上面的任务。 136 | 137 | #### 每周任务 138 | ```JAVASCRIPT TI:"每周任务" 139 | //周常任务清单 140 | let weekTaskArray = [{},[],[],[],[],[],[],[]]; 141 | //想把任务加在周几,数字就填几 142 | weekTaskArray[5].push("17:00|📰**周报**"); 143 | weekTaskArray[6].push("16:00|📞**给妈妈打电话**"); 144 | weekTaskArray[7].push("17:00|🧹*整理环境*"); 145 | weekTaskArray[7].push("22:00|🗒️**周记**"); 146 | ``` 147 | 在脚本中找到这块代码,来定义需要根据星期几来创建的任务, 148 | 在`weekTaskArray`后的中括号中输入要星期几创建任务,在后面输入任务格式, 149 | 例如,我需要在周四上午的10:30进行笔记整理任务,则另起一行输入`weekTaskArray[4].push("10:30|笔记整理");` 150 | 此后,在每周四的日程表中,会创建10:30分的笔记整理这个任务。 151 | 152 | #### 每月任务 153 | ```JAVASCRIPT TI:"每月任务" 154 | //月任务清单 155 | let monthTaskArray = [{},[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[]]; 156 | //想把任务加在每月几号,数字就填几 157 | monthTaskArray[10].push("17:00|🗒💴发工资咯~"); 158 | ``` 159 | 在脚本中找到这块代码,来定义需要每个月几号创建的任务, 160 | 在`monthTaskArray`后的中括号中输入要每月几号创建任务,在后面输入任务格式。 161 | 例如,我需要在每月30号19:00整理月账单,则另起一行输入`weekTaskArray[30].push("19:00|整理月账单");` 162 | 此后,在每月的30号的日程表中,会创建19:00整理月账单这个任务。 163 | 当然,此处只是根据每月几号,并不是每月最后一天,像2月可能就没有30号,一整个月都不会创建整理月账单, 164 | 如果有这方面需求,可以自己写js根据日期判断一下。 165 | 166 | #### 排期计划任务 167 | ```JAVASCRIPT TI:"排期计划" 168 | //排期计划文件 169 | const planFile = tp.file.find_tfile("排期计划"); 170 | //生成日程后排期计划内当天的任务是否删除(true=删除,false=不删除) 171 | const planFileRemoveFlg = true; 172 | //排期计划中未指定精确时间的任务应该在哪个时间点 173 | const planDefaultTaskTime = "09:00"; 174 | ``` 175 | 在脚本中找到这块代码,来定义不需要重复,只是未来的某一天需要创建的日程。 176 | 首先需要有一个 **"排期计划"** 的笔记,当然你也可以自己明明,修改代码中对应的名字就行 177 | 在该文件中以如下形式写下未来日程需要创建的任务: 178 | ```MARKDOWN 179 | ## 2023年5月17日 180 | - [ ] 13:30 🐱寄养小猫 181 | ``` 182 | 此后,在2023年5月17日这一天,就会创建13:30的🐱寄养小猫任务。 183 | 如果你希望创建后保留排期计划中设置的任务,则将`planFileRemoveFlg`的值改为`false`, 184 | 否则,在当天创建完日程后,排期计划的笔记中将会自动删除刚刚创建日程时创建的任务。 185 | 此外,当你在排期计划中没有明确指定时间点时,将会默认以"09:00"的时间创建任务, 186 | 当然,你也可以更改`planDefaultTaskTime`的值来更改默认的时间点。 187 | **planDefaultTaskTime的值中时钟和分钟必须是两位数。** 188 | 189 | #### 逻辑判断任务 190 | ```JAVASCRIPT TI:"动态任务" 191 | //动态任务,需要独立判断 192 | //昨天日期 193 | let yesterdayDate = new Date(today); 194 | yesterdayDate.setDate(today.getDate() - 1); 195 | // 昨天日记文件名 196 | let fullFileName = "日记:"+yesterdayDate.getFullYear()+"年"+(yesterdayDate.getMonth()+1)+"月"+yesterdayDate.getDate()+"日"; 197 | const file = tp.file.find_tfile(fullFileName); 198 | if(file != null){ 199 | const content = await app.vault.cachedRead(file); 200 | const contentStr = content.toString(); 201 | // 隔一天跑步散步 202 | if(contentStr.contains("- [x] 20:30 👟跑步")){ 203 | taskArray.push("20:30|👞散步"); 204 | }else{ 205 | taskArray.push("20:30|👟跑步"); 206 | } 207 | } 208 | ``` 209 | 可能你还需要一些更有逻辑的任务创建,但是这需要一些Javascript基础来编写。 210 | 如代码所示,此处编写的是如果昨天的日程中我完成了跑步任务,那么今天就生成散步任务,否则生成跑步任务。 211 | 212 | ### 今日工作和今日文章 213 | #### 今日工作 214 | 你肯定注意到模板下面还有一些内容,这些内容是个人日程外对日记的一个附加信息。 215 | 比如可以从当天的日报中获取今天日报的任务,显示在日记中, 216 | > 任务:指"- [ ]"开头的东西,不管你日报是什么样式,只是读取日报中的任务 217 | ``` JAVASCRIPT 218 | //日报文件名格式(定义成你自己的格式,替换其中的变量) 219 | //yyyy = 年份(例如:2023) 220 | //m = 自适应位数月份(例如:3、10) 221 | //mm = 两位数月份(例如:03、10) 222 | //d = 自适应位数日期(例如:3、10) 223 | //dd = 两位数日期(例如:03、10) 224 | let dailyWorkFileFormat = "日报:yyyy年m月d日"; 225 | //日报文件夹目录 226 | let dailyWorkFilePath = "002.工作/工作记录/日报"; 227 | ``` 228 | 更改代码中日报文件名格式和日报文件夹目录,来读取日报中的任务到日记中 229 | #### 今日文章 230 | ```JAVASCRIPT 231 | const fileToday = new Date(dv.current().create); 232 | ``` 233 | 今日文章会显示当天创建的文件在这个列表中,但是只会读取元数据中带有create字段且值为当天的数据 234 | 例如文件元数据是这样的: 235 | ```YAML 236 | --- 237 | create: 2023-05-14 18:44 238 | tag: 临时 239 | --- 240 | ``` 241 | 这样就会被读取到2023年5月14日的日记中 242 | 你可以在模板中如下配置,让通过模板创建的笔记自带一个create的元数据 243 | ```YAML 244 | --- 245 | create: <% tp.file.creation_date () %> 246 | tag: 临时 247 | --- 248 | ``` 249 | ### 周记 250 | 周记模板会自动获取那一周所有的日记文件,并且进行统计 251 | 但是周记模板是通过周记文件名来获取精确的一周的时间的, 252 | **你的周记文件名中必须包含年份和周数!** 253 | 你需要在模板开头配置你的周记文件名,让模板可以精确的获取周记对应的周的时间 254 | ```JAVASCRIPT 255 | //周记文件名格式 256 | //周记文件名必须包含年份和周数 257 | //yyyy = 年份(例如:2023) 258 | //ww = 周数(例如:19) 259 | let weekFileFormat = "周记:yyyy年ww周"; 260 | ``` 261 | 在中间的代码块需要配置你的日记和日报的文件名称格式和存放文件夹,让周记可以读取内容 262 | ```JAVASCRIPT 263 | //日记文件名格式(定义成你自己日记文件名的格式,替换其中的变量) 264 | //yyyy = 年份(例如:2023) 265 | //m = 自适应位数月份(例如:3、10) 266 | //mm = 两位数月份(例如:03、10) 267 | //d = 自适应位数日期(例如:3、10) 268 | //dd = 两位数日期(例如:03、10) 269 | let dailyFileFormat = "日记:yyyy年m月d日"; 270 | //日记文件夹路径 271 | const dailyFilePath = "003.自我/日记"; 272 | 273 | //日报文件名格式(定义成你自己日报文件名的格式,替换其中的变量) 274 | //yyyy = 年份(例如:2023) 275 | //m = 自适应位数月份(例如:3、10) 276 | //mm = 两位数月份(例如:03、10) 277 | //d = 自适应位数日期(例如:3、10) 278 | //dd = 两位数日期(例如:03、10) 279 | let dailyWorkFileFormat = "日报:yyyy年m月d日"; 280 | //日记文件夹路径 281 | const dailyWorkFilePath = "002.工作/工作记录/日报"; 282 | ``` 283 | 284 | ## 总结 285 | 个人使用中这套模板还是非常方便的,也期待发现更方便的方式管理日程。 286 | 287 | ## 备注 288 | 1. 创建日记后,记得将日记关联到Day Pannel 289 | ![image.png|670](https://cwl-img.oss-cn-beijing.aliyuncs.com/202305141816852.png) 290 | --------------------------------------------------------------------------------