2022 SoY cleanup

main
iOS 3 years ago
parent 47194b3a18
commit 4c354023b1

@ -38,8 +38,8 @@
"obsidian-dialogue-plugin",
"taskbone-ocr-plugin",
"obsidian-journey-plugin",
"link-favicon",
"matter",
"longform",
"obsidian-reminder-plugin"
"obsidian-reminder-plugin",
"card-board"
]

@ -0,0 +1,21 @@
{
"version": "0.2.0",
"data": {
"boardConfigs": [
{
"tag": "dateBoardConfig",
"data": {
"completedCount": 10,
"filters": [],
"includeUndated": true,
"title": "Tasks by date"
}
}
],
"globalSettings": {
"hideCompletedSubtasks": false,
"ignorePaths": [],
"subTaskDisplayLimit": null
}
}
}

File diff suppressed because one or more lines are too long

@ -0,0 +1,10 @@
{
"id": "card-board",
"name": "CardBoard",
"description": "Display markdown tasks on kanban-style boards.",
"version": "0.3.2",
"author": "roovo",
"authorUrl": "https://github.com/roovo",
"minAppVersion": "0.12.13",
"isDesktopOnly": false
}

@ -0,0 +1,511 @@
:root {
--font-normal:16px;
--font-small:13px;
--font-smaller:12px;
--normal-weight:400; /* Switch to 300 if you want thinner default text */
--bold-weight:600; /* Switch to 700 if you want thicker bold text */
--border-width:1px;
--text-title-h1: var(--text-normal);
}
.card-board {
height: 100%;
background-color: var(--background-primary);
}
ul.card-board-tab-list {
display: flex;
list-style-type: none;
margin: 0;
padding: 0;
}
ul.card-board-tab-list > li::before {
content: "";
}
ul.card-board-column-list > li.card-board-card::before {
content: "";
}
li.card-board-pre-tabs, li.card-board-post-tabs {
background-color: var(--background-secondary-alt);
}
li.card-board-pre-tabs .card-board-tabs-inner, li.card-board-post-tabs .card-board-tabs-inner {
width: 20px;
height:100%
}
li.card-board-pre-tabs .card-board-tabs-inner,
li.card-board-post-tabs .card-board-tabs-inner,
li.card-board-tab-title .card-board-tabs-inner {
background-color: var(--background-primary);
}
li.card-board-pre-tabs .card-board-tabs-inner {
padding: 3px 7px;
width: 30px;
}
.card-board-tabs-inner {
padding: 3px 1em;
}
li.is-before-active .card-board-tabs-inner {
border-bottom-right-radius: 10px;
}
li.is-after-active .card-board-tabs-inner {
border-bottom-left-radius: 10px;
}
.card-board-tab-title {
background-color: var(--background-secondary-alt);
border-radius: 5px 5px 0 0 ;
color: var(--text-muted);
cursor: pointer;
}
.card-board-tab-icon {
cursor: pointer;
}
.card-board-tab-title.is-active .card-board-tabs-inner {
background-color: var(--background-secondary-alt);
border-radius: 5px 5px 0 0 ;
color: var(--text-normal);
}
.card-board-boards {
display: grid;
padding: 1em;
padding-bottom: 0.5em;
background-color: var(--background-secondary-alt);
border-radius: 5px;
overflow-x: auto;
}
.card-board-board {
grid-column-start: 1;
grid-row-start: 1;
}
.card-board-columns {
display: grid;
grid-auto-columns: minmax(272px, 1fr);
grid-auto-flow: column;
grid-gap: 1em;
margin-right: 1em;
}
.card-board-column {
padding: 1em;
background-color: var(--background-secondary);
border-radius: 3px;
border: var(--border-width) solid var(--background-modifier-border);
}
.card-board-column-header {
font-weight: var(--bold-weight);
font-size: var(--font-normal);
margin-bottom: 1em;
}
ul.card-board-column-list {
display: grid;
grid-gap: 0.5em;
max-height: calc(100vh - 16em);
list-style-type: none;
margin: 0;
padding: 0;
overflow-y: auto;
}
ul.card-board-column-list > li.card-board-card::before {
content: "";
}
.card-board-card.markdown-preview-view {
border-radius: 3px;
border: var(--border-width) solid var(--background-modifier-border);
background-color: var(--background-primary);
padding: 0;
grid-column-gap: 0.25em;
display: grid;
grid: "mark contents"
/ 5px auto;
}
.card-board-card-highlight-area {
grid-area: mark;
}
.card-board-card-highlight-area.critical {
background-color: var(--text-error);
}
.card-board-card-highlight-area.good {
background-color: var(--interactive-success);
}
.card-board-card-highlight-area.important {
background-color: var(--text-accent);
}
.card-board-card-content-area {
grid-area: contents;
display: grid;
padding: 0.5em;
grid: "tags tags"
"checkbox title"
"subtasks subtasks"
"notes notes"
"footer footer"
/ auto minmax(0, 1fr);
}
.card-board-card-tag-area {
grid-area: tags;
font-size: var(--font-small);
margin-bottom: 0.5em;
}
.card-board-card-tag {
display: inline-block;
margin-right: 0.3em;
}
.cm-s-obsidian div.card-board-card-tag > span.cm-hashtag {
background-color: var(--background-secondary-alt);
border: 1px solid var(--background-modifier-border);
color: var(--text-muted);
font-size: var(--font-adaptive-small);
font-family: var(--font-ui);
text-align: center;
text-decoration: none;
line-height: 1.5em;
display: inline-block;
margin: 2px 0;
vertical-align: middle;
padding-top: 1px;
border-left: none;
border-right: none;
padding-bottom: 2px;
cursor: text;
}
div.card-board-card-tag > span.cm-hashtag.cm-hashtag-begin {
border-top-left-radius: 4px;
border-bottom-left-radius: 4px;
padding-left: 6px;
border-right: none;
border-left: 1px solid var(--background-modifier-border);
}
div.card-board-card-tag > span.cm-hashtag.cm-hashtag-end {
border-top-right-radius: 4px;
border-bottom-right-radius: 4px;
border-left: none;
padding-right: 6px;
border-right: 1px solid var(--background-modifier-border);
}
.card-board-card.markdown-preview-view .task-list-item-checkbox {
grid-area: checkbox;
position: static;
margin: 0;
margin-right: 0.5em;
margin-top: 0.25em;
height: 1em;
width: 1em;
}
/* fixes alignment of checkbox ticks on california coast theme */
.card-board-card-content-area > input[type="checkbox"]:checked:before {
position:static;
}
.card-board-card-title {
grid-area: title;
font-weight: var(--bold-weight);
font-size: var(--font-normal);
display: -webkit-box;
color: var(--text-title-h1);
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
overflow: hidden;
text-overflow: ellipsis;
}
.card-board-card-title p {
display: inline;
}
.card-board-card-subtasks-area {
grid-area: subtasks;
font-size: var(--font-small);
margin-top: 0.5em;
}
/* fixes an issue with themes showing border on the left of lists */
.card-board-card-subtasks-area > ul::before {
border-style: none;
}
.card-board-card-subtask {
display: grid;
grid: "checkbox title"
/ auto minmax(0, 1fr);
}
.card-board-card-subtask .task-list-item-checkbox {
font-size: var(--font-small);
}
.card-board-card-subtask .card-board-card-title {
font-weight: var(--normal-weight);
font-size: var(--font-small);
}
.card-board-card-notes-area {
grid-area: notes;
font-size: var(--font-small);
}
.card-board-card-notes-area > ul::before {
border-style: none;
}
.card-board-card-footer-area {
grid-area: footer;
display: grid;
grid: "due actions"
/ minmax(0, 1fr) auto;
font-size: var(--font-small);
margin-top: 0.5em;
}
.card-board-card-action-area-due {
grid-area: due;
color: var(--text-faint);
}
.card-board-card-action-area-buttons {
grid-area: actions;
display: grid;
grid-auto-flow: column;
grid-gap: 0.5em;
}
.card-board-card-action-area-button {
cursor: pointer;
}
.card-board .modal-content {
display: grid;
grid: "select form"
/ 200px auto;
overflow: hidden;
margin-top: 0;
}
.settings-menu .vertical-tab-header-group-title {
display: grid;
grid-auto-flow: column;
}
.vertical-tab-header-group-title-icon {
justify-self: end;
cursor: pointer;
}
.modal.mod-settings {
width: 80%;
}
.modal.mod-settings .settings-menu.vertical-tab-header {
grid-area: select;
padding-top: 1.5em;
}
.card-board .vertical-tab-nav-item {
padding-right: 1.5em;
}
.modal-form {
display: grid;
grid-gap: 1.5em;
padding-top: 1.3em;
}
.form-item {
display: grid;
grid: "words control";
}
.form-item-name {
grid-area: words;
}
.form-item-control {
grid-area: control;
justify-self: end;
}
.settings-form-container {
grid-area: form;
padding: 2em 0 0.5em 0;
overflow: hidden;
height: 70vh;
}
.settings-form {
padding: 0 2.5em 0 2em;
overflow-y: auto;
height: 100%;
}
.dialog-buttons {
display: grid;
grid-auto-flow: column;
justify-content: center;
padding-top: 2em;
}
.modal-form .dialog-buttons {
border-top: 1px solid var(--background-modifier-border);
}
.card-board .setting-item:first-child {
padding-top: 0;
border-top: none;
}
.card-board .setting-item {
padding: 18px 0 18px 0;
border-top: 1px solid var(--background-modifier-border);
}
.setting-item-control textarea {
min-height: 10em;
min-width: 22em;
}
.multiselect-items {
display: flex;
flex-direction: row;
flex-wrap: wrap;
justify-content: flex-start;
background: var(--background-modifier-form-field);
border: 1px solid var(--background-modifier-border);
border-radius: 4px;
color: var(--text-normal);
padding: 4px 5px;
font-size: var(--font-small);
min-width: 217px;
max-width: 417px;
overflow-x: auto;
gap: 3px;
}
.multiselect-items input.multiselect-input {
border: 0;
min-width: 100px;
font-size: var(--font-small);
}
.multiselect-items input.multiselect-input:focus {
border: 0;
box-shadow: none;
}
.multiselect-item {
white-space: nowrap;
}
.multiselect-item.selected {
cursor: pointer;
vertical-align: middle;
}
.multiselect-item-key {
background-color: var(--background-secondary-alt);
border: 1px solid var(--background-modifier-border);
border-right: 0px;
border-top-left-radius: 4px;
border-bottom-left-radius: 4px;
padding-left: 4px;
padding-right: 4px;
padding-bottom: 2px;
line-height: 1.5em;
vertical-align: middle;
}
.multiselect-item.selected .multiselect-item-key {
background-color: var(--text-muted);
color: var(--text-on-accent);
border-right: 0.5px solid var(--text-on-accent);
}
.multiselect-item.selected .multiselect-item-value {
background-color: var(--text-muted);
color: var(--text-on-accent);
}
.multiselect-items input.multiselect-input {
padding: 2px;
}
.multiselect-item-value {
background-color: var(--background-primary-alt);
border: 1px solid var(--background-modifier-border);
border-left: 0px;
border-top-right-radius: 4px;
border-bottom-right-radius: 4px;
padding-left: 4px;
padding-right: 4px;
padding-bottom: 2px;
line-height: 1.5em;
vertical-align: middle;
}
.card-board .suggestion-container {
display: grid;
grid-auto-flow: row;
grid-gap: 0.5em;
position: relative;
padding: 5px 8px;
font-size: var(--font-small);
text-align: left;
line-height: 1em;
}
.card-board .suggestion-section {
border-top: 1px solid var(--background-modifier-border);
padding-top: 0.5em;
}
.card-board .suggestion-section:first-child {
border-top: none;
}
.card-board .suggestion-section-heading {
color: var(--text-faint);
font-size: var(--font-smaller);
font-weight: var(--bold-weight);
margin-bottom: 3px;
}
.card-board .suggestion-item {
padding-left: 5px;
font-size: var(--font-small);
line-height: 1.3em;
}
.setting-item-control .suggestion-item:hover {
background-color: var(--background-secondary);
}

@ -183,7 +183,7 @@
"current": {
"year": 2022,
"month": 0,
"day": 9
"day": 11
},
"events": [
{
@ -1037,7 +1037,7 @@
"name": "Task"
}
],
"date": 1641025885668,
"date": 1641152142037,
"displayWeeks": false
}
],

@ -1,10 +1,11 @@
{
"currencySymbol": "£",
"ledgerFile": "Ledger.md",
"tutorialIndex": 0,
"currencySymbol": "CHF",
"ledgerFile": "06.01 Finances/2022.ledger",
"includeFinalLineAmount": false,
"enableLedgerVis": false,
"assetAccountsPrefix": "a",
"expenseAccountsPrefix": "e",
"incomeAccountsPrefix": "i",
"liabilityAccountsPrefix": "l"
"assetAccountsPrefix": "assets",
"expenseAccountsPrefix": "expenses",
"incomeAccountsPrefix": "income",
"liabilityAccountsPrefix": "liability"
}

File diff suppressed because one or more lines are too long

@ -5,7 +5,7 @@
"authorUrl": "https://grosinger.net",
"description": "Plain text accounting",
"isDesktopOnly": false,
"version": "0.2.1",
"version": "0.2.2",
"minAppVersion": "0.11.12",
"js": "main.js"
}

@ -16,6 +16,25 @@ Transaction Entry Modal
margin: 5px 0;
}
/*
Dashboard Tutorial
*/
.ledger-tutorial-tooltip {
background: var(--background-secondary) !important;
color: var(--text-normal);
}
.ledger-tutorial-tooltip a[role='button'] {
background: var(--interactive-accent);
color: var(--text-on-accent);
border: none;
border-radius: 4px;
outline: none;
box-shadow: none;
text-shadow: none;
}
/*
Settings Page
*/
@ -846,3 +865,456 @@ Chartist Stylesheet
top: 0;
left: 0;
}
/*
Intro.js
*/
.introjs-overlay {
position: absolute;
-webkit-box-sizing: content-box;
box-sizing: content-box;
z-index: 999999;
opacity: 0;
-webkit-transition: all 0.3s ease-out;
-o-transition: all 0.3s ease-out;
transition: all 0.3s ease-out;
}
.introjs-showElement {
z-index: 9999999 !important;
}
tr.introjs-showElement > td {
z-index: 9999999 !important;
position: relative;
}
tr.introjs-showElement > th {
z-index: 9999999 !important;
position: relative;
}
.introjs-disableInteraction {
z-index: 99999999 !important;
position: absolute;
background-color: #fff;
opacity: 0;
}
.introjs-relativePosition {
position: relative;
}
.introjs-helperLayer {
-webkit-box-sizing: content-box;
box-sizing: content-box;
position: absolute;
z-index: 9999998;
border-radius: 4px;
-webkit-transition: all 0.3s ease-out;
-o-transition: all 0.3s ease-out;
transition: all 0.3s ease-out;
}
.introjs-helperLayer * {
-webkit-box-sizing: content-box;
box-sizing: content-box;
}
.introjs-helperLayer :before {
-webkit-box-sizing: content-box;
box-sizing: content-box;
}
.introjs-helperLayer :after {
-webkit-box-sizing: content-box;
box-sizing: content-box;
}
.introjs-tooltipReferenceLayer {
font-family: 'Helvetica Neue', Inter, ui-sans-serif, 'Apple Color Emoji',
Helvetica, Arial, sans-serif;
-webkit-box-sizing: content-box;
box-sizing: content-box;
position: absolute;
visibility: hidden;
z-index: 100000000;
background-color: transparent;
-webkit-transition: all 0.3s ease-out;
-o-transition: all 0.3s ease-out;
transition: all 0.3s ease-out;
}
.introjs-tooltipReferenceLayer * {
font-family: 'Helvetica Neue', Inter, ui-sans-serif, 'Apple Color Emoji',
Helvetica, Arial, sans-serif;
}
.introjs-helperNumberLayer {
font-family: 'Helvetica Neue', Inter, ui-sans-serif, 'Apple Color Emoji',
Helvetica, Arial, sans-serif;
color: #9e9e9e;
text-align: center;
padding-top: 10px;
padding-bottom: 10px;
}
.introjs-arrow {
border: 5px solid transparent;
content: '';
position: absolute;
}
.introjs-arrow.top {
top: -10px;
left: 10px;
border-bottom-color: #fff;
}
.introjs-arrow.top-right {
top: -10px;
right: 10px;
border-bottom-color: #fff;
}
.introjs-arrow.top-middle {
top: -10px;
left: 50%;
margin-left: -5px;
border-bottom-color: #fff;
}
.introjs-arrow.right {
right: -10px;
top: 10px;
border-left-color: #fff;
}
.introjs-arrow.right-bottom {
bottom: 10px;
right: -10px;
border-left-color: #fff;
}
.introjs-arrow.bottom {
bottom: -10px;
left: 10px;
border-top-color: #fff;
}
.introjs-arrow.bottom-right {
bottom: -10px;
right: 10px;
border-top-color: #fff;
}
.introjs-arrow.bottom-middle {
bottom: -10px;
left: 50%;
margin-left: -5px;
border-top-color: #fff;
}
.introjs-arrow.left {
left: -10px;
top: 10px;
border-right-color: #fff;
}
.introjs-arrow.left-bottom {
left: -10px;
bottom: 10px;
border-right-color: #fff;
}
.introjs-tooltip {
-webkit-box-sizing: content-box;
box-sizing: content-box;
position: absolute;
visibility: visible;
background-color: #fff;
min-width: 250px;
max-width: 300px;
border-radius: 5px;
-webkit-box-shadow: 0 3px 30px rgba(33, 33, 33, 0.3);
box-shadow: 0 3px 30px rgba(33, 33, 33, 0.3);
-webkit-transition: opacity 0.1s ease-out;
-o-transition: opacity 0.1s ease-out;
transition: opacity 0.1s ease-out;
}
.introjs-tooltiptext {
padding: 20px;
}
.introjs-tooltip-title {
font-size: 18px;
margin: 0;
padding: 0;
font-weight: 700;
float: left;
line-height: 32px;
}
.introjs-tooltip-header {
padding-left: 20px;
padding-right: 20px;
padding-top: 10px;
}
.introjs-tooltip-header:after {
content: '.';
visibility: hidden;
display: block;
height: 0;
clear: both;
}
.introjs-tooltipbuttons {
border-top: 1px solid #e0e0e0;
padding: 10px;
text-align: right;
white-space: nowrap;
}
.introjs-tooltipbuttons:after {
content: '';
visibility: hidden;
display: block;
height: 0;
clear: both;
}
.introjs-button {
-webkit-box-sizing: content-box;
box-sizing: content-box;
position: relative;
overflow: visible;
display: inline-block;
padding: 0.5rem 1rem;
border: 1px solid #bdbdbd;
text-decoration: none;
text-shadow: 1px 1px 0 #fff;
font-size: 14px;
color: #424242;
white-space: nowrap;
cursor: pointer;
outline: 0;
background-color: #f4f4f4;
border-radius: 0.2em;
zoom: 1;
}
.introjs-button:hover {
outline: 0;
text-decoration: none;
border-color: #9e9e9e;
background-color: #e0e0e0;
color: #212121;
}
.introjs-button:focus {
outline: 0;
text-decoration: none;
background-color: #eee;
-webkit-box-shadow: 0 0 0 0.2rem rgba(158, 158, 158, 0.5);
box-shadow: 0 0 0 0.2rem rgba(158, 158, 158, 0.5);
border: 1px solid #616161;
color: #212121;
}
.introjs-button:active {
outline: 0;
text-decoration: none;
background-color: #e0e0e0;
border-color: #9e9e9e;
color: #212121;
}
.introjs-button::-moz-focus-inner {
padding: 0;
border: 0;
}
.introjs-skipbutton {
-webkit-box-sizing: content-box;
box-sizing: content-box;
color: #616161;
float: right;
font-size: 20px;
cursor: pointer;
font-weight: 700;
line-height: 1;
text-align: center;
padding: 7px 10px;
}
.introjs-skipbutton:focus,
.introjs-skipbutton:hover {
color: #212121;
outline: 0;
text-decoration: none;
}
.introjs-prevbutton {
float: left;
}
.introjs-nextbutton {
float: right;
}
.introjs-disabled {
color: #9e9e9e;
border-color: #bdbdbd;
-webkit-box-shadow: none;
box-shadow: none;
cursor: default;
background-color: #f4f4f4;
background-image: none;
text-decoration: none;
}
.introjs-disabled:focus,
.introjs-disabled:hover {
color: #9e9e9e;
border-color: #bdbdbd;
-webkit-box-shadow: none;
box-shadow: none;
cursor: default;
background-color: #f4f4f4;
background-image: none;
text-decoration: none;
}
.introjs-hidden {
display: none;
}
.introjs-bullets {
text-align: center;
padding-top: 10px;
padding-bottom: 10px;
}
.introjs-bullets ul {
-webkit-box-sizing: content-box;
box-sizing: content-box;
clear: both;
margin: 0 auto 0;
padding: 0;
display: inline-block;
}
.introjs-bullets ul li {
-webkit-box-sizing: content-box;
box-sizing: content-box;
list-style: none;
float: left;
margin: 0 2px;
}
.introjs-bullets ul li a {
-webkit-transition: width 0.1s ease-in;
-o-transition: width 0.1s ease-in;
transition: width 0.1s ease-in;
-webkit-box-sizing: content-box;
box-sizing: content-box;
display: block;
width: 6px;
height: 6px;
background: #ccc;
border-radius: 10px;
text-decoration: none;
cursor: pointer;
}
.introjs-bullets ul li a:focus,
.introjs-bullets ul li a:hover {
width: 15px;
background: #999;
text-decoration: none;
outline: 0;
}
.introjs-bullets ul li a.active {
width: 15px;
background: #999;
}
.introjs-progress {
-webkit-box-sizing: content-box;
box-sizing: content-box;
overflow: hidden;
height: 10px;
margin: 10px;
border-radius: 4px;
background-color: #e0e0e0;
}
.introjs-progressbar {
-webkit-box-sizing: content-box;
box-sizing: content-box;
float: left;
width: 0%;
height: 100%;
font-size: 10px;
line-height: 10px;
text-align: center;
background-color: #08c;
}
.introjsFloatingElement {
position: absolute;
height: 0;
width: 0;
left: 50%;
top: 50%;
}
.introjs-fixedTooltip {
position: fixed;
}
.introjs-hint {
-webkit-box-sizing: content-box;
box-sizing: content-box;
position: absolute;
background: 0 0;
width: 20px;
height: 15px;
cursor: pointer;
}
.introjs-hint:focus {
border: 0;
outline: 0;
}
.introjs-hint:hover > .introjs-hint-pulse {
background-color: rgba(60, 60, 60, 0.57);
}
.introjs-hidehint {
display: none;
}
.introjs-fixedhint {
position: fixed;
}
@-webkit-keyframes introjspulse {
0% {
-webkit-transform: scale(0.95);
transform: scale(0.95);
-webkit-box-shadow: 0 0 0 0 rgba(0, 0, 0, 0.7);
box-shadow: 0 0 0 0 rgba(0, 0, 0, 0.7);
}
70% {
-webkit-transform: scale(1);
transform: scale(1);
-webkit-box-shadow: 0 0 0 10px transparent;
box-shadow: 0 0 0 10px transparent;
}
100% {
-webkit-transform: scale(0.95);
transform: scale(0.95);
-webkit-box-shadow: 0 0 0 0 transparent;
box-shadow: 0 0 0 0 transparent;
}
}
@keyframes introjspulse {
0% {
-webkit-transform: scale(0.95);
transform: scale(0.95);
-webkit-box-shadow: 0 0 0 0 rgba(0, 0, 0, 0.7);
box-shadow: 0 0 0 0 rgba(0, 0, 0, 0.7);
}
70% {
-webkit-transform: scale(1);
transform: scale(1);
-webkit-box-shadow: 0 0 0 10px transparent;
box-shadow: 0 0 0 10px transparent;
}
100% {
-webkit-transform: scale(0.95);
transform: scale(0.95);
-webkit-box-shadow: 0 0 0 0 transparent;
box-shadow: 0 0 0 0 transparent;
}
}
.introjs-hint-pulse {
-webkit-box-sizing: content-box;
box-sizing: content-box;
width: 15px;
height: 15px;
border-radius: 30px;
background-color: rgba(136, 136, 136, 0.24);
z-index: 10;
position: absolute;
-webkit-transition: all 0.2s ease-out;
-o-transition: all 0.2s ease-out;
transition: all 0.2s ease-out;
-webkit-animation: introjspulse 2s infinite;
animation: introjspulse 2s infinite;
}
.introjs-hint-no-anim .introjs-hint-pulse {
-webkit-animation: none;
animation: none;
}
.introjs-hint-dot {
-webkit-box-sizing: content-box;
box-sizing: content-box;
background: 0 0;
border-radius: 60px;
height: 50px;
width: 50px;
position: absolute;
top: -18px;
left: -18px;
z-index: 1;
opacity: 0;
}

@ -54,32 +54,32 @@ var __async = (__this, __arguments, generator) => {
// node_modules/@aidenlx/obsidian-icon-shortcodes/lib/index.js
var require_lib = __commonJS({
"node_modules/@aidenlx/obsidian-icon-shortcodes/lib/index.js"(exports) {
var t = Object.create;
var o = Object.defineProperty;
var a = Object.getOwnPropertyDescriptor;
var a = Object.create;
var t = Object.defineProperty;
var d = Object.getOwnPropertyDescriptor;
var p = Object.getOwnPropertyNames;
var d = Object.getPrototypeOf;
var l = Object.prototype.hasOwnProperty;
var r = (n) => o(n, "__esModule", { value: true });
var g = (n, e) => {
r(n);
var f = Object.getPrototypeOf;
var g = Object.prototype.hasOwnProperty;
var o = (n) => t(n, "__esModule", { value: true });
var l = (n, e) => {
o(n);
for (var i in e)
o(n, i, { get: e[i], enumerable: true });
t(n, i, { get: e[i], enumerable: true });
};
var c = (n, e, i) => {
if (e && typeof e == "object" || typeof e == "function")
for (let s of p(e))
!l.call(n, s) && s !== "default" && o(n, s, { get: () => e[s], enumerable: !(i = a(e, s)) || i.enumerable });
for (let r of p(e))
!g.call(n, r) && r !== "default" && t(n, r, { get: () => e[r], enumerable: !(i = d(e, r)) || i.enumerable });
return n;
};
var u = (n) => c(r(o(n != null ? t(d(n)) : {}, "default", n && n.__esModule && "default" in n ? { get: () => n.default, enumerable: true } : { value: n, enumerable: true })), n);
g(exports, { getApi: () => P, isPluginEnabled: () => f });
var b = u(require("obsidian"));
var P = (n) => {
var u = (n) => c(o(t(n != null ? a(f(n)) : {}, "default", n && n.__esModule && "default" in n ? { get: () => n.default, enumerable: true } : { value: n, enumerable: true })), n);
l(exports, { getApi: () => s, isPluginEnabled: () => P });
var v = u(require("obsidian"));
var s = (n) => {
var e;
return n ? (e = n.app.plugins.plugins["obsidian-icon-shortcodes"]) == null ? void 0 : e.api : window.IconSCAPIv0;
};
var f = (n) => n.app.plugins.enabledPlugins.has("obsidian-icon-shortcodes");
var P = (n) => s(n) !== void 0;
}
});
@ -87,7 +87,7 @@ var require_lib = __commonJS({
__export(exports, {
default: () => FaviconPlugin
});
var import_obsidian4 = __toModule(require("obsidian"));
var import_obsidian5 = __toModule(require("obsidian"));
// src/settings.ts
var import_obsidian3 = __toModule(require("obsidian"));
@ -153,14 +153,32 @@ var OverwrittenIconModal = class extends import_obsidian2.Modal {
this.domain = value;
});
});
new import_obsidian2.Setting(contentEl).setName("Icon").addText((text) => {
text.setValue(this.icon).onChange((value) => {
this.icon = value;
if (previewEL) {
this.displayPreview(previewEL);
}
});
});
const api = (0, import_obsidian_icon_shortcodes.getApi)(this.plugin);
if (api) {
if (api.version.compare(">=", "0.6.1")) {
new import_obsidian2.Setting(contentEl).setName("Icon").addButton((button) => {
button.setButtonText("Choose").onClick(() => __async(this, null, function* () {
const icon = yield api.getIconFromUser();
console.log(icon);
if (icon) {
this.icon = icon.id;
if (previewEL) {
yield this.displayPreview(previewEL);
}
}
}));
});
} else {
new import_obsidian2.Setting(contentEl).setName("Icon").addText((text) => {
text.setValue(this.icon).onChange((value) => __async(this, null, function* () {
this.icon = value;
if (previewEL) {
yield this.displayPreview(previewEL);
}
}));
});
}
}
previewEL = contentEl.createDiv("preview");
yield this.displayPreview(previewEL);
const footerEl = contentEl.createDiv();
@ -295,6 +313,10 @@ var FaviconSettings = class extends import_obsidian3.PluginSettingTab {
});
}).addExtraButton((b) => {
b.setIcon("trash").setTooltip("Delete").onClick(() => __async(this, null, function* () {
this.plugin.settings.overwritten = this.plugin.settings.overwritten.filter((tmp) => {
return overwritten.domain !== tmp.domain;
});
yield this.plugin.saveSettings();
this.display();
}));
});
@ -355,34 +377,224 @@ var FaviconSettings = class extends import_obsidian3.PluginSettingTab {
// src/main.ts
var import_obsidian_icon_shortcodes3 = __toModule(require_lib());
var FaviconPlugin = class extends import_obsidian4.Plugin {
var import_state2 = __toModule(require("@codemirror/state"));
// src/Decorations.ts
var import_obsidian4 = __toModule(require("obsidian"));
var import_view = __toModule(require("@codemirror/view"));
var import_state = __toModule(require("@codemirror/state"));
var import_language = __toModule(require("@codemirror/language"));
var import_stream_parser = __toModule(require("@codemirror/stream-parser"));
var statefulDecorations = defineStatefulDecoration();
var StatefulDecorationSet = class {
constructor(editor, plugin) {
this.decoCache = Object.create(null);
this.debouncedUpdate = (0, import_obsidian4.debounce)(this.updateAsyncDecorations, 100, true);
this.editor = editor;
this.plugin = plugin;
}
computeAsyncDecorations(tokens) {
return __async(this, null, function* () {
const decorations = [];
for (let token of tokens) {
let deco = this.decoCache[token.value];
if (!deco) {
const provider = providers[this.plugin.settings.provider];
const fallbackProvider = providers[this.plugin.settings.fallbackProvider];
let url;
try {
url = new URL(token.value);
} catch (e) {
console.error("Invalid url: " + token.value);
console.error(e);
}
const icon = yield this.plugin.getIcon(url, provider);
const fallbackIcon = yield this.plugin.getIcon(url, fallbackProvider);
const domain = url.protocol.contains("http") ? url.hostname : url.protocol;
deco = this.decoCache[token.value] = import_view.Decoration.widget({ widget: new IconWidget(this.plugin, icon, fallbackIcon, domain) });
}
decorations.push(deco.range(token.from, token.from));
}
return import_view.Decoration.set(decorations, true);
});
}
updateAsyncDecorations(tokens) {
return __async(this, null, function* () {
const decorations = yield this.computeAsyncDecorations(tokens);
if (decorations || this.editor.state.field(statefulDecorations.field).size) {
this.editor.dispatch({ effects: statefulDecorations.update.of(decorations || import_view.Decoration.none) });
}
});
}
};
function buildViewPlugin(plugin) {
return import_view.ViewPlugin.fromClass(class {
constructor(view) {
this.decoManager = new StatefulDecorationSet(view, plugin);
this.buildAsyncDecorations(view);
}
update(update) {
if (update.docChanged || update.viewportChanged) {
this.buildAsyncDecorations(update.view);
}
}
destroy() {
}
buildAsyncDecorations(view) {
const targetElements = [];
for (let { from, to } of view.visibleRanges) {
const tree = (0, import_language.syntaxTree)(view.state);
tree.iterate({
from,
to,
enter: (type, from2, to2) => {
const tokenProps = type.prop(import_stream_parser.tokenClassNodeProp);
if (tokenProps) {
const props = new Set(tokenProps.split(" "));
const isExternalLink = props.has("url");
const linkText = view.state.doc.sliceString(from2, to2);
if (isExternalLink && linkText.contains("://")) {
const line = view.state.doc.lineAt(from2);
const toLine = line.to - to2;
const toLineT = line.length - toLine;
const fromIndex = line.text.lastIndexOf("[", toLineT);
if (fromIndex === -1) {
return;
}
const fromTarget = line.from + fromIndex;
targetElements.push({ from: fromTarget, to: to2, value: linkText });
}
}
}
});
}
this.decoManager.debouncedUpdate(targetElements);
}
});
}
function asyncDecoBuilderExt(plugin) {
return [statefulDecorations.field, buildViewPlugin(plugin)];
}
function defineStatefulDecoration() {
const update = import_state.StateEffect.define();
const field = import_state.StateField.define({
create() {
return import_view.Decoration.none;
},
update(deco, tr) {
return tr.effects.reduce((deco2, effect) => effect.is(update) ? effect.value : deco2, deco.map(tr.changes));
},
provide: (field2) => import_view.EditorView.decorations.from(field2)
});
return { update, field };
}
var IconWidget = class extends import_view.WidgetType {
constructor(plugin, icon, fallbackIcon, domain) {
super();
this.plugin = plugin;
this.icon = icon;
this.fallbackIcon = fallbackIcon;
this.domain = domain;
}
eq(other) {
return other == this;
}
toDOM() {
if (!this.icon || this.icon === "") {
return document.createElement("span");
}
if (typeof this.icon === "string") {
if (!this.icon.startsWith("http")) {
const span = document.createElement("span");
span.textContent = this.icon;
span.className = "link-favicon";
return span;
}
const el = document.createElement("object");
el.addClass("link-favicon");
el.dataset.host = this.domain;
el.data = this.icon;
el.data.contains(".ico") ? el.type = "image/x-icon" : el.type = "image/png";
el.style.height = "0.8em";
el.style.display = "inline-block";
if (typeof this.fallbackIcon === "string") {
const img = el.createEl("img");
img.src = this.fallbackIcon;
img.addClass("link-favicon");
img.style.height = "0.8em";
img.style.display = "block";
el.append(img);
}
return el;
} else {
return this.icon;
}
}
ignoreEvent() {
return false;
}
};
// src/main.ts
var FaviconPlugin = class extends import_obsidian5.Plugin {
isDisabled(el) {
if (el.getAttribute("data-no-favicon"))
return true;
if (el.getAttribute("data-favicon"))
return true;
}
displayCustomIcon(icons, link, domain) {
if (icons.length > 0) {
const iconApi = (0, import_obsidian_icon_shortcodes3.getApi)(this);
const icon = icons[0].icon;
const icon2 = iconApi.getIcon(icon, false);
if (icon2 !== null) {
if (typeof icon2 !== "string") {
icon2.addClass("link-favicon");
icon2.dataset.host = domain;
}
link.prepend(icon2);
return true;
getCustomDomainIcon(domain) {
if ((0, import_obsidian_icon_shortcodes3.isPluginEnabled)(this)) {
const icons = this.settings.overwritten.filter((value) => value.domain === domain);
if (icons.length > 0) {
const iconApi = (0, import_obsidian_icon_shortcodes3.getApi)(this);
const icon = icons[0].icon;
return iconApi.getIcon(icon, false);
}
}
return false;
}
getCustomSchemeIcon(scheme) {
if ((0, import_obsidian_icon_shortcodes3.isPluginEnabled)(this)) {
const icons = this.settings.protocol.filter((value) => value.domain === scheme.substr(0, scheme.length - 1));
if (icons.length > 0) {
const iconApi = (0, import_obsidian_icon_shortcodes3.getApi)(this);
const icon = icons[0].icon;
return iconApi.getIcon(icon, false);
}
}
}
getIcon(domain, provider) {
return __async(this, null, function* () {
if (!domain.protocol.startsWith("http")) {
const customSchemeIcon = this.getCustomSchemeIcon(domain.protocol);
if (customSchemeIcon) {
if (typeof customSchemeIcon !== "string") {
customSchemeIcon.addClass("link-favicon");
customSchemeIcon.dataset.host = domain.hostname;
}
return customSchemeIcon;
}
}
if (this.settings.ignored.split("\n").contains(domain.hostname)) {
return "";
}
const customDomainIcon = this.getCustomDomainIcon(domain.hostname);
if (customDomainIcon) {
if (typeof customDomainIcon !== "string") {
customDomainIcon.addClass("link-favicon");
customDomainIcon.dataset.host = domain.hostname;
}
return customDomainIcon;
}
return provider.url(domain.hostname, this.settings);
});
}
onload() {
return __async(this, null, function* () {
console.log("enabling plugin: link favicons");
yield this.loadSettings();
this.addSettingTab(new FaviconSettings(this.app, this));
this.registerEditorExtension(import_state2.Prec.lowest(asyncDecoBuilderExt(this)));
this.registerMarkdownPostProcessor((element, ctx) => __async(this, null, function* () {
if (ctx.sourcePath.contains("no-favicon")) {
return;
@ -398,38 +610,48 @@ var FaviconPlugin = class extends import_obsidian4.Plugin {
const link = links.item(index);
if (!this.isDisabled(link)) {
link.dataset.favicon = "true";
let domain;
try {
const domain = new URL(link.href);
if (!domain.protocol.contains("http")) {
if ((0, import_obsidian_icon_shortcodes3.isPluginEnabled)(this)) {
const icons = this.settings.protocol.filter((overwritten) => overwritten.domain === domain.protocol.replace(/:/g, ""));
if (this.displayCustomIcon(icons, link, domain.protocol))
continue;
}
}
if (this.settings.ignored.split("\n").contains(domain.hostname)) {
continue;
}
if ((0, import_obsidian_icon_shortcodes3.isPluginEnabled)(this)) {
const icons = this.settings.overwritten.filter((overwritten) => overwritten.domain === domain.hostname);
if (this.displayCustomIcon(icons, link, domain.hostname))
continue;
domain = new URL(link.href);
} catch (e) {
console.error("Invalid url: " + link.href);
console.error(e);
}
if (!domain)
continue;
const icon = yield this.getIcon(domain, provider);
const fallbackIcon = yield this.getIcon(domain, fallbackProvider);
let el;
if (!icon || icon === "") {
continue;
}
if (typeof icon === "string") {
if (!icon.startsWith("http")) {
el = icon;
} else {
el = document.createElement("object");
el.addClass("link-favicon");
el.dataset.host = domain.hostname;
el.data = icon;
el.data.contains(".ico") ? el.type = "image/x-icon" : el.type = "image/png";
el.style.height = "0.8em";
el.style.display = "inline-block";
}
const el = document.createElement("object");
el.addClass("link-favicon");
el.dataset.host = domain.hostname;
el.data = yield provider.url(domain.hostname, this.settings);
el.data.contains(".ico") ? el.type = "image/x-icon" : el.type = "image/png";
el.style.height = "0.8em";
el.style.display = "inline-block";
} else {
el = icon;
}
if (!el)
continue;
if (typeof el !== "string" && typeof fallbackIcon === "string") {
const img = el.createEl("img");
img.src = yield fallbackProvider.url(domain.hostname, this.settings);
img.src = fallbackIcon;
img.addClass("link-favicon");
img.style.height = "0.8em";
img.style.display = "block";
el.append(img);
}
if (el) {
link.prepend(el);
} catch (e) {
console.log("Link Favicons: invalid url: " + link.href);
}
}
}

@ -1,7 +1,7 @@
{
"id": "link-favicon",
"name": "Link Favicons",
"version": "1.3.2",
"version": "1.4.1",
"minAppVersion": "0.13.14",
"description": "See the favicon for a linked website. ",
"author": "Johannes Theiner",

File diff suppressed because one or more lines are too long

@ -1 +1,10 @@
{"id":"obsidian-icon-shortcodes","name":"Icon Shortcodes","version":"0.6.0","minAppVersion":"0.13.4","description":"Insert emoji and custom icons with shortcodes","author":"AidenLx","authorUrl":"https://github.com/aidenlx","isDesktopOnly":false}
{
"id": "obsidian-icon-shortcodes",
"name": "Icon Shortcodes",
"version": "0.6.1",
"minAppVersion": "0.13.4",
"description": "Insert emoji and custom icons with shortcodes",
"author": "AidenLx",
"authorUrl": "https://github.com/aidenlx",
"isDesktopOnly": false
}

@ -1 +1 @@
.mod-settings .isc-add-pack-input{margin-right:5px}.mod-settings .isc-settings-custom-icon .dragover{position:relative;background-color:var(--shade-10);border-radius:5px}.mod-settings .isc-settings-custom-icon .dragover:before{content:"Drop SVG icon(s) here";font-size:16px;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);color:var(--text-normal)}.theme-dark .mod-settings .isc-settings-custom-icon .dragover{background-color:var(--shade-40)}.mod-settings .isc-settings-custom-icon .dragover>*{filter:blur(50px)}.mod-settings .isc-add-pack-input.invalid,.isc-icon-manager .icons .name textarea.invalid{color:var(--text-error);background:var(--background-primary-alt)}.isc-icon-manager .icons{margin-top:10px;display:grid;grid-auto-rows:auto;grid-auto-columns:-webkit-max-content;grid-auto-columns:max-content;grid-template-columns:repeat(auto-fill,minmax(90px,1fr));grid-column-gap:1rem;grid-row-gap:1rem;text-align:center}.isc-icon-manager .icons .item{outline:none}.isc-icon-manager .icons .item .icon{min-height:64px;display:flex;align-items:center;justify-content:center;background:white;border-radius:6px;box-shadow:0 1px 3px #0000001a,0 1px 2px #0000000f;border:2px solid transparent;font-size:1.6em}.isc-icon-manager .icons .item .icon>img{width:1em;height:1em}.isc-icon-manager .icons .item .name{height:49px;display:flex;justify-content:center;align-content:center;flex-direction:column}.isc-icon-manager .icons .item .name span{font-size:.7em;overflow:hidden;word-wrap:break-word}.isc-icon-manager .icons .item .name textarea{margin-top:5px;width:100%;padding:0 .5em;font-size:14px}.isc-icon-manager .icons .item .name textarea:disabled{padding:0;font-size:16px;border:hidden;text-align:center;background:transparent}.isc-icon-manager .icons .item .buttons button{padding:4px 6px;margin:0 1px}img.isc-icon{display:inline;height:1em;width:1em;vertical-align:text-top}.markdown-preview-view img.isc-icon,.markdown-source-view img.isc-icon{height:var(--editor-font-size);width:var(--editor-font-size)}.theme-dark img.isc-icon.isc-fab,.theme-dark img.isc-icon.isc-far,.theme-dark img.isc-icon.isc-fas,.theme-dark img.isc-icon.isc-rif,.theme-dark img.isc-icon.isc-ril{filter:invert(1)}.isc.suggestion-container .suggestion-item{display:flex;place-content:space-between}.isc.suggestion-container .suggestion-item .shortcode{margin-right:8px}.isc.suggestion-container .suggestion-item img.isc-icon{display:inline;height:var(--font-normal);width:var(--font-normal)}
.mod-settings .isc-add-pack-input{margin-right:5px}.mod-settings .isc-settings-custom-icon .dragover{position:relative;background-color:var(--shade-10);border-radius:5px}.mod-settings .isc-settings-custom-icon .dragover:before{content:"Drop SVG icon(s) here";font-size:16px;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);color:var(--text-normal)}.theme-dark .mod-settings .isc-settings-custom-icon .dragover{background-color:var(--shade-40)}.mod-settings .isc-settings-custom-icon .dragover>*{filter:blur(50px)}.mod-settings .isc-add-pack-input.invalid,.isc-icon-manager .icons .name textarea.invalid{color:var(--text-error);background:var(--background-primary-alt)}.isc-icon-manager .icons{margin-top:10px;display:grid;grid-auto-rows:auto;grid-auto-columns:-webkit-max-content;grid-auto-columns:max-content;grid-template-columns:repeat(auto-fill,minmax(90px,1fr));grid-column-gap:1rem;grid-row-gap:1rem;text-align:center}.isc-icon-manager .icons .item{outline:none}.isc-icon-manager .icons .item .icon{min-height:64px;display:flex;align-items:center;justify-content:center;background:white;border-radius:6px;box-shadow:0 1px 3px #0000001a,0 1px 2px #0000000f;border:2px solid transparent;font-size:1.6em}.isc-icon-manager .icons .item .icon>img{width:1em;height:1em}.isc-icon-manager .icons .item .name{height:49px;display:flex;justify-content:center;align-content:center;flex-direction:column}.isc-icon-manager .icons .item .name span{font-size:.7em;overflow:hidden;word-wrap:break-word}.isc-icon-manager .icons .item .name textarea{margin-top:5px;width:100%;padding:0 .5em;font-size:14px}.isc-icon-manager .icons .item .name textarea:disabled{padding:0;font-size:16px;border:hidden;text-align:center;background:transparent}.isc-icon-manager .icons .item .buttons button{padding:4px 6px;margin:0 1px}img.isc-icon{display:inline;height:1em;width:1em;vertical-align:text-top}.markdown-preview-view img.isc-icon,.markdown-source-view img.isc-icon{height:var(--editor-font-size);width:var(--editor-font-size)}.theme-dark img.isc-icon.isc-fab,.theme-dark img.isc-icon.isc-far,.theme-dark img.isc-icon.isc-fas,.theme-dark img.isc-icon.isc-rif,.theme-dark img.isc-icon.isc-ril{filter:invert(1)}

@ -1,5 +1,8 @@
{
"pluginList": [
"SkepticMystic/email-templates",
"nothingislost/obsidian-cooklang-importer",
"dbarenholz/obsidian-plaintext",
"holubj/obsidian-dialogue-plugin",
"deathau/cooklang-obsidian",
"aidenlx/obsidian-icon-shortcodes",

File diff suppressed because one or more lines are too long

@ -5895,6 +5895,7 @@ body:not(.no-svg-replace) svg.highlight-glyph {
/* Horizontal Split / Split Horizontally */
body:not(.no-svg-replace) svg.horizontal-split {
-webkit-mask-image: url("data:image/svg+xml,%3Csvg version='1.0' xmlns='http://www.w3.org/2000/svg' width='100%25' height='100%25' viewBox='0 0 512 512' preserveAspectRatio='xMidYMid meet'%3E%3Cg transform='translate(0.000000,512.000000) scale(0.100000,-0.100000)'%0Afill='%23000000' stroke='none'%3E%3Cpath d='M2015 4466 c-37 -17 -70 -52 -84 -89 -8 -19 -11 -290 -11 -843 l0%0A-814 -527 0 -528 0 282 283 c304 304 305 306 288 394 -9 49 -69 109 -118 118%0A-91 17 -76 30 -549 -443 -383 -384 -438 -442 -443 -475 -17 -92 -30 -76 443%0A-549 473 -473 458 -460 549 -443 49 9 109 69 118 118 17 88 16 90 -288 395%0Al-282 282 528 0 527 0 2 -829 c3 -820 3 -830 24 -857 39 -53 71 -69 134 -69%0A63 0 95 16 134 69 l21 27 0 1819 0 1819 -21 27 c-11 15 -32 37 -46 47 -34 25%0A-113 32 -153 13z'/%3E%3Cpath d='M2975 4466 c-41 -18 -83 -69 -90 -109 -3 -18 -4 -838 -3 -1824 l3%0A-1792 21 -27 c39 -53 71 -69 134 -69 63 0 95 16 134 69 21 27 21 37 24 857 l2%0A829 527 0 528 0 -282 -282 c-304 -305 -305 -307 -288 -395 9 -49 69 -109 118%0A-118 91 -17 76 -30 549 443 473 473 460 457 443 549 -5 33 -60 91 -443 475%0A-384 383 -442 438 -474 443 -61 11 -108 -3 -149 -44 -41 -41 -55 -88 -44 -148%0A6 -33 45 -77 288 -320 l282 -283 -528 0 -527 0 -2 829 c-3 820 -3 830 -24 857%0A-11 15 -32 37 -46 47 -33 25 -113 32 -153 13z'/%3E%3C/g%3E%3C/svg%3E");
transform: rotate(90deg);
}
/* Image File */

@ -4,12 +4,12 @@
"type": "split",
"children": [
{
"id": "68aa735ee4e32f02",
"id": "0204ce7a98b762a7",
"type": "leaf",
"state": {
"type": "markdown",
"state": {
"file": "03.03 Food & Wine/Chicken Schnitzel.md",
"file": "05.02 Networks/Server Tools.md",
"mode": "preview"
}
}
@ -76,7 +76,7 @@
"state": {
"type": "backlink",
"state": {
"file": "03.03 Food & Wine/Chicken Schnitzel.md",
"file": "05.02 Networks/Server Tools.md",
"collapseAll": false,
"extraContext": false,
"sortOrder": "alphabetical",
@ -129,17 +129,17 @@
}
]
},
"active": "68aa735ee4e32f02",
"active": "0204ce7a98b762a7",
"lastOpenFiles": [
"03.03 Food & Wine/Chicken Schnitzel.md",
"03.03 Food & Wine/Chicken Fried Rice.md",
"03.03 Food & Wine/@Main dishes.md",
"03.03 Food & Wine/@@Recipes.md",
"03.03 Food & Wine/Carne Asada.md",
"03.03 Food & Wine/Lamb Siniyah.md",
"01.02 Home/@Daily tracker.md",
"01.01 Life Orga/Finances.md",
"02.03 Zürich/Recommendation list (Zürich).md",
"05.02 Networks/Selfhosting.md"
"05.02 Networks/Server Tools.md",
"05.02 Networks/Server Alias.md",
"05.02 Networks/Server Cloud.md",
"05.02 Networks/Server VPN.md",
"05.02 Networks/Selfhosting.md",
"05.01 Computer setup/Element.md",
"00.01 Admin/Test sheet.md",
"00.01 Admin/Obsidian plugins.md",
"06.01 Finances/2022.ledger",
"06.02 Investments/Valneva.md"
]
}

@ -84,3 +84,41 @@ Household:
- 🍽️ whole Dishwasher tablets
- 🧂 1 whole Dishwasher salt
- 🚰 0 whole Dishwasher rinsing aid
 
 
 
 
```dataviewjs
const app = this.app;
const metaedit = app.plugins.plugins["metaedit"];
const init_dom = (row) => { const sel = `table.dataview.table-view-table td > span > a[data-href='${row.file.path}']`;
const tr = dv.container.querySelector(sel).closest("tr");
const labels = tr.querySelectorAll("._dataview-labels"); for (let i = 0; i < labels.length; i++) { const data = labels[i].data
const file = app.vault.getAbstractFileByPath(row.file.path);
const prop = {key: data.name, content:data.actual, type: data.type};
labels[i].addEventListener('click', async (evt) => { metaedit.controller.editMetaElement(prop, [], file); }); } }
const field = (row, name, type) => {
let data = {};
data.row = row;
data.name = name;
data.actual = row[name];
data.value = row[name];
data.type = type || 1;
const el = this.container.createEl('span', {"text": row[name] || "-"});
el.classList.add("_dataview-labels");
el.data = data; return el; };
try { var workspace = dv.container.closest("div.workspace-leaf");
var title = workspace.querySelector("div.view-header-title");
var prefix = title.innerHTML;
let pages = dv.pages('"03.03 Food & Wine"') .sort(t => t.file.name) .where(t => t.file.name.startsWith(`${prefix}-`) && t["DocType"] == "Recipe");
dv.table( ["File", "Hours", "Day", "Start Time", "End Time", "Notes", ""], pages .map(t => [ t.file.link, field(t, 'hours'), t["weekday"], field(t, 'startTime'), field(t, 'endTime'), field(t, 'notes') ]) );
setTimeout(function(){
for (let i = 0; i < pages.length; i++) {
init_dom(pages[i]); } }, 0);
}
catch (err) { window.console.info(err); }
```

@ -38,22 +38,6 @@ id CreateNote
```
^button-RecipesNewNote
```button
name Save
type command

@ -156,7 +156,9 @@ title: Installation guides
[Synapse, Matrix homeserver](https://matrix.org/docs/guides/installing-synapse)
[Install tutorial](https://cyberhost.uk/element-matrix-setup/)
[Alternative titorial](https://theselfhostingblog.com/posts/self-hosting-your-own-matrix-server-on-a-raspberry-pi/)
[Alternative tutorial](https://theselfhostingblog.com/posts/self-hosting-your-own-matrix-server-on-a-raspberry-pi/)
[Alternative method: Conduit](https://conduit.rs/)
```
&emsp;

@ -333,6 +333,7 @@ Open source CMS solution: [here](https://gohugo.io/)
|------|---------------------|---------------|-------
<p style="color:orange">Youtube with no ads</p> | **Piped** | [here]([](https://piped-docs.kavin.rocks/docs/self-hosting/)) | videos
<p style="color:orangered">[[NextDNS\|DNS resolver]]</p> | **AdGuard Home** | [here](https://cyberhost.uk/adguard-setup/) | dns-resolver
<p style="color:orange">Online identity</p> | **authentik**<br>**authelia** | [Welcome \| authentik](https://goauthentik.io/)<br>[GitHub - authelia/authelia: The Single Sign-On Multi-Factor portal for web apps](https://github.com/authelia/authelia) | identity
Database: MySQL, MariaDB, Postgres

@ -21,7 +21,7 @@ Characteristics:
Disk:
Capa: 128GB
Type: HDD
UsedSpace: 22%
UsedSpace: 25%
TimeStamp: 2021-11-13
---

@ -19,7 +19,7 @@ Characteristics:
Disk:
Capa: 40GB
Type: SSD
UsedSpace: 32%
UsedSpace: 31%
TimeStamp: 2021-11-13
---

@ -21,7 +21,7 @@ Characteristics:
Disk:
Capa: 30GB
Type: RAID-10
UsedSpace: 18%
UsedSpace: 22%
TimeStamp: 2021-11-13
---

@ -0,0 +1,5 @@
2022/01/01 Starting Balances
assets:Cash:CHF CHF8000.00
expenses:Adjustment:CHF

@ -102,7 +102,7 @@ Currently, Vaneva's pipeline in a nutshell:
- [ ] <mark style="background:grey">Vaccine</mark>: Chikungunya
- [ ] <mark style="background:grey">Vaccine</mark>: Zika
- [ ] <mark style="background:grey">Vaccine</mark>: COVID19
- [ ] <mark style="background:grey">Distribution</mark>: Contract with the EU re COVID19
- [x] <mark style="background:grey">Distribution</mark>: Contract with the EU re COVID19 ✅ 2022-01-01
- [x] <mark style="background:grey">Distribution</mark>: Contract with the UK re COVID19
&emsp;

Loading…
Cancel
Save