import vault
This commit is contained in:
Vendored
BIN
Binary file not shown.
Vendored
+5
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"newFileLocation": "folder",
|
||||
"newFileFolderPath": "00-inbox",
|
||||
"attachmentFolderPath": "_attachments"
|
||||
}
|
||||
Vendored
+9
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"enabledCssSnippets": [
|
||||
"MCL Wide Views",
|
||||
"MCL Multi Column",
|
||||
"MCL Gallery Cards",
|
||||
"Colored Sidebar Items"
|
||||
],
|
||||
"theme": "moonstone"
|
||||
}
|
||||
Vendored
+7
@@ -0,0 +1,7 @@
|
||||
[
|
||||
"dataview",
|
||||
"templater-obsidian",
|
||||
"kanban-bases-view",
|
||||
"quickadd",
|
||||
"obsidian-linter"
|
||||
]
|
||||
Vendored
+33
@@ -0,0 +1,33 @@
|
||||
{
|
||||
"file-explorer": true,
|
||||
"global-search": true,
|
||||
"switcher": true,
|
||||
"graph": true,
|
||||
"backlink": true,
|
||||
"canvas": true,
|
||||
"outgoing-link": true,
|
||||
"tag-pane": true,
|
||||
"footnotes": false,
|
||||
"properties": true,
|
||||
"page-preview": true,
|
||||
"daily-notes": true,
|
||||
"templates": true,
|
||||
"note-composer": true,
|
||||
"command-palette": true,
|
||||
"slash-command": false,
|
||||
"editor-status": true,
|
||||
"bookmarks": true,
|
||||
"markdown-importer": false,
|
||||
"zk-prefixer": false,
|
||||
"random-note": false,
|
||||
"outline": true,
|
||||
"word-count": true,
|
||||
"slides": false,
|
||||
"audio-recorder": false,
|
||||
"workspaces": false,
|
||||
"file-recovery": true,
|
||||
"publish": false,
|
||||
"sync": true,
|
||||
"bases": true,
|
||||
"webviewer": false
|
||||
}
|
||||
Vendored
+22
@@ -0,0 +1,22 @@
|
||||
{
|
||||
"collapse-filter": true,
|
||||
"search": "",
|
||||
"showTags": false,
|
||||
"showAttachments": false,
|
||||
"hideUnresolved": false,
|
||||
"showOrphans": true,
|
||||
"collapse-color-groups": true,
|
||||
"colorGroups": [],
|
||||
"collapse-display": true,
|
||||
"showArrow": false,
|
||||
"textFadeMultiplier": 0,
|
||||
"nodeSizeMultiplier": 1,
|
||||
"lineSizeMultiplier": 1,
|
||||
"collapse-forces": true,
|
||||
"centerStrength": 0.518713248970312,
|
||||
"repelStrength": 10,
|
||||
"linkStrength": 1,
|
||||
"linkDistance": 250,
|
||||
"scale": 0.5649432319816575,
|
||||
"close": false
|
||||
}
|
||||
Vendored
+10
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"templater-obsidian:insert-templater": [
|
||||
{
|
||||
"modifiers": [
|
||||
"Ctrl"
|
||||
],
|
||||
"key": "N"
|
||||
}
|
||||
]
|
||||
}
|
||||
Vendored
+27
@@ -0,0 +1,27 @@
|
||||
{
|
||||
"renderNullAs": "\\-",
|
||||
"taskCompletionTracking": false,
|
||||
"taskCompletionUseEmojiShorthand": false,
|
||||
"taskCompletionText": "completion",
|
||||
"taskCompletionDateFormat": "yyyy-MM-dd",
|
||||
"recursiveSubTaskCompletion": false,
|
||||
"warnOnEmptyResult": true,
|
||||
"refreshEnabled": true,
|
||||
"refreshInterval": 2500,
|
||||
"defaultDateFormat": "MMMM dd, yyyy",
|
||||
"defaultDateTimeFormat": "h:mm a - MMMM dd, yyyy",
|
||||
"maxRecursiveRenderDepth": 4,
|
||||
"tableIdColumnName": "File",
|
||||
"tableGroupColumnName": "Group",
|
||||
"showResultCount": true,
|
||||
"allowHtml": true,
|
||||
"inlineQueryPrefix": "=",
|
||||
"inlineJsQueryPrefix": "$=",
|
||||
"inlineQueriesInCodeblocks": true,
|
||||
"enableInlineDataview": true,
|
||||
"enableDataviewJs": true,
|
||||
"enableInlineDataviewJs": true,
|
||||
"prettyRenderInlineFields": true,
|
||||
"prettyRenderInlineFieldsInLivePreview": true,
|
||||
"dataviewJsKeyword": "dataviewjs"
|
||||
}
|
||||
Vendored
+20876
File diff suppressed because one or more lines are too long
+11
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"id": "dataview",
|
||||
"name": "Dataview",
|
||||
"version": "0.5.68",
|
||||
"minAppVersion": "0.13.11",
|
||||
"description": "Complex data views for the data-obsessed.",
|
||||
"author": "Michael Brenan <blacksmithgu@gmail.com>",
|
||||
"authorUrl": "https://github.com/blacksmithgu",
|
||||
"helpUrl": "https://blacksmithgu.github.io/obsidian-dataview/",
|
||||
"isDesktopOnly": false
|
||||
}
|
||||
+141
@@ -0,0 +1,141 @@
|
||||
.block-language-dataview {
|
||||
overflow-y: auto;
|
||||
}
|
||||
|
||||
/*****************/
|
||||
/** Table Views **/
|
||||
/*****************/
|
||||
|
||||
/* List View Default Styling; rendered internally as a table. */
|
||||
.table-view-table {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.table-view-table > thead > tr, .table-view-table > tbody > tr {
|
||||
margin-top: 1em;
|
||||
margin-bottom: 1em;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.table-view-table > tbody > tr:hover {
|
||||
background-color: var(--table-row-background-hover);
|
||||
}
|
||||
|
||||
.table-view-table > thead > tr > th {
|
||||
font-weight: 700;
|
||||
font-size: larger;
|
||||
border-top: none;
|
||||
border-left: none;
|
||||
border-right: none;
|
||||
border-bottom: solid;
|
||||
|
||||
max-width: 100%;
|
||||
}
|
||||
|
||||
.table-view-table > tbody > tr > td {
|
||||
text-align: left;
|
||||
border: none;
|
||||
font-weight: 400;
|
||||
max-width: 100%;
|
||||
}
|
||||
|
||||
.table-view-table ul, .table-view-table ol {
|
||||
margin-block-start: 0.2em !important;
|
||||
margin-block-end: 0.2em !important;
|
||||
}
|
||||
|
||||
/** Rendered value styling for any view. */
|
||||
.dataview-result-list-root-ul {
|
||||
padding: 0em !important;
|
||||
margin: 0em !important;
|
||||
}
|
||||
|
||||
.dataview-result-list-ul {
|
||||
margin-block-start: 0.2em !important;
|
||||
margin-block-end: 0.2em !important;
|
||||
}
|
||||
|
||||
/** Generic grouping styling. */
|
||||
.dataview.result-group {
|
||||
padding-left: 8px;
|
||||
}
|
||||
|
||||
/*******************/
|
||||
/** Inline Fields **/
|
||||
/*******************/
|
||||
|
||||
.dataview.inline-field-key {
|
||||
padding-left: 8px;
|
||||
padding-right: 8px;
|
||||
font-family: var(--font-monospace);
|
||||
background-color: var(--background-primary-alt);
|
||||
color: var(--nav-item-color-selected);
|
||||
}
|
||||
|
||||
.dataview.inline-field-value {
|
||||
padding-left: 8px;
|
||||
padding-right: 8px;
|
||||
font-family: var(--font-monospace);
|
||||
background-color: var(--background-secondary-alt);
|
||||
color: var(--nav-item-color-selected);
|
||||
}
|
||||
|
||||
.dataview.inline-field-standalone-value {
|
||||
padding-left: 8px;
|
||||
padding-right: 8px;
|
||||
font-family: var(--font-monospace);
|
||||
background-color: var(--background-secondary-alt);
|
||||
color: var(--nav-item-color-selected);
|
||||
}
|
||||
|
||||
/***************/
|
||||
/** Task View **/
|
||||
/***************/
|
||||
|
||||
.dataview.task-list-item, .dataview.task-list-basic-item {
|
||||
margin-top: 3px;
|
||||
margin-bottom: 3px;
|
||||
transition: 0.4s;
|
||||
}
|
||||
|
||||
.dataview.task-list-item:hover, .dataview.task-list-basic-item:hover {
|
||||
background-color: var(--text-selection);
|
||||
box-shadow: -40px 0 0 var(--text-selection);
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
/*****************/
|
||||
/** Error Views **/
|
||||
/*****************/
|
||||
|
||||
div.dataview-error-box {
|
||||
width: 100%;
|
||||
min-height: 150px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
border: 4px dashed var(--background-secondary);
|
||||
}
|
||||
|
||||
.dataview-error-message {
|
||||
color: var(--text-muted);
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
/*************************/
|
||||
/** Additional Metadata **/
|
||||
/*************************/
|
||||
|
||||
.dataview.small-text {
|
||||
font-size: smaller;
|
||||
color: var(--text-muted);
|
||||
margin-left: 3px;
|
||||
}
|
||||
|
||||
.dataview.small-text::before {
|
||||
content: "(";
|
||||
}
|
||||
|
||||
.dataview.small-text::after {
|
||||
content: ")";
|
||||
}
|
||||
+4140
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"id": "kanban-bases-view",
|
||||
"name": "Kanban Bases View",
|
||||
"version": "0.10.1",
|
||||
"minAppVersion": "1.10.2",
|
||||
"description": "A kanban-style drag-and-drop custom view for Bases.",
|
||||
"author": "I. Welch Canavan",
|
||||
"authorUrl": "https://welchcanavan.com",
|
||||
"isDesktopOnly": false
|
||||
}
|
||||
+617
@@ -0,0 +1,617 @@
|
||||
/* Kanban View Container */
|
||||
.obk-view-container {
|
||||
container-type: inline-size;
|
||||
height: 100%;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
padding: 10px;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
/* Property Selector */
|
||||
.obk-property-selector {
|
||||
margin-bottom: 15px;
|
||||
padding: 10px;
|
||||
background: var(--background-secondary);
|
||||
border-radius: 6px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 10px;
|
||||
}
|
||||
|
||||
.obk-property-label {
|
||||
font-weight: 500;
|
||||
color: var(--text-normal);
|
||||
}
|
||||
|
||||
.obk-property-select {
|
||||
padding: 6px 12px;
|
||||
border: 1px solid var(--background-modifier-border);
|
||||
border-radius: 4px;
|
||||
background: var(--background-primary);
|
||||
color: var(--text-normal);
|
||||
font-size: 14px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.obk-property-select:hover {
|
||||
border-color: var(--interactive-hover);
|
||||
}
|
||||
|
||||
.obk-property-select:focus {
|
||||
outline: 2px solid var(--interactive-accent);
|
||||
outline-offset: 2px;
|
||||
}
|
||||
|
||||
/* Empty State */
|
||||
.obk-empty-state {
|
||||
padding: 40px 20px;
|
||||
text-align: center;
|
||||
color: var(--text-muted);
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
/* Kanban Board */
|
||||
.obk-board {
|
||||
display: flex;
|
||||
gap: 15px;
|
||||
overflow-x: auto;
|
||||
overflow-y: hidden;
|
||||
flex: 1;
|
||||
padding-bottom: 10px;
|
||||
}
|
||||
|
||||
.obk-board::-webkit-scrollbar {
|
||||
height: 8px;
|
||||
}
|
||||
|
||||
.obk-board::-webkit-scrollbar-track {
|
||||
background: var(--background-secondary);
|
||||
border-radius: 4px;
|
||||
}
|
||||
|
||||
.obk-board::-webkit-scrollbar-thumb {
|
||||
background: var(--background-modifier-border);
|
||||
border-radius: 4px;
|
||||
}
|
||||
|
||||
.obk-board::-webkit-scrollbar-thumb:hover {
|
||||
background: var(--background-modifier-border-hover);
|
||||
}
|
||||
|
||||
/* Swimlane mode: stack lanes vertically. The lane body becomes the
|
||||
horizontal column flex (replacing what .obk-board does in flat mode). */
|
||||
.obk-board--with-swimlanes {
|
||||
flex-direction: column;
|
||||
overflow-x: hidden;
|
||||
overflow-y: auto;
|
||||
gap: 12px;
|
||||
}
|
||||
|
||||
.obk-swimlane {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
background: var(--background-secondary-alt);
|
||||
border-radius: 8px;
|
||||
border: 1px solid var(--background-modifier-border);
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.obk-swimlane-header {
|
||||
padding: 8px 14px;
|
||||
background: var(--background-primary-alt);
|
||||
border-bottom: 1px solid var(--background-modifier-border);
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 10px;
|
||||
font-weight: 600;
|
||||
font-size: 13px;
|
||||
color: var(--text-normal);
|
||||
text-transform: capitalize;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
.obk-swimlane-count {
|
||||
font-size: 12px;
|
||||
color: var(--text-muted);
|
||||
background: var(--background-modifier-border);
|
||||
padding: 2px 8px;
|
||||
border-radius: 12px;
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
.obk-swimlane-body {
|
||||
display: flex;
|
||||
align-items: stretch;
|
||||
gap: 12px;
|
||||
overflow-x: auto;
|
||||
overflow-y: visible;
|
||||
padding: 12px;
|
||||
min-height: 140px;
|
||||
}
|
||||
|
||||
/* In swimlane mode, each lane grows tall enough to fit the fullest column,
|
||||
and shorter column bodies stretch to that height so their Sortable drop
|
||||
target spans the whole lane row. */
|
||||
.obk-board--with-swimlanes .obk-column {
|
||||
min-height: 0;
|
||||
max-height: none;
|
||||
height: auto;
|
||||
overflow: visible;
|
||||
align-self: stretch;
|
||||
}
|
||||
|
||||
.obk-board--with-swimlanes .obk-column-body {
|
||||
flex: 1 1 auto;
|
||||
max-height: none;
|
||||
overflow-y: visible;
|
||||
min-height: 0;
|
||||
}
|
||||
|
||||
/* The outer container caps height in flat mode; release it in swimlane mode
|
||||
so the board grows to fit all lanes and the parent scroll-area scrolls. */
|
||||
.obk-view-container--with-swimlanes {
|
||||
overflow: visible;
|
||||
height: auto;
|
||||
}
|
||||
|
||||
/* Collapsed lane: cap the column body at about 30% less than the original
|
||||
420px height and scroll within the
|
||||
column. The lane and column themselves stay flexible — only the card
|
||||
container is capped. */
|
||||
.obk-swimlane--collapsed .obk-column-body {
|
||||
max-height: 294px;
|
||||
overflow-y: auto;
|
||||
}
|
||||
|
||||
.obk-swimlane-toggle {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
width: 24px;
|
||||
height: 24px;
|
||||
padding: 0;
|
||||
color: var(--text-muted);
|
||||
background: var(--background-modifier-border);
|
||||
border: 0;
|
||||
border-radius: 4px;
|
||||
cursor: pointer;
|
||||
user-select: none;
|
||||
--icon-size: var(--icon-xs);
|
||||
transition:
|
||||
background 0.1s ease,
|
||||
color 0.1s ease;
|
||||
}
|
||||
|
||||
.obk-swimlane-toggle:hover {
|
||||
color: var(--text-normal);
|
||||
background: var(--background-modifier-border-hover);
|
||||
}
|
||||
|
||||
.obk-swimlane-toggle:focus-visible {
|
||||
outline: 2px solid var(--background-modifier-border-focus);
|
||||
outline-offset: 2px;
|
||||
}
|
||||
|
||||
.obk-swimlane-drag-handle {
|
||||
cursor: grab;
|
||||
padding: 2px 4px;
|
||||
opacity: 0.5;
|
||||
user-select: none;
|
||||
font-size: 14px;
|
||||
line-height: 1;
|
||||
color: var(--text-muted);
|
||||
display: flex;
|
||||
align-items: center;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
.obk-swimlane-drag-handle:hover {
|
||||
opacity: 1;
|
||||
color: var(--text-normal);
|
||||
}
|
||||
|
||||
.obk-swimlane-drag-handle:active {
|
||||
cursor: grabbing;
|
||||
}
|
||||
|
||||
.obk-swimlane-dragging {
|
||||
opacity: 0.5;
|
||||
}
|
||||
|
||||
.obk-swimlane-ghost {
|
||||
opacity: 0.3;
|
||||
background: var(--background-modifier-border);
|
||||
}
|
||||
|
||||
.obk-swimlane-body::-webkit-scrollbar {
|
||||
height: 8px;
|
||||
}
|
||||
.obk-swimlane-body::-webkit-scrollbar-track {
|
||||
background: transparent;
|
||||
}
|
||||
.obk-swimlane-body::-webkit-scrollbar-thumb {
|
||||
background: var(--background-modifier-border);
|
||||
border-radius: 4px;
|
||||
}
|
||||
.obk-swimlane-body::-webkit-scrollbar-thumb:hover {
|
||||
background: var(--background-modifier-border-hover);
|
||||
}
|
||||
|
||||
/* Kanban Column */
|
||||
.obk-column {
|
||||
--obk-column-accent-color: transparent;
|
||||
flex: 0 0 clamp(200px, 60cqw, 280px);
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
background: var(--background-secondary);
|
||||
border-radius: 8px;
|
||||
border: 1px solid var(--background-modifier-border);
|
||||
min-height: 200px;
|
||||
max-height: 100%;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.obk-column-header {
|
||||
padding: 12px 16px;
|
||||
background: color-mix(in srgb, var(--obk-column-accent-color, transparent) 15%, var(--background-primary-alt));
|
||||
border-bottom: 1px solid var(--background-modifier-border);
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
flex-shrink: 0;
|
||||
gap: 8px;
|
||||
}
|
||||
|
||||
/* Column color picker button */
|
||||
.obk-column-color-btn {
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
border-radius: 50%;
|
||||
border: 2px solid var(--background-modifier-border);
|
||||
background: var(--obk-column-accent-color, transparent);
|
||||
cursor: pointer;
|
||||
flex-shrink: 0;
|
||||
transition:
|
||||
transform 0.1s ease,
|
||||
border-color 0.1s ease;
|
||||
}
|
||||
|
||||
.obk-column-color-btn:hover {
|
||||
border-color: var(--text-muted);
|
||||
transform: scale(1.15);
|
||||
}
|
||||
|
||||
/* Color picker popover */
|
||||
.obk-column-color-popover {
|
||||
position: fixed;
|
||||
background: var(--background-primary);
|
||||
border: 1px solid var(--background-modifier-border);
|
||||
border-radius: 8px;
|
||||
padding: 8px;
|
||||
display: flex;
|
||||
gap: 6px;
|
||||
flex-wrap: wrap;
|
||||
width: 164px;
|
||||
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
|
||||
z-index: 100;
|
||||
}
|
||||
|
||||
.obk-column-color-swatch {
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
border-radius: 50%;
|
||||
cursor: pointer;
|
||||
border: 2px solid transparent;
|
||||
transition:
|
||||
transform 0.1s ease,
|
||||
border-color 0.1s ease;
|
||||
}
|
||||
|
||||
.obk-column-color-swatch:hover {
|
||||
transform: scale(1.2);
|
||||
}
|
||||
|
||||
.obk-column-color-swatch--active {
|
||||
border-color: var(--text-normal);
|
||||
}
|
||||
|
||||
.obk-column-color-none {
|
||||
background: var(--background-modifier-border);
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.obk-column-color-none::before,
|
||||
.obk-column-color-none::after {
|
||||
content: "";
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
left: 50%;
|
||||
width: 10px;
|
||||
height: 1.5px;
|
||||
background: var(--text-muted);
|
||||
border-radius: 1px;
|
||||
transform-origin: center;
|
||||
}
|
||||
|
||||
.obk-column-color-none::before {
|
||||
transform: translate(-50%, -50%) rotate(45deg);
|
||||
}
|
||||
|
||||
.obk-column-color-none::after {
|
||||
transform: translate(-50%, -50%) rotate(-45deg);
|
||||
}
|
||||
|
||||
.obk-column-drag-handle {
|
||||
cursor: grab;
|
||||
padding: 4px;
|
||||
opacity: 0.5;
|
||||
user-select: none;
|
||||
font-size: 16px;
|
||||
line-height: 1;
|
||||
color: var(--text-muted);
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.obk-column-drag-handle:hover {
|
||||
opacity: 1;
|
||||
color: var(--text-normal);
|
||||
}
|
||||
|
||||
.obk-column-drag-handle:active {
|
||||
cursor: grabbing;
|
||||
}
|
||||
|
||||
.obk-column-title {
|
||||
flex: 1;
|
||||
font-weight: 600;
|
||||
font-size: 14px;
|
||||
color: var(--text-normal);
|
||||
text-transform: capitalize;
|
||||
}
|
||||
|
||||
.obk-column-count {
|
||||
font-size: 12px;
|
||||
color: var(--text-muted);
|
||||
background: color-mix(in srgb, var(--obk-column-accent-color, transparent) 15%, var(--background-modifier-border));
|
||||
padding: 2px 8px;
|
||||
border-radius: 12px;
|
||||
}
|
||||
|
||||
.obk-column-add-btn,
|
||||
.obk-column-remove-btn {
|
||||
width: 24px;
|
||||
height: 24px;
|
||||
border-radius: 4px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
color: var(--text-muted);
|
||||
cursor: pointer;
|
||||
flex-shrink: 0;
|
||||
transition:
|
||||
background 0.1s ease,
|
||||
color 0.1s ease,
|
||||
opacity 0.1s ease;
|
||||
}
|
||||
|
||||
.obk-column-add-btn {
|
||||
opacity: 0.55;
|
||||
}
|
||||
|
||||
.obk-column:hover .obk-column-add-btn,
|
||||
.obk-column-add-btn:focus-visible {
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
.obk-column-add-btn:hover,
|
||||
.obk-column-remove-btn:hover {
|
||||
color: var(--text-normal);
|
||||
background: var(--background-modifier-hover);
|
||||
}
|
||||
|
||||
.obk-column-add-btn .svg-icon {
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
}
|
||||
|
||||
.obk-column-remove-btn {
|
||||
font-size: 18px;
|
||||
line-height: 1;
|
||||
}
|
||||
|
||||
.obk-column-body {
|
||||
flex: 1;
|
||||
overflow-y: auto;
|
||||
padding: 10px;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 10px;
|
||||
min-height: 0;
|
||||
}
|
||||
|
||||
.obk-column-body::-webkit-scrollbar {
|
||||
width: 6px;
|
||||
}
|
||||
|
||||
.obk-column-body::-webkit-scrollbar-track {
|
||||
background: transparent;
|
||||
}
|
||||
|
||||
.obk-column-body::-webkit-scrollbar-thumb {
|
||||
background: var(--background-modifier-border);
|
||||
border-radius: 3px;
|
||||
}
|
||||
|
||||
.obk-column-body::-webkit-scrollbar-thumb:hover {
|
||||
background: var(--background-modifier-border-hover);
|
||||
}
|
||||
|
||||
/* Kanban Card */
|
||||
.obk-card {
|
||||
background: var(--background-primary);
|
||||
border: 1px solid
|
||||
color-mix(in srgb, var(--obk-column-accent-color, transparent) 15%, var(--background-modifier-border));
|
||||
border-radius: 6px;
|
||||
padding: 12px;
|
||||
cursor: pointer;
|
||||
transition: all 0.2s ease;
|
||||
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
|
||||
}
|
||||
|
||||
/* targets touch-first devices (tablets, phones) to make the kanban genuinely usable on
|
||||
touch screens — any-pointer: coarse alone would also match hybrid devices (e.g.
|
||||
touchscreen laptops) where the primary pointer is still a mouse */
|
||||
@media (any-pointer: coarse) and (hover: none) {
|
||||
.obk-card {
|
||||
user-select: none;
|
||||
-webkit-user-select: none;
|
||||
}
|
||||
}
|
||||
|
||||
.obk-card--hover {
|
||||
border-color: var(--interactive-accent);
|
||||
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
|
||||
transform: translateY(-1px);
|
||||
}
|
||||
|
||||
.obk-card--active {
|
||||
border-color: var(--interactive-accent);
|
||||
box-shadow: 0 0 0 2px color-mix(in srgb, var(--interactive-accent) 25%, transparent);
|
||||
}
|
||||
|
||||
.obk-card-cover {
|
||||
display: block;
|
||||
/* Bleed the cover to the card's inner border edge. Card has padding: 12px,
|
||||
so we expand the width by 24px and pull the box out with negative margins.
|
||||
width: 100% alone only fills the content box and leaves a 12px gap on each side. */
|
||||
width: calc(100% + 24px);
|
||||
margin: -12px -12px 8px -12px;
|
||||
/* aspect-ratio is set inline from the imageAspectRatio config */
|
||||
overflow: hidden;
|
||||
border-top-left-radius: inherit;
|
||||
border-top-right-radius: inherit;
|
||||
}
|
||||
|
||||
.obk-card-cover img {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
display: block;
|
||||
}
|
||||
|
||||
.obk-card-cover--fit-cover img {
|
||||
object-fit: cover;
|
||||
}
|
||||
|
||||
.obk-card-cover--fit-contain img {
|
||||
object-fit: contain;
|
||||
background: var(--background-secondary);
|
||||
}
|
||||
|
||||
.obk-card-title {
|
||||
font-weight: 500;
|
||||
font-size: 14px;
|
||||
color: var(--text-normal);
|
||||
line-height: 1.4;
|
||||
word-wrap: break-word;
|
||||
}
|
||||
|
||||
.obk-card-preview {
|
||||
font-size: 12px;
|
||||
color: var(--text-muted);
|
||||
line-height: 1.4;
|
||||
margin-top: 6px;
|
||||
display: -webkit-box;
|
||||
-webkit-line-clamp: 3;
|
||||
-webkit-box-orient: vertical;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
|
||||
.obk-card-property {
|
||||
font-size: var(--font-ui-smaller);
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
text-overflow: ellipsis;
|
||||
display: flex;
|
||||
gap: 6px;
|
||||
margin-top: 4px;
|
||||
}
|
||||
|
||||
.obk-card-property-wrap {
|
||||
white-space: normal;
|
||||
text-overflow: initial;
|
||||
}
|
||||
|
||||
.obk-card-property-wrap .obk-card-property-value {
|
||||
white-space: normal;
|
||||
text-overflow: initial;
|
||||
}
|
||||
|
||||
.obk-card-property-label {
|
||||
color: var(--text-muted);
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
.obk-card-property-value {
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
|
||||
.obk-card-property-value p {
|
||||
display: inline;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.obk-quick-add-form {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 14px;
|
||||
}
|
||||
|
||||
.obk-quick-add-input {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.obk-quick-add-actions {
|
||||
display: flex;
|
||||
justify-content: flex-end;
|
||||
gap: 8px;
|
||||
}
|
||||
|
||||
/* Drag and Drop States */
|
||||
.obk-card-dragging {
|
||||
opacity: 0.5;
|
||||
transform: rotate(2deg);
|
||||
}
|
||||
|
||||
.obk-card-ghost {
|
||||
opacity: 0.3;
|
||||
background: var(--interactive-accent);
|
||||
border-color: var(--interactive-accent);
|
||||
}
|
||||
|
||||
.obk-card-chosen {
|
||||
cursor: grabbing;
|
||||
transform: rotate(2deg);
|
||||
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.15);
|
||||
}
|
||||
|
||||
/* Column Drag and Drop States */
|
||||
.obk-column-dragging {
|
||||
opacity: 0.5;
|
||||
}
|
||||
|
||||
.obk-column-ghost {
|
||||
opacity: 0.3;
|
||||
background: var(--background-modifier-border);
|
||||
}
|
||||
|
||||
/* Sortable placeholder */
|
||||
.obk-sortable-ghost {
|
||||
opacity: 0.4;
|
||||
background: var(--interactive-accent);
|
||||
border: 2px dashed var(--interactive-accent);
|
||||
border-radius: 6px;
|
||||
}
|
||||
+295
@@ -0,0 +1,295 @@
|
||||
{
|
||||
"ruleConfigs": {
|
||||
"add-blank-line-after-yaml": {
|
||||
"enabled": false
|
||||
},
|
||||
"dedupe-yaml-array-values": {
|
||||
"enabled": false,
|
||||
"dedupe-alias-key": true,
|
||||
"dedupe-tag-key": true,
|
||||
"dedupe-array-keys": true,
|
||||
"ignore-keys": ""
|
||||
},
|
||||
"escape-yaml-special-characters": {
|
||||
"enabled": false,
|
||||
"try-to-escape-single-line-arrays": false
|
||||
},
|
||||
"force-yaml-escape": {
|
||||
"enabled": false,
|
||||
"force-yaml-escape-keys": ""
|
||||
},
|
||||
"format-tags-in-yaml": {
|
||||
"enabled": false
|
||||
},
|
||||
"format-yaml-array": {
|
||||
"enabled": false,
|
||||
"alias-key": true,
|
||||
"tag-key": true,
|
||||
"default-array-style": "single-line",
|
||||
"default-array-keys": true,
|
||||
"force-single-line-array-style": "",
|
||||
"force-multi-line-array-style": ""
|
||||
},
|
||||
"insert-yaml-attributes": {
|
||||
"enabled": false,
|
||||
"text-to-insert": "aliases: \ntags: "
|
||||
},
|
||||
"move-tags-to-yaml": {
|
||||
"enabled": false,
|
||||
"how-to-handle-existing-tags": "Nothing",
|
||||
"tags-to-ignore": ""
|
||||
},
|
||||
"remove-yaml-keys": {
|
||||
"enabled": false,
|
||||
"yaml-keys-to-remove": ""
|
||||
},
|
||||
"sort-yaml-array-values": {
|
||||
"enabled": false,
|
||||
"sort-alias-key": true,
|
||||
"sort-tag-key": true,
|
||||
"sort-array-keys": true,
|
||||
"ignore-keys": "",
|
||||
"sort-order": "Ascending Alphabetical"
|
||||
},
|
||||
"yaml-key-sort": {
|
||||
"enabled": false,
|
||||
"yaml-key-priority-sort-order": "",
|
||||
"priority-keys-at-start-of-yaml": true,
|
||||
"yaml-sort-order-for-other-keys": "None"
|
||||
},
|
||||
"yaml-timestamp": {
|
||||
"enabled": true,
|
||||
"date-created": true,
|
||||
"date-created-key": "base_created",
|
||||
"date-created-source-of-truth": "file system",
|
||||
"date-modified": true,
|
||||
"date-modified-key": "base_modified",
|
||||
"date-modified-source-of-truth": "file system",
|
||||
"format": "YYYY-MM-DDTHH:mm",
|
||||
"convert-to-utc": false,
|
||||
"update-on-file-contents-updated": "never"
|
||||
},
|
||||
"yaml-title": {
|
||||
"enabled": false,
|
||||
"title-key": "title",
|
||||
"mode": "first-h1-or-filename-if-h1-missing"
|
||||
},
|
||||
"yaml-title-alias": {
|
||||
"enabled": false,
|
||||
"preserve-existing-alias-section-style": true,
|
||||
"keep-alias-that-matches-the-filename": false,
|
||||
"use-yaml-key-to-keep-track-of-old-filename-or-heading": true,
|
||||
"alias-helper-key": "linter-yaml-title-alias"
|
||||
},
|
||||
"capitalize-headings": {
|
||||
"enabled": false,
|
||||
"style": "Title Case",
|
||||
"ignore-case-words": true,
|
||||
"ignore-words": "macOS, iOS, iPhone, iPad, JavaScript, TypeScript, AppleScript, I",
|
||||
"lowercase-words": "a, an, the, aboard, about, abt., above, abreast, absent, across, after, against, along, aloft, alongside, amid, amidst, mid, midst, among, amongst, anti, apropos, around, round, as, aslant, astride, at, atop, ontop, bar, barring, before, B4, behind, below, beneath, neath, beside, besides, between, 'tween, beyond, but, by, chez, circa, c., ca., come, concerning, contra, counting, cum, despite, spite, down, during, effective, ere, except, excepting, excluding, failing, following, for, from, in, including, inside, into, less, like, minus, modulo, mod, near, nearer, nearest, next, notwithstanding, of, o', off, offshore, on, onto, opposite, out, outside, over, o'er, pace, past, pending, per, plus, post, pre, pro, qua, re, regarding, respecting, sans, save, saving, short, since, sub, than, through, thru, throughout, thruout, till, times, to, t', touching, toward, towards, under, underneath, unlike, until, unto, up, upon, versus, vs., v., via, vice, vis-à-vis, wanting, with, w/, w., c̄, within, w/i, without, 'thout, w/o, abroad, adrift, aft, afterward, afterwards, ahead, apart, ashore, aside, away, back, backward, backwards, beforehand, downhill, downstage, downstairs, downstream, downward, downwards, downwind, east, eastward, eastwards, forth, forward, forwards, heavenward, heavenwards, hence, henceforth, here, hereby, herein, hereof, hereto, herewith, home, homeward, homewards, indoors, inward, inwards, leftward, leftwards, north, northeast, northward, northwards, northwest, now, onward, onwards, outdoors, outward, outwards, overboard, overhead, overland, overseas, rightward, rightwards, seaward, seawards, skywards, skyward, south, southeast, southwards, southward, southwest, then, thence, thenceforth, there, thereby, therein, thereof, thereto, therewith, together, underfoot, underground, uphill, upstage, upstairs, upstream, upward, upwards, upwind, west, westward, westwards, when, whence, where, whereby, wherein, whereto, wherewith, although, because, considering, given, granted, if, lest, once, provided, providing, seeing, so, supposing, though, unless, whenever, whereas, wherever, while, whilst, ago, inasmuch, even, whether, whose, whoever, why, how, whatever, what, both, and, or, either, neither, nor, just, rather, such, that, yet, is, it"
|
||||
},
|
||||
"file-name-heading": {
|
||||
"enabled": false
|
||||
},
|
||||
"header-increment": {
|
||||
"enabled": false,
|
||||
"start-at-h2": false
|
||||
},
|
||||
"headings-start-line": {
|
||||
"enabled": false
|
||||
},
|
||||
"remove-trailing-punctuation-in-heading": {
|
||||
"enabled": false,
|
||||
"punctuation-to-remove": ".,;:!。,;:!"
|
||||
},
|
||||
"footnote-after-punctuation": {
|
||||
"enabled": false
|
||||
},
|
||||
"move-footnotes-to-the-bottom": {
|
||||
"enabled": false,
|
||||
"include-blank-line-between-footnotes": false
|
||||
},
|
||||
"re-index-footnotes": {
|
||||
"enabled": false
|
||||
},
|
||||
"auto-correct-common-misspellings": {
|
||||
"enabled": false,
|
||||
"ignore-words": "",
|
||||
"skip-words-with-multiple-capitals": false,
|
||||
"extra-auto-correct-files": []
|
||||
},
|
||||
"blockquote-style": {
|
||||
"enabled": false,
|
||||
"style": "space"
|
||||
},
|
||||
"convert-bullet-list-markers": {
|
||||
"enabled": false
|
||||
},
|
||||
"default-language-for-code-fences": {
|
||||
"enabled": false,
|
||||
"default-language": ""
|
||||
},
|
||||
"emphasis-style": {
|
||||
"enabled": false,
|
||||
"style": "consistent"
|
||||
},
|
||||
"no-bare-urls": {
|
||||
"enabled": false,
|
||||
"no-bare-uris": false
|
||||
},
|
||||
"ordered-list-style": {
|
||||
"enabled": false,
|
||||
"number-style": "ascending",
|
||||
"list-end-style": "."
|
||||
},
|
||||
"proper-ellipsis": {
|
||||
"enabled": false
|
||||
},
|
||||
"quote-style": {
|
||||
"enabled": false,
|
||||
"single-quote-enabled": true,
|
||||
"single-quote-style": "''",
|
||||
"double-quote-enabled": true,
|
||||
"double-quote-style": "\"\""
|
||||
},
|
||||
"remove-consecutive-list-markers": {
|
||||
"enabled": false
|
||||
},
|
||||
"remove-empty-list-markers": {
|
||||
"enabled": false
|
||||
},
|
||||
"remove-hyphenated-line-breaks": {
|
||||
"enabled": false
|
||||
},
|
||||
"remove-multiple-spaces": {
|
||||
"enabled": false
|
||||
},
|
||||
"strong-style": {
|
||||
"enabled": false,
|
||||
"style": "consistent"
|
||||
},
|
||||
"two-spaces-between-lines-with-content": {
|
||||
"enabled": false,
|
||||
"line-break-indicator": " "
|
||||
},
|
||||
"unordered-list-style": {
|
||||
"enabled": false,
|
||||
"list-style": "consistent"
|
||||
},
|
||||
"compact-yaml": {
|
||||
"enabled": false,
|
||||
"inner-new-lines": false
|
||||
},
|
||||
"consecutive-blank-lines": {
|
||||
"enabled": false
|
||||
},
|
||||
"convert-spaces-to-tabs": {
|
||||
"enabled": false,
|
||||
"tabsize": 4
|
||||
},
|
||||
"empty-line-around-blockquotes": {
|
||||
"enabled": false
|
||||
},
|
||||
"empty-line-around-code-fences": {
|
||||
"enabled": false
|
||||
},
|
||||
"empty-line-around-horizontal-rules": {
|
||||
"enabled": false
|
||||
},
|
||||
"empty-line-around-math-blocks": {
|
||||
"enabled": false
|
||||
},
|
||||
"empty-line-around-tables": {
|
||||
"enabled": false
|
||||
},
|
||||
"heading-blank-lines": {
|
||||
"enabled": false,
|
||||
"bottom": true,
|
||||
"empty-line-after-yaml": true
|
||||
},
|
||||
"line-break-at-document-end": {
|
||||
"enabled": false
|
||||
},
|
||||
"move-math-block-indicators-to-their-own-line": {
|
||||
"enabled": false
|
||||
},
|
||||
"paragraph-blank-lines": {
|
||||
"enabled": false
|
||||
},
|
||||
"remove-empty-lines-between-list-markers-and-checklists": {
|
||||
"enabled": false
|
||||
},
|
||||
"remove-link-spacing": {
|
||||
"enabled": false
|
||||
},
|
||||
"remove-space-around-characters": {
|
||||
"enabled": false,
|
||||
"include-fullwidth-forms": true,
|
||||
"include-cjk-symbols-and-punctuation": true,
|
||||
"include-dashes": true,
|
||||
"other-symbols": ""
|
||||
},
|
||||
"remove-space-before-or-after-characters": {
|
||||
"enabled": false,
|
||||
"characters-to-remove-space-before": ",!?;:).’”]",
|
||||
"characters-to-remove-space-after": "¿¡‘“(["
|
||||
},
|
||||
"space-after-list-markers": {
|
||||
"enabled": false
|
||||
},
|
||||
"space-between-chinese-japanese-or-korean-and-english-or-numbers": {
|
||||
"enabled": false,
|
||||
"english-symbols-punctuation-before": "-+;:'\"°%$)]",
|
||||
"english-symbols-punctuation-after": "-+'\"([¥$"
|
||||
},
|
||||
"trailing-spaces": {
|
||||
"enabled": false,
|
||||
"two-space-line-break": false
|
||||
},
|
||||
"add-blockquote-indentation-on-paste": {
|
||||
"enabled": false
|
||||
},
|
||||
"prevent-double-checklist-indicator-on-paste": {
|
||||
"enabled": false
|
||||
},
|
||||
"prevent-double-list-item-indicator-on-paste": {
|
||||
"enabled": false
|
||||
},
|
||||
"proper-ellipsis-on-paste": {
|
||||
"enabled": false
|
||||
},
|
||||
"remove-hyphens-on-paste": {
|
||||
"enabled": false
|
||||
},
|
||||
"remove-leading-or-trailing-whitespace-on-paste": {
|
||||
"enabled": false
|
||||
},
|
||||
"remove-leftover-footnotes-from-quote-on-paste": {
|
||||
"enabled": false
|
||||
},
|
||||
"remove-multiple-blank-lines-on-paste": {
|
||||
"enabled": false
|
||||
}
|
||||
},
|
||||
"lintOnSave": true,
|
||||
"recordLintOnSaveLogs": false,
|
||||
"displayChanged": true,
|
||||
"suppressMessageWhenNoChange": false,
|
||||
"lintOnFileChange": false,
|
||||
"displayLintOnFileChangeNotice": false,
|
||||
"settingsConvertedToConfigKeyValues": true,
|
||||
"additionalFileExtensions": [],
|
||||
"foldersToIgnore": [],
|
||||
"filesToIgnore": [],
|
||||
"linterLocale": "system-default",
|
||||
"logLevel": "ERROR",
|
||||
"lintCommands": [],
|
||||
"customRegexes": [],
|
||||
"commonStyles": {
|
||||
"aliasArrayStyle": "single-line",
|
||||
"tagArrayStyle": "single-line",
|
||||
"minimumNumberOfDollarSignsToBeAMathBlock": 2,
|
||||
"escapeCharacter": "\"",
|
||||
"removeUnnecessaryEscapeCharsForMultiLineArrays": false
|
||||
}
|
||||
}
|
||||
+438
File diff suppressed because one or more lines are too long
+11
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"id": "obsidian-linter",
|
||||
"name": "Linter",
|
||||
"version": "1.31.2",
|
||||
"minAppVersion": "1.12.0",
|
||||
"description": "Formats and styles your notes. It can be used to format YAML tags, aliases, arrays, and metadata; footnotes; headings; spacing; math blocks; regular markdown contents like list, italics, and bold styles; and more with the use of custom rule options as well.",
|
||||
"author": "Victor Tao",
|
||||
"authorUrl": "https://github.com/platers",
|
||||
"helpUrl": "https://platers.github.io/obsidian-linter/",
|
||||
"isDesktopOnly": false
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
.linter-navigation-item{align-items:center;background-color:var(--background-primary-secondary-alt);border:1px solid var(--background-modifier-border);border-radius:100px;border-radius:8px 8px 2px 2px;cursor:pointer;display:flex;flex-direction:row;font-size:16px;font-weight:700;gap:4px;height:32px;overflow:hidden;padding:4px 6px;transition:color .25s ease-in-out,padding .25s ease-in-out,background-color .35s cubic-bezier(.45,.25,.83,.67),max-width .35s cubic-bezier(.57,.04,.58,1);white-space:nowrap}@media screen and (max-width:1325px){.linter-navigation-item.linter-desktop{max-width:32px}}@media screen and (max-width:800px){.linter-navigation-item.linter-mobile{max-width:32px}}.linter-navigation-item-icon,.linter-warning{padding-top:5px}.linter-navigation-item:hover{border-color:var(--interactive-accent-hover);border-bottom:0}.linter-navigation-item-selected{background-color:var(--interactive-accent)!important;border:1px solid var(--background-modifier-border);border-bottom:0;border-radius:8px 8px 2px 2px;color:var(--text-on-accent);max-width:100%!important;padding:4px 9px!important;transition:color .25s ease-in-out,padding .25s ease-in-out,background-color .35s cubic-bezier(.45,.25,.83,.67),max-width .45s cubic-bezier(.57,.04,.58,1) .2s}.linter{transition:transform .4s 0s}.linter-setting-title{align-items:baseline;display:flex;gap:30px;justify-content:space-between}.linter-setting-title.linter-mobile{justify-content:space-around}.linter-setting-title h1{font-weight:900;margin-bottom:12px;margin-top:6px}.linter-setting-header{margin-bottom:24px;overflow-x:auto;overflow-y:hidden}.linter-setting-header .linter-setting-tab-group{align-items:flex-end;display:flex;flex-wrap:wrap;width:100%}.linter-setting-tab-group{border-bottom:2px solid var(--background-modifier-border);margin-top:6px;padding-left:2px;padding-right:2px}.linter-setting-header .linter-tab-settings{border-left:2px solid transparent;border-right:2px solid transparent;cursor:pointer;font-weight:600;padding:6px 12px;white-space:nowrap}.linter-setting-header .linter-tab-settings:first-child{margin-left:6px}.linter-setting-header .linter-tab-settings.linter-tab-settings-active{border:2px solid var(--background-modifier-border);border-bottom-color:var(--background-primary);border-radius:2px;transform:translateY(2px)}.linter-navigation-item:not(.linter-navigation-item-selected)>span:nth-child(2),.linter-visually-hidden{border:0;clip:rect(0 0 0 0);clip-path:rect(0 0 0 0);height:auto;margin:0;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}textarea.full-width{margin-bottom:.8em;margin-top:.8em;min-height:10em;width:100%}.full-width-textbox-input-wrapper{position:relative}.settings-copy-button{margin:0 0 0 auto;padding:4px;position:absolute;right:.8em;top:.8em}.settings-copy-button svg.linter-clipboard path{fill:var(--text-faint)}.settings-copy-button svg.linter-success path{fill:var(--interactive-success)}.settings-copy-button:active,.settings-copy-button:hover{cursor:pointer}.settings-copy-button:active svg path,.settings-copy-button:hover svg path{fill:var(--text-accent-hover);transition:all .3s ease}.settings-copy-button:focus{outline:0}.linter-custom-regex-replacement-container div:last-child{border:none}.linter-custom-regex-replacement{border:none;border-bottom:var(--hr-thickness) solid;border-color:var(--hr-color);margin-bottom:15px}.linter-custom-regex-replacement-row2{flex-wrap:wrap}.linter-custom-regex-replacement-normal-input{width:40%}.linter-custom-regex-replacement-flags{width:15%}.linter-custom-regex-replacement-label{flex-direction:row-reverse}.linter-custom-regex-replacement-label-input{width:50%}.linter-files-to-ignore-container div:last-child{border:none}.linter-files-to-ignore{border:none;border-bottom:var(--hr-thickness) solid;border-color:var(--hr-color);margin-bottom:15px}.linter-files-to-ignore-normal-input{width:40%}.linter-files-to-ignore-flags{width:15%}.linter-no-border{border:none}.linter-border-bottom{border-bottom:1px solid var(--background-modifier-border);border-top:0;margin-bottom:.75em}.linter-no-padding-top{padding-top:0}.custom-row-description{margin-top:0}.modal-warn,.search-zero-state{font-weight:700}.modal-heading,.search-zero-state{text-align:center}
|
||||
Vendored
+165
@@ -0,0 +1,165 @@
|
||||
{
|
||||
"choices": [
|
||||
{
|
||||
"id": "b61de3ba-ced1-4fca-9dbf-bdc59ea8cd25",
|
||||
"name": "Actionable",
|
||||
"type": "Capture",
|
||||
"command": false,
|
||||
"appendLink": false,
|
||||
"captureTo": "",
|
||||
"captureToActiveFile": true,
|
||||
"captureToCanvasNodeId": "",
|
||||
"activeFileWritePosition": "top",
|
||||
"createFileIfItDoesntExist": {
|
||||
"enabled": false,
|
||||
"createWithTemplate": false,
|
||||
"template": ""
|
||||
},
|
||||
"format": {
|
||||
"enabled": true,
|
||||
"format": "{{VD:action_status: {{VALUE:\"open\"}}}}\n{{VD:action_effort_minutes: {{VALUE:0}}}}"
|
||||
},
|
||||
"insertAfter": {
|
||||
"enabled": false,
|
||||
"after": "",
|
||||
"insertAtEnd": false,
|
||||
"considerSubsections": false,
|
||||
"createIfNotFound": false,
|
||||
"createIfNotFoundLocation": "top",
|
||||
"inline": false,
|
||||
"replaceExisting": false,
|
||||
"blankLineAfterMatchMode": "auto"
|
||||
},
|
||||
"newLineCapture": {
|
||||
"enabled": false,
|
||||
"direction": "below"
|
||||
},
|
||||
"prepend": false,
|
||||
"task": false,
|
||||
"openFile": false,
|
||||
"fileOpening": {
|
||||
"location": "tab",
|
||||
"direction": "vertical",
|
||||
"mode": "default",
|
||||
"focus": true
|
||||
},
|
||||
"templater": {
|
||||
"afterCapture": "none"
|
||||
}
|
||||
}
|
||||
],
|
||||
"inputPrompt": "single-line",
|
||||
"persistInputPromptDrafts": true,
|
||||
"useSelectionAsCaptureValue": true,
|
||||
"devMode": false,
|
||||
"templateFolderPath": "",
|
||||
"announceUpdates": "major",
|
||||
"version": "2.12.3",
|
||||
"globalVariables": {},
|
||||
"onePageInputEnabled": false,
|
||||
"disableOnlineFeatures": true,
|
||||
"enableRibbonIcon": false,
|
||||
"showCaptureNotification": true,
|
||||
"showInputCancellationNotification": false,
|
||||
"enableTemplatePropertyTypes": false,
|
||||
"dateAliases": {
|
||||
"t": "today",
|
||||
"tm": "tomorrow",
|
||||
"yd": "yesterday",
|
||||
"nw": "next week",
|
||||
"nm": "next month",
|
||||
"ny": "next year",
|
||||
"lw": "last week",
|
||||
"lm": "last month",
|
||||
"ly": "last year"
|
||||
},
|
||||
"ai": {
|
||||
"defaultModel": "Ask me",
|
||||
"defaultSystemPrompt": "As an AI assistant within Obsidian, your primary goal is to help users manage their ideas and knowledge more effectively. Format your responses using Markdown syntax. Please use the [[Obsidian]] link format. You can write aliases for the links by writing [[Obsidian|the alias after the pipe symbol]]. To use mathematical notation, use LaTeX syntax. LaTeX syntax for larger equations should be on separate lines, surrounded with double dollar signs ($$). You can also inline math expressions by wrapping it in $ symbols. For example, use $$w_{ij}^{\\text{new}}:=w_{ij}^{\\text{current}}+\\eta\\cdot\\delta_j\\cdot x_{ij}$$ on a separate line, but you can write \"($\\eta$ = learning rate, $\\delta_j$ = error term, $x_{ij}$ = input)\" inline.",
|
||||
"promptTemplatesFolderPath": "",
|
||||
"showAssistant": true,
|
||||
"providers": [
|
||||
{
|
||||
"name": "OpenAI",
|
||||
"endpoint": "https://api.openai.com/v1",
|
||||
"apiKey": "",
|
||||
"models": [
|
||||
{
|
||||
"name": "gpt-3.5-turbo",
|
||||
"maxTokens": 4096
|
||||
},
|
||||
{
|
||||
"name": "gpt-3.5-turbo-16k",
|
||||
"maxTokens": 16384
|
||||
},
|
||||
{
|
||||
"name": "gpt-3.5-turbo-1106",
|
||||
"maxTokens": 16385
|
||||
},
|
||||
{
|
||||
"name": "gpt-4",
|
||||
"maxTokens": 8192
|
||||
},
|
||||
{
|
||||
"name": "gpt-4-32k",
|
||||
"maxTokens": 32768
|
||||
},
|
||||
{
|
||||
"name": "gpt-4-1106-preview",
|
||||
"maxTokens": 128000
|
||||
},
|
||||
{
|
||||
"name": "gpt-4-turbo",
|
||||
"maxTokens": 128000
|
||||
},
|
||||
{
|
||||
"name": "gpt-4o",
|
||||
"maxTokens": 128000
|
||||
},
|
||||
{
|
||||
"name": "gpt-4o-mini",
|
||||
"maxTokens": 128000
|
||||
}
|
||||
],
|
||||
"autoSyncModels": false,
|
||||
"modelSource": "modelsDev"
|
||||
},
|
||||
{
|
||||
"name": "Gemini",
|
||||
"endpoint": "https://generativelanguage.googleapis.com",
|
||||
"apiKey": "",
|
||||
"models": [
|
||||
{
|
||||
"name": "gemini-1.5-pro",
|
||||
"maxTokens": 1000000
|
||||
},
|
||||
{
|
||||
"name": "gemini-1.5-flash",
|
||||
"maxTokens": 1000000
|
||||
},
|
||||
{
|
||||
"name": "gemini-1.5-flash-8b",
|
||||
"maxTokens": 1000000
|
||||
}
|
||||
],
|
||||
"autoSyncModels": false,
|
||||
"modelSource": "modelsDev"
|
||||
}
|
||||
]
|
||||
},
|
||||
"migrations": {
|
||||
"migrateToMacroIDFromEmbeddedMacro": true,
|
||||
"useQuickAddTemplateFolder": true,
|
||||
"incrementFileNameSettingMoveToDefaultBehavior": true,
|
||||
"consolidateFileExistsBehavior": true,
|
||||
"repairTemplateFileExistsBehavior": true,
|
||||
"mutualExclusionInsertAfterAndWriteToBottomOfFile": true,
|
||||
"setVersionAfterUpdateModalRelease": true,
|
||||
"addDefaultAIProviders": true,
|
||||
"removeMacroIndirection": true,
|
||||
"migrateFileOpeningSettings": true,
|
||||
"backfillFileOpeningDefaults": true,
|
||||
"setProviderModelDiscoveryMode": true,
|
||||
"migrateProviderApiKeysToSecretStorage": true
|
||||
}
|
||||
}
|
||||
Vendored
+106
File diff suppressed because one or more lines are too long
+12
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"id": "quickadd",
|
||||
"name": "QuickAdd",
|
||||
"version": "2.12.3",
|
||||
"minAppVersion": "1.11.4",
|
||||
"description": "Quickly add new pages or content to your vault.",
|
||||
"author": "Christian B. B. Houmann",
|
||||
"authorUrl": "https://bagerbach.com",
|
||||
"fundingUrl": "https://www.buymeacoffee.com/chhoumann",
|
||||
"helpUrl": "https://quickadd.obsidian.guide/docs/",
|
||||
"isDesktopOnly": false
|
||||
}
|
||||
+1
File diff suppressed because one or more lines are too long
+47
@@ -0,0 +1,47 @@
|
||||
{
|
||||
"command_timeout": 5,
|
||||
"templates_folder": "_templates",
|
||||
"templates_pairs": [
|
||||
[
|
||||
"",
|
||||
""
|
||||
]
|
||||
],
|
||||
"trigger_on_file_creation": true,
|
||||
"auto_jump_to_cursor": false,
|
||||
"enable_system_commands": false,
|
||||
"shell_path": "",
|
||||
"user_scripts_folder": "_templates/scripts",
|
||||
"enable_folder_templates": true,
|
||||
"folder_templates": [
|
||||
{
|
||||
"folder": "/",
|
||||
"template": "_templates/Default Note.md"
|
||||
},
|
||||
{
|
||||
"folder": "",
|
||||
"template": ""
|
||||
}
|
||||
],
|
||||
"enable_file_templates": false,
|
||||
"file_templates": [
|
||||
{
|
||||
"regex": ".*",
|
||||
"template": ""
|
||||
}
|
||||
],
|
||||
"syntax_highlighting": true,
|
||||
"syntax_highlighting_mobile": false,
|
||||
"enabled_templates_hotkeys": [
|
||||
""
|
||||
],
|
||||
"startup_templates": [
|
||||
""
|
||||
],
|
||||
"intellisense_render": 1,
|
||||
"ignore_folders_on_creation": [
|
||||
{
|
||||
"folder": ""
|
||||
}
|
||||
]
|
||||
}
|
||||
+53
File diff suppressed because one or more lines are too long
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"id": "templater-obsidian",
|
||||
"name": "Templater",
|
||||
"version": "2.20.5",
|
||||
"description": "Advanced templating and automation using handlebars-like syntax.",
|
||||
"minAppVersion": "1.12.2",
|
||||
"author": "SilentVoid",
|
||||
"authorUrl": "https://github.com/SilentVoid13",
|
||||
"fundingUrl": {
|
||||
"GitHub Sponser (Zachatoo, maintainer)": "https://github.com/sponsors/Zachatoo",
|
||||
"Ko-fi (Zachatoo, maintainer)": "https://ko-fi.com/zachatoo",
|
||||
"GitHub Sponser (SilentVoid13, creator)": "https://github.com/sponsors/SilentVoid13",
|
||||
"Paypal (SilentVoid13, creator)": "https://www.paypal.com/donate?hosted_button_id=U2SRGAFYXT32Q"
|
||||
},
|
||||
"helpUrl": "https://silentvoid13.github.io/Templater/",
|
||||
"isDesktopOnly": false
|
||||
}
|
||||
+226
@@ -0,0 +1,226 @@
|
||||
.templater_search {
|
||||
width: calc(100% - 20px);
|
||||
}
|
||||
|
||||
.templater_div {
|
||||
border-top: 1px solid var(--background-modifier-border);
|
||||
}
|
||||
|
||||
.templater_div > .setting-item {
|
||||
border-top: none !important;
|
||||
align-self: center;
|
||||
}
|
||||
|
||||
.templater_div > .setting-item > .setting-item-control {
|
||||
justify-content: space-around;
|
||||
padding: 0;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.templater_div
|
||||
> .setting-item
|
||||
> .setting-item-control
|
||||
> .setting-editor-extra-setting-button {
|
||||
align-self: center;
|
||||
}
|
||||
|
||||
.templater_donating {
|
||||
margin: 10px;
|
||||
}
|
||||
|
||||
.templater_title {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
margin-top: 5px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.templater_template {
|
||||
align-self: center;
|
||||
margin-left: 5px;
|
||||
margin-right: 5px;
|
||||
width: 70%;
|
||||
}
|
||||
|
||||
.templater_cmd {
|
||||
margin-left: 5px;
|
||||
margin-right: 5px;
|
||||
font-size: 14px;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.templater_div2 > .setting-item {
|
||||
align-content: center;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.templater-prompt-div,
|
||||
.templater-multisuggester-div {
|
||||
display: flex;
|
||||
}
|
||||
|
||||
.templater-prompt-form {
|
||||
display: flex;
|
||||
flex-grow: 1;
|
||||
}
|
||||
|
||||
.templater-prompt-input,
|
||||
.templater-multisuggester-input {
|
||||
flex-grow: 1;
|
||||
}
|
||||
|
||||
.templater-button-div {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
margin-top: 1rem;
|
||||
}
|
||||
|
||||
textarea.templater-prompt-input {
|
||||
height: 10rem;
|
||||
}
|
||||
|
||||
textarea.templater-prompt-input:focus {
|
||||
border-color: var(--interactive-accent);
|
||||
}
|
||||
|
||||
.templater-multisuggester-list {
|
||||
margin: 1.5em 0;
|
||||
}
|
||||
|
||||
.cm-s-obsidian .templater-command-bg {
|
||||
left: 0px;
|
||||
right: 0px;
|
||||
background-color: var(--background-primary-alt);
|
||||
}
|
||||
|
||||
.cm-s-obsidian .cm-templater-command {
|
||||
font-size: 0.85em;
|
||||
font-family: var(--font-monospace);
|
||||
line-height: 1.3;
|
||||
}
|
||||
|
||||
.cm-s-obsidian .templater-inline .cm-templater-command {
|
||||
background-color: var(--background-primary-alt);
|
||||
}
|
||||
|
||||
.cm-s-obsidian .cm-templater-command.cm-templater-opening-tag {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.cm-s-obsidian .cm-templater-command.cm-templater-closing-tag {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.cm-s-obsidian .cm-templater-command.cm-templater-interpolation-tag {
|
||||
color: var(--code-property, #008bff);
|
||||
}
|
||||
|
||||
.cm-s-obsidian .cm-templater-command.cm-templater-execution-tag {
|
||||
color: var(--code-function, #c0d700);
|
||||
}
|
||||
|
||||
.cm-s-obsidian .cm-templater-command.cm-keyword {
|
||||
color: var(--code-keyword, #00a7aa);
|
||||
font-weight: normal;
|
||||
}
|
||||
|
||||
.cm-s-obsidian .cm-templater-command.cm-atom {
|
||||
color: var(--code-normal, #f39b35);
|
||||
}
|
||||
|
||||
.cm-s-obsidian .cm-templater-command.cm-value,
|
||||
.cm-s-obsidian .cm-templater-command.cm-number,
|
||||
.cm-s-obsidian .cm-templater-command.cm-type {
|
||||
color: var(--code-value, #a06fca);
|
||||
}
|
||||
|
||||
.cm-s-obsidian .cm-templater-command.cm-def,
|
||||
.cm-s-obsidian .cm-templater-command.cm-type.cm-def {
|
||||
color: var(--code-normal, var(--text-normal));
|
||||
}
|
||||
|
||||
.cm-s-obsidian .cm-templater-command.cm-property,
|
||||
.cm-s-obsidian .cm-templater-command.cm-property.cm-def,
|
||||
.cm-s-obsidian .cm-templater-command.cm-attribute {
|
||||
color: var(--code-function, #98e342);
|
||||
}
|
||||
|
||||
.cm-s-obsidian .cm-templater-command.cm-variable,
|
||||
.cm-s-obsidian .cm-templater-command.cm-variable-2,
|
||||
.cm-s-obsidian .cm-templater-command.cm-variable-3,
|
||||
.cm-s-obsidian .cm-templater-command.cm-meta {
|
||||
color: var(--code-property, #d4d4d4);
|
||||
}
|
||||
|
||||
.cm-s-obsidian .cm-templater-command.cm-callee,
|
||||
.cm-s-obsidian .cm-templater-command.cm-operator,
|
||||
.cm-s-obsidian .cm-templater-command.cm-qualifier,
|
||||
.cm-s-obsidian .cm-templater-command.cm-builtin {
|
||||
color: var(--code-operator, #fc4384);
|
||||
}
|
||||
|
||||
.cm-s-obsidian .cm-templater-command.cm-tag {
|
||||
color: var(--code-tag, #fc4384);
|
||||
}
|
||||
|
||||
.cm-s-obsidian .cm-templater-command.cm-comment,
|
||||
.cm-s-obsidian .cm-templater-command.cm-comment.cm-tag,
|
||||
.cm-s-obsidian .cm-templater-command.cm-comment.cm-attribute {
|
||||
color: var(--code-comment, #696d70);
|
||||
}
|
||||
|
||||
.cm-s-obsidian .cm-templater-command.cm-string,
|
||||
.cm-s-obsidian .cm-templater-command.cm-string-2 {
|
||||
color: var(--code-string, #e6db74);
|
||||
}
|
||||
|
||||
.cm-s-obsidian .cm-templater-command.cm-header,
|
||||
.cm-s-obsidian .cm-templater-command.cm-hr {
|
||||
color: var(--code-keyword, #da7dae);
|
||||
}
|
||||
|
||||
.cm-s-obsidian .cm-templater-command.cm-link {
|
||||
color: var(--code-normal, #696d70);
|
||||
}
|
||||
|
||||
.cm-s-obsidian .cm-templater-command.cm-error {
|
||||
border-bottom: 1px solid #c42412;
|
||||
}
|
||||
|
||||
.CodeMirror-hints {
|
||||
position: absolute;
|
||||
z-index: 10;
|
||||
overflow: hidden;
|
||||
list-style: none;
|
||||
|
||||
margin: 0;
|
||||
padding: 2px;
|
||||
|
||||
-webkit-box-shadow: 2px 3px 5px rgba(0, 0, 0, 0.2);
|
||||
-moz-box-shadow: 2px 3px 5px rgba(0, 0, 0, 0.2);
|
||||
box-shadow: 2px 3px 5px rgba(0, 0, 0, 0.2);
|
||||
border-radius: 3px;
|
||||
border: 1px solid silver;
|
||||
|
||||
background: white;
|
||||
font-size: 90%;
|
||||
font-family: monospace;
|
||||
|
||||
max-height: 20em;
|
||||
overflow-y: auto;
|
||||
}
|
||||
|
||||
.CodeMirror-hint {
|
||||
margin: 0;
|
||||
padding: 0 4px;
|
||||
border-radius: 2px;
|
||||
white-space: pre;
|
||||
color: black;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
li.CodeMirror-hint-active {
|
||||
background: #0088ff;
|
||||
color: white;
|
||||
}
|
||||
+651
@@ -0,0 +1,651 @@
|
||||
/*------------------------------------------------------------------------------
|
||||
Obsidian Colored Sidebar Items by CyanVoxel v2.0.0
|
||||
|
||||
A colored sidebar CSS snippet inspired by
|
||||
the "Coloured Folders" snippet by Lithou.
|
||||
|
||||
This snippet targets folders beginning with numbered prefixes, and applies full
|
||||
color formatting based on the root colors listed below. The prefixes are both
|
||||
customizable and extensible; feel free to change, add, and remove them based on
|
||||
your own titles and vault structure! By default I have a range of 8+1 colors,
|
||||
however I've provided some other common colors as a starting point for your own
|
||||
customization. Just swap out the color variable names in the prefix groups.
|
||||
|
||||
------------------------------------------------------------------------------*/
|
||||
|
||||
:root {
|
||||
/* ================================ Colors ================================ */
|
||||
--red: #e22c3c; /* Default Prefix: None */
|
||||
--red-orange: #e9440b; /* Default Prefix: None */
|
||||
--orange: #ee6748; /* Default Prefix: None */
|
||||
--amber: #fa9f50; /* Default Prefix: None */
|
||||
--yellow: #ffd85e; /* Default Prefix: None */
|
||||
--lime: #97e768; /* Default Prefix: None */
|
||||
--mint: #52eea3; /* Default Prefix: 00 */
|
||||
--cyan: #51e1e9; /* Default Prefix: 10 */
|
||||
--cool-cyan: #43cfea; /* Default Prefix: None */
|
||||
--light-blue: #54b6f8; /* Default Prefix: 20 */
|
||||
--blue: #437cf3; /* Default Prefix: 30 */
|
||||
--blue-violet: #6f51f4; /* Default Prefix: None */
|
||||
--violet: #9446f8; /* Default Prefix: 40 */
|
||||
--purple: #c952ed; /* Default Prefix: 50 */
|
||||
--magenta: #e54f9b; /* Default Prefix: 60 */
|
||||
--hot-red: #e3365e; /* Default Prefix: 70 */
|
||||
--cool-gray: #515768; /* Default Prefix: 99 */
|
||||
|
||||
--default-text-color: #d0d0d0;
|
||||
--highlight: #fff;
|
||||
--shadow: #0b0c2c;
|
||||
|
||||
--nav-item-weight-hover: bold;
|
||||
}
|
||||
|
||||
/* Light Theme Specific Properties */
|
||||
.theme-light {
|
||||
--contrast-color: var(--shadow);
|
||||
--default-text-color: var(--shadow);
|
||||
--bg-contrast-amount: 70%;
|
||||
--fg-contrast-amount: 30%;
|
||||
--medium-contrast-amount: 60%;
|
||||
--active-contrast-amount: 30%;
|
||||
|
||||
/* Darker Versions of Bright Colors for Light Theme */
|
||||
--yellow: color-mix(in srgb, #ffd85e 90%, var(--shadow));
|
||||
--lime: color-mix(in srgb, #97e768 90%, var(--shadow));
|
||||
--mint: color-mix(in srgb, #52eea3 85%, var(--shadow));
|
||||
--cyan: color-mix(in srgb, #51e1e9 85%, var(--shadow));
|
||||
--cool-cyan: color-mix(in srgb, #43cfea 85%, var(--shadow));
|
||||
--light-blue: color-mix(in srgb, #54b6f8 90%, var(--shadow));
|
||||
}
|
||||
|
||||
/* Dark Theme Specific Properties */
|
||||
.theme-dark {
|
||||
--contrast-color: var(--highlight);
|
||||
--bg-contrast-amount: 15%;
|
||||
--fg-contrast-amount: 40%;
|
||||
--medium-contrast-amount: 20%;
|
||||
--active-contrast-amount: 10%;
|
||||
}
|
||||
|
||||
/* All Folder Titles */
|
||||
.nav-folder-title {
|
||||
font-weight: bold;
|
||||
border-radius: 5px;
|
||||
}
|
||||
|
||||
/* Narrower Padding on Desktop*/
|
||||
@media only screen and (min-width: 768px) {
|
||||
.nav-file-title,
|
||||
.nav-folder-title {
|
||||
/* padding: 3px 5px 2px 4px !important; */
|
||||
padding-top: 3px !important;
|
||||
padding-right: 5px !important;
|
||||
padding-bottom: 2px !important;
|
||||
padding-left: 15px;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
============================ Folder Title Prefixes =============================
|
||||
The following groups of prefixes are divided by the numbering prefix that they
|
||||
target. For example, prefix '00' targets any folder titles beginning with '00',
|
||||
such as '00 - Maps of Content'. The only other piece of information that changes
|
||||
between the prefix groups are the color variables. Change or expand on any of
|
||||
these to suit your own folder structure and vault theme!
|
||||
*/
|
||||
|
||||
/* ------------------------------- 00 Prefix -------------------------------- */
|
||||
.nav-folder-title[data-path^="00"] {
|
||||
color: var(--mint);
|
||||
--nav-item-color-hover: color-mix(
|
||||
in srgb,
|
||||
var(--mint) var(--fg-contrast-amount),
|
||||
var(--contrast-color)
|
||||
);
|
||||
--nav-item-background-hover: color-mix(
|
||||
in srgb,
|
||||
var(--mint) var(--bg-contrast-amount),
|
||||
transparent
|
||||
);
|
||||
--background-modifier-border-focus: color-mix(
|
||||
in srgb,
|
||||
var(--mint) 40%,
|
||||
transparent
|
||||
);
|
||||
--nav-collapse-icon-color: color-mix(in srgb, var(--mint) 60%, transparent);
|
||||
}
|
||||
.nav-folder-title[data-path^="00"]:hover {
|
||||
--nav-collapse-icon-color: color-mix(
|
||||
in srgb,
|
||||
var(--mint) 60%,
|
||||
var(--contrast-color)
|
||||
);
|
||||
}
|
||||
.tree-item-children .nav-folder:has(.nav-folder-title[data-path^="00"]) {
|
||||
--nav-indentation-guide-color: color-mix(
|
||||
in srgb,
|
||||
var(--mint) var(--medium-contrast-amount),
|
||||
transparent
|
||||
);
|
||||
}
|
||||
.tree-item-children
|
||||
.nav-folder:has(.nav-folder-title[data-path^="00"])
|
||||
.nav-file-title {
|
||||
color: color-mix(
|
||||
in srgb,
|
||||
var(--mint) var(--medium-contrast-amount),
|
||||
var(--default-text-color)
|
||||
);
|
||||
--nav-item-background-hover: color-mix(
|
||||
in srgb,
|
||||
color-mix(in srgb, var(--mint) 50%, var(--highlight))
|
||||
var(--bg-contrast-amount),
|
||||
transparent
|
||||
);
|
||||
--background-modifier-border-focus: color-mix(
|
||||
in srgb,
|
||||
var(--mint) 40%,
|
||||
transparent
|
||||
);
|
||||
--nav-item-background-active: color-mix(
|
||||
in srgb,
|
||||
var(--mint) var(--active-contrast-amount),
|
||||
transparent
|
||||
);
|
||||
}
|
||||
|
||||
/* ------------------------------- 10 Prefix -------------------------------- */
|
||||
.nav-folder-title[data-path^="10"] {
|
||||
color: var(--cyan);
|
||||
--nav-item-color-hover: color-mix(
|
||||
in srgb,
|
||||
var(--cyan) var(--fg-contrast-amount),
|
||||
var(--contrast-color)
|
||||
);
|
||||
--nav-item-background-hover: color-mix(
|
||||
in srgb,
|
||||
var(--cyan) var(--bg-contrast-amount),
|
||||
transparent
|
||||
);
|
||||
--background-modifier-border-focus: color-mix(
|
||||
in srgb,
|
||||
var(--cyan) 40%,
|
||||
transparent
|
||||
);
|
||||
--nav-collapse-icon-color: color-mix(in srgb, var(--cyan) 60%, transparent);
|
||||
}
|
||||
.nav-folder-title[data-path^="10"]:hover {
|
||||
--nav-collapse-icon-color: color-mix(
|
||||
in srgb,
|
||||
var(--cyan) 60%,
|
||||
var(--contrast-color)
|
||||
);
|
||||
}
|
||||
.tree-item-children .nav-folder:has(.nav-folder-title[data-path^="10"]) {
|
||||
--nav-indentation-guide-color: color-mix(
|
||||
in srgb,
|
||||
var(--cyan) var(--medium-contrast-amount),
|
||||
transparent
|
||||
);
|
||||
}
|
||||
.tree-item-children
|
||||
.nav-folder:has(.nav-folder-title[data-path^="10"])
|
||||
.nav-file-title {
|
||||
color: color-mix(
|
||||
in srgb,
|
||||
var(--cyan) var(--medium-contrast-amount),
|
||||
var(--default-text-color)
|
||||
);
|
||||
--nav-item-background-hover: color-mix(
|
||||
in srgb,
|
||||
color-mix(in srgb, var(--cyan) 50%, var(--highlight))
|
||||
var(--bg-contrast-amount),
|
||||
transparent
|
||||
);
|
||||
--background-modifier-border-focus: color-mix(
|
||||
in srgb,
|
||||
var(--cyan) 40%,
|
||||
transparent
|
||||
);
|
||||
--nav-item-background-active: color-mix(
|
||||
in srgb,
|
||||
var(--cyan) var(--active-contrast-amount),
|
||||
transparent
|
||||
);
|
||||
}
|
||||
|
||||
/* ------------------------------- 20 Prefix -------------------------------- */
|
||||
.nav-folder-title[data-path^="20"] {
|
||||
color: var(--light-blue);
|
||||
--nav-item-color-hover: color-mix(
|
||||
in srgb,
|
||||
var(--light-blue) var(--fg-contrast-amount),
|
||||
var(--contrast-color)
|
||||
);
|
||||
--nav-item-background-hover: color-mix(
|
||||
in srgb,
|
||||
var(--light-blue) var(--bg-contrast-amount),
|
||||
transparent
|
||||
);
|
||||
--background-modifier-border-focus: color-mix(
|
||||
in srgb,
|
||||
var(--light-blue) 40%,
|
||||
transparent
|
||||
);
|
||||
--nav-collapse-icon-color: color-mix(
|
||||
in srgb,
|
||||
var(--light-blue) 60%,
|
||||
transparent
|
||||
);
|
||||
}
|
||||
.nav-folder-title[data-path^="20"]:hover {
|
||||
--nav-collapse-icon-color: color-mix(
|
||||
in srgb,
|
||||
var(--light-blue) 60%,
|
||||
var(--contrast-color)
|
||||
);
|
||||
}
|
||||
.tree-item-children .nav-folder:has(.nav-folder-title[data-path^="20"]) {
|
||||
--nav-indentation-guide-color: color-mix(
|
||||
in srgb,
|
||||
var(--light-blue) var(--medium-contrast-amount),
|
||||
transparent
|
||||
);
|
||||
}
|
||||
.tree-item-children
|
||||
.nav-folder:has(.nav-folder-title[data-path^="20"])
|
||||
.nav-file-title {
|
||||
color: color-mix(
|
||||
in srgb,
|
||||
var(--light-blue) var(--medium-contrast-amount),
|
||||
var(--default-text-color)
|
||||
);
|
||||
--nav-item-background-hover: color-mix(
|
||||
in srgb,
|
||||
color-mix(in srgb, var(--light-blue) 50%, var(--highlight))
|
||||
var(--bg-contrast-amount),
|
||||
transparent
|
||||
);
|
||||
--background-modifier-border-focus: color-mix(
|
||||
in srgb,
|
||||
var(--light-blue) 40%,
|
||||
transparent
|
||||
);
|
||||
--nav-item-background-active: color-mix(
|
||||
in srgb,
|
||||
var(--light-blue) var(--active-contrast-amount),
|
||||
transparent
|
||||
);
|
||||
}
|
||||
|
||||
/* ------------------------------- 30 Prefix -------------------------------- */
|
||||
.nav-folder-title[data-path^="30"] {
|
||||
color: var(--blue);
|
||||
--nav-item-color-hover: color-mix(
|
||||
in srgb,
|
||||
var(--blue) var(--fg-contrast-amount),
|
||||
var(--contrast-color)
|
||||
);
|
||||
--nav-item-background-hover: color-mix(
|
||||
in srgb,
|
||||
var(--blue) var(--bg-contrast-amount),
|
||||
transparent
|
||||
);
|
||||
--background-modifier-border-focus: color-mix(
|
||||
in srgb,
|
||||
var(--blue) 40%,
|
||||
transparent
|
||||
);
|
||||
--nav-collapse-icon-color: color-mix(in srgb, var(--blue) 60%, transparent);
|
||||
}
|
||||
.nav-folder-title[data-path^="30"]:hover {
|
||||
--nav-collapse-icon-color: color-mix(
|
||||
in srgb,
|
||||
var(--blue) 60%,
|
||||
var(--contrast-color)
|
||||
);
|
||||
}
|
||||
.tree-item-children .nav-folder:has(.nav-folder-title[data-path^="30"]) {
|
||||
--nav-indentation-guide-color: color-mix(
|
||||
in srgb,
|
||||
var(--blue) var(--medium-contrast-amount),
|
||||
transparent
|
||||
);
|
||||
}
|
||||
.tree-item-children
|
||||
.nav-folder:has(.nav-folder-title[data-path^="30"])
|
||||
.nav-file-title {
|
||||
color: color-mix(
|
||||
in srgb,
|
||||
var(--blue) var(--medium-contrast-amount),
|
||||
var(--default-text-color)
|
||||
);
|
||||
--nav-item-background-hover: color-mix(
|
||||
in srgb,
|
||||
color-mix(in srgb, var(--blue) 50%, var(--highlight))
|
||||
var(--bg-contrast-amount),
|
||||
transparent
|
||||
);
|
||||
--background-modifier-border-focus: color-mix(
|
||||
in srgb,
|
||||
var(--blue) 40%,
|
||||
transparent
|
||||
);
|
||||
--nav-item-background-active: color-mix(
|
||||
in srgb,
|
||||
var(--blue) var(--active-contrast-amount),
|
||||
transparent
|
||||
);
|
||||
}
|
||||
|
||||
/* ------------------------------- 40 Prefix -------------------------------- */
|
||||
.nav-folder-title[data-path^="40"] {
|
||||
color: var(--violet);
|
||||
--nav-item-color-hover: color-mix(
|
||||
in srgb,
|
||||
var(--violet) var(--fg-contrast-amount),
|
||||
var(--contrast-color)
|
||||
);
|
||||
--nav-item-background-hover: color-mix(
|
||||
in srgb,
|
||||
var(--violet) var(--bg-contrast-amount),
|
||||
transparent
|
||||
);
|
||||
--background-modifier-border-focus: color-mix(
|
||||
in srgb,
|
||||
var(--violet) 40%,
|
||||
transparent
|
||||
);
|
||||
--nav-collapse-icon-color: color-mix(in srgb, var(--violet) 60%, transparent);
|
||||
}
|
||||
.nav-folder-title[data-path^="40"]:hover {
|
||||
--nav-collapse-icon-color: color-mix(
|
||||
in srgb,
|
||||
var(--violet) 60%,
|
||||
var(--contrast-color)
|
||||
);
|
||||
}
|
||||
.tree-item-children .nav-folder:has(.nav-folder-title[data-path^="40"]) {
|
||||
--nav-indentation-guide-color: color-mix(
|
||||
in srgb,
|
||||
var(--violet) var(--medium-contrast-amount),
|
||||
transparent
|
||||
);
|
||||
}
|
||||
.tree-item-children
|
||||
.nav-folder:has(.nav-folder-title[data-path^="40"])
|
||||
.nav-file-title {
|
||||
color: color-mix(
|
||||
in srgb,
|
||||
var(--violet) var(--medium-contrast-amount),
|
||||
var(--default-text-color)
|
||||
);
|
||||
--nav-item-background-hover: color-mix(
|
||||
in srgb,
|
||||
color-mix(in srgb, var(--violet) 50%, var(--highlight))
|
||||
var(--bg-contrast-amount),
|
||||
transparent
|
||||
);
|
||||
--background-modifier-border-focus: color-mix(
|
||||
in srgb,
|
||||
var(--violet) 40%,
|
||||
transparent
|
||||
);
|
||||
--nav-item-background-active: color-mix(
|
||||
in srgb,
|
||||
var(--violet) var(--active-contrast-amount),
|
||||
transparent
|
||||
);
|
||||
}
|
||||
|
||||
/* ------------------------------- 50 Prefix -------------------------------- */
|
||||
.nav-folder-title[data-path^="50"] {
|
||||
color: var(--purple);
|
||||
--nav-item-color-hover: color-mix(
|
||||
in srgb,
|
||||
var(--purple) var(--fg-contrast-amount),
|
||||
var(--contrast-color)
|
||||
);
|
||||
--nav-item-background-hover: color-mix(
|
||||
in srgb,
|
||||
var(--purple) var(--bg-contrast-amount),
|
||||
transparent
|
||||
);
|
||||
--background-modifier-border-focus: color-mix(
|
||||
in srgb,
|
||||
var(--purple) 40%,
|
||||
transparent
|
||||
);
|
||||
--nav-collapse-icon-color: color-mix(in srgb, var(--purple) 60%, transparent);
|
||||
}
|
||||
.nav-folder-title[data-path^="50"]:hover {
|
||||
--nav-collapse-icon-color: color-mix(
|
||||
in srgb,
|
||||
var(--purple) 60%,
|
||||
var(--contrast-color)
|
||||
);
|
||||
}
|
||||
.tree-item-children .nav-folder:has(.nav-folder-title[data-path^="50"]) {
|
||||
--nav-indentation-guide-color: color-mix(
|
||||
in srgb,
|
||||
var(--purple) var(--medium-contrast-amount),
|
||||
transparent
|
||||
);
|
||||
}
|
||||
.tree-item-children
|
||||
.nav-folder:has(.nav-folder-title[data-path^="50"])
|
||||
.nav-file-title {
|
||||
color: color-mix(
|
||||
in srgb,
|
||||
var(--purple) var(--medium-contrast-amount),
|
||||
var(--default-text-color)
|
||||
);
|
||||
--nav-item-background-hover: color-mix(
|
||||
in srgb,
|
||||
color-mix(in srgb, var(--purple) 50%, var(--highlight))
|
||||
var(--bg-contrast-amount),
|
||||
transparent
|
||||
);
|
||||
--background-modifier-border-focus: color-mix(
|
||||
in srgb,
|
||||
var(--purple) 40%,
|
||||
transparent
|
||||
);
|
||||
--nav-item-background-active: color-mix(
|
||||
in srgb,
|
||||
var(--purple) var(--active-contrast-amount),
|
||||
transparent
|
||||
);
|
||||
}
|
||||
|
||||
/* ------------------------------- 60 Prefix -------------------------------- */
|
||||
.nav-folder-title[data-path^="60"] {
|
||||
color: var(--magenta);
|
||||
--nav-item-color-hover: color-mix(
|
||||
in srgb,
|
||||
var(--magenta) var(--fg-contrast-amount),
|
||||
var(--contrast-color)
|
||||
);
|
||||
--nav-item-background-hover: color-mix(
|
||||
in srgb,
|
||||
var(--magenta) var(--bg-contrast-amount),
|
||||
transparent
|
||||
);
|
||||
--background-modifier-border-focus: color-mix(
|
||||
in srgb,
|
||||
var(--magenta) 40%,
|
||||
transparent
|
||||
);
|
||||
--nav-collapse-icon-color: color-mix(
|
||||
in srgb,
|
||||
var(--magenta) 60%,
|
||||
transparent
|
||||
);
|
||||
}
|
||||
.nav-folder-title[data-path^="60"]:hover {
|
||||
--nav-collapse-icon-color: color-mix(
|
||||
in srgb,
|
||||
var(--magenta) 60%,
|
||||
var(--contrast-color)
|
||||
);
|
||||
}
|
||||
.tree-item-children .nav-folder:has(.nav-folder-title[data-path^="60"]) {
|
||||
--nav-indentation-guide-color: color-mix(
|
||||
in srgb,
|
||||
var(--magenta) var(--medium-contrast-amount),
|
||||
transparent
|
||||
);
|
||||
}
|
||||
.tree-item-children
|
||||
.nav-folder:has(.nav-folder-title[data-path^="60"])
|
||||
.nav-file-title {
|
||||
color: color-mix(
|
||||
in srgb,
|
||||
var(--magenta) var(--medium-contrast-amount),
|
||||
var(--default-text-color)
|
||||
);
|
||||
--nav-item-background-hover: color-mix(
|
||||
in srgb,
|
||||
color-mix(in srgb, var(--magenta) 50%, var(--highlight))
|
||||
var(--bg-contrast-amount),
|
||||
transparent
|
||||
);
|
||||
--background-modifier-border-focus: color-mix(
|
||||
in srgb,
|
||||
var(--magenta) 40%,
|
||||
transparent
|
||||
);
|
||||
--nav-item-background-active: color-mix(
|
||||
in srgb,
|
||||
var(--magenta) var(--active-contrast-amount),
|
||||
transparent
|
||||
);
|
||||
}
|
||||
|
||||
/* ------------------------------- 70 Prefix -------------------------------- */
|
||||
.nav-folder-title[data-path^="70"] {
|
||||
color: var(--hot-red);
|
||||
--nav-item-color-hover: color-mix(
|
||||
in srgb,
|
||||
var(--hot-red) var(--fg-contrast-amount),
|
||||
var(--contrast-color)
|
||||
);
|
||||
--nav-item-background-hover: color-mix(
|
||||
in srgb,
|
||||
var(--hot-red) var(--bg-contrast-amount),
|
||||
transparent
|
||||
);
|
||||
--background-modifier-border-focus: color-mix(
|
||||
in srgb,
|
||||
var(--hot-red) 40%,
|
||||
transparent
|
||||
);
|
||||
--nav-collapse-icon-color: color-mix(
|
||||
in srgb,
|
||||
var(--hot-red) 60%,
|
||||
transparent
|
||||
);
|
||||
}
|
||||
.nav-folder-title[data-path^="70"]:hover {
|
||||
--nav-collapse-icon-color: color-mix(
|
||||
in srgb,
|
||||
var(--hot-red) 60%,
|
||||
var(--contrast-color)
|
||||
);
|
||||
}
|
||||
.tree-item-children .nav-folder:has(.nav-folder-title[data-path^="70"]) {
|
||||
--nav-indentation-guide-color: color-mix(
|
||||
in srgb,
|
||||
var(--hot-red) var(--medium-contrast-amount),
|
||||
transparent
|
||||
);
|
||||
}
|
||||
.tree-item-children
|
||||
.nav-folder:has(.nav-folder-title[data-path^="70"])
|
||||
.nav-file-title {
|
||||
color: color-mix(
|
||||
in srgb,
|
||||
var(--hot-red) var(--medium-contrast-amount),
|
||||
var(--default-text-color)
|
||||
);
|
||||
--nav-item-background-hover: color-mix(
|
||||
in srgb,
|
||||
color-mix(in srgb, var(--hot-red) 50%, var(--highlight))
|
||||
var(--bg-contrast-amount),
|
||||
transparent
|
||||
);
|
||||
--background-modifier-border-focus: color-mix(
|
||||
in srgb,
|
||||
var(--hot-red) 40%,
|
||||
transparent
|
||||
);
|
||||
--nav-item-background-active: color-mix(
|
||||
in srgb,
|
||||
var(--hot-red) var(--active-contrast-amount),
|
||||
transparent
|
||||
);
|
||||
}
|
||||
|
||||
/* ------------------------------- 99 Prefix -------------------------------- */
|
||||
.nav-folder-title[data-path^="99"] {
|
||||
color: var(--cool-gray);
|
||||
--nav-item-color-hover: color-mix(
|
||||
in srgb,
|
||||
var(--cool-gray) var(--fg-contrast-amount),
|
||||
var(--contrast-color)
|
||||
);
|
||||
--nav-item-background-hover: color-mix(
|
||||
in srgb,
|
||||
var(--cool-gray) var(--bg-contrast-amount),
|
||||
transparent
|
||||
);
|
||||
--background-modifier-border-focus: color-mix(
|
||||
in srgb,
|
||||
var(--cool-gray) 40%,
|
||||
transparent
|
||||
);
|
||||
--nav-collapse-icon-color: color-mix(
|
||||
in srgb,
|
||||
var(--cool-gray) 60%,
|
||||
transparent
|
||||
);
|
||||
}
|
||||
.nav-folder-title[data-path^="99"]:hover {
|
||||
--nav-collapse-icon-color: color-mix(
|
||||
in srgb,
|
||||
var(--cool-gray) 60%,
|
||||
var(--contrast-color)
|
||||
);
|
||||
}
|
||||
.tree-item-children .nav-folder:has(.nav-folder-title[data-path^="99"]) {
|
||||
--nav-indentation-guide-color: color-mix(
|
||||
in srgb,
|
||||
var(--cool-gray) var(--medium-contrast-amount),
|
||||
transparent
|
||||
);
|
||||
}
|
||||
.tree-item-children
|
||||
.nav-folder:has(.nav-folder-title[data-path^="99"])
|
||||
.nav-file-title {
|
||||
color: color-mix(
|
||||
in srgb,
|
||||
var(--cool-gray) var(--medium-contrast-amount),
|
||||
var(--default-text-color)
|
||||
);
|
||||
--nav-item-background-hover: color-mix(
|
||||
in srgb,
|
||||
color-mix(in srgb, var(--cool-gray) 50%, var(--highlight))
|
||||
var(--bg-contrast-amount),
|
||||
transparent
|
||||
);
|
||||
--background-modifier-border-focus: color-mix(
|
||||
in srgb,
|
||||
var(--cool-gray) 40%,
|
||||
transparent
|
||||
);
|
||||
--nav-item-background-active: color-mix(
|
||||
in srgb,
|
||||
var(--cool-gray) var(--active-contrast-amount),
|
||||
transparent
|
||||
);
|
||||
}
|
||||
+527
@@ -0,0 +1,527 @@
|
||||
/* === README ===
|
||||
Snippet: MCL Gallery Cards / Author: Faiz Khuzaimah / twitter: @faizkhuzaimah / github: https://github.com/efemkay
|
||||
|
||||
ver 0.9.9 (draft upd 2024-01-14)
|
||||
- minor performance improvement by reducing image gallery has() scope, focusing on editing view
|
||||
ver 0.9.8 (updated 2023-11-03)
|
||||
- re-fixes #50
|
||||
v0.9.7 (updated 2023-10-13)
|
||||
- fixes #50 i.e. Gallery Card not working with Minimal due to Minimal max-width specificity
|
||||
Ver 0.9.5 (updated 2023-07-30)
|
||||
- fixes on minimal float affecting Minimal own wide table feature
|
||||
- fixes on properties padding affecting Minimal
|
||||
- fixes Mermaid zoom in Editing View
|
||||
Ver 0.9.4 (updated 2023-07-06)
|
||||
- improve Float Image for editing text in Editing View
|
||||
- fix for Float Image for Minimal (and respect width settings). No longer require cssClass "minimal-float" but require Style Settings
|
||||
- improve Image Gallery especially for use in Live Preview without callout
|
||||
Ver 0.9.2 (updated 2023-05-27)
|
||||
- fix div width for float image also affecting normal image embed
|
||||
Ver 0.9.0 (updated 2023-04-01)
|
||||
- image float
|
||||
- banner background
|
||||
- card view for dataview table
|
||||
|
||||
This snippet is part of MCL collection of snippets for customising layout, and it provides the following
|
||||
- "gallery" callout-metadata i.e. [!<any-callout>|gallery] for flex/grid layout
|
||||
- use together with MCL Multi Column [!blank-container] for invisible container
|
||||
- YAML `cssClass: image-gallery` to achieve similar to callout but using only Contextual Typography plugin & <p>
|
||||
- Image Zoom via css
|
||||
- Dimension control for images in lists <ul>
|
||||
|
||||
Credits to @kepano Minimal Theme and @SlRvb ITS Theme for inspiration
|
||||
*/
|
||||
/* === Master Setting === */
|
||||
|
||||
/* set the defaults */
|
||||
body{
|
||||
--img-border-radius: 15px;
|
||||
--img-max-height: 300px;
|
||||
--img-max-width: 350px;
|
||||
--img-max-height-list: 270px;
|
||||
--img-max-width-list: 300px;
|
||||
--callout-gallery-gap: 5px;
|
||||
--gallery-snw-display: none;
|
||||
}
|
||||
|
||||
img {border-radius: var(--img-border-radius);}
|
||||
|
||||
|
||||
|
||||
/* === Image Gallery using <p> and Callout === */
|
||||
|
||||
/* Editing and Reading View - Gallery using <p> and Callout. Using <p> (in Reading View) to contain and format as gallery view using metadata="gallery" to contain and format as gallery view */
|
||||
/* Create display: flex and key adjustment on margin and gap */
|
||||
.image-gallery .markdown-rendered div:has(> p .image-embed) > p,
|
||||
div[data-callout-metadata*="gallery"].callout > .callout-content > p
|
||||
{ display: flex; gap: var(--callout-gallery-gap); margin-top: calc( var(--callout-gallery-gap) ); margin-bottom: 0; }
|
||||
.image-gallery .markdown-rendered div:has(> p .image-embed) { margin-top: var(--callout-gallery-gap); }
|
||||
div[data-callout-metadata*="gallery"].callout > .callout-content { --callout-content-padding: 0.5rem 0 0 0; }
|
||||
/* Introduce subtle border and make the gallery as object-fit: cover */
|
||||
.image-gallery .markdown-rendered div:has(> p .image-embed) > p img,
|
||||
div[data-callout-metadata*="gallery"].callout > .callout-content > p img
|
||||
{ max-height: var(--img-max-height); border: 1px solid var(--background-modifier-border); object-fit: cover; display: block;}
|
||||
/* display: block for img is important to control the hidden margin-bottom but for Minimal, it uses display: flex for top level divs which pose another "margin" issues no plan to solve yet as this is not critical */
|
||||
|
||||
/* Hack to emulate Reading View masonry in Editing View (for use without callout) - there's no <p> tag to be container but we can hack to use .cm-line with the help of :has() */
|
||||
/* improved the css performance */
|
||||
.image-gallery div.cm-line:not(.HyperMD-list-line):not(.cm-active):has(> .image-embed:not(.cm-callout)) { display: flex; gap: var(--callout-gallery-gap); --img-gallery__buffer-display: none; }
|
||||
.image-gallery div.cm-line > :is(img.cm-widgetBuffer,span[contenteditable]) { display: var(--img-gallery__buffer-display) !important; }
|
||||
.image-gallery div:not(.cm-callout):not(.HyperMD-list-line).image-embed img { max-height: calc(var(--img-max-height)/1); display: unset; object-fit: cover; }
|
||||
|
||||
|
||||
/* -- Adjustment for Themes -- */
|
||||
|
||||
/* Special Adjustment for Shimmering Focus. Reading View. Overriding max-width */
|
||||
body:not(.is-mobile) .app-container.app-container .image-gallery p img[src],
|
||||
body:not(.is-mobile) .app-container.app-container div[data-callout-metadata*="gallery"].callout img[src]
|
||||
{ max-width: 100%; width: unset; margin-block: unset;}
|
||||
|
||||
/* Minimal. Editing View. Left margin. */
|
||||
.markdown-source-view.mod-cm6 div[data-callout-metadata*="gallery"] .internal-embed.image-embed { margin-left: 0 !important; width: unset;}
|
||||
|
||||
/* Minimal. Editing View. Revert img max width */
|
||||
body[class*="minimal-tab-title"] .markdown-source-view.mod-cm6.is-readable-line-width .cm-contentContainer.cm-contentContainer>.cm-content>div:has(.image-embed) img { max-width: 100%; }
|
||||
|
||||
/* Minimal. Disable Max Width */
|
||||
body[class*="minimal-tab-title"] {
|
||||
&.full-width-media .markdown-preview-view .image-embed img:not(.link-favicon):not(.emoji):not([width]),
|
||||
&.full-width-media .markdown-preview-view img:not(.link-favicon):not(.emoji):not([width]) {
|
||||
/* max-width: 100%; */
|
||||
}
|
||||
}
|
||||
|
||||
/* -- Adjustment for Plugins -- */
|
||||
|
||||
/* Special Adjustment - for SNW plugin */
|
||||
.image-gallery div[data-embed-type="image"] > p .snw-embed-preview,
|
||||
.image-gallery .internal-embed.image-embed ~ .snw-reference.snw-embed,
|
||||
div[data-callout-metadata*="gallery"].callout > .callout-content > p .snw-embed-preview
|
||||
{ display: var(--gallery-snw-display); width: min-content; height: min-content; }
|
||||
div[data-callout-metadata*="gallery"].callout > .callout-content > p .internal-embed.image-embed ~ br {display: none;}
|
||||
|
||||
|
||||
/* === Images in Lists === */
|
||||
/* limit the width when in a list (ul only) */
|
||||
body:not(.list-image-control-off) :is(.HyperMD-list-line,ul) .image-embed.image-embed img:not([width])
|
||||
{ max-height: var(--img-max-height-list); max-width: var(--img-max-width-list); margin-inline: 0; display: unset; object-fit: cover; }
|
||||
|
||||
/* clamping max width to viewport when in mobile. possibly can adopt for desktop as well */
|
||||
body.is-mobile:not(.list-image-control-off) :is(.HyperMD-list-line,ul) .image-embed.image-embed img:not([width])
|
||||
{ max-width: clamp(calc(var(--img-max-width-list)/2), var(--img-max-width-list), 100%);}
|
||||
|
||||
/*
|
||||
div:not(.cm-callout).image-embed img { max-height: 200px; max-width: 300px; height: 200px; object-fit: cover;}
|
||||
*/
|
||||
|
||||
|
||||
/* === Image Float === */
|
||||
/* variables */
|
||||
body {
|
||||
--float-left-margin: 4px 12px 4px 0;
|
||||
--float-right-margin: 4px 0 4px 12px;
|
||||
--float-snw-display: none;
|
||||
}
|
||||
|
||||
/* float in both Live Preview and Reading View */
|
||||
img[alt^="left"], img[alt^="float-left"] { float: left; margin: var(--float-left-margin); }
|
||||
img[alt^="right"], img[alt^="float-right"] { float: right; margin: var(--float-right-margin); }
|
||||
/* disable box control for parent div to the float */
|
||||
.internal-embed.image-embed[alt*="float-left"],
|
||||
.internal-embed.image-embed[alt*="float-right"]
|
||||
{display: contents; }
|
||||
|
||||
/* provide a float "escape" by allowing user to to add <div class="no-float"></div> */
|
||||
div.no-float {clear: both; display: inline-grid; height: 1px; width: 100%; background-color: var(--background-secondary);}
|
||||
|
||||
/* remove the br between image and paragraph in Reading View */
|
||||
p > :is(.image-embed[alt*="left"],.image-embed[alt*="right"]) + br {display: none;}
|
||||
|
||||
|
||||
/* -- Adjustment for Plugins */
|
||||
|
||||
/* Breadcrumbs with Minimal. Fix to support plugin */
|
||||
body[class*="minimal-tab-title"].contextual-typography .minimal-float.markdown-preview-view.markdown-preview-view .BC-trail.markdown-preview-sizer { display: flex; }
|
||||
|
||||
/* SNW plugin */
|
||||
.internal-embed.image-embed:is([alt="left"],[alt*="|left"],[alt*="left|"],[alt*="float-left"],[alt="right"],[alt*="|right"],[alt*="right|"],[alt*="float-right"]) + .snw-reference.snw-embed { display: var(--float-snw-display); }
|
||||
.internal-embed.image-embed:is([alt="left"],[alt*="|left"],[alt*="left|"],[alt*="float-left"],[alt="right"],[alt*="|right"],[alt*="right|"],[alt*="float-right"]) + .snw-reference.snw-embed + br { display: none;}
|
||||
|
||||
|
||||
/* -- Adjustment for Themes -- */
|
||||
|
||||
/* Blue Topaz. uses body[class*="notebook-liked-markdown-page"] as identifier */
|
||||
body[class*="notebook-liked-markdown-page"] .view-content .internal-embed.is-loaded img[alt*="left"]:not([class*="emoji"]) { margin: var(--float-left-margin) !important; }
|
||||
body[class*="notebook-liked-markdown-page"] .view-content .internal-embed.is-loaded img[alt*="right"]:not([class*="emoji"]) { margin: var(--float-right-margin) !important; }
|
||||
|
||||
/* Minimal. Uses body[class*="minimal-tab-title"] as identifier */
|
||||
body[class*="minimal-tab-title"] .markdown-source-view.mod-cm6 .internal-embed.image-embed[alt*="float"] {width: auto !important; max-width: unset; margin-left: 0 !important;}
|
||||
|
||||
/* Minimal. Minimal Float. (duplicate from Multi Column. Redid "minimal-float" for Minimal V7.0 */
|
||||
/* minimal own wide table will not work together with float */
|
||||
/* undo the Minimal "cm-line" sizing */
|
||||
:is(body[class*="minimal-tab-title"] .markdown-source-view.mod-cm6.is-readable-line-width:not(:has(table)), .minimal-float.markdown-source-view.mod-cm6) .cm-contentContainer.cm-contentContainer>.cm-content>div,
|
||||
:is(body[class*="minimal-tab-title"] .markdown-source-view.mod-cm6.is-readable-line-width:not(:has(table)), .minimal-float.markdown-source-view.mod-cm6) .cm-sizer>.embedded-backlinks,
|
||||
:is(body[class*="minimal-tab-title"] .markdown-source-view.mod-cm6.is-readable-line-width:not(:has(table)), .minimal-float.markdown-source-view.mod-cm6) .cm-sizer>.inline-title,
|
||||
:is(body[class*="minimal-tab-title"] .markdown-source-view.mod-cm6.is-readable-line-width:not(:has(table)), .minimal-float.markdown-source-view.mod-cm6) .cm-sizer>.metadata-container
|
||||
{ max-width: none; width: auto; }
|
||||
/* Re-set the default "cm-sizer" width but respect Minimal Settings */
|
||||
:is(body[class*="minimal-tab-title"] .markdown-source-view.mod-cm6.is-readable-line-width:not(:has(table)), .minimal-float.markdown-source-view.mod-cm6) .cm-sizer { max-width: var(--max-width); width: var(--line-width); }
|
||||
|
||||
|
||||
/* to be deleted by 30 Sep 2023 */
|
||||
/* Duplicate from Multi Column, in case users don't enable that snippet (row 426-437) */
|
||||
/* Special Adjustment for Minimal theme. Undo the theme flex layout by default. To apply per note basis */
|
||||
/* .contextual-typography .minimal-float.markdown-preview-view.markdown-preview-view .markdown-preview-sizer { display: unset; } */
|
||||
/* Special Adjustment for Minimal theme Live Preview float support. Need to revert cm-content width to default theme but cm-embed to auto */
|
||||
/* body[class*="minimal-tab-title"] .minimal-float:not([class*="wide-"]).markdown-source-view.mod-cm6.is-readable-line-width .cm-contentContainer { width: calc(var(--line-width-adaptive) - var(--folding-offset)); max-width: calc(var(--max-width) - var(--folding-offset)); margin-right: auto; margin-left: max(calc(50% + var(--folding-offset) - var(--line-width-adaptive)/ 2), calc(50% + var(--folding-offset) - var(--max-width)/ 2))!important; } */
|
||||
/* .minimal-float:not([class*="wide-"]).markdown-source-view.mod-cm6.is-readable-line-width .cm-line { width: auto; max-width: 100%; margin-left: 0 !important; } */
|
||||
/* .minimal-float:not([class*="wide-"]).markdown-source-view.mod-cm6.is-readable-line-width .cm-embed-block.cm-callout> :is(.callout[data-callout-metadata*="left"], .callout[data-callout-metadata*="right"]) { max-width: 98%; } */
|
||||
/* .minimal-float:not([class*="wide-"]).markdown-source-view.mod-cm6 .cm-embed-block.cm-callout > .callout { width: auto; } */
|
||||
/* Special Adjustment for Minimal theme Live Preview float support. Undo margin-left for Image */
|
||||
/* .minimal-float:not([class*="wide-"]).markdown-source-view.mod-cm6 .cm-embed-block.cm-callout :is(.callout[data-callout-metadata*="left"], .callout[data-callout-metadata*="right"]) .internal-embed.image-embed { margin-left: auto !important; } */
|
||||
|
||||
|
||||
|
||||
/* === Image Zoom === */
|
||||
/* must check "Enable Image Zoom via CSS" via Style Settings */
|
||||
|
||||
/* set scale to 100% for images */
|
||||
.image-zoom .view-content :is(.cm-editor, .markdown-preview-view) img { max-width: 100%; cursor: zoom-in; }
|
||||
|
||||
/* css zoom for images */
|
||||
body.image-zoom:not(.is-mobile) .view-content :is(.cm-editor,.markdown-preview-view) img:active,
|
||||
body.image-zoom:not(.is-mobile) .view-content .image-embed:active,
|
||||
.image-zoom :is(.HyperMD-list-line,ul) .image-embed.image-embed img:active {
|
||||
cursor: zoom-out; display: block; background: rgba(0,0,0,0.5);
|
||||
max-height: calc(100% + 1px); max-width: calc(100% - 20px); height: calc(100% + 1px); width: 100%;
|
||||
object-fit: contain; margin: -0.5px auto 0; padding: 0; text-align: center;
|
||||
position: fixed; left: 0; right: 0; bottom: 0; z-index: 100;
|
||||
}
|
||||
|
||||
/* === Mermaid SVG max-width 100% and zoom on click === */
|
||||
/* for Mermaid SVG zoom, must check "Enable Mermaid Zoom via CSS" via Style Settings */
|
||||
|
||||
/* set scale to 100% for mermaid diagram */
|
||||
body:not(.mermaid-scale-off) .view-content :is(.cm-editor, .markdown-preview-view) .mermaid svg { max-width: 100%; height: 100%}
|
||||
body.mermaid-scale-off .mermaid { overflow-x: auto; }
|
||||
|
||||
.mermaid-zoom .view-content .mermaid svg { cursor: zoom-in; }
|
||||
|
||||
/* css zoom for mermaid diagram */
|
||||
body.mermaid-zoom:not(.is-mobile) .view-content .markdown-reading-view .mermaid svg:active {
|
||||
cursor: zoom-out; display: block; object-fit:contain; margin: -0.5px auto 0; padding: 0;
|
||||
max-height: calc(100% + 1px); max-width: calc(100% - 20px); height: calc(100% + 1px); width: 100%;
|
||||
text-align: center; z-index: 100; position: fixed; left: 0; right: 0; bottom: 0; background: rgba(0,0,0,0.8);
|
||||
}
|
||||
/* editing view */
|
||||
body.mermaid-zoom:not(.is-mobile) .markdown-source-view .cm-embed-block:has(.mermaid svg:active) {
|
||||
text-align: center;
|
||||
top: 0; left: 0; right: 0; bottom: 0;
|
||||
z-index: 100;
|
||||
position: fixed;
|
||||
background: rgba(0,0,0,0.8)
|
||||
}
|
||||
body.mermaid-zoom:not(.is-mobile) .markdown-source-view. .cm-embed-block:has(.mermaid svg:active) .mermaid { overflow-x: hidden; }
|
||||
body.mermaid-zoom:not(.is-mobile) .markdown-source-view .mermaid svg:active {
|
||||
cursor: zoom-out;
|
||||
position: fixed;
|
||||
width: 100%; height: 100%;
|
||||
top: 0; left: 0;
|
||||
}
|
||||
|
||||
|
||||
/* === Dataview related ===*/
|
||||
|
||||
/* Change Dataview table into card view
|
||||
- no style settings option yet
|
||||
*/
|
||||
|
||||
body {
|
||||
--bg-color-dv-card: var(--background-modifier-backlinks);
|
||||
--border-color-dv-card: var(--background-modifier-border);
|
||||
}
|
||||
.dv-card table.dataview { position: relative; display: flex; flex-direction: column; font-size: 0.9em; }
|
||||
|
||||
/* convert the thead */
|
||||
.dv-card table.dataview thead { display: flex; flex-flow: row-reverse; border-radius: var(--size-4-2); position: relative; padding-bottom: 0.4em; }
|
||||
.dv-card table.dataview thead tr { margin: 0; }
|
||||
.dv-card:is(*,.markdown-source-view.mod-cm6) table.dataview.table-view-table thead th { padding-left: 0; padding: 0.2em 1.3em 0 0.3em; border-width: 0; font-size: 0.9rem; color: var(--text-faint); font-family: var(--h3-font);}
|
||||
|
||||
/* convert the tbody into card like structure */
|
||||
.dv-card table.dataview tbody { display: grid; grid-template-columns: repeat(auto-fit, minmax(230px, 1fr)); grid-gap: var(--size-4-2); }
|
||||
.dv-card table.dataview tbody tr { background-color: var(--bg-color-dv-card); display: flex; flex-direction: column; border: 1px solid var(--border-color-dv-card); border-radius: var(--size-4-2); margin-top: 0; margin-bottom: 0; }
|
||||
.dv-card table.dataview tbody tr:hover { background-color: var(--background-secondary) !important; }
|
||||
.dv-card table.dataview tbody td { display: flex; padding-block: 0; }
|
||||
.dv-card table.dataview tbody td:first-child { font-weight: var(--bold-weight); }
|
||||
.dv-card table.dataview tbody td:not(:first-child) { color: var(--text-muted); font-size: 0.9em; }
|
||||
.dv-card table.dataview tbody td:last-child { padding-bottom: 0.5em; }
|
||||
.dv-card table.dataview tbody td:not(:last-child):not(:first-child)>.el-p:not(.el-embed-image) { border-bottom: 1px solid var(--border-color-dv-card); width: 100%; }
|
||||
.dv-card table.dataview tbody td > * { padding-block: 0.5em; }
|
||||
.dv-card table.dataview tbody td > ul { padding-block: 0.2em; }
|
||||
|
||||
/* Remove the li indent and other cosmetics */
|
||||
.dv-card table.dataview :is(ul,ol) { padding-inline-start: 0; margin-block: 0 !important; }
|
||||
.dv-card table.dataview li:not(:last-of-type).dataview-result-list-li {border-bottom: 1px dashed DarkSlateGray;}
|
||||
.dv-card table.dataview li.dataview-result-list-li::marker { color: transparent; }
|
||||
|
||||
/* Special Adjustment for Stardust's Table Enhancer plugin */
|
||||
table.dataview .table-height-adjust th, .table-height-adjust tr { height: revert !important; }
|
||||
|
||||
/* Special Adjustment for Listive theme */
|
||||
.dv-card .table-view-table li:not(.cards li.dataview-result-list-li) {margin-left: revert; }
|
||||
|
||||
/* Special Adjustment for thead background for most themes */
|
||||
.dv-card thead :is(tr, th.table-view-th) {background-color: transparent;}
|
||||
.dv-card thead :is(tr, th) {border-width: 0;}
|
||||
|
||||
|
||||
|
||||
/*=== MCL Banner ===*/
|
||||
/* banner using css only -- https://forum.obsidian.md/t/css-how-to-style-the-first-image-in-a-note/52839/ */
|
||||
|
||||
body {
|
||||
--mcl-banner-height-normal: 200px;
|
||||
--mcl-banner-height-tall: 300px;
|
||||
--mcl-banner-overlap-title-adj: 0px;
|
||||
--mcl-banner-no-title-adj: 0px;
|
||||
}
|
||||
body:not(.show-inline-title) .markdown-reading-view {
|
||||
--mcl-banner-no-title-adj: 25px; /* reading view bigger to adjust for minor overlap */
|
||||
}
|
||||
body:not(.show-inline-title) .markdown-source-view {
|
||||
--mcl-banner-no-title-adj: 15px;
|
||||
}
|
||||
|
||||
|
||||
/* make the div (in LP) containing the image doesn't control the css box-sizing */
|
||||
.markdown-source-view .cm-line:has(> .internal-embed.image-embed > img[alt*="mcl-banner"]),
|
||||
.markdown-source-view :is(.internal-embed.image-embed, .cm-line):has(> img[alt*="mcl-banner"]) { display: contents; }
|
||||
|
||||
/* original forum post snippet with minor tweak */
|
||||
img[alt*="mcl-banner"] {
|
||||
position: absolute;
|
||||
top: 0; left: 0;
|
||||
height: var(--mcl-banner-height-normal); width: 100%;
|
||||
margin-right: auto; margin-left: auto;
|
||||
object-fit: cover; object-position: 50% 50%;
|
||||
overflow: hidden;
|
||||
user-select: none;
|
||||
/* z-index: -1; */
|
||||
}
|
||||
|
||||
img[alt*="mcl-banner"][alt*="gradient"] {
|
||||
-webkit-mask-image: -webkit-gradient(linear, left top, left bottom, color-stop(80%, rgba(0,0,0,1)), color-stop(100%, rgba(0,0,0,0)) );
|
||||
mask-image: linear-gradient(to bottom, rgba(0,0,0,1), rgba(0,0,0,0));
|
||||
}
|
||||
|
||||
/* padding to distance text content from banner V1 *//*
|
||||
.view-content:has(img[alt*="mcl-banner"]) .inline-title
|
||||
{ position: relative; padding-top: calc(var(--mcl-banner-height-normal) - 50px + var(--mcl-banner-overlap-title-adj) + var(--mcl-banner-no-title-adj)); z-index: 30; }
|
||||
.view-content:has(img[alt*="mcl-banner"][alt*="-tall"]) :is(.cm-content > div:first-child, .mod-header)
|
||||
{ padding-top: calc(var(--mcl-banner-height-tall) - 50px + var(--mcl-banner-overlap-title-adj) + var(--mcl-banner-no-title-adj) ); }
|
||||
|
||||
/* padding to distance text content from banner V2 */
|
||||
.view-content:has(img[alt*="mcl-banner"]) :is(.cm-sizer, .markdown-preview-section)
|
||||
{ padding-top: calc(var(--mcl-banner-height-normal) - 50px + var(--mcl-banner-overlap-title-adj) + var(--mcl-banner-no-title-adj)); }
|
||||
.view-content:has(img[alt*="mcl-banner"][alt*="-tall"]) :is(.cm-sizer, .markdown-preview-section)
|
||||
{ padding-top: calc(var(--mcl-banner-height-tall) - 50px + var(--mcl-banner-overlap-title-adj) + var(--mcl-banner-no-title-adj) ); }
|
||||
.view-content:has(img[alt*="mcl-banner"]) .inline-title
|
||||
{ position: relative; z-index: 30; }
|
||||
|
||||
|
||||
|
||||
/* add option to adjust vertical position by adding the alt metadata "higher" or "lower" */
|
||||
img[alt*="mcl-banner"][alt*="y-30"] { object-position: 50% 20%; }
|
||||
img[alt*="mcl-banner"][alt*="y-20"] { object-position: 50% 30%; }
|
||||
img[alt*="mcl-banner"][alt*="y-10"] { object-position: 50% 40%; }
|
||||
img[alt*="mcl-banner"][alt*="y+10"] { object-position: 50% 60%; }
|
||||
img[alt*="mcl-banner"][alt*="y+20"] { object-position: 50% 70%; }
|
||||
img[alt*="mcl-banner"][alt*="y+30"] { object-position: 50% 80%; }
|
||||
|
||||
/* tall adjustment */
|
||||
img[alt*="mcl-banner"][alt*="-tall"] { height: var(--mcl-banner-height-tall); }
|
||||
|
||||
|
||||
/* minor tweak for me, since i have snippet to make image has rounded corner */
|
||||
img[alt*="mcl-banner"] { border-radius: revert; }
|
||||
/* minor tweak for me, to hide snw block reference counter for the banner */
|
||||
.internal-embed.media-embed.image-embed.is-loaded + .snw-reference.snw-embed {display: none;}
|
||||
|
||||
|
||||
/* === Image Aspect Ratio === */
|
||||
/* Apply to any images using either hashtag after image url or image alt-text */
|
||||
.internal-embed.image-embed[src*="1-1"] > img,
|
||||
img[src*="1-1"],
|
||||
img[alt*="1-1"]
|
||||
{ aspect-ratio: 1/1; object-fit: cover; }
|
||||
.internal-embed.image-embed[src*="4-3"] > img,
|
||||
img[src*="4-3"],
|
||||
img[alt*="4-3"]
|
||||
{ aspect-ratio: 4/3; object-fit: cover; }
|
||||
.internal-embed.image-embed[src*="16-9"] > img,
|
||||
img[src*="16-9"],
|
||||
img[alt*="16-9"]
|
||||
{ aspect-ratio: 16/9; object-fit: cover; }
|
||||
|
||||
|
||||
/* === Image Caption === */
|
||||
/* This will only works with local images, web images cannot be supported
|
||||
mainly because obsidian doesn't render a parent div for the image.
|
||||
Local images with md link still works. */
|
||||
:is(.markdown-source-view.mod-cm6, .markdown-reading-view) .internal-embed.image-embed[src*="caption"] { display: inline-block; width: fit-content; }
|
||||
.image-embed[src*="caption"]::after { content: attr(alt); display: block; text-align: center; font-style: italic; }
|
||||
|
||||
|
||||
/* === ALPHA VERSION testing Timeline in lists === */
|
||||
/*
|
||||
.tag-mcltimeline > ul > li > *:not(ul) { text-align: center; align-self: baseline; }
|
||||
.tag-mcltimeline > ul > li {
|
||||
display: grid;
|
||||
grid-template-columns: 0 3fr 7fr;
|
||||
grid-template-rows: auto;
|
||||
grid-template-areas:
|
||||
"indicator timeline details"
|
||||
"indicator . details";
|
||||
grid-column-gap: 1em;
|
||||
|
||||
}
|
||||
.tag-mcltimeline > ul > li > ul { grid-area: details; text-align: left; }
|
||||
.tag-mcltimeline > ul > li > .collapse-indicator { grid-area: indicator; }
|
||||
.tag-mcltimeline > ul ul { margin-left: 0.5em; }
|
||||
*/
|
||||
|
||||
|
||||
|
||||
|
||||
/* @settings
|
||||
|
||||
name: Modular CSS Layout - Gallery Cards
|
||||
id: modular-css-layout-gc
|
||||
settings:
|
||||
|
||||
-
|
||||
id: gc-general-title
|
||||
title: General Image Settings
|
||||
type: heading
|
||||
level: 2
|
||||
collapsed: true
|
||||
-
|
||||
id: image-zoom
|
||||
title: Enable Image Zoom via CSS
|
||||
type: class-toggle
|
||||
-
|
||||
id: img-border-radius
|
||||
title: Image Border Radius (any unit, no space)
|
||||
type: variable-text
|
||||
default: 15px
|
||||
|
||||
|
||||
-
|
||||
id: gc-callout-title
|
||||
title: Image Gallery Settings
|
||||
description: For image gallery using `gallery` callout-metadata and `image-gallery` YAML
|
||||
type: heading
|
||||
level: 2
|
||||
collapsed: true
|
||||
-
|
||||
id: gallery-snw-display
|
||||
title: Hide Strange New World Indicators in Image Gallery
|
||||
type: variable-select
|
||||
default: none
|
||||
options:
|
||||
-
|
||||
label: Show
|
||||
value: inline-block
|
||||
-
|
||||
label: Hide
|
||||
value: none
|
||||
-
|
||||
id: callout-gallery-gap
|
||||
title: Gallery Callout Gap (any unit, no space)
|
||||
type: variable-text
|
||||
default: 5px
|
||||
-
|
||||
id: img-max-height
|
||||
title: Max Height for Images (any unit, no space)
|
||||
type: variable-text
|
||||
default: 300px
|
||||
-
|
||||
id: img-max-width
|
||||
title: Max Width for Images (any unit, no space)
|
||||
type: variable-text
|
||||
default: 350px
|
||||
|
||||
|
||||
|
||||
-
|
||||
id: gc-float-title
|
||||
title: Image Float / Aside
|
||||
type: heading
|
||||
level: 2
|
||||
collapsed: true
|
||||
-
|
||||
id: float-left-margin
|
||||
title: Margin for Image Float Right (any unit, no space)
|
||||
description: Enter in following order - "top right bottom left"
|
||||
type: variable-text
|
||||
default: 4px 12px 4px 0px
|
||||
-
|
||||
id: float-right-margin
|
||||
title: Margin for Image Float Right (any unit, no space)
|
||||
description: Enter in following order - "top right bottom left"
|
||||
type: variable-text
|
||||
default: 4px 0px 4px 12px
|
||||
-
|
||||
id: float-snw-display
|
||||
title: Hide SNW indicator in Image Float / Aside
|
||||
type: variable-select
|
||||
default: none
|
||||
options:
|
||||
-
|
||||
label: Show
|
||||
value: inline-block
|
||||
-
|
||||
label: Hide
|
||||
value: none
|
||||
|
||||
|
||||
|
||||
-
|
||||
id: gc-list-title
|
||||
title: Image in List Settings
|
||||
type: heading
|
||||
level: 2
|
||||
collapsed: true
|
||||
-
|
||||
id: list-image-control-off
|
||||
title: Disable Control for Image in List
|
||||
description: Disabling will revert image dimension to Obsidian default behaviour
|
||||
type: class-toggle
|
||||
-
|
||||
id: img-max-height-list
|
||||
title: Max Height for Images (any unit, no space)
|
||||
type: variable-text
|
||||
default: 270px
|
||||
-
|
||||
id: img-max-width-list
|
||||
title: Max Width for Images (any unit, no space)
|
||||
type: variable-text
|
||||
default: 300px
|
||||
|
||||
-
|
||||
id: gc-mermaid-title
|
||||
title: Mermaid SVG Settings
|
||||
type: heading
|
||||
level: 2
|
||||
collapsed: true
|
||||
-
|
||||
id: mermaid-scale-off
|
||||
title: Disable scaling for Mermaid diagram
|
||||
description: Disabling will revert Mermaid diagram dimension to Obsidian default behaviour
|
||||
type: class-toggle
|
||||
-
|
||||
id: mermaid-zoom
|
||||
title: Enable Image Zoom via CSS
|
||||
type: class-toggle
|
||||
*/
|
||||
+879
@@ -0,0 +1,879 @@
|
||||
/* === README ===
|
||||
Snippet: MCL Multi Column / Author: Faiz Khuzaimah / twitter: @faizkhuzaimah / github: https://github.com/efemkay
|
||||
|
||||
Ver 0.10.0 (updated 2024-09-01)
|
||||
- introduce fw dw and pw
|
||||
- added left-right margin for Float Callout
|
||||
- refactor List Column code to improve performance
|
||||
Ver 0.9.10 (updated 2024-06-26)
|
||||
- fix issues #81 and #89
|
||||
Ver 0.9.9 (updated 2024-01-25)
|
||||
- code cleanup (including -small -medium -large)
|
||||
- improve css performance on float but require cssclass use again
|
||||
Ver 0.9.8 (updated 2023-11-03)
|
||||
- fixes on sub-callout becomes flexible height (and introduce option for such)
|
||||
Ver 0.9.7 (updated 2023-10-13)
|
||||
- GH FR issue #41, #42 and fixed GH issue #35. MC Callout now supports sub-blockquote and sub-paragraph
|
||||
- GH FR issue #43. MC Callout now supports Multi Column within Multi Column
|
||||
Ver 0.9.5 (updated 2023-07-30)
|
||||
- fixes on minimal float affecting Minimal own wide table feature
|
||||
- fixes on properties padding affecting Minimal
|
||||
Ver 0.9.4 (updated 2023-07-06)
|
||||
- improved MC Callout compatibility with Minimal theme V7.0
|
||||
- improved MC Callout compatibility with Blue Topaz
|
||||
Ver 0.9.3 (updated 2023-06-24)
|
||||
- add support for List Column for li that's also a header
|
||||
- fixes on column ruler to apply properly only for List Column on first ul only
|
||||
- fixes on Float Callout in LP not floating due to additional div layer
|
||||
Ver 0.9.2 (updated 2023-05-27)
|
||||
- fix MC List Card mistakenly affect non List Card bullet list padding in same note
|
||||
- fix obsidian default bullet "draw" not rendered properly in List Column (for the ones using tag and contextual typography plugin)
|
||||
Ver 0.9.1 (updated 2023-04-06)
|
||||
- fix MC "fixed center" option not properly coded
|
||||
- fix MC List Grid previous not support sublist
|
||||
- fix MC List Column margin top for first column
|
||||
- fix MC List Grid for first bullet header
|
||||
Ver 0.9.0 (updated 2023-04-01)
|
||||
- MC - add option to hide SNW block ref for images in MC Callout
|
||||
- MC - added wide option for List Grid/Card
|
||||
- MC - added option to adjust float callout top margin
|
||||
- MC - added fixed width option
|
||||
- fix support minimal Callout style Outlined
|
||||
- List Column/Grid/Card fully support :has()
|
||||
|
||||
What is this snippet for?
|
||||
- to allow Obsidian users to change the layout with preset css by just specifying
|
||||
the cssClass in the frontmatter (YAML) or naming the Callout block
|
||||
- available cssClass
|
||||
- cssClass: two-column-list
|
||||
- cssClass: {.two-column-list-block}
|
||||
- cssClass: three-column-list
|
||||
- cssClass: {.three-column-list-block}
|
||||
- cssClass: multi-column-list
|
||||
- available Callout format
|
||||
- [!multi-column]
|
||||
- [!blank] / [!blank-container]
|
||||
|
||||
Compatibility
|
||||
- tested to work fine with the following Community Theme
|
||||
- Default Theme
|
||||
- Big Sur / Blue Topaz / California Cost / Notation / Pisum / Prism / Things / Typewriter (with minor issue on title color)
|
||||
- known to be not working
|
||||
- Primary (due to the theme heaving theming, box-shadow and so on)
|
||||
|
||||
Credits
|
||||
- Kevin Powell Youtube channel
|
||||
- https://css-tricks.com/
|
||||
- discord OMG members @Cáo thoát tục (Cáo thoát tục#6993), @mulfok (mulfok#6931) and @Rainbell (Rainbell#3617)
|
||||
- kepano for accomodating my snippets adjustment
|
||||
- trainbuffer for numerous help and assisted css snippets
|
||||
*/
|
||||
|
||||
|
||||
|
||||
body{
|
||||
/* for list column, grid and card */
|
||||
--list-min-width: 200px;
|
||||
--col-rule-color: var(--background-modifier-border); /* #b3b3b3; */
|
||||
--col-rule-width: 1px;
|
||||
--list-grid-min-width: 250px;
|
||||
--list-grid-wide-min-width: 350px;
|
||||
|
||||
}
|
||||
.theme-dark {
|
||||
/* --background-mcl-card: hsl(300, 5%, 15%); */
|
||||
}
|
||||
.theme-light {
|
||||
/* --background-mcl-card: hsl(300, 5%, 90%); */
|
||||
}
|
||||
|
||||
|
||||
/* === General === */
|
||||
|
||||
/* -- Fixed Width definition -- */
|
||||
/* quadruple the last .callout to win specificity with main multi-column callout */
|
||||
div[data-callout-metadata*="fw"].callout.callout.callout { flex-grow: 0; flex-shrink: 0;}
|
||||
div[data-callout-metadata*="fw1"].callout.callout.callout.callout { flex-basis: 100px; width: 100px; }
|
||||
div[data-callout-metadata*="fw2"].callout.callout.callout.callout { flex-basis: 200px; width: 200px; }
|
||||
div[data-callout-metadata*="fw3"].callout.callout.callout.callout { flex-basis: 300px; width: 300px; }
|
||||
div[data-callout-metadata*="fw4"].callout.callout.callout.callout { flex-basis: 400px; width: 400px; }
|
||||
div[data-callout-metadata*="fw5"].callout.callout.callout.callout { flex-basis: 500px; width: 500px; }
|
||||
div[data-callout-metadata*="fw6"].callout.callout.callout.callout { flex-basis: 600px; width: 600px; }
|
||||
div[data-callout-metadata*="fw7"].callout.callout.callout.callout { flex-basis: 700px; width: 700px; }
|
||||
div[data-callout-metadata*="fw8"].callout.callout.callout.callout { flex-basis: 800px; width: 800px; }
|
||||
div[data-callout-metadata*="fw9"].callout.callout.callout.callout { flex-basis: 900px; width: 900px; }
|
||||
|
||||
div[data-callout-metadata*="pw1"].callout.callout.callout.callout { flex-basis: 10%; width: 10%; }
|
||||
div[data-callout-metadata*="pw2"].callout.callout.callout.callout { flex-basis: 18%; width: 18%; }
|
||||
div[data-callout-metadata*="pw3"].callout.callout.callout.callout { flex-basis: 28%; width: 28%; }
|
||||
div[data-callout-metadata*="pw4"].callout.callout.callout.callout { flex-basis: 38%; width: 38%; }
|
||||
div[data-callout-metadata*="pw5"].callout.callout.callout.callout { flex-basis: 48%; width: 48%; }
|
||||
div[data-callout-metadata*="pw6"].callout.callout.callout.callout { flex-basis: 58%; width: 58%; }
|
||||
div[data-callout-metadata*="pw7"].callout.callout.callout.callout { flex-basis: 68%; width: 68%; }
|
||||
div[data-callout-metadata*="pw8"].callout.callout.callout.callout { flex-basis: 78%; width: 78%; }
|
||||
div[data-callout-metadata*="pw9"].callout.callout.callout.callout { flex-basis: 88%; width: 88%; }
|
||||
|
||||
|
||||
/* metadata "wide-x" to control subcallout flexible max width. only discrete 2,4,8,16 */
|
||||
div[data-callout="multi-column"].callout > .callout-content > div[data-callout-metadata*="mw0"].callout.callout { flex-basis: 0; }
|
||||
div[data-callout="multi-column"].callout > .callout-content > div[data-callout-metadata*="dw1"].callout { flex: 1 0 auto; }
|
||||
div[data-callout="multi-column"].callout > .callout-content > div[data-callout-metadata*="dw2"].callout { flex: 2 0 auto; }
|
||||
div[data-callout="multi-column"].callout > .callout-content > div[data-callout-metadata*="dw3"].callout { flex: 3 0 auto; }
|
||||
div[data-callout="multi-column"].callout > .callout-content > div[data-callout-metadata*="dw4"].callout { flex: 4 0 auto; }
|
||||
div[data-callout="multi-column"].callout > .callout-content > div[data-callout-metadata*="dw5"].callout { flex: 5 0 auto; }
|
||||
div[data-callout="multi-column"].callout > .callout-content > div[data-callout-metadata*="dw6"].callout { flex: 6 0 auto; }
|
||||
div[data-callout="multi-column"].callout > .callout-content > div[data-callout-metadata*="dw7"].callout { flex: 7 0 auto; }
|
||||
div[data-callout="multi-column"].callout > .callout-content > div[data-callout-metadata*="dw8"].callout { flex: 8 0 auto; }
|
||||
div[data-callout="multi-column"].callout > .callout-content > div[data-callout-metadata*="dw9"].callout { flex: 9 0 auto; }
|
||||
|
||||
|
||||
|
||||
|
||||
/* === Multi Column Callout (MCC) === */
|
||||
/* some issues still persists
|
||||
(2) some theme uses transparency to affect .callout-title */
|
||||
|
||||
/* common MCC variables */
|
||||
body {
|
||||
--mcc-img-snw-display: none;
|
||||
--callout-min-width: 200px;
|
||||
--callout-nowrap-min-width: 250px;
|
||||
--callout-gap: 1em;
|
||||
--callout-margin: 0px;
|
||||
}
|
||||
[data-callout="multi-column"].callout {
|
||||
--callout-blend-mode: normal;
|
||||
}
|
||||
|
||||
/* -- Main MCC Code -- */
|
||||
|
||||
/* remove callout-title and make callout-content as part of main callout for box formatting */
|
||||
div[data-callout="multi-column"].callout > .callout-title { display: none; }
|
||||
div[data-callout="multi-column"].callout > .callout-content { display: contents; }
|
||||
/* make the main callout a flex and remove box formatting */
|
||||
/* --columns: unset to undo Sanctum's mod */
|
||||
div[data-callout="multi-column"].callout
|
||||
{ display: flex; flex-wrap: wrap; gap: var(--callout-gap); background: unset; border: unset; margin: unset; padding: unset; clear: both; --columns: unset; }
|
||||
/* make the subcallout in flex column to allow growing vertically */
|
||||
div[data-callout="multi-column"].callout .callout:not([data-callout="multi-column"]) { display: flex; flex-direction: column; }
|
||||
div[data-callout="multi-column"].callout:not(.is-collapsed) .callout { margin-inline: var(--callout-margin); margin-block: var(--callout-margin); } /* to allow spacing for box shadow */
|
||||
div[data-callout="multi-column"].callout .callout .callout-content { flex-grow: 1}
|
||||
|
||||
div[data-callout="multi-column"].callout > .callout-content > *:is(div,ul,blockquote,p) { flex: 1 1 var(--callout-min-width); margin: 0;}
|
||||
|
||||
/* metadata "wide-x" to control subcallout flexible max width. only discrete 2,4,8,16 */
|
||||
div[data-callout="multi-column"].callout > .callout-content > div[data-callout-metadata*="min-0"] { flex-basis: 0; }
|
||||
div[data-callout="multi-column"].callout > .callout-content > div[data-callout-metadata*="wide-2"] { flex-grow: 2; }
|
||||
div[data-callout="multi-column"].callout > .callout-content > div[data-callout-metadata*="wide-3"] { flex-grow: 3; }
|
||||
div[data-callout="multi-column"].callout > .callout-content > div[data-callout-metadata*="wide-4"] { flex-grow: 4; }
|
||||
div[data-callout="multi-column"].callout > .callout-content > div[data-callout-metadata*="wide-5"] { flex-grow: 5; }
|
||||
|
||||
@media (min-width: 500px) {
|
||||
/* .is-collapsed is used to draw the border-left only when it's collapsed */
|
||||
div[data-callout="multi-column"].callout > div.callout-content .callout.is-collapsed { box-shadow: unset; height: min-content;}
|
||||
}
|
||||
|
||||
/* -- MCC Variant - Flexible Height for Subcallout / Children -- */
|
||||
/* also useful if one wants to have non callout children like table and don't want to fill the height */
|
||||
div[data-callout="multi-column"].callout {}
|
||||
div[data-callout="multi-column"][data-callout-metadata*="flex-h"].callout { align-items: flex-start; }
|
||||
|
||||
/* -- MCC Variation - Fixed Columns -- */
|
||||
div[data-callout="multi-column"][data-callout-metadata*="col3"]:not([data-callout-metadata*="icons"]).callout {
|
||||
display: grid;
|
||||
grid-template-columns: 1fr 1fr 1fr;
|
||||
}
|
||||
|
||||
/* -- MCC Variation - Icons -- */
|
||||
|
||||
/* Main code */
|
||||
div[data-callout="multi-column"][data-callout-metadata*="icons"] {
|
||||
|
||||
&.callout { justify-content: center; }
|
||||
&.callout .callout { display: flex; flex-direction: row; flex-wrap: wrap; }
|
||||
&.callout.callout .callout-content > p { flex-grow: 1; text-align: center; }
|
||||
/* Options for number of columns */
|
||||
&[data-callout-metadata*="col2"].callout.callout .callout-content > p { flex-basis: 40%; }
|
||||
&[data-callout-metadata*="col3"].callout.callout .callout-content > p { flex-basis: 30%; }
|
||||
&[data-callout-metadata*="col4"].callout.callout .callout-content > p { flex-basis: 22%; }
|
||||
&[data-callout-metadata*="col5"].callout.callout .callout-content > p { flex-basis: 18%; }
|
||||
|
||||
/* listive theme */
|
||||
&.callout p:first-child { margin-top: revert; }
|
||||
}
|
||||
|
||||
|
||||
/* -- MCC Variation - Fixed Width Option -- */
|
||||
/* Fixed Width Option (using callout-metadata) */
|
||||
div[data-callout="multi-column"][data-callout-metadata*="center-fixed"].callout { justify-content: center; }
|
||||
div[data-callout="multi-column"][data-callout-metadata*="left-fixed"].callout { justify-content: flex-start; }
|
||||
div[data-callout="multi-column"][data-callout-metadata*="right-fixed"].callout { justify-content: flex-end; }
|
||||
div[data-callout="multi-column"][data-callout-metadata*="fixed"].callout > .callout-content > *:is(div,ul) { flex-grow: 0; }
|
||||
|
||||
/* Callout size for Fixed Width Option */
|
||||
div[data-callout="multi-column"][data-callout-metadata*="fixed"][data-callout-metadata*="small"].callout > .callout-content > *:is(div,ul) { flex-basis: calc( var(--float-small-width) * 0.5 ); }
|
||||
div[data-callout="multi-column"][data-callout-metadata*="fixed"][data-callout-metadata*="medium"].callout > .callout-content > *:is(div,ul) { flex-basis: calc( var(--float-medium-width) * 0.65); }
|
||||
div[data-callout="multi-column"][data-callout-metadata*="fixed"][data-callout-metadata*="large"].callout > .callout-content > *:is(div,ul) { flex-basis: calc( var(--float-large-width) * 0.8); }
|
||||
|
||||
|
||||
/* -- MCC Variation - No Wrap Option -- */
|
||||
|
||||
/* No-Wrap Option (using callout-metadata) - for single row with horizontal scrollbar */
|
||||
div[data-callout="multi-column"][data-callout-metadata*="no-wrap"].callout {
|
||||
flex-wrap: nowrap; overflow-x: scroll;
|
||||
& > .callout-content > *:is(div,ul) { flex-shrink: 0; }
|
||||
}
|
||||
|
||||
/* No-Wrap Option, Width Options. Legacy width option. better to dw, pw and fw options at the top */
|
||||
.callout[data-callout="multi-column"][data-callout-metadata*="no-wrap"] .callout[data-callout-metadata*="small"] { flex-basis: 300px; }
|
||||
.callout[data-callout="multi-column"][data-callout-metadata*="no-wrap"] .callout[data-callout-metadata*="medium"] { flex-basis: 400px; }
|
||||
.callout[data-callout="multi-column"][data-callout-metadata*="no-wrap"] .callout[data-callout-metadata*="large"] { flex-basis: 600px; }
|
||||
|
||||
/* Align center for items in callout */
|
||||
div[data-callout="multi-column"] .callout[data-callout-metadata*="center"] { text-align: center; }
|
||||
|
||||
|
||||
/* -- Special Adjustment for Community Themes -- */
|
||||
|
||||
/* Special Adjustment -- for theme with negative margin & box shadow. (e.g. Prism) */
|
||||
div[data-callout="multi-column"].callout > .callout-content { margin-top: unset;}
|
||||
div[data-callout="multi-column"].callout:not(.is-collapsed) { box-shadow: unset;}
|
||||
|
||||
/* Blue Topaz - remove box shadow from main [!multi-column] */
|
||||
body[class*="notebook-liked-markdown-page"].shade-callout-style .callout[data-callout="multi-column"] { box-shadow: unset !important; }
|
||||
|
||||
/* Special Adjustment -- for minimal left margin *//*
|
||||
.markdown-source-view.mod-cm6.is-readable-line-width .cm-embed-block.cm-callout > div[data-callout="multi-column"].callout
|
||||
{ width: 100%; max-width: 100%; margin-inline: 0 !important; }
|
||||
|
||||
/* Minimal - .dataview.list-view-ul width - Minimal set the width with --line-width-adaptive (40rem by default) */
|
||||
body:not(.table-100):not(.table-max):not(.table-wide) .markdown-preview-view.is-readable-line-width:not(.table-100):not(.table-max):not(.table-wide) div[data-callout="multi-column"].callout .dataview.list-view-ul {width: auto;}
|
||||
|
||||
/* Minimal -- Callout Outline, to ensure sub-callout not overlapped and hidden */
|
||||
.callouts-outlined div[data-callout="multi-column"].callout:not(.is-collapsed) .callout:not([data-callout="multi-column"]) {
|
||||
margin-top: 1em;
|
||||
}
|
||||
|
||||
|
||||
/* -- Special Adjustment for Plugins / Markdown Elements -- */
|
||||
|
||||
/* SNW plugin */
|
||||
div[data-callout*="multi-column"].callout .callout-content span.image-embed + .snw-reference { display: var(--mcc-img-snw-display); }
|
||||
|
||||
|
||||
|
||||
|
||||
/* === Blank Container "DIV"'s - can be used with Main Multi-Column layout above === */
|
||||
|
||||
/* "blank-container" - no bg, no border, no title, no nothing, and remove the ligthen effect */
|
||||
div[data-callout*="blank"].callout {--callout-blend-mode: normal;}
|
||||
div[data-callout*="blank"].callout > .callout-title { display: none; }
|
||||
div[data-callout*="blank"].callout > .callout-content {display: contents;}
|
||||
div[data-callout*="blank"].callout { border: 0; padding-top: 0; padding-inline: 5px; background: unset; box-shadow: unset; }
|
||||
|
||||
/* -- No Margin -- */
|
||||
/* issues still persists
|
||||
- headers font size not same
|
||||
- "no-margin" not fully workable in editing view due to wide-page override for Minimal theme
|
||||
*/
|
||||
div[data-callout-metadata*="no-margin"]:is(.cm-callout, .callout.callout, .callout.callout .callout-content) {margin: 0; padding: 0;}
|
||||
|
||||
/* -- No Margin for only child -- */
|
||||
div[data-callout*="blank"].callout .callout-content > p:only-child {
|
||||
margin-block: 0;
|
||||
}
|
||||
|
||||
|
||||
/* -- Special Adjustment for Themes -- */
|
||||
|
||||
/* Mado. Remove theme's pseudo left border */
|
||||
div[data-callout*="blank"] .callout-content::before { display: none; }
|
||||
|
||||
|
||||
/* === Text Justify === */
|
||||
|
||||
.text-justify :is(.markdown-preview-view p,.markdown-source-view .cm-line) { text-align: justify; }
|
||||
|
||||
|
||||
/* === Floating Callout - Base === */
|
||||
/* float uses callout-metadata to control the layout. can apply to any callout */
|
||||
|
||||
/* variables */
|
||||
body {
|
||||
--float-small-width: 300px;
|
||||
--float-medium-width: 400px;
|
||||
--float-large-width: 600px;
|
||||
|
||||
--float-left-callout-margin: 0 15px 0 0;
|
||||
--float-right-callout-margin: 0 0 0 15px;
|
||||
--float-callout-top-margin: 0em;
|
||||
--float-callout-bottom-margin: 0em;
|
||||
--float-callout-snw-display: none;
|
||||
}
|
||||
/* variables */
|
||||
body {
|
||||
--float-left-callout-margin-inline: 0 12px;
|
||||
--float-right-callout-margin-inline: 12px 0;
|
||||
--float-snw-display: none;
|
||||
}
|
||||
|
||||
|
||||
/* -- Main Code. Use media query so that floats only works when there's enough width */
|
||||
@media (min-width: 500px){
|
||||
.markdown-source-view .cm-embed-block.cm-callout:has(> div.markdown-rendered > [data-callout-metadata*="float-left"]) { display: inline; z-index: 30;}
|
||||
.markdown-source-view .cm-embed-block.cm-callout:has(> div.markdown-rendered > [data-callout-metadata*="float-left"]) > div > .callout { float: left; z-index: 30; }
|
||||
.markdown-source-view .cm-embed-block.cm-callout:has(> div.markdown-rendered > [data-callout-metadata*="float-left"]) > .edit-block-button { display: none; }
|
||||
.markdown-reading-view div[data-callout-metadata*="left"].callout {float: left;}
|
||||
|
||||
.markdown-source-view .cm-embed-block.cm-callout:has(> div.markdown-rendered > [data-callout-metadata*="float-right"]) { display: inline; z-index: 30;}
|
||||
.markdown-source-view .cm-embed-block.cm-callout:has(> div.markdown-rendered > [data-callout-metadata*="float-right"]) > div > .callout { float: right; z-index: 30; }
|
||||
.markdown-source-view .cm-embed-block.cm-callout:has(> div.markdown-rendered > [data-callout-metadata*="float-right"]) > .edit-block-button { display: none; }
|
||||
.markdown-reading-view div[data-callout-metadata*="right"].callout {float: right; }
|
||||
|
||||
.markdown-source-view.mod-cm6 .cm-embed-block.cm-callout :is(.callout[data-callout-metadata*="left"], .callout[data-callout-metadata*="right"]) .callout-content > p:last-of-type { margin-bottom: auto;}
|
||||
|
||||
[data-callout-metadata*="float-right"].cm-embed-block.cm-callout {width: auto !important;}
|
||||
|
||||
/* remove margin from first para in the float callout */
|
||||
.callout:is(div[data-callout-metadata*="left"],div[data-callout-metadata*="right"]) .callout-content > :is(p:first-child,ul:first-child,ol:first-child) {margin-top: 0;}
|
||||
|
||||
/* Adjustable Gap */
|
||||
/* 26Mar2023 only top for now, to work on left-right later */
|
||||
.markdown-source-view.mod-cm6 .callout:is(div[data-callout-metadata*="left"]),
|
||||
.markdown-source-view.mod-cm6 .callout:is(div[data-callout-metadata*="right"])
|
||||
{ margin-top: calc(1em * var(--line-height-normal) + var(--float-callout-top-margin)); }
|
||||
|
||||
/**/
|
||||
.markdown-source-view.mod-cm6 .callout:is(div[data-callout-metadata*="left"]),
|
||||
.markdown-reading-view div[data-callout-metadata*="left"].callout {
|
||||
margin-inline: var(--float-left-callout-margin-inline);
|
||||
}
|
||||
.markdown-source-view.mod-cm6 .callout:is(div[data-callout-metadata*="right"]),
|
||||
.markdown-reading-view div[data-callout-metadata*="right"].callout {
|
||||
margin-inline: var(--float-right-callout-margin-inline);
|
||||
}
|
||||
}
|
||||
|
||||
/* -- FC Size Options -- */
|
||||
|
||||
/* legacy width option. better to dw, pw and fw options at the top */
|
||||
[data-callout-metadata*="-small"].callout {width: var(--float-small-width);}
|
||||
[data-callout-metadata*="-medium"].callout {width: var(--float-medium-width);}
|
||||
[data-callout-metadata*="-large"].callout {width: var(--float-large-width);}
|
||||
|
||||
|
||||
/* -- Special Adjustment for Plugins / Markdown Elements -- */
|
||||
|
||||
/* Option for Caption */
|
||||
div:is([data-callout-metadata*="caption"]).callout > .callout-content > p .image-embed[alt]:not([alt$=".png"], [alt$=".jpg"], [alt$=".jpeg"], [alt$=".tiff"])::after {content: attr(alt); text-align: center; display: block; font-style: italic; color: var(--text-muted); }
|
||||
div:is([data-callout-metadata*="caption"]).callout > .callout-content > p img:not(.emoji) { display: block; margin-right: auto; margin-left: auto;}
|
||||
|
||||
/* Introduce clear to break the float */
|
||||
/* .markdown-preview-view h2, *//* remove this as it has weird spacing effect */
|
||||
.embedded-backlinks { clear: both; }
|
||||
|
||||
/* for Blockquote underlap the float layout -- to remove by 30Jun2024, no longer needed */
|
||||
/* .markdown-preview-view :is(blockquote) { overflow-x: auto; } /* fix for blockquote underlap */
|
||||
/* .markdown-preview-view :is(p) { overflow: unset; } /* fix for para not wrapping around float. applicable for Willemstad */
|
||||
|
||||
/* for SNW plugin */
|
||||
div:is([data-callout-metadata*="caption"],[data-callout-metadata*="left"],[data-callout-metadata*="right"]).callout > .callout-content > p .snw-embed-preview { display: var(--float-callout-snw-display); width: min-content; height: min-content; }
|
||||
div:is([data-callout-metadata*="caption"],[data-callout-metadata*="left"],[data-callout-metadata*="right"]).callout > .callout-content > p .internal-embed.image-embed ~ br {display: none;}
|
||||
|
||||
|
||||
/* -- Special Adjustment for Themes -- */
|
||||
|
||||
/* Minimal. Minimal Float. Updated for Minimal V7.4.7 */
|
||||
/* "Reset" the default "cm-sizer" width but respect Minimal Settings, and require cssclass ".minimal-float" as Minimal own wide table will not work together with float i.e. removing :not(:has(table)) from .markdown-source-view.mod-cm6.is-readable-line-width:not(:has(table)) */
|
||||
.minimal-float.markdown-source-view.mod-cm6 {
|
||||
.cm-sizer {
|
||||
max-width: var(--max-width); width: var(--line-width);
|
||||
}
|
||||
.cm-contentContainer.cm-contentContainer > .cm-content > div,
|
||||
.cm-sizer > .embedded-backlinks,
|
||||
.cm-sizer > .inline-title,
|
||||
.cm-sizer > .metadata-container {
|
||||
max-width: none; width: auto;
|
||||
}
|
||||
}
|
||||
|
||||
/* Minimal. Previous Minimal Float but with performance issue. Kept for reference until 30 June 2024 */ /*
|
||||
:is(body[class*="minimal-tab-title"] .markdown-source-view.mod-cm6.is-readable-line-width:not(:has(table)), .minimal-float.markdown-source-view.mod-cm6) .cm-sizer { max-width: var(--max-width); width: var(--line-width); }
|
||||
|
||||
:is(body[class*="minimal-tab-title"] .markdown-source-view.mod-cm6.is-readable-line-width:not(:has(table)), .minimal-float.markdown-source-view.mod-cm6) .cm-contentContainer.cm-contentContainer>.cm-content>div,
|
||||
:is(body[class*="minimal-tab-title"] .markdown-source-view.mod-cm6.is-readable-line-width:not(:has(table)), .minimal-float.markdown-source-view.mod-cm6) .cm-sizer>.embedded-backlinks,
|
||||
:is(body[class*="minimal-tab-title"] .markdown-source-view.mod-cm6.is-readable-line-width:not(:has(table)), .minimal-float.markdown-source-view.mod-cm6) .cm-sizer>.inline-title,
|
||||
:is(body[class*="minimal-tab-title"] .markdown-source-view.mod-cm6.is-readable-line-width:not(:has(table)), .minimal-float.markdown-source-view.mod-cm6) .cm-sizer>.metadata-container
|
||||
{ max-width: none; width: auto; }
|
||||
|
||||
|
||||
/* Minimal - fix to support Breadcrumbs plugin. Sub to the above LP float fix for Minimal */
|
||||
body[class*="minimal-tab-title"].contextual-typography .minimal-float.markdown-preview-view.markdown-preview-view .BC-trail.markdown-preview-sizer { display: flex; }
|
||||
|
||||
/* Minimal - Size Option fix due to !important */
|
||||
/* Minimal. Uses body[class*="minimal-tab-title"] as identifier. To override (have higher specificity) the width param. Can be merged to main code later on */
|
||||
@media (min-width: 500px){
|
||||
body[class*="minimal-tab-title"] .markdown-source-view.mod-cm6.is-readable-line-width .cm-embed-block.cm-callout > div[data-callout-metadata$="small"].callout { width: var(--float-small-width) !important; margin-left: 0 !important; }
|
||||
body[class*="minimal-tab-title"] .markdown-source-view.mod-cm6.is-readable-line-width .cm-embed-block.cm-callout > div[data-callout-metadata$="medium"].callout { width: var(--float-medium-width) !important; margin-left: 0 !important; }
|
||||
}
|
||||
@media (min-width: 750px){
|
||||
body[class*="minimal-tab-title"] .markdown-source-view.mod-cm6.is-readable-line-width .cm-embed-block.cm-callout > div[data-callout-metadata$="large"].callout { width: var(--float-large-width); margin-left: 0 !important; }
|
||||
}
|
||||
|
||||
|
||||
/* === List Column ===*/
|
||||
/* supported for (1) css :has(), (2) yaml cssclass, (3) CT plugin, and (4) MA plugin
|
||||
- CSS :has() can be applied to sublists, so no column rule. CT plugin apply to div that houses the ul, so column gap is different
|
||||
- xx-column-list for first level only list, but apply anywhere but xx-column-list-block apply at block level. Both require JV's Markdown Attributes plugin
|
||||
*/
|
||||
|
||||
|
||||
/* -- List Column/Grid/Card general styling -- */
|
||||
|
||||
/* hide tag in rendered view, dim it in edit mode and small size */
|
||||
:is(div[class*="mcl"].markdown-rendered, .markdown-rendered) a[href*="#mcl"] {display: none;}
|
||||
/* :is(div[class*="mcl"].markdown-rendered, .markdown-rendered div[class*="mcl"]) a[href*="#mcl"] {display: none;} */
|
||||
.cm-s-obsidian .HyperMD-list-line span[class*="mcl"] {background-color: var(--background-primary) !important; color: var(--text-faint); font-size: 0.9rem; }
|
||||
|
||||
|
||||
/* -- List Column using YAML cssclass and Markdown Attributes i.e. {.three-column-list-block} -- */
|
||||
|
||||
/* define the column gap and column rule */
|
||||
.two-column-list div > ul, .two-column-list-block,
|
||||
.three-column-list div > ul, .three-column-list-block,
|
||||
.four-column-list div > ul, .four-column-list-block,
|
||||
.multi-column-list div > ul, .multi-column-list-block
|
||||
{ column-gap: 3rem; column-rule: var(--col-rule-width) solid var(--col-rule-color); }
|
||||
|
||||
/* define the column count, for fixed number of columns, to subject it to note's width (in future can use @container when installer v1.2.7 widely used ) */
|
||||
@media (min-width: 500px ){
|
||||
.two-column-list div > ul, .two-column-list-block {columns: 2; }
|
||||
.three-column-list div > ul, .three-column-list-block {columns: 3; }
|
||||
.four-column-list div > ul, .four-column-list-block {columns: 4; }
|
||||
}
|
||||
.multi-column-list div > ul, .multi-column-list-block { column-width: var(--list-min-width); }
|
||||
|
||||
/* Special adjustment for footnotes applied with -colum-list-block -- obsidian creates a <br> tag at the last <li> */
|
||||
.footnotes [class$="-column-list-block"] li:last-of-type br:last-of-type {display: none;}
|
||||
|
||||
|
||||
/* -- List Column Using Tag (using CSS has) -- */
|
||||
|
||||
/* set the column rules at ul level and adjust the margin */
|
||||
ul:has(> li > [data-heading] > [href*="#mcl/list-column"]),
|
||||
ul:has(> li > [href*="#mcl/list-column"]) {
|
||||
margin-top: 0;
|
||||
column-width: var(--list-min-width); column-gap: 1rem;
|
||||
column-rule: var(--col-rule-width) solid var(--col-rule-color);
|
||||
}
|
||||
|
||||
/* give some margin for the div, for first ul only */
|
||||
div:has(> ul > li > [href*="#mcl/list-column"]),
|
||||
div:has(> ul > li > [data-heading] > [href*="#mcl/list-column"])
|
||||
{ margin-top: 0.8em; }
|
||||
|
||||
/* readjust [!blank] display contents */
|
||||
div[data-callout*="blank"] > .callout-content:has(li [href*="#mcl/list-column"]) {display: block; margin: 0; padding: 0; }
|
||||
|
||||
|
||||
/* -- General Adjustment for List Column -- */
|
||||
|
||||
/* Adjustment for misaligned bullets (this is a hack, need to find better solution later) */
|
||||
ul:has([href="#mcl/list-column"]) li > .list-bullet::after, /* :has() */
|
||||
.markdown-preview-view[class*="column-list"] li > .list-bullet::after, /* yaml cssclass */
|
||||
.tag-mcllist-column ul li > .list-bullet::after, /* contextual typography */
|
||||
ul[class*="column-list"] li > .list-bullet::after /* markdown attributes */
|
||||
{ position: relative; }
|
||||
|
||||
|
||||
/* -- Special Adjustment for Plugins for List Column -- */
|
||||
|
||||
/* for Custom Classes */
|
||||
div.cc-container:has(li > [href="#mcl/list-column"]) { width: 100%; }
|
||||
|
||||
|
||||
|
||||
/* === List Grid (using hashtag) === */
|
||||
/* supported (1) :has() and (2) Contextual Typography plugin */
|
||||
|
||||
/* -- Main Code -- */
|
||||
|
||||
ul:has(> li > [data-heading] > [href*="#mcl/list-grid"]),
|
||||
ul:has(> li > [href*="#mcl/list-grid"]),
|
||||
div[class*="mcllist-grid"] ul:first-child
|
||||
{ display: grid; grid-template-columns: repeat(auto-fit,minmax(var(--list-grid-min-width),1fr)); }
|
||||
|
||||
ul:has(> li > [data-heading] > [href*="#mcl/list-grid-wide"]),
|
||||
ul:has(> li > [href*="#mcl/list-grid-wide"]),
|
||||
div[class*="mcllist-grid-wide"] ul:first-child
|
||||
{ grid-template-columns: repeat(auto-fit,minmax(var(--list-grid-wide-min-width),1fr)); }
|
||||
|
||||
ul:has(> li > [data-heading] > [href*="#mcl/list-grid"]) > li:not(:last-of-type),
|
||||
ul:has(> li > [href*="#mcl/list-grid"]) > li:not(:last-of-type),
|
||||
div[class*="mcllist-grid"] ul:first-child > li:not(:last-of-type)
|
||||
{ padding-right: 1.6em; }
|
||||
|
||||
ul:has(> li > [data-heading] > [href*="#mcl/list-grid-sm"]),
|
||||
ul:has(> li > [href*="#mcl/list-grid-sm"]),
|
||||
div[class*="mcllist-grid-sm"] ul:first-child
|
||||
{ --list-grid-min-width: 20%; }
|
||||
|
||||
|
||||
/* - dashboard style, page level only, apply to any first level */
|
||||
/* -- applicable only when width > 400pt, else just single column */
|
||||
/* grid list block level cannot be done, it breaks formatting */
|
||||
@media (min-width: 500px) {
|
||||
.two-column-grid-list div > ul { display: grid; grid-column-gap:3em; grid-template-columns:repeat(2,1fr);}
|
||||
}
|
||||
@media (min-width: 600px) {
|
||||
.three-column-grid-list div > ul { display: grid; grid-column-gap:3em; grid-template-columns:repeat(3,1fr);}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* === List Card (using hashtag) === */
|
||||
/* supported (1) :has() and (2) Contextual Typography plugin */
|
||||
|
||||
body {
|
||||
--mcl-card-header-border-width: 1px;
|
||||
--mcl-card-bg-color: var(--background-secondary);
|
||||
--mcl-card-gap: 0.2em;
|
||||
--mcl-card-border-width: 1px;
|
||||
--mcl-card-border-color: var(--background-modifier-border);
|
||||
}
|
||||
|
||||
/* -- Main Code -- */
|
||||
|
||||
/* make the list grid, remove some ul padding */
|
||||
|
||||
:is(div:has(> ul [data-heading*="#mcl/list-card"]), div:has(> ul [href*="#mcl/list-card"]), [class*="mcllist-card"]) ul:first-child { display: grid; grid-template-columns: repeat(auto-fit,minmax(var(--list-grid-min-width),1fr)); margin-block-start: 0.5em; }
|
||||
:is(div:has(> ul [data-heading*="#mcl/list-card-wide"]), [class*="mcllist-card-wide"]) ul:first-child { grid-template-columns: repeat(auto-fit, minmax(var(--list-grid-wide-min-width),1fr));}
|
||||
/* unindent first level bullet */
|
||||
:is(div:has(> ul [data-heading*="#mcl/list-card"]), div:has(> ul [href*="#mcl/list-card"]), .tag-mcllist-card) ul ul:not(ul ul ul) { padding-left: 0.1em; } /* with v1.6 this is somewhat redundant */
|
||||
:is(div:has(> ul [data-heading*="#mcl/list-card"]), div:has(> ul [href*="#mcl/list-card"]), .tag-mcllist-card) ul ul:not(ul ul ul) > li { margin-inline-start: 0; }
|
||||
:is(div:has(> ul [data-heading*="#mcl/list-card"]), div:has(> ul [href*="#mcl/list-card"]), div:has(> ul [data-heading*="#mcl/list-card"]) .callout-content, .tag-mcllist-card, .tag-mcllist-card .callout-content) > ul { padding-left: 0; }
|
||||
:is(.is-mobile .markdown-preview-section) :is(div:has([data-heading*="#mcl/list-card"]), .tag-mcllist-card) :is(ol:not(ol ol ol), ul:not(ul ul ul)) {padding-left: 0;}
|
||||
/* reposition the collapse indicator and hover behaviour */
|
||||
:is(div:has(> ul [data-heading*="#mcl/list-card"]), div:has(> ul [href*="#mcl/list-card"]), div:has(> ul [data-heading*="#mcl/list-card"]) .callout-content, .tag-mcllist-card, .tag-mcllist-card .callout-content) > ul > li {position: relative;}
|
||||
:is(div:has(> ul [data-heading*="#mcl/list-card"]), div:has(> ul [href*="#mcl/list-card"]), div:has(> ul [data-heading*="#mcl/list-card"]) .callout-content, .tag-mcllist-card, .tag-mcllist-card .callout-content) > ul > li:hover > .collapse-indicator,
|
||||
:is(div:has(> ul [data-heading*="#mcl/list-card"]), div:has(> ul [href*="#mcl/list-card"]), div:has(> ul [data-heading*="#mcl/list-card"]) .callout-content, .tag-mcllist-card, .tag-mcllist-card .callout-content) > ul > li > ul > li:hover > .collapse-indicator {opacity: 1;}
|
||||
:is(div:has(> ul [data-heading*="#mcl/list-card"]), div:has(> ul [href*="#mcl/list-card"]), div:has(> ul [data-heading*="#mcl/list-card"]) .callout-content, .tag-mcllist-card, .tag-mcllist-card .callout-content) > ul > li > .collapse-indicator,
|
||||
:is(div:has(> ul [data-heading*="#mcl/list-card"]), div:has(> ul [href*="#mcl/list-card"]), div:has(> ul [data-heading*="#mcl/list-card"]) .callout-content, .tag-mcllist-card, .tag-mcllist-card .callout-content) > ul > li > ul > li > .collapse-indicator {position: absolute; right: 0.7em; padding-right: 0;}
|
||||
:is(div:has(> ul [data-heading*="#mcl/list-card"]), div:has(> ul [href*="#mcl/list-card"]), .tag-mcllist-card) ul::before {display: none;}
|
||||
/* decorate the first heading for cards */
|
||||
:is(div:has(> ul [data-heading*="#mcl/list-card"]), div:has(> ul [data-heading*="#mcl/list-card"]) .callout-content, .tag-mcllist-card, .tag-mcllist-card .callout-content) > ul > li:not(.is-collapsed) > [data-heading] {border-bottom: var(--mcl-card-header-border-width) solid var(--mcl-card-border-color); margin-bottom: 0.2em;}
|
||||
/* hide the list bullet for list-card for first and second level */
|
||||
:is(div:has(> ul [data-heading*="#mcl/list-card"]), div:has(> ul [href*="#mcl/list-card"]), .tag-mcllist-card) > div > div > ul > li > .list-bullet::after,
|
||||
:is(div:has(> ul [data-heading*="#mcl/list-card"]), div:has(> ul [href*="#mcl/list-card"]), .tag-mcllist-card) > div > div > ul > li > ul > li > .list-bullet::after,
|
||||
:is(div:has(> ul [data-heading*="#mcl/list-card"]), div:has(> ul [href*="#mcl/list-card"]), .tag-mcllist-card) > ul > li::before,
|
||||
:is(div:has(> ul [data-heading*="#mcl/list-card"]), div:has(> ul [href*="#mcl/list-card"]), .tag-mcllist-card) > ul > li > ul > li::before,
|
||||
:is(div:has(> ul [data-heading*="#mcl/list-card"]), div:has(> ul [href*="#mcl/list-card"]), .tag-mcllist-card) > ul > li > .list-bullet::after,
|
||||
:is(div:has(> ul [data-heading*="#mcl/list-card"]), div:has(> ul [href*="#mcl/list-card"]), .tag-mcllist-card) > ul > li > ul > li > .list-bullet::after {visibility: hidden;}
|
||||
/* remove the indentation guide */
|
||||
:is(div:has(> ul [data-heading*="#mcl/list-card"]), div:has(> ul [href*="#mcl/list-card"]), .tag-mcllist-card) ul:not(ul ul ul ul)::before {--indentation-guide-width: 0;}
|
||||
.markdown-rendered.show-indentation-guide :is(div:has(> ul [data-heading*="#mcl/list-card"]), .tag-mcllist-card) li > ul::before,
|
||||
.markdown-rendered.show-indentation-guide :is(div:has(> ul [data-heading*="#mcl/list-card"]), .tag-mcllist-card) li > ol::before {border-right: 0; border-left: 0; }
|
||||
:is(div:has(> ul [data-heading*="#mcl/list-card"]), div:has(> ul [href*="#mcl/list-card"]), .tag-mcllist-card) li {list-style: none;}
|
||||
:is(div:has(> ul [data-heading*="#mcl/list-card"]), div:has(> ul [href*="#mcl/list-card"]), .tag-mcllist-card) li li li {list-style: circle;}
|
||||
:is(div:has(> ul [data-heading*="#mcl/list-card"]), div:has(> ul [href*="#mcl/list-card"]), .tag-mcllist-card) .callout ul:not(ul ul) > li,
|
||||
:is(div:has(> ul [data-heading*="#mcl/list-card"]), div:has(> ul [href*="#mcl/list-card"]), .tag-mcllist-card) ul:not(ul ul) > li
|
||||
{ margin-inline: var(--mcl-card-gap); margin-bottom: calc(var(--mcl-card-gap)*2); padding: 0.3em 0.5em; outline: var(--mcl-card-border-width) solid var(--mcl-card-border-color); border-radius: 0.5em; background-color: var(--mcl-card-bg-color);}
|
||||
:is(div:has(> ul [data-heading*="#mcl/list-card"]), div:has(> ul [href*="#mcl/list-card"]), .tag-mcllist-card) ul:not(ul ul) > li img {width: 100%;}
|
||||
:is(div:has(> ul [data-heading*="#mcl/list-card"]), div:has(> ul [href*="#mcl/list-card"]), .tag-mcllist-card) ul img {margin: 0; float: none;}
|
||||
|
||||
|
||||
/* -- Special Adjustment for Themes -- */
|
||||
|
||||
/* Sanctum */
|
||||
.markdown-rendered .tag-mcllist-card ul img[alt*=right] {margin: 0;}
|
||||
|
||||
|
||||
|
||||
/* === Style Settings === */
|
||||
|
||||
/* @settings
|
||||
|
||||
name: Modular CSS Layout - Multi Column
|
||||
id: modular-css-layout-mc
|
||||
settings:
|
||||
|
||||
-
|
||||
id: multi-column-title
|
||||
title: Multi Column Callout Settings
|
||||
type: heading
|
||||
level: 1
|
||||
collapsed: true
|
||||
|
||||
-
|
||||
id: mc-callout-general-title
|
||||
title: MCC -- General
|
||||
type: heading
|
||||
level: 2
|
||||
collapsed: false
|
||||
-
|
||||
id: mcc-img-snw-display
|
||||
title: Hide SNW indicator for images in MC Callout
|
||||
type: variable-select
|
||||
default: none
|
||||
options:
|
||||
-
|
||||
label: Show
|
||||
value: inline
|
||||
-
|
||||
label: Hide
|
||||
value: none
|
||||
|
||||
-
|
||||
id: mc-callout-width-title
|
||||
title: MCC -- Width
|
||||
type: heading
|
||||
level: 2
|
||||
collapsed: false
|
||||
-
|
||||
id: callout-min-width
|
||||
title: Minimum Sub-Callout Width
|
||||
description: for sub-callout in [!multi-column]. in px units
|
||||
type: variable-number-slider
|
||||
default: 200
|
||||
min: 100
|
||||
max: 500
|
||||
step: 50
|
||||
format: px
|
||||
-
|
||||
id: callout-nowrap-min-width
|
||||
title: Minimum NO-WRAP Sub-Callout Width
|
||||
description: for sub-callout in [!multi-column|no-wrap]. in px units
|
||||
type: variable-number-slider
|
||||
default: 250
|
||||
min: 100
|
||||
max: 500
|
||||
step: 50
|
||||
format: px
|
||||
|
||||
-
|
||||
id: mc-callout-gap-title
|
||||
title: MCC -- Gap & Margin
|
||||
type: heading
|
||||
level: 2
|
||||
collapsed: false
|
||||
-
|
||||
id: callout-gap
|
||||
title: Sub-Callout Gap (any unit)
|
||||
description: NO spacing between figure and unit
|
||||
type: variable-text
|
||||
default: 1em
|
||||
-
|
||||
id: callout-margin
|
||||
title: Sub-Callout Margin (any unit)
|
||||
description: to allow some spacing for box-shadow
|
||||
type: variable-text
|
||||
default: 0px
|
||||
|
||||
|
||||
|
||||
-
|
||||
id: float-callout-title
|
||||
title: Float Callout Settings
|
||||
type: heading
|
||||
level: 1
|
||||
collapsed: true
|
||||
|
||||
-
|
||||
id: float-callout-general-title
|
||||
title: FC -- General
|
||||
type: heading
|
||||
level: 2
|
||||
collapsed: false
|
||||
|
||||
-
|
||||
id: float-callout-snw-display
|
||||
title: Hide SNW indicator in Callout Float / Aside
|
||||
type: variable-select
|
||||
default: none
|
||||
options:
|
||||
-
|
||||
label: Show
|
||||
value: inline-block
|
||||
-
|
||||
label: Hide
|
||||
value: none
|
||||
|
||||
-
|
||||
id: float-width-title
|
||||
title: FC -- Width
|
||||
type: heading
|
||||
level: 2
|
||||
collapsed: false
|
||||
-
|
||||
id: float-small-width
|
||||
title: Floating Callout Width - Small (in px)
|
||||
type: variable-number-slider
|
||||
default: 300
|
||||
min: 200
|
||||
max: 450
|
||||
step: 50
|
||||
format: px
|
||||
-
|
||||
id: float-medium-width
|
||||
title: Floating Callout Width - Medium (in px)
|
||||
type: variable-number-slider
|
||||
default: 400
|
||||
min: 300
|
||||
max: 550
|
||||
step: 50
|
||||
format: px
|
||||
-
|
||||
id: float-large-width
|
||||
title: Floating Callout Width - Large (in px)
|
||||
type: variable-number-slider
|
||||
default: 600
|
||||
min: 500
|
||||
max: 750
|
||||
step: 50
|
||||
format: px
|
||||
|
||||
-
|
||||
id: float-gap-title
|
||||
title: FC -- Gap & Margin
|
||||
type: heading
|
||||
level: 2
|
||||
collapsed: false
|
||||
-
|
||||
id: float-callout-top-margin
|
||||
title: Adjust top margin for Float Left and Float Right
|
||||
description: Can use em or px unit
|
||||
type: variable-text
|
||||
default: 0em
|
||||
-
|
||||
id: float-left-callout-margin-inline
|
||||
title: Adjust left-right margin for Float Left Callout
|
||||
description: Enter in this order - "left right". Can use em or px unit
|
||||
type: variable-text
|
||||
default: 0px 12px
|
||||
-
|
||||
id: float-right-callout-margin-inline
|
||||
title: Adjust left-right margin for Float Right Callout
|
||||
description: Enter in this order - "left right". Can use em or px unit
|
||||
type: variable-text
|
||||
default: 12px 0px
|
||||
|
||||
|
||||
|
||||
-
|
||||
id: mc-list-column-title
|
||||
title: List Column
|
||||
description: using `{.xxx-column-list-xxx}` and `#mcl/list-column`
|
||||
type: heading
|
||||
level: 1
|
||||
collapsed: true
|
||||
-
|
||||
id: list-column-width-title
|
||||
title: Width control for List Column
|
||||
type: heading
|
||||
level: 2
|
||||
collapsed: false
|
||||
-
|
||||
id: list-min-width
|
||||
title: Minimum Column Width (in px)
|
||||
type: variable-number-slider
|
||||
default: 200
|
||||
min: 100
|
||||
max: 500
|
||||
step: 50
|
||||
format: px
|
||||
|
||||
-
|
||||
id: list-column-deco-title
|
||||
title: Decoratives control for List Column
|
||||
type: heading
|
||||
level: 2
|
||||
collapsed: false
|
||||
-
|
||||
id: col-rule-width
|
||||
title: Ruler (vertical line between columns) width for List Column
|
||||
description: in px unit. Set to 0 to disable ruler
|
||||
type: variable-number-slider
|
||||
default: 1
|
||||
min: 0
|
||||
max: 4
|
||||
step: 1
|
||||
format: px
|
||||
-
|
||||
id: col-rule-color
|
||||
title: Ruler (vertical line between columns) color for List Column
|
||||
type: variable-themed-color
|
||||
format: hsl
|
||||
opacity: true
|
||||
default-light: '#'
|
||||
default-dark: '#'
|
||||
|
||||
|
||||
-
|
||||
id: mc-list-grid-title
|
||||
title: List Grid and List Card
|
||||
description: using `#mcl/list-grid` and `#mcl/list-card`
|
||||
type: heading
|
||||
level: 1
|
||||
collapsed: true
|
||||
|
||||
-
|
||||
id: list-grid-card-width-title
|
||||
title: Width control for List Grid and List Card
|
||||
type: heading
|
||||
level: 2
|
||||
collapsed: false
|
||||
-
|
||||
id: list-grid-min-width
|
||||
title: Minimum width for normal List Grid/Card
|
||||
description: For `#mcl-list-grid` or `#mcl-list-card`. Can use em or px unit
|
||||
type: variable-text
|
||||
default: 250px
|
||||
-
|
||||
id: list-grid-wide-min-width
|
||||
title: Minimum width for Wide List Grid/Card
|
||||
description: For `#mcl/list-grid-wide` or `#mcl/list-card-wide`. Can use em or px unit
|
||||
type: variable-text
|
||||
default: 350px
|
||||
|
||||
-
|
||||
id: list-card-deco-title
|
||||
title: Decoratives control for List Card
|
||||
type: heading
|
||||
level: 2
|
||||
collapsed: false
|
||||
-
|
||||
id: mcl-card-header-border-width
|
||||
title: Bottom border for first header in List Card
|
||||
description: Can use em or px unit. Set to 0 to disable the border
|
||||
type: variable-text
|
||||
default: 1px
|
||||
-
|
||||
id: mcl-card-bg-color
|
||||
title: Background color for List Card
|
||||
type: variable-themed-color
|
||||
format: hsl
|
||||
opacity: true
|
||||
default-light: '#'
|
||||
default-dark: '#'
|
||||
-
|
||||
id: mcl-card-gap
|
||||
title: Gap between cards for List Card
|
||||
description: Can use em or px unit
|
||||
type: variable-text
|
||||
default: 0.2em
|
||||
-
|
||||
id: mcl-card-border-width
|
||||
title: Border width for each card in List Card
|
||||
description: Can use em or px unit. Set to 0 to disable the border
|
||||
type: variable-text
|
||||
default: 1px
|
||||
-
|
||||
id: mcl-card-border-color
|
||||
title: Border color for each card in List Card
|
||||
type: variable-themed-color
|
||||
format: hsl
|
||||
opacity: true
|
||||
default-light: '#'
|
||||
default-dark: '#'
|
||||
|
||||
*/
|
||||
+396
@@ -0,0 +1,396 @@
|
||||
/* === README for MCL Wide Views snippet / Author: Faiz Khuzaimah / twitter: @faizkhuzaimah / github: https://github.com/efemkay
|
||||
Ver 0.9.6 (updated 2023-09-09) - Code refactor to make use predefined variables and more efficient code base
|
||||
- refactor all wide views features. require Obsidian installer v1.1.9.
|
||||
- fixed all issues from previous codebase
|
||||
Version 0.9.4 (updated 2023-07-05)
|
||||
- fixed wide-backlinks not working since Obsidian V1
|
||||
- improved support for Minimal V7
|
||||
|
||||
What is this snippet for?
|
||||
- for any users to use with any theme to complement any missing page/block width control
|
||||
- available cssClass:
|
||||
- wide-page
|
||||
- wide-table
|
||||
- wide-dataview
|
||||
- wide-callout
|
||||
- wide-backlinks
|
||||
- narrow-page
|
||||
- style settings toggle
|
||||
- is-adj-rll with adj-rll-max-width input
|
||||
|
||||
Important Notice
|
||||
- this snippet requires Obsidian installer version (not app version) of 1.1.9 or higher as it requires Electron v21
|
||||
|
||||
Credits
|
||||
- Kevin Powell Youtube channel
|
||||
*/
|
||||
|
||||
/* === Wide Page === */
|
||||
|
||||
/* -- Main Code - EV & RV -- */
|
||||
body .wide-page { --file-line-width: 100%; }
|
||||
|
||||
|
||||
/* -- Special adjustment for Community Themes */
|
||||
|
||||
/* Minimal */
|
||||
body[class*="minimal-tab-title"] .wide-page {
|
||||
--line-width: 100%;
|
||||
--max-width: 95%;
|
||||
--container-table-width: var(--line-width);
|
||||
--container-table-max-width: var(--max-width);
|
||||
}
|
||||
|
||||
/* AnuPpuccin */
|
||||
/* body .wide-page { --anp-preview-width-pct: 100%; } */
|
||||
|
||||
|
||||
/* === Adjustable RLL === */
|
||||
/* cssClass toggle to allow users to adjust the RLL via Style Settings.
|
||||
Obsidian v1.0.0 makes it easier to do adjustable RLL ;) */
|
||||
|
||||
/* -- Main Code - Editing and Reading View -- */
|
||||
body.is-adj-rll .view-content { --file-line-width: var(--adj-rll-max-width); }
|
||||
|
||||
|
||||
|
||||
/* === Narrow Page === */
|
||||
/* cssClass YAML to allow users with disabled RLL to introduce RLL per
|
||||
page/note basis. width is following obsidian default setting, or you
|
||||
can change it via MCL's Adjustable RLL */
|
||||
|
||||
/* -- Main Code - Editing and Reading View -- */
|
||||
.narrow-page.markdown-source-view .cm-sizer,
|
||||
.narrow-page.markdown-preview-view .markdown-preview-sizer {
|
||||
max-width: var(--file-line-width);
|
||||
margin-inline: auto;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* === General Setups for Wide Blocks === */
|
||||
|
||||
/* -- Setup for @container -- */
|
||||
:is(.wide-table-global, .wide-dataview-global, .wide-callout-global, .wide-backlinks-global) .markdown-source-view.is-readable-line-width,
|
||||
:is(.wide-table-global, .wide-dataview-global, .wide-callout-global, .wide-backlinks-global) .markdown-preview-view.is-readable-line-width,
|
||||
:is(.wide-table, .wide-dataview, .wide-callout, .wide-backlinks).markdown-source-view.is-readable-line-width,
|
||||
:is(.wide-table, .wide-dataview, .wide-callout, .wide-backlinks).markdown-preview-view.is-readable-line-width {
|
||||
container-name: content-view;
|
||||
container-type: inline-size;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* === Wide Blocks - Wide Table === */
|
||||
|
||||
/* -- Mai.n Code - EV & RV -- */
|
||||
body {
|
||||
--wide-tbl-left-ev-adj: -4rem;
|
||||
--wide-tbl-min-left-ev: 0.5rem;
|
||||
--wide-tbl-width-ev: calc( var(--file-line-width) - var(--wide-tbl-left-ev-adj) );
|
||||
}
|
||||
body:has(.cm-gutters) {
|
||||
--wide-tbl-left-ev-adj: 1rem;
|
||||
--wide-tbl-min-left-ev: 6rem;
|
||||
}
|
||||
@container content-view (width > 50px) {
|
||||
/* editing view */
|
||||
:is(.wide-table-global, .wide-table) .cm-embed-block.cm-table-widget {
|
||||
width: calc(100cqi - 4rem);
|
||||
margin-left: calc( max( 100cqi - var(--wide-tbl-width-ev), var(--wide-tbl-min-left-ev) ) / 2 * -1 ) !important;
|
||||
}
|
||||
|
||||
/* reading view */
|
||||
:is(.wide-table-global .markdown-preview-view, .wide-table.markdown-preview-view) div:has(> table) {
|
||||
width: 100cqi;
|
||||
margin-left: calc( max( 100cqi - var(--file-line-width), 1rem ) / 2 * -1 ) !important;
|
||||
}
|
||||
/* centering the table a bit */
|
||||
:is(.wide-table-global, .wide-table) .cm-embed-block.cm-table-widget table,
|
||||
:is(.wide-table-global .markdown-preview-view, .wide-table.markdown-preview-view) div > table
|
||||
{ margin-inline: auto; }
|
||||
}
|
||||
|
||||
|
||||
/* -- Special adjustment for Community Themes */
|
||||
|
||||
/* Minimal, complete re-write for the theme due to many !important used by the theme */
|
||||
body[class*="minimal-tab-title"] {
|
||||
--wide-tbl-left-adj: -4rem;
|
||||
--wide-tbl-width-adj: 2rem;
|
||||
}
|
||||
body[class*="minimal-tab-title"]:has(.cm-gutters) {
|
||||
--wide-tbl-left-adj: -4rem;
|
||||
--wide-tbl-width-adj: 0rem;
|
||||
}
|
||||
body[class*="minimal-tab-title"]:has(.cm-gutters).minimal-theme {
|
||||
--wide-tbl-left-adj: 0rem;
|
||||
}
|
||||
@container content-view (width > 50px) {
|
||||
body[class*="minimal-tab-title"][class*="wide-table-global"] .markdown-source-view .cm-contentContainer.cm-contentContainer .cm-embed-block.cm-table-widget,
|
||||
body[class*="minimal-tab-title"] .wide-table.markdown-source-view .cm-contentContainer.cm-contentContainer .cm-embed-block.cm-table-widget {
|
||||
width: calc(100cqi - 4rem) !important;
|
||||
max-width: 100%;
|
||||
margin-left: calc( var(--wide-tbl-left-adj) / 2 * -1 ) !important;
|
||||
}
|
||||
body[class*="minimal-tab-title"][class*="wide-table-global"] .markdown-preview-view .markdown-preview-sizer div:has(> table),
|
||||
body[class*="minimal-tab-title"] .wide-table.markdown-preview-view .markdown-preview-sizer div:has(> table) {
|
||||
width: calc(100cqi - 2rem - var(--wide-tbl-width-adj) ) !important;
|
||||
max-width: 100%;
|
||||
margin-left: calc( var(--wide-tbl-left-adj) / 2 * -1 ) !important;
|
||||
}
|
||||
/* centering the table a bit */
|
||||
body[class*="minimal-tab-title"][class*="wide-table-global"] .markdown-source-view .cm-contentContainer.cm-contentContainer .cm-embed-block.cm-table-widget table,
|
||||
body[class*="minimal-tab-title"] .wide-table.markdown-source-view .cm-contentContainer.cm-contentContainer .cm-embed-block.cm-table-widget table,
|
||||
body[class*="minimal-tab-title"][class*="wide-table-global"] .markdown-preview-view .markdown-preview-sizer div > table,
|
||||
body[class*="minimal-tab-title"] .wide-table.markdown-preview-view .markdown-preview-sizer div > table
|
||||
{ margin-inline: auto; }
|
||||
}
|
||||
|
||||
/* Catppuccin */
|
||||
body[class*="ctp-"].is-adj-rll:not([class*="anp-default"]) { --wide-tbl-left-ev-adj: -8rem; }
|
||||
|
||||
|
||||
|
||||
/* === Wide Blocks - Wide Dataview === */
|
||||
/* there are options to enable it (a) per page basis and (b) globally
|
||||
however, editing view is a hackaround */
|
||||
|
||||
/* -- Main Code - EV & RV -- */
|
||||
body {
|
||||
--wide-dv-left-ev-adj: -4rem;
|
||||
--wide-dv-min-left-ev: 0.5rem;
|
||||
--wide-dv-width-ev: calc( var(--file-line-width) - var(--wide-dv-left-ev-adj) );
|
||||
}
|
||||
body:has(.cm-gutters) {
|
||||
--wide-dv-left-ev-adj: 1.7rem;
|
||||
--wide-dv-min-left-ev: 6.5rem;
|
||||
}
|
||||
@container content-view (width > 50px) {
|
||||
:is(.wide-dataview-global, .wide-dataview) .cm-preview-code-block:has(> .block-language-dataview),
|
||||
:is(.wide-dataview-global, .wide-dataview) .cm-preview-code-block:has(> .block-language-dataviewjs) {
|
||||
width: calc(100cqi - 4rem );
|
||||
margin-left: calc( max( 100cqi - var(--wide-dv-width-ev), var(--wide-dv-min-left-ev) ) / 2 * -1 ) !important;
|
||||
}
|
||||
:is(.wide-dataview-global, .wide-dataview) div:has(> .block-language-dataview),
|
||||
:is(.wide-dataview-global, .wide-dataview) div:has(> .block-language-dataviewjs) {
|
||||
width: 100cqi;
|
||||
margin-left: calc( max( 100cqi - var(--file-line-width), 1rem ) / 2 * -1 ) !important;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* -- Special adjustment for Community Themes */
|
||||
|
||||
/* Minimal, complete re-write for the theme */
|
||||
body[class*="minimal-tab-title"] {
|
||||
--wide-dv-width-adj: 2rem;
|
||||
}
|
||||
body[class*="minimal-tab-title"]:has(.cm-gutters) {
|
||||
--wide-dv-left-ev-adj: -4rem;
|
||||
--wide-dv-width-adj: 0rem;
|
||||
}
|
||||
body[class*="minimal-tab-title"]:has(.cm-gutters).minimal-theme {
|
||||
--wide-dv-left-ev-adj: 0rem;
|
||||
}
|
||||
@container content-view (width > 50px) {
|
||||
body[class*="minimal-tab-title"][class*="wide-dataview-global"] .markdown-source-view .cm-contentContainer.cm-contentContainer .cm-content .cm-preview-code-block:has(> .block-language-dataview),
|
||||
body[class*="minimal-tab-title"] .wide-dataview.markdown-source-view .cm-contentContainer.cm-contentContainer .cm-content .cm-preview-code-block:has(> .block-language-dataview),
|
||||
body[class*="minimal-tab-title"][class*="wide-dataview-global"] .markdown-source-view .cm-contentContainer.cm-contentContainer .cm-content .cm-preview-code-block:has(> .block-language-dataviewjs),
|
||||
body[class*="minimal-tab-title"] .wide-dataview.markdown-source-view .cm-contentContainer.cm-contentContainer .cm-content .cm-preview-code-block:has(> .block-language-dataviewjs) {
|
||||
width: calc(100cqi - 4rem);
|
||||
max-width: 100%;
|
||||
margin-left: calc( var(--wide-dv-left-ev-adj) / 2 * -1 ) !important;
|
||||
}
|
||||
body[class*="minimal-tab-title"][class*="wide-dataview-global"] .markdown-preview-view div:has(> .block-language-dataview),
|
||||
body[class*="minimal-tab-title"] .wide-dataview.markdown-preview-view div:has(> .block-language-dataview),
|
||||
body[class*="minimal-tab-title"][class*="wide-dataview-global"] .markdown-preview-view div:has(> .block-language-dataviewjs),
|
||||
body[class*="minimal-tab-title"] .wide-dataview.markdown-preview-view div:has(> .block-language-dataviewjs) {
|
||||
width: calc(100cqi - 2rem - var(--wide-dv-width-adj) );
|
||||
max-width: 100%;
|
||||
margin-left: calc( var(--wide-dv-left-ev-adj) / 2 * -1 ) !important;
|
||||
}
|
||||
/* centering the table a bit */
|
||||
body[class*="minimal-tab-title"][class*="wide-dataview-global"] .markdown-source-view .cm-contentContainer.cm-contentContainer .cm-content table,
|
||||
body[class*="minimal-tab-title"] .wide-dataview.markdown-source-view .cm-contentContainer.cm-contentContainer .cm-content table,
|
||||
body[class*="minimal-tab-title"] .wide-dataview.markdown-preview-view .markdown-preview-sizer div > table {
|
||||
width: calc( 100% );
|
||||
}
|
||||
}
|
||||
|
||||
/* Catppuccin */
|
||||
body[class*="ctp-"].is-adj-rll:not([class*="anp-default"]) { --wide-dv-left-ev-adj: -8rem; }
|
||||
|
||||
|
||||
|
||||
/* === Wide Blocks - Wide Callout === */
|
||||
/* there are options to enable it (a) per page basis and (b) globally
|
||||
however, editing view is a hackaround
|
||||
!important needed because app's default uses it `.markdown-source-view.mod-cm6 .cm-content > *` */
|
||||
|
||||
/* -- Main Code - EV & RV -- */
|
||||
body {
|
||||
--wide-co-left-ev-adj: -3.8rem;
|
||||
--wide-co-min-left-ev: 0.5rem;
|
||||
--wide-co-width-ev-adj: 4rem;
|
||||
--wide-co-width-ev: calc(var(--file-line-width) - var(--wide-co-left-ev-adj) );
|
||||
}
|
||||
body:has(.cm-gutters) {
|
||||
--wide-co-left-ev-adj: 1.7rem;
|
||||
--wide-co-min-left-ev: 6.5rem;
|
||||
}
|
||||
@container content-view (width > 50px) {
|
||||
:is(.wide-callout-global, .wide-callout) .cm-embed-block.cm-callout {
|
||||
width: calc( 100cqi - var(--wide-co-width-ev-adj) );
|
||||
margin-left: calc( max( 100cqi - var(--wide-co-width-ev), var(--wide-co-min-left-ev) ) / 2 * -1 ) !important;
|
||||
}
|
||||
:is(.wide-callout-global, .wide-callout) .markdown-preview-sizer > div:has(> .callout) {
|
||||
width: 100cqi;
|
||||
margin-left: calc( max( 100cqi - var(--file-line-width), 1rem ) / 2 * -1 ) !important;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* -- Special adjustment for Community Themes */
|
||||
|
||||
/* Minimal, complete re-write for the theme */
|
||||
body[class*="minimal-tab-title"] { --folding-toggle: 1; }
|
||||
body.minimal-theme { --folding-toggle: 0; }
|
||||
body.minimal-theme:not(:has(.cm-gutters)) { --folding-toggle: 1; }
|
||||
@container content-view (width > 50px) {
|
||||
body[class*="minimal-tab-title"][class*="wide-callout-global"] .markdown-source-view .cm-contentContainer.cm-contentContainer .cm-content .cm-embed-block.cm-callout,
|
||||
body[class*="minimal-tab-title"] .wide-callout.markdown-source-view .cm-contentContainer.cm-contentContainer .cm-content .cm-embed-block.cm-callout {
|
||||
width: calc(100cqi - 4rem);
|
||||
max-width: 100%;
|
||||
margin-left: calc( var(--folding-offset) * var(--folding-toggle) ) !important;
|
||||
}
|
||||
body[class*="minimal-tab-title"][class*="wide-callout-global"] .markdown-preview-view .markdown-preview-sizer > div:has(> .callout),
|
||||
body[class*="minimal-tab-title"] .wide-callout.markdown-preview-view .markdown-preview-sizer > div:has(> .callout) {
|
||||
width: calc(100cqi - 2rem - 2rem * var(--folding-toggle) );
|
||||
max-width: calc(100% - 0rem);
|
||||
margin-left: calc( var(--folding-offset) * var(--folding-toggle) ) !important;
|
||||
}
|
||||
}
|
||||
|
||||
/* AnuPpuccin */
|
||||
body[class*="anp-"] { --wide-co-width-ev-adj: 3.5rem; }
|
||||
|
||||
/* Catppuccin */
|
||||
body[class*="ctp-"].is-adj-rll:not([class*="anp-default"]) { --wide-co-left-ev-adj: -7.8rem; }
|
||||
|
||||
|
||||
|
||||
/* === Wide Blocks - Wide Backlinks === */
|
||||
|
||||
/* -- Main Code - EV & RV -- */
|
||||
body {
|
||||
--wide-bl-left-ev-adj: 4rem;
|
||||
--wide-bl-width-ev: calc(var(--file-line-width) + var(--wide-bl-left-ev-adj) );
|
||||
}
|
||||
@container content-view (width > 50px) {
|
||||
:is(.wide-backlinks-global .markdown-source-view, .wide-backlinks.markdown-source-view) .embedded-backlinks {
|
||||
width: calc(100cqi - 3.5rem);
|
||||
margin-left: calc( max( 100cqi - var(--wide-bl-width-ev), 1rem ) / 2 * -1 );
|
||||
}
|
||||
:is(.wide-backlinks-global .markdown-preview-view, .wide-backlinks.markdown-preview-view) .embedded-backlinks {
|
||||
width: calc(100cqi - 0rem);
|
||||
margin-left: calc( max( 100cqi - var(--file-line-width), 1rem ) / 2 * -1 );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* -- Special adjustment for Community Themes */
|
||||
|
||||
/* Minimal, complete re-write for the theme */
|
||||
body[class*="minimal-tab-title"] {
|
||||
--wide-bl-width-adj: 4rem;
|
||||
}
|
||||
body[class*="minimal-tab-title"]:has(.cm-gutters) {
|
||||
--wide-bl-width-adj: 0rem;
|
||||
}
|
||||
@container content-view (width > 50px) {
|
||||
body[class*="minimal-tab-title"][class*="wide-backlinks-global"] .markdown-source-view .cm-sizer .embedded-backlinks,
|
||||
body[class*="minimal-tab-title"] .wide-backlinks.markdown-source-view .cm-sizer .embedded-backlinks {
|
||||
width: calc(100cqi - 4.5rem);
|
||||
max-width: unset;
|
||||
margin-left: calc( var(--wide-bl-width-adj) / 2 * 1 ) !important;
|
||||
}
|
||||
body[class*="minimal-tab-title"][class*="wide-backlinks-global"] .markdown-preview-view .embedded-backlinks,
|
||||
body[class*="minimal-tab-title"] .wide-backlinks.markdown-preview-view .embedded-backlinks {
|
||||
width: calc( 100cqi - 2rem - var(--wide-bl-width-adj)/2 );
|
||||
margin-left: calc( max( 100cqi - var(--line-width) - var(--wide-bl-width-adj) , 4rem ) / 2 * -1 ) !important;
|
||||
}
|
||||
}
|
||||
|
||||
/* Catppuccin */
|
||||
body[class*="ctp-"].is-adj-rll:not([class*="anp-default"]) { --wide-bl-left-ev-adj: 13.5rem; }
|
||||
|
||||
|
||||
|
||||
/* @settings
|
||||
|
||||
name: Modular CSS Layout - Wide Views
|
||||
id: modular-css-layout-wv
|
||||
settings:
|
||||
|
||||
-
|
||||
id: adj-rll-title
|
||||
title: Adjustable RLL Settings
|
||||
description: Control max-width for all page/note by default. RLL must be **enabled**
|
||||
type: heading
|
||||
level: 2
|
||||
collapsed: true
|
||||
-
|
||||
id: is-adj-rll
|
||||
title: Enable Adjustable RLL
|
||||
description: Add is-adj-rll class to the body element
|
||||
type: class-toggle
|
||||
-
|
||||
id: adj-rll-max-width
|
||||
title: Max Width for Normal Width page
|
||||
description: Can use any unit e.g. px, em, ch
|
||||
type: variable-text
|
||||
default: 700px
|
||||
|
||||
-
|
||||
id: wide-view-title
|
||||
title: Vault-wide toggle for Wide Blocks
|
||||
description: For wide -table/-dataview/-callout/-backlinks. RLL must be **enabled**
|
||||
type: heading
|
||||
level: 2
|
||||
collapsed: true
|
||||
-
|
||||
id: wide-dataview-global
|
||||
title: Enable `wide-dataview` vault-wide
|
||||
description: use `wide-dataview` in yaml to enable only for selected note/page
|
||||
type: class-toggle
|
||||
-
|
||||
id: wide-table-global
|
||||
title: Enable `wide-table` vault-wide
|
||||
description: use `wide-table` in yaml to enable only for selected note/page
|
||||
type: class-toggle
|
||||
-
|
||||
id: wide-callout-global
|
||||
title: Enable `wide-callout` vault-wide
|
||||
description: use `wide-callout` in yaml to enable only for selected note/page
|
||||
type: class-toggle
|
||||
-
|
||||
id: wide-backlinks-global
|
||||
title: Enable `wide-backlinks` vault-wide
|
||||
description: use `wide-backlinks` in yaml to enable only for selected note/page
|
||||
type: class-toggle
|
||||
|
||||
-
|
||||
id: narrow-view-title
|
||||
title: Narrow Page Settings
|
||||
description: Control max-width page/note with cssClass `narrow-page`. RLL must be **disabled**
|
||||
type: heading
|
||||
level: 2
|
||||
collapsed: true
|
||||
-
|
||||
id: narrow-max-width
|
||||
title: Max Width for Narrow View page (any unit e.g. px, em, ch)
|
||||
type: variable-text
|
||||
default: 750px
|
||||
|
||||
*/
|
||||
Vendored
+9
@@ -0,0 +1,9 @@
|
||||
.two-columns {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
gap: 20px;
|
||||
}
|
||||
|
||||
.column {
|
||||
flex: 1;
|
||||
}
|
||||
Vendored
+19
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"types": {
|
||||
"aliases": "aliases",
|
||||
"cssclasses": "multitext",
|
||||
"tags": "tags",
|
||||
"created": "datetime",
|
||||
"event_date": "datetime",
|
||||
"event_duration": "number",
|
||||
"event.date": "datetime",
|
||||
"bug_recorded": "datetime",
|
||||
"context_role": "text",
|
||||
"iteration_end": "datetime",
|
||||
"iteration_start": "datetime",
|
||||
"iterdef_start": "datetime",
|
||||
"iterdef_end": "datetime",
|
||||
"base_created": "datetime",
|
||||
"base_updated": "datetime"
|
||||
}
|
||||
}
|
||||
Vendored
+253
@@ -0,0 +1,253 @@
|
||||
{
|
||||
"main": {
|
||||
"id": "e7657f07a517ef91",
|
||||
"type": "split",
|
||||
"children": [
|
||||
{
|
||||
"id": "7d67a6c0245aeef2",
|
||||
"type": "tabs",
|
||||
"children": [
|
||||
{
|
||||
"id": "10dd868efe437d0d",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "markdown",
|
||||
"state": {
|
||||
"file": "_templates/Default Note.md",
|
||||
"mode": "source",
|
||||
"source": false
|
||||
},
|
||||
"icon": "lucide-file",
|
||||
"title": "Default Note"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "4c9cbec55e399ce4",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "markdown",
|
||||
"state": {
|
||||
"file": "_templates/Add-Work.md",
|
||||
"mode": "source",
|
||||
"source": false
|
||||
},
|
||||
"icon": "lucide-file",
|
||||
"title": "Add-Work"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "8a8673d1d65a8d04",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "bases",
|
||||
"state": {
|
||||
"file": "50-Aufgabenplanung/Taskliste.base",
|
||||
"viewName": "Table"
|
||||
},
|
||||
"icon": "lucide-table",
|
||||
"title": "Taskliste"
|
||||
}
|
||||
}
|
||||
],
|
||||
"currentTab": 2
|
||||
}
|
||||
],
|
||||
"direction": "vertical"
|
||||
},
|
||||
"left": {
|
||||
"id": "5511791727ef5375",
|
||||
"type": "split",
|
||||
"children": [
|
||||
{
|
||||
"id": "7debd1fb2c0dacbe",
|
||||
"type": "tabs",
|
||||
"children": [
|
||||
{
|
||||
"id": "3b234dede123cd0c",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "file-explorer",
|
||||
"state": {
|
||||
"sortOrder": "alphabetical",
|
||||
"autoReveal": false
|
||||
},
|
||||
"icon": "lucide-folder-closed",
|
||||
"title": "Files"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "0f2414cbc0900ae9",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "search",
|
||||
"state": {
|
||||
"query": "",
|
||||
"matchingCase": false,
|
||||
"explainSearch": false,
|
||||
"collapseAll": false,
|
||||
"extraContext": false,
|
||||
"sortOrder": "alphabetical"
|
||||
},
|
||||
"icon": "lucide-search",
|
||||
"title": "Search"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "17979cf4c0f2512e",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "bookmarks",
|
||||
"state": {},
|
||||
"icon": "lucide-bookmark",
|
||||
"title": "Bookmarks"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"direction": "horizontal",
|
||||
"width": 300
|
||||
},
|
||||
"right": {
|
||||
"id": "3580347cbf61afa4",
|
||||
"type": "split",
|
||||
"children": [
|
||||
{
|
||||
"id": "30a17088b7a811a3",
|
||||
"type": "tabs",
|
||||
"children": [
|
||||
{
|
||||
"id": "98a926a8e591ce81",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "backlink",
|
||||
"state": {
|
||||
"file": "_templates/Add-Iteration.md",
|
||||
"collapseAll": false,
|
||||
"extraContext": false,
|
||||
"sortOrder": "alphabetical",
|
||||
"showSearch": false,
|
||||
"searchQuery": "",
|
||||
"backlinkCollapsed": false,
|
||||
"unlinkedCollapsed": true
|
||||
},
|
||||
"icon": "links-coming-in",
|
||||
"title": "Backlinks for Add-Iteration"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "7b12dda901ff8aad",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "outgoing-link",
|
||||
"state": {
|
||||
"file": "_templates/Add-Iteration.md",
|
||||
"linksCollapsed": false,
|
||||
"unlinkedCollapsed": true
|
||||
},
|
||||
"icon": "links-going-out",
|
||||
"title": "Outgoing links from Add-Iteration"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "12065cab735be01b",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "tag",
|
||||
"state": {
|
||||
"sortOrder": "frequency",
|
||||
"useHierarchy": true,
|
||||
"showSearch": false,
|
||||
"searchQuery": ""
|
||||
},
|
||||
"icon": "lucide-tags",
|
||||
"title": "Tags"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "4f635faa913baf7f",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "all-properties",
|
||||
"state": {
|
||||
"sortOrder": "frequency",
|
||||
"showSearch": false,
|
||||
"searchQuery": ""
|
||||
},
|
||||
"icon": "lucide-archive",
|
||||
"title": "All properties"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "4fb0fa1a25f1fa77",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "outline",
|
||||
"state": {
|
||||
"file": "_templates/Add-Iteration.md",
|
||||
"followCursor": false,
|
||||
"showSearch": false,
|
||||
"searchQuery": ""
|
||||
},
|
||||
"icon": "lucide-list",
|
||||
"title": "Outline of Add-Iteration"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"direction": "horizontal",
|
||||
"width": 300,
|
||||
"collapsed": true
|
||||
},
|
||||
"left-ribbon": {
|
||||
"hiddenItems": {
|
||||
"switcher:Open quick switcher": false,
|
||||
"graph:Open graph view": false,
|
||||
"canvas:Create new canvas": false,
|
||||
"daily-notes:Open today's daily note": false,
|
||||
"templates:Insert template": false,
|
||||
"command-palette:Open command palette": false,
|
||||
"bases:Create new base": false,
|
||||
"templater-obsidian:Templater": false
|
||||
}
|
||||
},
|
||||
"active": "8a8673d1d65a8d04",
|
||||
"lastOpenFiles": [
|
||||
"50-Aufgabenplanung/Erste Schritte der Aufgabenplanung.md",
|
||||
"50-Aufgabenplanung/Backup Konfiguration evaluieren.md",
|
||||
"50-Aufgabenplanung/Taskliste.base",
|
||||
"50-Aufgabenplanung/Die Angebotssynchronisation muss sicherstellen, dass eine passende Kalkulation existiert.md",
|
||||
"50-Aufgabenplanung/Docker Repository Service im Cluster bereitstellen.md",
|
||||
"Juli Notes.base",
|
||||
"Personal OS.md",
|
||||
"20-projects/JULI.md",
|
||||
"50-Aufgabenplanung",
|
||||
"20-projects/Juli",
|
||||
"00-inbox/Ein neuer Arbeitszeitplan überschreibt den aktuellen Plan.md",
|
||||
"00-inbox/Julius landet mit seiner E-Mail in einer Login Schleife.md",
|
||||
"90-dashboards/Hygiene.md",
|
||||
"00-inbox/Tagesabschluss in der Zeiterfassung ermöglichen.md",
|
||||
"30-tasks/Arbeitszeit aufteilen.md",
|
||||
"90-dashboards/Hygiene Migration.md",
|
||||
"30-tasks/Review erfasster Mehraufwände.md",
|
||||
"40-notes/Iteration 3.md",
|
||||
"40-notes/Demo Iteration 2.md",
|
||||
"40-notes/Iteration 1.md",
|
||||
"40-notes/Iteration 2.md",
|
||||
"40-notes/Backlog.md",
|
||||
"40-notes/Austausch Dashboard Painpoints.md",
|
||||
"20-projects/Avicenna.md",
|
||||
"10-contexts/health.md",
|
||||
"10-contexts/Genius.ceo.md",
|
||||
"20-projects/medmix Deutschland GmbH.md",
|
||||
"30-tasks/Projektpositionen können abgeschlossen werden.md",
|
||||
"30-tasks/Liste der Mehraufwände am Projekt.md",
|
||||
"30-tasks/Personalstamm implementieren.md",
|
||||
"00-inbox/Untitled.base",
|
||||
"_attachments",
|
||||
"_templates/scripts/auto_increment.js",
|
||||
"_templates/scripts",
|
||||
"_templates"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
---
|
||||
components:
|
||||
- contextual
|
||||
- iterbind
|
||||
- actionable
|
||||
context_target: "[[JULI]]"
|
||||
context_role: project
|
||||
context_relation: belongs_to
|
||||
iterbind_target: "[[Backlog]]"
|
||||
iterbind_status: planned
|
||||
iterbind_role: primary
|
||||
iterbind_order: 0
|
||||
action_status: open
|
||||
action_effort_minutes: 360
|
||||
action_impact: 3
|
||||
action_result: ""
|
||||
base_created: 2026-06-17T17:40
|
||||
base_modified: 2026-06-19T17:48
|
||||
---
|
||||
## Action
|
||||
|
||||
- Next step:
|
||||
- Definition of done: Der Kontingentverbrauch ist an allen Positionen und Subpositionen visualisierbar.
|
||||
|
||||
## Result
|
||||
@@ -0,0 +1,4 @@
|
||||
---
|
||||
context_target: "[[JULI]]"
|
||||
iterbind_target: "[[Backlog]]"
|
||||
---
|
||||
@@ -0,0 +1,16 @@
|
||||
---
|
||||
components:
|
||||
- contextual
|
||||
context_target: "[[JULI]]"
|
||||
context_role: project
|
||||
context_relation: belongs_to
|
||||
iterbind_target: "[[Backlog]]"
|
||||
base_created: 2026-06-17T17:41
|
||||
base_modified: 2026-06-19T17:48
|
||||
action_status: open
|
||||
action_effort_minutes: 360
|
||||
action_impact: 5
|
||||
---
|
||||
|
||||
Ähnlich zu der Arbeitszeitzuordnung muss auch die Materialerfassung die häppchenweise Erfassung unterstützen.
|
||||
Es wird der Artikel abgefragt und anschließend ein passendes Formular dargestellt. Die Einheit ist vorgefüllt und eine Menge kann angegeben werden.
|
||||
@@ -0,0 +1,13 @@
|
||||
---
|
||||
components:
|
||||
- contextual
|
||||
context_target: "[[JULI]]"
|
||||
context_role: project
|
||||
context_relation: belongs_to
|
||||
iterbind_target: "[[Iteration 3]]"
|
||||
base_created: 2026-06-17T17:35
|
||||
base_modified: 2026-06-19T17:49
|
||||
action_status: open
|
||||
action_effort_minutes: 240
|
||||
action_impact: 3
|
||||
---
|
||||
@@ -0,0 +1,4 @@
|
||||
---
|
||||
context_target: "[[JULI]]"
|
||||
iterbind_target: "[[Backlog]]"
|
||||
---
|
||||
@@ -0,0 +1,13 @@
|
||||
---
|
||||
components:
|
||||
- contextual
|
||||
- actionable
|
||||
- iterbind
|
||||
context_target: "[[JULI]]"
|
||||
iterbind_target: "[[Iteration 3]]"
|
||||
base_created: 2026-06-17T18:12
|
||||
base_modified: 2026-06-24T16:23
|
||||
action_status: open
|
||||
action_effort_minutes: 240
|
||||
action_impact: 4
|
||||
---
|
||||
@@ -0,0 +1,53 @@
|
||||
filters:
|
||||
and:
|
||||
- file.hasLink("Iteration 2")
|
||||
formulas:
|
||||
Aufwand (ET: action_effort_minutes / 60 / 8
|
||||
properties:
|
||||
formula.Aufwand (ET:
|
||||
displayName: Aufwand (ET)
|
||||
views:
|
||||
- type: table
|
||||
name: Table
|
||||
order:
|
||||
- file.name
|
||||
- action_status
|
||||
- formula.Aufwand (ET
|
||||
- action_impact
|
||||
- action_effort_minutes
|
||||
sort: []
|
||||
columnSize:
|
||||
formula.Aufwand (ET: 138
|
||||
- type: kanban-view
|
||||
name: View
|
||||
filters:
|
||||
and:
|
||||
- "!action_status.isEmpty()"
|
||||
columnOrders:
|
||||
file.file:
|
||||
- 00-inbox/Arbeitszeit Sonstiges nur mit Kommentar.md
|
||||
- 00-inbox/Arbeitszeit aufteilen.md
|
||||
- 00-inbox/Arbeitszeit taggen.md
|
||||
- 00-inbox/Personalstamm implementieren.md
|
||||
- 00-inbox/Werkstatt als Systemprojekt aufnehmen.md
|
||||
- 30-tasks/Zeit mit Projekt kann nicht auf Allgemein gebucht werden.md
|
||||
- 30-tasks/Zeitzuordnung wird durch Sync zurückgesetzt.md
|
||||
note.action_status:
|
||||
- open
|
||||
- done
|
||||
cardOrders:
|
||||
file.file: {}
|
||||
note.action_status: {}
|
||||
"file.file\x1fnote.action_status": {}
|
||||
columnColors:
|
||||
file.file: {}
|
||||
note.action_status: {}
|
||||
groupByProperty: note.action_status
|
||||
swimlaneByProperty: note.action_status
|
||||
swimlaneOrders:
|
||||
"file.file\x1fnote.action_status":
|
||||
- done
|
||||
- open
|
||||
- Uncategorized
|
||||
collapsedLanes:
|
||||
"file.file\x1fnote.action_status": []
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
container: true
|
||||
created: 2026-05-27T16:37:00
|
||||
tags:
|
||||
---
|
||||
@@ -0,0 +1,9 @@
|
||||
---
|
||||
container: true
|
||||
created: 2026-05-26T00:00:00
|
||||
tags: []
|
||||
---
|
||||
|
||||
# Health
|
||||
|
||||
Ongoing area of responsibility — physical and mental wellbeing.
|
||||
@@ -0,0 +1,11 @@
|
||||
---
|
||||
container: true
|
||||
created: 2026-05-26
|
||||
tags: []
|
||||
---
|
||||
|
||||
# Work
|
||||
|
||||
Ongoing area of responsibility — professional commitments.
|
||||
|
||||
Signature: `container` + no `parent` → context archetype (SPEC §2.3).
|
||||
@@ -0,0 +1,10 @@
|
||||
---
|
||||
container: true
|
||||
status: open
|
||||
parent: "[[Genius.ceo]]"
|
||||
created: 2026-05-27T16:00:00
|
||||
tags:
|
||||
- customer-project
|
||||
---
|
||||
|
||||
# Avicenna Dashboard Entwicklung
|
||||
@@ -0,0 +1,102 @@
|
||||
---
|
||||
components:
|
||||
- contextual
|
||||
context_target: "[[Genius.ceo]]"
|
||||
context_role: customer
|
||||
status: open
|
||||
created: 2026-05-27T16:00:00
|
||||
tags:
|
||||
- customer-project
|
||||
cssclasses:
|
||||
- wide-page
|
||||
---
|
||||
# JULI Dashboard Entwicklung
|
||||
> [!multi-column]
|
||||
>> [!summary]+ Kalender
|
||||
>> ```dataview
|
||||
>> Calendar time_at AS "Datum"
|
||||
>> FROM ""
|
||||
>> WHERE time_at AND parent = this.file.link
|
||||
>> SORT time_at ASC
|
||||
>> ```
|
||||
>
|
||||
>> [!summary|min-0]+ Iterationen
|
||||
> > ```dataview
|
||||
> > TABLE
|
||||
> > iterdef_status AS "Status",
|
||||
> > iterdef_start AS "Start"
|
||||
> > WHERE context_target = this.file.link AND context_role = "Iteration"
|
||||
> > SORT iterdef_id DESC
|
||||
> > ```
|
||||
|
||||
## Workspace
|
||||
```base
|
||||
filters:
|
||||
and:
|
||||
- file.hasLink(this.file.path)
|
||||
formulas:
|
||||
Aufwand (ET: action_effort_minutes / 60 / 8
|
||||
properties:
|
||||
formula.Aufwand (ET:
|
||||
displayName: Aufwand (ET)
|
||||
views:
|
||||
- type: kanban-view
|
||||
name: Planning Board
|
||||
filters:
|
||||
and:
|
||||
- context_target == link("JULI")
|
||||
- "!iterbind_target.isEmpty()"
|
||||
order:
|
||||
- formula.Aufwand (ET
|
||||
columnOrders:
|
||||
file.file:
|
||||
- 00-inbox/Daten Eintragungsfortschritt sichtbar machen.md
|
||||
- 00-inbox/Einzelpositionserfassung für die Materialliste.md
|
||||
- 00-inbox/Export der abrechenbaren Mehraufwände.md
|
||||
- 30-tasks/Arbeitszeit Sonstiges nur mit Kommentar.md
|
||||
- 30-tasks/Arbeitszeit aufteilen.md
|
||||
- 30-tasks/Arbeitszeit taggen.md
|
||||
- 30-tasks/Liste der Mehraufwände am Projekt.md
|
||||
- 30-tasks/Passwort ändern.md
|
||||
- 30-tasks/Personalstamm implementieren.md
|
||||
- 30-tasks/Projektpositionen können abgeschlossen werden.md
|
||||
- 30-tasks/Review erfasster Mehraufwände.md
|
||||
- 30-tasks/Werkstatt als Systemprojekt aufnehmen.md
|
||||
- 30-tasks/Zeit mit Projekt kann nicht auf Allgemein gebucht werden.md
|
||||
- 30-tasks/Zeitzuordnung wird durch Sync zurückgesetzt.md
|
||||
- 40-notes/Austausch Dashboard Painpoints.md
|
||||
- 40-notes/Backlog.md
|
||||
- 40-notes/Demo Iteration 2.md
|
||||
- 40-notes/Iteration 1.md
|
||||
- 40-notes/Iteration 2.md
|
||||
- 40-notes/Iteration 3.md
|
||||
- 40-notes/Onboarding von Philipp Töbelmann.md
|
||||
note.iterbind_target:
|
||||
- "[[Backlog]]"
|
||||
- "[[Iteration 3]]"
|
||||
- "[[Iteration 2]]"
|
||||
- "[[Iteration 1]]"
|
||||
cardOrders:
|
||||
file.file: {}
|
||||
note.iterbind_target:
|
||||
"[[Iteration 3]]":
|
||||
- 30-tasks/Review erfasster Mehraufwände.md
|
||||
- 30-tasks/Liste der Mehraufwände am Projekt.md
|
||||
- 30-tasks/Projektpositionen können abgeschlossen werden.md
|
||||
- 00-inbox/Tagesabschluss in der Zeiterfassung ermöglichen.md
|
||||
columnColors:
|
||||
file.file: {}
|
||||
note.iterbind_target: {}
|
||||
groupByProperty: note.iterbind_target
|
||||
swimlaneByProperty: note.iterbind_target
|
||||
quickAddFolder: 00-inbox
|
||||
cardTitleProperty: file.name
|
||||
|
||||
```
|
||||
## Events
|
||||
```dataview
|
||||
Calendar event_date AS "Datum"
|
||||
FROM ""
|
||||
WHERE event_date AND parent = this.file.link
|
||||
SORT event_date ASC
|
||||
```
|
||||
@@ -0,0 +1,6 @@
|
||||
---
|
||||
components:
|
||||
- contextual
|
||||
context_target: "[[Genius.ceo]]"
|
||||
context_role: customer
|
||||
---
|
||||
@@ -0,0 +1,14 @@
|
||||
---
|
||||
components:
|
||||
- contextual
|
||||
- actionable
|
||||
- iterbind
|
||||
action_status: done
|
||||
action_effort_minutes: 120
|
||||
action_impact: 4
|
||||
context_target: "[[JULI]]"
|
||||
context_role: Feature
|
||||
iterbind_target: "[[Iteration 2]]"
|
||||
base_created: 2026-06-09T14:31
|
||||
base_updated: 2026-06-09T15:33
|
||||
---
|
||||
@@ -0,0 +1,14 @@
|
||||
---
|
||||
components:
|
||||
- contextual
|
||||
- actionable
|
||||
- iterbind
|
||||
action_status: done
|
||||
action_effort_minutes: 480
|
||||
action_impact: 5
|
||||
context_target: "[[JULI]]"
|
||||
context_role: feature
|
||||
iterbind_target: "[[Iteration 2]]"
|
||||
base_created: 2026-06-09T14:29
|
||||
base_updated: 2026-06-09T15:33
|
||||
---
|
||||
@@ -0,0 +1,14 @@
|
||||
---
|
||||
components:
|
||||
- contextual
|
||||
- actionable
|
||||
- iterbind
|
||||
action_status: done
|
||||
action_effort_minutes: 240
|
||||
action_impact: 4
|
||||
context_target: "[[JULI]]"
|
||||
context_role: Feature
|
||||
iterbind_target: "[[Iteration 2]]"
|
||||
base_created: 2026-06-09T14:30
|
||||
base_updated: 2026-06-09T15:33
|
||||
---
|
||||
@@ -0,0 +1,18 @@
|
||||
---
|
||||
components:
|
||||
- contextual
|
||||
- actionable
|
||||
- iterbind
|
||||
context_target: "[[JULI]]"
|
||||
iterbind_target: "[[Iteration 3]]"
|
||||
base_created: 2026-06-17T17:22
|
||||
base_modified: 2026-06-24T16:42
|
||||
action_status: open
|
||||
action_effort_minutes: 240
|
||||
action_impact: 1
|
||||
---
|
||||
|
||||
- Sammelcontainer aller Mehraufwände
|
||||
- Mitarbeiter-Tag (Kürzel) muss an jedem Zeiteintrag hängen
|
||||
- Zuordnung zu "Abrechenbar", "Nicht abrechenbar"
|
||||
- Innerhalb einer Kategorie ("Abrechenbar") können Gruppen angelegt werden.
|
||||
@@ -0,0 +1,13 @@
|
||||
---
|
||||
components:
|
||||
- contextual
|
||||
- actionable
|
||||
- iterbind
|
||||
context_target: "[[JULI]]"
|
||||
context_role: Feature
|
||||
iterbind_target: "[[Backlog]]"
|
||||
action_status: open
|
||||
action_effort_minutes: 240
|
||||
action_impact: 3
|
||||
---
|
||||
User sollen ihr Passwort fuer das Dashboard aendern koennen.
|
||||
@@ -0,0 +1,18 @@
|
||||
---
|
||||
components:
|
||||
- contextual
|
||||
- actionable
|
||||
- iterbind
|
||||
context_target: "[[JULI]]"
|
||||
context_role: Feature
|
||||
action_status: done
|
||||
action_effort_minutes: 1200
|
||||
action_impact: 4
|
||||
iterbind_target: "[[Iteration 2]]"
|
||||
base_created: 2026-06-09T14:19
|
||||
base_modified: 2026-06-24T16:41
|
||||
---
|
||||
- Import aller Mitarbeiter
|
||||
- Mitarbeiter mit Arbeitszeitplan verbinden
|
||||
- Import der Abwesenheiten und Feiertage
|
||||
- Tagesbetrachtung der benoetigten Arbeitszeit implementieren
|
||||
@@ -0,0 +1,15 @@
|
||||
---
|
||||
components:
|
||||
- contextual
|
||||
- actionable
|
||||
- iterbind
|
||||
base_created: 2026-06-10T13:13
|
||||
base_modified: 2026-06-24T16:42
|
||||
context_target: "[[JULI]]"
|
||||
context_role: Feature
|
||||
iterbind_target: "[[Iteration 3]]"
|
||||
action_status: open
|
||||
action_effort_minutes: 360
|
||||
action_impact: 3
|
||||
---
|
||||
- Abgeschlossene Positionen können von Mitarbeitern nicht mehr bebucht werden
|
||||
@@ -0,0 +1,19 @@
|
||||
---
|
||||
components:
|
||||
- contextual
|
||||
- actionable
|
||||
- iterbind
|
||||
context_target: "[[JULI]]"
|
||||
iterbind_target: "[[Iteration 3]]"
|
||||
base_created: 2026-06-17T15:49
|
||||
base_modified: 2026-06-24T16:42
|
||||
action_status: done
|
||||
action_effort_minutes: 840
|
||||
action_impact: 1
|
||||
---
|
||||
|
||||
Mehraufwände der Mitarbeiter werden in abrechenbare Zeiten überführt.
|
||||
Jeder Mehraufwand wird in einem Review Prozess geprüft und:
|
||||
- Übernommen
|
||||
- Angepasst
|
||||
- Verworfen
|
||||
@@ -0,0 +1,17 @@
|
||||
---
|
||||
components:
|
||||
- contextual
|
||||
- actionable
|
||||
- iterbind
|
||||
context_target: "[[JULI]]"
|
||||
context_role: Feature
|
||||
action_status: done
|
||||
action_effort_minutes: 45
|
||||
action_impact: 1
|
||||
iterbind_target: "[[Iteration 2]]"
|
||||
base_created: 2026-05-29T15:24
|
||||
base_updated: 2026-06-09T15:33
|
||||
---
|
||||
> Philipp Töbelmann:
|
||||
> Kannst du wenn du Kapazitäten hast zusätzlich zu dem Projekt "ALLG -Allgemein Sammelcontainer" einen ein Projekt "Werkstatt - Unproduktiv" kurzfristig mit einführen. Pfade gerne genauso wie bei "ALLG"-Projekt und Arbeitsschritte die immer vorkommen sind: Heizung, Aufräumen, Lackraum reinigen, Sonstiges. Dies Projekt wird häufig benutzt werden und ist von Grund auf schon Unproduktiv. Ich würde diese Zeiten gern direkt in der Testphase schon mit sichtbar machen. Gib mir gerne kurz feedback, ob du das schnell implementieren könntest.
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
---
|
||||
components:
|
||||
- contextual
|
||||
- actionable
|
||||
- iterbind
|
||||
bug_severity: critical
|
||||
bug_recorded: 2026-05-28T08:01:00
|
||||
action_status: done
|
||||
action_effort_minutes: 0
|
||||
action_impact: 5
|
||||
context_target: "[[JULI]]"
|
||||
context_role: Bug
|
||||
iterbind_target: "[[Iteration 2]]"
|
||||
---
|
||||
|
||||
Zeit mit Projekt kann nicht auf Allgemein gebucht werden
|
||||
@@ -0,0 +1,18 @@
|
||||
---
|
||||
components:
|
||||
- contextual
|
||||
- actionable
|
||||
- iterbind
|
||||
bug_severity: critical
|
||||
bug_recorded: 2026-05-28T08:04:00
|
||||
action_status: done
|
||||
action_impact: 5
|
||||
action_effort_minutes: 0
|
||||
context_target: "[[JULI]]"
|
||||
context_role: Bug
|
||||
iterbind_target: "[[Iteration 1]]"
|
||||
base_created: 2026-05-28T16:04
|
||||
base_updated: 2026-06-09T17:02
|
||||
---
|
||||
|
||||
Zeitzuordnung wird durch Sync zurückgesetzt
|
||||
@@ -0,0 +1,20 @@
|
||||
---
|
||||
components:
|
||||
- temporal
|
||||
- event
|
||||
- contextual
|
||||
time_at: 2026-05-28T11:00:00
|
||||
event_duration: 45
|
||||
parent: "[[JULI]]"
|
||||
tags: []
|
||||
status:
|
||||
base_created: 2026-05-27T16:53
|
||||
base_modified: 2026-06-24T16:53
|
||||
context_target: "[[JULI]]"
|
||||
context_role: meeting
|
||||
context_relation: belongs_to
|
||||
---
|
||||
# Austausch Dashboard Painpoints
|
||||
## Bugs
|
||||
- [x] [[Zeit mit Projekt kann nicht auf Allgemein gebucht werden]]
|
||||
- [x] [[Zeitzuordnung wird durch Sync zurückgesetzt]]
|
||||
@@ -0,0 +1,91 @@
|
||||
---
|
||||
components:
|
||||
- iterdef
|
||||
context_target: "[[JULI]]"
|
||||
context_role: Iteration
|
||||
iterdef_id: 0
|
||||
iterdef_status: closed
|
||||
iterdef_start: 2026-06-19T00:00:00
|
||||
iterdef_end: 2026-06-19T00:00:00
|
||||
iterdef_goal: ""
|
||||
base_created: 2026-06-09T16:59
|
||||
base_modified: 2026-06-24T16:42
|
||||
cssclasses: wide-page
|
||||
iterdef_capacity_minutes: 0
|
||||
---
|
||||
|
||||
## Goal
|
||||
|
||||
|
||||
## Workspace
|
||||
```base
|
||||
filters:
|
||||
and:
|
||||
- file.hasLink(this.file.path)
|
||||
formulas:
|
||||
Aufwand (ET: action_effort_minutes / 60 / 8
|
||||
properties:
|
||||
formula.Aufwand (ET:
|
||||
displayName: Aufwand (ET)
|
||||
views:
|
||||
- type: table
|
||||
name: Table
|
||||
order:
|
||||
- file.name
|
||||
- action_status
|
||||
- formula.Aufwand (ET
|
||||
- action_impact
|
||||
- action_effort_minutes
|
||||
sort:
|
||||
- property: action_status
|
||||
direction: ASC
|
||||
|
||||
```
|
||||
|
||||
## Bound Work
|
||||
```dataview
|
||||
TABLE
|
||||
action_status as "Action",
|
||||
work_status as "Work",
|
||||
round(action_effort_minutes / 60 / 8, 1) as "Aufwand (ET)",
|
||||
action_impact as "Impact"
|
||||
FROM ""
|
||||
WHERE iterbind_target = this.file.link
|
||||
SORT action_impact DESC, action_effort_minutes ASC
|
||||
```
|
||||
|
||||
## Workspace
|
||||
```base
|
||||
filters:
|
||||
and:
|
||||
- file.hasLink(this.file.path)
|
||||
formulas:
|
||||
Aufwand (ET: action_effort_minutes / 60 / 8
|
||||
properties:
|
||||
formula.Aufwand (ET:
|
||||
displayName: Aufwand (ET)
|
||||
views:
|
||||
- type: table
|
||||
name: Table
|
||||
order:
|
||||
- file.name
|
||||
- action_status
|
||||
- formula.Aufwand (ET
|
||||
- action_impact
|
||||
- action_effort_minutes
|
||||
sort:
|
||||
- property: action_status
|
||||
direction: ASC
|
||||
|
||||
```
|
||||
|
||||
## Features
|
||||
```dataview
|
||||
TABLE
|
||||
action_status as "Status",
|
||||
round(action_effort_minutes / 60 / 8, 1) as "Aufwand (ET)",
|
||||
action_impact as "Auswirkung"
|
||||
FROM ""
|
||||
WHERE iterbind_target = this.file.link
|
||||
SORT priority DESC, effort ASC
|
||||
```
|
||||
@@ -0,0 +1,12 @@
|
||||
---
|
||||
components:
|
||||
- contextual
|
||||
- temporal
|
||||
- event
|
||||
time_at: 2026-06-04T14:00:00
|
||||
event_duration: 60
|
||||
context_target: "[[JULI]]"
|
||||
context_role: Meeting
|
||||
---
|
||||
|
||||
Demo Iteration 2
|
||||
@@ -0,0 +1,77 @@
|
||||
---
|
||||
components:
|
||||
- contextual
|
||||
- iterdef
|
||||
iterdef_id: 1
|
||||
iterdef_start: 2026-04-15T08:00:00
|
||||
iterdef_end: 2026-04-28T18:00:00
|
||||
iterdef_status: closed
|
||||
context_target: "[[JULI]]"
|
||||
context_role: project
|
||||
---
|
||||
|
||||
```dataview
|
||||
TABLE
|
||||
action_status as "Status",
|
||||
round(action_effort_minutes / 60 / 8, 1) as "Aufwand (ET)",
|
||||
action_impact as "Auswirkung"
|
||||
FROM ""
|
||||
WHERE iterbind_target = this.file.link
|
||||
SORT priority DESC, effort ASC
|
||||
```
|
||||
```base
|
||||
filters:
|
||||
and:
|
||||
- file.hasLink(this.file.path)
|
||||
formulas:
|
||||
Aufwand (ET: action_effort_minutes / 60 / 8
|
||||
properties:
|
||||
formula.Aufwand (ET:
|
||||
displayName: Aufwand (ET)
|
||||
views:
|
||||
- type: table
|
||||
name: Table
|
||||
order:
|
||||
- file.name
|
||||
- action_status
|
||||
- formula.Aufwand (ET
|
||||
- action_impact
|
||||
- action_effort_minutes
|
||||
sort: []
|
||||
columnSize:
|
||||
formula.Aufwand (ET: 138
|
||||
- type: kanban-view
|
||||
name: View
|
||||
filters:
|
||||
and:
|
||||
- "!action_status.isEmpty()"
|
||||
columnOrders:
|
||||
file.file:
|
||||
- 00-inbox/Arbeitszeit Sonstiges nur mit Kommentar.md
|
||||
- 00-inbox/Arbeitszeit aufteilen.md
|
||||
- 00-inbox/Arbeitszeit taggen.md
|
||||
- 00-inbox/Personalstamm implementieren.md
|
||||
- 00-inbox/Werkstatt als Systemprojekt aufnehmen.md
|
||||
- 30-tasks/Zeit mit Projekt kann nicht auf Allgemein gebucht werden.md
|
||||
- 30-tasks/Zeitzuordnung wird durch Sync zurückgesetzt.md
|
||||
note.action_status:
|
||||
- open
|
||||
- done
|
||||
cardOrders:
|
||||
file.file: {}
|
||||
note.action_status: {}
|
||||
"file.file\x1fnote.action_status": {}
|
||||
columnColors:
|
||||
file.file: {}
|
||||
note.action_status: {}
|
||||
groupByProperty: note.action_status
|
||||
swimlaneByProperty: note.action_status
|
||||
swimlaneOrders:
|
||||
"file.file\x1fnote.action_status":
|
||||
- done
|
||||
- open
|
||||
- Uncategorized
|
||||
collapsedLanes:
|
||||
"file.file\x1fnote.action_status": []
|
||||
|
||||
```
|
||||
@@ -0,0 +1,76 @@
|
||||
---
|
||||
components:
|
||||
- contextual
|
||||
- iterdef
|
||||
iterdef_id: 2
|
||||
iterdef_start: 2026-05-11T08:00:00
|
||||
iterdef_end: 2026-06-03T18:00:00
|
||||
iterdef_status: closed
|
||||
context_target: "[[JULI]]"
|
||||
context_role: project
|
||||
cssclasses:
|
||||
- wide-page
|
||||
---
|
||||
## Workspace
|
||||
```base
|
||||
filters:
|
||||
and:
|
||||
- file.hasLink(this.file.path)
|
||||
formulas:
|
||||
Aufwand (ET: (action_effort_minutes / 60 / 8).round(2)
|
||||
properties:
|
||||
formula.Aufwand (ET:
|
||||
displayName: Aufwand (ET)
|
||||
views:
|
||||
- type: table
|
||||
name: Table
|
||||
order:
|
||||
- file.name
|
||||
- action_status
|
||||
- formula.Aufwand (ET
|
||||
- action_impact
|
||||
- action_effort_minutes
|
||||
sort:
|
||||
- property: action_impact
|
||||
direction: ASC
|
||||
- type: kanban-view
|
||||
name: View
|
||||
columnOrders:
|
||||
file.file:
|
||||
- 30-tasks/Arbeitszeit Sonstiges nur mit Kommentar.md
|
||||
- 30-tasks/Arbeitszeit aufteilen.md
|
||||
- 30-tasks/Arbeitszeit taggen.md
|
||||
- 30-tasks/Personalstamm implementieren.md
|
||||
- 30-tasks/Werkstatt als Systemprojekt aufnehmen.md
|
||||
- 30-tasks/Zeit mit Projekt kann nicht auf Allgemein gebucht werden.md
|
||||
note.action_status:
|
||||
- open
|
||||
- done
|
||||
cardOrders:
|
||||
file.file: {}
|
||||
note.action_status:
|
||||
open: []
|
||||
done:
|
||||
- 30-tasks/Personalstamm implementieren.md
|
||||
- 30-tasks/Arbeitszeit aufteilen.md
|
||||
- 30-tasks/Arbeitszeit Sonstiges nur mit Kommentar.md
|
||||
- 30-tasks/Arbeitszeit taggen.md
|
||||
- 30-tasks/Werkstatt als Systemprojekt aufnehmen.md
|
||||
- 30-tasks/Zeit mit Projekt kann nicht auf Allgemein gebucht werden.md
|
||||
columnColors:
|
||||
file.file: {}
|
||||
note.action_status: {}
|
||||
groupByProperty: note.action_status
|
||||
swimlaneByProperty: note.action_status
|
||||
|
||||
```
|
||||
|
||||
```dataview
|
||||
TABLE
|
||||
action_status as "Status",
|
||||
round(action_effort_minutes / 60 / 8, 1) as "Aufwand (ET)",
|
||||
action_impact as "Auswirkung"
|
||||
FROM ""
|
||||
WHERE iterbind_target = this.file.link
|
||||
SORT priority DESC, effort ASC
|
||||
```
|
||||
@@ -0,0 +1,42 @@
|
||||
---
|
||||
components:
|
||||
- contextual
|
||||
- iterdef
|
||||
context_target: "[[JULI]]"
|
||||
context_role: project
|
||||
iterdef_id: 3
|
||||
iterdef_status: active
|
||||
iterdef_start: 2026-06-15T08:00:00
|
||||
iterdef_end: 2026-06-26T18:00:00
|
||||
base_created: 2026-06-09T14:55
|
||||
base_updated: 2026-06-10T13:19
|
||||
cssclasses:
|
||||
- wide-page
|
||||
---
|
||||
## Workspace
|
||||
```base
|
||||
filters:
|
||||
and:
|
||||
- file.hasLink(this.file.path)
|
||||
formulas:
|
||||
Aufwand (ET: action_effort_minutes / 60 / 8
|
||||
properties:
|
||||
formula.Aufwand (ET:
|
||||
displayName: Aufwand (ET)
|
||||
views:
|
||||
- type: table
|
||||
name: Table
|
||||
order:
|
||||
- file.name
|
||||
- action_status
|
||||
- formula.Aufwand (ET
|
||||
- action_impact
|
||||
- action_effort_minutes
|
||||
sort:
|
||||
- property: action_status
|
||||
direction: ASC
|
||||
|
||||
```
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
---
|
||||
components:
|
||||
- temporal
|
||||
- event
|
||||
time_at: 2026-05-27T14:00:00
|
||||
event_duration: 60
|
||||
parent: "[[JULI]]"
|
||||
created: 2026-05-27T16:51:40
|
||||
tags: []
|
||||
---
|
||||
|
||||
Onboarding von Philipp Töbelmann
|
||||
@@ -0,0 +1,14 @@
|
||||
---
|
||||
status: open
|
||||
variant: Projekt
|
||||
---
|
||||
Ziel ist eine vollwertige Datensicherung aller gefährdeter Daten von Coach Hamburg nach der 3-2-1 Regel.
|
||||
|
||||
3-2-1 Regel
|
||||
3 Kopien der wichtigsten Daten auf 2 Medien mit einer Kopie Off-Site.
|
||||
|
||||
## Zu klären
|
||||
- Vorgängerversionen möglich?
|
||||
- Kosten?
|
||||
- Wie Laptops anbinden?
|
||||
- Software?
|
||||
+5
@@ -0,0 +1,5 @@
|
||||
---
|
||||
status: open
|
||||
variant: Task
|
||||
---
|
||||
TA-191 Angebot weicht von der Kalkulation ab.
|
||||
@@ -0,0 +1,4 @@
|
||||
---
|
||||
status: open
|
||||
variant: Task
|
||||
---
|
||||
@@ -0,0 +1,6 @@
|
||||
---
|
||||
status: open
|
||||
variant: Task
|
||||
---
|
||||
## Nächste Schritte
|
||||
- Terminierung Zeitblock "Korrespondenz + Task Planung"
|
||||
@@ -0,0 +1,12 @@
|
||||
filters:
|
||||
and:
|
||||
- file.inFolder("50-Aufgabenplanung")
|
||||
- file.hasProperty("status")
|
||||
views:
|
||||
- type: table
|
||||
name: Table
|
||||
order:
|
||||
- file.name
|
||||
- variant
|
||||
columnSize:
|
||||
file.name: 340
|
||||
@@ -0,0 +1,37 @@
|
||||
# By Context
|
||||
|
||||
All assigned entities (`parent` set), grouped by their **root context** — the topmost ancestor reached by walking the `parent` chain.
|
||||
|
||||
```dataviewjs
|
||||
const ALL = dv.pages('""').where(p =>
|
||||
p.parent && !p.file.path.startsWith("_templates/")
|
||||
);
|
||||
|
||||
function rootContext(page, depth = 0) {
|
||||
if (depth > 16) return "(cycle)";
|
||||
if (!page.parent) return page.file.name;
|
||||
const link = page.parent;
|
||||
const path = (link && link.path) || (typeof link === "string" ? link : null);
|
||||
if (!path) return "(unresolved)";
|
||||
const parent = dv.page(path);
|
||||
if (!parent) return path;
|
||||
if (!parent.parent) return parent.file.name;
|
||||
return rootContext(parent, depth + 1);
|
||||
}
|
||||
|
||||
const groups = {};
|
||||
for (const p of ALL) {
|
||||
const ctx = rootContext(p);
|
||||
(groups[ctx] = groups[ctx] || []).push(p);
|
||||
}
|
||||
|
||||
for (const ctx of Object.keys(groups).sort()) {
|
||||
dv.header(2, ctx);
|
||||
dv.table(
|
||||
["Entity", "Direct parent", "Status"],
|
||||
groups[ctx]
|
||||
.sort((a, b) => (a.file.name > b.file.name ? 1 : -1))
|
||||
.map(p => [p.file.link, p.parent, p.status ?? ""])
|
||||
);
|
||||
}
|
||||
```
|
||||
@@ -0,0 +1,85 @@
|
||||
---
|
||||
components:
|
||||
- reviewable
|
||||
review_status: needs_review
|
||||
review_reason: "Cluster fuer Hygiene-Migration"
|
||||
---
|
||||
|
||||
# Hygiene Migration
|
||||
|
||||
Quelle: [[90-dashboards/Hygiene|Hygiene Report]] vom 2026-06-24.
|
||||
|
||||
## Zusammenfassung
|
||||
|
||||
| Cluster | Befund | Anzahl | Migrationsart |
|
||||
| --- | --- | ---: | --- |
|
||||
| C1 | `components` fehlt | 24 Notes | Komponenten deklarieren |
|
||||
| C2 | `contextual` fehlt oder ist nicht deklariert | 25 Notes, 26 Warnungen | `components` um `contextual` ergaenzen und Kontextfelder pruefen |
|
||||
| C3 | `context_role` hat alte Werte | 16 Notes | Werte auf neues Enum migrieren |
|
||||
| C4 | `base_created` wurde bisher gegen ein zu strenges Format geprueft | 5 Notes | Pruefung auf Obsidian-Format umstellen |
|
||||
| C5 | Iterationsdefinitionen haben alte Feldwerte/Formate | 3 Notes plus Backlog-Hinweis | `iterdef` + Datum/Status normalisieren |
|
||||
| C6 | Root-Note ohne Frontmatter | 1 Note | Minimal-Frontmatter fuer Root festlegen |
|
||||
|
||||
## C1 Components Fehlen
|
||||
|
||||
Diese Notes haben gar kein `components`-Array. Minimal muss `components` angelegt werden; fachlich vermutlich mindestens `contextual`.
|
||||
|
||||
| Bereich | Notes |
|
||||
| --- | --- |
|
||||
| Inbox | [[00-inbox/Tagesabschluss in der Zeiterfassung ermöglichen|Tagesabschluss in der Zeiterfassung ermöglichen]] |
|
||||
| Contexts | [[10-contexts/Genius.ceo|Genius.ceo]], [[10-contexts/health|health]], [[10-contexts/work|work]] |
|
||||
| Projects | [[20-projects/Avicenna|Avicenna]], [[20-projects/JULI|JULI]], [[20-projects/medmix Deutschland GmbH|medmix Deutschland GmbH]] |
|
||||
| Tasks | [[30-tasks/Arbeitszeit aufteilen|Arbeitszeit aufteilen]], [[30-tasks/Arbeitszeit Sonstiges nur mit Kommentar|Arbeitszeit Sonstiges nur mit Kommentar]], [[30-tasks/Arbeitszeit taggen|Arbeitszeit taggen]], [[30-tasks/Liste der Mehraufwände am Projekt|Liste der Mehraufwände am Projekt]], [[30-tasks/Passwort ändern|Passwort ändern]], [[30-tasks/Personalstamm implementieren|Personalstamm implementieren]], [[30-tasks/Projektpositionen können abgeschlossen werden|Projektpositionen können abgeschlossen werden]], [[30-tasks/Review erfasster Mehraufwände|Review erfasster Mehraufwände]], [[30-tasks/Werkstatt als Systemprojekt aufnehmen|Werkstatt als Systemprojekt aufnehmen]], [[30-tasks/Zeit mit Projekt kann nicht auf Allgemein gebucht werden|Zeit mit Projekt kann nicht auf Allgemein gebucht werden]], [[30-tasks/Zeitzuordnung wird durch Sync zurückgesetzt|Zeitzuordnung wird durch Sync zurückgesetzt]] |
|
||||
| Notes | [[40-notes/Austausch Dashboard Painpoints|Austausch Dashboard Painpoints]], [[40-notes/Demo Iteration 2|Demo Iteration 2]], [[40-notes/Iteration 1|Iteration 1]], [[40-notes/Iteration 2|Iteration 2]], [[40-notes/Iteration 3|Iteration 3]], [[40-notes/Onboarding von Philipp Töbelmann|Onboarding von Philipp Töbelmann]] |
|
||||
|
||||
## C2 Contextual Migration
|
||||
|
||||
Regel: Jede Nicht-Root-Note soll mittelfristig `contextual` in `components` tragen. Wenn `contextual` gesetzt ist, ist `context_target` Pflicht; `context_role` ist empfohlen.
|
||||
|
||||
Betroffen sind alle Notes aus C1 plus [[40-notes/Backlog|Backlog]]. Backlog hat bereits `components: [iterdef]`, braucht aber zusaetzlich `contextual`.
|
||||
|
||||
## C3 Context Role Werte
|
||||
|
||||
Erlaubt sind: `root`, `area`, `customer`, `project`, `product`, `person`, `topic`, `technology`, `organization`.
|
||||
|
||||
| Alter Wert | Anzahl | Notes | Vorschlag |
|
||||
| --- | ---: | --- | --- |
|
||||
| `Customer` | 2 | [[20-projects/JULI|JULI]], [[20-projects/medmix Deutschland GmbH|medmix Deutschland GmbH]] | wahrscheinlich `project` oder `customer` fachlich entscheiden |
|
||||
| `Feature` | 7 | [[30-tasks/Arbeitszeit aufteilen|Arbeitszeit aufteilen]], [[30-tasks/Arbeitszeit Sonstiges nur mit Kommentar|Arbeitszeit Sonstiges nur mit Kommentar]], [[30-tasks/Arbeitszeit taggen|Arbeitszeit taggen]], [[30-tasks/Passwort ändern|Passwort ändern]], [[30-tasks/Personalstamm implementieren|Personalstamm implementieren]], [[30-tasks/Projektpositionen können abgeschlossen werden|Projektpositionen können abgeschlossen werden]], [[30-tasks/Werkstatt als Systemprojekt aufnehmen|Werkstatt als Systemprojekt aufnehmen]] | `context_role: project` ist nicht passend; Feature-Typ gehoert eher nach `work_kind: feature`, Kontextrolle eher `topic` oder weglassen/neu entscheiden |
|
||||
| `Bug` | 2 | [[30-tasks/Zeit mit Projekt kann nicht auf Allgemein gebucht werden|Zeit mit Projekt kann nicht auf Allgemein gebucht werden]], [[30-tasks/Zeitzuordnung wird durch Sync zurückgesetzt|Zeitzuordnung wird durch Sync zurückgesetzt]] | Bug-Typ nach `work_kind: bug`, Kontextrolle eher `topic` oder neu entscheiden |
|
||||
| `Iteration` | 4 | [[40-notes/Backlog|Backlog]], [[40-notes/Iteration 1|Iteration 1]], [[40-notes/Iteration 2|Iteration 2]], [[40-notes/Iteration 3|Iteration 3]] | Iteration ist Komponente `iterdef`; Kontextrolle vermutlich `project` oder `topic` |
|
||||
| `Meeting` | 1 | [[40-notes/Demo Iteration 2|Demo Iteration 2]] | Meeting-Typ nach `event_kind: meeting`; Kontextrolle vermutlich `project` oder `topic` |
|
||||
|
||||
## C4 Base Created Format
|
||||
|
||||
Sollformat fuer `base_created` und `base_modified`: `YYYY-MM-DDTHH:mm`. Diese Felder werden von Obsidian automatisch gesetzt.
|
||||
|
||||
| Note | Aktuelles Muster | Migration |
|
||||
| --- | --- | --- |
|
||||
| [[30-tasks/Liste der Mehraufwände am Projekt|Liste der Mehraufwände am Projekt]] | `2026-06-17 17:22` | Leerzeichen durch `T` ersetzen |
|
||||
| [[30-tasks/Personalstamm implementieren|Personalstamm implementieren]] | `2026-06-09T14:19:55` | Sekunden entfernen |
|
||||
| [[30-tasks/Projektpositionen können abgeschlossen werden|Projektpositionen können abgeschlossen werden]] | `2026-06-10 13:13` | Leerzeichen durch `T` ersetzen |
|
||||
| [[30-tasks/Review erfasster Mehraufwände|Review erfasster Mehraufwände]] | `2026-06-17 15:49` | Leerzeichen durch `T` ersetzen |
|
||||
| [[40-notes/Backlog|Backlog]] | `2026-06-09 16:59` | Leerzeichen durch `T` ersetzen |
|
||||
|
||||
## C5 Iterdef Migration
|
||||
|
||||
Sollwerte: `iterdef_status` ist `planned`, `active`, `closed` oder `cancelled`; `iterdef_start` und `iterdef_end` sind reine Datumswerte `YYYY-MM-DD`.
|
||||
|
||||
| Note | Befunde | Migration |
|
||||
| --- | --- | --- |
|
||||
| [[40-notes/Iteration 1|Iteration 1]] | `completed`, DateTime in Start/Ende, keine `components` | `closed`, Datum kuerzen, `components: [iterdef, contextual]` |
|
||||
| [[40-notes/Iteration 2|Iteration 2]] | `completed`, DateTime in Start/Ende, keine `components` | `closed`, Datum kuerzen, `components: [iterdef, contextual]` |
|
||||
| [[40-notes/Iteration 3|Iteration 3]] | `started`, DateTime in Start/Ende, keine `components` | `active`, Datum kuerzen, `components: [iterdef, contextual]` |
|
||||
| [[40-notes/Backlog|Backlog]] | `iterdef` ohne `contextual` | `components` um `contextual` ergaenzen |
|
||||
|
||||
## C6 Root Frontmatter
|
||||
|
||||
[[Personal OS|Personal OS]] hat kein Frontmatter. Da Root in `context-hygiene` fachlich ausgenommen ist, sollte hier ein minimales Frontmatter mit `components` und `context_role: root` festgelegt werden oder die Hygiene-Regel muss Root ohne Frontmatter tolerieren.
|
||||
|
||||
## Empfohlene Reihenfolge
|
||||
|
||||
1. C4 nach Schema-Anpassung neu bewerten und verbleibende Leerzeichen-Datumswerte korrigieren.
|
||||
2. C1/C2 fuer eindeutige Typen: Contexts, Projects, Iterationen, Backlog.
|
||||
3. C3 fuer Tasks: alte `Feature`/`Bug`-Rollen in `work_kind` migrieren und passende Kontextrolle entscheiden.
|
||||
4. C6 Root-Note entscheiden: Frontmatter einfuehren oder Hygiene-Ausnahme erweitern.
|
||||
@@ -0,0 +1,57 @@
|
||||
---
|
||||
components:
|
||||
- reviewable
|
||||
review_status: needs_review
|
||||
review_reason: "Automatisch erzeugter Hygiene-Report"
|
||||
---
|
||||
|
||||
# Hygiene Report
|
||||
|
||||
Generated: 2026-06-24T15:08:54.455Z
|
||||
|
||||
Checked notes: 29
|
||||
Errors: 11
|
||||
Warnings: 26
|
||||
|
||||
## Errors
|
||||
|
||||
- [[10-contexts/Genius.ceo|Genius.ceo]]: missing required property components
|
||||
- [[10-contexts/health|health]]: missing required property components
|
||||
- [[10-contexts/work|work]]: missing required property components
|
||||
- [[20-projects/Avicenna|Avicenna]]: missing required property components
|
||||
- [[40-notes/Austausch Dashboard Painpoints|Austausch Dashboard Painpoints]]: / must match "then" schema
|
||||
- [[40-notes/Austausch Dashboard Painpoints|Austausch Dashboard Painpoints]]: missing required property event_kind
|
||||
- [[40-notes/Demo Iteration 2|Demo Iteration 2]]: / must match "then" schema
|
||||
- [[40-notes/Demo Iteration 2|Demo Iteration 2]]: missing required property event_kind
|
||||
- [[40-notes/Onboarding von Philipp Töbelmann|Onboarding von Philipp Töbelmann]]: / must match "then" schema
|
||||
- [[40-notes/Onboarding von Philipp Töbelmann|Onboarding von Philipp Töbelmann]]: missing required property event_kind
|
||||
- [[Personal OS|Personal OS]]: missing frontmatter
|
||||
|
||||
## Warnings
|
||||
|
||||
- [[00-inbox/Tagesabschluss in der Zeiterfassung ermöglichen|Tagesabschluss in der Zeiterfassung ermöglichen]] `/context_role`: contextual should define context_role
|
||||
- [[00-inbox/Tagesabschluss in der Zeiterfassung ermöglichen|Tagesabschluss in der Zeiterfassung ermöglichen]] `/iterbind_status`: iterbind should define iterbind_status
|
||||
- [[10-contexts/Genius.ceo|Genius.ceo]] `/components` `context.required`: note should eventually include component contextual
|
||||
- [[10-contexts/health|health]] `/components` `context.required`: note should eventually include component contextual
|
||||
- [[10-contexts/work|work]] `/components` `context.required`: note should eventually include component contextual
|
||||
- [[20-projects/Avicenna|Avicenna]] `/components` `context.required`: note should eventually include component contextual
|
||||
- [[30-tasks/Arbeitszeit aufteilen|Arbeitszeit aufteilen]] `/iterbind_status`: iterbind should define iterbind_status
|
||||
- [[30-tasks/Arbeitszeit Sonstiges nur mit Kommentar|Arbeitszeit Sonstiges nur mit Kommentar]] `/iterbind_status`: iterbind should define iterbind_status
|
||||
- [[30-tasks/Arbeitszeit taggen|Arbeitszeit taggen]] `/iterbind_status`: iterbind should define iterbind_status
|
||||
- [[30-tasks/Liste der Mehraufwände am Projekt|Liste der Mehraufwände am Projekt]] `/context_role`: contextual should define context_role
|
||||
- [[30-tasks/Liste der Mehraufwände am Projekt|Liste der Mehraufwände am Projekt]] `/iterbind_status`: iterbind should define iterbind_status
|
||||
- [[30-tasks/Passwort ändern|Passwort ändern]] `/iterbind_status`: iterbind should define iterbind_status
|
||||
- [[30-tasks/Personalstamm implementieren|Personalstamm implementieren]] `/iterbind_status`: iterbind should define iterbind_status
|
||||
- [[30-tasks/Projektpositionen können abgeschlossen werden|Projektpositionen können abgeschlossen werden]] `/iterbind_status`: iterbind should define iterbind_status
|
||||
- [[30-tasks/Review erfasster Mehraufwände|Review erfasster Mehraufwände]] `/context_role`: contextual should define context_role
|
||||
- [[30-tasks/Review erfasster Mehraufwände|Review erfasster Mehraufwände]] `/iterbind_status`: iterbind should define iterbind_status
|
||||
- [[30-tasks/Werkstatt als Systemprojekt aufnehmen|Werkstatt als Systemprojekt aufnehmen]] `/iterbind_status`: iterbind should define iterbind_status
|
||||
- [[30-tasks/Zeit mit Projekt kann nicht auf Allgemein gebucht werden|Zeit mit Projekt kann nicht auf Allgemein gebucht werden]] `/iterbind_status`: iterbind should define iterbind_status
|
||||
- [[30-tasks/Zeitzuordnung wird durch Sync zurückgesetzt|Zeitzuordnung wird durch Sync zurückgesetzt]] `/iterbind_status`: iterbind should define iterbind_status
|
||||
- [[40-notes/Austausch Dashboard Painpoints|Austausch Dashboard Painpoints]] `/event_status`: event should define event_status
|
||||
- [[40-notes/Backlog|Backlog]] `/components`: iterdef should also include component contextual
|
||||
- [[40-notes/Backlog|Backlog]] `/components` `context.required`: note should eventually include component contextual
|
||||
- [[40-notes/Demo Iteration 2|Demo Iteration 2]] `/event_status`: event should define event_status
|
||||
- [[40-notes/Onboarding von Philipp Töbelmann|Onboarding von Philipp Töbelmann]] `/components`: event should also include component contextual
|
||||
- [[40-notes/Onboarding von Philipp Töbelmann|Onboarding von Philipp Töbelmann]] `/event_status`: event should define event_status
|
||||
- [[40-notes/Onboarding von Philipp Töbelmann|Onboarding von Philipp Töbelmann]] `/components` `context.required`: note should eventually include component contextual
|
||||
@@ -0,0 +1,13 @@
|
||||
# Inbox
|
||||
|
||||
Entities without a `parent` — captured but not yet assigned to a context or project.
|
||||
|
||||
```dataview
|
||||
TABLE WITHOUT ID
|
||||
file.link AS "Entity",
|
||||
status,
|
||||
dateformat(date(created), "yyyy-MM-dd HH:mm") AS "Captured"
|
||||
FROM "" AND !"90-dashboards" AND !"_templates"
|
||||
WHERE !parent OR parent = "" AND !container
|
||||
SORT created DESC
|
||||
```
|
||||
@@ -0,0 +1,38 @@
|
||||
# Open Tasks
|
||||
|
||||
Tasks (signature: has `status`, no `container`) with `status = "open"`, grouped by their immediate parent. Null-parent tasks appear under "Inbox (unassigned)".
|
||||
|
||||
```dataviewjs
|
||||
const ALL = dv.pages('""').where(p =>
|
||||
p.status === "open" &&
|
||||
!p.container &&
|
||||
!p.file.path.startsWith("_templates/")
|
||||
);
|
||||
|
||||
const groups = {};
|
||||
for (const p of ALL) {
|
||||
const key = p.parent ? p.parent.path : "__inbox__";
|
||||
(groups[key] = groups[key] || []).push(p);
|
||||
}
|
||||
|
||||
const renderGroup = (header, items) => {
|
||||
dv.header(2, header);
|
||||
dv.table(
|
||||
["Task", "Captured"],
|
||||
items
|
||||
.sort((a, b) => (a.file.name > b.file.name ? 1 : -1))
|
||||
.map(p => [p.file.link, p.created])
|
||||
);
|
||||
};
|
||||
|
||||
// Assigned groups, alphabetical by parent basename
|
||||
for (const key of Object.keys(groups).filter(k => k !== "__inbox__").sort()) {
|
||||
const header = key.split("/").pop().replace(/\.md$/, "");
|
||||
renderGroup(header, groups[key]);
|
||||
}
|
||||
|
||||
// Inbox bucket last
|
||||
if (groups["__inbox__"]) {
|
||||
renderGroup("Inbox (unassigned)", groups["__inbox__"]);
|
||||
}
|
||||
```
|
||||
@@ -0,0 +1,67 @@
|
||||
filters:
|
||||
and:
|
||||
- context_target == link("JULI")
|
||||
views:
|
||||
- type: cards
|
||||
name: Tasks
|
||||
filters:
|
||||
and:
|
||||
- "!status.isEmpty()"
|
||||
order:
|
||||
- file.name
|
||||
- status
|
||||
- created
|
||||
cardSize: 200
|
||||
- type: kanban-view
|
||||
name: Planning
|
||||
filters:
|
||||
and:
|
||||
- "!iterbind_target.isEmpty()"
|
||||
order:
|
||||
- status
|
||||
columnOrders:
|
||||
file.file:
|
||||
- 00-inbox/2026-05-26-1730-juli-passwort-ndern.md
|
||||
- 30-tasks/Zeit mit Projekt kann nicht auf Allgemein gebucht werden.md
|
||||
- 30-tasks/Zeitzuordnung wird durch Sync zurückgesetzt.md
|
||||
- 40-notes/Austausch Dashboard Painpoints.md
|
||||
- 40-notes/Demo Iteration 2.md
|
||||
- 40-notes/Onboarding von Philipp Töbelmann.md
|
||||
note.iteration:
|
||||
- Backlog
|
||||
- "[[Iteration 2]]"
|
||||
- Uncategorized
|
||||
note.iterbind_target:
|
||||
- "[[Backlog]]"
|
||||
- "[[Iteration 3]]"
|
||||
- "[[Iteration 2]]"
|
||||
- "[[Iteration 1]]"
|
||||
cardOrders:
|
||||
file.file: {}
|
||||
note.iteration:
|
||||
Backlog:
|
||||
- 00-inbox/Werkstatt als Systemprojekt aufnehmen.md
|
||||
- 30-tasks/Passwort ändern.md
|
||||
Iteration 2: []
|
||||
"[[Iteration 2]]":
|
||||
- 30-tasks/Zeit mit Projekt kann nicht auf Allgemein gebucht werden.md
|
||||
- 30-tasks/Zeitzuordnung wird durch Sync zurückgesetzt.md
|
||||
"note.iterbind_target\x1fnote.iteration": {}
|
||||
note.iterbind_target: {}
|
||||
columnColors:
|
||||
file.file: {}
|
||||
note.iteration:
|
||||
Backlog: red
|
||||
Iteration 2: green
|
||||
note.iterbind_target: {}
|
||||
groupByProperty: note.iterbind_target
|
||||
swimlaneByProperty: note.iterbind_target
|
||||
quickAddFolder: 00-inbox
|
||||
cardTitleProperty: file.name
|
||||
swimlaneOrders:
|
||||
"note.iterbind_target\x1fnote.iteration":
|
||||
- Uncategorized
|
||||
collapsedLanes:
|
||||
"note.iterbind_target\x1fnote.iteration": []
|
||||
- type: table
|
||||
name: View
|
||||
@@ -0,0 +1,25 @@
|
||||
<%*
|
||||
// actionable: makes a note executable by adding status, impact and effort fields.
|
||||
const componentName = "actionable";
|
||||
const file = tp.file.find_tfile(tp.file.path(true));
|
||||
|
||||
setTimeout(async () => {
|
||||
await tp.app.fileManager.processFrontMatter(file, (frontmatter) => {
|
||||
const components = Array.isArray(frontmatter["components"]) ? frontmatter["components"] : [];
|
||||
if (!components.includes(componentName)) components.push(componentName);
|
||||
|
||||
frontmatter["components"] = components;
|
||||
frontmatter["action_status"] = frontmatter["action_status"] ?? "open";
|
||||
frontmatter["action_impact"] = frontmatter["action_impact"] ?? 1;
|
||||
frontmatter["action_effort_minutes"] = frontmatter["action_effort_minutes"] ?? 30;
|
||||
frontmatter["action_result"] = frontmatter["action_result"] ?? "";
|
||||
});
|
||||
}, 300)
|
||||
-%>
|
||||
|
||||
## Action
|
||||
|
||||
- Next step:
|
||||
- Definition of done:
|
||||
|
||||
## Result
|
||||
@@ -0,0 +1,21 @@
|
||||
<%*
|
||||
// billable: marks a note as relevant for billing, invoicing or non-billable review.
|
||||
const componentName = "billable";
|
||||
const file = tp.file.find_tfile(tp.file.path(true));
|
||||
|
||||
setTimeout(async () => {
|
||||
await tp.app.fileManager.processFrontMatter(file, (frontmatter) => {
|
||||
const components = Array.isArray(frontmatter["components"]) ? frontmatter["components"] : [];
|
||||
if (!components.includes(componentName)) components.push(componentName);
|
||||
|
||||
frontmatter["components"] = components;
|
||||
frontmatter["bill_status"] = frontmatter["bill_status"] ?? "unreviewed";
|
||||
frontmatter["bill_minutes"] = frontmatter["bill_minutes"] ?? 0;
|
||||
frontmatter["bill_rate"] = frontmatter["bill_rate"] ?? 0;
|
||||
frontmatter["bill_amount"] = frontmatter["bill_amount"] ?? 0;
|
||||
frontmatter["bill_currency"] = frontmatter["bill_currency"] ?? "EUR";
|
||||
frontmatter["bill_invoice"] = frontmatter["bill_invoice"] ?? "";
|
||||
frontmatter["bill_note"] = frontmatter["bill_note"] ?? "";
|
||||
});
|
||||
}, 300)
|
||||
-%>
|
||||
@@ -0,0 +1,17 @@
|
||||
<%*
|
||||
// contextual: binds this note to the closest known context, e.g. project, customer or topic.
|
||||
const componentName = "contextual";
|
||||
const file = tp.file.find_tfile(tp.file.path(true));
|
||||
|
||||
setTimeout(async () => {
|
||||
await tp.app.fileManager.processFrontMatter(file, (frontmatter) => {
|
||||
const components = Array.isArray(frontmatter["components"]) ? frontmatter["components"] : [];
|
||||
if (!components.includes(componentName)) components.push(componentName);
|
||||
|
||||
frontmatter["components"] = components;
|
||||
frontmatter["context_target"] = frontmatter["context_target"] ?? "[[]]";
|
||||
frontmatter["context_role"] = frontmatter["context_role"] ?? "project";
|
||||
frontmatter["context_relation"] = frontmatter["context_relation"] ?? "belongs_to";
|
||||
});
|
||||
}, 300)
|
||||
-%>
|
||||
@@ -0,0 +1,29 @@
|
||||
<%*
|
||||
// event: makes this note a timeline event such as a meeting, decision, incident or worklog.
|
||||
const componentName = "event";
|
||||
const file = tp.file.find_tfile(tp.file.path(true));
|
||||
|
||||
setTimeout(async () => {
|
||||
await tp.app.fileManager.processFrontMatter(file, (frontmatter) => {
|
||||
const components = Array.isArray(frontmatter["components"]) ? frontmatter["components"] : [];
|
||||
if (!components.includes(componentName)) components.push(componentName);
|
||||
|
||||
frontmatter["components"] = components;
|
||||
frontmatter["event_kind"] = frontmatter["event_kind"] ?? "note";
|
||||
frontmatter["event_status"] = frontmatter["event_status"] ?? "occurred";
|
||||
frontmatter["event_location"] = frontmatter["event_location"] ?? "";
|
||||
frontmatter["event_participants"] = frontmatter["event_participants"] ?? [];
|
||||
frontmatter["event_outcome"] = frontmatter["event_outcome"] ?? "";
|
||||
});
|
||||
}, 300)
|
||||
-%>
|
||||
|
||||
## Event
|
||||
|
||||
### Participants
|
||||
|
||||
|
||||
### Notes
|
||||
|
||||
|
||||
### Outcome
|
||||
@@ -0,0 +1,18 @@
|
||||
<%*
|
||||
// iterbind: binds this note to an iteration note that carries the iterdef component.
|
||||
const componentName = "iterbind";
|
||||
const file = tp.file.find_tfile(tp.file.path(true));
|
||||
|
||||
setTimeout(async () => {
|
||||
await tp.app.fileManager.processFrontMatter(file, (frontmatter) => {
|
||||
const components = Array.isArray(frontmatter["components"]) ? frontmatter["components"] : [];
|
||||
if (!components.includes(componentName)) components.push(componentName);
|
||||
|
||||
frontmatter["components"] = components;
|
||||
frontmatter["iterbind_target"] = frontmatter["iterbind_target"] ?? "[[]]";
|
||||
frontmatter["iterbind_status"] = frontmatter["iterbind_status"] ?? "planned";
|
||||
frontmatter["iterbind_role"] = frontmatter["iterbind_role"] ?? "primary";
|
||||
frontmatter["iterbind_order"] = frontmatter["iterbind_order"] ?? 0;
|
||||
});
|
||||
}, 300)
|
||||
-%>
|
||||
@@ -0,0 +1,63 @@
|
||||
<%*
|
||||
// iterdef: defines a planning iteration with sequence id, status, start/end and optional goal.
|
||||
const componentName = "iterdef";
|
||||
const newId = tp.user.auto_increment("iterdef_id");
|
||||
const today = tp.date.now("YYYY-MM-DD");
|
||||
const file = tp.file.find_tfile(tp.file.path(true));
|
||||
|
||||
setTimeout(async () => {
|
||||
await tp.app.fileManager.processFrontMatter(file, (frontmatter) => {
|
||||
const components = Array.isArray(frontmatter["components"]) ? frontmatter["components"] : [];
|
||||
if (!components.includes(componentName)) components.push(componentName);
|
||||
|
||||
frontmatter["components"] = components;
|
||||
frontmatter["iterdef_id"] = frontmatter["iterdef_id"] ?? newId;
|
||||
frontmatter["iterdef_status"] = frontmatter["iterdef_status"] ?? "planned";
|
||||
frontmatter["iterdef_start"] = frontmatter["iterdef_start"] ?? today;
|
||||
frontmatter["iterdef_end"] = frontmatter["iterdef_end"] ?? today;
|
||||
frontmatter["iterdef_goal"] = frontmatter["iterdef_goal"] ?? "";
|
||||
frontmatter["iterdef_capacity_minutes"] = frontmatter["iterdef_capacity_minutes"] ?? 0;
|
||||
frontmatter["cssclasses"] = frontmatter["cssclasses"] ?? "wide-page";
|
||||
});
|
||||
}, 300)
|
||||
-%>
|
||||
|
||||
## Goal
|
||||
|
||||
|
||||
## Workspace
|
||||
```base
|
||||
filters:
|
||||
and:
|
||||
- file.hasLink(this.file.path)
|
||||
formulas:
|
||||
Aufwand (ET: action_effort_minutes / 60 / 8
|
||||
properties:
|
||||
formula.Aufwand (ET:
|
||||
displayName: Aufwand (ET)
|
||||
views:
|
||||
- type: table
|
||||
name: Table
|
||||
order:
|
||||
- file.name
|
||||
- action_status
|
||||
- formula.Aufwand (ET
|
||||
- action_impact
|
||||
- action_effort_minutes
|
||||
sort:
|
||||
- property: action_status
|
||||
direction: ASC
|
||||
|
||||
```
|
||||
|
||||
## Bound Work
|
||||
```dataview
|
||||
TABLE
|
||||
action_status as "Action",
|
||||
work_status as "Work",
|
||||
round(action_effort_minutes / 60 / 8, 1) as "Aufwand (ET)",
|
||||
action_impact as "Impact"
|
||||
FROM ""
|
||||
WHERE iterbind_target = this.file.link
|
||||
SORT action_impact DESC, action_effort_minutes ASC
|
||||
```
|
||||
@@ -0,0 +1,18 @@
|
||||
<%*
|
||||
// reviewable: marks this note for review, follow-up or data hygiene.
|
||||
const componentName = "reviewable";
|
||||
const file = tp.file.find_tfile(tp.file.path(true));
|
||||
|
||||
setTimeout(async () => {
|
||||
await tp.app.fileManager.processFrontMatter(file, (frontmatter) => {
|
||||
const components = Array.isArray(frontmatter["components"]) ? frontmatter["components"] : [];
|
||||
if (!components.includes(componentName)) components.push(componentName);
|
||||
|
||||
frontmatter["components"] = components;
|
||||
frontmatter["review_status"] = frontmatter["review_status"] ?? "needs_review";
|
||||
frontmatter["review_reason"] = frontmatter["review_reason"] ?? "initial review required";
|
||||
frontmatter["review_next"] = frontmatter["review_next"] ?? "";
|
||||
frontmatter["review_by"] = frontmatter["review_by"] ?? "";
|
||||
});
|
||||
}, 300)
|
||||
-%>
|
||||
@@ -0,0 +1,17 @@
|
||||
<%*
|
||||
// source: records where this note or information came from.
|
||||
const componentName = "source";
|
||||
const file = tp.file.find_tfile(tp.file.path(true));
|
||||
|
||||
setTimeout(async () => {
|
||||
await tp.app.fileManager.processFrontMatter(file, (frontmatter) => {
|
||||
const components = Array.isArray(frontmatter["components"]) ? frontmatter["components"] : [];
|
||||
if (!components.includes(componentName)) components.push(componentName);
|
||||
|
||||
frontmatter["components"] = components;
|
||||
frontmatter["source_target"] = frontmatter["source_target"] ?? "[[]]";
|
||||
frontmatter["source_relation"] = frontmatter["source_relation"] ?? "derived_from";
|
||||
frontmatter["source_excerpt"] = frontmatter["source_excerpt"] ?? "";
|
||||
});
|
||||
}, 300)
|
||||
-%>
|
||||
@@ -0,0 +1,11 @@
|
||||
<%*
|
||||
// base: keeps the note system-ready. File timestamps are managed by Obsidian/plugin metadata.
|
||||
const file = tp.file.find_tfile(tp.file.path(true));
|
||||
|
||||
setTimeout(async () => {
|
||||
await tp.app.fileManager.processFrontMatter(file, (frontmatter) => {
|
||||
frontmatter["components"] = Array.isArray(frontmatter["components"]) ? frontmatter["components"] : [];
|
||||
frontmatter["base_archived"] = frontmatter["base_archived"] ?? false;
|
||||
});
|
||||
}, 300)
|
||||
-%>
|
||||
@@ -0,0 +1,19 @@
|
||||
<%*
|
||||
// temporal: gives this note a date, deadline, reminder or time range.
|
||||
const componentName = "temporal";
|
||||
const today = tp.date.now("YYYY-MM-DD");
|
||||
const file = tp.file.find_tfile(tp.file.path(true));
|
||||
|
||||
setTimeout(async () => {
|
||||
await tp.app.fileManager.processFrontMatter(file, (frontmatter) => {
|
||||
const components = Array.isArray(frontmatter["components"]) ? frontmatter["components"] : [];
|
||||
if (!components.includes(componentName)) components.push(componentName);
|
||||
|
||||
frontmatter["components"] = components;
|
||||
frontmatter["time_at"] = frontmatter["time_at"] ?? today;
|
||||
frontmatter["time_timezone"] = frontmatter["time_timezone"] ?? "Europe/Berlin";
|
||||
frontmatter["time_recurrence"] = frontmatter["time_recurrence"] ?? "";
|
||||
frontmatter["time_precision"] = frontmatter["time_precision"] ?? "date";
|
||||
});
|
||||
}, 300)
|
||||
-%>
|
||||
@@ -0,0 +1,31 @@
|
||||
<%*
|
||||
// work: describes a feature, bug, change, refactor, support item or other work artifact.
|
||||
const componentName = "work";
|
||||
const file = tp.file.find_tfile(tp.file.path(true));
|
||||
|
||||
setTimeout(async () => {
|
||||
await tp.app.fileManager.processFrontMatter(file, (frontmatter) => {
|
||||
const components = Array.isArray(frontmatter["components"]) ? frontmatter["components"] : [];
|
||||
if (!components.includes(componentName)) components.push(componentName);
|
||||
|
||||
frontmatter["components"] = components;
|
||||
frontmatter["work_kind"] = frontmatter["work_kind"] ?? "feature";
|
||||
frontmatter["work_status"] = frontmatter["work_status"] ?? "backlog";
|
||||
frontmatter["work_value"] = frontmatter["work_value"] ?? 3;
|
||||
frontmatter["work_risk"] = frontmatter["work_risk"] ?? 3;
|
||||
frontmatter["work_size"] = frontmatter["work_size"] ?? 1;
|
||||
frontmatter["work_acceptance"] = frontmatter["work_acceptance"] ?? "";
|
||||
});
|
||||
}, 300)
|
||||
-%>
|
||||
|
||||
## Work
|
||||
|
||||
### Problem
|
||||
|
||||
|
||||
### Acceptance
|
||||
|
||||
- [ ]
|
||||
|
||||
### Notes
|
||||
@@ -0,0 +1,19 @@
|
||||
<%*
|
||||
// actionable removal: removes action fields and the actionable component marker.
|
||||
const componentName = "actionable";
|
||||
const file = tp.file.find_tfile(tp.file.path(true));
|
||||
|
||||
setTimeout(async () => {
|
||||
await tp.app.fileManager.processFrontMatter(file, (frontmatter) => {
|
||||
const components = Array.isArray(frontmatter["components"]) ? frontmatter["components"] : [];
|
||||
frontmatter["components"] = components.filter((component) => component !== componentName);
|
||||
|
||||
delete frontmatter["action_status"];
|
||||
delete frontmatter["action_impact"];
|
||||
delete frontmatter["action_effort_minutes"];
|
||||
delete frontmatter["action_blocked_by"];
|
||||
delete frontmatter["action_waiting_for"];
|
||||
delete frontmatter["action_result"];
|
||||
});
|
||||
}, 300)
|
||||
-%>
|
||||
@@ -0,0 +1,12 @@
|
||||
module.exports = function(prop_name) {
|
||||
|
||||
let max = -1;
|
||||
for (const f of app.vault.getMarkdownFiles()) {
|
||||
const fm = app.metadataCache.getFileCache(f)?.frontmatter;
|
||||
if(typeof fm?.[prop_name] === "number") {
|
||||
max = Math.max(max, fm[prop_name])
|
||||
}
|
||||
}
|
||||
|
||||
return max + 1
|
||||
}
|
||||
Reference in New Issue
Block a user